diff --git a/paper/src/main/java/com/denizenscript/denizen/paper/utilities/PaperAPIToolsImpl.java b/paper/src/main/java/com/denizenscript/denizen/paper/utilities/PaperAPIToolsImpl.java index 0b6d741ced..fe85f1f44b 100644 --- a/paper/src/main/java/com/denizenscript/denizen/paper/utilities/PaperAPIToolsImpl.java +++ b/paper/src/main/java/com/denizenscript/denizen/paper/utilities/PaperAPIToolsImpl.java @@ -10,9 +10,11 @@ import com.denizenscript.denizen.scripts.containers.core.ItemScriptHelper; import com.denizenscript.denizen.utilities.FormattedTextHelper; import com.denizenscript.denizen.utilities.PaperAPITools; +import com.denizenscript.denizen.utilities.Utilities; import com.denizenscript.denizencore.DenizenCore; import com.denizenscript.denizencore.objects.Mechanism; import com.denizenscript.denizencore.objects.core.ElementTag; +import com.denizenscript.denizencore.objects.core.ListTag; import com.denizenscript.denizencore.tags.TagContext; import com.denizenscript.denizencore.utilities.CoreUtilities; import com.denizenscript.denizencore.utilities.ReflectionHelper; @@ -421,12 +423,17 @@ public double[] getRecentTps() { } @Override - public String getCopperGolemState(CopperGolem copperGolem) { + public ListTag getCopperGolemVariants() { + return Utilities.listTypes(WeatheringCopperState.class); + } + + @Override + public String getCopperGolemVariant(CopperGolem copperGolem) { return copperGolem.getWeatheringState().name(); } @Override - public void setCopperGolemState(ElementTag variant, CopperGolem copperGolem, Mechanism mechanism) { + public void setCopperGolemVariant(ElementTag variant, CopperGolem copperGolem, Mechanism mechanism) { if (mechanism.requireEnum(WeatheringCopperState.class)) { copperGolem.setWeatheringState(variant.asEnum(WeatheringCopperState.class)); } diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/PropertyRegistry.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/PropertyRegistry.java index abfdd8ef35..a69536b1f3 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/PropertyRegistry.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/PropertyRegistry.java @@ -197,9 +197,7 @@ public static void registerMainProperties() { PropertyParser.registerProperty(EntityTrapped.class, EntityTag.class); PropertyParser.registerProperty(EntityTrapTime.class, EntityTag.class); } - if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_20)) { - PropertyParser.registerProperty(EntityVariant.class, EntityTag.class); - } + PropertyParser.registerProperty(EntityVariant.class, EntityTag.class); if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_19)) { PropertyParser.registerProperty(EntityViewRange.class, EntityTag.class); } diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityColor.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityColor.java index 75fbf49b06..7bedd1d930 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityColor.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityColor.java @@ -4,6 +4,7 @@ import com.denizenscript.denizen.nms.NMSVersion; import com.denizenscript.denizen.objects.EntityTag; import com.denizenscript.denizen.objects.properties.bukkit.BukkitColorExtensions; +import com.denizenscript.denizen.utilities.BukkitImplDeprecations; import com.denizenscript.denizen.utilities.MultiVersionHelper1_19; import com.denizenscript.denizen.utilities.Utilities; import com.denizenscript.denizencore.objects.Mechanism; @@ -112,12 +113,15 @@ else if (type == EntityType.OCELOT && mechanism.requireEnum(Ocelot.Type.class)) as(Ocelot.class).setCatType(color.asEnum(Ocelot.Type.class)); } else if (type == EntityType.RABBIT && mechanism.requireEnum(Rabbit.Type.class)) { + BukkitImplDeprecations.colorToVariantProperty.warn(mechanism.context); as(Rabbit.class).setRabbitType(color.asEnum(Rabbit.Type.class)); } else if ((type == EntityType.LLAMA || type == EntityType.TRADER_LLAMA) && mechanism.requireEnum(Llama.Color.class)) { + BukkitImplDeprecations.colorToVariantProperty.warn(mechanism.context); as(Llama.class).setColor(color.asEnum(Llama.Color.class)); } else if (type == EntityType.PARROT && mechanism.requireEnum(Parrot.Variant.class)) { + BukkitImplDeprecations.colorToVariantProperty.warn(mechanism.context); as(Parrot.class).setVariant(color.asEnum(Parrot.Variant.class)); } else if (type == EntityType.SHULKER && mechanism.requireEnum(DyeColor.class)) { @@ -156,6 +160,7 @@ else if (type == EntityType.TROPICAL_FISH && mechanism.requireObject(ListTag.cla } } else if (type == EntityType.FOX && mechanism.requireEnum(Fox.Type.class)) { + BukkitImplDeprecations.colorToVariantProperty.warn(mechanism.context); as(Fox.class).setFoxType(color.asEnum(Fox.Type.class)); } else if (type == EntityType.CAT && mechanism.requireObject(ListTag.class)) { @@ -201,9 +206,11 @@ else if (type == EntityType.PANDA && mechanism.requireObject(ListTag.class)) { } // TODO This technically has registries on all supported versions else if (type == EntityType.VILLAGER && Utilities.requireEnumlike(mechanism, Villager.Type.class)) { + BukkitImplDeprecations.colorToVariantProperty.warn(mechanism.context); as(Villager.class).setVillagerType(Utilities.elementToEnumlike(mechanism.getValue(), Villager.Type.class)); } else if (type == EntityType.ZOMBIE_VILLAGER && Utilities.requireEnumlike(mechanism, Villager.Type.class)) { + BukkitImplDeprecations.colorToVariantProperty.warn(mechanism.context); as(ZombieVillager.class).setVillagerType(Utilities.elementToEnumlike(mechanism.getValue(), Villager.Type.class)); } else if (type == EntityType.ARROW && mechanism.requireObject(ColorTag.class)) { @@ -244,18 +251,30 @@ public String getColor(boolean includeDeprecated) { } yield null; } - case RABBIT -> as(Rabbit.class).getRabbitType().name(); - case LLAMA, TRADER_LLAMA -> as(Llama.class).getColor().name(); - case PARROT -> as(Parrot.class).getVariant().name(); + case RABBIT -> { + BukkitImplDeprecations.colorToVariantProperty.warn(); + yield as(Rabbit.class).getRabbitType().name(); + } + case LLAMA, TRADER_LLAMA -> { + BukkitImplDeprecations.colorToVariantProperty.warn(); + yield as(Llama.class).getColor().name(); + } + case PARROT -> { + BukkitImplDeprecations.colorToVariantProperty.warn(); + yield as(Parrot.class).getVariant().name(); + } case SHULKER -> { DyeColor color = as(Shulker.class).getColor(); - yield color == null ? null : color.name(); + yield color == null ? null : color.name(); } case TROPICAL_FISH -> { TropicalFish fish = as(TropicalFish.class); yield new ListTag(Arrays.asList(fish.getPattern().name(), fish.getBodyColor().name(), fish.getPatternColor().name())).identify(); } - case FOX -> as(Fox.class).getFoxType().name(); + case FOX -> { + BukkitImplDeprecations.colorToVariantProperty.warn(); + yield as(Fox.class).getFoxType().name(); + } case CAT -> { Cat cat = as(Cat.class); // TODO once 1.21 is the minimum supported version, replace with direct registry-based handling @@ -266,8 +285,14 @@ public String getColor(boolean includeDeprecated) { yield panda.getMainGene().name() + "|" + panda.getHiddenGene().name(); } // TODO This technically has registries on all supported versions - case VILLAGER -> String.valueOf(as(Villager.class).getVillagerType()); - case ZOMBIE_VILLAGER -> String.valueOf(as(ZombieVillager.class).getVillagerType()); + case VILLAGER -> { + BukkitImplDeprecations.colorToVariantProperty.warn(); + yield String.valueOf(as(Villager.class).getVillagerType()); + } + case ZOMBIE_VILLAGER -> { + BukkitImplDeprecations.colorToVariantProperty.warn(); + yield String.valueOf(as(ZombieVillager.class).getVillagerType()); + } case ARROW -> { try { yield BukkitColorExtensions.fromColor(as(Arrow.class).getColor()).identify(); @@ -298,19 +323,34 @@ public ListTag getAllowedColors() { yield horseColors; } case SHEEP, WOLF, SHULKER -> Utilities.listTypes(DyeColor.class); - case RABBIT -> Utilities.listTypes(Rabbit.Type.class); - case LLAMA, TRADER_LLAMA -> Utilities.listTypes(Llama.Color.class); - case PARROT -> Utilities.listTypes(Parrot.Variant.class); + case RABBIT -> { + BukkitImplDeprecations.allowedColorsToVariants.warn(); + yield Utilities.listTypes(Rabbit.Type.class); + } + case LLAMA, TRADER_LLAMA -> { + BukkitImplDeprecations.allowedColorsToVariants.warn(); + yield Utilities.listTypes(Llama.Color.class); + } + case PARROT -> { + BukkitImplDeprecations.allowedColorsToVariants.warn(); + yield Utilities.listTypes(Parrot.Variant.class); + } case TROPICAL_FISH -> { ListTag patterns = Utilities.listTypes(TropicalFish.Pattern.class); patterns.addAll(Utilities.listTypes(DyeColor.class)); yield patterns; } - case FOX -> Utilities.listTypes(Fox.Type.class); + case FOX -> { + BukkitImplDeprecations.allowedColorsToVariants.warn(); + yield Utilities.listTypes(Fox.Type.class); + } case CAT -> Utilities.listTypes(Cat.Type.class); case PANDA -> Utilities.listTypes(Panda.Gene.class); // TODO This technically has registries on all supported versions - case VILLAGER, ZOMBIE_VILLAGER -> Utilities.listTypes(Villager.Type.class); + case VILLAGER, ZOMBIE_VILLAGER -> { + BukkitImplDeprecations.allowedColorsToVariants.warn(); + yield Utilities.listTypes(Villager.Type.class); + } case GOAT -> { ListTag result = new ListTag(); result.add("screaming"); diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityVariant.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityVariant.java index 5b50f1c822..5ed366c5be 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityVariant.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityVariant.java @@ -7,6 +7,8 @@ import com.denizenscript.denizen.utilities.Utilities; import com.denizenscript.denizencore.objects.Mechanism; import com.denizenscript.denizencore.objects.core.ElementTag; +import com.denizenscript.denizencore.objects.core.ListTag; +import com.denizenscript.denizencore.objects.properties.PropertyParser; import com.denizenscript.denizencore.utilities.ReflectionHelper; import com.denizenscript.denizencore.utilities.debugging.Debug; import org.bukkit.entity.*; @@ -35,18 +37,27 @@ public class EntityVariant extends EntityProperty { // @name variant // @input ElementTag // @description - // Controls which variant a chicken, copper golem, cow, pig, wolf, or zombie nautilus is. + // Controls which variant a chicken, copper golem, cow, fox, frog, llama, parrot, pig, trader llama, rabbit, villager, wolf, zombie nautilus, or zombie villager is. // A list of valid chicken variants can be found at <@link url https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/Chicken.Variant.html>. // A list of valid copper golem variants can be found at <@link url https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/CopperGolem.CopperWeatherState.html>. // A list of valid cow variants can be found at <@link url https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/Cow.Variant.html>. + // A list of valid fox variants can be found at <@link url https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/Fox.Type.html>. + // A list of valid frog variants can be found at <@link url https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/Frog.Variant.html>. + // A list of valid llama and trader llama variants can be found at <@link url https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/Llama.Color.html>. + // A list of valid parrot variants can be found at <@link url https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/Parrot.Variant.html>. // A list of valid pig variants can be found at <@link url https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/Pig.Variant.html>. + // A list of valid rabbit variants can be found at <@link url https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/Rabbit.Type.html>. + // A list of valid villager and zombie villager variants can be found at <@link urlhttps://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/Villager.Type.html>. // A list of valid wolf variants can be found at <@link url https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/Wolf.Variant.html>. // A list of valid zombie nautilus variants can be found at <@link url https://hub.spigotmc.org/javadocs/spigot/org/bukkit/entity/ZombieNautilus.Variant.html>. // --> public static boolean describes(EntityTag entityTag) { Entity entity = entityTag.getBukkitEntity(); - return entity instanceof Wolf + return entity instanceof Fox || entity instanceof Llama || entity instanceof Parrot + || entity instanceof Rabbit || entity instanceof Villager || entity instanceof ZombieVillager + || (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_19) && entity instanceof Frog) + || (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_20) && entity instanceof Wolf) || (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21) && (entity instanceof Chicken || entity instanceof CopperGolem || entity instanceof Cow @@ -56,75 +67,135 @@ public static boolean describes(EntityTag entityTag) { @Override public ElementTag getPropertyValue() { - if (getEntity() instanceof Wolf wolf) { + Entity entity = getEntity(); + if (entity instanceof Fox fox) { + return new ElementTag(fox.getFoxType()); + } + else if (entity instanceof Llama llama) { + return new ElementTag(llama.getColor()); + } + else if (entity instanceof Parrot parrot) { + return new ElementTag(parrot.getVariant()); + } + else if (entity instanceof Rabbit rabbit) { + return new ElementTag(rabbit.getRabbitType()); + } + else if (entity instanceof Villager villager) { + return new ElementTag(Utilities.namespacedKeyToString(villager.getVillagerType().getKey()), true); + } + else if (entity instanceof ZombieVillager zombieVillager) { + return new ElementTag(Utilities.namespacedKeyToString(zombieVillager.getVillagerType().getKey()), true); + } + else if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_19) && entity instanceof Frog frog) { + return new ElementTag(Utilities.namespacedKeyToString(frog.getVariant().getKey()), true); + } + else if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_20) && entity instanceof Wolf wolf) { return new ElementTag(Utilities.namespacedKeyToString(wolf.getVariant().getKey()), true); } - else if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21)) { - if (getEntity() instanceof Chicken chicken) { - return new ElementTag(Utilities.namespacedKeyToString(chicken.getVariant().getKey()), true); - } - else if (getEntity() instanceof CopperGolem copperGolem) { - return new ElementTag(PaperAPITools.instance.getCopperGolemState(copperGolem), true); - } - else if (COW_GET_VARIANT != null && getEntity() instanceof Cow cow) { - try { - return new ElementTag(Utilities.namespacedKeyToString(((Cow.Variant) COW_GET_VARIANT.invoke(cow)).getKey()), true); - } - catch (Throwable e) { - Debug.echoError(e); - return null; - } - } - else if (getEntity() instanceof Pig pig) { - return new ElementTag(Utilities.namespacedKeyToString(pig.getVariant().getKey()), true); + else if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21) && entity instanceof Chicken chicken) { + return new ElementTag(Utilities.namespacedKeyToString(chicken.getVariant().getKey()), true); + } + else if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21) && entity instanceof CopperGolem copperGolem) { + return new ElementTag(PaperAPITools.instance.getCopperGolemVariant(copperGolem), true); + } + else if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21) && COW_GET_VARIANT != null && entity instanceof Cow cow) { + try { + return new ElementTag(Utilities.namespacedKeyToString(((Cow.Variant) COW_GET_VARIANT.invoke(cow)).getKey()), true); } - else if (getEntity() instanceof ZombieNautilus zombieNautilus) { - return new ElementTag(Utilities.namespacedKeyToString(zombieNautilus.getVariant().getKey()), true); + catch (Throwable e) { + Debug.echoError(e); + return null; } } + else if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21) && entity instanceof Pig pig) { + return new ElementTag(Utilities.namespacedKeyToString(pig.getVariant().getKey()), true); + } + else if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21) && entity instanceof ZombieNautilus zombieNautilus) { + return new ElementTag(Utilities.namespacedKeyToString(zombieNautilus.getVariant().getKey()), true); + } return null; } @Override public void setPropertyValue(ElementTag variant, Mechanism mechanism) { - if (getEntity() instanceof Wolf wolf) { + Entity entity = getEntity(); + if (entity instanceof Fox fox) { + Fox.Type foxVariant = Utilities.elementToRequiredEnumLike(variant, Fox.Type.class, mechanism); + if (foxVariant != null) { + fox.setFoxType(foxVariant); + } + } + else if (entity instanceof Llama llama) { + Llama.Color llamaVariant = Utilities.elementToRequiredEnumLike(variant, Llama.Color.class, mechanism); + if (llamaVariant != null) { + llama.setColor(llamaVariant); + } + } + else if (entity instanceof Parrot parrot) { + Parrot.Variant parrotVariant = Utilities.elementToRequiredEnumLike(variant, Parrot.Variant.class, mechanism); + if (parrotVariant != null) { + parrot.setVariant(parrotVariant); + } + } + else if (entity instanceof Rabbit rabbit) { + Rabbit.Type rabbitVariant = Utilities.elementToRequiredEnumLike(variant, Rabbit.Type.class, mechanism); + if (rabbitVariant != null) { + rabbit.setRabbitType(rabbitVariant); + } + } + else if (entity instanceof Villager || entity instanceof ZombieVillager) { + Villager.Type villagerVariant = Utilities.elementToRequiredEnumLike(variant, Villager.Type.class, mechanism); + if (villagerVariant != null) { + if (entity instanceof Villager villager) { + villager.setVillagerType(villagerVariant); + } + else { + as(ZombieVillager.class).setVillagerType(villagerVariant); + } + } + } + else if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_19) && entity instanceof Frog frog) { + Frog.Variant frogVariant = Utilities.elementToRequiredEnumLike(variant, Frog.Variant.class, mechanism); + if (frogVariant != null) { + frog.setVariant(frogVariant); + } + } + else if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_20) && entity instanceof Wolf wolf) { Wolf.Variant wolfVariant = Utilities.elementToRequiredEnumLike(variant, Wolf.Variant.class, mechanism); if (wolfVariant != null) { wolf.setVariant(wolfVariant); } } - else if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21)) { - if (getEntity() instanceof Chicken chicken) { - Chicken.Variant chickenVariant = Utilities.elementToRequiredEnumLike(variant, Chicken.Variant.class, mechanism); - if (chickenVariant != null) { - chicken.setVariant(chickenVariant); - } + else if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21) && entity instanceof Chicken chicken) { + Chicken.Variant chickenVariant = Utilities.elementToRequiredEnumLike(variant, Chicken.Variant.class, mechanism); + if (chickenVariant != null) { + chicken.setVariant(chickenVariant); } - else if (getEntity() instanceof CopperGolem copperGolem) { - PaperAPITools.instance.setCopperGolemState(variant, copperGolem, mechanism); - } - else if (COW_SET_VARIANT != null && getEntity() instanceof Cow cow) { - Cow.Variant cowVariant = Utilities.elementToRequiredEnumLike(variant, Cow.Variant.class, mechanism); - if (cowVariant != null) { - try { - COW_SET_VARIANT.invoke(cow, cowVariant); - } - catch (Throwable e) { - Debug.echoError(e); - } + } + else if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21) && entity instanceof CopperGolem copperGolem) { + PaperAPITools.instance.setCopperGolemVariant(variant, copperGolem, mechanism); + } + else if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21) && COW_SET_VARIANT != null && entity instanceof Cow cow) { + Cow.Variant cowVariant = Utilities.elementToRequiredEnumLike(variant, Cow.Variant.class, mechanism); + if (cowVariant != null) { + try { + COW_SET_VARIANT.invoke(cow, cowVariant); } - } - else if (getEntity() instanceof Pig pig) { - Pig.Variant pigVariant = Utilities.elementToRequiredEnumLike(variant, Pig.Variant.class, mechanism); - if (pigVariant != null) { - pig.setVariant(pigVariant); + catch (Throwable e) { + Debug.echoError(e); } } - else if (getEntity() instanceof ZombieNautilus zombieNautilus) { - ZombieNautilus.Variant zombieNautilusVariant = Utilities.elementToRequiredEnumLike(variant, ZombieNautilus.Variant.class, mechanism); - if (zombieNautilusVariant != null) { - zombieNautilus.setVariant(zombieNautilusVariant); - } + } + else if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21) && entity instanceof Pig pig) { + Pig.Variant pigVariant = Utilities.elementToRequiredEnumLike(variant, Pig.Variant.class, mechanism); + if (pigVariant != null) { + pig.setVariant(pigVariant); + } + } + else if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21) && entity instanceof ZombieNautilus zombieNautilus) { + ZombieNautilus.Variant zombieNautilusVariant = Utilities.elementToRequiredEnumLike(variant, ZombieNautilus.Variant.class, mechanism); + if (zombieNautilusVariant != null) { + zombieNautilus.setVariant(zombieNautilusVariant); } } } @@ -136,5 +207,55 @@ public String getPropertyId() { public static void register() { autoRegister("variant", EntityVariant.class, ElementTag.class, false); + + // <--[tag] + // @attribute + // @returns ListTag + // @mechanism EntityTag.variant + // @group properties + // @description + // If the entity can have a variant, returns the list of allowed variants. + // See also <@link tag EntityTag.variant>. + // --> + PropertyParser.registerTag(EntityVariant.class, ListTag.class, "allowed_variants", (attribute, object) -> { + Entity entity = object.getEntity(); + if (entity instanceof Fox) { + return new ListTag(Utilities.listTypes(Fox.Type.class)); + } + else if (entity instanceof Llama) { + return new ListTag(Utilities.listTypes(Llama.Color.class)); + } + else if (entity instanceof Parrot) { + return new ListTag(Utilities.listTypes(Parrot.Variant.class)); + } + else if (entity instanceof Rabbit) { + return new ListTag(Utilities.listTypes(Rabbit.Type.class)); + } + else if (entity instanceof Villager || entity instanceof ZombieVillager) { + return new ListTag(Utilities.listTypes(Villager.Type.class)); + } + else if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_19) && entity instanceof Frog) { + return new ListTag(Utilities.listTypes(Frog.Variant.class)); + } + else if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_20) && entity instanceof Wolf) { + return new ListTag(Utilities.listTypes(Wolf.Variant.class)); + } + else if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21) && entity instanceof Chicken) { + return new ListTag(Utilities.listTypes(Chicken.Variant.class)); + } + else if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21) && entity instanceof CopperGolem) { + return PaperAPITools.instance.getCopperGolemVariants(); + } + else if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21) && entity instanceof Cow) { + return new ListTag(Utilities.listTypes(Cow.Variant.class)); + } + else if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21) && entity instanceof Pig) { + return new ListTag(Utilities.listTypes(Pig.Variant.class)); + } + else if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21) && entity instanceof ZombieNautilus) { + return new ListTag(Utilities.listTypes(ZombieNautilus.Variant.class)); + } + return null; + }); } } diff --git a/plugin/src/main/java/com/denizenscript/denizen/utilities/BukkitImplDeprecations.java b/plugin/src/main/java/com/denizenscript/denizen/utilities/BukkitImplDeprecations.java index 949a31a77f..0612bf4b64 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/utilities/BukkitImplDeprecations.java +++ b/plugin/src/main/java/com/denizenscript/denizen/utilities/BukkitImplDeprecations.java @@ -494,6 +494,12 @@ public class BukkitImplDeprecations { // Added 2025/09/22 public static Warning playerSteerEntityEvent = new FutureWarning("playerSteerEntityEvent", "The 'player steers ' event is deprecated in favor of the 'player input' event in MC 1.21+."); + // Added 2026/02/21 + public static Warning colorToVariantProperty = new FutureWarning("colorToVariantProperty", "The usage of the 'EntityTag.color' property for this type of entity has been deprecated in favor of 'EntityTag.variant'."); + + // Added 2026/02/21 + public static Warning allowedColorsToVariants = new FutureWarning("allowedColorsToVariants", "The usage of the 'EntityTag.allowed_colors' tag for this type of entity has been deprecated in favor of 'EntityTag.allowed_variants'."); + // ==================== PAST deprecations of things that are already gone but still have a warning left behind ==================== // Removed upstream 2023/10/29 without warning. diff --git a/plugin/src/main/java/com/denizenscript/denizen/utilities/MultiVersionHelper1_19.java b/plugin/src/main/java/com/denizenscript/denizen/utilities/MultiVersionHelper1_19.java index e649c9aec1..8f147273af 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/utilities/MultiVersionHelper1_19.java +++ b/plugin/src/main/java/com/denizenscript/denizen/utilities/MultiVersionHelper1_19.java @@ -20,6 +20,7 @@ public static boolean colorIsApplicable(EntityType type) { // TODO Frog variants technically have registries on all supported versions public static String getColor(Entity entity, boolean includeDeprecated) { if (entity instanceof Frog frog) { + BukkitImplDeprecations.colorToVariantProperty.warn(); return String.valueOf(frog.getVariant()); } else if (entity instanceof Boat boat) { @@ -36,6 +37,7 @@ else if (entity instanceof Boat boat) { public static ListTag getAllowedColors(EntityType type) { if (type == EntityType.FROG) { + BukkitImplDeprecations.allowedColorsToVariants.warn(); return Utilities.listTypes(Frog.Variant.class); } else if (Boat.class.isAssignableFrom(type.getEntityClass())) { @@ -49,6 +51,7 @@ else if (Boat.class.isAssignableFrom(type.getEntityClass())) { public static void setColor(Entity entity, Mechanism mech) { if (entity instanceof Frog frog && Utilities.requireEnumlike(mech, Frog.Variant.class)) { + BukkitImplDeprecations.colorToVariantProperty.warn(); frog.setVariant(Utilities.elementToEnumlike(mech.getValue(), Frog.Variant.class)); } else if (entity instanceof Boat boat && mech.requireEnum(Boat.Type.class)) { diff --git a/plugin/src/main/java/com/denizenscript/denizen/utilities/PaperAPITools.java b/plugin/src/main/java/com/denizenscript/denizen/utilities/PaperAPITools.java index 6f6877e768..df3f942b7b 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/utilities/PaperAPITools.java +++ b/plugin/src/main/java/com/denizenscript/denizen/utilities/PaperAPITools.java @@ -7,6 +7,7 @@ import com.denizenscript.denizen.utilities.packets.NetworkInterceptHelper; import com.denizenscript.denizencore.objects.Mechanism; import com.denizenscript.denizencore.objects.core.ElementTag; +import com.denizenscript.denizencore.objects.core.ListTag; import com.denizenscript.denizencore.utilities.ReflectionHelper; import com.denizenscript.denizencore.utilities.debugging.Debug; import net.md_5.bungee.api.chat.BaseComponent; @@ -242,11 +243,15 @@ public double[] getRecentTps() { return NMSHandler.instance.getRecentTps(); } - public String getCopperGolemState(CopperGolem copperGolem) { + public ListTag getCopperGolemVariants() { + return Utilities.listTypes(CopperGolem.CopperWeatherState.class); + } + + public String getCopperGolemVariant(CopperGolem copperGolem) { return copperGolem.getWeatherState().name(); } - public void setCopperGolemState(ElementTag variant, CopperGolem copperGolem, Mechanism mechanism) { + public void setCopperGolemVariant(ElementTag variant, CopperGolem copperGolem, Mechanism mechanism) { if (mechanism.requireEnum(CopperGolem.CopperWeatherState.class)) { copperGolem.setWeatherState(variant.asEnum(CopperGolem.CopperWeatherState.class)); }