From 226fd2917cee75fa7fce317563143d775dce77ea Mon Sep 17 00:00:00 2001 From: Eclipse Date: Sat, 22 Mar 2025 12:50:20 +0000 Subject: [PATCH] "Fix" farm animal variants --- .../type/living/animal/MooshroomEntity.java | 1 - .../type/living/animal/farm/ChickenEntity.java | 13 ++++++++++++- .../type/living/animal/farm/CowEntity.java | 13 ++++++++++++- .../type/living/animal/farm/PigEntity.java | 13 ++++++++++++- .../animal/farm/TemperatureVariantAnimal.java | 16 +++------------- .../geyser/session/cache/RegistryCache.java | 16 +++++++++------- .../session/cache/registry/JavaRegistries.java | 10 ++++++---- 7 files changed, 54 insertions(+), 28 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/MooshroomEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/MooshroomEntity.java index 24386d4f6..622c599e7 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/MooshroomEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/MooshroomEntity.java @@ -49,7 +49,6 @@ public class MooshroomEntity extends CowEntity { super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); } - // TODO fix this with super public void setVariant(ObjectEntityMetadata entityMetadata) { isBrown = entityMetadata.getValue().equals("brown"); dirtyMetadata.put(EntityDataTypes.VARIANT, isBrown ? 1 : 0); diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/ChickenEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/ChickenEntity.java index d9d26769a..e5638dc17 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/ChickenEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/ChickenEntity.java @@ -37,7 +37,7 @@ import org.geysermc.geyser.session.cache.tags.Tag; import java.util.UUID; -public class ChickenEntity extends TemperatureVariantAnimal { +public class ChickenEntity extends TemperatureVariantAnimal { public ChickenEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) { super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); @@ -53,4 +53,15 @@ public class ChickenEntity extends TemperatureVariantAnimal { public JavaRegistryKey variantRegistry() { return JavaRegistries.CHICKEN_VARIANT; } + + @Override + public BuiltInVariant defaultVariant() { + return BuiltInVariant.TEMPERATE; + } + + public enum BuiltInVariant implements BuiltIn { + COLD, + TEMPERATE, + WARM + } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/CowEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/CowEntity.java index cecf9b017..442fb27aa 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/CowEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/CowEntity.java @@ -45,7 +45,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; import java.util.UUID; -public class CowEntity extends TemperatureVariantAnimal { +public class CowEntity extends TemperatureVariantAnimal { public CowEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) { super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); @@ -82,4 +82,15 @@ public class CowEntity extends TemperatureVariantAnimal { public JavaRegistryKey variantRegistry() { return JavaRegistries.COW_VARIANT; } + + @Override + public BuiltInVariant defaultVariant() { + return BuiltInVariant.TEMPERATE; + } + + public enum BuiltInVariant implements BuiltIn { + COLD, + TEMPERATE, + WARM + } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/PigEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/PigEntity.java index 97ef136f4..bf0416842 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/PigEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/PigEntity.java @@ -54,7 +54,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; import java.util.UUID; -public class PigEntity extends TemperatureVariantAnimal implements Tickable, ClientVehicle { +public class PigEntity extends TemperatureVariantAnimal implements Tickable, ClientVehicle { private final BoostableVehicleComponent vehicleComponent = new BoostableVehicleComponent<>(this, 1.0f); public PigEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) { @@ -155,4 +155,15 @@ public class PigEntity extends TemperatureVariantAnimal implements T public JavaRegistryKey variantRegistry() { return JavaRegistries.PIG_VARIANT; } + + @Override + public BuiltInVariant defaultVariant() { + return BuiltInVariant.TEMPERATE; + } + + public enum BuiltInVariant implements BuiltIn { + COLD, + TEMPERATE, + WARM + } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/TemperatureVariantAnimal.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/TemperatureVariantAnimal.java index f9954a10f..dd24cd7c6 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/TemperatureVariantAnimal.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/farm/TemperatureVariantAnimal.java @@ -37,7 +37,8 @@ import java.util.Locale; import java.util.UUID; // TODO figure out how to do the generics here -public abstract class TemperatureVariantAnimal extends AnimalEntity implements VariantHolder { +public abstract class TemperatureVariantAnimal> extends AnimalEntity + implements VariantHolder { public TemperatureVariantAnimal(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) { @@ -51,19 +52,8 @@ public abstract class TemperatureVariantAnimal extends AnimalEntity imp } @Override - public void setBedrockVariant(BuiltInVariant variant) { + public void setBedrockVariant(BedrockVariant variant) { propertyManager.add(VanillaEntityProperties.CLIMATE_VARIANT_ID, variant.name().toLowerCase(Locale.ROOT)); updateBedrockEntityProperties(); } - - @Override - public BuiltInVariant defaultVariant() { - return BuiltInVariant.TEMPERATE; - } - - public enum BuiltInVariant implements BuiltIn { - COLD, - TEMPERATE, - WARM - } } 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 dfbfb071c..bbc630c04 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 @@ -40,7 +40,9 @@ import org.cloudburstmc.protocol.bedrock.data.TrimPattern; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.entity.type.living.animal.FrogEntity; import org.geysermc.geyser.entity.type.living.animal.VariantHolder; -import org.geysermc.geyser.entity.type.living.animal.farm.TemperatureVariantAnimal; +import org.geysermc.geyser.entity.type.living.animal.farm.ChickenEntity; +import org.geysermc.geyser.entity.type.living.animal.farm.CowEntity; +import org.geysermc.geyser.entity.type.living.animal.farm.PigEntity; import org.geysermc.geyser.entity.type.living.animal.tameable.CatEntity; import org.geysermc.geyser.entity.type.living.animal.tameable.WolfEntity; import org.geysermc.geyser.inventory.item.BannerPattern; @@ -101,9 +103,9 @@ public final class RegistryCache { register(JavaRegistries.FROG_VARIANT, cache -> cache.frogVariants, VariantHolder.reader(FrogEntity.BuiltInVariant.class)); register(JavaRegistries.WOLF_VARIANT, cache -> cache.wolfVariants, VariantHolder.reader(WolfEntity.BuiltInVariant.class)); - register(JavaRegistries.PIG_VARIANT, cache -> cache.pigVariants, VariantHolder.reader(TemperatureVariantAnimal.BuiltInVariant.class)); - register(JavaRegistries.COW_VARIANT, cache -> cache.cowVariants, VariantHolder.reader(TemperatureVariantAnimal.BuiltInVariant.class)); - register(JavaRegistries.CHICKEN_VARIANT, cache -> cache.chickenVariants, VariantHolder.reader(TemperatureVariantAnimal.BuiltInVariant.class)); + register(JavaRegistries.PIG_VARIANT, cache -> cache.pigVariants, VariantHolder.reader(PigEntity.BuiltInVariant.class)); + register(JavaRegistries.COW_VARIANT, cache -> cache.cowVariants, VariantHolder.reader(CowEntity.BuiltInVariant.class)); + register(JavaRegistries.CHICKEN_VARIANT, cache -> cache.chickenVariants, VariantHolder.reader(ChickenEntity.BuiltInVariant.class)); // Load from MCProtocolLib's classloader NbtMap tag = MinecraftProtocol.loadNetworkCodec(); @@ -148,9 +150,9 @@ public final class RegistryCache { private final JavaRegistry frogVariants = new SimpleJavaRegistry<>(); private final JavaRegistry wolfVariants = new SimpleJavaRegistry<>(); - private final JavaRegistry pigVariants = new SimpleJavaRegistry<>(); - private final JavaRegistry cowVariants = new SimpleJavaRegistry<>(); - private final JavaRegistry chickenVariants = new SimpleJavaRegistry<>(); + private final JavaRegistry pigVariants = new SimpleJavaRegistry<>(); + private final JavaRegistry cowVariants = new SimpleJavaRegistry<>(); + private final JavaRegistry chickenVariants = new SimpleJavaRegistry<>(); public RegistryCache(GeyserSession session) { this.session = session; diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/registry/JavaRegistries.java b/core/src/main/java/org/geysermc/geyser/session/cache/registry/JavaRegistries.java index 732a2cc4a..5ee1ddb9a 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/registry/JavaRegistries.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/registry/JavaRegistries.java @@ -28,7 +28,9 @@ package org.geysermc.geyser.session.cache.registry; import net.kyori.adventure.key.Key; import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.entity.type.living.animal.FrogEntity; -import org.geysermc.geyser.entity.type.living.animal.farm.TemperatureVariantAnimal; +import org.geysermc.geyser.entity.type.living.animal.farm.ChickenEntity; +import org.geysermc.geyser.entity.type.living.animal.farm.CowEntity; +import org.geysermc.geyser.entity.type.living.animal.farm.PigEntity; import org.geysermc.geyser.entity.type.living.animal.tameable.CatEntity; import org.geysermc.geyser.entity.type.living.animal.tameable.WolfEntity; import org.geysermc.geyser.inventory.item.BannerPattern; @@ -59,9 +61,9 @@ public class JavaRegistries { public static final JavaRegistryKey FROG_VARIANT = create("frog_variant", RegistryCache::frogVariants); public static final JavaRegistryKey WOLF_VARIANT = create("wolf_variant", RegistryCache::wolfVariants); - public static final JavaRegistryKey PIG_VARIANT = create("pig_variant", RegistryCache::pigVariants); - public static final JavaRegistryKey COW_VARIANT = create("cow_variant", RegistryCache::cowVariants); - public static final JavaRegistryKey CHICKEN_VARIANT = create("chicken_variant", RegistryCache::chickenVariants); + public static final JavaRegistryKey PIG_VARIANT = create("pig_variant", RegistryCache::pigVariants); + public static final JavaRegistryKey COW_VARIANT = create("cow_variant", RegistryCache::cowVariants); + public static final JavaRegistryKey CHICKEN_VARIANT = create("chicken_variant", RegistryCache::chickenVariants); private static JavaRegistryKey create(String key, JavaRegistryKey.NetworkSerializer networkSerializer, JavaRegistryKey.NetworkDeserializer networkDeserializer) { JavaRegistryKey registry = new JavaRegistryKey<>(MinecraftKey.key(key), networkSerializer, networkDeserializer);