package com.dta.extracarts.mods.mfr.client; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.inventory.ICrafting; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import com.dta.extracarts.mods.mfr.entities.EntityDSUCart; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class ContainerDSUCart extends Container { private EntityDSUCart cart; private int tempQty; private int ySize; private int xSize; public ContainerDSUCart (IInventory invPlayer, EntityDSUCart cart) { this.cart = cart; this.ySize=205; this.xSize=184; int leftOffset = (xSize - 162)/2 - 3; for (int x = 0; x < 9; x++) { addSlotToContainer(new Slot(invPlayer, x, leftOffset + 18 * x, ySize-23)); } for (int y = 0; y < 3; y++) { for (int x = 0; x < 9; x++) { addSlotToContainer(new Slot(invPlayer, x + y * 9 + 9, leftOffset + 18 * x, ySize - (4 - y) * 18 - 9)); } } addSlotToContainer(new DSUInSlot(cart, 0, 134, 16)); addSlotToContainer(new DSUInSlot(cart, 1, 152, 16)); addSlotToContainer(new DSUOutSlot(cart, 2, 152, 49)); } @Override public boolean canInteractWith(EntityPlayer entityplayer) { return cart.isUseableByPlayer(entityplayer); } @Override public ItemStack transferStackInSlot(EntityPlayer player, int i) { //return null; Slot slot = (Slot) inventorySlots.get(i); if (slot != null && slot.getHasStack()) { ItemStack stack = slot.getStack(); ItemStack result = stack.copy(); if (i >= 36) { // if (!mergeItemStack(stack, 0, 36, false)) { return null; // } } else if (!mergeItemStack(stack, 37, 38, false)) { return null; } if (stack.stackSize == 0) { slot.putStack(null); } else { slot.onSlotChanged(); } slot.onPickupFromSlot(player, stack); return result; } return null; } @Override public void addCraftingToCrafters(ICrafting player) { super.addCraftingToCrafters(player); } @Override @SideOnly(Side.CLIENT) public void updateProgressBar(int id, int data){ if(id == 200) tempQty = upcastShort(data); if(id == 201) cart.setQuantity(tempQty | (data << 16)); } @Override public void detectAndSendChanges() { super.detectAndSendChanges(); for(int i = 0; i < crafters.size(); i++) { ((ICrafting)crafters.get(i)).sendProgressBarUpdate(this, 200, cart.getQuantity()); ((ICrafting)crafters.get(i)).sendProgressBarUpdate(this, 201, cart.getQuantity() >> 16); } for (int i = 39; i --> 36; ) { Slot slotObject = (Slot)inventorySlots.get(i); if (slotObject != null) for (int j = 0; j < this.crafters.size(); ++j) ((ICrafting)this.crafters.get(j)).sendSlotContents(this, slotObject.slotNumber, slotObject.getStack()); } } private int upcastShort(int value) { if(value < 0) value += 65536; return value; } }