[SPIGOT-6592] When creating chunk data, setting a block to Material.CHEST results in the server crashing. Created: 20/Jun/21  Updated: 20/Jun/21  Resolved: 20/Jun/21

Status: Resolved
Project: Spigot
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Bug Priority: Minor
Reporter: John Assignee: Unassigned
Resolution: Fixed Votes: 0
Labels: WorldGeneration, chest, chunkdata, enderchest, inventory-blocks
Environment:

The server is running on a Windows 10 computer with Java 16.


Version: This server is running CraftBukkit version 3158-Spigot-f773da8-470050a (MC: 1.17) (Implementing API version 1.17-R0.1-SNAPSHOT)
Guidelines Read: Yes

 Description   

When one is taking advantage of the Spigot/Bukkit API to use a custom world generator, you need to create a ChunkGenerator with an @override method generateChunkData that returns an instance of ChunkData however you want it to be.

If one tries to set a block inside the ChunkData instance to that of a block with an inventory associated with it such as a chest, ender chest, shulker box etc, by something along the lines of chunkData.setBlock(x, y, z, Material.CHEST) the following error is produced:

 

java.lang.ClassCastException: class net.minecraft.world.level.block.state.IBlockData cannot be cast to class net.minecraft.world.level.block.ITileEntity (net.minecraft.world.level.block.state.IBlockData and net.minecraft.world.level.block.ITileEntity are in unnamed module of loader 'app')
	at org.bukkit.craftbukkit.v1_17_R1.generator.CustomChunkGenerator.buildBase(CustomChunkGenerator.java:157)
	at net.minecraft.world.level.chunk.ChunkStatus.lambda$6(ChunkStatus.java:77)
	at net.minecraft.world.level.chunk.ChunkStatus$d.doWork(ChunkStatus.java:265)
	at net.minecraft.world.level.chunk.ChunkStatus.a(ChunkStatus.java:212)
	at net.minecraft.server.level.PlayerChunkMap.lambda$25(PlayerChunkMap.java:611)
	at com.mojang.datafixers.util.Either$Left.map(Either.java:38)
	at net.minecraft.server.level.PlayerChunkMap.lambda$24(PlayerChunkMap.java:609)
	at java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1146)
	at java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:478)
	at net.minecraft.server.level.ChunkTaskQueueSorter.b(SourceFile:58)
	at net.minecraft.util.thread.ThreadedMailbox.f(SourceFile:91)
	at net.minecraft.util.thread.ThreadedMailbox.a(SourceFile:131)
	at net.minecraft.util.thread.ThreadedMailbox.run(SourceFile:99)
	at java.base/java.util.concurrent.ForkJoinTask$RunnableExecuteAction.exec(ForkJoinTask.java:1434)
	at java.base/java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:295)
	at java.base/java.util.concurrent.ForkJoinPool$WorkQueue.topLevelExec(ForkJoinPool.java:1016)
	at java.base/java.util.concurrent.ForkJoinPool.scan(ForkJoinPool.java:1665)
	at java.base/java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1598)
	at java.base/java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:183)
A detailed walkthrough of the error, its code path and all known details is as follows:
----------------------------------------------------------------------------------------- Head --
Thread: Server thread
Stacktrace:
	at org.bukkit.craftbukkit.v1_17_R1.generator.CustomChunkGenerator.buildBase(CustomChunkGenerator.java:157)
	at net.minecraft.world.level.chunk.ChunkStatus.lambda$6(ChunkStatus.java:77)
	at net.minecraft.world.level.chunk.ChunkStatus$d.doWork(ChunkStatus.java:265)
	at net.minecraft.world.level.chunk.ChunkStatus.a(ChunkStatus.java:212)-- Chunk to be generated --
Details:
	Location: 2,2
	Position hash: 8589934594
	Generator: org.bukkit.craftbukkit.v1_17_R1.generator.CustomChunkGenerator@4587463e
Stacktrace:
	at net.minecraft.server.level.PlayerChunkMap.lambda$25(PlayerChunkMap.java:611)
	at com.mojang.datafixers.util.Either$Left.map(Either.java:38)
	at net.minecraft.server.level.PlayerChunkMap.lambda$24(PlayerChunkMap.java:609)
	at java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1146)
	at java.base/java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:478)
	at net.minecraft.server.level.ChunkTaskQueueSorter.b(SourceFile:58)
	at net.minecraft.util.thread.ThreadedMailbox.f(SourceFile:91)
	at net.minecraft.util.thread.ThreadedMailbox.a(SourceFile:131)
	at net.minecraft.util.thread.ThreadedMailbox.run(SourceFile:99)

This error does not occur on any other Minecraft versions that I have tested, nor does it occur for any other materials without inventories that I have tested. It seems to be an inventory-block related problem.

Apologies if this isn't a bug, I did search through all the changes between 1.16.5 and 1.17 that could explain this but I could not find anything.


Generated at Tue Apr 15 11:10:37 UTC 2025 using Jira 10.3.3#10030003-sha1:d220e3fefc8dfc6d47f522d3b9a20c1455e12b7b.