From 8657351e3bb56fd68144f6fc027e9f6edc5a7662 Mon Sep 17 00:00:00 2001 From: deirn Date: Wed, 14 Feb 2024 17:22:02 +0700 Subject: [PATCH] check for the same tag before comparing tier index --- .../mcp/mobius/waila/service/ApiService.java | 10 +--- .../harvest/provider/HarvestProvider.java | 8 ++-- .../waila/plugin/harvest/tool/ToolTier.java | 48 ++++++++++++++++--- .../waila/plugin/harvest/tool/ToolType.java | 2 +- 4 files changed, 48 insertions(+), 20 deletions(-) diff --git a/src/main/java/mcp/mobius/waila/service/ApiService.java b/src/main/java/mcp/mobius/waila/service/ApiService.java index d851b4c9c..25da91734 100644 --- a/src/main/java/mcp/mobius/waila/service/ApiService.java +++ b/src/main/java/mcp/mobius/waila/service/ApiService.java @@ -5,9 +5,7 @@ import java.util.Comparator; import java.util.LinkedHashSet; import java.util.List; -import java.util.function.Supplier; -import com.google.common.base.Suppliers; import com.google.common.collect.Streams; import com.mojang.blaze3d.vertex.BufferBuilder; import mcp.mobius.waila.Waila; @@ -167,7 +165,8 @@ public IInstanceRegistry createInstanceRegistry(boolean reversed) { return registry; } - public static final Supplier> TIERS = Suppliers.memoize(() -> { + @Override + public List getTiers() { var vanilla = List.of(Tiers.values()); var custom = new LinkedHashSet(); @@ -178,11 +177,6 @@ public IInstanceRegistry createInstanceRegistry(boolean reversed) { } return Streams.concat(vanilla.stream(), custom.stream()).sorted(Comparator.comparingInt(Tier::getLevel)).toList(); - }); - - @Override - public List getTiers() { - return TIERS.get(); } } diff --git a/src/pluginHarvest/java/mcp/mobius/waila/plugin/harvest/provider/HarvestProvider.java b/src/pluginHarvest/java/mcp/mobius/waila/plugin/harvest/provider/HarvestProvider.java index d8a9a500b..706a8ffd1 100644 --- a/src/pluginHarvest/java/mcp/mobius/waila/plugin/harvest/provider/HarvestProvider.java +++ b/src/pluginHarvest/java/mcp/mobius/waila/plugin/harvest/provider/HarvestProvider.java @@ -151,7 +151,7 @@ public void onHandleTooltip(ITooltip tooltip, ICommonAccessor accessor, IPluginC matches = tool.itemPredicate.test(heldStack); if (highestTier != ToolTier.NONE && heldStack.getItem() instanceof TieredItem tiered) { var heldTier = ToolTier.get(tiered.getTier()); - matches = matches && heldTier.index >= highestTier.index; + matches = matches && heldTier.isBetterThanOrEqualTo(highestTier); } } component = new ToolComponent(icon, matches); @@ -196,12 +196,12 @@ private static MutableComponent getToolText(List tools, ItemStack held @NotNull private static MutableComponent getTierText(ToolTier highestTier, ItemStack heldStack) { - var tierText = I18n.exists(highestTier.tlKey) - ? Component.translatable(highestTier.tlKey) + var tierText = I18n.exists(highestTier.tlKey()) + ? Component.translatable(highestTier.tlKey()) : Component.literal(String.valueOf(highestTier.index)); if (heldStack.getItem() instanceof TieredItem tiered) { var heldTier = ToolTier.get(tiered.getTier()); - tierText.withStyle(heldTier.index >= highestTier.index ? ChatFormatting.GREEN : ChatFormatting.RED); + tierText.withStyle(heldTier.isBetterThanOrEqualTo(highestTier) ? ChatFormatting.GREEN : ChatFormatting.RED); } else { tierText.withStyle(ChatFormatting.RED); } diff --git a/src/pluginHarvest/java/mcp/mobius/waila/plugin/harvest/tool/ToolTier.java b/src/pluginHarvest/java/mcp/mobius/waila/plugin/harvest/tool/ToolTier.java index f4f7d597d..1c6aa419f 100644 --- a/src/pluginHarvest/java/mcp/mobius/waila/plugin/harvest/tool/ToolTier.java +++ b/src/pluginHarvest/java/mcp/mobius/waila/plugin/harvest/tool/ToolTier.java @@ -1,6 +1,7 @@ package mcp.mobius.waila.plugin.harvest.tool; import java.util.Collection; +import java.util.HashMap; import java.util.Locale; import java.util.Map; import java.util.function.Supplier; @@ -10,6 +11,7 @@ import mcp.mobius.waila.api.__internal__.IApiService; import mcp.mobius.waila.api.__internal__.Internals; import mcp.mobius.waila.buildconst.Tl; +import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; import net.minecraft.world.item.Tier; import net.minecraft.world.item.Tiers; @@ -30,22 +32,39 @@ public final class ToolTier { return builder.build(); }); + private static final Supplier> VANILLA_TIER_TL_KEYS = Suppliers.memoize(() -> { + var map = new HashMap(); + for (var tier : Tiers.values()) { + var tag = IApiService.INSTANCE.getTierTag(tier); + if (tag == null) continue; + map.put(tag.location(), tier.name().toLowerCase(Locale.ROOT)); + } + return map; + }); + public final Tier tier; public final int index; public final @Nullable TagKey tag; - public final String tlKey; + + private final Supplier tlKey; public ToolTier(Tier tier, int index) { this.tier = tier; this.index = index; this.tag = IApiService.INSTANCE.getTierTag(tier); - if (tier instanceof Tiers vanilla) - this.tlKey = Tl.Tooltip.Harvest.TIER + "." + vanilla.name().toLowerCase(Locale.ROOT); - else if (tag != null) - this.tlKey = Tl.Tooltip.Harvest.TIER + "." + tag.location().toLanguageKey(); - else - this.tlKey = Tl.Tooltip.Harvest.TIER + "." + tier.getLevel(); + this.tlKey = Suppliers.memoize(() -> { + String key; + + if (tag != null) { + var vanilla = VANILLA_TIER_TL_KEYS.get().get(tag.location()); + key = vanilla != null ? vanilla : tag.location().toLanguageKey(); + } else { + key = String.valueOf(tier.getLevel()); + } + + return Tl.Tooltip.Harvest.TIER + "." + key; + }); } public static Collection all() { @@ -56,4 +75,19 @@ public static ToolTier get(Tier tier) { return TIERS.get().get(tier); } + public String tlKey() { + return tlKey.get(); + } + + public boolean isEqualTo(ToolTier other) { + if (this == other) return true; + if (this.tier == other.tier) return true; + if (this.tag != null && other.tag != null) return this.tag.location().equals(other.tag.location()); + return false; + } + + public boolean isBetterThanOrEqualTo(ToolTier other) { + return isEqualTo(other) || this.index >= other.index; + } + } diff --git a/src/pluginHarvest/java/mcp/mobius/waila/plugin/harvest/tool/ToolType.java b/src/pluginHarvest/java/mcp/mobius/waila/plugin/harvest/tool/ToolType.java index 6465555e3..931eff9d3 100644 --- a/src/pluginHarvest/java/mcp/mobius/waila/plugin/harvest/tool/ToolType.java +++ b/src/pluginHarvest/java/mcp/mobius/waila/plugin/harvest/tool/ToolType.java @@ -40,7 +40,7 @@ public class ToolType implements IToolType, IToolType.Builder0, IToolType.Builde var stack = item.getDefaultInstance(); if (itemPredicate.test(stack)) { for (var tier : tiers) { - if (!map.containsKey(tier) && item instanceof TieredItem tiered && tiered.getTier() == tier.tier) { + if (!map.containsKey(tier) && item instanceof TieredItem tiered && ToolTier.get(tiered.getTier()).isEqualTo(tier)) { map.put(tier, stack); } }