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 std::sync::Arc;
|
||||||
|
|
||||||
|
use azalea_block::{
|
||||||
|
BlockState, block_state::BlockStateIntegerRepr, fluid_state::to_or_from_legacy_fluid_level,
|
||||||
|
properties::WaterLevel,
|
||||||
|
};
|
||||||
use azalea_core::{
|
use azalea_core::{
|
||||||
position::{BlockPos, ChunkPos, Vec3},
|
position::{BlockPos, ChunkPos, Vec3},
|
||||||
registry_holder::RegistryHolder,
|
registry_holder::RegistryHolder,
|
||||||
|
@ -409,3 +413,137 @@ fn spawn_and_unload_world() {
|
||||||
app.world_mut().run_schedule(GameTick);
|
app.world_mut().run_schedule(GameTick);
|
||||||
app.update();
|
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