From d49822e3c0984a86948779c4232bb71848957807 Mon Sep 17 00:00:00 2001 From: sjcl Date: Sun, 25 Jun 2023 23:21:37 +0900 Subject: [PATCH 01/15] =?UTF-8?q?Mixin=E3=81=AE=E3=83=87=E3=83=90=E3=83=83?= =?UTF-8?q?=E3=82=B0=E7=94=A8=E3=83=95=E3=83=A9=E3=82=B0=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dependencies.gradle | 7 ++++++- gradle.properties | 1 + src/main/java/gtexpert/GTEMixinLoader.java | 6 +++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index 60debbff..a4369879 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -38,7 +38,6 @@ dependencies { implementation rfg.deobf("curse.maven:baubles-227083:2518667") implementation rfg.deobf("curse.maven:shadowfacts-forgelin-248453:2785465") implementation rfg.deobf("curse.maven:ae-additions-extra-cells-2-fork-493962:3814371") - implementation rfg.deobf("curse.maven:ez-storage2-245425:2530747") // Soft Dependencies implementation "CraftTweaker2:CraftTweaker2-MC1120-Main:1.12-4.1.20.687" @@ -68,6 +67,12 @@ dependencies { implementation rfg.deobf("curse.maven:chisel-235279:2915375") } + // Debug mixins + compileOnly rfg.deobf("curse.maven:ez-storage2-245425:2530747") + if (project.debug_mixins.toBoolean()) { + implementation rfg.deobf("curse.maven:ez-storage2-245425:2530747") + } + // Boot error fix runtimeOnly (files("libs/EnderCore-1.12.2-0.5.76-core.jar")) } diff --git a/gradle.properties b/gradle.properties index 1b051295..d9e67968 100644 --- a/gradle.properties +++ b/gradle.properties @@ -21,6 +21,7 @@ minecraftVersion = 1.12.2 # Debug mod compatibility debug_de = false debug_chisel = false +debug_mixins = false # Select a username for testing your mod with breakpoints. You may leave this empty for a random username each time you # restart Minecraft in development. Choose this dependent on your mod: diff --git a/src/main/java/gtexpert/GTEMixinLoader.java b/src/main/java/gtexpert/GTEMixinLoader.java index feb19cdc..fdb075c6 100644 --- a/src/main/java/gtexpert/GTEMixinLoader.java +++ b/src/main/java/gtexpert/GTEMixinLoader.java @@ -1,14 +1,18 @@ package gtexpert; import com.google.common.collect.Lists; +import net.minecraftforge.fml.common.Loader; import zone.rong.mixinbooter.ILateMixinLoader; +import java.util.Collections; import java.util.List; public class GTEMixinLoader implements ILateMixinLoader { @Override public List getMixinConfigs() { - return Lists.newArrayList("mixins.gtexpert.json"); + if (Loader.isModLoaded("ezstorage")) + return Lists.newArrayList("mixins.gtexpert.json"); + return Collections.emptyList(); } } From 51906057554d3c8fb400cf21d0b7b1753044afc1 Mon Sep 17 00:00:00 2001 From: sjcl Date: Sun, 25 Jun 2023 23:31:48 +0900 Subject: [PATCH 02/15] Update mcmod.info --- src/main/resources/mcmod.info | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 1435d994..9bee84e5 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -20,7 +20,8 @@ "appliedenergistics2", "aeadditions", "endercore", - "enderio" + "enderio", + "ezstorage" ] } ] From b831d05fba94579e6a3c3d4c52b9289a45cf2311 Mon Sep 17 00:00:00 2001 From: sjcl Date: Mon, 26 Jun 2023 16:30:29 +0900 Subject: [PATCH 03/15] =?UTF-8?q?=E5=8F=B3=E3=82=AF=E3=83=AA=E3=83=83?= =?UTF-8?q?=E3=82=AF=E3=81=A7=E5=8D=8A=E5=88=86=E3=81=AE=E3=82=A2=E3=82=A4?= =?UTF-8?q?=E3=83=86=E3=83=A0=E3=82=92=E5=8F=96=E5=BE=97=E3=81=A7=E3=81=8D?= =?UTF-8?q?=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/gtexpert/GTEMixinLoader.java | 3 +- .../gtexpert/mixins/MixinEZInventory.java | 44 +++++++++++++++++++ src/main/resources/mixins.gtexpert.json | 1 + 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 src/main/java/gtexpert/mixins/MixinEZInventory.java diff --git a/src/main/java/gtexpert/GTEMixinLoader.java b/src/main/java/gtexpert/GTEMixinLoader.java index fdb075c6..01560a43 100644 --- a/src/main/java/gtexpert/GTEMixinLoader.java +++ b/src/main/java/gtexpert/GTEMixinLoader.java @@ -1,7 +1,8 @@ package gtexpert; -import com.google.common.collect.Lists; import net.minecraftforge.fml.common.Loader; + +import com.google.common.collect.Lists; import zone.rong.mixinbooter.ILateMixinLoader; import java.util.Collections; diff --git a/src/main/java/gtexpert/mixins/MixinEZInventory.java b/src/main/java/gtexpert/mixins/MixinEZInventory.java new file mode 100644 index 00000000..bea097b0 --- /dev/null +++ b/src/main/java/gtexpert/mixins/MixinEZInventory.java @@ -0,0 +1,44 @@ +package gtexpert.mixins; + +import net.minecraft.item.ItemStack; + +import com.zerofall.ezstorage.util.EZInventory; +import com.zerofall.ezstorage.util.ItemGroup; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.gen.Invoker; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; + +@Mixin(EZInventory.class) +public abstract class MixinEZInventory { + + @Invoker(value = "extractStack", remap = false) + public abstract ItemStack invokeExtractStack(ItemGroup group, int size, boolean peek); + + @Inject(method = "getItemsAt(IIIZ)Lnet/minecraft/item/ItemStack;", + at = @At(value = "INVOKE", + target = "Lcom/zerofall/ezstorage/util/EZInventory;extractStack(Lcom/zerofall/ezstorage/util/ItemGroup;IZ)Lnet/minecraft/item/ItemStack;", + ordinal = 0), + remap = false, + locals = LocalCapture.CAPTURE_FAILHARD, + cancellable = true) + public void injectGetItemsAtExtractStack(int index, int type, int size, boolean peek, + CallbackInfoReturnable cir, + ItemGroup group, ItemStack stack) { + if (size == 0) { + cir.setReturnValue(ItemStack.EMPTY); + cir.cancel(); + return; + } + + if (size < 1 && type == 1) { + size = (((int) Math.min(stack.getMaxStackSize(), group.count)) + 2 - 1) / 2; + } + + ItemStack result = this.invokeExtractStack(group, size, peek); + cir.setReturnValue(result); + cir.cancel(); + } +} diff --git a/src/main/resources/mixins.gtexpert.json b/src/main/resources/mixins.gtexpert.json index 31e99e45..85f67d0c 100644 --- a/src/main/resources/mixins.gtexpert.json +++ b/src/main/resources/mixins.gtexpert.json @@ -10,6 +10,7 @@ "server": [ ], "client": [ + "MixinEZInventory" ], "injectors": { "defaultRequire": 1 From ccad1099764811057c1f3644296a4824d25076a9 Mon Sep 17 00:00:00 2001 From: sjcl Date: Tue, 27 Jun 2023 17:04:23 +0900 Subject: [PATCH 04/15] Refactor --- gradle.properties | 2 +- .../mixins/{ => impl/ezstorage2}/MixinEZInventory.java | 2 +- .../mixins/{ => impl/ezstorage2}/MixinItemDolly.java | 2 +- src/main/resources/mixins.gtexpert.json | 6 +++--- 4 files changed, 6 insertions(+), 6 deletions(-) rename src/main/java/gtexpert/mixins/{ => impl/ezstorage2}/MixinEZInventory.java (97%) rename src/main/java/gtexpert/mixins/{ => impl/ezstorage2}/MixinItemDolly.java (99%) diff --git a/gradle.properties b/gradle.properties index d9e67968..2d13f8ce 100644 --- a/gradle.properties +++ b/gradle.properties @@ -54,7 +54,7 @@ accessTransformersFile = # Provides setup for Mixins if enabled. If you don't know what mixins are: Keep it disabled! usesMixins = true # Specify the package that contains all of your Mixins. You may only place Mixins in this package or the build will fail! -mixinsPackage = mixins +mixinsPackage = mixins.impl # Specify the core mod entry class if you use a core mod. This class must implement IFMLLoadingPlugin! # Example value: coreModClass = asm.FMLPlugin + modGroup = com.myname.mymodid -> com.myname.mymodid.asm.FMLPlugin coreModClass = GTEMixinPlugin diff --git a/src/main/java/gtexpert/mixins/MixinEZInventory.java b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinEZInventory.java similarity index 97% rename from src/main/java/gtexpert/mixins/MixinEZInventory.java rename to src/main/java/gtexpert/mixins/impl/ezstorage2/MixinEZInventory.java index bea097b0..91f72178 100644 --- a/src/main/java/gtexpert/mixins/MixinEZInventory.java +++ b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinEZInventory.java @@ -1,4 +1,4 @@ -package gtexpert.mixins; +package gtexpert.mixins.impl.ezstorage2; import net.minecraft.item.ItemStack; diff --git a/src/main/java/gtexpert/mixins/MixinItemDolly.java b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinItemDolly.java similarity index 99% rename from src/main/java/gtexpert/mixins/MixinItemDolly.java rename to src/main/java/gtexpert/mixins/impl/ezstorage2/MixinItemDolly.java index 8de39fc9..1aa1afff 100644 --- a/src/main/java/gtexpert/mixins/MixinItemDolly.java +++ b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinItemDolly.java @@ -1,4 +1,4 @@ -package gtexpert.mixins; +package gtexpert.mixins.impl.ezstorage2; import net.minecraft.block.Block; import net.minecraft.block.BlockChest; diff --git a/src/main/resources/mixins.gtexpert.json b/src/main/resources/mixins.gtexpert.json index 85f67d0c..49c6e6ac 100644 --- a/src/main/resources/mixins.gtexpert.json +++ b/src/main/resources/mixins.gtexpert.json @@ -1,16 +1,16 @@ { "required": true, - "package": "gtexpert.mixins", + "package": "gtexpert.mixins.impl", "refmap": "mixins.gtexpert.refmap.json", "target": "@env(DEFAULT)", "compatibilityLevel": "JAVA_8", "mixins": [ - "MixinItemDolly" + "ezstorage2/MixinItemDolly" ], "server": [ ], "client": [ - "MixinEZInventory" + "ezstorage2/MixinEZInventory" ], "injectors": { "defaultRequire": 1 From c8a98d0787791d659c22ee5896ab8793d8d30b56 Mon Sep 17 00:00:00 2001 From: sjcl Date: Tue, 27 Jun 2023 17:59:01 +0900 Subject: [PATCH 05/15] =?UTF-8?q?StorageCore=E3=81=8B=E3=82=89=E3=82=A2?= =?UTF-8?q?=E3=82=A4=E3=83=86=E3=83=A0=E3=82=92=E5=8F=96=E3=82=8A=E5=87=BA?= =?UTF-8?q?=E3=81=99=E6=8C=99=E5=8B=95=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit プレイヤーのインベントリが満タンの時、容量オーバーのStorageからItemをShift左クリックで取り出すと消滅する問題を修正 Shit右クリックで1つだけ取り出せるように --- .../ezstorage2/MixinContainerStorageCore.java | 76 +++++++++++++++++++ .../impl/ezstorage2/MixinEZInventory.java | 28 +++++-- .../ezstorage2/IMixinEZInventory.java | 8 ++ src/main/resources/mixins.gtexpert.json | 3 +- 4 files changed, 109 insertions(+), 6 deletions(-) create mode 100644 src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCore.java create mode 100644 src/main/java/gtexpert/mixins/interfaces/ezstorage2/IMixinEZInventory.java diff --git a/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCore.java b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCore.java new file mode 100644 index 00000000..df97d8ba --- /dev/null +++ b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCore.java @@ -0,0 +1,76 @@ +package gtexpert.mixins.impl.ezstorage2; + +import gtexpert.mixins.interfaces.ezstorage2.IMixinEZInventory; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.item.ItemStack; + +import com.zerofall.ezstorage.gui.server.ContainerStorageCore; +import com.zerofall.ezstorage.tileentity.TileEntityStorageCore; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.gen.Invoker; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +@Mixin(ContainerStorageCore.class) +public abstract class MixinContainerStorageCore extends Container { + + @Shadow(remap = false) + public TileEntityStorageCore tileEntity; + + @Invoker(value = "rowCount", remap = false) + public abstract int invokeRowCount(); + + @Inject(method = "customSlotClick", + at = @At(value = "INVOKE", + target = "Lcom/zerofall/ezstorage/util/EZInventory;getItemsAt(II)Lnet/minecraft/item/ItemStack;"), + remap = false, + cancellable = true) + public void injectCustomSlotClick(int slotId, int clickedButton, int mode, EntityPlayer playerIn, + CallbackInfoReturnable cir) { + // Always return EMPTY since this return value is never used + cir.setReturnValue(ItemStack.EMPTY); + + int type = 0; + if (clickedButton == 1) { + type = (mode == 0) ? 1 : 2; + } + + boolean isShiftLeftClick = clickedButton == 0 && mode == 1; + int playerInventoryStartIndex = this.invokeRowCount() * 9; + int playerInventoryEndIndex = playerInventoryStartIndex + playerIn.inventory.mainInventory.size(); + + if (playerIn.inventory.getFirstEmptyStack() < 0 && isShiftLeftClick) { + ItemStack targetStack = ((IMixinEZInventory) (Object) this.tileEntity.inventory) + .getItemWithoutExtractAt(slotId); + int emptyCapacity = this.inventorySlots.subList(playerInventoryStartIndex, playerInventoryEndIndex).stream() + .mapToInt(slot -> { + ItemStack slotStack = slot.getStack(); + if (slotStack.isItemEqual(targetStack) && + ItemStack.areItemStackTagsEqual(slotStack, targetStack)) { + return slotStack.getMaxStackSize() - slotStack.getCount(); + } + return 0; + }).sum(); + + ItemStack retrievedStack = this.tileEntity.inventory.getItemsAt(slotId, type, + Math.min(emptyCapacity, targetStack.getMaxStackSize())); + if (!retrievedStack.isEmpty()) { + this.mergeItemStack(retrievedStack, playerInventoryStartIndex, playerInventoryEndIndex, true); + } + } else { + ItemStack retrievedStack = this.tileEntity.inventory.getItemsAt(slotId, type); + if (!retrievedStack.isEmpty()) { + if (isShiftLeftClick) { + this.mergeItemStack(retrievedStack, playerInventoryStartIndex, playerInventoryEndIndex, true); + } else { + playerIn.inventory.setItemStack(retrievedStack); + } + } + + } + } +} diff --git a/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinEZInventory.java b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinEZInventory.java index 91f72178..08188627 100644 --- a/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinEZInventory.java +++ b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinEZInventory.java @@ -1,18 +1,26 @@ package gtexpert.mixins.impl.ezstorage2; +import gtexpert.mixins.interfaces.ezstorage2.IMixinEZInventory; + import net.minecraft.item.ItemStack; import com.zerofall.ezstorage.util.EZInventory; import com.zerofall.ezstorage.util.ItemGroup; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.gen.Invoker; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import org.spongepowered.asm.mixin.injection.callback.LocalCapture; +import java.util.List; + @Mixin(EZInventory.class) -public abstract class MixinEZInventory { +public abstract class MixinEZInventory implements IMixinEZInventory { + + @Shadow(remap = false) + public List inventory; @Invoker(value = "extractStack", remap = false) public abstract ItemStack invokeExtractStack(ItemGroup group, int size, boolean peek); @@ -29,16 +37,26 @@ public void injectGetItemsAtExtractStack(int index, int type, int size, boolean ItemGroup group, ItemStack stack) { if (size == 0) { cir.setReturnValue(ItemStack.EMPTY); - cir.cancel(); return; } - if (size < 1 && type == 1) { - size = (((int) Math.min(stack.getMaxStackSize(), group.count)) + 2 - 1) / 2; + if (size < 1) { + if (type == 1) { + size = (((int) Math.min(stack.getMaxStackSize(), group.count)) + 2 - 1) / 2; + } else if (type == 2) { + size = 1; + } } ItemStack result = this.invokeExtractStack(group, size, peek); cir.setReturnValue(result); - cir.cancel(); + } + + @Override + public ItemStack getItemWithoutExtractAt(int index) { + if (index >= this.inventory.size()) { + return ItemStack.EMPTY; + } + return this.inventory.get(index).itemStack; } } diff --git a/src/main/java/gtexpert/mixins/interfaces/ezstorage2/IMixinEZInventory.java b/src/main/java/gtexpert/mixins/interfaces/ezstorage2/IMixinEZInventory.java new file mode 100644 index 00000000..e9437b6b --- /dev/null +++ b/src/main/java/gtexpert/mixins/interfaces/ezstorage2/IMixinEZInventory.java @@ -0,0 +1,8 @@ +package gtexpert.mixins.interfaces.ezstorage2; + +import net.minecraft.item.ItemStack; + +public interface IMixinEZInventory { + + ItemStack getItemWithoutExtractAt(int index); +} diff --git a/src/main/resources/mixins.gtexpert.json b/src/main/resources/mixins.gtexpert.json index 49c6e6ac..d050dddd 100644 --- a/src/main/resources/mixins.gtexpert.json +++ b/src/main/resources/mixins.gtexpert.json @@ -5,7 +5,8 @@ "target": "@env(DEFAULT)", "compatibilityLevel": "JAVA_8", "mixins": [ - "ezstorage2/MixinItemDolly" + "ezstorage2/MixinItemDolly", + "ezstorage2/MixinContainerStorageCore" ], "server": [ ], From 81c7110116147e336a70b739c5eeb4e3b464426d Mon Sep 17 00:00:00 2001 From: sjcl Date: Tue, 27 Jun 2023 22:14:16 +0900 Subject: [PATCH 06/15] =?UTF-8?q?=E5=8F=B3=E3=82=AF=E3=83=AA=E3=83=83?= =?UTF-8?q?=E3=82=AF=E3=81=A7=E4=B8=80=E3=81=A4=E3=81=9A=E3=81=A4Item?= =?UTF-8?q?=E3=82=92=E6=A0=BC=E7=B4=8D=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ezstorage2/MixinContainerStorageCore.java | 69 ++++++++++--------- .../impl/ezstorage2/MixinEZInventory.java | 16 +++++ .../ezstorage2/IMixinEZInventory.java | 6 ++ 3 files changed, 59 insertions(+), 32 deletions(-) diff --git a/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCore.java b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCore.java index df97d8ba..7f4be155 100644 --- a/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCore.java +++ b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCore.java @@ -24,11 +24,7 @@ public abstract class MixinContainerStorageCore extends Container { @Invoker(value = "rowCount", remap = false) public abstract int invokeRowCount(); - @Inject(method = "customSlotClick", - at = @At(value = "INVOKE", - target = "Lcom/zerofall/ezstorage/util/EZInventory;getItemsAt(II)Lnet/minecraft/item/ItemStack;"), - remap = false, - cancellable = true) + @Inject(method = "customSlotClick", at = @At(value = "HEAD"), remap = false, cancellable = true) public void injectCustomSlotClick(int slotId, int clickedButton, int mode, EntityPlayer playerIn, CallbackInfoReturnable cir) { // Always return EMPTY since this return value is never used @@ -39,38 +35,47 @@ public void injectCustomSlotClick(int slotId, int clickedButton, int mode, Entit type = (mode == 0) ? 1 : 2; } - boolean isShiftLeftClick = clickedButton == 0 && mode == 1; - int playerInventoryStartIndex = this.invokeRowCount() * 9; - int playerInventoryEndIndex = playerInventoryStartIndex + playerIn.inventory.mainInventory.size(); + // isShiftLeftClick + if (clickedButton == 0 && mode == 1) { + int playerInventoryStartIndex = this.invokeRowCount() * 9; + int playerInventoryEndIndex = playerInventoryStartIndex + playerIn.inventory.mainInventory.size(); - if (playerIn.inventory.getFirstEmptyStack() < 0 && isShiftLeftClick) { - ItemStack targetStack = ((IMixinEZInventory) (Object) this.tileEntity.inventory) - .getItemWithoutExtractAt(slotId); - int emptyCapacity = this.inventorySlots.subList(playerInventoryStartIndex, playerInventoryEndIndex).stream() - .mapToInt(slot -> { - ItemStack slotStack = slot.getStack(); - if (slotStack.isItemEqual(targetStack) && - ItemStack.areItemStackTagsEqual(slotStack, targetStack)) { - return slotStack.getMaxStackSize() - slotStack.getCount(); - } - return 0; - }).sum(); + if (playerIn.inventory.getFirstEmptyStack() < 0) { + ItemStack targetStack = ((IMixinEZInventory) (Object) this.tileEntity.inventory) + .getItemWithoutExtractAt(slotId); + int emptyCapacity = this.inventorySlots.subList(playerInventoryStartIndex, playerInventoryEndIndex) + .stream() + .mapToInt(slot -> { + ItemStack slotStack = slot.getStack(); + if (slotStack.isItemEqual(targetStack) && + ItemStack.areItemStackTagsEqual(slotStack, targetStack)) { + return slotStack.getMaxStackSize() - slotStack.getCount(); + } + return 0; + }).sum(); - ItemStack retrievedStack = this.tileEntity.inventory.getItemsAt(slotId, type, - Math.min(emptyCapacity, targetStack.getMaxStackSize())); - if (!retrievedStack.isEmpty()) { - this.mergeItemStack(retrievedStack, playerInventoryStartIndex, playerInventoryEndIndex, true); - } - } else { - ItemStack retrievedStack = this.tileEntity.inventory.getItemsAt(slotId, type); - if (!retrievedStack.isEmpty()) { - if (isShiftLeftClick) { + ItemStack retrievedStack = this.tileEntity.inventory.getItemsAt(slotId, type, + Math.min(emptyCapacity, targetStack.getMaxStackSize())); + if (!retrievedStack.isEmpty()) { + this.mergeItemStack(retrievedStack, playerInventoryStartIndex, playerInventoryEndIndex, true); + } + } else { + ItemStack retrievedStack = this.tileEntity.inventory.getItemsAt(slotId, type); + if (!retrievedStack.isEmpty()) { this.mergeItemStack(retrievedStack, playerInventoryStartIndex, playerInventoryEndIndex, true); - } else { - playerIn.inventory.setItemStack(retrievedStack); } } - + } else { + ItemStack heldStack = playerIn.inventory.getItemStack(); + if (heldStack.isEmpty()) { + ItemStack retrievedStack = this.tileEntity.inventory.getItemsAt(slotId, type); + playerIn.inventory.setItemStack(retrievedStack); + } else if (clickedButton == 0) { + playerIn.inventory.setItemStack(this.tileEntity.inventory.input(heldStack)); + } else if (clickedButton == 1 && mode != 1) { + playerIn.inventory + .setItemStack(((IMixinEZInventory) (Object) this.tileEntity.inventory).input(heldStack, 1)); + } } } } diff --git a/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinEZInventory.java b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinEZInventory.java index 08188627..598d6323 100644 --- a/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinEZInventory.java +++ b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinEZInventory.java @@ -59,4 +59,20 @@ public ItemStack getItemWithoutExtractAt(int index) { } return this.inventory.get(index).itemStack; } + + @Override + public ItemStack input(ItemStack itemStack, int quantity, boolean sort) { + int stackCount = itemStack.getCount(); + quantity = Math.min(itemStack.getCount(), quantity); + + ItemStack inputStack = itemStack.copy(); + inputStack.setCount(Math.min(stackCount, quantity)); + ItemStack inputResult = ((EZInventory) (Object) this).input(inputStack, sort); + if (inputResult.isEmpty()) { + itemStack.shrink(quantity); + } else { + itemStack.setCount(stackCount - quantity + inputResult.getCount()); + } + return itemStack; + } } diff --git a/src/main/java/gtexpert/mixins/interfaces/ezstorage2/IMixinEZInventory.java b/src/main/java/gtexpert/mixins/interfaces/ezstorage2/IMixinEZInventory.java index e9437b6b..75ed1a1b 100644 --- a/src/main/java/gtexpert/mixins/interfaces/ezstorage2/IMixinEZInventory.java +++ b/src/main/java/gtexpert/mixins/interfaces/ezstorage2/IMixinEZInventory.java @@ -5,4 +5,10 @@ public interface IMixinEZInventory { ItemStack getItemWithoutExtractAt(int index); + + ItemStack input(ItemStack itemStack, int quantity, boolean sort); + + default ItemStack input(ItemStack itemStack, int quantity) { + return this.input(itemStack, quantity, true); + } } From 91b2222478a31405b3472b0ab04face65fbec3d6 Mon Sep 17 00:00:00 2001 From: sjcl Date: Wed, 28 Jun 2023 01:02:17 +0900 Subject: [PATCH 07/15] =?UTF-8?q?NoClassDefFoundError:=20IllegalName?= =?UTF-8?q?=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/mixins.gtexpert.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/resources/mixins.gtexpert.json b/src/main/resources/mixins.gtexpert.json index d050dddd..bb233a81 100644 --- a/src/main/resources/mixins.gtexpert.json +++ b/src/main/resources/mixins.gtexpert.json @@ -5,13 +5,13 @@ "target": "@env(DEFAULT)", "compatibilityLevel": "JAVA_8", "mixins": [ - "ezstorage2/MixinItemDolly", - "ezstorage2/MixinContainerStorageCore" + "ezstorage2.MixinItemDolly", + "ezstorage2.MixinContainerStorageCore" ], "server": [ ], "client": [ - "ezstorage2/MixinEZInventory" + "ezstorage2.MixinEZInventory" ], "injectors": { "defaultRequire": 1 From 070fb2af1f604d28bc4dfed183c4a6b43cc3098c Mon Sep 17 00:00:00 2001 From: sjcl Date: Wed, 28 Jun 2023 03:15:16 +0900 Subject: [PATCH 08/15] =?UTF-8?q?StorageCore=E3=81=AE=E3=82=A4=E3=83=B3?= =?UTF-8?q?=E3=83=99=E3=83=B3=E3=83=88=E3=83=AA=E3=81=AB=E3=83=89=E3=83=A9?= =?UTF-8?q?=E3=83=83=E3=82=B0=E3=81=A7=E3=82=A2=E3=82=A4=E3=83=86=E3=83=A0?= =?UTF-8?q?=E3=82=92=E5=88=86=E5=89=B2=E9=85=8D=E7=BD=AE=E3=81=A7=E3=81=8D?= =?UTF-8?q?=E3=81=AA=E3=81=84=E3=82=88=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ezstorage2/MixinContainerStorageCore.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCore.java b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCore.java index 7f4be155..39f953a4 100644 --- a/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCore.java +++ b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCore.java @@ -4,10 +4,13 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; +import net.minecraft.inventory.InventoryBasic; +import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; import com.zerofall.ezstorage.gui.server.ContainerStorageCore; import com.zerofall.ezstorage.tileentity.TileEntityStorageCore; +import org.spongepowered.asm.mixin.Debug; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.gen.Invoker; @@ -15,18 +18,21 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.jetbrains.annotations.NotNull; + +@Debug(export = true) @Mixin(ContainerStorageCore.class) public abstract class MixinContainerStorageCore extends Container { @Shadow(remap = false) - public TileEntityStorageCore tileEntity; + private TileEntityStorageCore tileEntity; @Invoker(value = "rowCount", remap = false) - public abstract int invokeRowCount(); + protected abstract int invokeRowCount(); @Inject(method = "customSlotClick", at = @At(value = "HEAD"), remap = false, cancellable = true) - public void injectCustomSlotClick(int slotId, int clickedButton, int mode, EntityPlayer playerIn, - CallbackInfoReturnable cir) { + private void injectCustomSlotClick(int slotId, int clickedButton, int mode, EntityPlayer playerIn, + CallbackInfoReturnable cir) { // Always return EMPTY since this return value is never used cir.setReturnValue(ItemStack.EMPTY); @@ -78,4 +84,9 @@ public void injectCustomSlotClick(int slotId, int clickedButton, int mode, Entit } } } + + @Override + public boolean canDragIntoSlot(@NotNull Slot slotIn) { + return !(slotIn.inventory instanceof InventoryBasic); + } } From a16e26cd94138afc02b59dfd2db67fa14948053e Mon Sep 17 00:00:00 2001 From: sjcl Date: Wed, 28 Jun 2023 03:48:49 +0900 Subject: [PATCH 09/15] Refactor --- .../ezstorage2/MixinContainerStorageCore.java | 2 - .../impl/ezstorage2/MixinEZInventory.java | 10 ++-- .../impl/ezstorage2/MixinItemDolly.java | 59 +++++++++++-------- 3 files changed, 39 insertions(+), 32 deletions(-) diff --git a/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCore.java b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCore.java index 39f953a4..08907a95 100644 --- a/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCore.java +++ b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCore.java @@ -10,7 +10,6 @@ import com.zerofall.ezstorage.gui.server.ContainerStorageCore; import com.zerofall.ezstorage.tileentity.TileEntityStorageCore; -import org.spongepowered.asm.mixin.Debug; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.gen.Invoker; @@ -20,7 +19,6 @@ import org.jetbrains.annotations.NotNull; -@Debug(export = true) @Mixin(ContainerStorageCore.class) public abstract class MixinContainerStorageCore extends Container { diff --git a/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinEZInventory.java b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinEZInventory.java index 598d6323..27cbec92 100644 --- a/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinEZInventory.java +++ b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinEZInventory.java @@ -20,10 +20,10 @@ public abstract class MixinEZInventory implements IMixinEZInventory { @Shadow(remap = false) - public List inventory; + private List inventory; @Invoker(value = "extractStack", remap = false) - public abstract ItemStack invokeExtractStack(ItemGroup group, int size, boolean peek); + protected abstract ItemStack invokeExtractStack(ItemGroup group, int size, boolean peek); @Inject(method = "getItemsAt(IIIZ)Lnet/minecraft/item/ItemStack;", at = @At(value = "INVOKE", @@ -32,9 +32,9 @@ public abstract class MixinEZInventory implements IMixinEZInventory { remap = false, locals = LocalCapture.CAPTURE_FAILHARD, cancellable = true) - public void injectGetItemsAtExtractStack(int index, int type, int size, boolean peek, - CallbackInfoReturnable cir, - ItemGroup group, ItemStack stack) { + private void injectGetItemsAtExtractStack(int index, int type, int size, boolean peek, + CallbackInfoReturnable cir, + ItemGroup group, ItemStack stack) { if (size == 0) { cir.setReturnValue(ItemStack.EMPTY); return; diff --git a/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinItemDolly.java b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinItemDolly.java index 1aa1afff..66db215b 100644 --- a/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinItemDolly.java +++ b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinItemDolly.java @@ -37,9 +37,9 @@ public MixinItemDolly(String name) { } @Inject(method = "onItemUse", at = @At("HEAD"), remap = false, cancellable = true) - public void injectOnItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, - EnumFacing facing, float hitX, float hitY, float hitZ, - CallbackInfoReturnable cir) { + private void injectOnItemUse(ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumHand hand, + EnumFacing facing, float hitX, float hitY, float hitZ, + CallbackInfoReturnable cir) { cir.setReturnValue(EnumActionResult.PASS); cir.cancel(); } @@ -82,20 +82,12 @@ public void injectOnItemUse(ItemStack stack, EntityPlayer player, World world, B } if (player.isCreative()) { - nbt.setBoolean("isFull", false); - nbt.removeTag("blockType"); - nbt.removeTag("isChest"); - nbt.removeTag("isStorageCore"); - nbt.removeTag("stored"); + emptyDolly(nbt); } else { ItemStack emptyDolly = heldItem.splitStack(1); NBTTagCompound emptyDollyNBT = emptyDolly.getTagCompound(); if (emptyDollyNBT != null) { - emptyDollyNBT.setBoolean("isFull", false); - emptyDollyNBT.removeTag("blockType"); - emptyDollyNBT.removeTag("isChest"); - emptyDollyNBT.removeTag("isStorageCore"); - emptyDollyNBT.removeTag("stored"); + emptyDolly(emptyDollyNBT); } emptyDolly.damageItem(1, player); @@ -124,13 +116,7 @@ public void injectOnItemUse(ItemStack stack, EntityPlayer player, World world, B return new ActionResult<>(EnumActionResult.PASS, heldItem); } - NBTTagCompound distTag = new NBTTagCompound(); NBTTagCompound storageData = tileEntity.writeToNBT(new NBTTagCompound()); - distTag.setBoolean("isFull", true); - distTag.setString("blockType", Objects.requireNonNull(state.getBlock().getRegistryName()).toString()); - distTag.setBoolean("isChest", isChest); - distTag.setBoolean("isStorageCore", isStorageCore); - distTag.setTag("stored", storageData); if (isStorageCore) { world.setBlockToAir(pos); @@ -141,23 +127,46 @@ public void injectOnItemUse(ItemStack stack, EntityPlayer player, World world, B } if (player.isCreative()) { - heldItem.setTagCompound(distTag); + fillDolly(heldItem, nbt, state, isChest, isStorageCore, storageData); } else { - ItemStack distItem = heldItem.splitStack(1); - distItem.setTagCompound(distTag); + ItemStack filledDolly = heldItem.splitStack(1); + NBTTagCompound filledDollyNBT = filledDolly.getTagCompound(); + fillDolly(filledDolly, filledDollyNBT, state, isChest, isStorageCore, storageData); if (heldItem.isEmpty()) { - return new ActionResult<>(EnumActionResult.SUCCESS, distItem); + return new ActionResult<>(EnumActionResult.SUCCESS, filledDolly); } - if (!player.addItemStackToInventory(distItem)) { - player.dropItem(distItem, false); + if (!player.addItemStackToInventory(filledDolly)) { + player.dropItem(filledDolly, false); } } } return new ActionResult<>(EnumActionResult.SUCCESS, heldItem); } + private void emptyDolly(NBTTagCompound nbt) { + nbt.setBoolean("isFull", false); + nbt.removeTag("blockType"); + nbt.removeTag("isChest"); + nbt.removeTag("isStorageCore"); + nbt.removeTag("stored"); + } + + private void fillDolly(ItemStack dolly, NBTTagCompound dollyNBT, IBlockState state, boolean isChest, + boolean isStorageCore, NBTTagCompound storageData) { + if (dollyNBT == null) { + dollyNBT = new NBTTagCompound(); + dolly.setTagCompound(dollyNBT); + } + + dollyNBT.setBoolean("isFull", true); + dollyNBT.setString("blockType", Objects.requireNonNull(state.getBlock().getRegistryName()).toString()); + dollyNBT.setBoolean("isChest", isChest); + dollyNBT.setBoolean("isStorageCore", isStorageCore); + dollyNBT.setTag("stored", storageData); + } + @Override public int getItemStackLimit(ItemStack stack) { NBTTagCompound nbt = stack.getTagCompound(); From e89f2a32de5e4f7d72013fe1aef863cdb0fe7f1a Mon Sep 17 00:00:00 2001 From: sjcl Date: Mon, 3 Jul 2023 01:04:45 +0900 Subject: [PATCH 10/15] =?UTF-8?q?Shift=E5=B7=A6=E3=83=80=E3=83=96=E3=83=AB?= =?UTF-8?q?=E3=82=AF=E3=83=AA=E3=83=83=E3=82=AF=E6=AD=A3=E5=B8=B8=E3=81=AB?= =?UTF-8?q?=E3=82=A2=E3=82=A4=E3=83=86=E3=83=A0=E3=82=92=E7=A7=BB=E5=8B=95?= =?UTF-8?q?=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ezstorage2/MixinContainerStorageCore.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCore.java b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCore.java index 08907a95..5d75349b 100644 --- a/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCore.java +++ b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCore.java @@ -3,6 +3,7 @@ import gtexpert.mixins.interfaces.ezstorage2.IMixinEZInventory; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.ClickType; import net.minecraft.inventory.Container; import net.minecraft.inventory.InventoryBasic; import net.minecraft.inventory.Slot; @@ -16,6 +17,7 @@ import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; import org.jetbrains.annotations.NotNull; @@ -28,6 +30,25 @@ public abstract class MixinContainerStorageCore extends Container { @Invoker(value = "rowCount", remap = false) protected abstract int invokeRowCount(); + @Inject(method = "slotClick", + at = @At(value = "INVOKE", + target = "Lnet/minecraft/inventory/Container;slotClick(IILnet/minecraft/inventory/ClickType;Lnet/minecraft/entity/player/EntityPlayer;)Lnet/minecraft/item/ItemStack;"), + remap = false, + locals = LocalCapture.CAPTURE_FAILHARD, + cancellable = true) + private void injectSlotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player, + CallbackInfoReturnable cir, ItemStack val) { + if (slotId != -999 && clickTypeIn == ClickType.QUICK_MOVE) { + Slot slot = this.getSlot(slotId); + if (slot.canTakeStack(player)) { + ItemStack itemStack = slot.getStack(); + ItemStack result = this.tileEntity.inventory.input(itemStack, true); + cir.setReturnValue(result.copy()); + } + cir.setReturnValue(val); + } + } + @Inject(method = "customSlotClick", at = @At(value = "HEAD"), remap = false, cancellable = true) private void injectCustomSlotClick(int slotId, int clickedButton, int mode, EntityPlayer playerIn, CallbackInfoReturnable cir) { From 405d85ffb3107ae0194072ad822d23ec2fdee9d7 Mon Sep 17 00:00:00 2001 From: sjcl Date: Sun, 9 Jul 2023 03:49:14 +0900 Subject: [PATCH 11/15] =?UTF-8?q?Shift=E5=B7=A6=E3=82=AF=E3=83=AA=E3=83=83?= =?UTF-8?q?=E3=82=AF=E3=81=A7=E3=81=BE=E3=81=A8=E3=82=81=E3=81=A6=E3=82=AF?= =?UTF-8?q?=E3=83=A9=E3=83=95=E3=83=88=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88?= =?UTF-8?q?=E3=81=86=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ezstorage2/MixinContainerStorageCore.java | 12 ++--- .../MixinContainerStorageCoreCrafting.java | 47 +++++++++++++++++++ src/main/resources/mixins.gtexpert.json | 3 +- 3 files changed, 54 insertions(+), 8 deletions(-) create mode 100644 src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCoreCrafting.java diff --git a/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCore.java b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCore.java index 5d75349b..e1f9aca7 100644 --- a/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCore.java +++ b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCore.java @@ -3,10 +3,7 @@ import gtexpert.mixins.interfaces.ezstorage2.IMixinEZInventory; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.inventory.ClickType; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.InventoryBasic; -import net.minecraft.inventory.Slot; +import net.minecraft.inventory.*; import net.minecraft.item.ItemStack; import com.zerofall.ezstorage.gui.server.ContainerStorageCore; @@ -38,14 +35,15 @@ public abstract class MixinContainerStorageCore extends Container { cancellable = true) private void injectSlotClick(int slotId, int dragType, ClickType clickTypeIn, EntityPlayer player, CallbackInfoReturnable cir, ItemStack val) { - if (slotId != -999 && clickTypeIn == ClickType.QUICK_MOVE) { + if (slotId != -999) { Slot slot = this.getSlot(slotId); - if (slot.canTakeStack(player)) { + if (!(slot instanceof SlotCrafting) && clickTypeIn == ClickType.QUICK_MOVE && slot.canTakeStack(player)) { ItemStack itemStack = slot.getStack(); ItemStack result = this.tileEntity.inventory.input(itemStack, true); + slot.onSlotChanged(); + super.detectAndSendChanges(); cir.setReturnValue(result.copy()); } - cir.setReturnValue(val); } } diff --git a/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCoreCrafting.java b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCoreCrafting.java new file mode 100644 index 00000000..17fe588c --- /dev/null +++ b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCoreCrafting.java @@ -0,0 +1,47 @@ +package gtexpert.mixins.impl.ezstorage2; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.InventoryCrafting; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; + +import com.zerofall.ezstorage.gui.server.ContainerStorageCore; +import com.zerofall.ezstorage.gui.server.ContainerStorageCoreCrafting; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Redirect; + +@Mixin(ContainerStorageCoreCrafting.class) +public class MixinContainerStorageCoreCrafting extends ContainerStorageCore { + + public MixinContainerStorageCoreCrafting(EntityPlayer player, World world, int x, int y, int z) { + super(player, world, x, y, z); + } + + @Redirect(method = "transferStackInSlot", + at = @At(value = "INVOKE", + target = "Lnet/minecraft/item/ItemStack;isItemEqual(Lnet/minecraft/item/ItemStack;)Z", + ordinal = 0), + remap = false) + private boolean redirectTransferStackInSlotIsItemEqual0(ItemStack stack, ItemStack other) { + return true; + } + + @Redirect(method = "transferStackInSlot", + at = @At(value = "INVOKE", + target = "Lnet/minecraft/item/ItemStack;isItemEqual(Lnet/minecraft/item/ItemStack;)Z", + ordinal = 1), + remap = false) + private boolean redirectTransferStackInSlotIsItemEqual1(ItemStack stack, ItemStack other) { + return false; + } + + @Redirect(method = "transferStackInSlot", + at = @At(value = "INVOKE", + target = "Lnet/minecraft/inventory/InventoryCrafting;getStackInSlot(I)Lnet/minecraft/item/ItemStack;", + ordinal = 0)) + private ItemStack redirectTransferStackInSlotGetStackInSlot(InventoryCrafting inv, int index) { + return inv.getStackInSlot(index).copy(); + } + +} diff --git a/src/main/resources/mixins.gtexpert.json b/src/main/resources/mixins.gtexpert.json index bb233a81..335d1d59 100644 --- a/src/main/resources/mixins.gtexpert.json +++ b/src/main/resources/mixins.gtexpert.json @@ -6,7 +6,8 @@ "compatibilityLevel": "JAVA_8", "mixins": [ "ezstorage2.MixinItemDolly", - "ezstorage2.MixinContainerStorageCore" + "ezstorage2.MixinContainerStorageCore", + "ezstorage2.MixinContainerStorageCoreCrafting" ], "server": [ ], From 65feb70d26b4a10f8e3dcd7c21de07deb58538ac Mon Sep 17 00:00:00 2001 From: sjcl Date: Sun, 9 Jul 2023 04:54:36 +0900 Subject: [PATCH 12/15] =?UTF-8?q?1=E3=81=A4=E3=82=88=E3=82=8A=E5=A4=9A?= =?UTF-8?q?=E3=81=84=E3=82=A2=E3=82=A4=E3=83=86=E3=83=A0=E3=82=92=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E3=81=97=E3=81=A6=E3=82=82=E6=AD=A3=E5=B8=B8=E3=81=AB?= =?UTF-8?q?=E8=A3=9C=E5=85=85=E3=81=95=E3=82=8C=E3=82=8B=E3=82=88=E3=81=86?= =?UTF-8?q?=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../MixinContainerStorageCoreCrafting.java | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCoreCrafting.java b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCoreCrafting.java index 17fe588c..bdfce07c 100644 --- a/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCoreCrafting.java +++ b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCoreCrafting.java @@ -8,8 +8,7 @@ import com.zerofall.ezstorage.gui.server.ContainerStorageCore; import com.zerofall.ezstorage.gui.server.ContainerStorageCoreCrafting; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Redirect; +import org.spongepowered.asm.mixin.injection.*; @Mixin(ContainerStorageCoreCrafting.class) public class MixinContainerStorageCoreCrafting extends ContainerStorageCore { @@ -44,4 +43,25 @@ private ItemStack redirectTransferStackInSlotGetStackInSlot(InventoryCrafting in return inv.getStackInSlot(index).copy(); } + @ModifyConstant(method = "tryToPopulateCraftingGrid", + constant = @Constant(intValue = 1), + slice = @Slice(from = @At("HEAD"), + to = @At(value = "CONSTANT", + args = "intValue=1", + ordinal = 0)), + remap = false) + private int modifyConstantTryToPopulateCraftingGrid(int original) { + return Integer.MAX_VALUE; + } + + @Redirect(method = "tryToPopulateCraftingGrid", + at = @At( + value = "INVOKE", + target = "Lnet/minecraft/item/ItemStack;setCount(I)V"), + remap = false) + private void redirectTryToPopulateCraftingGridSetCount(ItemStack itemStack, int count) { + if (itemStack.getCount() > 1) { + itemStack.setCount(itemStack.getCount() - 1); + } + } } From 652b8001fbf6f5a51f289152efff143459f1601a Mon Sep 17 00:00:00 2001 From: sjcl Date: Sun, 9 Jul 2023 05:41:43 +0900 Subject: [PATCH 13/15] =?UTF-8?q?Remap=E3=81=AE=E5=88=87=E3=82=8A=E5=BF=98?= =?UTF-8?q?=E3=82=8C=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/ezstorage2/MixinContainerStorageCoreCrafting.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCoreCrafting.java b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCoreCrafting.java index bdfce07c..fc464b14 100644 --- a/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCoreCrafting.java +++ b/src/main/java/gtexpert/mixins/impl/ezstorage2/MixinContainerStorageCoreCrafting.java @@ -38,7 +38,8 @@ private boolean redirectTransferStackInSlotIsItemEqual1(ItemStack stack, ItemSta @Redirect(method = "transferStackInSlot", at = @At(value = "INVOKE", target = "Lnet/minecraft/inventory/InventoryCrafting;getStackInSlot(I)Lnet/minecraft/item/ItemStack;", - ordinal = 0)) + ordinal = 0), + remap = false) private ItemStack redirectTransferStackInSlotGetStackInSlot(InventoryCrafting inv, int index) { return inv.getStackInSlot(index).copy(); } From 06c4aaa5235c2dcc27ba86c52f4081eac18af347 Mon Sep 17 00:00:00 2001 From: sjcl Date: Sun, 9 Jul 2023 15:02:42 +0900 Subject: [PATCH 14/15] Update dependencies.gradle --- dependencies.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dependencies.gradle b/dependencies.gradle index a4369879..16e4114d 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -64,13 +64,13 @@ dependencies { // Debug Chisel compileOnly rfg.deobf("curse.maven:chisel-235279:2915375") if (project.debug_chisel.toBoolean()) { - implementation rfg.deobf("curse.maven:chisel-235279:2915375") + runtimeOnly rfg.deobf("curse.maven:chisel-235279:2915375") } // Debug mixins compileOnly rfg.deobf("curse.maven:ez-storage2-245425:2530747") if (project.debug_mixins.toBoolean()) { - implementation rfg.deobf("curse.maven:ez-storage2-245425:2530747") + runtimeOnly rfg.deobf("curse.maven:ez-storage2-245425:2530747") } // Boot error fix From 2a2c7c9bd21430f622d7c048eb189e628e24dad6 Mon Sep 17 00:00:00 2001 From: sjcl Date: Sun, 9 Jul 2023 15:15:01 +0900 Subject: [PATCH 15/15] Revert "Update mcmod.info" This reverts commit 51906057554d3c8fb400cf21d0b7b1753044afc1. --- src/main/resources/mcmod.info | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index 9bee84e5..1435d994 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -20,8 +20,7 @@ "appliedenergistics2", "aeadditions", "endercore", - "enderio", - "ezstorage" + "enderio" ] } ]