|
|
|
@ -124,6 +124,113 @@ class FindGappleStates: |
|
|
|
|
self.state() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class GatherWartStates: |
|
|
|
|
def idle(self): |
|
|
|
|
return None |
|
|
|
|
|
|
|
|
|
def init(self): |
|
|
|
|
self.g.chopped_tree = False |
|
|
|
|
self.state = self.find_new_wart |
|
|
|
|
|
|
|
|
|
def find_new_wart(self): |
|
|
|
|
print('Finding new tree...') |
|
|
|
|
w = self.g.world |
|
|
|
|
p = utils.pint(self.g.pos) |
|
|
|
|
|
|
|
|
|
mature_wart = max(blocks.NETHERWART_IDS) |
|
|
|
|
for wart in w.find_blocks_3d(p, [mature_wart], 100): |
|
|
|
|
print('Found wart:', wart) |
|
|
|
|
if wart not in self.bad_warts: |
|
|
|
|
break |
|
|
|
|
else: # for |
|
|
|
|
print('No good warts left, aborting.') |
|
|
|
|
self.state = self.cleanup |
|
|
|
|
return |
|
|
|
|
|
|
|
|
|
self.wart = wart |
|
|
|
|
self.state = self.nav_to_wart |
|
|
|
|
|
|
|
|
|
def nav_to_wart(self): |
|
|
|
|
w = self.g.world |
|
|
|
|
p = utils.pint(self.g.pos) |
|
|
|
|
|
|
|
|
|
navpath = w.path_to_place(p, self.wart) |
|
|
|
|
|
|
|
|
|
if navpath: |
|
|
|
|
self.g.path = navpath |
|
|
|
|
self.g.look_at = utils.padd(self.wart, path.BLOCK_BELOW) |
|
|
|
|
self.state = self.going_to_wart |
|
|
|
|
else: |
|
|
|
|
self.bad_warts.append(wart) |
|
|
|
|
self.state = self.find_new_wart |
|
|
|
|
|
|
|
|
|
def going_to_wart(self): |
|
|
|
|
if utils.pint(self.g.pos) == self.wart: |
|
|
|
|
print('At the wart') |
|
|
|
|
self.state = self.break_wart |
|
|
|
|
|
|
|
|
|
def break_wart(self): |
|
|
|
|
self.g.game.break_block(self.wart) |
|
|
|
|
self.wait_time = 0.5 |
|
|
|
|
self.state = self.wait |
|
|
|
|
|
|
|
|
|
def wait(self): |
|
|
|
|
# wait for the item |
|
|
|
|
if self.wait_time > 0: |
|
|
|
|
self.wait_time -= utils.TICK |
|
|
|
|
else: |
|
|
|
|
self.state = self.select_wart |
|
|
|
|
|
|
|
|
|
def select_wart(self): |
|
|
|
|
p = utils.pint(self.g.pos) |
|
|
|
|
|
|
|
|
|
if self.g.game.select_item(items.NETHERWART_ID): |
|
|
|
|
self.state = self.wait_select |
|
|
|
|
self.wait_time = 0.5 |
|
|
|
|
else: |
|
|
|
|
print('Aborting planting, no wart') |
|
|
|
|
self.state = self.cleanup |
|
|
|
|
|
|
|
|
|
def wait_select(self): |
|
|
|
|
# wait a bit to select |
|
|
|
|
if self.wait_time > 0: |
|
|
|
|
self.wait_time -= utils.TICK |
|
|
|
|
else: |
|
|
|
|
self.state = self.place_wart |
|
|
|
|
|
|
|
|
|
def place_wart(self): |
|
|
|
|
p = utils.pint(self.g.pos) |
|
|
|
|
self.g.game.place_block(p, BlockFace.TOP) |
|
|
|
|
print('Placed wart') |
|
|
|
|
self.state = self.wait_place |
|
|
|
|
self.wait_time = 0.5 |
|
|
|
|
|
|
|
|
|
def wait_place(self): |
|
|
|
|
# wait a bit for chunk data to update |
|
|
|
|
if self.wait_time > 0: |
|
|
|
|
self.wait_time -= utils.TICK |
|
|
|
|
else: |
|
|
|
|
self.state = self.cleanup |
|
|
|
|
|
|
|
|
|
def cleanup(self): |
|
|
|
|
self.g.look_at = None |
|
|
|
|
self.state = self.done |
|
|
|
|
|
|
|
|
|
def done(self): |
|
|
|
|
# never gets ran, placeholder |
|
|
|
|
return None |
|
|
|
|
|
|
|
|
|
def __init__(self, global_state): |
|
|
|
|
self.g = global_state |
|
|
|
|
self.state = self.idle |
|
|
|
|
|
|
|
|
|
self.wart = None |
|
|
|
|
self.bad_warts = [] |
|
|
|
|
self.wait_time = 0 |
|
|
|
|
|
|
|
|
|
def run(self): |
|
|
|
|
self.state() |
|
|
|
|
|
|
|
|
|
class GatherWoodStates: |
|
|
|
|
def bair(self, p): |
|
|
|
|
return self.g.chunks.get_block_at(*p) in blocks.NON_SOLID_IDS |
|
|
|
@ -1325,6 +1432,7 @@ class JobStates: |
|
|
|
|
self.grab_sand_states = GrabSandStates(self.g) |
|
|
|
|
self.fill_blocks_states = FillBlocksStates(self.g) |
|
|
|
|
self.check_threats_states = CheckThreatsStates(self.g) |
|
|
|
|
self.gather_wart_states = GatherWartStates(self.g) |
|
|
|
|
|
|
|
|
|
def run_machines(self, machines): |
|
|
|
|
for m in machines: |
|
|
|
@ -1393,6 +1501,16 @@ class JobStates: |
|
|
|
|
self.cache_items_states.silent = True |
|
|
|
|
return machines |
|
|
|
|
|
|
|
|
|
def farm_wart(self): |
|
|
|
|
machines = [ |
|
|
|
|
self.gather_wart_states, |
|
|
|
|
self.sleep_with_bed_states, |
|
|
|
|
self.cache_items_states, |
|
|
|
|
] |
|
|
|
|
self.sleep_with_bed_states.silent = True |
|
|
|
|
self.cache_items_states.silent = True |
|
|
|
|
return machines |
|
|
|
|
|
|
|
|
|
def fill_blocks(self): |
|
|
|
|
machines = [ |
|
|
|
|
self.fill_blocks_states, |
|
|
|
|