package ttftcuts.physis.common.compat.baubles;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import ttftcuts.physis.Physis;
import ttftcuts.physis.client.texture.ToneSplitTexture;
import ttftcuts.physis.common.artifact.PhysisArtifacts;
import ttftcuts.physis.common.helper.TextureHelper;
import ttftcuts.physis.common.item.ItemPhysis;
import ttftcuts.physis.common.item.material.PhysisToolMaterial;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.StatCollector;
import net.minecraft.util.WeightedRandomChestContent;
import net.minecraftforge.common.ChestGenHooks;
import baubles.api.BaubleType;
import baubles.api.IBauble;
public class ItemMaterialRing extends ItemPhysis implements IBauble {
private IIcon fallbackicon;
private List<IIcon> layerIcons;
public ItemMaterialRing() {
super();
this.setMaxStackSize(1);
this.setUnlocalizedName("baublering");
this.setTextureName("baubles/ring");
this.hasSubtypes = true;
}
@Override
public BaubleType getBaubleType(ItemStack itemstack) {
return BaubleType.RING;
}
@Override
public void onWornTick(ItemStack itemstack, EntityLivingBase player) {}
@Override
public void onEquipped(ItemStack itemstack, EntityLivingBase player) {}
@Override
public void onUnequipped(ItemStack itemstack, EntityLivingBase player) {}
@Override
public boolean canEquip(ItemStack itemstack, EntityLivingBase player) {
return true;
}
@Override
public boolean canUnequip(ItemStack itemstack, EntityLivingBase player) {
return true;
}
@Override
public int getDamage(ItemStack stack)
{
PhysisToolMaterial mat = PhysisToolMaterial.getMaterialFromItemStack(stack);
if (mat != null) {
stack.setItemDamage(mat.id);
return mat.id;
}
return 32767;
}
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public void getSubItems(Item item, CreativeTabs tab, List types) {
List<ItemStack> rings = new ArrayList<ItemStack>();
for(Entry<String,PhysisToolMaterial> entry : PhysisToolMaterial.materials.entrySet()) {
PhysisToolMaterial mat = entry.getValue();
ItemStack stack = new ItemStack(this, 1, mat.id);
PhysisToolMaterial.writeMaterialToStack(mat, stack);
PhysisArtifacts.addSocketToItem(stack);
rings.add(stack);
}
types.addAll(rings);
}
@Override
public String getItemStackDisplayName(ItemStack stack)
{
String ring = ("" + StatCollector.translateToLocal(this.getUnlocalizedNameInefficiently(stack) + ".name")).trim();
String regex = StatCollector.translateToLocal("item.physis:material.regex");
if (regex.equals("item.physis:material.regex")) {
Physis.logger.warn("Material regex localisation failure, setting to default");
regex = "(^\\w*)(?=\\sPick(axe)?)";
}
Pattern p;
try {
p = Pattern.compile(regex);
} catch (PatternSyntaxException e) {
Physis.logger.warn("Material regex compilation failure, falling back", e);
p = Pattern.compile("(^\\w*)(?=\\sPick(axe)?)");
}
PhysisToolMaterial mat = PhysisToolMaterial.getMaterialFromItemStack(stack);
if (mat != null)
{
String fullpick = mat.pick.getDisplayName();
Matcher m = p.matcher(fullpick);
if (m.find()) {
String pickmat = m.group(1);
return pickmat +" "+ ring;
} else if (mat.orematerial != null) {
return mat.orematerial +" "+ ring;
}
}
return ring;
}
@Override
@SideOnly(Side.CLIENT)
public boolean requiresMultipleRenderPasses()
{
return true;
}
@Override
public int getRenderPasses(int metadata) {
return 9;
}
@Override
public IIcon getIcon(ItemStack stack, int pass)
{
PhysisToolMaterial mat = PhysisToolMaterial.getMaterialFromItemStack(stack);
if (mat != null && mat.hastint) {
return this.layerIcons.get(pass);
}
return fallbackicon;
}
@Override
@SideOnly(Side.CLIENT)
public int getColorFromItemStack(ItemStack stack, int pass)
{
PhysisToolMaterial mat = PhysisToolMaterial.getMaterialFromItemStack(stack);
if (mat != null) {// && mat.hastint) {
int[] tints = mat.getHeadTints();
if (pass == 0) {
return tints[0];
}
else if (pass == 1) {
return tints[1];
}
else if (pass == 2) {
return tints[2];
}
else if (pass == 3) {
return tints[3];
}
else if (pass == 4) {
return tints[2];
}
else if (pass == 5) {
return tints[4];
}
else if (pass == 6) {
return tints[5];
}
else if (pass == 7) {
return tints[7];
}
else if (pass == 8) {
return tints[9];
}
}
return 0xFFFFFF;
}
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister register)
{
super.registerIcons(register);
ResourceLocation ring = new ResourceLocation(Physis.MOD_ID, "textures/items/baubles/ring.png");
fallbackicon = register.registerIcon(Physis.MOD_ID+":baubles/ring");
layerIcons = new ArrayList<IIcon>();
if (!(register instanceof TextureMap)) {return;}
TextureMap map = (TextureMap)register;
for(int i=0; i<9; i++) {
ResourceLocation t = TextureHelper.loadTexture(Physis.MOD_ID+":baubles/ring_"+i, new ToneSplitTexture(ring, i));
this.layerIcons.add( TextureHelper.getIconForDynamicResource(map, Physis.MOD_ID+":baubles/ring_"+i, t, true) );
}
}
@Override
public WeightedRandomChestContent getChestGenBase(ChestGenHooks chest, Random rnd, WeightedRandomChestContent original)
{
ItemStack stack = original.theItemId;
PhysisToolMaterial.writeMaterialToStack(PhysisToolMaterial.getRandomMaterial(rnd), stack);
PhysisArtifacts.addSocketToItem(stack);
if (rnd.nextInt(5) == 0) {
PhysisArtifacts.addSocketToItem(stack);
}
if (rnd.nextInt(50) == 0) {
PhysisArtifacts.addSocketToItem(stack);
}
original.theItemId = stack;
return original;
}
}