mirror of
				https://github.com/SquidDev-CC/CC-Tweaked
				synced 2025-10-30 21:23:00 +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:
		| @@ -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()) { | ||||
|   | ||||
| @@ -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) { | ||||
|   | ||||
| @@ -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. | ||||
|      */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Jonathan Coates
					Jonathan Coates