From a89ff4bc29f1e3bd695901e79e5e333811c96d84 Mon Sep 17 00:00:00 2001 From: Ellpeck Date: Thu, 1 Sep 2016 17:08:34 +0200 Subject: [PATCH] Did a change to NBT saving and syncing that might fix weird bugs that are happening :v --- .../mod/network/PacketHandler.java | 2 +- .../mod/tile/TileEntityBase.java | 84 ++++++++----------- .../mod/tile/TileEntityLaserRelay.java | 43 +++++----- 3 files changed, 60 insertions(+), 69 deletions(-) diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java index 4b6dfa806..9a67f61d5 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/network/PacketHandler.java @@ -59,7 +59,7 @@ public final class PacketHandler{ if(world != null){ TileEntity tile = world.getTileEntity(new BlockPos(compound.getInteger("X"), compound.getInteger("Y"), compound.getInteger("Z"))); if(tile != null && tile instanceof TileEntityBase){ - ((TileEntityBase)tile).receiveSyncCompound(compound.getCompoundTag("Data")); + ((TileEntityBase)tile).readSyncableNBT(compound.getCompoundTag("Data"), TileEntityBase.NBTType.SYNC); } } } diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java index 696736b96..8c9bb2035 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityBase.java @@ -26,7 +26,6 @@ import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EnumFacing; import net.minecraft.util.ITickable; import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentTranslation; import net.minecraft.world.World; @@ -130,41 +129,30 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ } @Override - public void readFromNBT(NBTTagCompound compound){ - this.readSyncableNBT(compound, NBTType.SAVE_TILE); - } - - @Override - public NBTTagCompound writeToNBT(NBTTagCompound compound){ + public final NBTTagCompound writeToNBT(NBTTagCompound compound){ this.writeSyncableNBT(compound, NBTType.SAVE_TILE); return compound; } @Override - public SPacketUpdateTileEntity getUpdatePacket(){ - NBTTagCompound compound = this.getUpdateTag(); - if(compound != null){ - return new SPacketUpdateTileEntity(this.pos, 0, compound); - } - else{ - return null; - } + public final void readFromNBT(NBTTagCompound compound){ + this.readSyncableNBT(compound, NBTType.SAVE_TILE); + } + + @Override + public final SPacketUpdateTileEntity getUpdatePacket(){ + NBTTagCompound compound = new NBTTagCompound(); + this.writeSyncableNBT(compound, NBTType.SYNC); + return new SPacketUpdateTileEntity(this.pos, -1, compound); } @Override public final void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt){ - if(pkt != null){ - NBTTagCompound compound = pkt.getNbtCompound(); - this.receiveSyncCompound(compound); - } - } - - public void receiveSyncCompound(NBTTagCompound compound){ - this.readSyncableNBT(compound, NBTType.SYNC); + this.readSyncableNBT(pkt.getNbtCompound(), NBTType.SYNC); } @Override - public NBTTagCompound getUpdateTag(){ + public final NBTTagCompound getUpdateTag(){ NBTTagCompound compound = new NBTTagCompound(); this.writeSyncableNBT(compound, NBTType.SYNC); return compound; @@ -172,12 +160,21 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ @Override public final void handleUpdateTag(NBTTagCompound compound){ - this.receiveSyncCompound(compound); + this.readSyncableNBT(compound, NBTType.SYNC); } - @Override - public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newState){ - return !oldState.getBlock().isAssociatedBlock(newState.getBlock()); + public final void sendUpdate(){ + if(!this.worldObj.isRemote){ + NBTTagCompound compound = new NBTTagCompound(); + this.writeSyncableNBT(compound, NBTType.SYNC); + + NBTTagCompound data = new NBTTagCompound(); + data.setTag("Data", compound); + data.setInteger("X", this.pos.getX()); + data.setInteger("Y", this.pos.getY()); + data.setInteger("Z", this.pos.getZ()); + PacketHandler.theNetwork.sendToAllAround(new PacketServerToClient(data, PacketHandler.TILE_ENTITY_HANDLER), new NetworkRegistry.TargetPoint(this.worldObj.provider.getDimension(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), 128)); + } } public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ @@ -192,11 +189,6 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ } } - @Override - public ITextComponent getDisplayName(){ - return new TextComponentTranslation("container."+ModUtil.MOD_ID+"."+this.name+".name"); - } - public void readSyncableNBT(NBTTagCompound compound, NBTType type){ super.readFromNBT(compound); @@ -210,7 +202,17 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ } @Override - public void update(){ + public boolean shouldRefresh(World world, BlockPos pos, IBlockState oldState, IBlockState newState){ + return !oldState.getBlock().isAssociatedBlock(newState.getBlock()); + } + + @Override + public ITextComponent getDisplayName(){ + return new TextComponentTranslation("container."+ModUtil.MOD_ID+"."+this.name+".name"); + } + + @Override + public final void update(){ this.updateEntity(); } @@ -275,20 +277,6 @@ public abstract class TileEntityBase extends TileEntity implements ITickable{ } } - public void sendUpdate(){ - if(!this.worldObj.isRemote){ - NBTTagCompound compound = this.getUpdateTag(); - if(compound != null){ - NBTTagCompound data = new NBTTagCompound(); - data.setTag("Data", compound); - data.setInteger("X", this.pos.getX()); - data.setInteger("Y", this.pos.getY()); - data.setInteger("Z", this.pos.getZ()); - PacketHandler.theNetwork.sendToAllAround(new PacketServerToClient(data, PacketHandler.TILE_ENTITY_HANDLER), new NetworkRegistry.TargetPoint(this.worldObj.provider.getDimension(), this.getPos().getX(), this.getPos().getY(), this.getPos().getZ(), 128)); - } - } - } - @Override public boolean hasCapability(Capability capability, EnumFacing facing){ return this.getCapability(capability, facing) != null; diff --git a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java index d3a74e9a5..d55f71bca 100644 --- a/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java +++ b/src/main/java/de/ellpeck/actuallyadditions/mod/tile/TileEntityLaserRelay.java @@ -48,35 +48,38 @@ public abstract class TileEntityLaserRelay extends TileEntityBase{ } @Override - public void receiveSyncCompound(NBTTagCompound compound){ - ActuallyAdditionsAPI.connectionHandler.removeRelayFromNetwork(this.pos, this.worldObj); + public void readSyncableNBT(NBTTagCompound compound, NBTType type){ + super.readSyncableNBT(compound, type); - NBTTagList list = compound.getTagList("Connections", 10); - if(!list.hasNoTags()){ - for(int i = 0; i < list.tagCount(); i++){ - ConnectionPair pair = ConnectionPair.readFromNBT(list.getCompoundTagAt(i)); - ActuallyAdditionsAPI.connectionHandler.addConnection(pair.positions[0], pair.positions[1], this.worldObj, pair.suppressConnectionRender); + if(type == NBTType.SYNC){ + ActuallyAdditionsAPI.connectionHandler.removeRelayFromNetwork(this.pos, this.worldObj); + + NBTTagList list = compound.getTagList("Connections", 10); + if(!list.hasNoTags()){ + for(int i = 0; i < list.tagCount(); i++){ + ConnectionPair pair = ConnectionPair.readFromNBT(list.getCompoundTagAt(i)); + ActuallyAdditionsAPI.connectionHandler.addConnection(pair.positions[0], pair.positions[1], this.worldObj, pair.suppressConnectionRender); + } } } - - super.receiveSyncCompound(compound); } - @Override - public NBTTagCompound getUpdateTag(){ - NBTTagCompound compound = super.getUpdateTag(); - NBTTagList list = new NBTTagList(); + public void writeSyncableNBT(NBTTagCompound compound, NBTType type){ + super.writeSyncableNBT(compound, type); - ConcurrentSet connections = ActuallyAdditionsAPI.connectionHandler.getConnectionsFor(this.pos, this.worldObj); - if(connections != null && !connections.isEmpty()){ - for(ConnectionPair pair : connections){ - list.appendTag(pair.writeToNBT()); + if(type == NBTType.SYNC){ + NBTTagList list = new NBTTagList(); + + ConcurrentSet connections = ActuallyAdditionsAPI.connectionHandler.getConnectionsFor(this.pos, this.worldObj); + if(connections != null && !connections.isEmpty()){ + for(ConnectionPair pair : connections){ + list.appendTag(pair.writeToNBT()); + } } - } - compound.setTag("Connections", list); - return compound; + compound.setTag("Connections", list); + } } @Override