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; - } -}