behavior

NeighborlyNPC avatar
NeighborlyNPC
plain_text
04/30/2026 1:40 AM
35.1 KB
13
Indexable
{
    "format_version": "1.21.0",
    "minecraft:entity": {
        "description": {
            "identifier": "goblin:goblin_girl",
            "is_spawnable": true,
            "is_summonable": true,
            "is_experimental": false,
            "properties": {
                "goblin:stage": {
                    "type": "int",
                    "range": [ 1, 4 ],
                    "default": 1,
                    "client_sync": true
                },
                "goblin:idle_pose": {
                    "type": "int",
                    "range": [ 0, 3 ],
                    "default": 0,
                    "client_sync": true
                },
                "goblin:locked": {
                    "type": "bool",
                    "default": false,
                    "client_sync": true
                },
                "goblin:lock_anim": {
                    "type": "int",
                    "range": [ 0, 5 ],
                    "default": 0,
                    "client_sync": true
                },
                "goblin:attacking": {
                    "type": "bool",
                    "default": false,
                    "client_sync": true
                },
                "goblin:weapon_state": {
                    "type": "int",
                    "range": [ 0, 3 ],
                    "default": 0,
                    "client_sync": true
                },
                "goblin:crossbow_phase": {
                    "type": "int",
                    "range": [ 0, 2 ],
                    "default": 0,
                    "client_sync": true
                },
                "goblin:hair_index": {
                    "type": "int",
                    "range": [ 0, 15 ],
                    "default": 0,
                    "client_sync": true
                },
                "goblin:full_skin": {
                    "type": "int",
                    "range": [ -1, 10 ],
                    "default": -1,
                    "client_sync": true
                },
                "goblin:digestion_timer": {
                    "type": "float",
                    "range": [ 0.0, 25.0 ],
                    "default": 20.0,
                    "client_sync": false
                }
            }
        },

        "component_groups": {

            "goblin:type_normal": {
                "minecraft:mark_variant": { "value": 0 }
            },

            "goblin:type_ranged": {
                "minecraft:mark_variant": { "value": 1 },
                "minecraft:equipment": {
                    "table": "loot_tables/entities/goblin_crossbow.json",
                    "slot_drop_chance": [
                        { "slot": "slot.weapon.mainhand", "drop_chance": 0.085 }
                    ]
                }
            },

            "goblin:type_mace": {
                "minecraft:mark_variant": { "value": 2 },
                "minecraft:equipment": {
                    "table": "loot_tables/entities/goblin_mace.json",
                    "slot_drop_chance": [
                        { "slot": "slot.weapon.mainhand", "drop_chance": 0.085 }
                    ]
                }
            },

            "goblin:stage_1": {
                "minecraft:movement": { "value": 0.30 },
                "minecraft:health": { "value": 20, "max": 20 }
            },

            "goblin:stage_2": {
                "minecraft:movement": { "value": 0.27 },
                "minecraft:health": { "value": 24, "max": 24 }
            },

            "goblin:stage_3": {
                "minecraft:movement": { "value": 0.24 },
                "minecraft:health": { "value": 28, "max": 28 }
            },

            "goblin:stage_4": {
                "minecraft:movement": { "value": 0.21 },
                "minecraft:health": { "value": 32, "max": 32 }
            },

            "goblin:tamed": {
                "minecraft:is_tamed": {},
                "minecraft:tameable": {
                    "probability": 0,
                    "tame_items": [],
                    "tame_event": { "event": "goblin:on_tamed" }
                },
                "minecraft:owner_identifier": {},
                "minecraft:behavior.follow_owner": {
                    "priority": 4,
                    "speed_multiplier": 1.0,
                    "start_distance": 10,
                    "stop_distance": 2
                },
                "minecraft:behavior.owner_hurt_by_target": {
                    "priority": 1
                },
                "minecraft:behavior.owner_hurt_target": {
                    "priority": 2
                },
                "minecraft:behavior.stay": {
                    "priority": 3,
                    "speed_multiplier": 0
                },
                "minecraft:angry": {
                    "duration": 0,
                    "broadcast_anger": false
                }
            },

            "goblin:wild": {
                "minecraft:behavior.nearest_attackable_target": {
                    "priority": 2,
                    "must_see": true,
                    "reselect_targets": true,
                    "within_radius": 16,
                    "entity_types": [
                        {
                            "filters": {
                                "all_of": [
                                    { "test": "is_family", "subject": "other", "value": "player" },
                                    {
                                        "none_of": [
                                            { "test": "has_equipment", "subject": "other", "domain": "head", "value": "golden_helmet" },
                                            { "test": "has_equipment", "subject": "other", "domain": "torso", "value": "golden_chestplate" },
                                            { "test": "has_equipment", "subject": "other", "domain": "leg", "value": "golden_leggings" },
                                            { "test": "has_equipment", "subject": "other", "domain": "feet", "value": "golden_boots" }
                                        ]
                                    }
                                ]
                            },
                            "max_dist": 16
                        }
                    ]
                },
                "minecraft:tameable": {
                    "probability": 0.15,
                    "tame_items": [
                        "minecraft:golden_carrot",
                        "minecraft:golden_apple",
                        "minecraft:cooked_rabbit",
                        "minecraft:glistering_melon_slice"
                    ],
                    "tame_event": { "event": "goblin:on_tamed" }
                }
            },

            "goblin:locked_state": {
                "minecraft:movement": { "value": 0.0 },
                "minecraft:navigation.walk": {
                    "can_path_over_water": false,
                    "avoid_water": true,
                    "can_pass_doors": true,
                    "can_open_doors": true
                },
                "minecraft:behavior.nearest_attackable_target": {
                    "priority": 99,
                    "entity_types": []
                }
            },

            "goblin:sitting_state": {
                "minecraft:movement": { "value": 0.0 },
                "minecraft:behavior.stay": {
                    "priority": 0,
                    "speed_multiplier": 0
                }
            },

            "goblin:crossbow_lock": {
                "minecraft:movement": { "value": 0.0 }
            },

            "goblin:healing_state": {
                "minecraft:movement": { "value": 0.0 }
            },

            "goblin:exploding": {
                "minecraft:explode": {
                    "fuse_duration": 0,
                    "fuse_lit": true,
                    "power": 1.5,
                    "causes_fire": false,
                    "breaks_blocks": false,
                    "damage_sources": ["entity_explosion"]
                }
            }
        },

        "components": {

            "minecraft:type_family": {
                "family": [ "goblin", "mob", "monster" ]
            },

            "minecraft:collision_box": {
                "width": 0.6,
                "height": 1.95
            },

            "minecraft:physics": {},

            "minecraft:pushable": {
                "is_pushable": true,
                "is_pushable_by_piston": true
            },

            "minecraft:breathable": {
                "total_supply": 15,
                "suffocate_time": 0
            },

            "minecraft:can_climb": {},

            "minecraft:health": {
                "value": 20,
                "max": 20
            },

            "minecraft:movement": {
                "value": 0.30
            },

            "minecraft:movement.basic": {},

            "minecraft:navigation.walk": {
                "can_path_over_water": false,
                "avoid_water": true,
                "can_pass_doors": true,
                "can_open_doors": true,
                "avoid_damage_blocks": true
            },

            "minecraft:jump.static": {},

            "minecraft:attack": {
                "damage": 3
            },

            "minecraft:damage_sensor": {
                "triggers": [
                    {
                        "on_damage": {
                            "event": "goblin:on_hurt",
                            "target": "self"
                        }
                    }
                ]
            },

            "minecraft:behavior.melee_attack": {
                "priority": 3,
                "speed_multiplier": 1.0,
                "track_target": true,
                "require_complete_path": false,
                "on_attack": {
                    "event": "goblin:on_melee_attack",
                    "target": "self"
                }
            },

            "minecraft:behavior.ranged_attack": {
                "priority": 3,
                "attack_interval_min": 1.0,
                "attack_interval_max": 3.0,
                "attack_radius": 15.0,
                "speed_multiplier": 0.0,
                "on_attack": {
                    "event": "goblin:on_ranged_attack",
                    "target": "self"
                }
            },

            "minecraft:behavior.look_at_target": {
                "priority": 9,
                "look_distance": 6
            },

            "minecraft:behavior.hurt_by_target": {
                "priority": 1,
                "alert_same_type": true,
                "entity_types": [
                    { "filters": { "test": "is_family", "subject": "other", "value": "player" } }
                ]
            },

            "minecraft:behavior.pickup_items": {
                "priority": 6,
                "max_dist": 3,
                "goal_radius": 0.8,
                "speed_multiplier": 1.2,
                "pickup_based_on_chunk": false,
                "track_target": false,
                "pickup_same_items_as_in_hand": false,
                "can_pickup_to_hand_or_equipment": true
            },

            "minecraft:item_hopper": {},

            "minecraft:inventory": {
                "inventory_size": 16,
                "container_type": "inventory",
                "can_be_siphoned_from": false,
                "private": true
            },

            "minecraft:interact": {
                "interactions": [
                    {
                        "on_interact": {
                            "filters": {
                                "all_of": [
                                    { "test": "is_family", "subject": "other", "value": "player" },
                                    { "test": "has_equipment", "subject": "other", "domain": "hand", "value": "minecraft:honey_bottle" },
                                    { "test": "is_property", "domain": "goblin:locked", "value": false }
                                ]
                            },
                            "event": "goblin:on_fed_honey",
                            "target": "self"
                        },
                        "consume_item": true,
                        "use_item": true,
                        "hurt_item": 0,
                        "play_sounds": "item.honey_bottle.drink",
                        "interact_text": "action.interact.feed"
                    },
                    {
                        "on_interact": {
                            "filters": {
                                "all_of": [
                                    { "test": "is_family", "subject": "other", "value": "player" },
                                    { "test": "is_property", "domain": "goblin:locked", "value": false },
                                    {
                                        "any_of": [
                                            { "test": "has_equipment", "subject": "other", "domain": "hand", "value": "minecraft:golden_apple" },
                                            { "test": "has_equipment", "subject": "other", "domain": "hand", "value": "minecraft:golden_carrot" },
                                            { "test": "has_equipment", "subject": "other", "domain": "hand", "value": "minecraft:glistering_melon_slice" }
                                        ]
                                    }
                                ]
                            },
                            "event": "goblin:on_fed_food",
                            "target": "self"
                        },
                        "consume_item": true,
                        "use_item": true,
                        "interact_text": "action.interact.feed"
                    },
                    {
                        "on_interact": {
                            "filters": {
                                "all_of": [
                                    { "test": "is_owner", "subject": "other", "value": true },
                                    { "test": "is_sneaking", "subject": "other", "value": true },
                                    { "test": "is_property", "domain": "goblin:idle_pose", "value": 1 },
                                    { "test": "is_property", "domain": "goblin:locked", "value": false }
                                ]
                            },
                            "event": "goblin:on_belly_rub",
                            "target": "self"
                        },
                        "interact_text": "action.interact.belly_rub"
                    },
                    {
                        "on_interact": {
                            "filters": {
                                "all_of": [
                                    { "test": "is_owner", "subject": "other", "value": true },
                                    { "test": "is_sneaking", "subject": "other", "value": false },
                                    { "test": "is_property", "domain": "goblin:locked", "value": false }
                                ]
                            },
                            "event": "goblin:on_sit_toggle",
                            "target": "self"
                        },
                        "interact_text": "action.interact.sit_toggle"
                    }
                ]
            },

            "minecraft:behavior.random_stroll": {
                "priority": 8,
                "speed_multiplier": 0.8,
                "interval": 120
            },

            "minecraft:behavior.look_at_player": {
                "priority": 10,
                "look_distance": 6,
                "probability": 0.02
            },

            "minecraft:behavior.random_look_around": {
                "priority": 10
            },

            "minecraft:despawn": {
                "filters": {
                    "none_of": [
                        { "test": "has_component", "value": "minecraft:is_tamed" }
                    ]
                },
                "min_distance": 32,
                "max_distance": 128
            },

            "minecraft:loot": {
                "table": "loot_tables/entities/goblin_girl.json"
            },

            "minecraft:persistent": {}
        },

        "events": {

            "minecraft:entity_spawned": {
                "trigger": { "event": "goblin:on_spawned" }
            },

            "goblin:on_spawned": {
                "sequence": [
                    {
                        "add": { "component_groups": [ "goblin:stage_1", "goblin:wild" ] }
                    },
                    {
                        "randomize": [
                            {
                                "weight": 65,
                                "add": { "component_groups": [ "goblin:type_normal" ] }
                            },
                            {
                                "weight": 25,
                                "add": { "component_groups": [ "goblin:type_ranged" ] }
                            },
                            {
                                "weight": 10,
                                "add": { "component_groups": [ "goblin:type_mace" ] }
                            }
                        ]
                    }
                ]
            },

            "goblin:set_weapon_unarmed": {},
            "goblin:set_weapon_sword": {},
            "goblin:set_weapon_crossbow": {},
            "goblin:set_weapon_mace": {},

            "goblin:on_pickup_weapon": {
                "trigger": { "event": "goblin:set_weapon_sword" }
            },

            "goblin:on_pickup_mace": {
                "trigger": { "event": "goblin:set_weapon_mace" }
            },

            "goblin:on_pickup_honey": {
                "trigger": { "event": "goblin:on_fed_honey" }
            },

            "goblin:on_fed_honey": {
                "sequence": [
                    {
                        "set_property": { "goblin:lock_anim": 0, "goblin:locked": true }
                    },
                    {
                        "add": { "component_groups": [ "goblin:locked_state" ] }
                    }
                ]
            },

            "goblin:on_fed_food": {
                "sequence": [
                    {
                        "add": { "component_groups": [ "goblin:locked_state", "goblin:healing_state" ] }
                    }
                ]
            },

            "goblin:lock_drink": {
                "set_property": { "goblin:lock_anim": 0 }
            },

            "goblin:lock_apple": {
                "set_property": { "goblin:lock_anim": 1 }
            },

            "goblin:lock_carrot": {
                "set_property": { "goblin:lock_anim": 2 }
            },

            "goblin:lock_melon": {
                "set_property": { "goblin:lock_anim": 3 }
            },

            "goblin:lock_pop_real": {
                "set_property": { "goblin:lock_anim": 4 }
            },

            "goblin:lock_pop_fake": {
                "set_property": { "goblin:lock_anim": 5 }
            },

            "goblin:apply_lock": {
                "add": { "component_groups": [ "goblin:locked_state" ] }
            },

            "goblin:remove_lock": {
                "sequence": [
                    {
                        "remove": {
                            "component_groups": [
                                "goblin:locked_state",
                                "goblin:healing_state"
                            ]
                        }
                    },
                    {
                        "set_property": { "goblin:locked": false }
                    }
                ]
            },

            "goblin:apply_crossbow_lock": {
                "add": { "component_groups": [ "goblin:crossbow_lock" ] }
            },

            "goblin:remove_crossbow_lock": {
                "remove": { "component_groups": [ "goblin:crossbow_lock" ] }
            },

            "goblin:set_stage_1": {
                "sequence": [
                    {
                        "remove": {
                            "component_groups": [
                                "goblin:stage_1", "goblin:stage_2",
                                "goblin:stage_3", "goblin:stage_4"
                            ]
                        }
                    },
                    { "add": { "component_groups": [ "goblin:stage_1" ] } },
                    { "set_property": { "goblin:stage": 1 } }
                ]
            },

            "goblin:set_stage_2": {
                "sequence": [
                    {
                        "remove": {
                            "component_groups": [
                                "goblin:stage_1", "goblin:stage_2",
                                "goblin:stage_3", "goblin:stage_4"
                            ]
                        }
                    },
                    { "add": { "component_groups": [ "goblin:stage_2" ] } },
                    { "set_property": { "goblin:stage": 2 } }
                ]
            },

            "goblin:set_stage_3": {
                "sequence": [
                    {
                        "remove": {
                            "component_groups": [
                                "goblin:stage_1", "goblin:stage_2",
                                "goblin:stage_3", "goblin:stage_4"
                            ]
                        }
                    },
                    { "add": { "component_groups": [ "goblin:stage_3" ] } },
                    { "set_property": { "goblin:stage": 3 } }
                ]
            },

            "goblin:set_stage_4": {
                "sequence": [
                    {
                        "remove": {
                            "component_groups": [
                                "goblin:stage_1", "goblin:stage_2",
                                "goblin:stage_3", "goblin:stage_4"
                            ]
                        }
                    },
                    { "add": { "component_groups": [ "goblin:stage_4" ] } },
                    { "set_property": { "goblin:stage": 4 } }
                ]
            },

            "goblin:pop_real": {
                "sequence": [
                    {
                        "set_property": { "goblin:locked": true, "goblin:lock_anim": 4 }
                    },
                    {
                        "add": { "component_groups": [ "goblin:locked_state" ] }
                    }
                ]
            },

            "goblin:apply_explosion": {
                "add": { "component_groups": [ "goblin:exploding" ] }
            },

            "goblin:pop_fake": {
                "sequence": [
                    {
                        "set_property": { "goblin:locked": true, "goblin:lock_anim": 5 }
                    },
                    {
                        "add": { "component_groups": [ "goblin:locked_state" ] }
                    }
                ]
            },

            "goblin:on_melee_attack": {
                "set_property": { "goblin:attacking": true }
            },

            "goblin:on_ranged_attack": {
                "sequence": [
                    {
                        "set_property": { "goblin:attacking": true, "goblin:crossbow_phase": 1 }
                    },
                    {
                        "trigger": { "event": "goblin:apply_crossbow_lock" }
                    }
                ]
            },

            "goblin:on_tame_attempt": {},

            "goblin:on_tamed": {
                "sequence": [
                    {
                        "remove": { "component_groups": [ "goblin:wild" ] }
                    },
                    {
                        "add": { "component_groups": [ "goblin:tamed" ] }
                    },
                    {
                        "set_property": { "goblin:idle_pose": 0 }
                    }
                ]
            },

            "goblin:on_sit_toggle": {
                "sequence": [
                    {
                        "filters": { "test": "is_property", "domain": "goblin:idle_pose", "value": 1 },
                        "remove": { "component_groups": [ "goblin:sitting_state" ] },
                        "set_property": { "goblin:idle_pose": 0 }
                    },
                    {
                        "filters": {
                            "none_of": [
                                { "test": "is_property", "domain": "goblin:idle_pose", "value": 1 }
                            ]
                        },
                        "add": { "component_groups": [ "goblin:sitting_state" ] },
                        "set_property": { "goblin:idle_pose": 1 }
                    }
                ]
            },

            "goblin:on_belly_rub": {},

            "goblin:on_hurt": {
                "sequence": [
                    {
                        "filters": { "test": "is_property", "domain": "goblin:idle_pose", "value": 2 },
                        "set_property": { "goblin:idle_pose": 0 }
                    }
                ]
            },

            "goblin:on_regress": {
                "sequence": [
                    {
                        "filters": { "test": "is_property", "domain": "goblin:stage", "value": 4 },
                        "trigger": { "event": "goblin:set_stage_3" }
                    },
                    {
                        "filters": { "test": "is_property", "domain": "goblin:stage", "value": 3 },
                        "trigger": { "event": "goblin:set_stage_2" }
                    },
                    {
                        "filters": { "test": "is_property", "domain": "goblin:stage", "value": 2 },
                        "trigger": { "event": "goblin:set_stage_1" }
                    }
                ]
            },

            "goblin:on_low_health": {}
        }
    }
}
Editor is loading...
Leave a Comment