package net.glowstone.constants; import org.apache.commons.lang3.Validate; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import java.util.HashMap; import java.util.Map; /** * Temporary mappings for Minecraft's string-based item ids. */ public final class ItemIds { private ItemIds() { } private static final Map<Integer, String> names = new HashMap<>(); private static final Map<String, Integer> items = new HashMap<>(); private static final Map<String, Integer> blocks = new HashMap<>(); /** * Get the string identifier for a specified Material. * @param mat the Material. * @return the identifier. */ public static String getName(Material mat) { Validate.notNull(mat, "Material cannot be null"); return names.get(mat.getId()); } /** * Get the Material corresponding to the specified item identifier. * @param name the identifier. * @return the Material, or null. */ public static Material getItem(String name) { if (!items.containsKey(name)) { return null; } return Material.getMaterial(items.get(name)); } /** * Get the Material corresponding to the specified block identifier. * @param name the identifier. * @return the Material, or null. */ public static Material getBlock(String name) { if (!blocks.containsKey(name)) { return null; } return Material.getMaterial(blocks.get(name)); } /** * Verify that a given material is a valid item. All non-blocks are valid * items, but some blocks cannot be represented as items. * @param material The material to verify. * @return true if the material is a valid item. */ public static boolean isValidItem(Material material) { return getItem(getName(material)) == material; } /** * Convert an ItemStack which may have a type that is unrepresentable as * an item to one that does, or to null if this is not possible. * @param stack The stack to sanitize. * @return The sanitized stack, or null. */ public static ItemStack sanitize(ItemStack stack) { if (stack == null || stack.getType() == null || stack.getType() == Material.AIR) { return null; } Material item = getItem(getName(stack.getType())); if (item == null) { return null; } if (item != stack.getType()) { stack = stack.clone(); stack.setType(item); } return stack; } private static void block(int id, String key) { key = "minecraft:" + key; names.put(id, key); blocks.put(key, id); } private static void item(int id, String key) { key = "minecraft:" + key; names.put(id, key); items.put(key, id); } private static void both(int id, String key) { key = "minecraft:" + key; names.put(id, key); blocks.put(key, id); items.put(key, id); } private static void alternate(int id, String key) { items.put("minecraft:" + key, id); } static { // blocks both(0, "air"); both(1, "stone"); both(2, "grass"); both(3, "dirt"); both(4, "cobblestone"); both(5, "planks"); both(6, "sapling"); both(7, "bedrock"); block(8, "flowing_water"); block(9, "water"); block(10, "flowing_lava"); block(11, "lava"); both(12, "sand"); both(13, "gravel"); both(14, "gold_ore"); both(15, "iron_ore"); both(16, "coal_ore"); both(17, "log"); both(18, "leaves"); both(19, "sponge"); both(20, "glass"); both(21, "lapis_ore"); both(22, "lapis_block"); both(23, "dispenser"); both(24, "sandstone"); both(25, "noteblock"); block(26, "bed"); // bed is also 355 both(27, "golden_rail"); both(28, "detector_rail"); both(29, "sticky_piston"); both(30, "web"); both(31, "tallgrass"); both(32, "deadbush"); both(33, "piston"); block(34, "piston_head"); both(35, "wool"); block(36, "piston_extension"); both(37, "yellow_flower"); both(38, "red_flower"); both(39, "brown_mushroom"); both(40, "red_mushroom"); both(41, "gold_block"); both(42, "iron_block"); block(43, "double_stone_slab"); both(44, "stone_slab"); both(45, "brick_block"); both(46, "tnt"); both(47, "bookshelf"); both(48, "mossy_cobblestone"); both(49, "obsidian"); both(50, "torch"); block(51, "fire"); both(52, "mob_spawner"); both(53, "oak_stairs"); both(54, "chest"); block(55, "redstone_wire"); both(56, "diamond_ore"); both(57, "diamond_block"); both(58, "crafting_table"); block(59, "wheat"); // wheat is also 296 both(60, "farmland"); both(61, "furnace"); both(62, "lit_furnace"); block(63, "standing_sign"); both(64, "wooden_door"); // wooden_door is also 324 both(65, "ladder"); both(66, "rail"); both(67, "stone_stairs"); block(68, "wall_sign"); both(69, "lever"); both(70, "stone_pressure_plate"); block(71, "iron_door"); // iron_door is also 330 both(72, "wooden_pressure_plate"); both(73, "redstone_ore"); block(74, "lit_redstone_ore"); block(75, "unlit_redstone_torch"); both(76, "redstone_torch"); alternate(76, "redstone_torch_(active)"); both(77, "stone_button"); both(78, "snow_layer"); both(79, "ice"); both(80, "snow"); both(81, "cactus"); both(82, "clay"); block(83, "reeds"); // reeds is also 338 both(84, "jukebox"); both(85, "fence"); both(86, "pumpkin"); both(87, "netherrack"); both(88, "soul_sand"); both(89, "glowstone"); block(90, "portal"); both(91, "lit_pumpkin"); block(92, "cake"); // cake is also 354 block(93, "unpowered_repeater"); block(94, "powered_repeater"); both(95, "stained_glass"); both(96, "trapdoor"); both(97, "monster_egg"); both(98, "stonebrick"); both(99, "brown_mushroom_block"); both(100, "red_mushroom_block"); both(101, "iron_bars"); both(102, "glass_pane"); both(103, "melon_block"); block(104, "pumpkin_stem"); block(105, "melon_stem"); both(106, "vine"); both(107, "fence_gate"); both(108, "brick_stairs"); both(109, "stone_brick_stairs"); both(110, "mycelium"); both(111, "waterlily"); both(112, "nether_brick"); both(113, "nether_brick_fence"); both(114, "nether_brick_stairs"); block(115, "nether_wart"); // nether_wart is also 372 both(116, "enchanting_table"); block(117, "brewing_stand"); // brewing_stand is also 379 block(118, "cauldron"); // cauldron is also 380 block(119, "end_portal"); both(120, "end_portal_frame"); both(121, "end_stone"); both(122, "dragon_egg"); both(123, "redstone_lamp"); alternate(123, "redstone_lamp_(inactive)"); block(124, "lit_redstone_lamp"); block(125, "double_wooden_slab"); both(126, "wooden_slab"); block(127, "cocoa"); both(128, "sandstone_stairs"); both(129, "emerald_ore"); both(130, "ender_chest"); both(131, "tripwire_hook"); block(132, "tripwire"); both(133, "emerald_block"); both(134, "spruce_stairs"); both(135, "birch_stairs"); both(136, "jungle_stairs"); both(137, "command_block"); both(138, "beacon"); both(139, "cobblestone_wall"); block(140, "flower_pot"); // flower_pot is also 390 block(141, "carrots"); block(142, "potatoes"); both(143, "wooden_button"); block(144, "skull"); // skull is also 397 both(145, "anvil"); both(146, "trapped_chest"); both(147, "light_weighted_pressure_plate"); both(148, "heavy_weighted_pressure_plate"); block(149, "unpowered_comparator"); block(150, "powered_comparator"); both(151, "daylight_detector"); both(152, "redstone_block"); both(153, "quartz_ore"); both(154, "hopper"); both(155, "quartz_block"); both(156, "quartz_stairs"); both(157, "activator_rail"); both(158, "dropper"); both(159, "stained_hardened_clay"); both(160, "stained_glass_pane"); both(161, "leaves2"); both(162, "log2"); both(163, "acacia_stairs"); both(164, "dark_oak_stairs"); both(165, "slime"); both(166, "barrier"); both(167, "iron_trapdoor"); both(168, "prismarine"); both(169, "sea_lantern"); both(170, "hay_block"); both(171, "carpet"); both(172, "hardened_clay"); both(173, "coal_block"); both(174, "packed_ice"); both(175, "double_plant"); alternate(175, "large_flowers"); block(176, "standing_banner"); block(177, "wall_banner"); block(178, "daylight_detector_inverted"); both(179, "red_sandstone"); both(180, "red_sandstone_stairs"); block(181, "double_stone_slab2"); both(182, "stone_slab2"); both(183, "spruce_fence_gate"); both(184, "birch_fence_gate"); both(185, "jungle_fence_gate"); both(186, "dark_oak_fence_gate"); both(187, "acacia_fence_gate"); both(188, "spruce_fence"); both(189, "birch_fence"); both(190, "jungle_fence"); both(191, "dark_oak_fence"); both(192, "acacia_fence"); block(193, "spruce_door"); // spruce_door is also 427 block(194, "birch_door"); // birch_door is also 428 block(195, "jungle_door"); // jungle_door is also 429 block(196, "acacia_door"); // acacia_door is also 430 block(197, "dark_oak_door"); // dark_oak_door is also 431 // items item(256, "iron_shovel"); item(257, "iron_pickaxe"); item(258, "iron_axe"); item(259, "flint_and_steel"); item(260, "apple"); item(261, "bow"); item(262, "arrow"); item(263, "coal"); item(264, "diamond"); item(265, "iron_ingot"); item(266, "gold_ingot"); item(267, "iron_sword"); item(268, "wooden_sword"); item(269, "wooden_shovel"); item(270, "wooden_pickaxe"); item(271, "wooden_axe"); item(272, "stone_sword"); item(273, "stone_shovel"); item(274, "stone_pickaxe"); item(275, "stone_axe"); item(276, "diamond_sword"); item(277, "diamond_shovel"); item(278, "diamond_pickaxe"); item(279, "diamond_axe"); item(280, "stick"); item(281, "bowl"); item(282, "mushroom_stew"); item(283, "golden_sword"); item(284, "golden_shovel"); item(285, "golden_pickaxe"); item(286, "golden_axe"); item(287, "string"); item(288, "feather"); item(289, "gunpowder"); item(290, "wooden_hoe"); item(291, "stone_hoe"); item(292, "iron_hoe"); item(293, "diamond_hoe"); item(294, "golden_hoe"); item(295, "wheat_seeds"); item(296, "wheat"); item(297, "bread"); item(298, "leather_helmet"); item(299, "leather_chestplate"); item(300, "leather_leggings"); item(301, "leather_boots"); item(302, "chainmail_helmet"); item(303, "chainmail_chestplate"); item(304, "chainmail_leggings"); item(305, "chainmail_boots"); item(306, "iron_helmet"); item(307, "iron_chestplate"); item(308, "iron_leggings"); item(309, "iron_boots"); item(310, "diamond_helmet"); item(311, "diamond_chestplate"); item(312, "diamond_leggings"); item(313, "diamond_boots"); item(314, "golden_helmet"); item(315, "golden_chestplate"); item(316, "golden_leggings"); item(317, "golden_boots"); item(318, "flint"); item(319, "porkchop"); item(320, "cooked_porkchop"); item(321, "painting"); item(322, "golden_apple"); item(323, "sign"); item(324, "wooden_door"); item(325, "bucket"); item(326, "water_bucket"); item(327, "lava_bucket"); item(328, "minecart"); item(329, "saddle"); item(330, "iron_door"); item(331, "redstone"); item(332, "snowball"); item(333, "boat"); item(334, "leather"); item(335, "milk_bucket"); item(336, "brick"); item(337, "clay_ball"); item(338, "reeds"); item(339, "paper"); item(340, "book"); item(341, "slime_ball"); item(342, "chest_minecart"); item(343, "furnace_minecart"); item(344, "egg"); item(345, "compass"); item(346, "fishing_rod"); item(347, "clock"); item(348, "glowstone_dust"); item(349, "fish"); item(350, "cooked_fish"); item(351, "dye"); item(352, "bone"); item(353, "sugar"); item(354, "cake"); item(355, "bed"); item(356, "repeater"); item(357, "cookie"); item(358, "filled_map"); item(359, "shears"); item(360, "melon"); item(361, "pumpkin_seeds"); item(362, "melon_seeds"); item(363, "beef"); item(364, "cooked_beef"); item(365, "chicken"); item(366, "cooked_chicken"); item(367, "rotten_flesh"); item(368, "ender_pearl"); item(369, "blaze_rod"); item(370, "ghast_tear"); item(371, "gold_nugget"); item(372, "nether_wart"); item(373, "potion"); item(374, "glass_bottle"); item(375, "spider_eye"); item(376, "fermented_spider_eye"); item(377, "blaze_powder"); item(378, "magma_cream"); item(379, "brewing_stand"); item(380, "cauldron"); item(381, "ender_eye"); item(382, "speckled_melon"); item(383, "spawn_egg"); item(384, "experience_bottle"); item(385, "fire_charge"); item(386, "writable_book"); item(387, "written_book"); item(388, "emerald"); item(389, "item_frame"); item(390, "flower_pot"); item(391, "carrot"); item(392, "potato"); item(393, "baked_potato"); item(394, "poisonous_potato"); item(395, "map"); item(396, "golden_carrot"); item(397, "skull"); item(398, "carrot_on_a_stick"); item(399, "nether_star"); item(400, "pumpkin_pie"); item(401, "fireworks"); item(402, "firework_charge"); item(403, "enchanted_book"); item(404, "comparator"); item(405, "netherbrick"); item(406, "quartz"); item(407, "tnt_minecart"); item(408, "hopper_minecart"); item(409, "prismarine_shard"); item(410, "prismarine_crystals"); item(411, "rabbit"); item(412, "cooked_rabbit"); item(413, "rabbit_stew"); item(414, "rabbit_foot"); item(415, "rabbit_hide"); item(416, "armor_stand"); item(417, "iron_horse_armor"); item(418, "golden_horse_armor"); item(419, "diamond_horse_armor"); item(420, "lead"); item(421, "name_tag"); item(422, "command_block_minecart"); item(423, "mutton"); item(424, "cooked_mutton"); item(425, "banner"); item(427, "spruce_door"); item(428, "birch_door"); item(429, "jungle_door"); item(430, "acacia_door"); item(431, "dark_oak_door"); item(2256, "record_13"); item(2257, "record_cat"); item(2258, "record_blocks"); item(2259, "record_chirp"); item(2260, "record_far"); item(2261, "record_mall"); item(2262, "record_mellohi"); item(2263, "record_stal"); item(2264, "record_strad"); item(2265, "record_ward"); item(2266, "record_11"); item(2267, "record_wait"); } }