1
0
mirror of https://github.com/SquidDev-CC/CC-Tweaked synced 2025-05-24 10:14:10 +00:00

Add a test for turtle upgrade crafting

Every few years I get confused about which side turtle upgrades go on
when crafting. The fact that it's flipped always throws me! Let's add a
comment to the recipe, and add some tests to reassure myself.
This commit is contained in:
Jonathan Coates 2025-05-10 14:35:26 +01:00
parent 947001104d
commit 4344c3072f
No known key found for this signature in database
GPG Key ID: B9E431FF07C98D06
3 changed files with 82 additions and 2 deletions

View File

@ -111,7 +111,9 @@ public final class TurtleUpgradeRecipe extends CustomRecipe {
itemTurtle.getUpgradeWithData(turtle, TurtleSide.RIGHT),
};
// Get the upgrades for the new items
// Get the upgrades for the new items.
// Note: because the turtle is facing towards us, the directions are flipped. Items placed to the left
// of the turtle, are equipped on its right (and vice versa).
var items = new ItemStack[]{ rightItem, leftItem };
for (var i = 0; i < 2; i++) {
if (!items[i].isEmpty()) {

View File

@ -29,7 +29,7 @@ public class ItemStackMatcher extends TypeSafeMatcher<ItemStack> {
@Override
protected void describeMismatchSafely(ItemStack item, Description description) {
description.appendText("was ").appendValue(stack).appendValue(stack.getTag());
description.appendText("was ").appendValue(item).appendValue(item.getTag());
}
public static Matcher<ItemStack> isStack(ItemStack stack) {

View File

@ -29,6 +29,7 @@ import dan200.computercraft.shared.util.WaterloggableHelpers
import dan200.computercraft.test.core.assertArrayEquals
import dan200.computercraft.test.core.computer.LuaTaskContext
import dan200.computercraft.test.core.computer.getApi
import dan200.computercraft.test.shared.ItemStackMatcher.isStack
import net.minecraft.core.BlockPos
import net.minecraft.gametest.framework.GameTest
import net.minecraft.gametest.framework.GameTestHelper
@ -908,6 +909,83 @@ class Turtle_Test {
thenWaitUntil { helper.assertContainerEmpty(BlockPos(2, 3, 2)) }
}
/**
* Test that turtles can be crafted with upgrades.
*/
@GameTest(template = Structures.DEFAULT)
fun Can_upgrades_be_crafted(helper: GameTestHelper) = helper.immediate {
fun turtle(left: UpgradeData<ITurtleUpgrade>? = null, right: UpgradeData<ITurtleUpgrade>? = null): ItemStack =
ModRegistry.Items.TURTLE_NORMAL.get()
.create(-1, null, -1, left, right, 0, null)
val pick = TurtleUpgrades.instance().get(ItemStack(Items.DIAMOND_PICKAXE))!!
val sword = TurtleUpgrades.instance().get(ItemStack(Items.DIAMOND_SWORD))!!
// Check we can craft with upgrades
assertThat(
"Craft with item on left equips on right",
helper.craftItem(
ItemStack(Items.DIAMOND_PICKAXE), turtle(), ItemStack.EMPTY,
ItemStack.EMPTY, ItemStack.EMPTY, ItemStack.EMPTY,
ItemStack.EMPTY, ItemStack.EMPTY, ItemStack.EMPTY,
),
isStack(turtle(right = pick)),
)
assertThat(
"Craft with item on right equips on left",
helper.craftItem(
ItemStack.EMPTY, turtle(), ItemStack(Items.DIAMOND_PICKAXE),
ItemStack.EMPTY, ItemStack.EMPTY, ItemStack.EMPTY,
ItemStack.EMPTY, ItemStack.EMPTY, ItemStack.EMPTY,
),
isStack(turtle(left = pick)),
)
assertThat(
"Craft with two items",
helper.craftItem(
ItemStack(Items.DIAMOND_SWORD), turtle(), ItemStack(Items.DIAMOND_PICKAXE),
ItemStack.EMPTY, ItemStack.EMPTY, ItemStack.EMPTY,
ItemStack.EMPTY, ItemStack.EMPTY, ItemStack.EMPTY,
),
isStack(turtle(left = pick, right = sword)),
)
assertThat(
"Maintains upgrades",
helper.craftItem(
ItemStack(Items.DIAMOND_SWORD), turtle(left = pick), ItemStack.EMPTY,
ItemStack.EMPTY, ItemStack.EMPTY, ItemStack.EMPTY,
ItemStack.EMPTY, ItemStack.EMPTY, ItemStack.EMPTY,
),
isStack(turtle(left = pick, right = sword)),
)
// Cannot craft when already have item
helper.assertNotCraftable(
ItemStack.EMPTY, turtle(left = sword), ItemStack(Items.DIAMOND_PICKAXE),
ItemStack.EMPTY, ItemStack.EMPTY, ItemStack.EMPTY,
ItemStack.EMPTY, ItemStack.EMPTY, ItemStack.EMPTY,
)
// Cannot craft with an invalid upgrade
helper.assertNotCraftable(
ItemStack.EMPTY, turtle(), ItemStack(Items.DIRT),
ItemStack.EMPTY, ItemStack.EMPTY, ItemStack.EMPTY,
ItemStack.EMPTY, ItemStack.EMPTY, ItemStack.EMPTY,
)
// Cannot craft with extra items in the inventory
helper.assertNotCraftable(
ItemStack.EMPTY, ItemStack.EMPTY, ItemStack(Items.DIRT),
ItemStack.EMPTY, turtle(), ItemStack(Items.DIAMOND_PICKAXE),
ItemStack.EMPTY, ItemStack.EMPTY, ItemStack.EMPTY,
)
helper.assertNotCraftable(
ItemStack.EMPTY, turtle(), ItemStack(Items.DIAMOND_PICKAXE),
ItemStack.EMPTY, ItemStack.EMPTY, ItemStack(Items.DIRT),
ItemStack.EMPTY, ItemStack.EMPTY, ItemStack.EMPTY,
)
}
/**
* Render turtles as an item.
*/