class TestCraftingFurnace(unittest.TestCase): """ Test basic crafting functionality. Assumes that the basic cobblestone->furnace recipe is present and enabled. This recipe was chosen because it is the simplest recipe that requires a 3x3 crafting table. """ def setUp(self): self.i = Workbench() def test_trivial(self): pass def test_check_crafting(self): self.i.crafting[0] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 1) self.i.crafting[1] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 1) self.i.crafting[2] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 1) self.i.crafting[3] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 1) self.i.crafting[5] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 1) self.i.crafting[6] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 1) self.i.crafting[7] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 1) self.i.crafting[8] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 1) # Force crafting table to be rechecked. self.i.select(5) self.assertTrue(self.i.recipe) self.assertEqual(self.i.recipe_offset, 0) self.assertEqual(self.i.crafted[0], (bravo.blocks.blocks["furnace"].slot, 0, 1)) def test_check_crafting_multiple(self): self.i.crafting[0] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 2) self.i.crafting[1] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 2) self.i.crafting[2] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 2) self.i.crafting[3] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 2) self.i.crafting[5] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 2) self.i.crafting[6] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 2) self.i.crafting[7] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 2) self.i.crafting[8] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 2) # Force crafting table to be rechecked. self.i.select(5) self.assertEqual(self.i.crafted[0], (bravo.blocks.blocks["furnace"].slot, 0, 1))
class TestCraftingFurnace(unittest.TestCase): """ Test basic crafting functionality. Assumes that the basic cobblestone->furnace recipe is present and enabled. This recipe was chosen because it is the simplest recipe that requires a 3x3 crafting table. """ def setUp(self): recipes = retrieve_plugins(IRecipe) if "furnace" not in recipes: raise unittest.SkipTest("Plugin not present") self.i = Workbench() def test_trivial(self): pass def test_check_crafting(self): self.i.crafting[0] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 1) self.i.crafting[1] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 1) self.i.crafting[2] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 1) self.i.crafting[3] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 1) self.i.crafting[5] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 1) self.i.crafting[6] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 1) self.i.crafting[7] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 1) self.i.crafting[8] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 1) # Force crafting table to be rechecked. self.i.select(5) self.assertTrue(self.i.recipe) self.assertEqual(self.i.recipe_offset, 0) self.assertEqual(self.i.crafted[0], (bravo.blocks.blocks["furnace"].slot, 0, 1)) def test_check_crafting_multiple(self): self.i.crafting[0] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 2) self.i.crafting[1] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 2) self.i.crafting[2] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 2) self.i.crafting[3] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 2) self.i.crafting[5] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 2) self.i.crafting[6] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 2) self.i.crafting[7] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 2) self.i.crafting[8] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 2) # Force crafting table to be rechecked. self.i.select(5) self.assertEqual(self.i.crafted[0], (bravo.blocks.blocks["furnace"].slot, 0, 1))
def select_for_inventory(self, block): """ Perform a custom block selection to open an inventory window. Returns whether the selection was successful. """ if block == blocks["workbench"].slot: i = Workbench() i.wid = self.wid self.wid += 1 sync_inventories(self.player.inventory, i) self.windows.append(i) self.write_packet("window-open", wid=i.wid, type="workbench", title="Hurp", slots=2) return True return False
class TestCraftingShovel(unittest.TestCase): """ Test basic crafting functionality. Assumes that the basic shovel recipe is present and enabled. This recipe was chosen because shovels broke at one point and we couldn't figure out why. """ def setUp(self): recipes = retrieve_plugins(IRecipe) if "stone-shovel" not in recipes: raise unittest.SkipTest("Plugin not present") self.i = Workbench() def test_trivial(self): pass def test_check_crafting(self): self.i.crafting[0] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 1) self.i.crafting[3] = Slot(bravo.blocks.items["stick"].slot, 0, 1) self.i.crafting[6] = Slot(bravo.blocks.items["stick"].slot, 0, 1) # Force crafting table to be rechecked. self.i.select(2) self.assertTrue(self.i.recipe) self.assertEqual(self.i.recipe_offset, 0) self.assertEqual(self.i.crafted[0], (bravo.blocks.items["stone-shovel"].slot, 0, 1)) def test_check_crafting_multiple(self): self.i.crafting[0] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 2) self.i.crafting[3] = Slot(bravo.blocks.items["stick"].slot, 0, 2) self.i.crafting[6] = Slot(bravo.blocks.items["stick"].slot, 0, 2) # Force crafting table to be rechecked. self.i.select(2) # Only checking count of crafted table; the previous test assured that # the recipe was selected. self.assertEqual(self.i.crafted[0], (bravo.blocks.items["stone-shovel"].slot, 0, 1)) def test_check_crafting_offset(self): self.i.crafting[1] = Slot(bravo.blocks.blocks["cobblestone"].slot, 0, 2) self.i.crafting[4] = Slot(bravo.blocks.items["stick"].slot, 0, 2) self.i.crafting[7] = Slot(bravo.blocks.items["stick"].slot, 0, 2) # Force crafting table to be rechecked. self.i.select(1) self.assertTrue(self.i.recipe) self.assertEqual(self.i.recipe_offset, 1)
def build(self, container): if container.x == -1 and container.z == -1 and container.y == 255: # Lala-land build packet. Discard it for now. return # Is the target being selected? bigx, smallx, bigz, smallz = split_coords(container.x, container.z) try: chunk = self.chunks[bigx, bigz] except KeyError: self.error("Couldn't select in chunk (%d, %d)!" % (bigx, bigz)) return if (chunk.get_block( (smallx, container.y, smallz)) == blocks["workbench"].slot): i = Workbench() sync_inventories(self.player.inventory, i) self.windows[self.wid] = i packet = make_packet("window-open", wid=self.wid, type="workbench", title="Hurp", slots=2) self.wid += 1 self.transport.write(packet) return # Ignore clients that think -1 is placeable. if container.primary == -1: return # Special case when face is "noop": Update the status of the currently # held block rather than placing a new block. if container.face == "noop": return if container.primary in blocks: block = blocks[container.primary] elif container.primary in items: block = items[container.primary] else: log.err("Ignoring request to place unknown block %d" % container.primary) return if time() - self.last_dig_build_timer < 0.05: self.error("You are building too fast.") self.last_dig_build_timer = time() # it's the top of the world, you can't build here if container.y == 127 and container.face == '+y': return builddata = BuildData(block, 0x0, container.x, container.y, container.z, container.face) for hook in self.build_hooks: cont, builddata = yield maybeDeferred(hook.build_hook, self.factory, self.player, builddata) if not cont: break newblock = builddata.block.slot # Feed automatons. for automaton in self.factory.automatons: if newblock in automaton.blocks: automaton.feed(self.factory, (builddata.x, builddata.y, builddata.z)) # Re-send inventory. # XXX this could be optimized if/when inventories track damage. packet = self.player.inventory.save_to_packet() self.transport.write(packet) # Flush damaged chunks. for chunk in self.chunks.itervalues(): self.factory.flush_chunk(chunk)
def setUp(self): self.i = Workbench()
class TestWorkbenchIntegration(unittest.TestCase): """ select() numbers Crafted[0] = 0 Crafting[0-8] = 1-9 Storage[0-26] = 10-36 Holdables[0-8] = 37-45 """ def setUp(self): self.i = Workbench() def test_trivial(self): pass def test_craft_golden_apple(self): #Add 8 gold blocks and 1 apple to inventory self.i.add(bravo.blocks.blocks["gold"].key, 8) self.i.add(bravo.blocks.items["apple"].key, 1) #Select all the gold, in the workbench, unlike Euqiopment(), holdables start at 37 self.i.select(37) self.assertEqual(self.i.selected, (bravo.blocks.blocks["gold"].slot, 0, 8)) #Select-alternate into crafting[0] and check for amounts self.i.select(1, True) self.assertEqual(self.i.selected, (bravo.blocks.blocks["gold"].slot, 0, 7)) self.assertEqual(self.i.crafting[0], (bravo.blocks.blocks["gold"].slot, 0, 1)) #Select-alternate gold into crafting[1] and check self.i.select(2, True) self.assertEqual(self.i.selected, (bravo.blocks.blocks["gold"].slot, 0, 6)) self.assertEqual(self.i.crafting[1], (bravo.blocks.blocks["gold"].slot, 0, 1)) #Select-alternate gold into crafting[2] and check self.i.select(3, True) self.assertEqual(self.i.selected, (bravo.blocks.blocks["gold"].slot, 0, 5)) self.assertEqual(self.i.crafting[2], (bravo.blocks.blocks["gold"].slot, 0, 1)) #Select-alternate gold into crafting[3] and check self.i.select(4, True) self.assertEqual(self.i.selected, (bravo.blocks.blocks["gold"].slot, 0, 4)) self.assertEqual(self.i.crafting[3], (bravo.blocks.blocks["gold"].slot, 0, 1)) #Select-alternate gold into crafting[5] and check, skipping [4] for the apple later self.i.select(6, True) self.assertEqual(self.i.selected, (bravo.blocks.blocks["gold"].slot, 0, 3)) self.assertEqual(self.i.crafting[5], (bravo.blocks.blocks["gold"].slot, 0, 1)) #Select-alternate gold into crafting[6] and check self.i.select(7, True) self.assertEqual(self.i.selected, (bravo.blocks.blocks["gold"].slot, 0, 2)) self.assertEqual(self.i.crafting[6], (bravo.blocks.blocks["gold"].slot, 0, 1)) #Select-alternate gold into crafting[7] and check self.i.select(8, True) self.assertEqual(self.i.selected, (bravo.blocks.blocks["gold"].slot, 0, 1)) self.assertEqual(self.i.crafting[7], (bravo.blocks.blocks["gold"].slot, 0, 1)) #Select-alternate gold into crafting[8] and check self.i.select(9, True) self.assertEqual(self.i.selected, None) self.assertEqual(self.i.crafting[8], (bravo.blocks.blocks["gold"].slot, 0, 1)) #All gold should be placed now, time to select the apple self.i.select(38) self.assertEqual(self.i.selected, (bravo.blocks.items["apple"].slot, 0, 1)) #Place the apple into crafting[4] self.i.select(5) self.assertEqual(self.i.selected, None) self.assertEqual(self.i.crafting[4], (bravo.blocks.items["apple"].slot, 0, 1)) #Select golden-apples from select(0) self.i.select(0) self.assertEqual(self.i.selected, (bravo.blocks.items["golden-apple"].slot, 0, 1)) #Select the golden-apple into the first holdable slot, select(37)/holdables[0] self.i.select(37) self.assertEqual(self.i.selected, None) self.assertEqual(self.i.holdables[0], (bravo.blocks.items["golden-apple"].slot, 0, 1)) self.assertEqual(self.i.crafting[0], None) self.assertEqual(self.i.crafted[0], None)
def setUp(self): recipes = retrieve_plugins(IRecipe) if "furnace" not in recipes: raise unittest.SkipTest("Plugin not present") self.i = Workbench()