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,22 @@
{
"pools": [
{
"rolls": 1,
"entries": [
{ "type": "item", "name": "silverlabs:dragon_bones", "weight": 1 }
]
},
{
"rolls": 1,
"entries": [
{ "type": "item", "name": "silverlabs:dragon_gravestone", "weight": 1 }
]
},
{
"rolls": 1,
"entries": [
{ "type": "item", "name": "minecraft:name_tag", "weight": 1 }
]
}
]
}

View File

@@ -0,0 +1,33 @@
{
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "item",
"name": "minecraft:written_book",
"weight": 1,
"functions": [
{
"function": "set_book_contents",
"author": "SilverLABS",
"title": "Spark Dragon Guide",
"pages": [
"§l§5Spark Dragon Guide§r\n\nWelcome, Dragon Keeper!\n\nThis guide covers everything you need to know about caring for your Spark Dragon companion.\n\n§oTurn the page to begin...§r",
"§l§6Getting Started§r\n\nTo hatch a Spark Dragon:\n\n§f1. Craft a §eDragon Basket§f and place it\n§f2. Place a §dSpark Dragon Egg§f nearby\n§f3. The egg will hatch into a baby!\n\nTo tame:\n§f• Hold §bRaw Cod§f or §cRaw Salmon§f\n§f• Interact with the baby dragon\n§f• Each attempt has a §a33%§f chance\n§f• Hearts appear when tamed!\n\n§7Name your dragon with a §eName Tag§7!§r",
"§l§6Commands§r\n\nOnce tamed, interact to command:\n\n§f• §eFollow Me§f - interact (standing)\n§f• §eStay§f - sneak + interact (sits)\n§f• §eStand§f - sneak + interact (sitting)\n§f• §eGet Up§f - interact while sitting\n§f• §eSet Home§f - sneak + bone (standing)\n§f• §eGo Home§f - sneak + bone (sitting)\n\n§7Commands cycle based on current state.§r",
"§l§6Feeding & Healing§r\n\nFeed your dragon to heal it:\n\n§f• §bRaw Cod§f: restores §a4 HP§f\n§f• §cRaw Salmon§f: restores §a6 HP§f\n\nFeeding fish and giving §9Water Bottles§f both §dimprove your dragon's mood§r!\n\n§7Tip: Water bottles are an easy mood boost — just brew or fill one at a water source.§r",
"§l§6Home & Basket§r\n\nSet up a home for your dragon:\n\n§f1. Place a §eDragon Basket§f\n§f2. Stand near it with your dragon\n§f3. Hold a §eBone§f and sneak + interact\n\nWith a home set, your dragon will:\n§f• Explore by day (32 block radius)\n§f• Return home at dusk\n§f• Sleep through the night\n§f• Wake at dawn to explore\n\n§7Send it home: sneak + bone while sitting.§r",
"§l§6Growth Stages§r\n\nDragons grow through 3 stages:\n\n§a1. Baby§f (small, 10 HP)\n Grows up by feeding or waiting\n\n§e2. Juvenile§f (medium, 20 HP)\n Timer-based growth (~20 min)\n May raid gardens!\n\n§c3. Adult§f (full size, 30 HP)\n Can fly! Drops better gifts.\n\n§7Feed fish to speed up baby growth.§r",
"§l§6Mood System§r\n\nYour dragon has feelings!\n\n§a★ Happy§f - Green star particles\n Recently fed, watered, or played\n\n§7● Content§f - No particles\n Default calm state\n\n§4♨ Needy§f - Gray smoke particles\n Wants food or attention!\n\n§dBoost mood with:§f fish, §9water bottles§f, or fetch!\nMood decays over time.\n\n§7Juveniles are always content.§r",
"§l§6Playing Fetch§r\n\nCraft a §dSpark Ball§f:\n String around Leather\n (shaped recipe, crafting table)\n\n§f• Throw the ball (use item)\n§f• Dragon chases and catches it\n§f• Returns the ball to you!\n§f• Resets mood to §aHappy§r\n\n§7Great way to bond with your dragon and keep it happy!§r",
"§l§6Death & Gravestones§r\n\nIf your dragon dies, it leaves a §7Dragon Gravestone§f at the death location.\n\n§f• Look for the §ebeacon column§f of particles rising into the sky\n§f• The gravestone glows to help you find it\n§f• Collect §7Dragon Bones§f as a memorial\n\n§7The beacon makes gravestones visible from far away.§r",
"§l§6Tips & Tricks§r\n\n§f• Dragons are §afall immune§f\n§f• Use a §eLead§f to guide them\n§f• §eName Tags§f work normally\n§f• Craft a §dDragon Whistle§f for ranged recall (throw it!)\n§f• Give an §dAmethyst Shard§f to get another copy of this guide\n§f• §9Water Bottles§f boost mood without using food\n\n§5Enjoy your Spark Dragon!§r\n§7- SilverLABS§r"
]
}
]
}
]
}
]
}

View File

@@ -0,0 +1,14 @@
{
"pools": [
{
"rolls": 1,
"entries": [
{
"type": "item",
"name": "silverlabs:dragon_egg",
"weight": 1
}
]
}
]
}

View File

@@ -0,0 +1,23 @@
{
"pools": [
{
"rolls": 1,
"entries": [
{ "type": "item", "name": "minecraft:diamond", "weight": 5 },
{ "type": "item", "name": "minecraft:emerald", "weight": 8 },
{ "type": "item", "name": "minecraft:gold_ingot", "weight": 15 },
{ "type": "item", "name": "minecraft:iron_ingot", "weight": 20 },
{ "type": "item", "name": "minecraft:amethyst_shard", "weight": 12 },
{ "type": "item", "name": "minecraft:lapis_lazuli", "weight": 15,
"functions": [{ "function": "set_count", "count": { "min": 2, "max": 5 } }]
},
{ "type": "item", "name": "minecraft:redstone", "weight": 15,
"functions": [{ "function": "set_count", "count": { "min": 2, "max": 4 } }]
},
{ "type": "item", "name": "minecraft:golden_apple", "weight": 3 },
{ "type": "item", "name": "minecraft:name_tag", "weight": 7 },
{ "type": "item", "name": "silverlabs:dragon_egg", "weight": 1 }
]
}
]
}

View File

@@ -0,0 +1,16 @@
{
"pools": [
{
"rolls": 1,
"entries": [
{ "type": "item", "name": "minecraft:feather", "weight": 20 },
{ "type": "item", "name": "minecraft:wheat_seeds", "weight": 20 },
{ "type": "item", "name": "minecraft:string", "weight": 15 },
{ "type": "item", "name": "minecraft:bone", "weight": 15 },
{ "type": "item", "name": "minecraft:yellow_flower", "weight": 10 },
{ "type": "item", "name": "minecraft:red_flower", "weight": 10 },
{ "type": "item", "name": "minecraft:stick", "weight": 10 }
]
}
]
}

View File

@@ -0,0 +1,16 @@
{
"pools": [
{
"rolls": 1,
"entries": [
{ "type": "item", "name": "minecraft:iron_nugget", "weight": 20 },
{ "type": "item", "name": "minecraft:gold_nugget", "weight": 15 },
{ "type": "item", "name": "minecraft:coal", "weight": 20 },
{ "type": "item", "name": "minecraft:redstone", "weight": 15 },
{ "type": "item", "name": "minecraft:lapis_lazuli", "weight": 10 },
{ "type": "item", "name": "minecraft:flint", "weight": 10 },
{ "type": "item", "name": "minecraft:copper_ingot", "weight": 10 }
]
}
]
}

View File

@@ -0,0 +1,10 @@
{
"pools": [
{
"rolls": 1,
"entries": [
{ "type": "item", "name": "silverlabs:dragon_gravestone", "weight": 1 }
]
}
]
}

View File

@@ -0,0 +1,10 @@
{
"pools": [
{
"rolls": 1,
"entries": [
{ "type": "item", "name": "silverlabs:dragon_toy", "weight": 1 }
]
}
]
}

View File

@@ -0,0 +1,10 @@
{
"pools": [
{
"rolls": 1,
"entries": [
{ "type": "item", "name": "silverlabs:dragon_whistle", "weight": 1 }
]
}
]
}