public class BQNetwork {
public SimpleChannel channel;
private static int ID = 0;
private static final Logger LOGGER = LogUtils.getLogger();
public static int nextID() {
return ID++;
}
private static final ResourceLocation CHANNEL = new ResourceLocation(EdrikManager.getChannel());
public BQNetwork() {
channel = NetworkRegistry.newSimpleChannel(CHANNEL, () -> "1.0", (s) -> true, (s) -> true);
registerMessages();
// sendPacketToServer("客户端消息");
}
public void sendPacketToServer(String str) {
try {
// String base64encodedString = Base64.getEncoder().encodeToString(str.getBytes("utf-8"));
// LOGGER.info(base64encodedString);
channel.sendToServer(new MessageFromClient(str));
} catch (Exception e) {
e.printStackTrace();
}
}
public void registerMessages() {
channel.registerMessage(nextID(), MessageFromClient.class, MessageFromClient::encode, MessageFromClient::decode, (message, context) -> {
// 在这里处理收到的消息 但不知为何会收到两次
LOGGER.info(ID+"收到来自 Bukkit 服务端的消息: " + message.getMessage());
ChannelData channelData = EdrikManager.getGson().fromJson(String.valueOf(message.getMessage()), ChannelData.class);
context.get().enqueueWork(() -> {
//收到服务端验证
if(channelData.getType() == 2){
UUID uuid = Minecraft.getInstance().player.getUUID();
System.err.println("服务端得用户:"+uuid.toString());
LOGGER.info("服务端得用户:"+uuid.toString());
//判断客户端是否为同一人
if(uuid.toString().equals(channelData.getUuid().toString())){
ChannelData channelDataFeed = new ChannelData();
channelDataFeed.setId("Manager");
channelDataFeed.setFormPlug("manager");
channelDataFeed.setToPlug("core");
channelDataFeed.setType(2);
channelDataFeed.setUuid(uuid);
channelDataFeed.setPlugName("manager");
sendPacketToServer(EdrikManager.getGson().toJson(channelDataFeed));
}
}
});
});
}
}
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
public class CommonEventHandler {
private static final Logger LOGGER = LogUtils.getLogger();
@SubscribeEvent
public static void onCommonSetup(FMLCommonSetupEvent event) {
LOGGER.info("注册通道");
EdrikManager.bqNetwork = new BQNetwork();
}复制代码这是我接受消息的类以及注册它的方法,但是不知道为何,服务端传来的消息会收到两次,但是我很确定服务端只发了一次消息,请问这是什么情况导致的,版本1.19.4
public SimpleChannel channel;
private static int ID = 0;
private static final Logger LOGGER = LogUtils.getLogger();
public static int nextID() {
return ID++;
}
private static final ResourceLocation CHANNEL = new ResourceLocation(EdrikManager.getChannel());
public BQNetwork() {
channel = NetworkRegistry.newSimpleChannel(CHANNEL, () -> "1.0", (s) -> true, (s) -> true);
registerMessages();
// sendPacketToServer("客户端消息");
}
public void sendPacketToServer(String str) {
try {
// String base64encodedString = Base64.getEncoder().encodeToString(str.getBytes("utf-8"));
// LOGGER.info(base64encodedString);
channel.sendToServer(new MessageFromClient(str));
} catch (Exception e) {
e.printStackTrace();
}
}
public void registerMessages() {
channel.registerMessage(nextID(), MessageFromClient.class, MessageFromClient::encode, MessageFromClient::decode, (message, context) -> {
// 在这里处理收到的消息 但不知为何会收到两次
LOGGER.info(ID+"收到来自 Bukkit 服务端的消息: " + message.getMessage());
ChannelData channelData = EdrikManager.getGson().fromJson(String.valueOf(message.getMessage()), ChannelData.class);
context.get().enqueueWork(() -> {
//收到服务端验证
if(channelData.getType() == 2){
UUID uuid = Minecraft.getInstance().player.getUUID();
System.err.println("服务端得用户:"+uuid.toString());
LOGGER.info("服务端得用户:"+uuid.toString());
//判断客户端是否为同一人
if(uuid.toString().equals(channelData.getUuid().toString())){
ChannelData channelDataFeed = new ChannelData();
channelDataFeed.setId("Manager");
channelDataFeed.setFormPlug("manager");
channelDataFeed.setToPlug("core");
channelDataFeed.setType(2);
channelDataFeed.setUuid(uuid);
channelDataFeed.setPlugName("manager");
sendPacketToServer(EdrikManager.getGson().toJson(channelDataFeed));
}
}
});
});
}
}
@Mod.EventBusSubscriber(bus = Mod.EventBusSubscriber.Bus.MOD)
public class CommonEventHandler {
private static final Logger LOGGER = LogUtils.getLogger();
@SubscribeEvent
public static void onCommonSetup(FMLCommonSetupEvent event) {
LOGGER.info("注册通道");
EdrikManager.bqNetwork = new BQNetwork();
}复制代码这是我接受消息的类以及注册它的方法,但是不知道为何,服务端传来的消息会收到两次,但是我很确定服务端只发了一次消息,请问这是什么情况导致的,版本1.19.4