Skip to content

Commit 04916f0

Browse files
committed
Fix small recipes with reusable items failing, Closes #42
1 parent 36dce3a commit 04916f0

4 files changed

Lines changed: 51 additions & 4 deletions

File tree

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ curseforge_project_id=233151
2121
modrinth_project_id=GTi2kHAW
2222

2323
# Fabric
24-
fabric_version=0.102.1+1.21.1
25-
fabric_loader_version=0.15.11
24+
fabric_version=0.110.0+1.21.1
25+
fabric_loader_version=0.16.7
2626
# Dependencies
2727
fabric_forgeconfigapiport_version=21.1.0
2828

loader-common/src/main/java/org/cyclops/structuredcrafting/craft/WorldCraftingMatrix.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -216,14 +216,17 @@ public ItemStack getOutput(Level level) {
216216
*/
217217
public boolean handleRemainingItems(Level level, Direction inputSide, boolean simulate) {
218218
Recipe recipe = getRecipe(level);
219-
CraftingInput craftInput = inventoryCrafting.asCraftInput();
219+
CraftingInput.Positioned craftInputPositioned = inventoryCrafting.asPositionedCraftInput();
220+
CraftingInput craftInput = craftInputPositioned.input();
221+
int left = craftInputPositioned.left();
222+
int top = craftInputPositioned.top();
220223
NonNullList<ItemStack> remainingStacks = recipe.getRemainingItems(craftInput);
221224
for(int r = 0; r < 3; r++) {
222225
for(int c = 0; c < 3; c++) {
223226
int i = r * 3 + c;
224227

225228
ItemStack originalStack = inventoryCrafting.getItem(i);
226-
ItemStack remainingStack = r < craftInput.width() && c < craftInput.height() ? remainingStacks.get(r * craftInput.height() + c) : ItemStack.EMPTY;
229+
ItemStack remainingStack = r >= top && r < craftInput.width() && c >= left && c < craftInput.height() ? remainingStacks.get((r - top) * craftInput.height() + c - left) : ItemStack.EMPTY;
227230
if(originalStack != null && !originalStack.isEmpty()) {
228231
if (providers[i] != null) {
229232
// Consume one item from input

loader-common/src/main/java/org/cyclops/structuredcrafting/gametest/GameTestsCommon.java

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import net.minecraft.world.InteractionHand;
88
import net.minecraft.world.entity.player.Player;
99
import net.minecraft.world.item.ItemStack;
10+
import net.minecraft.world.item.Items;
1011
import net.minecraft.world.level.GameType;
1112
import net.minecraft.world.level.block.Blocks;
1213
import net.minecraft.world.level.block.entity.ChestBlockEntity;
@@ -235,6 +236,46 @@ public void testCraftFromChestsToChestStairs(GameTestHelper helper) {
235236
});
236237
}
237238

239+
@GameTest(template = TEMPLATE_EMPTY)
240+
public void testCraftFromChestsToChestCakeReusable(GameTestHelper helper) {
241+
helper.setBlock(POS.offset(2, 2, 2), RegistryEntries.BLOCK_STRUCTURED_CRAFTER.value()
242+
.defaultBlockState()
243+
.setValue(BlockStructuredCrafter.FACING, Direction.NORTH));
244+
245+
// Define inputs
246+
setChestWithItem(helper, POS.offset(3, 3, 3), new ItemStack(Items.MILK_BUCKET));
247+
setChestWithItem(helper, POS.offset(2, 3, 3), new ItemStack(Items.MILK_BUCKET));
248+
setChestWithItem(helper, POS.offset(1, 3, 3), new ItemStack(Items.MILK_BUCKET));
249+
setChestWithItem(helper, POS.offset(3, 2, 3), new ItemStack(Items.SUGAR));
250+
setChestWithItem(helper, POS.offset(2, 2, 3), new ItemStack(Items.EGG));
251+
setChestWithItem(helper, POS.offset(1, 2, 3), new ItemStack(Items.SUGAR));
252+
setChestWithItem(helper, POS.offset(3, 1, 3), new ItemStack(Items.WHEAT));
253+
setChestWithItem(helper, POS.offset(2, 1, 3), new ItemStack(Items.WHEAT));
254+
setChestWithItem(helper, POS.offset(1, 1, 3), new ItemStack(Items.WHEAT));
255+
256+
// Set output chest
257+
helper.setBlock(POS.offset(2, 2, 1), Blocks.CHEST);
258+
259+
// Activate crafter
260+
helper.setBlock(POS.offset(1, 2, 2), Blocks.REDSTONE_BLOCK);
261+
262+
helper.succeedWhen(() -> {
263+
// Result
264+
assertChestContains(helper, POS.offset(2, 2, 1), new ItemStack(Blocks.CAKE));
265+
266+
// Inputs must be consumed
267+
assertChestContains(helper, POS.offset(3, 3, 3), new ItemStack(Items.BUCKET));
268+
assertChestContains(helper, POS.offset(2, 3, 3), new ItemStack(Items.BUCKET));
269+
assertChestContains(helper, POS.offset(1, 3, 3), new ItemStack(Items.BUCKET));
270+
assertChestEmpty(helper, POS.offset(3, 2, 3));
271+
assertChestEmpty(helper, POS.offset(2, 2, 3));
272+
assertChestEmpty(helper, POS.offset(1, 2, 3));
273+
assertChestEmpty(helper, POS.offset(3, 1, 3));
274+
assertChestEmpty(helper, POS.offset(2, 1, 3));
275+
assertChestEmpty(helper, POS.offset(1, 1, 3));
276+
});
277+
}
278+
238279
protected void setChestWithItem(GameTestHelper helper, BlockPos pos, ItemStack itemStack) {
239280
helper.setBlock(pos, Blocks.CHEST);
240281
ChestBlockEntity chest = helper.getBlockEntity(pos);

loader-fabric/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ dependencies {
2121
}
2222

2323
modApi "fuzs.forgeconfigapiport:forgeconfigapiport-fabric:${fabric_forgeconfigapiport_version}"
24+
25+
// modImplementation files("libs/moonlight-1.21-2.18.13-fabric.jar")
26+
// modImplementation files("libs/supplementaries-1.21-3.1.7-fabric.jar")
2427
}
2528

2629
task publishCurseForge(type: TaskPublishCurseForge) {

0 commit comments

Comments
 (0)