ConcurrentModificationException with BlockData inside ChunkGenerators

XMLWordPrintable

    • Type: Bug
    • Resolution: Fixed
    • Priority: Minor
    • None
    • Affects Version/s: None
    • CraftBukkit version 4502-Spigot-270012a-e74f0d2 (MC: 1.21.5) (Implementing API version 1.21.5-R0.1-SNAPSHOT)
    • Yes

      CraftBlockData uses a HashMap called ENUM_VALUES. However, when using BlockData to set blocks within a ChunkGenerator (which is multi-threaded), a ConcurrentModificationException can occur due to HashMap not being thread safe.

      java.util.ConcurrentModificationException
          at java.base/java.util.HashMap.computeIfAbsent(HashMap.java:1229)
          at org.bukkit.craftbukkit.v1_21_R4.block.data.CraftBlockData.toNMS(CraftBlockData.java:190)
          at org.bukkit.craftbukkit.v1_21_R4.block.data.CraftBlockData.set(CraftBlockData.java:117)
          at org.bukkit.craftbukkit.v1_21_R4.block.impl.CraftStepAbstract.setType(CraftStepAbstract.java:27)
          at io.github.mrcomputer1.chunkgen.ChunkGen.generateNoise(ChunkGen.java:23)
          at org.bukkit.craftbukkit.v1_21_R4.generator.CustomChunkGenerator.lambda$fillFromNoise$0(CustomChunkGenerator.java:258)
          at org.bukkit.craftbukkit.v1_21_R4.generator.CustomChunkGenerator.lambda$fillFromNoise$1(CustomChunkGenerator.java:263)
          at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768)
          at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.exec(CompletableFuture.java:1760)
          at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:387)
          at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1312)
          at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1843)
          at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1808)
          at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:188) 

      I have included a plugin that contains a ChunkGenerator that seems to pretty often trigger this bug.

       

      PaperMC seems to have fixed this issue by changing the HashMap to be a ConcurrentHashMap (PaperMC PR).

        1. crash-2025-06-08_23.51.02-server.txt
          43 kB
          Mrcomputer1

            Assignee:
            md_5
            Reporter:
            Mrcomputer1
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved: