From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Tom Date: Mon, 10 Apr 2023 07:38:40 -0500 Subject: [PATCH] Add PlayerData Events diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java index 92c8cb4fe9c82e32876fa75134a6009c874f6594..9637ed39f3022a9d8d0b45a7bd5895657783bed5 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java @@ -601,6 +601,8 @@ public class ServerPlayerGameMode { enuminteractionresult1 = stack.useOn(itemactioncontext); } + world.pendingPlayerBlockEvents.remove(blockposition); // Paper + if (enuminteractionresult1.consumesAction()) { CriteriaTriggers.ITEM_USED_ON_BLOCK.trigger(player, blockposition, itemstack1); } diff --git a/src/main/java/net/minecraft/stats/ServerStatsCounter.java b/src/main/java/net/minecraft/stats/ServerStatsCounter.java index f890738d3bb9fb5e70a9d323c6cec97f9948f9cf..0e02785ec35e635bef33cc89c54b146c8e7dac99 100644 --- a/src/main/java/net/minecraft/stats/ServerStatsCounter.java +++ b/src/main/java/net/minecraft/stats/ServerStatsCounter.java @@ -204,7 +204,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(); @@ -230,7 +235,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 63e187c65cb855031f286aad0d25ac4694f7a331..b0f3aa2b90e2dc5dd7b450cae9ce4eba3d04e568 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(); @@ -56,33 +57,41 @@ public class PlayerDataStorage { public CompoundTag load(Player player) { CompoundTag nbttagcompound = null; - try { - File file = new File(this.playerDir, player.getStringUUID() + ".dat"); - // Spigot Start - boolean usingWrongFile = false; - if ( org.bukkit.Bukkit.getOnlineMode() && !file.exists() ) // Paper - Check online mode first - { - file = new File( this.playerDir, java.util.UUID.nameUUIDFromBytes( ( "OfflinePlayer:" + player.getScoreboardName() ).getBytes( "UTF-8" ) ).toString() + ".dat"); - if ( file.exists() ) + // 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 != null) { + nbttagcompound = (CompoundTag) playerData; + } else { + try { + File file = new File(this.playerDir, player.getStringUUID() + ".dat"); + // Spigot Start + boolean usingWrongFile = false; + if (org.bukkit.Bukkit.getOnlineMode() && !file.exists()) // Paper - Check online mode first { - usingWrongFile = true; - org.bukkit.Bukkit.getServer().getLogger().warning( "Using offline mode UUID file for player " + player.getScoreboardName() + " as it is the only copy we can find." ); + file = new File(this.playerDir, java.util.UUID.nameUUIDFromBytes(("OfflinePlayer:" + player.getScoreboardName()).getBytes("UTF-8")).toString() + ".dat"); + if (file.exists()) { + usingWrongFile = true; + org.bukkit.Bukkit.getServer().getLogger().warning("Using offline mode UUID file for player " + player.getScoreboardName() + " as it is the only copy we can find."); + } } - } - // Spigot End + // Spigot End - if (file.exists() && file.isFile()) { - nbttagcompound = NbtIo.readCompressed(file.toPath(), NbtAccounter.unlimitedHeap()); - } - // Spigot Start - if ( usingWrongFile ) - { - file.renameTo( new File( file.getPath() + ".offline-read" ) ); + if (file.exists() && file.isFile()) { + nbttagcompound = NbtIo.readCompressed(file.toPath(), NbtAccounter.unlimitedHeap()); + } + // Spigot Start + if (usingWrongFile) { + file.renameTo(new File(file.getPath() + ".offline-read")); + } + // Spigot End + } catch (Exception exception) { + PlayerDataStorage.LOGGER.warn("Failed to load player data for {}", player.getName().getString()); } - // Spigot End - } catch (Exception exception) { - PlayerDataStorage.LOGGER.warn("Failed to load player data for {}", player.getName().getString()); - } + } // Slice end + if (nbttagcompound != null) { // CraftBukkit start