
BileTools - Test Plugins Sneller
GITHUB • DOCUMENTATION • DISCORD
Overzicht - wat BileTools doet
BileTools kijkt naar je plugins-directory en stuurt runtime-lifecycle-wijzigingen aan, zodat een rebuild in de draaiende server terechtkomt in plaats van een herstart.
Auto hot-reload. Hercompileer over een bestaande plugin jar en BileTools detecteert de inhoudsverandering automatisch.
Hot-drop. Drop een nieuwe jar in de plugins-directory en deze wordt in de wachtrij gezet voor runtime-laden zonder een volledige herstart.
Auto-unload. Verwijder een getrackte jar en de bijbehorende plugin wordt ontladen.
Lifecycle-commando's. Laad, ontlaad, herlaad, installeer en deïnstalleer handmatig vanuit de /bile-commando-boom.
Afhankelijkheidsbewust. Afhankelijke plugins worden ontladen en herladen rond een vervanging in plaats van blind één jar te herladen.
Lokale pluginbibliotheek. Elke jar die BileTools ziet, wordt gearchiveerd op versie, en dezelfde map is wat /bile install leest. Backup en rollback zijn dezelfde functie.
Remote deploy. Push geselecteerde jar-wijzigingen naar andere geconfigureerde servers via een geauthenticeerde, grootte-beperkte, SHA-256 geverifieerde overdracht.
Detectie, in het kort: een grootte- of tijdstempelverandering wekt alleen de watcher. Een SHA-256 van de jar bepaalt of er daadwerkelijk iets herladen wordt, dus een jar die je hebt aangeraakt maar niet veranderd is, wordt genegeerd.
BileTools is een ontwikkeltool. Het manipuleert opzettelijk de plugin-lifecycle-status tijdens runtime. Dat is precies wat de ontwikkelingscyclus snel maakt, en precies waarom het op dev- en testservers hoort. Hot reload is geen vervanging voor een schone herstart op een live server.
Compatibiliteit - runtimes en Java
Één jar dekt alle zes runtimes, Minecraft 1.20.1 tot en met huidige 26.x.
Paper laadt via de publieke PluginManager van de server
Purpur dezelfde Paper-familie laad- en ontlaadpaden
Leaf Paper-familie fork, behandeld als Paper
Folia region-gebaseerde planning, BileTools verklaart folia-ondersteund
Canvas Folia fork, dezelfde region-gebaseerde regels
Spigot laadt via plugin.yml; jars die alleen paper-plugin.yml verzenden worden geweigerd
Java: Java 17 voor Minecraft 1.20.1+, Java 25 voor 26.x+. Stem af op wat je server al vereist.
Folia en Canvas: hot reload op region-gebaseerde servers is inherent fragieler. Een derde-partij plugin die geen folia-ondersteuning verklaart, kan nog steeds falen wanneer deze hot-loaded.
Commando's en permissies
Rootcommando is /biletools. Aliassen: /bile, /bi, /b.
/bile load <plugin> Laad een plugin jar uit de plugins-directory
/bile unload <plugin> Ontlaad een geïnstalleerde plugin
/bile reload <plugin> Herlaad een geïnstalleerde plugin
/bile uninstall <plugin> Verwijder een plugin jar uit de plugins-directory
/bile install <plugin> [version=..] Installeer een plugin uit de BileTools-bibliotheek
/bile library [plugin=..] Lijst bibliotheekplugins, of versies voor één pluginÉén permissie dekt de hele boom:
Handmatige commando's omzeilen altijd de watcher-filters. Tab-completion suggereert geïnstalleerde plugins, bibliotheekplugins en opgeslagen versies. Het uitvoeren van /bile op zichzelf opent een gepagineerd hover-en-klik helpmenu.
Optionele argumenten moeten benoemd worden. Positiegewijs doorgeven mislukt met "onverwacht argument":
/bile install MyPlugin werkt (standaard op versie=latest)
/bile install MyPlugin version=1.4.2 werkt
/bile install MyPlugin version=latest werkt
/bile install MyPlugin 1.4.2 MIST
/bile library werkt (lijst alles)
/bile library plugin=MyPlugin werkt
/bile library MyPlugin MISTConfiguratie - volledige standaard config.yml
remote-deploy:
slave:
slave-enabled: false
slave-port: 9876
slave-payload: pickapassword
master:
master-enabled: false
master-deploy-to:
- yourserver.com:9876:password
master-deploy-signatures:
- MyPlugin
- AnotherPlugin
socket-timeout-ms: 15000
max-transfer-bytes: 268435456
archive-plugins: true
watcher:
idle-poll-ticks: 20
active-poll-ticks: 5
fingerprint-debounce-ticks: 8
ignore:
- LuckPerms
- Vault
- ProtocolLib
- packetevents
- WorldGuard
- CoreProtect
- spark
only: []
coalesce-window-ticks: 10
observability:
log-timings: true
lifecycle:
health-check: truewatcher.ignore Plugin-namen die automatisch hot-drop, herladen en ontladen zullen overslaan. De standaardinstellingen zijn dingen die meestal gevaarlijk of nutteloos zijn om automatisch te herladen op een dev-box.
watcher.only Wanneer deze lijst niet leeg is, alleen deze plugins worden automatisch beheerd. Handig wanneer je actief aan één of twee projecten werkt op een drukke server.
watcher.active-poll-ticks / idle-poll-ticks Hoe vaak de watcher scant terwijl er wijzigingen binnenkomen, versus eenmaal de directory is gestabiliseerd.
watcher.fingerprint-debounce-ticks Hoe lang de vingerafdruk van een jar moet stabiel blijven voordat lifecycle-werk begint. Dit voorkomt dat halfgeschreven jars worden geladen.
watcher.coalesce-window-ticks Groepeert nabijgelegen jar-schrijvingen in één afhankelijkheids-geordende herlaadflush, zodat een multi-module build niet vijf afzonderlijke herlaadacties triggert.
archive-plugins Archiveer elke plugin jar in de bibliotheekmap voordat deze wordt vervangen.
lifecycle.health-check Na een laad- of herlaadactie verifieer of de plugin daadwerkelijk geregistreerd en ingeschakeld is. Een mislukte operatie markeert de plugin als vuil en pauzeert automatische herlaadacties voor deze.
observability.log-timings Log per-fase timing (ontladen, afhankelijkheden, laden, gezondheid) voor elke operatie.
Pluginbibliotheek en rollback
plugins/BileTools/library/<PluginName>/<version>.jar
Met archive-plugins aan, wordt elke plugin jar die BileTools ziet hier gekopieerd voordat deze wordt vervangen. Dat betekent dat de bibliotheek ook als een rollbackgeschiedenis fungeert, /bile library toont wat je hebt, en /bile install <plugin> version=<version> plaatst een van deze terug in de draaiende server.
Remote deploy
Optioneel. Laat een masterserver geselecteerde jar-wijzigingen naar een of meer slave-servers pushen.
Op elke ontvangende server: stel remote-deploy.slave.slave-enabled: true, kies een poort en stel slave-payload in op een gedeeld wachtwoord.
Op de verzendende server: stel remote-deploy.master.master-enabled: true, lijst elke doelserver in master-deploy-to in de onderstaande vorm, en lijst welke plugins moeten worden doorgestuurd in master-deploy-signatures.
master-deploy-to:
- host:port:passwordOverdrachten komen aan in een tijdelijk .part-bestand en worden alleen gepromoveerd nadat het wachtwoord, de bestandsnaam, de overdrachtsgrootte en de SHA-256 allemaal zijn gecontroleerd. Bestandsnamen worden gesaneerd en elk pad dat de plugins-map zou ontsnappen, wordt geweigerd. Standaardinstellingen zijn een limiet van 256 MB en een socket-timeout van 15 seconden.
Talen - alle 17 locale codes
Engels is standaard geselecteerd. Om te schakelen, stel locale in plugins/BileTools/language.yml:
locale: en_US
de_DE Duits (Duitsland)
es_ES Spaans (Spanje)
fi_FI Fins (Finland)
fr_FR Frans (Frankrijk)
he_IL Hebreeuws (Israël)
it_IT Italiaans (Italië)
ja-JP Japans (Japan)
ko_KR Koreaans (Zuid-Korea)
lt_LT Litouws (Litouwen)
nl_NL Nederlands (Nederland)
pl_PL Pools (Polen)
pt_PT Portugees (Portugal)
ru_RU Russisch (Rusland)
tr_TR Turks (Turkije)
vi_VI Vietnamees (Vietnam)
zh_CN Chinees (Vereenvoudigd)
zh_TW Chinees (Traditioneel)Je kunt ook individuele regels overschrijven zonder de bundels aan te raken. Alles wat je toevoegt onder een messages: sectie in language.yml wint; alles wat je weglaat valt terug op de geselecteerde taal, en vervolgens op het Engels. Het bestand wordt hot-loaded bij opslaan.
Hoe een reload daadwerkelijk wordt uitgevoerd
Elke operatie hot-drop, herladen, installeren, deïnstalleren, remote deploy: gaat via één geserialiseerde wachtrij met dedupe-sleutels, op een speciale plugin-operatiedraad. Lifecycle-mutaties zelf draaien altijd op de globale of hoofdthread.
detect -> stabiliseren -> vingerafdruk -> wachtrij -> ontladen -> laden -> afhankelijkheden -> gezondheidscontrole
Plugins die VolmLib's ReloadAware contract implementeren, krijgen een HOT_RELOAD of HOT_UNLOAD callback voorafgaand aan hun taken worden geannuleerd en luisteraars worden afgebroken, zodat ze in-flight werk kunnen afhandelen terwijl hun scheduler nog actief is.
Ontladen verwijdert de plugin uit de live commando-grafiek, services, messagingkanalen en lookup-tabellen voordat de classloader wordt gesloten, wat de reden is dat commando's en tab-completion correct terugkomen in plaats van half-verbonden.
Lifecycle-wachttijden hebben een expliciete timeout. Een vastgelopen operatie verschijnt als een mislukking en markeert de plugin als vuil in plaats van de wachtrij te blokkeren. Zet observability.log-timings aan om per-fase timing voor elke operatie te zien.
Bekende limieten van hot reload
Niet elke plugin kan schoon worden hot-reloaded, en BileTools doet niet alsof dat zo is. Dingen die over het algemeen niet overleven bij een class reload:
Statische status velden die worden vastgehouden tijdens een class reload
Achtergrondthreads werk dat buiten de plugin-scheduler is gestart
Native resources alles wat buiten de JVM is gebonden
Externe verbindingen sockets en pools met hun eigen levensduur
Plugin-specifieke internals caches en registraties die andere plugins bezitten
Houd kritieke of obscure plugins in de negligeerlijst, zet timinglogs aan terwijl je iteraties uitvoert, en wanneer de status niet veilig kan worden gereconstrueerd, herstart de server.
Klaar om iets geweldigs te maken?
Word lid van de MCModels-community en begin vandaag nog met het bouwen van je droomprojecten.










