Hi, I created a SimpleChannel and sent a few messages about it. The problem is that when I'm on the multiplayer (external server), I don't receive the message. My guess is that I read the message before the message is received. But how can I receive the message, I did not come to a solution
SimpleChannelMessage:
package net.lager.system.client;
import java.util.function.Supplier;
import net.lager.system.register.ConnectionHandlerRegister;
import net.minecraft.entity.player.ServerPlayerEntity;
import net.minecraft.network.PacketBuffer;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.BlockPos;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.fml.DistExecutor;
import net.minecraftforge.fml.common.thread.SidedThreadGroups;
import net.minecraftforge.fml.network.NetworkEvent;
public class SimpleChannelMessage {
public String msg;
private ResourceLocation rl;
public BlockPos bpos;
public SimpleChannelMessage(ResourceLocation rl, String msg) {
this.rl = rl;
this.msg = msg;
}
public SimpleChannelMessage(ResourceLocation rl, String msg, BlockPos bpos) {
this.rl = rl;
this.msg = msg;
this.bpos = bpos;
}
public static void encode(SimpleChannelMessage msg, PacketBuffer buffer) {
java.lang.System.out.println("encode");
buffer.writeBytes(("." + msg.rl.getNamespace() + ":" + msg.rl.getPath() + " " + msg.msg).getBytes());
buffer.writeBlockPos(msg.bpos);
java.lang.System.out.println(msg.rl.getNamespace() + ":" + msg.rl.getPath() + " " + msg.msg);
}
public static SimpleChannelMessage decode(PacketBuffer buffer) {
java.lang.System.out.println("decode");
buffer.capacity(17000);
buffer.writerIndex(16000);
String[] list = new String(buffer.readByteArray()).split(" ");
String rls = list[0];
java.lang.System.out.println(new String(buffer.readByteArray(16000)));
ResourceLocation rl = new ResourceLocation(rls.split(":")[0], rls.split(":")[1]);
String msg = list[1];
BlockPos bpos = buffer.readBlockPos();
if (bpos == null) {
return new SimpleChannelMessage(rl, msg);
} else {
return new SimpleChannelMessage(rl, msg, bpos);
}
}
public static void handle(SimpleChannelMessage msg, Supplier<NetworkEvent.Context> ctx) {
java.lang.System.out.println("handle");
ctx.get().enqueueWork(() -> {
DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> {if (Thread.currentThread().getThreadGroup() == SidedThreadGroups.SERVER) {
SimpleChannelMessage.handleServer(msg, ctx);
} else if(Thread.currentThread().getThreadGroup() == SidedThreadGroups.CLIENT) {
SimpleChannelMessage.handleClient(msg, ctx);
}});
DistExecutor.unsafeRunWhenOn(Dist.DEDICATED_SERVER, () -> () -> SimpleChannelMessage.handleServer(msg, ctx));
});
ctx.get().setPacketHandled(true);
}
public static void handleServer(SimpleChannelMessage msg, Supplier<NetworkEvent.Context> ctx) {
java.lang.System.out.println("handle server");
ctx.get().enqueueWork(() -> {
ServerPlayerEntity sender = ctx.get().getSender();
if(ConnectionHandlerRegister.runServer(msg, msg.rl, sender)) {
ctx.get().setPacketHandled(true);
}
});
}
public static void handleClient(SimpleChannelMessage msg, Supplier<NetworkEvent.Context> ctx) {
java.lang.System.out.println("handle client");
ctx.get().enqueueWork(() -> {
if(ConnectionHandlerRegister.runClient(msg, msg.rl)) {
ctx.get().setPacketHandled(true);
}
});
}
}