From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Tom Date: Mon, 18 Nov 2024 08:34:27 -0600 Subject: [PATCH] Add PlayerData Events diff --git a/src/main/java/net/minecraft/stats/ServerStatsCounter.java b/src/main/java/net/minecraft/stats/ServerStatsCounter.java index 6947650f299f99402a4a8d9c8384eb9f71a8e3a6..299fcc2ecb17f8d42ff3480ec9868127faa9b0fc 100644 --- a/src/main/java/net/minecraft/stats/ServerStatsCounter.java +++ b/src/main/java/net/minecraft/stats/ServerStatsCounter.java @@ -192,7 +192,12 @@ public class ServerStatsCounter extends StatsCounter { return nbttagcompound; } - protected String toJson() { + // Slice start - OBFHELPER + public String toJson() { + return serialize().toString(); + } + + public JsonObject serialize() { // Slice end Map, JsonObject> map = Maps.newHashMap(); ObjectIterator objectiterator = this.stats.object2IntEntrySet().iterator(); @@ -218,7 +223,7 @@ public class ServerStatsCounter extends StatsCounter { jsonobject1.add("stats", jsonobject); jsonobject1.addProperty("DataVersion", SharedConstants.getCurrentVersion().getDataVersion().getVersion()); - return jsonobject1.toString(); + return jsonobject1; // Slice } private static ResourceLocation getKey(Stat stat) { diff --git a/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java b/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java index b148cf247acdd36f856d0495cde4cc5ad32b5a2f..f9403d73ae2400e148a76bf79661e2e96fe7a6cc 100644 --- a/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java +++ b/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java @@ -36,6 +36,7 @@ public class PlayerDataStorage { public void save(Player player) { if (org.spigotmc.SpigotConfig.disablePlayerDataSaving) return; // Spigot + if (!new com.destroystokyo.paper.event.player.PlayerSaveDataEvent((org.bukkit.entity.Player) player.getBukkitEntity()).callEvent()) return; // Slice try { CompoundTag nbttagcompound = player.saveWithoutId(new CompoundTag()); Path path = this.playerDir.toPath(); @@ -108,6 +109,21 @@ public class PlayerDataStorage { } public Optional load(Player player) { + // Slice start - If event supplies playerdata, use it. Otherwise just load from disk as usual + com.destroystokyo.paper.event.player.PlayerLoadDataEvent event = new com.destroystokyo.paper.event.player.PlayerLoadDataEvent(player.getUUID()); + org.bukkit.Bukkit.getPluginManager().callEvent(event); + + Object playerData = event.getPlayerData(); + if (playerData instanceof CompoundTag data) { + data = ca.spottedleaf.dataconverter.minecraft.MCDataConverter.convertTag(ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry.PLAYER, + data, + NbtUtils.getDataVersion(data, -1), + net.minecraft.SharedConstants.getCurrentVersion().getDataVersion().getVersion()); // Paper - rewrite data conversion system + player.load(data); + return Optional.of(data); + } + // Slice end + // CraftBukkit start return this.load(player.getName().getString(), player.getStringUUID()).map((nbttagcompound) -> { if (player instanceof ServerPlayer) {