# BlueMap: the 3D map SCOPENET uses [BlueMap](https://bluemap.bluecolored.de/) for the 3D world map. BlueMap runs on each Minecraft server as a plugin or mod and serves the map on its own web address. SCOPENET adds to it, and the launcher shows it inside the app exactly as a browser would. ## What you get | On the map | Where it comes from | |---|---| | **Guild claims** as coloured regions with the guild's icon and name (one colour per guild, outlines follow the real shape, holes included) | the claim index | | **Spawn, warps and guild homes** as pins | the server | | **Homes** as pins (off by default, see privacy) | the server | | **Markets and shops** as pins that list what is for sale | shop points + the panel's market | | **Players** with BlueMap's own live markers; **click one** for a side panel | BlueMap + SCOPENET | The player panel shows level, guild, rank, title, playtime and server level. Inside the launcher it also offers **Send teleport request**, **Send message** and **Invite to my guild** (you need to be signed in with a SCOPENET account, and the other player must be online on that server; inviting needs a leader or officer role). In a plain browser it shows the info and points you to the launcher for the actions. ## Set it up 1. **Install BlueMap** on the server: the Paper plugin, or the Fabric/Forge mod, from . Start the server once. BlueMap asks you to accept a download of the Minecraft client files in its config (`core.conf`: `accept-download: true`), then renders the world. 2. **Make its web address reachable.** BlueMap serves on port 8100 by default. Put it behind HTTPS with a reverse proxy (recommended; see below) or open the port. 3. **Install the SCOPENET plugin or Fabric mod** (Paper, or Fabric 1.20.1). It finds BlueMap by itself and adds its markers and script. Nothing else to configure. 4. **Tell the panel the address:** *Servers → your server → Settings → Map address (BlueMap)*, for example `https://map.example.com`. Players then see a **Live Map** button for that server in the launcher. `bluemap.enabled` (Paper `config.yml`, Fabric `scopenet.properties`) turns the addon off. `bluemap.show-homes` / `bluemap.show_homes` shows every player's homes. ## Shop points (physical shops) A shop point is a block that opens the market or the server shop when right-clicked. It works with the normal windows (chest window on Paper; the client mod's shop and market windows where installed) and appears as a pin on the map. ``` /market point add [market|shop] (look at a block; needs scopenet.command.market.point, default op) /market point remove /market point list ``` `market` opens the player market and lists recent listings on the map pin; `shop` opens the server shop. ## Inside the launcher The launcher loads your map address in a frame, so everything BlueMap does in a browser works there too. SCOPENET's script on the map page passes player clicks to the launcher, which shows the side panel. A few things make it work or not: * **Use HTTPS.** Loading an `http://` map inside an HTTPS page can be blocked as mixed content on some systems. * **Don't forbid framing.** If your reverse proxy sends `X-Frame-Options: DENY` or a `Content-Security-Policy: frame-ancestors` that excludes the launcher, the map won't load in the app. Remove that header for the map address. The launcher's **Browser** button opens the same map in your browser either way. * The map address is checked by the panel (web address only, no credentials). ## Privacy * The map is public to anyone who knows its address, like any BlueMap. **Homes are off by default** for that reason. Claims and guild names are visible by design. * `players.json`, which drives the browser panel, holds only public facts (name, level, title, guild, rank, playtime). Never balances. * Actions from the map go through the panel, are rate-limited, and need a signed-in account. A message or teleport request reaches only players who are online on that server. ## Reverse proxy example (nginx) ```nginx server { server_name map.example.com; listen 443 ssl; location / { proxy_pass http://127.0.0.1:8100; proxy_set_header Host $host; proxy_http_version 1.1; proxy_set_header Connection ""; # BlueMap uses server-sent events for live updates proxy_buffering off; } } ``` ## How it works (for developers) * `net.scopenet.core.map` builds the map data without any map software: `ChunkRegions` turns chunks into outlines (tested with an area-conservation check), `MapModel` builds pins and regions and escapes every name, `MapService` gathers it from any thread. * `integrations/bluemap` (`MapAddon`) is the only code that touches BlueMap's API. It copies `scopenet.js`, `scopenet.css` and the icons into BlueMap's web root, registers them, and refreshes the marker sets every 10 seconds. * Map actions are queued in the panel (`server_actions`); the server collects them every 3 seconds (`ActionPoller`) and carries them out with its normal rules. Guild invitations are real invitations (`guild_invites`) that the other player accepts in the launcher or with `/guild accept`. ## Not verified yet The BlueMap addon, the Paper and Fabric wiring, and the launcher's map view have not been compiled or run against a real BlueMap and Minecraft: the build environment cannot download them. The geometry, map model, shop points, action poller and guild-invite commands are unit-tested, and so are the panel endpoints. Build it, and report what BlueMap says in its log and what the map shows.