9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-19 15:09:15 +00:00

改收payload方法万一以后可能会用到兼容其他模组通讯

This commit is contained in:
jhqwqmc
2025-10-27 09:12:52 +08:00
parent e961231daa
commit f84bf4a218
4 changed files with 27 additions and 22 deletions

View File

@@ -187,9 +187,6 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
Object bundle = FastNMS.INSTANCE.constructor$ClientboundBundlePacket(packets); Object bundle = FastNMS.INSTANCE.constructor$ClientboundBundlePacket(packets);
this.immediatePacketConsumer.accept(channel, bundle, sendListener); this.immediatePacketConsumer.accept(channel, bundle, sendListener);
}; };
// set up mod channel
this.plugin.javaPlugin().getServer().getMessenger().registerIncomingPluginChannel(this.plugin.javaPlugin(), MOD_CHANNEL, this);
this.plugin.javaPlugin().getServer().getMessenger().registerOutgoingPluginChannel(this.plugin.javaPlugin(), MOD_CHANNEL);
// Inject server channel // Inject server channel
try { try {
Object server = FastNMS.INSTANCE.method$MinecraftServer$getServer(); Object server = FastNMS.INSTANCE.method$MinecraftServer$getServer();
@@ -1612,7 +1609,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
} else { } else {
return; return;
} }
if (clientPayload == null || !clientPayload.channel().equals(NetworkManager.MOD_CHANNEL_KEY)) return; if (clientPayload == null) return;
PayloadHelper.handleReceiver(clientPayload, user); PayloadHelper.handleReceiver(clientPayload, user);
} }
} }
@@ -3756,7 +3753,6 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
if (VersionHelper.isOrAbove1_20_2()) return; if (VersionHelper.isOrAbove1_20_2()) return;
FriendlyByteBuf byteBuf = event.getBuffer(); FriendlyByteBuf byteBuf = event.getBuffer();
Key key = byteBuf.readKey(); Key key = byteBuf.readKey();
if (!key.equals(NetworkManager.MOD_CHANNEL_KEY)) return;
PayloadHelper.handleReceiver(new UnknownPayload(key, byteBuf.readBytes(byteBuf.readableBytes())), user); PayloadHelper.handleReceiver(new UnknownPayload(key, byteBuf.readBytes(byteBuf.readableBytes())), user);
} }
} }

View File

@@ -8,9 +8,9 @@ import net.momirealms.craftengine.bukkit.plugin.network.payload.protocol.ClientC
import net.momirealms.craftengine.bukkit.plugin.network.payload.protocol.VisualBlockStatePacket; import net.momirealms.craftengine.bukkit.plugin.network.payload.protocol.VisualBlockStatePacket;
import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.CraftEngine;
import net.momirealms.craftengine.core.plugin.logger.Debugger; import net.momirealms.craftengine.core.plugin.logger.Debugger;
import net.momirealms.craftengine.core.plugin.network.PayloadChannelKeys;
import net.momirealms.craftengine.core.plugin.network.ModPacket; import net.momirealms.craftengine.core.plugin.network.ModPacket;
import net.momirealms.craftengine.core.plugin.network.NetWorkUser; import net.momirealms.craftengine.core.plugin.network.NetWorkUser;
import net.momirealms.craftengine.core.plugin.network.NetworkManager;
import net.momirealms.craftengine.core.plugin.network.codec.NetworkCodec; import net.momirealms.craftengine.core.plugin.network.codec.NetworkCodec;
import net.momirealms.craftengine.core.registry.BuiltInRegistries; import net.momirealms.craftengine.core.registry.BuiltInRegistries;
import net.momirealms.craftengine.core.registry.WritableRegistry; import net.momirealms.craftengine.core.registry.WritableRegistry;
@@ -18,6 +18,7 @@ import net.momirealms.craftengine.core.util.FriendlyByteBuf;
import net.momirealms.craftengine.core.util.ResourceKey; import net.momirealms.craftengine.core.util.ResourceKey;
public class PayloadHelper { public class PayloadHelper {
public static final byte[] JADE_RESPONSE = new byte[]{0, 0, 0, 0};
public static void registerDataTypes() { public static void registerDataTypes() {
registerDataType(ClientCustomBlockPacket.TYPE, ClientCustomBlockPacket.CODEC); registerDataType(ClientCustomBlockPacket.TYPE, ClientCustomBlockPacket.CODEC);
@@ -40,22 +41,14 @@ public class PayloadHelper {
FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer()); FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer());
buf.writeByte(BuiltInRegistries.MOD_PACKET.getId(codec)); buf.writeByte(BuiltInRegistries.MOD_PACKET.getId(codec));
codec.encode(buf, data); codec.encode(buf, data);
user.sendCustomPayload(NetworkManager.MOD_CHANNEL_KEY, buf.array()); user.sendCustomPayload(PayloadChannelKeys.CRAFTENGINE_CHANNEL, buf.array());
} }
public static void handleReceiver(Payload payload, NetWorkUser user) { public static void handleReceiver(Payload payload, NetWorkUser user) {
try { try {
FriendlyByteBuf buf = payload.toBuffer(); if (payload.channel().equals(PayloadChannelKeys.CRAFTENGINE_CHANNEL)) {
byte type = buf.readByte(); handleCraftEngineModReceiver(payload, user);
@SuppressWarnings("unchecked")
NetworkCodec<FriendlyByteBuf, ModPacket> codec = (NetworkCodec<FriendlyByteBuf, ModPacket>) BuiltInRegistries.MOD_PACKET.getValue(type);
if (codec == null) {
Debugger.COMMON.debug(() -> "Unknown data type received: " + type);
return;
} }
ModPacket networkData = codec.decode(buf);
networkData.handle(user);
} catch (Throwable e) { } catch (Throwable e) {
// 乱发包我给你踹了 // 乱发包我给你踹了
user.kick(Component.translatable( user.kick(Component.translatable(
@@ -65,4 +58,18 @@ public class PayloadHelper {
Debugger.COMMON.warn(() -> "Failed to handle payload", e); Debugger.COMMON.warn(() -> "Failed to handle payload", e);
} }
} }
private static void handleCraftEngineModReceiver(Payload payload, NetWorkUser user) {
FriendlyByteBuf buf = payload.toBuffer();
byte type = buf.readByte();
@SuppressWarnings("unchecked")
NetworkCodec<FriendlyByteBuf, ModPacket> codec = (NetworkCodec<FriendlyByteBuf, ModPacket>) BuiltInRegistries.MOD_PACKET.getValue(type);
if (codec == null) {
Debugger.COMMON.debug(() -> "Unknown data type received: " + type);
return;
}
ModPacket networkData = codec.decode(buf);
networkData.handle(user);
}
} }

View File

@@ -3,16 +3,11 @@ package net.momirealms.craftengine.core.plugin.network;
import io.netty.channel.Channel; import io.netty.channel.Channel;
import net.momirealms.craftengine.core.entity.player.Player; import net.momirealms.craftengine.core.entity.player.Player;
import net.momirealms.craftengine.core.plugin.Manageable; import net.momirealms.craftengine.core.plugin.Manageable;
import net.momirealms.craftengine.core.util.Key;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.util.List; import java.util.List;
public interface NetworkManager extends Manageable { public interface NetworkManager extends Manageable {
String MOD_CHANNEL = "craftengine:payload";
String VIA_CHANNEL = "vv:proxy_details";
Key MOD_CHANNEL_KEY = Key.of(MOD_CHANNEL);
Key VIA_CHANNEL_KEY = Key.of(VIA_CHANNEL);
void setUser(Channel channel, NetWorkUser user); void setUser(Channel channel, NetWorkUser user);

View File

@@ -0,0 +1,7 @@
package net.momirealms.craftengine.core.plugin.network;
import net.momirealms.craftengine.core.util.Key;
public final class PayloadChannelKeys {
public static final Key CRAFTENGINE_CHANNEL = Key.of("craftengine:payload"); // 进出
}