summaryrefslogtreecommitdiff
path: root/dicore3/core/src/main/java/io/dico/dicore/InventoryEventUtil.java
diff options
context:
space:
mode:
Diffstat (limited to 'dicore3/core/src/main/java/io/dico/dicore/InventoryEventUtil.java')
-rw-r--r--dicore3/core/src/main/java/io/dico/dicore/InventoryEventUtil.java240
1 files changed, 120 insertions, 120 deletions
diff --git a/dicore3/core/src/main/java/io/dico/dicore/InventoryEventUtil.java b/dicore3/core/src/main/java/io/dico/dicore/InventoryEventUtil.java
index 5c19848..3be2179 100644
--- a/dicore3/core/src/main/java/io/dico/dicore/InventoryEventUtil.java
+++ b/dicore3/core/src/main/java/io/dico/dicore/InventoryEventUtil.java
@@ -1,120 +1,120 @@
-package io.dico.dicore;
-
-import org.bukkit.Material;
-import org.bukkit.event.inventory.InventoryClickEvent;
-import org.bukkit.inventory.Inventory;
-import org.bukkit.inventory.ItemStack;
-import org.bukkit.inventory.PlayerInventory;
-
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.Map;
-
-public class InventoryEventUtil {
-
- private InventoryEventUtil() {
-
- }
-
- public static ItemStack getNewItem(InventoryClickEvent event) {
- Inventory clicked = event.getInventory();
- switch (event.getAction()) {
- case SWAP_WITH_CURSOR:
- case PLACE_ALL:
- return event.getCursor();
- case PICKUP_ALL:
- case HOTBAR_MOVE_AND_READD:
- case MOVE_TO_OTHER_INVENTORY:
- case DROP_ALL_SLOT:
- case COLLECT_TO_CURSOR:
- return null;
- case PICKUP_HALF:
- case PICKUP_SOME:
- ItemStack item = clicked.getItem(event.getSlot()).clone();
- item.setAmount(item.getAmount() / 2);
- return item;
- case PICKUP_ONE:
- case DROP_ONE_SLOT:
- item = clicked.getItem(event.getSlot()).clone();
- item.setAmount(Math.max(0, item.getAmount() - 1));
- return item;
- case PLACE_ONE:
- item = event.getView().getCursor().clone();
- item.setAmount(1);
- return item;
- case PLACE_SOME:
- item = event.getView().getCursor().clone();
- item.setAmount(item.getAmount() / 2);
- return item;
- case HOTBAR_SWAP:
- return event.getView().getBottomInventory().getItem(event.getHotbarButton());
- default:
- return clicked.getItem(event.getSlot());
- }
- }
-
-
- public static Map<Integer, ItemStack> deduceChangesIfItemAdded(Inventory inventory, ItemStack added, boolean computeNewItem) {
- int addedAmount = added.getAmount();
- Map<Integer, ItemStack> rv = Collections.emptyMap();
-
- for (int n = inventory.getSize(), i = 0; i < n; i++) {
- if (addedAmount <= 0) break;
-
- ItemStack current = inventory.getItem(i);
- if (current == null || current.getType() == Material.AIR || current.isSimilar(added)) {
- int count = current == null ? 0 : current.getAmount();
- int max = (current == null ? added : current).getType().getMaxStackSize();
- if (count < max) {
- int diff = max - count;
- if (diff > addedAmount) {
- diff = addedAmount;
- }
- addedAmount -= diff;
-
- if (rv.isEmpty()) rv = new LinkedHashMap<>();
-
- if (computeNewItem) {
- current = (current == null ? added : current).clone();
- current.setAmount(count + diff);
- rv.put(i, current);
- } else {
- rv.put(i, null);
- }
- }
- }
- }
-
- return rv;
- }
-
-
- public static ItemStack getNewHeldItemIfPickedUp(PlayerInventory inventory, ItemStack added) {
- int heldItemSlot = inventory.getHeldItemSlot();
- ItemStack heldItem = inventory.getItem(heldItemSlot);
-
- if (SpigotUtil.isItemPresent(heldItem) && !added.isSimilar(heldItem)) {
- return null;
- }
-
- int amt = added.getAmount();
- for (int i = 0; i < heldItemSlot; i++) {
- ItemStack item = inventory.getItem(i);
- if (!SpigotUtil.isItemPresent(item)) {
- return null;
- }
- if (item.isSimilar(item)) {
- amt -= Math.max(0, item.getMaxStackSize() - item.getAmount());
- if (amt <= 0) {
- return null;
- }
- }
- }
-
- added = added.clone();
- added.setAmount(amt + Math.max(0, heldItem == null ? 0 : heldItem.getAmount()));
- return added;
- }
-
-
-}
+package io.dico.dicore;
+
+import org.bukkit.Material;
+import org.bukkit.event.inventory.InventoryClickEvent;
+import org.bukkit.inventory.Inventory;
+import org.bukkit.inventory.ItemStack;
+import org.bukkit.inventory.PlayerInventory;
+
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+public class InventoryEventUtil {
+
+ private InventoryEventUtil() {
+
+ }
+
+ public static ItemStack getNewItem(InventoryClickEvent event) {
+ Inventory clicked = event.getInventory();
+ switch (event.getAction()) {
+ case SWAP_WITH_CURSOR:
+ case PLACE_ALL:
+ return event.getCursor();
+ case PICKUP_ALL:
+ case HOTBAR_MOVE_AND_READD:
+ case MOVE_TO_OTHER_INVENTORY:
+ case DROP_ALL_SLOT:
+ case COLLECT_TO_CURSOR:
+ return null;
+ case PICKUP_HALF:
+ case PICKUP_SOME:
+ ItemStack item = clicked.getItem(event.getSlot()).clone();
+ item.setAmount(item.getAmount() / 2);
+ return item;
+ case PICKUP_ONE:
+ case DROP_ONE_SLOT:
+ item = clicked.getItem(event.getSlot()).clone();
+ item.setAmount(Math.max(0, item.getAmount() - 1));
+ return item;
+ case PLACE_ONE:
+ item = event.getView().getCursor().clone();
+ item.setAmount(1);
+ return item;
+ case PLACE_SOME:
+ item = event.getView().getCursor().clone();
+ item.setAmount(item.getAmount() / 2);
+ return item;
+ case HOTBAR_SWAP:
+ return event.getView().getBottomInventory().getItem(event.getHotbarButton());
+ default:
+ return clicked.getItem(event.getSlot());
+ }
+ }
+
+
+ public static Map<Integer, ItemStack> deduceChangesIfItemAdded(Inventory inventory, ItemStack added, boolean computeNewItem) {
+ int addedAmount = added.getAmount();
+ Map<Integer, ItemStack> rv = Collections.emptyMap();
+
+ for (int n = inventory.getSize(), i = 0; i < n; i++) {
+ if (addedAmount <= 0) break;
+
+ ItemStack current = inventory.getItem(i);
+ if (current == null || current.getType() == Material.AIR || current.isSimilar(added)) {
+ int count = current == null ? 0 : current.getAmount();
+ int max = (current == null ? added : current).getType().getMaxStackSize();
+ if (count < max) {
+ int diff = max - count;
+ if (diff > addedAmount) {
+ diff = addedAmount;
+ }
+ addedAmount -= diff;
+
+ if (rv.isEmpty()) rv = new LinkedHashMap<>();
+
+ if (computeNewItem) {
+ current = (current == null ? added : current).clone();
+ current.setAmount(count + diff);
+ rv.put(i, current);
+ } else {
+ rv.put(i, null);
+ }
+ }
+ }
+ }
+
+ return rv;
+ }
+
+
+ public static ItemStack getNewHeldItemIfPickedUp(PlayerInventory inventory, ItemStack added) {
+ int heldItemSlot = inventory.getHeldItemSlot();
+ ItemStack heldItem = inventory.getItem(heldItemSlot);
+
+ if (SpigotUtil.isItemPresent(heldItem) && !added.isSimilar(heldItem)) {
+ return null;
+ }
+
+ int amt = added.getAmount();
+ for (int i = 0; i < heldItemSlot; i++) {
+ ItemStack item = inventory.getItem(i);
+ if (!SpigotUtil.isItemPresent(item)) {
+ return null;
+ }
+ if (item.isSimilar(item)) {
+ amt -= Math.max(0, item.getMaxStackSize() - item.getAmount());
+ if (amt <= 0) {
+ return null;
+ }
+ }
+ }
+
+ added = added.clone();
+ added.setAmount(amt + Math.max(0, heldItem == null ? 0 : heldItem.getAmount()));
+ return added;
+ }
+
+
+}