package advancedsystemsmanager.items;
import advancedsystemsmanager.AdvancedSystemsManager;
import advancedsystemsmanager.api.items.IItemInterfaceProvider;
import advancedsystemsmanager.api.items.ILeftClickItem;
import advancedsystemsmanager.api.tileentities.IInternalInventory;
import advancedsystemsmanager.api.tileentities.IInternalTank;
import advancedsystemsmanager.api.tileentities.ITileElement;
import advancedsystemsmanager.client.gui.GuiLabeler;
import advancedsystemsmanager.naming.NameRegistry;
import advancedsystemsmanager.network.ASMPacket;
import advancedsystemsmanager.reference.Names;
import advancedsystemsmanager.registry.ItemRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.nbt.NBTTagString;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.StatCollector;
import net.minecraft.world.World;
import net.minecraftforge.fluids.IFluidHandler;
import java.util.ArrayList;
import java.util.List;
public class ItemLabeler extends ItemBase implements IItemInterfaceProvider, ILeftClickItem
{
public static final String LABEL = "Label";
private static List<Class> registeredClasses = new ArrayList<Class>();
public ItemLabeler()
{
super(Names.LABELER);
}
public static List<String> getSavedStrings(ItemStack stack)
{
List<String> result = new ArrayList<String>();
NBTTagCompound tagCompound = stack.getTagCompound();
if (tagCompound == null) return result;
NBTTagList tagList = tagCompound.getTagList("saved", 8);
for (int i = 0; i < tagList.tagCount(); i++)
{
result.add(tagList.getStringTagAt(i));
}
return result;
}
public static void setLabel(ItemStack stack, String string)
{
stack.getTagCompound().setString(LABEL, string);
}
public static void saveStrings(ItemStack stack, List<String> strings)
{
if (!stack.hasTagCompound())
{
stack.setTagCompound(new NBTTagCompound());
}
NBTTagCompound tagCompound = stack.getTagCompound();
NBTTagList tagList = new NBTTagList();
for (String string : strings)
tagList.appendTag(new NBTTagString(string));
tagCompound.setTag("saved", tagList);
}
public static boolean isValidTile(World world, int x, int y, int z)
{
TileEntity te = world.getTileEntity(x, y, z);
return te instanceof IInventory || te instanceof IFluidHandler || te instanceof ITileElement || te instanceof IInternalInventory || te instanceof IInternalTank || isValidClass(te);
}
public static void registerClass(Class clazz)
{
registeredClasses.add(clazz);
}
private static boolean isValidClass(TileEntity te)
{
for (Class registered : registeredClasses)
{
if (registered.isInstance(te)) return true;
}
return false;
}
@Override
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
{
if (world.isRemote)
{
player.openGui(AdvancedSystemsManager.INSTANCE, 0, world, player.chunkCoordX, player.chunkCoordY, player.chunkCoordZ);
}
return super.onItemRightClick(stack, world, player);
}
@Override
@SuppressWarnings(value = "unchecked")
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean extra)
{
super.addInformation(stack, player, list, extra);
String label = getLabel(stack);
if (label.isEmpty()) list.add(StatCollector.translateToLocal(Names.CLEAR_LABEL));
else list.add(StatCollector.translateToLocalFormatted(Names.LABELLED, label));
}
@SideOnly(Side.CLIENT)
@SuppressWarnings(value = "unchecked")
public void getSubItems(Item item, CreativeTabs tab, List list)
{
list.add(ItemRegistry.defaultLabeler);
}
@Override
public boolean onBlockStartBreak(ItemStack stack, int x, int y, int z, EntityPlayer player)
{
return false;
}
public static String getLabel(ItemStack stack)
{
return stack.hasTagCompound() ? stack.getTagCompound().getString(LABEL) : "";
}
@Override
public Container getContainer(ItemStack stack, EntityPlayer player)
{
return null;
}
@Override
@SideOnly(Side.CLIENT)
public GuiScreen getGui(ItemStack stack, EntityPlayer player)
{
return new GuiLabeler(stack, player);
}
@Override
public void readData(ItemStack stack, ASMPacket buf, EntityPlayer player)
{
}
@Override
public boolean leftClick(EntityPlayer player, ItemStack stack, World world, int x, int y, int z, int face)
{
if (ItemLabeler.isValidTile(world, x, y, z))
{
String label = ItemLabeler.getLabel(stack);
if (label.isEmpty())
{
if (NameRegistry.removeName(world, x, y, z))
{
player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocal(Names.LABEL_CLEARED)));
}
} else
{
NameRegistry.saveName(world, x, y, z, label);
player.addChatComponentMessage(new ChatComponentText(StatCollector.translateToLocalFormatted(Names.LABEL_SAVED, label)));
}
return true;
}
return false;
}
}