mirror of
https://github.com/mat-1/azalea.git
synced 2025-08-02 14:26:04 +00:00
afk pool test
This commit is contained in:
parent
d153dea104
commit
1e879ead47
1 changed files with 138 additions and 0 deletions
|
@ -1,5 +1,9 @@
|
|||
use std::sync::Arc;
|
||||
|
||||
use azalea_block::{
|
||||
BlockState, block_state::BlockStateIntegerRepr, fluid_state::to_or_from_legacy_fluid_level,
|
||||
properties::WaterLevel,
|
||||
};
|
||||
use azalea_core::{
|
||||
position::{BlockPos, ChunkPos, Vec3},
|
||||
registry_holder::RegistryHolder,
|
||||
|
@ -409,3 +413,137 @@ fn spawn_and_unload_world() {
|
|||
app.world_mut().run_schedule(GameTick);
|
||||
app.update();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_afk_pool() {
|
||||
let mut app = make_test_app();
|
||||
let world_lock = insert_overworld(&mut app);
|
||||
let mut partial_world = PartialInstance::default();
|
||||
|
||||
partial_world.chunks.set(
|
||||
&ChunkPos { x: 0, z: 0 },
|
||||
Some(Chunk::default()),
|
||||
&mut world_lock.write().chunks,
|
||||
);
|
||||
let setblock = |x: i32, y: i32, z: i32, b: BlockState| {
|
||||
world_lock
|
||||
.write()
|
||||
.chunks
|
||||
.set_block_state(&BlockPos { x, y, z }, b);
|
||||
};
|
||||
|
||||
let stone = azalea_block::blocks::Stone {}.into();
|
||||
let sign = azalea_block::blocks::OakSign {
|
||||
rotation: azalea_block::properties::OakSignRotation::_0,
|
||||
waterlogged: false,
|
||||
}
|
||||
.into();
|
||||
let water = |level: u8| {
|
||||
BlockState::from(azalea_block::blocks::Water {
|
||||
level: WaterLevel::from(to_or_from_legacy_fluid_level(level) as BlockStateIntegerRepr),
|
||||
})
|
||||
};
|
||||
|
||||
let mut y = 69;
|
||||
|
||||
// first layer
|
||||
{
|
||||
setblock(1, y, 1, stone);
|
||||
setblock(2, y, 1, stone);
|
||||
setblock(3, y, 1, stone);
|
||||
setblock(3, y, 2, stone);
|
||||
setblock(3, y, 3, stone);
|
||||
setblock(2, y, 3, stone);
|
||||
setblock(1, y, 3, stone);
|
||||
setblock(1, y, 2, stone);
|
||||
}
|
||||
// second layer
|
||||
y += 1;
|
||||
{
|
||||
setblock(1, y, 0, stone);
|
||||
setblock(2, y, 0, stone);
|
||||
setblock(3, y, 0, stone);
|
||||
|
||||
setblock(0, y, 1, stone);
|
||||
setblock(0, y, 2, stone);
|
||||
setblock(0, y, 3, stone);
|
||||
|
||||
setblock(1, y, 4, stone);
|
||||
setblock(2, y, 4, stone);
|
||||
setblock(3, y, 4, stone);
|
||||
|
||||
setblock(4, y, 1, stone);
|
||||
setblock(4, y, 2, stone);
|
||||
setblock(4, y, 3, stone);
|
||||
|
||||
// middle block
|
||||
setblock(2, y, 2, stone);
|
||||
|
||||
// sign
|
||||
setblock(1, y, 1, sign);
|
||||
|
||||
// water
|
||||
setblock(1, y, 2, water(8));
|
||||
setblock(1, y, 3, water(7));
|
||||
setblock(2, y, 3, water(6));
|
||||
setblock(3, y, 3, water(5));
|
||||
setblock(3, y, 2, water(4));
|
||||
setblock(3, y, 1, water(3));
|
||||
setblock(2, y, 1, water(2));
|
||||
}
|
||||
// third layer
|
||||
y += 1;
|
||||
{
|
||||
setblock(1, y, 1, water(8));
|
||||
setblock(2, y, 1, sign);
|
||||
}
|
||||
|
||||
let entity = app
|
||||
.world_mut()
|
||||
.spawn((
|
||||
EntityBundle::new(
|
||||
Uuid::nil(),
|
||||
Vec3 {
|
||||
x: 3.5,
|
||||
y: 70.,
|
||||
z: 1.5,
|
||||
},
|
||||
azalea_registry::EntityKind::Player,
|
||||
ResourceLocation::new("minecraft:overworld"),
|
||||
),
|
||||
MinecraftEntityId(0),
|
||||
LocalEntity,
|
||||
))
|
||||
.id();
|
||||
|
||||
let mut blocks_visited = Vec::new();
|
||||
let mut loops_done = 0;
|
||||
|
||||
for _ in 0..300 {
|
||||
app.world_mut().run_schedule(GameTick);
|
||||
app.update();
|
||||
|
||||
let entity_pos = app.world_mut().get::<Position>(entity).unwrap();
|
||||
let entity_block_pos = BlockPos::from(entity_pos);
|
||||
|
||||
if !blocks_visited.contains(&entity_block_pos) {
|
||||
blocks_visited.push(entity_block_pos);
|
||||
|
||||
if blocks_visited.len() == 8 {
|
||||
loops_done += 1;
|
||||
blocks_visited.clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
assert_eq!(
|
||||
blocks_visited.into_iter().collect::<Vec<_>>(),
|
||||
vec![
|
||||
BlockPos::new(3, 70, 2),
|
||||
BlockPos::new(3, 70, 1),
|
||||
BlockPos::new(2, 70, 1),
|
||||
BlockPos::new(1, 70, 1),
|
||||
]
|
||||
);
|
||||
assert_eq!(loops_done, 1);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue