A real server
Your plugin runs on the PocketMine-MP version you pick, with every event fired in the real order. If it passes in Golem, it works in production.
One command boots a real PocketMine-MP server, loads your plugin from source and fills it with simulated players. No mocks, no client, no more testing by hand.
A test spawns Steve, he joins a real server, gets greeted, and the test checks it. Then the same thing for every behaviour of your plugin, in one command.
public function testGreetsPlayersByName(): Generator
{
$steve = yield $this->golem('Steve');
$this->assertReceivedMessage($steve, 'Welcome, Steve!');
$this->assertHasItem($steve, VanillaItems::BREAD(), 3);
}From a plugin with no tests to a green run in about five minutes.
Each test reports as soon as it finishes, with how long it took in milliseconds and server ticks. This is the real output of the example plugin shipped with Golem.
You see what was expected, what the server actually sent, and the exact line of your test.
Add one step to your workflow. PocketMine is cached between runs, a JUnit report is written, and failures are annotated right on the diff.
jobs:
golem:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: achedon12/golem@v0Golem is open source (MIT) and young: feedback shapes what comes next.