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
*/
- 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;