我不知道這是否會真正使任何意義(我有點糊塗我自己),但我試圖做的就是創建一個小遊戲插件,我試圖使它在地圖之間循環,我創建了一個新的類,它擴展了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