From 98f9bf6b6281a268e9ae1ac1eccb2c4a10dfebde Mon Sep 17 00:00:00 2001 From: onebeastchris Date: Sun, 19 Jan 2025 14:29:58 +0100 Subject: [PATCH] Fix issues with Geyser-Spigot that occurring with older server versions --- .../geyser/entity/type/TextDisplayEntity.java | 2 +- .../geyser/network/netty/LocalSession.java | 16 ++++++++++++++++ .../geysermc/geyser/session/GeyserSession.java | 5 +++-- 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/TextDisplayEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/TextDisplayEntity.java index 0cd207c52e8..ccd93d12ae2 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/TextDisplayEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/TextDisplayEntity.java @@ -67,7 +67,7 @@ protected void initializeMetadata() { } public void setText(EntityMetadata entityMetadata) { - this.dirtyMetadata.put(EntityDataTypes.NAME, MessageTranslator.convertMessage(entityMetadata.getValue())); + this.dirtyMetadata.put(EntityDataTypes.NAME, MessageTranslator.convertMessage(entityMetadata.getValue(), session.locale())); calculateLineCount(entityMetadata.getValue()); } diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/LocalSession.java b/core/src/main/java/org/geysermc/geyser/network/netty/LocalSession.java index e1847bdee35..0f6e6b5bcd6 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/LocalSession.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/LocalSession.java @@ -31,8 +31,11 @@ import io.netty.channel.ChannelFactory; import io.netty.channel.ChannelHandler; import io.netty.channel.ChannelOption; +import io.netty.channel.DefaultEventLoopGroup; +import io.netty.channel.EventLoopGroup; import io.netty.channel.ReflectiveChannelFactory; import io.netty.channel.unix.PreferredDirectByteBufAllocator; +import io.netty.util.concurrent.DefaultThreadFactory; import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.mcprotocollib.network.helper.NettyHelper; import org.geysermc.mcprotocollib.network.netty.MinecraftChannelInitializer; @@ -42,11 +45,13 @@ import java.net.InetSocketAddress; import java.net.SocketAddress; import java.util.concurrent.Executor; +import java.util.concurrent.TimeUnit; /** * Manages a Minecraft Java session over our LocalChannel implementations. */ public final class LocalSession extends ClientNetworkSession { + private static DefaultEventLoopGroup DEFAULT_EVENT_LOOP_GROUP; private static PreferredDirectByteBufAllocator PREFERRED_DIRECT_BYTE_BUF_ALLOCATOR = null; private final SocketAddress spoofedRemoteAddress; @@ -68,6 +73,17 @@ protected void setOptions(Bootstrap bootstrap) { } } + @Override + protected EventLoopGroup getEventLoopGroup() { + if (DEFAULT_EVENT_LOOP_GROUP == null) { + DEFAULT_EVENT_LOOP_GROUP = new DefaultEventLoopGroup(new DefaultThreadFactory(this.getClass(), true)); + Runtime.getRuntime().addShutdownHook(new Thread( + () -> DEFAULT_EVENT_LOOP_GROUP.shutdownGracefully(100, 500, TimeUnit.MILLISECONDS))); + } + + return DEFAULT_EVENT_LOOP_GROUP; + } + @Override protected ChannelHandler getChannelHandler() { return new MinecraftChannelInitializer<>(channel -> { diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java index 1cb5d1fd48f..fc8f82dd0a5 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -173,6 +173,7 @@ import org.geysermc.geyser.session.cache.WorldCache; import org.geysermc.geyser.text.GeyserLocale; import org.geysermc.geyser.translator.inventory.InventoryTranslator; +import org.geysermc.geyser.translator.text.MessageTranslator; import org.geysermc.geyser.util.ChunkUtils; import org.geysermc.geyser.util.EntityUtils; import org.geysermc.geyser.util.InventoryUtils; @@ -1025,7 +1026,7 @@ public void disconnect(Component reason) { // Downstream's disconnect will fire an event that prints a log message // Otherwise, we print a message here String address = geyser.getConfig().isLogPlayerIpAddresses() ? upstream.getAddress().getAddress().toString() : ""; - geyser.getLogger().info(GeyserLocale.getLocaleStringLog("geyser.network.disconnect", address, reason)); + geyser.getLogger().info(GeyserLocale.getLocaleStringLog("geyser.network.disconnect", address, MessageTranslator.convertMessage(reason))); } // Disconnect upstream if necessary @@ -1646,7 +1647,7 @@ public void sendDownstreamPacket(Packet packet, ProtocolState intendedState) { } if (protocol.getOutboundState() != intendedState) { - geyser.getLogger().warning("Tried to send " + packet.getClass().getSimpleName() + " packet while not in " + intendedState.name() + " outbound state. Current state: " + protocol.getOutboundState().name()); + geyser.getLogger().debug("Tried to send " + packet.getClass().getSimpleName() + " packet while not in " + intendedState.name() + " outbound state. Current state: " + protocol.getOutboundState().name()); return; }