-
Type:
Bug
-
Resolution: Fixed
-
Priority:
Minor
-
None
-
Affects Version/s: None
-
This server is running CraftBukkit version dev-Spigot-0a642bd-aac911d (MC: 1.21) (Implementing API version 1.21-R0.1-SNAPSHOT)
-
Yes
Issues:
- Pages are not serialized as json strings, but the IChatBaseComponents are outputted directly, which does not serialize the actual page data and results in an error during deserialization.
"pages: - !!net.minecraft.network.chat.IChatMutableComponent {}" - For the "resolved" and "generation" properties, the deserialization does not properly handle null / missing values during deserialization (tries to cast null to Generation or bool), instead of using false / Generation.ORIGINAL instead.
Example plugin code to reproduce the issue(s):
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
try {
Player player = (Player) sender;
ItemStack item = new ItemStack(Material.WRITTEN_BOOK);
BookMeta meta = (BookMeta)item.getItemMeta();
meta.addPage("Test");
item.setItemMeta(meta);
YamlConfiguration config = new YamlConfiguration();
config.set("item", item);
String serialized = config.saveToString();
player.sendMessage("Serialized: " + serialized);
config.loadFromString(serialized);
ItemStack deserialized = config.getItemStack("item");
player.sendMessage("Deserialized: " + config.saveToString());
player.sendMessage("Deserialized equals original? " + item.isSimilar(deserialized));
} catch (Exception e) {
sender.sendMessage("Command execution failed: " + e.getMessage());
Test.INSTANCE.getLogger().log(Level.SEVERE, "Command execution failed!", e);
}
return true;
}