diff --git a/build.gradle b/build.gradle index d32711d..455cfc7 100644 --- a/build.gradle +++ b/build.gradle @@ -17,7 +17,7 @@ buildscript { apply plugin: 'forge' -version = "1.7.10-1.5.5" +version = "1.7.10-1.6.0" group= "com.jaquadro.minecraft.storagedrawers" // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = "StorageDrawers" diff --git a/src/com/jaquadro/minecraft/storagedrawers/api/inventory/IInventoryAdapter.java b/src/com/jaquadro/minecraft/storagedrawers/api/inventory/IInventoryAdapter.java index 0e3d176..71f55e3 100644 --- a/src/com/jaquadro/minecraft/storagedrawers/api/inventory/IInventoryAdapter.java +++ b/src/com/jaquadro/minecraft/storagedrawers/api/inventory/IInventoryAdapter.java @@ -6,6 +6,10 @@ public interface IInventoryAdapter { ItemStack getInventoryStack (SlotType slotType); + void setInStack (ItemStack stack); + + void setOutStack (ItemStack stack); + void syncInventory (); boolean syncInventoryIfNeeded (); diff --git a/src/com/jaquadro/minecraft/storagedrawers/inventory/InventoryStack.java b/src/com/jaquadro/minecraft/storagedrawers/inventory/InventoryStack.java index 86a8401..9d9dcce 100644 --- a/src/com/jaquadro/minecraft/storagedrawers/inventory/InventoryStack.java +++ b/src/com/jaquadro/minecraft/storagedrawers/inventory/InventoryStack.java @@ -43,6 +43,62 @@ public abstract class InventoryStack return outStack; } + public void setInStack (ItemStack stack) { + if (stack != null) { + if (inStack == null) + applyDiff(stack.stackSize); + else + applyDiff(stack.stackSize - inCount); + } + + inStack = stack; + syncInStack(); + syncOutStack(); + } + + private void syncInStack () { + if (inStack == null) { + inStack = getNewItemStack(); + inCount = 0; + } + + if (inStack != null) { + int itemStackLimit = getItemStackSize(); + int itemCount = getItemCount(); + int remainingLimit = getItemCapacity() - itemCount; + + inCount = itemStackLimit - Math.min(itemStackLimit, remainingLimit); + inStack.stackSize = inCount; + } + } + + public void setOutStack (ItemStack stack) { + if (outStack != null) { + if (stack == null) + applyDiff(0 - outCount); + else + applyDiff(0 - outCount + stack.stackSize); + } + + outStack = stack; + syncOutStack(); + } + + private void syncOutStack () { + if (outStack == null) { + outStack = getNewItemStack(); + outCount = 0; + } + + if (outStack != null) { + int itemStackLimit = getItemStackSize(); + int itemCount = getItemCount(); + + outCount = Math.min(itemStackLimit, itemCount); + outStack.stackSize = outCount; + } + } + protected abstract ItemStack getNewItemStack (); protected abstract int getItemStackSize (); protected abstract int getItemCount (); diff --git a/src/com/jaquadro/minecraft/storagedrawers/inventory/StorageInventory.java b/src/com/jaquadro/minecraft/storagedrawers/inventory/StorageInventory.java index be4c0f2..839aecc 100644 --- a/src/com/jaquadro/minecraft/storagedrawers/inventory/StorageInventory.java +++ b/src/com/jaquadro/minecraft/storagedrawers/inventory/StorageInventory.java @@ -185,9 +185,6 @@ public class StorageInventory implements IDrawerInventory return; IInventoryAdapter adapter = (IInventoryAdapter)drawer; - adapter.syncInventory(); - - int insertCount = (item != null) ? item.stackSize : 0; switch (getInventorySlotType(slot)) { case INPUT: if (drawer.isEmpty()) { @@ -195,26 +192,15 @@ public class StorageInventory implements IDrawerInventory return; } - ItemStack inStack = adapter.getInventoryStack(SlotType.INPUT); - if (inStack != null) - insertCount -= inStack.stackSize; + adapter.setInStack(item); break; case OUTPUT: - ItemStack outStack = adapter.getInventoryStack(SlotType.OUTPUT); - if (outStack != null) - insertCount -= outStack.stackSize; + adapter.setOutStack(item); break; case STORAGE: setInventorySlotContents(drawer, item); return; } - - if (insertCount != 0) { - int newStoredCount = drawer.getStoredItemCount() + insertCount; - newStoredCount = Math.max(0, Math.min(newStoredCount, drawer.getMaxCapacity())); - - drawer.setStoredItemCount(newStoredCount); - } } private void setInventorySlotContents (IDrawer drawer, ItemStack item) { diff --git a/src/com/jaquadro/minecraft/storagedrawers/storage/BaseDrawerData.java b/src/com/jaquadro/minecraft/storagedrawers/storage/BaseDrawerData.java index 1715f36..d07557d 100644 --- a/src/com/jaquadro/minecraft/storagedrawers/storage/BaseDrawerData.java +++ b/src/com/jaquadro/minecraft/storagedrawers/storage/BaseDrawerData.java @@ -80,6 +80,16 @@ public abstract class BaseDrawerData implements IDrawer, IInventoryAdapter } } + @Override + public void setInStack (ItemStack stack) { + inventoryStack.setInStack(stack); + } + + @Override + public void setOutStack (ItemStack stack) { + inventoryStack.setOutStack(stack); + } + @Override public void syncInventory () { inventoryStack.markDirty();