Cache items into trapped chests
This commit is contained in:
parent
efcefc8192
commit
eabb0a04d1
10
blocks.py
10
blocks.py
|
@ -233,8 +233,13 @@ CHESTS = [
|
|||
'chest',
|
||||
]
|
||||
|
||||
TRAPPED_CHESTS = [
|
||||
'trapped_chest',
|
||||
]
|
||||
|
||||
INDEXED = [
|
||||
'chest',
|
||||
'trapped_chest',
|
||||
]
|
||||
|
||||
|
||||
|
@ -263,6 +268,11 @@ for block_name in CHESTS:
|
|||
for state in JSON_BLOCKS['minecraft:' + block_name]['states']:
|
||||
CHEST_IDS.add(state['id'])
|
||||
|
||||
TRAPPED_CHEST_IDS = set()
|
||||
for block_name in TRAPPED_CHESTS:
|
||||
for state in JSON_BLOCKS['minecraft:' + block_name]['states']:
|
||||
TRAPPED_CHEST_IDS.add(state['id'])
|
||||
|
||||
INDEXED_IDS = set()
|
||||
for block_name in INDEXED:
|
||||
for state in JSON_BLOCKS['minecraft:' + block_name]['states']:
|
||||
|
|
3
bot.py
3
bot.py
|
@ -128,7 +128,8 @@ def tick(global_state):
|
|||
g.y_v += g.y_a * utils.TICK
|
||||
|
||||
block_below = g.chunks.get_block_at(floor(p.x), ceil(p.y-1), floor(p.z))
|
||||
in_air = block_below in blocks.NON_SOLID_IDS
|
||||
in_void = p.y < 0
|
||||
in_air = block_below in blocks.NON_SOLID_IDS or in_void
|
||||
|
||||
if in_air:
|
||||
g.y_a = -36.0
|
||||
|
|
6
data.py
6
data.py
|
@ -1,5 +1,5 @@
|
|||
import json
|
||||
from bunch import Bunch
|
||||
from munch import Munch
|
||||
|
||||
import minecraft_data
|
||||
|
||||
|
@ -12,12 +12,12 @@ SINGLE_CHEST = 2
|
|||
DOUBLE_CHEST = 5
|
||||
|
||||
WINDOWS = {
|
||||
SINGLE_CHEST: Bunch(
|
||||
SINGLE_CHEST: Munch(
|
||||
container=list(range(0, 27)),
|
||||
inventory=list(range(27, 63)),
|
||||
slot_diff=18,
|
||||
),
|
||||
DOUBLE_CHEST: Bunch(
|
||||
DOUBLE_CHEST: Munch(
|
||||
container=list(range(0, 54)),
|
||||
inventory=list(range(54, 90)),
|
||||
slot_diff=45,
|
||||
|
|
25
game.py
25
game.py
|
@ -47,6 +47,25 @@ class MCWorld:
|
|||
if self.block_at(*check) in block_ids:
|
||||
yield check
|
||||
|
||||
def find_blocks_indexed(self, center, block_ids, distance=0):
|
||||
print('finding', block_ids)
|
||||
index = []
|
||||
for bid in block_ids:
|
||||
index.extend(self.g.chunks.index.get(bid, []))
|
||||
|
||||
print('index', index)
|
||||
|
||||
result = []
|
||||
for block in index:
|
||||
if self.block_at(*block) not in block_ids:
|
||||
continue
|
||||
if distance and utils.phyp(center, block) > distance:
|
||||
continue
|
||||
result.append(block)
|
||||
|
||||
result.sort(key=lambda x: utils.phyp(center, x))
|
||||
return result
|
||||
|
||||
def find_blocks(self, center, distance, block_ids, limit=0):
|
||||
# search in a spiral from center to all blocks with ID
|
||||
result = []
|
||||
|
@ -477,8 +496,10 @@ class Game:
|
|||
packet.location = self.g.breaking
|
||||
packet.face = 1
|
||||
self.g.connection.write_packet(packet)
|
||||
self.g.chunks.set_block_at(*self.g.breaking, 0)
|
||||
self.g.breaking = None
|
||||
#self.g.chunks.set_block_at(*self.g.breaking, 0)
|
||||
|
||||
if self.g.chunks.get_block_at(*self.g.breaking) == 0:
|
||||
self.g.breaking = None
|
||||
|
||||
def handle_break_animation(self, packet):
|
||||
print(packet)
|
||||
|
|
65
jobs.py
65
jobs.py
|
@ -388,11 +388,19 @@ class SleepWithBedStates:
|
|||
|
||||
def init(self):
|
||||
if self.g.time >= 12000:
|
||||
self.state = self.find_bed_spot
|
||||
self.state = self.select_bed
|
||||
else:
|
||||
print('Aborting sleep, not night')
|
||||
self.state = self.cleanup
|
||||
|
||||
def select_bed(self):
|
||||
if self.g.game.select_item(items.BED_IDS):
|
||||
self.g.look_at = utils.padd(self.area, path.BLOCK_BELOW)
|
||||
self.state = self.find_bed_spot
|
||||
else:
|
||||
print('No bed, aborting.')
|
||||
self.state = self.cleanup
|
||||
|
||||
def find_bed_spot(self):
|
||||
print('Finding a bed spot...')
|
||||
w = self.g.world
|
||||
|
@ -426,15 +434,7 @@ class SleepWithBedStates:
|
|||
def going_to_area(self):
|
||||
if utils.pint(self.g.pos) == self.opening:
|
||||
self.g.look_at = self.area
|
||||
self.state = self.select_bed
|
||||
|
||||
def select_bed(self):
|
||||
if self.g.game.select_item(items.BED_IDS):
|
||||
self.g.look_at = utils.padd(self.area, path.BLOCK_BELOW)
|
||||
self.state = self.place_bed
|
||||
else:
|
||||
print('No bed, aborting.')
|
||||
self.state = self.cleanup
|
||||
|
||||
def place_bed(self):
|
||||
self.g.game.place_block(self.area, BlockFace.TOP)
|
||||
|
@ -504,11 +504,55 @@ class CacheItemsStates:
|
|||
num_stacks = len([x for x in self.g.inv.values() if x.present])
|
||||
print('Inventory amount:', num_stacks)
|
||||
if num_stacks >= 27:
|
||||
self.state = self.find_cache_spot
|
||||
self.state = self.find_trapped_chests
|
||||
else:
|
||||
print('Aborting caching, not full')
|
||||
self.state = self.cleanup
|
||||
|
||||
def find_trapped_chests(self):
|
||||
print('Finding trapped chests...')
|
||||
w = self.g.world
|
||||
p = utils.pint(self.g.pos)
|
||||
|
||||
self.trapped_chests = w.find_blocks_indexed(p, blocks.TRAPPED_CHEST_IDS, 100)
|
||||
print('Found:', self.trapped_chests)
|
||||
self.state = self.choose_trapped_chest
|
||||
|
||||
def choose_trapped_chest(self):
|
||||
print('Choosing a trapped chest...')
|
||||
w = self.g.world
|
||||
p = utils.pint(self.g.pos)
|
||||
c = self.g.chunks
|
||||
|
||||
if not len(self.trapped_chests):
|
||||
print('No trapped chests')
|
||||
self.state = self.find_cache_spot
|
||||
return
|
||||
|
||||
chest = self.trapped_chests[0]
|
||||
|
||||
tmp = c.get_block_at(*chest)
|
||||
c.set_block_at(*chest, blocks.AIR)
|
||||
navpath = w.path_to_place(p, chest)
|
||||
c.set_block_at(*chest, tmp)
|
||||
|
||||
print('navpath:', navpath)
|
||||
|
||||
if navpath:
|
||||
self.g.path = navpath[:-1]
|
||||
self.opening = self.g.path[-1]
|
||||
self.area = chest
|
||||
self.state = self.going_to_trapped_chest
|
||||
return
|
||||
else:
|
||||
self.trapped_chests.pop(0)
|
||||
|
||||
def going_to_trapped_chest(self):
|
||||
if utils.pint(self.g.pos) == self.opening:
|
||||
self.g.look_at = self.area
|
||||
self.state = self.open_chest
|
||||
|
||||
|
||||
def find_cache_spot(self):
|
||||
print('Finding a chest spot...')
|
||||
w = self.g.world
|
||||
|
@ -644,6 +688,7 @@ class CacheItemsStates:
|
|||
|
||||
self.area = None
|
||||
self.opening = None
|
||||
self.trapped_chests = []
|
||||
self.bad_areas = []
|
||||
self.wait_time = 0
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user