forked from ChestShop-authors/ChestShop-3
-
Notifications
You must be signed in to change notification settings - Fork 2
/
BlockUtil.java
121 lines (111 loc) · 3.86 KB
/
BlockUtil.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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package com.Acrobot.Breeze.Utils;
import java.util.EnumSet;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.Sign;
import org.bukkit.block.data.BlockData;
import org.bukkit.block.data.Directional;
import org.bukkit.block.data.type.WallSign;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
/**
* @author Acrobot
*/
public class BlockUtil {
private static EnumSet<Material> SIGNS = EnumSet.noneOf(Material.class);
private static EnumSet<Material> CONTAINERS = EnumSet.noneOf(Material.class);
static {
SIGNS.add(Material.ACACIA_SIGN);
SIGNS.add(Material.ACACIA_WALL_SIGN);
SIGNS.add(Material.BIRCH_SIGN);
SIGNS.add(Material.BIRCH_WALL_SIGN);
SIGNS.add(Material.DARK_OAK_SIGN);
SIGNS.add(Material.DARK_OAK_WALL_SIGN);
SIGNS.add(Material.JUNGLE_SIGN);
SIGNS.add(Material.JUNGLE_WALL_SIGN);
SIGNS.add(Material.OAK_SIGN);
SIGNS.add(Material.OAK_WALL_SIGN);
SIGNS.add(Material.SPRUCE_SIGN);
SIGNS.add(Material.SPRUCE_WALL_SIGN);
CONTAINERS.add(Material.CHEST);
CONTAINERS.add(Material.TRAPPED_CHEST);
CONTAINERS.add(Material.BARREL);
CONTAINERS.add(Material.SHULKER_BOX);
CONTAINERS.add(Material.BLACK_SHULKER_BOX);
CONTAINERS.add(Material.BLUE_SHULKER_BOX);
CONTAINERS.add(Material.BROWN_SHULKER_BOX);
CONTAINERS.add(Material.CYAN_SHULKER_BOX);
CONTAINERS.add(Material.GRAY_SHULKER_BOX);
CONTAINERS.add(Material.GREEN_SHULKER_BOX);
CONTAINERS.add(Material.LIGHT_BLUE_SHULKER_BOX);
CONTAINERS.add(Material.LIGHT_GRAY_SHULKER_BOX);
CONTAINERS.add(Material.LIME_SHULKER_BOX);
CONTAINERS.add(Material.MAGENTA_SHULKER_BOX);
CONTAINERS.add(Material.ORANGE_SHULKER_BOX);
CONTAINERS.add(Material.PINK_SHULKER_BOX);
CONTAINERS.add(Material.PURPLE_SHULKER_BOX);
CONTAINERS.add(Material.RED_SHULKER_BOX);
CONTAINERS.add(Material.WHITE_SHULKER_BOX);
CONTAINERS.add(Material.YELLOW_SHULKER_BOX);
}
/**
* Checks if the material is a sign
*
* @param material
* Material to check
* @return Is this material a sign?
*/
public static boolean isSign(Material material) {
return SIGNS.contains(material);
}
/**
* Checks if the block is a sign
*
* @param block
* Block to check
* @return Is this block a sign?
*/
public static boolean isSign(Block block) {
return isSign(block.getType());
}
/**
* Checks if the block is a chest
*
* @param block
* Block to check
* @return Is this block a chest?
*/
public static boolean isChest(Block block) {
return block != null && CONTAINERS.contains(block.getType());
}
/**
* Gets the block to which the sign is attached
*
* @param sign
* Sign which is attached
* @return Block to which the sign is attached
*/
public static Block getAttachedBlock(Sign sign) {
BlockData signData = sign.getBlockData();
if (signData instanceof WallSign) {
return sign.getBlock().getRelative(((Directional) signData).getFacing().getOppositeFace());
}
return sign.getBlock().getRelative(BlockFace.DOWN);
}
/**
* Opens the holder's inventory GUI
*
* @param holder
* Inventory holder
* @param player
* Player on whose screen the GUI is going to be shown
* @return Was the opening successful?
*/
public static boolean openBlockGUI(InventoryHolder holder, Player player) {
Inventory inventory = holder.getInventory();
player.openInventory(inventory);
return true;
}
}