Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static net.minecraft.server.v1_13_R2.ItemStack shiftClick(Container nmsContainer, EntityHuman nmsPlayer, int slotNumber) {
- net.minecraft.server.v1_13_R2.ItemStack result = net.minecraft.server.v1_13_R2.ItemStack.a; //AIR
- Slot slot = nmsContainer.slots.get(slotNumber);
- if (slot != null && slot.hasItem()) {
- net.minecraft.server.v1_13_R2.ItemStack currentItem = slot.getItem();
- result = currentItem.cloneItemStack();
- EnumItemSlot enumitemslot = EntityInsentient.e(result);
- if (slotNumber == 0) {
- if (cantStoreStack(nmsContainer, currentItem, 9, 45, true))
- return null;
- slot.a(currentItem, result);
- } else if (slotNumber < 5) {
- if (cantStoreStack(nmsContainer, currentItem, 9, 45, false))
- return null;
- } else if (slotNumber < 9) {
- if (cantStoreStack(nmsContainer, currentItem, 9, 45, false))
- return null;
- } else if (enumitemslot.a() == EnumItemSlot.Function.ARMOR && !nmsContainer.slots.get(8 - enumitemslot.b()).hasItem()) {
- if (cantStoreStack(nmsContainer, currentItem, 8 - enumitemslot.b(), 8 - enumitemslot.b() + 1, false))
- return null;
- } else if (enumitemslot == EnumItemSlot.OFFHAND && !nmsContainer.slots.get(45).hasItem()) {
- if (cantStoreStack(nmsContainer, currentItem, 45, 46, false))
- return null;
- } else if (slotNumber < 36) {
- if (cantStoreStack(nmsContainer, currentItem, 36, 45, false))
- return null;
- } else if (slotNumber < 45) {
- if (cantStoreStack(nmsContainer, currentItem, 9, 36, false))
- return null;
- } else if (cantStoreStack(nmsContainer, currentItem, 9, 45, false))
- return null;
- if (currentItem.isEmpty())
- slot.set(net.minecraft.server.v1_13_R2.ItemStack.a); //AIR
- else
- slot.inventory.update();
- if (currentItem.getCount() == result.getCount())
- return null;
- slot.inventory.update();
- if (slotNumber == 0)
- nmsPlayer.drop(currentItem, false);
- }
- return result;
- }
- private static boolean cantStoreStack(Container nmsContainer, net.minecraft.server.v1_13_R2.ItemStack targetStack, int firstSlot, int lastSlot, boolean inverse) {
- boolean result = false;
- int slotNumber = firstSlot;
- if (inverse)
- slotNumber = lastSlot - 1;
- Slot slot;
- net.minecraft.server.v1_13_R2.ItemStack currentStack;
- if (targetStack.isStackable()) {
- while (!targetStack.isEmpty()) {
- if (inverse) {
- if (slotNumber < firstSlot)
- break;
- } else if (slotNumber >= lastSlot)
- break;
- slot = nmsContainer.slots.get(slotNumber);
- currentStack = slot.getItem();
- if (!currentStack.isEmpty() && (targetStack.getItem() == currentStack.getItem() && net.minecraft.server.v1_13_R2.ItemStack.equals(targetStack, currentStack))) {
- int count = currentStack.getCount() + targetStack.getCount();
- if (count <= targetStack.getMaxStackSize()) {
- targetStack.setCount(0);
- currentStack.setCount(count);
- slot.inventory.update();
- result = true;
- } else if (currentStack.getCount() < targetStack.getMaxStackSize()) {
- targetStack.subtract(targetStack.getMaxStackSize() - currentStack.getCount());
- currentStack.setCount(targetStack.getMaxStackSize());
- slot.inventory.update();
- result = true;
- }
- }
- if (inverse)
- --slotNumber;
- else
- ++slotNumber;
- }
- }
- if (!targetStack.isEmpty()) {
- if (inverse)
- slotNumber = lastSlot - 1;
- else
- slotNumber = firstSlot;
- while (true) {
- if (inverse)
- if (slotNumber < firstSlot)
- break;
- else if (slotNumber >= lastSlot)
- break;
- slot = nmsContainer.slots.get(slotNumber);
- currentStack = slot.getItem();
- if (currentStack.isEmpty() && slot.isAllowed(targetStack)) {
- if (targetStack.getCount() > slot.getMaxStackSize())
- slot.set(targetStack.cloneAndSubtract(slot.getMaxStackSize()));
- else
- slot.set(targetStack.cloneAndSubtract(targetStack.getCount()));
- slot.inventory.update();
- result = true;
- break;
- }
- if (inverse)
- --slotNumber;
- else
- ++slotNumber;
- }
- }
- return !result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement