Bukkit API为什么不识别这些块

时间:2015-07-02 22:45:39

标签: java bukkit

我使用的是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);
}

然后,我检查玩家的库存材料,找到每个项目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会跳过铁块和煤块,但不会跳过其他所有内容,我该如何解决?

1 个答案:

答案 0 :(得分:1)

我认为这里的问题都与项目ID有关。

查看Material.getMaterial(int)的Javadoc:

  

已过时。魔术值

This post解释了什么是神奇的价值:

  

魔术值是不能清楚地展示它们代表什么的值,例如,物品ID。他们已经弃用了这些,因为我的世界变化很容易破坏ID系统,他们希望人们使用当前存在的bukkit API Enum等价物。例如,使用Material类型而不是block 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);
}