package cofh.lib.util;
import net.minecraft.block.Block;
/**
* Wrapper for a Block/Metadata combination post 1.7. Quick and dirty, allows for Integer-based Hashes without collisions.
*
* @author King Lemming
*
*/
public final class BlockWrapper {
public Block block;
public int metadata;
public BlockWrapper(Block block, int metadata) {
this.block = block;
this.metadata = metadata;
}
public BlockWrapper set(Block block, int metadata) {
if (block != null) {
this.block = block;
this.metadata = metadata;
} else {
this.block = null;
this.metadata = 0;
}
return this;
}
public boolean isEqual(BlockWrapper other) {
if (other == null) {
return false;
}
if (metadata == other.metadata) {
if (block == other.block) {
return true;
}
if (block != null && other.block != null) {
return block.delegate.get() == other.block.delegate.get();
}
}
return false;
}
protected final int getId() {
return Block.getIdFromBlock(block);
}
@Override
public boolean equals(Object o) {
if (!(o instanceof BlockWrapper)) {
return false;
}
return isEqual((BlockWrapper) o);
}
@Override
public int hashCode() {
return metadata | getId() << 16;
}
@Override
public String toString() {
StringBuilder b = new StringBuilder(getClass().getName());
b.append('@').append(System.identityHashCode(this)).append('{');
b.append("m:").append(metadata).append(", i:").append(block == null ? null : block.getClass().getName());
b.append('@').append(System.identityHashCode(block)).append(", v:");
b.append(getId()).append('}');
return b.toString();
}
}