Revert the fix, tried to fix it another way

This commit is contained in:
Ellpeck 2016-01-11 22:41:33 +01:00
parent 85428e885d
commit ab0adfa25b
3 changed files with 33 additions and 44 deletions

View file

@ -33,6 +33,8 @@ public class VanillaPacketSyncer{
} }
public static void sendTileToPlayer(TileEntity tile, EntityPlayerMP player){ public static void sendTileToPlayer(TileEntity tile, EntityPlayerMP player){
player.playerNetServerHandler.sendPacket(tile.getDescriptionPacket()); if(player.getEntityWorld().getTileEntity(tile.getPos()) == tile){
player.playerNetServerHandler.sendPacket(tile.getDescriptionPacket());
}
} }
} }

View file

@ -39,8 +39,6 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple
private boolean activateOnceWithSignal; private boolean activateOnceWithSignal;
private int oldEnergy; private int oldEnergy;
public boolean syncSlotsNextTime;
public TileEntityAtomicReconstructor(){ public TileEntityAtomicReconstructor(){
super(1, "reconstructor"); super(1, "reconstructor");
} }
@ -111,12 +109,11 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple
super.writeSyncableNBT(compound, sync); super.writeSyncableNBT(compound, sync);
compound.setInteger("CurrentTime", this.currentTime); compound.setInteger("CurrentTime", this.currentTime);
this.storage.writeToNBT(compound); this.storage.writeToNBT(compound);
}
if(this.syncSlotsNextTime){ @Override
this.writeSlotsToCompound(compound); public boolean shouldSyncSlots(){
compound.setBoolean("ShouldSync", true); return true;
this.syncSlotsNextTime = false;
}
} }
@Override @Override
@ -124,22 +121,16 @@ public class TileEntityAtomicReconstructor extends TileEntityInventoryBase imple
super.readSyncableNBT(compound, sync); super.readSyncableNBT(compound, sync);
this.currentTime = compound.getInteger("CurrentTime"); this.currentTime = compound.getInteger("CurrentTime");
this.storage.readFromNBT(compound); this.storage.readFromNBT(compound);
if(compound.getBoolean("ShouldSync")){
this.readSlotsFromCompound(compound);
}
} }
@Override @Override
public void setInventorySlotContents(int i, ItemStack stack){ public void setInventorySlotContents(int i, ItemStack stack){
super.setInventorySlotContents(i, stack); super.setInventorySlotContents(i, stack);
this.syncSlotsNextTime = true;
this.sendUpdate(); this.sendUpdate();
} }
@Override @Override
public ItemStack decrStackSize(int i, int j){ public ItemStack decrStackSize(int i, int j){
this.syncSlotsNextTime = true;
this.sendUpdate(); this.sendUpdate();
return super.decrStackSize(i, j); return super.decrStackSize(i, j);
} }

View file

@ -41,42 +41,38 @@ public abstract class TileEntityInventoryBase extends TileEntityBase implements
@Override @Override
public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){ public void writeSyncableNBT(NBTTagCompound compound, boolean isForSync){
super.writeSyncableNBT(compound, isForSync); super.writeSyncableNBT(compound, isForSync);
if(!isForSync){ if(!isForSync || this.shouldSyncSlots()){
this.writeSlotsToCompound(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 boolean shouldSyncSlots(){
return false;
}
@Override @Override
public void readSyncableNBT(NBTTagCompound compound, boolean isForSync){ public void readSyncableNBT(NBTTagCompound compound, boolean isForSync){
super.readSyncableNBT(compound, isForSync); super.readSyncableNBT(compound, isForSync);
if(!isForSync){ if(!isForSync || this.shouldSyncSlots()){
this.readSlotsFromCompound(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);
public void writeSlotsToCompound(NBTTagCompound compound){ byte slotIndex = tagCompound.getByte("Slot");
if(this.slots.length > 0){ if(slotIndex >= 0 && slotIndex < slots.length){
NBTTagList tagList = new NBTTagList(); slots[slotIndex] = ItemStack.loadItemStackFromNBT(tagCompound);
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);
} }
} }
} }