套管改变染色的粘土颜色

时间:2017-09-05 23:10:43

标签: java minecraft bukkit

这是我的搜索代码:

for(int x = -100; x < 100; x ++)
{
    for(int z = -100; z < 100; z ++)
    {
        for(int y = 0; y < 50; y ++)
        {
            Location loc = new Location(Bukkit.getWorld(map_name), x, y, z);
            Block block = loc.getBlock();
            if(block.getType()
                .equals(ConstantsManager.ground_material))
            {
                if(block.getType().getData()
                    .equals(ConstantsManager.ground_redId))
                    orig_redClay.add(block);
                if(block.getType().getData()
                    .equals(ConstantsManager.ground_blueId))
                    orig_blueClay.add(block);
            }
        }
    }
}

在静态类ConstantsManager

public static final Material ground_material = Material.STAINED_CLAY;

public static final int ground_blueId = 3;
public static final int ground_redId = 14;

应该在100 * 50 * 100的体积中搜索红色或蓝色的粘土,调用ConstantsManager获取材料和颜色值。代码能够检测块是否是粘土,但无法检测它是红色还是蓝色。为了检测粘土颜色,我可以在代码中更改什么?

2 个答案:

答案 0 :(得分:2)

您的问题是您正在使用block.getType().getData()。你想要使用

<强> block.getData()

block.getType().getData()似乎正在返回Class<? extends MaterialData>,这绝对不等于您尝试将其与之比较的int。 (不太确定该方法返回的是什么)

总结一下你的if语句应如下所示。

if (block.getData() == ConstantsManager.ground_redId)

注意:您不能在原始Java数据类型上使用.equals,因此==

答案 1 :(得分:0)

快速搜索后,Block class应该包含一个名为blockID的公共int变量。因此,您应该可以调用它并执行以下操作

if(block.getType().equals(ConstantsManager.ground_material))
{
    if(block.blockID == ConstantsManager.ground_blueId)
    {
        orig_blueClay.add(block);
    }
    else if(block.blockID == ConstantsManager.ground_redId)
    {
        orig_redClay.add(block);
    }
}