diff --git a/src/main/java/refinedstorage/RefinedStorageUtils.java b/src/main/java/refinedstorage/RefinedStorageUtils.java index 53744a223..b22b612ae 100755 --- a/src/main/java/refinedstorage/RefinedStorageUtils.java +++ b/src/main/java/refinedstorage/RefinedStorageUtils.java @@ -309,7 +309,7 @@ public class RefinedStorageUtils { RefinedStorage.NETWORK.sendToAllAround(message, target); } - public static void reRenderBlock(World world, BlockPos pos) { - world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 3); + public static void updateBlock(World world, BlockPos pos) { + world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 1 | 2); } } diff --git a/src/main/java/refinedstorage/block/BlockBase.java b/src/main/java/refinedstorage/block/BlockBase.java index 29e3c5d1a..2eb8dc1a5 100755 --- a/src/main/java/refinedstorage/block/BlockBase.java +++ b/src/main/java/refinedstorage/block/BlockBase.java @@ -90,8 +90,7 @@ public abstract class BlockBase extends Block { ((TileBase) tile).setDirection(EnumFacing.getFront(newDir)); - // This will resend the description packet - world.notifyBlockUpdate(pos, world.getBlockState(pos), world.getBlockState(pos), 1 | 2); + RefinedStorageUtils.updateBlock(world, pos); return true; } diff --git a/src/main/java/refinedstorage/network/MessageControllerEnergyUpdate.java b/src/main/java/refinedstorage/network/MessageControllerEnergyUpdate.java index 123fca91f..36383eefd 100755 --- a/src/main/java/refinedstorage/network/MessageControllerEnergyUpdate.java +++ b/src/main/java/refinedstorage/network/MessageControllerEnergyUpdate.java @@ -59,7 +59,7 @@ public class MessageControllerEnergyUpdate implements IMessage, IMessageHandler< ((TileController) tile).setEnergyStored(message.energy); if (lastEnergy != message.energy && System.currentTimeMillis() - LAST_RE_RENDER > 3000) { - RefinedStorageUtils.reRenderBlock(world, pos); + RefinedStorageUtils.updateBlock(world, pos); LAST_RE_RENDER = System.currentTimeMillis(); } diff --git a/src/main/java/refinedstorage/network/MessageDetectorPoweredUpdate.java b/src/main/java/refinedstorage/network/MessageDetectorPoweredUpdate.java index 727a0b67a..9f4c95b2c 100755 --- a/src/main/java/refinedstorage/network/MessageDetectorPoweredUpdate.java +++ b/src/main/java/refinedstorage/network/MessageDetectorPoweredUpdate.java @@ -57,7 +57,7 @@ public class MessageDetectorPoweredUpdate implements IMessage, IMessageHandler { - private int x; - private int y; - private int z; - private boolean connected; - - public MessageMachineConnectedUpdate() { - } - - public MessageMachineConnectedUpdate(TileMachine machine) { - this.x = machine.getPos().getX(); - this.y = machine.getPos().getY(); - this.z = machine.getPos().getZ(); - this.connected = machine.isConnected() && machine.mayUpdate(); - } - - @Override - public void fromBytes(ByteBuf buf) { - x = buf.readInt(); - y = buf.readInt(); - z = buf.readInt(); - connected = buf.readBoolean(); - } - - @Override - public void toBytes(ByteBuf buf) { - buf.writeInt(x); - buf.writeInt(y); - buf.writeInt(z); - buf.writeBoolean(connected); - } - - @Override - public IMessage onMessage(MessageMachineConnectedUpdate message, MessageContext ctx) { - BlockPos pos = new BlockPos(message.x, message.y, message.z); - - World world = ClientProxy.getWorld(); - - TileEntity tile = world.getTileEntity(pos); - - if (tile instanceof TileMachine) { - boolean wasConnected = ((TileMachine) tile).isConnected(); - - ((TileMachine) tile).setConnected(message.connected); - - if (wasConnected != message.connected) { - RefinedStorageUtils.reRenderBlock(world, pos); - } - } - - return null; - } -} diff --git a/src/main/java/refinedstorage/network/MessageSoldererWorkingUpdate.java b/src/main/java/refinedstorage/network/MessageSoldererWorkingUpdate.java index 47f9c8000..512f9cbee 100755 --- a/src/main/java/refinedstorage/network/MessageSoldererWorkingUpdate.java +++ b/src/main/java/refinedstorage/network/MessageSoldererWorkingUpdate.java @@ -57,7 +57,7 @@ public class MessageSoldererWorkingUpdate implements IMessage, IMessageHandler getContainer() { return null; } + + public boolean maySendConnectivityData() { + return false; + } + } diff --git a/src/main/java/refinedstorage/tile/TileMachine.java b/src/main/java/refinedstorage/tile/TileMachine.java index eec150ed1..976d471fb 100755 --- a/src/main/java/refinedstorage/tile/TileMachine.java +++ b/src/main/java/refinedstorage/tile/TileMachine.java @@ -6,7 +6,6 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; import refinedstorage.RefinedStorageUtils; -import refinedstorage.network.MessageMachineConnectedUpdate; import refinedstorage.tile.config.IRedstoneModeConfig; import refinedstorage.tile.config.RedstoneMode; @@ -14,7 +13,10 @@ import java.util.HashSet; import java.util.Set; public abstract class TileMachine extends TileBase implements ISynchronizedContainer, IRedstoneModeConfig { - protected boolean connected = false; + public static final String NBT_DESC_CONNECTED = "Connected"; + + protected boolean connected; + protected boolean wasConnected; protected RedstoneMode redstoneMode = RedstoneMode.IGNORE; protected TileController controller; @@ -53,12 +55,18 @@ public abstract class TileMachine extends TileBase implements ISynchronizedConta searchController(worldObj); } - if (!(this instanceof TileCable) && ticks % 4 == 0) { - RefinedStorageUtils.sendToAllAround(worldObj, pos, new MessageMachineConnectedUpdate(this)); + if (wasConnected != (isConnected() && mayUpdate()) && maySendConnectivityData()) { + wasConnected = isConnected() && mayUpdate(); + + RefinedStorageUtils.updateBlock(worldObj, pos); } } } + public boolean maySendConnectivityData() { + return true; + } + public boolean mayUpdate() { return redstoneMode.isEnabled(worldObj, pos); } @@ -144,6 +152,18 @@ public abstract class TileMachine extends TileBase implements ISynchronizedConta nbt.setInteger(RedstoneMode.NBT, redstoneMode.id); } + public void writeToDescriptionPacketNBT(NBTTagCompound tag) { + super.writeToDescriptionPacketNBT(tag); + + tag.setBoolean(NBT_DESC_CONNECTED, isConnected() && mayUpdate()); + } + + public void readFromDescriptionPacketNBT(NBTTagCompound tag) { + super.readFromDescriptionPacketNBT(tag); + + connected = tag.getBoolean(NBT_DESC_CONNECTED); + } + public abstract int getEnergyUsage(); public abstract void updateMachine();