Correctly style message component #9

Merged
ChomeNS merged 1 commit from amy/chomensmod:1.20.1 into 1.20.1 2025-01-22 07:13:51 -05:00

View file

@ -6,26 +6,11 @@ import net.kyori.adventure.text.SelectorComponent;
import net.kyori.adventure.text.TextComponent;
import net.kyori.adventure.text.event.ClickEvent;
import net.kyori.adventure.text.event.HoverEvent;
import net.kyori.adventure.text.format.Style;
import net.kyori.adventure.text.renderer.TranslatableComponentRenderer;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Collections;
import java.util.EnumSet;
import java.util.Set;
// We don't do any translatable rendering here, but extending from that makes it easier to work with.
public final class CustomChatComponentRenderer extends TranslatableComponentRenderer<CustomChatContext> {
// Can't use this from super :(
private static final Set<Style.Merge> MERGES;
static {
final Set<Style.Merge> merges = EnumSet.allOf(Style.Merge.class);
merges.remove(Style.Merge.EVENTS);
MERGES = Collections.unmodifiableSet(merges);
}
@Override
protected @NotNull Component renderSelector(final @NotNull SelectorComponent component,
final @NotNull CustomChatContext context) {
@ -45,7 +30,7 @@ public final class CustomChatComponentRenderer extends TranslatableComponentRend
final @NotNull CustomChatContext context) {
final String content = component.content();
if (content.equals("MESSAGE")) {
return this.mergeStyle(component, context.message(), context);
return this.mergeMessage(component, context.message(), context);
}
final String arg = context.args().get(component.content());
@ -70,14 +55,17 @@ public final class CustomChatComponentRenderer extends TranslatableComponentRend
builder.clickEvent(this.mergeClickEvent(component.clickEvent(), context));
}
// super#mergeStyle requires a ComponentBuilder on mergeStyle, this does not
private Component mergeStyle(final Component root, final Component that, final CustomChatContext context) {
final Component result = that.mergeStyle(root, MERGES)
.clickEvent(mergeClickEvent(root.clickEvent(), context));
private Component mergeMessage(final Component root, final Component msg, final CustomChatContext context) {
Component result = msg.applyFallbackStyle(root.style()); // applyFallbackStyle will apply everything that isn't content
final @Nullable HoverEvent<?> hoverEvent = root.hoverEvent();
final ClickEvent clickEvent = result.clickEvent();
if (clickEvent != null) {
result = result.clickEvent(mergeClickEvent(clickEvent, context));
}
final HoverEvent<?> hoverEvent = result.hoverEvent();
if (hoverEvent != null) {
return result.hoverEvent(hoverEvent.withRenderedValue(this, context));
result = result.hoverEvent(hoverEvent.withRenderedValue(this, context));
}
return result;