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 af3aecd18..f725a0a78 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java @@ -980,7 +980,7 @@ public final class EntityDefinitions { FROG = EntityDefinition.inherited(FrogEntity::new, ageableEntityBase) .type(EntityType.FROG) .heightAndWidth(0.5f) - .addTranslator(MetadataTypes.FROG_VARIANT, FrogEntity::setFrogVariant) + .addTranslator(MetadataTypes.FROG_VARIANT, FrogEntity::setVariant) .addTranslator(MetadataTypes.OPTIONAL_VARINT, FrogEntity::setTongueTarget) .build(); HOGLIN = EntityDefinition.inherited(HoglinEntity::new, ageableEntityBase) @@ -1151,7 +1151,7 @@ public final class EntityDefinitions { CAT = EntityDefinition.inherited(CatEntity::new, tameableEntityBase) .type(EntityType.CAT) .height(0.35f).width(0.3f) - .addTranslator(MetadataTypes.CAT_VARIANT, CatEntity::setCatVariant) + .addTranslator(MetadataTypes.CAT_VARIANT, CatEntity::setVariant) .addTranslator(MetadataTypes.BOOLEAN, CatEntity::setResting) .addTranslator(null) // "resting state one" //TODO .addTranslator(MetadataTypes.INT, CatEntity::setCollarColor) @@ -1169,7 +1169,7 @@ public final class EntityDefinitions { .addTranslator(MetadataTypes.BOOLEAN, (wolfEntity, entityMetadata) -> wolfEntity.setFlag(EntityFlag.INTERESTED, ((BooleanEntityMetadata) entityMetadata).getPrimitiveValue())) .addTranslator(MetadataTypes.INT, WolfEntity::setCollarColor) .addTranslator(MetadataTypes.INT, WolfEntity::setWolfAngerTime) - .addTranslator(MetadataTypes.WOLF_VARIANT, WolfEntity::setWolfVariant) + .addTranslator(MetadataTypes.WOLF_VARIANT, WolfEntity::setVariant) .build(); // As of 1.18 these don't track entity data at all 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 622c599e7..24386d4f6 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,6 +49,7 @@ 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 afd8a6ce6..da0c2c0fb 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 @@ -30,7 +30,6 @@ import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.packet.AddEntityPacket; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.entity.properties.VanillaEntityProperties; -import org.geysermc.geyser.entity.type.living.animal.AnimalEntity; import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.registry.JavaRegistries; @@ -59,7 +58,7 @@ public class ChickenEntity extends TemperatureVariantAnimal { } @Override - protected JavaRegistryKey variantRegistry() { + public JavaRegistryKey variantRegistry() { return JavaRegistries.CHICKEN_VARIANT; } } 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 8f7740f90..8ed9172ed 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 @@ -33,7 +33,6 @@ import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.cloudburstmc.protocol.bedrock.packet.AddEntityPacket; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.entity.properties.VanillaEntityProperties; -import org.geysermc.geyser.entity.type.living.animal.AnimalEntity; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.type.Item; @@ -88,7 +87,7 @@ public class CowEntity extends TemperatureVariantAnimal { } @Override - protected JavaRegistryKey variantRegistry() { + public JavaRegistryKey variantRegistry() { return JavaRegistries.COW_VARIANT; } } 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 4508a0158..c9dda65a9 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 @@ -35,7 +35,6 @@ import org.cloudburstmc.protocol.bedrock.packet.AddEntityPacket; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.entity.properties.VanillaEntityProperties; import org.geysermc.geyser.entity.type.Tickable; -import org.geysermc.geyser.entity.type.living.animal.AnimalEntity; import org.geysermc.geyser.entity.type.player.PlayerEntity; import org.geysermc.geyser.entity.vehicle.BoostableVehicleComponent; import org.geysermc.geyser.entity.vehicle.ClientVehicle; @@ -51,9 +50,6 @@ import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.geyser.util.EntityUtils; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; -import org.geysermc.mcprotocollib.protocol.data.game.Holder; -import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.EntityMetadata; -import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.MetadataType; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.PigVariant; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.IntEntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; @@ -164,7 +160,7 @@ public class PigEntity extends TemperatureVariantAnimal implements T } @Override - protected JavaRegistryKey variantRegistry() { + public JavaRegistryKey variantRegistry() { return JavaRegistries.PIG_VARIANT; } } 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 a347ea1ac..0f806e0ba 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 @@ -25,25 +25,16 @@ package org.geysermc.geyser.entity.type.living.animal.farm; -import net.kyori.adventure.key.Key; -import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.entity.type.living.animal.AnimalEntity; import org.geysermc.geyser.entity.type.living.animal.VariantHolder; import org.geysermc.geyser.session.GeyserSession; -import org.geysermc.geyser.session.cache.registry.JavaRegistryKey; -import org.geysermc.geyser.session.cache.registry.RegistryEntryContext; -import org.geysermc.geyser.util.MinecraftKey; -import org.geysermc.mcprotocollib.protocol.data.game.Holder; -import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.EntityMetadata; -import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.MetadataType; -import java.util.Locale; import java.util.UUID; -import java.util.function.Function; +// TODO figure out how to do the generics here public abstract class TemperatureVariantAnimal extends AnimalEntity implements VariantHolder { public TemperatureVariantAnimal(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition definition, @@ -51,20 +42,15 @@ public abstract class TemperatureVariantAnimal extends AnimalEntity imp super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); } - protected abstract JavaRegistryKey variantRegistry(); - - public void setVariant(EntityMetadata, ? extends MetadataType>> variant) { - BuiltInVariant animalVariant; - if (variant.getValue().isId()) { - animalVariant = variantRegistry().fromNetworkId(session, variant.getValue().id()); - if (animalVariant == null) { - animalVariant = BuiltInVariant.TEMPERATE; - } - } else { - animalVariant = BuiltInVariant.TEMPERATE; - } + @Override + public void setBedrockVariant(int bedrockId) { // TODO does this work? - dirtyMetadata.put(EntityDataTypes.VARIANT, animalVariant.ordinal()); + dirtyMetadata.put(EntityDataTypes.VARIANT, bedrockId); + } + + @Override + public BuiltIn defaultVariant() { + return BuiltInVariant.TEMPERATE; } // Ordered by bedrock id @@ -72,23 +58,6 @@ public abstract class TemperatureVariantAnimal extends AnimalEntity imp public enum BuiltInVariant implements BuiltIn { COLD, TEMPERATE, - WARM; - - public static final Function READER = context -> getByJavaIdentifier(context.id()); - - private final Key javaIdentifier; - - BuiltInVariant() { - javaIdentifier = MinecraftKey.key(name().toLowerCase(Locale.ROOT)); - } - - public static @Nullable BuiltInVariant getByJavaIdentifier(Key identifier) { - for (BuiltInVariant variant : values()) { - if (variant.javaIdentifier.equals(identifier)) { - return variant; - } - } - return null; - } + 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 6ce65c9f3..dfbfb071c 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 @@ -101,9 +101,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, TemperatureVariantAnimal.BuiltInVariant.READER); - register(JavaRegistries.COW_VARIANT, cache -> cache.cowVariants, TemperatureVariantAnimal.BuiltInVariant.READER); - register(JavaRegistries.CHICKEN_VARIANT, cache -> cache.chickenVariants, TemperatureVariantAnimal.BuiltInVariant.READER); + 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)); // Load from MCProtocolLib's classloader NbtMap tag = MinecraftProtocol.loadNetworkCodec();