diff --git a/CLAUDE.md b/CLAUDE.md index 620e647..c8fe08f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -315,6 +315,16 @@ git add -A && git commit -m "Update docs" && git push ## Recent Changes +### 2026-01-11 +- **BlueMap web map** for Minecraft Hutworld server + - URL: https://map.htsn.io (password protected: hutworld / Suwanna123) + - BlueMap 5.15 plugin installed + - Port 8100 exposed in Crafty docker-compose + - Traefik routing with basicAuth middleware +- Fixed corrupted ViaVersion/ViaBackwards plugins +- Documented 1.21+ spawner give command syntax +- Fixed Docker file permission issues in Crafty container + ### 2026-01-05 - Created [TAILSCALE.md](TAILSCALE.md) - comprehensive Tailscale VPN documentation - **Fixed Tailscale subnet routing issues:** diff --git a/MINECRAFT.md b/MINECRAFT.md index 8fe9eb4..3b592b1 100644 --- a/MINECRAFT.md +++ b/MINECRAFT.md @@ -11,6 +11,16 @@ Minecraft servers running on docker-host2 via Crafty Controller 4. | **Hutworld** | hutworld.htsn.io | 25565 | Paper 1.21.11 | Running | | **Backrooms** | backrooms.htsn.io | 25566 | Paper 1.21.4 | Running | +### Web Map + +| Setting | Value | +|---------|-------| +| **URL** | https://map.htsn.io | +| **Username** | hutworld | +| **Password** | Suwanna123 | +| **Plugin** | BlueMap 5.15 | +| **Port** | 8100 (exposed via Docker) | + --- ## Quick Reference @@ -129,8 +139,9 @@ To import the hutworld server in Crafty: | PluginPortal | 2.2.2 | Plugin management | | Vault | 1.7.3 | Economy/permissions API | | ViaVersion | Latest | Multi-version support | -| ViaBackwards | Latest | Older client support | +| ViaBackwards | 5.2.1 | Older client support | | randomtp | Latest | Random teleportation | +| BlueMap | 5.15 | 3D web map with player tracking | **Removed plugins** (cleaned up 2026-01-03): - GriefPrevention, Multiverse-Core, Multiverse-Portals, ProtocolLib, WorldEdit, WorldGuard (disabled/orphaned) @@ -151,10 +162,11 @@ services: - TZ=America/New_York ports: - "8443:8443" # Web GUI (HTTPS) - - "8123:8123" # Dynmap (if used) + - "8123:8123" # Crafty HTTP - "25565:25565" # Minecraft Java - "25566:25566" # Additional server - "19132:19132/udp" # Minecraft Bedrock (Geyser) + - "8100:8100" # BlueMap web server volumes: - ./data/backups:/crafty/backups - ./data/logs:/crafty/logs @@ -328,6 +340,54 @@ ssh docker-host2 'cd ~/crafty/data/servers && \ --- +## Admin Commands + +### Give Mob Spawner (1.21+ Syntax) + +In Minecraft 1.21+, the NBT syntax changed. Use `minecraft:give` to bypass Essentials: + +``` +minecraft:give spawner[block_entity_data={id:"minecraft:mob_spawner",SpawnData:{entity:{id:"minecraft:"}}}] +``` + +**Examples:** +```bash +# Magma cube spawner +minecraft:give suwann spawner[block_entity_data={id:"minecraft:mob_spawner",SpawnData:{entity:{id:"minecraft:magma_cube"}}}] + +# Zombie spawner +minecraft:give suwann spawner[block_entity_data={id:"minecraft:mob_spawner",SpawnData:{entity:{id:"minecraft:zombie"}}}] + +# Skeleton spawner +minecraft:give suwann spawner[block_entity_data={id:"minecraft:mob_spawner",SpawnData:{entity:{id:"minecraft:skeleton"}}}] + +# Blaze spawner +minecraft:give suwann spawner[block_entity_data={id:"minecraft:mob_spawner",SpawnData:{entity:{id:"minecraft:blaze"}}}] +``` + +**Note:** Must use `minecraft:give` prefix to use vanilla command instead of Essentials `/give`. + +### BlueMap Commands + +```bash +# Start full world render +/bluemap render + +# Pause rendering +/bluemap pause + +# Resume rendering +/bluemap resume + +# Check render status +/bluemap status + +# Reload BlueMap config +/bluemap reload +``` + +--- + ## Common Tasks ### Start/Stop Server @@ -414,6 +474,38 @@ ssh docker-host2 'netstat -tlnp | grep 25565' 2. Check Geyser config: `~/crafty/data/servers/hutworld/plugins/Geyser-Spigot/config.yml` 3. Ensure UDP 19132 is forwarded and not blocked +### Corrupted plugin JARs (ZipException) + +If you see `java.util.zip.ZipException: zip END header not found`: + +1. **Check all plugins for corruption:** +```bash +ssh docker-host2 'cd ~/crafty/data/servers/19f604a9-f037-442d-9283-0761c73cfd60/plugins && \ + for jar in *.jar; do unzip -t "$jar" > /dev/null 2>&1 && echo "OK: $jar" || echo "CORRUPT: $jar"; done' +``` + +2. **Re-download corrupted plugins from Hangar/Modrinth/SpigotMC** + +3. **Restart server** + +### Session lock errors + +If server fails with `session.lock: already locked`: + +```bash +# Kill stale Java processes and remove locks +ssh docker-host2 'docker exec crafty bash -c "pkill -f paper.jar; rm -f /crafty/servers/*/hutworld*/session.lock"' +``` + +### Permission denied errors in Docker + +If world files show `AccessDeniedException`: + +```bash +# Fix permissions (crafty user is UID 1000) +ssh docker-host2 'docker exec crafty bash -c "chown -R 1000:0 /crafty/servers/19f604a9-f037-442d-9283-0761c73cfd60/ && chmod -R u+rwX /crafty/servers/19f604a9-f037-442d-9283-0761c73cfd60/"' +``` + ### LuckPerms missing users/permissions If LuckPerms shows a fresh database (missing users like Suwan): @@ -506,7 +598,21 @@ tar -xzf /tmp/hutworld-*.tar.gz -C /tmp --strip-components=2 \ --- -**Last Updated:** 2026-01-05 +**Last Updated:** 2026-01-11 + +--- + +## Migration History (Hutworld) + +### 2026-01-11: BlueMap Web Map Added + +- Installed BlueMap 5.15 plugin (supports MC 1.21.11) +- Exposed port 8100 in docker-compose.yml for BlueMap web server +- Configured Traefik routing: map.htsn.io → 10.10.10.207:8100 +- Added basic auth password protection via Traefik middleware +- Fixed corrupted ViaVersion/ViaBackwards plugins (re-downloaded from Hangar) +- Fixed Docker file permission issues (chown to UID 1000) +- Documented 1.21+ spawner give command syntax --- diff --git a/TRAEFIK.md b/TRAEFIK.md index 7d3cdf5..e617544 100644 --- a/TRAEFIK.md +++ b/TRAEFIK.md @@ -69,6 +69,7 @@ ssh pve 'pct exec 202 -- tail -f /var/log/traefik/traefik.log' | AI Trade | aitrade.htsn.io | (trading server) | | Pulse | pulse.htsn.io | 10.10.10.206:7655 (monitoring) | | Happy | happy.htsn.io | 10.10.10.206:3002 (Happy Coder relay) | +| BlueMap | map.htsn.io | 10.10.10.207:8100 (Minecraft web map, password protected) | ---