这是我的搜索代码:
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获取材料和颜色值。代码能够检测块是否是粘土,但无法检测它是红色还是蓝色。为了检测粘土颜色,我可以在代码中更改什么?
答案 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);
}
}