mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-26 10:29:20 +00:00
Merge pull request #204 from jhqwqmc/dev
refactor(network): 重构发送包方法以便全部阶段都可发送包
This commit is contained in:
@@ -103,20 +103,20 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
||||
this.registerPacketHandlers();
|
||||
// set up packet senders
|
||||
this.packetConsumer = FastNMS.INSTANCE::sendPacket;
|
||||
this.packetsConsumer = ((serverPlayer, packets) -> {
|
||||
this.packetsConsumer = ((connection, packets) -> {
|
||||
Object bundle = FastNMS.INSTANCE.constructor$ClientboundBundlePacket(packets);
|
||||
this.packetConsumer.accept(serverPlayer, bundle);
|
||||
this.packetConsumer.accept(connection, bundle);
|
||||
});
|
||||
this.immediatePacketConsumer = (serverPlayer, packet) -> {
|
||||
this.immediatePacketConsumer = (connection, packet) -> {
|
||||
try {
|
||||
Reflections.method$Connection$sendPacketImmediate.invoke(FastNMS.INSTANCE.field$Player$connection$connection(serverPlayer), packet, null, true);
|
||||
Reflections.method$Connection$sendPacketImmediate.invoke(connection, packet, null, true);
|
||||
} catch (ReflectiveOperationException e) {
|
||||
plugin.logger().warn("Failed to invoke send packet", e);
|
||||
}
|
||||
};
|
||||
this.immediatePacketsConsumer = (serverPlayer, packets) -> {
|
||||
this.immediatePacketsConsumer = (connection, packets) -> {
|
||||
Object bundle = FastNMS.INSTANCE.constructor$ClientboundBundlePacket(packets);
|
||||
this.immediatePacketConsumer.accept(serverPlayer, bundle);
|
||||
this.immediatePacketConsumer.accept(connection, bundle);
|
||||
};
|
||||
// set up mod channel
|
||||
this.plugin.bootstrap().getServer().getMessenger().registerIncomingPluginChannel(this.plugin.bootstrap(), MOD_CHANNEL, this);
|
||||
@@ -316,8 +316,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
||||
|
||||
public void sendPacket(@NotNull Player player, @NotNull Object packet) {
|
||||
try {
|
||||
Object serverPlayer = FastNMS.INSTANCE.method$CraftPlayer$getHandle(player);
|
||||
this.immediatePacketConsumer.accept(serverPlayer, packet);
|
||||
this.immediatePacketConsumer.accept(getUser(player).connection(), packet);
|
||||
} catch (Exception e) {
|
||||
this.plugin.logger().warn("Failed to send packet", e);
|
||||
}
|
||||
@@ -326,18 +325,18 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
||||
@Override
|
||||
public void sendPacket(@NotNull NetWorkUser player, Object packet, boolean immediately) {
|
||||
if (immediately) {
|
||||
this.immediatePacketConsumer.accept(player.serverPlayer(), packet);
|
||||
this.immediatePacketConsumer.accept(player.connection(), packet);
|
||||
} else {
|
||||
this.packetConsumer.accept(player.serverPlayer(), packet);
|
||||
this.packetConsumer.accept(player.connection(), packet);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPackets(@NotNull NetWorkUser player, List<Object> packet, boolean immediately) {
|
||||
if (immediately) {
|
||||
this.immediatePacketsConsumer.accept(player.serverPlayer(), packet);
|
||||
this.immediatePacketsConsumer.accept(player.connection(), packet);
|
||||
} else {
|
||||
this.packetsConsumer.accept(player.serverPlayer(), packet);
|
||||
this.packetsConsumer.accept(player.connection(), packet);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2214,7 +2214,7 @@ public class PacketConsumers {
|
||||
}
|
||||
for (ResourcePackDownloadData data : dataList) {
|
||||
Object newPacket = ResourcePackUtils.createPacket(data.uuid(), data.url(), data.sha1());
|
||||
user.nettyChannel().writeAndFlush(newPacket);
|
||||
user.sendPacket(newPacket, true);
|
||||
user.addResourcePackUUID(data.uuid());
|
||||
}
|
||||
}).exceptionally(throwable -> {
|
||||
@@ -2256,7 +2256,7 @@ public class PacketConsumers {
|
||||
|| action == Reflections.instance$ServerboundResourcePackPacket$Action$FAILED_DOWNLOAD) {
|
||||
Object kickPacket = Reflections.constructor$ClientboundDisconnectPacket.newInstance(
|
||||
ComponentUtils.adventureToMinecraft(Component.translatable("multiplayer.requiredTexturePrompt.disconnect")));
|
||||
user.nettyChannel().writeAndFlush(kickPacket);
|
||||
user.sendPacket(kickPacket, true);
|
||||
user.nettyChannel().disconnect();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -56,6 +56,7 @@ public class BukkitServerPlayer extends Player {
|
||||
private ProtocolVersion protocolVersion = ProtocolVersion.UNKNOWN;
|
||||
// connection state
|
||||
private final Channel channel;
|
||||
private final Object connection;
|
||||
private String name;
|
||||
private UUID uuid;
|
||||
private ConnectionState decoderState;
|
||||
@@ -107,6 +108,7 @@ public class BukkitServerPlayer extends Player {
|
||||
public BukkitServerPlayer(BukkitCraftEngine plugin, Channel channel) {
|
||||
this.channel = channel;
|
||||
this.plugin = plugin;
|
||||
this.connection = channel.pipeline().get("packet_handler");
|
||||
}
|
||||
|
||||
public void setPlayer(org.bukkit.entity.Player player) {
|
||||
@@ -300,7 +302,7 @@ public class BukkitServerPlayer extends Player {
|
||||
dataPayload = Reflections.constructor$DiscardedPayload.newInstance(channelKey, Unpooled.wrappedBuffer(data));
|
||||
}
|
||||
Object responsePacket = Reflections.constructor$ClientboundCustomPayloadPacket.newInstance(dataPayload);
|
||||
this.nettyChannel().writeAndFlush(responsePacket);
|
||||
this.sendPacket(responsePacket, true);
|
||||
} catch (Exception e) {
|
||||
CraftEngine.instance().logger().warn("Failed to send custom payload to " + name(), e);
|
||||
}
|
||||
@@ -311,7 +313,7 @@ public class BukkitServerPlayer extends Player {
|
||||
try {
|
||||
Object reason = ComponentUtils.adventureToMinecraft(message);
|
||||
Object kickPacket = Reflections.constructor$ClientboundDisconnectPacket.newInstance(reason);
|
||||
this.nettyChannel().writeAndFlush(kickPacket);
|
||||
this.sendPacket(kickPacket, true);
|
||||
this.nettyChannel().disconnect();
|
||||
} catch (Exception e) {
|
||||
CraftEngine.instance().logger().warn("Failed to kick " + name(), e);
|
||||
@@ -775,6 +777,11 @@ public class BukkitServerPlayer extends Player {
|
||||
return playerRef.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object connection() {
|
||||
return this.connection;
|
||||
}
|
||||
|
||||
@Override
|
||||
public org.bukkit.entity.Player literalObject() {
|
||||
return platformPlayer();
|
||||
|
||||
@@ -46,6 +46,8 @@ public interface NetWorkUser {
|
||||
|
||||
Object platformPlayer();
|
||||
|
||||
Object connection();
|
||||
|
||||
Map<Integer, EntityPacketHandler> entityPacketHandlers();
|
||||
|
||||
boolean clientModEnabled();
|
||||
|
||||
@@ -50,7 +50,7 @@ byte_buddy_version=1.17.5
|
||||
ahocorasick_version=0.6.3
|
||||
snake_yaml_version=2.4
|
||||
anti_grief_version=0.17
|
||||
nms_helper_version=0.66.5
|
||||
nms_helper_version=0.66.6
|
||||
evalex_version=3.5.0
|
||||
reactive_streams_version=1.0.4
|
||||
amazon_awssdk_version=2.31.23
|
||||
|
||||
Reference in New Issue
Block a user