Not mocks. Not simulators.
Execute tests against an actual Minecraft server process, with your plugin and dependencies loaded exactly as they would be in production.
Minecraft Plugin Quality Platform
LightKeeper provisions, caches, and launches full server runtimes, then gives your JUnit tests fluent handles for worlds, bots, menus, commands, and assertions.
Execute tests against an actual Minecraft server process, with your plugin and dependencies loaded exactly as they would be in production.
Server binaries and base server directories are cached, so retry and CI loops avoid unnecessary re-downloads and rebuilds.
Create synthetic players, execute commands, place blocks, interact with inventories, and verify world/menu/player state with fluent assertions.
Bring your own world folders or archives, plugin jars or Maven artifacts, and overlay config trees into the prepared server.
lightkeeper:prepare-server resolves/builds and caches the server runtime.LightkeeperExtension and framework handles.lightkeeper:cleanup-server optionally removes target server directories on success.@ExtendWith(LightkeeperExtension.class)
class MyPluginIT {
@Test
void botCanOpenMenuAndPlaceBlock(ILightkeeperFramework framework) {
final WorldHandle world = framework.mainWorld();
final PlayerHandle player = framework.buildPlayer()
.withName("lk_tester")
.atSpawn(world)
.build();
player.executeCommand("myplugin open")
.andWaitForMenuOpen(10)
.verifyMenuName("Main Menu")
.clickAtIndex(0)
.andWaitTicks(1);
player.placeBlock("minecraft:stone", 1, 100, 0).andWaitTicks(1);
assertThat(world).hasBlockAt(1, 100, 0).ofType("minecraft:stone");
}
}