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
|
package io.dico.parcels2.blockvisitor
import io.dico.parcels2.util.math.Vec3i
import io.dico.parcels2.util.ext.getMaterialsWithWoodTypePrefix
import io.dico.parcels2.util.ext.getMaterialsWithWoolColorPrefix
import org.bukkit.Material
import org.bukkit.Material.*
import org.bukkit.block.BlockFace
import org.bukkit.block.data.BlockData
import org.bukkit.block.data.Directional
import java.util.EnumSet
private val attachables = EnumSet.of(
REPEATER, COMPARATOR,
*getMaterialsWithWoodTypePrefix("PRESSURE_PLATE"),
STONE_PRESSURE_PLATE, LIGHT_WEIGHTED_PRESSURE_PLATE, HEAVY_WEIGHTED_PRESSURE_PLATE,
*getMaterialsWithWoodTypePrefix("BUTTON"),
STONE_BUTTON, LEVER,
*getMaterialsWithWoodTypePrefix("DOOR"), IRON_DOOR,
ACTIVATOR_RAIL, POWERED_RAIL, DETECTOR_RAIL, RAIL,
PISTON, STICKY_PISTON,
REDSTONE_TORCH, REDSTONE_WALL_TORCH, REDSTONE_WIRE,
TRIPWIRE, TRIPWIRE_HOOK,
BROWN_MUSHROOM, RED_MUSHROOM, CACTUS, CARROT, COCOA,
WHEAT, DEAD_BUSH, CHORUS_FLOWER, DANDELION, SUGAR_CANE,
TALL_GRASS, TALL_SEAGRASS, NETHER_WART, MELON_STEM,
PUMPKIN_STEM, SUNFLOWER, POTATO, LILY_PAD, VINE,
*getMaterialsWithWoodTypePrefix("SAPLING"),
SAND, RED_SAND, DRAGON_EGG, ANVIL,
*getMaterialsWithWoolColorPrefix("CONCRETE_POWDER"),
*getMaterialsWithWoolColorPrefix("CARPET"),
CAKE, FIRE,
FLOWER_POT,
LADDER,
// NETHER_PORTAL, fuck nether portals
FLOWER_POT,
SNOW,
TORCH, WALL_TORCH,
*getMaterialsWithWoolColorPrefix("BANNER"),
*getMaterialsWithWoolColorPrefix("WALL_BANNER"),
SIGN, WALL_SIGN
)
fun isAttachable(type: Material) = attachables.contains(type)
fun getSupportingBlock(data: BlockData): Vec3i = when (data) {
//is MultipleFacing -> // fuck it xD this is good enough
is Directional -> Vec3i.convert(when (data.material) {
// exceptions
COCOA -> data.facing
OAK_DOOR, BIRCH_DOOR, SPRUCE_DOOR, JUNGLE_DOOR, ACACIA_DOOR, DARK_OAK_DOOR, IRON_DOOR -> BlockFace.DOWN
else -> data.facing.oppositeFace
})
else -> Vec3i.down
}
|