diff --git a/plugin/src/main/java/com/denizenscript/denizen/events/BukkitScriptEvent.java b/plugin/src/main/java/com/denizenscript/denizen/events/BukkitScriptEvent.java index 6d4101fe3b..ec25e1b28d 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/events/BukkitScriptEvent.java +++ b/plugin/src/main/java/com/denizenscript/denizen/events/BukkitScriptEvent.java @@ -768,7 +768,7 @@ public boolean tryMaterial(MaterialTag mat, String comparedto) { } } MatchHelper matcher = createMatcher(comparedto); - if (matcher.doesMatch(mat.realName())) { + if (matcher.doesMatch(mat.name())) { return true; } else if (matcher.doesMatch(mat.identifyNoIdentifier())) { diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/ItemTag.java b/plugin/src/main/java/com/denizenscript/denizen/objects/ItemTag.java index 3023cf2a9f..5286ee4d01 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/ItemTag.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/ItemTag.java @@ -750,7 +750,7 @@ else if (container != null) { } public String formattedName() { - String id = CoreUtilities.toLowerCase(getMaterial().realName()).replace('_', ' '); + String id = CoreUtilities.toLowerCase(getMaterial().name()).replace('_', ' '); if (id.equals("air")) { return "nothing"; } diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/MaterialTag.java b/plugin/src/main/java/com/denizenscript/denizen/objects/MaterialTag.java index e68e12cacb..9d630aa195 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/MaterialTag.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/MaterialTag.java @@ -209,10 +209,6 @@ public String toString() { return identify(); } - public String realName() { - return CoreUtilities.toLowerCase(material.name()); - } - @Override public ObjectTag setPrefix(String prefix) { if (prefix != null) { diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/WorldTag.java b/plugin/src/main/java/com/denizenscript/denizen/objects/WorldTag.java index 20e859d29f..b30e982061 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/WorldTag.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/WorldTag.java @@ -7,6 +7,7 @@ import com.denizenscript.denizencore.objects.core.DurationTag; import com.denizenscript.denizencore.objects.core.ElementTag; import com.denizenscript.denizencore.objects.core.ListTag; +import com.denizenscript.denizencore.objects.core.MapTag; import com.denizenscript.denizencore.tags.Attribute; import com.denizenscript.denizencore.tags.ObjectTagProcessor; import com.denizenscript.denizencore.tags.TagContext; @@ -744,10 +745,31 @@ else if (time >= 12500) { // Note that the name is case-sensitive... so "doFireTick" is correct, but "dofiretick" is not. // --> registerTag("gamerule", (attribute, object) -> { + if (!attribute.hasContext(1)) { + attribute.echoError("The tag 'worldtag.gamerule[...]' must have an input value."); + return null; + } GameRule rule = GameRule.getByName(attribute.getContext(1)); Object result = object.getWorld().getGameRuleValue(rule); return new ElementTag(result == null ? "null" : result.toString()); }); + + // <--[tag] + // @attribute + // @returns MapTag + // @description + // Returns a map of all the current values of all gamerules in the world. + // --> + registerTag("gamerule_map", (attribute, object) -> { + MapTag map = new MapTag(); + for (GameRule rule : GameRule.values()) { + Object result = object.getWorld().getGameRuleValue(rule); + if (result != null) { + map.putObject(rule.getName(), new ElementTag(result.toString())); + } + } + return map; + }); } public static ObjectTagProcessor tagProcessor = new ObjectTagProcessor<>(); diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/material/MaterialAge.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/material/MaterialAge.java index 6d5c41ea19..23e17cbb45 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/material/MaterialAge.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/material/MaterialAge.java @@ -139,7 +139,7 @@ public void adjust(Mechanism mechanism) { if ((mechanism.matches("age") || mechanism.matches("plant_growth")) && mechanism.requireInteger()) { int age = mechanism.getValue().asInt(); if (age < 0 || age > getMax()) { - mechanism.echoError("Age value '" + age + "' is not valid. Must be between 0 and " + getMax() + " for material '" + material.realName() + "'."); + mechanism.echoError("Age value '" + age + "' is not valid. Must be between 0 and " + getMax() + " for material '" + material.name() + "'."); return; } if (isTurtleEgg()) { diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/material/MaterialLevel.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/material/MaterialLevel.java index b1fa6f84f5..8ce722422f 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/material/MaterialLevel.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/material/MaterialLevel.java @@ -193,7 +193,7 @@ public void adjust(Mechanism mechanism) { if (mechanism.matches("level") && mechanism.requireInteger()) { int level = mechanism.getValue().asInt(); if (level < getMin() || level > getMax()) { - mechanism.echoError("Level value '" + level + "' is not valid. Must be between " + getMin() + " and " + getMax() + " for material '" + material.realName() + "'."); + mechanism.echoError("Level value '" + level + "' is not valid. Must be between " + getMin() + " and " + getMax() + " for material '" + material.name() + "'."); return; } setCurrent(level); diff --git a/plugin/src/main/java/com/denizenscript/denizen/tags/core/ServerTagBase.java b/plugin/src/main/java/com/denizenscript/denizen/tags/core/ServerTagBase.java index f90001082a..28c3a4e007 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/tags/core/ServerTagBase.java +++ b/plugin/src/main/java/com/denizenscript/denizen/tags/core/ServerTagBase.java @@ -491,6 +491,21 @@ else if (recipe instanceof CookingRecipe) { return; } + // <--[tag] + // @attribute + // @Plugin Citizens + // @returns ListTag + // @description + // Returns a list of all available gamerules on the server. + // --> + if (attribute.startsWith("gamerules")) { + ListTag allGameRules = new ListTag(); + for (GameRule rule : GameRule.values()) { + allGameRules.add(rule.getName()); + } + event.setReplacedObject(allGameRules.getObjectAttribute(attribute.fulfill(1))); + } + // <--[tag] // @attribute // @Plugin Citizens