124 lines
6.4 KiB
Diff
124 lines
6.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Tom <cryptite@gmail.com>
|
|
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<StatType<?>, 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 <T> ResourceLocation getKey(Stat<T> 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
|