/** * Converts a {@link Title} to 3 instances of {@link TitleMessage}. * * @param title the title to convert * @return 3 messages: the first sets the title, the second sets the subtitle, and the third * sets the fade/stay/fade durations */ public static TitleMessage[] fromTitle(Title title) { TextMessage titleMessage = asTextMessage(BaseComponent.toLegacyText(title.getTitle())); TextMessage subTitleMessage = title.getSubtitle() != null ? asTextMessage( BaseComponent.toLegacyText(title.getSubtitle())) : asTextMessage(null); return new TitleMessage[]{ new TitleMessage(Action.TITLE, titleMessage), new TitleMessage(Action.SUBTITLE, subTitleMessage), new TitleMessage(Action.TIMES, title.getFadeIn(), title.getStay(), title .getFadeOut()) }; }
if ( component.getColorRaw() != null ) object.addProperty( "color", component.getColorRaw().getName() ); if ( component.isBoldRaw() != null ) object.addProperty( "bold", component.isBoldRaw() ); if ( component.isItalicRaw() != null ) object.addProperty( "italic", component.isItalicRaw() ); if ( component.isUnderlinedRaw() != null ) object.addProperty( "underlined", component.isUnderlinedRaw() ); if ( component.isStrikethroughRaw() != null ) object.addProperty( "strikethrough", component.isStrikethroughRaw() ); if ( component.isObfuscatedRaw() != null ) object.addProperty( "obfuscated", component.isObfuscatedRaw() ); if ( component.getInsertion() != null ) object.addProperty( "insertion", component.getInsertion() ); if ( component.getExtra() != null )
setClickEvent( component.getClickEvent() ); setHoverEvent( component.getHoverEvent() ); setColor( component.getColorRaw() ); setBold( component.isBoldRaw() ); setItalic( component.isItalicRaw() ); setUnderlined( component.isUnderlinedRaw() ); setStrikethrough( component.isStrikethroughRaw() ); setObfuscated( component.isObfuscatedRaw() ); setInsertion( component.getInsertion() );
BaseComponent(BaseComponent old) { copyFormatting( old, FormatRetention.ALL, true ); if ( old.getExtra() != null ) { for ( BaseComponent extra : old.getExtra() ) { addExtra( extra.duplicate() ); } } }
/** * Retains only the specified formatting. * * @param retention the formatting to retain */ public void retain(FormatRetention retention) { if ( retention == FormatRetention.FORMATTING || retention == FormatRetention.NONE ) { setClickEvent( null ); setHoverEvent( null ); } if ( retention == FormatRetention.EVENTS || retention == FormatRetention.NONE ) { setColor( null ); setBold( null ); setItalic( null ); setUnderlined( null ); setStrikethrough( null ); setObfuscated( null ); setInsertion( null ); } }
@Override public BaseComponent subject(Map.Entry<String, String> subject) { String name; try { name = pex.getManager().getSubjects(subject.getKey()).persistentData().getData(subject.getValue(), null).get().getOptions(PermissionsEx.GLOBAL_CONTEXT).get("name"); } catch (ExecutionException | InterruptedException e) { throw new RuntimeException(e); } BaseComponent nameText; if (name != null) { nameText = new TextComponent(""); final BaseComponent child = new TextComponent(subject.getValue()); child.setColor(ChatColor.GRAY); nameText.addExtra(child); nameText.addExtra("/"); nameText.addExtra(name); } else { nameText = new TextComponent(subject.getValue()); } // <bold>{type}>/bold>:{identifier}/{name} (on click: /pex {type} {identifier} BaseComponent ret = new TextComponent(""); BaseComponent typeComponent = new TextComponent(subject.getKey()); typeComponent.setBold(true); ret.addExtra(typeComponent); ret.addExtra(" "); ret.addExtra(nameText); ret.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new BaseComponent[]{tr(t("Click to view more info"))})); ret.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/pex " + subject.getKey() + " " + subject.getValue() + " info")); return ret; }
@Override public BaseComponent button(ButtonType type, Translatable label, @Nullable Translatable tooltip, String command, boolean execute) { BaseComponent builder = tr(label); ChatColor textColor; switch (type) { case POSITIVE: textColor = ChatColor.GREEN; break; case NEGATIVE: textColor = ChatColor.RED; break; case NEUTRAL: textColor = ChatColor.AQUA; break; default: throw new IllegalArgumentException("Provided with unknown ButtonType " + type); } builder.setColor(textColor); if (tooltip != null) { builder.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new BaseComponent[]{tr(tooltip)})); } builder.setClickEvent(new ClickEvent(execute ? ClickEvent.Action.RUN_COMMAND : ClickEvent.Action.SUGGEST_COMMAND, command)); return builder; }
@Override public BaseComponent ladder(RankLadder ladder) { BaseComponent ret = new TextComponent(ladder.getName()); ret.setBold(true); ret.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new BaseComponent[]{tr(t("click here to view more info"))})); ret.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/pex rank " + ladder.getName())); return ret; }
public BaseComponent getComponent() { BaseComponent msg = new TextComponent(getDisplayName()); msg.setClickEvent(new ClickEvent(ClickEvent.Action.SUGGEST_COMMAND, "/rpgitem " + getName())); HoverEvent hover = new HoverEvent(HoverEvent.Action.SHOW_ITEM, new BaseComponent[]{new TextComponent(ItemStackUtils.itemToJson(toItemStack()))}); msg.setHoverEvent(hover); return msg; }
/** * Sets the color of the current part. * * @param color the new color * @return this ComponentBuilder for chaining */ public ComponentBuilder color(ChatColor color) { current.setColor( color ); return this; }
private static void processTranslate(BaseComponent component) { if (component instanceof TranslatableComponent) { String oldTranslate = ((TranslatableComponent) component).getTranslate(); String newTranslate; newTranslate = MappingData.translateMapping.get(oldTranslate); if (newTranslate == null) MappingData.mojangTranslation.get(oldTranslate); if (newTranslate != null) { ((TranslatableComponent) component).setTranslate(newTranslate); } if (((TranslatableComponent) component).getWith() != null) { for (BaseComponent baseComponent : ((TranslatableComponent) component).getWith()) { processTranslate(baseComponent); } } } if (component.getHoverEvent() != null) { for (BaseComponent baseComponent : component.getHoverEvent().getValue()) { processTranslate(baseComponent); } } if (component.getExtra() != null) { for (BaseComponent baseComponent : component.getExtra()) { processTranslate(baseComponent); } } } }
/** * Retains only the specified formatting. Text is not modified. * * @param retention the formatting to retain * @return this ComponentBuilder for chaining */ public ComponentBuilder retain(FormatRetention retention) { BaseComponent previous = current; switch ( retention ) { case NONE: current = new TextComponent( current.getText() ); break; case ALL: // No changes are required break; case EVENTS: current = new TextComponent( current.getText() ); current.setInsertion( previous.getInsertion() ); current.setClickEvent( previous.getClickEvent() ); current.setHoverEvent( previous.getHoverEvent() ); break; case FORMATTING: current.setClickEvent( null ); current.setHoverEvent( null ); break; } return this; }
/** * Sets the hover event for the current part. * * @param hoverEvent the hover event * @return this ComponentBuilder for chaining */ public ComponentBuilder event(HoverEvent hoverEvent) { current.setHoverEvent( hoverEvent ); return this; }
@Override public BaseComponent permission(String permission, int value) { ChatColor valueColor; if (value > 0) { valueColor = ChatColor.GREEN; } else if (value < 0) { valueColor = ChatColor.RED; } else { valueColor = ChatColor.GRAY; } BaseComponent ret = new TextComponent(""); BaseComponent perm = new TextComponent(permission); perm.setColor(valueColor); ret.addExtra(perm); ret.addExtra(EQUALS_SIGN); ret.addExtra(String.valueOf(value)); return ret; }
/** * Appends a text element to the component. The text will inherit this * component's formatting * * @param text the text to append */ public void addExtra(String text) { addExtra( new TextComponent( text ) ); }
/** * Sets the click event for the current part. * * @param clickEvent the click event * @return this ComponentBuilder for chaining */ public ComponentBuilder event(ClickEvent clickEvent) { current.setClickEvent( clickEvent ); return this; }
/** * Sets whether the current part is bold. * * @param bold whether this part is bold * @return this ComponentBuilder for chaining */ public ComponentBuilder bold(boolean bold) { current.setBold( bold ); return this; }
component.setColor( ChatColor.valueOf( object.get( "color" ).getAsString().toUpperCase( Locale.ROOT ) ) ); component.setBold( object.get( "bold" ).getAsBoolean() ); component.setItalic( object.get( "italic" ).getAsBoolean() ); component.setUnderlined( object.get( "underlined" ).getAsBoolean() ); component.setStrikethrough( object.get( "strikethrough" ).getAsBoolean() ); component.setObfuscated( object.get( "obfuscated" ).getAsBoolean() ); component.setInsertion( object.get( "insertion" ).getAsString() ); component.setExtra( Arrays.<BaseComponent>asList( context.<BaseComponent[]>deserialize( object.get( "extra" ), BaseComponent[].class ) ) ); component.setClickEvent( new ClickEvent( ClickEvent.Action.valueOf( event.get( "action" ).getAsString().toUpperCase( Locale.ROOT ) ), event.get( "value" ).getAsString() ) ); }; component.setHoverEvent( new HoverEvent( HoverEvent.Action.valueOf( event.get( "action" ).getAsString().toUpperCase( Locale.ROOT ) ), res ) );
@Override public BaseComponent hl(BaseComponent text) { text.setColor(ChatColor.AQUA); return text; }