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);
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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