From 88c93d93e1e7bbccb6be85a269568e660b7bdada Mon Sep 17 00:00:00 2001 From: oryxel Date: Thu, 11 Dec 2025 19:18:36 +0700 Subject: [PATCH] Added support for stabbing, added missing variant handling, fixed nautilus identifier, removed old protocol code. (#6035) --- .../geysermc/geyser/entity/EntityDefinitions.java | 8 ++++++-- .../org/geysermc/geyser/network/GameProtocol.java | 7 ------- .../geyser/network/UpstreamPacketHandler.java | 6 ------ .../org/geysermc/geyser/session/GeyserSession.java | 5 ----- .../geyser/session/cache/RegistryCache.java | 1 + .../BedrockInventoryTransactionTranslator.java | 13 +++++++++++++ 6 files changed, 20 insertions(+), 20 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java index 8ede0f1f3..07b925fa0 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java @@ -1231,10 +1231,14 @@ public final class EntityDefinitions { .build(); NAUTILUS = EntityDefinition.inherited(NautilusEntity::new, abstractNautilusBase) - .build(); + .type(EntityType.NAUTILUS) + .identifier("minecraft:nautilus") + .build(); ZOMBIE_NAUTILUS = EntityDefinition.inherited(ZombieNautilusEntity::new, abstractNautilusBase) - .build(); + .type(EntityType.ZOMBIE_NAUTILUS) + .identifier("minecraft:zombie_nautilus") + .build(); } EntityDefinition tameableEntityBase = EntityDefinition.inherited(null, ageableEntityBase) // No factory, is abstract diff --git a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java index 5ad121931..f288060f6 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java +++ b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java @@ -29,9 +29,6 @@ import it.unimi.dsi.fastutil.ints.IntArrayList; import it.unimi.dsi.fastutil.ints.IntList; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; -import org.cloudburstmc.protocol.bedrock.codec.v818.Bedrock_v818; -import org.cloudburstmc.protocol.bedrock.codec.v819.Bedrock_v819; -import org.cloudburstmc.protocol.bedrock.codec.v827.Bedrock_v827; import org.cloudburstmc.protocol.bedrock.codec.v844.Bedrock_v844; import org.cloudburstmc.protocol.bedrock.codec.v859.Bedrock_v859; import org.cloudburstmc.protocol.bedrock.codec.v860.Bedrock_v860; @@ -141,10 +138,6 @@ public final class GameProtocol { /* Bedrock convenience methods to gatekeep features and easily remove the check on version removal */ - public static boolean is1_21_100(GeyserSession session) { - return session.protocolVersion() == Bedrock_v827.CODEC.getProtocolVersion(); - } - public static boolean is1_21_110orHigher(GeyserSession session) { return is1_21_110orHigher(session.protocolVersion()); } diff --git a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java index de6046e61..fe05c8800 100644 --- a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java @@ -30,7 +30,6 @@ import org.cloudburstmc.math.vector.Vector2f; import org.cloudburstmc.protocol.bedrock.BedrockDisconnectReasons; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; import org.cloudburstmc.protocol.bedrock.codec.compat.BedrockCompat; -import org.cloudburstmc.protocol.bedrock.data.ExperimentData; import org.cloudburstmc.protocol.bedrock.data.PacketCompressionAlgorithm; import org.cloudburstmc.protocol.bedrock.data.ResourcePackType; import org.cloudburstmc.protocol.bedrock.netty.codec.compression.CompressionStrategy; @@ -297,11 +296,6 @@ public class UpstreamPacketHandler extends LoggingPacketHandler { stackPacket.setGameVersion(session.getClientData().getGameVersion()); stackPacket.getResourcePacks().addAll(this.resourcePackLoadEvent.orderedPacks()); - if (GameProtocol.is1_21_100(session)) { - // Support copper age drop features (or some of them) in 1.21.100 - stackPacket.getExperiments().add(new ExperimentData("y_2025_drop_3", true)); - } - session.sendUpstreamPacket(stackPacket); } case REFUSED -> session.disconnect("disconnectionScreen.resourcePack"); 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 ecdf47fb1..c38784708 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -1793,11 +1793,6 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { // Needed for certain molang queries used in blocks and items startGamePacket.getExperiments().add(new ExperimentData("experimental_molang_features", true)); - // Enable 2025 Content Drop 3 features on 1.21.100 - if (GameProtocol.is1_21_100(this)) { - startGamePacket.getExperiments().add(new ExperimentData("y_2025_drop_3", true)); - } - startGamePacket.setVanillaVersion("*"); startGamePacket.setInventoriesServerAuthoritative(true); startGamePacket.setServerEngine(""); // Do we want to fill this in? diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/RegistryCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/RegistryCache.java index 26e2e7f39..a9de69ef3 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/RegistryCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/RegistryCache.java @@ -102,6 +102,7 @@ public final class RegistryCache implements JavaRegistryProvider { register(JavaRegistries.PIG_VARIANT, TemperatureVariantAnimal.VARIANT_READER); register(JavaRegistries.COW_VARIANT, TemperatureVariantAnimal.VARIANT_READER); register(JavaRegistries.CHICKEN_VARIANT, TemperatureVariantAnimal.VARIANT_READER); + register(JavaRegistries.ZOMBIE_NAUTILUS_VARIANT, TemperatureVariantAnimal.VARIANT_READER); // Load from MCProtocolLib's classloader NbtMap tag = MinecraftProtocol.loadNetworkCodec(); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java index fcd21533b..72c843ff4 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java @@ -461,6 +461,14 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator { + if (session.getPlayerInventory().getItemInHand().getComponent(DataComponentTypes.PIERCING_WEAPON) != null && session.getGameMode() != GameMode.SPECTATOR) { + session.sendDownstreamPacket(new ServerboundPlayerActionPacket(PlayerAction.STAB, Vector3i.ZERO, org.geysermc.mcprotocollib.protocol.data.game.entity.object.Direction.DOWN, 0)); + session.sendDownstreamPacket(new ServerboundSwingPacket(Hand.MAIN_HAND)); + CooldownUtils.sendCooldown(session); + } + } } break; case ITEM_RELEASE: @@ -471,6 +479,11 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator