- Hỗ trợ phiên bản
- 1.20
Crystalize
Crystalize là một server-side library mod dành cho Fabric. Ae có thể dùng library mod này để đặt model ở trong world và chạy animation được define trong Blockbench.
Nhiều ae thường hay nghĩ "Fabric là modloader nên client và server phải cài mod" thì tôi xin khẳng định là: Không phải Fabric mod nào cũng phải được cài ở cả client lẫn server. Một sô mod như Sodium được gọi là "client-side" mod, tức là mod chỉ hoạt động ở bên client; Crystalize là server-side mod, tức là Crystalize chỉ hoạt động ở bên server (Singleplayer vẫn tính là 1 server, nhưng nó chạy world của bạn dưới dạng integrated server thay vì dedicated như Bukkit).
Crystalize chạy 100% bên server; client sẽ ko cần phải cài mod.
Crystalize 100% miễn phí và mã nguồn mở. Ae có thể tìm source code cho Crystalize tại đây: https://github.com/nahkd123/crystalize
2. Tính năng
2.1. Load model từ Blockbench
Crystalize có method để build các model dưới dạng Blockbench project. Chi tiết xem trong JavaDocs của
BlockbenchModelBuilder2.2. Inverse Kinematics
Crystalize cung cấp Inverse Kinematics (IK) controller để giúp ae điều khiển các cánh tay (hoặc chain of bones j đó) mà ko cần phải điều khiển từng bộ phận một. Chỉ cần đặt vị trí đích + danh sách các khớp và
FabrikController sẽ tự động điều khiển các khớp sao cho khớp cuối cùng nằm ở vị trí đích.Inverse Kinematics dựa trên thuật toán FABRIK
3. Sử dụng library
Yêu cầu: Minecraft 1.20.4 (các bản update sau này sẽ update lên pb Minecraft mới nhất)
Mã:
repositories {
maven { url = 'https://jitpack.io/' }
}
dependencies {
// Yêu cầu Fabric Loom plugin để dùng modImplementation
modImplementation 'com.github.nahkd123.crystalize:crystalize-fabric-polymer:master-SNAPSHOT'
modImplementation "net.fabricmc.fabric-api:fabric-api:${rootProject.fabric_version}"
modImplementation "eu.pb4:polymer-core:${rootProject.polymer_version}"
modImplementation "eu.pb4:polymer-networking:${rootProject.polymer_version}"
modImplementation "eu.pb4:polymer-resource-pack:${rootProject.polymer_version}"
modImplementation "eu.pb4:polymer-virtual-entity:${rootProject.polymer_version}"
}
Java:
// Load và register model
// (Nhớ thêm ở trong ModInitializer)
JsonElement jsonProj = ...; // Load từ model.bbmodel
BlockbenchProject proj = BlockbencProject.CODEC.decode(JsonOps.INSTANCE, jsonProj);
Model model = BlockbenchModelBuilder.build(UUID.randomUUID(), proj);
CrystalizeFabric.getInstance().getModelsManager().registerModel(new Identifier("modid", "my_model"), model);
// Sử dụng model
RegisteredModel model = CrystalizeFabric.getInstance().getModelsManager().getModel(new Identifier("modid", "my_model"));
CrystalizeElementHolder holder = new CrystalizeElementHolder(model);
// Attach holder vào attachment nào đó
// Xem thêm về attachment tại https://polymer.pb4.eu/latest/polymer-virtual-entity/basics/#using-holderattachments
HolderAttachment atch = ChunkAttachment.ofTicking(holder);
atch.tick();
// Thêm animation vào holder
AnimationController anim = new TemplatedAnimationController(model.template().animations().get(0), 1.0f, null);
holder.addAnimation(anim);
4. Bukkit port
Bukkit port cho Crystalize hiện tại đang WIP (work in progress), nma vì priority đang là Fabric server nên tôi tạm thời không động đến
crystalize-bukkit trong thời gian này.