feat(spark_pet): major overhaul — traits, animations, riding, fire, coloured hatching
All checks were successful
Deploy Addons / deploy (push) Successful in 24s
All checks were successful
Deploy Addons / deploy (push) Successful in 24s
- Movement: slower follow (speed 0.3, stop_dist 5), near-zero teleport chance - Scales: baby 0.65, juvenile 0.9, adult 1.3 (up from 0.4/0.7/1.0) - Personality traits (0–4): set by feeding specific foods while sneaking; affects stroll range, follow distance, look-at-player frequency - Passtime animations driven by pure Molang lifecycle math (no timer components): groom, sniff, stretch, happy_bounce cycling ~every 3 min per dragon - Rideable adults: minecraft:rideable + input_ground_controlled, seat at [0,0.9,-0.3] - Fire breathing: autonomous vs monsters (radius 16) + player-triggered (sneak + fire_charge) - New hatching system: 6 nest block variants (oak/spruce/jungle/crimson/warped/obsidian), craft nest + dragon_egg → coloured egg item; place egg, bonemeal + blaze powder → hatch; dragon colour matches nest type via 6 separate egg entity types + born_color events - 18 new PNG textures: 6 dragon colours, 6 nest blocks, 6 egg items (HSV hue rotation) - Render controller updated to use texture array indexed by silverlabs:dragon_color property Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -10,7 +10,13 @@
|
||||
"silverlabs:egg_stage": {
|
||||
"type": "int",
|
||||
"default": 0,
|
||||
"range": [0, 3],
|
||||
"range": [0, 2],
|
||||
"client_sync": true
|
||||
},
|
||||
"silverlabs:egg_color": {
|
||||
"type": "int",
|
||||
"default": 0,
|
||||
"range": [0, 5],
|
||||
"client_sync": true
|
||||
}
|
||||
}
|
||||
@@ -19,55 +25,18 @@
|
||||
"silverlabs:egg_cold": {
|
||||
"minecraft:damage_sensor": {
|
||||
"triggers": [
|
||||
{
|
||||
"cause": "fire",
|
||||
"deals_damage": false,
|
||||
"on_damage": {
|
||||
"event": "silverlabs:advance_to_warming",
|
||||
"target": "self"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cause": "fire_tick",
|
||||
"deals_damage": false,
|
||||
"on_damage": {
|
||||
"event": "silverlabs:advance_to_warming",
|
||||
"target": "self"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cause": "lava",
|
||||
"deals_damage": false,
|
||||
"on_damage": {
|
||||
"event": "silverlabs:advance_to_warming",
|
||||
"target": "self"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cause": "magma",
|
||||
"deals_damage": false,
|
||||
"on_damage": {
|
||||
"event": "silverlabs:advance_to_warming",
|
||||
"target": "self"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cause": "entity_attack",
|
||||
"deals_damage": true
|
||||
},
|
||||
{
|
||||
"cause": "all",
|
||||
"deals_damage": false
|
||||
}
|
||||
{ "cause": "fire", "deals_damage": false, "on_damage": { "event": "silverlabs:advance_to_warming", "target": "self" } },
|
||||
{ "cause": "fire_tick", "deals_damage": false, "on_damage": { "event": "silverlabs:advance_to_warming", "target": "self" } },
|
||||
{ "cause": "lava", "deals_damage": false, "on_damage": { "event": "silverlabs:advance_to_warming", "target": "self" } },
|
||||
{ "cause": "magma", "deals_damage": false, "on_damage": { "event": "silverlabs:advance_to_warming", "target": "self" } },
|
||||
{ "cause": "entity_attack", "deals_damage": true },
|
||||
{ "cause": "all", "deals_damage": false }
|
||||
]
|
||||
},
|
||||
"minecraft:timer": {
|
||||
"time": 120,
|
||||
"time": 180,
|
||||
"looping": false,
|
||||
"time_down_event": {
|
||||
"event": "silverlabs:advance_to_warming",
|
||||
"target": "self"
|
||||
}
|
||||
"time_down_event": { "event": "silverlabs:advance_to_warming", "target": "self" }
|
||||
},
|
||||
"minecraft:interact": {
|
||||
"interactions": [
|
||||
@@ -76,23 +45,19 @@
|
||||
"filters": {
|
||||
"all_of": [
|
||||
{ "test": "is_family", "subject": "other", "value": "player" },
|
||||
{ "test": "has_equipment", "subject": "other", "domain": "hand", "value": "blaze_powder" }
|
||||
{ "test": "has_equipment", "subject": "other", "domain": "hand", "value": "bone_meal" }
|
||||
]
|
||||
},
|
||||
"event": "silverlabs:advance_to_warming",
|
||||
"target": "self"
|
||||
},
|
||||
"use_item": true,
|
||||
"interact_text": "Warm Egg",
|
||||
"play_sounds": "fire.fire"
|
||||
"interact_text": "Warm Egg (Bonemeal)",
|
||||
"play_sounds": "block.bone_block.place"
|
||||
},
|
||||
{
|
||||
"on_interact": {
|
||||
"filters": {
|
||||
"all_of": [
|
||||
{ "test": "is_family", "subject": "other", "value": "player" }
|
||||
]
|
||||
},
|
||||
"filters": { "all_of": [{ "test": "is_family", "subject": "other", "value": "player" }] },
|
||||
"event": "",
|
||||
"target": "self"
|
||||
},
|
||||
@@ -106,142 +71,18 @@
|
||||
"silverlabs:egg_warming": {
|
||||
"minecraft:damage_sensor": {
|
||||
"triggers": [
|
||||
{
|
||||
"cause": "fire",
|
||||
"deals_damage": false,
|
||||
"on_damage": {
|
||||
"event": "silverlabs:advance_to_hot",
|
||||
"target": "self"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cause": "fire_tick",
|
||||
"deals_damage": false,
|
||||
"on_damage": {
|
||||
"event": "silverlabs:advance_to_hot",
|
||||
"target": "self"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cause": "lava",
|
||||
"deals_damage": false,
|
||||
"on_damage": {
|
||||
"event": "silverlabs:advance_to_hot",
|
||||
"target": "self"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cause": "magma",
|
||||
"deals_damage": false,
|
||||
"on_damage": {
|
||||
"event": "silverlabs:advance_to_hot",
|
||||
"target": "self"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cause": "entity_attack",
|
||||
"deals_damage": true
|
||||
},
|
||||
{
|
||||
"cause": "all",
|
||||
"deals_damage": false
|
||||
}
|
||||
{ "cause": "fire", "deals_damage": false, "on_damage": { "event": "silverlabs:advance_to_hatching", "target": "self" } },
|
||||
{ "cause": "fire_tick", "deals_damage": false, "on_damage": { "event": "silverlabs:advance_to_hatching", "target": "self" } },
|
||||
{ "cause": "lava", "deals_damage": false, "on_damage": { "event": "silverlabs:advance_to_hatching", "target": "self" } },
|
||||
{ "cause": "magma", "deals_damage": false, "on_damage": { "event": "silverlabs:advance_to_hatching", "target": "self" } },
|
||||
{ "cause": "entity_attack", "deals_damage": true },
|
||||
{ "cause": "all", "deals_damage": false }
|
||||
]
|
||||
},
|
||||
"minecraft:timer": {
|
||||
"time": 120,
|
||||
"looping": false,
|
||||
"time_down_event": {
|
||||
"event": "silverlabs:advance_to_hot",
|
||||
"target": "self"
|
||||
}
|
||||
},
|
||||
"minecraft:interact": {
|
||||
"interactions": [
|
||||
{
|
||||
"on_interact": {
|
||||
"filters": {
|
||||
"all_of": [
|
||||
{ "test": "is_family", "subject": "other", "value": "player" },
|
||||
{ "test": "has_equipment", "subject": "other", "domain": "hand", "value": "blaze_powder" }
|
||||
]
|
||||
},
|
||||
"event": "silverlabs:advance_to_hot",
|
||||
"target": "self"
|
||||
},
|
||||
"use_item": true,
|
||||
"interact_text": "Heat Egg",
|
||||
"play_sounds": "fire.fire"
|
||||
},
|
||||
{
|
||||
"on_interact": {
|
||||
"filters": {
|
||||
"all_of": [
|
||||
{ "test": "is_family", "subject": "other", "value": "player" }
|
||||
]
|
||||
},
|
||||
"event": "",
|
||||
"target": "self"
|
||||
},
|
||||
"use_item": false,
|
||||
"interact_text": "The egg is getting warmer..."
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
|
||||
"silverlabs:egg_hot": {
|
||||
"minecraft:damage_sensor": {
|
||||
"triggers": [
|
||||
{
|
||||
"cause": "fire",
|
||||
"deals_damage": false,
|
||||
"on_damage": {
|
||||
"event": "silverlabs:advance_to_hatching",
|
||||
"target": "self"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cause": "fire_tick",
|
||||
"deals_damage": false,
|
||||
"on_damage": {
|
||||
"event": "silverlabs:advance_to_hatching",
|
||||
"target": "self"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cause": "lava",
|
||||
"deals_damage": false,
|
||||
"on_damage": {
|
||||
"event": "silverlabs:advance_to_hatching",
|
||||
"target": "self"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cause": "magma",
|
||||
"deals_damage": false,
|
||||
"on_damage": {
|
||||
"event": "silverlabs:advance_to_hatching",
|
||||
"target": "self"
|
||||
}
|
||||
},
|
||||
{
|
||||
"cause": "entity_attack",
|
||||
"deals_damage": true
|
||||
},
|
||||
{
|
||||
"cause": "all",
|
||||
"deals_damage": false
|
||||
}
|
||||
]
|
||||
},
|
||||
"minecraft:timer": {
|
||||
"time": 120,
|
||||
"looping": false,
|
||||
"time_down_event": {
|
||||
"event": "silverlabs:advance_to_hatching",
|
||||
"target": "self"
|
||||
}
|
||||
"time_down_event": { "event": "silverlabs:advance_to_hatching", "target": "self" }
|
||||
},
|
||||
"minecraft:interact": {
|
||||
"interactions": [
|
||||
@@ -257,21 +98,17 @@
|
||||
"target": "self"
|
||||
},
|
||||
"use_item": true,
|
||||
"interact_text": "Ignite Egg",
|
||||
"interact_text": "Ignite Egg (Blaze Powder)",
|
||||
"play_sounds": "fire.fire"
|
||||
},
|
||||
{
|
||||
"on_interact": {
|
||||
"filters": {
|
||||
"all_of": [
|
||||
{ "test": "is_family", "subject": "other", "value": "player" }
|
||||
]
|
||||
},
|
||||
"filters": { "all_of": [{ "test": "is_family", "subject": "other", "value": "player" }] },
|
||||
"event": "",
|
||||
"target": "self"
|
||||
},
|
||||
"use_item": false,
|
||||
"interact_text": "The egg is almost ready!"
|
||||
"interact_text": "The egg is warming up..."
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -279,12 +116,7 @@
|
||||
|
||||
"silverlabs:egg_hatching": {
|
||||
"minecraft:damage_sensor": {
|
||||
"triggers": [
|
||||
{
|
||||
"cause": "all",
|
||||
"deals_damage": false
|
||||
}
|
||||
]
|
||||
"triggers": [{ "cause": "all", "deals_damage": false }]
|
||||
},
|
||||
"minecraft:spawn_entity": {
|
||||
"entities": [
|
||||
@@ -293,18 +125,16 @@
|
||||
"max_wait_time": 1,
|
||||
"spawn_sound": "mob.enderdragon.growl",
|
||||
"spawn_entity": "silverlabs:spark_dragon",
|
||||
"spawn_event": "silverlabs:born_color_0",
|
||||
"num_to_spawn": 1,
|
||||
"single_use": true
|
||||
}
|
||||
]
|
||||
},
|
||||
"minecraft:timer": {
|
||||
"time": 3,
|
||||
"time": [60, 90],
|
||||
"looping": false,
|
||||
"time_down_event": {
|
||||
"event": "silverlabs:despawn_egg",
|
||||
"target": "self"
|
||||
}
|
||||
"time_down_event": { "event": "silverlabs:despawn_egg", "target": "self" }
|
||||
}
|
||||
},
|
||||
|
||||
@@ -349,47 +179,20 @@
|
||||
|
||||
"events": {
|
||||
"minecraft:entity_spawned": {
|
||||
"add": {
|
||||
"component_groups": ["silverlabs:egg_cold"]
|
||||
}
|
||||
"add": { "component_groups": ["silverlabs:egg_cold"] }
|
||||
},
|
||||
"silverlabs:advance_to_warming": {
|
||||
"remove": {
|
||||
"component_groups": ["silverlabs:egg_cold"]
|
||||
},
|
||||
"add": {
|
||||
"component_groups": ["silverlabs:egg_warming"]
|
||||
},
|
||||
"set_property": {
|
||||
"silverlabs:egg_stage": 1
|
||||
}
|
||||
},
|
||||
"silverlabs:advance_to_hot": {
|
||||
"remove": {
|
||||
"component_groups": ["silverlabs:egg_warming"]
|
||||
},
|
||||
"add": {
|
||||
"component_groups": ["silverlabs:egg_hot"]
|
||||
},
|
||||
"set_property": {
|
||||
"silverlabs:egg_stage": 2
|
||||
}
|
||||
"remove": { "component_groups": ["silverlabs:egg_cold"] },
|
||||
"add": { "component_groups": ["silverlabs:egg_warming"] },
|
||||
"set_property": { "silverlabs:egg_stage": 1 }
|
||||
},
|
||||
"silverlabs:advance_to_hatching": {
|
||||
"remove": {
|
||||
"component_groups": ["silverlabs:egg_hot"]
|
||||
},
|
||||
"add": {
|
||||
"component_groups": ["silverlabs:egg_hatching"]
|
||||
},
|
||||
"set_property": {
|
||||
"silverlabs:egg_stage": 3
|
||||
}
|
||||
"remove": { "component_groups": ["silverlabs:egg_warming"] },
|
||||
"add": { "component_groups": ["silverlabs:egg_hatching"] },
|
||||
"set_property": { "silverlabs:egg_stage": 2 }
|
||||
},
|
||||
"silverlabs:despawn_egg": {
|
||||
"add": {
|
||||
"component_groups": ["silverlabs:egg_despawning"]
|
||||
}
|
||||
"add": { "component_groups": ["silverlabs:egg_despawning"] }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user