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 4f00c2e8d6ff3a03a334542f699c5e35bfd03ce8..f31fc572413c2e1350adca3691316ac6b0d66fef 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java @@ -603,6 +603,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 9bb8d4d7be6a937980aa653db82be084d066a563..9838435fbc31cfbba487d1e62ec5d2e70776517c 100644 --- a/src/main/java/net/minecraft/stats/ServerStatsCounter.java +++ b/src/main/java/net/minecraft/stats/ServerStatsCounter.java @@ -199,7 +199,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(); @@ -225,7 +230,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 b3a90d6ef0e17c236e0b3c46e2d0012671afdaa7..bb22635a8dc7d4e2030f50da62983119520a0b91 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