• Chào bạn, hãy đăng ký hoặc đăng nhập để tham gia cùng bọn mình và sử dụng được đầy đủ chức năng của diễn đàn :).
Sky Herobrine

Java Tạo plugin chạy đa phiên bản trên server

Sky Herobrine

THÀNH VIÊN
Tham gia
25/06/2017
Bài viết
96
Chào mọi người, mình mới bắt đầu quay lại tạo các plugins, mình đang vướng vấn đề là một plugins có thể chạy trên nhiều phiên bản khác nhau, ví dụ một plugins có thể không chỉ chạy trên 1.13 mà thậm chí nó có thể chạy phiên bản lớn hơn nó hoặc là nhỏ hơn nó. Mình mới tìm hiểu trên youtube cũng như các nguồn dữ liệu khác mà mình ko tìm được câu trả lời, nhưng mình tìm được vài giải pháp nhưng không biết cái nào hiệu quả hơn.
1. Bỏ nhiều library version vào project.
2. Sử dụng NMS (cái này nghe rồi nhưng khá khó để hiểu bản chất)
3. Sử dụng Reflection (cái này chưa biết nhưng có nghe sơ qua)
Xin mọi người giúp đỡ ạ, cảm ơn mn.
 
Ôg ngủ hơi lâu h là ngày tận thế của 4rum r
 
1. api spigot là backward compatible. khi dev dùng api bản thấp nhất, thì khi dùng trên sv bảo cao hơn sẽ dùng dc
2. nms cũng k lq gì tới nhiều phiên bản; dùng nms khi ko có api thay thế
3. reflection cũng là 1 kiểu khi dùng nms, thay vì load & depend nhiều ver nms thì dùng reflection chỉ cần 1 lần
 
1. api spigot là backward compatible. khi dev dùng api bản thấp nhất, thì khi dùng trên sv bảo cao hơn sẽ dùng dc
2. nms cũng k lq gì tới nhiều phiên bản; dùng nms khi ko có api thay thế
3. reflection cũng là 1 kiểu khi dùng nms, thay vì load & depend nhiều ver nms thì dùng reflection chỉ cần 1 lần
Bỏ 2, 3 nhea. Nếu dùng api thấp nhất á thì toàn bộ các material chỉ ở mức độ 1.8 thôi và tất nhiên là vẫn hỗ trợ chạy trên các api lớn hơn. Nếu vậy thì các server lỡ config á dùng cái material mà không hỗ trợ 1.8 thì sao? Có thể báo lỗi hoặc mặc định ra Block nào đó, mình muốn là các server khi config dùng material mới phù hợp với version server thì vẫn hiển thị dc ạ.
 
Bỏ 2, 3 nhea. Nếu dùng api thấp nhất á thì toàn bộ các material chỉ ở mức độ 1.8 thôi và tất nhiên là vẫn hỗ trợ chạy trên các api lớn hơn. Nếu vậy thì các server lỡ config á dùng cái material mà không hỗ trợ 1.8 thì sao? Có thể báo lỗi hoặc mặc định ra Block nào đó, mình muốn là các server khi config dùng material mới phù hợp với version server thì vẫn hiển thị dc ạ.
Dùng lib này để parse material (ngoài material thì còn thêm sound, enchant, ...) hổ trợ nhiều phiên bản nha:
CryptoMorin/XSeries: Library for cross-version Minecraft Bukkit support and various efficient API methods. (github.com)
 
Dùng lib này để parse material (ngoài material thì còn thêm sound, enchant, ...) hổ trợ nhiều phiên bản nha:
CryptoMorin/XSeries: Library for cross-version Minecraft Bukkit support and various efficient API methods. (github.com)
Thư viện để parser nếu dùng nhiều API thôi trong project mình có mỗi API 1.8.8 à, nếu như config của server mà dùng material mà 1.8.8 không hỗ trợ thì qua XMaterial xong parser lại cho API 1.8.8 nó sẽ sang Block mặc định hoặc báo lỗi à.
 
Thư viện để parser nếu dùng nhiều API thôi trong project mình có mỗi API 1.8.8 à, nếu như config của server mà dùng material mà 1.8.8 không hỗ trợ thì qua XMaterial xong parser lại cho API 1.8.8 nó sẽ sang Block mặc định hoặc báo lỗi à.
Lấy vi dụ ở material của khối len màu cam ở 1.8 đi
- Khi không dùng XMaterial thì buộc bạn phải sử dụng material là WOOL rồi set block data là 1
- Khi dùng XMaterial thì bạn có thể sử dụng WOOL:1 hoặc là ORANGE_WOOL đều được
Còn nếu bạn lấy những material mà không có ở 1.8 thì nó sẽ trả về null hoặc là throw exception tuỳ theo method mà b chọn để lấy XMaterial
44132
 
Lấy vi dụ ở material của khối len màu cam ở 1.8 đi
- Khi không dùng XMaterial thì buộc bạn phải sử dụng material là WOOL rồi set block data là 1
- Khi dùng XMaterial thì bạn có thể sử dụng WOOL:1 hoặc là ORANGE_WOOL đều được
Còn nếu bạn lấy những material mà không có ở 1.8 thì nó sẽ trả về null hoặc là throw exception tuỳ theo method mà b chọn để lấy XMaterial
View attachment 44132
WOOL thì mình hiểu rồi còn block không hỗ trợ trả về null hay cách xử lý khác thì coi như ko dc rùi. Đôi khi các server đòi customize material mới hơn mà dở là lại dùng API cũ
 
WOOL thì mình hiểu rồi còn block không hỗ trợ trả về null hay cách xử lý khác thì coi như ko dc rùi. Đôi khi các server đòi customize material mới hơn mà dở là lại dùng API cũ
Chưa hiểu ý của bạn lắm
 
Chưa hiểu ý của bạn lắm
Ý mình là nếu các owner của server mà chỉnh gì đó trong server mà sử dụng material được cho là API của 1.8.8 không hỗ trợ á thì khi XMaterial parser qua Material của API 1.8.8 thì nó sẽ trả về null, block mặc định hoặc bắn lỗi thì dẫn đến không đúng ý owner làm server lắm. Thì không khác gì cái plugin chỉ support ở mức độ cho 1.8.8 thôi và các version mới hơn chỉ là để chạy chứ về bản chất các thứ vẫn dựa vào 1.8.8
 
Ý mình là nếu các owner của server mà chỉnh gì đó trong server mà sử dụng material được cho là API của 1.8.8 không hỗ trợ á thì khi XMaterial parser qua Material của API 1.8.8 thì nó sẽ trả về null, block mặc định hoặc bắn lỗi thì dẫn đến không đúng ý owner làm server lắm. Thì không khác gì cái plugin chỉ support ở mức độ cho 1.8.8 thôi và các version mới hơn chỉ là để chạy chứ về bản chất các thứ vẫn dựa vào 1.8.8
Thì đúng mà 1.8 thì làm sao có các material/block của các version trên được nó bị lỗi thì đừng cho plugin hoạt động hoặc bỏ qua material đó tuỳ trường hợp plugin bạn muốn như nào
 
Thì đúng mà 1.8 thì làm sao có các material/block của các version trên được nó bị lỗi thì đừng cho plugin hoạt động hoặc bỏ qua material đó tuỳ trường hợp plugin bạn muốn như nào
Làm nhiều plugin cho nhiều version khác nhau <(") Đảm bảo hỗ trợ 100%
 
thực ra dùng NMS ở plugin khá là not recommend, reflection thì cũng chẳng khác gì lắm
Có tương thích nghịch được không bạn? Có nghĩa là sử dụng API cao nhưng có thể chạy được một ít ở các version cũ hơn API nó
 
Trong cả 3 options bạn nêu thì đấy là pros và cons của chúng
1. Dùng 3rd lib
- Pros: Dễ dùng, maintain thường xuyên nên ít lỗi vặt
- Cons: Khiến plugins của bạn nặng hơn vì phải sử dụng thêm 3rd lib
2. Dùng NMS
- Pros: Trực tiếp gọi code của minecraft, nếu bạn viết mod nhiều = fabric thì cái này tương đối dễ hiểu (Cơ bản là vì Bukkit chẳng qua là wrapper của thằng này, tất cả task đều excute qua source mc chứ không phải bukkit)
- Cons:
+ Nặng về storage cũng như nặng cả setup vì bạn phải config subproject cho mỗi version (Thêm vào đó còn phải build nhiều version của MC)
* Thực ra cũng có thể dùng 3rd software để build nhiều version luôn, nhưng về cơ bản vẫn khá là chậm
+ Khó để dùng vì không có document và mapping của spigot là official mapping + MCP
3. Dùng Reflection
- Pros: Setup nhẹ, không mất nhiều thời gian
- Cons:
+ Nặng về memory (runtime) vì code này phải gọi thêm functions để access
+ Khó dùng hơn cả NMS vì lý do phải gọi NMS path thay vì gọi trực tiếp
 
Trong cả 3 options bạn nêu thì đấy là pros và cons của chúng
1. Dùng 3rd lib
- Pros: Dễ dùng, maintain thường xuyên nên ít lỗi vặt
- Cons: Khiến plugins của bạn nặng hơn vì phải sử dụng thêm 3rd lib
2. Dùng NMS
- Pros: Trực tiếp gọi code của minecraft, nếu bạn viết mod nhiều = fabric thì cái này tương đối dễ hiểu (Cơ bản là vì Bukkit chẳng qua là wrapper của thằng này, tất cả task đều excute qua source mc chứ không phải bukkit)
- Cons:
+ Nặng về storage cũng như nặng cả setup vì bạn phải config subproject cho mỗi version (Thêm vào đó còn phải build nhiều version của MC)
* Thực ra cũng có thể dùng 3rd software để build nhiều version luôn, nhưng về cơ bản vẫn khá là chậm
+ Khó để dùng vì không có document và mapping của spigot là official mapping + MCP
3. Dùng Reflection
- Pros: Setup nhẹ, không mất nhiều thời gian
- Cons:
+ Nặng về memory (runtime) vì code này phải gọi thêm functions để access
+ Khó dùng hơn cả NMS vì lý do phải gọi NMS path thay vì gọi trực tiếp
OK. Cảm ơn bác
 
Similar content Most view Xem thêm
Back
Top Bottom