[英]Bukkit - Why does casting to Damageable work?
從Bukkit 1.6.4開始,還有另一種處理玩家生命的方法,從現在開始,生命被存儲為兩倍。 為了與較舊的插件兼容, Player.getHealth()
方法模棱兩可,其中包括:
@Deprecated
public int getHealth();
public double getHealth();
我試圖使用Player.getHealth()
並最終出現錯誤。 我在尋找解決方案,但是類似double d = (double) player.getHealth()
或double d = new Double(player.getHealth());
仍然拋出錯誤The method getHealth() of Player is ambigious
(我正在使用Eclipse btw。)。 但是經過一番搜索,我也發現了這一點:
Damageable d = player; //because player is a Damageable
double health = d.getHealth();
//the method called is the "new one", which returns a double
我不明白為什么這行得通,因為我研究了Damageable,並且在Damageable中已經定義了兩種模棱兩可的方法。 上述錯誤也應該在這里發生。 我哪里錯了? 我想念什么?
提前致謝。
這是因為在Minecraft 1.6.4及更高版本中,運行狀況現在存儲在浮動對象中。 Bukkit決定使用double,以防止將來從float變為double。 如果您在任何地方都不使用NMS
,請僅使用bukkit
,而不要使用craftbukkit
,因為這樣做可以使您可以將double d = player.getHealth();
。 否則,如果您需要craftbukkit
,你可以把bukkit
高於craftbukkit
在構建層次結構。
Damageable.getHealth()
是從Bukkit的方法,所以它不會被棄用,而Player.getHealth()
是在CraftBukkit(方法CraftBukkit使用代碼大多從原來的Minecraft服務器(稱為NMS),所以它是不推薦使用。雖然如果你要刪除CraftBukkit
從您的構建路徑,或將Bukkit
它上面,然后Player.getHealth()
會工作。
Bukkit已棄用使用整數的.getHealth()
方法,盡管它們仍然可以使用,但很快將被刪除。 因此,目前,您需要使用double health = ((Damageable) player).getHealth();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.