diff --git a/build-logic/src/main/kotlin/geyser.base-conventions.gradle.kts b/build-logic/src/main/kotlin/geyser.base-conventions.gradle.kts index 3f7b48a2f..dca1bcef5 100644 --- a/build-logic/src/main/kotlin/geyser.base-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/geyser.base-conventions.gradle.kts @@ -26,7 +26,7 @@ dependencies { } repositories { - mavenLocal() + // mavenLocal() mavenCentral() 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 f725a0a78..01206fa8d 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java @@ -998,7 +998,7 @@ public final class EntityDefinitions { MOOSHROOM = EntityDefinition.inherited(MooshroomEntity::new, ageableEntityBase) .type(EntityType.MOOSHROOM) .height(1.4f).width(0.9f) - .addTranslator(MetadataTypes.STRING, MooshroomEntity::setVariant) + .addTranslator(MetadataTypes.INT, MooshroomEntity::setMooshroomVariant) .build(); OCELOT = EntityDefinition.inherited(OcelotEntity::new, ageableEntityBase) .type(EntityType.OCELOT) diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FrogEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FrogEntity.java index ef126e8d9..3b5c28c7d 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FrogEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/FrogEntity.java @@ -43,8 +43,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.Object import java.util.OptionalInt; import java.util.UUID; -// TODO this is implementing VariantHolder until MCPL updates -public class FrogEntity extends AnimalEntity implements VariantIntHolder { +public class FrogEntity extends AnimalEntity implements VariantIntHolder { public FrogEntity(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); } @@ -69,7 +68,7 @@ public class FrogEntity extends AnimalEntity implements VariantIntHolder } @Override - public BuiltIn defaultVariant() { + public BuiltIn defaultVariant() { return BuiltInVariant.TEMPERATE; } @@ -93,7 +92,7 @@ public class FrogEntity extends AnimalEntity implements VariantIntHolder // Ordered by bedrock id // TODO: are these ordered correctly? - public enum BuiltInVariant implements BuiltIn { + public enum BuiltInVariant implements BuiltIn { TEMPERATE, COLD, WARM 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..3314344cb 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 @@ -37,7 +37,7 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.cache.tags.ItemTag; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; -import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ObjectEntityMetadata; +import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.IntEntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; import java.util.UUID; @@ -49,9 +49,9 @@ public class MooshroomEntity extends CowEntity { super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); } - public void setVariant(ObjectEntityMetadata entityMetadata) { - isBrown = entityMetadata.getValue().equals("brown"); - dirtyMetadata.put(EntityDataTypes.VARIANT, isBrown ? 1 : 0); + public void setMooshroomVariant(IntEntityMetadata metadata) { + isBrown = metadata.getPrimitiveValue() == 1; + dirtyMetadata.put(EntityDataTypes.VARIANT, metadata.getPrimitiveValue()); } @Override diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/VariantHolder.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/VariantHolder.java index 5f8da630f..b3390a3ed 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/VariantHolder.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/VariantHolder.java @@ -30,40 +30,35 @@ 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 org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.IntEntityMetadata; import java.util.Locale; import java.util.function.Function; /** - * Utility interface to help set up data-driven entity variants for mobs. + * Interface to help set up data-driven entity variants for mobs. * - *

This interface is designed for mobs that have their variant wrapped in a {@link Holder}. Implementations usually have to - * implement {@link VariantHolder#variantRegistry()}, {@link VariantHolder#setBedrockVariant(BuiltIn)}, and {@link VariantHolder#defaultVariant()}, and should also + *

Data-driven variants are sent as an int ID of their variant registry by Java, but can be a metadata ID or entity property on bedrock. + * This interface helps translate data-driven variants to built-in bedrock ones.

+ * + *

Implementations usually have to implement {@link VariantHolder#variantRegistry()}, + * {@link VariantHolder#setBedrockVariant(BuiltIn)}, and {@link VariantHolder#defaultVariant()}, and should also * have an enum with built-in variants on bedrock (implementing {@link BuiltIn}).

* - * @param the MCPL variant class that a {@link Holder} wraps. * @param the enum of Bedrock variants. */ -public interface VariantHolder> { +public interface VariantHolder { - default void setVariant(EntityMetadata, ? extends MetadataType>> variant) { - setVariant(variant.getValue()); + default void setVariant(IntEntityMetadata variant) { + setVariantFromJavaId(variant.getPrimitiveValue()); } /** - * Sets the variant of the entity. Defaults to {@link VariantHolder#defaultVariant()} for custom holders and non-vanilla IDs. + * Sets the variant of the entity. Defaults to {@link VariantHolder#defaultVariant()} for non-vanilla IDs. */ - default void setVariant(Holder variant) { - BedrockVariant builtInVariant; - if (variant.isId()) { - builtInVariant = variantRegistry().fromNetworkId(getSession(), variant.id()); - if (builtInVariant == null) { - builtInVariant = defaultVariant(); - } - } else { + default void setVariantFromJavaId(int variant) { + BedrockVariant builtInVariant = variantRegistry().fromNetworkId(getSession(), variant); + if (builtInVariant == null) { builtInVariant = defaultVariant(); } setBedrockVariant(builtInVariant); @@ -92,14 +87,14 @@ public interface VariantHolderThis reader simply matches the identifiers of registry entries with built-in variants. If no built-in variant matches, null is returned.

*/ - static >> Function reader(Class clazz) { + static > Function reader(Class clazz) { BuiltInVariant[] variants = clazz.getEnumConstants(); if (variants == null) { throw new IllegalArgumentException("Class is not an enum"); } return context -> { for (BuiltInVariant variant : variants) { - if (((BuiltIn) variant).javaIdentifier().equals(context.id())) { + if (((BuiltIn) variant).javaIdentifier().equals(context.id())) { return variant; } } @@ -111,10 +106,8 @@ public interface VariantHolderThe enum constants should be named the same as their Java identifiers.

- * - * @param the same as the parent entity class. Used for type checking. */ - interface BuiltIn { + interface BuiltIn { String name(); diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/VariantIntHolder.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/VariantIntHolder.java index c2d7bae48..f1d45a447 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/VariantIntHolder.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/VariantIntHolder.java @@ -30,10 +30,10 @@ package org.geysermc.geyser.entity.type.living.animal; * * @see VariantHolder */ -public interface VariantIntHolder extends VariantHolder> { +public interface VariantIntHolder extends VariantHolder { @Override - default void setBedrockVariant(BuiltIn variant) { + default void setBedrockVariant(BuiltIn variant) { setBedrockVariantId(variant.ordinal()); } @@ -47,7 +47,7 @@ public interface VariantIntHolder extends VariantHolder extends VariantHolder.BuiltIn { + interface BuiltIn extends VariantHolder.BuiltIn { int ordinal(); } 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 e5638dc17..4ee7175de 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,15 +53,4 @@ public class ChickenEntity extends TemperatureVariantAnimal 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 442fb27aa..de79e9a52 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,15 +82,4 @@ public class CowEntity extends TemperatureVariantAnimal 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 bf0416842..d6a8ece7c 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 @@ -48,13 +48,12 @@ 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.entity.metadata.PigVariant; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.IntEntityMetadata; 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,15 +154,4 @@ public class PigEntity extends TemperatureVariantAnimal 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 dd24cd7c6..ed4336215 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 @@ -32,13 +32,15 @@ import org.geysermc.geyser.entity.properties.VanillaEntityProperties; 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.RegistryEntryContext; 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 abstract class TemperatureVariantAnimal extends AnimalEntity implements VariantHolder { + + public static final Function VARIANT_READER = VariantHolder.reader(BuiltInVariant.class); public TemperatureVariantAnimal(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) { @@ -52,8 +54,19 @@ public abstract class TemperatureVariantAnimal until MCPL updates -public class CatEntity extends TameableEntity implements VariantIntHolder { +public class CatEntity extends TameableEntity implements VariantIntHolder { private byte collarColor = 14; // Red - default @@ -96,7 +95,7 @@ public class CatEntity extends TameableEntity implements VariantIntHolder defaultVariant() { + public BuiltIn defaultVariant() { return BuiltInVariant.BLACK; // Default variant on Java } @@ -147,7 +146,7 @@ public class CatEntity extends TameableEntity implements VariantIntHolder { + public enum BuiltInVariant implements BuiltIn { WHITE, BLACK, RED, diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/WolfEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/WolfEntity.java index a41e46793..753a6e3c4 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/WolfEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/WolfEntity.java @@ -47,7 +47,6 @@ import org.geysermc.geyser.session.cache.tags.Tag; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; import org.geysermc.geyser.util.ItemUtils; -import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.WolfVariant; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.ByteEntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.IntEntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode; @@ -59,7 +58,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.item.component.HolderSet; import java.util.Collections; import java.util.UUID; -public class WolfEntity extends TameableEntity implements VariantIntHolder { +public class WolfEntity extends TameableEntity implements VariantIntHolder { private byte collarColor = 14; // Red - default private HolderSet repairableItems = null; private boolean isCurseOfBinding = false; @@ -125,7 +124,7 @@ public class WolfEntity extends TameableEntity implements VariantIntHolder defaultVariant() { + public BuiltIn defaultVariant() { return BuiltInVariant.PALE; } @@ -199,7 +198,7 @@ public class WolfEntity extends TameableEntity implements VariantIntHolder { + public enum BuiltInVariant implements BuiltIn { PALE, ASHEN, BLACK, 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 bbc630c04..808ab7ee2 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,9 +40,7 @@ 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.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.farm.TemperatureVariantAnimal; 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; @@ -103,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, 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)); + register(JavaRegistries.PIG_VARIANT, cache -> cache.pigVariants, TemperatureVariantAnimal.VARIANT_READER); + register(JavaRegistries.COW_VARIANT, cache -> cache.cowVariants, TemperatureVariantAnimal.VARIANT_READER); + register(JavaRegistries.CHICKEN_VARIANT, cache -> cache.chickenVariants, TemperatureVariantAnimal.VARIANT_READER); // Load from MCProtocolLib's classloader NbtMap tag = MinecraftProtocol.loadNetworkCodec(); @@ -150,9 +148,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 5ee1ddb9a..732a2cc4a 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,9 +28,7 @@ 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.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.farm.TemperatureVariantAnimal; 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; @@ -61,9 +59,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); diff --git a/core/src/test/java/org/geysermc/geyser/scoreboard/network/ScoreboardIssueTests.java b/core/src/test/java/org/geysermc/geyser/scoreboard/network/ScoreboardIssueTests.java index 040ceaa66..8311f1a5b 100644 --- a/core/src/test/java/org/geysermc/geyser/scoreboard/network/ScoreboardIssueTests.java +++ b/core/src/test/java/org/geysermc/geyser/scoreboard/network/ScoreboardIssueTests.java @@ -52,8 +52,8 @@ import org.geysermc.mcprotocollib.protocol.data.game.scoreboard.NameTagVisibilit import org.geysermc.mcprotocollib.protocol.data.game.scoreboard.TeamAction; import org.geysermc.mcprotocollib.protocol.data.game.scoreboard.TeamColor; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.ClientboundPlayerInfoUpdatePacket; +import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.ClientboundAddEntityPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.ClientboundSetEntityDataPacket; -import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.spawn.ClientboundAddEntityPacket; import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.scoreboard.ClientboundSetPlayerTeamPacket; import org.junit.jupiter.api.Test;