-
-
Notifications
You must be signed in to change notification settings - Fork 103
/
MaterialBlockType.java
92 lines (83 loc) · 3.69 KB
/
MaterialBlockType.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
package com.denizenscript.denizen.objects.properties.material;
import com.denizenscript.denizen.objects.MaterialTag;
import com.denizenscript.denizencore.exceptions.Unreachable;
import com.denizenscript.denizencore.objects.Mechanism;
import com.denizenscript.denizencore.objects.core.ElementTag;
import com.denizenscript.denizencore.utilities.CoreUtilities;
import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.type.*;
public class MaterialBlockType extends MaterialProperty<ElementTag> {
// <--[property]
// @object MaterialTag
// @name type
// @input ElementTag
// @description
// Controls the current type of the block.
// For slabs, input is TOP, BOTTOM, or DOUBLE.
// For piston_heads, input is NORMAL or STICKY.
// For campfires, input is NORMAL or SIGNAL.
// For pointed dripstone, input is BASE, FRUSTUM, MIDDLE, TIP, or TIP_MERGE.
// For cave vines, input is NORMAL or BERRIES.
// For scaffolding, input is NORMAL or BOTTOM.
// -->
public static boolean describes(MaterialTag material) {
BlockData data = material.getModernData();
return data instanceof Slab || data instanceof TechnicalPiston || data instanceof Campfire
|| data instanceof Scaffolding || data instanceof PointedDripstone || data instanceof CaveVinesPlant;
}
@Override
public ElementTag getPropertyValue() {
return new ElementTag(getType());
}
@Override
public void setPropertyValue(ElementTag val, Mechanism mechanism) {
BlockData data = getBlockData();
if (data instanceof Slab slab && mechanism.requireEnum(Slab.Type.class)) {
slab.setType(val.asEnum(Slab.Type.class));
}
else if (data instanceof TechnicalPiston piston && mechanism.requireEnum(TechnicalPiston.Type.class)) {
piston.setType(val.asEnum(TechnicalPiston.Type.class));
}
else if (data instanceof Campfire campfire) {
campfire.setSignalFire(CoreUtilities.equalsIgnoreCase(mechanism.getValue().asString(), "signal"));
}
else if (data instanceof PointedDripstone dripstone && mechanism.requireEnum(PointedDripstone.Thickness.class)) {
dripstone.setThickness(val.asEnum(PointedDripstone.Thickness.class));
}
else if (data instanceof CaveVinesPlant vines) {
vines.setBerries(CoreUtilities.equalsIgnoreCase(val.asString(), "berries"));
}
else if (data instanceof Scaffolding scaffolding) {
scaffolding.setBottom(CoreUtilities.equalsIgnoreCase(val.asString(), "bottom"));
}
}
@Override
public String getPropertyId() {
return "type";
}
public static void register() {
autoRegister("type", MaterialBlockType.class, ElementTag.class, true, "slab_type");
}
public String getType() {
BlockData data = getBlockData();
if (data instanceof Slab slab) {
return slab.getType().name();
}
else if (data instanceof TechnicalPiston piston) {
return piston.getType().name();
}
else if (data instanceof Campfire campfire) {
return campfire.isSignalFire() ? "SIGNAL" : "NORMAL";
}
else if (data instanceof PointedDripstone dripstone) {
return dripstone.getThickness().name();
}
else if (data instanceof CaveVinesPlant vines) {
return vines.isBerries() ? "BERRIES" : "NORMAL";
}
else if (data instanceof Scaffolding scaffolding) {
return scaffolding.isBottom() ? "BOTTOM" : "NORMAL";
}
throw new Unreachable();
}
}