From 1dec3806386cc3dfb94dbc7f875c90073efd4b02 Mon Sep 17 00:00:00 2001 From: hamza Date: Thu, 6 Jul 2023 08:51:43 +0300 Subject: [PATCH] update XMaterial.java --- .../configurable/util/XMaterial.java | 449 ++++++++++++------ 1 file changed, 292 insertions(+), 157 deletions(-) diff --git a/configurablegui/src/main/java/mc/obliviate/inventory/configurable/util/XMaterial.java b/configurablegui/src/main/java/mc/obliviate/inventory/configurable/util/XMaterial.java index 2e908d8..e96b3bb 100644 --- a/configurablegui/src/main/java/mc/obliviate/inventory/configurable/util/XMaterial.java +++ b/configurablegui/src/main/java/mc/obliviate/inventory/configurable/util/XMaterial.java @@ -1,3 +1,25 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2018 Hex_27 + * Copyright (c) 2022 Crypto Morin + * + * 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 mc.obliviate.inventory.configurable.util; import com.google.common.base.Enums; @@ -12,15 +34,7 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; -import java.util.Arrays; -import java.util.Collection; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Locale; -import java.util.Map; -import java.util.Objects; -import java.util.Optional; -import java.util.Set; +import java.util.*; import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -41,13 +55,13 @@ * Material Source Code: https://hub.spigotmc.org/stash/projects/SPIGOT/repos/bukkit/browse/src/main/java/org/bukkit/Material.java * XMaterial v1: https://www.spigotmc.org/threads/329630/ *

- * This class will throw a "unsupported material" error if someone tries to use an item with an invalid data value which can only happen in 1.12 servers and below or when the + * This class will throw an "unsupported material" error if someone tries to use an item with an invalid data value which can only happen in 1.12 servers and below or when the * utility is missing a new material in that specific version. * To get an invalid item, (aka Missing Texture Block) you can use the command * /give @p minecraft:dirt 1 10 where 1 is the item amount, and 10 is the data value. The material {@link #DIRT} with a data value of {@code 10} doesn't exist. * * @author Crypto Morin - * @version 11.0.0 + * @version 11.4.1 * @see Material * @see ItemStack */ @@ -58,8 +72,9 @@ public enum XMaterial { ACACIA_DOOR("ACACIA_DOOR", "ACACIA_DOOR_ITEM"), ACACIA_FENCE, ACACIA_FENCE_GATE, - ACACIA_LEAVES(4, "LEAVES_2"), - ACACIA_LOG(4, "LOG_2"), + ACACIA_HANGING_SIGN, + ACACIA_LEAVES(0, "LEAVES_2"), + ACACIA_LOG(0, "LOG_2"), ACACIA_PLANKS(4, "WOOD"), ACACIA_PRESSURE_PLATE("WOOD_PLATE"), ACACIA_SAPLING(4, "SAPLING"), @@ -67,9 +82,17 @@ public enum XMaterial { ACACIA_SLAB(4, "WOOD_DOUBLE_STEP", "WOOD_STEP", "WOODEN_SLAB"), ACACIA_STAIRS, ACACIA_TRAPDOOR("TRAP_DOOR"), + ACACIA_WALL_HANGING_SIGN, ACACIA_WALL_SIGN("WALL_SIGN"), - ACACIA_WOOD(4, "LOG_2"), + ACACIA_WOOD(0, "LOG_2"), ACTIVATOR_RAIL, + /** + * Air + * {@link Material#isAir()} + * + * @see #VOID_AIR + * @see #CAVE_AIR + */ AIR, ALLAY_SPAWN_EGG, ALLIUM(2, "RED_ROSE"), @@ -81,9 +104,12 @@ public enum XMaterial { ANDESITE_SLAB, ANDESITE_STAIRS, ANDESITE_WALL, + ANGLER_POTTERY_SHERD, ANVIL, APPLE, + ARCHER_POTTERY_SHERD, ARMOR_STAND, + ARMS_UP_POTTERY_SHERD, ARROW, ATTACHED_MELON_STEM(7, "MELON_STEM"), ATTACHED_PUMPKIN_STEM(7, "PUMPKIN_STEM"), @@ -94,7 +120,26 @@ public enum XMaterial { AZURE_BLUET(3, "RED_ROSE"), BAKED_POTATO, BAMBOO, + BAMBOO_BLOCK, + BAMBOO_BUTTON, + BAMBOO_CHEST_RAFT, + BAMBOO_DOOR, + BAMBOO_FENCE, + BAMBOO_FENCE_GATE, + BAMBOO_HANGING_SIGN, + BAMBOO_MOSAIC, + BAMBOO_MOSAIC_SLAB, + BAMBOO_MOSAIC_STAIRS, + BAMBOO_PLANKS, + BAMBOO_PRESSURE_PLATE, + BAMBOO_RAFT, BAMBOO_SAPLING, + BAMBOO_SIGN, + BAMBOO_SLAB, + BAMBOO_STAIRS, + BAMBOO_TRAPDOOR, + BAMBOO_WALL_HANGING_SIGN, + BAMBOO_WALL_SIGN, BARREL, BARRIER, BASALT, @@ -121,6 +166,7 @@ public enum XMaterial { BIRCH_DOOR("BIRCH_DOOR", "BIRCH_DOOR_ITEM"), BIRCH_FENCE, BIRCH_FENCE_GATE, + BIRCH_HANGING_SIGN, BIRCH_LEAVES(2, "LEAVES"), BIRCH_LOG(2, "LOG"), BIRCH_PLANKS(2, "WOOD"), @@ -130,6 +176,7 @@ public enum XMaterial { BIRCH_SLAB(2, "WOOD_DOUBLE_STEP", "WOOD_STEP", "WOODEN_SLAB"), BIRCH_STAIRS("BIRCH_WOOD_STAIRS"), BIRCH_TRAPDOOR("TRAP_DOOR"), + BIRCH_WALL_HANGING_SIGN, BIRCH_WALL_SIGN("WALL_SIGN"), BIRCH_WOOD(2, "LOG"), BLACKSTONE, @@ -154,6 +201,7 @@ public enum XMaterial { BLACK_TERRACOTTA(15, "STAINED_CLAY"), BLACK_WALL_BANNER("WALL_BANNER"), BLACK_WOOL(15, "WOOL"), + BLADE_POTTERY_SHERD, BLAST_FURNACE, BLAZE_POWDER, BLAZE_ROD, @@ -187,9 +235,10 @@ public enum XMaterial { BRAIN_CORAL_FAN, BRAIN_CORAL_WALL_FAN, BREAD, + BREWER_POTTERY_SHERD, BREWING_STAND("BREWING_STAND", "BREWING_STAND_ITEM"), BRICK("CLAY_BRICK"), - BRICKS("BRICKS", "BRICK"), + BRICKS("BRICK"), BRICK_SLAB(4, "STEP"), BRICK_STAIRS, BRICK_WALL, @@ -210,6 +259,7 @@ public enum XMaterial { BROWN_TERRACOTTA(12, "STAINED_CLAY"), BROWN_WALL_BANNER(3, "WALL_BANNER"), BROWN_WOOL(12, "WOOL"), + BRUSH, BUBBLE_COLUMN, BUBBLE_CORAL, BUBBLE_CORAL_BLOCK, @@ -218,9 +268,12 @@ public enum XMaterial { BUCKET, BUDDING_AMETHYST, BUNDLE, + BURN_POTTERY_SHERD, CACTUS, CAKE("CAKE_BLOCK"), CALCITE, + CALIBRATED_SCULK_SENSOR, + CAMEL_SPAWN_EGG, CAMPFIRE, CANDLE, CANDLE_CAKE, @@ -247,11 +300,31 @@ public enum XMaterial { CHAINMAIL_LEGGINGS, CHAIN_COMMAND_BLOCK("COMMAND", "COMMAND_CHAIN"), CHARCOAL(1, "COAL"), + CHERRY_BOAT, + CHERRY_BUTTON, + CHERRY_CHEST_BOAT, + CHERRY_DOOR, + CHERRY_FENCE, + CHERRY_FENCE_GATE, + CHERRY_HANGING_SIGN, + CHERRY_LEAVES, + CHERRY_LOG, + CHERRY_PLANKS, + CHERRY_PRESSURE_PLATE, + CHERRY_SAPLING, + CHERRY_SIGN, + CHERRY_SLAB, + CHERRY_STAIRS, + CHERRY_TRAPDOOR, + CHERRY_WALL_HANGING_SIGN, + CHERRY_WALL_SIGN, + CHERRY_WOOD, CHEST("LOCKED_CHEST"), CHEST_MINECART("STORAGE_MINECART"), CHICKEN("RAW_CHICKEN"), CHICKEN_SPAWN_EGG(93, "MONSTER_EGG"), CHIPPED_ANVIL(1, "ANVIL"), + CHISELED_BOOKSHELF, CHISELED_DEEPSLATE, CHISELED_NETHER_BRICKS(1, "NETHER_BRICKS"), CHISELED_POLISHED_BLACKSTONE("POLISHED_BLACKSTONE"), @@ -269,6 +342,7 @@ public enum XMaterial { COAL_BLOCK, COAL_ORE, COARSE_DIRT(1, "DIRT"), + COAST_ARMOR_TRIM_SMITHING_TEMPLATE, COBBLED_DEEPSLATE, COBBLED_DEEPSLATE_SLAB, COBBLED_DEEPSLATE_STAIRS, @@ -324,6 +398,7 @@ public enum XMaterial { CRIMSON_FENCE, CRIMSON_FENCE_GATE, CRIMSON_FUNGUS, + CRIMSON_HANGING_SIGN, CRIMSON_HYPHAE, CRIMSON_NYLIUM, CRIMSON_PLANKS, @@ -334,6 +409,7 @@ public enum XMaterial { CRIMSON_STAIRS, CRIMSON_STEM, CRIMSON_TRAPDOOR, + CRIMSON_WALL_HANGING_SIGN, CRIMSON_WALL_SIGN("WALL_SIGN"), CROSSBOW, CRYING_OBSIDIAN, @@ -361,14 +437,16 @@ public enum XMaterial { CYAN_WOOL(9, "WOOL"), DAMAGED_ANVIL(2, "ANVIL"), DANDELION("YELLOW_FLOWER"), + DANGER_POTTERY_SHERD, DARK_OAK_BOAT("BOAT_DARK_OAK"), DARK_OAK_BUTTON("WOOD_BUTTON"), DARK_OAK_CHEST_BOAT, DARK_OAK_DOOR("DARK_OAK_DOOR", "DARK_OAK_DOOR_ITEM"), DARK_OAK_FENCE, DARK_OAK_FENCE_GATE, - DARK_OAK_LEAVES(5, "LEAVES_2"), - DARK_OAK_LOG(5, "LOG_2"), + DARK_OAK_HANGING_SIGN, + DARK_OAK_LEAVES(1, "LEAVES_2"), + DARK_OAK_LOG(1, "LOG_2"), DARK_OAK_PLANKS(5, "WOOD"), DARK_OAK_PRESSURE_PLATE("WOOD_PLATE"), DARK_OAK_SAPLING(5, "SAPLING"), @@ -376,8 +454,9 @@ public enum XMaterial { DARK_OAK_SLAB(5, "WOOD_DOUBLE_STEP", "WOOD_STEP", "WOODEN_SLAB"), DARK_OAK_STAIRS, DARK_OAK_TRAPDOOR("TRAP_DOOR"), + DARK_OAK_WALL_HANGING_SIGN, DARK_OAK_WALL_SIGN("WALL_SIGN"), - DARK_OAK_WOOD(5, "LOG_2"), + DARK_OAK_WOOD(1, "LOG_2"), DARK_PRISMARINE(2, "PRISMARINE"), DARK_PRISMARINE_SLAB, DARK_PRISMARINE_STAIRS, @@ -404,6 +483,7 @@ public enum XMaterial { DEAD_TUBE_CORAL_FAN, DEAD_TUBE_CORAL_WALL_FAN, DEBUG_STICK, + DECORATED_POT, DEEPSLATE, DEEPSLATE_BRICKS, DEEPSLATE_BRICK_SLAB, @@ -457,6 +537,7 @@ public enum XMaterial { DRIPSTONE_BLOCK, DROPPER, DROWNED_SPAWN_EGG, + DUNE_ARMOR_TRIM_SMITHING_TEMPLATE, ECHO_SHARD, EGG, ELDER_GUARDIAN_SPAWN_EGG(4, "MONSTER_EGG"), @@ -470,6 +551,7 @@ public enum XMaterial { ENDERMAN_SPAWN_EGG(58, "MONSTER_EGG"), ENDERMITE_SPAWN_EGG(67, "MONSTER_EGG"), ENDER_CHEST, + ENDER_DRAGON_SPAWN_EGG, ENDER_EYE("EYE_OF_ENDER"), ENDER_PEARL, END_CRYSTAL, @@ -484,10 +566,12 @@ public enum XMaterial { END_STONE_BRICK_WALL, EVOKER_SPAWN_EGG(34, "MONSTER_EGG"), EXPERIENCE_BOTTLE("EXP_BOTTLE"), + EXPLORER_POTTERY_SHERD, EXPOSED_COPPER, EXPOSED_CUT_COPPER, EXPOSED_CUT_COPPER_SLAB, EXPOSED_CUT_COPPER_STAIRS, + EYE_ARMOR_TRIM_SMITHING_TEMPLATE, FARMLAND("SOIL"), FEATHER, FERMENTED_SPIDER_EYE, @@ -496,7 +580,7 @@ public enum XMaterial { * For some reasons filled map items are really special. * Their data value starts from 0 and every time a player * creates a new map that maps data value increases. - * https://github.com/CryptoMorin/XSeries/issues/91 + * GitHub Issue */ FILLED_MAP("MAP"), FIRE, @@ -516,6 +600,7 @@ public enum XMaterial { FLOWER_BANNER_PATTERN, FLOWER_POT("FLOWER_POT", "FLOWER_POT_ITEM"), FOX_SPAWN_EGG, + FRIEND_POTTERY_SHERD, FROGSPAWN, FROG_SPAWN_EGG, /** @@ -603,7 +688,9 @@ public enum XMaterial { GUNPOWDER("SULPHUR"), HANGING_ROOTS, HAY_BLOCK, + HEARTBREAK_POTTERY_SHERD, HEART_OF_THE_SEA, + HEART_POTTERY_SHERD, HEAVY_WEIGHTED_PRESSURE_PLATE("IRON_PLATE"), HOGLIN_SPAWN_EGG("MONSTER_EGG"), HONEYCOMB, @@ -617,6 +704,8 @@ public enum XMaterial { HORN_CORAL_FAN, HORN_CORAL_WALL_FAN, HORSE_SPAWN_EGG(100, "MONSTER_EGG"), + HOST_ARMOR_TRIM_SMITHING_TEMPLATE, + HOWL_POTTERY_SHERD, HUSK_SPAWN_EGG(23, "MONSTER_EGG"), ICE, INFESTED_CHISELED_STONE_BRICKS(5, "MONSTER_EGGS"), @@ -638,6 +727,7 @@ public enum XMaterial { IRON_BOOTS, IRON_CHESTPLATE, IRON_DOOR("IRON_DOOR_BLOCK"), + IRON_GOLEM_SPAWN_EGG, IRON_HELMET, IRON_HOE, IRON_HORSE_ARMOR("IRON_BARDING"), @@ -659,6 +749,7 @@ public enum XMaterial { JUNGLE_DOOR("JUNGLE_DOOR", "JUNGLE_DOOR_ITEM"), JUNGLE_FENCE, JUNGLE_FENCE_GATE, + JUNGLE_HANGING_SIGN, JUNGLE_LEAVES(3, "LEAVES"), JUNGLE_LOG(3, "LOG"), JUNGLE_PLANKS(3, "WOOD"), @@ -668,6 +759,7 @@ public enum XMaterial { JUNGLE_SLAB(3, "WOOD_DOUBLE_STEP", "WOOD_STEP", "WOODEN_SLAB"), JUNGLE_STAIRS("JUNGLE_WOOD_STAIRS"), JUNGLE_TRAPDOOR("TRAP_DOOR"), + JUNGLE_WALL_HANGING_SIGN, JUNGLE_WALL_SIGN("WALL_SIGN"), JUNGLE_WOOD(3, "LOG"), KELP, @@ -775,6 +867,7 @@ public enum XMaterial { MANGROVE_DOOR, MANGROVE_FENCE, MANGROVE_FENCE_GATE, + MANGROVE_HANGING_SIGN, MANGROVE_LEAVES, MANGROVE_LOG, MANGROVE_PLANKS, @@ -785,6 +878,7 @@ public enum XMaterial { MANGROVE_SLAB, MANGROVE_STAIRS, MANGROVE_TRAPDOOR, + MANGROVE_WALL_HANGING_SIGN, MANGROVE_WALL_SIGN, MANGROVE_WOOD, /** @@ -802,6 +896,7 @@ public enum XMaterial { MELON_STEM, MILK_BUCKET, MINECART, + MINER_POTTERY_SHERD, MOJANG_BANNER_PATTERN, MOOSHROOM_SPAWN_EGG(96, "MONSTER_EGG"), MOSSY_COBBLESTONE, @@ -814,6 +909,7 @@ public enum XMaterial { MOSSY_STONE_BRICK_WALL, MOSS_BLOCK, MOSS_CARPET, + MOURNER_POTTERY_SHERD, MOVING_PISTON("PISTON_MOVING_PIECE"), MUD, MUDDY_MANGROVE_ROOTS, @@ -835,6 +931,7 @@ public enum XMaterial { MUSIC_DISC_MELLOHI("RECORD_7"), MUSIC_DISC_OTHERSIDE, MUSIC_DISC_PIGSTEP, + MUSIC_DISC_RELIC, MUSIC_DISC_STAL("RECORD_8"), MUSIC_DISC_STRAD("RECORD_9"), MUSIC_DISC_WAIT("RECORD_12"), @@ -855,6 +952,7 @@ public enum XMaterial { NETHERITE_SCRAP, NETHERITE_SHOVEL, NETHERITE_SWORD, + NETHERITE_UPGRADE_SMITHING_TEMPLATE, NETHERRACK, NETHER_BRICK("NETHER_BRICK_ITEM"), NETHER_BRICKS("NETHER_BRICK"), @@ -868,7 +966,7 @@ public enum XMaterial { NETHER_SPROUTS, NETHER_STAR, /** - * Just like mentioned in https://minecraft.gamepedia.com/Nether_Wart + * Just like mentioned in Nether Wart * Nether wart is also known as nether stalk in the code. * NETHER_STALK is the planted state of nether warts. */ @@ -881,6 +979,7 @@ public enum XMaterial { OAK_DOOR("WOODEN_DOOR", "WOOD_DOOR"), OAK_FENCE("FENCE"), OAK_FENCE_GATE("FENCE_GATE"), + OAK_HANGING_SIGN, OAK_LEAVES("LEAVES"), OAK_LOG("LOG"), OAK_PLANKS("WOOD"), @@ -890,6 +989,7 @@ public enum XMaterial { OAK_SLAB("WOOD_DOUBLE_STEP", "WOOD_STEP", "WOODEN_SLAB"), OAK_STAIRS("WOOD_STAIRS"), OAK_TRAPDOOR("TRAP_DOOR"), + OAK_WALL_HANGING_SIGN, OAK_WALL_SIGN("WALL_SIGN"), OAK_WOOD("LOG"), OBSERVER, @@ -930,7 +1030,9 @@ public enum XMaterial { PHANTOM_SPAWN_EGG, PIGLIN_BANNER_PATTERN, PIGLIN_BRUTE_SPAWN_EGG, + PIGLIN_HEAD, PIGLIN_SPAWN_EGG(57, "MONSTER_EGG"), + PIGLIN_WALL_HEAD, PIG_SPAWN_EGG(90, "MONSTER_EGG"), PILLAGER_SPAWN_EGG, PINK_BANNER(9, "STANDING_BANNER", "BANNER"), @@ -942,6 +1044,7 @@ public enum XMaterial { PINK_CONCRETE_POWDER(6, "CONCRETE_POWDER"), PINK_DYE(9, "INK_SACK"), PINK_GLAZED_TERRACOTTA, + PINK_PETALS, PINK_SHULKER_BOX, PINK_STAINED_GLASS(6, "STAINED_GLASS"), PINK_STAINED_GLASS_PANE(6, "THIN_GLASS", "STAINED_GLASS_PANE"), @@ -951,8 +1054,12 @@ public enum XMaterial { PINK_WOOL(6, "WOOL"), PISTON("PISTON_BASE"), PISTON_HEAD("PISTON_EXTENSION"), + PITCHER_CROP, + PITCHER_PLANT, + PITCHER_POD, PLAYER_HEAD(3, "SKULL", "SKULL_ITEM"), PLAYER_WALL_HEAD(3, "SKULL", "SKULL_ITEM"), + PLENTY_POTTERY_SHERD, PODZOL(2, "DIRT"), POINTED_DRIPSTONE, POISONOUS_POTATO, @@ -988,37 +1095,43 @@ public enum XMaterial { POTATOES("POTATO"), POTION, POTTED_ACACIA_SAPLING(4, "FLOWER_POT"), - POTTED_ALLIUM(2, "RED_ROSE", "FLOWER_POT"), + POTTED_ALLIUM(2, "FLOWER_POT"), POTTED_AZALEA_BUSH, - POTTED_AZURE_BLUET(3, "RED_ROSE", "FLOWER_POT"), + POTTED_AZURE_BLUET(3, "FLOWER_POT"), POTTED_BAMBOO, POTTED_BIRCH_SAPLING(2, "FLOWER_POT"), - POTTED_BLUE_ORCHID(1, "RED_ROSE", "FLOWER_POT"), + POTTED_BLUE_ORCHID(1, "FLOWER_POT"), POTTED_BROWN_MUSHROOM("FLOWER_POT"), POTTED_CACTUS("FLOWER_POT"), + POTTED_CHERRY_SAPLING, POTTED_CORNFLOWER, POTTED_CRIMSON_FUNGUS, POTTED_CRIMSON_ROOTS, - POTTED_DANDELION("YELLOW_FLOWER", "FLOWER_POT"), + POTTED_DANDELION("FLOWER_POT"), POTTED_DARK_OAK_SAPLING(5, "FLOWER_POT"), POTTED_DEAD_BUSH("FLOWER_POT"), - POTTED_FERN(2, "LONG_GRASS", "FLOWER_POT"), + POTTED_FERN(2, "FLOWER_POT"), POTTED_FLOWERING_AZALEA_BUSH, POTTED_JUNGLE_SAPLING(3, "FLOWER_POT"), POTTED_LILY_OF_THE_VALLEY, POTTED_MANGROVE_PROPAGULE, POTTED_OAK_SAPLING("FLOWER_POT"), - POTTED_ORANGE_TULIP(5, "RED_ROSE", "FLOWER_POT"), - POTTED_OXEYE_DAISY(8, "RED_ROSE", "FLOWER_POT"), - POTTED_PINK_TULIP(7, "RED_ROSE", "FLOWER_POT"), - POTTED_POPPY("RED_ROSE", "FLOWER_POT"), + POTTED_ORANGE_TULIP(5, "FLOWER_POT"), + POTTED_OXEYE_DAISY(8, "FLOWER_POT"), + POTTED_PINK_TULIP(7, "FLOWER_POT"), + POTTED_POPPY("FLOWER_POT"), POTTED_RED_MUSHROOM("FLOWER_POT"), - POTTED_RED_TULIP(4, "RED_ROSE", "FLOWER_POT"), + POTTED_RED_TULIP(4, "FLOWER_POT"), POTTED_SPRUCE_SAPLING(1, "FLOWER_POT"), + POTTED_TORCHFLOWER, POTTED_WARPED_FUNGUS, POTTED_WARPED_ROOTS, - POTTED_WHITE_TULIP(6, "RED_ROSE", "FLOWER_POT"), + POTTED_WHITE_TULIP(6, "FLOWER_POT"), POTTED_WITHER_ROSE, + POTTERY_SHARD_ARCHER, + POTTERY_SHARD_ARMS_UP, + POTTERY_SHARD_PRIZE, + POTTERY_SHARD_SKULL, POWDER_SNOW, POWDER_SNOW_BUCKET, POWDER_SNOW_CAULDRON, @@ -1032,6 +1145,7 @@ public enum XMaterial { PRISMARINE_SLAB, PRISMARINE_STAIRS, PRISMARINE_WALL, + PRIZE_POTTERY_SHERD, PUFFERFISH(3, "RAW_FISH"), PUFFERFISH_BUCKET, PUFFERFISH_SPAWN_EGG, @@ -1070,6 +1184,7 @@ public enum XMaterial { RABBIT_SPAWN_EGG(101, "MONSTER_EGG"), RABBIT_STEW, RAIL("RAILS"), + RAISER_ARMOR_TRIM_SMITHING_TEMPLATE, RAVAGER_SPAWN_EGG, RAW_COPPER, RAW_COPPER_BLOCK, @@ -1106,6 +1221,10 @@ public enum XMaterial { RED_CARPET(14, "CARPET"), RED_CONCRETE(14, "CONCRETE"), RED_CONCRETE_POWDER(14, "CONCRETE_POWDER"), + /** + * 1.13 renamed to ROSE_RED + * 1.14 renamed to RED_DYE + */ RED_DYE(1, "INK_SACK", "ROSE_RED"), RED_GLAZED_TERRACOTTA, RED_MUSHROOM, @@ -1130,6 +1249,7 @@ public enum XMaterial { REPEATER("DIODE_BLOCK_ON", "DIODE_BLOCK_OFF", "DIODE"), REPEATING_COMMAND_BLOCK("COMMAND", "COMMAND_REPEATING"), RESPAWN_ANCHOR, + RIB_ARMOR_TRIM_SMITHING_TEMPLATE, ROOTED_DIRT, ROSE_BUSH(4, "DOUBLE_PLANT"), ROTTEN_FLESH, @@ -1152,19 +1272,25 @@ public enum XMaterial { SEAGRASS, SEA_LANTERN, SEA_PICKLE, + SENTRY_ARMOR_TRIM_SMITHING_TEMPLATE, + SHAPER_ARMOR_TRIM_SMITHING_TEMPLATE, + SHEAF_POTTERY_SHERD, SHEARS, SHEEP_SPAWN_EGG(91, "MONSTER_EGG"), + SHELTER_POTTERY_SHERD, SHIELD, SHROOMLIGHT, SHULKER_BOX("PURPLE_SHULKER_BOX"), SHULKER_SHELL, SHULKER_SPAWN_EGG(69, "MONSTER_EGG"), + SILENCE_ARMOR_TRIM_SMITHING_TEMPLATE, SILVERFISH_SPAWN_EGG(60, "MONSTER_EGG"), SKELETON_HORSE_SPAWN_EGG(28, "MONSTER_EGG"), SKELETON_SKULL("SKULL", "SKULL_ITEM"), SKELETON_SPAWN_EGG(51, "MONSTER_EGG"), SKELETON_WALL_SKULL("SKULL", "SKULL_ITEM"), SKULL_BANNER_PATTERN, + SKULL_POTTERY_SHERD, SLIME_BALL, SLIME_BLOCK, SLIME_SPAWN_EGG(55, "MONSTER_EGG"), @@ -1184,9 +1310,14 @@ public enum XMaterial { SMOOTH_SANDSTONE_STAIRS, SMOOTH_STONE, SMOOTH_STONE_SLAB, + SNIFFER_EGG, + SNIFFER_SPAWN_EGG, + SNORT_POTTERY_SHERD, + SNOUT_ARMOR_TRIM_SMITHING_TEMPLATE, SNOW, SNOWBALL("SNOW_BALL"), SNOW_BLOCK, + SNOW_GOLEM_SPAWN_EGG, SOUL_CAMPFIRE, SOUL_FIRE, SOUL_LANTERN, @@ -1198,6 +1329,7 @@ public enum XMaterial { SPECTRAL_ARROW, SPIDER_EYE, SPIDER_SPAWN_EGG(52, "MONSTER_EGG"), + SPIRE_ARMOR_TRIM_SMITHING_TEMPLATE, SPLASH_POTION, SPONGE, SPORE_BLOSSOM, @@ -1207,6 +1339,7 @@ public enum XMaterial { SPRUCE_DOOR("SPRUCE_DOOR", "SPRUCE_DOOR_ITEM"), SPRUCE_FENCE, SPRUCE_FENCE_GATE, + SPRUCE_HANGING_SIGN, SPRUCE_LEAVES(1, "LEAVES"), SPRUCE_LOG(1, "LOG"), SPRUCE_PLANKS(1, "WOOD"), @@ -1216,6 +1349,7 @@ public enum XMaterial { SPRUCE_SLAB(1, "WOOD_DOUBLE_STEP", "WOOD_STEP", "WOODEN_SLAB"), SPRUCE_STAIRS("SPRUCE_WOOD_STAIRS"), SPRUCE_TRAPDOOR("TRAP_DOOR"), + SPRUCE_WALL_HANGING_SIGN, SPRUCE_WALL_SIGN("WALL_SIGN"), SPRUCE_WOOD(1, "LOG"), SPYGLASS, @@ -1242,8 +1376,11 @@ public enum XMaterial { STRING, STRIPPED_ACACIA_LOG, STRIPPED_ACACIA_WOOD, + STRIPPED_BAMBOO_BLOCK, STRIPPED_BIRCH_LOG, STRIPPED_BIRCH_WOOD, + STRIPPED_CHERRY_LOG, + STRIPPED_CHERRY_WOOD, STRIPPED_CRIMSON_HYPHAE, STRIPPED_CRIMSON_STEM, STRIPPED_DARK_OAK_LOG, @@ -1270,6 +1407,8 @@ public enum XMaterial { */ SUGAR_CANE("SUGAR_CANE_BLOCK"), SUNFLOWER("DOUBLE_PLANT"), + SUSPICIOUS_GRAVEL, + SUSPICIOUS_SAND, SUSPICIOUS_STEW, SWEET_BERRIES, SWEET_BERRY_BUSH, @@ -1279,11 +1418,15 @@ public enum XMaterial { TALL_SEAGRASS, TARGET, TERRACOTTA("HARD_CLAY"), + TIDE_ARMOR_TRIM_SMITHING_TEMPLATE, TINTED_GLASS, TIPPED_ARROW, TNT, TNT_MINECART("EXPLOSIVE_MINECART"), TORCH, + TORCHFLOWER, + TORCHFLOWER_CROP, + TORCHFLOWER_SEEDS, TOTEM_OF_UNDYING("TOTEM"), TRADER_LLAMA_SPAWN_EGG, TRAPPED_CHEST, @@ -1304,6 +1447,7 @@ public enum XMaterial { TWISTING_VINES, TWISTING_VINES_PLANT, VERDANT_FROGLIGHT, + VEX_ARMOR_TRIM_SMITHING_TEMPLATE, VEX_SPAWN_EGG(35, "MONSTER_EGG"), VILLAGER_SPAWN_EGG(120, "MONSTER_EGG"), VINDICATOR_SPAWN_EGG(36, "MONSTER_EGG"), @@ -1317,12 +1461,14 @@ public enum XMaterial { WALL_TORCH("TORCH"), WANDERING_TRADER_SPAWN_EGG, WARDEN_SPAWN_EGG, + WARD_ARMOR_TRIM_SMITHING_TEMPLATE, WARPED_BUTTON, WARPED_DOOR, WARPED_FENCE, WARPED_FENCE_GATE, WARPED_FUNGUS, WARPED_FUNGUS_ON_A_STICK, + WARPED_HANGING_SIGN, WARPED_HYPHAE, WARPED_NYLIUM, WARPED_PLANKS, @@ -1333,13 +1479,14 @@ public enum XMaterial { WARPED_STAIRS, WARPED_STEM, WARPED_TRAPDOOR, + WARPED_WALL_HANGING_SIGN, WARPED_WALL_SIGN("WALL_SIGN"), WARPED_WART_BLOCK, /** * This is used for blocks only. * In 1.13- WATER will turn into STATIONARY_WATER after it finished spreading. * After 1.13+ this uses - * https://hub.spigotmc.org/javadocs/spigot/org/bukkit/block/data/Levelled.html water flowing system. + * Levelled water flowing system. */ WATER("STATIONARY_WATER"), WATER_BUCKET, @@ -1360,6 +1507,7 @@ public enum XMaterial { WAXED_WEATHERED_CUT_COPPER, WAXED_WEATHERED_CUT_COPPER_SLAB, WAXED_WEATHERED_CUT_COPPER_STAIRS, + WAYFINDER_ARMOR_TRIM_SMITHING_TEMPLATE, WEATHERED_COPPER, WEATHERED_CUT_COPPER, WEATHERED_CUT_COPPER_SLAB, @@ -1388,11 +1536,13 @@ public enum XMaterial { WHITE_TULIP(6, "RED_ROSE"), WHITE_WALL_BANNER(15, "WALL_BANNER"), WHITE_WOOL("WOOL"), + WILD_ARMOR_TRIM_SMITHING_TEMPLATE, WITCH_SPAWN_EGG(66, "MONSTER_EGG"), WITHER_ROSE, WITHER_SKELETON_SKULL(1, "SKULL", "SKULL_ITEM"), WITHER_SKELETON_SPAWN_EGG(5, "MONSTER_EGG"), WITHER_SKELETON_WALL_SKULL(1, "SKULL", "SKULL_ITEM"), + WITHER_SPAWN_EGG, WOLF_SPAWN_EGG(95, "MONSTER_EGG"), WOODEN_AXE("WOOD_AXE"), WOODEN_HOE("WOOD_HOE"), @@ -1408,6 +1558,10 @@ public enum XMaterial { YELLOW_CARPET(4, "CARPET"), YELLOW_CONCRETE(4, "CONCRETE"), YELLOW_CONCRETE_POWDER(4, "CONCRETE_POWDER"), + /** + * 1.13 renamed to DANDELION_YELLOW + * 1.14 renamed to YELLOW_DYE + */ YELLOW_DYE(11, "INK_SACK", "DANDELION_YELLOW"), YELLOW_GLAZED_TERRACOTTA, YELLOW_SHULKER_BOX, @@ -1459,7 +1613,7 @@ public enum XMaterial { .build(); /** * The maximum data value in the pre-flattening update which belongs to {@link #VILLAGER_SPAWN_EGG}
- * https://minecraftitemids.com/types/spawn-egg + * Spawn Eggs * * @see #matchXMaterialWithData(String) * @since 8.0.0 @@ -1511,7 +1665,7 @@ public enum XMaterial { } /** - * The data value of this material https://minecraft.gamepedia.com/Java_Edition_data_values/Pre-flattening + * The data value of this material Pre-flattening * It's never a negative number. * * @see #getData() @@ -1551,44 +1705,6 @@ public enum XMaterial { this(0, legacy); } - /** - * Checks if the version is 1.13 Aquatic Update or higher. - * An invocation of this method yields the cached result from the expression: - *

- *

- * {@link #supports(int) 13}} - *
- * - * @return true if 1.13 or higher. - * @see #getVersion() - * @see #supports(int) - * @since 1.0.0 - * @deprecated Use {@code XMaterial.supports(13)} instead. This method name can be confusing. - */ - @Deprecated - public static boolean isNewVersion() { - return Data.ISFLAT; - } - - /** - * This is just an extra method that can be used for many cases. - * It can be used in {@link org.bukkit.event.player.PlayerInteractEvent} - * or other compatibility related methods. - *

- * An invocation of this method yields exactly the same result as the expression: - *

- *

- * !{@link #supports(int)} 9 - *
- * - * @since 2.0.0 - * @deprecated Use {@code !XMaterial.supports(9)} instead. - */ - @Deprecated - public static boolean isOneEight() { - return !supports(9); - } - /** * Gets the XMaterial with this name similar to {@link #valueOf(String)} * without throwing an exception. @@ -1637,22 +1753,6 @@ private static XMaterial requestOldXMaterial(@Nonnull String name, byte data) { return null; } - /** - * Parses the given material name as an XMaterial with a given data - * value in the string if attached. Check {@link #matchXMaterialWithData(String)} for more info. - * - * @see #matchXMaterialWithData(String) - * @see #matchDefinedXMaterial(String, byte) - * @since 2.0.0 - */ - @Nonnull - public static Optional matchXMaterial(@Nonnull String name) { - if (name == null || name.isEmpty()) - throw new IllegalArgumentException("Cannot match a material with null or empty material name"); - Optional oldMatch = matchXMaterialWithData(name); - return oldMatch.isPresent() ? oldMatch : matchDefinedXMaterial(format(name), UNKNOWN_DATA_VALUE); - } - /** * Parses material name and data value from the specified string. * The separator for the material name and its data value is {@code :} @@ -1686,6 +1786,22 @@ private static Optional matchXMaterialWithData(@Nonnull String name) return Optional.empty(); } + /** + * Parses the given material name as an XMaterial with a given data + * value in the string if attached. Check {@link #matchXMaterialWithData(String)} for more info. + * + * @see #matchXMaterialWithData(String) + * @see #matchDefinedXMaterial(String, byte) + * @since 2.0.0 + */ + @Nonnull + public static Optional matchXMaterial(@Nonnull String name) { + if (name == null || name.isEmpty()) + throw new IllegalArgumentException("Cannot match a material with null or empty material name"); + Optional oldMatch = matchXMaterialWithData(name); + return oldMatch.isPresent() ? oldMatch : matchDefinedXMaterial(format(name), UNKNOWN_DATA_VALUE); + } + /** * Parses the given material as an XMaterial. * @@ -1716,7 +1832,11 @@ public static XMaterial matchXMaterial(@Nonnull Material material) { public static XMaterial matchXMaterial(@Nonnull ItemStack item) { Objects.requireNonNull(item, "Cannot match null ItemStack"); String material = item.getType().name(); - byte data = (byte) (Data.ISFLAT || item.getType().getMaxDurability() > 0 ? 0 : item.getDurability()); + + // 1.13+ doesn't use data values at all. + // Maps are given different data values for different parts of the map also some plugins use negative values for custom images. + // Items that have durability, such as armor and tools don't use the data value to distinguish their material. + byte data = (byte) (Data.ISFLAT || material.equals("MAP") || item.getType().getMaxDurability() > 0 ? 0 : item.getDurability()); // Versions 1.9-1.12 didn't really use the items data value. if (supports(9) && !supports(13) && item.hasItemMeta() && material.equals("MONSTER_EGG")) { @@ -1735,11 +1855,15 @@ public static XMaterial matchXMaterial(@Nonnull ItemStack item) { } // Refer to the enum for info. - // Currently this is the only material with a non-zero data value + // Currently, these are the only materials with a non-zero data value // that has been renamed after the flattening update. - // If this happens to more materials in the future, - // I might have to change then system. - if (Data.ISFLAT && !supports(14) && material.equals("CACTUS_GREEN")) return GREEN_DYE; + // If this happens to more materials in the future, I might have to change the system. + if (supports(13) && !supports(14)) { + // https://hub.spigotmc.org/stash/projects/SPIGOT/repos/bukkit/diff/src/main/java/org/bukkit/Material.java?until=67d908a9830c71267ee740f5bddd728ce9c64cc7 + if (material.equals("CACTUS_GREEN")) return GREEN_DYE; + if (material.equals("ROSE_RED")) return RED_DYE; + if (material.equals("DANDELION_YELLOW")) return YELLOW_DYE; + } // Check FILLED_MAP enum for more info. // if (!Data.ISFLAT && item.hasItemMeta() && item.getItemMeta() instanceof org.bukkit.inventory.meta.MapMeta) return FILLED_MAP; @@ -1750,6 +1874,29 @@ public static XMaterial matchXMaterial(@Nonnull ItemStack item) { throw new IllegalArgumentException("Unsupported material from item: " + material + " (" + data + ')'); } + /** + * Gets the XMaterial based on the material's ID (Magic Value) and data value.
+ * You should avoid using this for performance issues. + * + * @param id the ID (Magic value) of the material. + * @param data the data value of the material. + * @return a parsed XMaterial with the same ID and data value. + * @see #matchXMaterial(ItemStack) + * @since 2.0.0 + * @deprecated this method loops through all the available materials and matches their ID using {@link #getId()} + * which takes a really long time. Plugins should no longer support IDs. If you want, you can make a {@link Map} cache yourself. + * This method obviously doesn't work for 1.13+ and will not be supported. This is only here for debugging purposes. + */ + @Nonnull + @Deprecated + public static Optional matchXMaterial(int id, byte data) { + if (id < 0 || id > MAX_ID || data < 0) return Optional.empty(); + for (XMaterial materials : VALUES) { + if (materials.data == data && materials.getId() == id) return Optional.of(materials); + } + return Optional.empty(); + } + /** * The main method that parses the given material name and data value as an XMaterial. * All the values passed to this method will not be null or empty and are formatted correctly. @@ -1762,6 +1909,7 @@ public static XMaterial matchXMaterial(@Nonnull ItemStack item) { * @see #matchXMaterial(ItemStack) * @since 3.0.0 */ + @SuppressWarnings({"DanglingJavadoc", "JavadocBlankLines"}) @Nonnull protected static Optional matchDefinedXMaterial(@Nonnull String name, byte data) { // if (!Boolean.valueOf(Boolean.getBoolean(Boolean.TRUE.toString())).equals(Boolean.FALSE.booleanValue())) return null; @@ -1781,50 +1929,28 @@ protected static Optional matchDefinedXMaterial(@Nonnull String name, return (data >= 0 && isAMap) ? Optional.of(FILLED_MAP) : Optional.empty(); } - if (!Data.ISFLAT && oldXMaterial.isPlural() && (duplicated == null ? isDuplicated(name) : duplicated)) + /** + * XMaterial Paradox (Duplication Check) + * I've concluded that this is just an infinite loop that keeps + * going around the Singular Form and the Plural Form materials. A waste of brain cells and a waste of time. + * This solution works just fine anyway. + * + * A solution for XMaterial Paradox. + * Manually parses the duplicated materials to find the exact material based on the server version. + * If the name ends with "S" -> Plural Form Material. + * Plural methods are only plural if they're also {@link #DUPLICATED} + * + * The only special exceptions are {@link #BRICKS} (??) and {@link #NETHER_BRICKS} + * Note: BRICKS was added because + * {@code XMaterial.matchXMaterial("BRICK")} would match {@link #BRICKS} instead in 1.8. + */ + boolean isPlural = oldXMaterial == CARROTS || oldXMaterial == POTATOES || oldXMaterial == BRICKS; + + if (!Data.ISFLAT && isPlural && (duplicated == null ? isDuplicated(name) : duplicated)) return getIfPresent(name); return Optional.of(oldXMaterial); } - /** - * XMaterial Paradox (Duplication Check) - * Checks if the material has any duplicates. - *

- * Example: - *

{@code MELON, CARROT, POTATO, BEETROOT -> true} - * - * @param name the name of the material to check. - * @return true if there's a duplicated material for this material, otherwise false. - * @since 2.0.0 - */ - private static boolean isDuplicated(@Nonnull String name) { - // Don't use matchXMaterial() since this method is being called from matchXMaterial() itself and will cause a StackOverflowError. - return DUPLICATED.contains(name); - } - - /** - * Gets the XMaterial based on the material's ID (Magic Value) and data value.
- * You should avoid using this for performance issues. - * - * @param id the ID (Magic value) of the material. - * @param data the data value of the material. - * @return a parsed XMaterial with the same ID and data value. - * @see #matchXMaterial(ItemStack) - * @since 2.0.0 - * @deprecated this method loops through all the available materials and matches their ID using {@link #getId()} - * which takes a really long time. Plugins should no longer support IDs. If you want, you can make a {@link Map} cache yourself. - * This method obviously doesn't work for 1.13+ and will not be supported. This is only here for debugging purposes. - */ - @Nonnull - @Deprecated - public static Optional matchXMaterial(int id, byte data) { - if (id < 0 || id > MAX_ID || data < 0) return Optional.empty(); - for (XMaterial materials : VALUES) { - if (materials.data == data && materials.getId() == id) return Optional.of(materials); - } - return Optional.empty(); - } - /** * Attempts to build the string like an enum name. * Removes all the spaces, and extra non-English characters. Also removes some config/in-game based strings. @@ -1880,27 +2006,6 @@ public String[] getLegacy() { return this.legacy; } - /** - * XMaterial Paradox (Duplication Check) - * I've concluded that this is just an infinite loop that keeps - * going around the Singular Form and the Plural Form materials. A waste of brain cells and a waste of time. - * This solution works just fine anyway. - *

- * A solution for XMaterial Paradox. - * Manually parses the duplicated materials to find the exact material based on the server version. - * If the name ends with "S" -> Plural Form Material. - * Plural methods are only plural if they're also {@link #DUPLICATED} - *

- * The only special exceptions are {@link #BRICKS} and {@link #NETHER_BRICKS} - * - * @return true if this material is a plural form material, otherwise false. - * @since 8.0.0 - */ - private boolean isPlural() { - // this.name().charAt(this.name().length() - 1) == 'S' - return this == CARROTS || this == POTATOES; - } - /** * Checks if the list of given material names matches the given base material. * Mostly used for configs. @@ -2032,7 +2137,7 @@ public String toString() { /** * Gets the ID (Magic value) of the material. - * https://www.minecraftinfo.com/idlist.htm + * ID List *

* Spigot added material ID support back in 1.16+ * @@ -2122,6 +2227,37 @@ public boolean isSupported() { return this.material != null; } + /** + * Checks if this material is supported in the current version and + * returns itself if yes. + *

+ * In the other case, the alternate material will get returned, + * no matter if it is supported or not. + * + * @param alternateMaterial the material to get if this one is not supported. + * @return this material or the {@code alternateMaterial} if not supported. + */ + @Nullable + public XMaterial or(@Nullable XMaterial alternateMaterial) { + return isSupported() ? this : alternateMaterial; + } + + /** + * XMaterial Paradox (Duplication Check) + * Checks if the material has any duplicates. + *

+ * Example: + *

{@code MELON, CARROT, POTATO, BEETROOT -> true} + * + * @param name the name of the material to check. + * @return true if there's a duplicated material for this material, otherwise false. + * @since 2.0.0 + */ + private static boolean isDuplicated(@Nonnull String name) { + // Don't use matchXMaterial() since this method is being called from matchXMaterial() itself and will cause a StackOverflowError. + return DUPLICATED.contains(name); + } + /** * This method is needed due to Java enum initialization limitations. * It's really inefficient yes, but it's only used for initialization. @@ -2191,5 +2327,4 @@ private static final class Data { */ private static final boolean ISFLAT = supports(13); } -} - +} \ No newline at end of file