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:
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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"); // 进出
|
||||
}
|
||||
Reference in New Issue
Block a user