package nl.lang2619.bagginses.items.bags;
import com.mojang.realmsclient.gui.ChatFormatting;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.InventoryEnderChest;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ActionResult;
import net.minecraft.util.EnumActionResult;
import net.minecraft.util.EnumHand;
import net.minecraft.util.text.TextComponentString;
import net.minecraft.world.World;
import net.minecraftforge.fml.client.FMLClientHandler;
import net.minecraftforge.fml.relauncher.Side;
import nl.lang2619.bagginses.Bagginses;
import nl.lang2619.bagginses.config.ModConfig;
import nl.lang2619.bagginses.helpers.ChatUtils;
import nl.lang2619.bagginses.helpers.ItemHelper;
import nl.lang2619.bagginses.helpers.NBTHelper;
import nl.lang2619.bagginses.helpers.Names;
import nl.lang2619.bagginses.items.ModItems;
import nl.lang2619.bagginses.proxy.GuiInfo;
import nl.lang2619.bagginses.references.BagMode;
import nl.lang2619.bagginses.references.BagTypes;
import java.util.List;
/**
* Created by Tim on 4/12/2015.
*/
public class Bag extends Item {
String color;
BagTypes type;
public Bag(String color, BagTypes type) {
super();
maxStackSize = 1;
setCreativeTab(Bagginses.BagTab);
this.color = color;
this.type = type;
}
public String getColor() {
return color;
}
public BagTypes getType() {
return type;
}
public String getUnlocalizedName(ItemStack itemStack) {
if (type == BagTypes.TIER2) {
return "backpack_" + color + "T2";
} else if (type == BagTypes.TIER3) {
return "backpack_" + color + "T3";
}
return "backpack_" + color;
}
@Override
public boolean getShareTag() {
return true;
}
@Override
public boolean hasEffect(ItemStack stack) {
if (stack.getTagCompound() != null
&& stack.getTagCompound().hasKey("soulbound")
&& stack.getTagCompound().getBoolean("soulbound")) {
return true;
}
return stack.isItemEnchanted();
}
@Override
public ActionResult<ItemStack> onItemRightClick(ItemStack itemStack, World world, EntityPlayer player, EnumHand hand) {
if (player.isSneaking()) {
changeMode(itemStack, world, player, hand);
return new ActionResult(EnumActionResult.SUCCESS, itemStack);
}
if (!world.isRemote) {
if (!ItemHelper.hasOwnerUUID(itemStack)) {
ItemHelper.setOwner(itemStack, player);
}
NBTHelper.setUUID(itemStack);
NBTHelper.setBoolean(itemStack, Names.NBT.BAG_OPEN, true);
if (type == BagTypes.TIER1)
player.openGui(Bagginses.instance, GuiInfo.GUI_BACKPACK, world, 0, 0, 0);
if (type == BagTypes.TIER2)
player.openGui(Bagginses.instance, GuiInfo.GUI_BACKPACK_T2, world, 0, 0, 0);
if (type == BagTypes.TIER3)
player.openGui(Bagginses.instance, GuiInfo.GUI_BACKPACK_T3, world, 0, 0, 0);
if (type == BagTypes.VOID)
player.openGui(Bagginses.instance, GuiInfo.GUI_BACKPACK_VOID, world, 0, 0, 0);
if(type == BagTypes.ENDER) {
InventoryEnderChest inventoryEnderChest = player.getInventoryEnderChest();
player.displayGUIChest(inventoryEnderChest);
}
}
return new ActionResult(EnumActionResult.SUCCESS, itemStack);
}
private void changeMode(ItemStack stack, World world, EntityPlayer player, EnumHand hand) {
if (type == BagTypes.VOID) {
return;
}
if (!ModConfig.bagPickUp) {
return;
}
if (stack.getTagCompound() == null)
stack.setTagCompound(new NBTTagCompound());
NBTTagCompound tags = stack.getTagCompound();
BagMode mode = BagMode.getMode(stack);
mode = mode.next();
tags.setString("bagMode", mode.getName());
stack.setTagCompound(tags);
if (world.isRemote)
ChatUtils.sendNoSpamMessages(14, new TextComponentString(ChatFormatting.AQUA + "Mode: " + mode.getName()));
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean advanced) {
super.addInformation(stack, player, list, advanced);
if (BagMode.getMode(stack) != BagMode.DEFAULT) {
list.add(ChatFormatting.AQUA + "Mode: " + BagMode.getMode(stack).getName());
}
if (isSoulBound(stack)) {
list.add(ChatFormatting.LIGHT_PURPLE + "Soulbound");
}
try {
String msg = "";
if (ModItems.bags.get(color).getServerDesc() != null
&& !ModItems.bags.get(color).getServerDesc().equals("")) {
msg = ModItems.bags.get(color).getServerDesc();
} else if (ModItems.bags.get(color).getDesc() != null
&& !ModItems.bags.get(color).getDesc().equals("")) {
msg = ModItems.bags.get(color).getDesc();
}
if (!("").equals(msg)) {
String[] parts = msg.split("\n");
for (int i = 0; i < Math.min(3, parts.length); i++) {
if (parts[i] != null
&& !("").equals(parts[i])) {
list.add(parts[i]);
}
}
}
}
catch (NullPointerException e) {
//Ignore
}
/*if (type == BagTypes.TIER1)
list.add("Tier 1");
if (type == BagTypes.TIER2)
list.add("Tier 2");
if (type == BagTypes.TIER3)
list.add("Tier 3");
if (type == BagTypes.VOID)
list.add("Void Bag");
if (type == BagTypes.ENDER)
list.add("Ender Chest Bag");*/
}
private boolean isSoulBound(ItemStack stack) {
try {
if (stack != null
&& stack.getTagCompound() != null
&& stack.getTagCompound().hasKey("soulbound")
&& stack.getTagCompound().getBoolean("soulbound")) {
return true;
}
} catch (Exception e){
}
return false;
}
}