Search code examples
javaminecraftbukkit

Spigot change stained clay color


This is my searching code:

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);
            }
        }
    }
}

In the static class ConstantsManager

public static final Material ground_material = Material.STAINED_CLAY;

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

It is supposed to search through the 100*50*100 volume for red or blue stained clay, calling on ConstantsManager for the material and color values. The code is able to detect whether the block is clay or not, but is not able to detect if it is red or blue. What can I change in my code in order to detect the clay colors?


Solution

  • You're problem is you're using block.getType().getData(). You want to be using

    block.getData()

    block.getType().getData() seems to be returning Class<? extends MaterialData> which is most definitely not equals to the int that you're trying to compare it to. (Not too sure what that method returns myself)

    To summarize one of your if statements should look like this.

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

    Note: You can't use .equals on primitive Java data types, hence the ==