PLUGINv3.0.2-1.20.1-26.2 · updated 11 sep 2026

BileTools - Test Plugins Sneller

Geen Beoordeling
CREATED BYVolmitSoftware7 plugins

GITHUBDOCUMENTATIONDISCORD

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                      MIST

Configuratie - 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: true
  • watcher.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:password

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

BileTools - Test Plugins SnellerFREE

Klaar om iets geweldigs te maken?

Word lid van de MCModels-community en begin vandaag nog met het bouwen van je droomprojecten.