package chbachman.armour.gui.crafting; import net.minecraft.entity.player.InventoryPlayer; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import chbachman.api.configurability.Percentage; import chbachman.api.item.IModularItem; import chbachman.api.nbt.helper.NBTHelper; import chbachman.api.nbt.helper.NBTStorage; import chbachman.api.nbt.serializers.PercentageNBT; import chbachman.api.registry.UpgradeRegistry; import chbachman.api.upgrade.IUpgrade; import chbachman.armour.ModularArmour; import chbachman.armour.gui.GuiHandler; import chbachman.armour.handler.UpgradeHandler; import chbachman.armour.network.ArmourPacket; import chbachman.armour.network.ArmourPacket.PacketTypes; import chbachman.armour.network.IContainerSyncable; import chbachman.armour.network.IInputHandler; import chbachman.armour.upgrade.UpgradeException; import chbachman.armour.util.InventoryUtil; import chbachman.armour.util.MiscUtil; import chbachman.armour.util.UpgradeUtil; import cofh.core.network.PacketHandler; import cofh.lib.gui.container.ContainerInventoryItem; public class ArmourContainer extends ContainerInventoryItem implements IInputHandler, IContainerSyncable { public IUpgrade upgrade = null; public final IModularItem item; public ArmourContainer(ItemStack stack, InventoryPlayer inventory) { super(stack, inventory); this.item = (IModularItem) stack.getItem(); this.bindCraftingGrid(); this.bindPlayerInventory(inventory); } protected void bindCraftingGrid() { for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { this.addSlotToContainer(new Slot(this.containerWrapper, i * 3 + j, 183 + j * 18, 152 + i * 18)); } } } protected void bindPlayerInventory(InventoryPlayer inventoryPlayer) { for (int i = 0; i < 3; i++) { for (int j = 0; j < 9; j++) { this.addSlotToContainer(new Slot(inventoryPlayer, j + i * 9 + 9, 8 + j * 18, 152 + i * 18)); } } for (int i = 0; i < 9; i++) { this.addSlotToContainer(new Slot(inventoryPlayer, i, 8 + i * 18, 152 + 58)); } } @Override public void onSlotChanged() { super.onSlotChanged(); this.upgrade = UpgradeHandler.getResult(this.containerWrapper); } NBTStorage<Percentage> storage = new NBTStorage<Percentage>(new PercentageNBT()); @Override public void onButtonClick(ArmourPacket packet, String name) { boolean shouldSync = false; try { if (name.equals("UpgradeAddition")) { if (UpgradeHandler.addUpgrade(this.getContainerStack(), this.upgrade)) { this.upgrade = UpgradeHandler.getResult(this.containerWrapper); for (int i = 0; i < this.containerWrapper.getSizeInventory(); i++) { InventoryUtil.decrementItemStack(this.player, this.containerWrapper, i); } shouldSync = true; } } else if (name.equals("RemoveItems")) { shouldSync = true; for (int i = 0; i < 9; i++) { this.transferStackInSlot(this.player, i); } } else if (name.equals("RemoveUpgrade")) { UpgradeUtil.removeUpgrade(this.getContainerStack(), UpgradeRegistry.getUpgrade(packet.getString())); shouldSync = true; } else if (name.equals("Recipe")) { if (MiscUtil.isServer(this.player.worldObj)) { this.player.openGui(ModularArmour.instance, GuiHandler.RECIPE_ID, this.player.worldObj, 0, 0, 0); } } else if (name.equals("ValueChanged")) { NBTHelper.createDefaultStackTag(getContainerStack()); storage.setKey(packet.getString()); storage.set(getContainerStack(), new Percentage(packet.getInt())); } } catch (UpgradeException e) { } finally { this.player.inventory.mainInventory[this.containerIndex] = this.getContainerStack(); } if (shouldSync) { this.detectAndSendChanges(); PacketHandler.sendTo(ArmourPacket.getPacket(PacketTypes.CONTAINERSYNC).addItemStack(this.getContainerStack()), player); } } @Override public void onKeyTyped(ArmourPacket packet, char key, int keyCode) { } @Override public void clientLoad(ArmourPacket p) { ItemStack container = p.getItemStack(); this.getContainerStack().stackTagCompound = container.stackTagCompound; } @Override public void serverLoad(ArmourPacket p) { } }