122 lines
6.3 KiB
Diff
122 lines
6.3 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 14f68a88a5dacaacc799787a9f451699bc4bd5cd..a1db0c83d472a87560ca1b3834dd1f1bdbb9fc1a 100644
|
|
--- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
|
|
+++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java
|
|
@@ -600,6 +600,8 @@ public class ServerPlayerGameMode {
|
|
enuminteractionresult1 = stack.useOn(itemactioncontext, hand);
|
|
}
|
|
|
|
+ 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 9501e5f25f5c4d3069e554d4dc82b0e094156682..8afd9b785fb8734255e3ea926b8375bb9cae60be 100644
|
|
--- a/src/main/java/net/minecraft/stats/ServerStatsCounter.java
|
|
+++ b/src/main/java/net/minecraft/stats/ServerStatsCounter.java
|
|
@@ -198,7 +198,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();
|
|
|
|
@@ -224,7 +229,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 36af81f0957d17e170d229059c66f4eb4539dfeb..e8d324a32838b69255ce48b1c03e47cd9e201da6 100644
|
|
--- a/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java
|
|
+++ b/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java
|
|
@@ -33,6 +33,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());
|
|
File file = File.createTempFile(player.getStringUUID() + "-", ".dat", this.playerDir);
|
|
@@ -52,32 +53,40 @@ 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);
|
|
- }
|
|
- // Spigot Start
|
|
- if ( usingWrongFile )
|
|
- {
|
|
- file.renameTo( new File( file.getPath() + ".offline-read" ) );
|
|
+ if (file.exists() && file.isFile()) {
|
|
+ nbttagcompound = NbtIo.readCompressed(file);
|
|
+ }
|
|
+ // 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) {
|