Fix sendSignChange0's usage of SignText (#9310)
Dieser Commit ist enthalten in:
Ursprung
3722877c3c
Commit
f4dfdcbb5b
36
patches/server/0977-Fix-sendSignChange0-s-usage-of-SignText.patch
Normale Datei
36
patches/server/0977-Fix-sendSignChange0-s-usage-of-SignText.patch
Normale Datei
@ -0,0 +1,36 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Bjarne Koll <lynxplay101@gmail.com>
|
||||
Date: Sun, 11 Jun 2023 18:45:10 +0200
|
||||
Subject: [PATCH] Fix sendSignChange0's usage of SignText
|
||||
|
||||
Minecraft 1.20 introduced the SignText class that holds onto the text of
|
||||
a single side of a minecraft sign.
|
||||
This type is immutable and any methods on it produce an updated, new
|
||||
instance of the class rather than mutating the called upon instance.
|
||||
|
||||
Spigot does not respect this change as it does not re-assign the
|
||||
constructed sign text to the instance nor does it feed back said
|
||||
instance to the virtual sign block entity.
|
||||
|
||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
index 548eddde8b0558b780f672d321507cfcbac92558..e41f5417304f5b05fa7e2f6b6e1c0095e820f1cc 100644
|
||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||
@@ -1040,11 +1040,14 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||
private void sendSignChange0(Component[] components, Location loc, DyeColor dyeColor, boolean hasGlowingText) {
|
||||
SignBlockEntity sign = new SignBlockEntity(CraftLocation.toBlockPosition(loc), Blocks.OAK_SIGN.defaultBlockState());
|
||||
SignText text = sign.getFrontText();
|
||||
- text.setColor(net.minecraft.world.item.DyeColor.byId(dyeColor.getWoolData()));
|
||||
- text.setHasGlowingText(hasGlowingText);
|
||||
+ // Paper start - fix sign change using immutable SignText type
|
||||
+ text = text.setColor(net.minecraft.world.item.DyeColor.byId(dyeColor.getWoolData()));
|
||||
+ text = text.setHasGlowingText(hasGlowingText);
|
||||
for (int i = 0; i < components.length; i++) {
|
||||
- text.setMessage(i, components[i]);
|
||||
+ text = text.setMessage(i, components[i]);
|
||||
}
|
||||
+ sign.setText(text, true);
|
||||
+ // Paper end - fix sign change using immutable SignText type
|
||||
|
||||
getHandle().connection.send(sign.getUpdatePacket());
|
||||
// Paper end
|
In neuem Issue referenzieren
Einen Benutzer sperren