我不知道这是否会真正使任何意义(我有点糊涂我自己),但我试图做的就是创建一个小游戏插件,我试图使它在地图之间循环,我创建了一个新的类,它扩展了BaseGame,我将插件实例,世界名称和xml文件名传递给超类BaseGame,然后basegame类从xml文件和设置变量中解析信息。我在一边有些方法延长BaseGame因为大多数地图都有不同的游戏类型,所以我需要为不同的事件例如在TDM我需要停下来的球员打破做不同的事情类本,所以我想这样做在听者返回扩展分类
@EventHandler
public void blockDestroy(BlockBreakEvent event) {
plugin.mapCycler.getCurrentWorld().onBreakEvent(event);
}
我面对的问题是从MapCycler类返回当前的世界,因为所有的地图类都有不同的方法,我需要一种方法来返回地图类的一般方法,该方法可以返回所有扩展BaseGame的地图类,但我仍然需要能够访问扩展BaseGame的类中的方法。
请告诉我,如果你需要进一步澄清。
感谢
编辑1:
在BaseGame类,它就是将所有扩展BaseGame例如这些方法的世界类使用将在所有扩展BaseGame
类使用常见的方法public String getMapName() {
return xmlFileReader.getMapName();
}
public String getMapObjective() {
return xmlFileReader.getMapObjective();
}
public void resetInventory(Player player) {
player.getInventory().clear();
player.getInventory().setArmorContents(null);
player.setHealth(20);
player.setFlying(false);
player.setGameMode(GameMode.SURVIVAL);
player.setFoodLevel(20);
}
和扩大BaseGame类它将具有独特的方法,该方法涉及到世界例如类
public void blueWin() {
Bukkit.getServer().broadcastMessage(Messages.colorize("Blue win - nice message in update"));
for(String player : blueTeamList) {
Player blue = Bukkit.getServer().getPlayer(player);
resetInventory(blue);
Packet206SetScoreboardObjective packet = new Packet206SetScoreboardObjective(plugin.relicWorld.sb.getObjective(plugin.relicWorld.name), 1);//Create Scoreboard create packet
sendPacket(blue, packet);
String loc = DatabaseManager.getLastLoc("SELECT * FROM ag_users WHERE user = \'" + blue.getName() + "\'");
blue.teleport(LocationManager.stringToLoc(loc));
Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "eco give " + blue.getName() + " 250");
}
for(String player : redTeamList) {
Player red = Bukkit.getServer().getPlayer(player);
resetInventory(red);
Packet206SetScoreboardObjective packet = new Packet206SetScoreboardObjective(plugin.relicWorld.sb.getObjective(plugin.relicWorld.name), 1);//Create Scoreboard create packet
sendPacket(red, packet);
String loc = DatabaseManager.getLastLoc("SELECT * FROM ag_users WHERE user = \'" + red.getName() + "\'");
red.teleport(LocationManager.stringToLoc(loc));
Bukkit.getServer().dispatchCommand(Bukkit.getServer().getConsoleSender(), "eco give " + red.getName() + " 50");
}
Bukkit.unloadWorld(getWorld(), false);
resetAll();
}
因为它是世界独一无二的。
请张贴一个示例,显示您可能需要调用不同对象的方法。常用的方法有哪些? – 2013-04-04 16:14:41
我已更新我的帖子。 – DCSoftware 2013-04-04 16:23:12