Skip to content

Commit 89eec55

Browse files
committed
Custom Spigot component parser
1 parent 8c3062b commit 89eec55

File tree

8 files changed

+48
-18
lines changed

8 files changed

+48
-18
lines changed

bukkit/src/main/java/io/github/rothes/protocolstringreplacer/api/user/PsrUser.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ public void sendFilteredMessage(BaseComponent... baseComponents) {
329329
}
330330

331331
public void sendFilteredMessage(String json) {
332-
sendFilteredMessage(ComponentSerializer.parse(json));
332+
sendFilteredMessage(SpigotUtils.parseComponents(json));
333333
}
334334

335335
public void sendFilteredText(String text) {

bukkit/src/main/java/io/github/rothes/protocolstringreplacer/packetlistener/server/BaseServerPacketListener.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -176,7 +176,7 @@ protected static String getReplacedJson(@Nonnull PacketEvent packetEvent, @Nonnu
176176
protected static String getReplacedDirect(@Nonnull PacketEvent packetEvent, @Nonnull PsrUser user, @Nonnull ListenType listenType,
177177
@Nonnull String json, List<ReplacerConfig> replacers) {
178178
StringBuilder sb = new StringBuilder();
179-
for (BaseComponent baseComponent : ComponentSerializer.parse(json)) {
179+
for (BaseComponent baseComponent : SpigotUtils.parseComponents(json)) {
180180
sb.append(baseComponent.toLegacyText());
181181
}
182182

@@ -198,7 +198,7 @@ protected static String getReplacedDirect(@Nonnull PacketEvent packetEvent, @Non
198198
List<Replaceable> jsons = container.getJsons();
199199
for (Replaceable j : jsons) {
200200
StringBuilder sb1 = new StringBuilder();
201-
for (BaseComponent baseComponent : ComponentSerializer.parse(j.getText())) {
201+
for (BaseComponent baseComponent : SpigotUtils.parseComponents(j.getText())) {
202202
sb1.append(baseComponent.toLegacyText());
203203
}
204204

@@ -393,7 +393,7 @@ private static void captureItemStackInfo(@Nonnull PsrUser user, @Nonnull ItemSta
393393
List<String> directs = new ArrayList<>(originalJsons.size());
394394
for (String json : originalJsons) {
395395
StringBuilder sb = new StringBuilder();
396-
for (BaseComponent baseComponent : ComponentSerializer.parse(json)) {
396+
for (BaseComponent baseComponent : SpigotUtils.parseComponents(json)) {
397397
sb.append(baseComponent.toLegacyText());
398398
}
399399

@@ -404,7 +404,7 @@ private static void captureItemStackInfo(@Nonnull PsrUser user, @Nonnull ItemSta
404404
List<ReplacerConfig> filtered = matchItemType(entries, type);
405405
for (Replaceable json : jsons) {
406406
StringBuilder sb = new StringBuilder();
407-
for (BaseComponent baseComponent : ComponentSerializer.parse(json.getText())) {
407+
for (BaseComponent baseComponent : SpigotUtils.parseComponents(json.getText())) {
408408
sb.append(baseComponent.toLegacyText());
409409
}
410410

@@ -481,7 +481,7 @@ private static boolean cacheItemStack(@Nonnull ItemStackContainer container, Lis
481481
for (Replaceable json : container.getJsons()) {
482482
StringBuilder sb = new StringBuilder();
483483
try {
484-
for (BaseComponent baseComponent : ComponentSerializer.parse(json.getText())) {
484+
for (BaseComponent baseComponent : SpigotUtils.parseComponents(json.getText())) {
485485
sb.append(baseComponent.toLegacyText());
486486
}
487487
} catch (Throwable t) {

bukkit/src/main/java/io/github/rothes/protocolstringreplacer/packetlistener/server/chat/Chat.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import io.github.rothes.protocolstringreplacer.replacer.ListenType;
1313
import io.github.rothes.protocolstringreplacer.api.user.PsrUser;
1414
import io.github.rothes.protocolstringreplacer.util.PaperUtils;
15+
import io.github.rothes.protocolstringreplacer.util.SpigotUtils;
1516
import net.md_5.bungee.api.ChatColor;
1617
import net.md_5.bungee.api.chat.BaseComponent;
1718
import net.md_5.bungee.api.chat.TranslatableComponent;
@@ -123,14 +124,14 @@ private boolean convert(PacketContainer packet, PsrUser user) {
123124

124125
if (wrappedChatComponent != null) {
125126
// 1.19.1+
126-
message = ComponentSerializer.parse(wrappedChatComponent.getJson())[0];
127+
message = SpigotUtils.parseComponents(wrappedChatComponent.getJson())[0];
127128
} else {
128129
// 1.19
129130
BaseComponent[] spigotComponent = getSpigotComponent(modifier);
130131
if (spigotComponent != null) {
131132
message = spigotComponent[0];
132133
} else {
133-
message = ComponentSerializer.parse(PaperUtils.serializeComponent(getPaperComponent(modifier)))[0];
134+
message = SpigotUtils.parseComponents(PaperUtils.serializeComponent(getPaperComponent(modifier)))[0];
134135
}
135136
}
136137

@@ -152,7 +153,7 @@ private boolean convert(PacketContainer packet, PsrUser user) {
152153
.withType(PlayerChatHelper.getPlayerChatMessageClass()).read(0)).getJson()));
153154
break;
154155
default:
155-
user.sendMessage(ComponentSerializer.parse(packet.getChatComponents().read(0).getJson()));
156+
user.sendMessage(SpigotUtils.parseComponents(packet.getChatComponents().read(0).getJson()));
156157
break;
157158
}
158159
break;

bukkit/src/main/java/io/github/rothes/protocolstringreplacer/packetlistener/server/chat/PlayerChatHelper.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import io.github.rothes.protocolstringreplacer.api.exceptions.IncompatibleServerException;
99
import io.github.rothes.protocolstringreplacer.nms.NmsManager;
1010
import io.github.rothes.protocolstringreplacer.nms.packetreader.ChatType;
11+
import io.github.rothes.protocolstringreplacer.util.SpigotUtils;
1112
import net.md_5.bungee.api.chat.BaseComponent;
1213
import net.md_5.bungee.chat.ComponentSerializer;
1314
import net.minecraft.network.protocol.game.ClientboundPlayerChatPacket;
@@ -246,7 +247,7 @@ public static int getChatTypeId(Object object) {
246247
}
247248

248249
public static BaseComponent getDisplayName(Object object) {
249-
return ComponentSerializer.parse(getDisplayNameWrapped(object).getJson())[0];
250+
return SpigotUtils.parseComponents(getDisplayNameWrapped(object).getJson())[0];
250251
}
251252

252253
public static WrappedChatComponent getDisplayNameWrapped(Object object) {
@@ -270,7 +271,7 @@ public static void setDisplayName(Object object, WrappedChatComponent wrappedCha
270271
}
271272

272273
public static BaseComponent getTeamName(Object object) {
273-
return ComponentSerializer.parse(getTeamNameWrapped(object).getJson())[0];
274+
return SpigotUtils.parseComponents(getTeamNameWrapped(object).getJson())[0];
274275
}
275276

276277
public static WrappedChatComponent getTeamNameWrapped(Object object) {

bukkit/src/main/java/io/github/rothes/protocolstringreplacer/packetlistener/server/sign/BaseServerSignPacketListener.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ protected void replaceSign(@NotNull PacketEvent packetEvent, @NotNull NBTContain
8080
for (String json : originalJsons) {
8181
StringBuilder sb = new StringBuilder();
8282
try {
83-
for (BaseComponent baseComponent : ComponentSerializer.parse(json)) {
83+
for (BaseComponent baseComponent : SpigotUtils.parseComponents(json)) {
8484
sb.append(baseComponent.toLegacyText());
8585
}
8686
} catch (Throwable t) {

bukkit/src/main/java/io/github/rothes/protocolstringreplacer/replacer/containers/ChatJsonContainer.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import io.github.rothes.protocolstringreplacer.api.exceptions.JsonSyntaxException;
44
import io.github.rothes.protocolstringreplacer.util.SpigotUtils;
5-
import net.md_5.bungee.chat.ComponentSerializer;
65
import org.jetbrains.annotations.NotNull;
76

87
public class ChatJsonContainer extends AbstractContainer<String> {
@@ -32,7 +31,7 @@ public ChatJsonContainer(@NotNull String json, @NotNull Container<?> root, boole
3231
public void createDefaultChildren() {
3332
if (createComponents) {
3433
try {
35-
componentsContainer = new ComponentsContainer(ComponentSerializer.parse(content), root);
34+
componentsContainer = new ComponentsContainer(SpigotUtils.parseComponents(content), root);
3635
} catch (Throwable t) {
3736
throw new JsonSyntaxException("Serializer can't parse Json: " + content, t);
3837
}

bukkit/src/main/java/io/github/rothes/protocolstringreplacer/replacer/helpers/ItemHelper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,13 @@ public static ItemHelper parse(@Nonnull Item item) {
4343
helper.display = helper.nbt.getCompound("display");
4444
if (helper.display != null) {
4545
if (helper.display.hasTag("Name")) {
46-
helper.name = ComponentSerializer.parse(helper.display.getString("Name"));
46+
helper.name = SpigotUtils.parseComponents(helper.display.getString("Name"));
4747
}
4848
if (helper.display.hasTag("Lore")) {
4949
helper.loreNbt = helper.display.getStringList("Lore");
5050
helper.lore = new ArrayList<>(helper.loreNbt.size());
5151
for (String line : helper.loreNbt) {
52-
helper.lore.add(ComponentSerializer.parse(line));
52+
helper.lore.add(SpigotUtils.parseComponents(line));
5353
}
5454
}
5555
}

bukkit/src/main/java/io/github/rothes/protocolstringreplacer/util/SpigotUtils.java

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import com.google.gson.Gson;
44
import com.google.gson.GsonBuilder;
5+
import com.google.gson.JsonElement;
6+
import com.google.gson.JsonParser;
57
import io.github.rothes.protocolstringreplacer.ProtocolStringReplacer;
68
import net.md_5.bungee.api.chat.BaseComponent;
79
import net.md_5.bungee.api.chat.ItemTag;
@@ -16,12 +18,14 @@
1618
import net.md_5.bungee.api.chat.hover.content.ItemSerializer;
1719
import net.md_5.bungee.api.chat.hover.content.Text;
1820
import net.md_5.bungee.api.chat.hover.content.TextSerializer;
21+
import net.md_5.bungee.chat.ChatVersion;
1922
import net.md_5.bungee.chat.ComponentSerializer;
2023
import net.md_5.bungee.chat.KeybindComponentSerializer;
2124
import net.md_5.bungee.chat.ScoreComponentSerializer;
2225
import net.md_5.bungee.chat.SelectorComponentSerializer;
2326
import net.md_5.bungee.chat.TextComponentSerializer;
2427
import net.md_5.bungee.chat.TranslatableComponentSerializer;
28+
import net.md_5.bungee.chat.VersionedComponentSerializer;
2529

2630
import java.lang.reflect.Constructor;
2731
import java.lang.reflect.Field;
@@ -30,14 +34,25 @@
3034
public class SpigotUtils {
3135

3236
private static final Gson psrSerializer;
37+
private static final JsonParser jsonParser = new JsonParser();
3338

3439
static {
3540
Gson temp = null;
41+
ProtocolStringReplacer plugin = ProtocolStringReplacer.getInstance();
3642
try {
37-
for (Field declaredField : ComponentSerializer.class.getDeclaredFields()) {
43+
Class<?> clazz;
44+
Object instance = null;
45+
if (plugin.getServerMajorVersion() == 21 && plugin.getServerMinorVersion() >= 5
46+
|| plugin.getServerMinorVersion() > 21) {
47+
clazz = VersionedComponentSerializer.class;
48+
instance = VersionedComponentSerializer.forVersion(ChatVersion.V1_21_5);
49+
} else {
50+
clazz = ComponentSerializer.class;
51+
}
52+
for (Field declaredField : clazz.getDeclaredFields()) {
3853
if (declaredField.getType() == Gson.class) {
3954
declaredField.setAccessible(true);
40-
temp = (Gson) declaredField.get(null);
55+
temp = (Gson) declaredField.get(instance);
4156
try {
4257
temp = temp.newBuilder().disableHtmlEscaping().create();
4358
} catch (NoSuchMethodError e) {
@@ -67,6 +82,20 @@ public class SpigotUtils {
6782
psrSerializer = temp;
6883
}
6984

85+
public static BaseComponent[] parseComponents(String json) {
86+
try {
87+
JsonElement jsonElement = jsonParser.parse(json);
88+
if (jsonElement.isJsonArray()) {
89+
return psrSerializer.fromJson(jsonElement, BaseComponent[].class);
90+
} else {
91+
return new BaseComponent[] { psrSerializer.fromJson(jsonElement, BaseComponent.class) };
92+
}
93+
94+
} catch (Throwable t) {
95+
return ComponentSerializer.parse(json);
96+
}
97+
}
98+
7099
public static String serializeComponents(BaseComponent... components) {
71100
try {
72101
if (components.length == 1) {

0 commit comments

Comments
 (0)