{
    "format_version": "1.18.20",
    "minecraft:entity": {
        "description": {
            "identifier": "minecraft:bee",
            "is_spawnable": true,
            "is_summonable": true,
            "is_experimental": false,
            "properties": {
                "minecraft:has_nectar": {
                    "type": "bool",
                    "client_sync": true,
                    "default": "query.had_component_group('has_nectar')"
                }
            }
        },
        "component_groups": {
            "bee_baby": {
                "minecraft:is_baby": {},
                "minecraft:scale": {
                    "value": 0.5
                },
                "minecraft:ageable": {
                    "duration": 1200,
                    "feed_items": [ 
                        "minecraft:red_flower",     // All small flowers except Dandelion
                        "minecraft:yellow_flower",  // Dandelion
                        "minecraft:wither_rose",
                        "minecraft:double_plant:0", // Sunflower
                        "minecraft:double_plant:1", // Lilac
                        "minecraft:double_plant:4", // Rose Bush
                        "minecraft:double_plant:5",  // Peony
                        "minecraft:flowering_azalea", //Flowering Azalea
                        "minecraft:azalea_leaves_flowered", //Flowering Azalea leaves
                        "minecraft:mangrove_propagule",
                        "minecraft:pitcher_plant",
                        "minecraft:torchflower",
                        "minecraft:cherry_leaves",
                        "minecraft:pink_petals"
                    ],
                    "grow_up": {
                        "event": "minecraft:ageable_grow_up",
                        "target": "self"
                    }
                },
                "minecraft:behavior.follow_parent": {
                    "priority": 11, // This has to be lower priority than move to block goal so that bee seek shelter in rain instead of following parents
                    "speed_multiplier": 1.1
                }
            },
            "bee_adult": {
                "minecraft:experience_reward": {
                    "on_bred": "Math.Random(1,7)",
                    "on_death": "query.last_hit_by_player ? Math.Random(1,3) : 0"
                },
                "minecraft:behavior.breed": {
                    "priority": 4,
                    "speed_multiplier": 1.0
                },
                "minecraft:breedable": {
                    "require_tame": false,
                    "breeds_with": {
                        "mate_type": "minecraft:bee",
                        "baby_type": "minecraft:bee",
                        "breed_event": {
                            "event": "minecraft:entity_born",
                            "target": "baby"
                        }
                    },
                    "breed_items": [ 
                        "minecraft:red_flower",     // All small flowers except Dandelion
                        "minecraft:yellow_flower",  // Dandelion
                        "minecraft:wither_rose",
                        "minecraft:double_plant:0", // Sunflower
                        "minecraft:double_plant:1", // Lilac
                        "minecraft:double_plant:4", // Rose Bush
                        "minecraft:double_plant:5",  // Peony
                        "minecraft:flowering_azalea", //Flowering Azalea
                        "minecraft:azalea_leaves_flowered", //Flowering Azalea leaves
                        "minecraft:mangrove_propagule",
                        "minecraft:pitcher_plant",
                        "minecraft:torchflower",
                        "minecraft:cherry_leaves",
                        "minecraft:pink_petals"
                    ]
                }
            },
            "track_attacker": {
                "minecraft:behavior.hurt_by_target": {
                    "priority": 1
                }
            },
            "angry_bee": {
                "minecraft:angry": {
                    "duration": 25,
                    "broadcastAnger": true,
                    "broadcastRange": 20,
                    "broadcast_filters": {
                        "test": "is_family",
                        "operator": "!=",
                        "value": "pacified"
                    },
                    "calm_event": {
                        "event": "calmed_down",
                        "target": "self"
                    }
                },
                "minecraft:behavior.melee_attack": {
                    "priority": 2,
                    "attack_once": true,
                    "speed_multiplier": 1.4,
                    "on_attack": {
                        "event": "countdown_to_perish_event",
                        "target": "self"
                    }
                }
            },
            "escape_fire": {
                "minecraft:behavior.panic": {
                    "priority": 1,
                    "speed_multiplier": 1.25,
                    "force": true
                  },
                "minecraft:timer": {
                    "looping": false,
                    "time": [20,50],
                    "randomInterval": true,
                    "time_down_event": {
                        "event": "stop_panicking_after_fire",
                        "target": "self"
                    }
                }
            },
            "countdown_to_perish": {
                "minecraft:mark_variant": {
                  "value": 1
                },
                "minecraft:behavior.panic": {
                    "priority": 1,
                    "speed_multiplier": 1.25,
                    "force": true
                },
                "minecraft:timer": {
                    "looping": false,
                    "time": [10, 60],
                    "randomInterval": true,
                    "time_down_event": {
                        "event": "perish_event",
                        "target": "self"
                    }
                },
                "minecraft:type_family": {
                    "family": [ "bee", "mob", "arthropod", "pacified" ]
                }
            },
            "perish": {
                "minecraft:hurt_on_condition": {
                    "damage_conditions": [
                        {
                            "cause": "none",
                            "damage_per_tick": 999
                        }
                    ]
                }
            },
            "take_nearest_target": {
                "minecraft:behavior.nearest_attackable_target": {
                    "priority": 2,
                    "entity_types": [
                        {
                            "filters": {
                              "test": "is_family",
                              "subject": "other",
                              "value": "player"
                            },
                            "max_dist": 10
                        }
                    ]
                },
                "minecraft:timer": {
                    "looping": true,
                    "time": 5,
                    "time_down_event": {
                        "event": "calmed_down",
                        "target": "self"
                    }
                }
            },
            "look_for_food": {
                "minecraft:behavior.move_to_block": {
                    "priority": 10,
                    "tick_interval": 1,
                    "start_chance": 0.5,
                    "search_range": 6,
                    "search_height": 4,
                    "goal_radius": 1.0,
                    "stay_duration": 20.0,
                    "target_selection_method": "random",
                    "target_offset": [0, 0.25, 0],
                    "target_block_filters": { "test": "is_waterlogged", "subject": "block", "operator": "==", "value": false },
                    "target_blocks": [
                        "minecraft:red_flower",     // All small flowers except Dandelion
                        "minecraft:yellow_flower",  // Dandelion
                        "minecraft:wither_rose",
                        "minecraft:double_plant:8", // Sunflower top
                        "minecraft:double_plant:9", // Lilac top
                        "minecraft:double_plant:12", // Rose Bush top
                        "minecraft:double_plant:13",  // Peony top
                        "minecraft:flowering_azalea", //Flowering azalea
                        "minecraft:azalea_leaves_flowered", //Flowering Azalea leaves
                        "minecraft:mangrove_propagule",
                        "minecraft:pitcher_plant",
                        "minecraft:torchflower",
                        "minecraft:cherry_leaves",
                        "minecraft:pink_petals"
                    ],
                    "on_stay_completed": [
                        {
                            "event": "collected_nectar",
                            "target": "self"
                        }
                    ]
                },
                "minecraft:timer": {
                    "looping": true,
                    "time": 180,
                    "time_down_event": {
                        "event": "find_flower_timeout"
                    }
                },
                "minecraft:ambient_sound_interval" :{
                    "event_name" : "ambient.pollinate",
                    "range" : 3.0,
                    "value" : 2.0
                }
            },
            "has_nectar": {
                "minecraft:grows_crop": {
                    "charges": 10,
                    "chance": 0.03
                }
            },
            "return_to_home": {
                "minecraft:behavior.go_home": {
                    "priority": 4,
                    "speed_multiplier": 1.0,
                    "interval": 1,
                    "goal_radius": 1.2,
                    "on_home": [
                        {
                            "filters": {
                                "any_of":[
                                    { "test": "is_block", "subject": "block", "value": "minecraft:bee_nest" },
                                    { "test": "is_block", "subject": "block", "value": "minecraft:beehive" }
                                ]
                            },
                            "event": "minecraft:bee_returned_to_hive",
                            "target": "block"
                        },
                        {
                            "filters": {
                                "all_of":[
                                    { "test": "is_block", "subject": "block", "operator": "!=", "value": "minecraft:bee_nest" },
                                    { "test": "is_block", "subject": "block", "operator": "!=", "value": "minecraft:beehive" }
                                ]
                            },
                            "event": "find_hive_event",
                            "target": "self"
                        }
                    ],
                    "on_failed": [
                      {
                        "event": "find_hive_event",
                        "target": "self"
                      }
                    ]
                }
            },
            "find_hive": {
                "minecraft:behavior.move_to_block": {
                    "priority": 10,
                    "search_range": 16,
                    "search_height": 10,
                    "tick_interval": 1,
                    "goal_radius": 0.633, // was tested with 0.4 when the goal radius wasn't squared. sqrt(0.4)~0.633
                    "target_blocks": [
                        "bee_nest",
                        "beehive"
                    ],
                    "on_reach": [
                        {
                            "event": "minecraft:bee_returned_to_hive",
                            "target": "block"
                        }
                    ]
                },
                "minecraft:timer": {
                    "looping": false,
                    "time": 180,
                    "time_down_event": {
                        "event": "find_hive_timeout",
                        "target": "self"
                    }
                }
            },
            "hive_full": {
                "minecraft:timer": {
                    "looping": false,
                    "time": [5, 20],
                    "randomInterval": true,
                    "time_down_event": {
                        "event": "find_hive_event",
                        "target": "self"
                    }
                }
            },
            "shelter_detection": {
                "minecraft:environment_sensor": {
                    "triggers": [
                        {
                            "event": "seek_shelter",
                            "filters": {
                                "all_of": [
                                    {
                                        "any_of": [
                                            {
                                                "test": "is_daytime",
                                                "value": false
                                            },
                                            {
                                                "test": "weather",
                                                "operator": "==",
                                                "value": "precipitation"
                                            }
                                        ]
                                    },
                                    { // Assume we are already going home if we have nectar
                                        "test": "bool_property",
                                        "domain": "minecraft:has_nectar",
                                        "operator": "!="
                                    },
                                    { // Assume we are already going home if we have nectar
                                        "test": "has_biome_tag",
                                        "value": "overworld"
                                    }
                                ]
                            }
                        }
                    ]
                }
            },
            "abort_shelter_detection": {
                "minecraft:environment_sensor": {
                    "triggers": [
                        {
                            "event": "abort_sheltering",
                            "filters": {
                                "all_of": [
                                    {
                                        "test": "weather",
                                        "operator": "==",
                                        "value": "clear"
                                    },
                                    {
                                        "test": "is_daytime",
                                        "value": true
                                    }
                                ]
                            }
                        }
                    ]
                }
            },
            "easy_attack": {
                "minecraft:attack": {
                    "damage": 2
                }
            },
            "normal_attack": {
                "minecraft:attack": {
                    "damage": 2,
                    "effect_name": "poison",
                    "effect_duration": 10
                }
            },
            "hard_attack": {
                "minecraft:attack": {
                    "damage": 2,
                    "effect_name": "poison",
                    "effect_duration": 18
                }
            },
            "default_sound" : {
                "minecraft:ambient_sound_interval" :{
                    "event_name" : "ambient",
                    "range" : 0.0,
                    "value" : 0.0
                }
            }
        },
        "components": {
            "minecraft:is_hidden_when_invisible": {
            },
            "minecraft:behavior.tempt": {
                "priority": 5,
                "speed_multiplier": 1.25,
                "within_radius": 8,
                "can_tempt_vertically": true,
                "items": [
                    "minecraft:red_flower",     // All small flowers except Dandelion
                    "minecraft:yellow_flower",  // Dandelion
                    "minecraft:wither_rose",
                    "minecraft:double_plant:0", // Sunflower
                    "minecraft:double_plant:1", // Lilac
                    "minecraft:double_plant:4", // Rose Bush
                    "minecraft:double_plant:5",  // Peony
                    "minecraft:flowering_azalea", //Flowering azalea
                    "minecraft:azalea_leaves_flowered", //Flowering Azalea leaves
                    "minecraft:mangrove_propagule",
                    "minecraft:pitcher_plant",
                    "minecraft:torchflower",
                    "minecraft:cherry_leaves",
                    "minecraft:pink_petals"
                ]
            },
            "minecraft:behavior.move_towards_home_restriction": {
              "priority": 9
            },
            "minecraft:behavior.random_hover": {
                "priority": 12,
                "xz_dist": 8,
                "y_dist": 8,
                "y_offset": -1,
                "interval": 1,
                "hover_height": [1, 4]
            },
            "minecraft:leashable": {
                "soft_distance": 4.0,
                "hard_distance": 6.0,
                "max_distance": 10.0
            },
            "minecraft:balloonable": {
                "mass": 0.5
            },
            "minecraft:behavior.float": {
                "priority": 19
            },
            "minecraft:type_family": {
                "family": [ "bee", "mob", "arthropod" ]
            },
            "minecraft:on_target_acquired": {
                "event": "attacked",
                "target": "self"
            },
            "minecraft:breathable": {
                "totalSupply": 15,
                "suffocateTime": 0
            },
            "minecraft:collision_box": {
                "width": 0.55,
                "height": 0.5
            },
            "minecraft:conditional_bandwidth_optimization": {
            },
            "minecraft:game_event_movement_tracking": {
                "emit_flap": true
            },
            "minecraft:home": {
                "restriction_radius": 22,
                "home_block_list": [
                    "minecraft:bee_nest",
                    "minecraft:beehive"
                ]
            },
            "minecraft:follow_range": {
                "value": 1024
            },
            "minecraft:damage_sensor": {
                "triggers": {
                    "cause": "fall",
                    "deals_damage": false
                }
            },
            "minecraft:hurt_on_condition": {
                "damage_conditions": [
                    {
                        "filters": {
                            "test": "in_lava",
                            "subject": "self",
                            "operator": "==",
                            "value": true
                        },
                        "cause": "lava",
                        "damage_per_tick": 4
                    }
                ]
            },
            "minecraft:movement": {
                "value": 0.3
            },
            "minecraft:flying_speed": {
                "value": 0.15
            },
            "minecraft:navigation.hover": {
                "can_path_over_water": true,
                "can_sink": false,
                "can_pass_doors": false,
                "can_path_from_air": true,
                "avoid_water": true,
                "avoid_damage_blocks": true,
                "avoid_sun": false
            },
            "minecraft:movement.hover": {},
            "minecraft:jump.static": {},
            "minecraft:can_fly": {},
            "minecraft:health": {
                "value": 10,
                "max": 10
            },
            "minecraft:nameable": {},
            "minecraft:block_sensor": {
                "sensor_radius": 16,
                "sources" : [
                    {
                        "test": "has_silk_touch",
                        "subject": "other",
                        "value": false
                    }
                ],
                "on_break": [
                    {
                        "block_list": [
                            "minecraft:beehive", "minecraft:bee_nest"
                        ],
                        "on_block_broken": "hive_destroyed"
                    }
                ]
            },
            "minecraft:physics": {},
            "minecraft:pushable": {
                "is_pushable": true,
                "is_pushable_by_piston": true
              }
        },
        "events": {
            "minecraft:entity_spawned": {
                "sequence": [
                    {
                        "randomize": [
                            {
                                "weight": 95,
                                "add": {
                                    "component_groups": [
                                        "bee_adult"
                                    ]
                                }
                            },
                            {
                                "weight": 5,
                                "add": {
                                    "component_groups": [
                                        "bee_baby"
                                    ]
                                }
                            }
                        ]
                    },
                    {
                        "add": {
                            "component_groups": [
                                "track_attacker",
                                "shelter_detection",
                                "look_for_food"
                            ]
                        }
                    }
                ]
            },
            "minecraft:entity_born": {
                "add": {
                    "component_groups": [
                        "bee_baby",
                        "shelter_detection",
                        "track_attacker",
                        "look_for_food"
                    ]
                }
            },
            "minecraft:ageable_grow_up": {
                "remove": {
                    "component_groups": [
                        "bee_baby"
                    ]
                },
                "add": {
                    "component_groups": [
                        "bee_adult"
                    ]
                }
            },
            "minecraft:exited_disturbed_hive": {
                "add": {
                    "component_groups": [
                        "take_nearest_target"
                    ]
                },
                "remove": {
                    "component_groups": [
                        "find_hive",
                        "return_to_home",
                        "has_nectar",
                        "abort_shelter_detection",
                        "shelter_detection",
                        "escape_fire"
                    ]
                },
                "set_property": {
                    "minecraft:has_nectar": false 
                }
            },
            "hive_destroyed": {
                "sequence": [
                    {
                        "filters": {
                            "test": "is_family",
                            "subject": "self",
                            "operator": "!=",
                            "value": "pacified"
                        },
                        "add": {
                            "component_groups": [
                                "take_nearest_target"
                            ]
                        },
                        "remove": {
                            "component_groups": [
                                "escape_fire"
                            ]
                        }
                    }
                ]
            },
            "stop_panicking_after_fire" : {
                "remove": {
                    "component_groups": [
                        "escape_fire"
                    ]
                }
            },
            "minecraft:exited_hive_on_fire": {
                "add": {
                    "component_groups": [
                        "escape_fire"
                    ]
                }
            },
            "minecraft:exited_hive": {
                "add": {
                    "component_groups": [
                        "look_for_food",
                        "shelter_detection"
                    ]
                },
                "remove": {
                    "component_groups": [
                        "find_hive",
                        "return_to_home",
                        "has_nectar",
                        "abort_shelter_detection"
                    ]
                },
                "set_property": {
                    "minecraft:has_nectar": false
                }
            },
            "minecraft:hive_full": {
                "add": {
                    "component_groups": [
                        "hive_full"
                    ]
                },
                "remove": {
                    "component_groups": [
                        "find_hive",
                        "return_to_home"
                    ]
                }
            },
            "attacked": {
                "sequence": [
                    {
                        "add": {
                            "component_groups": [
                                "angry_bee"
                            ]
                        },
                        "remove": {
                            "component_groups": [
                                "take_nearest_target"
                            ]
                        }
                    },
                    {
                        "filters": { "test" : "is_difficulty", "value" : "easy"},            
                        "remove": {
                            "component_groups": [ "normal_attack", "hard_attack" ]
                        },
                        "add": {
                            "component_groups": [ "easy_attack" ]
                        }
                    },
                    {
                        "filters": { "test" : "is_difficulty", "value" : "normal"},
                        "remove": {
                            "component_groups": [ "easy_attack", "hard_attack" ]
                        },
                        "add": {
                            "component_groups": [ "normal_attack" ]
                        }
                    },
                    {
                        "filters": { "test" : "is_difficulty", "value" : "hard"},
                        "remove": {
                            "component_groups": [ "easy_attack", "normal_attack" ]
                        },
                        "add": {
                            "component_groups": [ "hard_attack" ]
                        }
                    }
                ]
            },
            "calmed_down": {
                "add" : {
                    "component_groups": [
                        "shelter_detection",
                        "return_to_home"
                    ]
                },
                "remove": {
                    "component_groups": [
                        "angry_bee",
                        "take_nearest_target"
                    ]
                }
            },
            "collected_nectar": {
                "remove": {
                    "component_groups": [
                        "look_for_food"
                    ]
                },
                "add": {
                    "component_groups": [
                        "return_to_home",
                        "has_nectar",
                        "default_sound"
                    ]
                },
                "set_property": {
                    "minecraft:has_nectar": true
                }
            },
            "find_hive_event": {
                "remove": {
                    "component_groups": [
                        "return_to_home",
                        "hive_full"
                    ]
                },
                "add": {
                    "component_groups": [
                        "find_hive"
                    ]
                }
            },
            "find_hive_timeout": {
                "sequence": [
                    {
                       "filters": {
                           "test": "bool_property",
                           "operator": "!=",
                           "domain": "minecraft:has_nectar"
                       },
                       "remove": {
                           "component_groups": [
                               "find_hive",
                               "escape_fire"
                           ]
                       },
                       "add": {
                           "component_groups": [
                               "look_for_food"
                           ]
                       }
                    },
                    {
                       "filters": {
                           "test": "bool_property",
                           "domain": "minecraft:has_nectar"
                       },
                       "remove": {
                           "component_groups": [
                               "find_hive"
                           ]
                       },
                       "add": {
                           "component_groups": [
                               "return_to_home"
                           ]
                       }
                    }
                ]
            },
            "find_flower_timeout": {
                "remove": {
                    "component_groups": [
                        "look_for_food"
                    ]
                },
                "add": {
                    "component_groups": [
                        "return_to_home"
                    ]
                }
            },
            "seek_shelter": {
                "remove": {
                    "component_groups": [
                        "look_for_food",
                        "collect_nectar",
                        "shelter_detection"
                    ]
                },
                "add": {
                    "component_groups": [
                        "default_sound",
                        "return_to_home",
                        "abort_shelter_detection"
                    ]
                }
            },
            "abort_sheltering": {
                "remove": {
                    "component_groups": [
                        "abort_shelter_detection",
                        "return_to_home",
                        "escape_fire"
                    ]
                },
                "add": {
                    "component_groups": [
                        "shelter_detection",
                        "look_for_food"
                    ]
                }
            },
            
            "countdown_to_perish_event" : {
                "remove": {
                    "component_groups": [
                        "collect_nectar",
                        "track_attacker",
                        "take_nearest_target",
                        "look_for_food",
                        "angry_bee",
                        "hive_full",
                        "find_hive",
                        "escape_fire"
                    ]
                },
                "add": {
                    "component_groups": [
                        "countdown_to_perish"
                    ]
                }
            },
            "perish_event":{
                "add": {
                    "component_groups": [
                        "perish"
                    ]
                }
            }
        }
    }
}
