Tools for making garbage
Canonical English is defined in the typed Java catalog at src/main/java/com/volmit/bile/localization/BileMessages.java and generated as languages/en_US.toml. The 17 repository translations download from the master language directory into languages/<locale>.toml only when missing. BileTools-owned keys use direct command, message, and gui sections without an outer bile table, and the English header documents each placeholder. Edit those TOML files directly or use /bile language server edit; local files are never replaced and omitted entries resolve from code-owned English. /bile config opens the centered settings and language dashboard and confirms edits with one hot-load line, while /bile debug dump produces the BileTools report used by VolmLib's combined debug dump.
- Any plugin jar files modified while loaded (maven compile or export or even drag/drop) are automatically reloaded. So now all you have to do is smack the run button and bam, its already in the game without reloading, dragging or really doing anything. Psst... Works best with multiple monitors.
- New Plugins are hot-dropped into the server when they are added to the plugins folder
- It's basically plugman also. You can unload load and reload plugins.
| Runtime | Support | Notes |
|---|---|---|
| Paper 1.20.1+ | Primary | Public PluginManager load path; hot-unload remains best-effort |
| Purpur 1.20.1+ | Primary | Paper-family (same load/unload paths) |
| Leaf | Primary | Paper-family fork; treated like Paper |
| Folia 1.20.1+ | Supported | folia-supported: true; GlobalRegionScheduler only; hot-reload is best-effort |
| Canvas | Supported | Folia fork; same regionized scheduling rules as Folia |
| Spigot 1.20.1+ | Best-effort | paper-plugin.yml-only jars are rejected; dual-descriptor jars load through plugin.yml |
- One jar supports Minecraft
1.20.1through current26.xservers plugin.ymlapi-version:1.20- Production compile floor: Paper and Spigot API
1.20.1with current26.xcompatibility compile gates - Runtime JVM: Java 17 on
1.20.1; newer servers still require the JVM version mandated by that server (Java 25 on26.x) - Build JVM: Java 25+
- Lifecycle mutations always run on the global/main thread (never on PluginOps / network threads)
- On Folia/Canvas, player sounds/messages that touch entities are routed through the entity scheduler
- Third-party plugins without
folia-supported: truemay still fail when hot-loaded - Plugin reload on regionized servers is inherently riskier than on single-threaded Paper/Spigot
- Classic
Bukkit.getScheduler()is never used on Folia/Canvas (it throwsUnsupportedOperationException) - Runtime hot-load preserves required/optional dependency discovery, but cannot recreate Paper's startup provider graph; missing
BEFORE,AFTER, andOMITdependencies are loaded first so the public PluginManager can validate the target plugin
watcher.ignore— plugin names that auto hot-drop/reload/unload will skip (defaults include LuckPerms, Vault, ProtocolLib, …)watcher.only— if non-empty, only these plugins are auto-managed (allowlist mode)- Manual
/bile load|unload|reloadalways bypasses ignore/only - Automatic jar changes use a fixed three-second latest-state queue with one dependency-aware reload batch in flight and one trailing batch retained
lifecycle.health-check— fail reload if plugin is not actually enabled/registered after enableobservability.log-timings— log unload/load/reload phase timings