Skip to content

Commit 863bf15

Browse files
committed
fix can't convert hover event in 1.12
1 parent 3f0cbe2 commit 863bf15

2 files changed

Lines changed: 20 additions & 3 deletions

File tree

modules/library/src/main/java/top/mrxiaom/pluginbase/utils/adventure/serializer/BungeeComponentSerializer.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,12 @@
22

33
import net.kyori.adventure.text.Component;
44
import net.md_5.bungee.api.chat.*;
5+
import top.mrxiaom.pluginbase.utils.Util;
56
import top.mrxiaom.pluginbase.utils.adventure.serializer.converter.*;
67

78
public class BungeeComponentSerializer {
9+
protected static final boolean isModernHover = Util.isPresent("net.md_5.bungee.api.chat.hover.content.Text");
10+
811
public static BaseComponent serialize(Component input) {
912
BaseComponent component = convert(input);
1013
for (Styles style : Styles.values()) {

modules/library/src/main/java/top/mrxiaom/pluginbase/utils/adventure/serializer/Styles.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,17 @@
1010
import net.md_5.bungee.api.ChatColor;
1111
import net.md_5.bungee.api.chat.BaseComponent;
1212
import net.md_5.bungee.api.chat.ItemTag;
13+
import net.md_5.bungee.api.chat.TextComponent;
1314
import net.md_5.bungee.api.chat.hover.content.Entity;
1415
import net.md_5.bungee.api.chat.hover.content.Item;
1516
import net.md_5.bungee.api.chat.hover.content.Text;
1617

17-
import java.awt.*;
18+
import java.awt.Color;
1819
import java.util.UUID;
1920
import java.util.function.BiConsumer;
2021

22+
import static top.mrxiaom.pluginbase.utils.adventure.serializer.BungeeComponentSerializer.isModernHover;
23+
2124
@SuppressWarnings({"deprecation"})
2225
public enum Styles {
2326
FONT((bc, c) -> {
@@ -112,7 +115,8 @@ public enum Styles {
112115
HoverEvent<?> event = c.hoverEvent();
113116
if (event != null) {
114117
HoverEvent.Action<?> action = event.action();
115-
try {
118+
if (isModernHover) {
119+
// 1.13+ 支持自定义 Content
116120
if (action.equals(HoverEvent.Action.SHOW_TEXT)) {
117121
Component value = (Component) event.value();
118122
Text text = new Text(BungeeComponentSerializer.serialize(value));
@@ -132,11 +136,21 @@ public enum Styles {
132136
Item item = new Item(type, count, ItemTag.ofNbt(nbt));
133137
bc.setHoverEvent(new net.md_5.bungee.api.chat.HoverEvent(net.md_5.bungee.api.chat.HoverEvent.Action.SHOW_ITEM, item));
134138
}
135-
} catch (Throwable ignored) {
139+
} else {
140+
// 1.12 及以下只能使用 BaseComponent[] 作为值
136141
if (action.equals(HoverEvent.Action.SHOW_TEXT) && event.value() instanceof Component) {
137142
BaseComponent[] components = new BaseComponent[] { BungeeComponentSerializer.serialize((Component) event.value()) };
138143
bc.setHoverEvent(new net.md_5.bungee.api.chat.HoverEvent(net.md_5.bungee.api.chat.HoverEvent.Action.SHOW_TEXT, components));
139144
}
145+
if (action.equals(HoverEvent.Action.SHOW_ITEM) && event.value() instanceof HoverEvent.ShowItem) {
146+
HoverEvent.ShowItem showItem = (HoverEvent.ShowItem) event.value();
147+
String tag = showItem.nbt() == null ? "{}" : showItem.nbt().string();
148+
String id = showItem.item().asString();
149+
int count = showItem.count();
150+
String nbt = "{id:\"" + id + "\",Count:" + count + "b,tag:" + tag + "}";
151+
BaseComponent[] components = new TextComponent[] { new TextComponent(nbt) };
152+
bc.setHoverEvent(new net.md_5.bungee.api.chat.HoverEvent(net.md_5.bungee.api.chat.HoverEvent.Action.SHOW_ITEM, components));
153+
}
140154
}
141155
}
142156
}),

0 commit comments

Comments
 (0)