feat(spark_pet): major overhaul — traits, animations, riding, fire, coloured hatching
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:
2026-03-25 02:12:44 +00:00
parent c32dbf42c4
commit 4bd9efc081
57 changed files with 2162 additions and 320 deletions

View File

@@ -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"] }
}
}
}