mirror of
https://github.com/GTNewHorizons/StorageDrawers.git
synced 2026-11-13 00:47:31 +00:00
Change setInventorySlotContents balance code to fix ExU item-voiding bug.
This commit is contained in:
1 parent
55a05ebcdd
commit
d29d4fa23d
5 files changed
+73
-17
No files matched your search
+1
-1
@@ -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"
|
||||
|
||||
|
||||
@@ -6,6 +6,10 @@ public interface IInventoryAdapter
|
||||
{
|
||||
ItemStack getInventoryStack (SlotType slotType);
|
||||
|
||||
void setInStack (ItemStack stack);
|
||||
|
||||
void setOutStack (ItemStack stack);
|
||||
|
||||
void syncInventory ();
|
||||
|
||||
boolean syncInventoryIfNeeded ();
|
||||
|
||||
@@ -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 ();
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in new issue
Block a user