Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
85 changes: 0 additions & 85 deletions src/main/java/yungando/tooltiptoggles/TooltipToggles.java
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand All @@ -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<Component> sortAttributes(int modifiersIndex, List<Component> list) {
ArrayList<Component> 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<Component> tooltipEditor(ItemStack itemStack, TooltipFlag type, List<Component> 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<Component> 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<Component> 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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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; }

Expand All @@ -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();
Expand All @@ -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; }
Expand Down
Original file line number Diff line number Diff line change
@@ -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();
}
}
12 changes: 6 additions & 6 deletions src/main/java/yungando/tooltiptoggles/mixin/GuiMixin.java
Original file line number Diff line number Diff line change
@@ -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;
}
}
65 changes: 55 additions & 10 deletions src/main/java/yungando/tooltiptoggles/mixin/ItemStackMixin.java
Original file line number Diff line number Diff line change
@@ -1,23 +1,68 @@
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.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;

@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<List<Component>> 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<ItemAttributeModifiers.Entry> 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);
}
}
4 changes: 4 additions & 0 deletions src/main/resources/assets/tooltiptoggles/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
1 change: 1 addition & 0 deletions src/main/resources/tooltiptoggles.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"requireAnnotations": true
},
"client": [
"CreativeInventoryMixin",
"GuiMixin",
"ItemStackMixin"
]
Expand Down
Loading