mirror of
https://github.com/PurpurMC/Purpur.git
synced 2026-02-17 16:37:43 +01:00
Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@c1ea550 Remove more outdated config settings (#9358) PaperMC/Paper@3a03739 Add method to get ungenerated chunk from long key (#9254) PaperMC/Paper@072b78a Add trail ruins structure set seed in spigot config (#9327) PaperMC/Paper@faf9a65 Disable BukkitMirrorTest PaperMC/Paper@873533b Add method to remove all active potion effects (#9361) PaperMC/Paper@275173e Updated Upstream (Bukkit/CraftBukkit) PaperMC/Paper@976b95c Temp: Pre-init PlayerChunkLoaderData in order to prepopulate the BFS lookup cache because potatos (Closes #9338) PaperMC/Paper@d6d4c78 Move some Folia API to Paper for easy compat (#9360) PaperMC/Paper@b1fe756 Revert "Move some Folia API to Paper for easy compat (#9360)" PaperMC/Paper@1f5bec7 Pull Folia API take two PaperMC/Paper@3756f5b Properly Cancel Usable Items (#9225)
81 lines
4.5 KiB
Diff
81 lines
4.5 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: MelnCat <melncatuwu@gmail.com>
|
|
Date: Sat, 24 Sep 2022 09:56:28 -0700
|
|
Subject: [PATCH] Add item packet serialize event
|
|
|
|
|
|
diff --git a/src/main/java/net/minecraft/network/FriendlyByteBuf.java b/src/main/java/net/minecraft/network/FriendlyByteBuf.java
|
|
index 9938bb90bef84cf784f9a1ceb02a1a45aa8b48a1..1f4b64a5f812376c499c98cb4be62469bd0b7dbe 100644
|
|
--- a/src/main/java/net/minecraft/network/FriendlyByteBuf.java
|
|
+++ b/src/main/java/net/minecraft/network/FriendlyByteBuf.java
|
|
@@ -98,6 +98,8 @@ public class FriendlyByteBuf extends ByteBuf {
|
|
private static final int MAX_PUBLIC_KEY_LENGTH = 512;
|
|
private static final Gson GSON = new Gson();
|
|
|
|
+ public static boolean hasItemSerializeEvent = false; // Purpur
|
|
+
|
|
public FriendlyByteBuf(ByteBuf parent) {
|
|
this.source = parent;
|
|
}
|
|
@@ -679,6 +681,17 @@ public class FriendlyByteBuf extends ByteBuf {
|
|
this.writeBoolean(false);
|
|
} else {
|
|
this.writeBoolean(true);
|
|
+ // Purpur start
|
|
+ if (hasItemSerializeEvent) {
|
|
+ var event = new org.purpurmc.purpur.event.packet.NetworkItemSerializeEvent(stack.asBukkitCopy());
|
|
+ event.callEvent();
|
|
+ ItemStack newStack = ItemStack.fromBukkitCopy(event.getItemStack());
|
|
+ if (org.purpurmc.purpur.PurpurConfig.fixNetworkSerializedItemsInCreative && !ItemStack.matches(stack, newStack)) {
|
|
+ stack.save(newStack.getOrCreateTagElement("Purpur.OriginalItem"));
|
|
+ }
|
|
+ stack = newStack;
|
|
+ }
|
|
+ // Purpur end
|
|
Item item = stack.getItem();
|
|
|
|
this.writeId(BuiltInRegistries.ITEM, item);
|
|
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
index b1bbe7bb30ae786ea09ef0e9d949ed043e9c2940..1143e2e76ef896ecf54fa0296c66815b6f856740 100644
|
|
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
|
|
@@ -1557,6 +1557,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop<TickTa
|
|
//MinecraftTimings.timeUpdateTimer.stopTiming(); // Spigot // Paper // Purpur
|
|
|
|
this.isIteratingOverLevels = true; // Paper
|
|
+ net.minecraft.network.FriendlyByteBuf.hasItemSerializeEvent = org.purpurmc.purpur.event.packet.NetworkItemSerializeEvent.getHandlerList().getRegisteredListeners().length > 0; // Purpur
|
|
Iterator iterator = this.getAllLevels().iterator(); // Paper - move down
|
|
while (iterator.hasNext()) {
|
|
ServerLevel worldserver = (ServerLevel) iterator.next();
|
|
diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
index 8aae0eed53b2c4a2f64884876eaf2ad59fc2249b..754063cc43d8adca0f70d76d8a75ec820c62cae6 100644
|
|
--- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
|
@@ -3458,6 +3458,12 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic
|
|
}
|
|
}
|
|
}
|
|
+ // Purpur start
|
|
+ if (org.purpurmc.purpur.PurpurConfig.fixNetworkSerializedItemsInCreative) {
|
|
+ var tag = itemstack.getTagElement("Purpur.OriginalItem");
|
|
+ if (tag != null) itemstack = ItemStack.of(tag);
|
|
+ }
|
|
+ // Purpur end
|
|
|
|
boolean flag1 = packet.getSlotNum() >= 1 && packet.getSlotNum() <= 45;
|
|
boolean flag2 = itemstack.isEmpty() || itemstack.getDamageValue() >= 0 && itemstack.getCount() <= 64 && !itemstack.isEmpty();
|
|
diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
|
|
index 4142820c3053d77d4ae7186fec968d624f893056..7a02cecaaef511c0db4708a1ce9eb885c1cfe028 100644
|
|
--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java
|
|
+++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java
|
|
@@ -549,4 +549,9 @@ public class PurpurConfig {
|
|
}
|
|
});
|
|
}
|
|
+
|
|
+ public static boolean fixNetworkSerializedItemsInCreative = false;
|
|
+ private static void fixNetworkSerializedCreativeItems() {
|
|
+ fixNetworkSerializedItemsInCreative = getBoolean("settings.fix-network-serialized-items-in-creative", fixNetworkSerializedItemsInCreative);
|
|
+ }
|
|
}
|