Skip to content

Commit 2e50819

Browse files
committed
move component convert impl to seperated classes
1 parent aba1110 commit 2e50819

6 files changed

Lines changed: 151 additions & 84 deletions

File tree

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

Lines changed: 13 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,8 @@
11
package top.mrxiaom.pluginbase.utils.adventure.serializer;
22

33
import net.kyori.adventure.text.Component;
4-
import net.kyori.adventure.text.TranslationArgument;
5-
import net.kyori.adventure.text.object.ObjectContents;
6-
import net.kyori.adventure.text.object.PlayerHeadObjectContents;
7-
import net.kyori.adventure.text.object.SpriteObjectContents;
84
import net.md_5.bungee.api.chat.*;
9-
import net.md_5.bungee.api.chat.objects.PlayerObject;
10-
import net.md_5.bungee.api.chat.objects.SpriteObject;
11-
import net.md_5.bungee.api.chat.player.Profile;
12-
import net.md_5.bungee.api.chat.player.Property;
13-
14-
import java.util.ArrayList;
15-
import java.util.List;
16-
import java.util.UUID;
5+
import top.mrxiaom.pluginbase.utils.adventure.serializer.converter.*;
176

187
public class BungeeComponentSerializer {
198
public static BaseComponent serialize(Component input) {
@@ -28,89 +17,29 @@ public static BaseComponent serialize(Component input) {
2817
return component;
2918
}
3019

31-
@SuppressWarnings({"deprecation"})
3220
private static BaseComponent convert(Component input) {
3321
if (input instanceof net.kyori.adventure.text.TextComponent) {
3422
return new TextComponent(((net.kyori.adventure.text.TextComponent) input).content());
3523
}
36-
if (input instanceof net.kyori.adventure.text.TranslatableComponent) {
37-
String key = ((net.kyori.adventure.text.TranslatableComponent) input).key();
38-
List<TranslationArgument> arguments = ((net.kyori.adventure.text.TranslatableComponent) input).arguments();
39-
List<Object> args = new ArrayList<>();
40-
for (TranslationArgument argument : arguments) {
41-
args.add(argument.value());
42-
}
43-
TranslatableComponent component = new TranslatableComponent(key, args.toArray());
44-
try {
45-
String fallback = ((net.kyori.adventure.text.TranslatableComponent) input).fallback();
46-
if (fallback != null) {
47-
component.setFallback(fallback);
48-
}
49-
} catch (LinkageError ignored) {
50-
}
51-
return component;
52-
}
5324
try {
54-
if (input instanceof net.kyori.adventure.text.KeybindComponent) {
55-
String keybind = ((net.kyori.adventure.text.KeybindComponent) input).keybind();
56-
return new KeybindComponent(keybind);
57-
}
25+
BaseComponent result = ConvertTranslatable.convert(input);
26+
if (result != null) return result;
27+
} catch (LinkageError ignored) {}
28+
try {
29+
BaseComponent result = ConvertKeybind.convert(input);
30+
if (result != null) return result;
5831
} catch (LinkageError ignored) {}
5932
try {
60-
if (input instanceof net.kyori.adventure.text.ScoreComponent) {
61-
String name = ((net.kyori.adventure.text.ScoreComponent) input).name();
62-
String objective = ((net.kyori.adventure.text.ScoreComponent) input).objective();
63-
String value = ((net.kyori.adventure.text.ScoreComponent) input).value();
64-
if (value != null) {
65-
return new ScoreComponent(name, objective, value);
66-
} else {
67-
return new ScoreComponent(name, objective);
68-
}
69-
}
33+
BaseComponent result = ConvertScore.convert(input);
34+
if (result != null) return result;
7035
} catch (LinkageError ignored) {}
7136
try {
72-
if (input instanceof net.kyori.adventure.text.SelectorComponent) {
73-
String selector = ((net.kyori.adventure.text.SelectorComponent) input).pattern();
74-
Component separator = ((net.kyori.adventure.text.SelectorComponent) input).separator();
75-
if (separator != null) {
76-
return new SelectorComponent(selector, serialize(separator));
77-
} else {
78-
return new SelectorComponent(selector);
79-
}
80-
}
37+
BaseComponent result = ConvertSelector.convert(input);
38+
if (result != null) return result;
8139
} catch (LinkageError ignored) {}
8240
try {
83-
if (input instanceof net.kyori.adventure.text.ObjectComponent) {
84-
ObjectContents contents = ((net.kyori.adventure.text.ObjectComponent) input).contents();
85-
if (contents instanceof PlayerHeadObjectContents) {
86-
PlayerHeadObjectContents head = (PlayerHeadObjectContents) contents;
87-
String name = head.name();
88-
UUID uuid = head.id();
89-
boolean hat = head.hat();
90-
List<PlayerHeadObjectContents.ProfileProperty> props = head.profileProperties();
91-
Property[] properties = new Property[props.size()];
92-
for (int i = 0; i < props.size(); i++) {
93-
String propName = props.get(i).name();
94-
String propValue = props.get(i).value();
95-
String propSign = props.get(i).signature();
96-
if (propSign != null) {
97-
properties[i] = new Property(propName, propValue, propSign);
98-
} else {
99-
properties[i] = new Property(propName, propValue);
100-
}
101-
}
102-
Profile profile = new Profile(properties);
103-
profile.setName(name);
104-
profile.setUuid(uuid);
105-
return new ObjectComponent(new PlayerObject(profile, hat));
106-
}
107-
if (contents instanceof SpriteObjectContents) {
108-
SpriteObjectContents props = (SpriteObjectContents) contents;
109-
String atlas = props.atlas().asString();
110-
String sprite = props.sprite().asString();
111-
return new ObjectComponent(new SpriteObject(atlas, sprite));
112-
}
113-
}
41+
BaseComponent result = ConvertObject.convert(input);
42+
if (result != null) return result;
11443
} catch (LinkageError ignored) {}
11544
return new TextComponent("");
11645
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package top.mrxiaom.pluginbase.utils.adventure.serializer.converter;
2+
3+
import net.kyori.adventure.text.Component;
4+
import net.md_5.bungee.api.chat.BaseComponent;
5+
import net.md_5.bungee.api.chat.KeybindComponent;
6+
7+
public class ConvertKeybind {
8+
public static BaseComponent convert(Component input) {
9+
if (input instanceof net.kyori.adventure.text.KeybindComponent) {
10+
String keybind = ((net.kyori.adventure.text.KeybindComponent) input).keybind();
11+
return new KeybindComponent(keybind);
12+
}
13+
return null;
14+
}
15+
}
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package top.mrxiaom.pluginbase.utils.adventure.serializer.converter;
2+
3+
import net.kyori.adventure.text.Component;
4+
import net.kyori.adventure.text.object.ObjectContents;
5+
import net.kyori.adventure.text.object.PlayerHeadObjectContents;
6+
import net.kyori.adventure.text.object.SpriteObjectContents;
7+
import net.md_5.bungee.api.chat.BaseComponent;
8+
import net.md_5.bungee.api.chat.ObjectComponent;
9+
10+
import java.util.List;
11+
import java.util.UUID;
12+
13+
public class ConvertObject {
14+
public static BaseComponent convert(Component input) {
15+
if (input instanceof net.kyori.adventure.text.ObjectComponent) {
16+
ObjectContents contents = ((net.kyori.adventure.text.ObjectComponent) input).contents();
17+
if (contents instanceof PlayerHeadObjectContents) {
18+
PlayerHeadObjectContents head = (PlayerHeadObjectContents) contents;
19+
String name = head.name();
20+
UUID uuid = head.id();
21+
boolean hat = head.hat();
22+
List<PlayerHeadObjectContents.ProfileProperty> props = head.profileProperties();
23+
net.md_5.bungee.api.chat.player.Property[] properties = new net.md_5.bungee.api.chat.player.Property[props.size()];
24+
for (int i = 0; i < props.size(); i++) {
25+
String propName = props.get(i).name();
26+
String propValue = props.get(i).value();
27+
String propSign = props.get(i).signature();
28+
if (propSign != null) {
29+
properties[i] = new net.md_5.bungee.api.chat.player.Property(propName, propValue, propSign);
30+
} else {
31+
properties[i] = new net.md_5.bungee.api.chat.player.Property(propName, propValue);
32+
}
33+
}
34+
net.md_5.bungee.api.chat.player.Profile profile = new net.md_5.bungee.api.chat.player.Profile(properties);
35+
profile.setName(name);
36+
profile.setUuid(uuid);
37+
return new ObjectComponent(new net.md_5.bungee.api.chat.objects.PlayerObject(profile, hat));
38+
}
39+
if (contents instanceof SpriteObjectContents) {
40+
SpriteObjectContents props = (SpriteObjectContents) contents;
41+
String atlas = props.atlas().asString();
42+
String sprite = props.sprite().asString();
43+
return new ObjectComponent(new net.md_5.bungee.api.chat.objects.SpriteObject(atlas, sprite));
44+
}
45+
}
46+
return null;
47+
}
48+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package top.mrxiaom.pluginbase.utils.adventure.serializer.converter;
2+
3+
import net.kyori.adventure.text.Component;
4+
import net.md_5.bungee.api.chat.BaseComponent;
5+
import net.md_5.bungee.api.chat.ScoreComponent;
6+
7+
public class ConvertScore {
8+
@SuppressWarnings({"deprecation"})
9+
public static BaseComponent convert(Component input) {
10+
if (input instanceof net.kyori.adventure.text.ScoreComponent) {
11+
String name = ((net.kyori.adventure.text.ScoreComponent) input).name();
12+
String objective = ((net.kyori.adventure.text.ScoreComponent) input).objective();
13+
String value = ((net.kyori.adventure.text.ScoreComponent) input).value();
14+
if (value != null) {
15+
return new ScoreComponent(name, objective, value);
16+
} else {
17+
return new ScoreComponent(name, objective);
18+
}
19+
}
20+
return null;
21+
}
22+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package top.mrxiaom.pluginbase.utils.adventure.serializer.converter;
2+
3+
import net.kyori.adventure.text.Component;
4+
import net.md_5.bungee.api.chat.BaseComponent;
5+
import net.md_5.bungee.api.chat.SelectorComponent;
6+
import top.mrxiaom.pluginbase.utils.adventure.serializer.BungeeComponentSerializer;
7+
8+
public class ConvertSelector {
9+
public static BaseComponent convert(Component input) {
10+
if (input instanceof net.kyori.adventure.text.SelectorComponent) {
11+
String selector = ((net.kyori.adventure.text.SelectorComponent) input).pattern();
12+
Component separator = ((net.kyori.adventure.text.SelectorComponent) input).separator();
13+
if (separator != null) {
14+
return new SelectorComponent(selector, BungeeComponentSerializer.serialize(separator));
15+
} else {
16+
return new SelectorComponent(selector);
17+
}
18+
}
19+
return null;
20+
}
21+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package top.mrxiaom.pluginbase.utils.adventure.serializer.converter;
2+
3+
import net.kyori.adventure.text.Component;
4+
import net.kyori.adventure.text.TranslationArgument;
5+
import net.md_5.bungee.api.chat.BaseComponent;
6+
import net.md_5.bungee.api.chat.TranslatableComponent;
7+
8+
import java.util.ArrayList;
9+
import java.util.List;
10+
11+
public class ConvertTranslatable {
12+
public static BaseComponent convert(Component input) {
13+
if (input instanceof net.kyori.adventure.text.TranslatableComponent) {
14+
String key = ((net.kyori.adventure.text.TranslatableComponent) input).key();
15+
List<TranslationArgument> arguments = ((net.kyori.adventure.text.TranslatableComponent) input).arguments();
16+
List<Object> args = new ArrayList<>();
17+
for (TranslationArgument argument : arguments) {
18+
args.add(argument.value());
19+
}
20+
TranslatableComponent component = new TranslatableComponent(key, args.toArray());
21+
try {
22+
String fallback = ((net.kyori.adventure.text.TranslatableComponent) input).fallback();
23+
if (fallback != null) {
24+
component.setFallback(fallback);
25+
}
26+
} catch (LinkageError ignored) {
27+
}
28+
return component;
29+
}
30+
return null;
31+
}
32+
}

0 commit comments

Comments
 (0)