mirror of
https://github.com/GeyserMC/Geyser.git
synced 2025-12-20 07:19:29 +00:00
Changes to variants:
- All entity variants in rc1 are sent as int IDs by java, holders are no longer used - Fixed reading of mooshroom variants - Temperature animal variants now look a lot cleaner It builds!
This commit is contained in:
@@ -26,7 +26,7 @@ dependencies {
|
|||||||
}
|
}
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
mavenLocal()
|
// mavenLocal()
|
||||||
|
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
|
||||||
|
|||||||
@@ -998,7 +998,7 @@ public final class EntityDefinitions {
|
|||||||
MOOSHROOM = EntityDefinition.inherited(MooshroomEntity::new, ageableEntityBase)
|
MOOSHROOM = EntityDefinition.inherited(MooshroomEntity::new, ageableEntityBase)
|
||||||
.type(EntityType.MOOSHROOM)
|
.type(EntityType.MOOSHROOM)
|
||||||
.height(1.4f).width(0.9f)
|
.height(1.4f).width(0.9f)
|
||||||
.addTranslator(MetadataTypes.STRING, MooshroomEntity::setVariant)
|
.addTranslator(MetadataTypes.INT, MooshroomEntity::setMooshroomVariant)
|
||||||
.build();
|
.build();
|
||||||
OCELOT = EntityDefinition.inherited(OcelotEntity::new, ageableEntityBase)
|
OCELOT = EntityDefinition.inherited(OcelotEntity::new, ageableEntityBase)
|
||||||
.type(EntityType.OCELOT)
|
.type(EntityType.OCELOT)
|
||||||
|
|||||||
@@ -43,8 +43,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.Object
|
|||||||
import java.util.OptionalInt;
|
import java.util.OptionalInt;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
// TODO this is implementing VariantHolder<Object> until MCPL updates
|
public class FrogEntity extends AnimalEntity implements VariantIntHolder {
|
||||||
public class FrogEntity extends AnimalEntity implements VariantIntHolder<Object> {
|
|
||||||
public FrogEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) {
|
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);
|
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
|
||||||
}
|
}
|
||||||
@@ -69,7 +68,7 @@ public class FrogEntity extends AnimalEntity implements VariantIntHolder<Object>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BuiltIn<Object> defaultVariant() {
|
public BuiltIn defaultVariant() {
|
||||||
return BuiltInVariant.TEMPERATE;
|
return BuiltInVariant.TEMPERATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -93,7 +92,7 @@ public class FrogEntity extends AnimalEntity implements VariantIntHolder<Object>
|
|||||||
|
|
||||||
// Ordered by bedrock id
|
// Ordered by bedrock id
|
||||||
// TODO: are these ordered correctly?
|
// TODO: are these ordered correctly?
|
||||||
public enum BuiltInVariant implements BuiltIn<Object> {
|
public enum BuiltInVariant implements BuiltIn {
|
||||||
TEMPERATE,
|
TEMPERATE,
|
||||||
COLD,
|
COLD,
|
||||||
WARM
|
WARM
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ import org.geysermc.geyser.session.GeyserSession;
|
|||||||
import org.geysermc.geyser.session.cache.tags.ItemTag;
|
import org.geysermc.geyser.session.cache.tags.ItemTag;
|
||||||
import org.geysermc.geyser.util.InteractionResult;
|
import org.geysermc.geyser.util.InteractionResult;
|
||||||
import org.geysermc.geyser.util.InteractiveTag;
|
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 org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
@@ -49,9 +49,9 @@ public class MooshroomEntity extends CowEntity {
|
|||||||
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
|
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setVariant(ObjectEntityMetadata<String> entityMetadata) {
|
public void setMooshroomVariant(IntEntityMetadata metadata) {
|
||||||
isBrown = entityMetadata.getValue().equals("brown");
|
isBrown = metadata.getPrimitiveValue() == 1;
|
||||||
dirtyMetadata.put(EntityDataTypes.VARIANT, isBrown ? 1 : 0);
|
dirtyMetadata.put(EntityDataTypes.VARIANT, metadata.getPrimitiveValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -30,42 +30,37 @@ import org.geysermc.geyser.session.GeyserSession;
|
|||||||
import org.geysermc.geyser.session.cache.registry.JavaRegistryKey;
|
import org.geysermc.geyser.session.cache.registry.JavaRegistryKey;
|
||||||
import org.geysermc.geyser.session.cache.registry.RegistryEntryContext;
|
import org.geysermc.geyser.session.cache.registry.RegistryEntryContext;
|
||||||
import org.geysermc.geyser.util.MinecraftKey;
|
import org.geysermc.geyser.util.MinecraftKey;
|
||||||
import org.geysermc.mcprotocollib.protocol.data.game.Holder;
|
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.IntEntityMetadata;
|
||||||
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.Locale;
|
||||||
import java.util.function.Function;
|
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.
|
||||||
*
|
*
|
||||||
* <p>This interface is designed for mobs that have their variant wrapped in a {@link Holder}. Implementations usually have to
|
* <p>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.
|
||||||
* implement {@link VariantHolder#variantRegistry()}, {@link VariantHolder#setBedrockVariant(BuiltIn)}, and {@link VariantHolder#defaultVariant()}, and should also
|
* This interface helps translate data-driven variants to built-in bedrock ones.</p>
|
||||||
|
*
|
||||||
|
* <p>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}).</p>
|
* have an enum with built-in variants on bedrock (implementing {@link BuiltIn}).</p>
|
||||||
*
|
*
|
||||||
* @param <Variant> the MCPL variant class that a {@link Holder} wraps.
|
|
||||||
* @param <BedrockVariant> the enum of Bedrock variants.
|
* @param <BedrockVariant> the enum of Bedrock variants.
|
||||||
*/
|
*/
|
||||||
public interface VariantHolder<Variant, BedrockVariant extends VariantHolder.BuiltIn<Variant>> {
|
public interface VariantHolder<BedrockVariant extends VariantHolder.BuiltIn> {
|
||||||
|
|
||||||
default void setVariant(EntityMetadata<Holder<Variant>, ? extends MetadataType<Holder<Variant>>> variant) {
|
default void setVariant(IntEntityMetadata variant) {
|
||||||
setVariant(variant.getValue());
|
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> variant) {
|
default void setVariantFromJavaId(int variant) {
|
||||||
BedrockVariant builtInVariant;
|
BedrockVariant builtInVariant = variantRegistry().fromNetworkId(getSession(), variant);
|
||||||
if (variant.isId()) {
|
|
||||||
builtInVariant = variantRegistry().fromNetworkId(getSession(), variant.id());
|
|
||||||
if (builtInVariant == null) {
|
if (builtInVariant == null) {
|
||||||
builtInVariant = defaultVariant();
|
builtInVariant = defaultVariant();
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
builtInVariant = defaultVariant();
|
|
||||||
}
|
|
||||||
setBedrockVariant(builtInVariant);
|
setBedrockVariant(builtInVariant);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,14 +87,14 @@ public interface VariantHolder<Variant, BedrockVariant extends VariantHolder.Bui
|
|||||||
*
|
*
|
||||||
* <p>This reader simply matches the identifiers of registry entries with built-in variants. If no built-in variant matches, null is returned.</p>
|
* <p>This reader simply matches the identifiers of registry entries with built-in variants. If no built-in variant matches, null is returned.</p>
|
||||||
*/
|
*/
|
||||||
static <BuiltInVariant extends Enum<? extends BuiltIn<?>>> Function<RegistryEntryContext, BuiltInVariant> reader(Class<BuiltInVariant> clazz) {
|
static <BuiltInVariant extends Enum<? extends BuiltIn>> Function<RegistryEntryContext, BuiltInVariant> reader(Class<BuiltInVariant> clazz) {
|
||||||
BuiltInVariant[] variants = clazz.getEnumConstants();
|
BuiltInVariant[] variants = clazz.getEnumConstants();
|
||||||
if (variants == null) {
|
if (variants == null) {
|
||||||
throw new IllegalArgumentException("Class is not an enum");
|
throw new IllegalArgumentException("Class is not an enum");
|
||||||
}
|
}
|
||||||
return context -> {
|
return context -> {
|
||||||
for (BuiltInVariant variant : variants) {
|
for (BuiltInVariant variant : variants) {
|
||||||
if (((BuiltIn<?>) variant).javaIdentifier().equals(context.id())) {
|
if (((BuiltIn) variant).javaIdentifier().equals(context.id())) {
|
||||||
return variant;
|
return variant;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -111,10 +106,8 @@ public interface VariantHolder<Variant, BedrockVariant extends VariantHolder.Bui
|
|||||||
* Should be implemented on an enum within the entity class. The enum lists vanilla variants that can appear on bedrock.
|
* Should be implemented on an enum within the entity class. The enum lists vanilla variants that can appear on bedrock.
|
||||||
*
|
*
|
||||||
* <p>The enum constants should be named the same as their Java identifiers.</p>
|
* <p>The enum constants should be named the same as their Java identifiers.</p>
|
||||||
*
|
|
||||||
* @param <Variant> the same as the parent entity class. Used for type checking.
|
|
||||||
*/
|
*/
|
||||||
interface BuiltIn<Variant> {
|
interface BuiltIn {
|
||||||
|
|
||||||
String name();
|
String name();
|
||||||
|
|
||||||
|
|||||||
@@ -30,10 +30,10 @@ package org.geysermc.geyser.entity.type.living.animal;
|
|||||||
*
|
*
|
||||||
* @see VariantHolder
|
* @see VariantHolder
|
||||||
*/
|
*/
|
||||||
public interface VariantIntHolder<Variant> extends VariantHolder<Variant, VariantIntHolder.BuiltIn<Variant>> {
|
public interface VariantIntHolder extends VariantHolder<VariantIntHolder.BuiltIn> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
default void setBedrockVariant(BuiltIn<Variant> variant) {
|
default void setBedrockVariant(BuiltIn variant) {
|
||||||
setBedrockVariantId(variant.ordinal());
|
setBedrockVariantId(variant.ordinal());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -47,7 +47,7 @@ public interface VariantIntHolder<Variant> extends VariantHolder<Variant, Varian
|
|||||||
*
|
*
|
||||||
* @see org.geysermc.geyser.entity.type.living.animal.VariantHolder.BuiltIn
|
* @see org.geysermc.geyser.entity.type.living.animal.VariantHolder.BuiltIn
|
||||||
*/
|
*/
|
||||||
interface BuiltIn<Variant> extends VariantHolder.BuiltIn<Variant> {
|
interface BuiltIn extends VariantHolder.BuiltIn {
|
||||||
|
|
||||||
int ordinal();
|
int ordinal();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ import org.geysermc.geyser.session.cache.tags.Tag;
|
|||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class ChickenEntity extends TemperatureVariantAnimal<ChickenVariant, ChickenEntity.BuiltInVariant> {
|
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) {
|
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);
|
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
|
||||||
@@ -53,15 +53,4 @@ public class ChickenEntity extends TemperatureVariantAnimal<ChickenVariant, Chic
|
|||||||
public JavaRegistryKey<BuiltInVariant> variantRegistry() {
|
public JavaRegistryKey<BuiltInVariant> variantRegistry() {
|
||||||
return JavaRegistries.CHICKEN_VARIANT;
|
return JavaRegistries.CHICKEN_VARIANT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public BuiltInVariant defaultVariant() {
|
|
||||||
return BuiltInVariant.TEMPERATE;
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum BuiltInVariant implements BuiltIn<ChickenVariant> {
|
|
||||||
COLD,
|
|
||||||
TEMPERATE,
|
|
||||||
WARM
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand;
|
|||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class CowEntity extends TemperatureVariantAnimal<CowVariant, CowEntity.BuiltInVariant> {
|
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) {
|
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);
|
super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw);
|
||||||
@@ -82,15 +82,4 @@ public class CowEntity extends TemperatureVariantAnimal<CowVariant, CowEntity.Bu
|
|||||||
public JavaRegistryKey<BuiltInVariant> variantRegistry() {
|
public JavaRegistryKey<BuiltInVariant> variantRegistry() {
|
||||||
return JavaRegistries.COW_VARIANT;
|
return JavaRegistries.COW_VARIANT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public BuiltInVariant defaultVariant() {
|
|
||||||
return BuiltInVariant.TEMPERATE;
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum BuiltInVariant implements BuiltIn<CowVariant> {
|
|
||||||
COLD,
|
|
||||||
TEMPERATE,
|
|
||||||
WARM
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,13 +48,12 @@ import org.geysermc.geyser.session.cache.tags.Tag;
|
|||||||
import org.geysermc.geyser.util.EntityUtils;
|
import org.geysermc.geyser.util.EntityUtils;
|
||||||
import org.geysermc.geyser.util.InteractionResult;
|
import org.geysermc.geyser.util.InteractionResult;
|
||||||
import org.geysermc.geyser.util.InteractiveTag;
|
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.metadata.type.IntEntityMetadata;
|
||||||
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand;
|
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class PigEntity extends TemperatureVariantAnimal<PigVariant, PigEntity.BuiltInVariant> implements Tickable, ClientVehicle {
|
public class PigEntity extends TemperatureVariantAnimal implements Tickable, ClientVehicle {
|
||||||
private final BoostableVehicleComponent<PigEntity> vehicleComponent = new BoostableVehicleComponent<>(this, 1.0f);
|
private final BoostableVehicleComponent<PigEntity> 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) {
|
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<PigVariant, PigEntity.Bu
|
|||||||
public JavaRegistryKey<BuiltInVariant> variantRegistry() {
|
public JavaRegistryKey<BuiltInVariant> variantRegistry() {
|
||||||
return JavaRegistries.PIG_VARIANT;
|
return JavaRegistries.PIG_VARIANT;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public BuiltInVariant defaultVariant() {
|
|
||||||
return BuiltInVariant.TEMPERATE;
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum BuiltInVariant implements BuiltIn<PigVariant> {
|
|
||||||
COLD,
|
|
||||||
TEMPERATE,
|
|
||||||
WARM
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.AnimalEntity;
|
||||||
import org.geysermc.geyser.entity.type.living.animal.VariantHolder;
|
import org.geysermc.geyser.entity.type.living.animal.VariantHolder;
|
||||||
import org.geysermc.geyser.session.GeyserSession;
|
import org.geysermc.geyser.session.GeyserSession;
|
||||||
|
import org.geysermc.geyser.session.cache.registry.RegistryEntryContext;
|
||||||
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.UUID;
|
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<TemperatureVariantAnimal.BuiltInVariant> {
|
||||||
public abstract class TemperatureVariantAnimal<Variant, BedrockVariant extends VariantHolder.BuiltIn<Variant>> extends AnimalEntity
|
|
||||||
implements VariantHolder<Variant, BedrockVariant> {
|
public static final Function<RegistryEntryContext, BuiltInVariant> VARIANT_READER = VariantHolder.reader(BuiltInVariant.class);
|
||||||
|
|
||||||
public TemperatureVariantAnimal(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition,
|
public TemperatureVariantAnimal(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition<?> definition,
|
||||||
Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) {
|
Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) {
|
||||||
@@ -52,8 +54,19 @@ public abstract class TemperatureVariantAnimal<Variant, BedrockVariant extends V
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setBedrockVariant(BedrockVariant variant) {
|
public void setBedrockVariant(BuiltInVariant variant) {
|
||||||
propertyManager.add(VanillaEntityProperties.CLIMATE_VARIANT_ID, variant.name().toLowerCase(Locale.ROOT));
|
propertyManager.add(VanillaEntityProperties.CLIMATE_VARIANT_ID, variant.name().toLowerCase(Locale.ROOT));
|
||||||
updateBedrockEntityProperties();
|
updateBedrockEntityProperties();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BuiltInVariant defaultVariant() {
|
||||||
|
return BuiltInVariant.TEMPERATE;
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum BuiltInVariant implements BuiltIn {
|
||||||
|
COLD,
|
||||||
|
TEMPERATE,
|
||||||
|
WARM
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,8 +48,7 @@ import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand;
|
|||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
// TODO this is implementing VariantHolder<Object> until MCPL updates
|
public class CatEntity extends TameableEntity implements VariantIntHolder {
|
||||||
public class CatEntity extends TameableEntity implements VariantIntHolder<Object> {
|
|
||||||
|
|
||||||
private byte collarColor = 14; // Red - default
|
private byte collarColor = 14; // Red - default
|
||||||
|
|
||||||
@@ -96,7 +95,7 @@ public class CatEntity extends TameableEntity implements VariantIntHolder<Object
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BuiltIn<Object> defaultVariant() {
|
public BuiltIn defaultVariant() {
|
||||||
return BuiltInVariant.BLACK; // Default variant on Java
|
return BuiltInVariant.BLACK; // Default variant on Java
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -147,7 +146,7 @@ public class CatEntity extends TameableEntity implements VariantIntHolder<Object
|
|||||||
|
|
||||||
// Ordered by bedrock id
|
// Ordered by bedrock id
|
||||||
// TODO: are these ordered correctly?
|
// TODO: are these ordered correctly?
|
||||||
public enum BuiltInVariant implements BuiltIn<Object> {
|
public enum BuiltInVariant implements BuiltIn {
|
||||||
WHITE,
|
WHITE,
|
||||||
BLACK,
|
BLACK,
|
||||||
RED,
|
RED,
|
||||||
|
|||||||
@@ -47,7 +47,6 @@ import org.geysermc.geyser.session.cache.tags.Tag;
|
|||||||
import org.geysermc.geyser.util.InteractionResult;
|
import org.geysermc.geyser.util.InteractionResult;
|
||||||
import org.geysermc.geyser.util.InteractiveTag;
|
import org.geysermc.geyser.util.InteractiveTag;
|
||||||
import org.geysermc.geyser.util.ItemUtils;
|
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.ByteEntityMetadata;
|
||||||
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.IntEntityMetadata;
|
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.IntEntityMetadata;
|
||||||
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.GameMode;
|
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.Collections;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
public class WolfEntity extends TameableEntity implements VariantIntHolder<WolfVariant> {
|
public class WolfEntity extends TameableEntity implements VariantIntHolder {
|
||||||
private byte collarColor = 14; // Red - default
|
private byte collarColor = 14; // Red - default
|
||||||
private HolderSet repairableItems = null;
|
private HolderSet repairableItems = null;
|
||||||
private boolean isCurseOfBinding = false;
|
private boolean isCurseOfBinding = false;
|
||||||
@@ -125,7 +124,7 @@ public class WolfEntity extends TameableEntity implements VariantIntHolder<WolfV
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BuiltIn<WolfVariant> defaultVariant() {
|
public BuiltIn defaultVariant() {
|
||||||
return BuiltInVariant.PALE;
|
return BuiltInVariant.PALE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -199,7 +198,7 @@ public class WolfEntity extends TameableEntity implements VariantIntHolder<WolfV
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Ordered by bedrock id
|
// Ordered by bedrock id
|
||||||
public enum BuiltInVariant implements BuiltIn<WolfVariant> {
|
public enum BuiltInVariant implements BuiltIn {
|
||||||
PALE,
|
PALE,
|
||||||
ASHEN,
|
ASHEN,
|
||||||
BLACK,
|
BLACK,
|
||||||
|
|||||||
@@ -40,9 +40,7 @@ import org.cloudburstmc.protocol.bedrock.data.TrimPattern;
|
|||||||
import org.geysermc.geyser.GeyserImpl;
|
import org.geysermc.geyser.GeyserImpl;
|
||||||
import org.geysermc.geyser.entity.type.living.animal.FrogEntity;
|
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.VariantHolder;
|
||||||
import org.geysermc.geyser.entity.type.living.animal.farm.ChickenEntity;
|
import org.geysermc.geyser.entity.type.living.animal.farm.TemperatureVariantAnimal;
|
||||||
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.CatEntity;
|
||||||
import org.geysermc.geyser.entity.type.living.animal.tameable.WolfEntity;
|
import org.geysermc.geyser.entity.type.living.animal.tameable.WolfEntity;
|
||||||
import org.geysermc.geyser.inventory.item.BannerPattern;
|
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.FROG_VARIANT, cache -> cache.frogVariants, VariantHolder.reader(FrogEntity.BuiltInVariant.class));
|
||||||
register(JavaRegistries.WOLF_VARIANT, cache -> cache.wolfVariants, VariantHolder.reader(WolfEntity.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.PIG_VARIANT, cache -> cache.pigVariants, TemperatureVariantAnimal.VARIANT_READER);
|
||||||
register(JavaRegistries.COW_VARIANT, cache -> cache.cowVariants, VariantHolder.reader(CowEntity.BuiltInVariant.class));
|
register(JavaRegistries.COW_VARIANT, cache -> cache.cowVariants, TemperatureVariantAnimal.VARIANT_READER);
|
||||||
register(JavaRegistries.CHICKEN_VARIANT, cache -> cache.chickenVariants, VariantHolder.reader(ChickenEntity.BuiltInVariant.class));
|
register(JavaRegistries.CHICKEN_VARIANT, cache -> cache.chickenVariants, TemperatureVariantAnimal.VARIANT_READER);
|
||||||
|
|
||||||
// Load from MCProtocolLib's classloader
|
// Load from MCProtocolLib's classloader
|
||||||
NbtMap tag = MinecraftProtocol.loadNetworkCodec();
|
NbtMap tag = MinecraftProtocol.loadNetworkCodec();
|
||||||
@@ -150,9 +148,9 @@ public final class RegistryCache {
|
|||||||
private final JavaRegistry<FrogEntity.BuiltInVariant> frogVariants = new SimpleJavaRegistry<>();
|
private final JavaRegistry<FrogEntity.BuiltInVariant> frogVariants = new SimpleJavaRegistry<>();
|
||||||
private final JavaRegistry<WolfEntity.BuiltInVariant> wolfVariants = new SimpleJavaRegistry<>();
|
private final JavaRegistry<WolfEntity.BuiltInVariant> wolfVariants = new SimpleJavaRegistry<>();
|
||||||
|
|
||||||
private final JavaRegistry<PigEntity.BuiltInVariant> pigVariants = new SimpleJavaRegistry<>();
|
private final JavaRegistry<TemperatureVariantAnimal.BuiltInVariant> pigVariants = new SimpleJavaRegistry<>();
|
||||||
private final JavaRegistry<CowEntity.BuiltInVariant> cowVariants = new SimpleJavaRegistry<>();
|
private final JavaRegistry<TemperatureVariantAnimal.BuiltInVariant> cowVariants = new SimpleJavaRegistry<>();
|
||||||
private final JavaRegistry<ChickenEntity.BuiltInVariant> chickenVariants = new SimpleJavaRegistry<>();
|
private final JavaRegistry<TemperatureVariantAnimal.BuiltInVariant> chickenVariants = new SimpleJavaRegistry<>();
|
||||||
|
|
||||||
public RegistryCache(GeyserSession session) {
|
public RegistryCache(GeyserSession session) {
|
||||||
this.session = session;
|
this.session = session;
|
||||||
|
|||||||
@@ -28,9 +28,7 @@ package org.geysermc.geyser.session.cache.registry;
|
|||||||
import net.kyori.adventure.key.Key;
|
import net.kyori.adventure.key.Key;
|
||||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||||
import org.geysermc.geyser.entity.type.living.animal.FrogEntity;
|
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.TemperatureVariantAnimal;
|
||||||
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.CatEntity;
|
||||||
import org.geysermc.geyser.entity.type.living.animal.tameable.WolfEntity;
|
import org.geysermc.geyser.entity.type.living.animal.tameable.WolfEntity;
|
||||||
import org.geysermc.geyser.inventory.item.BannerPattern;
|
import org.geysermc.geyser.inventory.item.BannerPattern;
|
||||||
@@ -61,9 +59,9 @@ public class JavaRegistries {
|
|||||||
public static final JavaRegistryKey<FrogEntity.BuiltInVariant> FROG_VARIANT = create("frog_variant", RegistryCache::frogVariants);
|
public static final JavaRegistryKey<FrogEntity.BuiltInVariant> FROG_VARIANT = create("frog_variant", RegistryCache::frogVariants);
|
||||||
public static final JavaRegistryKey<WolfEntity.BuiltInVariant> WOLF_VARIANT = create("wolf_variant", RegistryCache::wolfVariants);
|
public static final JavaRegistryKey<WolfEntity.BuiltInVariant> WOLF_VARIANT = create("wolf_variant", RegistryCache::wolfVariants);
|
||||||
|
|
||||||
public static final JavaRegistryKey<PigEntity.BuiltInVariant> PIG_VARIANT = create("pig_variant", RegistryCache::pigVariants);
|
public static final JavaRegistryKey<TemperatureVariantAnimal.BuiltInVariant> PIG_VARIANT = create("pig_variant", RegistryCache::pigVariants);
|
||||||
public static final JavaRegistryKey<CowEntity.BuiltInVariant> COW_VARIANT = create("cow_variant", RegistryCache::cowVariants);
|
public static final JavaRegistryKey<TemperatureVariantAnimal.BuiltInVariant> COW_VARIANT = create("cow_variant", RegistryCache::cowVariants);
|
||||||
public static final JavaRegistryKey<ChickenEntity.BuiltInVariant> CHICKEN_VARIANT = create("chicken_variant", RegistryCache::chickenVariants);
|
public static final JavaRegistryKey<TemperatureVariantAnimal.BuiltInVariant> CHICKEN_VARIANT = create("chicken_variant", RegistryCache::chickenVariants);
|
||||||
|
|
||||||
private static <T> JavaRegistryKey<T> create(String key, JavaRegistryKey.NetworkSerializer<T> networkSerializer, JavaRegistryKey.NetworkDeserializer<T> networkDeserializer) {
|
private static <T> JavaRegistryKey<T> create(String key, JavaRegistryKey.NetworkSerializer<T> networkSerializer, JavaRegistryKey.NetworkDeserializer<T> networkDeserializer) {
|
||||||
JavaRegistryKey<T> registry = new JavaRegistryKey<>(MinecraftKey.key(key), networkSerializer, networkDeserializer);
|
JavaRegistryKey<T> registry = new JavaRegistryKey<>(MinecraftKey.key(key), networkSerializer, networkDeserializer);
|
||||||
|
|||||||
@@ -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.TeamAction;
|
||||||
import org.geysermc.mcprotocollib.protocol.data.game.scoreboard.TeamColor;
|
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.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.ClientboundSetEntityDataPacket;
|
||||||
import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.entity.spawn.ClientboundAddEntityPacket;
|
|
||||||
import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.scoreboard.ClientboundSetPlayerTeamPacket;
|
import org.geysermc.mcprotocollib.protocol.packet.ingame.clientbound.scoreboard.ClientboundSetPlayerTeamPacket;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user