/*
* This file is part of NucleusFramework for Bukkit, licensed under the MIT License (MIT).
*
* Copyright (c) JCThePants (www.jcwhatever.com)
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
package com.jcwhatever.nucleus.utils.materials;
import com.google.common.collect.Multimap;
import com.google.common.collect.MultimapBuilder;
import com.jcwhatever.nucleus.utils.PreCon;
import org.bukkit.Material;
import java.util.Arrays;
import java.util.Collection;
import java.util.EnumSet;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
/**
* Utility to filter and identify {@link org.bukkit.Material}'s by
* property.
*/
public class Materials {
Materials() {}
private static Multimap<Material, MaterialProperty> _properties =
MultimapBuilder.enumKeys(Material.class).hashSetValues().build();
private static Multimap<MaterialProperty, Material> _materialsByProperty =
MultimapBuilder.hashKeys().enumSetValues(Material.class).build();
/**
* Determine if a material has a property.
*
* @param material The {@link org.bukkit.Material} to check.
* @param propertyName The name of the property to check.
*/
public static boolean hasProperty(Material material, String propertyName) {
PreCon.notNull(material);
PreCon.notNull(propertyName);
return hasProperty(material, MaterialProperty.forLookup(propertyName));
}
/**
* Determine if a material has a property.
*
* @param material The {@link org.bukkit.Material} to check.
* @param property The {@link MaterialProperty} to check.
*/
public static boolean hasProperty(Material material, MaterialProperty property) {
PreCon.notNull(material);
PreCon.notNull(property);
return _properties.get(material).contains(property);
}
/**
* Get all materials that match the specified properties.
*
* @param properties The {@link MaterialProperty}'s to check for.
*/
public static Set<Material> get(MaterialProperty... properties) {
PreCon.notNull(properties);
Set<Material> results = EnumSet.noneOf(Material.class);
for (MaterialProperty property : properties) {
Collection<Material> stored = _materialsByProperty.get(property);
Iterator<Material> iterator = results.iterator();
while (iterator.hasNext()) {
Material material = iterator.next();
if (!stored.contains(material))
iterator.remove();
}
results.addAll(stored);
}
return results;
}
/**
* Get all {@link MaterialProperty}'s of the specified {@link org.bukkit.Material}.
*
* @param material The material to check.
*/
public static Set<MaterialProperty> getProperties(Material material) {
PreCon.notNull(material);
Collection<MaterialProperty> stored = _properties.get(material);
return new HashSet<>(stored);
}
/**
* Removes {@link org.bukkit.Material}'s from the provided {@link java.util.Collection} that
* have the specified {@link MaterialProperty}'s.
*
* <p>Requires the provided collections iterator to implement the remove method.</p>
*
* @param materials The collection of materials to modify.
* @param properties The properties to remove from the collection.
*/
public static void remove(Collection<Material> materials,
MaterialProperty... properties) {
PreCon.notNull(materials);
PreCon.notNull(properties);
Iterator<Material> iterator = materials.iterator();
while (iterator.hasNext()) {
Material material = iterator.next();
for (MaterialProperty property : properties) {
if (hasProperty(material, property)) {
iterator.remove();
break;
}
}
}
}
/**
* Determine if a material is transparent.
*
* <p>This is the transparency that allows the player to walk through
* a block, not the visual transparency as in glass.</p>
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#TRANSPARENT
*/
public static boolean isTransparent(Material material) {
return hasProperty(material, MaterialProperty.TRANSPARENT);
}
/**
* Determine if a material is a surface.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#SURFACE
*/
public static boolean isSurface(Material material) {
return hasProperty(material, MaterialProperty.SURFACE);
}
/**
* Determine if a material is an openable boundary.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#OPENABLE_BOUNDARY
*/
public static boolean isOpenable(Material material) {
return hasProperty(material, MaterialProperty.OPENABLE_BOUNDARY);
}
/**
* Determine if a material is a door.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#DOOR
*/
public static boolean isDoor(Material material) {
return hasProperty(material, MaterialProperty.DOOR);
}
/**
* Determine if a material is a fence gate.
*
* @param material The {@link org.bukkit.Material} to check.
* @see MaterialProperty#FENCE_GATE
*/
public static boolean isFenceGate(Material material) {
return hasProperty(material, MaterialProperty.FENCE_GATE);
}
/**
* Determine if a material is a trap door.
*
* @param material The {@link org.bukkit.Material} to check.
* @see MaterialProperty#TRAPDOOR
*/
public static boolean isTrapDoor(Material material) {
return hasProperty(material, MaterialProperty.TRAPDOOR);
}
/**
* Determine if a material produces or is affected by redstone currents.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#REDSTONE_COMPONENT
*/
public static boolean isRedstoneCompatible(Material material) {
return hasProperty(material, MaterialProperty.REDSTONE_COMPONENT);
}
/**
* Determine if a material accepts a redstone input.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#REDSTONE_INPUT
*/
public static boolean isRedstoneInput(Material material) {
return hasProperty(material, MaterialProperty.REDSTONE_INPUT);
}
/**
* Determine if a material produces a redstone current.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#REDSTONE_OUTPUT
*/
public static boolean isRedstoneOutput(Material material) {
return hasProperty(material, MaterialProperty.REDSTONE_OUTPUT);
}
/**
* Determine if a material activates a redstone current when interacted
* with by a player.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#REDSTONE_SWITCH
*/
public static boolean isRedstoneSwitch(Material material) {
return hasProperty(material, MaterialProperty.REDSTONE_SWITCH);
}
/**
* Determine if a material is a button.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#BUTTON
*/
public static boolean isButton(Material material) {
return hasProperty(material, MaterialProperty.BUTTON);
}
/**
* Determine if a material is a pressure plate.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#PRESSURE_PLATE
*/
public static boolean isPressurePlate(Material material) {
return hasProperty(material, MaterialProperty.PRESSURE_PLATE);
}
/**
* Determine if a material is a lever.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#LEVER
*/
public static boolean isLever(Material material) {
return hasProperty(material, MaterialProperty.LEVER);
}
/**
* Determine if a material is leaves.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#LEAVES
*/
public static boolean isLeaves(Material material) {
return hasProperty(material, MaterialProperty.LEAVES);
}
/**
* Determine if a material is a log.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#LOG
*/
public static boolean isLog(Material material) {
return hasProperty(material, MaterialProperty.LOG);
}
/**
* Determine if a material is wearable by a player.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#WEARABLE
*/
public static boolean isWearable(Material material) {
return hasProperty(material, MaterialProperty.WEARABLE);
}
/**
* Determine if a material is player armor.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#ARMOR
*/
public static boolean isArmor(Material material) {
return hasProperty(material, MaterialProperty.ARMOR);
}
/**
* Determine if a material is a helmet.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#HELMET
*/
public static boolean isHelmet(Material material) {
return hasProperty(material, MaterialProperty.HELMET);
}
/**
* Determine if a material is a chestplate.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#CHESTPLATE
*/
public static boolean isChestplate(Material material) {
return hasProperty(material, MaterialProperty.CHESTPLATE);
}
/**
* Determine if a material is leggings.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#LEGGINGS
*/
public static boolean isLeggings(Material material) {
return hasProperty(material, MaterialProperty.LEGGINGS);
}
/**
* Determine if a material is boots.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#BOOTS
*/
public static boolean isBoots(Material material) {
return hasProperty(material, MaterialProperty.BOOTS);
}
/**
* Determine if a material is a weapon.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#WEAPON
*/
public static boolean isWeapon(Material material) {
return hasProperty(material, MaterialProperty.WEAPON);
}
/**
* Determine if a material is a tool.
*
* @param material The {@link org.bukkit.Material} to check.
* @see MaterialProperty#TOOL
*/
public static boolean isTool(Material material) {
return hasProperty(material, MaterialProperty.TOOL);
}
/**
* Determine if a material is a mining tool.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#MINING_TOOL
*/
public static boolean isMiningTool(Material material) {
return hasProperty(material, MaterialProperty.MINING_TOOL);
}
/**
* Determine if a material is a shovel.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#SHOVEL
*/
public static boolean isShovel(Material material) {
return hasProperty(material, MaterialProperty.SHOVEL);
}
/**
* Determine if a material is a hoe.
*
* @param material The {@link org.bukkit.Material} to check.
* @see MaterialProperty#HOE
*/
public static boolean isHoe(Material material) {
return hasProperty(material, MaterialProperty.HOE);
}
/**
* Determine if a material is an axe.
*
* @param material The {@link org.bukkit.Material} to check.
* @see MaterialProperty#AXE
*/
public static boolean isAxe(Material material) {
return hasProperty(material, MaterialProperty.AXE);
}
/**
* Determine if a material is a pickaxe.
*
* @param material The {@link org.bukkit.Material} to check.
* @see MaterialProperty#PICKAXE
*/
public static boolean isPickaxe(Material material) {
return hasProperty(material, MaterialProperty.PICKAXE);
}
/**
* Determine if a material is based on wood.
*
* @param material The {@link org.bukkit.Material} to check.
* @see MaterialProperty#WOOD_BASED
*/
public static boolean isWoodBased(Material material) {
return hasProperty(material, MaterialProperty.WOOD_BASED);
}
/**
* Determine if a material is based on stone.
*
* @param material The {@link org.bukkit.Material} to check.
* @see MaterialProperty#STONE_BASED
*/
public static boolean isStoneBased(Material material) {
return hasProperty(material, MaterialProperty.STONE_BASED);
}
/**
* Determine if a material is based on leather.
*
* @param material The {@link org.bukkit.Material} to check.
* @see MaterialProperty#LEATHER_BASED
*/
public static boolean isLeatherBased(Material material) {
return hasProperty(material, MaterialProperty.LEATHER_BASED);
}
/**
* Determine if a material is based on iron.
*
* @param material The {@link org.bukkit.Material} to check.
* @see MaterialProperty#IRON_BASED
*/
public static boolean isIronBased(Material material) {
return hasProperty(material, MaterialProperty.IRON_BASED);
}
/**
* Determine if a material is based on gold.
*
* @param material The {@link org.bukkit.Material} to check.
* @see MaterialProperty#GOLD_BASED
*/
public static boolean isGoldBased(Material material) {
return hasProperty(material, MaterialProperty.GOLD_BASED);
}
/**
* Determine if a material is based on diamond.
*
* @param material The {@link org.bukkit.Material} to check.
* @see MaterialProperty#DIAMOND_BASED
*/
public static boolean isDiamondBased(Material material) {
return hasProperty(material, MaterialProperty.DIAMOND_BASED);
}
/**
* Determine if a material is based on quartz.
*
* @param material The {@link org.bukkit.Material} to check.
* @see MaterialProperty#QUARTZ_BASED
*/
public static boolean isQuartzBased(Material material) {
return hasProperty(material, MaterialProperty.QUARTZ_BASED);
}
/**
* Determine if a material can be placed by player.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#PLACEABLE
*/
public static boolean isPlaceable(Material material) {
return hasProperty(material, MaterialProperty.PLACEABLE);
}
/**
* Determine if a material can be crafted or created by cooking
* by a player.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#CRAFTABLE
*/
public static boolean isCraftable(Material material) {
return hasProperty(material, MaterialProperty.CRAFTABLE);
}
/**
* Determine if a material is a block.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#BLOCK
*/
public static boolean isBlock(Material material) {
return hasProperty(material, MaterialProperty.BLOCK);
}
/**
* Determine if a material is a multi-block.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#MULTI_BLOCK
*/
public static boolean isMultiBlock(Material material) {
return hasProperty(material, MaterialProperty.MULTI_BLOCK);
}
/**
* Determine if a material is stairs.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#STAIRS
*/
public static boolean isStairs(Material material) {
return hasProperty(material, MaterialProperty.STAIRS);
}
/**
* Determine if a material is an ore block.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#ORE
*/
public static boolean isOre(Material material) {
return hasProperty(material, MaterialProperty.ORE);
}
/**
* Determine if a material is repairable/damageable.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#REPAIRABLE
*/
public static boolean isRepairable(Material material) {
return hasProperty(material, MaterialProperty.REPAIRABLE);
}
/**
* Determine if a material can be thrown by a player.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#THROWABLE
*/
public static boolean isThrowable(Material material) {
return hasProperty(material, MaterialProperty.THROWABLE);
}
/**
* Determine if a material is consumable by a player.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#FOOD
*/
public static boolean isFood(Material material) {
return hasProperty(material, MaterialProperty.FOOD);
}
/**
* Determine if a material is a block that is affected
* by gravity.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#GRAVITY
*/
public static boolean hasGravity(Material material) {
return hasProperty(material, MaterialProperty.GRAVITY);
}
/**
* Determine if a material has a GUI interface.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#GUI
*/
public static boolean hasGUI(Material material) {
return hasProperty(material, MaterialProperty.GUI);
}
/**
* Determine if a material has an inventory used to store items
* for players.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#INVENTORY
*/
public static boolean hasInventory(Material material) {
return hasProperty(material, MaterialProperty.INVENTORY);
}
/**
* Determine if a materials byte meta data is used for color.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#MULTI_COLOR_DATA
*/
public static boolean hasColorData(Material material) {
return hasProperty(material, MaterialProperty.MULTI_COLOR_DATA);
}
/**
* Determine if a materials byte meta data is used to determine
* the direction it faces.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#DIRECTIONAL_DATA
*/
public static boolean hasDirectionalData(Material material) {
return hasProperty(material, MaterialProperty.DIRECTIONAL_DATA);
}
/**
* Determine if a materials byte meta data is used to specify
* a sub material.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#SUB_MATERIAL_DATA
*/
public static boolean hasSubMaterialData(Material material) {
return hasProperty(material, MaterialProperty.SUB_MATERIAL_DATA);
}
/**
* Determine if a materials durability data is used to specify
* a sub material.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#SUB_MATERIAL_DURABILITY
*/
public static boolean hasSubMaterialDurability(Material material) {
return hasProperty(material, MaterialProperty.SUB_MATERIAL_DURABILITY);
}
/**
* Determine if a material can potentially be used as a potion ingredient.
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#POTION_INGREDIENT
*/
public static boolean isPotionIngredient(Material material) {
return hasProperty(material, MaterialProperty.POTION_INGREDIENT);
}
/**
* Determine if a material is a crop block that can be harvested or
* a crop item.
*
* The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#CROP
*/
public static boolean isCrop(Material material) {
return hasProperty(material, MaterialProperty.CROP);
}
/**
* Determine if a material, as a block, stores additional information
* such as inventory, rotation, etc.
*
* <p>This property is also found on non-block items that represent
* materials that can be placed as blocks.</p>
*
* @param material The {@link org.bukkit.Material} to check.
*
* @see MaterialProperty#BLOCK_ENTITY
*/
public static boolean hasBlockEntity(Material material) {
return hasProperty(material, MaterialProperty.BLOCK_ENTITY);
}
/**
* Register custom {@link MaterialProperty}'s for the specified
* {@link org.bukkit.Material}.
*
* @param material The {@link org.bukkit.Material}.
* @param properties The {@link MaterialProperty}'s to register.
*/
public static void register(Material material, MaterialProperty... properties) {
PreCon.notNull(material);
if (properties == null || properties.length == 0)
return;
// make sure a default property type is not being registered.
for (MaterialProperty property : properties) {
if (property.isDefaultProperty()) {
throw new IllegalArgumentException("Cannot register a default property type.");
}
}
add(material, properties);
}
private static void add(Material material, MaterialProperty... properties) {
_properties.putAll(material, Arrays.asList(properties));
for (MaterialProperty property : properties) {
_materialsByProperty.put(property, material);
}
}
static {
add(Material.ACACIA_DOOR,
MaterialProperty.BLOCK,
MaterialProperty.MULTI_BLOCK,
MaterialProperty.WOOD_BASED,
MaterialProperty.OPENABLE_BOUNDARY,
MaterialProperty.DOOR,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT);
add(Material.ACACIA_DOOR_ITEM,
MaterialProperty.WOOD_BASED,
MaterialProperty.OPENABLE_BOUNDARY,
MaterialProperty.DOOR,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT);
add(Material.ACACIA_FENCE,
MaterialProperty.BLOCK,
MaterialProperty.WOOD_BASED,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.ACACIA_FENCE_GATE,
MaterialProperty.BLOCK,
MaterialProperty.WOOD_BASED,
MaterialProperty.WOOD_BASED,
MaterialProperty.OPENABLE_BOUNDARY,
MaterialProperty.FENCE_GATE,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT);
add(Material.ACACIA_STAIRS,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.STAIRS,
MaterialProperty.WOOD_BASED,
MaterialProperty.DIRECTIONAL_DATA,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.SURFACE);
add(Material.ACTIVATOR_RAIL,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.PLACEABLE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT,
MaterialProperty.CRAFTABLE);
add(Material.AIR,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT);
add(Material.ANVIL,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.GUI,
MaterialProperty.CRAFTABLE,
MaterialProperty.SURFACE,
MaterialProperty.REPAIRABLE);
add(Material.APPLE,
MaterialProperty.FOOD);
add(Material.ARMOR_STAND,
MaterialProperty.CRAFTABLE,
MaterialProperty.PLACEABLE,
MaterialProperty.BLOCK_ENTITY); // item
add(Material.ARROW,
MaterialProperty.THROWABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.WEAPON);
add(Material.BAKED_POTATO,
MaterialProperty.CRAFTABLE);
add(Material.BANNER,
MaterialProperty.CRAFTABLE,
MaterialProperty.PLACEABLE,
MaterialProperty.BLOCK_ENTITY); // item
add(Material.BARRIER,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE);
add(Material.BEACON,
MaterialProperty.BLOCK,
MaterialProperty.PLACEABLE,
MaterialProperty.GUI,
MaterialProperty.CRAFTABLE,
MaterialProperty.SURFACE,
MaterialProperty.BLOCK_ENTITY);
add(Material.BED,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.BEDROCK,
MaterialProperty.BLOCK,
MaterialProperty.PLACEABLE,
MaterialProperty.SURFACE);
add(Material.BED_BLOCK,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE);
add(Material.BEETROOT,
MaterialProperty.FOOD,
MaterialProperty.CROP);
add(Material.BEETROOT_BLOCK,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.CROP);
add(Material.BEETROOT_SEEDS,
MaterialProperty.PLACEABLE);
add(Material.BEETROOT_SOUP,
MaterialProperty.FOOD);
add(Material.BIRCH_DOOR,
MaterialProperty.BLOCK,
MaterialProperty.WOOD_BASED,
MaterialProperty.OPENABLE_BOUNDARY,
MaterialProperty.DOOR,
MaterialProperty.MULTI_BLOCK,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT);
add(Material.BIRCH_DOOR_ITEM,
MaterialProperty.WOOD_BASED,
MaterialProperty.OPENABLE_BOUNDARY,
MaterialProperty.DOOR,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT);
add(Material.BIRCH_FENCE,
MaterialProperty.BLOCK,
MaterialProperty.WOOD_BASED,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.BIRCH_FENCE_GATE,
MaterialProperty.BLOCK,
MaterialProperty.WOOD_BASED,
MaterialProperty.OPENABLE_BOUNDARY,
MaterialProperty.FENCE_GATE,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.REDSTONE_COMPONENT);
add(Material.BIRCH_WOOD_STAIRS,
MaterialProperty.BLOCK,
MaterialProperty.STAIRS,
MaterialProperty.WOOD_BASED,
MaterialProperty.DIRECTIONAL_DATA,
MaterialProperty.WOOD_BASED,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.SURFACE);
add(Material.BLAZE_POWDER,
MaterialProperty.CRAFTABLE,
MaterialProperty.POTION_INGREDIENT);
add(Material.BOAT,
MaterialProperty.CRAFTABLE,
MaterialProperty.WOOD_BASED);
add(Material.BOAT_ACACIA,
MaterialProperty.CRAFTABLE,
MaterialProperty.WOOD_BASED);
add(Material.BOAT_BIRCH,
MaterialProperty.CRAFTABLE,
MaterialProperty.WOOD_BASED);
add(Material.BOAT_DARK_OAK,
MaterialProperty.CRAFTABLE,
MaterialProperty.WOOD_BASED);
add(Material.BOAT_JUNGLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.WOOD_BASED);
add(Material.BOAT_SPRUCE,
MaterialProperty.CRAFTABLE,
MaterialProperty.WOOD_BASED);
add(Material.BONE);
add(Material.BOOK,
MaterialProperty.CRAFTABLE);
add(Material.BOOKSHELF,
MaterialProperty.BLOCK,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.SURFACE);
add(Material.BOOK_AND_QUILL,
MaterialProperty.CRAFTABLE);
add(Material.BOW,
MaterialProperty.REPAIRABLE,
MaterialProperty.WEAPON,
MaterialProperty.CRAFTABLE);
add(Material.BOWL,
MaterialProperty.CRAFTABLE);
add(Material.BREAD,
MaterialProperty.CRAFTABLE);
add(Material.BREWING_STAND,
MaterialProperty.BLOCK,
MaterialProperty.GUI,
MaterialProperty.BLOCK_ENTITY);
add(Material.BREWING_STAND_ITEM,
MaterialProperty.PLACEABLE,
MaterialProperty.BLOCK_ENTITY);
add(Material.BRICK,
MaterialProperty.BLOCK,
MaterialProperty.CRAFTABLE);
add(Material.BRICK_STAIRS,
MaterialProperty.BLOCK,
MaterialProperty.STAIRS,
MaterialProperty.DIRECTIONAL_DATA,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.SURFACE);
add(Material.BROWN_MUSHROOM,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.PLACEABLE,
MaterialProperty.CROP);
add(Material.BUCKET,
MaterialProperty.CRAFTABLE);
add(Material.BURNING_FURNACE,
MaterialProperty.BLOCK,
MaterialProperty.DIRECTIONAL_DATA,
MaterialProperty.SURFACE,
MaterialProperty.BLOCK_ENTITY);
add(Material.CACTUS,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE);
add(Material.CAKE,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.CAKE_BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.BLOCK);
add(Material.CARPET,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.MULTI_COLOR_DATA,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.CARROT,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.CROP);
add(Material.CARROT_ITEM,
MaterialProperty.PLACEABLE,
MaterialProperty.CROP);
add(Material.CARROT_STICK,
MaterialProperty.REPAIRABLE,
MaterialProperty.TOOL,
MaterialProperty.CRAFTABLE);
add(Material.CAULDRON,
MaterialProperty.BLOCK);
add(Material.CAULDRON_ITEM,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.CHAINMAIL_BOOTS,
MaterialProperty.REPAIRABLE,
MaterialProperty.WEARABLE,
MaterialProperty.ARMOR,
MaterialProperty.BOOTS);
add(Material.CHAINMAIL_CHESTPLATE,
MaterialProperty.REPAIRABLE,
MaterialProperty.WEARABLE,
MaterialProperty.ARMOR,
MaterialProperty.CHESTPLATE);
add(Material.CHAINMAIL_HELMET,
MaterialProperty.REPAIRABLE,
MaterialProperty.WEARABLE,
MaterialProperty.ARMOR,
MaterialProperty.HELMET);
add(Material.CHAINMAIL_LEGGINGS,
MaterialProperty.REPAIRABLE,
MaterialProperty.WEARABLE,
MaterialProperty.ARMOR,
MaterialProperty.LEGGINGS);
add(Material.CHEST,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.DIRECTIONAL_DATA,
MaterialProperty.PLACEABLE,
MaterialProperty.INVENTORY,
MaterialProperty.GUI,
MaterialProperty.CRAFTABLE,
MaterialProperty.BLOCK_ENTITY);
add(Material.CHORUS_FLOWER);
add(Material.CHORUS_FRUIT,
MaterialProperty.FOOD);
add(Material.CHORUS_FRUIT_POPPED);
add(Material.CHORUS_PLANT,
MaterialProperty.BLOCK,
MaterialProperty.PLACEABLE,
MaterialProperty.SURFACE);
add(Material.CLAY,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE);
add(Material.CLAY_BALL,
MaterialProperty.CRAFTABLE);
add(Material.CLAY_BRICK,
MaterialProperty.CRAFTABLE);
add(Material.COAL,
MaterialProperty.SUB_MATERIAL_DATA);
add(Material.COAL_BLOCK,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.COAL_ORE,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.ORE);
add(Material.COBBLE_WALL,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.STONE_BASED,
MaterialProperty.SUB_MATERIAL_DATA,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.COBBLESTONE,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.STONE_BASED,
MaterialProperty.PLACEABLE);
add(Material.COBBLESTONE_STAIRS,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.STAIRS,
MaterialProperty.STONE_BASED,
MaterialProperty.DIRECTIONAL_DATA,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.COCOA);
add(Material.COMMAND,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.GUI,
MaterialProperty.BLOCK_ENTITY);
add(Material.COMMAND_CHAIN);
add(Material.COMMAND_MINECART);
add(Material.COMMAND_REPEATING);
add(Material.COMPASS,
MaterialProperty.CRAFTABLE);
add(Material.COOKED_BEEF,
MaterialProperty.FOOD,
MaterialProperty.CRAFTABLE);
add(Material.COOKED_CHICKEN,
MaterialProperty.FOOD,
MaterialProperty.CRAFTABLE);
add(Material.COOKED_FISH,
MaterialProperty.FOOD,
MaterialProperty.CRAFTABLE);
add(Material.COOKED_MUTTON,
MaterialProperty.FOOD,
MaterialProperty.CRAFTABLE);
add(Material.COOKED_RABBIT,
MaterialProperty.FOOD,
MaterialProperty.CRAFTABLE);
add(Material.COOKIE,
MaterialProperty.FOOD,
MaterialProperty.CRAFTABLE);
add(Material.CROPS,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.CROP);
add(Material.DARK_OAK_DOOR,
MaterialProperty.BLOCK,
MaterialProperty.WOOD_BASED,
MaterialProperty.OPENABLE_BOUNDARY,
MaterialProperty.DOOR,
MaterialProperty.MULTI_BLOCK,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT);
add(Material.DARK_OAK_DOOR_ITEM,
MaterialProperty.WOOD_BASED,
MaterialProperty.OPENABLE_BOUNDARY,
MaterialProperty.DOOR,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT);
add(Material.DARK_OAK_FENCE,
MaterialProperty.BLOCK,
MaterialProperty.WOOD_BASED,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.DARK_OAK_FENCE_GATE,
MaterialProperty.BLOCK,
MaterialProperty.WOOD_BASED,
MaterialProperty.OPENABLE_BOUNDARY,
MaterialProperty.FENCE_GATE,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT);
add(Material.DARK_OAK_STAIRS,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.STAIRS,
MaterialProperty.WOOD_BASED,
MaterialProperty.DIRECTIONAL_DATA,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.DAYLIGHT_DETECTOR,
MaterialProperty.BLOCK,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_OUTPUT,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.DAYLIGHT_DETECTOR_INVERTED,
MaterialProperty.BLOCK,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_OUTPUT);
add(Material.DEAD_BUSH,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT);
add(Material.DETECTOR_RAIL,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_OUTPUT,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.DIAMOND,
MaterialProperty.DIAMOND_BASED);
add(Material.DIAMOND_AXE,
MaterialProperty.DIAMOND_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.TOOL,
MaterialProperty.AXE,
MaterialProperty.CRAFTABLE);
add(Material.DIAMOND_BARDING,
MaterialProperty.DIAMOND_BASED,
MaterialProperty.HORSE_ARMOR);
add(Material.DIAMOND_BLOCK,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.DIAMOND_BASED,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.DIAMOND_BOOTS,
MaterialProperty.DIAMOND_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.WEARABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.ARMOR,
MaterialProperty.BOOTS);
add(Material.DIAMOND_CHESTPLATE,
MaterialProperty.DIAMOND_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.WEARABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.ARMOR,
MaterialProperty.CHESTPLATE);
add(Material.DIAMOND_HELMET,
MaterialProperty.DIAMOND_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.WEARABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.ARMOR,
MaterialProperty.HELMET);
add(Material.DIAMOND_HOE,
MaterialProperty.DIAMOND_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.TOOL,
MaterialProperty.HOE,
MaterialProperty.CRAFTABLE);
add(Material.DIAMOND_LEGGINGS,
MaterialProperty.DIAMOND_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.WEARABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.ARMOR,
MaterialProperty.LEGGINGS);
add(Material.DIAMOND_ORE,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.DIAMOND_BASED,
MaterialProperty.PLACEABLE,
MaterialProperty.ORE);
add(Material.DIAMOND_PICKAXE,
MaterialProperty.DIAMOND_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.TOOL,
MaterialProperty.MINING_TOOL,
MaterialProperty.PICKAXE,
MaterialProperty.CRAFTABLE);
add(Material.DIAMOND_SPADE,
MaterialProperty.DIAMOND_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.TOOL,
MaterialProperty.MINING_TOOL,
MaterialProperty.SHOVEL,
MaterialProperty.CRAFTABLE);
add(Material.DIAMOND_SWORD,
MaterialProperty.DIAMOND_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.WEAPON,
MaterialProperty.CRAFTABLE);
add(Material.DIODE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT,
MaterialProperty.REDSTONE_OUTPUT,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.DIODE_BLOCK_OFF,
MaterialProperty.BLOCK,
MaterialProperty.DIRECTIONAL_DATA,
MaterialProperty.TRANSPARENT,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT,
MaterialProperty.REDSTONE_OUTPUT);
add(Material.DIODE_BLOCK_ON,
MaterialProperty.BLOCK,
MaterialProperty.DIRECTIONAL_DATA,
MaterialProperty.TRANSPARENT,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT,
MaterialProperty.REDSTONE_OUTPUT);
add(Material.DIRT,
MaterialProperty.BLOCK,
MaterialProperty.SUB_MATERIAL_DATA,
MaterialProperty.PLACEABLE,
MaterialProperty.SURFACE);
add(Material.DISPENSER,
MaterialProperty.BLOCK,
MaterialProperty.DIRECTIONAL_DATA,
MaterialProperty.INVENTORY,
MaterialProperty.GUI,
MaterialProperty.CRAFTABLE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT,
MaterialProperty.SURFACE,
MaterialProperty.BLOCK_ENTITY);
add(Material.DOUBLE_PLANT,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.MULTI_BLOCK,
MaterialProperty.SUB_MATERIAL_DATA);
add(Material.DOUBLE_STEP,
MaterialProperty.BLOCK,
MaterialProperty.SUB_MATERIAL_DATA,
MaterialProperty.SURFACE);
add(Material.DOUBLE_STONE_SLAB2,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE);
add(Material.DRAGONS_BREATH);
add(Material.DRAGON_EGG);
add(Material.DROPPER,
MaterialProperty.BLOCK,
MaterialProperty.DIRECTIONAL_DATA,
MaterialProperty.INVENTORY,
MaterialProperty.GUI,
MaterialProperty.CRAFTABLE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT,
MaterialProperty.SURFACE,
MaterialProperty.BLOCK_ENTITY);
add(Material.EGG,
MaterialProperty.THROWABLE);
add(Material.ELYTRA,
MaterialProperty.WEARABLE,
MaterialProperty.CRAFTABLE);
add(Material.EMERALD);
add(Material.EMERALD_BLOCK,
MaterialProperty.BLOCK,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.SURFACE);
add(Material.EMERALD_ORE,
MaterialProperty.BLOCK,
MaterialProperty.PLACEABLE,
MaterialProperty.ORE,
MaterialProperty.SURFACE);
add(Material.EMPTY_MAP);
add(Material.ENCHANTED_BOOK);
add(Material.ENCHANTMENT_TABLE,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.GUI,
MaterialProperty.BLOCK_ENTITY);
add(Material.ENDER_CHEST,
MaterialProperty.BLOCK,
MaterialProperty.DIRECTIONAL_DATA,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.INVENTORY,
MaterialProperty.GUI,
MaterialProperty.SURFACE,
MaterialProperty.BLOCK_ENTITY);
add(Material.ENDER_PEARL,
MaterialProperty.THROWABLE);
add(Material.ENDER_PORTAL,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.BLOCK_ENTITY);
add(Material.ENDER_PORTAL_FRAME,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE);
add(Material.ENDER_STONE,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE);
add(Material.END_BRICKS,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE);
add(Material.END_CRYSTAL);
add(Material.END_GATEWAY);
add(Material.END_ROD,
MaterialProperty.PLACEABLE,
MaterialProperty.BLOCK,
MaterialProperty.CRAFTABLE);
add(Material.EXP_BOTTLE,
MaterialProperty.THROWABLE);
add(Material.EXPLOSIVE_MINECART);
add(Material.EYE_OF_ENDER);
add(Material.FEATHER);
add(Material.FENCE,
MaterialProperty.PLACEABLE,
MaterialProperty.BLOCK,
MaterialProperty.CRAFTABLE);
add(Material.FENCE_GATE,
MaterialProperty.OPENABLE_BOUNDARY,
MaterialProperty.FENCE_GATE,
MaterialProperty.PLACEABLE,
MaterialProperty.BLOCK,
MaterialProperty.CRAFTABLE);
add(Material.FERMENTED_SPIDER_EYE,
MaterialProperty.POTION_INGREDIENT);
add(Material.FIRE,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT);
add(Material.FIREBALL,
MaterialProperty.THROWABLE);
add(Material.FIREWORK,
MaterialProperty.CRAFTABLE);
add(Material.FIREWORK_CHARGE,
MaterialProperty.CRAFTABLE);
add(Material.FISHING_ROD,
MaterialProperty.REPAIRABLE,
MaterialProperty.TOOL,
MaterialProperty.CRAFTABLE);
add(Material.FLINT);
add(Material.FLINT_AND_STEEL,
MaterialProperty.REPAIRABLE,
MaterialProperty.TOOL,
MaterialProperty.CRAFTABLE);
add(Material.FLOWER_POT,
MaterialProperty.BLOCK);
add(Material.FLOWER_POT_ITEM,
MaterialProperty.PLACEABLE);
add(Material.FROSTED_ICE,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE);
add(Material.FURNACE,
MaterialProperty.DIRECTIONAL_DATA,
MaterialProperty.PLACEABLE,
MaterialProperty.BLOCK,
MaterialProperty.GUI,
MaterialProperty.SURFACE,
MaterialProperty.BLOCK_ENTITY);
add(Material.GHAST_TEAR,
MaterialProperty.POTION_INGREDIENT);
add(Material.GLASS,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.GLASS_BOTTLE,
MaterialProperty.CRAFTABLE);
add(Material.GLOWING_REDSTONE_ORE,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE);
add(Material.GLOWSTONE,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE);
add(Material.GLOWSTONE_DUST,
MaterialProperty.POTION_INGREDIENT);
add(Material.GOLD_AXE,
MaterialProperty.GOLD_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.TOOL,
MaterialProperty.AXE,
MaterialProperty.CRAFTABLE);
add(Material.GOLD_BARDING,
MaterialProperty.GOLD_BASED,
MaterialProperty.HORSE_ARMOR);
add(Material.GOLD_BLOCK,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.GOLD_BASED,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.GOLD_BOOTS,
MaterialProperty.GOLD_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.WEARABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.ARMOR,
MaterialProperty.BOOTS);
add(Material.GOLD_CHESTPLATE,
MaterialProperty.GOLD_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.WEARABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.ARMOR,
MaterialProperty.CHESTPLATE);
add(Material.GOLD_HELMET,
MaterialProperty.GOLD_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.WEARABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.ARMOR,
MaterialProperty.HELMET);
add(Material.GOLD_HOE,
MaterialProperty.GOLD_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.TOOL,
MaterialProperty.HOE,
MaterialProperty.CRAFTABLE);
add(Material.GOLD_INGOT,
MaterialProperty.GOLD_BASED,
MaterialProperty.CRAFTABLE);
add(Material.GOLD_LEGGINGS,
MaterialProperty.GOLD_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.WEARABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.ARMOR,
MaterialProperty.LEGGINGS);
add(Material.GOLD_NUGGET,
MaterialProperty.GOLD_BASED,
MaterialProperty.CRAFTABLE);
add(Material.GOLD_ORE,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.GOLD_BASED,
MaterialProperty.PLACEABLE,
MaterialProperty.ORE);
add(Material.GOLD_PICKAXE,
MaterialProperty.GOLD_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.TOOL,
MaterialProperty.MINING_TOOL,
MaterialProperty.PICKAXE,
MaterialProperty.CRAFTABLE);
add(Material.GOLD_PLATE,
MaterialProperty.BLOCK,
MaterialProperty.GOLD_BASED,
MaterialProperty.TRANSPARENT,
MaterialProperty.PLACEABLE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_OUTPUT,
MaterialProperty.REDSTONE_SWITCH,
MaterialProperty.PRESSURE_PLATE,
MaterialProperty.CRAFTABLE);
add(Material.GOLD_RECORD);
add(Material.GOLD_SPADE,
MaterialProperty.GOLD_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.TOOL,
MaterialProperty.MINING_TOOL,
MaterialProperty.SHOVEL,
MaterialProperty.CRAFTABLE);
add(Material.GOLD_SWORD,
MaterialProperty.GOLD_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.WEAPON,
MaterialProperty.CRAFTABLE);
add(Material.GOLDEN_APPLE,
MaterialProperty.GOLD_BASED,
MaterialProperty.FOOD,
MaterialProperty.SUB_MATERIAL_DATA,
MaterialProperty.CRAFTABLE);
add(Material.GOLDEN_CARROT,
MaterialProperty.GOLD_BASED,
MaterialProperty.FOOD,
MaterialProperty.CRAFTABLE,
MaterialProperty.POTION_INGREDIENT);
add(Material.GRASS,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE);
add(Material.GRAVEL,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.GRAVITY,
MaterialProperty.PLACEABLE);
add(Material.GREEN_RECORD);
add(Material.GRILLED_PORK,
MaterialProperty.FOOD,
MaterialProperty.CRAFTABLE);
add(Material.HARD_CLAY,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE);
add(Material.HAY_BLOCK,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE);
add(Material.HOPPER,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT,
MaterialProperty.INVENTORY,
MaterialProperty.GUI,
MaterialProperty.CRAFTABLE,
MaterialProperty.BLOCK_ENTITY);
add(Material.HOPPER_MINECART);
add(Material.HUGE_MUSHROOM_1,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE);
add(Material.HUGE_MUSHROOM_2,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE);
add(Material.ICE,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE);
add(Material.INK_SACK,
MaterialProperty.MULTI_COLOR_DATA,
MaterialProperty.SUB_MATERIAL_DATA);
add(Material.IRON_AXE,
MaterialProperty.IRON_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.TOOL,
MaterialProperty.AXE,
MaterialProperty.CRAFTABLE);
add(Material.IRON_BARDING,
MaterialProperty.IRON_BASED,
MaterialProperty.HORSE_ARMOR);
add(Material.IRON_BLOCK,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.IRON_BASED,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.IRON_BOOTS,
MaterialProperty.IRON_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.WEARABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.ARMOR,
MaterialProperty.BOOTS);
add(Material.IRON_CHESTPLATE,
MaterialProperty.IRON_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.WEARABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.ARMOR,
MaterialProperty.CHESTPLATE);
add(Material.IRON_DOOR,
MaterialProperty.IRON_BASED,
MaterialProperty.OPENABLE_BOUNDARY,
MaterialProperty.DOOR,
MaterialProperty.PLACEABLE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT,
MaterialProperty.CRAFTABLE);
add(Material.IRON_DOOR_BLOCK,
MaterialProperty.BLOCK,
MaterialProperty.MULTI_BLOCK,
MaterialProperty.IRON_BASED,
MaterialProperty.OPENABLE_BOUNDARY,
MaterialProperty.DOOR,
MaterialProperty.BLOCK,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT);
add(Material.IRON_FENCE,
MaterialProperty.BLOCK,
MaterialProperty.IRON_BASED,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.IRON_HELMET,
MaterialProperty.IRON_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.WEARABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.ARMOR,
MaterialProperty.HELMET);
add(Material.IRON_HOE,
MaterialProperty.IRON_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.TOOL,
MaterialProperty.HOE,
MaterialProperty.CRAFTABLE);
add(Material.IRON_INGOT,
MaterialProperty.IRON_BASED,
MaterialProperty.CRAFTABLE);
add(Material.IRON_LEGGINGS,
MaterialProperty.IRON_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.WEARABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.ARMOR,
MaterialProperty.LEGGINGS);
add(Material.IRON_ORE,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.IRON_BASED,
MaterialProperty.PLACEABLE,
MaterialProperty.ORE);
add(Material.IRON_PICKAXE,
MaterialProperty.IRON_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.TOOL,
MaterialProperty.MINING_TOOL,
MaterialProperty.PICKAXE,
MaterialProperty.CRAFTABLE);
add(Material.IRON_PLATE,
MaterialProperty.BLOCK,
MaterialProperty.IRON_BASED,
MaterialProperty.TRANSPARENT,
MaterialProperty.PLACEABLE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_OUTPUT,
MaterialProperty.REDSTONE_SWITCH,
MaterialProperty.PRESSURE_PLATE,
MaterialProperty.CRAFTABLE);
add(Material.IRON_SPADE,
MaterialProperty.IRON_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.TOOL,
MaterialProperty.MINING_TOOL,
MaterialProperty.SHOVEL,
MaterialProperty.CRAFTABLE);
add(Material.IRON_SWORD,
MaterialProperty.IRON_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.WEAPON,
MaterialProperty.CRAFTABLE);
add(Material.IRON_TRAPDOOR,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.IRON_BASED,
MaterialProperty.OPENABLE_BOUNDARY,
MaterialProperty.TRAPDOOR,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT);
add(Material.ITEM_FRAME,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.JACK_O_LANTERN,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.WEARABLE);
add(Material.JUKEBOX,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.BLOCK_ENTITY);
add(Material.JUNGLE_DOOR,
MaterialProperty.BLOCK,
MaterialProperty.WOOD_BASED,
MaterialProperty.OPENABLE_BOUNDARY,
MaterialProperty.DOOR,
MaterialProperty.MULTI_BLOCK,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT);
add(Material.JUNGLE_DOOR_ITEM,
MaterialProperty.WOOD_BASED,
MaterialProperty.OPENABLE_BOUNDARY,
MaterialProperty.DOOR,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT);
add(Material.JUNGLE_FENCE,
MaterialProperty.BLOCK,
MaterialProperty.WOOD_BASED,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.JUNGLE_FENCE_GATE,
MaterialProperty.BLOCK,
MaterialProperty.WOOD_BASED,
MaterialProperty.OPENABLE_BOUNDARY,
MaterialProperty.FENCE_GATE,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT);
add(Material.JUNGLE_WOOD_STAIRS,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.STAIRS,
MaterialProperty.WOOD_BASED,
MaterialProperty.DIRECTIONAL_DATA,
MaterialProperty.WOOD_BASED,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.LADDER,
MaterialProperty.BLOCK,
MaterialProperty.DIRECTIONAL_DATA,
MaterialProperty.TRANSPARENT,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.LAPIS_BLOCK,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.LAPIS_ORE,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.ORE);
add(Material.LAVA,
MaterialProperty.BLOCK,
MaterialProperty.PLACEABLE);
add(Material.LAVA_BUCKET);
add(Material.LEASH);
add(Material.LEATHER,
MaterialProperty.LEATHER_BASED);
add(Material.LEATHER_BOOTS,
MaterialProperty.LEATHER_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.WEARABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.ARMOR,
MaterialProperty.BOOTS);
add(Material.LEATHER_CHESTPLATE,
MaterialProperty.LEATHER_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.WEARABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.ARMOR,
MaterialProperty.CHESTPLATE);
add(Material.LEATHER_HELMET,
MaterialProperty.LEATHER_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.WEARABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.ARMOR,
MaterialProperty.HELMET);
add(Material.LEATHER_LEGGINGS,
MaterialProperty.LEATHER_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.WEARABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.ARMOR,
MaterialProperty.LEGGINGS);
add(Material.LEAVES,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.SUB_MATERIAL_DATA,
MaterialProperty.PLACEABLE,
MaterialProperty.BLOCK,
MaterialProperty.LEAVES);
add(Material.LEAVES_2,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.SUB_MATERIAL_DATA,
MaterialProperty.PLACEABLE,
MaterialProperty.BLOCK,
MaterialProperty.LEAVES);
add(Material.LEVER,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.DIRECTIONAL_DATA,
MaterialProperty.REDSTONE_SWITCH,
MaterialProperty.LEVER,
MaterialProperty.PLACEABLE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_OUTPUT,
MaterialProperty.CRAFTABLE);
add(Material.LINGERING_POTION);
add(Material.LOG,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.SUB_MATERIAL_DATA,
MaterialProperty.PLACEABLE,
MaterialProperty.BLOCK,
MaterialProperty.LOG);
add(Material.LOG_2,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.SUB_MATERIAL_DATA,
MaterialProperty.PLACEABLE,
MaterialProperty.LOG);
add(Material.LONG_GRASS,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.SUB_MATERIAL_DATA);
add(Material.MAGMA_CREAM,
MaterialProperty.POTION_INGREDIENT);
add(Material.MAP);
add(Material.MELON,
MaterialProperty.CROP);
add(Material.MELON_BLOCK,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.CROP);
add(Material.MELON_SEEDS);
add(Material.MELON_STEM);
add(Material.MILK_BUCKET);
add(Material.MINECART,
MaterialProperty.CRAFTABLE);
add(Material.MOB_SPAWNER,
MaterialProperty.SURFACE,
MaterialProperty.BLOCK,
MaterialProperty.BLOCK_ENTITY);
add(Material.MONSTER_EGG);
add(Material.MONSTER_EGGS);
add(Material.MOSSY_COBBLESTONE,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.STONE_BASED,
MaterialProperty.PLACEABLE);
add(Material.MUSHROOM_SOUP,
MaterialProperty.FOOD,
MaterialProperty.CRAFTABLE);
add(Material.MUTTON,
MaterialProperty.FOOD);
add(Material.MYCEL,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE);
add(Material.NAME_TAG);
add(Material.NETHER_BRICK,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE);
add(Material.NETHER_BRICK_ITEM,
MaterialProperty.PLACEABLE);
add(Material.NETHER_BRICK_STAIRS,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.STAIRS,
MaterialProperty.DIRECTIONAL_DATA,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.NETHER_FENCE,
MaterialProperty.BLOCK,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.NETHER_STALK,
MaterialProperty.POTION_INGREDIENT,
MaterialProperty.CROP); // Nether wart item
add(Material.NETHER_STAR);
add(Material.NETHER_WARTS,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.PLACEABLE,
MaterialProperty.CROP);
add(Material.NETHERRACK,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.BLOCK);
add(Material.NOTE_BLOCK,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.BLOCK_ENTITY);
add(Material.OBSIDIAN,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE);
add(Material.PACKED_ICE,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE);
add(Material.PAINTING,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.PAPER,
MaterialProperty.CRAFTABLE);
add(Material.PISTON_BASE,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE);
add(Material.PISTON_EXTENSION);
add(Material.PISTON_MOVING_PIECE);
add(Material.PISTON_STICKY_BASE,
MaterialProperty.SURFACE);
add(Material.POISONOUS_POTATO,
MaterialProperty.FOOD,
MaterialProperty.CRAFTABLE);
add(Material.PORK,
MaterialProperty.FOOD);
add(Material.PORTAL,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.BLOCK_ENTITY);
add(Material.POTATO,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.CROP);
add(Material.POTATO_ITEM,
MaterialProperty.FOOD,
MaterialProperty.CROP);
add(Material.POTION,
MaterialProperty.THROWABLE,
MaterialProperty.POTION_INGREDIENT,
MaterialProperty.SUB_MATERIAL_DURABILITY);
add(Material.POWERED_MINECART);
add(Material.POWERED_RAIL,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.PLACEABLE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.CRAFTABLE);
add(Material.PRISMARINE);
add(Material.PRISMARINE_CRYSTALS);
add(Material.PRISMARINE_SHARD);
add(Material.PUMPKIN,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE);
add(Material.PUMPKIN_PIE,
MaterialProperty.CRAFTABLE);
add(Material.PUMPKIN_SEEDS);
add(Material.PUMPKIN_STEM);
add(Material.PURPUR_BLOCK,
MaterialProperty.BLOCK,
MaterialProperty.PLACEABLE,
MaterialProperty.SURFACE);
add(Material.PURPUR_DOUBLE_SLAB,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE);
add(Material.PURPUR_PILLAR,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.DIRECTIONAL_DATA);
add(Material.PURPUR_SLAB,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.PURPUR_STAIRS,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.STAIRS,
MaterialProperty.DIRECTIONAL_DATA);
add(Material.QUARTZ,
MaterialProperty.QUARTZ_BASED);
add(Material.QUARTZ_BLOCK,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.QUARTZ_BASED,
MaterialProperty.SUB_MATERIAL_DATA,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.QUARTZ_ORE,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.QUARTZ_BASED,
MaterialProperty.PLACEABLE,
MaterialProperty.ORE);
add(Material.QUARTZ_STAIRS,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.STAIRS,
MaterialProperty.QUARTZ_BASED,
MaterialProperty.DIRECTIONAL_DATA,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.RABBIT);
add(Material.RABBIT_FOOT,
MaterialProperty.POTION_INGREDIENT);
add(Material.RABBIT_HIDE);
add(Material.RABBIT_STEW,
MaterialProperty.FOOD,
MaterialProperty.CRAFTABLE);
add(Material.RAILS,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.RAW_BEEF,
MaterialProperty.FOOD);
add(Material.RAW_CHICKEN,
MaterialProperty.FOOD);
add(Material.RAW_FISH,
MaterialProperty.FOOD,
MaterialProperty.SUB_MATERIAL_DATA,
MaterialProperty.POTION_INGREDIENT);
add(Material.RECORD_10);
add(Material.RECORD_11);
add(Material.RECORD_12);
add(Material.RECORD_3);
add(Material.RECORD_4);
add(Material.RECORD_5);
add(Material.RECORD_6);
add(Material.RECORD_7);
add(Material.RECORD_8);
add(Material.RECORD_9);
add(Material.RED_MUSHROOM,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT);
add(Material.RED_ROSE,
MaterialProperty.BLOCK,
MaterialProperty.PLACEABLE,
MaterialProperty.TRANSPARENT,
MaterialProperty.SUB_MATERIAL_DATA);
add(Material.RED_SANDSTONE,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.BLOCK,
MaterialProperty.CRAFTABLE);
add(Material.RED_SANDSTONE_STAIRS,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.STAIRS,
MaterialProperty.DIRECTIONAL_DATA,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.REDSTONE,
MaterialProperty.PLACEABLE,
MaterialProperty.POTION_INGREDIENT,
MaterialProperty.REDSTONE_COMPONENT);
add(Material.REDSTONE_BLOCK,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_OUTPUT,
MaterialProperty.CRAFTABLE);
add(Material.REDSTONE_COMPARATOR,
MaterialProperty.PLACEABLE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT,
MaterialProperty.REDSTONE_OUTPUT,
MaterialProperty.CRAFTABLE);
add(Material.REDSTONE_COMPARATOR_OFF,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT,
MaterialProperty.REDSTONE_OUTPUT);
add(Material.REDSTONE_COMPARATOR_ON,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT,
MaterialProperty.REDSTONE_OUTPUT);
add(Material.REDSTONE_LAMP_OFF,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT,
MaterialProperty.CRAFTABLE);
add(Material.REDSTONE_LAMP_ON,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT);
add(Material.REDSTONE_ORE,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE);
add(Material.REDSTONE_TORCH_OFF,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.PLACEABLE,
MaterialProperty.REDSTONE_INPUT,
MaterialProperty.REDSTONE_OUTPUT,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.CRAFTABLE);
add(Material.REDSTONE_TORCH_ON,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.REDSTONE_INPUT,
MaterialProperty.REDSTONE_OUTPUT,
MaterialProperty.REDSTONE_COMPONENT);
add(Material.REDSTONE_WIRE,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.REDSTONE_COMPONENT);
add(Material.ROTTEN_FLESH,
MaterialProperty.FOOD);
add(Material.SADDLE);
add(Material.SAND,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.SUB_MATERIAL_DATA,
MaterialProperty.PLACEABLE,
MaterialProperty.GRAVITY);
add(Material.SANDSTONE,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.SUB_MATERIAL_DATA,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.SANDSTONE_STAIRS,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.STAIRS,
MaterialProperty.DIRECTIONAL_DATA,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.SAPLING,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.SUB_MATERIAL_DATA,
MaterialProperty.PLACEABLE);
add(Material.SEA_LANTERN,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.SEEDS,
MaterialProperty.SUB_MATERIAL_DATA,
MaterialProperty.PLACEABLE);
add(Material.SHEARS,
MaterialProperty.REPAIRABLE,
MaterialProperty.TOOL,
MaterialProperty.CRAFTABLE);
add(Material.SHIELD,
MaterialProperty.CRAFTABLE,
MaterialProperty.WOOD_BASED);
add(Material.SIGN,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.BLOCK_ENTITY);
add(Material.SIGN_POST,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.BLOCK_ENTITY);
add(Material.SKULL,
MaterialProperty.BLOCK,
MaterialProperty.BLOCK_ENTITY);
add(Material.SKULL_ITEM,
MaterialProperty.PLACEABLE,
MaterialProperty.WEARABLE,
MaterialProperty.BLOCK_ENTITY);
add(Material.SLIME_BLOCK,
MaterialProperty.CRAFTABLE,
MaterialProperty.PLACEABLE,
MaterialProperty.SURFACE,
MaterialProperty.BLOCK);
add(Material.SLIME_BALL,
MaterialProperty.CRAFTABLE);
add(Material.SMOOTH_BRICK,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.SUB_MATERIAL_DATA,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.SMOOTH_STAIRS,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.STAIRS,
MaterialProperty.DIRECTIONAL_DATA,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.SNOW,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.PLACEABLE);
add(Material.SNOW_BALL,
MaterialProperty.THROWABLE);
add(Material.SNOW_BLOCK,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.SOIL,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE);
add(Material.SOUL_SAND,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE);
add(Material.SPECKLED_MELON,
MaterialProperty.POTION_INGREDIENT); // Glistering Melon
add(Material.SPECTRAL_ARROW,
MaterialProperty.CRAFTABLE,
MaterialProperty.THROWABLE,
MaterialProperty.WEAPON);
add(Material.SPIDER_EYE,
MaterialProperty.POTION_INGREDIENT);
add(Material.SPONGE,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.SUB_MATERIAL_DATA,
MaterialProperty.PLACEABLE);
add(Material.SPRUCE_DOOR,
MaterialProperty.BLOCK,
MaterialProperty.WOOD_BASED,
MaterialProperty.OPENABLE_BOUNDARY,
MaterialProperty.DOOR,
MaterialProperty.MULTI_BLOCK,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT);
add(Material.SPRUCE_DOOR_ITEM,
MaterialProperty.WOOD_BASED,
MaterialProperty.OPENABLE_BOUNDARY,
MaterialProperty.DOOR,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT);
add(Material.SPRUCE_FENCE,
MaterialProperty.BLOCK,
MaterialProperty.WOOD_BASED,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.SPRUCE_FENCE_GATE,
MaterialProperty.BLOCK,
MaterialProperty.WOOD_BASED,
MaterialProperty.OPENABLE_BOUNDARY,
MaterialProperty.FENCE_GATE,
MaterialProperty.PLACEABLE,
MaterialProperty.BLOCK,
MaterialProperty.CRAFTABLE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_INPUT);
add(Material.SPRUCE_WOOD_STAIRS,
MaterialProperty.BLOCK,
MaterialProperty.STAIRS,
MaterialProperty.WOOD_BASED,
MaterialProperty.DIRECTIONAL_DATA,
MaterialProperty.WOOD_BASED,
MaterialProperty.PLACEABLE,
MaterialProperty.BLOCK,
MaterialProperty.CRAFTABLE,
MaterialProperty.SURFACE);
add(Material.STAINED_CLAY,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.MULTI_COLOR_DATA,
MaterialProperty.CRAFTABLE);
add(Material.STAINED_GLASS,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.MULTI_COLOR_DATA,
MaterialProperty.CRAFTABLE);
add(Material.STAINED_GLASS_PANE,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.MULTI_COLOR_DATA,
MaterialProperty.CRAFTABLE);
add(Material.STANDING_BANNER,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.BLOCK_ENTITY);
add(Material.STATIONARY_LAVA,
MaterialProperty.BLOCK);
add(Material.STATIONARY_WATER,
MaterialProperty.BLOCK);
add(Material.STEP,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.SUB_MATERIAL_DATA,
MaterialProperty.CRAFTABLE);
add(Material.STICK);
add(Material.STONE,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.STONE_BASED,
MaterialProperty.PLACEABLE,
MaterialProperty.SUB_MATERIAL_DATA,
MaterialProperty.CRAFTABLE);
add(Material.STONE_AXE,
MaterialProperty.STONE_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.TOOL,
MaterialProperty.AXE,
MaterialProperty.CRAFTABLE);
add(Material.STONE_BUTTON,
MaterialProperty.BLOCK,
MaterialProperty.STONE_BASED,
MaterialProperty.PLACEABLE,
MaterialProperty.TRANSPARENT,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_OUTPUT,
MaterialProperty.REDSTONE_SWITCH,
MaterialProperty.BUTTON,
MaterialProperty.CRAFTABLE);
add(Material.STONE_HOE,
MaterialProperty.STONE_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.TOOL,
MaterialProperty.HOE,
MaterialProperty.CRAFTABLE);
add(Material.STONE_PICKAXE,
MaterialProperty.STONE_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.TOOL,
MaterialProperty.MINING_TOOL,
MaterialProperty.PICKAXE,
MaterialProperty.CRAFTABLE);
add(Material.STONE_PLATE,
MaterialProperty.BLOCK,
MaterialProperty.STONE_BASED,
MaterialProperty.TRANSPARENT,
MaterialProperty.PLACEABLE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_OUTPUT,
MaterialProperty.REDSTONE_SWITCH,
MaterialProperty.PRESSURE_PLATE,
MaterialProperty.CRAFTABLE);
add(Material.STONE_SLAB2,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.STONE_BASED,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.STONE_SPADE,
MaterialProperty.STONE_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.TOOL,
MaterialProperty.MINING_TOOL,
MaterialProperty.SHOVEL,
MaterialProperty.CRAFTABLE);
add(Material.STONE_SWORD,
MaterialProperty.STONE_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.WEAPON,
MaterialProperty.CRAFTABLE);
add(Material.STORAGE_MINECART);
add(Material.STRING);
add(Material.STRUCTURE_BLOCK);
add(Material.SUGAR,
MaterialProperty.POTION_INGREDIENT);
add(Material.SUGAR_CANE,
MaterialProperty.PLACEABLE,
MaterialProperty.CROP);
add(Material.SUGAR_CANE_BLOCK,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.BLOCK,
MaterialProperty.CROP);
add(Material.SULPHUR,
MaterialProperty.POTION_INGREDIENT); // gunpowder
add(Material.THIN_GLASS,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.TIPPED_ARROW,
MaterialProperty.WEAPON,
MaterialProperty.CRAFTABLE,
MaterialProperty.THROWABLE);
add(Material.TNT,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.TORCH,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.TRAP_DOOR,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.OPENABLE_BOUNDARY,
MaterialProperty.TRAPDOOR,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.TRAPPED_CHEST,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.DIRECTIONAL_DATA,
MaterialProperty.PLACEABLE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_OUTPUT,
MaterialProperty.REDSTONE_SWITCH,
MaterialProperty.INVENTORY,
MaterialProperty.GUI,
MaterialProperty.CRAFTABLE,
MaterialProperty.BLOCK_ENTITY);
add(Material.TRIPWIRE,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT);
add(Material.TRIPWIRE_HOOK,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.PLACEABLE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_OUTPUT,
MaterialProperty.REDSTONE_SWITCH,
MaterialProperty.CRAFTABLE);
add(Material.VINE,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.PLACEABLE);
add(Material.WALL_BANNER,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.BLOCK_ENTITY);
add(Material.WALL_SIGN,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.BLOCK_ENTITY);
add(Material.WATCH,
MaterialProperty.CRAFTABLE);
add(Material.WATER,
MaterialProperty.BLOCK);
add(Material.WATER_BUCKET);
add(Material.WATER_LILY,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE);
add(Material.WEB,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.PLACEABLE);
add(Material.WHEAT,
MaterialProperty.TRANSPARENT,
MaterialProperty.PLACEABLE,
MaterialProperty.CROP);
add(Material.WOOD,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.SUB_MATERIAL_DATA,
MaterialProperty.WOOD_BASED,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.WOOD_AXE,
MaterialProperty.REPAIRABLE,
MaterialProperty.WOOD_BASED,
MaterialProperty.TOOL,
MaterialProperty.AXE,
MaterialProperty.CRAFTABLE);
add(Material.WOOD_BUTTON,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT,
MaterialProperty.PLACEABLE,
MaterialProperty.WOOD_BASED,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_OUTPUT,
MaterialProperty.REDSTONE_SWITCH,
MaterialProperty.BUTTON,
MaterialProperty.CRAFTABLE);
add(Material.WOOD_DOOR,
MaterialProperty.OPENABLE_BOUNDARY,
MaterialProperty.WOOD_BASED,
MaterialProperty.DOOR,
MaterialProperty.PLACEABLE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_OUTPUT,
MaterialProperty.CRAFTABLE);
add(Material.WOOD_DOUBLE_STEP,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.WOOD_BASED,
MaterialProperty.SUB_MATERIAL_DATA);
add(Material.WOOD_HOE,
MaterialProperty.WOOD_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.TOOL,
MaterialProperty.HOE,
MaterialProperty.CRAFTABLE);
add(Material.WOOD_PICKAXE,
MaterialProperty.REPAIRABLE,
MaterialProperty.TOOL,
MaterialProperty.MINING_TOOL,
MaterialProperty.PICKAXE,
MaterialProperty.CRAFTABLE);
add(Material.WOOD_PLATE,
MaterialProperty.BLOCK,
MaterialProperty.WOOD_BASED,
MaterialProperty.TRANSPARENT,
MaterialProperty.PLACEABLE,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_OUTPUT,
MaterialProperty.REDSTONE_SWITCH,
MaterialProperty.PRESSURE_PLATE,
MaterialProperty.CRAFTABLE);
add(Material.WOOD_SPADE,
MaterialProperty.WOOD_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.TOOL,
MaterialProperty.MINING_TOOL,
MaterialProperty.SHOVEL,
MaterialProperty.CRAFTABLE);
add(Material.WOOD_STAIRS,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.STAIRS,
MaterialProperty.WOOD_BASED,
MaterialProperty.DIRECTIONAL_DATA,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE);
add(Material.WOOD_STEP,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.WOOD_BASED,
MaterialProperty.SUB_MATERIAL_DATA);
add(Material.WOOD_SWORD,
MaterialProperty.WOOD_BASED,
MaterialProperty.REPAIRABLE,
MaterialProperty.WEAPON,
MaterialProperty.CRAFTABLE);
add(Material.WOODEN_DOOR,
MaterialProperty.BLOCK,
MaterialProperty.WOOD_BASED,
MaterialProperty.OPENABLE_BOUNDARY,
MaterialProperty.DOOR,
MaterialProperty.MULTI_BLOCK,
MaterialProperty.REDSTONE_COMPONENT,
MaterialProperty.REDSTONE_OUTPUT);// block
add(Material.WOOL,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.MULTI_COLOR_DATA,
MaterialProperty.CRAFTABLE);
add(Material.WORKBENCH,
MaterialProperty.BLOCK,
MaterialProperty.SURFACE,
MaterialProperty.PLACEABLE,
MaterialProperty.CRAFTABLE,
MaterialProperty.GUI);
add(Material.WRITTEN_BOOK,
MaterialProperty.GUI);
add(Material.YELLOW_FLOWER,
MaterialProperty.BLOCK,
MaterialProperty.TRANSPARENT);
}
}