feat: add multi-world hub system with lobby portals and hub-return addon

Lobby addon detects players in portal zones at X: -15/0/15 and transfers
them to Jamie/Lyla/Mya survival worlds. Hub-return addon gives players a
recovery compass and chat commands (!hub, !lobby) to return to the lobby.

Includes docker-compose.yml for 4 Bedrock servers (lobby + 3 child worlds),
spark pet behavior/resource packs, and updated .gitignore.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-18 22:02:56 +00:00
parent 4c68cb60bc
commit 389e053dc5
70 changed files with 3725 additions and 50 deletions

View File

@@ -0,0 +1,41 @@
{
"format_version": "1.10.0",
"animation_controllers": {
"controller.animation.dragon_egg": {
"initial_state": "cold",
"states": {
"cold": {
"animations": ["idle"],
"transitions": [
{ "warming": "query.property('silverlabs:egg_stage') == 1" }
]
},
"warming": {
"animations": ["wobble"],
"particle_effects": [
{ "effect": "smoke" }
],
"transitions": [
{ "hot": "query.property('silverlabs:egg_stage') == 2" }
]
},
"hot": {
"animations": ["shake"],
"particle_effects": [
{ "effect": "flame" },
{ "effect": "smoke" }
],
"transitions": [
{ "hatching": "query.property('silverlabs:egg_stage') == 3" }
]
},
"hatching": {
"animations": ["shake"],
"particle_effects": [
{ "effect": "flame" }
]
}
}
}
}
}

View File

@@ -0,0 +1,26 @@
{
"format_version": "1.10.0",
"animation_controllers": {
"controller.animation.dragon_gravestone": {
"initial_state": "active",
"states": {
"active": {
"animations": ["idle"],
"particle_effects": [
{ "effect": "memorial_glow" }
]
}
}
},
"controller.animation.dragon_gravestone.beacon": {
"initial_state": "active",
"states": {
"active": {
"particle_effects": [
{ "effect": "beacon_beam" }
]
}
}
}
}
}

View File

@@ -0,0 +1,95 @@
{
"format_version": "1.10.0",
"animation_controllers": {
"controller.animation.spark_dragon.beacon": {
"initial_state": "inactive",
"states": {
"inactive": {
"transitions": [
{ "active": "query.property('silverlabs:beacon_active')" }
]
},
"active": {
"particle_effects": [
{ "effect": "beacon_beam" }
],
"transitions": [
{ "inactive": "!query.property('silverlabs:beacon_active')" }
]
}
}
},
"controller.animation.spark_dragon": {
"initial_state": "idle",
"states": {
"idle": {
"animations": ["idle"],
"transitions": [
{ "flying": "!query.is_on_ground && query.property('silverlabs:growth_stage') == 2" },
{ "walking": "query.modified_move_speed > 0.1" },
{ "sleeping": "query.is_sitting && (query.day_light_level < 4)" },
{ "sitting": "query.is_sitting" }
]
},
"walking": {
"animations": ["walk"],
"transitions": [
{ "flying": "!query.is_on_ground && query.property('silverlabs:growth_stage') == 2" },
{ "idle": "query.modified_move_speed <= 0.1" },
{ "sitting": "query.is_sitting" }
]
},
"sitting": {
"animations": ["sit"],
"transitions": [
{ "idle": "!query.is_sitting" },
{ "sleeping": "query.is_sitting && (query.day_light_level < 4)" }
]
},
"sleeping": {
"animations": ["sleep"],
"transitions": [
{ "idle": "!query.is_sitting" },
{ "sitting": "query.is_sitting && (query.day_light_level >= 4)" }
]
},
"flying": {
"animations": ["fly"],
"transitions": [
{ "idle": "query.is_on_ground && query.modified_move_speed <= 0.1" },
{ "walking": "query.is_on_ground && query.modified_move_speed > 0.1" }
]
}
}
},
"controller.animation.spark_dragon.mood": {
"initial_state": "content",
"states": {
"happy": {
"particle_effects": [
{ "effect": "mood_happy" }
],
"transitions": [
{ "content": "query.property('silverlabs:mood') == 1" },
{ "needy": "query.property('silverlabs:mood') == 0" }
]
},
"content": {
"transitions": [
{ "happy": "query.property('silverlabs:mood') == 2" },
{ "needy": "query.property('silverlabs:mood') == 0" }
]
},
"needy": {
"particle_effects": [
{ "effect": "mood_needy" }
],
"transitions": [
{ "happy": "query.property('silverlabs:mood') == 2" },
{ "content": "query.property('silverlabs:mood') == 1" }
]
}
}
}
}
}