
BileTools - Kiểm tra Plugin Nhanh Hơn
GITHUB • DOCUMENTATION • DISCORD
Tổng quan - BileTools làm gì
BileTools theo dõi thư mục plugin của bạn và điều khiển các thay đổi vòng đời runtime, vì vậy một lần xây dựng sẽ được đưa vào máy chủ đang chạy thay vì khởi động lại.
Tự động tải lại nóng. Biên dịch lại trên một jar plugin hiện có và BileTools tự động phát hiện sự thay đổi nội dung.
Hot-drop. Thả một jar mới vào thư mục plugins và nó sẽ được xếp hàng để tải trong runtime mà không cần khởi động lại hoàn toàn.
Tự động gỡ bỏ. Xóa một jar đã theo dõi và plugin của nó sẽ bị gỡ bỏ.
Lệnh vòng đời. Tải, gỡ bỏ, tải lại, cài đặt và gỡ cài đặt bằng tay từ cây lệnh /bile.
Nhận thức về phụ thuộc. Các plugin phụ thuộc sẽ được gỡ bỏ và tải lại xung quanh một sự thay thế thay vì tải lại một jar một cách mù quáng.
Thư viện plugin cục bộ. Mỗi jar mà BileTools thấy được lưu trữ theo phiên bản, và cùng một thư mục là nơi mà /bile install đọc từ. Sao lưu và khôi phục là cùng một tính năng.
Triển khai từ xa. Đẩy các thay đổi jar đã chọn đến các máy chủ được cấu hình khác qua một chuyển giao xác thực, giới hạn kích thước, được xác minh bằng SHA-256.
Phát hiện, tóm lại: một thay đổi kích thước hoặc thời gian chỉ đánh thức người theo dõi. Một SHA-256 của jar quyết định xem có gì thực sự được tải lại hay không, vì vậy một jar bạn đã chạm vào nhưng không thay đổi sẽ bị bỏ qua.
BileTools là một công cụ phát triển. Nó cố ý thao tác trạng thái vòng đời plugin trong runtime. Đó chính xác là điều làm cho vòng lặp phát triển nhanh, và chính xác là lý do tại sao nó thuộc về các máy chủ phát triển và thử nghiệm. Tải lại nóng không phải là một sự thay thế cho một khởi động lại sạch trên một máy chủ đang hoạt động.
Tính tương thích - runtime và Java
Một jar bao phủ tất cả sáu runtime, Minecraft 1.20.1 đến phiên bản hiện tại 26.x.
Paper tải qua PluginManager công khai của máy chủ
Purpur cùng các đường tải và gỡ bỏ của Paper
Leaf nhánh của Paper, được xử lý như Paper
Folia lập lịch theo vùng, BileTools tuyên bố hỗ trợ folia
Canvas nhánh của Folia, cùng các quy tắc theo vùng
Spigot tải qua plugin.yml; các jar chỉ gửi paper-plugin.yml sẽ bị từ chối
Java: Java 17 cho Minecraft 1.20.1+, Java 25 cho 26.x+. Khớp với bất cứ điều gì mà máy chủ của bạn đã yêu cầu.
Folia và Canvas: tải lại nóng trên các máy chủ theo vùng vốn dĩ dễ bị tổn thương hơn. Một plugin bên thứ ba không tuyên bố hỗ trợ folia có thể vẫn thất bại khi được tải nóng.
Lệnh và quyền
Lệnh gốc là /biletools. Biệt danh: /bile, /bi, /b.
/bile load <plugin> Tải một jar plugin từ thư mục plugins
/bile unload <plugin> Gỡ bỏ một plugin đã cài đặt
/bile reload <plugin> Tải lại một plugin đã cài đặt
/bile uninstall <plugin> Xóa một jar plugin khỏi thư mục plugins
/bile install <plugin> [version=..] Cài đặt một plugin từ thư viện BileTools
/bile library [plugin=..] Liệt kê các plugin thư viện, hoặc phiên bản cho một pluginMột quyền bao phủ toàn bộ cây:
Các lệnh thủ công luôn bỏ qua các bộ lọc người theo dõi. Hoàn thành tab gợi ý các plugin đã cài đặt, plugin thư viện và các phiên bản đã lưu. Chạy /bile một mình mở một menu trợ giúp có thể cuộn và nhấp.
Các đối số tùy chọn phải được đặt tên. Truyền chúng theo vị trí sẽ thất bại với "đối số không mong đợi":
/bile install MyPlugin hoạt động (mặc định là version=latest)
/bile install MyPlugin version=1.4.2 hoạt động
/bile install MyPlugin version=latest hoạt động
/bile install MyPlugin 1.4.2 THẤT BẠI
/bile library hoạt động (liệt kê mọi thứ)
/bile library plugin=MyPlugin hoạt động
/bile library MyPlugin THẤT BẠICấu hình - cấu hình mặc định đầy đủ 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 Tên plugin mà tự động tải lại nóng, tải lại và gỡ bỏ sẽ bỏ qua. Các mặc định là những thứ thường nguy hiểm hoặc vô dụng để tự động tải lại trên một hộp phát triển.
watcher.only Khi danh sách này không rỗng, chỉ những plugin này sẽ được quản lý tự động. Hữu ích khi bạn đang phát triển một hoặc hai dự án trên một máy chủ bận rộn.
watcher.active-poll-ticks / idle-poll-ticks Tần suất mà người theo dõi quét trong khi có sự thay đổi, so với một lần khi thư mục đã ổn định.
watcher.fingerprint-debounce-ticks Thời gian mà dấu vân tay của một jar phải giữ ổn định trước khi công việc vòng đời bắt đầu. Đây là điều ngăn chặn các jar chưa hoàn thành được tải.
watcher.coalesce-window-ticks Gộp các ghi jar gần nhau thành một lần tải lại theo thứ tự phụ thuộc, vì vậy một lần xây dựng đa mô-đun không kích hoạt năm lần tải lại riêng biệt.
archive-plugins Lưu trữ mỗi jar plugin vào thư mục thư viện trước khi nó bị thay thế.
lifecycle.health-check Sau khi tải hoặc tải lại, xác minh rằng plugin thực sự đã được đăng ký và kích hoạt. Một hoạt động thất bại đánh dấu plugin bẩn và tạm dừng các tải lại tự động cho nó.
observability.log-timings Ghi lại thời gian theo từng giai đoạn (gỡ bỏ, phụ thuộc, tải, kiểm tra sức khỏe) cho mỗi hoạt động.
Thư viện plugin và khôi phục
plugins/BileTools/library/<PluginName>/<version>.jar
Với archive-plugins được bật, mỗi jar plugin mà BileTools thấy được sao chép ở đây trước khi nó bị thay thế. Điều đó có nghĩa là thư viện cũng hoạt động như một lịch sử khôi phục, /bile library liệt kê những gì bạn có, và /bile install <plugin> version=<version> đưa bất kỳ thứ gì trong đó trở lại máy chủ đang chạy.
Triển khai từ xa
Tùy chọn. Cho phép một máy chủ chính đẩy các thay đổi jar đã chọn đến một hoặc nhiều máy chủ phụ.
Trên mỗi máy chủ nhận: đặt remote-deploy.slave.slave-enabled: true, chọn một cổng và đặt slave-payload thành một mật khẩu chung.
Trên máy chủ gửi: đặt remote-deploy.master.master-enabled: true, liệt kê mỗi mục tiêu trong master-deploy-to theo hình thức dưới đây, và liệt kê các plugin nào để chuyển tiếp trong master-deploy-signatures.
master-deploy-to:
- host:port:passwordCác chuyển giao sẽ đến trong một tệp tạm thời .part và chỉ được nâng cấp sau khi mật khẩu, tên tệp, kích thước chuyển giao và SHA-256 đều hợp lệ. Tên tệp sẽ được làm sạch và bất kỳ đường dẫn nào có thể thoát khỏi thư mục plugins sẽ bị từ chối. Các mặc định là giới hạn 256 MB và thời gian chờ socket 15 giây.
Ngôn ngữ - tất cả 17 mã địa phương
Tiếng Anh được chọn theo mặc định. Để chuyển đổi, đặt locale trong plugins/BileTools/language.yml:
locale: en_US
de_DE Đức (Đức)
es_ES Tây Ban Nha (Tây Ban Nha)
fi_FI Phần Lan (Phần Lan)
fr_FR Pháp (Pháp)
he_IL Hebrew (Israel)
it_IT Ý (Ý)
ja-JP Nhật Bản (Nhật Bản)
ko_KR Hàn Quốc (Hàn Quốc)
lt_LT Litva (Litva)
nl_NL Hà Lan (Hà Lan)
pl_PL Ba Lan (Ba Lan)
pt_PT Bồ Đào Nha (Bồ Đào Nha)
ru_RU Nga (Nga)
tr_TR Thổ Nhĩ Kỳ (Thổ Nhĩ Kỳ)
vi_VI Việt Nam (Việt Nam)
zh_CN Trung Quốc (Đơn giản)
zh_TW Trung Quốc (Truyền thống)Bạn cũng có thể ghi đè các dòng cá nhân mà không cần chạm vào các gói. Bất cứ điều gì bạn thêm dưới một messages: phần trong language.yml sẽ thắng; mọi thứ bạn để lại sẽ quay lại ngôn ngữ đã chọn, sau đó là tiếng Anh. Tệp sẽ được tải nóng khi lưu.
Cách một lần tải lại thực sự chạy
Mỗi hoạt động tải nóng, tải lại, cài đặt, gỡ cài đặt, triển khai từ xa: đi qua một hàng đợi tuần tự với các khóa dedupe, trên một luồng hoạt động plugin chuyên dụng. Các biến đổi vòng đời tự chúng luôn chạy trên luồng toàn cầu hoặc chính.
detect -> stabilize -> fingerprint -> queue -> unload -> load -> dependents -> health check
Các plugin thực hiện hợp đồng ReloadAware của VolmLib nhận được một callback HOT_RELOAD hoặc HOT_UNLOAD trước khi các tác vụ của chúng bị hủy và các trình lắng nghe bị xóa, vì vậy chúng có thể xả công việc đang bay trong khi bộ lập lịch của chúng vẫn còn sống.
Gỡ bỏ sẽ làm sạch plugin khỏi đồ thị lệnh trực tiếp, dịch vụ, kênh nhắn tin và bảng tra cứu trước khi đóng classloader của nó, đó là lý do tại sao các lệnh và hoàn thành tab trở lại đúng thay vì bị kết nối một nửa.
Các chờ vòng đời mang một thời gian chờ rõ ràng. Một hoạt động bị kẹt sẽ nổi lên như một thất bại và đánh dấu plugin bẩn thay vì chặn hàng đợi. Bật observability.log-timings để xem thời gian theo từng giai đoạn cho mỗi hoạt động.
Giới hạn đã biết của tải lại nóng
Không phải mọi plugin đều có thể được tải lại nóng một cách sạch sẽ, và BileTools không giả vờ như vậy. Những thứ thường không sống sót sau một lần tải lại lớp:
Trạng thái tĩnh các trường giữ qua một lần tải lại lớp
Luồng nền công việc bắt đầu bên ngoài bộ lập lịch plugin
Tài nguyên gốc bất kỳ thứ gì được liên kết bên ngoài JVM
Kết nối bên ngoài các socket và pool có vòng đời riêng của chúng
Nội bộ cụ thể của plugin bộ nhớ cache và đăng ký mà các plugin khác sở hữu
Giữ các plugin quan trọng hoặc khó hiểu trong danh sách bỏ qua, bật nhật ký thời gian trong khi bạn lặp lại, và khi trạng thái không thể được tái tạo một cách an toàn, hãy khởi động lại máy chủ.
Sẵn sàng tạo ra điều gì đó tuyệt vời chưa?
Tham gia cộng đồng MCModels và bắt đầu xây dựng dự án mơ ước của bạn hôm nay.










