diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java b/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java index 75954657e0..1febfc3c4f 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/LocationTag.java @@ -2087,7 +2087,7 @@ public int compare(EntityTag ent1, EntityTag ent2) { // In the format: x.x:y.y:z.z:world // For example: 1.0:2.0:3.0:world_nether // --> - if (attribute.startsWith("citzens", 2)) { + if (attribute.startsWith("citizens", 2)) { attribute.fulfill(1); return new ElementTag(object.getX() + ":" + object.getY() + ":" + object.getZ() + ":" + object.getWorldName()); } 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 873c7694d7..0a951df7a2 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 @@ -12,6 +12,7 @@ import org.bukkit.block.data.Levelled; import org.bukkit.block.data.type.Cake; import org.bukkit.block.data.type.Beehive; +import org.bukkit.block.data.type.Snow; public class MaterialLevel implements Property { @@ -20,6 +21,7 @@ public static boolean describes(ObjectTag material) { && ((MaterialTag) material).hasModernData() && (((MaterialTag) material).getModernData().data instanceof Levelled || ((MaterialTag) material).getModernData().data instanceof Cake + || ((MaterialTag) material).getModernData().data instanceof Snow || (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_15) && ((MaterialTag) material).getModernData().data instanceof Beehive)); } @@ -36,7 +38,6 @@ public static MaterialLevel getFrom(ObjectTag _material) { "level" }; - private MaterialLevel(MaterialTag _material) { material = _material; } @@ -50,39 +51,59 @@ public static void registerTags() { // @returns ElementTag(Number) // @group properties // @description - // Returns the maximum level for a levelable material (like water, lava, and Cauldrons), a cake, or a beehive. + // Returns the maximum level for a Levelled material (like water, lava, and cauldrons), cake, beehives, and snow. // --> PropertyParser.registerTag("maximum_level", (attribute, material) -> { return new ElementTag(material.getMax()); }); + // <--[tag] + // @attribute + // @returns ElementTag(Number) + // @group properties + // @description + // Returns the minimum level for a Levelled material (like water, lava, and cauldrons), cake, beehives, and snow. + // This will return 0 for all valid materials aside from snow. + // --> + PropertyParser.registerTag("minimum_level", (attribute, material) -> { + return new ElementTag(material.getMin()); + }); + // <--[tag] // @attribute // @returns ElementTag(Number) // @mechanism MaterialTag.level // @group properties // @description - // Returns the current level for a levelable material (like water, lava, and Cauldrons), a cake, or a beehive. + // Returns the current level for a Levelled material (like water, lava, and cauldrons), cake, beehives, and snow. // --> PropertyParser.registerTag("level", (attribute, material) -> { return new ElementTag(material.getCurrent()); }); } + + public Levelled getLevelled() { + return (Levelled) material.getModernData().data; + } public boolean isCake() { return material.getModernData().data instanceof Cake; } - public boolean isHive() { - return (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_15) && material.getModernData().data instanceof Beehive); - } + public Cake getCake() { + return (Cake) material.getModernData().data; + } - public Levelled getLevelled() { - return (Levelled) material.getModernData().data; + public boolean isSnow() { + return material.getModernData().data instanceof Snow; } - public Cake getCake() { - return (Cake) material.getModernData().data; + public Snow getSnow() { + return (Snow) material.getModernData().data; + } + + public boolean isHive() { + return (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_15) && material.getModernData().data instanceof Beehive); } public int getHoneyLevel() { @@ -96,11 +117,14 @@ public int getMaxHoneyLevel() { public void setHoneyLevel(int level) { ((Beehive) material.getModernData().data).setHoneyLevel(level); } - + public int getCurrent() { if (isCake()) { return getCake().getBites(); } + else if (isSnow()) { + return getSnow().getLayers(); + } else if (isHive()) { return getHoneyLevel(); } @@ -111,17 +135,31 @@ public int getMax() { if (isCake()) { return getCake().getMaximumBites(); } + else if (isSnow()) { + return getSnow().getMaximumLayers(); + } else if (isHive()) { return getMaxHoneyLevel(); } return getLevelled().getMaximumLevel(); } + public int getMin() { + if (isSnow()) { + return getSnow().getMinimumLayers(); + } + return 0; + } + public void setCurrent(int level) { if (isCake()) { getCake().setBites(level); return; } + else if (isSnow()) { + getSnow().setLayers(level); + return; + } else if (isHive()) { setHoneyLevel(level); return; @@ -147,15 +185,16 @@ public void adjust(Mechanism mechanism) { // @name level // @input ElementTag(Number) // @description - // Sets the current level for a levelable material (like water, lava, and Cauldrons), a cake, or a beehive. + // Sets the current level for a Levelled material (like water, lava, and cauldrons), cake, beehives, and snow. // @tags // // + // // --> if (mechanism.matches("level") && mechanism.requireInteger()) { int level = mechanism.getValue().asInt(); - if (level < 0 || level > getMax()) { - Debug.echoError("Level value '" + level + "' is not valid. Must be between 0 and " + getMax() + " for material '" + material.realName() + "'."); + if (level < getMin() || level > getMax()) { + Debug.echoError("Level value '" + level + "' is not valid. Must be between " + getMin() + " and " + getMax() + " for material '" + material.realName() + "'."); return; } setCurrent(level);