mohuang521
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

第一页 上一页 下一页 最后一页