diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java index 89a7a6276..6e482c98b 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityAtomicReconstructor.java @@ -39,6 +39,8 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple private boolean activateOnceWithSignal; private int oldEnergy; + public boolean syncSlotsNextTime; + public TileEntityAtomicReconstructor(){ super(1, "reconstructor"); } @@ -109,11 +111,12 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple super.writeSyncableNBT(compound, sync); compound.setInteger("CurrentTime", this.currentTime); this.storage.writeToNBT(compound); - } - @Override - public boolean shouldSyncSlots(){ - return true; + if(this.syncSlotsNextTime){ + this.writeSlotsToCompound(compound); + compound.setBoolean("ShouldSync", true); + this.syncSlotsNextTime = false; + } } @Override @@ -121,16 +124,22 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple super.readSyncableNBT(compound, sync); this.currentTime = compound.getInteger("CurrentTime"); this.storage.readFromNBT(compound); + + if(compound.getBoolean("ShouldSync")){ + this.readSlotsFromCompound(compound); + } } @Override public void setInventorySlotContents(int i, ItemStack stack){ super.setInventorySlotContents(i, stack); + this.syncSlotsNextTime = true; this.sendUpdate(); } @Override public ItemStack decrStackSize(int i, int j){ + this.syncSlotsNextTime = true; this.sendUpdate(); return super.decrStackSize(i, j); } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java index 17b84f55c..8f70acaf7 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityInventoryBase.java @@ -41,38 +41,42 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements @Override public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){ super.writeSyncableNBT(compound, isForSync); - if(!isForSync || this.shouldSyncSlots()){ - if(this.slots.length > 0){ - NBTTagList tagList = new NBTTagList(); - for(int currentIndex = 0; currentIndex < slots.length; currentIndex++){ - NBTTagCompound tagCompound = new NBTTagCompound(); - tagCompound.setByte("Slot", (byte)currentIndex); - if(slots[currentIndex] != null){ - slots[currentIndex].writeToNBT(tagCompound); - } - tagList.appendTag(tagCompound); - } - compound.setTag("Items", tagList); - } + if(!isForSync){ + this.writeSlotsToCompound(compound); } } - public boolean shouldSyncSlots(){ - return false; - } - @Override public void readSyncableNBT(NBTTagCompound compound, boolean isForSync){ super.readSyncableNBT(compound, isForSync); - if(!isForSync || this.shouldSyncSlots()){ - if(this.slots.length > 0){ - NBTTagList tagList = compound.getTagList("Items", 10); - for(int i = 0; i < tagList.tagCount(); i++){ - NBTTagCompound tagCompound = tagList.getCompoundTagAt(i); - byte slotIndex = tagCompound.getByte("Slot"); - if(slotIndex >= 0 && slotIndex < slots.length){ - slots[slotIndex] = ItemStack.loadItemStackFromNBT(tagCompound); - } + if(!isForSync){ + this.readSlotsFromCompound(compound); + } + } + + public void writeSlotsToCompound(NBTTagCompound compound){ + if(this.slots.length > 0){ + NBTTagList tagList = new NBTTagList(); + for(int currentIndex = 0; currentIndex < slots.length; currentIndex++){ + NBTTagCompound tagCompound = new NBTTagCompound(); + tagCompound.setByte("Slot", (byte)currentIndex); + if(slots[currentIndex] != null){ + slots[currentIndex].writeToNBT(tagCompound); + } + tagList.appendTag(tagCompound); + } + compound.setTag("Items", tagList); + } + } + + public void readSlotsFromCompound(NBTTagCompound compound){ + if(this.slots.length > 0){ + NBTTagList tagList = compound.getTagList("Items", 10); + for(int i = 0; i < tagList.tagCount(); i++){ + NBTTagCompound tagCompound = tagList.getCompoundTagAt(i); + byte slotIndex = tagCompound.getByte("Slot"); + if(slotIndex >= 0 && slotIndex < slots.length){ + slots[slotIndex] = ItemStack.loadItemStackFromNBT(tagCompound); } } }