diff --git a/pom.xml b/pom.xml index 1114ac6a..e046731b 100644 --- a/pom.xml +++ b/pom.xml @@ -67,7 +67,7 @@ -LOCAL - 2.19.1 + 2.19.2 BentoBoxWorld_Level bentobox-world https://sonarcloud.io diff --git a/src/main/java/world/bentobox/level/panels/DetailsPanel.java b/src/main/java/world/bentobox/level/panels/DetailsPanel.java index 366443ca..f116ace5 100644 --- a/src/main/java/world/bentobox/level/panels/DetailsPanel.java +++ b/src/main/java/world/bentobox/level/panels/DetailsPanel.java @@ -12,6 +12,7 @@ import java.util.stream.Collectors; import org.bukkit.Material; +import org.bukkit.Tag; import org.bukkit.World; import org.bukkit.entity.EntityType; import org.bukkit.event.inventory.ClickType; @@ -699,6 +700,14 @@ private String buildDescription(String descriptionTemplate, BlockRec blockCount, "|"); } + /** + * Block data record + * @param icon - itemstack + * @param blockId - Block ID string + * @param blockValue - int value + * @param displayMaterial - user friendly name + * @param extraDesc - extra description + */ private record BlockDataRec(ItemStack icon, String blockId, int blockValue, int blockLimit, String displayMaterial, String extraDesc) { } @@ -706,6 +715,9 @@ private record BlockDataRec(ItemStack icon, String blockId, int blockValue, int private BlockDataRec getBlockData(Object key) { final String ref = "level.gui.buttons.material."; if (key instanceof Material m) { + if (!m.isItem()) { + m = convertItem(m); + } return new BlockDataRec(PanelUtils.getMaterialItem(m), this.user.getTranslationOrNothing(ref + "id", "[id]", m.name()), Objects.requireNonNullElse(this.addon.getBlockConfig().getValue(world, m), 0), @@ -727,7 +739,7 @@ private BlockDataRec getBlockData(Object key) { this.addon.getBlockConfig().getBlockValues().getOrDefault(s, 0), Objects.requireNonNullElse(this.addon.getBlockConfig().getLimit(s), 0), disp, ""); } - return new BlockDataRec(null, "", 0, 0, Utils.prettifyObject(key, this.user), ""); + return new BlockDataRec(new ItemStack(Material.PAPER), "", 0, 0, Utils.prettifyObject(key, this.user), ""); } @@ -735,6 +747,72 @@ private BlockDataRec getBlockData(Object key) { // Section: Other Methods // --------------------------------------------------------------------- + private Material convertItem(Material m) { + if (Tag.CROPS.isTagged(m)) { + return Material.FARMLAND; + } + if (Tag.CANDLE_CAKES.isTagged(m)) { + return Material.CAKE; + } + if (Tag.CAULDRONS.isTagged(m)) { + return Material.CAULDRON; + } + if (Tag.FLOWER_POTS.isTagged(m)) { + return Material.FLOWER_POT; + } + if (Tag.SNOW.isTagged(m)) { + return Material.SNOW_BLOCK; + } + if (Tag.WALL_CORALS.isTagged(m)) { + // Wall corals end in _WALL_FAN + return Objects.requireNonNullElse(Material.getMaterial(m.name().substring(0, m.name().length() - 9)), + Material.BRAIN_CORAL); + } + if (Tag.WALL_SIGNS.isTagged(m)) { + // Wall signs end in _WALL_SIGN + return Objects.requireNonNullElse( + Material.getMaterial(m.name().substring(0, m.name().length() - 10) + "_SIGN"), Material.OAK_SIGN); + } + if (Tag.WALL_HANGING_SIGNS.isTagged(m)) { + // Wall signs end in _HANGING_WALL_SIGN + return Objects.requireNonNullElse( + Material.getMaterial(m.name().substring(0, m.name().length() - 18) + "_SIGN"), Material.OAK_SIGN); + } + + return switch (m) { + case WATER -> Material.WATER_BUCKET; + case LAVA -> Material.LAVA_BUCKET; + case TRIPWIRE -> Material.TRIPWIRE_HOOK; + case PISTON_HEAD, MOVING_PISTON -> Material.PISTON; + case TALL_SEAGRASS -> Material.SEAGRASS; + case FIRE, SOUL_FIRE -> Material.FLINT_AND_STEEL; + case REDSTONE_WIRE -> Material.REDSTONE; + case WALL_TORCH, REDSTONE_WALL_TORCH, SOUL_WALL_TORCH -> Material.TORCH; + case NETHER_PORTAL, END_PORTAL, END_GATEWAY -> Material.ENDER_PEARL; + case ATTACHED_PUMPKIN_STEM, ATTACHED_MELON_STEM, PUMPKIN_STEM, MELON_STEM -> Material.PUMPKIN_SEEDS; + case COCOA -> Material.COCOA_BEANS; + case FROSTED_ICE -> Material.ICE; + case WATER_CAULDRON, LAVA_CAULDRON, POWDER_SNOW_CAULDRON -> Material.CAULDRON; + case SKELETON_WALL_SKULL, WITHER_SKELETON_WALL_SKULL, ZOMBIE_WALL_HEAD, PLAYER_WALL_HEAD, CREEPER_WALL_HEAD, + DRAGON_WALL_HEAD, PIGLIN_WALL_HEAD -> + Material.SKELETON_SKULL; + case SWEET_BERRY_BUSH -> Material.SWEET_BERRIES; + case WEEPING_VINES_PLANT, TWISTING_VINES_PLANT -> Material.VINE; + case CAVE_VINES, CAVE_VINES_PLANT -> Material.GLOW_BERRIES; + case BIG_DRIPLEAF_STEM -> Material.BIG_DRIPLEAF; + case BAMBOO_SAPLING, POTTED_BAMBOO -> Material.BAMBOO; + case CARROTS -> Material.CARROT; + case POTATOES -> Material.POTATO; + case BEETROOTS -> Material.BEETROOT; + case TORCHFLOWER_CROP -> Material.TORCHFLOWER_SEEDS; + case PITCHER_CROP -> Material.PITCHER_PLANT; + case VOID_AIR, CAVE_AIR, BUBBLE_COLUMN -> Material.GLASS_BOTTLE; + case KELP_PLANT -> Material.KELP; + case POWDER_SNOW -> Material.SNOWBALL; + default -> Material.PAPER; + }; + } + /** * This method is used to open UserPanel outside this class. It will be much * easier to open panel with single method call then initializing new object.