Use block state id to check bed occupancy

This commit is contained in:
Tanner Collin 2021-05-07 04:02:26 +00:00
parent 324ad41bf7
commit 4d2d358175
3 changed files with 21 additions and 8 deletions

View File

@ -15,6 +15,11 @@ for name, data in JSON_BLOCKS.items():
for state in data['states']: for state in data['states']:
BLOCKS[state['id']] = name.replace('minecraft:', '') BLOCKS[state['id']] = name.replace('minecraft:', '')
PROPS = {}
for name, data in JSON_BLOCKS.items():
for state in data['states']:
PROPS[state['id']] = state.get('properties', {})
BREAK_DISTANCE = 6 BREAK_DISTANCE = 6
AIR = 0 AIR = 0

View File

@ -139,7 +139,15 @@ class SleepWithBedStates:
print('Placing bed') print('Placing bed')
self.g.game.place_block(self.area, BlockFace.TOP) self.g.game.place_block(self.area, BlockFace.TOP)
self.my_bed = True self.my_bed = True
self.state = self.use_bed self.wait_time = 0.5
self.state = self.wait_use
def wait_use(self):
# wait to use the bed
if self.wait_time > 0:
self.wait_time -= utils.TICK
else:
self.state = self.use_bed
def use_bed(self): def use_bed(self):
w = self.g.world w = self.g.world

View File

@ -280,13 +280,13 @@ class World:
def check_bed_occupied(self, bed): def check_bed_occupied(self, bed):
# returns true if the bed is occupied by a player # returns true if the bed is occupied by a player
print('Checking bed occupancy:', bed) bid = self.g.chunks.get_block_at(*bed)
for player in self.g.players.values(): if blocks.PROPS[bid]['occupied'] == 'true':
ppos = utils.pint((player.x, player.y, player.z)) print('Checking bed occupancy:', bed, '-> occupied')
if utils.phyp(bed, ppos) <= 1 and player.y - int(player.y) == 0.6875: return True
print('Bed is occupied by:', player, self.g.player_names[player.player_uuid]) else:
return True print('Checking bed occupancy:', bed, '-> free')
return False return False
def find_cache_openings(self, area): def find_cache_openings(self, area):
return self.find_bed_openings(area) return self.find_bed_openings(area)