CurseForge · Minecraft mod
WN Bluemap
Live faction/nation territory map for Warring Nations on BlueMap: claims, active war frontlines, capitals, and alliances, with terrain-following borders, incremental live updates, and optional Discord integration.
Quick answer
Which WN Bluemap release should I use?
WN Bluemap wn-bluemap-neoforge-1.4.0.jar targets 1.21.1 with NeoForge. The project page does not say whether this file belongs on the client, dedicated server, or both. All 5 required mods have matching files.
Where it goes
Is WN Bluemap required on the client, server, or both?
The project page does not say whether this file belongs on the client, dedicated server, or both.
The source does not explicitly classify this release as client-only or server-only.
What else does WN Bluemap wn-bluemap-neoforge-1.4.0.jar need?
wn-bluemap-neoforge-1.4.0.jar. Change the file and its required mods may change too.
Install Warring Nations, FTB Library (NeoForge), FTB Teams (NeoForge), FTB Chunks (NeoForge) and 1 more first. We found matching files for this game-version and loader setup. 9 come through another mod in the chain.
9 extra mods were pulled in by other dependencies. Indented rows show who needs each one. We only count dependency files that match this setup. A file for another loader does not fill the gap.
Before you install it
Add WN Bluemap without breaking your instance.
Built for WN Bluemap wn-bluemap-neoforge-1.4.0.jar. Pick another file and the loader, install side or required mods may change.
- 01
Stick to this file
Use wn-bluemap-neoforge-1.4.0.jar. It targets 1.21.1 with NeoForge; another release may have different loader, side or dependency requirements.
- 02
Bring the mods it needs
Install Warring Nations, FTB Library (NeoForge), FTB Teams (NeoForge), FTB Chunks (NeoForge) and 1 more first. We found matching files for this game-version and loader setup. 9 come through another mod in the chain.
- 03
Put it on the correct side
The project page does not say whether this file belongs on the client, dedicated server, or both.
- 04
Pick the file you checked
Use the “Get this file” button beside wn-bluemap-neoforge-1.4.0.jar. It opens that exact file at the source.
About this project
What does WN Bluemap add?
Warring Nations: BlueMap
Warring Nations: BlueMap (WN BlueMap) turns BlueMap into a live political map of your server: nation territory, villages, active wars, alliances, and rivalries, all reading straight off Warring Nations' own state.
It reads claim geometry from FTB Chunks, nation color from FTB Teams, and nation/war/village/diplomacy state from the Warring Nations API, then draws it all as clean, color-coded regions on BlueMap. Everything updates automatically as the game state changes; nobody has to log in to see what's going on.
Server-side only. No client mod is required.
What appears on your map
Four marker sets, each independently toggleable in the BlueMap web app:
| Layer | Marker set | What it shows |
|---|---|---|
| Nations | wnbluemap.territory | Every nation's claimed territory, terrain-following borders + ground tint, one rich popup per region |
| Active Wars | wnbluemap.war | The contested frontline between nations at war, with a live per-war scoreboard popup |
| Diplomacy | wnbluemap.diplomacy | Lines between nations with a standing relation: green for alliances, amber for rivalries |
| Villages | wnbluemap.villages | Village-tier territory, rendered as a flat, paler decal distinct from nation land |
There is no separate capital marker. Warring Nations has a real in-game capital concept, and a nation's popup names its capital when it has one, but a capital's chunk coordinates are deliberately withheld from the public API (the same rule /nation home follows), so the name is all the map ever shows, never a location. See What it deliberately does not show below for the reasoning.
Markers are global, the same for every viewer. This is a shared public political map, not a personal minimap.
Nations
Each nation's claimed chunks are merged into clean polygons in the nation's color (/nation color, or a stable generated color if none is set / it's plain white or black). Split territories, unclaimed gaps, and enemy pockets enclosed inside a nation's land all render correctly as separate regions with real holes, nothing gets painted over. Only Warring Nations claims are shown; ordinary FTB personal/party claims are excluded.
Rendering happens in two layers per region:
- Terrain-following border walls. Rather than a flat slab floating at a fixed world Y (which clips underground on any world whose ground isn't near vanilla sea level, and floats in the air over hills), the border is built from wall panels sampled along the real ground height every borderSampleSpacing blocks, merging consecutive same-height samples into longer panels so flat runs don't cost extra markers. Small decorations (flowers, leaves, torches) are skipped by the ground-height scan so they don't create false steps.
- A flat ground tint over the whole claimed area, sitting just above sampled ground height so it wins BlueMap's depth test from directly overhead but is naturally occluded by real terrain from an angled 3D view, from above, the tint shows the territory; from an angle, the raised walls make the borders easy to read. Adjacent chunks sampled at the exact same height are merged into one polygon (fewer markers, no per-chunk seams).
- If a BlueMap map has no 3D camera at all (both enable-perspective-view and enable-free-flight-view disabled in BlueMap's own per-map config, a common flat/Dynmap-style setup), this addon detects that directly from BlueMap's config and skips all ground-height sampling for that dimension, drawing one flat shape per region instead, since a locked top-down camera can't tell a terrain-hugging wall from a flat one.
- A nation currently at war gets a war-tinted, thicker border so an active conflict is visible even with the Active Wars layer hidden.
Every region a nation holds carries a full popup, so a multi-region nation has one at each disjoint piece of land rather than at a single arbitrary point:
| Popup field | Detail |
|---|---|
| Name & color | Nation's display name and color swatch |
| Tier | The tier's in-game name and its war-power multiplier |
| Region size | Chunk count and area in blocks² for that region |
| Center | Block X/Z of the region's center |
| Capital | Named only if the nation has designated one, never a coordinate (see above) |
| Alliance bloc | Named if the nation belongs to one |
| Leader & members | Player-head avatars, leader plus up to 8 named members with a "+N more" overflow |
| Allies / enemies | Named lists of standing diplomatic relations (the same relations drawn as lines on the Diplomacy layer) |
| War flag | A banner if the nation is currently at war |
Active Wars
Highlights the contested frontline, a nation's claimed chunks that directly border an enemy nation's claimed chunks, rather than tinting entire territories. Reads from an accessor that covers both of Warring Nations' war systems (the legacy war model and file-defined composable war types), so a composable war shows a frontline and war tint exactly like a legacy one.
Clicking a frontline opens a live scoreboard, one row per war that nation is currently fighting:
- The opponent's name.
- Both sides' score, written from the clicked nation's own point of view (its score first), with a leading / level / behind verdict.
- The war type, humanized from its underlying id (border_skirmish → "Border skirmish").
- Roughly how long the war has run, at a deliberately coarse resolution ("just started", "14m in", "3h in", "2 days in"), elapsed time and score are baked into a cached marker refreshed on rebuild, not live-ticking, so the display never claims more precision than the rebuild cadence backs up.
- A war still in its post-declaration countdown reads as "Mobilizing" instead of a meaningless 0-0.
Per-chunk live capture progress is deliberately not shown, see What it deliberately does not show.
Diplomacy
Draws a line between any two nations that both hold land in the same dimension and have a standing relation, anchored at each nation's largest-region centroid (an invisible point, no marker sits there):
- Alliance, green (allianceColorRgb), popup shows both nations' names and tiers with a "sworn to defend each other" note.
- Rivalry, amber (rivalryColorRgb), popup marks it explicitly as a standing posture, "not an active war." Rivalry lines are deliberately never the war color, so a declared-enemy line can't be mistaken for an active conflict at a glance. Toggleable independently via rivalryLines (on by default).
Only drawn between two nations in the same dimension, a line across worlds has no meaningful position on a single map. Hidden by default (diplomacyLinesDefaultHidden); each viewer can turn it on in the web app's layer list.
Villages
Renders the village territorial tier, Warring Nations' sub-nation-level territory, as its own claim space, distinct from nation land at a glance:
- A flat decal, never extruded border walls: villages render with zero ground-height scanning (no border-wall or tint sampling at all), so village rendering carries essentially none of nation territory's per-block scanning cost.
- Paler, more muted coloring than nation territory (villageFillOpacity/villageLineOpacity default lower than the nation equivalents) so a village never reads as a nation-scale claim at distance.
- An affiliated village inherits its owning nation's color; a standalone village gets its own.
Popup shows the village name, whether it's standalone or affiliated (and to which nation), region size/area/center, and its leader, no member roster (Warring Nations only exposes a village member count, not names) and no war banner (villages have no war state of their own).
Live updates
Markers rebuild automatically, debounced (debounceMillis, default 1500ms of quiet) so a burst of changes causes one redraw instead of many. Rebuilds are triggered by Warring Nations events, claim changes (including war captures), nation create/disband/rename, membership changes, village changes, war start/end, war score changes, and diplomacy changes, plus BlueMap enabling/reloading and server start. Only the nation(s) or village(s) that actually changed recompute; a periodic full refresh (fullRebuildEvery, default every 500 passes) exists purely as paranoia insurance against an unknown cache-invalidation gap, not as the routine mechanism for anything.
A war score changing rebuilds the war layer only. It does not touch cached territory or trigger the expensive per-block border rescan a real claim change does, otherwise every capture point awarded during an active war would drag a full border rebuild of both belligerents along with it.
Pacing under load
Ground-height scanning (border walls and tint) is real per-block world reading, and turning tint samples into merged polygon markers is real geometry work, both are spread across server ticks at five independent granularities instead of run as one synchronous burst, each bounding a different thing that scales independently:
| Queue | Config key | Default | Bounds |
|---|---|---|---|
| Nation setup | nationsPerTick | 3 | Splitting a dirty nation's claims into connected regions, cheap, but only enumerates work |
| Border walls | wallRegionsPerTick | 8 | Building one connected region's walls, bounds a nation fragmented into many disjoint claim pockets |
| Tint sampling | tintCellsPerTick | 150 | Ground-height sampling per claimed chunk, scales with claimed area |
| Tint grouping | tintGroupsPerTick | 200 | Turning merged same-height plateaus into polygon markers, work that measures over 100ms unpaced for a single 42,000-chunk nation on realistically varied terrain |
| Villages | villagesPerTick | 10 | Village territory building, no ground scanning to pace, just boundary tracing |
Pacing is sized against real large-server leaderboard data (a top nation with 42,136 claims). One known limit remains: a single nation whose entire territory is one large, compact, unfragmented region still has that region's boundary traced in one synchronous call (~60ms measured at 42,000 chunks), region-level pacing only helps once a nation has more than one region to spread the work across.
Beyond pacing, territory, tint, and war-frontline results are all cached per nation and only recomputed when the state they actually depend on changes (claims, color, or, for frontlines, an adjacent enemy's claims/color/name). Diplomacy lines are deliberately left uncached (their O(nations²) pairwise cost tracks nation count, not claim size, so a claim burst never makes them more expensive).
Configuration
Config file: config/warring-nations/wn-bluemap-server.toml (alongside the other Warring Nations addons' configs). All values are read live, an edit takes effect on the next rebuild, no restart needed.
Features
| Key | Default | Effect |
|---|---|---|
| territory | true | Draw nation territory |
| warOverlay | true | Draw the contested-frontline overlay |
| diplomacyLines | true | Draw alliance + rivalry lines |
| diplomacyLinesDefaultHidden | true | Start the diplomacy layer hidden in the web app |
| rivalryLines | true | Also draw the ENEMY half of diplomacy, not just alliances (requires diplomacyLines) |
| villages | true | Draw village territory |
Territory style
| Key | Default | Effect |
|---|---|---|
| fillOpacity | 0.30 | Legacy flat-slab fill alpha (unused once borderWallHeight-style rendering applies; kept for the flat-only-map fallback) |
| lineOpacity | 0.80 | Legacy flat-slab border alpha |
| lineWidth | 2 | Territory border-line width in pixels |
| shapeMinY / shapeMaxY | 62 / 74 | Bottom/top Y of the extruded slab on a flat-only map |
| depthTest | false | false = borders show through terrain |
| borderWallHeight | 4 | Height in blocks of each terrain-following border wall panel |
| borderSampleSpacing | 4 | Sample terrain height every N blocks along a border, so walls step with slopes/cliffs |
| borderThickness | 0.5 | Wall panel thickness in blocks, centerd on the true chunk boundary |
| borderOpacity | 0.85 | Border wall opacity |
| tintEnabled | true | Draw the flat ground tint over claimed area |
| tintOpacity | 0.30 | Tint fill opacity |
| tintHeightOffset | 1.0 | Blocks above sampled ground height the tint sits at; needs real clearance, at 0.1 the tint is invisible from the flat map |
| maxSurfaceScanDepth | 48 | Max blocks the ground-height scan walks down before giving up and reporting the surface, bounding worst-case cost for e.g. a deep uncapped shaft |
| fullRebuildEvery | 500 | Force a full uncached recompute every N rebuild passes, as pure safety-net insurance |
War appearance
| Key | Default | Effect |
|---|---|---|
| colorRgb | 0xFF3030 | War / frontline color |
| lineWidth | 3 | Frontline border-line width in pixels |
| fillOpacity | 0.45 | War overlay fill opacity |
| allianceColorRgb | 0x30FF60 | Alliance-line color |
| rivalryColorRgb | 0xFF9A30 | Rivalry-line color (deliberately never the war color) |
Village style
| Key | Default | Effect |
|---|---|---|
| fillOpacity | 0.22 | Village fill opacity, kept lower than nation tint so a village never reads "louder" than nation territory it sits inside/next to |
| lineOpacity | 0.70 | Village border-line opacity |
| lineWidth | 1 | Village border-line width in pixels |
Layer names
Names shown in the BlueMap web app's layer list:
| Key | Default |
|---|---|
| territory | Nations |
| war | Active Wars |
| diplomacy | Diplomacy |
| villages | Villages |
Behavior
| Key | Default | Effect |
|---|---|---|
| debounceMillis | 1500 | Quiet period before coalescing a burst of changes into one rebuild |
| nationsPerTick | 3 | Nations whose claim geometry is set up (regions enumerated) per tick |
| wallRegionsPerTick | 8 | Border-wall regions built per tick |
| tintCellsPerTick | 150 | Claimed chunks tint-sampled per tick |
| tintGroupsPerTick | 200 | Merged tint plateau shapes built per tick |
| villagesPerTick | 10 | Villages built per tick |
| dimensionMode | ALL | ALL / INCLUDE (only listed) / EXCLUDE (all but listed) |
| dimensionList | minecraft:the_nether,minecraft:the_end | Dimensions used by INCLUDE/EXCLUDE |
| mapWebRootUrl | "" | Public BlueMap URL used to build Discord deep links; blank disables them |
Optional Discord integration
With WN Discord installed, this addon (reflection-guarded, no hard dependency) registers a bluemap logical channel, map it to a real Discord channel with bluemap=<channelId> in WN Discord's own [channels].extra config, plus a %wn_maplink% placeholder that resolves to mapWebRootUrl, and posts a short message with a map link whenever a war starts or ends.
When WN Discord is absent, or its bridge core isn't running yet, every Discord call is a silent no-op and map rendering is completely unaffected.
Requirements
| Requirement | Value |
|---|---|
| Minecraft | 1.21.1 |
| Loader | NeoForge 21.1.225+ |
| Warring Nations | 3.4.0+ |
| FTB Chunks | Required |
| FTB Teams | Required |
| FTB Library | Required |
| BlueMap | 5.x for NeoForge 1.21.1 |
| WN Discord | Optional, for the war-start/war-end map-link posts above |
| Side | Server only. Do not install on the client. |
Install alongside Warring Nations and BlueMap on the server. Nothing needs to be installed on the client.
What it deliberately does not show
- No capital coordinates. Warring Nations withholds a capital's chunk position from its public API the same way it withholds /nation home from other nations, since BlueMap markers are global and visible to every viewer, including enemies, broadcasting the true location would undo that opsec entirely. The name crosses the API boundary; the location never does.
- No siege-specific styling. The war layer shows the contested frontline plus each war's scoreboard, not a per-chunk siege ring or objective marker, the public API doesn't expose one.
- No live per-chunk capture progress. Marker rebuilds are debounced and paced across ticks by design; a capture bar that finishes in under a minute would be stale on the map more often than it was right. Whole-war score is the right granularity for a map, and the game itself already surfaces live capture progress in-world (boss bars, HUD readouts).
- No cross-dimension diplomacy lines. A line across worlds has no meaningful position on a single map.
- No non-Warring-Nations claims. Ordinary FTB personal/party claims are excluded entirely.
- No private/per-player map views. Every viewer sees the same public political map.
Companion addons
- WN Siege: extends Warring Nations claim protection to Create, weapon, and explosive mods, breachable only during a declared war.
- WN Discord: full Discord bridge, and the integration point for this addon's map-link posts (see above).
Project description from CurseForge.
Pick your setup
WN Bluemap by Minecraft version and loader
Choose the version and loader you play, then open the matching release.
1.21.1
1 loader buildCheck the dependencies, then try the file in a copied instance before changing a world you care about.
Recent files
WN Bluemap versions and loaders
wn-bluemap-neoforge-1.4.0.jar
22 Aug 2026
wn-bluemap-neoforge-1.3.1.jar
20 Aug 2026
wn-bluemap-neoforge-1.2.2.jar
16 Aug 2026
wn-bluemap-neoforge-1.1.1.jar
22 Jul 2026
Looking for an older file? The official CurseForge project page is in Resources.