From 05e7352f57a905252614f9eb703c784106ec11c1 Mon Sep 17 00:00:00 2001 From: Bruno Marques Caroba Date: Sat, 25 Jan 2025 21:27:38 -0300 Subject: [PATCH] Created a mixin to patch all GuiContainer instances to render the inventory title before the entire inventory content. --- .../mixins/minecraft/GuiContainerMixin.java | 43 +++++++++++++++++++ .../minecraft/inv/GuiBrewingStandMixin.java | 38 ++++++++++++++++ .../mixins/minecraft/inv/GuiChestMixin.java | 40 +++++++++++++++++ .../minecraft/inv/GuiDispenserMixin.java | 37 ++++++++++++++++ .../minecraft/inv/GuiEnchantmentMixin.java | 35 +++++++++++++++ .../mixins/minecraft/inv/GuiFurnaceMixin.java | 37 ++++++++++++++++ .../mixins/minecraft/inv/GuiHopperMixin.java | 38 ++++++++++++++++ .../minecraft/inv/GuiMerchantMixin.java | 35 +++++++++++++++ .../inv/GuiScreenHorseInventoryMixin.java | 38 ++++++++++++++++ .../modules/mixin/plugin/Mixin.java | 11 ++++- 10 files changed, 351 insertions(+), 1 deletion(-) create mode 100644 src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/GuiContainerMixin.java create mode 100644 src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiBrewingStandMixin.java create mode 100644 src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiChestMixin.java create mode 100644 src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiDispenserMixin.java create mode 100644 src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiEnchantmentMixin.java create mode 100644 src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiFurnaceMixin.java create mode 100644 src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiHopperMixin.java create mode 100644 src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiMerchantMixin.java create mode 100644 src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiScreenHorseInventoryMixin.java diff --git a/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/GuiContainerMixin.java b/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/GuiContainerMixin.java new file mode 100644 index 0000000..fef9aa8 --- /dev/null +++ b/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/GuiContainerMixin.java @@ -0,0 +1,43 @@ +package io.github.cruciblemc.necrotempus.modules.mixin.mixins.minecraft; + +import net.minecraft.client.gui.inventory.GuiContainer; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(GuiContainer.class) +public class GuiContainerMixin { + + @Shadow + protected int guiLeft; + + @Shadow + protected int guiTop; + + @Inject(method = "Lnet/minecraft/client/gui/inventory/GuiContainer;drawScreen(IIF)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/inventory/GuiContainer;drawGuiContainerBackgroundLayer(FII)V", shift = At.Shift.AFTER)) + public void drawScreen(CallbackInfo callbackInfo) { + + GL11.glPushMatrix(); + + GL11.glTranslatef((float) guiLeft, (float) guiTop, 0.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + + GL11.glDisable(GL11.GL_LIGHTING); + crucibleTimeMachine$titleRenderHook(); + GL11.glEnable(GL11.GL_LIGHTING); + + GL11.glPopMatrix(); + + } + + @Unique + public void crucibleTimeMachine$titleRenderHook() { + } + +} diff --git a/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiBrewingStandMixin.java b/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiBrewingStandMixin.java new file mode 100644 index 0000000..0a5ae0d --- /dev/null +++ b/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiBrewingStandMixin.java @@ -0,0 +1,38 @@ +package io.github.cruciblemc.necrotempus.modules.mixin.mixins.minecraft.inv; + +import net.minecraft.client.gui.inventory.GuiBrewingStand; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.resources.I18n; +import net.minecraft.inventory.Container; +import net.minecraft.tileentity.TileEntityBrewingStand; +import org.spongepowered.asm.mixin.Intrinsic; +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.callback.CallbackInfo; + +@Mixin(GuiBrewingStand.class) +public abstract class GuiBrewingStandMixin extends GuiContainer { + + @Shadow + private TileEntityBrewingStand tileBrewingStand; + + public GuiBrewingStandMixin(Container p_i1072_1_) { + super(p_i1072_1_); + } + + @Inject(method = "Lnet/minecraft/client/gui/inventory/GuiBrewingStand;drawGuiContainerForegroundLayer(II)V", at = @At(value = "HEAD"), cancellable = true) + public void drawGuiContainerForegroundLayer(int mouseX, int mouseY, CallbackInfo callbackInfo) { + callbackInfo.cancel(); + } + + @Intrinsic + public void crucibleTimeMachine$titleRenderHook() { + String s = this.tileBrewingStand.hasCustomInventoryName() ? this.tileBrewingStand.getInventoryName() : I18n.format(this.tileBrewingStand.getInventoryName()); + this.fontRendererObj.drawString(s, this.xSize / 2 - this.fontRendererObj.getStringWidth(s) / 2, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + + } + +} diff --git a/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiChestMixin.java b/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiChestMixin.java new file mode 100644 index 0000000..6e7fcf8 --- /dev/null +++ b/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiChestMixin.java @@ -0,0 +1,40 @@ +package io.github.cruciblemc.necrotempus.modules.mixin.mixins.minecraft.inv; + +import net.minecraft.client.gui.inventory.GuiChest; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.resources.I18n; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import org.spongepowered.asm.mixin.Intrinsic; +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.callback.CallbackInfo; + +@Mixin(GuiChest.class) +public abstract class GuiChestMixin extends GuiContainer { + + @Shadow + private IInventory upperChestInventory; + + @Shadow + private IInventory lowerChestInventory; + + public GuiChestMixin(Container p_i1072_1_) { + super(p_i1072_1_); + } + + @Inject(method = "Lnet/minecraft/client/gui/inventory/GuiChest;drawGuiContainerForegroundLayer(II)V", at = @At(value = "HEAD"), cancellable = true) + public void drawGuiContainerForegroundLayer(int mouseX, int mouseY, CallbackInfo callbackInfo) { + callbackInfo.cancel(); + } + + @Intrinsic + public void crucibleTimeMachine$titleRenderHook() { + this.fontRendererObj.drawString(this.lowerChestInventory.hasCustomInventoryName() ? this.lowerChestInventory.getInventoryName() : I18n.format(this.lowerChestInventory.getInventoryName()), 8, 6, 4210752); + this.fontRendererObj.drawString(this.upperChestInventory.hasCustomInventoryName() ? this.upperChestInventory.getInventoryName() : I18n.format(this.upperChestInventory.getInventoryName()), 8, this.ySize - 96 + 2, 4210752); + + } + +} diff --git a/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiDispenserMixin.java b/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiDispenserMixin.java new file mode 100644 index 0000000..1780c48 --- /dev/null +++ b/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiDispenserMixin.java @@ -0,0 +1,37 @@ +package io.github.cruciblemc.necrotempus.modules.mixin.mixins.minecraft.inv; + +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.gui.inventory.GuiDispenser; +import net.minecraft.client.resources.I18n; +import net.minecraft.inventory.Container; +import net.minecraft.tileentity.TileEntityDispenser; +import org.spongepowered.asm.mixin.Intrinsic; +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.callback.CallbackInfo; + +@Mixin(GuiDispenser.class) +public abstract class GuiDispenserMixin extends GuiContainer { + + @Shadow + public TileEntityDispenser tileDispenser; + + public GuiDispenserMixin(Container p_i1072_1_) { + super(p_i1072_1_); + } + + @Inject(method = "Lnet/minecraft/client/gui/inventory/GuiDispenser;drawGuiContainerForegroundLayer(II)V", at = @At(value = "HEAD"), cancellable = true) + public void drawGuiContainerForegroundLayer(int mouseX, int mouseY, CallbackInfo callbackInfo) { + callbackInfo.cancel(); + } + + @Intrinsic + public void crucibleTimeMachine$titleRenderHook() { + String s = this.tileDispenser.hasCustomInventoryName() ? this.tileDispenser.getInventoryName() : I18n.format(this.tileDispenser.getInventoryName()); + this.fontRendererObj.drawString(s, this.xSize / 2 - this.fontRendererObj.getStringWidth(s) / 2, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + +} diff --git a/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiEnchantmentMixin.java b/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiEnchantmentMixin.java new file mode 100644 index 0000000..c3b9169 --- /dev/null +++ b/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiEnchantmentMixin.java @@ -0,0 +1,35 @@ +package io.github.cruciblemc.necrotempus.modules.mixin.mixins.minecraft.inv; + +import net.minecraft.client.gui.GuiEnchantment; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.resources.I18n; +import net.minecraft.inventory.Container; +import org.spongepowered.asm.mixin.Intrinsic; +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.callback.CallbackInfo; + +@Mixin(GuiEnchantment.class) +public abstract class GuiEnchantmentMixin extends GuiContainer { + + @Shadow + private String field_147079_H; + + public GuiEnchantmentMixin(Container p_i1072_1_) { + super(p_i1072_1_); + } + + @Inject(method = "Lnet/minecraft/client/gui/inventory/GuiEnchantment;drawGuiContainerForegroundLayer(II)V", at = @At(value = "HEAD"), cancellable = true) + public void drawGuiContainerForegroundLayer(int mouseX, int mouseY, CallbackInfo callbackInfo) { + callbackInfo.cancel(); + } + + @Intrinsic + public void crucibleTimeMachine$titleRenderHook() { + this.fontRendererObj.drawString(this.field_147079_H == null ? I18n.format("container.enchant") : this.field_147079_H, 12, 5, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + +} diff --git a/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiFurnaceMixin.java b/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiFurnaceMixin.java new file mode 100644 index 0000000..0693aaa --- /dev/null +++ b/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiFurnaceMixin.java @@ -0,0 +1,37 @@ +package io.github.cruciblemc.necrotempus.modules.mixin.mixins.minecraft.inv; + +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.gui.inventory.GuiFurnace; +import net.minecraft.client.resources.I18n; +import net.minecraft.inventory.Container; +import net.minecraft.tileentity.TileEntityFurnace; +import org.spongepowered.asm.mixin.Intrinsic; +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.callback.CallbackInfo; + +@Mixin(GuiFurnace.class) +public abstract class GuiFurnaceMixin extends GuiContainer { + + @Shadow + private TileEntityFurnace tileFurnace; + + public GuiFurnaceMixin(Container p_i1072_1_) { + super(p_i1072_1_); + } + + @Inject(method = "Lnet/minecraft/client/gui/inventory/GuiFurnace;drawGuiContainerForegroundLayer(II)V", at = @At(value = "HEAD"), cancellable = true) + public void drawGuiContainerForegroundLayer(int mouseX, int mouseY, CallbackInfo callbackInfo) { + callbackInfo.cancel(); + } + + @Intrinsic + public void crucibleTimeMachine$titleRenderHook() { + String s = this.tileFurnace.hasCustomInventoryName() ? this.tileFurnace.getInventoryName() : I18n.format(this.tileFurnace.getInventoryName()); + this.fontRendererObj.drawString(s, this.xSize / 2 - this.fontRendererObj.getStringWidth(s) / 2, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + +} diff --git a/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiHopperMixin.java b/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiHopperMixin.java new file mode 100644 index 0000000..760c6a7 --- /dev/null +++ b/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiHopperMixin.java @@ -0,0 +1,38 @@ +package io.github.cruciblemc.necrotempus.modules.mixin.mixins.minecraft.inv; + +import net.minecraft.client.gui.GuiHopper; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.resources.I18n; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import org.spongepowered.asm.mixin.Intrinsic; +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.callback.CallbackInfo; + +@Mixin(GuiHopper.class) +public abstract class GuiHopperMixin extends GuiContainer { + + @Shadow + private IInventory field_147084_v; + @Shadow + private IInventory field_147083_w; + + public GuiHopperMixin(Container p_i1072_1_) { + super(p_i1072_1_); + } + + @Inject(method = "Lnet/minecraft/client/gui/inventory/GuiHopper;drawGuiContainerForegroundLayer(II)V", at = @At(value = "HEAD"), cancellable = true) + public void drawGuiContainerForegroundLayer(int mouseX, int mouseY, CallbackInfo callbackInfo) { + callbackInfo.cancel(); + } + + @Intrinsic + public void crucibleTimeMachine$titleRenderHook() { + this.fontRendererObj.drawString(this.field_147083_w.hasCustomInventoryName() ? this.field_147083_w.getInventoryName() : I18n.format(this.field_147083_w.getInventoryName()), 8, 6, 4210752); + this.fontRendererObj.drawString(this.field_147084_v.hasCustomInventoryName() ? this.field_147084_v.getInventoryName() : I18n.format(this.field_147084_v.getInventoryName()), 8, this.ySize - 96 + 2, 4210752); + } + +} diff --git a/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiMerchantMixin.java b/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiMerchantMixin.java new file mode 100644 index 0000000..9b70ddc --- /dev/null +++ b/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiMerchantMixin.java @@ -0,0 +1,35 @@ +package io.github.cruciblemc.necrotempus.modules.mixin.mixins.minecraft.inv; + +import net.minecraft.client.gui.GuiMerchant; +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.resources.I18n; +import net.minecraft.inventory.Container; +import org.spongepowered.asm.mixin.Intrinsic; +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.callback.CallbackInfo; + +@Mixin(GuiMerchant.class) +public abstract class GuiMerchantMixin extends GuiContainer { + + @Shadow + private String field_147040_A; + + public GuiMerchantMixin(Container p_i1072_1_) { + super(p_i1072_1_); + } + + @Inject(method = "Lnet/minecraft/client/gui/inventory/GuiMerchant;drawGuiContainerForegroundLayer(II)V", at = @At(value = "HEAD"), cancellable = true) + public void drawGuiContainerForegroundLayer(int mouseX, int mouseY, CallbackInfo callbackInfo) { + callbackInfo.cancel(); + } + + @Intrinsic + public void crucibleTimeMachine$titleRenderHook() { + this.fontRendererObj.drawString(this.field_147040_A, this.xSize / 2 - this.fontRendererObj.getStringWidth(this.field_147040_A) / 2, 6, 4210752); + this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + +} diff --git a/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiScreenHorseInventoryMixin.java b/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiScreenHorseInventoryMixin.java new file mode 100644 index 0000000..17daba1 --- /dev/null +++ b/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/mixins/minecraft/inv/GuiScreenHorseInventoryMixin.java @@ -0,0 +1,38 @@ +package io.github.cruciblemc.necrotempus.modules.mixin.mixins.minecraft.inv; + +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.client.gui.inventory.GuiScreenHorseInventory; +import net.minecraft.client.resources.I18n; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import org.spongepowered.asm.mixin.Intrinsic; +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.callback.CallbackInfo; + +@Mixin(GuiScreenHorseInventory.class) +public abstract class GuiScreenHorseInventoryMixin extends GuiContainer { + + @Shadow + private IInventory field_147030_v; + @Shadow + private IInventory field_147029_w; + + public GuiScreenHorseInventoryMixin(Container p_i1072_1_) { + super(p_i1072_1_); + } + + @Inject(method = "Lnet/minecraft/client/gui/inventory/GuiScreenHorseInventory;drawGuiContainerForegroundLayer(II)V", at = @At(value = "HEAD"), cancellable = true) + public void drawGuiContainerForegroundLayer(int mouseX, int mouseY, CallbackInfo callbackInfo) { + callbackInfo.cancel(); + } + + @Intrinsic + public void crucibleTimeMachine$titleRenderHook() { + this.fontRendererObj.drawString(this.field_147029_w.hasCustomInventoryName() ? this.field_147029_w.getInventoryName() : I18n.format(this.field_147029_w.getInventoryName()), 8, 6, 4210752); + this.fontRendererObj.drawString(this.field_147030_v.hasCustomInventoryName() ? this.field_147030_v.getInventoryName() : I18n.format(this.field_147030_v.getInventoryName()), 8, this.ySize - 96 + 2, 4210752); + } + +} diff --git a/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/plugin/Mixin.java b/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/plugin/Mixin.java index 7a3b944..beb7719 100644 --- a/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/plugin/Mixin.java +++ b/src/main/java/io/github/cruciblemc/necrotempus/modules/mixin/plugin/Mixin.java @@ -22,7 +22,16 @@ public enum Mixin { CustomNpcsMixinRenderNPCInterface("customnpcs.MixinRenderNPCInterface", Side.CLIENT, TargetedMod.CUSTOM_NPCS), FontRenderMixin("minecraft.FontRendererMixin", Side.CLIENT, TargetedMod.VANILLA), FontRender2Mixin("minecraft.FontRenderer2Mixin", Side.CLIENT, TargetedMod.VANILLA), - GuiIngame("minecraft.GuiIngameMixin", Side.CLIENT, TargetedMod.VANILLA); + GuiContainerMixin("minecraft.GuiContainerMixin", Side.CLIENT, TargetedMod.VANILLA), + GuiIngame("minecraft.GuiIngameMixin", Side.CLIENT, TargetedMod.VANILLA), + GuiChestMixin("minecraft.inv.GuiChestMixin", Side.CLIENT, TargetedMod.VANILLA), + GuiBrewingStandMixin("minecraft.inv.GuiBrewingStandMixin", Side.CLIENT, TargetedMod.VANILLA), + GuiDispenserMixin("minecraft.inv.GuiDispenserMixin", Side.CLIENT, TargetedMod.VANILLA), + GuiFurnaceMixin("minecraft.inv.GuiFurnaceMixin", Side.CLIENT, TargetedMod.VANILLA), + GuiScreenHorseInventoryMixin("minecraft.inv.GuiScreenHorseInventoryMixin", Side.CLIENT, TargetedMod.VANILLA), + GuiEnchantmentMixin("minecraft.inv.GuiEnchantmentMixin", Side.CLIENT, TargetedMod.VANILLA), + GuiHopperMixin("minecraft.inv.GuiHopperMixin", Side.CLIENT, TargetedMod.VANILLA), + GuiMerchantMixin("minecraft.inv.GuiMerchantMixin", Side.CLIENT, TargetedMod.VANILLA); public final String mixinClass;