Guest User

ContainerQuiver.java

a guest
Jun 18th, 2015
317
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.46 KB | None | 0 0
  1. package zollernextras.inventory;
  2.  
  3. import net.minecraft.entity.player.EntityPlayer;
  4. import net.minecraft.entity.player.InventoryPlayer;
  5. import net.minecraft.inventory.Container;
  6. import net.minecraft.inventory.Slot;
  7. import net.minecraft.item.ItemStack;
  8.  
  9. public class ContainerQuiver extends Container {
  10.    
  11.     /** The Item Inventory for this Container */
  12.     private final InventoryQuiver inventory;
  13.    
  14.     private static final int ARMOR_START = InventoryQuiver.INV_SIZE,
  15.             ARMOR_END = ARMOR_START + 3, INV_START = ARMOR_END + 1,
  16.             INV_END = INV_START + 26, HOTBAR_START = INV_END + 1,
  17.             HOTBAR_END = HOTBAR_START + 8;
  18.    
  19.     public ContainerQuiver(EntityPlayer player, InventoryPlayer inv,
  20.             InventoryQuiver bag) {
  21.         int i = 0;
  22.         inventory = bag;
  23.        
  24.         // CUSTOM INVENTORY SLOTS
  25.         for (i = 0; i < InventoryQuiver.INV_SIZE; ++i) {
  26.             addSlotToContainer(new SlotQuiver(inventory, i,
  27.                     80 + (18 * (i % 5)), 8 + (18 * (i / 5))));
  28.         }
  29.        
  30.         // PLAYER INVENTORY - uses default locations for standard inventory
  31.         // texture file
  32.         for (i = 0; i < 3; ++i) {
  33.             for (int j = 0; j < 9; ++j) {
  34.                 addSlotToContainer(new Slot(inv, j + i * 9 + 9, 8 + j * 18,
  35.                         84 + i * 18));
  36.             }
  37.         }
  38.        
  39.         // PLAYER ACTION BAR - uses default locations for standard action bar
  40.         // texture file
  41.         for (i = 0; i < 9; ++i) {
  42.             addSlotToContainer(new Slot(inv, i, 8 + i * 18, 142));
  43.         }
  44.     }
  45.    
  46.     @Override
  47.     public boolean canInteractWith(EntityPlayer player) {
  48.         // be sure to return the inventory's isUseableByPlayer method
  49.         // if you defined special behavior there:
  50.         return inventory.isUseableByPlayer(player);
  51.     }
  52.    
  53.     @Override
  54.     public ItemStack transferStackInSlot(EntityPlayer player, int index) {
  55.         ItemStack itemstack = null;
  56.         Slot slot = (Slot) this.inventorySlots.get(index);
  57.        
  58.         if (slot != null && slot.getHasStack()) {
  59.             ItemStack itemstack1 = slot.getStack();
  60.             itemstack = itemstack1.copy();
  61.            
  62.             // If item is in our custom Inventory or an ARMOR slot
  63.             if (index < INV_START) {
  64.                 // try to place in player inventory / action bar
  65.                 if (!this.mergeItemStack(itemstack1, INV_START, HOTBAR_END + 1,
  66.                         true)) {
  67.                     return null;
  68.                 }
  69.                
  70.                 slot.onSlotChange(itemstack1, itemstack);
  71.             }
  72.             if (itemstack1.stackSize == 0) {
  73.                 slot.putStack((ItemStack) null);
  74.             } else {
  75.                 slot.onSlotChanged();
  76.             }
  77.            
  78.             if (itemstack1.stackSize == itemstack.stackSize) {
  79.                 return null;
  80.             }
  81.            
  82.             slot.onPickupFromSlot(player, itemstack1);
  83.         }
  84.        
  85.         return itemstack;
  86.     }
  87.    
  88.     @Override
  89.     public ItemStack slotClick(int slot, int button, int flag,
  90.             EntityPlayer player) {
  91.         // this will prevent the player from interacting with the item that
  92.         // opened the inventory:
  93.         if (slot >= 0 && getSlot(slot) != null
  94.                 && getSlot(slot).getStack() == player.getHeldItem()) {
  95.             return null;
  96.         }
  97.         return super.slotClick(slot, button, flag, player);
  98.     }
  99.    
  100.     // IMPORTANT to override the mergeItemStack method if your inventory stack
  101.     // size limit is 1
  102.     /**
  103.      * Vanilla method fails to account for stack size limits of one, resulting
  104.      * in only one item getting placed in the slot and the rest disappearing
  105.      * into thin air; vanilla method also fails to check whether stack is valid
  106.      * for slot
  107.      */
  108.     @Override
  109.     protected boolean mergeItemStack(ItemStack stack, int start, int end,
  110.             boolean backwards) {
  111.         boolean flag1 = false;
  112.         int k = (backwards ? end - 1 : start);
  113.         Slot slot;
  114.         ItemStack itemstack1;
  115.        
  116.         if (stack.isStackable()) {
  117.             while (stack.stackSize > 0
  118.                     && (!backwards && k < end || backwards && k >= start)) {
  119.                 slot = (Slot) inventorySlots.get(k);
  120.                 itemstack1 = slot.getStack();
  121.                
  122.                 if (!slot.isItemValid(stack)) {
  123.                     k += (backwards ? -1 : 1);
  124.                     continue;
  125.                 }
  126.                
  127.                 if (itemstack1 != null
  128.                         && itemstack1.getItem() == stack.getItem()
  129.                         && (!stack.getHasSubtypes() || stack.getItemDamage() == itemstack1
  130.                                 .getItemDamage())
  131.                         && ItemStack.areItemStackTagsEqual(stack, itemstack1)) {
  132.                     int l = itemstack1.stackSize + stack.stackSize;
  133.                    
  134.                     if (l <= stack.getMaxStackSize()
  135.                             && l <= slot.getSlotStackLimit()) {
  136.                         stack.stackSize = 0;
  137.                         itemstack1.stackSize = l;
  138.                         inventory.markDirty();
  139.                         flag1 = true;
  140.                     } else if (itemstack1.stackSize < stack.getMaxStackSize()
  141.                             && l < slot.getSlotStackLimit()) {
  142.                         stack.stackSize -= stack.getMaxStackSize()
  143.                                 - itemstack1.stackSize;
  144.                         itemstack1.stackSize = stack.getMaxStackSize();
  145.                         inventory.markDirty();
  146.                         flag1 = true;
  147.                     }
  148.                 }
  149.                
  150.                 k += (backwards ? -1 : 1);
  151.             }
  152.         }
  153.        
  154.         if (stack.stackSize > 0) {
  155.             k = (backwards ? end - 1 : start);
  156.            
  157.             while (!backwards && k < end || backwards && k >= start) {
  158.                 slot = (Slot) inventorySlots.get(k);
  159.                 itemstack1 = slot.getStack();
  160.                
  161.                 if (!slot.isItemValid(stack)) {
  162.                     k += (backwards ? -1 : 1);
  163.                     continue;
  164.                 }
  165.                
  166.                 if (itemstack1 == null) {
  167.                     int l = stack.stackSize;
  168.                    
  169.                     if (l <= slot.getSlotStackLimit()) {
  170.                         slot.putStack(stack.copy());
  171.                         stack.stackSize = 0;
  172.                         inventory.markDirty();
  173.                         flag1 = true;
  174.                         break;
  175.                     } else {
  176.                         putStackInSlot(
  177.                                 k,
  178.                                 new ItemStack(stack.getItem(), slot
  179.                                         .getSlotStackLimit(), stack
  180.                                         .getItemDamage()));
  181.                         stack.stackSize -= slot.getSlotStackLimit();
  182.                         inventory.markDirty();
  183.                         flag1 = true;
  184.                     }
  185.                 }
  186.                
  187.                 k += (backwards ? -1 : 1);
  188.             }
  189.         }
  190.        
  191.         return flag1;
  192.     }
  193. }
Advertisement
Add Comment
Please, Sign In to add comment