Java Bukkit API为什么获胜';难道它不认识这些街区吗

Java Bukkit API为什么获胜';难道它不认识这些街区吗,java,bukkit,Java,Bukkit,我使用的是SPIGETAPI 1.8.6,我将bukkit放在标题中,因为它们几乎完全相同 我有一个配置选择,它从配置中获取项目ID及其值。项目ID将转换为物料。但是,跳过了173个和42个铁块和煤块。这就是我所拥有的: for(String key : plugin.getConfig().getConfigurationSection("sellall"+ranks).getKeys(false)) { int id = Integer.valueOf(key); Mater

我使用的是SPIGETAPI 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);
}
然后我检查玩家的材料清单,除了42和173、铁块和煤块之外,每个项目id都会找到材料。我的问题是他们为什么要跳过它们,我如何才能修复它们

以下是我尝试过的,因为它们被跳过了,所以我尝试了以下方法:

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跳过了iron block和coal block,但没有跳过其他所有内容,我该如何修复它?

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

请查看Javadoc以了解:

不赞成。神奇价值

解释什么是魔法值:

魔法值是指不能清楚显示它们所代表的内容的值,例如,一个项目ID。他们不推荐使用这些值,因为minecraft的更改很容易破坏ID系统,并且他们希望人们使用目前存在的bukkit API Enum等价物。例如,使用材质类型而不是块ID

那么你应该改用

您的第一次尝试没有成功,因为
是一个数字。 您必须保存枚举常量(使用)


我试着扫描玩家的库存中的煤和铁块(总是检测到/找到它们)和
Material.getMaterial(41)
以及
Material.getMaterial(173)
返回了正确的材料。我使用了Craftbukkit以及插口版本1.8.3和1.8.7。您的代码中是否有其他原因导致此问题?
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);
}