From b36c725d26da1905cf44b372ddc95ee6d10b9345 Mon Sep 17 00:00:00 2001 From: Timo Ley Date: Fri, 6 Jan 2023 13:03:27 +0100 Subject: [PATCH] feat: view item aspects without scanning --- src/main/java/dev/tilera/auracore/Config.java | 4 + .../mixins/MixinClientTickEventsFML.java | 120 ++++++++++++++++++ src/main/resources/auracore.mixins.json | 3 +- 3 files changed, 126 insertions(+), 1 deletion(-) create mode 100644 src/main/java/dev/tilera/auracore/mixins/MixinClientTickEventsFML.java diff --git a/src/main/java/dev/tilera/auracore/Config.java b/src/main/java/dev/tilera/auracore/Config.java index aeff259..fab2dbb 100644 --- a/src/main/java/dev/tilera/auracore/Config.java +++ b/src/main/java/dev/tilera/auracore/Config.java @@ -13,6 +13,10 @@ public class Config { public static boolean replaceSilverwood = true; public static boolean knowAllAspects = true; + public static boolean noScanning() { + return knowAllAspects; + } + public static void load() { config.load(); nodeRarity = config.get("worldgen", "nodeRarity", nodeRarity).getInt(nodeRarity); diff --git a/src/main/java/dev/tilera/auracore/mixins/MixinClientTickEventsFML.java b/src/main/java/dev/tilera/auracore/mixins/MixinClientTickEventsFML.java new file mode 100644 index 0000000..3b66fa0 --- /dev/null +++ b/src/main/java/dev/tilera/auracore/mixins/MixinClientTickEventsFML.java @@ -0,0 +1,120 @@ +package dev.tilera.auracore.mixins; + +import java.util.List; + +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; + +import cpw.mods.fml.client.FMLClientHandler; +import dev.tilera.auracore.Config; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.ScaledResolution; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Slot; +import thaumcraft.api.aspects.Aspect; +import thaumcraft.api.aspects.AspectList; +import thaumcraft.client.lib.ClientTickEventsFML; +import thaumcraft.client.lib.UtilsFX; +import thaumcraft.common.Thaumcraft; +import thaumcraft.common.lib.crafting.ThaumcraftCraftingManager; +import thaumcraft.common.lib.research.ScanManager; + +@Mixin(ClientTickEventsFML.class) +public abstract class MixinClientTickEventsFML { + + @Shadow(remap = false) + protected abstract boolean isMouseOverSlot(Slot par1Slot, int par2, int par3, int par4, int par5); + + /** + * @author tilera + * @reason Show aspects without scanning + */ + @Overwrite(remap = false) + public void renderAspectsInGui(GuiContainer gui, EntityPlayer player) { + Minecraft mc = FMLClientHandler.instance().getClient(); + ScaledResolution var13 = new ScaledResolution(Minecraft.getMinecraft(), mc.displayWidth, mc.displayHeight); + int var14 = var13.getScaledWidth(); + int var15 = var13.getScaledHeight(); + int var16 = Mouse.getX() * var14 / mc.displayWidth; + int var17 = var15 - Mouse.getY() * var15 / mc.displayHeight - 1; + GL11.glPushMatrix(); + GL11.glPushAttrib(1048575); + GL11.glDisable(2896); + + for(int var20 = 0; var20 < gui.inventorySlots.inventorySlots.size(); ++var20) { + int xs = UtilsFX.getGuiXSize(gui); + int ys = UtilsFX.getGuiYSize(gui); + int shift = 0; + int shift2 = 0; + int shiftx = -8; + int shifty = -8; + if (Thaumcraft.instance.aspectShift) { + shiftx -= 8; + shifty -= 8; + } + + Slot var23 = (Slot)gui.inventorySlots.inventorySlots.get(var20); + int guiLeft = shift + (gui.width - xs - shift2) / 2; + int guiTop = (gui.height - ys) / 2; + if (this.isMouseOverSlot(var23, var16, var17, guiLeft, guiTop) && var23.getStack() != null) { + int h = ScanManager.generateItemHash(var23.getStack().getItem(), var23.getStack().getItemDamage()); + List list = (List)Thaumcraft.proxy.getScannedObjects().get(player.getCommandSenderName()); + if (Config.noScanning() || (list != null && (list.contains("@" + h) || list.contains("#" + h)))) { + AspectList tags = ThaumcraftCraftingManager.getObjectTags(var23.getStack()); + tags = ThaumcraftCraftingManager.getBonusTags(var23.getStack(), tags); + if (tags != null) { + int x = var16 + 17; + int y = var17 + 7 - 33; + GL11.glDisable(2929); + int index = 0; + if (tags.size() > 0) { + Aspect[] arr$ = tags.getAspectsSortedAmount(); + int len$ = arr$.length; + + for(int i$ = 0; i$ < len$; ++i$) { + Aspect tag = arr$[i$]; + if (tag != null) { + x = var16 + 17 + index * 18; + y = var17 + 7 - 33; + UtilsFX.bindTexture("textures/aspects/_back.png"); + GL11.glPushMatrix(); + GL11.glEnable(3042); + GL11.glBlendFunc(770, 771); + GL11.glTranslated((double)(x + shiftx - 2), (double)(y + shifty - 2), 0.0D); + GL11.glScaled(1.25D, 1.25D, 0.0D); + UtilsFX.drawTexturedQuadFull(0, 0, (double)UtilsFX.getGuiZLevel(gui)); + GL11.glDisable(3042); + GL11.glPopMatrix(); + if (Thaumcraft.proxy.playerKnowledge.hasDiscoveredAspect(player.getCommandSenderName(), tag)) { + UtilsFX.drawTag(x + shiftx, y + shifty, tag, (float)tags.getAmount(tag), 0, (double)UtilsFX.getGuiZLevel(gui)); + } else { + UtilsFX.bindTexture("textures/aspects/_unknown.png"); + GL11.glPushMatrix(); + GL11.glEnable(3042); + GL11.glBlendFunc(770, 771); + GL11.glTranslated((double)(x + shiftx), (double)(y + shifty), 0.0D); + UtilsFX.drawTexturedQuadFull(0, 0, (double)UtilsFX.getGuiZLevel(gui)); + GL11.glDisable(3042); + GL11.glPopMatrix(); + } + + ++index; + } + } + } + + GL11.glEnable(2929); + } + } + } + } + + GL11.glPopAttrib(); + GL11.glPopMatrix(); + } + +} diff --git a/src/main/resources/auracore.mixins.json b/src/main/resources/auracore.mixins.json index 848fe9a..6eb4b94 100644 --- a/src/main/resources/auracore.mixins.json +++ b/src/main/resources/auracore.mixins.json @@ -24,7 +24,8 @@ "MixinBlockCustomOreRenderer", "MixinTileArcaneWorkbenchRenderer", "MixinTileCrystalRenderer", - "MixinBlockCrystalRenderer" + "MixinBlockCrystalRenderer", + "MixinClientTickEventsFML" ], "injectors": { "defaultRequire": 1