Port wood gathering and fix 26.3 swing animation
This commit is contained in:
+13
-10
@@ -81,9 +81,14 @@ class World:
|
||||
return result
|
||||
|
||||
def find_trees(self, center, distance):
|
||||
found_trees = []
|
||||
for log in self.find_blocks_3d(center, blocks.LOG_IDS, distance, 15):
|
||||
# crawl to the bottom log
|
||||
found_trees = set()
|
||||
# 26.3 block-state caches keep an index of tree logs. Searching a
|
||||
# three-dimensional radius voxel-by-voxel is prohibitively expensive
|
||||
# and can walk through unloaded space, so use loaded indexed states.
|
||||
for candidate in self.find_blocks_indexed(
|
||||
center, blocks.LOG_IDS, distance):
|
||||
# Crawl to the bottom log of this trunk.
|
||||
log = candidate
|
||||
while self.block_at(*utils.padd(log, path.BLOCK_BELOW)) in blocks.LOG_IDS:
|
||||
log = utils.padd(log, path.BLOCK_BELOW)
|
||||
base = log
|
||||
@@ -91,27 +96,25 @@ class World:
|
||||
if base in found_trees:
|
||||
continue
|
||||
|
||||
# make sure we are on the ground
|
||||
if self.block_at(*utils.padd(base, path.BLOCK_BELOW)) in blocks.NON_SOLID_IDS:
|
||||
# Only classify trees when their supporting block is known.
|
||||
support = self.block_at(*utils.padd(base, path.BLOCK_BELOW))
|
||||
if support is None or support in blocks.NON_SOLID_IDS:
|
||||
continue
|
||||
|
||||
# crawl to the top log to count and check leaves
|
||||
# Crawl to the top log to count trunk blocks and check for leaves.
|
||||
log_count = 1
|
||||
good_leaves = False
|
||||
while self.block_at(*utils.padd(log, path.BLOCK_ABOVE)) in blocks.LOG_IDS:
|
||||
log = utils.padd(log, path.BLOCK_ABOVE)
|
||||
log_count += 1
|
||||
|
||||
for offset in path.CHECK_DIRECTIONS:
|
||||
if self.block_at(*utils.padd(log, offset)) in blocks.LEAF_IDS:
|
||||
good_leaves = True
|
||||
|
||||
# make sure it's a good tree
|
||||
if not good_leaves or log_count < 3:
|
||||
continue
|
||||
|
||||
found_trees.append(base)
|
||||
|
||||
found_trees.add(base)
|
||||
yield base
|
||||
|
||||
def find_tree_openings(self, tree):
|
||||
|
||||
Reference in New Issue
Block a user