Use block state id to check bed occupancy
This commit is contained in:
		@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user