Skip to content

Commit

Permalink
add material hinge property
Browse files Browse the repository at this point in the history
  • Loading branch information
mcmonkey4eva committed Aug 21, 2020
1 parent f5f6611 commit 288d39b
Show file tree
Hide file tree
Showing 3 changed files with 86 additions and 0 deletions.
Expand Up @@ -149,6 +149,7 @@ public static void registermainProperties() {
PropertyParser.registerProperty(MaterialDrags.class, MaterialTag.class);
PropertyParser.registerProperty(MaterialFaces.class, MaterialTag.class);
PropertyParser.registerProperty(MaterialHalf.class, MaterialTag.class);
PropertyParser.registerProperty(MaterialHinge.class, MaterialTag.class);
PropertyParser.registerProperty(MaterialInstrument.class, MaterialTag.class);
PropertyParser.registerProperty(MaterialLocked.class, MaterialTag.class);
if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_14)) {
Expand Down
@@ -0,0 +1,84 @@
package com.denizenscript.denizen.objects.properties.material;

import com.denizenscript.denizen.objects.MaterialTag;
import com.denizenscript.denizencore.objects.Mechanism;
import com.denizenscript.denizencore.objects.ObjectTag;
import com.denizenscript.denizencore.objects.core.ElementTag;
import com.denizenscript.denizencore.objects.properties.Property;
import com.denizenscript.denizencore.objects.properties.PropertyParser;
import org.bukkit.block.data.type.Door;

public class MaterialHinge implements Property {

public static boolean describes(ObjectTag material) {
return material instanceof MaterialTag
&& ((MaterialTag) material).hasModernData()
&& ((MaterialTag) material).getModernData().data instanceof Door;
}

public static MaterialHinge getFrom(ObjectTag _material) {
if (!describes(_material)) {
return null;
}
else {
return new MaterialHinge((MaterialTag) _material);
}
}

public static final String[] handledMechs = new String[] {
"hinge"
};

private MaterialHinge(MaterialTag _material) {
material = _material;
}

MaterialTag material;

public static void registerTags() {

// <--[tag]
// @attribute <MaterialTag.hinge>
// @returns ElementTag
// @mechanism MaterialTag.hinge
// @group properties
// @description
// Returns a door's hinge side.
// Output is LEFT or RIGHT.
// -->
PropertyParser.<MaterialHinge>registerTag("hinge", (attribute, material) -> {
return new ElementTag(material.getDoor().getHinge().name());
});
}

public Door getDoor() {
return (Door) material.getModernData().data;
}

@Override
public String getPropertyString() {
return getDoor().getHinge().name();
}

@Override
public String getPropertyId() {
return "hinge";
}

@Override
public void adjust(Mechanism mechanism) {

// <--[mechanism]
// @object MaterialTag
// @name hinge
// @input ElementTag
// @description
// Sets a door's hinge side to LEFT or RIGHT.
// @tags
// <MaterialTag.hinge>
// -->
if (mechanism.matches("hinge") && mechanism.requireEnum(false, Door.Hinge.values())) {
getDoor().setHinge(Door.Hinge.valueOf(mechanism.getValue().asString().toUpperCase()));
}
}
}
Expand Up @@ -12,6 +12,7 @@
public class MaterialSwitchFace implements Property {

public static boolean describes(ObjectTag material) {
// TODO: After 1.14 is dropped, update this to use FaceAttachable (added in Spigot 1.15)
return material instanceof MaterialTag
&& ((MaterialTag) material).hasModernData()
&& ((MaterialTag) material).getModernData().data instanceof Switch;
Expand Down

0 comments on commit 288d39b

Please sign in to comment.