aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhannibal2 <24389977+hannibal00212@users.noreply.github.com>2022-09-28 21:59:37 +0200
committerhannibal2 <24389977+hannibal00212@users.noreply.github.com>2022-09-28 21:59:37 +0200
commit03f30aa94951bef366985c1eddb72922c255b2b3 (patch)
treeb5c31870d5da08161f079cd3ba5440fe79d5175b
parent613a8603d081589684c9f54133cae9b7a398c759 (diff)
downloadskyhanni-03f30aa94951bef366985c1eddb72922c255b2b3.tar.gz
skyhanni-03f30aa94951bef366985c1eddb72922c255b2b3.tar.bz2
skyhanni-03f30aa94951bef366985c1eddb72922c255b2b3.zip
fixed stats tuning display
-rw-r--r--src/main/java/at/hannibal2/skyhanni/data/ItemTipHelper.kt52
-rw-r--r--src/main/java/at/hannibal2/skyhanni/events/DrawScreenAfterEvent.kt5
-rw-r--r--src/main/java/at/hannibal2/skyhanni/events/RenderInventoryItemTipEvent.kt11
-rw-r--r--src/main/java/at/hannibal2/skyhanni/events/RenderItemTipEvent.kt3
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/inventory/StatsTuning.kt4
-rw-r--r--src/main/java/at/hannibal2/skyhanni/mixins/hooks/GuiContainerHook.kt35
-rw-r--r--src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/AccessorGuiContainer.java33
-rw-r--r--src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/MixinGuiContainer.java11
-rw-r--r--src/main/resources/mixins.skyhanni.json1
9 files changed, 122 insertions, 33 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/data/ItemTipHelper.kt b/src/main/java/at/hannibal2/skyhanni/data/ItemTipHelper.kt
index baa9fa75e..384b0546d 100644
--- a/src/main/java/at/hannibal2/skyhanni/data/ItemTipHelper.kt
+++ b/src/main/java/at/hannibal2/skyhanni/data/ItemTipHelper.kt
@@ -1,9 +1,15 @@
package at.hannibal2.skyhanni.data
+import at.hannibal2.skyhanni.events.DrawScreenAfterEvent
import at.hannibal2.skyhanni.events.GuiRenderItemEvent
+import at.hannibal2.skyhanni.events.RenderInventoryItemTipEvent
import at.hannibal2.skyhanni.events.RenderItemTipEvent
+import at.hannibal2.skyhanni.mixins.transformers.gui.AccessorGuiContainer
import at.hannibal2.skyhanni.utils.LorenzUtils
+import net.minecraft.client.Minecraft
+import net.minecraft.client.gui.inventory.GuiChest
import net.minecraft.client.renderer.GlStateManager
+import net.minecraftforge.fml.common.eventhandler.EventPriority
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
class ItemTipHelper {
@@ -22,12 +28,48 @@ class ItemTipHelper {
GlStateManager.disableDepth()
GlStateManager.disableBlend()
- val x = event.x + 17 + itemTipEvent.offsetX - if (itemTipEvent.alignLeft) {
- event.fontRenderer.getStringWidth(stackTip)
- } else 0
- val y = event.y + 9 + itemTipEvent.offsetY
+ val fontRenderer = event.fontRenderer
+ val x = event.x + 17 - fontRenderer.getStringWidth(stackTip)
+ val y = event.y + 9
- event.fontRenderer.drawStringWithShadow(stackTip, x.toFloat(), y.toFloat(), 16777215)
+ fontRenderer.drawStringWithShadow(stackTip, x.toFloat(), y.toFloat(), 16777215)
+ GlStateManager.enableLighting()
+ GlStateManager.enableDepth()
+ }
+
+ @SubscribeEvent(priority = EventPriority.HIGHEST)
+ fun onRenderInventoryItemOverlayPost(event: DrawScreenAfterEvent) {
+ if (!LorenzUtils.inSkyblock) return
+
+ val gui = Minecraft.getMinecraft().currentScreen
+ if (gui !is GuiChest) return
+
+ val guiLeft = (gui as AccessorGuiContainer).guiLeft
+ val guiTop = (gui as AccessorGuiContainer).guiTop
+ val fontRenderer = Minecraft.getMinecraft().fontRendererObj
+
+ GlStateManager.disableLighting()
+ GlStateManager.disableDepth()
+ GlStateManager.disableBlend()
+ for (slot in gui.inventorySlots.inventorySlots) {
+ val stack = slot.stack ?: continue
+ if (stack.stackSize != 1) continue
+
+ val itemTipEvent = RenderInventoryItemTipEvent(stack)
+ itemTipEvent.postAndCatch()
+ val stackTip = itemTipEvent.stackTip
+ if (stackTip.isEmpty()) continue
+
+ val xDisplayPosition = slot.xDisplayPosition
+ val yDisplayPosition = slot.yDisplayPosition
+
+ val x = guiLeft + xDisplayPosition + 17 + itemTipEvent.offsetX - if (itemTipEvent.alignLeft) {
+ fontRenderer.getStringWidth(stackTip)
+ } else 0
+ val y = guiTop + yDisplayPosition + 9 + itemTipEvent.offsetY
+
+ fontRenderer.drawStringWithShadow(stackTip, x.toFloat(), y.toFloat(), 16777215)
+ }
GlStateManager.enableLighting()
GlStateManager.enableDepth()
}
diff --git a/src/main/java/at/hannibal2/skyhanni/events/DrawScreenAfterEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/DrawScreenAfterEvent.kt
new file mode 100644
index 000000000..ba278df24
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/events/DrawScreenAfterEvent.kt
@@ -0,0 +1,5 @@
+package at.hannibal2.skyhanni.events
+
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo
+
+class DrawScreenAfterEvent(val mouseX: Int, val mouseY: Int, val ci: CallbackInfo) : LorenzEvent() \ No newline at end of file
diff --git a/src/main/java/at/hannibal2/skyhanni/events/RenderInventoryItemTipEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/RenderInventoryItemTipEvent.kt
new file mode 100644
index 000000000..4576576bd
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/events/RenderInventoryItemTipEvent.kt
@@ -0,0 +1,11 @@
+package at.hannibal2.skyhanni.events
+
+import net.minecraft.item.ItemStack
+
+class RenderInventoryItemTipEvent(
+ val stack: ItemStack,
+ var stackTip: String = "",
+ var offsetX: Int = 0,
+ var offsetY: Int = 0,
+ var alignLeft: Boolean = true,
+) : LorenzEvent() \ No newline at end of file
diff --git a/src/main/java/at/hannibal2/skyhanni/events/RenderItemTipEvent.kt b/src/main/java/at/hannibal2/skyhanni/events/RenderItemTipEvent.kt
index 4da9f6e37..aa4831225 100644
--- a/src/main/java/at/hannibal2/skyhanni/events/RenderItemTipEvent.kt
+++ b/src/main/java/at/hannibal2/skyhanni/events/RenderItemTipEvent.kt
@@ -5,7 +5,4 @@ import net.minecraft.item.ItemStack
class RenderItemTipEvent(
val stack: ItemStack,
var stackTip: String = "",
- var offsetX: Int = 0,
- var offsetY: Int = 0,
- var alignLeft: Boolean = true,
) : LorenzEvent() \ No newline at end of file
diff --git a/src/main/java/at/hannibal2/skyhanni/features/inventory/StatsTuning.kt b/src/main/java/at/hannibal2/skyhanni/features/inventory/StatsTuning.kt
index d25c2a0eb..bc1a5c9fd 100644
--- a/src/main/java/at/hannibal2/skyhanni/features/inventory/StatsTuning.kt
+++ b/src/main/java/at/hannibal2/skyhanni/features/inventory/StatsTuning.kt
@@ -2,7 +2,7 @@ package at.hannibal2.skyhanni.features.inventory
import at.hannibal2.skyhanni.SkyHanniMod
import at.hannibal2.skyhanni.events.GuiContainerEvent
-import at.hannibal2.skyhanni.events.RenderItemTipEvent
+import at.hannibal2.skyhanni.events.RenderInventoryItemTipEvent
import at.hannibal2.skyhanni.utils.InventoryUtils
import at.hannibal2.skyhanni.utils.ItemUtils.getLore
import at.hannibal2.skyhanni.utils.ItemUtils.name
@@ -21,7 +21,7 @@ class StatsTuning {
private val patternStatPoints = Pattern.compile("§7Stat has: §e(\\d+) point(s)?")
@SubscribeEvent
- fun onRenderItemTip(event: RenderItemTipEvent) {
+ fun onRenderItemTip(event: RenderInventoryItemTipEvent) {
val screen = Minecraft.getMinecraft().currentScreen
if (screen !is GuiChest) return
val chest = screen.inventorySlots as ContainerChest
diff --git a/src/main/java/at/hannibal2/skyhanni/mixins/hooks/GuiContainerHook.kt b/src/main/java/at/hannibal2/skyhanni/mixins/hooks/GuiContainerHook.kt
index d4287f074..f8e0e225a 100644
--- a/src/main/java/at/hannibal2/skyhanni/mixins/hooks/GuiContainerHook.kt
+++ b/src/main/java/at/hannibal2/skyhanni/mixins/hooks/GuiContainerHook.kt
@@ -1,5 +1,6 @@
package at.hannibal2.skyhanni.mixins.hooks
+import at.hannibal2.skyhanni.events.DrawScreenAfterEvent
import at.hannibal2.skyhanni.events.GuiContainerEvent
import at.hannibal2.skyhanni.events.GuiContainerEvent.CloseWindowEvent
import at.hannibal2.skyhanni.events.GuiContainerEvent.SlotClickEvent
@@ -20,13 +21,7 @@ class GuiContainerHook(guiAny: Any) {
}
fun backgroundDrawn(mouseX: Int, mouseY: Int, partialTicks: Float, ci: CallbackInfo) {
- GuiContainerEvent.BackgroundDrawnEvent(
- gui,
- gui.inventorySlots,
- mouseX,
- mouseY,
- partialTicks
- ).postAndCatch()
+ GuiContainerEvent.BackgroundDrawnEvent(gui, gui.inventorySlots, mouseX, mouseY, partialTicks).postAndCatch()
}
fun foregroundDrawn(mouseX: Int, mouseY: Int, partialTicks: Float, ci: CallbackInfo) {
@@ -34,12 +29,7 @@ class GuiContainerHook(guiAny: Any) {
}
fun onDrawSlot(slot: Slot, ci: CallbackInfo) {
- if (GuiContainerEvent.DrawSlotEvent.Pre(
- gui,
- gui.inventorySlots,
- slot
- ).postAndCatch()
- ) ci.cancel()
+ if (GuiContainerEvent.DrawSlotEvent.Pre(gui, gui.inventorySlots, slot).postAndCatch()) ci.cancel()
}
fun onDrawSlotPost(slot: Slot, ci: CallbackInfo) {
@@ -47,15 +37,14 @@ class GuiContainerHook(guiAny: Any) {
}
fun onMouseClick(slot: Slot?, slotId: Int, clickedButton: Int, clickType: Int, ci: CallbackInfo) {
- if (
- SlotClickEvent(
- gui,
- gui.inventorySlots,
- slot,
- slotId,
- clickedButton,
- clickType
- ).postAndCatch()
- ) ci.cancel()
+ if (SlotClickEvent(gui, gui.inventorySlots, slot, slotId, clickedButton, clickType).postAndCatch()) ci.cancel()
+ }
+
+ fun onDrawScreenAfter(
+ mouseX: Int,
+ mouseY: Int,
+ ci: CallbackInfo,
+ ) {
+ if (DrawScreenAfterEvent(mouseX, mouseY, ci).postAndCatch()) ci.cancel()
}
} \ No newline at end of file
diff --git a/src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/AccessorGuiContainer.java b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/AccessorGuiContainer.java
new file mode 100644
index 000000000..e1e2c7c75
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/AccessorGuiContainer.java
@@ -0,0 +1,33 @@
+package at.hannibal2.skyhanni.mixins.transformers.gui;
+
+import net.minecraft.client.gui.inventory.GuiContainer;
+import net.minecraft.inventory.Slot;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.gen.Accessor;
+import org.spongepowered.asm.mixin.gen.Invoker;
+
+@Mixin(GuiContainer.class)
+public interface AccessorGuiContainer {
+
+ @Invoker("getSlotAtPosition")
+ Slot doGetSlotAtPosition(int x, int y);
+
+ @Invoker("drawSlot")
+ void doDrawSlot(Slot slot);
+
+ @Invoker("isMouseOverSlot")
+ boolean doIsMouseOverSlot(Slot slot, int x, int y);
+
+ @Accessor("guiLeft")
+ int getGuiLeft();
+
+ @Accessor("guiTop")
+ int getGuiTop();
+
+ @Accessor("xSize")
+ int getXSize();
+
+ @Accessor("ySize")
+ int getYSize();
+
+}
diff --git a/src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/MixinGuiContainer.java b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/MixinGuiContainer.java
index 3331c393f..a7fc852e5 100644
--- a/src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/MixinGuiContainer.java
+++ b/src/main/java/at/hannibal2/skyhanni/mixins/transformers/gui/MixinGuiContainer.java
@@ -45,4 +45,15 @@ public abstract class MixinGuiContainer extends GuiScreen {
private void onMouseClick(Slot slot, int slotId, int clickedButton, int clickType, CallbackInfo ci) {
hook.onMouseClick(slot, slotId, clickedButton, clickType, ci);
}
+
+ @Inject(method = "drawScreen",
+ at = @At(
+ value = "INVOKE",
+ target = "Lnet/minecraft/client/renderer/GlStateManager;popMatrix()V",
+ shift = At.Shift.AFTER
+ )
+ )
+ public void drawScreen_after(int mouseX, int mouseY, float partialTicks, CallbackInfo ci) {
+ hook.onDrawScreenAfter(mouseX, mouseY, ci);
+ }
}
diff --git a/src/main/resources/mixins.skyhanni.json b/src/main/resources/mixins.skyhanni.json
index 1c1feff06..be81450d1 100644
--- a/src/main/resources/mixins.skyhanni.json
+++ b/src/main/resources/mixins.skyhanni.json
@@ -9,6 +9,7 @@
"AccessorGuiPlayerTabOverlay",
"MixinRenderManager",
"gui.MixinGuiContainer",
+ "gui.AccessorGuiContainer",
"gui.inventory.GuiEditSignMixin",
"tileentity.TileEntitySignMixin",
"renderer.MixinBlockRendererDispatcher",