簡體   English   中英

Bukkit-為什么要鑄造成易損件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM