Thanks. And then, if I should use packet, can I reuse my own IMessage implementation that I've used to send data to the server? Here's the code:
public class PacketMemo implements IMessage {
private BlockPos pos;
private String text;
private int color;
public PacketMemo(){}
public PacketMemo(BlockPos pos, String text, int color) {
this.pos = pos;
this.text = text;
this.color = color;
}
@Override
public void fromBytes(ByteBuf buf) {
pos = BlockPos.fromLong(buf.readLong());
int textLength = buf.readInt();
char[] textArr = new char[textLength];
for (int i = 0; i < textLength; i++) {
textArr[i] = buf.readChar();
}
text = new String(textArr);
color = buf.readInt();
}
@Override
public void toBytes(ByteBuf buf) {
buf.writeLong(pos.toLong());
buf.writeInt(text.length());
for (int i = 0; i < text.length(); i++) {
buf.writeChar(text.charAt(i));
}
buf.writeInt(color);
}
public static class Handler implements IMessageHandler<PacketMemo, IMessage> {
@Override
public IMessage onMessage(PacketMemo message, MessageContext ctx) {
FMLCommonHandler.instance().getWorldThread(ctx.netHandler).addScheduledTask(() -> handle(message, ctx));
return null;
}
public void handle(PacketMemo message, MessageContext ctx) {
WSDMemo wsdMemo = WSDMemo.get(ctx.getServerHandler().player.getServerWorld());
wsdMemo.addOrEditMemo(message.pos, message.text, message.color);
}
}
}