您好,我开始学习编写minecraft bukkit插件,只需几天,所以请不要责怪我,如果我的问题很蠢。我想创建一个新的MyPlayer类,它将是Player子类。我已经发现Player的根目录是org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer,所以我可以这样做:public class OticPlayer extends org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer
。我希望MyClass包含他所有的父方法,但添加一些它自己的方法。问题是,当我使用:Bukkit.getPlayerExact(arg3[1])
它返回对Player类型对象的引用。我有一个带有方法addPlayer(MyPlayer arg0)
的Lobby类,所以我需要对MyPlayer类型对象的引用,而不是Player。当我尝试将播放器类型引用投射到MyPlayer时,会引发异常:java.lang.ClassCastException: org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer cannot be cast to me.gtddd.my.MyPlayer
。我需要将MyPlayer类型引用传递给addPlayer()方法,因为我想创建某种统计系统(K/D/A),这些统计信息中的每一个必须是可由MyPlayer类型对象访问的池。那么我该如何将Player播放到MyPlayer?示例代码生成此问题:我在将播放器播放到MyPlayer时遇到问题
package test;
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v1_12_R1.CraftServer;
import org.bukkit.plugin.java.JavaPlugin;
import me.gtddd.otic.OticPlayer;
import net.minecraft.server.v1_12_R1.EntityPlayer;
public class MyPlayer extends org.bukkit.craftbukkit.v1_12_R1.entity.CraftPlayer {
public MyPlayer(CraftServer server, EntityPlayer entity) {
super(server, entity);
}
int kills = 0;
int deaths = 0;
int assists = 0;
public int getKda() {
return kills/deaths/assists;
}
}
public class Lobby {
MyPlayer[] players = new MyPlayer[10];
public void addPlayer(MyPlayer arg0) {
players[players.length] = arg0;
}
public MyPlayer getPlayer(int slot) {
return players[slot-1];
}
}
public class Main extends JavaPlugin {
@Override
public void onEnable() {
Lobby lobby1 = new Lobby();
MyPlayer player = (MyPlayer) Bukkit.getPlayerExact("Notch");
lobby1.addPlayer(player);
System.out.println(lobby1.getPlayer(1).getKda());
}
}
我看了很多找到答案,但我没能找到anythink什么会满足我。从顶端:感谢所有答案!如果一个问题不清楚问。