Skip to content

Commit 1d935e2

Browse files
committed
fail finding slot when exemplary and craft input stacks can't stack
1 parent f08fc22 commit 1d935e2

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

src/mixins/java/org/spongepowered/common/mixin/core/recipebook/ServerPlaceRecipeMixin.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,16 @@
2727
import com.llamalad7.mixinextras.injector.wrapoperation.Operation;
2828
import com.llamalad7.mixinextras.injector.wrapoperation.WrapOperation;
2929
import com.llamalad7.mixinextras.sugar.Local;
30+
import net.minecraft.core.Holder;
3031
import net.minecraft.recipebook.ServerPlaceRecipe;
3132
import net.minecraft.world.entity.player.Inventory;
3233
import net.minecraft.world.entity.player.StackedItemContents;
3334
import net.minecraft.world.inventory.Slot;
35+
import net.minecraft.world.item.Item;
3436
import net.minecraft.world.item.ItemStack;
3537
import net.minecraft.world.item.crafting.RecipeHolder;
3638
import org.spongepowered.asm.mixin.Mixin;
3739
import org.spongepowered.asm.mixin.injection.At;
38-
import org.spongepowered.asm.mixin.injection.ModifyArg;
3940
import org.spongepowered.common.bridge.world.item.crafting.PlacementInfoBridge;
4041
import org.spongepowered.common.item.recipe.crafting.SpongeStackedItemContents;
4142

@@ -74,14 +75,25 @@ public abstract class ServerPlaceRecipeMixin {
7475
: original.call();
7576
}
7677

77-
@ModifyArg(
78+
@WrapOperation(
7879
method = "moveItemToGrid",
7980
at = @At(
8081
value = "INVOKE",
8182
target = "Lnet/minecraft/world/entity/player/Inventory;findSlotMatchingCraftingIngredient(Lnet/minecraft/core/Holder;Lnet/minecraft/world/item/ItemStack;)I"
8283
)
8384
)
84-
private ItemStack impl$adjustMatchingSlotFinder(final ItemStack craftInputStack) {
85-
return this.impl$stackList.isEmpty() ? craftInputStack : this.impl$stackList.poll();
85+
private int impl$adjustMatchingSlotFinder(
86+
final Inventory instance, final Holder<Item> exemplaryItem, final ItemStack craftInputStack,
87+
final Operation<Integer> original
88+
) {
89+
if (this.impl$stackList.isEmpty()) {
90+
return original.call(instance, exemplaryItem, craftInputStack);
91+
} else {
92+
final ItemStack input = this.impl$stackList.poll();
93+
if (!craftInputStack.isEmpty() && !ItemStack.isSameItemSameComponents(craftInputStack, input)) {
94+
return -1;
95+
}
96+
return original.call(instance, exemplaryItem, input);
97+
}
8698
}
8799
}

0 commit comments

Comments
 (0)