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);
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
try {
Object server = FastNMS.INSTANCE.method$MinecraftServer$getServer();
@@ -1612,7 +1609,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
} else {
return;
}
if (clientPayload == null || !clientPayload.channel().equals(NetworkManager.MOD_CHANNEL_KEY)) return;
if (clientPayload == null) return;
PayloadHelper.handleReceiver(clientPayload, user);
}
}
@@ -3756,7 +3753,6 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
if (VersionHelper.isOrAbove1_20_2()) return;
FriendlyByteBuf byteBuf = event.getBuffer();
Key key = byteBuf.readKey();
if (!key.equals(NetworkManager.MOD_CHANNEL_KEY)) return;
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.core.plugin.CraftEngine;
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.NetWorkUser;
import net.momirealms.craftengine.core.plugin.network.NetworkManager;
import net.momirealms.craftengine.core.plugin.network.codec.NetworkCodec;
import net.momirealms.craftengine.core.registry.BuiltInRegistries;
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;
public class PayloadHelper {
public static final byte[] JADE_RESPONSE = new byte[]{0, 0, 0, 0};
public static void registerDataTypes() {
registerDataType(ClientCustomBlockPacket.TYPE, ClientCustomBlockPacket.CODEC);
@@ -40,22 +41,14 @@ public class PayloadHelper {
FriendlyByteBuf buf = new FriendlyByteBuf(Unpooled.buffer());
buf.writeByte(BuiltInRegistries.MOD_PACKET.getId(codec));
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) {
try {
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;
if (payload.channel().equals(PayloadChannelKeys.CRAFTENGINE_CHANNEL)) {
handleCraftEngineModReceiver(payload, user);
}
ModPacket networkData = codec.decode(buf);
networkData.handle(user);
} catch (Throwable e) {
// 乱发包我给你踹了
user.kick(Component.translatable(
@@ -65,4 +58,18 @@ public class PayloadHelper {
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 net.momirealms.craftengine.core.entity.player.Player;
import net.momirealms.craftengine.core.plugin.Manageable;
import net.momirealms.craftengine.core.util.Key;
import org.jetbrains.annotations.NotNull;
import java.util.List;
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);

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"); // 进出
}