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,52 @@
{
"format_version": "1.12.0",
"minecraft:geometry": [
{
"description": {
"identifier": "geometry.dragon_basket",
"texture_width": 16,
"texture_height": 16
},
"bones": [
{
"name": "basket",
"pivot": [0, 0, 0],
"cubes": [
{
"origin": [-7, 0, -7],
"size": [14, 2, 14],
"uv": [0, 0],
"inflate": 0
},
{
"origin": [-7, 2, -7],
"size": [14, 3, 1],
"uv": [0, 0]
},
{
"origin": [-7, 2, 6],
"size": [14, 3, 1],
"uv": [0, 0]
},
{
"origin": [-7, 2, -6],
"size": [1, 3, 12],
"uv": [0, 0]
},
{
"origin": [6, 2, -6],
"size": [1, 3, 12],
"uv": [0, 0]
},
{
"origin": [-5, 1, -5],
"size": [10, 1, 10],
"uv": [0, 8],
"inflate": 0
}
]
}
]
}
]
}

View File

@@ -0,0 +1,53 @@
{
"format_version": "1.12.0",
"minecraft:geometry": [
{
"description": {
"identifier": "geometry.dragon_egg",
"texture_width": 32,
"texture_height": 32,
"visible_bounds_width": 1.0,
"visible_bounds_height": 1.0,
"visible_bounds_offset": [0, 0.4, 0]
},
"bones": [
{
"name": "root",
"pivot": [0, 0, 0]
},
{
"name": "egg",
"parent": "root",
"pivot": [0, 0, 0],
"cubes": [
{
"origin": [-2, 0, -2],
"size": [4, 2, 4],
"uv": [0, 18]
},
{
"origin": [-3, 2, -3],
"size": [6, 3, 6],
"uv": [0, 8]
},
{
"origin": [-2.5, 5, -2.5],
"size": [5, 3, 5],
"uv": [0, 0]
},
{
"origin": [-1.5, 8, -1.5],
"size": [3, 2, 3],
"uv": [18, 0]
},
{
"origin": [-0.5, 10, -0.5],
"size": [1, 1, 1],
"uv": [20, 8]
}
]
}
]
}
]
}

View File

@@ -0,0 +1,55 @@
{
"format_version": "1.12.0",
"minecraft:geometry": [
{
"description": {
"identifier": "geometry.dragon_gravestone",
"texture_width": 32,
"texture_height": 32,
"visible_bounds_width": 1.0,
"visible_bounds_height": 1.5,
"visible_bounds_offset": [0, 0.5, 0]
},
"bones": [
{
"name": "root",
"pivot": [0, 0, 0]
},
{
"name": "base",
"parent": "root",
"pivot": [0, 0, 0],
"cubes": [
{
"origin": [-4, 0, -2],
"size": [8, 2, 4],
"uv": [0, 20]
}
]
},
{
"name": "stone",
"parent": "base",
"pivot": [0, 2, 0],
"cubes": [
{
"origin": [-3, 2, -1],
"size": [6, 8, 2],
"uv": [0, 0]
},
{
"origin": [-2, 10, -1],
"size": [4, 2, 2],
"uv": [0, 10]
},
{
"origin": [-1, 12, -1],
"size": [2, 1, 2],
"uv": [0, 14]
}
]
}
]
}
]
}

View File

@@ -0,0 +1,26 @@
{
"format_version": "1.12.0",
"minecraft:geometry": [
{
"description": {
"identifier": "geometry.dragon_toy",
"texture_width": 16,
"texture_height": 16
},
"bones": [
{
"name": "body",
"pivot": [0, 2, 0],
"cubes": [
{
"origin": [-2, 0, -2],
"size": [4, 4, 4],
"uv": [0, 0],
"inflate": 0.5
}
]
}
]
}
]
}

View File

@@ -0,0 +1,149 @@
{
"format_version": "1.12.0",
"minecraft:geometry": [
{
"description": {
"identifier": "geometry.spark_dragon",
"texture_width": 64,
"texture_height": 32,
"visible_bounds_width": 1.5,
"visible_bounds_height": 1.0,
"visible_bounds_offset": [0, 0.25, 0]
},
"bones": [
{
"name": "root",
"pivot": [0, 0, 0]
},
{
"name": "body",
"parent": "root",
"pivot": [0, 4, 0],
"cubes": [
{
"origin": [-3, 2, -4],
"size": [6, 5, 8],
"uv": [0, 0]
}
]
},
{
"name": "head",
"parent": "body",
"pivot": [0, 6, -4],
"cubes": [
{
"origin": [-2.5, 4.5, -9],
"size": [5, 5, 5],
"uv": [20, 0]
},
{
"origin": [-1.5, 4.5, -11],
"size": [3, 3, 2],
"uv": [40, 0]
},
{
"origin": [-0.5, 9.5, -8],
"size": [1, 2, 1],
"uv": [50, 0]
},
{
"origin": [0.5, 9.5, -7],
"size": [1, 2, 1],
"uv": [54, 0]
}
]
},
{
"name": "leg_front_left",
"parent": "body",
"pivot": [2, 2, -2],
"cubes": [
{
"origin": [1, 0, -3],
"size": [2, 3, 2],
"uv": [0, 13]
}
]
},
{
"name": "leg_front_right",
"parent": "body",
"pivot": [-2, 2, -2],
"cubes": [
{
"origin": [-3, 0, -3],
"size": [2, 3, 2],
"uv": [8, 13]
}
]
},
{
"name": "leg_back_left",
"parent": "body",
"pivot": [2, 2, 3],
"cubes": [
{
"origin": [1, 0, 2],
"size": [2, 3, 2],
"uv": [16, 13]
}
]
},
{
"name": "leg_back_right",
"parent": "body",
"pivot": [-2, 2, 3],
"cubes": [
{
"origin": [-3, 0, 2],
"size": [2, 3, 2],
"uv": [24, 13]
}
]
},
{
"name": "tail",
"parent": "body",
"pivot": [0, 4, 4],
"cubes": [
{
"origin": [-1, 3, 4],
"size": [2, 2, 6],
"uv": [32, 13]
},
{
"origin": [-0.5, 3.5, 10],
"size": [1, 1, 3],
"uv": [48, 13]
}
]
},
{
"name": "wing_left",
"parent": "body",
"pivot": [3, 7, 0],
"cubes": [
{
"origin": [3, 6.5, -2],
"size": [6, 0.5, 4],
"uv": [0, 19]
}
]
},
{
"name": "wing_right",
"parent": "body",
"pivot": [-3, 7, 0],
"cubes": [
{
"origin": [-9, 6.5, -2],
"size": [6, 0.5, 4],
"uv": [0, 24]
}
]
}
]
}
]
}