package org.ultramine.libtest;
import net.minecraft.block.Block;
import net.minecraftforge.oredict.OreDictionary;
import javax.annotation.Nonnull;
import java.util.Objects;
public class UBlockState
{
@Nonnull private final Block block;
@Nonnull private final int meta;
public UBlockState(@Nonnull Block block, int meta)
{
if(meta != OreDictionary.WILDCARD_VALUE) //allow wildcard value
checkBlockMeta(meta);
this.block = block;
this.meta = meta;
}
public UBlockState(Block block)
{
this(block, 0);
}
@Nonnull
public Block getType()
{
return block;
}
public int getMeta()
{
return meta;
}
public boolean isType(Block block)
{
return Block.isEqualTo(getType(), block);
}
public boolean isType(Block block, int meta)
{
return isType(block) && (this.meta == meta || meta == OreDictionary.WILDCARD_VALUE || this.meta == OreDictionary.WILDCARD_VALUE);
}
public boolean isType(UBlockState other)
{
return isType(other.getType()) && (this.meta == other.meta || this.meta == OreDictionary.WILDCARD_VALUE || other.meta == OreDictionary.WILDCARD_VALUE);
}
@Nonnull
public UBlockState withMeta(int meta)
{
return new UBlockState(block, meta);
}
@Override
public int hashCode()
{
return Block.getIdFromBlock(block); //ignoring metadata in hash
}
@Override
public boolean equals(Object o)
{
if(this == o)
return true;
if(o == null || getClass() != o.getClass())
return false;
UBlockState other = (UBlockState) o;
return Objects.equals(this.block, other.block) && (this.meta == other.meta
|| this.meta == OreDictionary.WILDCARD_VALUE || other.meta == OreDictionary.WILDCARD_VALUE);
}
public static UBlockState of(Object o)
{
if (o == null)
throw new NullPointerException();
if (o instanceof UBlockState)
return (UBlockState) o;
else if (o instanceof Block)
return new UBlockState((Block) o, 0);
throw new IllegalArgumentException("Unknown block type: " + o.getClass());
}
private static void checkBlockMeta(int meta) throws IllegalArgumentException
{
if(meta > 15 || meta < 0)
throw new IllegalArgumentException("Block meta cat't be more then 15 or less then 0. Given: " + meta);
}
}