diff --git a/src/main/java/appeng/items/contents/NetworkToolViewer.java b/src/main/java/appeng/items/contents/NetworkToolViewer.java index cdae02d4..79a0fa62 100644 --- a/src/main/java/appeng/items/contents/NetworkToolViewer.java +++ b/src/main/java/appeng/items/contents/NetworkToolViewer.java @@ -54,13 +54,12 @@ public class NetworkToolViewer implements INetworkTool, IAEAppEngInventory @Override public void saveChanges() { - this.inv.markDirty( -1 ); + this.inv.writeToNBT( Platform.openNbtData( this.is ), "inv" ); } @Override public void onChangeInventory( IItemHandler inv, int slot, InvOperation mc, ItemStack removedStack, ItemStack newStack ) { - this.inv.writeToNBT( Platform.openNbtData( this.is ), "inv" ); } @Override diff --git a/src/main/java/appeng/tile/inventory/AppEngInternalAEInventory.java b/src/main/java/appeng/tile/inventory/AppEngInternalAEInventory.java index 4b67ca09..95fe51e8 100644 --- a/src/main/java/appeng/tile/inventory/AppEngInternalAEInventory.java +++ b/src/main/java/appeng/tile/inventory/AppEngInternalAEInventory.java @@ -46,6 +46,7 @@ public class AppEngInternalAEInventory implements IInternalItemHandler, Iterable private final IAEItemStack[] inv; private final int size; private int maxStack; + private boolean dirtyFlag = false; public AppEngInternalAEInventory( final IAEAppEngInventory te, final int s ) { @@ -252,8 +253,10 @@ public class AppEngInternalAEInventory implements IInternalItemHandler, Iterable { if( this.te != null && Platform.isServer() ) { + this.dirtyFlag = true; this.te.onChangeInventory( this, slot, op, removed, inserted ); this.te.saveChanges(); + this.dirtyFlag = false; } } @@ -283,6 +286,9 @@ public class AppEngInternalAEInventory implements IInternalItemHandler, Iterable @Override public void markDirty( int slot ) { - this.fireOnChangeInventory( slot, InvOperation.DIRTY, ItemStack.EMPTY, ItemStack.EMPTY ); + if( !this.dirtyFlag ) + { + this.fireOnChangeInventory( slot, InvOperation.DIRTY, ItemStack.EMPTY, ItemStack.EMPTY ); + } } } diff --git a/src/main/java/appeng/tile/inventory/AppEngInternalInventory.java b/src/main/java/appeng/tile/inventory/AppEngInternalInventory.java index 1ee707ca..d7add405 100644 --- a/src/main/java/appeng/tile/inventory/AppEngInternalInventory.java +++ b/src/main/java/appeng/tile/inventory/AppEngInternalInventory.java @@ -43,6 +43,7 @@ public class AppEngInternalInventory extends ItemStackHandler implements IIntern private final int[] maxStack; private ItemStack previousStack = ItemStack.EMPTY; private IAEItemFilter filter; + private boolean dirtyFlag = false; public AppEngInternalInventory( final IAEAppEngInventory inventory, final int size, final int maxStack, IAEItemFilter filter ) { @@ -118,6 +119,7 @@ public class AppEngInternalInventory extends ItemStackHandler implements IIntern { if( this.getTileEntity() != null && this.eventsEnabled() ) { + this.dirtyFlag = true; ItemStack newStack = this.getStackInSlot( slot ).copy(); ItemStack oldStack = this.previousStack; InvOperation op = InvOperation.SET; @@ -141,6 +143,7 @@ public class AppEngInternalInventory extends ItemStackHandler implements IIntern this.getTileEntity().onChangeInventory( this, slot, op, oldStack, newStack ); this.getTileEntity().saveChanges(); this.previousStack = ItemStack.EMPTY; + this.dirtyFlag = false; } super.onContentsChanged( slot ); } @@ -158,10 +161,12 @@ public class AppEngInternalInventory extends ItemStackHandler implements IIntern @Override public void markDirty( final int slot ) { - if( this.getTileEntity() != null && this.eventsEnabled() ) + if( this.getTileEntity() != null && this.eventsEnabled() && !this.dirtyFlag ) { + this.dirtyFlag = true; this.getTileEntity().onChangeInventory( this, slot, InvOperation.DIRTY, ItemStack.EMPTY, ItemStack.EMPTY ); this.getTileEntity().saveChanges(); + this.dirtyFlag = false; } }