diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/PropertyRegistry.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/PropertyRegistry.java index b4339b1773..26113da4b6 100644 --- a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/PropertyRegistry.java +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/PropertyRegistry.java @@ -304,6 +304,7 @@ public static void registerMainProperties() { PropertyParser.registerProperty(MaterialOminous.class, MaterialTag.class); } PropertyParser.registerProperty(MaterialPersistent.class, MaterialTag.class); + PropertyParser.registerProperty(MaterialPowerable.class, MaterialTag.class); PropertyParser.registerProperty(MaterialPower.class, MaterialTag.class); PropertyParser.registerProperty(MaterialShape.class, MaterialTag.class); PropertyParser.registerProperty(MaterialSides.class, MaterialTag.class); diff --git a/plugin/src/main/java/com/denizenscript/denizen/objects/properties/material/MaterialPowerable.java b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/material/MaterialPowerable.java new file mode 100644 index 0000000000..bc64462a94 --- /dev/null +++ b/plugin/src/main/java/com/denizenscript/denizen/objects/properties/material/MaterialPowerable.java @@ -0,0 +1,45 @@ +package com.denizenscript.denizen.objects.properties.material; + +import com.denizenscript.denizen.objects.MaterialTag; +import com.denizenscript.denizencore.objects.Mechanism; +import com.denizenscript.denizencore.objects.core.ElementTag; +import org.bukkit.block.data.Powerable; + +public class MaterialPowerable extends MaterialProperty { + + // <--[property] + // @object MaterialTag + // @name powered + // @input ElementTag(Boolean) + // @description + // Controls whether the material is redstone powered (receiving a redstone signal of above 0). + // --> + + public static boolean describes(MaterialTag material) { + return material.getModernData() instanceof Powerable; + } + + @Override + public ElementTag getPropertyValue() { + if (getBlockData() instanceof Powerable powerable) { + return new ElementTag(powerable.isPowered()); + } + return null; + } + + @Override + public String getPropertyId() { + return "powered"; + } + + @Override + public void setPropertyValue(ElementTag elementTag, Mechanism mechanism) { + if (getBlockData() instanceof Powerable powerable && mechanism.requireBoolean()) { + powerable.setPowered(elementTag.asBoolean()); + } + } + + public static void register() { + autoRegister("powered", MaterialPowerable.class, ElementTag.class, false); + } +}