A server-side Fabric mod for Minecraft 26.1.2 that turns your world border into a cooperative progression challenge. Players collect resources, donate them to altars, and unlock an ever-growing world — stage by stage.
| Feature | Description |
|---|---|
| Progressive world border | Starts small and expands as players complete stages |
| Altar system | Donate items by right-clicking any altar block |
| Stage rewards | Give items, potion effects or XP to all players on stage completion |
| Dimension locks | Nether & End are gated behind configurable stages |
| Donation leaderboard | /bq ladder shows the top contributors |
| Altar particles | Visual END_ROD particle effect on every altar |
| Chat announcements | Server-wide broadcast on large donations |
| HUD sidebar | Tab-list header displays current objective |
| Map integrations | BlueMap, Dynmap, JourneyMap, Xaero's Minimap & World Map |
| Discord webhook | Sends a message on every stage completion |
| Recipe locking | Lock specific item recipes behind configurable stages |
| Web dashboard | Embedded HTTP server with live dashboard and admin panel on configurable port (default 8123) |
| Translation system | All messages are translatable via JSON language files (en_us, fr_fr, etc.). Language is set in config |
| Fully configurable | All stages, radii and behaviour tunable via JSON |
| Dependency | Version | Required? | |---|---|---|---| | Minecraft | 26.1.2 | ✅ | | Fabric Loader | ≥ 0.19 | ✅ | | Fabric API | any | ✅ | | Dynmap (Fabric) | any | Optional | | JourneyMap | any | Optional (singleplayer / LAN) | | Xaero's Minimap | any | Optional (singleplayer / LAN) | | Xaero's World Map | any | Optional (singleplayer / LAN) |
Server-side only. Clients do not need to install this mod.
- Drop
border-quest-<version>.jarinto your server'smods/folder alongside Fabric API. - Start the server once —
config/borderquest.jsonis generated automatically. - Edit the config to suit your server, then run
/bq reload.
All commands start with /bq (alias available via any registered alias).
| Command | Description |
|---|---|
/bq or /bq status |
Show current stage, objective and progress |
/bq submit |
Donate all eligible items from your inventory |
/bq ladder |
Show the top 10 donors |
| Command | Description |
|---|---|
/bq setaltar |
Register the block you are looking at as an altar |
/bq setaltar <name> |
Same, but assigns a display name (shown on maps) |
/bq removealtar |
Remove the looked-at block from the altar list |
/bq skip |
Force-advance to the next stage without filling the objective |
/bq reset |
Reset the game to stage 1 |
/bq reload |
Reload borderquest.json and the saved state without restarting |
To donate, right-click any altar block while holding items.
/bq submitworks from anywhere and scans your entire inventory.
File location: config/borderquest.json
| Field | Type | Description |
|---|---|---|
borderRadius |
double | Half the side length of the square border (diameter = radius × 2) |
title |
string | Displayed in chat and the tab-list sidebar |
requirements |
list | Specific items required — itemId + count |
categoryRequirements |
list | Biome-adaptive requirements — category + count |
unlockRecipes |
list | Item IDs whose crafting recipes become unlocked at this stage (see Recipe locking) |
rewards |
list | Rewards given to all online players on stage validation |
Built-in categories: logs, planks, wool, sand, stone — resolved to the most common variants found in the spawn biome.
type |
Required fields | Example |
|---|---|---|
"item" |
itemId, count |
{ "type": "item", "itemId": "minecraft:diamond", "count": 2 } |
"effect" |
effectId, duration (ticks), amplifier (0 = level I) |
{ "type": "effect", "effectId": "minecraft:speed", "duration": 400, "amplifier": 1 } |
"xp" |
amount |
{ "type": "xp", "amount": 100 } |
Altars can be any block — a beacon, a chest, a custom banner — whatever fits your server's theme.
- Place the block in-world.
- Look at it and run
/bq setaltar(optionally/bq setaltar Altar du Spawn). - Players can now right-click the block to donate items.
To remove an altar: look at it and run /bq removealtar.
Altar positions are saved in
world/data/borderquest_state.jsonand survive restarts.
BlueMap n'a pas encore publié de version compatible Minecraft 26.1. Réactiver dès qu'une version sera disponible :
- Décommenter la dépendance
compileOnly "de.bluecolored:bluemap-api:<version>"dansbuild.gradle - Décommenter le contenu de
BlueMapHook.java - Recompiler
Le mod affichera automatiquement :
- Un rectangle vert sur la carte du monde normal indiquant la zone actuelle.
- Un marqueur POI pour chaque autel (avec son nom).
Requires Dynmap for Fabric installed on the server. Same markers as BlueMap — rendered via reflection, no extra dependency needed.
Singleplayer & LAN only. These mods run client-side and are not available on a dedicated server's classpath.
When running in singleplayer or LAN, if JourneyMap, Xaero's Minimap, or Xaero's World Map is installed:
- A waypoint is created for each altar when it is registered.
- The waypoint is removed when the altar is removed.
- Border shapes are not supported (client-side map limitation).
The integration uses reflection — no additional configuration is needed.
- Create a webhook in your Discord server: Channel Settings → Integrations → Webhooks.
- Copy the URL and paste it in
borderquest.json:"discordEnabled": true, "discordWebhookUrl": "https://discord.com/api/webhooks/123456789/abc...", "discordUsername": "Border Quest", "discordAvatarUrl": ""
- Run
/bq reload.
A message is sent automatically each time a stage is completed.
The mod includes an embedded HTTP server (zero external dependencies) serving a live dashboard and admin panel. Access it at http://<server-ip>:8123 (configurable).
| Section | Content |
|---|---|
| Public dashboard | Stage progress bar, resource checklist with mini-bars, donation leaderboard, altar list, player count, stage timeline — auto-refreshes every 5 seconds |
| Admin panel | Password-protected: one-click buttons for /bq reload, /bq skip, /bq reset, plus a full JSON config editor with save/reload |
| Accessibility | Full ARIA support, keyboard navigation (skip-to-content, focus trap on modals, Escape to close), screen-reader announcements, light/dark auto theme |
{
"dashboard": {
"enabled": true, // Set to false to disable the dashboard
"port": 8123, // HTTP port (must be free)
"bindAddress": "127.0.0.1", // "0.0.0.0" to expose on the network (use with caution)
"password": "WmXd2E2Dpo29" // Auto-generated on first launch, modifiable
}
}Security: The admin password is randomly generated on first launch and printed once in the server console. Bind to
127.0.0.1unless you need remote access — if exposed, place it behind a reverse proxy with HTTPS.
- First launch: A random 12-character password is generated, printed once in the server log, and persisted in
config/borderquest.json. - Change it: Edit the
passwordfield in the config file and run/bq reload. - Reset it: Delete the
passwordfield from the config and reload — a new one will be generated.
By default:
- The Nether is locked until stage 5.
- The End is locked until stage 7.
Attempting to enter a locked dimension cancels the teleport and displays a red message.
Customise or remove locks in borderquest.json under worldLocks.
Lock certain item recipes behind stages. When a recipe is locked, the crafting result slot stays empty (crafting table, player inventory 2x2, furnace) and the recipe book auto-craft is blocked.
Server-side limitation. Since this mod runs only on the server, locked recipes may still appear in the client's recipe book — but they cannot be crafted.
Add unlockRecipes inside a stage definition:
{
"borderRadius": 25,
"title": "Iron Age",
"requirements": [{ "itemId": "minecraft:iron_ingot", "count": 32 }],
"unlockRecipes": [
"minecraft:iron_pickaxe",
"minecraft:iron_axe",
"minecraft:iron_sword",
"minecraft:shield"
],
"rewards": []
}Recipes are cumulative: at stage N, all recipes from stages 0 through N are unlocked.
Items not listed in any unlockRecipes are always craftable (backward compatible).
The game state (current stage, submitted items, altar list, donor stats) is saved in:
<world>/data/borderquest_state.json
Back up this file if you want to preserve progress between map resets.
git clone <repo>
cd border-quest-mod
# macOS / Linux :
java -jar gradle/wrapper/gradle-wrapper.jar build
# Windows :
gradlew build
# Output: build/libs/border-quest-<mcversion>-<version>.jarRequirements: Java 25, internet access (to download Fabric Loom and dependencies).
Override the mod version for testing:
java -jar gradle/wrapper/gradle-wrapper.jar build -Pmod_version=1.1.0This project uses separate branches per Minecraft version:
develop— main development branch (no releases)1.21.11— stable releases for Minecraft 1.21.111.22, etc. — future Minecraft version support
Releases are triggered by git tags on a version branch:
git checkout 1.21.11
git tag v1.1.0
git push origin v1.1.0This builds, creates a GitHub Release, and publishes to Modrinth automatically.
Dependencies at a glance:
| Artifact | Scope | Purpose |
|---|---|---|
net.fabricmc.fabric-api |
implementation |
Fabric API |
| Dynmap, JourneyMap, Xaero's | none | Integrated via reflection — no compile dependency |
MIT — see LICENSE.
{ // General ------------------------------------------------------------------- // Language of the mod messages (en_us, fr_fr, etc.). Must match a file in // the mod JAR at assets/borderquest/lang/<language>.json "language": "en_us", // Duration of the celebration fireworks on stage completion (ticks, 20 = 1s) "celebrationDurationTicks": 200, // Damage per second while a player is outside the border "borderDamagePerBlock": 0.2, // Distance (blocks) at which the border warning is shown "borderWarningBlocks": 5, // Nether coordinate scale factor (Nether border = Overworld radius / netherScale) "netherScale": 8.0, // Altar particles ----------------------------------------------------------- "altarParticlesEnabled": true, // How often particles spawn, in ticks (20 = once per second) "altarParticlePeriodTicks": 20, // Donation announcements ---------------------------------------------------- // Broadcast a message to all players when a single donation reaches this count "donationAnnouncementsEnabled": true, "donationAnnounceMinItems": 16, // Dimension locks ----------------------------------------------------------- // Prevent players from entering a dimension until the required stage is reached "worldLocks": [ { "worldId": "minecraft:the_nether", "requiredStage": 5 }, { "worldId": "minecraft:the_end", "requiredStage": 7 } ], // Discord webhook ----------------------------------------------------------- "discordEnabled": false, "discordWebhookUrl": "https://discord.com/api/webhooks/YOUR_ID/YOUR_TOKEN", "discordUsername": "Border Quest", "discordAvatarUrl": "", // Leave empty to use the default webhook avatar // Stages -------------------------------------------------------------------- "stages": [ { "borderRadius": 10, "title": "Clear the area", // Fixed items required "requirements": [ { "itemId": "minecraft:cobblestone", "count": 64 } ], // Biome-resolved categories (the mod picks the right log type automatically) "categoryRequirements": [ { "category": "logs", "count": 64 } ], // Rewards distributed to ALL online players on completion "rewards": [] }, { "borderRadius": 25, "title": "First steps toward civilisation", "requirements": [ { "itemId": "minecraft:iron_ingot", "count": 32 }, { "itemId": "minecraft:bread", "count": 32 } ], "categoryRequirements": [], // Recipes unlocked when reaching this stage "unlockRecipes": [ "minecraft:iron_pickaxe", "minecraft:iron_axe", "minecraft:iron_sword", "minecraft:shield" ], "rewards": [ // Give 3 bread to every online player { "type": "item", "itemId": "minecraft:bread", "count": 3 }, // Apply Haste I for 30 s { "type": "effect", "effectId": "minecraft:haste", "duration": 600, "amplifier": 0 }, // Give 50 XP points { "type": "xp", "amount": 50 } ] } // ... add as many stages as you like // The LAST stage represents total freedom (use borderRadius: 29999984) ] }