azalea/azalea-block
mat a707e2eb82
Add mining to the pathfinder (#122)
* basic pathfinder mining poc

* mining descending and autotool

* pathfinder mining descending

* pathfinder fixes

* allow disabling pathfinder miner and other fixes

* small optimization to avoid chunk vec iter lookup sometimes

* seeded rng in pathfinder bench

* consistently use f32::INFINITY

this brings performance much closer to how it was before

* astar heuristic optimization from baritone

* add downward_move

* fix downward move execute

* avoid liquids and falling blocks when mining

* fix COST_HEURISTIC

* fix to not path through flowing liquids

* only reset pathfinder timeout while mining if the block is close enough

* cache mining costs of block positions

* fix mine_while_at_start and move PathfinderDebugParticles to its own module

* add ReachBlockPosGoal

in other news: azalea's sin/cos functions were broken this whole time and i never noticed

* clippy and add things that i accidentally didn't commit

* improve wording on doc for azalea::pathfinder
2023-12-15 11:26:40 -06:00
..
azalea-block-macros Climbing (#121) 2023-12-10 00:08:08 -06:00
src Add mining to the pathfinder (#122) 2023-12-15 11:26:40 -06:00
.gitignore add unit structs for every bool property 2023-12-09 18:32:13 -06:00
Cargo.toml Release 0.9.0 2023-12-05 11:06:51 -06:00
README.md Add World::find_block (#80) 2023-03-07 22:09:56 -06:00

Representation of Minecraft block states.

There's three block types, used for different things. You can (mostly) convert between them with .into().

BlockState struct

[BlockState] is a struct containing the numerical protocol ID of a block state. This is how blocks are stored in the world.

# use azalea_block::BlockState;
let block_state: BlockState = azalea_block::blocks::CobblestoneWall {
    east: azalea_block::properties::EastWall::Low,
    north: azalea_block::properties::NorthWall::Low,
    south: azalea_block::properties::SouthWall::Low,
    west: azalea_block::properties::WestWall::Low,
    up: false,
    waterlogged: false,
}
.into();
# use azalea_block::BlockState;
let block_state: BlockState = azalea_registry::Block::Jukebox.into();

Block trait

The [Block] trait represents a type of a block. With the the [Block] trait, you can get some extra things like the string block ID and some information about the block's behavior. Also, the structs that implement the trait contain the block attributes as fields so it's more convenient to get them. Note that this is often used as Box<dyn Block>. If for some reason you don't want the Block trait, set default-features to false.

# use azalea_block::{Block, BlockState};
# let block_state = BlockState::from(azalea_registry::Block::Jukebox);
let block = Box::<dyn Block>::from(block_state);
# use azalea_block::{Block, BlockState};
# let block_state: BlockState = azalea_registry::Block::Jukebox.into();
if let Some(jukebox) = Box::<dyn Block>::from(block_state).downcast_ref::<azalea_block::blocks::Jukebox>() {
    // ...
}

azalea_registry::Block enum

This one technically isn't from the azalea-block crate, but it's still very relevant. It's an enum that contains every block type as a variant without containing any state data (unlike BlockState and the Block trait). Converting this into any other block type will use the default state for that block.