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:
@@ -1231,10 +1231,14 @@ public final class EntityDefinitions {
|
|||||||
.build();
|
.build();
|
||||||
|
|
||||||
NAUTILUS = EntityDefinition.inherited(NautilusEntity::new, abstractNautilusBase)
|
NAUTILUS = EntityDefinition.inherited(NautilusEntity::new, abstractNautilusBase)
|
||||||
.build();
|
.type(EntityType.NAUTILUS)
|
||||||
|
.identifier("minecraft:nautilus")
|
||||||
|
.build();
|
||||||
|
|
||||||
ZOMBIE_NAUTILUS = EntityDefinition.inherited(ZombieNautilusEntity::new, abstractNautilusBase)
|
ZOMBIE_NAUTILUS = EntityDefinition.inherited(ZombieNautilusEntity::new, abstractNautilusBase)
|
||||||
.build();
|
.type(EntityType.ZOMBIE_NAUTILUS)
|
||||||
|
.identifier("minecraft:zombie_nautilus")
|
||||||
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
EntityDefinition<TameableEntity> tameableEntityBase = EntityDefinition.<TameableEntity>inherited(null, ageableEntityBase) // No factory, is abstract
|
EntityDefinition<TameableEntity> tameableEntityBase = EntityDefinition.<TameableEntity>inherited(null, ageableEntityBase) // No factory, is abstract
|
||||||
|
|||||||
@@ -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());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
@@ -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?
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user