PLUGINv3.0.2-1.20.1-26.2 · updated 2026년 9월 11일

BileTools - 테스트 플러그인을 더 빠르게

평가 없음
CREATED BYVolmitSoftware7 plugins

GITHUB  •  DOCUMENTATION  •  DISCORD

Overview - what BileTools does

BileTools는 플러그인 디렉토리를 감시하고 런타임 생명 주기 변경을 수행하여 재구성이 서버에서 실행 중인 상태로 이루어지도록 합니다.

  • 자동 핫 리로드. 기존 플러그인 JAR 위에 다시 컴파일하면 BileTools가 콘텐츠 변경을 자동으로 감지합니다.

  • 핫 드롭. 플러그인 디렉토리에 새 JAR를 드롭하면 전체 재시작 없이 런타임 로딩을 위해 대기열에 추가됩니다.

  • 자동 언로드. 추적된 JAR를 삭제하면 해당 플러그인이 언로드됩니다.

  • 생명 주기 명령. /bile 명령 트리에서 수동으로 로드, 언로드, 리로드, 설치 및 제거합니다.

  • 의존성 인식. 의존하는 플러그인은 교체 주위에서 언로드 및 리로드되며, 하나의 JAR를 맹목적으로 리로드하지 않습니다.

  • 로컬 플러그인 라이브러리. BileTools가 보는 모든 JAR는 버전별로 아카이브되며, 동일한 폴더가 /bile install에서 읽습니다. 백업 및 롤백은 동일한 기능입니다.

  • 원격 배포. 선택한 JAR 변경 사항을 인증된, 크기 제한이 있는, SHA-256 검증 전송을 통해 다른 구성된 서버로 푸시합니다.

감지, 간단히 말해: 크기 또는 타임스탬프 변경만 감시자를 깨웁니다. JAR의 SHA-256이 실제로 무엇이 리로드되는지를 결정하므로, 수정했지만 변경하지 않은 JAR는 무시됩니다.

BileTools는 개발 도구입니다. 플러그인 생명 주기 상태를 런타임에 의도적으로 조작합니다. 이것이 개발 루프를 빠르게 만드는 이유이며, 바로 그것이 개발 및 테스트 서버에 있어야 하는 이유입니다. 핫 리로드는 라이브 서버에서의 깨끗한 재시작을 대체할 수 없습니다.

호환성 - 런타임 및 Java

하나의 JAR가 모든 여섯 개의 런타임을 커버하며, Minecraft 1.20.1부터 현재 26.x까지입니다.

  • Paper는 서버의 공개 PluginManager를 통해 로드됩니다.

  • Purpur는 동일한 Paper-family 로드 및 언로드 경로를 사용합니다.

  • Leaf는 Paper-family 포크로, Paper처럼 처리됩니다.

  • Folia는 지역화된 스케줄링을 사용하며, BileTools는 folia 지원을 선언합니다.

  • Canvas는 Folia 포크로, 동일한 지역화 규칙을 따릅니다.

  • Spigot는 plugin.yml을 통해 로드되며, paper-plugin.yml만 포함된 JAR는 거부됩니다.

Java: Minecraft 1.20.1+에는 Java 17, 26.x+에는 Java 25를 사용합니다. 서버에서 이미 요구하는 것을 일치시킵니다.

Folia 및 Canvas: 지역화된 서버에서의 핫 리로드는 본질적으로 더 취약합니다. folia 지원을 선언하지 않은 타사 플러그인은 핫 로드 시 실패할 수 있습니다.

명령 및 권한

루트 명령은 /biletools입니다. 별칭: /bile, /bi, /b입니다.

/bile load <plugin>                    Load a plugin jar from the plugins directory
/bile unload <plugin>                  Unload an installed plugin
/bile reload <plugin>                  Reload an installed plugin
/bile uninstall <plugin>               Delete a plugin jar from the plugins directory
/bile install <plugin> [version=..]    Install a plugin from the BileTools library
/bile library [plugin=..]              List library plugins, or versions for one plugin

하나의 권한이 전체 트리를 커버합니다:

bile.use     Gives access to BileTools     default: op

수동 명령은 항상 감시자 필터를 우회합니다. 탭 완성은 설치된 플러그인, 라이브러리 플러그인 및 저장된 버전을 제안합니다. /bile를 단독으로 실행하면 페이지 매김된 호버 및 클릭 도움말 메뉴가 열립니다.

선택적 인수는 이름이 지정되어야 합니다. 위치적으로 전달하면 "예상치 못한 인수"로 실패합니다.

/bile install MyPlugin                   works  (defaults to version=latest)
/bile install MyPlugin version=1.4.2     works
/bile install MyPlugin version=latest    works
/bile install MyPlugin 1.4.2             FAILS
/bile library                            works  (lists everything)
/bile library plugin=MyPlugin            works
/bile library MyPlugin                   FAILS

구성 - 전체 기본 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 자동 핫 드롭, 리로드 및 언로드를 건너뛸 플러그인 이름입니다. 기본값은 일반적으로 위험하거나 개발 박스에서 자동 리로드하기에 쓸모없는 것들입니다.

  • watcher.only 이 목록이 비어 있지 않으면, 오직 이 플러그인들만 자동 관리됩니다. 바쁜 서버에서 하나 또는 두 개의 프로젝트를 적극적으로 개발할 때 유용합니다.

  • watcher.active-poll-ticks / idle-poll-ticks 변경 사항이 도착하는 동안 감시자가 스캔하는 빈도와 디렉토리가 안정화된 후의 빈도입니다.

  • watcher.fingerprint-debounce-ticks JAR의 지문이 안정적으로 유지되어야 생명 주기 작업이 시작됩니다. 이것이 반쯤 작성된 JAR가 로드되는 것을 막습니다.

  • watcher.coalesce-window-ticks 인접한 JAR 쓰기를 하나의 의존성 순서로 리로드 플러시로 배치하여 다중 모듈 빌드가 다섯 개의 개별 리로드를 트리거하지 않도록 합니다.

  • archive-plugins 각 플러그인 JAR를 교체되기 전에 라이브러리 폴더에 아카이브합니다.

  • lifecycle.health-check 로드 또는 리로드 후 플러그인이 실제로 등록되고 활성화되었는지 확인합니다. 실패한 작업은 플러그인을 더럽혀 자동 리로드를 일시 중지합니다.

  • observability.log-timings 각 작업에 대해 각 단계의 타이밍(언로드, 의존성, 로드, 건강)을 기록합니다.

플러그인 라이브러리 및 롤백

plugins/BileTools/library/<PluginName>/<version>.jar

선택적 archive-plugins가 켜져 있으면, BileTools가 보는 모든 플러그인 JAR는 교체되기 전에 여기에 복사됩니다. 즉, 라이브러리는 롤백 기록으로도 사용되며, /bile library는 당신이 가진 것을 나열하고, /bile install <plugin> version=<version>는 그 중 어떤 것이든 실행 중인 서버로 다시 가져옵니다.

원격 배포

선택적입니다. 마스터 서버가 선택한 JAR 변경 사항을 하나 이상의 슬레이브 서버로 푸시할 수 있습니다.

  • 각 수신 서버에서: remote-deploy.slave.slave-enabled: true로 설정하고, 포트를 선택한 후 slave-payload를 공유 비밀번호로 설정합니다.

  • 전송 서버에서: remote-deploy.master.master-enabled: true로 설정하고, 아래 형식으로 각 대상을 나열한 후 master-deploy-to에서 전달할 플러그인을 나열합니다.

master-deploy-to:
- host:port:password

전송은 임시 .part 파일에 저장되며, 비밀번호, 파일 이름, 전송 크기 및 SHA-256이 모두 확인된 후에만 승격됩니다. 파일 이름은 정리되며, 플러그인 폴더를 벗어나는 경로는 거부됩니다. 기본값은 256 MB 한도와 15초 소켓 타임아웃입니다.

언어 - 모든 17개 로케일 코드

영어가 기본적으로 선택됩니다. 전환하려면 localeplugins/BileTools/language.yml에 설정합니다:

locale: en_US

de_DE    German (Germany)
es_ES    Spanish (Spain)
fi_FI    Finnish (Finland)
fr_FR    French (France)
he_IL    Hebrew (Israel)
it_IT    Italian (Italy)
ja-JP    Japanese (Japan)
ko_KR    Korean (South Korea)
lt_LT    Lithuanian (Lithuania)
nl_NL    Dutch (Netherlands)
pl_PL    Polish (Poland)
pt_PT    Portuguese (Portugal)
ru_RU    Russian (Russia)
tr_TR    Turkish (Turkey)
vi_VI    Vietnamese (Vietnam)
zh_CN    Chinese (Simplified)
zh_TW    Chinese (Traditional)

개별 줄을 수정하여 번들을 건드리지 않고도 오버라이드할 수 있습니다. messages: 섹션 아래에 추가한 모든 것이 우선하며, 생략한 모든 것은 선택한 언어로 되돌아가고, 그 다음 영어로 되돌아갑니다. 파일은 저장 시 핫 로드됩니다.

리로드가 실제로 실행되는 방법

모든 작업 핫 드롭, 리로드, 설치, 언인스톨, 원격 배포: 하나의 직렬화된 큐를 통해 중복 키와 함께 진행되며, 전용 플러그인 작업 스레드에서 실행됩니다. 생명 주기 변형 자체는 항상 글로벌 또는 메인 스레드에서 실행됩니다.

감지 -> 안정화 -> 지문 -> 대기열 -> 언로드 -> 로드 -> 의존성 -> 건강 검사

VolmLib의 ReloadAware 계약을 구현하는 플러그인은 작업이 취소되기 전에 HOT_RELOAD 또는 HOT_UNLOAD 콜백을 받으며, 스케줄러가 여전히 살아 있는 동안 진행 중인 작업을 소모할 수 있습니다.

언로드는 플러그인을 라이브 명령 그래프, 서비스, 메시징 채널 및 조회 테이블에서 제거한 후 클래스 로더를 닫습니다. 이로 인해 명령 및 탭 완성이 올바르게 돌아옵니다.

생명 주기 대기 시간은 명시적인 타임아웃을 가집니다. 멈춘 작업은 실패로 나타나며 플러그인을 더럽히고 큐를 차단하는 대신 마크합니다. observability.log-timings를 켜면 모든 작업에 대한 각 단계의 타이밍을 볼 수 있습니다.

핫 리로드의 알려진 한계

모든 플러그인이 깨끗하게 핫 리로드될 수 있는 것은 아니며, BileTools는 그렇지 않다고 주장하지 않습니다. 일반적으로 클래스 리로드를 견디지 못하는 것들:

  • 정적 상태 클래스 리로드를 통해 유지되는 필드입니다.

  • 백그라운드 스레드 플러그인 스케줄러 외부에서 시작된 작업입니다.

  • 네이티브 리소스 JVM 외부에 바인딩된 것입니다.

  • 외부 연결 자체 수명 주기를 가진 소켓 및 풀입니다.

  • 플러그인 전용 내부 다른 플러그인이 소유한 캐시 및 레지스트리입니다.

중요하거나 불명확한 플러그인은 무시 목록에 두고, 반복하는 동안 타이밍 로그를 켜고, 상태를 안전하게 재구성할 수 없는 경우 서버를 재시작하십시오.

BileTools - 테스트 플러그인 더 빠르게FREE

멋진 것을 만들 준비가 되셨나요?

MCModels 커뮤니티에 가입하고 오늘 꿈꾸던 프로젝트를 시작하세요.