2013-08-23 16:59:50 +02:00
|
|
|
package com.pahimar.ee3.item;
|
|
|
|
|
2023-01-03 17:47:36 +01:00
|
|
|
import java.util.List;
|
|
|
|
import java.util.UUID;
|
|
|
|
|
2014-03-27 02:01:54 +01:00
|
|
|
import com.pahimar.ee3.EquivalentExchange3;
|
2016-05-27 17:10:38 +02:00
|
|
|
import com.pahimar.ee3.reference.Colors;
|
|
|
|
import com.pahimar.ee3.reference.GUIs;
|
|
|
|
import com.pahimar.ee3.reference.Names;
|
|
|
|
import com.pahimar.ee3.reference.Textures;
|
2014-03-28 20:54:15 +01:00
|
|
|
import com.pahimar.ee3.util.ColorHelper;
|
2014-07-18 21:55:10 +02:00
|
|
|
import com.pahimar.ee3.util.IOwnable;
|
2016-05-27 22:03:14 +02:00
|
|
|
import com.pahimar.ee3.util.ItemStackUtils;
|
2014-03-28 20:54:15 +01:00
|
|
|
import com.pahimar.ee3.util.NBTHelper;
|
2013-08-23 16:59:50 +02:00
|
|
|
import cpw.mods.fml.relauncher.Side;
|
|
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
2014-03-28 20:54:15 +01:00
|
|
|
import net.minecraft.client.renderer.texture.IIconRegister;
|
2014-02-02 03:23:47 +01:00
|
|
|
import net.minecraft.creativetab.CreativeTabs;
|
2013-12-16 02:26:42 +01:00
|
|
|
import net.minecraft.entity.player.EntityPlayer;
|
2014-03-28 20:54:15 +01:00
|
|
|
import net.minecraft.item.Item;
|
2013-12-16 02:26:42 +01:00
|
|
|
import net.minecraft.item.ItemStack;
|
|
|
|
import net.minecraft.nbt.NBTTagCompound;
|
2014-03-28 20:54:15 +01:00
|
|
|
import net.minecraft.util.IIcon;
|
2014-02-02 03:23:47 +01:00
|
|
|
import net.minecraft.util.MathHelper;
|
2013-12-16 02:26:42 +01:00
|
|
|
import net.minecraft.world.World;
|
2013-08-23 16:59:50 +02:00
|
|
|
|
2023-01-03 17:47:36 +01:00
|
|
|
public class ItemAlchemicalBag extends ItemEE implements IOwnable {
|
|
|
|
private static final String[] ALCHEMICAL_BAG_ICONS
|
|
|
|
= { "open", "closed", "symbolTier1", "symbolTier2", "symbolTier3" };
|
2013-08-23 16:59:50 +02:00
|
|
|
|
|
|
|
@SideOnly(Side.CLIENT)
|
2014-03-28 20:54:15 +01:00
|
|
|
private IIcon[] icons;
|
2013-08-23 16:59:50 +02:00
|
|
|
|
2023-01-03 17:47:36 +01:00
|
|
|
public ItemAlchemicalBag() {
|
2014-03-28 20:54:15 +01:00
|
|
|
super();
|
2014-02-02 03:23:47 +01:00
|
|
|
this.setHasSubtypes(true);
|
2014-03-28 20:54:15 +01:00
|
|
|
this.setUnlocalizedName(Names.Items.ALCHEMICAL_BAG);
|
2013-08-23 16:59:50 +02:00
|
|
|
}
|
|
|
|
|
2014-02-02 03:23:47 +01:00
|
|
|
@Override
|
|
|
|
@SideOnly(Side.CLIENT)
|
2023-01-03 17:47:36 +01:00
|
|
|
public boolean requiresMultipleRenderPasses() {
|
2014-03-28 20:54:15 +01:00
|
|
|
return true;
|
2014-02-02 03:23:47 +01:00
|
|
|
}
|
|
|
|
|
2013-08-23 16:59:50 +02:00
|
|
|
@Override
|
|
|
|
@SideOnly(Side.CLIENT)
|
2023-01-03 17:47:36 +01:00
|
|
|
public void registerIcons(IIconRegister iconRegister) {
|
2014-03-28 20:54:15 +01:00
|
|
|
icons = new IIcon[ALCHEMICAL_BAG_ICONS.length];
|
2013-08-23 16:59:50 +02:00
|
|
|
|
2023-01-03 17:47:36 +01:00
|
|
|
for (int i = 0; i < ALCHEMICAL_BAG_ICONS.length; i++) {
|
|
|
|
icons[i] = iconRegister.registerIcon(
|
|
|
|
Textures.RESOURCE_PREFIX + Names.Items.ALCHEMICAL_BAG + "."
|
|
|
|
+ ALCHEMICAL_BAG_ICONS[i]
|
|
|
|
);
|
2013-08-23 16:59:50 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2023-01-03 17:47:36 +01:00
|
|
|
public IIcon getIcon(ItemStack itemStack, int renderPass) {
|
|
|
|
if (renderPass == 0) {
|
|
|
|
if (NBTHelper.hasKey(itemStack, Names.NBT.ALCHEMICAL_BAG_GUI_OPEN)) {
|
2014-03-28 20:54:15 +01:00
|
|
|
return icons[0];
|
2023-01-03 17:47:36 +01:00
|
|
|
} else {
|
2014-03-28 20:54:15 +01:00
|
|
|
return icons[1];
|
|
|
|
}
|
2023-01-03 17:47:36 +01:00
|
|
|
} else {
|
2014-03-28 20:54:15 +01:00
|
|
|
return icons[2 + MathHelper.clamp_int(itemStack.getItemDamage(), 0, 3)];
|
2014-03-26 02:59:36 +01:00
|
|
|
}
|
2013-08-23 16:59:50 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2014-03-28 20:54:15 +01:00
|
|
|
@SideOnly(Side.CLIENT)
|
2023-01-03 17:47:36 +01:00
|
|
|
public void getSubItems(Item item, CreativeTabs creativeTab, List list) {
|
|
|
|
for (int meta = 0; meta < 3; ++meta) {
|
2014-03-28 20:54:15 +01:00
|
|
|
list.add(new ItemStack(this, 1, meta));
|
|
|
|
}
|
2013-08-23 16:59:50 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2023-01-03 17:47:36 +01:00
|
|
|
public boolean getShareTag() {
|
2013-08-23 16:59:50 +02:00
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
2023-01-03 17:47:36 +01:00
|
|
|
public ItemStack
|
|
|
|
onItemRightClick(ItemStack itemStack, World world, EntityPlayer entityPlayer) {
|
2016-05-27 17:10:38 +02:00
|
|
|
if (!world.isRemote) {
|
|
|
|
// Set the owner of the bag if one doesn't exist already
|
2016-05-27 22:03:14 +02:00
|
|
|
if (ItemStackUtils.getOwnerUUID(itemStack) == null) {
|
|
|
|
ItemStackUtils.setOwner(itemStack, entityPlayer);
|
2015-02-18 03:10:41 +01:00
|
|
|
}
|
2014-07-15 18:24:18 +02:00
|
|
|
|
2016-05-27 17:10:38 +02:00
|
|
|
// Set an UUID on the bag if one doesn't exist already
|
2016-05-27 22:03:14 +02:00
|
|
|
if (NBTHelper.getUUID(itemStack) == null) {
|
2016-05-27 17:10:38 +02:00
|
|
|
NBTHelper.setUUID(itemStack, UUID.randomUUID());
|
|
|
|
}
|
|
|
|
|
2023-01-03 17:47:36 +01:00
|
|
|
// TODO Do a scan of inventory and if we find a bag with the same UUID, change
|
|
|
|
// it's UUID
|
2016-05-27 17:10:38 +02:00
|
|
|
for (int i = 0; i < entityPlayer.inventory.getSizeInventory(); i++) {
|
|
|
|
if (entityPlayer.inventory.getStackInSlot(i) != null) {
|
|
|
|
ItemStack itemStack1 = entityPlayer.inventory.getStackInSlot(i);
|
|
|
|
|
|
|
|
if (itemStack1.getItem() instanceof ItemAlchemicalBag) {
|
2023-01-03 17:47:36 +01:00
|
|
|
if (NBTHelper.hasUUID(itemStack1)
|
|
|
|
&& NBTHelper.getUUID(itemStack).equals(
|
|
|
|
NBTHelper.getUUID(itemStack1)
|
|
|
|
)) {
|
2016-05-27 17:10:38 +02:00
|
|
|
NBTHelper.setUUID(itemStack1, UUID.randomUUID());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2014-03-28 20:54:15 +01:00
|
|
|
NBTHelper.setBoolean(itemStack, Names.NBT.ALCHEMICAL_BAG_GUI_OPEN, true);
|
2023-01-03 17:47:36 +01:00
|
|
|
entityPlayer.openGui(
|
|
|
|
EquivalentExchange3.instance,
|
|
|
|
GUIs.ALCHEMICAL_BAG.ordinal(),
|
|
|
|
entityPlayer.worldObj,
|
|
|
|
(int) entityPlayer.posX,
|
|
|
|
(int) entityPlayer.posY,
|
|
|
|
(int) entityPlayer.posZ
|
|
|
|
);
|
2013-08-23 16:59:50 +02:00
|
|
|
}
|
2014-03-28 20:54:15 +01:00
|
|
|
|
|
|
|
return itemStack;
|
2013-08-23 16:59:50 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
@SideOnly(Side.CLIENT)
|
2023-01-03 17:47:36 +01:00
|
|
|
public int getColorFromItemStack(ItemStack itemStack, int renderPass) {
|
2014-02-02 03:23:47 +01:00
|
|
|
int bagColor = this.getColor(itemStack);
|
|
|
|
|
2023-01-03 17:47:36 +01:00
|
|
|
if (bagColor < 0) {
|
2014-03-28 20:54:15 +01:00
|
|
|
bagColor = Integer.parseInt(Colors.PURE_WHITE, 16);
|
2013-12-16 02:26:42 +01:00
|
|
|
}
|
2013-08-23 16:59:50 +02:00
|
|
|
|
2014-02-02 03:23:47 +01:00
|
|
|
return bagColor;
|
2013-08-23 16:59:50 +02:00
|
|
|
}
|
|
|
|
|
2023-01-03 17:47:36 +01:00
|
|
|
public boolean hasColor(ItemStack itemStack) {
|
2014-03-28 20:54:15 +01:00
|
|
|
return ColorHelper.hasColor(itemStack);
|
2013-08-23 16:59:50 +02:00
|
|
|
}
|
|
|
|
|
2023-01-03 17:47:36 +01:00
|
|
|
public int getColor(ItemStack itemStack) {
|
2014-03-28 20:54:15 +01:00
|
|
|
return ColorHelper.getColor(itemStack);
|
2013-08-23 16:59:50 +02:00
|
|
|
}
|
|
|
|
|
2023-01-03 17:47:36 +01:00
|
|
|
public void setColor(ItemStack itemStack, int color) {
|
|
|
|
if (itemStack != null) {
|
|
|
|
if (itemStack.getItem() instanceof ItemAlchemicalBag) {
|
2014-03-28 20:54:15 +01:00
|
|
|
ColorHelper.setColor(itemStack, color);
|
2013-08-23 16:59:50 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-01-03 17:47:36 +01:00
|
|
|
public void removeColor(ItemStack itemStack) {
|
|
|
|
if (itemStack != null) {
|
2013-08-23 16:59:50 +02:00
|
|
|
NBTTagCompound nbtTagCompound = itemStack.getTagCompound();
|
|
|
|
|
2023-01-03 17:47:36 +01:00
|
|
|
if (nbtTagCompound != null) {
|
|
|
|
NBTTagCompound displayTagCompound
|
|
|
|
= nbtTagCompound.getCompoundTag(Names.NBT.DISPLAY);
|
2013-08-23 16:59:50 +02:00
|
|
|
|
2023-01-03 17:47:36 +01:00
|
|
|
if (displayTagCompound.hasKey(Names.NBT.COLOR)) {
|
2014-03-28 20:54:15 +01:00
|
|
|
displayTagCompound.removeTag(Names.NBT.COLOR);
|
2013-08-23 16:59:50 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|