Advertisement
Guest User

Untitled

a guest
Oct 18th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.29 KB | None | 0 0
  1.     public static net.minecraft.server.v1_13_R2.ItemStack shiftClick(Container nmsContainer, EntityHuman nmsPlayer, int slotNumber) {
  2.         net.minecraft.server.v1_13_R2.ItemStack result = net.minecraft.server.v1_13_R2.ItemStack.a; //AIR
  3.         Slot slot = nmsContainer.slots.get(slotNumber);
  4.         if (slot != null && slot.hasItem()) {
  5.             net.minecraft.server.v1_13_R2.ItemStack currentItem = slot.getItem();
  6.             result = currentItem.cloneItemStack();
  7.             EnumItemSlot enumitemslot = EntityInsentient.e(result);
  8.             if (slotNumber == 0) {
  9.                 if (cantStoreStack(nmsContainer, currentItem, 9, 45, true))
  10.                     return null;
  11.                 slot.a(currentItem, result);
  12.             } else if (slotNumber < 5) {
  13.                 if (cantStoreStack(nmsContainer, currentItem, 9, 45, false))
  14.                     return null;
  15.             } else if (slotNumber < 9) {
  16.                 if (cantStoreStack(nmsContainer, currentItem, 9, 45, false))
  17.                     return null;
  18.             } else if (enumitemslot.a() == EnumItemSlot.Function.ARMOR && !nmsContainer.slots.get(8 - enumitemslot.b()).hasItem()) {
  19.                 if (cantStoreStack(nmsContainer, currentItem, 8 - enumitemslot.b(), 8 - enumitemslot.b() + 1, false))
  20.                     return null;
  21.             } else if (enumitemslot == EnumItemSlot.OFFHAND && !nmsContainer.slots.get(45).hasItem()) {
  22.                 if (cantStoreStack(nmsContainer, currentItem, 45, 46, false))
  23.                     return null;
  24.             } else if (slotNumber < 36) {
  25.                 if (cantStoreStack(nmsContainer, currentItem, 36, 45, false))
  26.                     return null;
  27.             } else if (slotNumber < 45) {
  28.                 if (cantStoreStack(nmsContainer, currentItem, 9, 36, false))
  29.                     return null;
  30.             } else if (cantStoreStack(nmsContainer, currentItem, 9, 45, false))
  31.                 return null;
  32.             if (currentItem.isEmpty())
  33.                 slot.set(net.minecraft.server.v1_13_R2.ItemStack.a); //AIR
  34.             else
  35.                 slot.inventory.update();
  36.             if (currentItem.getCount() == result.getCount())
  37.                 return null;
  38.             slot.inventory.update();
  39.             if (slotNumber == 0)
  40.                 nmsPlayer.drop(currentItem, false);
  41.         }
  42.         return result;
  43.     }
  44.  
  45.     private static boolean cantStoreStack(Container nmsContainer, net.minecraft.server.v1_13_R2.ItemStack targetStack, int firstSlot, int lastSlot, boolean inverse) {
  46.         boolean result = false;
  47.         int slotNumber = firstSlot;
  48.         if (inverse)
  49.             slotNumber = lastSlot - 1;
  50.         Slot slot;
  51.         net.minecraft.server.v1_13_R2.ItemStack currentStack;
  52.         if (targetStack.isStackable()) {
  53.             while (!targetStack.isEmpty()) {
  54.                 if (inverse) {
  55.                     if (slotNumber < firstSlot)
  56.                         break;
  57.                 } else if (slotNumber >= lastSlot)
  58.                     break;
  59.                 slot = nmsContainer.slots.get(slotNumber);
  60.                 currentStack = slot.getItem();
  61.                 if (!currentStack.isEmpty() && (targetStack.getItem() == currentStack.getItem() && net.minecraft.server.v1_13_R2.ItemStack.equals(targetStack, currentStack))) {
  62.                     int count = currentStack.getCount() + targetStack.getCount();
  63.                     if (count <= targetStack.getMaxStackSize()) {
  64.                         targetStack.setCount(0);
  65.                         currentStack.setCount(count);
  66.                         slot.inventory.update();
  67.                         result = true;
  68.                     } else if (currentStack.getCount() < targetStack.getMaxStackSize()) {
  69.                         targetStack.subtract(targetStack.getMaxStackSize() - currentStack.getCount());
  70.                         currentStack.setCount(targetStack.getMaxStackSize());
  71.                         slot.inventory.update();
  72.                         result = true;
  73.                     }
  74.                 }
  75.                 if (inverse)
  76.                     --slotNumber;
  77.                 else
  78.                     ++slotNumber;
  79.             }
  80.         }
  81.         if (!targetStack.isEmpty()) {
  82.             if (inverse)
  83.                 slotNumber = lastSlot - 1;
  84.             else
  85.                 slotNumber = firstSlot;
  86.             while (true) {
  87.                 if (inverse)
  88.                     if (slotNumber < firstSlot)
  89.                         break;
  90.                 else if (slotNumber >= lastSlot)
  91.                     break;
  92.                 slot = nmsContainer.slots.get(slotNumber);
  93.                 currentStack = slot.getItem();
  94.                 if (currentStack.isEmpty() && slot.isAllowed(targetStack)) {
  95.                     if (targetStack.getCount() > slot.getMaxStackSize())
  96.                         slot.set(targetStack.cloneAndSubtract(slot.getMaxStackSize()));
  97.                     else
  98.                         slot.set(targetStack.cloneAndSubtract(targetStack.getCount()));
  99.                     slot.inventory.update();
  100.                     result = true;
  101.                     break;
  102.                 }
  103.                 if (inverse)
  104.                     --slotNumber;
  105.                 else
  106.                     ++slotNumber;
  107.             }
  108.         }
  109.         return !result;
  110.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement