summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeuin <[email protected]>2022-08-14 16:02:01 +0800
committerKeuin <[email protected]>2022-08-14 16:10:05 +0800
commit8bbbcdd355946b545bb4ed24bcde899f8866fea9 (patch)
tree067394d631a33dafad554d0cf1067ddf7e4218a6
parent2cfdf9021cfd3f9fce29a3db2f30ab0cb77ba3b5 (diff)
Bugfix: keep colors when converting messages.
-rw-r--r--src/main/java/com/keuin/crosslink/messaging/action/FormatAction.java3
-rw-r--r--src/main/java/com/keuin/crosslink/messaging/message/ComponentBackedMessage.java6
-rw-r--r--src/main/java/com/keuin/crosslink/messaging/message/IMessage.java11
-rw-r--r--src/main/java/com/keuin/crosslink/messaging/util/Messaging.java13
-rw-r--r--src/main/java/com/keuin/crosslink/plugin/bungee/BungeeAccessor.java7
5 files changed, 27 insertions, 13 deletions
diff --git a/src/main/java/com/keuin/crosslink/messaging/action/FormatAction.java b/src/main/java/com/keuin/crosslink/messaging/action/FormatAction.java
index cc8b554..420f2da 100644
--- a/src/main/java/com/keuin/crosslink/messaging/action/FormatAction.java
+++ b/src/main/java/com/keuin/crosslink/messaging/action/FormatAction.java
@@ -9,14 +9,12 @@ import net.kyori.adventure.text.format.TextDecoration;
public class FormatAction extends BaseReplaceAction {
public FormatAction(TextColor color) {
super((message) -> {
- // FIXME non-text-based message may lose information?
var formatted = Messaging.duplicate(message.kyoriMessage());
return IMessage.create(message.source(), message.sender(), formatted.color(color));
});
}
public FormatAction(TextDecoration decor) {
super((message) -> {
- // FIXME non-text-based message may lose information?
// FIXME clear other decorations
var formatted = Messaging.duplicate(message.kyoriMessage());
return IMessage.create(message.source(), message.sender(), formatted.decorate(decor));
@@ -24,7 +22,6 @@ public class FormatAction extends BaseReplaceAction {
}
public FormatAction(Style style) {
super((message) -> {
- // FIXME non-text-based message may lose information?
// FIXME clear other styles
var formatted = Messaging.duplicate(message.kyoriMessage());
return IMessage.create(message.source(), message.sender(), formatted.style(style));
diff --git a/src/main/java/com/keuin/crosslink/messaging/message/ComponentBackedMessage.java b/src/main/java/com/keuin/crosslink/messaging/message/ComponentBackedMessage.java
index 4353c84..c3d45ad 100644
--- a/src/main/java/com/keuin/crosslink/messaging/message/ComponentBackedMessage.java
+++ b/src/main/java/com/keuin/crosslink/messaging/message/ComponentBackedMessage.java
@@ -6,6 +6,7 @@ import com.keuin.crosslink.messaging.util.Messaging;
import com.keuin.crosslink.util.LazyEvaluated;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
+import net.md_5.bungee.api.chat.BaseComponent;
import org.jetbrains.annotations.NotNull;
import java.util.Objects;
@@ -46,5 +47,8 @@ public class ComponentBackedMessage implements IMessage {
return Messaging.duplicate(component);
}
- // FIXME implement bungeeMessage
+ @Override
+ public BaseComponent[] bungeeMessage() {
+ return Messaging.kyoriComponentToBungee(component);
+ }
}
diff --git a/src/main/java/com/keuin/crosslink/messaging/message/IMessage.java b/src/main/java/com/keuin/crosslink/messaging/message/IMessage.java
index d2340b8..6d68336 100644
--- a/src/main/java/com/keuin/crosslink/messaging/message/IMessage.java
+++ b/src/main/java/com/keuin/crosslink/messaging/message/IMessage.java
@@ -3,6 +3,7 @@ package com.keuin.crosslink.messaging.message;
import com.keuin.crosslink.messaging.endpoint.IEndpoint;
import com.keuin.crosslink.messaging.sender.ISender;
+import com.keuin.crosslink.messaging.util.Messaging;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.JoinConfiguration;
import net.kyori.adventure.text.format.Style;
@@ -23,8 +24,11 @@ public interface IMessage {
@NotNull String pureString();
+ /**
+ * This is a fallback (basic) implementation.
+ * Color information will be discarded after converting.
+ */
default Component kyoriMessage() {
- // FIXME keep color data
return Component.text().content(pureString()).build();
}
@@ -49,8 +53,11 @@ public interface IMessage {
return new ComponentBackedMessage(source, sender, component);
}
+ /**
+ * This is a fallback (basic) implementation.
+ * Color information will be discarded after converting.
+ */
default BaseComponent[] bungeeMessage() {
- // FIXME keep color data
return new ComponentBuilder().append(pureString()).create();
}
diff --git a/src/main/java/com/keuin/crosslink/messaging/util/Messaging.java b/src/main/java/com/keuin/crosslink/messaging/util/Messaging.java
index 1029fe0..ae5f04a 100644
--- a/src/main/java/com/keuin/crosslink/messaging/util/Messaging.java
+++ b/src/main/java/com/keuin/crosslink/messaging/util/Messaging.java
@@ -1,6 +1,9 @@
package com.keuin.crosslink.messaging.util;
import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
+import net.md_5.bungee.api.chat.BaseComponent;
+import net.md_5.bungee.api.chat.TextComponent;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -9,9 +12,9 @@ import java.util.regex.Pattern;
public class Messaging {
public static @NotNull Component duplicate(@NotNull Component source) {
- // FIXME non-text-based message may lose information?
Objects.requireNonNull(source);
- return Component.text().append(source).build();
+ var ser = LegacyComponentSerializer.legacySection().serialize(source);
+ return LegacyComponentSerializer.legacySection().deserialize(ser);
}
public static @Nullable String[] splitIdSelector(@NotNull String pattern) {
@@ -26,4 +29,10 @@ public class Messaging {
}
return parts;
}
+
+ public static @NotNull BaseComponent[] kyoriComponentToBungee(@NotNull Component comp) {
+ // convert between two incompatible Component objects using legacy string such as "&6Hello &b&lworld&c!"
+ return TextComponent.fromLegacyText(
+ LegacyComponentSerializer.legacySection().serialize(comp));
+ }
}
diff --git a/src/main/java/com/keuin/crosslink/plugin/bungee/BungeeAccessor.java b/src/main/java/com/keuin/crosslink/plugin/bungee/BungeeAccessor.java
index dd3fd4f..2e35426 100644
--- a/src/main/java/com/keuin/crosslink/plugin/bungee/BungeeAccessor.java
+++ b/src/main/java/com/keuin/crosslink/plugin/bungee/BungeeAccessor.java
@@ -5,11 +5,10 @@ import com.keuin.crosslink.data.PlayerInfo;
import com.keuin.crosslink.data.ServerInfo;
import com.keuin.crosslink.messaging.endpoint.IEndpoint;
import com.keuin.crosslink.messaging.endpoint.local.BungeeServerChatEndpoint;
+import com.keuin.crosslink.messaging.util.Messaging;
import com.keuin.crosslink.plugin.bungee.checker.BungeeServerStatusChecker;
import com.keuin.crosslink.plugin.common.ICoreAccessor;
import net.kyori.adventure.text.Component;
-import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
-import net.md_5.bungee.api.chat.TextComponent;
import java.util.List;
import java.util.Objects;
@@ -63,9 +62,7 @@ public class BungeeAccessor implements ICoreAccessor {
public void sendPlayerMessage(UUID playerUuid, Component message) {
var player = plugin.getProxy().getPlayer(playerUuid);
if (player == null) return;
- // convert between two incompatible Component objects using legacy string such as "&6Hello &b&lworld&c!"
- var msg = TextComponent
- .fromLegacyText(LegacyComponentSerializer.legacySection().serialize(message));
+ var msg = Messaging.kyoriComponentToBungee(message);
player.sendMessage(msg);
}
}