aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/kekztech/MultiItemHandler.java
diff options
context:
space:
mode:
authorkekzdealer <kekzdealer@gmail.com>2019-11-21 18:38:33 +0100
committerkekzdealer <kekzdealer@gmail.com>2019-11-21 18:38:33 +0100
commitf9eac626254ed31477925618a45af5005e4628ac (patch)
tree60e9b73067f9cb5e7a656a1d73b2a232887e0da8 /src/main/java/kekztech/MultiItemHandler.java
parent5fe214204875ac23e078e514dcd4fc8a001e3d37 (diff)
downloadGT5-Unofficial-f9eac626254ed31477925618a45af5005e4628ac.tar.gz
GT5-Unofficial-f9eac626254ed31477925618a45af5005e4628ac.tar.bz2
GT5-Unofficial-f9eac626254ed31477925618a45af5005e4628ac.zip
first try at MultiItemHandler
Diffstat (limited to 'src/main/java/kekztech/MultiItemHandler.java')
-rw-r--r--src/main/java/kekztech/MultiItemHandler.java86
1 files changed, 81 insertions, 5 deletions
diff --git a/src/main/java/kekztech/MultiItemHandler.java b/src/main/java/kekztech/MultiItemHandler.java
index aac3dc59c4..766abbbb93 100644
--- a/src/main/java/kekztech/MultiItemHandler.java
+++ b/src/main/java/kekztech/MultiItemHandler.java
@@ -1,18 +1,41 @@
package kekztech;
+import java.util.ArrayList;
+
+import net.minecraft.item.ItemStack;
+
public class MultiItemHandler {
- private int itemTypeCapacity = 128;
- private int perTypeCapacity = 1024;
+ private int perTypeCapacity = 0;
private boolean locked = true;
+ private final ArrayList<ItemStack> items = new ArrayList<>();
+
public MultiItemHandler() {
}
- public void setItemTypeCapacity(int itemTypeCapacity) {
- this.itemTypeCapacity = itemTypeCapacity;
+ /**
+ * Tries to adapt the internal storage to match structure changes.
+ * Structure should turn off and give a warning if this returns false.
+ * Otherwise items might unavailable.
+ *
+ * @param itemTypeCapacity
+ * New item array length to adapt to.
+ * @return Success status of the operation.
+ */
+ public boolean setItemTypeCapacity(int itemTypeCapacity) {
+ if(items.size() > itemTypeCapacity) {
+ System.out.println("WARNING: ITEM SERVER STRUCTURE WAS DOWNSIZED TOO FAR! LOCKING FOR SAFETY.");
+ setLock(true);
+ return false;
+ } else {
+ items.ensureCapacity(itemTypeCapacity);
+ // If the lock was engaged, it should only be disengaged by turning
+ // the structure back on after fixing the above warning.
+ return true;
+ }
}
public void setPerTypeCapacity(int perTypeCapacity) {
@@ -21,6 +44,7 @@ public class MultiItemHandler {
/**
* Lock internal storage in case Item Server is not running.
+ * May also be engaged in case of item safety issues.
*
* @param state
* Lock state.
@@ -30,12 +54,64 @@ public class MultiItemHandler {
}
public int getItemTypeCapacity() {
- return itemTypeCapacity;
+ return items.size();
}
public int getPerTypeCapacity() {
return perTypeCapacity;
}
+ public ItemStack getStackInSlot(int slot) {
+ System.out.println("Stack in slot " + slot + " requested");
+ if(locked || slot >= items.size()) {
+ return null;
+ } else {
+ return items.get(slot);
+ }
+ }
+
+ public void insertStackInSlot(int slot, ItemStack itemStack) {
+ System.out.println("Inserting " + itemStack.getDisplayName() + " into " + slot);
+ if(itemStack == null
+ || items.get(slot) != null
+ || locked
+ || slot >= items.size()) {
+ return;
+ } else {
+ items.set(slot, itemStack);
+ }
+ }
+
+ public int increaseStackInSlot(int slot, int amount) {
+ System.out.println("Increasing item in slot " + slot + " by " + amount);
+ if(slot >= items.size()
+ || locked
+ || amount <= 0) {
+ return 0;
+ } else {
+ final int space = perTypeCapacity - items.get(slot).stackSize;
+ final int fit = Math.min(space, amount);
+ items.get(slot).stackSize += fit;
+ return fit;
+ }
+ }
+
+ public int reduceStackInSlot(int slot, int amount) {
+ System.out.println("Reducing item in slot " + slot + " by " + amount);
+ if(slot >= items.size()
+ || locked
+ || amount <= 0) {
+ return 0;
+ } else {
+ final int available = items.get(slot).stackSize;
+ final int take = Math.min(available, amount);
+ items.get(slot).stackSize -= take;
+ if(take == available) {
+ items.set(slot, null);
+ }
+ return take;
+ }
+ }
+
}