From c36332ad2cf062c8d02d308a1b1bd1e328b92bcf Mon Sep 17 00:00:00 2001 From: Alex 'mcmonkey' Goodwin Date: Sat, 2 Oct 2021 15:20:05 -0700 Subject: [PATCH] raider properties --- .../objects/properties/PropertyRegistry.java | 5 + .../properties/entity/EntityCanJoinRaid.java | 77 ++++++++++++++++ .../properties/entity/EntityPatrolLeader.java | 77 ++++++++++++++++ .../properties/entity/EntityPatrolTarget.java | 91 +++++++++++++++++++ 4 files changed, 250 insertions(+) create mode 100644 plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityCanJoinRaid.java create mode 100644 plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityPatrolLeader.java create mode 100644 plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityPatrolTarget.java 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 d213eaf581..83e972944b 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 @@ -48,6 +48,9 @@ public static void registerMainProperties() { PropertyParser.registerProperty(EntityBeamTarget.class, EntityTag.class); PropertyParser.registerProperty(EntityBodyArrows.class, EntityTag.class); PropertyParser.registerProperty(EntityBoundingBox.class, EntityTag.class); + if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_16)) { + PropertyParser.registerProperty(EntityCanJoinRaid.class, EntityTag.class); + } if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_15)) { PropertyParser.registerProperty(EntityCannotEnterHive.class, EntityTag.class); } @@ -94,6 +97,8 @@ public static void registerMainProperties() { PropertyParser.registerProperty(EntityMarker.class, EntityTag.class); PropertyParser.registerProperty(EntityMaxFuseTicks.class, EntityTag.class); PropertyParser.registerProperty(EntityPainting.class, EntityTag.class); + PropertyParser.registerProperty(EntityPatrolLeader.class, EntityTag.class); + PropertyParser.registerProperty(EntityPatrolTarget.class, EntityTag.class); PropertyParser.registerProperty(EntityPickupStatus.class, EntityTag.class); PropertyParser.registerProperty(EntityPlayerCreated.class, EntityTag.class); PropertyParser.registerProperty(EntityPotion.class, EntityTag.class); diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityCanJoinRaid.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityCanJoinRaid.java new file mode 100644 index 0000000000..536366b24c --- /dev/null +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityCanJoinRaid.java @@ -0,0 +1,77 @@ +package com.denizenscript.denizen.objects.properties.entity; + +import com.denizenscript.denizen.objects.EntityTag; +import com.denizenscript.denizencore.objects.Mechanism; +import com.denizenscript.denizencore.objects.ObjectTag; +import com.denizenscript.denizencore.objects.core.ElementTag; +import com.denizenscript.denizencore.objects.properties.Property; +import com.denizenscript.denizencore.objects.properties.PropertyParser; +import org.bukkit.entity.Raider; + +public class EntityCanJoinRaid implements Property { + + public static boolean describes(ObjectTag entity) { + return entity instanceof EntityTag && ((EntityTag) entity).getBukkitEntity() instanceof Raider; + } + + public static EntityCanJoinRaid getFrom(ObjectTag entity) { + if (!describes(entity)) { + return null; + } + else { + return new EntityCanJoinRaid((EntityTag) entity); + } + } + + public static final String[] handledMechs = new String[] { + "can_join_raid" + }; + + private EntityCanJoinRaid(EntityTag entity) { + this.entity = entity; + } + + EntityTag entity; + + @Override + public String getPropertyString() { + return ((Raider) entity.getBukkitEntity()).isCanJoinRaid() ? "true" : "false"; + } + + @Override + public String getPropertyId() { + return "can_join_raid"; + } + + public static void registerTags() { + + // <--[tag] + // @attribute + // @returns ElementTag(Boolean) + // @mechanism EntityTag.can_join_raid + // @group properties + // @description + // If the entity is raider mob (like a pillager), returns whether the entity is allowed to join active raids. + // --> + PropertyParser.registerTag("can_join_raid", (attribute, object) -> { + return new ElementTag(((Raider) object.entity.getBukkitEntity()).isCanJoinRaid()); + }); + } + + @Override + public void adjust(Mechanism mechanism) { + + // <--[mechanism] + // @object EntityTag + // @name can_join_raid + // @input ElementTag(Boolean) + // @description + // If the entity is raider mob (like a pillager), changes whether the entity is allowed to join active raids. + // @tags + // + // --> + if (mechanism.matches("can_join_raid") && mechanism.requireBoolean()) { + ((Raider) entity.getBukkitEntity()).setCanJoinRaid(mechanism.getValue().asBoolean()); + } + } +} diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityPatrolLeader.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityPatrolLeader.java new file mode 100644 index 0000000000..7f4138fdfc --- /dev/null +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityPatrolLeader.java @@ -0,0 +1,77 @@ +package com.denizenscript.denizen.objects.properties.entity; + +import com.denizenscript.denizen.objects.EntityTag; +import com.denizenscript.denizencore.objects.Mechanism; +import com.denizenscript.denizencore.objects.ObjectTag; +import com.denizenscript.denizencore.objects.core.ElementTag; +import com.denizenscript.denizencore.objects.properties.Property; +import com.denizenscript.denizencore.objects.properties.PropertyParser; +import org.bukkit.entity.Raider; + +public class EntityPatrolLeader implements Property { + + public static boolean describes(ObjectTag entity) { + return entity instanceof EntityTag && ((EntityTag) entity).getBukkitEntity() instanceof Raider; + } + + public static EntityPatrolLeader getFrom(ObjectTag entity) { + if (!describes(entity)) { + return null; + } + else { + return new EntityPatrolLeader((EntityTag) entity); + } + } + + public static final String[] handledMechs = new String[] { + "is_patrol_leader" + }; + + private EntityPatrolLeader(EntityTag entity) { + this.entity = entity; + } + + EntityTag entity; + + @Override + public String getPropertyString() { + return ((Raider) entity.getBukkitEntity()).isPatrolLeader() ? "true" : "false"; + } + + @Override + public String getPropertyId() { + return "is_patrol_leader"; + } + + public static void registerTags() { + + // <--[tag] + // @attribute + // @returns ElementTag(Boolean) + // @mechanism EntityTag.is_patrol_leader + // @group properties + // @description + // If the entity is raider mob (like a pillager), returns whether the entity is a patrol leader. + // --> + PropertyParser.registerTag("is_patrol_leader", (attribute, object) -> { + return new ElementTag(((Raider) object.entity.getBukkitEntity()).isPatrolLeader()); + }); + } + + @Override + public void adjust(Mechanism mechanism) { + + // <--[mechanism] + // @object EntityTag + // @name is_patrol_leader + // @input ElementTag(Boolean) + // @description + // If the entity is raider mob (like a pillager), changes whether the entity is a patrol leader. + // @tags + // + // --> + if (mechanism.matches("is_patrol_leader") && mechanism.requireBoolean()) { + ((Raider) entity.getBukkitEntity()).setPatrolLeader(mechanism.getValue().asBoolean()); + } + } +} diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityPatrolTarget.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityPatrolTarget.java new file mode 100644 index 0000000000..c4a538b76d --- /dev/null +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/entity/EntityPatrolTarget.java @@ -0,0 +1,91 @@ +package com.denizenscript.denizen.objects.properties.entity; + +import com.denizenscript.denizen.objects.EntityTag; +import com.denizenscript.denizen.objects.LocationTag; +import com.denizenscript.denizencore.objects.Mechanism; +import com.denizenscript.denizencore.objects.ObjectTag; +import com.denizenscript.denizencore.objects.properties.Property; +import com.denizenscript.denizencore.objects.properties.PropertyParser; +import org.bukkit.block.Block; +import org.bukkit.entity.Raider; + +public class EntityPatrolTarget implements Property { + + public static boolean describes(ObjectTag entity) { + return entity instanceof EntityTag && ((EntityTag) entity).getBukkitEntity() instanceof Raider; + } + + public static EntityPatrolTarget getFrom(ObjectTag entity) { + if (!describes(entity)) { + return null; + } + else { + return new EntityPatrolTarget((EntityTag) entity); + } + } + + public static final String[] handledMechs = new String[] { + "patrol_target" + }; + + private EntityPatrolTarget(EntityTag entity) { + this.entity = entity; + } + + EntityTag entity; + + @Override + public String getPropertyString() { + Block target = ((Raider) entity.getBukkitEntity()).getPatrolTarget(); + if (target == null) { + return null; + } + return new LocationTag(target.getLocation()).identify(); + } + + @Override + public String getPropertyId() { + return "patrol_target"; + } + + public static void registerTags() { + + // <--[tag] + // @attribute + // @returns LocationTag + // @mechanism EntityTag.patrol_target + // @group properties + // @description + // If the entity is raider mob (like a pillager), returns whether the entity is allowed to join active raids. + // --> + PropertyParser.registerTag("patrol_target", (attribute, object) -> { + Block target = ((Raider) object.entity.getBukkitEntity()).getPatrolTarget(); + if (target == null) { + return null; + } + return new LocationTag(target.getLocation()); + }); + } + + @Override + public void adjust(Mechanism mechanism) { + + // <--[mechanism] + // @object EntityTag + // @name patrol_target + // @input LocationTag + // @description + // If the entity is raider mob (like a pillager), changes whether the entity is allowed to join active raids. + // @tags + // + // --> + if (mechanism.matches("patrol_target")) { + if (mechanism.hasValue() && mechanism.requireObject(LocationTag.class)) { + ((Raider) entity.getBukkitEntity()).setPatrolTarget(mechanism.valueAsType(LocationTag.class).getBlock()); + } + else { + ((Raider) entity.getBukkitEntity()).setPatrolTarget(null); + } + } + } +}