Skip to content

Commit 1ebbea0

Browse files
authored
1.21.5 Bungee chat fixes (#2718)
* Revert "patch build error from Bungee-Chat api change" This reverts commit 7f9f2c8. * Make `NMSHandler#getVersion` work during startup * Use correct serializer for parsing components JSON * Fix `vanillaStyleSpigotComponentGSON` creation * Fix `HoverFormatHelper` serialization workarounds
1 parent 3c81361 commit 1ebbea0

14 files changed

Lines changed: 61 additions & 136 deletions

File tree

paper/src/main/java/com/denizenscript/denizen/paper/PaperModule.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import net.kyori.adventure.text.Component;
1919
import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer;
2020
import net.md_5.bungee.api.ChatColor;
21-
import net.md_5.bungee.chat.ComponentSerializer;
2221
import org.bukkit.Bukkit;
2322

2423
public class PaperModule {
@@ -156,7 +155,7 @@ public static String stringifyComponent(Component component) {
156155
if (component == null) {
157156
return null;
158157
}
159-
return FormattedTextHelper.stringify(ComponentSerializer.parse(componentToJson(component)));
158+
return FormattedTextHelper.stringify(FormattedTextHelper.parseJson(componentToJson(component)));
160159
}
161160

162161
public static Component jsonToComponent(String json) {

plugin/src/main/java/com/denizenscript/denizen/Denizen.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -371,7 +371,6 @@ else if (javaVersion.startsWith("21")) {
371371
ExSustainedCommandHandler exsCommand = new ExSustainedCommandHandler();
372372
exsCommand.enableFor(getCommand("exs"));
373373
FullBlockData.init();
374-
HoverFormatHelper.tryInitializeItemHoverFix();
375374
// Load script files without processing.
376375
DenizenCore.preloadScripts(false, null);
377376
// Load the saves.yml into memory

plugin/src/main/java/com/denizenscript/denizen/events/player/PlayerReceivesMessageScriptEvent.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
package com.denizenscript.denizen.events.player;
22

3+
import com.denizenscript.denizen.events.BukkitScriptEvent;
34
import com.denizenscript.denizen.objects.PlayerTag;
45
import com.denizenscript.denizen.utilities.FormattedTextHelper;
56
import com.denizenscript.denizen.utilities.implementation.BukkitScriptEntryData;
6-
import com.denizenscript.denizen.events.BukkitScriptEvent;
77
import com.denizenscript.denizen.utilities.packets.NetworkInterceptHelper;
8-
import com.denizenscript.denizencore.objects.core.ElementTag;
98
import com.denizenscript.denizencore.objects.ObjectTag;
9+
import com.denizenscript.denizencore.objects.core.ElementTag;
1010
import com.denizenscript.denizencore.scripts.ScriptEntryData;
1111
import com.denizenscript.denizencore.utilities.CoreUtilities;
1212
import net.md_5.bungee.api.ChatColor;
1313
import net.md_5.bungee.api.chat.BaseComponent;
14-
import net.md_5.bungee.chat.ComponentSerializer;
1514

1615
public class PlayerReceivesMessageScriptEvent extends BukkitScriptEvent {
1716

@@ -97,7 +96,7 @@ public boolean applyDetermination(ScriptPath path, ObjectTag determinationObj) {
9796
if (lower.startsWith("raw_json:")) {
9897
rawJson = new ElementTag(determination.substring("raw_json:".length()));
9998
altMessageDetermination = null;
100-
message = new ElementTag(FormattedTextHelper.stringify(ComponentSerializer.parse(rawJson.asString())), true);
99+
message = new ElementTag(FormattedTextHelper.stringify(FormattedTextHelper.parseJson(rawJson.asString())), true);
101100
modified = true;
102101
return true;
103102
}
@@ -127,7 +126,7 @@ public ObjectTag getContext(String name) {
127126
public PlayerReceivesMessageScriptEvent triggerNow() {
128127
PlayerReceivesMessageScriptEvent event = (PlayerReceivesMessageScriptEvent) fire();
129128
if (event.modified && event.altMessageDetermination == null) {
130-
event.altMessageDetermination = ComponentSerializer.parse(event.rawJson.asString());
129+
event.altMessageDetermination = FormattedTextHelper.parseJson(event.rawJson.asString());
131130
}
132131
return event;
133132
}

plugin/src/main/java/com/denizenscript/denizen/nms/NMSHandler.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import com.denizenscript.denizen.nms.util.PlayerProfile;
66
import com.denizenscript.denizen.nms.util.jnbt.CompoundTag;
77
import com.denizenscript.denizen.nms.util.jnbt.Tag;
8-
import com.google.gson.Gson;
98
import org.bukkit.Bukkit;
109
import org.bukkit.Location;
1110
import org.bukkit.NamespacedKey;
@@ -32,8 +31,7 @@ public abstract class NMSHandler {
3231
public static boolean debugPackets = false;
3332
public static String debugPacketFilter = "";
3433

35-
public static boolean initialize(JavaPlugin plugin) {
36-
javaPlugin = plugin;
34+
static {
3735
String bukkitVersion = Bukkit.getBukkitVersion();
3836
for (NMSVersion potentialVersion : NMSVersion.values()) {
3937
if (bukkitVersion.startsWith(potentialVersion.minecraftVersion)) {
@@ -43,6 +41,12 @@ public static boolean initialize(JavaPlugin plugin) {
4341
}
4442
if (version == null) {
4543
version = NMSVersion.NOT_SUPPORTED;
44+
}
45+
}
46+
47+
public static boolean initialize(JavaPlugin plugin) {
48+
javaPlugin = plugin;
49+
if (getVersion() == NMSVersion.NOT_SUPPORTED) {
4650
instance = null;
4751
return false;
4852
}
@@ -147,6 +151,4 @@ public void setBossbarUUID(BossBar bar, UUID id) {
147151
public String updateLegacyName(Class<?> type, String legacyName) {
148152
return legacyName;
149153
}
150-
151-
public abstract Gson getVanillaStyleSpigotComponentGSON(); // TODO: Once 1.21 is the minimum version, de-module this
152154
}

plugin/src/main/java/com/denizenscript/denizen/objects/properties/bukkit/BukkitElementExtensions.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import com.denizenscript.denizencore.utilities.CoreUtilities;
2020
import com.denizenscript.denizencore.utilities.Deprecations;
2121
import net.md_5.bungee.api.ChatColor;
22-
import net.md_5.bungee.chat.ComponentSerializer;
2322

2423
import java.nio.charset.StandardCharsets;
2524

@@ -442,7 +441,7 @@ public static void register() {
442441
// Inverts <@link tag ElementTag.to_raw_json>.
443442
// -->
444443
ElementTag.tagProcessor.registerStaticTag(ElementTag.class, "from_raw_json", (attribute, object) -> {
445-
return new ElementTag(FormattedTextHelper.stringify(ComponentSerializer.parse(object.asString())));
444+
return new ElementTag(FormattedTextHelper.stringify(FormattedTextHelper.parseJson(object.asString())));
446445
});
447446

448447
// <--[tag]

plugin/src/main/java/com/denizenscript/denizen/objects/properties/item/ItemBook.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
import com.denizenscript.denizencore.tags.core.EscapeTagUtil;
1313
import net.md_5.bungee.api.ChatColor;
1414
import net.md_5.bungee.api.chat.BaseComponent;
15-
import net.md_5.bungee.chat.ComponentSerializer;
1615
import org.bukkit.Material;
1716
import org.bukkit.inventory.meta.BookMeta;
1817

@@ -277,7 +276,7 @@ public static void register() {
277276
if (data.get(0).equalsIgnoreCase("raw_pages")) {
278277
List<BaseComponent[]> newPages = new ArrayList<>(data.size());
279278
for (int i = 1; i < data.size(); i++) {
280-
newPages.add(ComponentSerializer.parse(EscapeTagUtil.unEscape(data.get(i))));
279+
newPages.add(FormattedTextHelper.parseJson(EscapeTagUtil.unEscape(data.get(i))));
281280
}
282281
bookMeta.spigot().setPages(newPages);
283282
}

plugin/src/main/java/com/denizenscript/denizen/utilities/FormattedTextHelper.java

Lines changed: 26 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,14 @@
1010
import com.denizenscript.denizencore.utilities.AsciiMatcher;
1111
import com.denizenscript.denizencore.utilities.CoreConfiguration;
1212
import com.denizenscript.denizencore.utilities.CoreUtilities;
13+
import com.denizenscript.denizencore.utilities.ReflectionHelper;
1314
import com.denizenscript.denizencore.utilities.debugging.Debug;
1415
import com.google.gson.Gson;
1516
import net.md_5.bungee.api.ChatColor;
1617
import net.md_5.bungee.api.chat.*;
18+
import net.md_5.bungee.chat.ChatVersion;
19+
import net.md_5.bungee.chat.ComponentSerializer;
20+
import net.md_5.bungee.chat.VersionedComponentSerializer;
1721

1822
import java.util.List;
1923

@@ -857,15 +861,33 @@ public static String bukkitSafeDebugTrimming(String message) {
857861
return message;
858862
}
859863

860-
public static Gson vanillaStyleSpigotComponentGSON = null;
864+
public static Gson getBungeeGson() {
865+
if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21)) {
866+
return VersionedComponentSerializer.forVersion(ChatVersion.V1_21_5).getGson();
867+
}
868+
else {
869+
return ReflectionHelper.getFieldValue(ComponentSerializer.class, "gson", null);
870+
}
871+
}
872+
873+
static {
874+
// Explicitly before initializing vanillaStyleSpigotComponentGSON
875+
HoverFormatHelper.tryInitializeItemHoverFix();
876+
}
877+
878+
public static final Gson vanillaStyleSpigotComponentGSON = getBungeeGson().newBuilder().disableHtmlEscaping().create();
861879

862880
public static String componentToJson(BaseComponent[] components) {
863-
if (vanillaStyleSpigotComponentGSON == null) {
864-
vanillaStyleSpigotComponentGSON = NMSHandler.instance.getVanillaStyleSpigotComponentGSON();
865-
}
866881
if (components.length == 1) {
867882
return vanillaStyleSpigotComponentGSON.toJson(components[0]);
868883
}
869884
return vanillaStyleSpigotComponentGSON.toJson(new TextComponent(components));
870885
}
886+
887+
public static BaseComponent[] parseJson(String json) {
888+
if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21)) {
889+
return VersionedComponentSerializer.forVersion(ChatVersion.V1_21_5).parse(json);
890+
}
891+
return ComponentSerializer.parse(json);
892+
}
871893
}

plugin/src/main/java/com/denizenscript/denizen/utilities/HoverFormatHelper.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,9 @@
1313
import net.md_5.bungee.api.chat.HoverEvent;
1414
import net.md_5.bungee.api.chat.TextComponent;
1515
import net.md_5.bungee.api.chat.hover.content.*;
16+
import net.md_5.bungee.chat.ChatVersion;
1617
import net.md_5.bungee.chat.ComponentSerializer;
18+
import net.md_5.bungee.chat.VersionedComponentSerializer;
1719
import org.bukkit.Bukkit;
1820
import org.bukkit.Registry;
1921
import org.bukkit.inventory.ItemStack;
@@ -94,7 +96,7 @@ public static void tryInitializeItemHoverFix() {
9496
if (!NMSHandler.getVersion().isAtLeast(NMSVersion.v1_20)) {
9597
return;
9698
}
97-
Gson bungeeGson = ReflectionHelper.getFieldValue(ComponentSerializer.class, "gson", null);
99+
Gson bungeeGson = FormattedTextHelper.getBungeeGson();
98100
if (bungeeGson == null) {
99101
return;
100102
}
@@ -103,7 +105,12 @@ public static void tryInitializeItemHoverFix() {
103105
.registerTypeAdapter(Item.class, new FixedItemHoverSerializer())
104106
.create();
105107
try {
106-
ReflectionHelper.getFinalSetter(ComponentSerializer.class, "gson").invoke(fixedGson);
108+
if (NMSHandler.getVersion().isAtLeast(NMSVersion.v1_21)) {
109+
ReflectionHelper.setFieldValue(VersionedComponentSerializer.class, "gson", VersionedComponentSerializer.forVersion(ChatVersion.V1_21_5), fixedGson);
110+
}
111+
else {
112+
ReflectionHelper.getFinalSetter(ComponentSerializer.class, "gson").invoke(fixedGson);
113+
}
107114
}
108115
catch (Throwable e) {
109116
Debug.echoError(e);

v1_17/src/main/java/com/denizenscript/denizen/nms/v1_17/Handler.java

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,10 @@
1919
import com.denizenscript.denizencore.utilities.ReflectionHelper;
2020
import com.denizenscript.denizencore.utilities.debugging.Debug;
2121
import com.google.common.collect.Iterables;
22-
import com.google.gson.Gson;
23-
import com.google.gson.GsonBuilder;
2422
import com.mojang.authlib.GameProfile;
2523
import com.mojang.authlib.properties.Property;
26-
import net.md_5.bungee.api.chat.*;
27-
import net.md_5.bungee.api.chat.hover.content.*;
28-
import net.md_5.bungee.chat.*;
24+
import net.md_5.bungee.api.chat.BaseComponent;
25+
import net.md_5.bungee.chat.ComponentSerializer;
2926
import net.minecraft.core.Registry;
3027
import net.minecraft.nbt.ByteArrayTag;
3128
import net.minecraft.nbt.StringTag;
@@ -291,21 +288,4 @@ public static MutableComponent componentToNMS(BaseComponent[] spigot) {
291288
String json = ComponentSerializer.toString(spigot);
292289
return Component.Serializer.fromJson(json);
293290
}
294-
295-
@Override
296-
public Gson getVanillaStyleSpigotComponentGSON() {
297-
return new GsonBuilder()
298-
.registerTypeAdapter(BaseComponent.class, new ComponentSerializer())
299-
.registerTypeAdapter(TextComponent.class, new TextComponentSerializer())
300-
.registerTypeAdapter(TranslatableComponent.class, new TranslatableComponentSerializer())
301-
.registerTypeAdapter(KeybindComponent.class, new KeybindComponentSerializer())
302-
.registerTypeAdapter(ScoreComponent.class, new ScoreComponentSerializer())
303-
.registerTypeAdapter(SelectorComponent.class, new SelectorComponentSerializer())
304-
.registerTypeAdapter(net.md_5.bungee.api.chat.hover.content.Entity.class, new EntitySerializer())
305-
.registerTypeAdapter(Text.class, new TextSerializer())
306-
.registerTypeAdapter(Item.class, new ItemSerializer())
307-
.registerTypeAdapter(ItemTag.class, new ItemTag.Serializer())
308-
.disableHtmlEscaping() // Mojang
309-
.create();
310-
}
311291
}

v1_18/src/main/java/com/denizenscript/denizen/nms/v1_18/Handler.java

Lines changed: 2 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,11 @@
2222
import com.denizenscript.denizencore.utilities.ReflectionHelper;
2323
import com.denizenscript.denizencore.utilities.debugging.Debug;
2424
import com.google.common.collect.Iterables;
25-
import com.google.gson.Gson;
26-
import com.google.gson.GsonBuilder;
2725
import com.mojang.authlib.GameProfile;
2826
import com.mojang.authlib.properties.Property;
2927
import net.md_5.bungee.api.ChatColor;
30-
import net.md_5.bungee.api.chat.*;
31-
import net.md_5.bungee.api.chat.hover.content.*;
32-
import net.md_5.bungee.chat.*;
28+
import net.md_5.bungee.api.chat.BaseComponent;
29+
import net.md_5.bungee.chat.ComponentSerializer;
3330
import net.minecraft.core.Holder;
3431
import net.minecraft.core.Registry;
3532
import net.minecraft.nbt.ByteArrayTag;
@@ -321,21 +318,4 @@ public static MutableComponent componentToNMS(BaseComponent[] spigot) {
321318
String json = ComponentSerializer.toString(spigot);
322319
return Component.Serializer.fromJson(json);
323320
}
324-
325-
@Override
326-
public Gson getVanillaStyleSpigotComponentGSON() {
327-
return new GsonBuilder()
328-
.registerTypeAdapter(BaseComponent.class, new ComponentSerializer())
329-
.registerTypeAdapter(TextComponent.class, new TextComponentSerializer())
330-
.registerTypeAdapter(TranslatableComponent.class, new TranslatableComponentSerializer())
331-
.registerTypeAdapter(KeybindComponent.class, new KeybindComponentSerializer())
332-
.registerTypeAdapter(ScoreComponent.class, new ScoreComponentSerializer())
333-
.registerTypeAdapter(SelectorComponent.class, new SelectorComponentSerializer())
334-
.registerTypeAdapter(net.md_5.bungee.api.chat.hover.content.Entity.class, new EntitySerializer())
335-
.registerTypeAdapter(Text.class, new TextSerializer())
336-
.registerTypeAdapter(Item.class, new ItemSerializer())
337-
.registerTypeAdapter(ItemTag.class, new ItemTag.Serializer())
338-
.disableHtmlEscaping() // Mojang
339-
.create();
340-
}
341321
}

0 commit comments

Comments
 (0)