package advancedsystemsmanager.items;
import advancedsystemsmanager.AdvancedSystemsManager;
import advancedsystemsmanager.reference.Names;
import advancedsystemsmanager.registry.ClusterRegistry;
import advancedsystemsmanager.tileentities.manager.TileEntityManager;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.util.StatCollector;
import net.minecraft.world.World;
import net.minecraftforge.common.DimensionManager;
import java.util.List;
public class ItemRemoteAccessor extends ItemBase
{
public static final String WORLD = "world";
public static final String DIMENSION = "dim";
@SideOnly(Side.CLIENT)
private IIcon[] icons;
public ItemRemoteAccessor()
{
super(Names.REMOTE_ACCESS);
setHasSubtypes(true);
setMaxStackSize(1);
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIconIndex(ItemStack stack)
{
return getIcon(stack, Minecraft.getMinecraft().theWorld);
}
@Override
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
{
if (!world.isRemote && !player.isSneaking() && stack.hasTagCompound())
{
World managerWorld = stack.getItemDamage() == 0 ? world : DimensionManager.getWorld(stack.getTagCompound().getByte(WORLD));
int x = stack.getTagCompound().getInteger(X);
int y = stack.getTagCompound().getInteger(Y);
int z = stack.getTagCompound().getInteger(Z);
if (managerWorld.blockExists(x, y, z))
{
if (ClusterRegistry.MANAGER.getTileEntity(managerWorld, x, y, z) instanceof TileEntityManager)
FMLNetworkHandler.openGui(player, AdvancedSystemsManager.INSTANCE, 1, world, x, y, z);
}
}
return super.onItemRightClick(stack, world, player);
}
@Override
public String getUnlocalizedName(ItemStack stack)
{
return super.getUnlocalizedName(stack) + (stack.getItemDamage() != 0 ? Names.ADVANCED_SUFFIX : "");
}
@Override
@SideOnly(Side.CLIENT)
@SuppressWarnings("unchecked")
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean p_77624_4_)
{
if (stack.hasTagCompound())
{
int dim = stack.getTagCompound().getByte(WORLD);
if (stack.getItemDamage() == 0 && player.getEntityWorld().provider.dimensionId != dim)
{
list.add("§c" + StatCollector.translateToLocal(Names.WRONG_DIMENSION));
}
int x = stack.getTagCompound().getInteger(X);
int y = stack.getTagCompound().getInteger(Y);
int z = stack.getTagCompound().getInteger(Z);
list.add(StatCollector.translateToLocal(Names.LINKED_LOCATION));
list.add(StatCollector.translateToLocalFormatted(Names.LOCATION, x, y, z));
list.add(stack.getTagCompound().getString(DIMENSION));
}
}
@Override
@SideOnly(Side.CLIENT)
@SuppressWarnings(value = "unchecked")
public void getSubItems(Item item, CreativeTabs tab, List list)
{
list.add(new ItemStack(item, 1, 0));
list.add(new ItemStack(item, 1, 1));
}
@Override
@SideOnly(Side.CLIENT)
public void registerIcons(IIconRegister register)
{
icons = new IIcon[5];
icons[0] = register.registerIcon(getIconString());
icons[1] = register.registerIcon(getIconString() + "_advanced");
icons[2] = register.registerIcon(getIconString() + "_off");
icons[3] = register.registerIcon(getIconString() + "_off_advanced");
icons[4] = register.registerIcon(getIconString() + "_disabled");
}
@Override
public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ)
{
if (!world.isRemote && player.isSneaking())
{
TileEntity te = ClusterRegistry.MANAGER.getTileEntity(world, x, y, z);
if (te instanceof TileEntityManager)
{
NBTTagCompound tagCompound = new NBTTagCompound();
tagCompound.setByte(WORLD, (byte) world.provider.dimensionId);
tagCompound.setString(DIMENSION, world.provider.getDimensionName());
tagCompound.setInteger(X, te.xCoord);
tagCompound.setInteger(Y, te.yCoord);
tagCompound.setInteger(Z, te.zCoord);
stack.setTagCompound(tagCompound);
} else
{
stack.setTagCompound(null);
}
return true;
}
return false;
}
@Override
@SideOnly(Side.CLIENT)
public IIcon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining)
{
return getIcon(stack, player.getEntityWorld());
}
@SideOnly(Side.CLIENT)
private IIcon getIcon(ItemStack stack, World world)
{
if (stack.hasTagCompound() && stack.getItemDamage() == 0 && world.provider.dimensionId != stack.getTagCompound().getByte(WORLD))
{
return icons[4];
}
return icons[stack.getItemDamage() + (stack.hasTagCompound() ? 0 : 2)];
}
}