mirror of
https://github.com/GeyserMC/Geyser.git
synced 2025-12-30 12:19:10 +00:00
Implement VariantHolder for farm animals, still have to figure out how to do this efficiently
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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<String> entityMetadata) {
|
||||
isBrown = entityMetadata.getValue().equals("brown");
|
||||
dirtyMetadata.put(EntityDataTypes.VARIANT, isBrown ? 1 : 0);
|
||||
|
||||
@@ -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<ChickenVariant> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected JavaRegistryKey<BuiltInVariant> variantRegistry() {
|
||||
public JavaRegistryKey<BuiltInVariant> variantRegistry() {
|
||||
return JavaRegistries.CHICKEN_VARIANT;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<CowVariant> {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected JavaRegistryKey<BuiltInVariant> variantRegistry() {
|
||||
public JavaRegistryKey<BuiltInVariant> variantRegistry() {
|
||||
return JavaRegistries.COW_VARIANT;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<PigVariant> implements T
|
||||
}
|
||||
|
||||
@Override
|
||||
protected JavaRegistryKey<BuiltInVariant> variantRegistry() {
|
||||
public JavaRegistryKey<BuiltInVariant> variantRegistry() {
|
||||
return JavaRegistries.PIG_VARIANT;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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<Variant> extends AnimalEntity implements VariantHolder<Variant> {
|
||||
|
||||
public TemperatureVariantAnimal(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition,
|
||||
@@ -51,20 +42,15 @@ public abstract class TemperatureVariantAnimal<Variant> extends AnimalEntity imp
|
||||
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
|
||||
}
|
||||
|
||||
protected abstract JavaRegistryKey<BuiltInVariant> variantRegistry();
|
||||
|
||||
public void setVariant(EntityMetadata<Holder<Variant>, ? extends MetadataType<Holder<Variant>>> 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<Variant> defaultVariant() {
|
||||
return BuiltInVariant.TEMPERATE;
|
||||
}
|
||||
|
||||
// Ordered by bedrock id
|
||||
@@ -72,23 +58,6 @@ public abstract class TemperatureVariantAnimal<Variant> extends AnimalEntity imp
|
||||
public enum BuiltInVariant implements BuiltIn<?> {
|
||||
COLD,
|
||||
TEMPERATE,
|
||||
WARM;
|
||||
|
||||
public static final Function<RegistryEntryContext, BuiltInVariant> 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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user