Skip to content

Commit

Permalink
Snow level (#2100)
Browse files Browse the repository at this point in the history
* update levelable material property to include snow, as well as general cleanup for maintainability

* fix for mechanism

* meta cleanup

* Adding spaces after comments.

* fixes, as requested.

* removal of stray newline

* More fixes!

* more syntax corrections
  • Loading branch information
Ph4i1ur3 authored and mcmonkey4eva committed Dec 22, 2019
1 parent 0a142f7 commit d5405bb
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 15 deletions.
Expand Up @@ -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());
}
Expand Down
Expand Up @@ -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 {

Expand All @@ -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));
}

Expand All @@ -36,7 +38,6 @@ public static MaterialLevel getFrom(ObjectTag _material) {
"level"
};


private MaterialLevel(MaterialTag _material) {
material = _material;
}
Expand All @@ -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.<MaterialLevel>registerTag("maximum_level", (attribute, material) -> {
return new ElementTag(material.getMax());
});

// <--[tag]
// @attribute <MaterialTag.minimum_level>
// @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.<MaterialLevel>registerTag("minimum_level", (attribute, material) -> {
return new ElementTag(material.getMin());
});

// <--[tag]
// @attribute <MaterialTag.level>
// @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.<MaterialLevel>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() {
Expand All @@ -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();
}
Expand All @@ -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;
Expand All @@ -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
// <MaterialTag.level>
// <MaterialTag.maximum_level>
// <MaterialTag.minimum_level>
// -->
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);
Expand Down

0 comments on commit d5405bb

Please sign in to comment.