PaperMC / PaperMC/Paper

Data Converter Issue when updating from 1.21.3 to 1.21.10

Open
#13,312 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

status: needs triage version: 1.21.10
Dominant language
Java
Stars
12.7k
Forks
3.5k
Avg merge
3d 13h
Merged PRs (30d)
11

Description

Expected behavior

When updating, the server should successfully convert items stored in player data.

Observed/Actual behavior

When loading player files with certain items (an older book in this case), the server throws an exception.

Steps/models to reproduce
  • Have a 1.21.3 Server with legacy items (the server has been around since ~2012).
  • update to 1.21.10
  • call OfflinePlayer.getName, which triggers a player data lookup
Plugin and Datapack List
[14:37:46 INFO]: ℹ Server Plugins (116):
[14:37:46 INFO]: Bukkit Plugins:
[14:37:46 INFO]:  - AndaMisc, Announcer, AnvilSign, AreaShop, ArmorStandEditor, ArmorstandMessage, Asylaneous, AsylumAPI, AsylumFarm, AsylumLager
[14:37:46 INFO]:  AsylumQuests, AsylumShops, AsylumTradingCardGame, AsylumTreasures, AsylumWeather, AutoRegions, *BetterAlias, BetterSnow, BookExploitFix, BuildContest
[14:37:46 INFO]:  BungeeTabListPlus, BuycraftX, ChairPlugin, CleanroomGenerator, ClickSort, ColorMatrix, CraftBook, CraftingStore, DebugPlugin, DevTools
[14:37:46 INFO]:  Doener, DrawIt, dynmap, DynmapMarkers, EasterEgg, EcoFlow, EcoFlow-Integration, *EliteLogs, ElytraCourseEaster2025, EmergencyPlan
[14:37:46 INFO]:  EndlessDispense, EntityLimits, EntitySpawnCounter, Essentials, EssentialsChat, EssentialsSpawn, FairDragonEgg, FancyArmorStands, FancyItems, Feedback
[14:37:46 INFO]:  FrameShow, HeadsAndSkulls, *HideStream, IntelliProtect, InvisibleItemFrames, JumpPlates, Kotlin, LML, LogBlock, *Lottery
[14:37:46 INFO]:  LuckPerms, mapdisplay, MapFinalizer, Matrix, mcMMO, MobArena, ModAddon, ModularFix, Multiverse-Core, Multiverse-Inventories
[14:37:46 INFO]:  Multiverse-NetherPortals, MyLittlePony, NoEggPort, Notify, PhantomControl, PlayerSigns, PlotMe, PlotMe-DefaultGenerator, PlotMeAddon, PluginInfo
[14:37:46 INFO]:  PluginManager, PotionControl, PotionEffectRemover, ProfileAPI, ProtocolLib, *RedstoneClockDetector, Repopulator, Ruhm, ServerShield, Shopkeepers
[14:37:46 INFO]:  SickAutoFarm, SickChatControl, SickLag, SickShit, SickVote, TabProtection, TeleportButtons, TransAsylum, *Treeversity, TsBot
[14:37:46 INFO]:  Tutorial, uSkyBlock, *VanishNoPacket, Vault, ViaVersion, VillagerDefense, Votifier, VoxelSniper, Wands, WaterTempleFarm
[14:37:46 INFO]:  WebPlugin, WgAddon, WorldBorder, WorldEdit, WorldEditSUI, WorldGuard
Paper version
[14:38:14 INFO]: Checking version, please wait...
[14:38:14 INFO]: This server is running Paper version 1.21.10-113-main@9fc21bc (2025-11-14T16:11:13Z) (Implementing API version 1.21.10-R0.1-SNAPSHOT)
You are running the latest version
Previous version: 1.21.3-81-da71382 (MC: 1.21.3)
Other
[14:28:08 ERROR]: [ca.spottedleaf.dataconverter.minecraft.versions.V4290] Failed to convert json to nbt: §0der mit seiner Macht vom Taj Besitz §r
§0ergriff. §r
§0An dieser Stelle, junge Padawane und §r
§0Padawaninnen tretet§r §4ihr§r §0auf den Plan.§r
com.google.gson.JsonSyntaxException: com.google.gson.stream.MalformedJsonException: Use JsonReader.setStrictness(Strictness.LENIENT) to accept malformed JSON at line 1 column 8 path $
See https://github.com/google/gson/blob/main/Troubleshooting.md#malformed-json
        at com.google.gson.JsonParser.parseReader(JsonParser.java:116) ~[gson-2.11.0.jar:?]
        at com.google.gson.JsonParser.parseString(JsonParser.java:92) ~[gson-2.11.0.jar:?]
        at ca.spottedleaf.dataconverter.minecraft.versions.V4290$1.convert(V4290.java:235) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at ca.spottedleaf.dataconverter.minecraft.datatypes.DynamicDataType.convert(DynamicDataType.java:82) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at ca.spottedleaf.dataconverter.minecraft.walkers.generic.WalkerUtils.convert(WalkerUtils.java:89) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at ca.spottedleaf.dataconverter.minecraft.versions.V4059$1.walk(V4059.java:94) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at ca.spottedleaf.dataconverter.minecraft.versions.V4059$1.walk(V4059.java:20) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at ca.spottedleaf.dataconverter.minecraft.datatypes.MCDataType.convert(MCDataType.java:115) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at ca.spottedleaf.dataconverter.minecraft.walkers.generic.WalkerUtils.convert(WalkerUtils.java:21) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at ca.spottedleaf.dataconverter.minecraft.versions.V3818.lambda$register$2(V3818.java:320) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at ca.spottedleaf.dataconverter.minecraft.datatypes.IDDataType.convert(IDDataType.java:137) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at ca.spottedleaf.dataconverter.minecraft.walkers.generic.WalkerUtils.convertList(WalkerUtils.java:41) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at ca.spottedleaf.dataconverter.minecraft.versions.V1458.lambda$register$1(V1458.java:111) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at ca.spottedleaf.dataconverter.minecraft.datatypes.MCDataType.convert(MCDataType.java:115) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at ca.spottedleaf.dataconverter.minecraft.datatypes.MCDataType.convert(MCDataType.java:13) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at ca.spottedleaf.dataconverter.minecraft.MCDataConverter.convertWithSubVersion(MCDataConverter.java:63) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at ca.spottedleaf.dataconverter.minecraft.MCDataConverter.convert(MCDataConverter.java:44) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at ca.spottedleaf.dataconverter.minecraft.MCDataConverter.convertTag(MCDataConverter.java:30) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at net.minecraft.world.level.storage.PlayerDataStorage.lambda$load$1(PlayerDataStorage.java:103) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at java.base/java.util.Optional.map(Optional.java:260) ~[?:?]
        at net.minecraft.world.level.storage.PlayerDataStorage.load(PlayerDataStorage.java:101) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at org.bukkit.craftbukkit.CraftOfflinePlayer.getData(CraftOfflinePlayer.java:200) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at org.bukkit.craftbukkit.CraftOfflinePlayer.getBukkitData(CraftOfflinePlayer.java:204) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at org.bukkit.craftbukkit.CraftOfflinePlayer.getName(CraftOfflinePlayer.java:70) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at SickVote.jar/de.sickred.bukkit.sickvote.vote.PlayerStatus.updateNameInFile(PlayerStatus.java:60) ~[SickVote.jar:?]
        at SickVote.jar/de.sickred.bukkit.sickvote.vote.PlayerStatus.<init>(PlayerStatus.java:50) ~[SickVote.jar:?]
        at SickVote.jar/de.sickred.bukkit.sickvote.vote.VoteHandler.loadPlayerStatus(VoteHandler.java:72) ~[SickVote.jar:?]
        at SickVote.jar/de.sickred.bukkit.sickvote.vote.VoteHandler.loadAllPlayersStatus(VoteHandler.java:40) ~[SickVote.jar:?]
        at SickVote.jar/de.sickred.bukkit.sickvote.vote.VoteHandler.<init>(VoteHandler.java:24) ~[SickVote.jar:?]
        at SickVote.jar/de.sickred.bukkit.sickvote.SickVote.onEnable(SickVote.java:79) ~[SickVote.jar:?]
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:279) ~[paper-api-1.21.10-R0.1-SNAPSHOT.jar:?]
        at io.papermc.paper.plugin.manager.PaperPluginInstanceManager.enablePlugin(PaperPluginInstanceManager.java:202) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at io.papermc.paper.plugin.manager.PaperPluginManagerImpl.enablePlugin(PaperPluginManagerImpl.java:109) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:520) ~[paper-api-1.21.10-R0.1-SNAPSHOT.jar:?]
        at org.bukkit.craftbukkit.CraftServer.enablePlugin(CraftServer.java:639) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at org.bukkit.craftbukkit.CraftServer.enablePlugins(CraftServer.java:596) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at net.minecraft.server.MinecraftServer.initPostWorld(MinecraftServer.java:637) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at net.minecraft.server.dedicated.DedicatedServer.initServer(DedicatedServer.java:368) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:1257) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at net.minecraft.server.MinecraftServer.lambda$spin$2(MinecraftServer.java:384) ~[paper-1.21.10.jar:1.21.10-113-9fc21bc]
        at java.base/java.lang.Thread.run(Thread.java:1583) ~[?:?]
Caused by: com.google.gson.stream.MalformedJsonException: Use JsonReader.setStrictness(Strictness.LENIENT) to accept malformed JSON at line 1 column 8 path $
See https://github.com/google/gson/blob/main/Troubleshooting.md#malformed-json
        at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1754) ~[gson-2.11.0.jar:?]
        at com.google.gson.stream.JsonReader.checkLenient(JsonReader.java:1550) ~[gson-2.11.0.jar:?]
        at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:625) ~[gson-2.11.0.jar:?]
        at com.google.gson.stream.JsonReader.peek(JsonReader.java:507) ~[gson-2.11.0.jar:?]
        at com.google.gson.JsonParser.parseReader(JsonParser.java:111) ~[gson-2.11.0.jar:?]
        ... 40 more

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at ca.spottedleaf.dataconverter.minecraft.versions.V4290, following the conversion path from PlayerDataStorage.load and CraftOfflinePlayer.getName. Reproduce the 1.21.3-to-1.21.10 update with a legacy book, then determine how conversion should handle the malformed JSON so loading player data completes without the reported exception.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
backend, game-dev
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
42/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.