BlueMap-Minecraft / BlueMap

A Minecraft mapping tool that creates 3D models of your Minecraft worlds and displays them in a web viewer.
https://bluecolo.red/bluemap
MIT License
1.76k stars 114 forks source link

Render Errors with Older World #521

Closed seifer44 closed 4 months ago

seifer44 commented 4 months ago

What i did / Steps to reproduce

This is my first time attempting to run BlueMap with my Minecraft world originating from 2012. This world has seen a lot of version updates over the years, running constantly. I suspect the heightmaps errors below are related to old chunk data, as the errors come up immediately after rendering has started in the oldest parts of this Minecraft world.

[03:22:17 INFO] Starting webserver ...
[03:22:17 INFO] Initializing Storage: 'mariadb' (Type: SQL)
[03:22:17 INFO] Initializing database-schema...
[03:22:17 INFO] WebServer bound to all network interfaces on port 8100
[03:22:17 INFO] WebServer started.
[03:22:18 INFO] Downloading https://piston-data.mojang.com/v1/objects/b178a327a96f2cf1c9f98a45e5588d654a3e4369/client.jar to data/minecraft-client-1.20.3.jar ...
[03:22:20 INFO] Loading resources...
[03:22:21 INFO] Loading textures...
[03:22:22 INFO] Baking resources...
[03:22:22 INFO] Resources loaded.
[03:22:22 INFO] Loading map 'overworld'...
[03:22:22 INFO] Start updating 1 maps (7686 regions, ~7870464 chunks)...

...

[03:23:50 ERROR] RenderManager(0): WorkerThread(6): Exception while doing some work!
java.lang.NullPointerException: Cannot read field "worldSurface" because "level.heightmaps" is null
    at de.bluecolored.bluemap.core.world.mca.chunk.Chunk_1_13.<init>(Chunk_1_13.java:80)
    at de.bluecolored.bluemap.core.world.mca.chunk.Chunk_1_15.<init>(Chunk_1_15.java:33)
    at de.bluecolored.bluemap.core.world.mca.chunk.ChunkLoader$ChunkVersionLoader.load(ChunkLoader.java:100)
    at de.bluecolored.bluemap.core.world.mca.chunk.ChunkLoader.load(ChunkLoader.java:67)
    at de.bluecolored.bluemap.core.world.mca.region.MCARegion.loadChunk(MCARegion.java:171)
    at de.bluecolored.bluemap.core.world.mca.region.MCARegion.iterateAllChunks(MCARegion.java:151)
    at de.bluecolored.bluemap.core.world.mca.MCAWorld.preloadRegionChunks(MCAWorld.java:192)
    at de.bluecolored.bluemap.common.rendermanager.WorldRegionRenderTask.init(WorldRegionRenderTask.java:118)
    at de.bluecolored.bluemap.common.rendermanager.WorldRegionRenderTask.doWork(WorldRegionRenderTask.java:129)
    at de.bluecolored.bluemap.common.rendermanager.CombinedRenderTask.doWork(CombinedRenderTask.java:59)
    at de.bluecolored.bluemap.common.rendermanager.RenderManager.doWork(RenderManager.java:305)
    at de.bluecolored.bluemap.common.rendermanager.RenderManager$WorkerThread.run(RenderManager.java:330)
[03:23:52 INFO] Update map 'overworld': 0.236% (ETA: 11:09:48)
...

From here, the logs become more noisy, and it appears that rendering stops. CPU load seems to correlate to this. The web interface appears to remain responsive.

Expected result

More chunk rendering, less log errors.

Actual result

Application encounters multiple errors. Chunk rendering doesn't appear to run for long.

Note: For some reason, the container downloads minecraft-client-1.20.3.jar, when my server is running 1.20.4.

Context

BlueMap Version: 3.20; docker tag 0b73d93fc7c17f6b0e5acbcb5e5c90c1f577c201c7bce3d48fdc3f2045e3f881 Minecraft: Vanilla Minecraft v1.20.4 OS: Rocky Linux 8

I'm working on a Kubernetes PoC. Here's the deployment file.

---

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: bluemap
  name: bluemap
  namespace: minecraft
spec:
  replicas: 1
  selector:
    matchLabels:
      app: bluemap
  template:
    metadata:
      labels:
        app: bluemap
    spec:
      containers:
        - name: bluemap
          image: ghcr.io/bluemap-minecraft/bluemap:latest
          #imagePullPolicy: Always
          command: ["java", "-jar", "./cli.jar", "-r", "-w"]
          ports:
            - containerPort: 8100
              protocol: TCP
          volumeMounts:
            - name: bluemap-config
              mountPath: /app/config
            - name: minecraft-world-ph
              mountPath: /app/world
              readOnly: true
      volumes:
        - name: minecraft-world-ph
          nfs:
            path: /opt/minecraft/ph/world
            readOnly: true
            server: example.local
        - name: bluemap-config
          persistentVolumeClaim:
            claimName: bluemap

...

There's no change in behavior whether SELinux is in enforcing or in permissive mode.

Bluemap Configuration

Comments removed. core.conf

accept-download: true
data: "data"
render-thread-count: 0
scan-for-mod-resources: false
metrics: true
log: {
  file: "data/logs/debug_%1$tF_%1$tT.log"
  append: false
}

storages/mariadb.conf

storage-type: SQL
connection-url: "jdbc:mariadb://mariadb-bluemap.minecraft.svc:3306/bluemap_ph"
connection-properties: {
    user: "user",
    password: "lolno"
}
max-connections: -1
driver-jar: "/app/config/mariadb-java-client.jar"
driver-class: "org.mariadb.jdbc.Driver"
compression: GZIP

Logs

bluemap.log

TBlueF commented 4 months ago

Hi, first of all thanks a lot for taking the time to make such a detailed error-report!

The heightmap NPE has already been fixed with 5bb7a77fb97414dcb4da983fc80135be3ae73e43 and the Self-Supression error has been fixed with d1aba560dadf46467e346ef2b7f9834c4f78bd56. There is just not yet a new snapshot with these fixes ^^

You can download the latest build from here: https://github.com/BlueMap-Minecraft/BlueMap/actions/runs/8139906875 if you don't want to wait for a new Snapshot with the fixes.

Closing this as already fixed :)

TBlueF commented 4 months ago

Ah also a note, as i see you are using the "latest" docker container: The latest tag is right now always pointing at the latest release, which also includes snapshots. So you might want to use a fixed stable tag for now. I am already checking if and how we can change the latest tag to only point at the latest "recomended" release.

seifer44 commented 4 months ago

FYI, the newest Snapshot 4.1 is working well. Thanks a bunch!