diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/material/MaterialDirectional.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/material/MaterialDirectional.java index 4a0eaee433..c667176a86 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/material/MaterialDirectional.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/material/MaterialDirectional.java @@ -1,5 +1,7 @@ package com.denizenscript.denizen.objects.properties.material; +import com.denizenscript.denizen.nms.NMSHandler; +import com.denizenscript.denizen.nms.NMSVersion; import com.denizenscript.denizen.objects.MaterialTag; import com.denizenscript.denizen.utilities.debugging.Debug; import com.denizenscript.denizencore.objects.core.ElementTag; @@ -11,6 +13,7 @@ import org.bukkit.Axis; import org.bukkit.block.BlockFace; import org.bukkit.block.data.*; +import org.bukkit.block.data.type.PointedDripstone; import org.bukkit.util.Vector; public class MaterialDirectional implements Property { @@ -24,7 +27,8 @@ public static boolean describes(ObjectTag material) { return false; } BlockData data = mat.getModernData(); - if (!(data instanceof Directional || data instanceof Orientable || data instanceof Rotatable || data instanceof Rail)) { + if (!(data instanceof Directional || data instanceof Orientable || data instanceof Rotatable || data instanceof Rail + || (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_17) && data instanceof PointedDripstone))) { return false; } return true; @@ -77,7 +81,12 @@ else if (material.isDirectional()) { toReturn.add(face.name()); } } - else { + else if (material.isDripstone()) { + for (BlockFace face : material.getDripstone().getVerticalDirections()) { + toReturn.add(face.name()); + } + } + else { // applies to rotatable return null; } return toReturn; @@ -136,9 +145,13 @@ else if (isRail()) { } return null; // Unreachable. } - else { + else if (isDirectional()) { return getDirectional().getFacing().getDirection(); } + else if (isDripstone()) { + return getDripstone().getVerticalDirection().getDirection(); + } + return null; // Unreachable. } public String getDirectionName() { @@ -151,9 +164,13 @@ else if (isRotatable()) { else if (isRail()) { return getRail().getShape().name(); } - else { + else if (isDirectional()) { return getDirectional().getFacing().name(); } + else if (isDripstone()) { + return getDripstone().getVerticalDirection().name(); + } + return null; // Unreachable } public boolean isOrientable() { @@ -168,6 +185,10 @@ public boolean isDirectional() { return material.getModernData() instanceof Directional; } + public boolean isDripstone() { + return NMSHandler.getVersion().isAtLeast(NMSVersion.v1_17) && material.getModernData() instanceof PointedDripstone; + } + public boolean isRail() { return material.getModernData() instanceof Rail; } @@ -184,6 +205,10 @@ public Directional getDirectional() { return (Directional) material.getModernData(); } + public PointedDripstone getDripstone() { + return (PointedDripstone) material.getModernData(); + } + public Rail getRail() { return (Rail) material.getModernData(); } @@ -229,6 +254,9 @@ else if (isRail()) { else if (isDirectional()) { getDirectional().setFacing(face); } + else if (isDripstone()) { + getDripstone().setVerticalDirection(face); + } } @Override