1
0
mirror of https://github.com/GeyserMC/Geyser.git synced 2025-12-19 14:59:27 +00:00

Added support for stabbing, added missing variant handling, fixed nautilus identifier, removed old protocol code. (#6035)

This commit is contained in:
oryxel
2025-12-11 19:18:36 +07:00
committed by GitHub
parent 0082293c73
commit 88c93d93e1
6 changed files with 20 additions and 20 deletions

View File

@@ -1231,9 +1231,13 @@ public final class EntityDefinitions {
.build(); .build();
NAUTILUS = EntityDefinition.inherited(NautilusEntity::new, abstractNautilusBase) NAUTILUS = EntityDefinition.inherited(NautilusEntity::new, abstractNautilusBase)
.type(EntityType.NAUTILUS)
.identifier("minecraft:nautilus")
.build(); .build();
ZOMBIE_NAUTILUS = EntityDefinition.inherited(ZombieNautilusEntity::new, abstractNautilusBase) ZOMBIE_NAUTILUS = EntityDefinition.inherited(ZombieNautilusEntity::new, abstractNautilusBase)
.type(EntityType.ZOMBIE_NAUTILUS)
.identifier("minecraft:zombie_nautilus")
.build(); .build();
} }

View File

@@ -29,9 +29,6 @@ import it.unimi.dsi.fastutil.ints.IntArrayList;
import it.unimi.dsi.fastutil.ints.IntList; import it.unimi.dsi.fastutil.ints.IntList;
import org.checkerframework.checker.nullness.qual.Nullable; import org.checkerframework.checker.nullness.qual.Nullable;
import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; 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.v844.Bedrock_v844;
import org.cloudburstmc.protocol.bedrock.codec.v859.Bedrock_v859; import org.cloudburstmc.protocol.bedrock.codec.v859.Bedrock_v859;
import org.cloudburstmc.protocol.bedrock.codec.v860.Bedrock_v860; 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 */ /* 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) { public static boolean is1_21_110orHigher(GeyserSession session) {
return is1_21_110orHigher(session.protocolVersion()); return is1_21_110orHigher(session.protocolVersion());
} }

View File

@@ -30,7 +30,6 @@ import org.cloudburstmc.math.vector.Vector2f;
import org.cloudburstmc.protocol.bedrock.BedrockDisconnectReasons; import org.cloudburstmc.protocol.bedrock.BedrockDisconnectReasons;
import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec;
import org.cloudburstmc.protocol.bedrock.codec.compat.BedrockCompat; 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.PacketCompressionAlgorithm;
import org.cloudburstmc.protocol.bedrock.data.ResourcePackType; import org.cloudburstmc.protocol.bedrock.data.ResourcePackType;
import org.cloudburstmc.protocol.bedrock.netty.codec.compression.CompressionStrategy; import org.cloudburstmc.protocol.bedrock.netty.codec.compression.CompressionStrategy;
@@ -297,11 +296,6 @@ public class UpstreamPacketHandler extends LoggingPacketHandler {
stackPacket.setGameVersion(session.getClientData().getGameVersion()); stackPacket.setGameVersion(session.getClientData().getGameVersion());
stackPacket.getResourcePacks().addAll(this.resourcePackLoadEvent.orderedPacks()); 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); session.sendUpstreamPacket(stackPacket);
} }
case REFUSED -> session.disconnect("disconnectionScreen.resourcePack"); case REFUSED -> session.disconnect("disconnectionScreen.resourcePack");

View File

@@ -1793,11 +1793,6 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource {
// Needed for certain molang queries used in blocks and items // Needed for certain molang queries used in blocks and items
startGamePacket.getExperiments().add(new ExperimentData("experimental_molang_features", true)); 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.setVanillaVersion("*");
startGamePacket.setInventoriesServerAuthoritative(true); startGamePacket.setInventoriesServerAuthoritative(true);
startGamePacket.setServerEngine(""); // Do we want to fill this in? startGamePacket.setServerEngine(""); // Do we want to fill this in?

View File

@@ -102,6 +102,7 @@ public final class RegistryCache implements JavaRegistryProvider {
register(JavaRegistries.PIG_VARIANT, TemperatureVariantAnimal.VARIANT_READER); register(JavaRegistries.PIG_VARIANT, TemperatureVariantAnimal.VARIANT_READER);
register(JavaRegistries.COW_VARIANT, TemperatureVariantAnimal.VARIANT_READER); register(JavaRegistries.COW_VARIANT, TemperatureVariantAnimal.VARIANT_READER);
register(JavaRegistries.CHICKEN_VARIANT, TemperatureVariantAnimal.VARIANT_READER); register(JavaRegistries.CHICKEN_VARIANT, TemperatureVariantAnimal.VARIANT_READER);
register(JavaRegistries.ZOMBIE_NAUTILUS_VARIANT, TemperatureVariantAnimal.VARIANT_READER);
// Load from MCProtocolLib's classloader // Load from MCProtocolLib's classloader
NbtMap tag = MinecraftProtocol.loadNetworkCodec(); NbtMap tag = MinecraftProtocol.loadNetworkCodec();

View File

@@ -461,6 +461,14 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator<Inve
} }
} }
} }
case 3 -> {
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; break;
case ITEM_RELEASE: case ITEM_RELEASE:
@@ -471,6 +479,11 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator<Inve
} }
break; break;
case ITEM_USE_ON_ENTITY: case ITEM_USE_ON_ENTITY:
// The player can only stab in this case, not attack!
if (session.getPlayerInventory().getItemInHand().getComponent(DataComponentTypes.PIERCING_WEAPON) != null && session.getGameMode() != GameMode.SPECTATOR) {
return;
}
Entity entity = session.getEntityCache().getEntityByGeyserId(packet.getRuntimeEntityId()); Entity entity = session.getEntityCache().getEntityByGeyserId(packet.getRuntimeEntityId());
if (entity == null) if (entity == null)
return; return;