@Mod("msgtutor") public class MsgTutorMod { private static final int IDX = 233; private SimpleChannel channel; public MsgTutorMod() { FMLJavaModLoadingContext.get().getModEventBus().addListener(this::clientSetup); } private void clientSetup(FMLClientSetupEvent event) { channel = NetworkRegistry.ChannelBuilder .named(new ResourceLocation("msgtutor", "test")) .networkProtocolVersion(() -> "zzzz") .serverAcceptedVersions(NetworkRegistry.ACCEPTVANILLA::equals) .clientAcceptedVersions(NetworkRegistry.ACCEPTVANILLA::equals) .simpleChannel(); channel.registerMessage(IDX, String.class, this::enc, this::dec, this::proc); } private void enc(String str, PacketBuffer buffer) { buffer.writeBytes(str.getBytes(StandardCharsets.UTF_8)); } private String dec(PacketBuffer buffer) { return buffer.toString(StandardCharsets.UTF_8); } private void proc(String str, Supplier<NetworkEvent.Context> supplier) { System.out.println(str); NetworkEvent.Context context = supplier.get(); context.setPacketHandled(true); channel.reply("client hello", context); } } |
public final class Test extends JavaPlugin implements Listener { private static final int IDX = 233; private final String channel = "msgtutor:test"; @Override public void onEnable() { getServer().getMessenger().registerIncomingPluginChannel(this, channel, (channel, player, message) -> System.out.println("awsl " + read(message))); getServer().getMessenger().registerOutgoingPluginChannel(this, channel); getServer().getPluginManager().registerEvents(this, this); } @EventHandler public void onJoin(PlayerJoinEvent event) { Player player = event.getPlayer(); try { Class<? extends CommandSender> senderClass = player.getClass(); Method addChannel = senderClass.getDeclaredMethod("addChannel", String.class); addChannel.setAccessible(true); addChannel.invoke(player, channel); } catch (Exception e) { e.printStackTrace(); } Bukkit.getScheduler().runTaskLater(this, () -> send(player, "server hello"), 100); } private void send(Player player, String msg) { byte[] bytes = msg.getBytes(StandardCharsets.UTF_8); ByteBuf buf = Unpooled.buffer(bytes.length + 1); buf.writeByte(IDX); buf.writeBytes(bytes); player.sendPluginMessage(this, channel, buf.array()); } private String read(byte[] array) { ByteBuf buf = Unpooled.wrappedBuffer(array); if (buf.readUnsignedByte() == IDX) { return buf.toString(StandardCharsets.UTF_8); } else throw new RuntimeException(); } } |
skyliye 发表于 2019-6-14 18:15
我在想,会不会出来1.14的Bukkit+mod的服务端,其实蛮期待的
如果能同时兼容Forgemod+Fabricmod+bukkit+spo ...
简爱爱 发表于 2019-6-16 23:48
互通又有什么用呢?大佬的想法我不懂。