Skip to content

Repository files navigation

BileTools

Tools for making garbage

Language and localization

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.

What the hell does this do?

  • 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.

Compatibility

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.1 through current 26.x servers
  • plugin.yml api-version: 1.20
  • Production compile floor: Paper and Spigot API 1.20.1 with current 26.x compatibility compile gates
  • Runtime JVM: Java 17 on 1.20.1; newer servers still require the JVM version mandated by that server (Java 25 on 26.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

Folia / Canvas caveats

  • Third-party plugins without folia-supported: true may 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 throws UnsupportedOperationException)
  • Runtime hot-load preserves required/optional dependency discovery, but cannot recreate Paper's startup provider graph; missing BEFORE, AFTER, and OMIT dependencies are loaded first so the public PluginManager can validate the target plugin

Watcher filters (biletools.yml)

  • 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|reload always 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 enable
  • observability.log-timings — log unload/load/reload phase timings

About

Tools for making garbage

Topics

Resources

Stars

52 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages