Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -722,6 +722,10 @@ public class FixesConfig {
@Config.DefaultBoolean(true)
public static boolean fixExtraUtilitiesFilingCabinetDupe;

@Config.Comment("Fixes shift clicking items from filing cabinets voiding what was left down to a stack")
@Config.DefaultBoolean(true)
public static boolean fixExtraUtilitiesFilingCabinetShiftClick;

@Config.Comment("Prevent hotkeying other items onto item filters while they are open")
@Config.DefaultBoolean(true)
public static boolean fixExtraUtilitiesFilterDupe;
Expand Down
7 changes: 6 additions & 1 deletion src/main/java/com/mitchej123/hodgepodge/mixins/Mixins.java
Original file line number Diff line number Diff line change
Expand Up @@ -1843,10 +1843,15 @@ public enum Mixins implements IMixins {
.addRequiredMod(TargetedMod.EXTRA_UTILITIES)
.setPhase(Phase.LATE)),
FIX_FILING_CABINET_DUPE(new MixinBuilder("Caps hotkey'd stacks to their maximum stack size in filing cabinets")
.addCommonMixins("extrautilities.MixinContainerFilingCabinet")
.addCommonMixins("extrautilities.MixinContainerFilingCabinetDupe")
.setApplyIf(() -> FixesConfig.fixExtraUtilitiesFilingCabinetDupe)
.addRequiredMod(TargetedMod.EXTRA_UTILITIES)
.setPhase(Phase.LATE)),
FIX_FILING_CABINET_VOIDING(new MixinBuilder("Fixes shift clicking items from filing cabinets voiding what was left down to a stack")
.addCommonMixins("extrautilities.MixinContainerFilingCabinetShiftClick")
.setApplyIf(() -> FixesConfig.fixExtraUtilitiesFilingCabinetShiftClick)
.addRequiredMod(TargetedMod.EXTRA_UTILITIES)
.setPhase(Phase.LATE)),
FIX_FILTER_DUPE(new MixinBuilder("Prevent hotkeying other items onto item filters while they are open")
.addCommonMixins("extrautilities.MixinContainerFilter")
.setApplyIf(() -> FixesConfig.fixExtraUtilitiesFilterDupe)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@
import invtweaks.api.container.ContainerSection;

@Mixin(value = ContainerFilingCabinet.class)
public abstract class MixinContainerFilingCabinet extends Container {
public abstract class MixinContainerFilingCabinetDupe extends Container {

@Shadow(remap = false)
public abstract Map<ContainerSection, List<Slot>> getSlots();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package com.mitchej123.hodgepodge.mixins.late.extrautilities;

import net.minecraft.inventory.Container;
import net.minecraft.item.ItemStack;

import org.spongepowered.asm.lib.Opcodes;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyArg;
import org.spongepowered.asm.mixin.injection.Redirect;

import com.llamalad7.mixinextras.sugar.Local;
import com.rwtema.extrautils.gui.ContainerFilingCabinet;

@Mixin(value = ContainerFilingCabinet.class)
public abstract class MixinContainerFilingCabinetShiftClick extends Container {
// The original code created a temp ItemStack, but still modified the original ItemStack's size before checking if
// the transfer could go through

// modify temp ItemStack's size instead of original ItemStack
@Redirect(
method = "transferStackInSlot",
at = @At(
value = "FIELD",
target = "Lnet/minecraft/item/ItemStack;stackSize:I",
opcode = Opcodes.PUTFIELD,
ordinal = 0))
private void hodgepodge$modifyTempVariableStackSize(ItemStack itemstack1, int m,
@Local(name = "itemstack") ItemStack itemstack) {
itemstack.stackSize = m;
}

// use temp ItemStack in the merge function instead of the original
@ModifyArg(
method = "transferStackInSlot",
at = @At(
value = "INVOKE",
target = "Lcom/rwtema/extrautils/gui/ContainerFilingCabinet;mergeItemStack(Lnet/minecraft/item/ItemStack;IIZ)Z",
ordinal = 0))
private ItemStack hodgepodge$mergeItemStackWithTempVariable(ItemStack itemstack1,
@Local(name = "itemstack") ItemStack itemstack) {
return itemstack;
}

// since mergeItemStack sets the size of the ItemStack to 0, use the outer "m" variable to decrease the original
// ItemStack's size
@Redirect(
method = "transferStackInSlot",
at = @At(
value = "FIELD",
target = "Lnet/minecraft/item/ItemStack;stackSize:I",
opcode = Opcodes.PUTFIELD,
ordinal = 1))
private void hodgepodge$decreaseStackSizeCorrectly(ItemStack itemstack1, int m, @Local(name = "m") int m_outer) {
itemstack1.stackSize -= m_outer;
}
}