[英]Bukkit API why won't it recognize these blocks
我使用的是Spigot API 1.8.6,因此將bukkit放在標題中是因為它們實際上幾乎完全相同。
我有一個配置選擇,可從配置中獲取項目ID及其值。 物料ID變成物料。 但是,分別跳過了鐵塊和煤塊的173和42。 這就是我所擁有的:
for(String key : plugin.getConfig().getConfigurationSection("sellall"+ranks).getKeys(false))
{
int id = Integer.valueOf(key);
Material material = Material.getMaterial(id);
}
然后,我檢查玩家的物料清單,找到每個物料的編號為BESIDES 42和173,鐵塊和煤塊的物料。 我的問題是為什么他們跳過它們,我該如何解決。
這是我嘗試過的方法,因為它們被跳過了,所以我嘗試了以下方法:
String f = key;
Material mat = Material.getMaterial(f.toUpperCase());
if(mat == Material.IRON_BLOCK||mat == Material.COAL_BLOCK)
{
// continue with code like the else
}
else
{
// same code as if they are iron block or coal block
}
但是,此操作相同,並跳過它們。
注意:我嘗試了多個版本的插頭
最后的問題:為什么Bukkit / Spigot API跳過鐵塊和煤塊,而不跳過其他所有東西,我將如何解決?
我認為這里的問題全都與商品ID有關。
在Javadoc中查看Material.getMaterial(int)
:
已過時。 魔術值
這篇文章解釋了什么是神奇的價值:
魔術值是無法清楚表明其含義的值,例如,物品ID。 他們已棄用這些工具,因為Minecraft的更改很容易破壞ID系統,並且希望人們使用當前存在的bukkit API枚舉等效項。 例如,使用材料類型而不是塊ID。
然后,您應該改用Material.getMaterial(String)
。
您的第一次嘗試無效,因為key
是數字。 您必須改為保存枚舉常量(使用Enum.name()
)。
FileConfiguration config; // ...
ConfigurationSection path = config.getConfigurationSection("sellall" + ranks);
Material key = Material.IRON_BLOCK;
Object value; // ...
path.set(key.name(), value);
for (String key : path.getKeys(false)) {
Material material = Material.getMaterial(key);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.