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.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;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue