Fix modifying messages with Paper chat events

Previously, our wrapper for Paper chat events did not account for other plugins modifying the message component during the event lifecycle, this will translate calls between (get/set)Message to and from legacy strings. This further add a barrier hover/click events for now but those never worked with EssXChat installed anyway and will require further refactoring at a later date in order to add support.
This commit is contained in:
Josh Roy 2025-02-20 16:20:59 -05:00
parent 3025ba5c05
commit 5a839c47bc
2 changed files with 7 additions and 6 deletions

View File

@ -3,6 +3,7 @@ package net.ess3.provider.providers;
import io.papermc.paper.event.player.AsyncChatEvent;
import net.ess3.provider.AbstractChatEvent;
import net.kyori.adventure.audience.Audience;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import org.bukkit.entity.Player;
import java.util.Collections;
@ -12,12 +13,12 @@ import java.util.function.Predicate;
public class PaperChatEvent implements AbstractChatEvent {
private final AsyncChatEvent event;
private final LegacyComponentSerializer serializer;
private String fakeFormat;
private String fakeMessage;
public PaperChatEvent(final AsyncChatEvent event) {
public PaperChatEvent(final AsyncChatEvent event, final LegacyComponentSerializer serializer) {
this.event = event;
this.fakeMessage = event.signedMessage().message();
this.serializer = serializer;
}
@Override
@ -47,12 +48,12 @@ public class PaperChatEvent implements AbstractChatEvent {
@Override
public String getMessage() {
return fakeMessage;
return serializer.serialize(event.message());
}
@Override
public void setMessage(String message) {
this.fakeMessage = message;
event.message(serializer.deserialize(message));
}
@Override

View File

@ -68,7 +68,7 @@ public abstract class PaperChatListenerProvider implements Listener {
return paperChatEvent;
}
paperChatEvent = new PaperChatEvent(event);
paperChatEvent = new PaperChatEvent(event, serializer);
eventMap.put(event, paperChatEvent);
return paperChatEvent;