-
-
Notifications
You must be signed in to change notification settings - Fork 104
/
DirectionalBlocksHelper.java
80 lines (71 loc) · 2.57 KB
/
DirectionalBlocksHelper.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
package com.denizenscript.denizen.utilities.blocks;
import com.denizenscript.denizen.utilities.debugging.Debug;
import com.denizenscript.denizen.utilities.Utilities;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.data.Directional;
import org.bukkit.block.data.Rotatable;
import org.bukkit.block.data.type.Bed;
import org.bukkit.block.data.type.Chest;
import org.bukkit.util.Vector;
public class DirectionalBlocksHelper {
public static boolean isTopHalf(Block b) {
ModernBlockData mbd = new ModernBlockData(b);
if (mbd.data instanceof Bed) {
return ((Bed) mbd.data).getPart() == Bed.Part.HEAD;
}
return false;
}
public static boolean isLeftHalf(Block b) {
ModernBlockData mbd = new ModernBlockData(b);
if (mbd.data instanceof Chest) {
return ((Chest) mbd.data).getType() == Chest.Type.LEFT;
}
return false;
}
public static boolean isRightHalf(Block b) {
ModernBlockData mbd = new ModernBlockData(b);
if (mbd.data instanceof Chest) {
return ((Chest) mbd.data).getType() == Chest.Type.RIGHT;
}
return false;
}
public static BlockFace getFace(Block b) {
ModernBlockData mbd = new ModernBlockData(b);
if (mbd.data instanceof Directional) {
return ((Directional) mbd.data).getFacing();
}
else if (mbd.data instanceof Rotatable) {
return ((Rotatable) mbd.data).getRotation();
}
return null;
}
public static Vector getFacing(Block b) {
BlockFace face = getFace(b);
if (face != null) {
return face.getDirection();
}
return null;
}
public static void setFace(Block b, BlockFace face) {
ModernBlockData mbd = new ModernBlockData(b);
if (mbd.data instanceof Directional) {
Directional dir = (Directional) mbd.data;
dir.setFacing(face);
b.setBlockData(dir);
}
else if (mbd.data instanceof Rotatable) {
Rotatable dir = (Rotatable) mbd.data;
dir.setRotation(face);
b.setBlockData(dir);
}
}
public static void setFacing(Block b, Vector faceVec) {
BlockFace newFace = Utilities.faceFor(faceVec);
if (newFace == null) {
Debug.echoError("Direction '" + faceVec + "' does not appear to be a valid block face.");
return;
}
setFace(b, newFace);
}
}