Skip to content

Commit

Permalink
Fix #1
Browse files Browse the repository at this point in the history
  • Loading branch information
kikugie committed Aug 18, 2024
1 parent 65258a1 commit 2134290
Show file tree
Hide file tree
Showing 7 changed files with 70 additions and 25 deletions.
4 changes: 2 additions & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ yarn_mappings=1.21+build.2
loader_version=0.15.11

# Mod Properties
mod_version=1.1
mod_version=1.3
maven_group=dev.kikugie
archives_base_name=shulkerfix

# Dependencies
lithium=mc1.21-0.12.7
lithium=mc1.21-0.13.0
carpet=5425253
6 changes: 3 additions & 3 deletions src/main/java/dev/kikugie/shulkerfix/Util.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import net.minecraft.item.ItemStack;

public class Util {
public static boolean isShulkerBox(ItemStack stack) {
return stack.getItem() instanceof BlockItem blockItem && blockItem.getBlock() instanceof ShulkerBoxBlock;
}
public static boolean isShulkerBox(ItemStack stack) {
return stack.getItem() instanceof BlockItem blockItem && blockItem.getBlock() instanceof ShulkerBoxBlock;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,28 @@
@Debug(export = true)
@Mixin(HopperBlockEntity.class)
public class HopperBlockEntityMixin {
@WrapOperation(method = "isFull", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;getMaxCount()I"))
private int modifyShulkerMaxCount(ItemStack instance, Operation<Integer> original) {
return Util.isShulkerBox(instance) ? instance.getCount() : original.call(instance);
}
@WrapOperation(
method = "isFull",
at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;getMaxCount()I")
)
private int modifyShulkerMaxCount(ItemStack instance, Operation<Integer> original) {
return Util.isShulkerBox(instance) ? instance.getCount() : original.call(instance);
}

@WrapOperation(method = "isInventoryFull", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;getMaxCount()I"))
private static int modifyShulkerMaxCountStatic(ItemStack instance, Operation<Integer> original) {
return Util.isShulkerBox(instance) ? 1 : original.call(instance);
}
@WrapOperation(
method = "isInventoryFull",
at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;getMaxCount()I")
)
private static int modifyShulkerMaxCountStatic(ItemStack instance, Operation<Integer> original) {
return Util.isShulkerBox(instance) ? 1 : original.call(instance);
}

@Inject(method = "canMergeItems", at = @At("HEAD"), cancellable = true)
private static void cancelItemMerging(ItemStack first, ItemStack second, CallbackInfoReturnable<Boolean> cir) {
if (Util.isShulkerBox(first) || Util.isShulkerBox(second)) cir.setReturnValue(false);
}
@Inject(
method = "canMergeItems",
at = @At("HEAD"),
cancellable = true
)
private static void cancelItemMerging(ItemStack first, ItemStack second, CallbackInfoReturnable<Boolean> cir) {
if (Util.isShulkerBox(first) || Util.isShulkerBox(second)) cir.setReturnValue(false);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,17 @@
@Pseudo
@Mixin(value = HopperHelper.class)
public class LithiumHopperHelperMixin {
@WrapOperation(method = {"tryMoveSingleItem(Lnet/minecraft/inventory/Inventory;Lnet/minecraft/inventory/SidedInventory;Lnet/minecraft/item/ItemStack;ILnet/minecraft/util/math/Direction;)Z", "determineComparatorUpdatePattern"}, at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;getMaxCount()I"))
private static int modifyShulkerMaxCount(ItemStack instance, Operation<Integer> original) {
return Util.isShulkerBox(instance) ? 1 : original.call(instance);
}
@SuppressWarnings("UnresolvedMixinReference")
@WrapOperation(
method = {
"determineComparatorUpdatePattern",
// Lithium <0.13 compat
"tryMoveSingleItem(Lnet/minecraft/inventoryay/Inventory;Lnet/minecraft/inventory/SidedInventory;Lnet/minecraft/item/ItemStack;ILnet/minecraft/util/math/Direction;)Z",
"tryMoveSingleItem(Lnet/minecraft/inventory/Inventory;Lnet/minecraft/inventory/SidedInventory;Lnet/minecraft/item/ItemStack;Lnet/minecraft/item/ItemStack;ILnet/minecraft/util/math/Direction;)Z"
},
at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;getMaxCount()I")
)
private static int modifyShulkerMaxCount(ItemStack instance, Operation<Integer> original) {
return Util.isShulkerBox(instance) ? 1 : original.call(instance);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package dev.kikugie.shulkerfix.mixin;

import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
import dev.kikugie.shulkerfix.Util;
import me.jellysquid.mods.lithium.common.hopper.LithiumStackList;
import net.minecraft.item.ItemStack;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.injection.At;

@Pseudo
@Mixin(LithiumStackList.class)
public class LithiumStackListMixin {
@WrapOperation(
method = "calculateSignalStrength",
at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;getMaxCount()I")
)
private int get1(ItemStack instance, Operation<Integer> original) {
return Util.isShulkerBox(instance) ? 1 : original.call(instance);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,11 @@

@Mixin(ScreenHandler.class)
public class ScreenHandlerMixin {
@WrapOperation(method = "calculateComparatorOutput(Lnet/minecraft/inventory/Inventory;)I", at = @At(value = "INVOKE", target = "Lnet/minecraft/inventory/Inventory;getMaxCount(Lnet/minecraft/item/ItemStack;)I"))
private static int get1(Inventory instance, ItemStack stack, Operation<Integer> original) {
return Util.isShulkerBox(stack) ? 1 : original.call(instance, stack);
}
@WrapOperation(
method = "calculateComparatorOutput(Lnet/minecraft/inventory/Inventory;)I",
at = @At(value = "INVOKE", target = "Lnet/minecraft/inventory/Inventory;getMaxCount(Lnet/minecraft/item/ItemStack;)I")
)
private static int get1(Inventory instance, ItemStack stack, Operation<Integer> original) {
return Util.isShulkerBox(stack) ? 1 : original.call(instance, stack);
}
}
1 change: 1 addition & 0 deletions src/main/resources/shulkerfix.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
"mixins": [
"HopperBlockEntityMixin",
"LithiumHopperHelperMixin",
"LithiumStackListMixin",
"ScreenHandlerMixin"
],
"injectors": {
Expand Down

0 comments on commit 2134290

Please sign in to comment.