একটা animation বানানো এক জিনিস, কিন্তু কখন সেটা চলবে তা ঠিক করা আরেক জিনিস। মব দাঁড়িয়ে থাকলে idle, হাঁটলে walk — এই সিদ্ধান্ত নেয় Animation Controller।
Controller = state machine
Controller-এ কয়েকটা state থাকে (যেমন idle, moving)। প্রতিটা state-এ ঠিক করা থাকে — এই অবস্থায় কোন animation চলবে, আর কোন শর্ত (query) সত্যি হলে অন্য state-এ লাফ দেবে।
resource_pack/animation_controllers/dragon.ac.json
1{2"format_version": "1.10.0",3"animation_controllers": {4"controller.animation.dragon.move": {5"initial_state": "idle",ⓘ6"states": {7"idle": {8"animations": ["idle"],ⓘ9"transitions": [10{ "moving": "query.modified_move_speed > 0.1" }ⓘ11]ⓘ12},13"moving": {14"animations": ["fly"],15"transitions": [16{ "idle": "query.modified_move_speed <= 0.1" }ⓘ17]18}19}20}21}22}
- L5initial_state: মব জন্মালে কোন state-এ শুরু হবে।
- L8animations: এই state-এ কোন animation চলবে (client entity-র শর্ট-নাম)।
- L10transition: query সত্যি হলে "moving" state-এ যাবে।
- L11query.modified_move_speed: মব এখন কত জোরে নড়ছে — নড়লে fly state।
- L16গতি কমে গেলে আবার idle state-এ ফিরবে।
Controller-কে মবের সাথে যুক্ত করা
resource_pack/entity/dragon.json (description অংশে)
1"animations": {2"idle": "animation.dragon.idle",3"fly": "animation.dragon.fly",4"move_ctrl": "controller.animation.dragon.move"ⓘ5},6"scripts": {7"animate": ["move_ctrl"]ⓘ8}
- L4controller-ও animation-এর মতো একটা শর্ট-নাম দিয়ে map করা হয়।
- L7animate-এ animation নয়, controller চালাও — controller নিজে ঠিক করবে কোন animation।