aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/anthonyhilyard/iceberg/mixin/ScreenMixin.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/anthonyhilyard/iceberg/mixin/ScreenMixin.java')
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/mixin/ScreenMixin.java71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/main/java/com/anthonyhilyard/iceberg/mixin/ScreenMixin.java b/src/main/java/com/anthonyhilyard/iceberg/mixin/ScreenMixin.java
new file mode 100644
index 0000000..5b79256
--- /dev/null
+++ b/src/main/java/com/anthonyhilyard/iceberg/mixin/ScreenMixin.java
@@ -0,0 +1,71 @@
+package com.anthonyhilyard.iceberg.mixin;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.anthonyhilyard.iceberg.util.StringRecomposer;
+import com.google.common.collect.Lists;
+import com.mojang.blaze3d.vertex.PoseStack;
+
+import org.spongepowered.asm.mixin.Final;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.Shadow;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.At.Shift;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
+
+import net.minecraft.client.gui.Font;
+import net.minecraft.client.gui.components.events.AbstractContainerEventHandler;
+import net.minecraft.client.gui.components.events.GuiEventListener;
+import net.minecraft.client.gui.screens.Screen;
+import net.minecraft.client.gui.screens.inventory.tooltip.ClientTextTooltip;
+import net.minecraft.client.gui.screens.inventory.tooltip.ClientTooltipComponent;
+import net.minecraft.network.chat.FormattedText;
+import net.minecraft.world.item.ItemStack;
+import net.minecraftforge.client.event.RenderTooltipEvent;
+import net.minecraftforge.common.MinecraftForge;
+
+@Mixin(Screen.class)
+public class ScreenMixin extends AbstractContainerEventHandler
+{
+ @Shadow(remap = false)
+ private Font tooltipFont = null;
+
+ @Shadow(remap = false)
+ private ItemStack tooltipStack = ItemStack.EMPTY;
+
+ @Final
+ @Shadow
+ private final List<GuiEventListener> children = Lists.newArrayList();
+
+ @SuppressWarnings("removal")
+ @Inject(method = "renderTooltipInternal",
+ at = @At(value = "FIELD", target = "Lnet/minecraft/client/renderer/entity/ItemRenderer;blitOffset:F", ordinal = 2, shift = Shift.AFTER),
+ locals = LocalCapture.CAPTURE_FAILEXCEPTION)
+ private void renderTooltipInternal(PoseStack poseStack, List<ClientTooltipComponent> components, int x, int y, CallbackInfo info, RenderTooltipEvent.Pre pre, int tooltipWidth, int tooltipHeight, int postX, int postY)
+ {
+ if (!components.isEmpty())
+ {
+ List<FormattedText> standinLines = new ArrayList<>();
+ for (ClientTooltipComponent component : components)
+ {
+ if (component instanceof ClientTextTooltip)
+ {
+ StringRecomposer recomposer = new StringRecomposer();
+ ((ClientTextTooltip)component).text.accept(recomposer);
+ standinLines.add(recomposer.getFormattedText());
+ }
+ }
+
+ MinecraftForge.EVENT_BUS.post(new RenderTooltipEvent.PostText(tooltipStack, standinLines, poseStack, postX, postY, tooltipFont, tooltipWidth, tooltipHeight));
+ }
+ }
+
+ @Override
+ public List<? extends GuiEventListener> children()
+ {
+ return children;
+ }
+}