fix: emptyShulkerBoxStack

This commit is contained in:
zly2006 committed 2024-07-11 12:14:02 +08:00
1 parent 4ba41aaf42
commit 68c8482eee
9 files changed
+132 -94

No files matched your search

@@ -0,0 +1,23 @@
package com.github.zly2006.carpetslsaddition.mixin.shulker;
import com.github.zly2006.carpetslsaddition.SLSCarpetSettings;
import com.github.zly2006.carpetslsaddition.util.ShulkerBoxItemUtil;
import net.minecraft.item.ItemStack;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(ItemStack.class)
public class MixinItemStack {
@Inject(
method = "getMaxCount",
at = @At("HEAD"),
cancellable = true
)
private void getMaxCount(CallbackInfoReturnable<Integer> cir) {
if (SLSCarpetSettings.emptyShulkerBoxStack && ShulkerBoxItemUtil.isEmptyShulkerBoxItem((ItemStack) (Object) this)) {
cir.setReturnValue(ShulkerBoxItemUtil.SHULKERBOX_MAX_STACK_AMOUNT);
}
}
}
@@ -0,0 +1,26 @@
package com.github.zly2006.carpetslsaddition.mixin.shulker;
import com.github.zly2006.carpetslsaddition.util.ShulkerBoxItemUtil;
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import net.minecraft.item.ItemStack;
import net.minecraft.screen.ScreenHandler;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
@Mixin(ScreenHandler.class)
public abstract class MixinScreenHandler {
@WrapOperation(
method = "internalOnSlotClick",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/item/ItemStack;areItemsAndComponentsEqual(Lnet/minecraft/item/ItemStack;Lnet/minecraft/item/ItemStack;)Z"
)
)
private boolean checkEqual(ItemStack stack, ItemStack otherStack, Operation<Boolean> original) {
if (ShulkerBoxItemUtil.shulkerBoxEqual(stack, otherStack)) {
return true;
}
return original.call(stack, otherStack);
}
}
@@ -0,0 +1,33 @@
package com.github.zly2006.carpetslsaddition.mixin.shulker;
import com.github.zly2006.carpetslsaddition.SLSCarpetSettings;
import com.github.zly2006.carpetslsaddition.util.ShulkerBoxItemUtil;
import me.fallenbreath.conditionalmixin.api.annotation.Condition;
import me.fallenbreath.conditionalmixin.api.annotation.Restriction;
import net.minecraft.item.ItemStack;
import net.minecraft.screen.slot.Slot;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Redirect;
@Restriction(
conflict = @Condition("pca")
)
@Mixin(Slot.class)
public class MixinSlot {
@Redirect(
method = "getMaxItemCount(Lnet/minecraft/item/ItemStack;)I",
at = @At(
value = "INVOKE",
target = "Lnet/minecraft/item/ItemStack;getMaxCount()I",
ordinal = 0
)
)
private int getMaxItemCount(ItemStack itemStack) {
if (SLSCarpetSettings.emptyShulkerBoxStack && ShulkerBoxItemUtil.isEmptyShulkerBoxItem(itemStack)) {
return ShulkerBoxItemUtil.SHULKERBOX_MAX_STACK_AMOUNT;
} else {
return itemStack.getMaxCount();
}
}
}