mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-25 01:49:30 +00:00
@@ -44,7 +44,7 @@ public class BukkitSenderFactory extends SenderFactory<BukkitCraftEngine, Comman
|
||||
if (sender instanceof Player player) {
|
||||
FastNMS.INSTANCE.method$Connection$send(
|
||||
FastNMS.INSTANCE.field$ServerGamePacketListenerImpl$connection(FastNMS.INSTANCE.field$Player$connection(FastNMS.INSTANCE.method$CraftPlayer$getHandle(player))),
|
||||
FastNMS.INSTANCE.constructor$ClientboundSystemChatPacket(ComponentUtils.adventureToMinecraft(message), false));
|
||||
FastNMS.INSTANCE.constructor$ClientboundSystemChatPacket(ComponentUtils.adventureToMinecraft(message), false), null);
|
||||
} else if (sender instanceof ConsoleCommandSender commandSender) {
|
||||
commandSender.sendMessage(LegacyComponentSerializer.legacySection().serialize(message));
|
||||
} else if (sender instanceof RemoteConsoleCommandSender commandSender) {
|
||||
|
||||
@@ -67,10 +67,10 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
||||
C2S_GAME_BYTE_BUFFER_PACKET_HANDLERS[id] = function;
|
||||
}
|
||||
|
||||
private final BiConsumer<ChannelHandler, Object> packetConsumer;
|
||||
private final BiConsumer<ChannelHandler, List<Object>> packetsConsumer;
|
||||
private final BiConsumer<Channel, Object> immediatePacketConsumer;
|
||||
private final BiConsumer<Channel, List<Object>> immediatePacketsConsumer;
|
||||
private final TriConsumer<ChannelHandler, Object, Object> packetConsumer;
|
||||
private final TriConsumer<ChannelHandler, List<Object>, Object> packetsConsumer;
|
||||
private final TriConsumer<Channel, Object, Runnable> immediatePacketConsumer;
|
||||
private final TriConsumer<Channel, List<Object>, Runnable> immediatePacketsConsumer;
|
||||
private final BukkitCraftEngine plugin;
|
||||
|
||||
private final Map<ChannelPipeline, BukkitServerPlayer> users = new ConcurrentHashMap<>();
|
||||
@@ -105,14 +105,23 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
||||
this.registerPacketHandlers();
|
||||
// set up packet senders
|
||||
this.packetConsumer = FastNMS.INSTANCE::method$Connection$send;
|
||||
this.packetsConsumer = ((connection, packets) -> {
|
||||
this.packetsConsumer = ((connection, packets, sendListener) -> {
|
||||
Object bundle = FastNMS.INSTANCE.constructor$ClientboundBundlePacket(packets);
|
||||
this.packetConsumer.accept(connection, bundle);
|
||||
this.packetConsumer.accept(connection, bundle, sendListener);
|
||||
});
|
||||
this.immediatePacketConsumer = ChannelOutboundInvoker::writeAndFlush;
|
||||
this.immediatePacketsConsumer = (channel, packets) -> {
|
||||
this.immediatePacketConsumer = (channel, packet, sendListener) -> {
|
||||
ChannelFuture future = channel.writeAndFlush(packet);
|
||||
if (sendListener == null) return;
|
||||
future.addListener((ChannelFutureListener) channelFuture -> {
|
||||
sendListener.run();
|
||||
if (!channelFuture.isSuccess()) {
|
||||
channelFuture.channel().pipeline().fireExceptionCaught(channelFuture.cause());
|
||||
}
|
||||
});
|
||||
};
|
||||
this.immediatePacketsConsumer = (channel, packets, sendListener) -> {
|
||||
Object bundle = FastNMS.INSTANCE.constructor$ClientboundBundlePacket(packets);
|
||||
this.immediatePacketConsumer.accept(channel, bundle);
|
||||
this.immediatePacketConsumer.accept(channel, bundle, sendListener);
|
||||
};
|
||||
// set up mod channel
|
||||
this.plugin.javaPlugin().getServer().getMessenger().registerIncomingPluginChannel(this.plugin.javaPlugin(), MOD_CHANNEL, this);
|
||||
@@ -127,7 +136,8 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
||||
Channel channel = future.channel();
|
||||
injectServerChannel(channel);
|
||||
this.injectedChannels.add(channel);
|
||||
}, (object) -> {});
|
||||
}, (object) -> {
|
||||
});
|
||||
CoreReflections.field$ServerConnectionListener$channels.set(serverConnection, monitor);
|
||||
} catch (ReflectiveOperationException e) {
|
||||
throw new RuntimeException("Failed to init server connection", e);
|
||||
@@ -206,7 +216,8 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
||||
this.resetUserArray();
|
||||
if (VersionHelper.isFolia()) {
|
||||
player.getScheduler().runAtFixedRate(plugin.javaPlugin(), (t) -> user.tick(),
|
||||
() -> {}, 1, 1);
|
||||
() -> {
|
||||
}, 1, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -305,20 +316,20 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPacket(@NotNull NetWorkUser player, Object packet, boolean immediately) {
|
||||
public void sendPacket(@NotNull NetWorkUser player, Object packet, boolean immediately, Runnable sendListener) {
|
||||
if (immediately) {
|
||||
this.immediatePacketConsumer.accept(player.nettyChannel(), packet);
|
||||
this.immediatePacketConsumer.accept(player.nettyChannel(), packet, sendListener);
|
||||
} else {
|
||||
this.packetConsumer.accept(player.connection(), packet);
|
||||
this.packetConsumer.accept(player.connection(), packet, sendListener != null ? FastNMS.INSTANCE.method$PacketSendListener$thenRun(sendListener) : null);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPackets(@NotNull NetWorkUser player, List<Object> packet, boolean immediately) {
|
||||
public void sendPackets(@NotNull NetWorkUser player, List<Object> packet, boolean immediately, Runnable sendListener) {
|
||||
if (immediately) {
|
||||
this.immediatePacketsConsumer.accept(player.nettyChannel(), packet);
|
||||
this.immediatePacketsConsumer.accept(player.nettyChannel(), packet, sendListener);
|
||||
} else {
|
||||
this.packetsConsumer.accept(player.connection(), packet);
|
||||
this.packetsConsumer.accept(player.connection(), packet, sendListener != null ? FastNMS.INSTANCE.method$PacketSendListener$thenRun(sendListener) : null);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -685,7 +696,7 @@ public class BukkitNetworkManager implements NetworkManager, Listener, PluginMes
|
||||
ByteBuf temp = ctx.alloc().buffer();
|
||||
try {
|
||||
if (compressor != null) {
|
||||
callEncode(compressor, ctx, input, temp);
|
||||
callEncode(compressor, ctx, input, temp);
|
||||
}
|
||||
} finally {
|
||||
input.clear().writeBytes(temp);
|
||||
|
||||
@@ -323,6 +323,11 @@ public class BukkitServerPlayer extends Player {
|
||||
this.plugin.networkManager().sendPacket(this, packet, immediately);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPacket(Object packet, boolean immediately, Runnable sendListener) {
|
||||
this.plugin.networkManager().sendPacket(this, packet, immediately, sendListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendCustomPayload(Key channel, byte[] data) {
|
||||
try {
|
||||
@@ -352,8 +357,10 @@ public class BukkitServerPlayer extends Player {
|
||||
try {
|
||||
Object reason = ComponentUtils.adventureToMinecraft(message);
|
||||
Object kickPacket = NetworkReflections.constructor$ClientboundDisconnectPacket.newInstance(reason);
|
||||
this.sendPacket(kickPacket, true);
|
||||
this.nettyChannel().disconnect();
|
||||
this.sendPacket(kickPacket, false, () -> FastNMS.INSTANCE.method$Connection$disconnect(this.connection(), reason));
|
||||
this.nettyChannel().config().setAutoRead(false);
|
||||
Runnable handleDisconnection = () -> FastNMS.INSTANCE.method$Connection$handleDisconnection(this.connection());
|
||||
FastNMS.INSTANCE.method$BlockableEventLoop$scheduleOnMain(handleDisconnection);
|
||||
} catch (Exception e) {
|
||||
CraftEngine.instance().logger().warn("Failed to kick " + name(), e);
|
||||
}
|
||||
@@ -364,6 +371,11 @@ public class BukkitServerPlayer extends Player {
|
||||
this.plugin.networkManager().sendPackets(this, packet, immediately);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void sendPackets(List<Object> packet, boolean immediately, Runnable sendListener) {
|
||||
this.plugin.networkManager().sendPackets(this, packet, immediately, sendListener);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void simulatePacket(Object packet) {
|
||||
this.plugin.networkManager().simulatePacket(this, packet);
|
||||
@@ -719,7 +731,8 @@ public class BukkitServerPlayer extends Player {
|
||||
FastNMS.INSTANCE.method$CraftPlayer$getHandle(player)
|
||||
)
|
||||
),
|
||||
packet
|
||||
packet,
|
||||
null
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -28,6 +28,8 @@ public abstract class Player extends AbstractEntity implements NetWorkUser {
|
||||
|
||||
public abstract void sendPackets(List<Object> packet, boolean immediately);
|
||||
|
||||
public abstract void sendPackets(List<Object> packet, boolean immediately, Runnable sendListener);
|
||||
|
||||
public abstract float getDestroyProgress(Object blockState, BlockPos pos);
|
||||
|
||||
public abstract void setClientSideCanBreakBlock(boolean canBreak);
|
||||
|
||||
@@ -27,6 +27,8 @@ public interface NetWorkUser {
|
||||
|
||||
void sendPacket(Object packet, boolean immediately);
|
||||
|
||||
void sendPacket(Object packet, boolean immediately, Runnable sendListener);
|
||||
|
||||
void sendCustomPayload(Key channel, byte[] data);
|
||||
|
||||
void kick(Component message);
|
||||
|
||||
@@ -25,14 +25,22 @@ public interface NetworkManager extends Manageable {
|
||||
Player[] onlineUsers();
|
||||
|
||||
default void sendPacket(@NotNull NetWorkUser player, Object packet) {
|
||||
sendPacket(player, packet, false);
|
||||
sendPacket(player, packet, false, null);
|
||||
}
|
||||
|
||||
void sendPacket(@NotNull NetWorkUser player, Object packet, boolean immediately);
|
||||
default void sendPacket(@NotNull NetWorkUser player, Object packet, boolean immediately) {
|
||||
sendPacket(player, packet, immediately, null);
|
||||
}
|
||||
|
||||
void sendPacket(@NotNull NetWorkUser player, Object packet, boolean immediately, Runnable sendListener);
|
||||
|
||||
default void sendPackets(@NotNull NetWorkUser player, List<Object> packet) {
|
||||
sendPackets(player, packet, false);
|
||||
sendPackets(player, packet, false, null);
|
||||
}
|
||||
|
||||
void sendPackets(@NotNull NetWorkUser player, List<Object> packet, boolean immediately);
|
||||
default void sendPackets(@NotNull NetWorkUser player, List<Object> packet, boolean immediately) {
|
||||
sendPackets(player, packet, immediately, null);
|
||||
}
|
||||
|
||||
void sendPackets(@NotNull NetWorkUser player, List<Object> packet, boolean immediately, Runnable sendListener);
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ byte_buddy_version=1.17.5
|
||||
ahocorasick_version=0.6.3
|
||||
snake_yaml_version=2.4
|
||||
anti_grief_version=0.18
|
||||
nms_helper_version=1.0.38
|
||||
nms_helper_version=1.0.39
|
||||
evalex_version=3.5.0
|
||||
reactive_streams_version=1.0.4
|
||||
amazon_awssdk_version=2.31.23
|
||||
|
||||
Reference in New Issue
Block a user