Change setInventorySlotContents balance code to fix ExU item-voiding bug.

This commit is contained in:
Justin Aquadro committed 2015-06-08 23:44:22 -04:00
1 parent 55a05ebcdd
commit d29d4fa23d
5 files changed
+73 -17

No files matched your search

+1 -1
View File
@@ -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();