fix: emptyShulkerBoxStack
This commit is contained in:
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
+26
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user