From d92adfa9899679a1edba6f6b80e1e37cc839aff8 Mon Sep 17 00:00:00 2001 From: matt-159 <16054364+matt-159@users.noreply.github.com> Date: Fri, 3 May 2024 23:58:12 -0700 Subject: [PATCH] add compat for the thaumatorium --- .../thaumcraft/GuiThaumatoriumMixin.java | 78 ++++++++++++++++++ .../ContainerThaumatoriumMixin.java | 35 ++++++++ .../matt159/dws/mixin/plugin/Mixin.java | 2 + .../matt159/dws/util/TextureWhitelist.java | 1 + .../thaumcraft/gui/gui_thaumatorium.png | Bin 0 -> 19573 bytes 5 files changed, 116 insertions(+) create mode 100644 src/main/java/com/github/matt159/dws/mixin/mixins/client/thaumcraft/GuiThaumatoriumMixin.java create mode 100644 src/main/java/com/github/matt159/dws/mixin/mixins/common/thaumcraft/ContainerThaumatoriumMixin.java create mode 100644 src/main/resources/assets/dws/textures/thaumcraft/gui/gui_thaumatorium.png diff --git a/src/main/java/com/github/matt159/dws/mixin/mixins/client/thaumcraft/GuiThaumatoriumMixin.java b/src/main/java/com/github/matt159/dws/mixin/mixins/client/thaumcraft/GuiThaumatoriumMixin.java new file mode 100644 index 00000000..f4a3cd53 --- /dev/null +++ b/src/main/java/com/github/matt159/dws/mixin/mixins/client/thaumcraft/GuiThaumatoriumMixin.java @@ -0,0 +1,78 @@ +package com.github.matt159.dws.mixin.mixins.client.thaumcraft; + +import com.github.matt159.dws.interfaces.IDWSGui; +import com.github.matt159.dws.util.Constants; +import lombok.val; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.Constant; +import org.spongepowered.asm.mixin.injection.ModifyConstant; +import thaumcraft.client.gui.GuiThaumatorium; + +import net.minecraft.client.gui.inventory.GuiContainer; +import net.minecraft.inventory.Container; + +@Mixin(GuiThaumatorium.class) +public abstract class GuiThaumatoriumMixin extends GuiContainer implements IDWSGui { + public GuiThaumatoriumMixin(Container container) { + super(container); + } + + @ModifyConstant(method = "drawGuiContainerBackgroundLayer", + constant = { @Constant(intValue = 176), + @Constant(intValue = 192), + @Constant(intValue = 184), + @Constant(intValue = 200) }, + require = 10) + private int modifyTextureUVXOffset2(int constant) { + val offset = constant - 176; + + return offset + Constants.GENERAL_DWS_GUI_WIDTH; + } + + @ModifyConstant(method = "drawAspects", + constant = @Constant(intValue = 176), + remap = false, + require = 2) + private int modifyTextureUVXOffset(int constant) { + return Constants.GENERAL_DWS_GUI_WIDTH; + } + + @ModifyConstant(method = "drawGuiContainerBackgroundLayer", + constant = { @Constant(intValue = 32), + @Constant(intValue = 88), + @Constant(intValue = 104), + @Constant(intValue = 128), + @Constant(intValue = 136) }, + require = 15) + private int modifyTextureDrawXOffsets(int constant) { + return constant + Constants.GENERAL_X_OFFSET; + } + + @ModifyConstant(method = "drawAspects", + constant = { @Constant(intValue = 40, ordinal = 0), + @Constant(intValue = 41), + @Constant(intValue = 42) }, + remap = false, + require = 3) + private int modifyAspectXOffset(int constant) { + return constant + Constants.GENERAL_X_OFFSET; + } + + @ModifyConstant(method = "drawOutput", + constant = { @Constant(intValue = 112) }, + remap = false, + require = 3) + private int modifyOutputXOffset(int constant) { + return constant + Constants.GENERAL_X_OFFSET; + } + + @ModifyConstant(method = "mouseClicked", + constant = { @Constant(intValue = 112), + @Constant(intValue = 128), + @Constant(intValue = 32), + @Constant(intValue = 136) }, + require = 5) + private int modifyMouseClickRegionXOffset(int constant) { + return constant + Constants.GENERAL_X_OFFSET; + } +} diff --git a/src/main/java/com/github/matt159/dws/mixin/mixins/common/thaumcraft/ContainerThaumatoriumMixin.java b/src/main/java/com/github/matt159/dws/mixin/mixins/common/thaumcraft/ContainerThaumatoriumMixin.java new file mode 100644 index 00000000..6d6e1c59 --- /dev/null +++ b/src/main/java/com/github/matt159/dws/mixin/mixins/common/thaumcraft/ContainerThaumatoriumMixin.java @@ -0,0 +1,35 @@ +package com.github.matt159.dws.mixin.mixins.common.thaumcraft; + +import com.github.matt159.dws.interfaces.IDWSContainer; +import com.github.matt159.dws.util.Constants; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.Constant; +import org.spongepowered.asm.mixin.injection.ModifyConstant; +import thaumcraft.common.container.ContainerThaumatorium; + +import net.minecraft.inventory.Container; + +@Mixin(ContainerThaumatorium.class) +public abstract class ContainerThaumatoriumMixin extends Container implements IDWSContainer { + @ModifyConstant(method = "", + constant = @Constant(intValue = 9), + require = 4) + private int modifyInventorySize(int constant) { + return 18; + } + + @ModifyConstant(method = "", + constant = @Constant(intValue = 48), + require = 1) + private int modifyInputSlotXOffset(int constant) { + return constant + Constants.GENERAL_X_OFFSET; + } + + @ModifyConstant(method = "transferStackInSlot", + constant = { @Constant(intValue = 28), + @Constant(intValue = 37) }, + require = 7) + private int modifyInventoryBounds(int constant) { + return constant + 27; + } +} diff --git a/src/main/java/com/github/matt159/dws/mixin/plugin/Mixin.java b/src/main/java/com/github/matt159/dws/mixin/plugin/Mixin.java index 31b895ca..e691b2d6 100644 --- a/src/main/java/com/github/matt159/dws/mixin/plugin/Mixin.java +++ b/src/main/java/com/github/matt159/dws/mixin/plugin/Mixin.java @@ -382,11 +382,13 @@ public enum Mixin implements IMixin { ContainerArcaneWorkbenchMixin (COMMON, require(THAUMCRAFT), "thaumcraft.ContainerArcaneWorkbenchMixin"), ContainerFocusPouchMixin (COMMON, require(THAUMCRAFT), "thaumcraft.ContainerFocusPouchMixin"), ContainerResearchTableMixin (COMMON, require(THAUMCRAFT), "thaumcraft.ContainerResearchTableMixin"), + ContainerThaumatoriumMixin (COMMON, require(THAUMCRAFT), "thaumcraft.ContainerThaumatoriumMixin"), GuiAlchemyFurnaceMixin (CLIENT, require(THAUMCRAFT), "thaumcraft.GuiAlchemyFurnaceMixin"), GuiArcaneWorkbenchMixin (CLIENT, require(THAUMCRAFT), "thaumcraft.GuiArcaneWorkbenchMixin"), GuiFocusPouchMixin (CLIENT, require(THAUMCRAFT), "thaumcraft.GuiFocusPouchMixin"), GuiResearchTableMixin (CLIENT, require(THAUMCRAFT), "thaumcraft.GuiResearchTableMixin"), + GuiThaumatoriumMixin (CLIENT, require(THAUMCRAFT), "thaumcraft.GuiThaumatoriumMixin"), REHWandHandlerMixin (CLIENT, require(THAUMCRAFT), "thaumcraft.REHWandHandlerMixin"), WandManagerMixin (COMMON, require(THAUMCRAFT), "thaumcraft.WandManagerMixin"), diff --git a/src/main/java/com/github/matt159/dws/util/TextureWhitelist.java b/src/main/java/com/github/matt159/dws/util/TextureWhitelist.java index 7e4083b1..bacf4b41 100644 --- a/src/main/java/com/github/matt159/dws/util/TextureWhitelist.java +++ b/src/main/java/com/github/matt159/dws/util/TextureWhitelist.java @@ -320,6 +320,7 @@ public static void useDoubleWideTexture(boolean value) { addTextureToWhitelist("thaumcraft:textures/gui/gui_arcaneworkbench.png"); addTextureToWhitelist("thaumcraft:textures/gui/gui_focuspouch.png"); addTextureToWhitelist("thaumcraft:textures/gui/guiresearchtable2.png"); + addTextureToWhitelist("thaumcraft:textures/gui/gui_thaumatorium.png"); //endregion //region Industrialcraft 2 diff --git a/src/main/resources/assets/dws/textures/thaumcraft/gui/gui_thaumatorium.png b/src/main/resources/assets/dws/textures/thaumcraft/gui/gui_thaumatorium.png new file mode 100644 index 0000000000000000000000000000000000000000..26a6cf0b00c2c7c5fbc5420ee0b4916a56730ab1 GIT binary patch literal 19573 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