Skip to content

Commit 0c8e757

Browse files
committed
Several cleanup to turtle crafting upgrade
- Don't construct a fake player when crafting: vanilla now has its own automated crafting, so no longer requires the presence of a player. - Fix remainder stack not being set in some situations. Closes #2007.
1 parent f39e86b commit 0c8e757

File tree

6 files changed

+5
-71
lines changed

6 files changed

+5
-71
lines changed

Diff for: projects/common/src/main/java/dan200/computercraft/shared/platform/PlatformHelper.java

-22
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@
3333
import net.minecraft.world.item.DyeColor;
3434
import net.minecraft.world.item.Item;
3535
import net.minecraft.world.item.ItemStack;
36-
import net.minecraft.world.item.crafting.CraftingInput;
37-
import net.minecraft.world.item.crafting.Recipe;
3836
import net.minecraft.world.level.Level;
3937
import net.minecraft.world.level.block.entity.BlockEntity;
4038
import net.minecraft.world.level.block.state.BlockState;
@@ -216,26 +214,6 @@ default void invalidateComponent(BlockEntity owner) {
216214
*/
217215
ItemStack getCraftingRemainingItem(ItemStack stack);
218216

219-
/**
220-
* A more general version of {@link #getCraftingRemainingItem(ItemStack)} which gets all remaining items for a
221-
* recipe.
222-
*
223-
* @param player The player performing the crafting.
224-
* @param recipe The recipe currently doing the crafting.
225-
* @param container The crafting container.
226-
* @return A list of items to return to the player after crafting.
227-
*/
228-
List<ItemStack> getRecipeRemainingItems(ServerPlayer player, Recipe<CraftingInput> recipe, CraftingInput container);
229-
230-
/**
231-
* Fire an event after crafting has occurred.
232-
*
233-
* @param player The player performing the crafting.
234-
* @param container The current crafting container.
235-
* @param stack The resulting stack from crafting.
236-
*/
237-
void onItemCrafted(ServerPlayer player, CraftingInput container, ItemStack stack);
238-
239217
/**
240218
* Check whether we should notify neighbours in a particular direction.
241219
*

Diff for: projects/common/src/main/java/dan200/computercraft/shared/turtle/core/TurtleCraftCommand.java

+1
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ public TurtleCommandResult execute(ITurtleAccess turtle) {
2626

2727
// Store or drop any remainders
2828
for (var stack : results) TurtleUtil.storeItemOrDrop(turtle, stack);
29+
turtle.getInventory().setChanged();
2930

3031
if (!results.isEmpty()) turtle.playAnimation(TurtleAnimation.WAIT);
3132
return TurtleCommandResult.success();

Diff for: projects/common/src/main/java/dan200/computercraft/shared/turtle/upgrades/TurtleInventoryCrafting.java

+4-10
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,7 @@
55
package dan200.computercraft.shared.turtle.upgrades;
66

77
import dan200.computercraft.api.turtle.ITurtleAccess;
8-
import dan200.computercraft.shared.platform.PlatformHelper;
98
import dan200.computercraft.shared.turtle.blocks.TurtleBlockEntity;
10-
import dan200.computercraft.shared.turtle.core.TurtlePlayer;
119
import net.minecraft.server.level.ServerLevel;
1210
import net.minecraft.world.Container;
1311
import net.minecraft.world.item.ItemStack;
@@ -82,18 +80,15 @@ public static List<ItemStack> craft(ITurtleAccess turtle, int maxCount) {
8280
var xStart = candidate.xStart();
8381
var yStart = candidate.yStart();
8482

85-
var player = TurtlePlayer.get(turtle).player();
86-
8783
var results = new ArrayList<ItemStack>();
8884
for (var i = 0; i < maxCount && recipe.matches(input, level); i++) {
8985
var result = recipe.assemble(input, level.registryAccess());
9086
if (result.isEmpty()) break;
9187
results.add(result);
9288

93-
result.onCraftedBy(level, player, result.getCount());
94-
PlatformHelper.get().onItemCrafted(player, input, result);
89+
result.onCraftedBySystem(level);
9590

96-
var remainders = PlatformHelper.get().getRecipeRemainingItems(player, recipe, input);
91+
var remainders = recipe.getRemainingItems(input);
9792
for (var y = 0; y < input.height(); y++) {
9893
for (var x = 0; x < input.width(); x++) {
9994
var slot = xStart + x + (y + yStart) * TurtleBlockEntity.INVENTORY_WIDTH;
@@ -110,10 +105,9 @@ public static List<ItemStack> craft(ITurtleAccess turtle, int maxCount) {
110105
// Either update the current stack or add it to the remainder list (to be inserted into the inventory
111106
// afterwards).
112107
if (existing.isEmpty()) {
113-
inventory.setItem(slot, existing);
114-
} else if (ItemStack.isSameItemSameComponents(existing, remainder)) {
115-
remainder.grow(existing.getCount());
116108
inventory.setItem(slot, remainder);
109+
} else if (ItemStack.isSameItemSameComponents(existing, remainder)) {
110+
existing.grow(remainder.getCount());
117111
} else {
118112
results.add(remainder);
119113
}

Diff for: projects/common/src/test/java/dan200/computercraft/TestPlatformHelper.java

-12
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,6 @@
3434
import net.minecraft.world.item.CreativeModeTab;
3535
import net.minecraft.world.item.Item;
3636
import net.minecraft.world.item.ItemStack;
37-
import net.minecraft.world.item.crafting.CraftingInput;
38-
import net.minecraft.world.item.crafting.Recipe;
3937
import net.minecraft.world.level.Level;
4038
import net.minecraft.world.level.block.entity.BlockEntity;
4139
import net.minecraft.world.level.block.state.BlockState;
@@ -160,16 +158,6 @@ public ContainerTransfer getContainer(ServerLevel level, BlockPos pos, Direction
160158
throw new UnsupportedOperationException("Cannot interact with the world inside tests");
161159
}
162160

163-
@Override
164-
public List<ItemStack> getRecipeRemainingItems(ServerPlayer player, Recipe<CraftingInput> recipe, CraftingInput container) {
165-
throw new UnsupportedOperationException("Cannot query recipes inside tests");
166-
}
167-
168-
@Override
169-
public void onItemCrafted(ServerPlayer player, CraftingInput container, ItemStack stack) {
170-
throw new UnsupportedOperationException("Cannot interact with the world inside tests");
171-
}
172-
173161
@Override
174162
public String getInstalledVersion() {
175163
return "1.0";

Diff for: projects/fabric/src/main/java/dan200/computercraft/shared/platform/PlatformHelperImpl.java

-11
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,7 @@
5555
import net.minecraft.world.inventory.MenuType;
5656
import net.minecraft.world.item.*;
5757
import net.minecraft.world.item.context.UseOnContext;
58-
import net.minecraft.world.item.crafting.CraftingInput;
5958
import net.minecraft.world.item.crafting.Ingredient;
60-
import net.minecraft.world.item.crafting.Recipe;
6159
import net.minecraft.world.level.Level;
6260
import net.minecraft.world.level.block.entity.BlockEntity;
6361
import net.minecraft.world.level.block.state.BlockState;
@@ -197,15 +195,6 @@ public ItemStack getCraftingRemainingItem(ItemStack stack) {
197195
return stack.getRecipeRemainder();
198196
}
199197

200-
@Override
201-
public List<ItemStack> getRecipeRemainingItems(ServerPlayer player, Recipe<CraftingInput> recipe, CraftingInput container) {
202-
return recipe.getRemainingItems(container);
203-
}
204-
205-
@Override
206-
public void onItemCrafted(ServerPlayer player, CraftingInput container, ItemStack stack) {
207-
}
208-
209198
@Override
210199
public boolean onNotifyNeighbour(Level level, BlockPos pos, BlockState block, Direction direction) {
211200
return true;

Diff for: projects/forge/src/main/java/dan200/computercraft/shared/platform/PlatformHelperImpl.java

-16
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
import dan200.computercraft.api.peripheral.PeripheralCapability;
1616
import dan200.computercraft.impl.Peripherals;
1717
import dan200.computercraft.shared.config.ConfigFile;
18-
import dan200.computercraft.shared.container.ListContainer;
1918
import dan200.computercraft.shared.network.container.ContainerData;
2019
import dan200.computercraft.shared.util.InventoryUtil;
2120
import net.minecraft.commands.synchronization.ArgumentTypeInfo;
@@ -42,9 +41,7 @@
4241
import net.minecraft.world.item.Item;
4342
import net.minecraft.world.item.ItemStack;
4443
import net.minecraft.world.item.context.UseOnContext;
45-
import net.minecraft.world.item.crafting.CraftingInput;
4644
import net.minecraft.world.item.crafting.Ingredient;
47-
import net.minecraft.world.item.crafting.Recipe;
4845
import net.minecraft.world.level.Level;
4946
import net.minecraft.world.level.block.entity.BlockEntity;
5047
import net.minecraft.world.level.block.state.BlockState;
@@ -192,19 +189,6 @@ public ItemStack getCraftingRemainingItem(ItemStack stack) {
192189
return stack.getCraftingRemainingItem();
193190
}
194191

195-
@Override
196-
public List<ItemStack> getRecipeRemainingItems(ServerPlayer player, Recipe<CraftingInput> recipe, CraftingInput container) {
197-
CommonHooks.setCraftingPlayer(player);
198-
var result = recipe.getRemainingItems(container);
199-
CommonHooks.setCraftingPlayer(null);
200-
return result;
201-
}
202-
203-
@Override
204-
public void onItemCrafted(ServerPlayer player, CraftingInput container, ItemStack stack) {
205-
EventHooks.firePlayerCraftingEvent(player, stack, new ListContainer(container.items()));
206-
}
207-
208192
@Override
209193
public boolean onNotifyNeighbour(Level level, BlockPos pos, BlockState block, Direction direction) {
210194
return !EventHooks.onNeighborNotify(level, pos, block, EnumSet.of(direction), false).isCanceled();

0 commit comments

Comments
 (0)