Описание
Please also contribute to this project. I don't have infinite time on my hands 🥺
## ✅ Features
- Function to find the path to a destination
## 📖 Usage
Call the `astar:_` function and use the remaining markers tagged `astar` to guide anything\
The starting position of the path will be located at the current entity, with the end position being the current position in the context\
E.g. `execute as @s at @p[distance=1..] run function astar:_`\
Note that floating destinations & unreached targets will result in failure
I recommend setting the `maxCommandChainLength` gamerule high enough for your terrain, or restrict the path to a maximum of ~10 blocks — otherwise, temporary markers may stay once the limit is reached
### Config
The configuration is stored in the `astar.config` scoreboard objective.\
`scoreboard players set maxDistance astar.config ` — **default: 100 (10 blocks)** — max distance the pathfinder may travel till finalizing the path.\
`scoreboard players set maxStepHeight astar.config ` — **default: 1** — how many blocks it may walk up at once.\
`scoreboard players set maxFallDistance astar.config -` — **default: -3** — **negative value**, how many blocks it may fall each step.\
To avoid conflicts with others' usage, run `function astar:default_config` or `scoreboard players reset * astar.config` before your logic
### Block Tags
`#astar:climbable` — climbable\
`#astar:obstructs_floor` — traversable, no descent\
`#astar:impassable_floor` — impassable floor\
`#astar:impassable_wall` — impassable wall
### Penalty Block Tags
`#astar:penalty/damage` 160 — nearby\
`#astar:penalty/danger` 80 — nearby\
`#astar:penalty/disliked` 80
You may add a function to the `#astar:eval_node` tag to modify costs — `return ` results in only `impassable` being effective\
— impassable via `kill @s` — add/remove cost via `scoreboard players add/remove @s astar.f `
#### Penalties increase the cost of a path segment, so the algorithm prefers other routes.
### Example code
```
#code:loop.mcfunction:
data modify storage code:pathfinding points append from entity @s Pos
kill @s
execute as @n[type=marker,tag=astar] at @s run function code:loop
#code:main.mcfunction:
execute store success score found my_score at @n[tag=target] if function astar:_ as @n[type=marker,tag=astar,sort=furthest] at @s run function code:loop
execute unless score found my_score matches 1 run function code:set_direct_target # Walk directly towards target if no path is found
```