Your destiny shapes the world. The world shapes your destiny.
FATEBOUND is a full Minecraft MMO gamemode (Paper plugin + matching resource pack) where every player joins the same world, but nobody experiences the same adventure. Each player is assigned a unique fate of five evolving abilities, the weather tells a story, time itself fractures into other eras, and custom 3D bosses roam the world — all rendered through a resource pack that never touches a single vanilla texture.
It is, in one line: Destiny SMP + Chronos SMP + Dynamic World Events + MMO progression.
- Destiny System — On first join, the world assigns each player 5 random Fate Abilities (out of 14), each with a level, XP, an evolution path, passive buffs, and a custom icon. Nobody gets the same hand.
- Ability Evolution — Abilities level up from what you actually do. Explorer Soul → Caveborn → Ruinwalker → Dimensional Seer. A betrayer's path awakens dark evolutions. Each level-up is broadcast and the ability's passive grows stronger.
- Fate Shards — A destiny currency earned from Fate Challenges, boss kills, and trades. Spend them to reroll abilities, unlock evolution paths, and buy destiny items. Merchant Soul / Ancient Knowledge abilities boost your yields.
- Fate Challenges — Every 5 minutes each player gets a random task (explore chunks, defeat hostiles, build blocks, trade with players) tracked live via the action bar, paying Shards + Destiny XP on completion.
- World Event Engine — The weather is a message, not decoration. Clear → Golden Age, Heat → The Ocean Awakens, Rain → Nature Rebirth, Storm → The Fracture. Each state drives ambient particles, crop growth, monster empowerment, visual lightning, and a chance to spawn a boss.
- Chronos / Time Fractures — The Age Clock can drag a region into another era (Ancient / Medieval / Future), spawning era-specific custom mobs for ~30 minutes before time repairs itself.
- Custom 3D Bosses — The Chronos Guardian: an armored giant with floating time crystals, idle breathing, attack lunges, a Time Freeze special, and a Phase 2: Time Collapse that empowers its melee and halves cooldowns. Rendered with vanilla display entities + a custom resource-pack model — no ModelEngine, no NMS, no external dependencies.
- Custom Items — The Chronos Blade (dash + slow-time), Fate Shards, era relics, and ability totems — all via
CustomModelDataso vanilla items stay completely intact. - Cinematic First Join — A title fade, an "ancient voice" sound, and a staggered reveal of your five fates.
- Admin Control — A chest GUI (
/fatebound) plus commands to spawn bosses, force events, set eras, give items, and reload config.
SMP/
├── pom.xml # Maven build (Paper 1.21.4, Java 21)
├── src/main/java/com/fatebound/ # The plugin
│ ├── FateboundPlugin.java # wiring / lifecycle
│ ├── destiny/ # abilities, XP, evolution, passives
│ ├── currency/ # Fate Shards
│ ├── tasks/ # 5-minute Fate Challenges
│ ├── world/ # World Event Engine + eras + fractures
│ ├── boss/ # display-entity bosses + animations
│ ├── items/ # CustomModelData item registry
│ ├── ui/ # admin + destiny chest GUIs
│ ├── join/ # first-join cinematic
│ ├── command/ # /destiny /fate /task /fatebound
│ ├── pack/ # built-in resource-pack HTTP server
│ └── data/ # per-player YAML persistence
├── src/main/resources/ # plugin.yml, config.yml, messages.yml
├── resource-pack/FateboundPack/ # the resource pack (source)
├── resource-pack/FateboundPack.zip # ready-to-serve pack
└── tools/gen_resource_pack.py # regenerates the pack (PIL + ffmpeg)
The release ships two assets: Fatebound-1.0.0.jar (the plugin) and FateboundPack.zip (the resource pack).
- Paper 1.21.4 (or any 1.21.x with the modern item-model system; 1.21.4 is the tested target)
- Java 21 (for the server, and for building)
- Python 3 + Pillow + ffmpeg only if you regenerate the pack (the zip is already built for you)
- Drop
Fatebound-1.0.0.jarinto your server'splugins/folder. - Start the server once so the
Fatebound/config folder is generated, then stop it. - Place
FateboundPack.zipintoplugins/Fatebound/(the plugin serves it for you). - In
server.properties, point the server at the built-in pack server:(The port is configurable inresource-pack=http://<your-server-ip>:8770/FateboundPack.zipplugins/Fatebound/config.ymlunderresource-pack.port.) - Restart. Players will be prompted to accept the pack — accepting is what makes bosses, the destiny UI, and custom items render correctly.
- Join and read "THE WORLD HAS AWAKENED — Your destiny is waiting..."
Prefer to host the pack yourself? Upload
FateboundPack.zipto any public URL and put that URL inserver.propertiesinstead. The plugin works either way.
# requires JDK 21 + Maven
mvn clean package
# -> target/Fatebound-1.0.0.jarRegenerate the resource pack (optional — the zip is committed):
pip install pillow
python tools/gen_resource_pack.py
# -> resource-pack/FateboundPack/ and resource-pack/FateboundPack.zip| Command | Description | Permission |
|---|---|---|
/destiny |
Open your destiny panel (view abilities, click to reroll for Shards) | everyone |
/fate |
Show your Fate Shard balance | everyone |
/fate pay <player> <amount> |
Transfer Fate Shards to another player | everyone |
/task |
Show your current Fate Challenge + progress | everyone |
/fatebound reload |
Reload config.yml + messages.yml |
fatebound.admin |
/fatebound spawnboss <chronos_guardian> [x y z] |
Spawn a boss | fatebound.admin |
/fatebound setera <ANCIENT|MEDIEVAL|FUTURE> |
Set the global era | fatebound.admin |
/fatebound forceevent <CLEAR|HEAT|RAIN|STORM> |
Force a world event | fatebound.admin |
/fatebound give <player> <item> [amount] |
Give a custom item | fatebound.admin |
fatebound.admin defaults to OP. Opening /fatebound with no args shows the FATEBOUND CONTROL GUI.
The pack uses Minecraft 1.21.4's item-model system. For each vanilla item we touch, we provide an assets/minecraft/items/<item>.json that is a range_dispatch on custom_model_data with the vanilla model as the fallback. Unrecognised data renders as the normal item; only our reserved IDs get a custom model.
CustomModelData map (matches com.fatebound.items.CustomItems + boss IDs):
| ID range | Material | Used for |
|---|---|---|
5001 |
netherite_sword | Chronos Blade |
6001–6014 |
paper | 14 ability icons (destiny menu) |
7001 |
nether_star | Fate Shard |
7002–7005 |
paper | Era relics + Chronos Core |
8001–8004 |
paper | Boss / era-mob 3D models (Guardian, Titan Beast, Royal Knight, Time Drone) |
8005 |
paper | Orbiting time crystal |
Bosses are item_display entities holding a paper with the boss CustomModelData, animated every tick via interpolated transformations (idle breathing, attack lunge, cast pulse) with orbiting crystal sub-displays. The hitbox/health/aggro come from a silent, invisible zombie "engine" whose damage is intercepted and counted in a plugin-owned health pool — so boss HP is independent of vanilla attribute limits, and the engine can never die from the environment. No vanilla entity files are replaced.
The pack's pack.mcmeta uses a wide supported_formats range so nearby versions accept it without an "incompatible" warning; content targets 1.21.4's item-model schema.
config.yml covers destiny XP curves, reroll cost, task interval/rewards, weather weights, fracture chance/duration, boss health/damage/Time-Freeze tuning, the resource-pack server port, and persistence. messages.yml holds every player-facing string in MiniMessage format.
This release is the Phase 1 core plus the boss system that proves the pack renders custom 3D bosses correctly.
- Phase 2 — more bosses, full era-mob rosters, ability questlines, world-memory events.
- Phase 3 — civilization evolution, the full Chronos timeline, persistent world history ("100 days later, a player finds the ruined village").
MIT — see LICENSE. Built for the FATEBOUND community. Every player has a destiny; every action changes the world.