I have a TileEntity, with both getUpdatePacket() and onDataPacket() methods overridden.
According to the Forge documentation: https://mcforge.readthedocs.io/en/latest/tileentities/tileentity/#synchronizing-on-block-update
They should trigger whenever the block receives a block update, so I've used world.updateBlock(BlockPos pos, Block block) to trigger it, but it does not work.
In fact they only trigger when I place the block down, but not when an adjacent block changed.
here are the two methods:
private BlockPos link = null;
private boolean receiverIsPylon = false;
@Nullable
@Override
public SUpdateTileEntityPacket getUpdatePacket(){
CompoundNBT tag = new CompoundNBT();
tag.putBoolean("receiverIsPylon", receiverIsPylon);
if (link != null) {
int pos[] = {link.getX(), link.getY(), link.getZ()};
tag.putIntArray("LinkedTo", pos);
}
System.out.print("Send Data\n");
return new SUpdateTileEntityPacket(getPos(), -1, tag);
}
@Override
public void onDataPacket(NetworkManager net, SUpdateTileEntityPacke
CompoundNBT tag = pkt.getNbtCompound();
receiverIsPylon = tag.getBoolean("receiverIsPylon");
if (tag.contains("LinkedTo")) {
int pos[] = tag.getIntArray("LinkedTo");
link = new BlockPos(pos[0], pos[1], pos[2]);
}
System.out.print("Received Data\n");
}
I cant find the World#sendBlockUpdated(BlockPos pos, BlockState oldState, BlockState newState, int flags) method from the documentation,
but that's probably because I'm using different Mappings (mappings channel: 'snapshot', version: '20210309-1.16.5').
'link' and 'receiverIsPylon' both get changed in my tick() method.
Is there something else I need?