|
|
|
@ -732,7 +732,51 @@ class SleepWithBedStates: |
|
|
|
|
self.state = self.cleanup |
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
self.state = self.select_bed |
|
|
|
|
self.state = self.find_beds |
|
|
|
|
|
|
|
|
|
def find_beds(self): |
|
|
|
|
print('Finding beds...') |
|
|
|
|
w = self.g.world |
|
|
|
|
p = utils.pint(self.g.pos) |
|
|
|
|
|
|
|
|
|
self.beds = w.find_blocks_indexed(p, blocks.BED_IDS) |
|
|
|
|
print('Found:', self.beds) |
|
|
|
|
self.state = self.choose_bed |
|
|
|
|
|
|
|
|
|
def choose_bed(self): |
|
|
|
|
print('Choosing a bed...') |
|
|
|
|
w = self.g.world |
|
|
|
|
p = utils.pint(self.g.pos) |
|
|
|
|
c = self.g.chunks |
|
|
|
|
|
|
|
|
|
if not len(self.beds): |
|
|
|
|
print('No beds') |
|
|
|
|
self.state = self.select_bed |
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
bed = self.beds[0] |
|
|
|
|
|
|
|
|
|
tmp = c.get_block_at(*bed) |
|
|
|
|
c.set_block_at(*bed, blocks.AIR) |
|
|
|
|
navpath = w.path_to_place(p, bed) |
|
|
|
|
c.set_block_at(*bed, tmp) |
|
|
|
|
|
|
|
|
|
print('navpath:', navpath) |
|
|
|
|
|
|
|
|
|
if navpath: |
|
|
|
|
self.g.path = navpath[:-1] |
|
|
|
|
self.opening = self.g.path[-1] |
|
|
|
|
self.area = bed |
|
|
|
|
self.state = self.going_to_bed |
|
|
|
|
return |
|
|
|
|
else: |
|
|
|
|
self.beds.pop(0) |
|
|
|
|
|
|
|
|
|
def going_to_bed(self): |
|
|
|
|
if utils.pint(self.g.pos) == self.opening: |
|
|
|
|
self.my_bed = False |
|
|
|
|
self.g.look_at = self.area |
|
|
|
|
self.state = self.use_bed |
|
|
|
|
|
|
|
|
|
def select_bed(self): |
|
|
|
|
if self.g.game.select_item(items.BED_IDS): |
|
|
|
@ -778,6 +822,7 @@ class SleepWithBedStates: |
|
|
|
|
|
|
|
|
|
def place_bed(self): |
|
|
|
|
self.g.game.place_block(self.area, BlockFace.TOP) |
|
|
|
|
self.my_bed = True |
|
|
|
|
self.state = self.use_bed |
|
|
|
|
|
|
|
|
|
def use_bed(self): |
|
|
|
@ -803,8 +848,12 @@ class SleepWithBedStates: |
|
|
|
|
self.state = self.break_bed |
|
|
|
|
|
|
|
|
|
def break_bed(self): |
|
|
|
|
self.g.game.break_block(self.area) |
|
|
|
|
self.state = self.collect_bed |
|
|
|
|
if self.my_bed: |
|
|
|
|
self.g.game.break_block(self.area) |
|
|
|
|
self.state = self.collect_bed |
|
|
|
|
else: |
|
|
|
|
self.state = self.cleanup |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def collect_bed(self): |
|
|
|
|
if not self.g.breaking: |
|
|
|
@ -833,6 +882,8 @@ class SleepWithBedStates: |
|
|
|
|
|
|
|
|
|
self.silent = False |
|
|
|
|
|
|
|
|
|
self.my_bed = False |
|
|
|
|
self.beds = [] |
|
|
|
|
self.area = None |
|
|
|
|
self.opening = None |
|
|
|
|
self.bad_areas = [] |
|
|
|
|