Correctly style message component #9
1 changed files with 10 additions and 22 deletions
|
@ -6,26 +6,11 @@ import net.kyori.adventure.text.SelectorComponent;
|
||||||
import net.kyori.adventure.text.TextComponent;
|
import net.kyori.adventure.text.TextComponent;
|
||||||
import net.kyori.adventure.text.event.ClickEvent;
|
import net.kyori.adventure.text.event.ClickEvent;
|
||||||
import net.kyori.adventure.text.event.HoverEvent;
|
import net.kyori.adventure.text.event.HoverEvent;
|
||||||
import net.kyori.adventure.text.format.Style;
|
|
||||||
import net.kyori.adventure.text.renderer.TranslatableComponentRenderer;
|
import net.kyori.adventure.text.renderer.TranslatableComponentRenderer;
|
||||||
import org.jetbrains.annotations.NotNull;
|
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.
|
// 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> {
|
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
|
@Override
|
||||||
protected @NotNull Component renderSelector(final @NotNull SelectorComponent component,
|
protected @NotNull Component renderSelector(final @NotNull SelectorComponent component,
|
||||||
final @NotNull CustomChatContext context) {
|
final @NotNull CustomChatContext context) {
|
||||||
|
@ -45,7 +30,7 @@ public final class CustomChatComponentRenderer extends TranslatableComponentRend
|
||||||
final @NotNull CustomChatContext context) {
|
final @NotNull CustomChatContext context) {
|
||||||
final String content = component.content();
|
final String content = component.content();
|
||||||
if (content.equals("MESSAGE")) {
|
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());
|
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));
|
builder.clickEvent(this.mergeClickEvent(component.clickEvent(), context));
|
||||||
}
|
}
|
||||||
|
|
||||||
// super#mergeStyle requires a ComponentBuilder on mergeStyle, this does not
|
private Component mergeMessage(final Component root, final Component msg, final CustomChatContext context) {
|
||||||
private Component mergeStyle(final Component root, final Component that, final CustomChatContext context) {
|
Component result = msg.applyFallbackStyle(root.style()); // applyFallbackStyle will apply everything that isn't content
|
||||||
final Component result = that.mergeStyle(root, MERGES)
|
|
||||||
.clickEvent(mergeClickEvent(root.clickEvent(), context));
|
|
||||||
|
|
||||||
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) {
|
if (hoverEvent != null) {
|
||||||
return result.hoverEvent(hoverEvent.withRenderedValue(this, context));
|
result = result.hoverEvent(hoverEvent.withRenderedValue(this, context));
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue