Improve labeled chest caching interactions
This commit is contained in:
@@ -0,0 +1,79 @@
|
||||
import unittest
|
||||
from munch import Munch
|
||||
|
||||
from minecraft.networking.types import BlockFace
|
||||
|
||||
from mosfet.info import items
|
||||
from mosfet.jobs.cache_items import CacheItemsStates
|
||||
|
||||
|
||||
class CacheItemsTests(unittest.TestCase):
|
||||
def test_successful_labeled_transfer_skips_placing_another_cache_chest(self):
|
||||
item_id = items.get_id('stone')
|
||||
stack = Munch(present=True, item_id=item_id, item_count=16)
|
||||
window = Munch(container_slots=27, contents={
|
||||
**dict.fromkeys(range(27)), 27: stack,
|
||||
})
|
||||
clicks = []
|
||||
|
||||
class FakeGame:
|
||||
@staticmethod
|
||||
def count_window_slots():
|
||||
return 0
|
||||
|
||||
@staticmethod
|
||||
def click_window(*args):
|
||||
clicks.append(args)
|
||||
|
||||
class FakeWorld:
|
||||
@staticmethod
|
||||
def find_blocks_indexed(*_args):
|
||||
return []
|
||||
|
||||
@staticmethod
|
||||
def find_labeled_chests(*_args):
|
||||
return []
|
||||
|
||||
g = Munch(
|
||||
game=FakeGame(), world=FakeWorld(), pos=(0, 64, 0),
|
||||
inv={}, window=window, item_lock=False)
|
||||
state = CacheItemsStates(g)
|
||||
state.is_labeled_container = True
|
||||
state.container_item_ids = {item_id}
|
||||
|
||||
state.move_items()
|
||||
self.assertEqual(len(clicks), 1)
|
||||
self.assertFalse(state.transferred_to_labeled_chest)
|
||||
|
||||
window.contents[27] = Munch(present=False, item_id=0, item_count=0)
|
||||
g.item_lock = False
|
||||
state.pending_transfer['confirm_after'] = 0
|
||||
state.move_items()
|
||||
self.assertTrue(state.transferred_to_labeled_chest)
|
||||
|
||||
state.labeled_chests = []
|
||||
state.trapped_chests = []
|
||||
state.choose_trapped_chest()
|
||||
self.assertIs(state.state.__func__, state.cleanup.__func__)
|
||||
|
||||
def test_cache_chest_placement_sneaks_to_avoid_opening_support_container(self):
|
||||
calls = []
|
||||
|
||||
class FakeGame:
|
||||
@staticmethod
|
||||
def place_block(*args, **kwargs):
|
||||
calls.append((args, kwargs))
|
||||
|
||||
state = CacheItemsStates(Munch(game=FakeGame()))
|
||||
state.area = (3, 65, 7)
|
||||
|
||||
state.place_chest()
|
||||
|
||||
self.assertEqual(calls, [(
|
||||
((3, 64, 7), BlockFace.TOP), {'sneaking': True},
|
||||
)])
|
||||
self.assertIs(state.state.__func__, state.open_chest.__func__)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user