From 20189fcd756b5fa970235f3c525d4d241137906c Mon Sep 17 00:00:00 2001 From: mibac138 <5672750+mibac138@users.noreply.github.com> Date: Sat, 10 Aug 2024 19:21:51 +0200 Subject: [PATCH 1/7] Avoid recreating DecimalFormat every time Creating a DecimalFormat, while rather cheap, is not free, and it's wasteful to recreate it everytime, sometimes without even using it at all. Because DecimalFormat isn't thread-safe, just create one instance per thread. --- .../jeiintegration/TooltipEventHandler.java | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/snowshock35/jeiintegration/TooltipEventHandler.java b/src/main/java/com/snowshock35/jeiintegration/TooltipEventHandler.java index e18b39b..d6f2b18 100644 --- a/src/main/java/com/snowshock35/jeiintegration/TooltipEventHandler.java +++ b/src/main/java/com/snowshock35/jeiintegration/TooltipEventHandler.java @@ -52,7 +52,7 @@ public class TooltipEventHandler { - private Config.Client config = Config.CLIENT; + private final Config.Client config = Config.CLIENT; private static boolean isDebugMode() { return Minecraft.getInstance().options.advancedItemTooltips; @@ -96,14 +96,16 @@ private void registerTooltips(ItemTooltipEvent e, Collection tooltips } } - @SubscribeEvent - public void onItemTooltip(ItemTooltipEvent e) { - + private final ThreadLocal DECIMAL_FORMAT = ThreadLocal.withInitial(() -> { // Set number formatting to display large numbers more clearly - DecimalFormat decimalFormat = new DecimalFormat("#.##"); - decimalFormat.setGroupingUsed(true); - decimalFormat.setGroupingSize(3); + DecimalFormat format = new DecimalFormat("#.##"); + format.setGroupingUsed(true); + format.setGroupingSize(3); + return format; + }); + @SubscribeEvent + public void onItemTooltip(ItemTooltipEvent e) { // Retrieve the ItemStack and Item ItemStack itemStack = e.getItemStack(); Item item = itemStack.getItem(); @@ -123,7 +125,7 @@ public void onItemTooltip(ItemTooltipEvent e) { if (burnTime > 0) { Component burnTooltip = Component.translatable("tooltip.jeiintegration.burnTime") - .append(Component.literal(" " + decimalFormat.format(burnTime) + " ")) + .append(Component.literal(" " + DECIMAL_FORMAT.get().format(burnTime) + " ")) .append(Component.translatable("tooltip.jeiintegration.burnTime.suffix")) .withStyle(ChatFormatting.DARK_GRAY); @@ -160,7 +162,7 @@ public void onItemTooltip(ItemTooltipEvent e) { Component foodTooltip = Component.translatable("tooltip.jeiintegration.hunger") .append(Component.literal(" " + healVal + " ")) .append(Component.translatable("tooltip.jeiintegration.saturation")) - .append(Component.literal(" " + decimalFormat.format(satVal))) + .append(Component.literal(" " + DECIMAL_FORMAT.get().format(satVal))) .withStyle(ChatFormatting.DARK_GRAY); registerTooltip(e, foodTooltip, config.foodTooltipMode.get()); @@ -195,7 +197,7 @@ public void onItemTooltip(ItemTooltipEvent e) { } // Tooltip - Tags - if (itemStack.getTags().toList().size() > 0) { + if (!itemStack.getTags().toList().isEmpty()) { Component tagsTooltip = Component.translatable("tooltip.jeiintegration.tags") .withStyle(ChatFormatting.DARK_GRAY); From 7320ffcda04f8035e7a2ecb8f8a842c28ac2d9ae Mon Sep 17 00:00:00 2001 From: mibac138 <5672750+mibac138@users.noreply.github.com> Date: Sat, 10 Aug 2024 19:41:51 +0200 Subject: [PATCH 2/7] Reformat code --- .../jeiintegration/JEIIntegration.java | 26 +- .../jeiintegration/TooltipEventHandler.java | 63 ++--- .../jeiintegration/config/Config.java | 237 +++++++++--------- 3 files changed, 170 insertions(+), 156 deletions(-) diff --git a/src/main/java/com/snowshock35/jeiintegration/JEIIntegration.java b/src/main/java/com/snowshock35/jeiintegration/JEIIntegration.java index 7f7ea38..8daec30 100644 --- a/src/main/java/com/snowshock35/jeiintegration/JEIIntegration.java +++ b/src/main/java/com/snowshock35/jeiintegration/JEIIntegration.java @@ -39,19 +39,23 @@ @Mod(JEIIntegration.MOD_ID) public class JEIIntegration { - public static final String MOD_ID = "jeiintegration"; + public static final String MOD_ID = "jeiintegration"; - public static Logger logger = LogManager.getLogger();; + public static final Logger logger = LogManager.getLogger(); - public JEIIntegration() { - ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, Config.clientSpec); - FMLJavaModLoadingContext.get().getModEventBus().register(Config.class); + public JEIIntegration() { + ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, Config.clientSpec); + FMLJavaModLoadingContext.get().getModEventBus().register(Config.class); - DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { - MinecraftForge.EVENT_BUS.register(new TooltipEventHandler()); - }); + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { + MinecraftForge.EVENT_BUS.register(new TooltipEventHandler()); + }); - //Make sure the mod being absent on the other network side does not cause the client to display the server as incompatible - ModLoadingContext.get().registerExtensionPoint(IExtensionPoint.DisplayTest.class, () -> new IExtensionPoint.DisplayTest(() -> NetworkConstants.IGNORESERVERONLY, (a, b) -> true)); - } + // Make sure the mod being absent on the other network side does not cause the client to display the server as + // incompatible + ModLoadingContext + .get() + .registerExtensionPoint(IExtensionPoint.DisplayTest.class, + () -> new IExtensionPoint.DisplayTest(() -> NetworkConstants.IGNORESERVERONLY, (a, b) -> true)); + } } diff --git a/src/main/java/com/snowshock35/jeiintegration/TooltipEventHandler.java b/src/main/java/com/snowshock35/jeiintegration/TooltipEventHandler.java index d6f2b18..5164562 100644 --- a/src/main/java/com/snowshock35/jeiintegration/TooltipEventHandler.java +++ b/src/main/java/com/snowshock35/jeiintegration/TooltipEventHandler.java @@ -52,7 +52,7 @@ public class TooltipEventHandler { - private final Config.Client config = Config.CLIENT; + private static final Config.Client config = Config.CLIENT; private static boolean isDebugMode() { return Minecraft.getInstance().options.advancedItemTooltips; @@ -60,7 +60,7 @@ private static boolean isDebugMode() { private static boolean isShiftKeyDown() { return InputConstants.isKeyDown(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_KEY_LEFT_SHIFT) || - InputConstants.isKeyDown(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_KEY_RIGHT_SHIFT); + InputConstants.isKeyDown(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_KEY_RIGHT_SHIFT); } private void registerTooltip(ItemTooltipEvent e, Component tooltip, String configOption) { @@ -69,19 +69,19 @@ private void registerTooltip(ItemTooltipEvent e, Component tooltip, String confi if (Objects.equals(configOption, "enabled")) { isEnabled = true; } else if ( - Objects.equals(configOption, "onShift") - && isShiftKeyDown() + Objects.equals(configOption, "onShift") + && isShiftKeyDown() ) { isEnabled = true; } else if ( - Objects.equals(configOption, "onDebug") - && isDebugMode() + Objects.equals(configOption, "onDebug") + && isDebugMode() ) { isEnabled = true; } else if ( - Objects.equals(configOption, "onShiftAndDebug") - && isShiftKeyDown() - && isDebugMode() + Objects.equals(configOption, "onShiftAndDebug") + && isShiftKeyDown() + && isDebugMode() ) { isEnabled = true; } @@ -111,7 +111,7 @@ public void onItemTooltip(ItemTooltipEvent e) { Item item = itemStack.getItem(); // If item stack empty do nothing - if (e.getItemStack().isEmpty()) { + if (itemStack.isEmpty()) { return; } @@ -125,9 +125,10 @@ public void onItemTooltip(ItemTooltipEvent e) { if (burnTime > 0) { Component burnTooltip = Component.translatable("tooltip.jeiintegration.burnTime") - .append(Component.literal(" " + DECIMAL_FORMAT.get().format(burnTime) + " ")) - .append(Component.translatable("tooltip.jeiintegration.burnTime.suffix")) - .withStyle(ChatFormatting.DARK_GRAY); + .append(Component.literal(" " + DECIMAL_FORMAT.get() + .format(burnTime) + " ")) + .append(Component.translatable("tooltip.jeiintegration.burnTime.suffix")) + .withStyle(ChatFormatting.DARK_GRAY); registerTooltip(e, burnTooltip, config.burnTimeTooltipMode.get()); } @@ -137,8 +138,8 @@ public void onItemTooltip(ItemTooltipEvent e) { int currentDamage = maxDamage - itemStack.getDamageValue(); if (maxDamage > 0) { Component durabilityTooltip = Component.translatable("tooltip.jeiintegration.durability") - .append(Component.literal(" " + currentDamage + "/" + maxDamage)) - .withStyle(ChatFormatting.DARK_GRAY); + .append(Component.literal(" " + currentDamage + "/" + maxDamage)) + .withStyle(ChatFormatting.DARK_GRAY); registerTooltip(e, durabilityTooltip, config.durabilityTooltipMode.get()); } @@ -147,8 +148,8 @@ public void onItemTooltip(ItemTooltipEvent e) { int enchantability = item.getEnchantmentValue(itemStack); if (enchantability > 0) { Component enchantabilityTooltip = Component.translatable("tooltip.jeiintegration.enchantability") - .append(Component.literal(" " + enchantability)) - .withStyle(ChatFormatting.DARK_GRAY); + .append(Component.literal(" " + enchantability)) + .withStyle(ChatFormatting.DARK_GRAY); registerTooltip(e, enchantabilityTooltip, config.enchantabilityTooltipMode.get()); } @@ -160,10 +161,10 @@ public void onItemTooltip(ItemTooltipEvent e) { float satVal = healVal * (foodProperties.getSaturationModifier() * 2); Component foodTooltip = Component.translatable("tooltip.jeiintegration.hunger") - .append(Component.literal(" " + healVal + " ")) - .append(Component.translatable("tooltip.jeiintegration.saturation")) - .append(Component.literal(" " + DECIMAL_FORMAT.get().format(satVal))) - .withStyle(ChatFormatting.DARK_GRAY); + .append(Component.literal(" " + healVal + " ")) + .append(Component.translatable("tooltip.jeiintegration.saturation")) + .append(Component.literal(" " + DECIMAL_FORMAT.get().format(satVal))) + .withStyle(ChatFormatting.DARK_GRAY); registerTooltip(e, foodTooltip, config.foodTooltipMode.get()); } @@ -172,26 +173,26 @@ public void onItemTooltip(ItemTooltipEvent e) { CompoundTag nbtData = item.getShareTag(itemStack); if (nbtData != null) { Component nbtTooltip = Component.translatable("tooltip.jeiintegration.nbtTagData") - .append(Component.literal(" " + nbtData)) - .withStyle(ChatFormatting.DARK_GRAY); + .append(Component.literal(" " + nbtData)) + .withStyle(ChatFormatting.DARK_GRAY); registerTooltip(e, nbtTooltip, config.nbtTooltipMode.get()); } // Tooltip - Registry Name Component registryTooltip = Component.translatable("tooltip.jeiintegration.registryName") - .append(Component.literal(" " + ForgeRegistries.ITEMS.getKey(item))) - .withStyle(ChatFormatting.DARK_GRAY); + .append(Component.literal(" " + ForgeRegistries.ITEMS.getKey(item))) + .withStyle(ChatFormatting.DARK_GRAY); registerTooltip(e, registryTooltip, config.registryNameTooltipMode.get()); // Tooltip - Max Stack Size - int stackSize = e.getItemStack().getMaxStackSize(); + int stackSize = itemStack.getMaxStackSize(); if (stackSize > 0) { Component stackSizeTooltip = Component.translatable("tooltip.jeiintegration.maxStackSize") - .append(Component.literal(" " + itemStack.getMaxStackSize())) - .withStyle(ChatFormatting.DARK_GRAY); + .append(Component.literal(" " + itemStack.getMaxStackSize())) + .withStyle(ChatFormatting.DARK_GRAY); registerTooltip(e, stackSizeTooltip, config.maxStackSizeTooltipMode.get()); } @@ -199,7 +200,7 @@ public void onItemTooltip(ItemTooltipEvent e) { // Tooltip - Tags if (!itemStack.getTags().toList().isEmpty()) { Component tagsTooltip = Component.translatable("tooltip.jeiintegration.tags") - .withStyle(ChatFormatting.DARK_GRAY); + .withStyle(ChatFormatting.DARK_GRAY); Set tags = new HashSet<>(); @@ -213,8 +214,8 @@ public void onItemTooltip(ItemTooltipEvent e) { // Tooltip - Translation Key Component translationKeyTooltip = Component.translatable("tooltip.jeiintegration.translationKey") - .append(Component.literal(" " + itemStack.getDescriptionId())) - .withStyle(ChatFormatting.DARK_GRAY); + .append(Component.literal(" " + itemStack.getDescriptionId())) + .withStyle(ChatFormatting.DARK_GRAY); registerTooltip(e, translationKeyTooltip, config.translationKeyTooltipMode.get()); } diff --git a/src/main/java/com/snowshock35/jeiintegration/config/Config.java b/src/main/java/com/snowshock35/jeiintegration/config/Config.java index 99bddb4..aa1cd2e 100644 --- a/src/main/java/com/snowshock35/jeiintegration/config/Config.java +++ b/src/main/java/com/snowshock35/jeiintegration/config/Config.java @@ -31,122 +31,131 @@ import net.minecraftforge.fml.event.config.ModConfigEvent; import org.apache.commons.lang3.tuple.Pair; -import java.util.Arrays; import java.util.List; public class Config { - static final String CATEGORY_HANDLERS = "Handler Settings"; - static final String CATEGORY_TOOLTIPS = "Tooltip Settings"; - static final String CATEGORY_MISCELLANEOUS = "Miscellaneous Settings"; - - private static final String defaultBurnTimeTooltipMode = "disabled"; - private static final String defaultDurabilityTooltipMode = "disabled"; - private static final String defaultEnchantabilityTooltipMode = "disabled"; - private static final String defaultFoodTooltipMode = "disabled"; - private static final String defaultMaxStackSizeTooltipMode = "disabled"; - private static final String defaultNbtTooltipMode = "disabled"; - private static final String defaultRegistryNameTooltipMode = "disabled"; - private static final String defaultTagsTooltipMode = "disabled"; - private static final String defaultTranslationKeyTooltipMode = "disabled"; - - private static final List validOptions = List.of( - "disabled", "enabled", "onShift", "onDebug", "onShiftAndDebug" - ); - - public static class Client { - public final ConfigValue burnTimeTooltipMode; - public final ConfigValue durabilityTooltipMode; - public final ConfigValue enchantabilityTooltipMode; - public final ConfigValue foodTooltipMode; - public final ConfigValue maxStackSizeTooltipMode; - public final ConfigValue nbtTooltipMode; - public final ConfigValue registryNameTooltipMode; - public final ConfigValue tagsTooltipMode; - public final ConfigValue translationKeyTooltipMode; - - Client(ForgeConfigSpec.Builder builder) { - builder.comment(CATEGORY_HANDLERS) - .comment(" Handler Options") - .push("handler_options"); - - builder.pop(); - - builder.comment(CATEGORY_MISCELLANEOUS) - .comment(" Miscellaneous Options") - .push("misc_options"); - - builder.pop(); - - builder.comment(CATEGORY_TOOLTIPS) - .comment(" Tooltip Options") - .comment(" Configure the options below to one of the following: " + - "disabled, enabled, onShift, onDebug or onShiftAndDebug") - .push("tooltip_options"); - - burnTimeTooltipMode = builder - .comment(" Configure tooltip for burn time.") - .translation("config.jeiintegration.tooltips.burnTimeTooltipMode") - .define("burnTimeTooltipMode", defaultBurnTimeTooltipMode, o -> o instanceof String string && validOptions.contains(string)); - - durabilityTooltipMode = builder - .comment(" Configure tooltip for durability.") - .translation("config.jeiintegration.tooltips.durabilityTooltipMode") - .define("durabilityTooltipMode", defaultDurabilityTooltipMode, o -> o instanceof String string && validOptions.contains(string)); - - enchantabilityTooltipMode = builder - .comment(" Configure tooltip for enchantability") - .translation("config.jeiintegration.tooltips.enchantabilityTooltipMode") - .define("enchantabilityTooltipMode", defaultEnchantabilityTooltipMode, o -> o instanceof String string && validOptions.contains(string)); - - foodTooltipMode = builder - .comment(" Configure tooltip for hunger and saturation.") - .translation("config.jeiintegration.tooltips.foodTooltipMode") - .define("foodTooltipMode", defaultFoodTooltipMode, o -> o instanceof String string && validOptions.contains(string)); - - maxStackSizeTooltipMode = builder - .comment(" Configure tooltip for max stack size.") - .translation("config.jeiintegration.tooltips.maxStackSizeTooltipMode") - .define("maxStackSizeTooltipMode", defaultMaxStackSizeTooltipMode, o -> o instanceof String string && validOptions.contains(string)); - - nbtTooltipMode = builder - .comment(" Configure tooltip for NBT data.") - .translation("config.jeiintegration.tooltips.nbtTooltipMode") - .define("nbtTooltipMode", defaultNbtTooltipMode, o -> o instanceof String string && validOptions.contains(string)); - - registryNameTooltipMode = builder - .comment(" Configure tooltip for registry name. E.g. minecraft:stone") - .translation("config.jeiintegration.tooltips.registryNameTooltipMode") - .define("registryNameTooltipMode", defaultRegistryNameTooltipMode, o -> o instanceof String string && validOptions.contains(string)); - - tagsTooltipMode = builder - .comment(" Configure tooltip for tags. E.g. forge:ingot, minecraft:planks") - .translation("config.jeiintegration.tooltips.tagsTooltipMode") - .define("tagsTooltipMode", defaultTagsTooltipMode, o -> o instanceof String string && validOptions.contains(string)); - - translationKeyTooltipMode = builder - .comment(" Configure tooltip for translation key. E.g. block.minecraft.stone") - .translation("config.jeiintegration.tooltips.translationKeyTooltipMode") - .define("translationKeyTooltipMode", defaultTranslationKeyTooltipMode, o -> o instanceof String string && validOptions.contains(string)); - - builder.pop(); + private static final String CATEGORY_HANDLERS = "Handler Settings"; + private static final String CATEGORY_TOOLTIPS = "Tooltip Settings"; + private static final String CATEGORY_MISCELLANEOUS = "Miscellaneous Settings"; + + private static final String defaultBurnTimeTooltipMode = "disabled"; + private static final String defaultDurabilityTooltipMode = "disabled"; + private static final String defaultEnchantabilityTooltipMode = "disabled"; + private static final String defaultFoodTooltipMode = "disabled"; + private static final String defaultMaxStackSizeTooltipMode = "disabled"; + private static final String defaultNbtTooltipMode = "disabled"; + private static final String defaultRegistryNameTooltipMode = "disabled"; + private static final String defaultTagsTooltipMode = "disabled"; + private static final String defaultTranslationKeyTooltipMode = "disabled"; + + private static final List validOptions = List.of( + "disabled", "enabled", "onShift", "onDebug", "onShiftAndDebug" + ); + + public static class Client { + public final ConfigValue burnTimeTooltipMode; + public final ConfigValue durabilityTooltipMode; + public final ConfigValue enchantabilityTooltipMode; + public final ConfigValue foodTooltipMode; + public final ConfigValue maxStackSizeTooltipMode; + public final ConfigValue nbtTooltipMode; + public final ConfigValue registryNameTooltipMode; + public final ConfigValue tagsTooltipMode; + public final ConfigValue translationKeyTooltipMode; + + Client(ForgeConfigSpec.Builder builder) { + builder.comment(CATEGORY_HANDLERS) + .comment(" Handler Options") + .push("handler_options"); + + builder.pop(); + + builder.comment(CATEGORY_MISCELLANEOUS) + .comment(" Miscellaneous Options") + .push("misc_options"); + + builder.pop(); + + builder.comment(CATEGORY_TOOLTIPS) + .comment(" Tooltip Options") + .comment(" Configure the options below to one of the following: " + + "disabled, enabled, onShift, onDebug or onShiftAndDebug") + .push("tooltip_options"); + + burnTimeTooltipMode = builder + .comment(" Configure tooltip for burn time.") + .translation("config.jeiintegration.tooltips.burnTimeTooltipMode") + .define("burnTimeTooltipMode", defaultBurnTimeTooltipMode, + o -> o instanceof String string && validOptions.contains(string)); + + durabilityTooltipMode = builder + .comment(" Configure tooltip for durability.") + .translation("config.jeiintegration.tooltips.durabilityTooltipMode") + .define("durabilityTooltipMode", defaultDurabilityTooltipMode, + o -> o instanceof String string && validOptions.contains(string)); + + enchantabilityTooltipMode = builder + .comment(" Configure tooltip for enchantability") + .translation("config.jeiintegration.tooltips.enchantabilityTooltipMode") + .define("enchantabilityTooltipMode", defaultEnchantabilityTooltipMode, + o -> o instanceof String string && validOptions.contains(string)); + + foodTooltipMode = builder + .comment(" Configure tooltip for hunger and saturation.") + .translation("config.jeiintegration.tooltips.foodTooltipMode") + .define("foodTooltipMode", defaultFoodTooltipMode, + o -> o instanceof String string && validOptions.contains(string)); + + maxStackSizeTooltipMode = builder + .comment(" Configure tooltip for max stack size.") + .translation("config.jeiintegration.tooltips.maxStackSizeTooltipMode") + .define("maxStackSizeTooltipMode", defaultMaxStackSizeTooltipMode, + o -> o instanceof String string && validOptions.contains(string)); + + nbtTooltipMode = builder + .comment(" Configure tooltip for NBT data.") + .translation("config.jeiintegration.tooltips.nbtTooltipMode") + .define("nbtTooltipMode", defaultNbtTooltipMode, + o -> o instanceof String string && validOptions.contains(string)); + + registryNameTooltipMode = builder + .comment(" Configure tooltip for registry name. E.g. minecraft:stone") + .translation("config.jeiintegration.tooltips.registryNameTooltipMode") + .define("registryNameTooltipMode", defaultRegistryNameTooltipMode, + o -> o instanceof String string && validOptions.contains(string)); + + tagsTooltipMode = builder + .comment(" Configure tooltip for tags. E.g. forge:ingot, minecraft:planks") + .translation("config.jeiintegration.tooltips.tagsTooltipMode") + .define("tagsTooltipMode", defaultTagsTooltipMode, + o -> o instanceof String string && validOptions.contains(string)); + + translationKeyTooltipMode = builder + .comment(" Configure tooltip for translation key. E.g. block.minecraft.stone") + .translation("config.jeiintegration.tooltips.translationKeyTooltipMode") + .define("translationKeyTooltipMode", defaultTranslationKeyTooltipMode, + o -> o instanceof String string && validOptions.contains(string)); + + builder.pop(); + } + } + + public static final ForgeConfigSpec clientSpec; + public static final Config.Client CLIENT; + + static { + Pair specPair = new ForgeConfigSpec.Builder().configure(Config.Client::new); + clientSpec = specPair.getRight(); + CLIENT = specPair.getLeft(); + } + + @SubscribeEvent + public static void onLoad(final ModConfigEvent.Loading configEvent) { + JEIIntegration.logger.debug("Loaded JEI Integration config file {}", configEvent.getConfig().getFileName()); + } + + @SubscribeEvent + public static void onFileChange(final ModConfigEvent.Reloading configEvent) { + JEIIntegration.logger.debug("JEI Integration config just got changed on the file system!"); } - } - - public static final ForgeConfigSpec clientSpec; - public static final Config.Client CLIENT; - static { - final Pair specPair = new ForgeConfigSpec.Builder().configure(Config.Client::new); - clientSpec = specPair.getRight(); - CLIENT = specPair.getLeft(); - } - - @SubscribeEvent - public static void onLoad(final ModConfigEvent.Loading configEvent) { - JEIIntegration.logger.debug("Loaded JEI Integration config file {}", configEvent.getConfig().getFileName()); - } - - @SubscribeEvent - public static void onFileChange(final ModConfigEvent.Reloading configEvent) { - JEIIntegration.logger.debug("JEI Integration config just got changed on the file system!"); - } } \ No newline at end of file From 0482d36ea1845284e2f9a0f174abc632d278afaa Mon Sep 17 00:00:00 2001 From: mibac138 <5672750+mibac138@users.noreply.github.com> Date: Sat, 10 Aug 2024 19:36:17 +0200 Subject: [PATCH 3/7] Introduce OptionState enum Improves type-safety and simplifies reasoning about code --- .../jeiintegration/TooltipEventHandler.java | 23 +- .../jeiintegration/config/Config.java | 305 +++++++++--------- .../jeiintegration/config/OptionState.java | 5 + 3 files changed, 157 insertions(+), 176 deletions(-) create mode 100644 src/main/java/com/snowshock35/jeiintegration/config/OptionState.java diff --git a/src/main/java/com/snowshock35/jeiintegration/TooltipEventHandler.java b/src/main/java/com/snowshock35/jeiintegration/TooltipEventHandler.java index 5164562..550b930 100644 --- a/src/main/java/com/snowshock35/jeiintegration/TooltipEventHandler.java +++ b/src/main/java/com/snowshock35/jeiintegration/TooltipEventHandler.java @@ -26,6 +26,7 @@ import com.mojang.blaze3d.platform.InputConstants; import com.snowshock35.jeiintegration.config.Config; +import com.snowshock35.jeiintegration.config.OptionState; import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; import net.minecraft.nbt.CompoundTag; @@ -63,26 +64,16 @@ private static boolean isShiftKeyDown() { InputConstants.isKeyDown(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_KEY_RIGHT_SHIFT); } - private void registerTooltip(ItemTooltipEvent e, Component tooltip, String configOption) { + private void registerTooltip(ItemTooltipEvent e, Component tooltip, OptionState configOption) { boolean isEnabled = false; - if (Objects.equals(configOption, "enabled")) { + if (configOption == OptionState.ENABLED) { isEnabled = true; - } else if ( - Objects.equals(configOption, "onShift") - && isShiftKeyDown() - ) { + } else if (configOption == OptionState.ON_SHIFT && isShiftKeyDown()) { isEnabled = true; - } else if ( - Objects.equals(configOption, "onDebug") - && isDebugMode() - ) { + } else if (configOption == OptionState.ON_DEBUG && isDebugMode()) { isEnabled = true; - } else if ( - Objects.equals(configOption, "onShiftAndDebug") - && isShiftKeyDown() - && isDebugMode() - ) { + } else if (configOption == OptionState.ON_SHIFT_AND_DEBUG && isShiftKeyDown() && isDebugMode()) { isEnabled = true; } if (isEnabled) { @@ -90,7 +81,7 @@ && isDebugMode() } } - private void registerTooltips(ItemTooltipEvent e, Collection tooltips, String configValue) { + private void registerTooltips(ItemTooltipEvent e, Collection tooltips, OptionState configValue) { for (Component tooltip : tooltips) { registerTooltip(e, tooltip, configValue); } diff --git a/src/main/java/com/snowshock35/jeiintegration/config/Config.java b/src/main/java/com/snowshock35/jeiintegration/config/Config.java index aa1cd2e..14a4c9e 100644 --- a/src/main/java/com/snowshock35/jeiintegration/config/Config.java +++ b/src/main/java/com/snowshock35/jeiintegration/config/Config.java @@ -1,161 +1,146 @@ -/* - * MIT License - * - * Copyright (c) 2020 SnowShock35 - * - * 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.snowshock35.jeiintegration.config; - -import com.snowshock35.jeiintegration.JEIIntegration; -import net.minecraftforge.common.ForgeConfigSpec; -import net.minecraftforge.common.ForgeConfigSpec.ConfigValue; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.event.config.ModConfigEvent; -import org.apache.commons.lang3.tuple.Pair; - -import java.util.List; - -public class Config { - private static final String CATEGORY_HANDLERS = "Handler Settings"; - private static final String CATEGORY_TOOLTIPS = "Tooltip Settings"; - private static final String CATEGORY_MISCELLANEOUS = "Miscellaneous Settings"; - - private static final String defaultBurnTimeTooltipMode = "disabled"; - private static final String defaultDurabilityTooltipMode = "disabled"; - private static final String defaultEnchantabilityTooltipMode = "disabled"; - private static final String defaultFoodTooltipMode = "disabled"; - private static final String defaultMaxStackSizeTooltipMode = "disabled"; - private static final String defaultNbtTooltipMode = "disabled"; - private static final String defaultRegistryNameTooltipMode = "disabled"; - private static final String defaultTagsTooltipMode = "disabled"; - private static final String defaultTranslationKeyTooltipMode = "disabled"; - - private static final List validOptions = List.of( - "disabled", "enabled", "onShift", "onDebug", "onShiftAndDebug" - ); - - public static class Client { - public final ConfigValue burnTimeTooltipMode; - public final ConfigValue durabilityTooltipMode; - public final ConfigValue enchantabilityTooltipMode; - public final ConfigValue foodTooltipMode; - public final ConfigValue maxStackSizeTooltipMode; - public final ConfigValue nbtTooltipMode; - public final ConfigValue registryNameTooltipMode; - public final ConfigValue tagsTooltipMode; - public final ConfigValue translationKeyTooltipMode; - - Client(ForgeConfigSpec.Builder builder) { - builder.comment(CATEGORY_HANDLERS) - .comment(" Handler Options") - .push("handler_options"); - - builder.pop(); - - builder.comment(CATEGORY_MISCELLANEOUS) - .comment(" Miscellaneous Options") - .push("misc_options"); - - builder.pop(); - - builder.comment(CATEGORY_TOOLTIPS) - .comment(" Tooltip Options") - .comment(" Configure the options below to one of the following: " + - "disabled, enabled, onShift, onDebug or onShiftAndDebug") - .push("tooltip_options"); - - burnTimeTooltipMode = builder - .comment(" Configure tooltip for burn time.") - .translation("config.jeiintegration.tooltips.burnTimeTooltipMode") - .define("burnTimeTooltipMode", defaultBurnTimeTooltipMode, - o -> o instanceof String string && validOptions.contains(string)); - - durabilityTooltipMode = builder - .comment(" Configure tooltip for durability.") - .translation("config.jeiintegration.tooltips.durabilityTooltipMode") - .define("durabilityTooltipMode", defaultDurabilityTooltipMode, - o -> o instanceof String string && validOptions.contains(string)); - - enchantabilityTooltipMode = builder - .comment(" Configure tooltip for enchantability") - .translation("config.jeiintegration.tooltips.enchantabilityTooltipMode") - .define("enchantabilityTooltipMode", defaultEnchantabilityTooltipMode, - o -> o instanceof String string && validOptions.contains(string)); - - foodTooltipMode = builder - .comment(" Configure tooltip for hunger and saturation.") - .translation("config.jeiintegration.tooltips.foodTooltipMode") - .define("foodTooltipMode", defaultFoodTooltipMode, - o -> o instanceof String string && validOptions.contains(string)); - - maxStackSizeTooltipMode = builder - .comment(" Configure tooltip for max stack size.") - .translation("config.jeiintegration.tooltips.maxStackSizeTooltipMode") - .define("maxStackSizeTooltipMode", defaultMaxStackSizeTooltipMode, - o -> o instanceof String string && validOptions.contains(string)); - - nbtTooltipMode = builder - .comment(" Configure tooltip for NBT data.") - .translation("config.jeiintegration.tooltips.nbtTooltipMode") - .define("nbtTooltipMode", defaultNbtTooltipMode, - o -> o instanceof String string && validOptions.contains(string)); - - registryNameTooltipMode = builder - .comment(" Configure tooltip for registry name. E.g. minecraft:stone") - .translation("config.jeiintegration.tooltips.registryNameTooltipMode") - .define("registryNameTooltipMode", defaultRegistryNameTooltipMode, - o -> o instanceof String string && validOptions.contains(string)); - - tagsTooltipMode = builder - .comment(" Configure tooltip for tags. E.g. forge:ingot, minecraft:planks") - .translation("config.jeiintegration.tooltips.tagsTooltipMode") - .define("tagsTooltipMode", defaultTagsTooltipMode, - o -> o instanceof String string && validOptions.contains(string)); - - translationKeyTooltipMode = builder - .comment(" Configure tooltip for translation key. E.g. block.minecraft.stone") - .translation("config.jeiintegration.tooltips.translationKeyTooltipMode") - .define("translationKeyTooltipMode", defaultTranslationKeyTooltipMode, - o -> o instanceof String string && validOptions.contains(string)); - - builder.pop(); - } - } - - public static final ForgeConfigSpec clientSpec; - public static final Config.Client CLIENT; - - static { - Pair specPair = new ForgeConfigSpec.Builder().configure(Config.Client::new); - clientSpec = specPair.getRight(); - CLIENT = specPair.getLeft(); - } - - @SubscribeEvent - public static void onLoad(final ModConfigEvent.Loading configEvent) { - JEIIntegration.logger.debug("Loaded JEI Integration config file {}", configEvent.getConfig().getFileName()); - } - - @SubscribeEvent - public static void onFileChange(final ModConfigEvent.Reloading configEvent) { - JEIIntegration.logger.debug("JEI Integration config just got changed on the file system!"); - } +/* + * MIT License + * + * Copyright (c) 2020 SnowShock35 + * + * 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.snowshock35.jeiintegration.config; + +import com.snowshock35.jeiintegration.JEIIntegration; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.common.ForgeConfigSpec.ConfigValue; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import net.minecraftforge.fml.event.config.ModConfigEvent; +import org.apache.commons.lang3.tuple.Pair; + +public class Config { + private static final String CATEGORY_HANDLERS = "Handler Settings"; + private static final String CATEGORY_TOOLTIPS = "Tooltip Settings"; + private static final String CATEGORY_MISCELLANEOUS = "Miscellaneous Settings"; + + private static final OptionState defaultBurnTimeTooltipMode = OptionState.DISABLED; + private static final OptionState defaultDurabilityTooltipMode = OptionState.DISABLED; + private static final OptionState defaultEnchantabilityTooltipMode = OptionState.DISABLED; + private static final OptionState defaultFoodTooltipMode = OptionState.DISABLED; + private static final OptionState defaultMaxStackSizeTooltipMode = OptionState.DISABLED; + private static final OptionState defaultNbtTooltipMode = OptionState.DISABLED; + private static final OptionState defaultRegistryNameTooltipMode = OptionState.DISABLED; + private static final OptionState defaultTagsTooltipMode = OptionState.DISABLED; + private static final OptionState defaultTranslationKeyTooltipMode = OptionState.DISABLED; + + public static class Client { + public final ConfigValue burnTimeTooltipMode; + public final ConfigValue durabilityTooltipMode; + public final ConfigValue enchantabilityTooltipMode; + public final ConfigValue foodTooltipMode; + public final ConfigValue maxStackSizeTooltipMode; + public final ConfigValue nbtTooltipMode; + public final ConfigValue registryNameTooltipMode; + public final ConfigValue tagsTooltipMode; + public final ConfigValue translationKeyTooltipMode; + + Client(ForgeConfigSpec.Builder builder) { + builder.comment(CATEGORY_HANDLERS) + .comment(" Handler Options") + .push("handler_options"); + + builder.pop(); + + builder.comment(CATEGORY_MISCELLANEOUS) + .comment(" Miscellaneous Options") + .push("misc_options"); + + builder.pop(); + + builder.comment(CATEGORY_TOOLTIPS) + .comment(" Tooltip Options") + .comment(" Configure the options below to one of the following: " + + "disabled, enabled, on_shift, on_debug or on_shift_and_debug") + .push("tooltip_options"); + + burnTimeTooltipMode = builder + .comment(" Configure tooltip for burn time.") + .translation("config.jeiintegration.tooltips.burnTimeTooltipMode") + .defineEnum("burnTimeTooltipMode", defaultBurnTimeTooltipMode); + + durabilityTooltipMode = builder + .comment(" Configure tooltip for durability.") + .translation("config.jeiintegration.tooltips.durabilityTooltipMode") + .defineEnum("durabilityTooltipMode", defaultDurabilityTooltipMode); + + enchantabilityTooltipMode = builder + .comment(" Configure tooltip for enchantability") + .translation("config.jeiintegration.tooltips.enchantabilityTooltipMode") + .defineEnum("enchantabilityTooltipMode", defaultEnchantabilityTooltipMode); + + foodTooltipMode = builder + .comment(" Configure tooltip for hunger and saturation.") + .translation("config.jeiintegration.tooltips.foodTooltipMode") + .defineEnum("foodTooltipMode", defaultFoodTooltipMode); + + maxStackSizeTooltipMode = builder + .comment(" Configure tooltip for max stack size.") + .translation("config.jeiintegration.tooltips.maxStackSizeTooltipMode") + .defineEnum("maxStackSizeTooltipMode", defaultMaxStackSizeTooltipMode); + + nbtTooltipMode = builder + .comment(" Configure tooltip for NBT data.") + .translation("config.jeiintegration.tooltips.nbtTooltipMode") + .defineEnum("nbtTooltipMode", defaultNbtTooltipMode); + + registryNameTooltipMode = builder + .comment(" Configure tooltip for registry name. E.g. minecraft:stone") + .translation("config.jeiintegration.tooltips.registryNameTooltipMode") + .defineEnum("registryNameTooltipMode", defaultRegistryNameTooltipMode); + + tagsTooltipMode = builder + .comment(" Configure tooltip for tags. E.g. forge:ingot, minecraft:planks") + .translation("config.jeiintegration.tooltips.tagsTooltipMode") + .defineEnum("tagsTooltipMode", defaultTagsTooltipMode); + + translationKeyTooltipMode = builder + .comment(" Configure tooltip for translation key. E.g. block.minecraft.stone") + .translation("config.jeiintegration.tooltips.translationKeyTooltipMode") + .defineEnum("translationKeyTooltipMode", defaultTranslationKeyTooltipMode); + + builder.pop(); + } + } + + public static final ForgeConfigSpec clientSpec; + public static final Config.Client CLIENT; + + static { + Pair specPair = new ForgeConfigSpec.Builder().configure(Config.Client::new); + clientSpec = specPair.getRight(); + CLIENT = specPair.getLeft(); + } + + @SubscribeEvent + public static void onLoad(final ModConfigEvent.Loading configEvent) { + JEIIntegration.logger.debug("Loaded JEI Integration config file {}", configEvent.getConfig().getFileName()); + } + + @SubscribeEvent + public static void onFileChange(final ModConfigEvent.Reloading configEvent) { + JEIIntegration.logger.debug("JEI Integration config just got changed on the file system!"); + } } \ No newline at end of file diff --git a/src/main/java/com/snowshock35/jeiintegration/config/OptionState.java b/src/main/java/com/snowshock35/jeiintegration/config/OptionState.java new file mode 100644 index 0000000..644cd57 --- /dev/null +++ b/src/main/java/com/snowshock35/jeiintegration/config/OptionState.java @@ -0,0 +1,5 @@ +package com.snowshock35.jeiintegration.config; + +public enum OptionState { + DISABLED, ENABLED, ON_SHIFT, ON_DEBUG, ON_SHIFT_AND_DEBUG +} From a9862002af45bea521442139aaf86e224f4f778f Mon Sep 17 00:00:00 2001 From: mibac138 <5672750+mibac138@users.noreply.github.com> Date: Sat, 10 Aug 2024 20:53:05 +0200 Subject: [PATCH 4/7] Separate tooltip handlers into methods This also allows to skip processing a handler if it's not enabled (previously the handler would needlessly run even if it was disabled) --- .../jeiintegration/TooltipEventHandler.java | 129 ++++++++++-------- 1 file changed, 70 insertions(+), 59 deletions(-) diff --git a/src/main/java/com/snowshock35/jeiintegration/TooltipEventHandler.java b/src/main/java/com/snowshock35/jeiintegration/TooltipEventHandler.java index 550b930..a25fdaa 100644 --- a/src/main/java/com/snowshock35/jeiintegration/TooltipEventHandler.java +++ b/src/main/java/com/snowshock35/jeiintegration/TooltipEventHandler.java @@ -34,20 +34,20 @@ import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; import net.minecraft.world.food.FoodProperties; -import net.minecraft.world.item.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.RecipeType; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.common.ForgeConfigSpec.ConfigValue; import net.minecraftforge.event.entity.player.ItemTooltipEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.registries.ForgeRegistries; +import org.apache.commons.lang3.tuple.Pair; import org.apache.logging.log4j.Level; import org.lwjgl.glfw.GLFW; import java.text.DecimalFormat; -import java.util.Collection; -import java.util.HashSet; -import java.util.Objects; -import java.util.Set; +import java.util.*; +import java.util.function.Consumer; import static net.minecraftforge.common.ForgeHooks.getBurnTime; @@ -64,7 +64,8 @@ private static boolean isShiftKeyDown() { InputConstants.isKeyDown(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_KEY_RIGHT_SHIFT); } - private void registerTooltip(ItemTooltipEvent e, Component tooltip, OptionState configOption) { + private static boolean isEnabled(ConfigValue configValue) { + OptionState configOption = configValue.get(); boolean isEnabled = false; if (configOption == OptionState.ENABLED) { @@ -76,18 +77,10 @@ private void registerTooltip(ItemTooltipEvent e, Component tooltip, OptionState } else if (configOption == OptionState.ON_SHIFT_AND_DEBUG && isShiftKeyDown() && isDebugMode()) { isEnabled = true; } - if (isEnabled) { - e.getToolTip().add(tooltip); - } - } - - private void registerTooltips(ItemTooltipEvent e, Collection tooltips, OptionState configValue) { - for (Component tooltip : tooltips) { - registerTooltip(e, tooltip, configValue); - } + return isEnabled; } - private final ThreadLocal DECIMAL_FORMAT = ThreadLocal.withInitial(() -> { + private static final ThreadLocal DECIMAL_FORMAT = ThreadLocal.withInitial(() -> { // Set number formatting to display large numbers more clearly DecimalFormat format = new DecimalFormat("#.##"); format.setGroupingUsed(true); @@ -95,21 +88,38 @@ private void registerTooltips(ItemTooltipEvent e, Collection tooltips return format; }); + private static final List, Consumer>> MODULES = + new ArrayList<>(); + + static { + MODULES.add(Pair.of(config.burnTimeTooltipMode, TooltipEventHandler::burnTime)); + MODULES.add(Pair.of(config.durabilityTooltipMode, TooltipEventHandler::durability)); + MODULES.add(Pair.of(config.enchantabilityTooltipMode, TooltipEventHandler::enchantability)); + MODULES.add(Pair.of(config.foodTooltipMode, TooltipEventHandler::hunger)); + MODULES.add(Pair.of(config.nbtTooltipMode, TooltipEventHandler::nbtData)); + MODULES.add(Pair.of(config.registryNameTooltipMode, TooltipEventHandler::registryName)); + MODULES.add(Pair.of(config.maxStackSizeTooltipMode, TooltipEventHandler::maxStackSize)); + MODULES.add(Pair.of(config.tagsTooltipMode, TooltipEventHandler::tags)); + MODULES.add(Pair.of(config.translationKeyTooltipMode, TooltipEventHandler::translationKey)); + } + @SubscribeEvent public void onItemTooltip(ItemTooltipEvent e) { - // Retrieve the ItemStack and Item - ItemStack itemStack = e.getItemStack(); - Item item = itemStack.getItem(); - - // If item stack empty do nothing - if (itemStack.isEmpty()) { + if (e.getItemStack().isEmpty()) { return; } - // Tooltip - Burn Time + for (Pair, Consumer> module : MODULES) { + if (isEnabled(module.getLeft())) { + module.getRight().accept(e); + } + } + } + + private static void burnTime(ItemTooltipEvent e) { int burnTime = 0; try { - burnTime = getBurnTime(itemStack, RecipeType.SMELTING); + burnTime = getBurnTime(e.getItemStack(), RecipeType.SMELTING); } catch (Exception ex) { JEIIntegration.logger.log(Level.WARN, "):\n\nSomething went wrong!"); } @@ -120,34 +130,35 @@ public void onItemTooltip(ItemTooltipEvent e) { .format(burnTime) + " ")) .append(Component.translatable("tooltip.jeiintegration.burnTime.suffix")) .withStyle(ChatFormatting.DARK_GRAY); - - registerTooltip(e, burnTooltip, config.burnTimeTooltipMode.get()); + e.getToolTip().add(burnTooltip); } + } - // Tooltip - Durability + private static void durability(ItemTooltipEvent e) { + ItemStack itemStack = e.getItemStack(); int maxDamage = itemStack.getMaxDamage(); int currentDamage = maxDamage - itemStack.getDamageValue(); if (maxDamage > 0) { Component durabilityTooltip = Component.translatable("tooltip.jeiintegration.durability") .append(Component.literal(" " + currentDamage + "/" + maxDamage)) .withStyle(ChatFormatting.DARK_GRAY); - - registerTooltip(e, durabilityTooltip, config.durabilityTooltipMode.get()); + e.getToolTip().add(durabilityTooltip); } + } - // Tooltip - Enchantability - int enchantability = item.getEnchantmentValue(itemStack); + private static void enchantability(ItemTooltipEvent e) { + int enchantability = e.getItemStack().getEnchantmentValue(); if (enchantability > 0) { Component enchantabilityTooltip = Component.translatable("tooltip.jeiintegration.enchantability") .append(Component.literal(" " + enchantability)) .withStyle(ChatFormatting.DARK_GRAY); - - registerTooltip(e, enchantabilityTooltip, config.enchantabilityTooltipMode.get()); + e.getToolTip().add(enchantabilityTooltip); } + } - // Tooltip - Hunger / Saturation - FoodProperties foodProperties = item.getFoodProperties(itemStack, Minecraft.getInstance().player); - if (item.isEdible() && foodProperties != null) { + private static void hunger(ItemTooltipEvent e) { + FoodProperties foodProperties = e.getItemStack().getFoodProperties(Minecraft.getInstance().player); + if (e.getItemStack().getItem().isEdible() && foodProperties != null) { int healVal = foodProperties.getNutrition(); float satVal = healVal * (foodProperties.getSaturationModifier() * 2); @@ -156,39 +167,39 @@ public void onItemTooltip(ItemTooltipEvent e) { .append(Component.translatable("tooltip.jeiintegration.saturation")) .append(Component.literal(" " + DECIMAL_FORMAT.get().format(satVal))) .withStyle(ChatFormatting.DARK_GRAY); - - registerTooltip(e, foodTooltip, config.foodTooltipMode.get()); + e.getToolTip().add(foodTooltip); } + } - // Tooltip - NBT Data - CompoundTag nbtData = item.getShareTag(itemStack); + private static void nbtData(ItemTooltipEvent e) { + CompoundTag nbtData = e.getItemStack().getShareTag(); if (nbtData != null) { Component nbtTooltip = Component.translatable("tooltip.jeiintegration.nbtTagData") .append(Component.literal(" " + nbtData)) .withStyle(ChatFormatting.DARK_GRAY); - - registerTooltip(e, nbtTooltip, config.nbtTooltipMode.get()); + e.getToolTip().add(nbtTooltip); } + } - // Tooltip - Registry Name + private static void registryName(ItemTooltipEvent e) { Component registryTooltip = Component.translatable("tooltip.jeiintegration.registryName") - .append(Component.literal(" " + ForgeRegistries.ITEMS.getKey(item))) + .append(Component.literal(" " + ForgeRegistries.ITEMS.getKey(e.getItemStack().getItem()))) .withStyle(ChatFormatting.DARK_GRAY); + e.getToolTip().add(registryTooltip); + } - registerTooltip(e, registryTooltip, config.registryNameTooltipMode.get()); - - - // Tooltip - Max Stack Size - int stackSize = itemStack.getMaxStackSize(); + private static void maxStackSize(ItemTooltipEvent e) { + int stackSize = e.getItemStack().getMaxStackSize(); if (stackSize > 0) { Component stackSizeTooltip = Component.translatable("tooltip.jeiintegration.maxStackSize") - .append(Component.literal(" " + itemStack.getMaxStackSize())) + .append(Component.literal(" " + stackSize)) .withStyle(ChatFormatting.DARK_GRAY); - - registerTooltip(e, stackSizeTooltip, config.maxStackSizeTooltipMode.get()); + e.getToolTip().add(stackSizeTooltip); } + } - // Tooltip - Tags + private static void tags(ItemTooltipEvent e) { + ItemStack itemStack = e.getItemStack(); if (!itemStack.getTags().toList().isEmpty()) { Component tagsTooltip = Component.translatable("tooltip.jeiintegration.tags") .withStyle(ChatFormatting.DARK_GRAY); @@ -199,15 +210,15 @@ public void onItemTooltip(ItemTooltipEvent e) { tags.add(Component.literal(" " + tag).withStyle(ChatFormatting.DARK_GRAY)); } - registerTooltip(e, tagsTooltip, config.tagsTooltipMode.get()); - registerTooltips(e, tags, config.tagsTooltipMode.get()); + e.getToolTip().add(tagsTooltip); + e.getToolTip().addAll(tags); } + } - // Tooltip - Translation Key + private static void translationKey(ItemTooltipEvent e) { Component translationKeyTooltip = Component.translatable("tooltip.jeiintegration.translationKey") - .append(Component.literal(" " + itemStack.getDescriptionId())) + .append(Component.literal(" " + e.getItemStack().getDescriptionId())) .withStyle(ChatFormatting.DARK_GRAY); - - registerTooltip(e, translationKeyTooltip, config.translationKeyTooltipMode.get()); + e.getToolTip().add(translationKeyTooltip); } } From 41d726e8e67d1175761a25aa1882fa860c068456 Mon Sep 17 00:00:00 2001 From: mibac138 <5672750+mibac138@users.noreply.github.com> Date: Sat, 10 Aug 2024 21:47:52 +0200 Subject: [PATCH 5/7] Move tooltip handlers into their own classes --- .../jeiintegration/JEIIntegration.java | 7 +- .../jeiintegration/TooltipEventHandler.java | 281 ++++-------------- .../jeiintegration/TooltipModuleManager.java | 41 +++ .../jeiintegration/config/Config.java | 147 ++++----- .../modules/BurnTimeModule.java | 53 ++++ .../modules/DurabilityModule.java | 31 ++ .../modules/EnchantabilityModule.java | 28 ++ .../jeiintegration/modules/HungerModule.java | 46 +++ .../modules/MaxStackSizeModule.java | 28 ++ .../jeiintegration/modules/NbtDataModule.java | 29 ++ .../modules/RegistryNameModule.java | 26 ++ .../jeiintegration/modules/TagsModule.java | 41 +++ .../jeiintegration/modules/TooltipModule.java | 10 + .../modules/TooltipModuleHolder.java | 7 + .../modules/TranslationModule.java | 26 ++ 15 files changed, 478 insertions(+), 323 deletions(-) create mode 100644 src/main/java/com/snowshock35/jeiintegration/TooltipModuleManager.java create mode 100644 src/main/java/com/snowshock35/jeiintegration/modules/BurnTimeModule.java create mode 100644 src/main/java/com/snowshock35/jeiintegration/modules/DurabilityModule.java create mode 100644 src/main/java/com/snowshock35/jeiintegration/modules/EnchantabilityModule.java create mode 100644 src/main/java/com/snowshock35/jeiintegration/modules/HungerModule.java create mode 100644 src/main/java/com/snowshock35/jeiintegration/modules/MaxStackSizeModule.java create mode 100644 src/main/java/com/snowshock35/jeiintegration/modules/NbtDataModule.java create mode 100644 src/main/java/com/snowshock35/jeiintegration/modules/RegistryNameModule.java create mode 100644 src/main/java/com/snowshock35/jeiintegration/modules/TagsModule.java create mode 100644 src/main/java/com/snowshock35/jeiintegration/modules/TooltipModule.java create mode 100644 src/main/java/com/snowshock35/jeiintegration/modules/TooltipModuleHolder.java create mode 100644 src/main/java/com/snowshock35/jeiintegration/modules/TranslationModule.java diff --git a/src/main/java/com/snowshock35/jeiintegration/JEIIntegration.java b/src/main/java/com/snowshock35/jeiintegration/JEIIntegration.java index 8daec30..72d5812 100644 --- a/src/main/java/com/snowshock35/jeiintegration/JEIIntegration.java +++ b/src/main/java/com/snowshock35/jeiintegration/JEIIntegration.java @@ -44,11 +44,12 @@ public class JEIIntegration { public static final Logger logger = LogManager.getLogger(); public JEIIntegration() { - ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, Config.clientSpec); - FMLJavaModLoadingContext.get().getModEventBus().register(Config.class); + TooltipModuleManager tooltipModuleManager = TooltipModuleManager.create(); + ModLoadingContext.get().registerConfig(ModConfig.Type.CLIENT, tooltipModuleManager.getSpec()); + FMLJavaModLoadingContext.get().getModEventBus().register(tooltipModuleManager.getConfig()); DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { - MinecraftForge.EVENT_BUS.register(new TooltipEventHandler()); + MinecraftForge.EVENT_BUS.register(new TooltipEventHandler(tooltipModuleManager)); }); // Make sure the mod being absent on the other network side does not cause the client to display the server as diff --git a/src/main/java/com/snowshock35/jeiintegration/TooltipEventHandler.java b/src/main/java/com/snowshock35/jeiintegration/TooltipEventHandler.java index a25fdaa..2b8812c 100644 --- a/src/main/java/com/snowshock35/jeiintegration/TooltipEventHandler.java +++ b/src/main/java/com/snowshock35/jeiintegration/TooltipEventHandler.java @@ -1,224 +1,57 @@ -/* - * MIT License - * - * Copyright (c) 2020 SnowShock35 - * - * 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.snowshock35.jeiintegration; - -import com.mojang.blaze3d.platform.InputConstants; -import com.snowshock35.jeiintegration.config.Config; -import com.snowshock35.jeiintegration.config.OptionState; -import net.minecraft.ChatFormatting; -import net.minecraft.client.Minecraft; -import net.minecraft.nbt.CompoundTag; -import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; -import net.minecraft.tags.TagKey; -import net.minecraft.world.food.FoodProperties; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.crafting.RecipeType; -import net.minecraftforge.common.ForgeConfigSpec; -import net.minecraftforge.common.ForgeConfigSpec.ConfigValue; -import net.minecraftforge.event.entity.player.ItemTooltipEvent; -import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.registries.ForgeRegistries; -import org.apache.commons.lang3.tuple.Pair; -import org.apache.logging.log4j.Level; -import org.lwjgl.glfw.GLFW; - -import java.text.DecimalFormat; -import java.util.*; -import java.util.function.Consumer; - -import static net.minecraftforge.common.ForgeHooks.getBurnTime; - -public class TooltipEventHandler { - - private static final Config.Client config = Config.CLIENT; - - private static boolean isDebugMode() { - return Minecraft.getInstance().options.advancedItemTooltips; - } - - private static boolean isShiftKeyDown() { - return InputConstants.isKeyDown(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_KEY_LEFT_SHIFT) || - InputConstants.isKeyDown(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_KEY_RIGHT_SHIFT); - } - - private static boolean isEnabled(ConfigValue configValue) { - OptionState configOption = configValue.get(); - boolean isEnabled = false; - - if (configOption == OptionState.ENABLED) { - isEnabled = true; - } else if (configOption == OptionState.ON_SHIFT && isShiftKeyDown()) { - isEnabled = true; - } else if (configOption == OptionState.ON_DEBUG && isDebugMode()) { - isEnabled = true; - } else if (configOption == OptionState.ON_SHIFT_AND_DEBUG && isShiftKeyDown() && isDebugMode()) { - isEnabled = true; - } - return isEnabled; - } - - private static final ThreadLocal DECIMAL_FORMAT = ThreadLocal.withInitial(() -> { - // Set number formatting to display large numbers more clearly - DecimalFormat format = new DecimalFormat("#.##"); - format.setGroupingUsed(true); - format.setGroupingSize(3); - return format; - }); - - private static final List, Consumer>> MODULES = - new ArrayList<>(); - - static { - MODULES.add(Pair.of(config.burnTimeTooltipMode, TooltipEventHandler::burnTime)); - MODULES.add(Pair.of(config.durabilityTooltipMode, TooltipEventHandler::durability)); - MODULES.add(Pair.of(config.enchantabilityTooltipMode, TooltipEventHandler::enchantability)); - MODULES.add(Pair.of(config.foodTooltipMode, TooltipEventHandler::hunger)); - MODULES.add(Pair.of(config.nbtTooltipMode, TooltipEventHandler::nbtData)); - MODULES.add(Pair.of(config.registryNameTooltipMode, TooltipEventHandler::registryName)); - MODULES.add(Pair.of(config.maxStackSizeTooltipMode, TooltipEventHandler::maxStackSize)); - MODULES.add(Pair.of(config.tagsTooltipMode, TooltipEventHandler::tags)); - MODULES.add(Pair.of(config.translationKeyTooltipMode, TooltipEventHandler::translationKey)); - } - - @SubscribeEvent - public void onItemTooltip(ItemTooltipEvent e) { - if (e.getItemStack().isEmpty()) { - return; - } - - for (Pair, Consumer> module : MODULES) { - if (isEnabled(module.getLeft())) { - module.getRight().accept(e); - } - } - } - - private static void burnTime(ItemTooltipEvent e) { - int burnTime = 0; - try { - burnTime = getBurnTime(e.getItemStack(), RecipeType.SMELTING); - } catch (Exception ex) { - JEIIntegration.logger.log(Level.WARN, "):\n\nSomething went wrong!"); - } - - if (burnTime > 0) { - Component burnTooltip = Component.translatable("tooltip.jeiintegration.burnTime") - .append(Component.literal(" " + DECIMAL_FORMAT.get() - .format(burnTime) + " ")) - .append(Component.translatable("tooltip.jeiintegration.burnTime.suffix")) - .withStyle(ChatFormatting.DARK_GRAY); - e.getToolTip().add(burnTooltip); - } - } - - private static void durability(ItemTooltipEvent e) { - ItemStack itemStack = e.getItemStack(); - int maxDamage = itemStack.getMaxDamage(); - int currentDamage = maxDamage - itemStack.getDamageValue(); - if (maxDamage > 0) { - Component durabilityTooltip = Component.translatable("tooltip.jeiintegration.durability") - .append(Component.literal(" " + currentDamage + "/" + maxDamage)) - .withStyle(ChatFormatting.DARK_GRAY); - e.getToolTip().add(durabilityTooltip); - } - } - - private static void enchantability(ItemTooltipEvent e) { - int enchantability = e.getItemStack().getEnchantmentValue(); - if (enchantability > 0) { - Component enchantabilityTooltip = Component.translatable("tooltip.jeiintegration.enchantability") - .append(Component.literal(" " + enchantability)) - .withStyle(ChatFormatting.DARK_GRAY); - e.getToolTip().add(enchantabilityTooltip); - } - } - - private static void hunger(ItemTooltipEvent e) { - FoodProperties foodProperties = e.getItemStack().getFoodProperties(Minecraft.getInstance().player); - if (e.getItemStack().getItem().isEdible() && foodProperties != null) { - int healVal = foodProperties.getNutrition(); - float satVal = healVal * (foodProperties.getSaturationModifier() * 2); - - Component foodTooltip = Component.translatable("tooltip.jeiintegration.hunger") - .append(Component.literal(" " + healVal + " ")) - .append(Component.translatable("tooltip.jeiintegration.saturation")) - .append(Component.literal(" " + DECIMAL_FORMAT.get().format(satVal))) - .withStyle(ChatFormatting.DARK_GRAY); - e.getToolTip().add(foodTooltip); - } - } - - private static void nbtData(ItemTooltipEvent e) { - CompoundTag nbtData = e.getItemStack().getShareTag(); - if (nbtData != null) { - Component nbtTooltip = Component.translatable("tooltip.jeiintegration.nbtTagData") - .append(Component.literal(" " + nbtData)) - .withStyle(ChatFormatting.DARK_GRAY); - e.getToolTip().add(nbtTooltip); - } - } - - private static void registryName(ItemTooltipEvent e) { - Component registryTooltip = Component.translatable("tooltip.jeiintegration.registryName") - .append(Component.literal(" " + ForgeRegistries.ITEMS.getKey(e.getItemStack().getItem()))) - .withStyle(ChatFormatting.DARK_GRAY); - e.getToolTip().add(registryTooltip); - } - - private static void maxStackSize(ItemTooltipEvent e) { - int stackSize = e.getItemStack().getMaxStackSize(); - if (stackSize > 0) { - Component stackSizeTooltip = Component.translatable("tooltip.jeiintegration.maxStackSize") - .append(Component.literal(" " + stackSize)) - .withStyle(ChatFormatting.DARK_GRAY); - e.getToolTip().add(stackSizeTooltip); - } - } - - private static void tags(ItemTooltipEvent e) { - ItemStack itemStack = e.getItemStack(); - if (!itemStack.getTags().toList().isEmpty()) { - Component tagsTooltip = Component.translatable("tooltip.jeiintegration.tags") - .withStyle(ChatFormatting.DARK_GRAY); - - Set tags = new HashSet<>(); - - for (ResourceLocation tag : itemStack.getTags().map(TagKey::location).toList()) { - tags.add(Component.literal(" " + tag).withStyle(ChatFormatting.DARK_GRAY)); - } - - e.getToolTip().add(tagsTooltip); - e.getToolTip().addAll(tags); - } - } - - private static void translationKey(ItemTooltipEvent e) { - Component translationKeyTooltip = Component.translatable("tooltip.jeiintegration.translationKey") - .append(Component.literal(" " + e.getItemStack().getDescriptionId())) - .withStyle(ChatFormatting.DARK_GRAY); - e.getToolTip().add(translationKeyTooltip); - } -} +package com.snowshock35.jeiintegration; + +import com.mojang.blaze3d.platform.InputConstants; +import com.snowshock35.jeiintegration.config.OptionState; +import com.snowshock35.jeiintegration.modules.TooltipModuleHolder; +import net.minecraft.client.Minecraft; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.event.entity.player.ItemTooltipEvent; +import net.minecraftforge.eventbus.api.SubscribeEvent; +import org.lwjgl.glfw.GLFW; + +public class TooltipEventHandler { + private final TooltipModuleManager tooltipModuleManager; + + public TooltipEventHandler(TooltipModuleManager tooltipModuleManager) { + this.tooltipModuleManager = tooltipModuleManager; + } + + + private static boolean isDebugMode() { + return Minecraft.getInstance().options.advancedItemTooltips; + } + + private static boolean isShiftKeyDown() { + return InputConstants.isKeyDown(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_KEY_LEFT_SHIFT) || + InputConstants.isKeyDown(Minecraft.getInstance().getWindow().getWindow(), GLFW.GLFW_KEY_RIGHT_SHIFT); + } + + private static boolean isEnabled(ForgeConfigSpec.ConfigValue configValue) { + OptionState configOption = configValue.get(); + boolean isEnabled = false; + + if (configOption == OptionState.ENABLED) { + isEnabled = true; + } else if (configOption == OptionState.ON_SHIFT && isShiftKeyDown()) { + isEnabled = true; + } else if (configOption == OptionState.ON_DEBUG && isDebugMode()) { + isEnabled = true; + } else if (configOption == OptionState.ON_SHIFT_AND_DEBUG && isShiftKeyDown() && isDebugMode()) { + isEnabled = true; + } + return isEnabled; + } + + @SubscribeEvent + public void onItemTooltip(ItemTooltipEvent e) { + if (e.getItemStack().isEmpty()) { + return; + } + + for (TooltipModuleHolder module : tooltipModuleManager.getEnabledModules()) { + if (isEnabled(module.config())) { + module.definition().apply(e); + } + } + } +} diff --git a/src/main/java/com/snowshock35/jeiintegration/TooltipModuleManager.java b/src/main/java/com/snowshock35/jeiintegration/TooltipModuleManager.java new file mode 100644 index 0000000..9e73a39 --- /dev/null +++ b/src/main/java/com/snowshock35/jeiintegration/TooltipModuleManager.java @@ -0,0 +1,41 @@ +package com.snowshock35.jeiintegration; + +import com.snowshock35.jeiintegration.config.Config; +import com.snowshock35.jeiintegration.modules.*; +import net.minecraftforge.common.ForgeConfigSpec; +import org.apache.commons.lang3.tuple.Pair; + +import java.util.List; + +public class TooltipModuleManager { + private final ForgeConfigSpec spec; + private final Config config; + + public static TooltipModuleManager create() { + List modules = List.of(new BurnTimeModule(), new DurabilityModule(), + new EnchantabilityModule(), new HungerModule(), new NbtDataModule(), new RegistryNameModule(), + new MaxStackSizeModule(), new TagsModule(), new TranslationModule()); + + Pair specPair = + new ForgeConfigSpec.Builder().configure(builder -> new Config(builder, modules)); + return new TooltipModuleManager(specPair.getRight(), specPair.getLeft()); + } + + private TooltipModuleManager(ForgeConfigSpec spec, Config config) { + this.spec = spec; + this.config = config; + this.config.updateCache(); + } + + public ForgeConfigSpec getSpec() { + return spec; + } + + public Config getConfig() { + return config; + } + + public List getEnabledModules() { + return config.getEnabledModules(); + } +} diff --git a/src/main/java/com/snowshock35/jeiintegration/config/Config.java b/src/main/java/com/snowshock35/jeiintegration/config/Config.java index 14a4c9e..2831052 100644 --- a/src/main/java/com/snowshock35/jeiintegration/config/Config.java +++ b/src/main/java/com/snowshock35/jeiintegration/config/Config.java @@ -25,122 +25,77 @@ package com.snowshock35.jeiintegration.config; import com.snowshock35.jeiintegration.JEIIntegration; +import com.snowshock35.jeiintegration.modules.TooltipModule; +import com.snowshock35.jeiintegration.modules.TooltipModuleHolder; import net.minecraftforge.common.ForgeConfigSpec; -import net.minecraftforge.common.ForgeConfigSpec.ConfigValue; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.event.config.ModConfigEvent; -import org.apache.commons.lang3.tuple.Pair; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; public class Config { private static final String CATEGORY_HANDLERS = "Handler Settings"; private static final String CATEGORY_TOOLTIPS = "Tooltip Settings"; private static final String CATEGORY_MISCELLANEOUS = "Miscellaneous Settings"; - private static final OptionState defaultBurnTimeTooltipMode = OptionState.DISABLED; - private static final OptionState defaultDurabilityTooltipMode = OptionState.DISABLED; - private static final OptionState defaultEnchantabilityTooltipMode = OptionState.DISABLED; - private static final OptionState defaultFoodTooltipMode = OptionState.DISABLED; - private static final OptionState defaultMaxStackSizeTooltipMode = OptionState.DISABLED; - private static final OptionState defaultNbtTooltipMode = OptionState.DISABLED; - private static final OptionState defaultRegistryNameTooltipMode = OptionState.DISABLED; - private static final OptionState defaultTagsTooltipMode = OptionState.DISABLED; - private static final OptionState defaultTranslationKeyTooltipMode = OptionState.DISABLED; - - public static class Client { - public final ConfigValue burnTimeTooltipMode; - public final ConfigValue durabilityTooltipMode; - public final ConfigValue enchantabilityTooltipMode; - public final ConfigValue foodTooltipMode; - public final ConfigValue maxStackSizeTooltipMode; - public final ConfigValue nbtTooltipMode; - public final ConfigValue registryNameTooltipMode; - public final ConfigValue tagsTooltipMode; - public final ConfigValue translationKeyTooltipMode; - - Client(ForgeConfigSpec.Builder builder) { - builder.comment(CATEGORY_HANDLERS) - .comment(" Handler Options") - .push("handler_options"); - - builder.pop(); - - builder.comment(CATEGORY_MISCELLANEOUS) - .comment(" Miscellaneous Options") - .push("misc_options"); - - builder.pop(); - - builder.comment(CATEGORY_TOOLTIPS) - .comment(" Tooltip Options") - .comment(" Configure the options below to one of the following: " + - "disabled, enabled, on_shift, on_debug or on_shift_and_debug") - .push("tooltip_options"); - - burnTimeTooltipMode = builder - .comment(" Configure tooltip for burn time.") - .translation("config.jeiintegration.tooltips.burnTimeTooltipMode") - .defineEnum("burnTimeTooltipMode", defaultBurnTimeTooltipMode); - - durabilityTooltipMode = builder - .comment(" Configure tooltip for durability.") - .translation("config.jeiintegration.tooltips.durabilityTooltipMode") - .defineEnum("durabilityTooltipMode", defaultDurabilityTooltipMode); - - enchantabilityTooltipMode = builder - .comment(" Configure tooltip for enchantability") - .translation("config.jeiintegration.tooltips.enchantabilityTooltipMode") - .defineEnum("enchantabilityTooltipMode", defaultEnchantabilityTooltipMode); - - foodTooltipMode = builder - .comment(" Configure tooltip for hunger and saturation.") - .translation("config.jeiintegration.tooltips.foodTooltipMode") - .defineEnum("foodTooltipMode", defaultFoodTooltipMode); - - maxStackSizeTooltipMode = builder - .comment(" Configure tooltip for max stack size.") - .translation("config.jeiintegration.tooltips.maxStackSizeTooltipMode") - .defineEnum("maxStackSizeTooltipMode", defaultMaxStackSizeTooltipMode); - - nbtTooltipMode = builder - .comment(" Configure tooltip for NBT data.") - .translation("config.jeiintegration.tooltips.nbtTooltipMode") - .defineEnum("nbtTooltipMode", defaultNbtTooltipMode); - - registryNameTooltipMode = builder - .comment(" Configure tooltip for registry name. E.g. minecraft:stone") - .translation("config.jeiintegration.tooltips.registryNameTooltipMode") - .defineEnum("registryNameTooltipMode", defaultRegistryNameTooltipMode); - - tagsTooltipMode = builder - .comment(" Configure tooltip for tags. E.g. forge:ingot, minecraft:planks") - .translation("config.jeiintegration.tooltips.tagsTooltipMode") - .defineEnum("tagsTooltipMode", defaultTagsTooltipMode); - - translationKeyTooltipMode = builder - .comment(" Configure tooltip for translation key. E.g. block.minecraft.stone") - .translation("config.jeiintegration.tooltips.translationKeyTooltipMode") - .defineEnum("translationKeyTooltipMode", defaultTranslationKeyTooltipMode); - - builder.pop(); + private final List modules = new ArrayList<>(); + private final List enabledModules = new ArrayList<>(); + + public Config(ForgeConfigSpec.Builder builder, List modules) { + builder.comment(CATEGORY_HANDLERS) + .comment(" Handler Options") + .push("handler_options"); + + builder.pop(); + + builder.comment(CATEGORY_MISCELLANEOUS) + .comment(" Miscellaneous Options") + .push("misc_options"); + + builder.pop(); + + builder.comment(CATEGORY_TOOLTIPS) + .comment(" Tooltip Options") + .comment(" Configure the options below to one of the following: " + + "disabled, enabled, on_shift, on_debug or on_shift_and_debug") + .push("tooltip_options"); + + for (TooltipModule module : modules) { + TooltipModuleHolder moduleHolder = new TooltipModuleHolder(module, module.createConfigValue(builder)); + this.modules.add(moduleHolder); } + + builder.pop(); + } + + public List getModules() { + return Collections.unmodifiableList(modules); } - public static final ForgeConfigSpec clientSpec; - public static final Config.Client CLIENT; + public List getEnabledModules() { + return Collections.unmodifiableList(enabledModules); + } - static { - Pair specPair = new ForgeConfigSpec.Builder().configure(Config.Client::new); - clientSpec = specPair.getRight(); - CLIENT = specPair.getLeft(); + public void updateCache() { + enabledModules.clear(); + for (TooltipModuleHolder module : modules) { + if (module.config().get() != OptionState.DISABLED) { + enabledModules.add(module); + } + } } @SubscribeEvent - public static void onLoad(final ModConfigEvent.Loading configEvent) { + public void onLoad(final ModConfigEvent.Loading configEvent) { JEIIntegration.logger.debug("Loaded JEI Integration config file {}", configEvent.getConfig().getFileName()); + updateCache(); } @SubscribeEvent - public static void onFileChange(final ModConfigEvent.Reloading configEvent) { + public void onFileChange(final ModConfigEvent.Reloading configEvent) { JEIIntegration.logger.debug("JEI Integration config just got changed on the file system!"); + updateCache(); } } \ No newline at end of file diff --git a/src/main/java/com/snowshock35/jeiintegration/modules/BurnTimeModule.java b/src/main/java/com/snowshock35/jeiintegration/modules/BurnTimeModule.java new file mode 100644 index 0000000..e3e3bb4 --- /dev/null +++ b/src/main/java/com/snowshock35/jeiintegration/modules/BurnTimeModule.java @@ -0,0 +1,53 @@ +package com.snowshock35.jeiintegration.modules; + +import com.snowshock35.jeiintegration.JEIIntegration; +import com.snowshock35.jeiintegration.config.OptionState; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.crafting.RecipeType; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.event.entity.player.ItemTooltipEvent; +import org.apache.logging.log4j.Level; + +import java.text.DecimalFormat; + +import static net.minecraftforge.common.ForgeHooks.getBurnTime; + +public class BurnTimeModule implements TooltipModule { + private static final ThreadLocal DECIMAL_FORMAT = ThreadLocal.withInitial(() -> { + // Set number formatting to display large numbers more clearly + DecimalFormat format = new DecimalFormat("#.##"); + format.setGroupingUsed(true); + format.setGroupingSize(3); + return format; + }); + + @Override + public ForgeConfigSpec.ConfigValue createConfigValue(ForgeConfigSpec.Builder builder) { + return builder + .comment(" Configure tooltip for burn time.") + .translation("config.jeiintegration.tooltips.burnTimeTooltipMode") + .defineEnum("burnTimeTooltipMode", OptionState.DISABLED); + } + + @Override + public void apply(ItemTooltipEvent e) { + int burnTime = 0; + try { + burnTime = getBurnTime(e.getItemStack(), RecipeType.SMELTING); + } catch (Exception ex) { + JEIIntegration.logger.log(Level.WARN, "):\n\nSomething went wrong!"); + } + + if (burnTime <= 0) { + return; + } + + Component burnTooltip = + Component.translatable("tooltip.jeiintegration.burnTime") + .append(Component.literal(" " + DECIMAL_FORMAT.get().format(burnTime) + " ")) + .append(Component.translatable("tooltip.jeiintegration.burnTime.suffix")) + .withStyle(ChatFormatting.DARK_GRAY); + e.getToolTip().add(burnTooltip); + } +} \ No newline at end of file diff --git a/src/main/java/com/snowshock35/jeiintegration/modules/DurabilityModule.java b/src/main/java/com/snowshock35/jeiintegration/modules/DurabilityModule.java new file mode 100644 index 0000000..57ec80e --- /dev/null +++ b/src/main/java/com/snowshock35/jeiintegration/modules/DurabilityModule.java @@ -0,0 +1,31 @@ +package com.snowshock35.jeiintegration.modules; + +import com.snowshock35.jeiintegration.config.OptionState; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.event.entity.player.ItemTooltipEvent; + +public class DurabilityModule implements TooltipModule { + @Override + public ForgeConfigSpec.ConfigValue createConfigValue(ForgeConfigSpec.Builder builder) { + return builder + .comment(" Configure tooltip for durability.") + .translation("config.jeiintegration.tooltips.durabilityTooltipMode") + .defineEnum("durabilityTooltipMode", OptionState.DISABLED); + } + + @Override + public void apply(ItemTooltipEvent e) { + ItemStack itemStack = e.getItemStack(); + int maxDamage = itemStack.getMaxDamage(); + int currentDamage = maxDamage - itemStack.getDamageValue(); + if (maxDamage > 0) { + Component durabilityTooltip = Component.translatable("tooltip.jeiintegration.durability") + .append(Component.literal(" " + currentDamage + "/" + maxDamage)) + .withStyle(ChatFormatting.DARK_GRAY); + e.getToolTip().add(durabilityTooltip); + } + } +} diff --git a/src/main/java/com/snowshock35/jeiintegration/modules/EnchantabilityModule.java b/src/main/java/com/snowshock35/jeiintegration/modules/EnchantabilityModule.java new file mode 100644 index 0000000..bcfdb0c --- /dev/null +++ b/src/main/java/com/snowshock35/jeiintegration/modules/EnchantabilityModule.java @@ -0,0 +1,28 @@ +package com.snowshock35.jeiintegration.modules; + +import com.snowshock35.jeiintegration.config.OptionState; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.event.entity.player.ItemTooltipEvent; + +public class EnchantabilityModule implements TooltipModule { + @Override + public ForgeConfigSpec.ConfigValue createConfigValue(ForgeConfigSpec.Builder builder) { + return builder + .comment(" Configure tooltip for enchantability") + .translation("config.jeiintegration.tooltips.enchantabilityTooltipMode") + .defineEnum("enchantabilityTooltipMode", OptionState.DISABLED); + } + + @Override + public void apply(ItemTooltipEvent e) { + int enchantability = e.getItemStack().getEnchantmentValue(); + if (enchantability > 0) { + Component enchantabilityTooltip = Component.translatable("tooltip.jeiintegration.enchantability") + .append(Component.literal(" " + enchantability)) + .withStyle(ChatFormatting.DARK_GRAY); + e.getToolTip().add(enchantabilityTooltip); + } + } +} diff --git a/src/main/java/com/snowshock35/jeiintegration/modules/HungerModule.java b/src/main/java/com/snowshock35/jeiintegration/modules/HungerModule.java new file mode 100644 index 0000000..2e138cd --- /dev/null +++ b/src/main/java/com/snowshock35/jeiintegration/modules/HungerModule.java @@ -0,0 +1,46 @@ +package com.snowshock35.jeiintegration.modules; + +import com.snowshock35.jeiintegration.config.OptionState; +import net.minecraft.ChatFormatting; +import net.minecraft.client.Minecraft; +import net.minecraft.network.chat.Component; +import net.minecraft.world.food.FoodProperties; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.event.entity.player.ItemTooltipEvent; + +import java.text.DecimalFormat; + +public class HungerModule implements TooltipModule { + private static final ThreadLocal DECIMAL_FORMAT = ThreadLocal.withInitial(() -> { + // Set number formatting to display large numbers more clearly + DecimalFormat format = new DecimalFormat("#.##"); + format.setGroupingUsed(true); + format.setGroupingSize(3); + return format; + }); + + @Override + public ForgeConfigSpec.ConfigValue createConfigValue(ForgeConfigSpec.Builder builder) { + return builder + .comment(" Configure tooltip for hunger and saturation.") + .translation("config.jeiintegration.tooltips.foodTooltipMode") + .defineEnum("foodTooltipMode", OptionState.DISABLED); + } + + @Override + public void apply(ItemTooltipEvent e) { + FoodProperties foodProperties = e.getItemStack().getFoodProperties(Minecraft.getInstance().player); + if (e.getItemStack().getItem().isEdible() && foodProperties != null) { + int healVal = foodProperties.getNutrition(); + float satVal = healVal * (foodProperties.getSaturationModifier() * 2); + + Component foodTooltip = Component.translatable("tooltip.jeiintegration.hunger") + .append(Component.literal(" " + healVal + " ")) + .append(Component.translatable("tooltip.jeiintegration.saturation")) + .append(Component.literal(" " + DECIMAL_FORMAT.get().format(satVal))) + .withStyle(ChatFormatting.DARK_GRAY); + e.getToolTip().add(foodTooltip); + } + + } +} diff --git a/src/main/java/com/snowshock35/jeiintegration/modules/MaxStackSizeModule.java b/src/main/java/com/snowshock35/jeiintegration/modules/MaxStackSizeModule.java new file mode 100644 index 0000000..cc38aa4 --- /dev/null +++ b/src/main/java/com/snowshock35/jeiintegration/modules/MaxStackSizeModule.java @@ -0,0 +1,28 @@ +package com.snowshock35.jeiintegration.modules; + +import com.snowshock35.jeiintegration.config.OptionState; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.event.entity.player.ItemTooltipEvent; + +public class MaxStackSizeModule implements TooltipModule { + @Override + public ForgeConfigSpec.ConfigValue createConfigValue(ForgeConfigSpec.Builder builder) { + return builder + .comment(" Configure tooltip for max stack size.") + .translation("config.jeiintegration.tooltips.maxStackSizeTooltipMode") + .defineEnum("maxStackSizeTooltipMode", OptionState.DISABLED); + } + + @Override + public void apply(ItemTooltipEvent e) { + int stackSize = e.getItemStack().getMaxStackSize(); + if (stackSize > 0) { + Component stackSizeTooltip = Component.translatable("tooltip.jeiintegration.maxStackSize") + .append(Component.literal(" " + stackSize)) + .withStyle(ChatFormatting.DARK_GRAY); + e.getToolTip().add(stackSizeTooltip); + } + } +} diff --git a/src/main/java/com/snowshock35/jeiintegration/modules/NbtDataModule.java b/src/main/java/com/snowshock35/jeiintegration/modules/NbtDataModule.java new file mode 100644 index 0000000..2ad4d8c --- /dev/null +++ b/src/main/java/com/snowshock35/jeiintegration/modules/NbtDataModule.java @@ -0,0 +1,29 @@ +package com.snowshock35.jeiintegration.modules; + +import com.snowshock35.jeiintegration.config.OptionState; +import net.minecraft.ChatFormatting; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.chat.Component; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.event.entity.player.ItemTooltipEvent; + +public class NbtDataModule implements TooltipModule { + @Override + public ForgeConfigSpec.ConfigValue createConfigValue(ForgeConfigSpec.Builder builder) { + return builder + .comment(" Configure tooltip for NBT data.") + .translation("config.jeiintegration.tooltips.nbtTooltipMode") + .defineEnum("nbtTooltipMode", OptionState.DISABLED); + } + + @Override + public void apply(ItemTooltipEvent e) { + CompoundTag nbtData = e.getItemStack().getShareTag(); + if (nbtData != null) { + Component nbtTooltip = Component.translatable("tooltip.jeiintegration.nbtTagData") + .append(Component.literal(" " + nbtData)) + .withStyle(ChatFormatting.DARK_GRAY); + e.getToolTip().add(nbtTooltip); + } + } +} diff --git a/src/main/java/com/snowshock35/jeiintegration/modules/RegistryNameModule.java b/src/main/java/com/snowshock35/jeiintegration/modules/RegistryNameModule.java new file mode 100644 index 0000000..f9ef270 --- /dev/null +++ b/src/main/java/com/snowshock35/jeiintegration/modules/RegistryNameModule.java @@ -0,0 +1,26 @@ +package com.snowshock35.jeiintegration.modules; + +import com.snowshock35.jeiintegration.config.OptionState; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.event.entity.player.ItemTooltipEvent; +import net.minecraftforge.registries.ForgeRegistries; + +public class RegistryNameModule implements TooltipModule { + @Override + public ForgeConfigSpec.ConfigValue createConfigValue(ForgeConfigSpec.Builder builder) { + return builder + .comment(" Configure tooltip for registry name. E.g. minecraft:stone") + .translation("config.jeiintegration.tooltips.registryNameTooltipMode") + .defineEnum("registryNameTooltipMode", OptionState.DISABLED); + } + + @Override + public void apply(ItemTooltipEvent e) { + Component registryTooltip = Component.translatable("tooltip.jeiintegration.registryName") + .append(Component.literal(" " + ForgeRegistries.ITEMS.getKey(e.getItemStack().getItem()))) + .withStyle(ChatFormatting.DARK_GRAY); + e.getToolTip().add(registryTooltip); + } +} diff --git a/src/main/java/com/snowshock35/jeiintegration/modules/TagsModule.java b/src/main/java/com/snowshock35/jeiintegration/modules/TagsModule.java new file mode 100644 index 0000000..bc77a7d --- /dev/null +++ b/src/main/java/com/snowshock35/jeiintegration/modules/TagsModule.java @@ -0,0 +1,41 @@ +package com.snowshock35.jeiintegration.modules; + +import com.snowshock35.jeiintegration.config.OptionState; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.tags.TagKey; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.event.entity.player.ItemTooltipEvent; + +import java.util.HashSet; +import java.util.Set; + +public class TagsModule implements TooltipModule { + @Override + public ForgeConfigSpec.ConfigValue createConfigValue(ForgeConfigSpec.Builder builder) { + return builder + .comment(" Configure tooltip for tags. E.g. forge:ingot, minecraft:planks") + .translation("config.jeiintegration.tooltips.tagsTooltipMode") + .defineEnum("tagsTooltipMode", OptionState.DISABLED); + } + + @Override + public void apply(ItemTooltipEvent e) { + ItemStack itemStack = e.getItemStack(); + if (!itemStack.getTags().toList().isEmpty()) { + Component tagsTooltip = Component.translatable("tooltip.jeiintegration.tags") + .withStyle(ChatFormatting.DARK_GRAY); + + Set tags = new HashSet<>(); + + for (ResourceLocation tag : itemStack.getTags().map(TagKey::location).toList()) { + tags.add(Component.literal(" " + tag).withStyle(ChatFormatting.DARK_GRAY)); + } + + e.getToolTip().add(tagsTooltip); + e.getToolTip().addAll(tags); + } + } +} diff --git a/src/main/java/com/snowshock35/jeiintegration/modules/TooltipModule.java b/src/main/java/com/snowshock35/jeiintegration/modules/TooltipModule.java new file mode 100644 index 0000000..60ba15a --- /dev/null +++ b/src/main/java/com/snowshock35/jeiintegration/modules/TooltipModule.java @@ -0,0 +1,10 @@ +package com.snowshock35.jeiintegration.modules; + +import com.snowshock35.jeiintegration.config.OptionState; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.event.entity.player.ItemTooltipEvent; + +public interface TooltipModule { + ForgeConfigSpec.ConfigValue createConfigValue(ForgeConfigSpec.Builder builder); + void apply(ItemTooltipEvent e); +} diff --git a/src/main/java/com/snowshock35/jeiintegration/modules/TooltipModuleHolder.java b/src/main/java/com/snowshock35/jeiintegration/modules/TooltipModuleHolder.java new file mode 100644 index 0000000..0567fef --- /dev/null +++ b/src/main/java/com/snowshock35/jeiintegration/modules/TooltipModuleHolder.java @@ -0,0 +1,7 @@ +package com.snowshock35.jeiintegration.modules; + +import com.snowshock35.jeiintegration.config.OptionState; +import net.minecraftforge.common.ForgeConfigSpec; + +public record TooltipModuleHolder(TooltipModule definition, ForgeConfigSpec.ConfigValue config) { +} diff --git a/src/main/java/com/snowshock35/jeiintegration/modules/TranslationModule.java b/src/main/java/com/snowshock35/jeiintegration/modules/TranslationModule.java new file mode 100644 index 0000000..40e5fcb --- /dev/null +++ b/src/main/java/com/snowshock35/jeiintegration/modules/TranslationModule.java @@ -0,0 +1,26 @@ +package com.snowshock35.jeiintegration.modules; + +import com.snowshock35.jeiintegration.config.OptionState; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraftforge.common.ForgeConfigSpec; +import net.minecraftforge.event.entity.player.ItemTooltipEvent; + +public class TranslationModule implements TooltipModule { + + @Override + public ForgeConfigSpec.ConfigValue createConfigValue(ForgeConfigSpec.Builder builder) { + return builder + .comment(" Configure tooltip for translation key. E.g. block.minecraft.stone") + .translation("config.jeiintegration.tooltips.translationKeyTooltipMode") + .defineEnum("translationKeyTooltipMode", OptionState.DISABLED); + } + + @Override + public void apply(ItemTooltipEvent e) { + Component translationKeyTooltip = Component.translatable("tooltip.jeiintegration.translationKey") + .append(Component.literal(" " + e.getItemStack().getDescriptionId())) + .withStyle(ChatFormatting.DARK_GRAY); + e.getToolTip().add(translationKeyTooltip); + } +} From 6bcc56b8a8ea3e7a89452454369124fc13741456 Mon Sep 17 00:00:00 2001 From: mibac138 <5672750+mibac138@users.noreply.github.com> Date: Sat, 10 Aug 2024 21:53:14 +0200 Subject: [PATCH 6/7] Make whole messages translatable --- .../modules/BurnTimeModule.java | 4 +--- .../modules/DurabilityModule.java | 3 +-- .../modules/EnchantabilityModule.java | 3 +-- .../jeiintegration/modules/HungerModule.java | 6 ++---- .../modules/MaxStackSizeModule.java | 3 +-- .../jeiintegration/modules/NbtDataModule.java | 3 +-- .../modules/RegistryNameModule.java | 3 +-- .../modules/TranslationModule.java | 3 +-- .../assets/jeiintegration/lang/en_us.json | 19 +++++++++---------- .../assets/jeiintegration/lang/fr_fr.json | 17 ++++++++--------- .../assets/jeiintegration/lang/ru_ru.json | 17 ++++++++--------- 11 files changed, 34 insertions(+), 47 deletions(-) diff --git a/src/main/java/com/snowshock35/jeiintegration/modules/BurnTimeModule.java b/src/main/java/com/snowshock35/jeiintegration/modules/BurnTimeModule.java index e3e3bb4..c16b336 100644 --- a/src/main/java/com/snowshock35/jeiintegration/modules/BurnTimeModule.java +++ b/src/main/java/com/snowshock35/jeiintegration/modules/BurnTimeModule.java @@ -44,9 +44,7 @@ public void apply(ItemTooltipEvent e) { } Component burnTooltip = - Component.translatable("tooltip.jeiintegration.burnTime") - .append(Component.literal(" " + DECIMAL_FORMAT.get().format(burnTime) + " ")) - .append(Component.translatable("tooltip.jeiintegration.burnTime.suffix")) + Component.translatable("tooltip.jeiintegration.burnTime", DECIMAL_FORMAT.get().format(burnTime)) .withStyle(ChatFormatting.DARK_GRAY); e.getToolTip().add(burnTooltip); } diff --git a/src/main/java/com/snowshock35/jeiintegration/modules/DurabilityModule.java b/src/main/java/com/snowshock35/jeiintegration/modules/DurabilityModule.java index 57ec80e..38791e6 100644 --- a/src/main/java/com/snowshock35/jeiintegration/modules/DurabilityModule.java +++ b/src/main/java/com/snowshock35/jeiintegration/modules/DurabilityModule.java @@ -22,8 +22,7 @@ public void apply(ItemTooltipEvent e) { int maxDamage = itemStack.getMaxDamage(); int currentDamage = maxDamage - itemStack.getDamageValue(); if (maxDamage > 0) { - Component durabilityTooltip = Component.translatable("tooltip.jeiintegration.durability") - .append(Component.literal(" " + currentDamage + "/" + maxDamage)) + Component durabilityTooltip = Component.translatable("tooltip.jeiintegration.durability", currentDamage, maxDamage) .withStyle(ChatFormatting.DARK_GRAY); e.getToolTip().add(durabilityTooltip); } diff --git a/src/main/java/com/snowshock35/jeiintegration/modules/EnchantabilityModule.java b/src/main/java/com/snowshock35/jeiintegration/modules/EnchantabilityModule.java index bcfdb0c..2e312c0 100644 --- a/src/main/java/com/snowshock35/jeiintegration/modules/EnchantabilityModule.java +++ b/src/main/java/com/snowshock35/jeiintegration/modules/EnchantabilityModule.java @@ -19,8 +19,7 @@ public ForgeConfigSpec.ConfigValue createConfigValue(ForgeConfigSpe public void apply(ItemTooltipEvent e) { int enchantability = e.getItemStack().getEnchantmentValue(); if (enchantability > 0) { - Component enchantabilityTooltip = Component.translatable("tooltip.jeiintegration.enchantability") - .append(Component.literal(" " + enchantability)) + Component enchantabilityTooltip = Component.translatable("tooltip.jeiintegration.enchantability", enchantability) .withStyle(ChatFormatting.DARK_GRAY); e.getToolTip().add(enchantabilityTooltip); } diff --git a/src/main/java/com/snowshock35/jeiintegration/modules/HungerModule.java b/src/main/java/com/snowshock35/jeiintegration/modules/HungerModule.java index 2e138cd..272731c 100644 --- a/src/main/java/com/snowshock35/jeiintegration/modules/HungerModule.java +++ b/src/main/java/com/snowshock35/jeiintegration/modules/HungerModule.java @@ -34,10 +34,8 @@ public void apply(ItemTooltipEvent e) { int healVal = foodProperties.getNutrition(); float satVal = healVal * (foodProperties.getSaturationModifier() * 2); - Component foodTooltip = Component.translatable("tooltip.jeiintegration.hunger") - .append(Component.literal(" " + healVal + " ")) - .append(Component.translatable("tooltip.jeiintegration.saturation")) - .append(Component.literal(" " + DECIMAL_FORMAT.get().format(satVal))) + Component foodTooltip = Component.translatable("tooltip.jeiintegration.hunger", healVal) + .append(Component.translatable("tooltip.jeiintegration.saturation", DECIMAL_FORMAT.get().format(satVal))) .withStyle(ChatFormatting.DARK_GRAY); e.getToolTip().add(foodTooltip); } diff --git a/src/main/java/com/snowshock35/jeiintegration/modules/MaxStackSizeModule.java b/src/main/java/com/snowshock35/jeiintegration/modules/MaxStackSizeModule.java index cc38aa4..2098e87 100644 --- a/src/main/java/com/snowshock35/jeiintegration/modules/MaxStackSizeModule.java +++ b/src/main/java/com/snowshock35/jeiintegration/modules/MaxStackSizeModule.java @@ -19,8 +19,7 @@ public ForgeConfigSpec.ConfigValue createConfigValue(ForgeConfigSpe public void apply(ItemTooltipEvent e) { int stackSize = e.getItemStack().getMaxStackSize(); if (stackSize > 0) { - Component stackSizeTooltip = Component.translatable("tooltip.jeiintegration.maxStackSize") - .append(Component.literal(" " + stackSize)) + Component stackSizeTooltip = Component.translatable("tooltip.jeiintegration.maxStackSize", stackSize) .withStyle(ChatFormatting.DARK_GRAY); e.getToolTip().add(stackSizeTooltip); } diff --git a/src/main/java/com/snowshock35/jeiintegration/modules/NbtDataModule.java b/src/main/java/com/snowshock35/jeiintegration/modules/NbtDataModule.java index 2ad4d8c..40148ce 100644 --- a/src/main/java/com/snowshock35/jeiintegration/modules/NbtDataModule.java +++ b/src/main/java/com/snowshock35/jeiintegration/modules/NbtDataModule.java @@ -20,8 +20,7 @@ public ForgeConfigSpec.ConfigValue createConfigValue(ForgeConfigSpe public void apply(ItemTooltipEvent e) { CompoundTag nbtData = e.getItemStack().getShareTag(); if (nbtData != null) { - Component nbtTooltip = Component.translatable("tooltip.jeiintegration.nbtTagData") - .append(Component.literal(" " + nbtData)) + Component nbtTooltip = Component.translatable("tooltip.jeiintegration.nbtTagData", nbtData) .withStyle(ChatFormatting.DARK_GRAY); e.getToolTip().add(nbtTooltip); } diff --git a/src/main/java/com/snowshock35/jeiintegration/modules/RegistryNameModule.java b/src/main/java/com/snowshock35/jeiintegration/modules/RegistryNameModule.java index f9ef270..149ed32 100644 --- a/src/main/java/com/snowshock35/jeiintegration/modules/RegistryNameModule.java +++ b/src/main/java/com/snowshock35/jeiintegration/modules/RegistryNameModule.java @@ -18,8 +18,7 @@ public ForgeConfigSpec.ConfigValue createConfigValue(ForgeConfigSpe @Override public void apply(ItemTooltipEvent e) { - Component registryTooltip = Component.translatable("tooltip.jeiintegration.registryName") - .append(Component.literal(" " + ForgeRegistries.ITEMS.getKey(e.getItemStack().getItem()))) + Component registryTooltip = Component.translatable("tooltip.jeiintegration.registryName", ForgeRegistries.ITEMS.getKey(e.getItemStack().getItem())) .withStyle(ChatFormatting.DARK_GRAY); e.getToolTip().add(registryTooltip); } diff --git a/src/main/java/com/snowshock35/jeiintegration/modules/TranslationModule.java b/src/main/java/com/snowshock35/jeiintegration/modules/TranslationModule.java index 40e5fcb..0822b21 100644 --- a/src/main/java/com/snowshock35/jeiintegration/modules/TranslationModule.java +++ b/src/main/java/com/snowshock35/jeiintegration/modules/TranslationModule.java @@ -18,8 +18,7 @@ public ForgeConfigSpec.ConfigValue createConfigValue(ForgeConfigSpe @Override public void apply(ItemTooltipEvent e) { - Component translationKeyTooltip = Component.translatable("tooltip.jeiintegration.translationKey") - .append(Component.literal(" " + e.getItemStack().getDescriptionId())) + Component translationKeyTooltip = Component.translatable("tooltip.jeiintegration.translationKey", e.getItemStack().getDescriptionId()) .withStyle(ChatFormatting.DARK_GRAY); e.getToolTip().add(translationKeyTooltip); } diff --git a/src/main/resources/assets/jeiintegration/lang/en_us.json b/src/main/resources/assets/jeiintegration/lang/en_us.json index f6689af..cd6d2dd 100644 --- a/src/main/resources/assets/jeiintegration/lang/en_us.json +++ b/src/main/resources/assets/jeiintegration/lang/en_us.json @@ -17,15 +17,14 @@ "config.jeiintegration.tooltips.translationKeyTooltipMode": "Translation Key Tooltip", "_comment": "Tooltips", - "tooltip.jeiintegration.burnTime": "Burn Time:", - "tooltip.jeiintegration.burnTime.suffix": "ticks", - "tooltip.jeiintegration.durability": "Durability:", - "tooltip.jeiintegration.enchantability": "Enchantability:", - "tooltip.jeiintegration.hunger": "Hunger:", - "tooltip.jeiintegration.saturation": "Saturation:", - "tooltip.jeiintegration.maxStackSize": "Max Stack Size:", - "tooltip.jeiintegration.nbtTagData": "NBT:", - "tooltip.jeiintegration.registryName": "ID:", + "tooltip.jeiintegration.burnTime": "Burn Time: %s ticks", + "tooltip.jeiintegration.durability": "Durability: %s/%s", + "tooltip.jeiintegration.enchantability": "Enchantability: %s", + "tooltip.jeiintegration.hunger": "Hunger: %s", + "tooltip.jeiintegration.saturation": "Saturation: %s", + "tooltip.jeiintegration.maxStackSize": "Max Stack Size: %s", + "tooltip.jeiintegration.nbtTagData": "NBT: %s", + "tooltip.jeiintegration.registryName": "ID: %s", "tooltip.jeiintegration.tags": "Tags:", - "tooltip.jeiintegration.translationKey": "Translation Key:" + "tooltip.jeiintegration.translationKey": "Translation Key: %s" } \ No newline at end of file diff --git a/src/main/resources/assets/jeiintegration/lang/fr_fr.json b/src/main/resources/assets/jeiintegration/lang/fr_fr.json index 1040156..716eb79 100644 --- a/src/main/resources/assets/jeiintegration/lang/fr_fr.json +++ b/src/main/resources/assets/jeiintegration/lang/fr_fr.json @@ -16,14 +16,13 @@ "config.jeiintegration.tooltips.translationKeyTooltipMode": "Info-bulle de la clé de traduction", "_comment": "Tooltips", - "tooltip.jeiintegration.burnTime": "Temps de combustion :", - "tooltip.jeiintegration.burnTime.suffix": "ticks", - "tooltip.jeiintegration.durability": "Durabilité :", - "tooltip.jeiintegration.hunger": "Faim :", - "tooltip.jeiintegration.saturation": "Saturation :", - "tooltip.jeiintegration.maxStackSize": "Taille maximale de la pile :", - "tooltip.jeiintegration.nbtTagData": "NBT :", - "tooltip.jeiintegration.registryName": "ID :", + "tooltip.jeiintegration.burnTime": "Temps de combustion : %s ticks", + "tooltip.jeiintegration.durability": "Durabilité : %s/%s", + "tooltip.jeiintegration.hunger": "Faim : %s", + "tooltip.jeiintegration.saturation": "Saturation : %s", + "tooltip.jeiintegration.maxStackSize": "Taille maximale de la pile : %s", + "tooltip.jeiintegration.nbtTagData": "NBT : %s", + "tooltip.jeiintegration.registryName": "ID : %s", "tooltip.jeiintegration.tags": "Tags :", - "tooltip.jeiintegration.translationKey": "Clé de traduction :" + "tooltip.jeiintegration.translationKey": "Clé de traduction : %s" } \ No newline at end of file diff --git a/src/main/resources/assets/jeiintegration/lang/ru_ru.json b/src/main/resources/assets/jeiintegration/lang/ru_ru.json index 29faabc..daf2b7e 100644 --- a/src/main/resources/assets/jeiintegration/lang/ru_ru.json +++ b/src/main/resources/assets/jeiintegration/lang/ru_ru.json @@ -16,14 +16,13 @@ "config.jeiintegration.tooltips.translationKeyTooltipMode": "Подсказка ключа перевода", "_comment": "Tooltips", - "tooltip.jeiintegration.burnTime": "Время горения:", - "tooltip.jeiintegration.burnTime.suffix": "тактов", - "tooltip.jeiintegration.durability": "Прочность:", - "tooltip.jeiintegration.hunger": "Голод:", - "tooltip.jeiintegration.saturation": "Насыщение:", - "tooltip.jeiintegration.maxStackSize": "Макс. размер стака:", - "tooltip.jeiintegration.nbtTagData": "NBT:", - "tooltip.jeiintegration.registryName": "ID:", + "tooltip.jeiintegration.burnTime": "Время горения: %s тактов", + "tooltip.jeiintegration.durability": "Прочность: %s/%s", + "tooltip.jeiintegration.hunger": "Голод: %s", + "tooltip.jeiintegration.saturation": "Насыщение: %s", + "tooltip.jeiintegration.maxStackSize": "Макс. размер стака: %s", + "tooltip.jeiintegration.nbtTagData": "NBT: %s", + "tooltip.jeiintegration.registryName": "ID: %s", "tooltip.jeiintegration.tags": "Теги:", - "tooltip.jeiintegration.translationKey": "Ключ перевода:" + "tooltip.jeiintegration.translationKey": "Ключ перевода: %s" } From defdacfd03c0b7c0e5b78114fa2a0f1150625f23 Mon Sep 17 00:00:00 2001 From: mibac138 <5672750+mibac138@users.noreply.github.com> Date: Sat, 10 Aug 2024 21:59:40 +0200 Subject: [PATCH 7/7] Optimize tags tooltip --- .../jeiintegration/modules/TagsModule.java | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/snowshock35/jeiintegration/modules/TagsModule.java b/src/main/java/com/snowshock35/jeiintegration/modules/TagsModule.java index bc77a7d..c1f3161 100644 --- a/src/main/java/com/snowshock35/jeiintegration/modules/TagsModule.java +++ b/src/main/java/com/snowshock35/jeiintegration/modules/TagsModule.java @@ -3,15 +3,11 @@ import com.snowshock35.jeiintegration.config.OptionState; import net.minecraft.ChatFormatting; import net.minecraft.network.chat.Component; -import net.minecraft.resources.ResourceLocation; import net.minecraft.tags.TagKey; import net.minecraft.world.item.ItemStack; import net.minecraftforge.common.ForgeConfigSpec; import net.minecraftforge.event.entity.player.ItemTooltipEvent; -import java.util.HashSet; -import java.util.Set; - public class TagsModule implements TooltipModule { @Override public ForgeConfigSpec.ConfigValue createConfigValue(ForgeConfigSpec.Builder builder) { @@ -24,18 +20,17 @@ public ForgeConfigSpec.ConfigValue createConfigValue(ForgeConfigSpe @Override public void apply(ItemTooltipEvent e) { ItemStack itemStack = e.getItemStack(); - if (!itemStack.getTags().toList().isEmpty()) { + if (itemStack.getTags().findAny().isPresent()) { Component tagsTooltip = Component.translatable("tooltip.jeiintegration.tags") .withStyle(ChatFormatting.DARK_GRAY); - Set tags = new HashSet<>(); - - for (ResourceLocation tag : itemStack.getTags().map(TagKey::location).toList()) { - tags.add(Component.literal(" " + tag).withStyle(ChatFormatting.DARK_GRAY)); - } - e.getToolTip().add(tagsTooltip); - e.getToolTip().addAll(tags); + + itemStack.getTags() + .map(TagKey::location) + .distinct() + .map(tag -> Component.literal(" " + tag).withStyle(ChatFormatting.DARK_GRAY)) + .forEachOrdered(tooltip -> e.getToolTip().add(tooltip)); } } }