From 3951db5b44786aea9149f0cb09d27d1fcdb3d0ad Mon Sep 17 00:00:00 2001 From: zenfyr Date: Tue, 7 Jul 2026 18:44:00 +0700 Subject: [PATCH] magnet: hide vanilla bundle progress tooltip --- .../modules/items/magnet/Magnet.java | 2 + .../modules/items/magnet/MagnetItem.java | 3 +- .../modules/items/magnet/MagnetTooltip.java | 6 +++ .../magnet/client/ClientMagnetTooltip.java | 26 +++++++++ .../items/magnet/client/MagnetClient.java | 11 ++++ .../mixin/ClientBundleTooltipMixin.java | 54 +++++++++++++++++++ 6 files changed, 100 insertions(+), 2 deletions(-) create mode 100644 src/main/java/dev/zenfyr/andromeda/modules/items/magnet/MagnetTooltip.java create mode 100644 src/main/java/dev/zenfyr/andromeda/modules/items/magnet/client/ClientMagnetTooltip.java create mode 100644 src/main/java/dev/zenfyr/andromeda/modules/items/magnet/mixin/ClientBundleTooltipMixin.java diff --git a/src/main/java/dev/zenfyr/andromeda/modules/items/magnet/Magnet.java b/src/main/java/dev/zenfyr/andromeda/modules/items/magnet/Magnet.java index 1b524a47..3c767cfd 100644 --- a/src/main/java/dev/zenfyr/andromeda/modules/items/magnet/Magnet.java +++ b/src/main/java/dev/zenfyr/andromeda/modules/items/magnet/Magnet.java @@ -7,6 +7,7 @@ import dev.zenfyr.andromeda.bootstrap.config.ConfigDefinition; import dev.zenfyr.andromeda.bootstrap.config.RegisterConfigEvent; import dev.zenfyr.andromeda.bootstrap.event.InitEvents; import dev.zenfyr.andromeda.bootstrap.event.PostBootstrapEvent; +import dev.zenfyr.andromeda.modules.items.magnet.client.MagnetClient; @ModuleInfo(name = "magnet", category = "items") public final class Magnet extends Module implements PostBootstrapEvent { @@ -20,6 +21,7 @@ public final class Magnet extends Module implements PostBootstrapEvent { @Override public void postBootstrap() { InitEvents.MAIN.listen(() -> MagnetItem::init); + InitEvents.CLIENT.listen(() -> MagnetClient::init); } public static class Config extends BaseConfig { diff --git a/src/main/java/dev/zenfyr/andromeda/modules/items/magnet/MagnetItem.java b/src/main/java/dev/zenfyr/andromeda/modules/items/magnet/MagnetItem.java index 47615e6f..8a0890fb 100644 --- a/src/main/java/dev/zenfyr/andromeda/modules/items/magnet/MagnetItem.java +++ b/src/main/java/dev/zenfyr/andromeda/modules/items/magnet/MagnetItem.java @@ -38,7 +38,6 @@ import net.minecraft.world.entity.item.ItemEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.ClickAction; import net.minecraft.world.inventory.Slot; -import net.minecraft.world.inventory.tooltip.BundleTooltip; import net.minecraft.world.inventory.tooltip.TooltipComponent; import net.minecraft.world.item.*; import net.minecraft.world.item.component.BundleContents; @@ -137,7 +136,7 @@ public class MagnetItem extends Item { @Override public Optional getTooltipImage(ItemStack stack) { - return Optional.of(new BundleTooltip(new BundleContents( + return Optional.of(new MagnetTooltip(new BundleContents( magnetable(stack).stream().map(ItemStackTemplate::new).toList()))); } diff --git a/src/main/java/dev/zenfyr/andromeda/modules/items/magnet/MagnetTooltip.java b/src/main/java/dev/zenfyr/andromeda/modules/items/magnet/MagnetTooltip.java new file mode 100644 index 00000000..9596b836 --- /dev/null +++ b/src/main/java/dev/zenfyr/andromeda/modules/items/magnet/MagnetTooltip.java @@ -0,0 +1,6 @@ +package dev.zenfyr.andromeda.modules.items.magnet; + +import net.minecraft.world.inventory.tooltip.TooltipComponent; +import net.minecraft.world.item.component.BundleContents; + +public record MagnetTooltip(BundleContents contents) implements TooltipComponent {} diff --git a/src/main/java/dev/zenfyr/andromeda/modules/items/magnet/client/ClientMagnetTooltip.java b/src/main/java/dev/zenfyr/andromeda/modules/items/magnet/client/ClientMagnetTooltip.java new file mode 100644 index 00000000..ecef7d05 --- /dev/null +++ b/src/main/java/dev/zenfyr/andromeda/modules/items/magnet/client/ClientMagnetTooltip.java @@ -0,0 +1,26 @@ +package dev.zenfyr.andromeda.modules.items.magnet.client; + +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphicsExtractor; +import net.minecraft.client.gui.screens.inventory.tooltip.ClientBundleTooltip; +import net.minecraft.world.item.component.BundleContents; + +public class ClientMagnetTooltip extends ClientBundleTooltip { + + public static final ScopedValue IS_MAGNET = ScopedValue.newInstance(); + + public ClientMagnetTooltip(BundleContents contents) { + super(contents); + } + + @Override + public int getHeight(Font font) { + return super.getHeight(font) - 13 - 8; + } + + @Override + public void extractImage(Font font, int x, int y, int w, int h, GuiGraphicsExtractor graphics) { + ScopedValue.where(IS_MAGNET, Boolean.TRUE) + .run(() -> super.extractImage(font, x, y, w, h, graphics)); + } +} diff --git a/src/main/java/dev/zenfyr/andromeda/modules/items/magnet/client/MagnetClient.java b/src/main/java/dev/zenfyr/andromeda/modules/items/magnet/client/MagnetClient.java index 8a840aaf..1824c449 100644 --- a/src/main/java/dev/zenfyr/andromeda/modules/items/magnet/client/MagnetClient.java +++ b/src/main/java/dev/zenfyr/andromeda/modules/items/magnet/client/MagnetClient.java @@ -3,17 +3,28 @@ package dev.zenfyr.andromeda.modules.items.magnet.client; import dev.zenfyr.andromeda.bootstrap.ModuleManager; import dev.zenfyr.andromeda.common.client.AndromedaClient; import dev.zenfyr.andromeda.modules.gui.gui_particles.GuiParticles; +import dev.zenfyr.andromeda.modules.items.magnet.MagnetTooltip; import dev.zenfyr.pulsar.api.client.particles.ScreenParticles; import dev.zenfyr.pulsar.api.client.particles.VanillaParticles; +import net.fabricmc.fabric.api.client.rendering.v1.ClientTooltipComponentCallback; import net.minecraft.client.Minecraft; import net.minecraft.core.particles.ItemParticleOption; import net.minecraft.core.particles.ParticleTypes; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStackTemplate; +import net.minecraft.world.item.component.BundleContents; public class MagnetClient { + public static void init() { + ClientTooltipComponentCallback.EVENT.register(component -> { + if (component instanceof MagnetTooltip(BundleContents contents)) + return new ClientMagnetTooltip(contents); + return null; + }); + } + public static boolean hideParticles() { return ModuleManager.get() .get(GuiParticles.class) diff --git a/src/main/java/dev/zenfyr/andromeda/modules/items/magnet/mixin/ClientBundleTooltipMixin.java b/src/main/java/dev/zenfyr/andromeda/modules/items/magnet/mixin/ClientBundleTooltipMixin.java new file mode 100644 index 00000000..4b3ef921 --- /dev/null +++ b/src/main/java/dev/zenfyr/andromeda/modules/items/magnet/mixin/ClientBundleTooltipMixin.java @@ -0,0 +1,54 @@ +package dev.zenfyr.andromeda.modules.items.magnet.mixin; + +import com.llamalad7.mixinextras.injector.wrapoperation.Operation; +import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation; +import dev.zenfyr.andromeda.bootstrap.util.mixin.MixinEnvironment; +import dev.zenfyr.andromeda.modules.items.magnet.client.ClientMagnetTooltip; +import dev.zenfyr.pulsar.api.platform.CEnvType; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.GuiGraphicsExtractor; +import net.minecraft.client.gui.screens.inventory.tooltip.ClientBundleTooltip; +import org.apache.commons.lang3.math.Fraction; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; + +@MixinEnvironment(CEnvType.CLIENT) +@Mixin(ClientBundleTooltip.class) +abstract class ClientBundleTooltipMixin { + + @WrapOperation( + at = + @At( + value = "INVOKE", + target = + "Lnet/minecraft/client/gui/screens/inventory/tooltip/ClientBundleTooltip;extractProgressbar(IILnet/minecraft/client/gui/Font;Lnet/minecraft/client/gui/GuiGraphicsExtractor;Lorg/apache/commons/lang3/math/Fraction;)V"), + method = "extractBundleWithItemsTooltip") + private void andromeda$skipProgress( + int x, + int y, + Font font, + GuiGraphicsExtractor graphics, + Fraction weight, + Operation original) { + if (ClientMagnetTooltip.IS_MAGNET.orElse(Boolean.FALSE)) return; + original.call(x, y, font, graphics, weight); + } + + @WrapOperation( + at = + @At( + value = "INVOKE", + target = + "Lnet/minecraft/client/gui/screens/inventory/tooltip/ClientBundleTooltip;extractProgressbar(IILnet/minecraft/client/gui/Font;Lnet/minecraft/client/gui/GuiGraphicsExtractor;Lorg/apache/commons/lang3/math/Fraction;)V"), + method = "extractEmptyBundleTooltip") + private static void andromeda$skipEmptyProgress( + int x, + int y, + Font font, + GuiGraphicsExtractor graphics, + Fraction weight, + Operation original) { + if (ClientMagnetTooltip.IS_MAGNET.orElse(Boolean.FALSE)) return; + original.call(x, y, font, graphics, weight); + } +} -- 2.51.2