Skip to content

Player.setStatistic does not verify that material is an item causing crash later when (auto) saving #12606

@DungeonDev

Description

@DungeonDev

Stack trace

[19:11:01 ERROR]: Encountered an unexpected exception
java.lang.IllegalStateException: Unregistered holder in ResourceKey[minecraft:root / minecraft:item]: Direct{null}
        at com.mojang.serialization.DataResult$Error.getOrThrow(DataResult.java:287) ~[datafixerupper-8.0.16.jar:?]
        at com.mojang.serialization.DataResult.getOrThrow(DataResult.java:81) ~[datafixerupper-8.0.16.jar:?]
        at net.minecraft.stats.ServerStatsCounter.toJson(ServerStatsCounter.java:135) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at net.minecraft.stats.ServerStatsCounter.save(ServerStatsCounter.java:89) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at net.minecraft.server.players.PlayerList.save(PlayerList.java:493) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at net.minecraft.server.players.PlayerList.remove(PlayerList.java:540) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at net.minecraft.server.players.PlayerList.remove(PlayerList.java:504) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at net.minecraft.server.network.ServerGamePacketListenerImpl.removePlayerFromWorld(ServerGamePacketListenerImpl.java:2159) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at net.minecraft.server.network.ServerGamePacketListenerImpl.onDisconnect(ServerGamePacketListenerImpl.java:2138) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at net.minecraft.server.network.ServerGamePacketListenerImpl.onDisconnect(ServerGamePacketListenerImpl.java:2124) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at net.minecraft.network.Connection.handleDisconnection(Connection.java:866) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at net.minecraft.server.network.ServerConnectionListener.tick(ServerConnectionListener.java:270) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at net.minecraft.server.MinecraftServer.tickConnection(MinecraftServer.java:1760) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at net.minecraft.server.dedicated.DedicatedServer.tickConnection(DedicatedServer.java:385) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at net.minecraft.server.MinecraftServer.tickChildren(MinecraftServer.java:1736) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at net.minecraft.server.MinecraftServer.tickServer(MinecraftServer.java:1527) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1249) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at net.minecraft.server.MinecraftServer.lambda$spin$2(MinecraftServer.java:308) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at java.base/java.lang.Thread.run(Thread.java:1583) ~[?:?]
[19:11:01 ERROR]: This crash report has been saved to: C:\Users\------\Desktop\mc\paper\crash-reports\crash-2025-05-30_19.11.01-server.txt
[19:11:01 INFO]: Stopping server
[19:11:01 INFO]: [SimpleTest] Disabling SimpleTest v1.0
[19:11:01 INFO]: Saving players
[19:11:01 ERROR]: Exception stopping the server
java.lang.IllegalStateException: Unregistered holder in ResourceKey[minecraft:root / minecraft:item]: Direct{null}
        at com.mojang.serialization.DataResult$Error.getOrThrow(DataResult.java:287) ~[datafixerupper-8.0.16.jar:?]
        at com.mojang.serialization.DataResult.getOrThrow(DataResult.java:81) ~[datafixerupper-8.0.16.jar:?]
        at net.minecraft.stats.ServerStatsCounter.toJson(ServerStatsCounter.java:135) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at net.minecraft.stats.ServerStatsCounter.save(ServerStatsCounter.java:89) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at net.minecraft.server.players.PlayerList.save(PlayerList.java:493) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at net.minecraft.server.players.PlayerList.lambda$saveAll$6(PlayerList.java:1094) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at io.papermc.paper.util.MCUtil.ensureMain(MCUtil.java:144) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at net.minecraft.server.players.PlayerList.saveAll(PlayerList.java:1088) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at net.minecraft.server.players.PlayerList.saveAll(PlayerList.java:1084) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at net.minecraft.server.MinecraftServer.stopServer(MinecraftServer.java:1008) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at net.minecraft.server.dedicated.DedicatedServer.stopServer(DedicatedServer.java:715) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1292) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at net.minecraft.server.MinecraftServer.lambda$spin$2(MinecraftServer.java:308) ~[paper-1.21.5.jar:1.21.5-103-2ba1675]
        at java.base/java.lang.Thread.run(Thread.java:1583) ~[?:?]

Plugin and Datapack List

Only a simple test plugin

public class SimpleTest extends JavaPlugin implements Listener
{
    @Override
    public void onEnable() {
	Bukkit.getPluginManager().registerEvents(this, this);
    }

    @EventHandler
    public void onPlayerJoinEvent(PlayerJoinEvent event) {
	event.getPlayer().setStatistic(Statistic.USE_ITEM, Material.MAGENTA_CANDLE_CAKE, 1);
    }
}

Actions to reproduce (if known)

Using a block materia for statistics requiring items (and probably vice-versa) in setStatistic corrupts the ServerStatsCounter causing it to fail to save, crashing the server when attempted, including crashing the server shutdown hanging the server. Just disconnect or wait for an auto-save after setting an invalid statistic and the server will hang forever.

Paper version

This server is running Paper version 1.21.5-103-main@2ba1675 (2025-05-29T12:14:46Z) (Implementing API version 1.21.5-R0.1-SNAPSHOT)

Other

To fix the crashes for my network I just added a null check in CraftStatistic#getMaterialStatistic after the bukkitToMinecraft conversion, but there is probably a better way to do it.

Metadata

Metadata

Assignees

No one assigned

    Labels

    status: acceptedDisputed bug is accepted as valid or Feature accepted as desired to be added.version: 1.21.5Game version 1.21.5

    Type

    No fields configured for Bug.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions