Send connectivity data in description packet
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -57,7 +57,7 @@ public class MessageDetectorPoweredUpdate implements IMessage, IMessageHandler<M
|
||||
((TileDetector) tile).setPowered(message.powered);
|
||||
|
||||
if (wasPowered != message.powered) {
|
||||
RefinedStorageUtils.reRenderBlock(world, pos);
|
||||
RefinedStorageUtils.updateBlock(world, pos);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,66 +0,0 @@
|
||||
package refinedstorage.network;
|
||||
|
||||
import io.netty.buffer.ByteBuf;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.fml.common.network.simpleimpl.IMessage;
|
||||
import net.minecraftforge.fml.common.network.simpleimpl.IMessageHandler;
|
||||
import net.minecraftforge.fml.common.network.simpleimpl.MessageContext;
|
||||
import refinedstorage.RefinedStorageUtils;
|
||||
import refinedstorage.proxy.ClientProxy;
|
||||
import refinedstorage.tile.TileMachine;
|
||||
|
||||
public class MessageMachineConnectedUpdate implements IMessage, IMessageHandler<MessageMachineConnectedUpdate, IMessage> {
|
||||
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;
|
||||
}
|
||||
}
|
||||
@@ -57,7 +57,7 @@ public class MessageSoldererWorkingUpdate implements IMessage, IMessageHandler<M
|
||||
((TileSolderer) tile).setWorking(message.working);
|
||||
|
||||
if (wasWorking != message.working) {
|
||||
RefinedStorageUtils.reRenderBlock(world, pos);
|
||||
RefinedStorageUtils.updateBlock(world, pos);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -33,32 +33,33 @@ import static refinedstorage.RefinedStorage.ID;
|
||||
|
||||
public class CommonProxy {
|
||||
public void preInit(FMLPreInitializationEvent e) {
|
||||
RefinedStorage.NETWORK.registerMessage(MessageMachineConnectedUpdate.class, MessageMachineConnectedUpdate.class, 0, Side.CLIENT);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageTileContainerUpdate.class, MessageTileContainerUpdate.class, 1, Side.CLIENT);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageControllerEnergyUpdate.class, MessageControllerEnergyUpdate.class, 2, Side.CLIENT);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageSoldererWorkingUpdate.class, MessageSoldererWorkingUpdate.class, 3, Side.CLIENT);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageDetectorPoweredUpdate.class, MessageDetectorPoweredUpdate.class, 4, Side.CLIENT);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageRedstoneModeUpdate.class, MessageRedstoneModeUpdate.class, 5, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageGridStoragePush.class, MessageGridStoragePush.class, 6, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageGridStoragePull.class, MessageGridStoragePull.class, 7, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageCompareUpdate.class, MessageCompareUpdate.class, 8, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageModeToggle.class, MessageModeToggle.class, 9, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageDetectorModeUpdate.class, MessageDetectorModeUpdate.class, 10, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageDetectorAmountUpdate.class, MessageDetectorAmountUpdate.class, 11, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageGridCraftingClear.class, MessageGridCraftingClear.class, 12, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessagePriorityUpdate.class, MessagePriorityUpdate.class, 13, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageGridSettingsUpdate.class, MessageGridSettingsUpdate.class, 14, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageGridCraftingPush.class, MessageGridCraftingPush.class, 15, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageGridCraftingTransfer.class, MessageGridCraftingTransfer.class, 16, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageWirelessGridSettingsUpdate.class, MessageWirelessGridSettingsUpdate.class, 17, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageWirelessGridItems.class, MessageWirelessGridItems.class, 18, Side.CLIENT);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageWirelessGridStoragePush.class, MessageWirelessGridStoragePush.class, 19, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageWirelessGridStoragePull.class, MessageWirelessGridStoragePull.class, 20, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageGridCraftingShift.class, MessageGridCraftingShift.class, 21, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageGridCraftingStart.class, MessageGridCraftingStart.class, 22, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageWirelessGridCraftingStart.class, MessageWirelessGridCraftingStart.class, 23, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageGridPatternCreate.class, MessageGridPatternCreate.class, 24, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageCraftingMonitorCancel.class, MessageCraftingMonitorCancel.class, 25, Side.SERVER);
|
||||
int id = 0;
|
||||
|
||||
RefinedStorage.NETWORK.registerMessage(MessageTileContainerUpdate.class, MessageTileContainerUpdate.class, id++, Side.CLIENT);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageControllerEnergyUpdate.class, MessageControllerEnergyUpdate.class, id++, Side.CLIENT);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageSoldererWorkingUpdate.class, MessageSoldererWorkingUpdate.class, id++, Side.CLIENT);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageDetectorPoweredUpdate.class, MessageDetectorPoweredUpdate.class, id++, Side.CLIENT);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageRedstoneModeUpdate.class, MessageRedstoneModeUpdate.class, id++, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageGridStoragePush.class, MessageGridStoragePush.class, id++, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageGridStoragePull.class, MessageGridStoragePull.class, id++, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageCompareUpdate.class, MessageCompareUpdate.class, id++, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageModeToggle.class, MessageModeToggle.class, id++, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageDetectorModeUpdate.class, MessageDetectorModeUpdate.class, id++, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageDetectorAmountUpdate.class, MessageDetectorAmountUpdate.class, id++, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageGridCraftingClear.class, MessageGridCraftingClear.class, id++, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessagePriorityUpdate.class, MessagePriorityUpdate.class, id++, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageGridSettingsUpdate.class, MessageGridSettingsUpdate.class, id++, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageGridCraftingPush.class, MessageGridCraftingPush.class, id++, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageGridCraftingTransfer.class, MessageGridCraftingTransfer.class, id++, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageWirelessGridSettingsUpdate.class, MessageWirelessGridSettingsUpdate.class, id++, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageWirelessGridItems.class, MessageWirelessGridItems.class, id++, Side.CLIENT);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageWirelessGridStoragePush.class, MessageWirelessGridStoragePush.class, id++, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageWirelessGridStoragePull.class, MessageWirelessGridStoragePull.class, id++, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageGridCraftingShift.class, MessageGridCraftingShift.class, id++, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageGridCraftingStart.class, MessageGridCraftingStart.class, id++, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageWirelessGridCraftingStart.class, MessageWirelessGridCraftingStart.class, id++, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageGridPatternCreate.class, MessageGridPatternCreate.class, id++, Side.SERVER);
|
||||
RefinedStorage.NETWORK.registerMessage(MessageCraftingMonitorCancel.class, MessageCraftingMonitorCancel.class, id++, Side.SERVER);
|
||||
|
||||
NetworkRegistry.INSTANCE.registerGuiHandler(RefinedStorage.INSTANCE, new GuiHandler());
|
||||
|
||||
|
||||
@@ -64,20 +64,28 @@ public abstract class TileBase extends TileEntity implements ITickable {
|
||||
nbt.setInteger(NBT_DIRECTION, direction.ordinal());
|
||||
}
|
||||
|
||||
public void writeToDescriptionPacketNBT(NBTTagCompound tag) {
|
||||
tag.setInteger(NBT_DIRECTION, direction.ordinal());
|
||||
}
|
||||
|
||||
public void readFromDescriptionPacketNBT(NBTTagCompound tag) {
|
||||
direction = EnumFacing.getFront(tag.getInteger(NBT_DIRECTION));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Packet getDescriptionPacket() {
|
||||
NBTTagCompound nbt = new NBTTagCompound();
|
||||
|
||||
nbt.setInteger(NBT_DIRECTION, direction.ordinal());
|
||||
writeToDescriptionPacketNBT(nbt);
|
||||
|
||||
return new SPacketUpdateTileEntity(pos, 1, nbt);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity packet) {
|
||||
direction = EnumFacing.getFront(packet.getNbtCompound().getInteger(NBT_DIRECTION));
|
||||
readFromDescriptionPacketNBT(packet.getNbtCompound());
|
||||
|
||||
RefinedStorageUtils.reRenderBlock(worldObj, pos);
|
||||
RefinedStorageUtils.updateBlock(worldObj, pos);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -16,4 +16,9 @@ public class TileCable extends TileMachine {
|
||||
public Class<? extends Container> getContainer() {
|
||||
return null;
|
||||
}
|
||||
|
||||
public boolean maySendConnectivityData() {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user