🧱Bedrock Academy
🎁 āĻšāĻžāϤ⧇-āĻ•āϞāĻŽā§‡ āĻĒā§āϰāĻœā§‡āĻ•ā§āϟ

🎁 āĻĒā§āϰāĻœā§‡āĻ•ā§āϟ: Flying Dragon

āĻāĻ•āϟāĻž āωāĻĄāĻŧāĻ¨ā§āϤ āĻĄā§āϰāĻžāĻ—āύ — fly AI, wing-flap animation, āφāϰ state controller āĻĻāĻŋāϝāĻŧ⧇ idle↔fly āϏ⧁āχāϚāĨ¤ āϏāĻŦ āĻļ⧇āĻ–āĻž āĻāĻ•āϏāĻžāĻĨ⧇āĨ¤

⏱ ~35 āĻŽāĻŋāύāĻŋāϟ

āϧāĻžāĻĒ ā§§: BP entity — fly behavior

behavior_pack/entities/dragon.json
1{
2 "format_version": "1.21.0",
3 "minecraft:entity": {
4 "description": {
5 "identifier": "myaddon:dragon",
6 "is_spawnable": true,
7 "is_summonable": true
8 },
9 "components": {
10 "minecraft:type_family": { "family": ["dragon", "monster"] },
11 "minecraft:health": { "value": 60, "max": 60 },
12 "minecraft:movement": { "value": 0.4 },
13 "minecraft:flying_speed": { "value": 0.6 },ⓘ
14 "minecraft:navigation.fly": { "can_path_over_water": true },ⓘ
15 "minecraft:movement.fly": {},
16 "minecraft:physics": {},
17 "minecraft:collision_box": { "width": 1.5, "height": 1.5 },
18 "minecraft:attack": { "damage": 8 },
19
20 "minecraft:behavior.float": { "priority": 0 },
21 "minecraft:behavior.nearest_attackable_target": {
22 "priority": 2,
23 "entity_types": [
24 {
25 "filters": { "test": "is_family", "subject": "other", "value": "player" },
26 "max_dist": 24
27 }
28 ]
29 },
30 "minecraft:behavior.melee_attack": { "priority": 3 },ⓘ
31 "minecraft:behavior.random_fly": { "priority": 6 }
32 }
33 }
34}
  • L13flying_speed: āĻ“āĻĄāĻŧāĻžāϰ āĻ—āϤāĻŋ (āĻšāĻžāρāϟāĻžāϰ movement āĻĨ⧇āϕ⧇ āφāϞāĻžāĻĻāĻž)āĨ¤
  • L14navigation.fly + movement.fly — āĻĻ⧁āĻŸā§‹āχ āϞāĻžāϗ⧇, āύāĻž āĻšāϞ⧇ āĻŽāĻŦ āωāĻĄāĻŧāĻŦ⧇ āύāĻž, āĻšāĻžāρāϟāĻŦ⧇āĨ¤
  • L30random_fly: āĻ•āĻŋāϛ⧁ āύāĻž āĻĨāĻžāĻ•āϞ⧇ āφāĻ•āĻžāĻļ⧇ āĻāϞ⧋āĻŽā§‡āϞ⧋ āωāĻĄāĻŧāĻŦ⧇āĨ¤

āϧāĻžāĻĒ ā§¨: Model āĻ“ Animation (Blockbench)

  • Blockbench-āĻ āĻāĻ•āϟāĻž āĻĄā§āϰāĻžāĻ—āύ model āĻŦāĻžāύāĻžāĻ“ — āĻ…āĻ¨ā§āϤāϤ body, left_wing, right_wing bone āϰāĻžāĻ–ā§‹āĨ¤
  • āĻāĻ•āϟāĻž animation.dragon.fly āĻŦāĻžāύāĻžāĻ“ āϝ⧇āĻ–āĻžāύ⧇ āĻĻ⧁āχ āĻĄāĻžāύāĻž āωāĻĒāϰ-āύāĻŋāϚ āĻāĻžāĻĒāϟāĻžāϝāĻŧ (loop on)āĨ¤
  • āĻāĻ•āϟāĻž animation.dragon.idle āĻŦāĻžāύāĻžāĻ“ — āĻšāĻžāϞāĻ•āĻž āĻļā§āĻŦāĻžāϏ/āĻĻā§‹āϞāĻžāĨ¤
  • geometry .geo.json āφāϰ animation .animation.json RP-āϤ⧇ export āĻ•āϰ⧋āĨ¤

āϧāĻžāĻĒ ā§Š: Animation Controller

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": [{ "fly": "query.modified_move_speed > 0.1" }]
10 },
11 "fly": {
12 "animations": ["fly"],
13 "transitions": [{ "idle": "query.modified_move_speed <= 0.1" }]
14 }
15 }
16 }
17 }
18}

āϧāĻžāĻĒ ā§Ē: RP client entity — āϏāĻŦ āĻœā§‹āĻĄāĻŧāĻž āϞāĻžāĻ—āĻžāĻ“

resource_pack/entity/dragon.json
1{
2 "format_version": "1.10.0",
3 "minecraft:client_entity": {
4 "description": {
5 "identifier": "myaddon:dragon",ⓘ
6 "materials": { "default": "entity_alphatest" },
7 "textures": { "default": "textures/entity/dragon" },
8 "geometry": { "default": "geometry.dragon" },
9 "animations": {
10 "idle": "animation.dragon.idle",
11 "fly": "animation.dragon.fly",
12 "move_ctrl": "controller.animation.dragon.move"
13 },
14 "scripts": { "animate": ["move_ctrl"] },ⓘ
15 "render_controllers": ["controller.render.default"]
16 }
17 }
18}
  • L5identifier: BP entity-āϰ āϏāĻžāĻĨ⧇ āĻšā§āĻŦāĻšā§ āĻāĻ•āĨ¤
  • L14animate-āĻ controller āϚāĻžāϞāĻžāĻšā§āĻ›āĻŋ — āϏ⧇ āύāĻŋāĻœā§‡ idle/fly āĻŦ⧇āϛ⧇ āύ⧇āĻŦ⧇āĨ¤

āϧāĻžāĻĒ ā§Ģ: āĻŸā§‡āĻ¸ā§āϟ āĻ•āϰ⧋

  1. 1āϏāĻŦ āĻĢāĻžāχāϞ addon āĻĢā§‹āĻ˛ā§āĻĄāĻžāϰ⧇ āϰ⧇āϖ⧇ .mcaddon āĻŦāĻžāύāĻŋāϝāĻŧ⧇ import āĻ•āϰ⧋, world-āĻ activate āĻ•āϰ⧋āĨ¤
  2. 2/summon myaddon:dragon ~ ~10 ~ āĻĻāĻŋāϝāĻŧ⧇ āĻŽāĻžāĻĨāĻžāϰ āωāĻĒāϰ⧇ āĻāĻ•āϟāĻž āĻĄā§āϰāĻžāĻ—āύ āφāύ⧋āĨ¤
  3. 3āĻĻ⧇āĻ–ā§‹ āϏ⧇ āωāĻĄāĻŧāϛ⧇ āφāϰ āĻĄāĻžāύāĻž āĻāĻžāĻĒāϟāĻžāĻšā§āϛ⧇ — āĻĨāĻžāĻŽāϞ⧇ idle, āύāĻĄāĻŧāϞ⧇ fly animationāĨ¤
  4. 4āĻ•āĻžāϛ⧇ āϗ⧇āϞ⧇ āϏ⧇ āϤ⧋āĻŽāĻžāϕ⧇ āφāĻ•ā§āϰāĻŽāĻŖ āĻ•āϰāϤ⧇ āφāϏāĻŦ⧇! 🐲