Testing checklist¶
A runbook for verifying a MythicRod install end-to-end on a fresh Paper server. Follow top-to-bottom on a clean datapack so nothing leaks from a previous run.
0. Build & deploy¶
git clone https://github.com/xcutiboo/MythicRod.git
cd MythicRod
./gradlew :mythicrod-paper:shadowJar
cp mythicrod-paper/build/libs/MythicRod-Paper-*.jar /path/to/server/plugins/
Start the server. Look for the green banner in console:
If the plugin disabled itself, copy the stack trace and head to Troubleshooting.
1. Permissions sanity¶
Run as OP in a test world:
| Command | Expected |
|---|---|
/mythicrod |
Opens the main GUI hub |
/mr help |
Lists every command the user can see |
/mythicrod debug |
Console dump of feature toggles, drop counts, locale |
Switch to a non-OP alt and re-run /mr help. Only base, GUI, stats, drop
view, and leaderboard entries should appear.
2. Drop tables¶
/mythicrod drops, verify every category fromdrops.ymlis listed./mythicrod drops global, confirm the first page ofglobaldrops./mythicrod testroll 1000, should print a tier histogram with five most-frequent identifiers and a "No-eligible" count./mythicrod validate, config health check; investigate every red ✗.- Cast a rod and catch fish 20+ times. Watch for varied catches, including tiered messages (common / uncommon / rare / legendary).
3. Biome filters¶
- Stand in
minecraft:ocean. /mythicrod testroll 500, biome auto-detects from your location.- Catch a few fish; expect biome-scoped drops to surface (Nautilus Shell, Heart of the Sea, etc.).
- Move to
minecraft:plainsand repeat. Ocean-only drops should drop out of the rotation.
4. Permission gates¶
- Set
features.permissions.enabled: trueinconfig.yml, reload. - Revoke
mythicrod.drops.legendaryon the test user. /mythicrod testroll 5000,legendarycount should hit zero.- Grant the node, repeat, legendary catches return.
5. Custom rods¶
/mythicrod rod, visual + tier picker GUI opens./mythicrod give <player> legendary, target receives a Legendary rod./mythicrod rod inspectwhile holding it, console prints PDC keys (mythicrod:rod_tier,mythicrod:rod_id).- Catch with the legendary rod; rare/legendary tier rates should rise.
6. Stats + leaderboard¶
/mythicrod stats, own snapshot opens./mythicrod stats <other>, admin can view (stats.view.othersnode)./mythicrod top 10, leaderboard sorted by total catches./mythicrod stats reset <player>, wipes a row; rerun/topto confirm.
The default save cadence is 600 s; bump
timers.stats-save-interval-seconds to 30 in config.yml, reload, catch a
fish, wait, then check plugins/MythicRod/statistics.yml, your UUID block
should have a fresh last_fished.
7. In-game drop editor¶
- Open
/mythicrod drops <category>while OP. - Click any drop,
EditDropMenuopens. - Edit weight, amount, name, lore, glow, biomes, enchantments, flags,
permission. Save. Confirm
drops.ymlreflects the change. - Add a new drop in the menu, save, restart the server, confirm it persisted.
8. Configuration GUI¶
/mythicrod gui→ Config.- Toggle Sounds / Particles / Statistics / Biome drops / Permissions /
Debug, save and confirm
config.ymlupdates. - Cycle
delivery_modebetweenvanilla_retrieve,inventory, anddrop_at_player. Re-cast; reward delivery should respect the new mode.
9. Localization¶
config.yml:language.default: ja_JP./mythicrod reload./mr help, entries render in Japanese./mythicrod gui→ Language menu, per-player override picker opens.
10. Reload safety¶
- With players online and active stats, run
/mythicrod reload. - Catches mid-reload should not crash; you'll see the reload banner in console.
- Confirm
DropManagerpublished the new table (run/mythicrod debug).
11. API smoke test¶
Drop a tiny companion plugin onto the server with:
@Override
public void onEnable() {
MythicRodServices.find().ifPresent(api -> {
getLogger().info("MythicRod version: " + api.getVersion());
getLogger().info("Total drops: " + api.getDropCatalog().getTotalDropCount());
api.registerExternalDropProvider(new ExternalDropProvider() {
@Override public String getKey() { return "demo:gold"; }
@Override public double getWeight(PlatformPlayer p) { return 0.5D; }
@Override public PlatformItem generateItem(PlatformPlayer p) {
return api.createItem("GOLD_INGOT", 1).orElse(null);
}
@Override public String getDisplayName() { return "<gold>Demo Gold</gold>"; }
@Override public String getTier() { return "rare"; }
});
});
}
Catch a few fish, demo:gold should appear in catches.
Listen for MythicRodRewardRollEvent / MythicRodFishCatchEvent /
MythicRodStatsUpdateEvent to confirm the event pipeline fires.
12. Folia validation (when available)¶
If you have a Folia build, repeat sections 2, 5, and 11. Watch for thread
errors. MythicRod hands off to the target's region thread for inventory
mutation, so Inventory#addItem should never be called from the command
sender's thread.