From f6b1f872faa368783c79af87bd1b3649bf6e845e Mon Sep 17 00:00:00 2001 From: MCSamuel Date: Thu, 25 Dec 2025 09:53:05 -0800 Subject: [PATCH] Added EntityTag.State property for armadillo rolling --- .../denizen/nms/interfaces/EntityHelper.java | 9 ++++ .../objects/properties/PropertyRegistry.java | 3 ++ .../properties/entity/EntityState.java | 43 +++++++++++++++++++ .../nms/v1_20/helpers/EntityHelperImpl.java | 17 ++++++++ .../nms/v1_21/helpers/EntityHelperImpl.java | 17 ++++++++ 5 files changed, 89 insertions(+) create mode 100644 plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityState.java diff --git a/plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/EntityHelper.java b/plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/EntityHelper.java index 0501930cd7..8cfbbd784c 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/EntityHelper.java +++ b/plugin/src/main/java/com/denizenscript/denizen/nms/interfaces/EntityHelper.java @@ -5,6 +5,7 @@ import com.denizenscript.denizen.objects.EntityTag; import com.denizenscript.denizen.objects.LocationTag; 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.MapTag; import net.kyori.adventure.nbt.CompoundBinaryTag; @@ -514,4 +515,12 @@ public void onEntityMount(EntityDismountEvent event) { public Class getExitsVehicleEventImpl() { // TODO: once 1.20 is the minimum supported version, implement in the ScriptEvent class as usual return EntityExitsVehicleScriptEventImpl.class; } + + public ElementTag getArmadilloState(Armadillo entity) { + throw new UnsupportedOperationException(); + } + + public void setArmadilloState(Armadillo entity, Mechanism mechanism, ElementTag state) { + throw new UnsupportedOperationException(); + } } 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 477c8bb129..abfdd8ef35 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 @@ -173,6 +173,9 @@ public static void registerMainProperties() { } PropertyParser.registerProperty(EntitySpeed.class, EntityTag.class); PropertyParser.registerProperty(EntitySpell.class, EntityTag.class); + if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_20)) { + PropertyParser.registerProperty(EntityState.class, EntityTag.class); + } if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_19)) { PropertyParser.registerProperty(EntityStepHeight.class, EntityTag.class); } diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityState.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityState.java new file mode 100644 index 0000000000..38772d6525 --- /dev/null +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityState.java @@ -0,0 +1,43 @@ +package com.denizenscript.denizen.objects.properties.entity; + +import com.denizenscript.denizen.nms.NMSHandler; +import com.denizenscript.denizen.objects.EntityTag; +import com.denizenscript.denizencore.objects.Mechanism; +import com.denizenscript.denizencore.objects.core.ElementTag; +import org.bukkit.entity.Armadillo; + +public class EntityState extends EntityProperty { + + // <--[property] + // @object EntityTag + // @name state + // @input ElementTag + // @description + // Controls the current state of an armadillo. + // Valid states are IDLE, ROLLING, SCARED, and UNROLLING. + // The entity may roll or unroll due to normal vanilla conditions. If this is not desired, disable <@link mechanism EntityTag.has_ai>. + // --> + + public static boolean describes(EntityTag entity) { + return entity.getBukkitEntity() instanceof Armadillo; + } + + @Override + public ElementTag getPropertyValue() { + return NMSHandler.entityHelper.getArmadilloState(as(Armadillo.class)); + } + + @Override + public void setPropertyValue(ElementTag param, Mechanism mechanism) { + NMSHandler.entityHelper.setArmadilloState(as(Armadillo.class), mechanism, param); + } + + @Override + public String getPropertyId() { + return "state"; + } + + public static void register() { + autoRegister("state", EntityState.class, ElementTag.class, false); + } +} diff --git a/v1_20/src/main/java/com/denizenscript/denizen/nms/v1_20/helpers/EntityHelperImpl.java b/v1_20/src/main/java/com/denizenscript/denizen/nms/v1_20/helpers/EntityHelperImpl.java index 58fb9ba367..84eb878db6 100644 --- a/v1_20/src/main/java/com/denizenscript/denizen/nms/v1_20/helpers/EntityHelperImpl.java +++ b/v1_20/src/main/java/com/denizenscript/denizen/nms/v1_20/helpers/EntityHelperImpl.java @@ -8,7 +8,9 @@ import com.denizenscript.denizen.objects.EntityTag; import com.denizenscript.denizen.utilities.Utilities; import com.denizenscript.denizen.utilities.packets.NetworkInterceptHelper; +import com.denizenscript.denizencore.objects.Mechanism; import com.denizenscript.denizencore.objects.ObjectTag; +import com.denizenscript.denizencore.objects.core.ElementTag; import com.denizenscript.denizencore.objects.core.MapTag; import com.denizenscript.denizencore.scripts.commands.core.ReflectionSetCommand; import com.denizenscript.denizencore.utilities.ReflectionHelper; @@ -43,6 +45,7 @@ import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.goal.Goal; import net.minecraft.world.entity.ai.navigation.PathNavigation; +import net.minecraft.world.entity.animal.armadillo.Armadillo; import net.minecraft.world.entity.item.FallingBlockEntity; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.item.PrimedTnt; @@ -848,4 +851,18 @@ public void modifyRawNBT(Entity entity, CompoundBinaryTag tag) { nmsEntity.load(nmsMergedTag); nmsEntity.setUUID(uuid); } + + @Override + public ElementTag getArmadilloState(org.bukkit.entity.Armadillo entity) { + net.minecraft.world.entity.animal.armadillo.Armadillo armadillo = (Armadillo) ((CraftEntity) entity).getHandle(); + return new ElementTag(armadillo.getState()); + } + + @Override + public void setArmadilloState(org.bukkit.entity.Armadillo entity, Mechanism mechanism, ElementTag state) { + if (mechanism.requireEnum(Armadillo.ArmadilloState.class)) { + net.minecraft.world.entity.animal.armadillo.Armadillo armadillo = (Armadillo) ((CraftEntity) entity).getHandle(); + armadillo.switchToState(state.asEnum(Armadillo.ArmadilloState.class)); + } + } } diff --git a/v1_21/src/main/java/com/denizenscript/denizen/nms/v1_21/helpers/EntityHelperImpl.java b/v1_21/src/main/java/com/denizenscript/denizen/nms/v1_21/helpers/EntityHelperImpl.java index 8899ea0572..3f18f70ccc 100644 --- a/v1_21/src/main/java/com/denizenscript/denizen/nms/v1_21/helpers/EntityHelperImpl.java +++ b/v1_21/src/main/java/com/denizenscript/denizen/nms/v1_21/helpers/EntityHelperImpl.java @@ -9,7 +9,9 @@ import com.denizenscript.denizen.objects.EntityTag; import com.denizenscript.denizen.utilities.Utilities; import com.denizenscript.denizen.utilities.packets.NetworkInterceptHelper; +import com.denizenscript.denizencore.objects.Mechanism; import com.denizenscript.denizencore.objects.ObjectTag; +import com.denizenscript.denizencore.objects.core.ElementTag; import com.denizenscript.denizencore.objects.core.MapTag; import com.denizenscript.denizencore.scripts.commands.core.ReflectionSetCommand; import com.denizenscript.denizencore.utilities.ReflectionHelper; @@ -45,6 +47,7 @@ import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.ai.goal.Goal; import net.minecraft.world.entity.ai.navigation.PathNavigation; +import net.minecraft.world.entity.animal.armadillo.Armadillo; import net.minecraft.world.entity.item.FallingBlockEntity; import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.item.PrimedTnt; @@ -843,4 +846,18 @@ public void modifyRawNBT(Entity entity, CompoundBinaryTag tag) { Handler.useValueInput(nmsMergedTag, nmsEntity::load); nmsEntity.setUUID(uuid); } + + @Override + public ElementTag getArmadilloState(org.bukkit.entity.Armadillo entity) { + net.minecraft.world.entity.animal.armadillo.Armadillo armadillo = (Armadillo) ((CraftEntity) entity).getHandle(); + return new ElementTag(armadillo.getState()); + } + + @Override + public void setArmadilloState(org.bukkit.entity.Armadillo entity, Mechanism mechanism, ElementTag state) { + if (mechanism.requireEnum(Armadillo.ArmadilloState.class)) { + net.minecraft.world.entity.animal.armadillo.Armadillo armadillo = (Armadillo) ((CraftEntity) entity).getHandle(); + armadillo.switchToState(state.asEnum(Armadillo.ArmadilloState.class)); + } + } }