Try using already placed beds first

This commit is contained in:
2021-03-23 21:40:36 +00:00
parent 0bdae1f775
commit ef68956e63
2 changed files with 86 additions and 9 deletions
+54 -3
View File
@@ -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 = []