aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/mixin/ScreenMixin.java71
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/util/Easing.java2
-rw-r--r--src/main/java/com/anthonyhilyard/iceberg/util/StringRecomposer.java32
3 files changed, 104 insertions, 1 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;
+ }
+}
diff --git a/src/main/java/com/anthonyhilyard/iceberg/util/Easing.java b/src/main/java/com/anthonyhilyard/iceberg/util/Easing.java
index bc4e39b..2274ce2 100644
--- a/src/main/java/com/anthonyhilyard/iceberg/util/Easing.java
+++ b/src/main/java/com/anthonyhilyard/iceberg/util/Easing.java
@@ -3,7 +3,7 @@ package com.anthonyhilyard.iceberg.util;
import net.minecraft.network.chat.TextColor;
/**
- * Helper functions for smooth easing/interpolation. If you need linear, use net.minecraft.util.math.MathHelper.lerp instead.
+ * Helper functions for smooth easing/interpolation.
*/
public final class Easing
{
diff --git a/src/main/java/com/anthonyhilyard/iceberg/util/StringRecomposer.java b/src/main/java/com/anthonyhilyard/iceberg/util/StringRecomposer.java
new file mode 100644
index 0000000..d88ae41
--- /dev/null
+++ b/src/main/java/com/anthonyhilyard/iceberg/util/StringRecomposer.java
@@ -0,0 +1,32 @@
+package com.anthonyhilyard.iceberg.util;
+
+import net.minecraft.network.chat.FormattedText;
+import net.minecraft.network.chat.MutableComponent;
+import net.minecraft.network.chat.Style;
+import net.minecraft.network.chat.TextComponent;
+import net.minecraft.util.FormattedCharSink;
+
+public class StringRecomposer implements FormattedCharSink
+{
+ private StringBuilder builder = new StringBuilder();
+ private MutableComponent text = new TextComponent("").withStyle(Style.EMPTY);
+
+ @Override
+ public boolean accept(int index, Style style, int charCode)
+ {
+ builder.append(Character.toChars(charCode));
+
+ if (!style.equals(text.getStyle()))
+ {
+ text.append(new TextComponent(builder.toString()).withStyle(style));
+ builder.setLength(0);
+ }
+ return true;
+ }
+
+ public FormattedText getFormattedText()
+ {
+ text.append(new TextComponent(builder.toString()).withStyle(text.getStyle()));
+ return text;
+ }
+}