blob: 438bc547ab382068926953423e71fcdf410e18f4 [file] [log] [blame] [raw]
/*
* THIS FILE IS GENERATED. DO NOT EDIT DIRECTLY.
*/
package net.glowstone.block.flattening.generated;
import com.google.common.collect.ImmutableBiMap;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterators;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.ArrayUtils;
import org.bukkit.Material;
import org.bukkit.block.BlockFace;
import org.bukkit.configuration.file.YamlConfiguration;
@Deprecated
public class GeneratedFlatteningData {
static final ImmutableMap<Material, PropertyDefs> MATERIAL_PROPERTIES;
static class PropertyDefs {
private final PropMap properties;
PropertyDefs(PropMap properties) {
this.properties = properties;
}
public int serialize(Map<String, Object> values) {
if (values == null) {
return 0;
}
int mask = 0;
for (int i = this.properties.keys.length - 1; i >= 0; i--) {
String key = this.properties.keys[i];
PropertyEnum propEnum = this.properties.enums[i];
mask |= propEnum.serialize(values.getOrDefault(key, propEnum.defaultValue())) << i;
}
return mask;
}
public Map<String, Object> deserialize(int serial) {
int sizeAcc = 0;
ImmutableMap.Builder<String, Object> result = ImmutableMap.builder();
for (int i = this.properties.keys.length - 1; i >= 0; i--) {
String key = this.properties.keys[i];
PropertyEnum propEnum = this.properties.enums[i];
int enumSize = (int) Math.ceil(Math.log(propEnum.size()) / Math.log(2));
int x = ((1 << enumSize) - 1) & (serial >> ((sizeAcc + 1) - 1));
sizeAcc += enumSize;
result.put(key, propEnum.deserialize(x));
}
return result.build();
}
}
static class PropertyEnum {
private final String[] values;
public PropertyEnum(String... values) {
this.values = values;
}
public int serialize(Object value) {
return ArrayUtils.indexOf(values, value);
}
public Object deserialize(int serial) {
return values[serial];
}
public Object defaultValue() {
return values[0];
}
public int size() {
return values.length;
}
}
static class PropertyEnumBoolean extends PropertyEnum {
public PropertyEnumBoolean() {
super();
}
@Override
public Object deserialize(int serial) {
return serial != 1;
}
@Override
public int serialize(Object value) {
boolean b;
if (value instanceof Boolean) {
b = (Boolean) value;
} else if (value instanceof String) {
b = Boolean.valueOf((String) value);
} else {
b = true;
}
return b ? 0 : 1;
}
@Override
public int size() {
return 2;
}
@Override
public Object defaultValue() {
return true;
}
}
static class PropMap {
private final String[] keys;
private final PropertyEnum[] enums;
public PropMap(String[] keys, PropertyEnum[] enums) {
this.keys = keys;
this.enums = enums;
}
}
private static PropMap propMapOf(Object... keysAndVals) {
Iterator<Object> iter = Iterators.forArray(keysAndVals);
List<String> keys = new ArrayList<>();
List<PropertyEnum> enums = new ArrayList<>();
while (iter.hasNext()) {
keys.add((String) iter.next());
enums.add((PropertyEnum) iter.next());
}
return new PropMap(keys.toArray(new String[0]), enums.toArray(new PropertyEnum[0]));
}
static final ImmutableMap<Material, List<BlockFace>> DIRECTIONAL_POSSIBLE_FACES;
static final Integer[] STATE_BASE_IDS = new Integer[8582];
static final ImmutableBiMap<Integer, Material> MATERIAL_ID_MAP;
static {
ImmutableMap.Builder<Material, PropertyDefs> materialPropertiesBuilder = ImmutableMap.builder();
materialPropertiesBuilder
.put(Material.AIR, new PropertyDefs(propMapOf()))
.put(Material.STONE, new PropertyDefs(propMapOf()))
.put(Material.GRANITE, new PropertyDefs(propMapOf()))
.put(Material.POLISHED_GRANITE, new PropertyDefs(propMapOf()))
.put(Material.DIORITE, new PropertyDefs(propMapOf()))
.put(Material.POLISHED_DIORITE, new PropertyDefs(propMapOf()))
.put(Material.ANDESITE, new PropertyDefs(propMapOf()))
.put(Material.POLISHED_ANDESITE, new PropertyDefs(propMapOf()))
.put(Material.GRASS_BLOCK, new PropertyDefs(propMapOf("snowy", new PropertyEnum("true", "false"))))
.put(Material.DIRT, new PropertyDefs(propMapOf()))
.put(Material.COARSE_DIRT, new PropertyDefs(propMapOf()))
.put(Material.PODZOL, new PropertyDefs(propMapOf("snowy", new PropertyEnum("true", "false"))))
.put(Material.COBBLESTONE, new PropertyDefs(propMapOf()))
.put(Material.OAK_PLANKS, new PropertyDefs(propMapOf()))
.put(Material.SPRUCE_PLANKS, new PropertyDefs(propMapOf()))
.put(Material.BIRCH_PLANKS, new PropertyDefs(propMapOf()))
.put(Material.JUNGLE_PLANKS, new PropertyDefs(propMapOf()))
.put(Material.ACACIA_PLANKS, new PropertyDefs(propMapOf()))
.put(Material.DARK_OAK_PLANKS, new PropertyDefs(propMapOf()))
.put(Material.OAK_SAPLING, new PropertyDefs(propMapOf("stage", new PropertyEnum("0", "1"))))
.put(Material.SPRUCE_SAPLING, new PropertyDefs(propMapOf("stage", new PropertyEnum("0", "1"))))
.put(Material.BIRCH_SAPLING, new PropertyDefs(propMapOf("stage", new PropertyEnum("0", "1"))))
.put(Material.JUNGLE_SAPLING, new PropertyDefs(propMapOf("stage", new PropertyEnum("0", "1"))))
.put(Material.ACACIA_SAPLING, new PropertyDefs(propMapOf("stage", new PropertyEnum("0", "1"))))
.put(Material.DARK_OAK_SAPLING, new PropertyDefs(propMapOf("stage", new PropertyEnum("0", "1"))))
.put(Material.BEDROCK, new PropertyDefs(propMapOf()))
.put(Material.WATER, new PropertyDefs(propMapOf("level", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.LAVA, new PropertyDefs(propMapOf("level", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.SAND, new PropertyDefs(propMapOf()))
.put(Material.RED_SAND, new PropertyDefs(propMapOf()))
.put(Material.GRAVEL, new PropertyDefs(propMapOf()))
.put(Material.GOLD_ORE, new PropertyDefs(propMapOf()))
.put(Material.IRON_ORE, new PropertyDefs(propMapOf()))
.put(Material.COAL_ORE, new PropertyDefs(propMapOf()))
.put(Material.OAK_LOG, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "y", "z"))))
.put(Material.SPRUCE_LOG, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "y", "z"))))
.put(Material.BIRCH_LOG, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "y", "z"))))
.put(Material.JUNGLE_LOG, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "y", "z"))))
.put(Material.ACACIA_LOG, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "y", "z"))))
.put(Material.DARK_OAK_LOG, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "y", "z"))))
.put(Material.STRIPPED_SPRUCE_LOG, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "y", "z"))))
.put(Material.STRIPPED_BIRCH_LOG, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "y", "z"))))
.put(Material.STRIPPED_JUNGLE_LOG, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "y", "z"))))
.put(Material.STRIPPED_ACACIA_LOG, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "y", "z"))))
.put(Material.STRIPPED_DARK_OAK_LOG, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "y", "z"))))
.put(Material.STRIPPED_OAK_LOG, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "y", "z"))))
.put(Material.OAK_WOOD, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "y", "z"))))
.put(Material.SPRUCE_WOOD, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "y", "z"))))
.put(Material.BIRCH_WOOD, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "y", "z"))))
.put(Material.JUNGLE_WOOD, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "y", "z"))))
.put(Material.ACACIA_WOOD, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "y", "z"))))
.put(Material.DARK_OAK_WOOD, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "y", "z"))))
.put(Material.STRIPPED_OAK_WOOD, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "y", "z"))))
.put(Material.STRIPPED_SPRUCE_WOOD, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "y", "z"))))
.put(Material.STRIPPED_BIRCH_WOOD, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "y", "z"))))
.put(Material.STRIPPED_JUNGLE_WOOD, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "y", "z"))))
.put(Material.STRIPPED_ACACIA_WOOD, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "y", "z"))))
.put(Material.STRIPPED_DARK_OAK_WOOD, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "y", "z"))))
.put(Material.OAK_LEAVES, new PropertyDefs(propMapOf("distance", new PropertyEnum("1", "2", "3", "4", "5", "6", "7"), "persistent", new PropertyEnum("true", "false"))))
.put(Material.SPRUCE_LEAVES, new PropertyDefs(propMapOf("distance", new PropertyEnum("1", "2", "3", "4", "5", "6", "7"), "persistent", new PropertyEnum("true", "false"))))
.put(Material.BIRCH_LEAVES, new PropertyDefs(propMapOf("distance", new PropertyEnum("1", "2", "3", "4", "5", "6", "7"), "persistent", new PropertyEnum("true", "false"))))
.put(Material.JUNGLE_LEAVES, new PropertyDefs(propMapOf("distance", new PropertyEnum("1", "2", "3", "4", "5", "6", "7"), "persistent", new PropertyEnum("true", "false"))))
.put(Material.ACACIA_LEAVES, new PropertyDefs(propMapOf("distance", new PropertyEnum("1", "2", "3", "4", "5", "6", "7"), "persistent", new PropertyEnum("true", "false"))))
.put(Material.DARK_OAK_LEAVES, new PropertyDefs(propMapOf("distance", new PropertyEnum("1", "2", "3", "4", "5", "6", "7"), "persistent", new PropertyEnum("true", "false"))))
.put(Material.SPONGE, new PropertyDefs(propMapOf()))
.put(Material.WET_SPONGE, new PropertyDefs(propMapOf()))
.put(Material.GLASS, new PropertyDefs(propMapOf()))
.put(Material.LAPIS_ORE, new PropertyDefs(propMapOf()))
.put(Material.LAPIS_BLOCK, new PropertyDefs(propMapOf()))
.put(Material.DISPENSER, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "east", "south", "west", "up", "down"), "triggered", new PropertyEnum("true", "false"))))
.put(Material.SANDSTONE, new PropertyDefs(propMapOf()))
.put(Material.CHISELED_SANDSTONE, new PropertyDefs(propMapOf()))
.put(Material.CUT_SANDSTONE, new PropertyDefs(propMapOf()))
.put(Material.NOTE_BLOCK, new PropertyDefs(propMapOf("instrument", new PropertyEnum("harp", "basedrum", "snare", "hat", "bass", "flute", "bell", "guitar", "chime", "xylophone"), "note", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"), "powered", new PropertyEnum("true", "false"))))
.put(Material.WHITE_BED, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "occupied", new PropertyEnum("true", "false"), "part", new PropertyEnum("head", "foot"))))
.put(Material.ORANGE_BED, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "occupied", new PropertyEnum("true", "false"), "part", new PropertyEnum("head", "foot"))))
.put(Material.MAGENTA_BED, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "occupied", new PropertyEnum("true", "false"), "part", new PropertyEnum("head", "foot"))))
.put(Material.LIGHT_BLUE_BED, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "occupied", new PropertyEnum("true", "false"), "part", new PropertyEnum("head", "foot"))))
.put(Material.YELLOW_BED, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "occupied", new PropertyEnum("true", "false"), "part", new PropertyEnum("head", "foot"))))
.put(Material.LIME_BED, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "occupied", new PropertyEnum("true", "false"), "part", new PropertyEnum("head", "foot"))))
.put(Material.PINK_BED, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "occupied", new PropertyEnum("true", "false"), "part", new PropertyEnum("head", "foot"))))
.put(Material.GRAY_BED, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "occupied", new PropertyEnum("true", "false"), "part", new PropertyEnum("head", "foot"))))
.put(Material.LIGHT_GRAY_BED, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "occupied", new PropertyEnum("true", "false"), "part", new PropertyEnum("head", "foot"))))
.put(Material.CYAN_BED, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "occupied", new PropertyEnum("true", "false"), "part", new PropertyEnum("head", "foot"))))
.put(Material.PURPLE_BED, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "occupied", new PropertyEnum("true", "false"), "part", new PropertyEnum("head", "foot"))))
.put(Material.BLUE_BED, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "occupied", new PropertyEnum("true", "false"), "part", new PropertyEnum("head", "foot"))))
.put(Material.BROWN_BED, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "occupied", new PropertyEnum("true", "false"), "part", new PropertyEnum("head", "foot"))))
.put(Material.GREEN_BED, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "occupied", new PropertyEnum("true", "false"), "part", new PropertyEnum("head", "foot"))))
.put(Material.RED_BED, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "occupied", new PropertyEnum("true", "false"), "part", new PropertyEnum("head", "foot"))))
.put(Material.BLACK_BED, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "occupied", new PropertyEnum("true", "false"), "part", new PropertyEnum("head", "foot"))))
.put(Material.POWERED_RAIL, new PropertyDefs(propMapOf("powered", new PropertyEnum("true", "false"), "shape", new PropertyEnum("north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"))))
.put(Material.DETECTOR_RAIL, new PropertyDefs(propMapOf("powered", new PropertyEnum("true", "false"), "shape", new PropertyEnum("north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"))))
.put(Material.STICKY_PISTON, new PropertyDefs(propMapOf("extended", new PropertyEnum("true", "false"), "facing", new PropertyEnum("north", "east", "south", "west", "up", "down"))))
.put(Material.COBWEB, new PropertyDefs(propMapOf()))
.put(Material.GRASS, new PropertyDefs(propMapOf()))
.put(Material.FERN, new PropertyDefs(propMapOf()))
.put(Material.DEAD_BUSH, new PropertyDefs(propMapOf()))
.put(Material.SEAGRASS, new PropertyDefs(propMapOf()))
.put(Material.TALL_SEAGRASS, new PropertyDefs(propMapOf("half", new PropertyEnum("upper", "lower"))))
.put(Material.PISTON, new PropertyDefs(propMapOf("extended", new PropertyEnum("true", "false"), "facing", new PropertyEnum("north", "east", "south", "west", "up", "down"))))
.put(Material.PISTON_HEAD, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "east", "south", "west", "up", "down"), "short", new PropertyEnum("true", "false"), "type", new PropertyEnum("normal", "sticky"))))
.put(Material.WHITE_WOOL, new PropertyDefs(propMapOf()))
.put(Material.ORANGE_WOOL, new PropertyDefs(propMapOf()))
.put(Material.MAGENTA_WOOL, new PropertyDefs(propMapOf()))
.put(Material.LIGHT_BLUE_WOOL, new PropertyDefs(propMapOf()))
.put(Material.YELLOW_WOOL, new PropertyDefs(propMapOf()))
.put(Material.LIME_WOOL, new PropertyDefs(propMapOf()))
.put(Material.PINK_WOOL, new PropertyDefs(propMapOf()))
.put(Material.GRAY_WOOL, new PropertyDefs(propMapOf()))
.put(Material.LIGHT_GRAY_WOOL, new PropertyDefs(propMapOf()))
.put(Material.CYAN_WOOL, new PropertyDefs(propMapOf()))
.put(Material.PURPLE_WOOL, new PropertyDefs(propMapOf()))
.put(Material.BLUE_WOOL, new PropertyDefs(propMapOf()))
.put(Material.BROWN_WOOL, new PropertyDefs(propMapOf()))
.put(Material.GREEN_WOOL, new PropertyDefs(propMapOf()))
.put(Material.RED_WOOL, new PropertyDefs(propMapOf()))
.put(Material.BLACK_WOOL, new PropertyDefs(propMapOf()))
.put(Material.MOVING_PISTON, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "east", "south", "west", "up", "down"), "type", new PropertyEnum("normal", "sticky"))))
.put(Material.DANDELION, new PropertyDefs(propMapOf()))
.put(Material.POPPY, new PropertyDefs(propMapOf()))
.put(Material.BLUE_ORCHID, new PropertyDefs(propMapOf()))
.put(Material.ALLIUM, new PropertyDefs(propMapOf()))
.put(Material.AZURE_BLUET, new PropertyDefs(propMapOf()))
.put(Material.RED_TULIP, new PropertyDefs(propMapOf()))
.put(Material.ORANGE_TULIP, new PropertyDefs(propMapOf()))
.put(Material.WHITE_TULIP, new PropertyDefs(propMapOf()))
.put(Material.PINK_TULIP, new PropertyDefs(propMapOf()))
.put(Material.OXEYE_DAISY, new PropertyDefs(propMapOf()))
.put(Material.BROWN_MUSHROOM, new PropertyDefs(propMapOf()))
.put(Material.RED_MUSHROOM, new PropertyDefs(propMapOf()))
.put(Material.GOLD_BLOCK, new PropertyDefs(propMapOf()))
.put(Material.IRON_BLOCK, new PropertyDefs(propMapOf()))
.put(Material.BRICKS, new PropertyDefs(propMapOf()))
.put(Material.TNT, new PropertyDefs(propMapOf()))
.put(Material.BOOKSHELF, new PropertyDefs(propMapOf()))
.put(Material.MOSSY_COBBLESTONE, new PropertyDefs(propMapOf()))
.put(Material.OBSIDIAN, new PropertyDefs(propMapOf()))
.put(Material.TORCH, new PropertyDefs(propMapOf()))
.put(Material.WALL_TORCH, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.FIRE, new PropertyDefs(propMapOf("age", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"), "east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "up", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.SPAWNER, new PropertyDefs(propMapOf()))
.put(Material.OAK_STAIRS, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("top", "bottom"), "shape", new PropertyEnum("straight", "inner_left", "inner_right", "outer_left", "outer_right"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.CHEST, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "type", new PropertyEnum("single", "left", "right"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.REDSTONE_WIRE, new PropertyDefs(propMapOf("east", new PropertyEnum("up", "side", "none"), "north", new PropertyEnum("up", "side", "none"), "power", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"), "south", new PropertyEnum("up", "side", "none"), "west", new PropertyEnum("up", "side", "none"))))
.put(Material.DIAMOND_ORE, new PropertyDefs(propMapOf()))
.put(Material.DIAMOND_BLOCK, new PropertyDefs(propMapOf()))
.put(Material.CRAFTING_TABLE, new PropertyDefs(propMapOf()))
.put(Material.WHEAT, new PropertyDefs(propMapOf("age", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7"))))
.put(Material.FARMLAND, new PropertyDefs(propMapOf("moisture", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7"))))
.put(Material.FURNACE, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "lit", new PropertyEnum("true", "false"))))
.put(Material.SIGN, new PropertyDefs(propMapOf("rotation", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.OAK_DOOR, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("upper", "lower"), "hinge", new PropertyEnum("left", "right"), "open", new PropertyEnum("true", "false"), "powered", new PropertyEnum("true", "false"))))
.put(Material.LADDER, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.RAIL, new PropertyDefs(propMapOf("shape", new PropertyEnum("north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south", "south_east", "south_west", "north_west", "north_east"))))
.put(Material.COBBLESTONE_STAIRS, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("top", "bottom"), "shape", new PropertyEnum("straight", "inner_left", "inner_right", "outer_left", "outer_right"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.WALL_SIGN, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.LEVER, new PropertyDefs(propMapOf("face", new PropertyEnum("floor", "wall", "ceiling"), "facing", new PropertyEnum("north", "south", "west", "east"), "powered", new PropertyEnum("true", "false"))))
.put(Material.STONE_PRESSURE_PLATE, new PropertyDefs(propMapOf("powered", new PropertyEnum("true", "false"))))
.put(Material.IRON_DOOR, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("upper", "lower"), "hinge", new PropertyEnum("left", "right"), "open", new PropertyEnum("true", "false"), "powered", new PropertyEnum("true", "false"))))
.put(Material.OAK_PRESSURE_PLATE, new PropertyDefs(propMapOf("powered", new PropertyEnum("true", "false"))))
.put(Material.SPRUCE_PRESSURE_PLATE, new PropertyDefs(propMapOf("powered", new PropertyEnum("true", "false"))))
.put(Material.BIRCH_PRESSURE_PLATE, new PropertyDefs(propMapOf("powered", new PropertyEnum("true", "false"))))
.put(Material.JUNGLE_PRESSURE_PLATE, new PropertyDefs(propMapOf("powered", new PropertyEnum("true", "false"))))
.put(Material.ACACIA_PRESSURE_PLATE, new PropertyDefs(propMapOf("powered", new PropertyEnum("true", "false"))))
.put(Material.DARK_OAK_PRESSURE_PLATE, new PropertyDefs(propMapOf("powered", new PropertyEnum("true", "false"))))
.put(Material.REDSTONE_ORE, new PropertyDefs(propMapOf("lit", new PropertyEnum("true", "false"))))
.put(Material.REDSTONE_TORCH, new PropertyDefs(propMapOf("lit", new PropertyEnum("true", "false"))))
.put(Material.REDSTONE_WALL_TORCH, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "lit", new PropertyEnum("true", "false"))))
.put(Material.STONE_BUTTON, new PropertyDefs(propMapOf("face", new PropertyEnum("floor", "wall", "ceiling"), "facing", new PropertyEnum("north", "south", "west", "east"), "powered", new PropertyEnum("true", "false"))))
.put(Material.SNOW, new PropertyDefs(propMapOf("layers", new PropertyEnum("1", "2", "3", "4", "5", "6", "7", "8"))))
.put(Material.ICE, new PropertyDefs(propMapOf()))
.put(Material.SNOW_BLOCK, new PropertyDefs(propMapOf()))
.put(Material.CACTUS, new PropertyDefs(propMapOf("age", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.CLAY, new PropertyDefs(propMapOf()))
.put(Material.SUGAR_CANE, new PropertyDefs(propMapOf("age", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.JUKEBOX, new PropertyDefs(propMapOf("has_record", new PropertyEnum("true", "false"))))
.put(Material.OAK_FENCE, new PropertyDefs(propMapOf("east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.PUMPKIN, new PropertyDefs(propMapOf()))
.put(Material.NETHERRACK, new PropertyDefs(propMapOf()))
.put(Material.SOUL_SAND, new PropertyDefs(propMapOf()))
.put(Material.GLOWSTONE, new PropertyDefs(propMapOf()))
.put(Material.NETHER_PORTAL, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "z"))))
.put(Material.CARVED_PUMPKIN, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.JACK_O_LANTERN, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.CAKE, new PropertyDefs(propMapOf("bites", new PropertyEnum("0", "1", "2", "3", "4", "5", "6"))))
.put(Material.REPEATER, new PropertyDefs(propMapOf("delay", new PropertyEnum("1", "2", "3", "4"), "facing", new PropertyEnum("north", "south", "west", "east"), "locked", new PropertyEnum("true", "false"), "powered", new PropertyEnum("true", "false"))))
.put(Material.WHITE_STAINED_GLASS, new PropertyDefs(propMapOf()))
.put(Material.ORANGE_STAINED_GLASS, new PropertyDefs(propMapOf()))
.put(Material.MAGENTA_STAINED_GLASS, new PropertyDefs(propMapOf()))
.put(Material.LIGHT_BLUE_STAINED_GLASS, new PropertyDefs(propMapOf()))
.put(Material.YELLOW_STAINED_GLASS, new PropertyDefs(propMapOf()))
.put(Material.LIME_STAINED_GLASS, new PropertyDefs(propMapOf()))
.put(Material.PINK_STAINED_GLASS, new PropertyDefs(propMapOf()))
.put(Material.GRAY_STAINED_GLASS, new PropertyDefs(propMapOf()))
.put(Material.LIGHT_GRAY_STAINED_GLASS, new PropertyDefs(propMapOf()))
.put(Material.CYAN_STAINED_GLASS, new PropertyDefs(propMapOf()))
.put(Material.PURPLE_STAINED_GLASS, new PropertyDefs(propMapOf()))
.put(Material.BLUE_STAINED_GLASS, new PropertyDefs(propMapOf()))
.put(Material.BROWN_STAINED_GLASS, new PropertyDefs(propMapOf()))
.put(Material.GREEN_STAINED_GLASS, new PropertyDefs(propMapOf()))
.put(Material.RED_STAINED_GLASS, new PropertyDefs(propMapOf()))
.put(Material.BLACK_STAINED_GLASS, new PropertyDefs(propMapOf()))
.put(Material.OAK_TRAPDOOR, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("top", "bottom"), "open", new PropertyEnum("true", "false"), "powered", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.SPRUCE_TRAPDOOR, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("top", "bottom"), "open", new PropertyEnum("true", "false"), "powered", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.BIRCH_TRAPDOOR, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("top", "bottom"), "open", new PropertyEnum("true", "false"), "powered", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.JUNGLE_TRAPDOOR, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("top", "bottom"), "open", new PropertyEnum("true", "false"), "powered", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.ACACIA_TRAPDOOR, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("top", "bottom"), "open", new PropertyEnum("true", "false"), "powered", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.DARK_OAK_TRAPDOOR, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("top", "bottom"), "open", new PropertyEnum("true", "false"), "powered", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.INFESTED_STONE, new PropertyDefs(propMapOf()))
.put(Material.INFESTED_COBBLESTONE, new PropertyDefs(propMapOf()))
.put(Material.INFESTED_STONE_BRICKS, new PropertyDefs(propMapOf()))
.put(Material.INFESTED_MOSSY_STONE_BRICKS, new PropertyDefs(propMapOf()))
.put(Material.INFESTED_CRACKED_STONE_BRICKS, new PropertyDefs(propMapOf()))
.put(Material.INFESTED_CHISELED_STONE_BRICKS, new PropertyDefs(propMapOf()))
.put(Material.STONE_BRICKS, new PropertyDefs(propMapOf()))
.put(Material.MOSSY_STONE_BRICKS, new PropertyDefs(propMapOf()))
.put(Material.CRACKED_STONE_BRICKS, new PropertyDefs(propMapOf()))
.put(Material.CHISELED_STONE_BRICKS, new PropertyDefs(propMapOf()))
.put(Material.BROWN_MUSHROOM_BLOCK, new PropertyDefs(propMapOf("down", new PropertyEnum("true", "false"), "east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "up", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.RED_MUSHROOM_BLOCK, new PropertyDefs(propMapOf("down", new PropertyEnum("true", "false"), "east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "up", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.MUSHROOM_STEM, new PropertyDefs(propMapOf("down", new PropertyEnum("true", "false"), "east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "up", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.IRON_BARS, new PropertyDefs(propMapOf("east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.GLASS_PANE, new PropertyDefs(propMapOf("east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.MELON, new PropertyDefs(propMapOf()))
.put(Material.ATTACHED_PUMPKIN_STEM, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.ATTACHED_MELON_STEM, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.PUMPKIN_STEM, new PropertyDefs(propMapOf("age", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7"))))
.put(Material.MELON_STEM, new PropertyDefs(propMapOf("age", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7"))))
.put(Material.VINE, new PropertyDefs(propMapOf("east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "up", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.OAK_FENCE_GATE, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "in_wall", new PropertyEnum("true", "false"), "open", new PropertyEnum("true", "false"), "powered", new PropertyEnum("true", "false"))))
.put(Material.BRICK_STAIRS, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("top", "bottom"), "shape", new PropertyEnum("straight", "inner_left", "inner_right", "outer_left", "outer_right"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.STONE_BRICK_STAIRS, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("top", "bottom"), "shape", new PropertyEnum("straight", "inner_left", "inner_right", "outer_left", "outer_right"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.MYCELIUM, new PropertyDefs(propMapOf("snowy", new PropertyEnum("true", "false"))))
.put(Material.LILY_PAD, new PropertyDefs(propMapOf()))
.put(Material.NETHER_BRICKS, new PropertyDefs(propMapOf()))
.put(Material.NETHER_BRICK_FENCE, new PropertyDefs(propMapOf("east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.NETHER_BRICK_STAIRS, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("top", "bottom"), "shape", new PropertyEnum("straight", "inner_left", "inner_right", "outer_left", "outer_right"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.NETHER_WART, new PropertyDefs(propMapOf("age", new PropertyEnum("0", "1", "2", "3"))))
.put(Material.ENCHANTING_TABLE, new PropertyDefs(propMapOf()))
.put(Material.BREWING_STAND, new PropertyDefs(propMapOf("has_bottle_0", new PropertyEnum("true", "false"), "has_bottle_1", new PropertyEnum("true", "false"), "has_bottle_2", new PropertyEnum("true", "false"))))
.put(Material.CAULDRON, new PropertyDefs(propMapOf("level", new PropertyEnum("0", "1", "2", "3"))))
.put(Material.END_PORTAL, new PropertyDefs(propMapOf()))
.put(Material.END_PORTAL_FRAME, new PropertyDefs(propMapOf("eye", new PropertyEnum("true", "false"), "facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.END_STONE, new PropertyDefs(propMapOf()))
.put(Material.DRAGON_EGG, new PropertyDefs(propMapOf()))
.put(Material.REDSTONE_LAMP, new PropertyDefs(propMapOf("lit", new PropertyEnum("true", "false"))))
.put(Material.COCOA, new PropertyDefs(propMapOf("age", new PropertyEnum("0", "1", "2"), "facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.SANDSTONE_STAIRS, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("top", "bottom"), "shape", new PropertyEnum("straight", "inner_left", "inner_right", "outer_left", "outer_right"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.EMERALD_ORE, new PropertyDefs(propMapOf()))
.put(Material.ENDER_CHEST, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.TRIPWIRE_HOOK, new PropertyDefs(propMapOf("attached", new PropertyEnum("true", "false"), "facing", new PropertyEnum("north", "south", "west", "east"), "powered", new PropertyEnum("true", "false"))))
.put(Material.TRIPWIRE, new PropertyDefs(propMapOf("attached", new PropertyEnum("true", "false"), "disarmed", new PropertyEnum("true", "false"), "east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "powered", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.EMERALD_BLOCK, new PropertyDefs(propMapOf()))
.put(Material.SPRUCE_STAIRS, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("top", "bottom"), "shape", new PropertyEnum("straight", "inner_left", "inner_right", "outer_left", "outer_right"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.BIRCH_STAIRS, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("top", "bottom"), "shape", new PropertyEnum("straight", "inner_left", "inner_right", "outer_left", "outer_right"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.JUNGLE_STAIRS, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("top", "bottom"), "shape", new PropertyEnum("straight", "inner_left", "inner_right", "outer_left", "outer_right"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.COMMAND_BLOCK, new PropertyDefs(propMapOf("conditional", new PropertyEnum("true", "false"), "facing", new PropertyEnum("north", "east", "south", "west", "up", "down"))))
.put(Material.BEACON, new PropertyDefs(propMapOf()))
.put(Material.COBBLESTONE_WALL, new PropertyDefs(propMapOf("east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "up", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.MOSSY_COBBLESTONE_WALL, new PropertyDefs(propMapOf("east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "up", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.FLOWER_POT, new PropertyDefs(propMapOf()))
.put(Material.POTTED_OAK_SAPLING, new PropertyDefs(propMapOf()))
.put(Material.POTTED_SPRUCE_SAPLING, new PropertyDefs(propMapOf()))
.put(Material.POTTED_BIRCH_SAPLING, new PropertyDefs(propMapOf()))
.put(Material.POTTED_JUNGLE_SAPLING, new PropertyDefs(propMapOf()))
.put(Material.POTTED_ACACIA_SAPLING, new PropertyDefs(propMapOf()))
.put(Material.POTTED_DARK_OAK_SAPLING, new PropertyDefs(propMapOf()))
.put(Material.POTTED_FERN, new PropertyDefs(propMapOf()))
.put(Material.POTTED_DANDELION, new PropertyDefs(propMapOf()))
.put(Material.POTTED_POPPY, new PropertyDefs(propMapOf()))
.put(Material.POTTED_BLUE_ORCHID, new PropertyDefs(propMapOf()))
.put(Material.POTTED_ALLIUM, new PropertyDefs(propMapOf()))
.put(Material.POTTED_AZURE_BLUET, new PropertyDefs(propMapOf()))
.put(Material.POTTED_RED_TULIP, new PropertyDefs(propMapOf()))
.put(Material.POTTED_ORANGE_TULIP, new PropertyDefs(propMapOf()))
.put(Material.POTTED_WHITE_TULIP, new PropertyDefs(propMapOf()))
.put(Material.POTTED_PINK_TULIP, new PropertyDefs(propMapOf()))
.put(Material.POTTED_OXEYE_DAISY, new PropertyDefs(propMapOf()))
.put(Material.POTTED_RED_MUSHROOM, new PropertyDefs(propMapOf()))
.put(Material.POTTED_BROWN_MUSHROOM, new PropertyDefs(propMapOf()))
.put(Material.POTTED_DEAD_BUSH, new PropertyDefs(propMapOf()))
.put(Material.POTTED_CACTUS, new PropertyDefs(propMapOf()))
.put(Material.CARROTS, new PropertyDefs(propMapOf("age", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7"))))
.put(Material.POTATOES, new PropertyDefs(propMapOf("age", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7"))))
.put(Material.OAK_BUTTON, new PropertyDefs(propMapOf("face", new PropertyEnum("floor", "wall", "ceiling"), "facing", new PropertyEnum("north", "south", "west", "east"), "powered", new PropertyEnum("true", "false"))))
.put(Material.SPRUCE_BUTTON, new PropertyDefs(propMapOf("face", new PropertyEnum("floor", "wall", "ceiling"), "facing", new PropertyEnum("north", "south", "west", "east"), "powered", new PropertyEnum("true", "false"))))
.put(Material.BIRCH_BUTTON, new PropertyDefs(propMapOf("face", new PropertyEnum("floor", "wall", "ceiling"), "facing", new PropertyEnum("north", "south", "west", "east"), "powered", new PropertyEnum("true", "false"))))
.put(Material.JUNGLE_BUTTON, new PropertyDefs(propMapOf("face", new PropertyEnum("floor", "wall", "ceiling"), "facing", new PropertyEnum("north", "south", "west", "east"), "powered", new PropertyEnum("true", "false"))))
.put(Material.ACACIA_BUTTON, new PropertyDefs(propMapOf("face", new PropertyEnum("floor", "wall", "ceiling"), "facing", new PropertyEnum("north", "south", "west", "east"), "powered", new PropertyEnum("true", "false"))))
.put(Material.DARK_OAK_BUTTON, new PropertyDefs(propMapOf("face", new PropertyEnum("floor", "wall", "ceiling"), "facing", new PropertyEnum("north", "south", "west", "east"), "powered", new PropertyEnum("true", "false"))))
.put(Material.SKELETON_WALL_SKULL, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.SKELETON_SKULL, new PropertyDefs(propMapOf("rotation", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.WITHER_SKELETON_WALL_SKULL, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.WITHER_SKELETON_SKULL, new PropertyDefs(propMapOf("rotation", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.ZOMBIE_WALL_HEAD, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.ZOMBIE_HEAD, new PropertyDefs(propMapOf("rotation", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.PLAYER_WALL_HEAD, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.PLAYER_HEAD, new PropertyDefs(propMapOf("rotation", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.CREEPER_WALL_HEAD, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.CREEPER_HEAD, new PropertyDefs(propMapOf("rotation", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.DRAGON_WALL_HEAD, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.DRAGON_HEAD, new PropertyDefs(propMapOf("rotation", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.ANVIL, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.CHIPPED_ANVIL, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.DAMAGED_ANVIL, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.TRAPPED_CHEST, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "type", new PropertyEnum("single", "left", "right"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.LIGHT_WEIGHTED_PRESSURE_PLATE, new PropertyDefs(propMapOf("power", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.HEAVY_WEIGHTED_PRESSURE_PLATE, new PropertyDefs(propMapOf("power", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.COMPARATOR, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "mode", new PropertyEnum("compare", "subtract"), "powered", new PropertyEnum("true", "false"))))
.put(Material.DAYLIGHT_DETECTOR, new PropertyDefs(propMapOf("inverted", new PropertyEnum("true", "false"), "power", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.REDSTONE_BLOCK, new PropertyDefs(propMapOf()))
.put(Material.NETHER_QUARTZ_ORE, new PropertyDefs(propMapOf()))
.put(Material.HOPPER, new PropertyDefs(propMapOf("enabled", new PropertyEnum("true", "false"), "facing", new PropertyEnum("down", "north", "south", "west", "east"))))
.put(Material.QUARTZ_BLOCK, new PropertyDefs(propMapOf()))
.put(Material.CHISELED_QUARTZ_BLOCK, new PropertyDefs(propMapOf()))
.put(Material.QUARTZ_PILLAR, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "y", "z"))))
.put(Material.QUARTZ_STAIRS, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("top", "bottom"), "shape", new PropertyEnum("straight", "inner_left", "inner_right", "outer_left", "outer_right"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.ACTIVATOR_RAIL, new PropertyDefs(propMapOf("powered", new PropertyEnum("true", "false"), "shape", new PropertyEnum("north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"))))
.put(Material.DROPPER, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "east", "south", "west", "up", "down"), "triggered", new PropertyEnum("true", "false"))))
.put(Material.WHITE_TERRACOTTA, new PropertyDefs(propMapOf()))
.put(Material.ORANGE_TERRACOTTA, new PropertyDefs(propMapOf()))
.put(Material.MAGENTA_TERRACOTTA, new PropertyDefs(propMapOf()))
.put(Material.LIGHT_BLUE_TERRACOTTA, new PropertyDefs(propMapOf()))
.put(Material.YELLOW_TERRACOTTA, new PropertyDefs(propMapOf()))
.put(Material.LIME_TERRACOTTA, new PropertyDefs(propMapOf()))
.put(Material.PINK_TERRACOTTA, new PropertyDefs(propMapOf()))
.put(Material.GRAY_TERRACOTTA, new PropertyDefs(propMapOf()))
.put(Material.LIGHT_GRAY_TERRACOTTA, new PropertyDefs(propMapOf()))
.put(Material.CYAN_TERRACOTTA, new PropertyDefs(propMapOf()))
.put(Material.PURPLE_TERRACOTTA, new PropertyDefs(propMapOf()))
.put(Material.BLUE_TERRACOTTA, new PropertyDefs(propMapOf()))
.put(Material.BROWN_TERRACOTTA, new PropertyDefs(propMapOf()))
.put(Material.GREEN_TERRACOTTA, new PropertyDefs(propMapOf()))
.put(Material.RED_TERRACOTTA, new PropertyDefs(propMapOf()))
.put(Material.BLACK_TERRACOTTA, new PropertyDefs(propMapOf()))
.put(Material.WHITE_STAINED_GLASS_PANE, new PropertyDefs(propMapOf("east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.ORANGE_STAINED_GLASS_PANE, new PropertyDefs(propMapOf("east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.MAGENTA_STAINED_GLASS_PANE, new PropertyDefs(propMapOf("east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.LIGHT_BLUE_STAINED_GLASS_PANE, new PropertyDefs(propMapOf("east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.YELLOW_STAINED_GLASS_PANE, new PropertyDefs(propMapOf("east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.LIME_STAINED_GLASS_PANE, new PropertyDefs(propMapOf("east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.PINK_STAINED_GLASS_PANE, new PropertyDefs(propMapOf("east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.GRAY_STAINED_GLASS_PANE, new PropertyDefs(propMapOf("east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.LIGHT_GRAY_STAINED_GLASS_PANE, new PropertyDefs(propMapOf("east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.CYAN_STAINED_GLASS_PANE, new PropertyDefs(propMapOf("east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.PURPLE_STAINED_GLASS_PANE, new PropertyDefs(propMapOf("east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.BLUE_STAINED_GLASS_PANE, new PropertyDefs(propMapOf("east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.BROWN_STAINED_GLASS_PANE, new PropertyDefs(propMapOf("east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.GREEN_STAINED_GLASS_PANE, new PropertyDefs(propMapOf("east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.RED_STAINED_GLASS_PANE, new PropertyDefs(propMapOf("east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.BLACK_STAINED_GLASS_PANE, new PropertyDefs(propMapOf("east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.ACACIA_STAIRS, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("top", "bottom"), "shape", new PropertyEnum("straight", "inner_left", "inner_right", "outer_left", "outer_right"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.DARK_OAK_STAIRS, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("top", "bottom"), "shape", new PropertyEnum("straight", "inner_left", "inner_right", "outer_left", "outer_right"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.SLIME_BLOCK, new PropertyDefs(propMapOf()))
.put(Material.BARRIER, new PropertyDefs(propMapOf()))
.put(Material.IRON_TRAPDOOR, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("top", "bottom"), "open", new PropertyEnum("true", "false"), "powered", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.PRISMARINE, new PropertyDefs(propMapOf()))
.put(Material.PRISMARINE_BRICKS, new PropertyDefs(propMapOf()))
.put(Material.DARK_PRISMARINE, new PropertyDefs(propMapOf()))
.put(Material.PRISMARINE_STAIRS, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("top", "bottom"), "shape", new PropertyEnum("straight", "inner_left", "inner_right", "outer_left", "outer_right"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.PRISMARINE_BRICK_STAIRS, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("top", "bottom"), "shape", new PropertyEnum("straight", "inner_left", "inner_right", "outer_left", "outer_right"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.DARK_PRISMARINE_STAIRS, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("top", "bottom"), "shape", new PropertyEnum("straight", "inner_left", "inner_right", "outer_left", "outer_right"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.PRISMARINE_SLAB, new PropertyDefs(propMapOf("type", new PropertyEnum("top", "bottom", "double"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.PRISMARINE_BRICK_SLAB, new PropertyDefs(propMapOf("type", new PropertyEnum("top", "bottom", "double"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.DARK_PRISMARINE_SLAB, new PropertyDefs(propMapOf("type", new PropertyEnum("top", "bottom", "double"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.SEA_LANTERN, new PropertyDefs(propMapOf()))
.put(Material.HAY_BLOCK, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "y", "z"))))
.put(Material.WHITE_CARPET, new PropertyDefs(propMapOf()))
.put(Material.ORANGE_CARPET, new PropertyDefs(propMapOf()))
.put(Material.MAGENTA_CARPET, new PropertyDefs(propMapOf()))
.put(Material.LIGHT_BLUE_CARPET, new PropertyDefs(propMapOf()))
.put(Material.YELLOW_CARPET, new PropertyDefs(propMapOf()))
.put(Material.LIME_CARPET, new PropertyDefs(propMapOf()))
.put(Material.PINK_CARPET, new PropertyDefs(propMapOf()))
.put(Material.GRAY_CARPET, new PropertyDefs(propMapOf()))
.put(Material.LIGHT_GRAY_CARPET, new PropertyDefs(propMapOf()))
.put(Material.CYAN_CARPET, new PropertyDefs(propMapOf()))
.put(Material.PURPLE_CARPET, new PropertyDefs(propMapOf()))
.put(Material.BLUE_CARPET, new PropertyDefs(propMapOf()))
.put(Material.BROWN_CARPET, new PropertyDefs(propMapOf()))
.put(Material.GREEN_CARPET, new PropertyDefs(propMapOf()))
.put(Material.RED_CARPET, new PropertyDefs(propMapOf()))
.put(Material.BLACK_CARPET, new PropertyDefs(propMapOf()))
.put(Material.TERRACOTTA, new PropertyDefs(propMapOf()))
.put(Material.COAL_BLOCK, new PropertyDefs(propMapOf()))
.put(Material.PACKED_ICE, new PropertyDefs(propMapOf()))
.put(Material.SUNFLOWER, new PropertyDefs(propMapOf("half", new PropertyEnum("upper", "lower"))))
.put(Material.LILAC, new PropertyDefs(propMapOf("half", new PropertyEnum("upper", "lower"))))
.put(Material.ROSE_BUSH, new PropertyDefs(propMapOf("half", new PropertyEnum("upper", "lower"))))
.put(Material.PEONY, new PropertyDefs(propMapOf("half", new PropertyEnum("upper", "lower"))))
.put(Material.TALL_GRASS, new PropertyDefs(propMapOf("half", new PropertyEnum("upper", "lower"))))
.put(Material.LARGE_FERN, new PropertyDefs(propMapOf("half", new PropertyEnum("upper", "lower"))))
.put(Material.WHITE_BANNER, new PropertyDefs(propMapOf("rotation", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.ORANGE_BANNER, new PropertyDefs(propMapOf("rotation", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.MAGENTA_BANNER, new PropertyDefs(propMapOf("rotation", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.LIGHT_BLUE_BANNER, new PropertyDefs(propMapOf("rotation", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.YELLOW_BANNER, new PropertyDefs(propMapOf("rotation", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.LIME_BANNER, new PropertyDefs(propMapOf("rotation", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.PINK_BANNER, new PropertyDefs(propMapOf("rotation", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.GRAY_BANNER, new PropertyDefs(propMapOf("rotation", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.LIGHT_GRAY_BANNER, new PropertyDefs(propMapOf("rotation", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.CYAN_BANNER, new PropertyDefs(propMapOf("rotation", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.PURPLE_BANNER, new PropertyDefs(propMapOf("rotation", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.BLUE_BANNER, new PropertyDefs(propMapOf("rotation", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.BROWN_BANNER, new PropertyDefs(propMapOf("rotation", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.GREEN_BANNER, new PropertyDefs(propMapOf("rotation", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.RED_BANNER, new PropertyDefs(propMapOf("rotation", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.BLACK_BANNER, new PropertyDefs(propMapOf("rotation", new PropertyEnum("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"))))
.put(Material.WHITE_WALL_BANNER, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.ORANGE_WALL_BANNER, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.MAGENTA_WALL_BANNER, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.LIGHT_BLUE_WALL_BANNER, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.YELLOW_WALL_BANNER, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.LIME_WALL_BANNER, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.PINK_WALL_BANNER, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.GRAY_WALL_BANNER, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.LIGHT_GRAY_WALL_BANNER, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.CYAN_WALL_BANNER, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.PURPLE_WALL_BANNER, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.BLUE_WALL_BANNER, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.BROWN_WALL_BANNER, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.GREEN_WALL_BANNER, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.RED_WALL_BANNER, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.BLACK_WALL_BANNER, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.RED_SANDSTONE, new PropertyDefs(propMapOf()))
.put(Material.CHISELED_RED_SANDSTONE, new PropertyDefs(propMapOf()))
.put(Material.CUT_RED_SANDSTONE, new PropertyDefs(propMapOf()))
.put(Material.RED_SANDSTONE_STAIRS, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("top", "bottom"), "shape", new PropertyEnum("straight", "inner_left", "inner_right", "outer_left", "outer_right"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.OAK_SLAB, new PropertyDefs(propMapOf("type", new PropertyEnum("top", "bottom", "double"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.SPRUCE_SLAB, new PropertyDefs(propMapOf("type", new PropertyEnum("top", "bottom", "double"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.BIRCH_SLAB, new PropertyDefs(propMapOf("type", new PropertyEnum("top", "bottom", "double"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.JUNGLE_SLAB, new PropertyDefs(propMapOf("type", new PropertyEnum("top", "bottom", "double"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.ACACIA_SLAB, new PropertyDefs(propMapOf("type", new PropertyEnum("top", "bottom", "double"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.DARK_OAK_SLAB, new PropertyDefs(propMapOf("type", new PropertyEnum("top", "bottom", "double"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.STONE_SLAB, new PropertyDefs(propMapOf("type", new PropertyEnum("top", "bottom", "double"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.SANDSTONE_SLAB, new PropertyDefs(propMapOf("type", new PropertyEnum("top", "bottom", "double"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.PETRIFIED_OAK_SLAB, new PropertyDefs(propMapOf("type", new PropertyEnum("top", "bottom", "double"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.COBBLESTONE_SLAB, new PropertyDefs(propMapOf("type", new PropertyEnum("top", "bottom", "double"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.BRICK_SLAB, new PropertyDefs(propMapOf("type", new PropertyEnum("top", "bottom", "double"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.STONE_BRICK_SLAB, new PropertyDefs(propMapOf("type", new PropertyEnum("top", "bottom", "double"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.NETHER_BRICK_SLAB, new PropertyDefs(propMapOf("type", new PropertyEnum("top", "bottom", "double"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.QUARTZ_SLAB, new PropertyDefs(propMapOf("type", new PropertyEnum("top", "bottom", "double"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.RED_SANDSTONE_SLAB, new PropertyDefs(propMapOf("type", new PropertyEnum("top", "bottom", "double"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.PURPUR_SLAB, new PropertyDefs(propMapOf("type", new PropertyEnum("top", "bottom", "double"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.SMOOTH_STONE, new PropertyDefs(propMapOf()))
.put(Material.SMOOTH_SANDSTONE, new PropertyDefs(propMapOf()))
.put(Material.SMOOTH_QUARTZ, new PropertyDefs(propMapOf()))
.put(Material.SMOOTH_RED_SANDSTONE, new PropertyDefs(propMapOf()))
.put(Material.SPRUCE_FENCE_GATE, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "in_wall", new PropertyEnum("true", "false"), "open", new PropertyEnum("true", "false"), "powered", new PropertyEnum("true", "false"))))
.put(Material.BIRCH_FENCE_GATE, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "in_wall", new PropertyEnum("true", "false"), "open", new PropertyEnum("true", "false"), "powered", new PropertyEnum("true", "false"))))
.put(Material.JUNGLE_FENCE_GATE, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "in_wall", new PropertyEnum("true", "false"), "open", new PropertyEnum("true", "false"), "powered", new PropertyEnum("true", "false"))))
.put(Material.ACACIA_FENCE_GATE, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "in_wall", new PropertyEnum("true", "false"), "open", new PropertyEnum("true", "false"), "powered", new PropertyEnum("true", "false"))))
.put(Material.DARK_OAK_FENCE_GATE, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "in_wall", new PropertyEnum("true", "false"), "open", new PropertyEnum("true", "false"), "powered", new PropertyEnum("true", "false"))))
.put(Material.SPRUCE_FENCE, new PropertyDefs(propMapOf("east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.BIRCH_FENCE, new PropertyDefs(propMapOf("east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.JUNGLE_FENCE, new PropertyDefs(propMapOf("east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.ACACIA_FENCE, new PropertyDefs(propMapOf("east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.DARK_OAK_FENCE, new PropertyDefs(propMapOf("east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "waterlogged", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.SPRUCE_DOOR, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("upper", "lower"), "hinge", new PropertyEnum("left", "right"), "open", new PropertyEnum("true", "false"), "powered", new PropertyEnum("true", "false"))))
.put(Material.BIRCH_DOOR, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("upper", "lower"), "hinge", new PropertyEnum("left", "right"), "open", new PropertyEnum("true", "false"), "powered", new PropertyEnum("true", "false"))))
.put(Material.JUNGLE_DOOR, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("upper", "lower"), "hinge", new PropertyEnum("left", "right"), "open", new PropertyEnum("true", "false"), "powered", new PropertyEnum("true", "false"))))
.put(Material.ACACIA_DOOR, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("upper", "lower"), "hinge", new PropertyEnum("left", "right"), "open", new PropertyEnum("true", "false"), "powered", new PropertyEnum("true", "false"))))
.put(Material.DARK_OAK_DOOR, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("upper", "lower"), "hinge", new PropertyEnum("left", "right"), "open", new PropertyEnum("true", "false"), "powered", new PropertyEnum("true", "false"))))
.put(Material.END_ROD, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "east", "south", "west", "up", "down"))))
.put(Material.CHORUS_PLANT, new PropertyDefs(propMapOf("down", new PropertyEnum("true", "false"), "east", new PropertyEnum("true", "false"), "north", new PropertyEnum("true", "false"), "south", new PropertyEnum("true", "false"), "up", new PropertyEnum("true", "false"), "west", new PropertyEnum("true", "false"))))
.put(Material.CHORUS_FLOWER, new PropertyDefs(propMapOf("age", new PropertyEnum("0", "1", "2", "3", "4", "5"))))
.put(Material.PURPUR_BLOCK, new PropertyDefs(propMapOf()))
.put(Material.PURPUR_PILLAR, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "y", "z"))))
.put(Material.PURPUR_STAIRS, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "half", new PropertyEnum("top", "bottom"), "shape", new PropertyEnum("straight", "inner_left", "inner_right", "outer_left", "outer_right"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.END_STONE_BRICKS, new PropertyDefs(propMapOf()))
.put(Material.BEETROOTS, new PropertyDefs(propMapOf("age", new PropertyEnum("0", "1", "2", "3"))))
.put(Material.GRASS_PATH, new PropertyDefs(propMapOf()))
.put(Material.END_GATEWAY, new PropertyDefs(propMapOf()))
.put(Material.REPEATING_COMMAND_BLOCK, new PropertyDefs(propMapOf("conditional", new PropertyEnum("true", "false"), "facing", new PropertyEnum("north", "east", "south", "west", "up", "down"))))
.put(Material.CHAIN_COMMAND_BLOCK, new PropertyDefs(propMapOf("conditional", new PropertyEnum("true", "false"), "facing", new PropertyEnum("north", "east", "south", "west", "up", "down"))))
.put(Material.FROSTED_ICE, new PropertyDefs(propMapOf("age", new PropertyEnum("0", "1", "2", "3"))))
.put(Material.MAGMA_BLOCK, new PropertyDefs(propMapOf()))
.put(Material.NETHER_WART_BLOCK, new PropertyDefs(propMapOf()))
.put(Material.RED_NETHER_BRICKS, new PropertyDefs(propMapOf()))
.put(Material.BONE_BLOCK, new PropertyDefs(propMapOf("axis", new PropertyEnum("x", "y", "z"))))
.put(Material.STRUCTURE_VOID, new PropertyDefs(propMapOf()))
.put(Material.OBSERVER, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "east", "south", "west", "up", "down"), "powered", new PropertyEnum("true", "false"))))
.put(Material.SHULKER_BOX, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "east", "south", "west", "up", "down"))))
.put(Material.WHITE_SHULKER_BOX, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "east", "south", "west", "up", "down"))))
.put(Material.ORANGE_SHULKER_BOX, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "east", "south", "west", "up", "down"))))
.put(Material.MAGENTA_SHULKER_BOX, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "east", "south", "west", "up", "down"))))
.put(Material.LIGHT_BLUE_SHULKER_BOX, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "east", "south", "west", "up", "down"))))
.put(Material.YELLOW_SHULKER_BOX, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "east", "south", "west", "up", "down"))))
.put(Material.LIME_SHULKER_BOX, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "east", "south", "west", "up", "down"))))
.put(Material.PINK_SHULKER_BOX, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "east", "south", "west", "up", "down"))))
.put(Material.GRAY_SHULKER_BOX, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "east", "south", "west", "up", "down"))))
.put(Material.LIGHT_GRAY_SHULKER_BOX, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "east", "south", "west", "up", "down"))))
.put(Material.CYAN_SHULKER_BOX, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "east", "south", "west", "up", "down"))))
.put(Material.PURPLE_SHULKER_BOX, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "east", "south", "west", "up", "down"))))
.put(Material.BLUE_SHULKER_BOX, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "east", "south", "west", "up", "down"))))
.put(Material.BROWN_SHULKER_BOX, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "east", "south", "west", "up", "down"))))
.put(Material.GREEN_SHULKER_BOX, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "east", "south", "west", "up", "down"))))
.put(Material.RED_SHULKER_BOX, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "east", "south", "west", "up", "down"))))
.put(Material.BLACK_SHULKER_BOX, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "east", "south", "west", "up", "down"))))
.put(Material.WHITE_GLAZED_TERRACOTTA, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.ORANGE_GLAZED_TERRACOTTA, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.MAGENTA_GLAZED_TERRACOTTA, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.LIGHT_BLUE_GLAZED_TERRACOTTA, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.YELLOW_GLAZED_TERRACOTTA, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.LIME_GLAZED_TERRACOTTA, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.PINK_GLAZED_TERRACOTTA, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.GRAY_GLAZED_TERRACOTTA, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.LIGHT_GRAY_GLAZED_TERRACOTTA, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.CYAN_GLAZED_TERRACOTTA, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.PURPLE_GLAZED_TERRACOTTA, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.BLUE_GLAZED_TERRACOTTA, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.BROWN_GLAZED_TERRACOTTA, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.GREEN_GLAZED_TERRACOTTA, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.RED_GLAZED_TERRACOTTA, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.BLACK_GLAZED_TERRACOTTA, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"))))
.put(Material.WHITE_CONCRETE, new PropertyDefs(propMapOf()))
.put(Material.ORANGE_CONCRETE, new PropertyDefs(propMapOf()))
.put(Material.MAGENTA_CONCRETE, new PropertyDefs(propMapOf()))
.put(Material.LIGHT_BLUE_CONCRETE, new PropertyDefs(propMapOf()))
.put(Material.YELLOW_CONCRETE, new PropertyDefs(propMapOf()))
.put(Material.LIME_CONCRETE, new PropertyDefs(propMapOf()))
.put(Material.PINK_CONCRETE, new PropertyDefs(propMapOf()))
.put(Material.GRAY_CONCRETE, new PropertyDefs(propMapOf()))
.put(Material.LIGHT_GRAY_CONCRETE, new PropertyDefs(propMapOf()))
.put(Material.CYAN_CONCRETE, new PropertyDefs(propMapOf()))
.put(Material.PURPLE_CONCRETE, new PropertyDefs(propMapOf()))
.put(Material.BLUE_CONCRETE, new PropertyDefs(propMapOf()))
.put(Material.BROWN_CONCRETE, new PropertyDefs(propMapOf()))
.put(Material.GREEN_CONCRETE, new PropertyDefs(propMapOf()))
.put(Material.RED_CONCRETE, new PropertyDefs(propMapOf()))
.put(Material.BLACK_CONCRETE, new PropertyDefs(propMapOf()))
.put(Material.WHITE_CONCRETE_POWDER, new PropertyDefs(propMapOf()))
.put(Material.ORANGE_CONCRETE_POWDER, new PropertyDefs(propMapOf()))
.put(Material.MAGENTA_CONCRETE_POWDER, new PropertyDefs(propMapOf()))
.put(Material.LIGHT_BLUE_CONCRETE_POWDER, new PropertyDefs(propMapOf()))
.put(Material.YELLOW_CONCRETE_POWDER, new PropertyDefs(propMapOf()))
.put(Material.LIME_CONCRETE_POWDER, new PropertyDefs(propMapOf()))
.put(Material.PINK_CONCRETE_POWDER, new PropertyDefs(propMapOf()))
.put(Material.GRAY_CONCRETE_POWDER, new PropertyDefs(propMapOf()))
.put(Material.LIGHT_GRAY_CONCRETE_POWDER, new PropertyDefs(propMapOf()))
.put(Material.CYAN_CONCRETE_POWDER, new PropertyDefs(propMapOf()))
.put(Material.PURPLE_CONCRETE_POWDER, new PropertyDefs(propMapOf()))
.put(Material.BLUE_CONCRETE_POWDER, new PropertyDefs(propMapOf()))
.put(Material.BROWN_CONCRETE_POWDER, new PropertyDefs(propMapOf()))
.put(Material.GREEN_CONCRETE_POWDER, new PropertyDefs(propMapOf()))
.put(Material.RED_CONCRETE_POWDER, new PropertyDefs(propMapOf()))
.put(Material.BLACK_CONCRETE_POWDER, new PropertyDefs(propMapOf()))
.put(Material.KELP, new PropertyDefs(propMapOf("age", new PropertyEnum("0", "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"))))
.put(Material.KELP_PLANT, new PropertyDefs(propMapOf()))
.put(Material.DRIED_KELP_BLOCK, new PropertyDefs(propMapOf()))
.put(Material.TURTLE_EGG, new PropertyDefs(propMapOf("eggs", new PropertyEnum("1", "2", "3", "4"), "hatch", new PropertyEnum("0", "1", "2"))))
.put(Material.DEAD_TUBE_CORAL_BLOCK, new PropertyDefs(propMapOf()))
.put(Material.DEAD_BRAIN_CORAL_BLOCK, new PropertyDefs(propMapOf()))
.put(Material.DEAD_BUBBLE_CORAL_BLOCK, new PropertyDefs(propMapOf()))
.put(Material.DEAD_FIRE_CORAL_BLOCK, new PropertyDefs(propMapOf()))
.put(Material.DEAD_HORN_CORAL_BLOCK, new PropertyDefs(propMapOf()))
.put(Material.TUBE_CORAL_BLOCK, new PropertyDefs(propMapOf()))
.put(Material.BRAIN_CORAL_BLOCK, new PropertyDefs(propMapOf()))
.put(Material.BUBBLE_CORAL_BLOCK, new PropertyDefs(propMapOf()))
.put(Material.FIRE_CORAL_BLOCK, new PropertyDefs(propMapOf()))
.put(Material.HORN_CORAL_BLOCK, new PropertyDefs(propMapOf()))
.put(Material.TUBE_CORAL, new PropertyDefs(propMapOf()))
.put(Material.BRAIN_CORAL, new PropertyDefs(propMapOf()))
.put(Material.BUBBLE_CORAL, new PropertyDefs(propMapOf()))
.put(Material.FIRE_CORAL, new PropertyDefs(propMapOf()))
.put(Material.HORN_CORAL, new PropertyDefs(propMapOf()))
.put(Material.DEAD_TUBE_CORAL_WALL_FAN, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.DEAD_BRAIN_CORAL_WALL_FAN, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.DEAD_BUBBLE_CORAL_WALL_FAN, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.DEAD_FIRE_CORAL_WALL_FAN, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.DEAD_HORN_CORAL_WALL_FAN, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.TUBE_CORAL_WALL_FAN, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.BRAIN_CORAL_WALL_FAN, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.BUBBLE_CORAL_WALL_FAN, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.FIRE_CORAL_WALL_FAN, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.HORN_CORAL_WALL_FAN, new PropertyDefs(propMapOf("facing", new PropertyEnum("north", "south", "west", "east"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.DEAD_TUBE_CORAL_FAN, new PropertyDefs(propMapOf("waterlogged", new PropertyEnum("true", "false"))))
.put(Material.DEAD_BRAIN_CORAL_FAN, new PropertyDefs(propMapOf("waterlogged", new PropertyEnum("true", "false"))))
.put(Material.DEAD_BUBBLE_CORAL_FAN, new PropertyDefs(propMapOf("waterlogged", new PropertyEnum("true", "false"))))
.put(Material.DEAD_FIRE_CORAL_FAN, new PropertyDefs(propMapOf("waterlogged", new PropertyEnum("true", "false"))))
.put(Material.DEAD_HORN_CORAL_FAN, new PropertyDefs(propMapOf("waterlogged", new PropertyEnum("true", "false"))))
.put(Material.TUBE_CORAL_FAN, new PropertyDefs(propMapOf("waterlogged", new PropertyEnum("true", "false"))))
.put(Material.BRAIN_CORAL_FAN, new PropertyDefs(propMapOf("waterlogged", new PropertyEnum("true", "false"))))
.put(Material.BUBBLE_CORAL_FAN, new PropertyDefs(propMapOf("waterlogged", new PropertyEnum("true", "false"))))
.put(Material.FIRE_CORAL_FAN, new PropertyDefs(propMapOf("waterlogged", new PropertyEnum("true", "false"))))
.put(Material.HORN_CORAL_FAN, new PropertyDefs(propMapOf("waterlogged", new PropertyEnum("true", "false"))))
.put(Material.SEA_PICKLE, new PropertyDefs(propMapOf("pickles", new PropertyEnum("1", "2", "3", "4"), "waterlogged", new PropertyEnum("true", "false"))))
.put(Material.BLUE_ICE, new PropertyDefs(propMapOf()))
.put(Material.CONDUIT, new PropertyDefs(propMapOf()))
.put(Material.VOID_AIR, new PropertyDefs(propMapOf()))
.put(Material.CAVE_AIR, new PropertyDefs(propMapOf()))
.put(Material.BUBBLE_COLUMN, new PropertyDefs(propMapOf("drag", new PropertyEnum("true", "false"))))
.put(Material.STRUCTURE_BLOCK, new PropertyDefs(propMapOf("mode", new PropertyEnum("save", "load", "corner", "data"))))
;
MATERIAL_PROPERTIES = materialPropertiesBuilder.build();
ImmutableMap.Builder<Material, List<BlockFace>> possibleFacesBuilder = ImmutableMap.builder();
possibleFacesBuilder
.put(Material.DISPENSER, Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN))
.put(Material.WHITE_BED, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.ORANGE_BED, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.MAGENTA_BED, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.LIGHT_BLUE_BED, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.YELLOW_BED, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.LIME_BED, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.PINK_BED, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.GRAY_BED, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.LIGHT_GRAY_BED, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.CYAN_BED, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.PURPLE_BED, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.BLUE_BED, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.BROWN_BED, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.GREEN_BED, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.RED_BED, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.BLACK_BED, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.STICKY_PISTON, Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN))
.put(Material.PISTON, Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN))
.put(Material.PISTON_HEAD, Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN))
.put(Material.MOVING_PISTON, Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN))
.put(Material.WALL_TORCH, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.OAK_STAIRS, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.CHEST, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.FURNACE, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.OAK_DOOR, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.LADDER, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.COBBLESTONE_STAIRS, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.WALL_SIGN, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.LEVER, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.IRON_DOOR, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.REDSTONE_WALL_TORCH, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.STONE_BUTTON, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.CARVED_PUMPKIN, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.JACK_O_LANTERN, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.REPEATER, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.OAK_TRAPDOOR, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.SPRUCE_TRAPDOOR, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.BIRCH_TRAPDOOR, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.JUNGLE_TRAPDOOR, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.ACACIA_TRAPDOOR, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.DARK_OAK_TRAPDOOR, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.ATTACHED_PUMPKIN_STEM, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.ATTACHED_MELON_STEM, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.OAK_FENCE_GATE, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.BRICK_STAIRS, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.STONE_BRICK_STAIRS, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.NETHER_BRICK_STAIRS, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.END_PORTAL_FRAME, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.COCOA, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.SANDSTONE_STAIRS, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.ENDER_CHEST, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.TRIPWIRE_HOOK, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.SPRUCE_STAIRS, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.BIRCH_STAIRS, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.JUNGLE_STAIRS, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.COMMAND_BLOCK, Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN))
.put(Material.OAK_BUTTON, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.SPRUCE_BUTTON, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.BIRCH_BUTTON, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.JUNGLE_BUTTON, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.ACACIA_BUTTON, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.DARK_OAK_BUTTON, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.SKELETON_WALL_SKULL, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.WITHER_SKELETON_WALL_SKULL, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.ZOMBIE_WALL_HEAD, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.PLAYER_WALL_HEAD, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.CREEPER_WALL_HEAD, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.DRAGON_WALL_HEAD, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.ANVIL, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.CHIPPED_ANVIL, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.DAMAGED_ANVIL, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.TRAPPED_CHEST, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.COMPARATOR, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.HOPPER, Arrays.asList(BlockFace.DOWN, BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.QUARTZ_STAIRS, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.DROPPER, Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN))
.put(Material.ACACIA_STAIRS, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.DARK_OAK_STAIRS, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.IRON_TRAPDOOR, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.PRISMARINE_STAIRS, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.PRISMARINE_BRICK_STAIRS, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.DARK_PRISMARINE_STAIRS, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.WHITE_WALL_BANNER, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.ORANGE_WALL_BANNER, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.MAGENTA_WALL_BANNER, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.LIGHT_BLUE_WALL_BANNER, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.YELLOW_WALL_BANNER, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.LIME_WALL_BANNER, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.PINK_WALL_BANNER, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.GRAY_WALL_BANNER, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.LIGHT_GRAY_WALL_BANNER, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.CYAN_WALL_BANNER, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.PURPLE_WALL_BANNER, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.BLUE_WALL_BANNER, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.BROWN_WALL_BANNER, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.GREEN_WALL_BANNER, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.RED_WALL_BANNER, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.BLACK_WALL_BANNER, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.RED_SANDSTONE_STAIRS, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.SPRUCE_FENCE_GATE, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.BIRCH_FENCE_GATE, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.JUNGLE_FENCE_GATE, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.ACACIA_FENCE_GATE, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.DARK_OAK_FENCE_GATE, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.SPRUCE_DOOR, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.BIRCH_DOOR, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.JUNGLE_DOOR, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.ACACIA_DOOR, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.DARK_OAK_DOOR, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.END_ROD, Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN))
.put(Material.PURPUR_STAIRS, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.REPEATING_COMMAND_BLOCK, Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN))
.put(Material.CHAIN_COMMAND_BLOCK, Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN))
.put(Material.OBSERVER, Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN))
.put(Material.SHULKER_BOX, Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN))
.put(Material.WHITE_SHULKER_BOX, Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN))
.put(Material.ORANGE_SHULKER_BOX, Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN))
.put(Material.MAGENTA_SHULKER_BOX, Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN))
.put(Material.LIGHT_BLUE_SHULKER_BOX, Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN))
.put(Material.YELLOW_SHULKER_BOX, Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN))
.put(Material.LIME_SHULKER_BOX, Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN))
.put(Material.PINK_SHULKER_BOX, Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN))
.put(Material.GRAY_SHULKER_BOX, Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN))
.put(Material.LIGHT_GRAY_SHULKER_BOX, Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN))
.put(Material.CYAN_SHULKER_BOX, Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN))
.put(Material.PURPLE_SHULKER_BOX, Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN))
.put(Material.BLUE_SHULKER_BOX, Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN))
.put(Material.BROWN_SHULKER_BOX, Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN))
.put(Material.GREEN_SHULKER_BOX, Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN))
.put(Material.RED_SHULKER_BOX, Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN))
.put(Material.BLACK_SHULKER_BOX, Arrays.asList(BlockFace.NORTH, BlockFace.EAST, BlockFace.SOUTH, BlockFace.WEST, BlockFace.UP, BlockFace.DOWN))
.put(Material.WHITE_GLAZED_TERRACOTTA, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.ORANGE_GLAZED_TERRACOTTA, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.MAGENTA_GLAZED_TERRACOTTA, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.LIGHT_BLUE_GLAZED_TERRACOTTA, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.YELLOW_GLAZED_TERRACOTTA, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.LIME_GLAZED_TERRACOTTA, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.PINK_GLAZED_TERRACOTTA, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.GRAY_GLAZED_TERRACOTTA, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.LIGHT_GRAY_GLAZED_TERRACOTTA, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.CYAN_GLAZED_TERRACOTTA, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.PURPLE_GLAZED_TERRACOTTA, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.BLUE_GLAZED_TERRACOTTA, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.BROWN_GLAZED_TERRACOTTA, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.GREEN_GLAZED_TERRACOTTA, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.RED_GLAZED_TERRACOTTA, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.BLACK_GLAZED_TERRACOTTA, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.DEAD_TUBE_CORAL_WALL_FAN, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.DEAD_BRAIN_CORAL_WALL_FAN, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.DEAD_BUBBLE_CORAL_WALL_FAN, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.DEAD_FIRE_CORAL_WALL_FAN, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.DEAD_HORN_CORAL_WALL_FAN, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.TUBE_CORAL_WALL_FAN, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.BRAIN_CORAL_WALL_FAN, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.BUBBLE_CORAL_WALL_FAN, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.FIRE_CORAL_WALL_FAN, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
.put(Material.HORN_CORAL_WALL_FAN, Arrays.asList(BlockFace.NORTH, BlockFace.SOUTH, BlockFace.WEST, BlockFace.EAST))
;
DIRECTIONAL_POSSIBLE_FACES = possibleFacesBuilder.build();
YamlConfiguration stateBaseIdsYml = YamlConfiguration.loadConfiguration(new InputStreamReader(GeneratedFlatteningData.class.getClassLoader().getResourceAsStream("builtin/stateBaseIds.yml")));
stateBaseIdsYml.getIntegerList("stateBaseIds").toArray(STATE_BASE_IDS);
ImmutableBiMap.Builder<Integer, Material> materialIdMapBuilder = ImmutableBiMap.builder();
materialIdMapBuilder
.put(0, Material.AIR)
.put(1, Material.STONE)
.put(2, Material.GRANITE)
.put(3, Material.POLISHED_GRANITE)
.put(4, Material.DIORITE)
.put(5, Material.POLISHED_DIORITE)
.put(6, Material.ANDESITE)
.put(7, Material.POLISHED_ANDESITE)
.put(8, Material.GRASS_BLOCK)
.put(10, Material.DIRT)
.put(11, Material.COARSE_DIRT)
.put(12, Material.PODZOL)
.put(14, Material.COBBLESTONE)
.put(15, Material.OAK_PLANKS)
.put(16, Material.SPRUCE_PLANKS)
.put(17, Material.BIRCH_PLANKS)
.put(18, Material.JUNGLE_PLANKS)
.put(19, Material.ACACIA_PLANKS)
.put(20, Material.DARK_OAK_PLANKS)
.put(21, Material.OAK_SAPLING)
.put(23, Material.SPRUCE_SAPLING)
.put(25, Material.BIRCH_SAPLING)
.put(27, Material.JUNGLE_SAPLING)
.put(29, Material.ACACIA_SAPLING)
.put(31, Material.DARK_OAK_SAPLING)
.put(33, Material.BEDROCK)
.put(34, Material.WATER)
.put(50, Material.LAVA)
.put(66, Material.SAND)
.put(67, Material.RED_SAND)
.put(68, Material.GRAVEL)
.put(69, Material.GOLD_ORE)
.put(70, Material.IRON_ORE)
.put(71, Material.COAL_ORE)
.put(72, Material.OAK_LOG)
.put(75, Material.SPRUCE_LOG)
.put(78, Material.BIRCH_LOG)
.put(81, Material.JUNGLE_LOG)
.put(84, Material.ACACIA_LOG)
.put(87, Material.DARK_OAK_LOG)
.put(90, Material.STRIPPED_SPRUCE_LOG)
.put(93, Material.STRIPPED_BIRCH_LOG)
.put(96, Material.STRIPPED_JUNGLE_LOG)
.put(99, Material.STRIPPED_ACACIA_LOG)
.put(102, Material.STRIPPED_DARK_OAK_LOG)
.put(105, Material.STRIPPED_OAK_LOG)
.put(108, Material.OAK_WOOD)
.put(111, Material.SPRUCE_WOOD)
.put(114, Material.BIRCH_WOOD)
.put(117, Material.JUNGLE_WOOD)
.put(120, Material.ACACIA_WOOD)
.put(123, Material.DARK_OAK_WOOD)
.put(126, Material.STRIPPED_OAK_WOOD)
.put(129, Material.STRIPPED_SPRUCE_WOOD)
.put(132, Material.STRIPPED_BIRCH_WOOD)
.put(135, Material.STRIPPED_JUNGLE_WOOD)
.put(138, Material.STRIPPED_ACACIA_WOOD)
.put(141, Material.STRIPPED_DARK_OAK_WOOD)
.put(144, Material.OAK_LEAVES)
.put(158, Material.SPRUCE_LEAVES)
.put(172, Material.BIRCH_LEAVES)
.put(186, Material.JUNGLE_LEAVES)
.put(200, Material.ACACIA_LEAVES)
.put(214, Material.DARK_OAK_LEAVES)
.put(228, Material.SPONGE)
.put(229, Material.WET_SPONGE)
.put(230, Material.GLASS)
.put(231, Material.LAPIS_ORE)
.put(232, Material.LAPIS_BLOCK)
.put(233, Material.DISPENSER)
.put(245, Material.SANDSTONE)
.put(246, Material.CHISELED_SANDSTONE)
.put(247, Material.CUT_SANDSTONE)
.put(248, Material.NOTE_BLOCK)
.put(748, Material.WHITE_BED)
.put(764, Material.ORANGE_BED)
.put(780, Material.MAGENTA_BED)
.put(796, Material.LIGHT_BLUE_BED)
.put(812, Material.YELLOW_BED)
.put(828, Material.LIME_BED)
.put(844, Material.PINK_BED)
.put(860, Material.GRAY_BED)
.put(876, Material.LIGHT_GRAY_BED)
.put(892, Material.CYAN_BED)
.put(908, Material.PURPLE_BED)
.put(924, Material.BLUE_BED)
.put(940, Material.BROWN_BED)
.put(956, Material.GREEN_BED)
.put(972, Material.RED_BED)
.put(988, Material.BLACK_BED)
.put(1004, Material.POWERED_RAIL)
.put(1016, Material.DETECTOR_RAIL)
.put(1028, Material.STICKY_PISTON)
.put(1040, Material.COBWEB)
.put(1041, Material.GRASS)
.put(1042, Material.FERN)
.put(1043, Material.DEAD_BUSH)
.put(1044, Material.SEAGRASS)
.put(1045, Material.TALL_SEAGRASS)
.put(1047, Material.PISTON)
.put(1059, Material.PISTON_HEAD)
.put(1083, Material.WHITE_WOOL)
.put(1084, Material.ORANGE_WOOL)
.put(1085, Material.MAGENTA_WOOL)
.put(1086, Material.LIGHT_BLUE_WOOL)
.put(1087, Material.YELLOW_WOOL)
.put(1088, Material.LIME_WOOL)
.put(1089, Material.PINK_WOOL)
.put(1090, Material.GRAY_WOOL)
.put(1091, Material.LIGHT_GRAY_WOOL)
.put(1092, Material.CYAN_WOOL)
.put(1093, Material.PURPLE_WOOL)
.put(1094, Material.BLUE_WOOL)
.put(1095, Material.BROWN_WOOL)
.put(1096, Material.GREEN_WOOL)
.put(1097, Material.RED_WOOL)
.put(1098, Material.BLACK_WOOL)
.put(1099, Material.MOVING_PISTON)
.put(1111, Material.DANDELION)
.put(1112, Material.POPPY)
.put(1113, Material.BLUE_ORCHID)
.put(1114, Material.ALLIUM)
.put(1115, Material.AZURE_BLUET)
.put(1116, Material.RED_TULIP)
.put(1117, Material.ORANGE_TULIP)
.put(1118, Material.WHITE_TULIP)
.put(1119, Material.PINK_TULIP)
.put(1120, Material.OXEYE_DAISY)
.put(1121, Material.BROWN_MUSHROOM)
.put(1122, Material.RED_MUSHROOM)
.put(1123, Material.GOLD_BLOCK)
.put(1124, Material.IRON_BLOCK)
.put(1125, Material.BRICKS)
.put(1126, Material.TNT)
.put(1127, Material.BOOKSHELF)
.put(1128, Material.MOSSY_COBBLESTONE)
.put(1129, Material.OBSIDIAN)
.put(1130, Material.TORCH)
.put(1131, Material.WALL_TORCH)
.put(1135, Material.FIRE)
.put(1647, Material.SPAWNER)
.put(1648, Material.OAK_STAIRS)
.put(1728, Material.CHEST)
.put(1752, Material.REDSTONE_WIRE)
.put(3048, Material.DIAMOND_ORE)
.put(3049, Material.DIAMOND_BLOCK)
.put(3050, Material.CRAFTING_TABLE)
.put(3051, Material.WHEAT)
.put(3059, Material.FARMLAND)
.put(3067, Material.FURNACE)
.put(3075, Material.SIGN)
.put(3107, Material.OAK_DOOR)
.put(3171, Material.LADDER)
.put(3179, Material.RAIL)
.put(3189, Material.COBBLESTONE_STAIRS)
.put(3269, Material.WALL_SIGN)
.put(3277, Material.LEVER)
.put(3301, Material.STONE_PRESSURE_PLATE)
.put(3303, Material.IRON_DOOR)
.put(3367, Material.OAK_PRESSURE_PLATE)
.put(3369, Material.SPRUCE_PRESSURE_PLATE)
.put(3371, Material.BIRCH_PRESSURE_PLATE)
.put(3373, Material.JUNGLE_PRESSURE_PLATE)
.put(3375, Material.ACACIA_PRESSURE_PLATE)
.put(3377, Material.DARK_OAK_PRESSURE_PLATE)
.put(3379, Material.REDSTONE_ORE)
.put(3381, Material.REDSTONE_TORCH)
.put(3383, Material.REDSTONE_WALL_TORCH)
.put(3391, Material.STONE_BUTTON)
.put(3415, Material.SNOW)
.put(3423, Material.ICE)
.put(3424, Material.SNOW_BLOCK)
.put(3425, Material.CACTUS)
.put(3441, Material.CLAY)
.put(3442, Material.SUGAR_CANE)
.put(3458, Material.JUKEBOX)
.put(3460, Material.OAK_FENCE)
.put(3492, Material.PUMPKIN)
.put(3493, Material.NETHERRACK)
.put(3494, Material.SOUL_SAND)
.put(3495, Material.GLOWSTONE)
.put(3496, Material.NETHER_PORTAL)
.put(3498, Material.CARVED_PUMPKIN)
.put(3502, Material.JACK_O_LANTERN)
.put(3506, Material.CAKE)
.put(3513, Material.REPEATER)
.put(3577, Material.WHITE_STAINED_GLASS)
.put(3578, Material.ORANGE_STAINED_GLASS)
.put(3579, Material.MAGENTA_STAINED_GLASS)
.put(3580, Material.LIGHT_BLUE_STAINED_GLASS)
.put(3581, Material.YELLOW_STAINED_GLASS)
.put(3582, Material.LIME_STAINED_GLASS)
.put(3583, Material.PINK_STAINED_GLASS)
.put(3584, Material.GRAY_STAINED_GLASS)
.put(3585, Material.LIGHT_GRAY_STAINED_GLASS)
.put(3586, Material.CYAN_STAINED_GLASS)
.put(3587, Material.PURPLE_STAINED_GLASS)
.put(3588, Material.BLUE_STAINED_GLASS)
.put(3589, Material.BROWN_STAINED_GLASS)
.put(3590, Material.GREEN_STAINED_GLASS)
.put(3591, Material.RED_STAINED_GLASS)
.put(3592, Material.BLACK_STAINED_GLASS)
.put(3593, Material.OAK_TRAPDOOR)
.put(3657, Material.SPRUCE_TRAPDOOR)
.put(3721, Material.BIRCH_TRAPDOOR)
.put(3785, Material.JUNGLE_TRAPDOOR)
.put(3849, Material.ACACIA_TRAPDOOR)
.put(3913, Material.DARK_OAK_TRAPDOOR)
.put(3977, Material.INFESTED_STONE)
.put(3978, Material.INFESTED_COBBLESTONE)
.put(3979, Material.INFESTED_STONE_BRICKS)
.put(3980, Material.INFESTED_MOSSY_STONE_BRICKS)
.put(3981, Material.INFESTED_CRACKED_STONE_BRICKS)
.put(3982, Material.INFESTED_CHISELED_STONE_BRICKS)
.put(3983, Material.STONE_BRICKS)
.put(3984, Material.MOSSY_STONE_BRICKS)
.put(3985, Material.CRACKED_STONE_BRICKS)
.put(3986, Material.CHISELED_STONE_BRICKS)
.put(3987, Material.BROWN_MUSHROOM_BLOCK)
.put(4051, Material.RED_MUSHROOM_BLOCK)
.put(4115, Material.MUSHROOM_STEM)
.put(4179, Material.IRON_BARS)
.put(4211, Material.GLASS_PANE)
.put(4243, Material.MELON)
.put(4244, Material.ATTACHED_PUMPKIN_STEM)
.put(4248, Material.ATTACHED_MELON_STEM)
.put(4252, Material.PUMPKIN_STEM)
.put(4260, Material.MELON_STEM)
.put(4268, Material.VINE)
.put(4300, Material.OAK_FENCE_GATE)
.put(4332, Material.BRICK_STAIRS)
.put(4412, Material.STONE_BRICK_STAIRS)
.put(4492, Material.MYCELIUM)
.put(4494, Material.LILY_PAD)
.put(4495, Material.NETHER_BRICKS)
.put(4496, Material.NETHER_BRICK_FENCE)
.put(4528, Material.NETHER_BRICK_STAIRS)
.put(4608, Material.NETHER_WART)
.put(4612, Material.ENCHANTING_TABLE)
.put(4613, Material.BREWING_STAND)
.put(4621, Material.CAULDRON)
.put(4625, Material.END_PORTAL)
.put(4626, Material.END_PORTAL_FRAME)
.put(4634, Material.END_STONE)
.put(4635, Material.DRAGON_EGG)
.put(4636, Material.REDSTONE_LAMP)
.put(4638, Material.COCOA)
.put(4650, Material.SANDSTONE_STAIRS)
.put(4730, Material.EMERALD_ORE)
.put(4731, Material.ENDER_CHEST)
.put(4739, Material.TRIPWIRE_HOOK)
.put(4755, Material.TRIPWIRE)
.put(4883, Material.EMERALD_BLOCK)
.put(4884, Material.SPRUCE_STAIRS)
.put(4964, Material.BIRCH_STAIRS)
.put(5044, Material.JUNGLE_STAIRS)
.put(5124, Material.COMMAND_BLOCK)
.put(5136, Material.BEACON)
.put(5137, Material.COBBLESTONE_WALL)
.put(5201, Material.MOSSY_COBBLESTONE_WALL)
.put(5265, Material.FLOWER_POT)
.put(5266, Material.POTTED_OAK_SAPLING)
.put(5267, Material.POTTED_SPRUCE_SAPLING)
.put(5268, Material.POTTED_BIRCH_SAPLING)
.put(5269, Material.POTTED_JUNGLE_SAPLING)
.put(5270, Material.POTTED_ACACIA_SAPLING)
.put(5271, Material.POTTED_DARK_OAK_SAPLING)
.put(5272, Material.POTTED_FERN)
.put(5273, Material.POTTED_DANDELION)
.put(5274, Material.POTTED_POPPY)
.put(5275, Material.POTTED_BLUE_ORCHID)
.put(5276, Material.POTTED_ALLIUM)
.put(5277, Material.POTTED_AZURE_BLUET)
.put(5278, Material.POTTED_RED_TULIP)
.put(5279, Material.POTTED_ORANGE_TULIP)
.put(5280, Material.POTTED_WHITE_TULIP)
.put(5281, Material.POTTED_PINK_TULIP)
.put(5282, Material.POTTED_OXEYE_DAISY)
.put(5283, Material.POTTED_RED_MUSHROOM)
.put(5284, Material.POTTED_BROWN_MUSHROOM)
.put(5285, Material.POTTED_DEAD_BUSH)
.put(5286, Material.POTTED_CACTUS)
.put(5287, Material.CARROTS)
.put(5295, Material.POTATOES)
.put(5303, Material.OAK_BUTTON)
.put(5327, Material.SPRUCE_BUTTON)
.put(5351, Material.BIRCH_BUTTON)
.put(5375, Material.JUNGLE_BUTTON)
.put(5399, Material.ACACIA_BUTTON)
.put(5423, Material.DARK_OAK_BUTTON)
.put(5447, Material.SKELETON_WALL_SKULL)
.put(5451, Material.SKELETON_SKULL)
.put(5467, Material.WITHER_SKELETON_WALL_SKULL)
.put(5471, Material.WITHER_SKELETON_SKULL)
.put(5487, Material.ZOMBIE_WALL_HEAD)
.put(5491, Material.ZOMBIE_HEAD)
.put(5507, Material.PLAYER_WALL_HEAD)
.put(5511, Material.PLAYER_HEAD)
.put(5527, Material.CREEPER_WALL_HEAD)
.put(5531, Material.CREEPER_HEAD)
.put(5547, Material.DRAGON_WALL_HEAD)
.put(5551, Material.DRAGON_HEAD)
.put(5567, Material.ANVIL)
.put(5571, Material.CHIPPED_ANVIL)
.put(5575, Material.DAMAGED_ANVIL)
.put(5579, Material.TRAPPED_CHEST)
.put(5603, Material.LIGHT_WEIGHTED_PRESSURE_PLATE)
.put(5619, Material.HEAVY_WEIGHTED_PRESSURE_PLATE)
.put(5635, Material.COMPARATOR)
.put(5651, Material.DAYLIGHT_DETECTOR)
.put(5683, Material.REDSTONE_BLOCK)
.put(5684, Material.NETHER_QUARTZ_ORE)
.put(5685, Material.HOPPER)
.put(5695, Material.QUARTZ_BLOCK)
.put(5696, Material.CHISELED_QUARTZ_BLOCK)
.put(5697, Material.QUARTZ_PILLAR)
.put(5700, Material.QUARTZ_STAIRS)
.put(5780, Material.ACTIVATOR_RAIL)
.put(5792, Material.DROPPER)
.put(5804, Material.WHITE_TERRACOTTA)
.put(5805, Material.ORANGE_TERRACOTTA)
.put(5806, Material.MAGENTA_TERRACOTTA)
.put(5807, Material.LIGHT_BLUE_TERRACOTTA)
.put(5808, Material.YELLOW_TERRACOTTA)
.put(5809, Material.LIME_TERRACOTTA)
.put(5810, Material.PINK_TERRACOTTA)
.put(5811, Material.GRAY_TERRACOTTA)
.put(5812, Material.LIGHT_GRAY_TERRACOTTA)
.put(5813, Material.CYAN_TERRACOTTA)
.put(5814, Material.PURPLE_TERRACOTTA)
.put(5815, Material.BLUE_TERRACOTTA)
.put(5816, Material.BROWN_TERRACOTTA)
.put(5817, Material.GREEN_TERRACOTTA)
.put(5818, Material.RED_TERRACOTTA)
.put(5819, Material.BLACK_TERRACOTTA)
.put(5820, Material.WHITE_STAINED_GLASS_PANE)
.put(5852, Material.ORANGE_STAINED_GLASS_PANE)
.put(5884, Material.MAGENTA_STAINED_GLASS_PANE)
.put(5916, Material.LIGHT_BLUE_STAINED_GLASS_PANE)
.put(5948, Material.YELLOW_STAINED_GLASS_PANE)
.put(5980, Material.LIME_STAINED_GLASS_PANE)
.put(6012, Material.PINK_STAINED_GLASS_PANE)
.put(6044, Material.GRAY_STAINED_GLASS_PANE)
.put(6076, Material.LIGHT_GRAY_STAINED_GLASS_PANE)
.put(6108, Material.CYAN_STAINED_GLASS_PANE)
.put(6140, Material.PURPLE_STAINED_GLASS_PANE)
.put(6172, Material.BLUE_STAINED_GLASS_PANE)
.put(6204, Material.BROWN_STAINED_GLASS_PANE)
.put(6236, Material.GREEN_STAINED_GLASS_PANE)
.put(6268, Material.RED_STAINED_GLASS_PANE)
.put(6300, Material.BLACK_STAINED_GLASS_PANE)
.put(6332, Material.ACACIA_STAIRS)
.put(6412, Material.DARK_OAK_STAIRS)
.put(6492, Material.SLIME_BLOCK)
.put(6493, Material.BARRIER)
.put(6494, Material.IRON_TRAPDOOR)
.put(6558, Material.PRISMARINE)
.put(6559, Material.PRISMARINE_BRICKS)
.put(6560, Material.DARK_PRISMARINE)
.put(6561, Material.PRISMARINE_STAIRS)
.put(6641, Material.PRISMARINE_BRICK_STAIRS)
.put(6721, Material.DARK_PRISMARINE_STAIRS)
.put(6801, Material.PRISMARINE_SLAB)
.put(6807, Material.PRISMARINE_BRICK_SLAB)
.put(6813, Material.DARK_PRISMARINE_SLAB)
.put(6819, Material.SEA_LANTERN)
.put(6820, Material.HAY_BLOCK)
.put(6823, Material.WHITE_CARPET)
.put(6824, Material.ORANGE_CARPET)
.put(6825, Material.MAGENTA_CARPET)
.put(6826, Material.LIGHT_BLUE_CARPET)
.put(6827, Material.YELLOW_CARPET)
.put(6828, Material.LIME_CARPET)
.put(6829, Material.PINK_CARPET)
.put(6830, Material.GRAY_CARPET)
.put(6831, Material.LIGHT_GRAY_CARPET)
.put(6832, Material.CYAN_CARPET)
.put(6833, Material.PURPLE_CARPET)
.put(6834, Material.BLUE_CARPET)
.put(6835, Material.BROWN_CARPET)
.put(6836, Material.GREEN_CARPET)
.put(6837, Material.RED_CARPET)
.put(6838, Material.BLACK_CARPET)
.put(6839, Material.TERRACOTTA)
.put(6840, Material.COAL_BLOCK)
.put(6841, Material.PACKED_ICE)
.put(6842, Material.SUNFLOWER)
.put(6844, Material.LILAC)
.put(6846, Material.ROSE_BUSH)
.put(6848, Material.PEONY)
.put(6850, Material.TALL_GRASS)
.put(6852, Material.LARGE_FERN)
.put(6854, Material.WHITE_BANNER)
.put(6870, Material.ORANGE_BANNER)
.put(6886, Material.MAGENTA_BANNER)
.put(6902, Material.LIGHT_BLUE_BANNER)
.put(6918, Material.YELLOW_BANNER)
.put(6934, Material.LIME_BANNER)
.put(6950, Material.PINK_BANNER)
.put(6966, Material.GRAY_BANNER)
.put(6982, Material.LIGHT_GRAY_BANNER)
.put(6998, Material.CYAN_BANNER)
.put(7014, Material.PURPLE_BANNER)
.put(7030, Material.BLUE_BANNER)
.put(7046, Material.BROWN_BANNER)
.put(7062, Material.GREEN_BANNER)
.put(7078, Material.RED_BANNER)
.put(7094, Material.BLACK_BANNER)
.put(7110, Material.WHITE_WALL_BANNER)
.put(7114, Material.ORANGE_WALL_BANNER)
.put(7118, Material.MAGENTA_WALL_BANNER)
.put(7122, Material.LIGHT_BLUE_WALL_BANNER)
.put(7126, Material.YELLOW_WALL_BANNER)
.put(7130, Material.LIME_WALL_BANNER)
.put(7134, Material.PINK_WALL_BANNER)
.put(7138, Material.GRAY_WALL_BANNER)
.put(7142, Material.LIGHT_GRAY_WALL_BANNER)
.put(7146, Material.CYAN_WALL_BANNER)
.put(7150, Material.PURPLE_WALL_BANNER)
.put(7154, Material.BLUE_WALL_BANNER)
.put(7158, Material.BROWN_WALL_BANNER)
.put(7162, Material.GREEN_WALL_BANNER)
.put(7166, Material.RED_WALL_BANNER)
.put(7170, Material.BLACK_WALL_BANNER)
.put(7174, Material.RED_SANDSTONE)
.put(7175, Material.CHISELED_RED_SANDSTONE)
.put(7176, Material.CUT_RED_SANDSTONE)
.put(7177, Material.RED_SANDSTONE_STAIRS)
.put(7257, Material.OAK_SLAB)
.put(7263, Material.SPRUCE_SLAB)
.put(7269, Material.BIRCH_SLAB)
.put(7275, Material.JUNGLE_SLAB)
.put(7281, Material.ACACIA_SLAB)
.put(7287, Material.DARK_OAK_SLAB)
.put(7293, Material.STONE_SLAB)
.put(7299, Material.SANDSTONE_SLAB)
.put(7305, Material.PETRIFIED_OAK_SLAB)
.put(7311, Material.COBBLESTONE_SLAB)
.put(7317, Material.BRICK_SLAB)
.put(7323, Material.STONE_BRICK_SLAB)
.put(7329, Material.NETHER_BRICK_SLAB)
.put(7335, Material.QUARTZ_SLAB)
.put(7341, Material.RED_SANDSTONE_SLAB)
.put(7347, Material.PURPUR_SLAB)
.put(7353, Material.SMOOTH_STONE)
.put(7354, Material.SMOOTH_SANDSTONE)
.put(7355, Material.SMOOTH_QUARTZ)
.put(7356, Material.SMOOTH_RED_SANDSTONE)
.put(7357, Material.SPRUCE_FENCE_GATE)
.put(7389, Material.BIRCH_FENCE_GATE)
.put(7421, Material.JUNGLE_FENCE_GATE)
.put(7453, Material.ACACIA_FENCE_GATE)
.put(7485, Material.DARK_OAK_FENCE_GATE)
.put(7517, Material.SPRUCE_FENCE)
.put(7549, Material.BIRCH_FENCE)
.put(7581, Material.JUNGLE_FENCE)
.put(7613, Material.ACACIA_FENCE)
.put(7645, Material.DARK_OAK_FENCE)
.put(7677, Material.SPRUCE_DOOR)
.put(7741, Material.BIRCH_DOOR)
.put(7805, Material.JUNGLE_DOOR)
.put(7869, Material.ACACIA_DOOR)
.put(7933, Material.DARK_OAK_DOOR)
.put(7997, Material.END_ROD)
.put(8003, Material.CHORUS_PLANT)
.put(8067, Material.CHORUS_FLOWER)
.put(8073, Material.PURPUR_BLOCK)
.put(8074, Material.PURPUR_PILLAR)
.put(8077, Material.PURPUR_STAIRS)
.put(8157, Material.END_STONE_BRICKS)
.put(8158, Material.BEETROOTS)
.put(8162, Material.GRASS_PATH)
.put(8163, Material.END_GATEWAY)
.put(8164, Material.REPEATING_COMMAND_BLOCK)
.put(8176, Material.CHAIN_COMMAND_BLOCK)
.put(8188, Material.FROSTED_ICE)
.put(8192, Material.MAGMA_BLOCK)
.put(8193, Material.NETHER_WART_BLOCK)
.put(8194, Material.RED_NETHER_BRICKS)
.put(8195, Material.BONE_BLOCK)
.put(8198, Material.STRUCTURE_VOID)
.put(8199, Material.OBSERVER)
.put(8211, Material.SHULKER_BOX)
.put(8217, Material.WHITE_SHULKER_BOX)
.put(8223, Material.ORANGE_SHULKER_BOX)
.put(8229, Material.MAGENTA_SHULKER_BOX)
.put(8235, Material.LIGHT_BLUE_SHULKER_BOX)
.put(8241, Material.YELLOW_SHULKER_BOX)
.put(8247, Material.LIME_SHULKER_BOX)
.put(8253, Material.PINK_SHULKER_BOX)
.put(8259, Material.GRAY_SHULKER_BOX)
.put(8265, Material.LIGHT_GRAY_SHULKER_BOX)
.put(8271, Material.CYAN_SHULKER_BOX)
.put(8277, Material.PURPLE_SHULKER_BOX)
.put(8283, Material.BLUE_SHULKER_BOX)
.put(8289, Material.BROWN_SHULKER_BOX)
.put(8295, Material.GREEN_SHULKER_BOX)
.put(8301, Material.RED_SHULKER_BOX)
.put(8307, Material.BLACK_SHULKER_BOX)
.put(8313, Material.WHITE_GLAZED_TERRACOTTA)
.put(8317, Material.ORANGE_GLAZED_TERRACOTTA)
.put(8321, Material.MAGENTA_GLAZED_TERRACOTTA)
.put(8325, Material.LIGHT_BLUE_GLAZED_TERRACOTTA)
.put(8329, Material.YELLOW_GLAZED_TERRACOTTA)
.put(8333, Material.LIME_GLAZED_TERRACOTTA)
.put(8337, Material.PINK_GLAZED_TERRACOTTA)
.put(8341, Material.GRAY_GLAZED_TERRACOTTA)
.put(8345, Material.LIGHT_GRAY_GLAZED_TERRACOTTA)
.put(8349, Material.CYAN_GLAZED_TERRACOTTA)
.put(8353, Material.PURPLE_GLAZED_TERRACOTTA)
.put(8357, Material.BLUE_GLAZED_TERRACOTTA)
.put(8361, Material.BROWN_GLAZED_TERRACOTTA)
.put(8365, Material.GREEN_GLAZED_TERRACOTTA)
.put(8369, Material.RED_GLAZED_TERRACOTTA)
.put(8373, Material.BLACK_GLAZED_TERRACOTTA)
.put(8377, Material.WHITE_CONCRETE)
.put(8378, Material.ORANGE_CONCRETE)
.put(8379, Material.MAGENTA_CONCRETE)
.put(8380, Material.LIGHT_BLUE_CONCRETE)
.put(8381, Material.YELLOW_CONCRETE)
.put(8382, Material.LIME_CONCRETE)
.put(8383, Material.PINK_CONCRETE)
.put(8384, Material.GRAY_CONCRETE)
.put(8385, Material.LIGHT_GRAY_CONCRETE)
.put(8386, Material.CYAN_CONCRETE)
.put(8387, Material.PURPLE_CONCRETE)
.put(8388, Material.BLUE_CONCRETE)
.put(8389, Material.BROWN_CONCRETE)
.put(8390, Material.GREEN_CONCRETE)
.put(8391, Material.RED_CONCRETE)
.put(8392, Material.BLACK_CONCRETE)
.put(8393, Material.WHITE_CONCRETE_POWDER)
.put(8394, Material.ORANGE_CONCRETE_POWDER)
.put(8395, Material.MAGENTA_CONCRETE_POWDER)
.put(8396, Material.LIGHT_BLUE_CONCRETE_POWDER)
.put(8397, Material.YELLOW_CONCRETE_POWDER)
.put(8398, Material.LIME_CONCRETE_POWDER)
.put(8399, Material.PINK_CONCRETE_POWDER)
.put(8400, Material.GRAY_CONCRETE_POWDER)
.put(8401, Material.LIGHT_GRAY_CONCRETE_POWDER)
.put(8402, Material.CYAN_CONCRETE_POWDER)
.put(8403, Material.PURPLE_CONCRETE_POWDER)
.put(8404, Material.BLUE_CONCRETE_POWDER)
.put(8405, Material.BROWN_CONCRETE_POWDER)
.put(8406, Material.GREEN_CONCRETE_POWDER)
.put(8407, Material.RED_CONCRETE_POWDER)
.put(8408, Material.BLACK_CONCRETE_POWDER)
.put(8409, Material.KELP)
.put(8435, Material.KELP_PLANT)
.put(8436, Material.DRIED_KELP_BLOCK)
.put(8437, Material.TURTLE_EGG)
.put(8449, Material.DEAD_TUBE_CORAL_BLOCK)
.put(8450, Material.DEAD_BRAIN_CORAL_BLOCK)
.put(8451, Material.DEAD_BUBBLE_CORAL_BLOCK)
.put(8452, Material.DEAD_FIRE_CORAL_BLOCK)
.put(8453, Material.DEAD_HORN_CORAL_BLOCK)
.put(8454, Material.TUBE_CORAL_BLOCK)
.put(8455, Material.BRAIN_CORAL_BLOCK)
.put(8456, Material.BUBBLE_CORAL_BLOCK)
.put(8457, Material.FIRE_CORAL_BLOCK)
.put(8458, Material.HORN_CORAL_BLOCK)
.put(8459, Material.TUBE_CORAL)
.put(8460, Material.BRAIN_CORAL)
.put(8461, Material.BUBBLE_CORAL)
.put(8462, Material.FIRE_CORAL)
.put(8463, Material.HORN_CORAL)
.put(8464, Material.DEAD_TUBE_CORAL_WALL_FAN)
.put(8472, Material.DEAD_BRAIN_CORAL_WALL_FAN)
.put(8480, Material.DEAD_BUBBLE_CORAL_WALL_FAN)
.put(8488, Material.DEAD_FIRE_CORAL_WALL_FAN)
.put(8496, Material.DEAD_HORN_CORAL_WALL_FAN)
.put(8504, Material.TUBE_CORAL_WALL_FAN)
.put(8512, Material.BRAIN_CORAL_WALL_FAN)
.put(8520, Material.BUBBLE_CORAL_WALL_FAN)
.put(8528, Material.FIRE_CORAL_WALL_FAN)
.put(8536, Material.HORN_CORAL_WALL_FAN)
.put(8544, Material.DEAD_TUBE_CORAL_FAN)
.put(8546, Material.DEAD_BRAIN_CORAL_FAN)
.put(8548, Material.DEAD_BUBBLE_CORAL_FAN)
.put(8550, Material.DEAD_FIRE_CORAL_FAN)
.put(8552, Material.DEAD_HORN_CORAL_FAN)
.put(8554, Material.TUBE_CORAL_FAN)
.put(8556, Material.BRAIN_CORAL_FAN)
.put(8558, Material.BUBBLE_CORAL_FAN)
.put(8560, Material.FIRE_CORAL_FAN)
.put(8562, Material.HORN_CORAL_FAN)
.put(8564, Material.SEA_PICKLE)
.put(8572, Material.BLUE_ICE)
.put(8573, Material.CONDUIT)
.put(8574, Material.VOID_AIR)
.put(8575, Material.CAVE_AIR)
.put(8576, Material.BUBBLE_COLUMN)
.put(8578, Material.STRUCTURE_BLOCK)
;
MATERIAL_ID_MAP = materialIdMapBuilder.build();
}
}