diff --git a/pom.xml b/pom.xml
index 6ab627aa0..a6053a293 100644
--- a/pom.xml
+++ b/pom.xml
@@ -222,7 +222,7 @@
com.garbagemule
MobArena
- 0.97.1
+ 0.109
system
${basedir}/lib/MobArena.jar
diff --git a/src/main/java/com/denizenscript/depenizen/bukkit/bridges/MobArenaBridge.java b/src/main/java/com/denizenscript/depenizen/bukkit/bridges/MobArenaBridge.java
index e10f7676a..7f823c07b 100644
--- a/src/main/java/com/denizenscript/depenizen/bukkit/bridges/MobArenaBridge.java
+++ b/src/main/java/com/denizenscript/depenizen/bukkit/bridges/MobArenaBridge.java
@@ -1,24 +1,20 @@
package com.denizenscript.depenizen.bukkit.bridges;
import com.denizenscript.denizencore.DenizenCore;
-import com.denizenscript.depenizen.bukkit.events.mobarena.MobArenaStartsScriptEvent;
-import com.denizenscript.depenizen.bukkit.Bridge;
-import com.garbagemule.MobArena.MobArena;
-import com.garbagemule.MobArena.framework.Arena;
-import com.denizenscript.depenizen.bukkit.commands.mobarena.MobArenaCommand;
-import com.denizenscript.depenizen.bukkit.events.mobarena.MobArenaEndsScriptEvent;
-import com.denizenscript.depenizen.bukkit.properties.mobarena.MobArenaPlayerProperties;
-import com.denizenscript.depenizen.bukkit.objects.mobarena.MobArenaArenaTag;
-import com.denizenscript.denizen.objects.PlayerTag;
import com.denizenscript.denizencore.events.ScriptEvent;
import com.denizenscript.denizencore.objects.ObjectFetcher;
-import com.denizenscript.denizencore.tags.TagRunnable;
-import com.denizenscript.denizencore.objects.properties.PropertyParser;
-import com.denizenscript.denizencore.tags.ReplaceableTagEvent;
import com.denizenscript.denizencore.objects.core.ListTag;
import com.denizenscript.denizencore.tags.Attribute;
-import com.denizenscript.depenizen.bukkit.events.mobarena.MobArenaWaveChangesScriptEvent;
+import com.denizenscript.denizencore.tags.ReplaceableTagEvent;
import com.denizenscript.denizencore.tags.TagManager;
+import com.denizenscript.denizencore.tags.TagRunnable;
+import com.denizenscript.depenizen.bukkit.Bridge;
+import com.denizenscript.depenizen.bukkit.commands.mobarena.*;
+import com.denizenscript.depenizen.bukkit.events.mobarena.*;
+import com.denizenscript.depenizen.bukkit.objects.mobarena.*;
+import com.denizenscript.depenizen.bukkit.properties.mobarena.*;
+import com.garbagemule.MobArena.MobArena;
+import com.garbagemule.MobArena.framework.Arena;
public class MobArenaBridge extends Bridge {
@@ -38,7 +34,7 @@ public void run(ReplaceableTagEvent event) {
ScriptEvent.registerScriptEvent(MobArenaStartsScriptEvent.class);
ScriptEvent.registerScriptEvent(MobArenaEndsScriptEvent.class);
ScriptEvent.registerScriptEvent(MobArenaWaveChangesScriptEvent.class);
- PropertyParser.registerProperty(MobArenaPlayerProperties.class, PlayerTag.class);
+ MobArenaPlayerExtensions.register();
}
public void tagEvent(ReplaceableTagEvent event) {
diff --git a/src/main/java/com/denizenscript/depenizen/bukkit/properties/mobarena/MobArenaPlayerExtensions.java b/src/main/java/com/denizenscript/depenizen/bukkit/properties/mobarena/MobArenaPlayerExtensions.java
new file mode 100644
index 000000000..245ff46d0
--- /dev/null
+++ b/src/main/java/com/denizenscript/depenizen/bukkit/properties/mobarena/MobArenaPlayerExtensions.java
@@ -0,0 +1,225 @@
+package com.denizenscript.depenizen.bukkit.properties.mobarena;
+
+import com.denizenscript.denizen.objects.PlayerTag;
+import com.denizenscript.denizencore.objects.ObjectTag;
+import com.denizenscript.denizencore.objects.core.ElementTag;
+import com.denizenscript.denizencore.objects.core.MapTag;
+import com.denizenscript.denizencore.utilities.debugging.SlowWarning;
+import com.denizenscript.depenizen.bukkit.bridges.MobArenaBridge;
+import com.denizenscript.depenizen.bukkit.objects.mobarena.MobArenaArenaTag;
+import com.garbagemule.MobArena.ArenaPlayer;
+import com.garbagemule.MobArena.ArenaPlayerStatistics;
+import com.garbagemule.MobArena.MobArena;
+import com.garbagemule.MobArena.framework.Arena;
+
+public class MobArenaPlayerExtensions {
+
+ public static SlowWarning mobArenaPlayerTags = new SlowWarning("mobArenaPlayerTags", "Tags in the 'PlayerTag.mobarena.x' format have been deprecated: check the meta docs for more information.");
+
+ public static Arena getCurrentArena(PlayerTag player) {
+ return ((MobArena) MobArenaBridge.instance.plugin).getArenaMaster().getArenaWithPlayer(player.getPlayerEntity());
+ }
+
+ public static ArenaPlayer getArenaPlayer(PlayerTag player, Arena arena) {
+ return arena.getArenaPlayer(player.getPlayerEntity());
+ }
+
+ public static void register() {
+
+ // <--[tag]
+ // @attribute
+ // @returns ElementTag(Boolean)
+ // @plugin Depenizen, MobArena
+ // @description
+ // Returns whether the player is in a mobarena.
+ // -->
+ PlayerTag.tagProcessor.registerTag(ElementTag.class, "in_mobarena", (attribute, player) -> {
+ return new ElementTag(getCurrentArena(player) != null);
+ });
+
+ // <--[tag]
+ // @attribute
+ // @returns MobArenaArenaTag
+ // @plugin Depenizen, MobArena
+ // @description
+ // Returns the arena the player is in.
+ // NOTE: Requires the player to be in an arena.
+ // -->
+ PlayerTag.tagProcessor.registerTag(MobArenaArenaTag.class, "current_mobarena", (attribute, player) -> {
+ Arena arena = getCurrentArena(player);
+ return arena != null ? new MobArenaArenaTag(arena) : null;
+ });
+
+ // <--[tag]
+ // @attribute
+ // @returns ElementTag
+ // @plugin Depenizen, MobArena
+ // @description
+ // Returns the name of the class the player is using.
+ // NOTE: Requires the player to be in an arena.
+ // -->
+ PlayerTag.tagProcessor.registerTag(ElementTag.class, "mobarena_class", (attribute, player) -> {
+ Arena arena = getCurrentArena(player);
+ return arena != null ? new ElementTag(getArenaPlayer(player, arena).getArenaClass().getConfigName(), true) : null;
+ });
+
+ // <--[tag]
+ // @attribute
+ // @returns MapTag
+ // @plugin Depenizen, MobArena
+ // @description
+ // Returns the stats of a player in the specified arena.
+ // Includes keys 'KILLS', 'DAMAGE_DONE', 'DAMAGE_TAKEN', 'LAST_WAVE', 'TIMES_SWUNG', and 'TIMES_HIT' with ElementTag(Number) values.
+ // -->
+ PlayerTag.tagProcessor.registerTag(MapTag.class, "mobarena_stats", (attribute, player) -> {
+ if (getArena(player) == null) {
+ attribute.echoError("This player is not in an arena.");
+ return null;
+ }
+ ArenaPlayerStatistics stats = getArenaPlayer(player).getStats();
+ MapTag values = new MapTag();
+ values.putObject("kills", new ElementTag(stats.getInt("kills")));
+ values.putObject("damage_done", new ElementTag(stats.getInt("dmgDone")));
+ values.putObject("damage_taken", new ElementTag(stats.getInt("dmgTaken")));
+ values.putObject("last_wave", new ElementTag(stats.getInt("lastWave")));
+ values.putObject("times_swung", new ElementTag(stats.getInt("swings")));
+ values.putObject("times_hit", new ElementTag(stats.getInt("hits")));
+ return values;
+ });
+
+ PlayerTag.tagProcessor.registerTag(ObjectTag.class, "mobarena", (attribute, player) -> {
+ mobArenaPlayerTags.warn(attribute.context);
+
+ // <--[tag]
+ // @attribute
+ // @returns ElementTag(Boolean)
+ // @plugin Depenizen, MobArena
+ // @deprecated use 'PlayerTag.in_mobarena'
+ // @description
+ // Deprecated in favor of <@link tag PlayerTag.in_mobarena>.
+ // -->
+ if (attribute.startsWith("in_arena", 2)) {
+ attribute.fulfill(1);
+ return new ElementTag(getCurrentArena(player) != null);
+ }
+ Arena arena = getCurrentArena(player);
+ if (arena != null) {
+
+ // <--[tag]
+ // @attribute
+ // @returns MobArenaArenaTag
+ // @plugin Depenizen, MobArena
+ // @deprecated use 'PlayerTag.current_mobarena'
+ // @description
+ // Deprecated in favor of <@link tag PlayerTag.current_mobarena>.
+ // -->
+ if (attribute.startsWith("current_arena", 2)) {
+ attribute.fulfill(1);
+ return new MobArenaArenaTag(arena);
+ }
+
+ // <--[tag]
+ // @attribute
+ // @returns ElementTag
+ // @plugin Depenizen, MobArena
+ // @deprecated use 'PlayerTag.mobarena_class'
+ // @description
+ // Deprecated in favor of <@link tag PlayerTag.mobarena_class>.
+ // -->
+ else if (attribute.startsWith("class", 2)) {
+ attribute.fulfill(1);
+ return new ElementTag(getArenaPlayer(player, arena).getArenaClass().getConfigName(), true);
+ }
+ }
+
+ if (attribute.startsWith("stats", 2)) {
+ attribute.fulfill(1);
+ ArenaPlayerStatistics stats = getArenaPlayer(player, arena).getStats();
+ if (stats == null) {
+ return null;
+ }
+
+ // <--[tag]
+ // @attribute ].kills>
+ // @returns ElementTag(Number)
+ // @plugin Depenizen, MobArena
+ // @deprecated use 'PlayerTag.mobarena_stats.get[kills]'
+ // @description
+ // Deprecated in favor of <@link tag PlayerTag.mobarena_stats> with the 'KILLS' key.
+ // -->
+ if (attribute.startsWith("kills", 2)) {
+ attribute.fulfill(1);
+ return new ElementTag(stats.getInt("kills"));
+ }
+
+ // <--[tag]
+ // @attribute ].damage_done>
+ // @returns ElementTag(Number)
+ // @plugin Depenizen, MobArena
+ // @deprecated use 'PlayerTag.mobarena_stats.get[damage_done]'
+ // @description
+ // Deprecated in favor of <@link tag PlayerTag.mobarena_stats> with the 'DAMAGE_DONE' key.
+ // @description
+ // Returns the amount of damage the player has dealt in the arena.
+ // -->
+ else if (attribute.startsWith("damage_done", 2)) {
+ attribute.fulfill(1);
+ return new ElementTag(stats.getInt("dmgDone"));
+ }
+
+ // <--[tag]
+ // @attribute ].damage_taken>
+ // @returns ElementTag(Number)
+ // @plugin Depenizen, MobArena
+ // @deprecated use 'PlayerTag.mobarena_stats.get[damage_taken]'
+ // @description
+ // Deprecated in favor of <@link tag PlayerTag.mobarena_stats> with the 'DAMAGE_TAKEN' key.
+ // -->
+ else if (attribute.startsWith("damage_taken", 2)) {
+ attribute.fulfill(1);
+ return new ElementTag(stats.getInt("dmgTaken"));
+ }
+
+ // <--[tag]
+ // @attribute ].last_wave>
+ // @returns ElementTag(Number)
+ // @plugin Depenizen, MobArena
+ // @deprecated use 'PlayerTag.mobarena_stats.get[last_wave]'
+ // @description
+ // Deprecated in favor of <@link tag PlayerTag.mobarena_stats> with the 'LAST_WAVE' key.
+ // -->
+ else if (attribute.startsWith("last_wave", 2)) {
+ attribute.fulfill(1);
+ return new ElementTag(stats.getInt("lastWave"));
+ }
+
+ // <--[tag]
+ // @attribute ].times_swung>
+ // @returns ElementTag(Number)
+ // @plugin Depenizen, MobArena
+ // @deprecated use 'PlayerTag.mobarena_stats.get[times_swung]'
+ // @description
+ // Deprecated in favor of <@link tag PlayerTag.mobarena_stats> with the 'TIMES_SWUNG' key.
+ // -->
+ else if (attribute.startsWith("times_swung", 2)) {
+ attribute.fulfill(1);
+ return new ElementTag(stats.getInt("swings"));
+ }
+
+ // <--[tag]
+ // @attribute ].times_hit>
+ // @returns ElementTag(Number)
+ // @plugin Depenizen, MobArena
+ // @deprecated use 'PlayerTag.mobarena_stats.get[times_hit]'
+ // @description
+ // Deprecated in favor of <@link tag PlayerTag.mobarena_stats> with the 'TIMES_HIT' key.
+ // -->
+ else if (attribute.startsWith("times_hit", 2)) {
+ attribute.fulfill(1);
+ return new ElementTag(stats.getInt("hits"));
+ }
+ }
+ return null;
+ });
+ }
+}
diff --git a/src/main/java/com/denizenscript/depenizen/bukkit/properties/mobarena/MobArenaPlayerProperties.java b/src/main/java/com/denizenscript/depenizen/bukkit/properties/mobarena/MobArenaPlayerProperties.java
deleted file mode 100644
index e34234966..000000000
--- a/src/main/java/com/denizenscript/depenizen/bukkit/properties/mobarena/MobArenaPlayerProperties.java
+++ /dev/null
@@ -1,199 +0,0 @@
-package com.denizenscript.depenizen.bukkit.properties.mobarena;
-
-import com.denizenscript.depenizen.bukkit.bridges.MobArenaBridge;
-import com.garbagemule.MobArena.ArenaPlayer;
-import com.garbagemule.MobArena.ArenaPlayerStatistics;
-import com.garbagemule.MobArena.MobArena;
-import com.garbagemule.MobArena.framework.Arena;
-import com.denizenscript.denizencore.objects.properties.Property;
-import com.denizenscript.denizencore.objects.Mechanism;
-import com.denizenscript.depenizen.bukkit.objects.mobarena.MobArenaArenaTag;
-import com.denizenscript.denizen.objects.PlayerTag;
-import com.denizenscript.denizencore.objects.core.ElementTag;
-import com.denizenscript.denizencore.objects.ObjectTag;
-import com.denizenscript.denizencore.tags.Attribute;
-
-public class MobArenaPlayerProperties implements Property {
-
- @Override
- public String getPropertyString() {
- return null;
- }
-
- @Override
- public String getPropertyId() {
- return "MobArenaPlayer";
- }
-
- @Override
- public void adjust(Mechanism mechanism) {
- // None
- }
-
- public static boolean describes(ObjectTag object) {
- return object instanceof PlayerTag;
- }
-
- public static MobArenaPlayerProperties getFrom(ObjectTag object) {
- if (!describes(object)) {
- return null;
- }
- else {
- return new MobArenaPlayerProperties((PlayerTag) object);
- }
- }
-
- public static final String[] handledTags = new String[] {
- "mobarena"
- };
-
- public static final String[] handledMechs = new String[] {
- }; // None
-
- public MobArenaPlayerProperties(PlayerTag player) {
- this.player = player;
- this.arena = ((MobArena) MobArenaBridge.instance.plugin).getArenaMaster().getArenaWithPlayer(player.getPlayerEntity());
- }
-
- PlayerTag player;
- Arena arena;
-
- @Override
- public ObjectTag getObjectAttribute(Attribute attribute) {
- if (attribute == null) {
- return null;
- }
-
- if (attribute.startsWith("mobarena")) {
-
- attribute = attribute.fulfill(1);
-
- // <--[tag]
- // @attribute
- // @returns ElementTag(Boolean)
- // @plugin Depenizen, MobArena
- // @description
- // Returns whether the player is in an arena.
- // -->
- if (attribute.startsWith("in_arena")) {
- return new ElementTag(arena != null)
- .getObjectAttribute(attribute.fulfill(1));
- }
-
- else if (arena != null) {
-
- // <--[tag]
- // @attribute
- // @returns MobArenaArenaTag
- // @plugin Depenizen, MobArena
- // @description
- // Returns the arena the player is in.
- // NOTE: requires the player to be in an arena.
- // -->
- if (attribute.startsWith("current_arena")) {
- return new MobArenaArenaTag(arena).getObjectAttribute(attribute.fulfill(1));
- }
-
- // <--[tag]
- // @attribute
- // @returns ElementTag
- // @plugin Depenizen, MobArena
- // @description
- // Returns the name of the class the player is using.
- // NOTE: requires the player to be in an arena.
- // -->
- else if (attribute.startsWith("class")) {
- return new ElementTag(new ArenaPlayer(player.getPlayerEntity(), arena,
- ((MobArena) MobArenaBridge.instance.plugin)).getStats().getClassName())
- .getObjectAttribute(attribute.fulfill(1));
- }
-
- return null;
- }
-
- else if (attribute.startsWith("stats") && attribute.hasParam()) {
- MobArenaArenaTag a = attribute.paramAsType(MobArenaArenaTag.class);
- if (a == null) {
- return null;
- }
- ArenaPlayerStatistics stats = new ArenaPlayer(player.getPlayerEntity(),
- a.getArena(), ((MobArena) MobArenaBridge.instance.plugin)).getStats();
-
- attribute = attribute.fulfill(1);
- if (stats == null) {
- return null;
- }
-
- // <--[tag]
- // @attribute ].kills>
- // @returns ElementTag(Number)
- // @plugin Depenizen, MobArena
- // @description
- // Returns the number of kills the player has in the arena.
- // -->
- if (attribute.startsWith("kills")) {
- return new ElementTag(stats.getInt("kills")).getObjectAttribute(attribute.fulfill(1));
- }
-
- // <--[tag]
- // @attribute ].damage_done>
- // @returns ElementTag(Number)
- // @plugin Depenizen, MobArena
- // @description
- // Returns the amount of damage the player has dealt in the arena.
- // -->
- else if (attribute.startsWith("damage_done")) {
- return new ElementTag(stats.getInt("dmgDone")).getObjectAttribute(attribute.fulfill(1));
- }
-
- // <--[tag]
- // @attribute ].damage_taken>
- // @returns ElementTag(Number)
- // @plugin Depenizen, MobArena
- // @description
- // Returns the amount of damage the player has taken in the arena.
- // -->
- else if (attribute.startsWith("damage_taken")) {
- return new ElementTag(stats.getInt("dmgTaken")).getObjectAttribute(attribute.fulfill(1));
- }
-
- // <--[tag]
- // @attribute ].last_wave>
- // @returns ElementTag(Number)
- // @plugin Depenizen, MobArena
- // @description
- // Returns the wave the player reached in their last match in the arena.
- // -->
- else if (attribute.startsWith("last_wave")) {
- return new ElementTag(stats.getInt("lastWave")).getObjectAttribute(attribute.fulfill(1));
- }
-
- // <--[tag]
- // @attribute ].times_swung>
- // @returns ElementTag(Number)
- // @plugin Depenizen, MobArena
- // @description
- // Returns the number of times the player has swung their weapon in the arena.
- // -->
- else if (attribute.startsWith("times_swung")) {
- return new ElementTag(stats.getInt("swings")).getObjectAttribute(attribute.fulfill(1));
- }
-
- // <--[tag]
- // @attribute ].times_hit>
- // @returns ElementTag(Number)
- // @plugin Depenizen, MobArena
- // @description
- // Returns the number of times the player has hit an enemy in the arena.
- // -->
- else if (attribute.startsWith("times_hit")) {
- return new ElementTag(stats.getInt("hits")).getObjectAttribute(attribute.fulfill(1));
- }
-
- return null;
- }
- }
-
- return null;
- }
-}