package com.jaquadro.minecraft.gardencore.util;
import com.google.common.base.Objects;
import cpw.mods.fml.common.registry.GameData;
import cpw.mods.fml.common.registry.GameRegistry;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraftforge.oredict.OreDictionary;
public final class UniqueMetaIdentifier
{
public final String modId;
public final String name;
public final int meta;
private GameRegistry.UniqueIdentifier cachedUID;
public UniqueMetaIdentifier (String modId, String name) {
this.modId = modId;
this.name = name;
this.meta = OreDictionary.WILDCARD_VALUE;
}
public UniqueMetaIdentifier (String modId, String name, int meta) {
this.modId = modId;
this.name = name;
this.meta = meta;
}
public UniqueMetaIdentifier (String qualifiedName, int meta) {
String[] parts = qualifiedName.split(":");
this.modId = parts[0];
this.name = parts[1];
this.meta = meta;
}
public UniqueMetaIdentifier (String compoundName) {
String[] parts1 = compoundName.split(";");
String[] parts2 = parts1[0].split(":");
this.modId = parts2[0];
if (parts2.length >= 2)
this.name = parts2[1];
else
this.name = "";
if (parts1.length >= 2)
this.meta = Integer.parseInt(parts1[1]);
else if (parts2.length > 2)
this.meta = Integer.parseInt(parts2[parts2.length - 1]);
else
this.meta = OreDictionary.WILDCARD_VALUE;
}
public UniqueMetaIdentifier (String compoundName, char separator) {
String[] parts1 = compoundName.split("[ ]*" + separator + "[ ]*");
String[] parts2 = parts1[0].split(":");
this.modId = parts2[0];
if (parts2.length >= 2)
this.name = parts2[1];
else
this.name = "";
if (parts1.length >= 2)
this.meta = Integer.parseInt(parts1[1]);
else
this.meta = OreDictionary.WILDCARD_VALUE;
}
public GameRegistry.UniqueIdentifier getUniqueIdentifier () {
if (cachedUID == null)
cachedUID = new GameRegistry.UniqueIdentifier(modId + ":" + name);
return cachedUID;
}
public Block getBlock () {
return GameRegistry.findBlock(modId, name);
}
public Item getItem () {
return GameRegistry.findItem(modId, name);
}
@Override
public boolean equals (Object obj) {
if (obj == null)
return false;
if (obj.getClass() != getClass())
return false;
final UniqueMetaIdentifier other = (UniqueMetaIdentifier) obj;
return Objects.equal(modId, other.modId)
&& Objects.equal(name, other.name)
&& meta == other.meta;
}
@Override
public int hashCode () {
return Objects.hashCode(modId, name) ^ (meta * 37);
}
@Override
public String toString () {
return String.format("%s:%s;%d", modId, name, meta);
}
public static UniqueMetaIdentifier createFor (ItemStack itemStack) {
if (itemStack.getItem() == null)
return null;
String name = GameData.getItemRegistry().getNameForObject(itemStack.getItem());
return new UniqueMetaIdentifier(name, itemStack.getItemDamage());
}
public static UniqueMetaIdentifier createFor (Block block, int meta) {
if (block == null)
return null;
String name = GameData.getBlockRegistry().getNameForObject(block);
return new UniqueMetaIdentifier(name, meta);
}
public static UniqueMetaIdentifier createFor (Block block) {
if (block == null)
return null;
String name = GameData.getBlockRegistry().getNameForObject(block);
return new UniqueMetaIdentifier(name);
}
}