diff --git a/gradle.properties b/gradle.properties index 0765f7661..12cb8a9bb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ group=com.lokamc.slice version=1.21.3-R0.1-SNAPSHOT mcVersion=1.21.3 -paperRef=be886cf4e7ba906a3e79d9d38835d35abf60a0ce +paperRef=4e01ede95097518c1050215def2e6f44e9fb7369 updatingMinecraft=false org.gradle.caching=true diff --git a/patches/api/0015-Add-PlayerData-Events.patch b/patches/api/0015-Add-PlayerData-Events.patch new file mode 100644 index 000000000..a52ff4d26 --- /dev/null +++ b/patches/api/0015-Add-PlayerData-Events.patch @@ -0,0 +1,133 @@ +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/com/destroystokyo/paper/event/player/PlayerLoadDataEvent.java b/src/main/java/com/destroystokyo/paper/event/player/PlayerLoadDataEvent.java +new file mode 100644 +index 0000000000000000000000000000000000000000..ae0132d9c7ae17b478d1d504961e1fd6b479f6d0 +--- /dev/null ++++ b/src/main/java/com/destroystokyo/paper/event/player/PlayerLoadDataEvent.java +@@ -0,0 +1,63 @@ ++package com.destroystokyo.paper.event.player; ++ ++import com.google.gson.JsonObject; ++import org.bukkit.event.Event; ++import org.bukkit.event.HandlerList; ++import org.jetbrains.annotations.NotNull; ++import org.jetbrains.annotations.Nullable; ++ ++import java.util.UUID; ++ ++/** ++ * Calls an event in which playerdata can be provided. If null, will load from disk, otherwise will use provided data ++ */ ++public class PlayerLoadDataEvent extends Event { ++ private static final HandlerList handlers = new HandlerList(); ++ private final UUID playerId; ++ private Object playerData; ++ private JsonObject statistics; ++ ++ public PlayerLoadDataEvent(@NotNull UUID playerId) { ++ super(); ++ this.playerId = playerId; ++ } ++ ++ /** ++ * Gets the player's unique ID. ++ * ++ * @return The unique ID ++ */ ++ @NotNull ++ public UUID getUniqueId() { ++ return playerId; ++ } ++ ++ @Nullable ++ public Object getPlayerData() { ++ return playerData; ++ } ++ ++ public void setPlayerData(@NotNull Object playerData) { ++ this.playerData = playerData; ++ } ++ ++ @Nullable ++ public JsonObject getStatistics() { ++ return statistics; ++ } ++ ++ public void setStatistics(@NotNull JsonObject statistics) { ++ this.statistics = statistics; ++ } ++ ++ @NotNull ++ @Override ++ public HandlerList getHandlers() { ++ return handlers; ++ } ++ ++ @NotNull ++ public static HandlerList getHandlerList() { ++ return handlers; ++ } ++} +diff --git a/src/main/java/com/destroystokyo/paper/event/player/PlayerSaveDataEvent.java b/src/main/java/com/destroystokyo/paper/event/player/PlayerSaveDataEvent.java +new file mode 100644 +index 0000000000000000000000000000000000000000..c706201394d89f4a6f795ebbbac3d1041f395104 +--- /dev/null ++++ b/src/main/java/com/destroystokyo/paper/event/player/PlayerSaveDataEvent.java +@@ -0,0 +1,52 @@ ++package com.destroystokyo.paper.event.player; ++ ++import org.bukkit.entity.Player; ++import org.bukkit.event.Cancellable; ++import org.bukkit.event.Event; ++import org.bukkit.event.HandlerList; ++import org.jetbrains.annotations.NotNull; ++ ++/** ++ * Calls whenever playerdata is attempted to be saved. This is fired even if SpigotConfig.disablePlayerDataSaving is true ++ */ ++public class PlayerSaveDataEvent extends Event implements Cancellable { ++ private static final HandlerList handlers = new HandlerList(); ++ private final Player player; ++ private boolean cancel; ++ ++ public PlayerSaveDataEvent(@NotNull Player player) { ++ super(); ++ this.player = player; ++ } ++ ++ /** ++ * Gets the player ++ * ++ * @return The player ++ */ ++ @NotNull ++ public Player getPlayer() { ++ return player; ++ } ++ ++ @NotNull ++ @Override ++ public HandlerList getHandlers() { ++ return handlers; ++ } ++ ++ @NotNull ++ public static HandlerList getHandlerList() { ++ return handlers; ++ } ++ ++ @Override ++ public boolean isCancelled() { ++ return cancel; ++ } ++ ++ @Override ++ public void setCancelled(boolean cancel) { ++ this.cancel = cancel; ++ } ++} diff --git a/patches/server/0005-Add-World-Instance-flag.patch b/patches/server/0005-Add-World-Instance-flag.patch index 75cf131e8..8e415ffcd 100644 --- a/patches/server/0005-Add-World-Instance-flag.patch +++ b/patches/server/0005-Add-World-Instance-flag.patch @@ -5,13 +5,13 @@ Subject: [PATCH] Add World Instance flag diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 3b6b6483bf855493948417f44f06427b625bc910..7bdbe1f2fa31781b7bd7b12c555b1b668edbfd6b 100644 +index a0611bf5f88d5b12dc981dda14e355c751ff802e..e0f87699b4a2a503e86e1cde732a200bff9e57ae 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -230,6 +230,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe - public final UUID uuid; +@@ -231,6 +231,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe public boolean hasPhysicsEvent = true; // Paper - BlockPhysicsEvent public boolean hasEntityMoveEvent; // Paper - Add EntityMoveEvent + private final alternate.current.wire.WireHandler wireHandler = new alternate.current.wire.WireHandler(this); // Paper - optimize redstone (Alternate Current) + public boolean instance; // Slice public LevelChunk getChunkIfLoaded(int x, int z) { diff --git a/patches/server/0024-Add-PlayerData-Events.patch b/patches/server/0024-Add-PlayerData-Events.patch new file mode 100644 index 000000000..f93b54d59 --- /dev/null +++ b/patches/server/0024-Add-PlayerData-Events.patch @@ -0,0 +1,63 @@ +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 3bac27ffaea7fe873aa73605256f83837322fe0a..ba8416b010ca17cc5a4640dab2f9f5420227f3ca 100644 +--- a/src/main/java/net/minecraft/stats/ServerStatsCounter.java ++++ b/src/main/java/net/minecraft/stats/ServerStatsCounter.java +@@ -210,7 +210,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(); + +@@ -236,7 +241,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..bbb452e5e56f4efa97f2e1a0ee920b1d1e9a28a4 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,17 @@ 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) { ++ 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) {