簡體   English   中英

Bukkit API為什么不能識別這些塊

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

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