From 494fc806e245128b2fd8c65150c686ff183a3aeb Mon Sep 17 00:00:00 2001 From: James Anderson Date: Mon, 30 Mar 2026 18:56:57 +0100 Subject: [PATCH 1/4] Updated to 26.1 --- .github/workflows/build.yml | 6 +-- README.md | 9 +++-- build.gradle | 23 ++++------- gradle.properties | 15 ++++--- gradle/wrapper/gradle-wrapper.properties | 2 +- .../tooltiptoggles/TooltipToggles.java | 39 +++++++++---------- .../config/ModMenuEntrypoint.java | 4 +- .../config/TooltipTogglesConfig.java | 1 - .../tooltiptoggles/mixin/GuiMixin.java | 17 ++++++++ .../tooltiptoggles/mixin/InGameHudMixin.java | 18 --------- ...{TooltipMixin.java => ItemStackMixin.java} | 16 ++++---- .../assets/tooltiptoggles/lang/en_us.json | 2 +- src/main/resources/fabric.mod.json | 6 +-- src/main/resources/tooltiptoggles.mixins.json | 17 ++++---- 14 files changed, 86 insertions(+), 89 deletions(-) create mode 100644 src/main/java/yungando/tooltiptoggles/mixin/GuiMixin.java delete mode 100644 src/main/java/yungando/tooltiptoggles/mixin/InGameHudMixin.java rename src/main/java/yungando/tooltiptoggles/mixin/{TooltipMixin.java => ItemStackMixin.java} (56%) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 8fc3827..cf6ba55 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,8 +17,8 @@ jobs: - name: setup jdk uses: actions/setup-java@v4 with: - java-version: '21' - distribution: 'microsoft' + java-version: '25' + distribution: microsoft - name: make gradle wrapper executable run: chmod +x ./gradlew - name: build @@ -27,4 +27,4 @@ jobs: uses: actions/upload-artifact@v4 with: name: Artifacts - path: build/libs/ \ No newline at end of file + path: build/libs/ diff --git a/README.md b/README.md index 1d71270..4ca6faf 100644 --- a/README.md +++ b/README.md @@ -2,17 +2,18 @@

TooltipToggles

## Features + Provides toggles for a couple of tooltips and tooltip features. ### Toggles -- Hide Components in Advanced Tooltips* +- Hide Components in Advanced Tooltips\* - Hide Item ID in Advanced Tooltips -- Remove italics* -- Sort Attribute Modifiers alphabetically* +- Remove italics\* +- Sort Attribute Modifiers alphabetically\* \* Enabled by default. ### Dependencies -[Mod Menu](https://modrinth.com/mod/modmenu) and [Cloth Config](https://modrinth.com/mod/cloth-config) optionally required to change config. \ No newline at end of file +[Mod Menu](https://modrinth.com/mod/modmenu) and [Cloth Config](https://modrinth.com/mod/cloth-config) optionally required to change config. diff --git a/build.gradle b/build.gradle index e0cb803..8043564 100644 --- a/build.gradle +++ b/build.gradle @@ -1,9 +1,9 @@ plugins { - id 'fabric-loom' version '1.10-SNAPSHOT' + id 'net.fabricmc.fabric-loom' version "${loom_version}" id 'maven-publish' } -version = project.mod_version +version = "${project.mod_version}+${project.minecraft_version}" group = project.maven_group base { @@ -18,13 +18,12 @@ repositories { dependencies { // To change the versions see the gradle.properties file minecraft "com.mojang:minecraft:${project.minecraft_version}" - mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" - modImplementation "net.fabricmc:fabric-loader:${project.loader_version}" + implementation "net.fabricmc:fabric-loader:${project.loader_version}" - modApi("me.shedaniel.cloth:cloth-config-fabric:${project.cloth_config_version}") { + api("me.shedaniel.cloth:cloth-config-fabric:${project.cloth_config_version}") { exclude(group: "net.fabricmc.fabric-api") } - modCompileOnly "com.terraformersmc:modmenu:${project.mod_menu_version}" + compileOnly "com.terraformersmc:modmenu:${project.mod_menu_version}" } processResources { @@ -35,14 +34,8 @@ processResources { } } -configurations.all { - resolutionStrategy { - force("net.fabricmc:fabric-loader:$loader_version") - } -} - tasks.withType(JavaCompile).configureEach { - it.options.release = 21 + it.options.release = 25 } java { @@ -51,8 +44,8 @@ java { // If you remove this line, sources will not be generated. withSourcesJar() - sourceCompatibility = JavaVersion.VERSION_21 - targetCompatibility = JavaVersion.VERSION_21 + sourceCompatibility = JavaVersion.VERSION_25 + targetCompatibility = JavaVersion.VERSION_25 } jar { diff --git a/gradle.properties b/gradle.properties index 66f4466..4429db5 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,17 +2,20 @@ org.gradle.jvmargs=-Xmx1G org.gradle.parallel=true +# IntelliJ IDEA is not yet fully compatible with configuration cache, see: https://github.com/FabricMC/fabric-loom/issues/1349 +org.gradle.configuration-cache=false + # Fabric Properties # check these on https://fabricmc.net/develop -minecraft_version=1.21.5 -yarn_mappings=1.21.5+build.1 -loader_version=0.16.13 +minecraft_version=26.1 +loader_version=0.18.4 +loom_version=1.15-SNAPSHOT # Mod Properties -mod_version=1.2.3 +mod_version=1.2.4 maven_group=yungand.tooltiptoggles archives_base_name=tooltiptoggles # Dependencies -cloth_config_version=8.2.88 -mod_menu_version=5.0.2 \ No newline at end of file +cloth_config_version=26.1.154 +mod_menu_version=18.0.0-alpha.8 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index e18bc25..19a6bde 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.12.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.0-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/src/main/java/yungando/tooltiptoggles/TooltipToggles.java b/src/main/java/yungando/tooltiptoggles/TooltipToggles.java index c249205..fe086c0 100644 --- a/src/main/java/yungando/tooltiptoggles/TooltipToggles.java +++ b/src/main/java/yungando/tooltiptoggles/TooltipToggles.java @@ -4,12 +4,12 @@ import me.shedaniel.autoconfig.serializer.GsonConfigSerializer; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.loader.api.FabricLoader; -import net.minecraft.item.ItemStack; -import net.minecraft.item.tooltip.TooltipType; -import net.minecraft.registry.Registries; -import net.minecraft.text.MutableText; -import net.minecraft.text.Text; -import net.minecraft.util.Formatting; +import net.minecraft.ChatFormatting; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; import yungando.tooltiptoggles.config.TooltipTogglesConfig; import yungando.tooltiptoggles.config.TooltipTogglesConfig.TooltipTogglesAutoConfig; @@ -32,21 +32,21 @@ public void onInitializeClient() { } } - private static void removeItalics(Text tooltip) { - if (tooltip instanceof MutableText tooltipText) { + private static void removeItalics(Component tooltip) { + if (tooltip instanceof MutableComponent tooltipText) { if (tooltipText.getStyle().isItalic()) { tooltipText.setStyle(tooltipText.getStyle().withItalic(false)); } - for (Text siblingTooltip : tooltipText.getSiblings()) { + for (Component siblingTooltip : tooltipText.getSiblings()) { removeItalics(siblingTooltip); } } } - private static List sortAttributes(int modifiersIndex, List list) { - ArrayList attributeModifiers = new ArrayList<>(); - for (Text tooltip : list) { + private static List sortAttributes(int modifiersIndex, List list) { + ArrayList attributeModifiers = new ArrayList<>(); + for (Component tooltip : list) { if (tooltip.toString().contains("attribute.modifier")) { attributeModifiers.add(tooltip); if (attributeModifiers.size() > 2) { @@ -62,16 +62,16 @@ private static List sortAttributes(int modifiersIndex, List list) { return list; } - public static List tooltipEditor(ItemStack itemStack, TooltipType type, List list) { + public static List tooltipEditor(ItemStack itemStack, TooltipFlag type, List list) { if (TooltipToggles.config.removeItalics()) { - for (Text tooltip : list) { + for (Component tooltip : list) { removeItalics(tooltip); } } if (TooltipToggles.config.sortAttributes()) { int modifiersIndex = -1; - for (Text tooltip : list) { + for (Component tooltip : list) { if (tooltip.toString().contains("item.modifiers")) { modifiersIndex = list.indexOf(tooltip); break; @@ -86,9 +86,8 @@ public static List tooltipEditor(ItemStack itemStack, TooltipType type, Li if (!type.isAdvanced()) { return list; } if (TooltipToggles.config.hideComponents() && !itemStack.getComponents().isEmpty()) { - ArrayList components = new ArrayList<>(); - assert itemStack.getComponents() != null; - components.add(Text.translatable("item.components", itemStack.getComponents().size()).formatted(Formatting.DARK_GRAY)); + ArrayList components = new ArrayList<>(); + components.add(Component.translatable("item.components", itemStack.getComponents().size()).withStyle(ChatFormatting.DARK_GRAY)); int componentsIndex = list.indexOf(components.getFirst()); if (componentsIndex >= 0) { list.remove(componentsIndex); @@ -96,8 +95,8 @@ public static List tooltipEditor(ItemStack itemStack, TooltipType type, Li } if (TooltipToggles.config.hideID()) { - ArrayList id = new ArrayList<>(); - id.add(Text.literal(Registries.ITEM.getId(itemStack.getItem()).toString()).formatted(Formatting.DARK_GRAY)); + ArrayList id = new ArrayList<>(); + id.add(Component.literal(BuiltInRegistries.ITEM.getKey(itemStack.getItem()).toString()).withStyle(ChatFormatting.DARK_GRAY)); int idIndex = list.indexOf(id.getFirst()); if (idIndex >= 0) { diff --git a/src/main/java/yungando/tooltiptoggles/config/ModMenuEntrypoint.java b/src/main/java/yungando/tooltiptoggles/config/ModMenuEntrypoint.java index 327e0e7..dd845b2 100644 --- a/src/main/java/yungando/tooltiptoggles/config/ModMenuEntrypoint.java +++ b/src/main/java/yungando/tooltiptoggles/config/ModMenuEntrypoint.java @@ -2,12 +2,12 @@ import com.terraformersmc.modmenu.api.ConfigScreenFactory; import com.terraformersmc.modmenu.api.ModMenuApi; -import me.shedaniel.autoconfig.AutoConfig; +import me.shedaniel.autoconfig.AutoConfigClient; import yungando.tooltiptoggles.config.TooltipTogglesConfig.TooltipTogglesAutoConfig; public class ModMenuEntrypoint implements ModMenuApi { @Override public ConfigScreenFactory getModConfigScreenFactory() { - return parent -> AutoConfig.getConfigScreen(TooltipTogglesAutoConfig.class, parent).get(); + return parent -> AutoConfigClient.getConfigScreen(TooltipTogglesAutoConfig.class, parent).get(); } } \ No newline at end of file diff --git a/src/main/java/yungando/tooltiptoggles/config/TooltipTogglesConfig.java b/src/main/java/yungando/tooltiptoggles/config/TooltipTogglesConfig.java index b666c38..f96d836 100644 --- a/src/main/java/yungando/tooltiptoggles/config/TooltipTogglesConfig.java +++ b/src/main/java/yungando/tooltiptoggles/config/TooltipTogglesConfig.java @@ -11,7 +11,6 @@ public class TooltipTogglesConfig { public boolean removeItalics() { return true; } public boolean sortAttributes() { return true; } - /** Config class requiring AutoConfig */ @SuppressWarnings("FieldMayBeFinal") @Config(name = TooltipToggles.MODID) public static class TooltipTogglesAutoConfig extends TooltipTogglesConfig implements ConfigData { diff --git a/src/main/java/yungando/tooltiptoggles/mixin/GuiMixin.java b/src/main/java/yungando/tooltiptoggles/mixin/GuiMixin.java new file mode 100644 index 0000000..2c84ead --- /dev/null +++ b/src/main/java/yungando/tooltiptoggles/mixin/GuiMixin.java @@ -0,0 +1,17 @@ +package yungando.tooltiptoggles.mixin; + +import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; +import net.minecraft.ChatFormatting; +import net.minecraft.client.gui.Gui; +import net.minecraft.network.chat.MutableComponent; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import yungando.tooltiptoggles.TooltipToggles; + +@Mixin(Gui.class) +public class GuiMixin { + @WrapWithCondition(method = "extractSelectedItemName", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/chat/MutableComponent;withStyle(Lnet/minecraft/ChatFormatting;)Lnet/minecraft/network/chat/MutableComponent;", ordinal = 1)) + private boolean TooltipToggles$removeItalics(MutableComponent instance, ChatFormatting formatting) { + return !TooltipToggles.config.removeItalics(); + } +} diff --git a/src/main/java/yungando/tooltiptoggles/mixin/InGameHudMixin.java b/src/main/java/yungando/tooltiptoggles/mixin/InGameHudMixin.java deleted file mode 100644 index cdcfe5f..0000000 --- a/src/main/java/yungando/tooltiptoggles/mixin/InGameHudMixin.java +++ /dev/null @@ -1,18 +0,0 @@ -package yungando.tooltiptoggles.mixin; - -import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; -import net.minecraft.text.MutableText; -import net.minecraft.util.Formatting; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; - -import net.minecraft.client.gui.hud.InGameHud; -import yungando.tooltiptoggles.TooltipToggles; - -@Mixin(InGameHud.class) -public class InGameHudMixin { - @WrapWithCondition(method = "renderHeldItemTooltip", at = @At(value = "INVOKE", target = "Lnet/minecraft/text/MutableText;formatted(Lnet/minecraft/util/Formatting;)Lnet/minecraft/text/MutableText;", ordinal = 1)) - private boolean TooltipToggles$removeItalics(MutableText instance, Formatting formatting) { - return !TooltipToggles.config.removeItalics(); - } -} diff --git a/src/main/java/yungando/tooltiptoggles/mixin/TooltipMixin.java b/src/main/java/yungando/tooltiptoggles/mixin/ItemStackMixin.java similarity index 56% rename from src/main/java/yungando/tooltiptoggles/mixin/TooltipMixin.java rename to src/main/java/yungando/tooltiptoggles/mixin/ItemStackMixin.java index 83dc269..527c40f 100644 --- a/src/main/java/yungando/tooltiptoggles/mixin/TooltipMixin.java +++ b/src/main/java/yungando/tooltiptoggles/mixin/ItemStackMixin.java @@ -1,10 +1,10 @@ package yungando.tooltiptoggles.mixin; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.tooltip.TooltipType; -import net.minecraft.text.*; +import net.minecraft.network.chat.Component; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.TooltipFlag; import yungando.tooltiptoggles.TooltipToggles; import java.util.List; @@ -15,9 +15,9 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(ItemStack.class) -public class TooltipMixin { - @Inject(method = "getTooltip", at = @At("RETURN"), cancellable = true) - protected void TooltipToggles$editTooltip(Item.TooltipContext context, PlayerEntity player, TooltipType type, CallbackInfoReturnable> cir) { +public class ItemStackMixin { + @Inject(method = "getTooltipLines", at = @At("RETURN"), cancellable = true) + protected void TooltipToggles$editTooltip(Item.TooltipContext context, Player player, TooltipFlag type, CallbackInfoReturnable> cir) { cir.setReturnValue(TooltipToggles.tooltipEditor((ItemStack) (Object) this, type, cir.getReturnValue())); } } diff --git a/src/main/resources/assets/tooltiptoggles/lang/en_us.json b/src/main/resources/assets/tooltiptoggles/lang/en_us.json index 5b06eb3..5a8d35f 100644 --- a/src/main/resources/assets/tooltiptoggles/lang/en_us.json +++ b/src/main/resources/assets/tooltiptoggles/lang/en_us.json @@ -8,4 +8,4 @@ "text.autoconfig.tooltiptoggles.option.removeItalics.@Tooltip": "Unitalicises all tooltips.", "text.autoconfig.tooltiptoggles.option.sortAttributes": "Sort Attributes Alphabetically", "text.autoconfig.tooltiptoggles.option.sortAttributes.@Tooltip": "Sorts the armor attribute (e.g. Armor Toughness, Knockback Resistance) tooltips alphabetically." -} \ No newline at end of file +} diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index f8f70c2..02d7013 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -27,9 +27,9 @@ "tooltiptoggles.mixins.json" ], "depends": { - "minecraft": ">=1.21", - "fabricloader": ">=0.16.13", - "java": ">=21" + "fabricloader": ">=0.18.4", + "minecraft": ">=26.1", + "java": ">=25" }, "suggests": { "modmenu": "*", diff --git a/src/main/resources/tooltiptoggles.mixins.json b/src/main/resources/tooltiptoggles.mixins.json index eb54a7b..051c987 100644 --- a/src/main/resources/tooltiptoggles.mixins.json +++ b/src/main/resources/tooltiptoggles.mixins.json @@ -1,12 +1,15 @@ { "required": true, "package": "yungando.tooltiptoggles.mixin", - "compatibilityLevel": "JAVA_21", - "mixins": [ - "InGameHudMixin", - "TooltipMixin" - ], + "compatibilityLevel": "JAVA_25", "injectors": { "defaultRequire": 1 - } -} \ No newline at end of file + }, + "overwrites": { + "requireAnnotations": true + }, + "client": [ + "GuiMixin", + "ItemStackMixin" + ] +} From aa676e030b3744f17d61b4d9a24d979f795b2b1c Mon Sep 17 00:00:00 2001 From: James Anderson Date: Sat, 23 May 2026 21:53:58 +0100 Subject: [PATCH 2/4] - Use targetted Mixins instead of recreating tooltip and removing - Add Creative tooltip toggles --- .../tooltiptoggles/TooltipToggles.java | 85 ------------------- .../config/TooltipTogglesConfig.java | 10 +++ .../mixin/CreativeInventoryMixin.java | 22 +++++ .../tooltiptoggles/mixin/GuiMixin.java | 12 +-- .../tooltiptoggles/mixin/ItemStackMixin.java | 67 ++++++++++++--- .../assets/tooltiptoggles/lang/en_us.json | 4 + src/main/resources/tooltiptoggles.mixins.json | 1 + 7 files changed, 100 insertions(+), 101 deletions(-) create mode 100644 src/main/java/yungando/tooltiptoggles/mixin/CreativeInventoryMixin.java diff --git a/src/main/java/yungando/tooltiptoggles/TooltipToggles.java b/src/main/java/yungando/tooltiptoggles/TooltipToggles.java index fe086c0..b9358a9 100644 --- a/src/main/java/yungando/tooltiptoggles/TooltipToggles.java +++ b/src/main/java/yungando/tooltiptoggles/TooltipToggles.java @@ -4,19 +4,9 @@ import me.shedaniel.autoconfig.serializer.GsonConfigSerializer; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.loader.api.FabricLoader; -import net.minecraft.ChatFormatting; -import net.minecraft.core.registries.BuiltInRegistries; -import net.minecraft.network.chat.Component; -import net.minecraft.network.chat.MutableComponent; -import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.TooltipFlag; import yungando.tooltiptoggles.config.TooltipTogglesConfig; import yungando.tooltiptoggles.config.TooltipTogglesConfig.TooltipTogglesAutoConfig; -import java.util.ArrayList; -import java.util.Comparator; -import java.util.List; - public class TooltipToggles implements ClientModInitializer { public static final String MODID = "tooltiptoggles"; public static final boolean USE_AUTO_CONFIG = FabricLoader.getInstance().isModLoaded("cloth-config2"); @@ -31,79 +21,4 @@ public void onInitializeClient() { config = new TooltipTogglesConfig(); } } - - private static void removeItalics(Component tooltip) { - if (tooltip instanceof MutableComponent tooltipText) { - if (tooltipText.getStyle().isItalic()) { - tooltipText.setStyle(tooltipText.getStyle().withItalic(false)); - } - - for (Component siblingTooltip : tooltipText.getSiblings()) { - removeItalics(siblingTooltip); - } - } - } - - private static List sortAttributes(int modifiersIndex, List list) { - ArrayList attributeModifiers = new ArrayList<>(); - for (Component tooltip : list) { - if (tooltip.toString().contains("attribute.modifier")) { - attributeModifiers.add(tooltip); - if (attributeModifiers.size() > 2) { - return list; - } - } - } - - list.removeAll(attributeModifiers); - attributeModifiers.sort(Comparator.comparing(tooltip -> tooltip.toString().split("attribute.name.")[1].split("'")[0])); - list.addAll(modifiersIndex + 1, attributeModifiers); - - return list; - } - - public static List tooltipEditor(ItemStack itemStack, TooltipFlag type, List list) { - if (TooltipToggles.config.removeItalics()) { - for (Component tooltip : list) { - removeItalics(tooltip); - } - } - - if (TooltipToggles.config.sortAttributes()) { - int modifiersIndex = -1; - for (Component tooltip : list) { - if (tooltip.toString().contains("item.modifiers")) { - modifiersIndex = list.indexOf(tooltip); - break; - } - } - - if (modifiersIndex >= 0) { - list = sortAttributes(modifiersIndex, list); - } - } - - if (!type.isAdvanced()) { return list; } - - if (TooltipToggles.config.hideComponents() && !itemStack.getComponents().isEmpty()) { - ArrayList components = new ArrayList<>(); - components.add(Component.translatable("item.components", itemStack.getComponents().size()).withStyle(ChatFormatting.DARK_GRAY)); - int componentsIndex = list.indexOf(components.getFirst()); - if (componentsIndex >= 0) { - list.remove(componentsIndex); - } - } - - if (TooltipToggles.config.hideID()) { - ArrayList id = new ArrayList<>(); - id.add(Component.literal(BuiltInRegistries.ITEM.getKey(itemStack.getItem()).toString()).withStyle(ChatFormatting.DARK_GRAY)); - int idIndex = list.indexOf(id.getFirst()); - - if (idIndex >= 0) { - list.remove(idIndex); - } - } - - return list; - } } \ No newline at end of file diff --git a/src/main/java/yungando/tooltiptoggles/config/TooltipTogglesConfig.java b/src/main/java/yungando/tooltiptoggles/config/TooltipTogglesConfig.java index f96d836..1faefc8 100644 --- a/src/main/java/yungando/tooltiptoggles/config/TooltipTogglesConfig.java +++ b/src/main/java/yungando/tooltiptoggles/config/TooltipTogglesConfig.java @@ -8,6 +8,8 @@ public class TooltipTogglesConfig { public boolean hideComponents() { return true; } public boolean hideID() { return false; } + public boolean hideCreativeCategories() { return false; } + public boolean hideCreativeTags() { return false; } public boolean removeItalics() { return true; } public boolean sortAttributes() { return true; } @@ -19,6 +21,10 @@ public static class TooltipTogglesAutoConfig extends TooltipTogglesConfig implem @Tooltip private boolean hideID = super.hideID(); @Tooltip + private boolean hideCreativeCategories = super.hideCreativeCategories(); + @Tooltip + private boolean hideCreativeTags = super.hideCreativeTags(); + @Tooltip private boolean removeItalics = super.removeItalics(); @Tooltip private boolean sortAttributes = super.sortAttributes(); @@ -28,6 +34,10 @@ public static class TooltipTogglesAutoConfig extends TooltipTogglesConfig implem @Override public boolean hideID() { return hideID; } @Override + public boolean hideCreativeCategories() { return hideCreativeCategories; } + @Override + public boolean hideCreativeTags() { return hideCreativeTags; } + @Override public boolean removeItalics() { return removeItalics; } @Override public boolean sortAttributes() { return sortAttributes; } diff --git a/src/main/java/yungando/tooltiptoggles/mixin/CreativeInventoryMixin.java b/src/main/java/yungando/tooltiptoggles/mixin/CreativeInventoryMixin.java new file mode 100644 index 0000000..adea278 --- /dev/null +++ b/src/main/java/yungando/tooltiptoggles/mixin/CreativeInventoryMixin.java @@ -0,0 +1,22 @@ +package yungando.tooltiptoggles.mixin; + +import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; +import net.minecraft.client.gui.screens.inventory.CreativeModeInventoryScreen; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import yungando.tooltiptoggles.TooltipToggles; + +import java.util.List; + +@Mixin(CreativeModeInventoryScreen.class) +public class CreativeInventoryMixin { + @WrapWithCondition(method = "getTooltipFromContainerItem", at = @At(value = "INVOKE", target = "Ljava/util/List;add(ILjava/lang/Object;)V")) + private boolean TooltipToggles$hideCreativeCategories(List instance, int i, Object e) { + return !TooltipToggles.config.hideCreativeCategories(); + } + + @WrapWithCondition(method = "lambda$getTooltipFromContainerItem$0", at = @At(value = "INVOKE", target = "Ljava/util/List;add(ILjava/lang/Object;)V")) + private static boolean TooltipToggles$hideCreativeTags(List instance, int i, Object e) { + return !TooltipToggles.config.hideCreativeTags(); + } +} diff --git a/src/main/java/yungando/tooltiptoggles/mixin/GuiMixin.java b/src/main/java/yungando/tooltiptoggles/mixin/GuiMixin.java index 2c84ead..b6a3bde 100644 --- a/src/main/java/yungando/tooltiptoggles/mixin/GuiMixin.java +++ b/src/main/java/yungando/tooltiptoggles/mixin/GuiMixin.java @@ -1,17 +1,17 @@ package yungando.tooltiptoggles.mixin; -import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; -import net.minecraft.ChatFormatting; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; import net.minecraft.client.gui.Gui; -import net.minecraft.network.chat.MutableComponent; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import yungando.tooltiptoggles.TooltipToggles; @Mixin(Gui.class) public class GuiMixin { - @WrapWithCondition(method = "extractSelectedItemName", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/chat/MutableComponent;withStyle(Lnet/minecraft/ChatFormatting;)Lnet/minecraft/network/chat/MutableComponent;", ordinal = 1)) - private boolean TooltipToggles$removeItalics(MutableComponent instance, ChatFormatting formatting) { - return !TooltipToggles.config.removeItalics(); + @ModifyExpressionValue(method = "extractSelectedItemName", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/ItemStack;has(Lnet/minecraft/core/component/DataComponentType;)Z")) + private boolean TooltipToggles$removeItalics(boolean original) { + if (TooltipToggles.config.removeItalics()) return false; + + return original; } } diff --git a/src/main/java/yungando/tooltiptoggles/mixin/ItemStackMixin.java b/src/main/java/yungando/tooltiptoggles/mixin/ItemStackMixin.java index 527c40f..5fed6df 100644 --- a/src/main/java/yungando/tooltiptoggles/mixin/ItemStackMixin.java +++ b/src/main/java/yungando/tooltiptoggles/mixin/ItemStackMixin.java @@ -1,23 +1,70 @@ package yungando.tooltiptoggles.mixin; -import net.minecraft.network.chat.Component; -import net.minecraft.world.entity.player.Player; -import net.minecraft.world.item.Item; +import com.llamalad7.mixinextras.injector.ModifyExpressionValue; +import com.llamalad7.mixinextras.injector.v2.WrapWithCondition; +import net.minecraft.core.registries.BuiltInRegistries; +import net.minecraft.resources.Identifier; import net.minecraft.world.item.ItemStack; -import net.minecraft.world.item.TooltipFlag; +import net.minecraft.world.item.component.ItemAttributeModifiers; +import org.spongepowered.asm.mixin.Debug; +import org.spongepowered.asm.mixin.injection.ModifyVariable; +import org.spongepowered.asm.mixin.injection.Slice; import yungando.tooltiptoggles.TooltipToggles; +import java.util.ArrayList; +import java.util.Comparator; import java.util.List; +import java.util.function.Consumer; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +@Debug(export = true) @Mixin(ItemStack.class) -public class ItemStackMixin { - @Inject(method = "getTooltipLines", at = @At("RETURN"), cancellable = true) - protected void TooltipToggles$editTooltip(Item.TooltipContext context, Player player, TooltipFlag type, CallbackInfoReturnable> cir) { - cir.setReturnValue(TooltipToggles.tooltipEditor((ItemStack) (Object) this, type, cir.getReturnValue())); +public abstract class ItemStackMixin { + @WrapWithCondition( + method = "addDetailsToTooltip", + slice = @Slice( + from = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/TooltipFlag;isAdvanced()Z"), + to = @At(value = "INVOKE", target = "Lnet/minecraft/core/component/PatchedDataComponentMap;size()I") + ), + at = @At(value = "INVOKE", target = "Ljava/util/function/Consumer;accept(Ljava/lang/Object;)V", ordinal = 1), + require = 1 + ) + private boolean TooltipToggles$hideId(Consumer instance, Object t) { + return !TooltipToggles.config.hideID(); + } + + @WrapWithCondition( + method = "addDetailsToTooltip", + slice = @Slice( + from = @At(value = "INVOKE", target = "Lnet/minecraft/core/component/PatchedDataComponentMap;size()I") + ), + at = @At(value = "INVOKE", target = "Ljava/util/function/Consumer;accept(Ljava/lang/Object;)V", ordinal = 0), + require = 1 + ) + private boolean TooltipToggles$hideComponents(Consumer instance, Object t) { + return !TooltipToggles.config.hideComponents(); + } + + @ModifyExpressionValue(method = "getStyledHoverName", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/item/ItemStack;has(Lnet/minecraft/core/component/DataComponentType;)Z")) + private boolean TooltipToggles$removeItalics(boolean original) { + if (TooltipToggles.config.removeItalics()) return false; + + return original; + } + + @ModifyVariable(method = "forEachModifier(Lnet/minecraft/world/entity/EquipmentSlotGroup;Lorg/apache/commons/lang3/function/TriConsumer;)V", at = @At(value = "STORE"), name = "modifiers") + private ItemAttributeModifiers TooltipToggles$sortModifiers(ItemAttributeModifiers modifiers) { + if (!TooltipToggles.config.sortAttributes()) return modifiers; + + List sorted = new ArrayList<>(modifiers.modifiers()); + + sorted.sort(Comparator.comparing(entry -> { + Identifier id = BuiltInRegistries.ATTRIBUTE.getKey(entry.attribute().value()); + return id == null ? "" : id.toString(); + })); + + return new ItemAttributeModifiers(sorted); } } diff --git a/src/main/resources/assets/tooltiptoggles/lang/en_us.json b/src/main/resources/assets/tooltiptoggles/lang/en_us.json index 5a8d35f..25de0c2 100644 --- a/src/main/resources/assets/tooltiptoggles/lang/en_us.json +++ b/src/main/resources/assets/tooltiptoggles/lang/en_us.json @@ -4,6 +4,10 @@ "text.autoconfig.tooltiptoggles.option.hideComponents.@Tooltip": "Hides the \"# components\" tooltip when 'Advanced Tooltips' is enabled.", "text.autoconfig.tooltiptoggles.option.hideID": "Hide Minecraft item ID", "text.autoconfig.tooltiptoggles.option.hideID.@Tooltip": "Hides the item's Minecraft ID tooltip when 'Advanced Tooltips' is enabled.", + "text.autoconfig.tooltiptoggles.option.hideCreativeTags": "Hide Creative Search Tags", + "text.autoconfig.tooltiptoggles.option.hideCreativeTags.@Tooltip": "Hides tags in Creative search. E.g. #minecraft:logs", + "text.autoconfig.tooltiptoggles.option.hideCreativeCategories": "Hide Creative Categories", + "text.autoconfig.tooltiptoggles.option.hideCreativeCategories.@Tooltip": "Hides item/block tags when in Creative. E.g. Building Blocks", "text.autoconfig.tooltiptoggles.option.removeItalics": "Remove Italics", "text.autoconfig.tooltiptoggles.option.removeItalics.@Tooltip": "Unitalicises all tooltips.", "text.autoconfig.tooltiptoggles.option.sortAttributes": "Sort Attributes Alphabetically", diff --git a/src/main/resources/tooltiptoggles.mixins.json b/src/main/resources/tooltiptoggles.mixins.json index 051c987..c996678 100644 --- a/src/main/resources/tooltiptoggles.mixins.json +++ b/src/main/resources/tooltiptoggles.mixins.json @@ -9,6 +9,7 @@ "requireAnnotations": true }, "client": [ + "CreativeInventoryMixin", "GuiMixin", "ItemStackMixin" ] From 7f41a121e1e5e8ba2841355e23c93851ee66af4d Mon Sep 17 00:00:00 2001 From: James Anderson Date: Sat, 23 May 2026 22:00:05 +0100 Subject: [PATCH 3/4] Remove mixin debug --- src/main/java/yungando/tooltiptoggles/mixin/ItemStackMixin.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/yungando/tooltiptoggles/mixin/ItemStackMixin.java b/src/main/java/yungando/tooltiptoggles/mixin/ItemStackMixin.java index 5fed6df..7f286ed 100644 --- a/src/main/java/yungando/tooltiptoggles/mixin/ItemStackMixin.java +++ b/src/main/java/yungando/tooltiptoggles/mixin/ItemStackMixin.java @@ -6,7 +6,6 @@ import net.minecraft.resources.Identifier; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.component.ItemAttributeModifiers; -import org.spongepowered.asm.mixin.Debug; import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.Slice; import yungando.tooltiptoggles.TooltipToggles; @@ -19,7 +18,6 @@ import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; -@Debug(export = true) @Mixin(ItemStack.class) public abstract class ItemStackMixin { @WrapWithCondition( From 1719d739fbfe1e79284f7bc4fd735c1caa344418 Mon Sep 17 00:00:00 2001 From: James Anderson Date: Sat, 23 May 2026 22:00:54 +0100 Subject: [PATCH 4/4] Bump mod version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 4429db5..f132d22 100644 --- a/gradle.properties +++ b/gradle.properties @@ -12,7 +12,7 @@ loader_version=0.18.4 loom_version=1.15-SNAPSHOT # Mod Properties -mod_version=1.2.4 +mod_version=1.3.0 maven_group=yungand.tooltiptoggles archives_base_name=tooltiptoggles