Skip to content

Commit

Permalink
Created a mixin to patch all GuiContainer instances to render the inv…
Browse files Browse the repository at this point in the history
…entory title before the entire inventory content.
  • Loading branch information
brunoxkk0 committed Jan 26, 2025
1 parent 784aa46 commit 05e7352
Show file tree
Hide file tree
Showing 10 changed files with 351 additions and 1 deletion.
Original file line number Diff line number Diff line change
@@ -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() {
}

}
Original file line number Diff line number Diff line change
@@ -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);

}

}
Original file line number Diff line number Diff line change
@@ -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);

}

}
Original file line number Diff line number Diff line change
@@ -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);
}

}
Original file line number Diff line number Diff line change
@@ -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);
}

}
Original file line number Diff line number Diff line change
@@ -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);
}

}
Original file line number Diff line number Diff line change
@@ -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);
}

}
Original file line number Diff line number Diff line change
@@ -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);
}

}
Original file line number Diff line number Diff line change
@@ -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);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down

0 comments on commit 05e7352

Please sign in to comment.