.color(TextColor.YELLOW); List<RegisteredServer> infos = ImmutableList.copyOf(server.getAllServers()); for (int i = 0; i < infos.size(); i++) {
@Override public void execute(CommandSource source, String @NonNull [] args) { if (args.length != 0) { source.sendMessage(TextComponent.of("/velocity plugins", TextColor.RED)); return; } List<PluginContainer> plugins = ImmutableList.copyOf(server.getPluginManager().getPlugins()); int pluginCount = plugins.size(); if (pluginCount == 0) { source.sendMessage(TextComponent.of("No plugins installed.", TextColor.YELLOW)); return; } TextComponent.Builder output = TextComponent.builder("Plugins: ") .color(TextColor.YELLOW); for (int i = 0; i < pluginCount; i++) { PluginContainer plugin = plugins.get(i); output.append(componentForPlugin(plugin.getDescription())); if (i + 1 < pluginCount) { output.append(TextComponent.of(", ")); } } source.sendMessage(output.build()); }
@Test void testSimple() { final FriendlyComponentRenderer<ComponentRenderer.Context> renderer = FriendlyComponentRenderer.from((locale, key) -> new MessageFormat(TRANSLATIONS.get(locale, key), locale)); assertEquals( TextComponent.builder("This is a test.") .color(TextColor.YELLOW) .build(), renderer.render( TranslatableComponent .builder() .key("test") .color(TextColor.YELLOW) .build(), new ComponentRenderer.Context() { @Override public @NonNull Locale locale() { return Locale.US; } } ) ); }
.color(TextColor.YELLOW) .append(TextComponent.builder() .content("Hello ") TextComponent.builder() .content("world") .color(TextColor.GREEN) .build() TextComponent.builder() .content("") .color(TextColor.YELLOW) .append(TextComponent.builder() .content("Hello ") TextComponent.builder() .content("world") .color(TextColor.GREEN) .build()
.color(TextColor.DARK_AQUA) .append(TextComponent.of(version.getVersion()).decoration(TextDecoration.BOLD, false)) .build(); .content("Visit the ") .append(TextComponent.builder("Velocity website") .color(TextColor.GREEN) .clickEvent( new ClickEvent(ClickEvent.Action.OPEN_URL, "https://www.velocitypowered.com")) .append(TextComponent.of(" or the ").resetStyle()) .append(TextComponent.builder("Velocity GitHub") .color(TextColor.GREEN) .clickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://github.com/VelocityPowered/Velocity"))
@Test void testComplex() { final FriendlyComponentRenderer<ComponentRenderer.Context> renderer = FriendlyComponentRenderer.from((locale, key) -> new MessageFormat(TRANSLATIONS.get(locale, key), locale)); assertEquals( TextComponent.builder("") .color(TextColor.YELLOW) .append(TextComponent.of("kashike")) .append(TextComponent.of(" and ")) .append(TextComponent.of("lucko")) .append(TextComponent.of(" are cats.")) .build(), renderer.render( TranslatableComponent .builder() .key("cats") .args( TextComponent.of("kashike"), TextComponent.of("lucko") ) .color(TextColor.YELLOW) .build(), new ComponentRenderer.Context() { @Override public @NonNull Locale locale() { return Locale.US; } } ) ); }
/** * Handles unexpected disconnects. * @param server the server we disconnected from * @param disconnect the disconnect packet */ public void handleConnectionException(RegisteredServer server, Disconnect disconnect) { Component disconnectReason = ComponentSerializers.JSON.deserialize(disconnect.getReason()); String plainTextReason = PASS_THRU_TRANSLATE.serialize(disconnectReason); if (connectedServer != null && connectedServer.getServerInfo().equals(server.getServerInfo())) { logger.error("{}: kicked from server {}: {}", this, server.getServerInfo().getName(), plainTextReason); handleConnectionException(server, disconnectReason, TextComponent.builder() .content("Kicked from " + server.getServerInfo().getName() + ": ") .color(TextColor.RED) .append(disconnectReason) .build()); } else { logger.error("{}: disconnected while connecting to {}: {}", this, server.getServerInfo().getName(), plainTextReason); handleConnectionException(server, disconnectReason, TextComponent.builder() .content("Can't connect to server " + server.getServerInfo().getName() + ": ") .color(TextColor.RED) .append(disconnectReason) .build()); } }
@Test void testDeserializeText() { assertEquals(TextComponent.of("Hello, world."), GsonComponentSerializer.INSTANCE.deserialize("{\"text\":\"Hello, world.\"}")); assertEquals(TextComponent.builder("c") .color(TextColor.GOLD) .append(TextComponent.of("o", TextColor.DARK_AQUA)) .append(TextComponent.of("l", TextColor.LIGHT_PURPLE)) .append(TextComponent.of("o", TextColor.DARK_PURPLE)) .append(TextComponent.of("u", TextColor.BLUE)) .append(TextComponent.of("r", TextColor.DARK_GREEN)) .append(TextComponent.of("s", TextColor.RED)) .build(), GsonComponentSerializer.INSTANCE.deserialize("[{\"text\":\"c\",\"color\":\"gold\"},{\"text\":\"o\",\"color\":\"dark_aqua\"},{\"text\":\"l\",\"color\":\"light_purple\"},{\"text\":\"o\",\"color\":\"dark_purple\"},{\"text\":\"u\",\"color\":\"blue\"},{\"text\":\"r\",\"color\":\"dark_green\"},{\"text\":\"s\",\"color\":\"red\"}]")); assertEquals(TextComponent.builder("This is a test.") .color(TextColor.DARK_PURPLE) .hoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextComponent.of("A test."))) .append(TextComponent.of(" ")) .append(TextComponent.of("A what?", TextColor.DARK_AQUA)) .build(), GsonComponentSerializer.INSTANCE.deserialize("[{\"text\":\"This is a test.\",\"color\":\"dark_purple\",\"hoverEvent\":{\"action\":\"show_text\",\"value\":{\"text\":\"A test.\"}}},{\"text\":\" \"},{\"text\":\"A what?\",\"color\":\"dark_aqua\"}]")); }
@Test void testCompound() { final TextComponent component = TextComponent.builder() .content("hi there ") .append(TextComponent.builder("this bit is green ") .color(TextColor.GREEN) .build()) .append(TextComponent.of("this isn't ").resetStyle()) .append(TextComponent.builder("and woa, this is again") .color(TextColor.GREEN) .build()) .build(); assertEquals("hi there &athis bit is green &rthis isn't &aand woa, this is again", LegacyComponentSerializer.INSTANCE.serialize(component, '&')); }
@Override public void sendLink(String url) { TextComponent msg = TextComponent.builder(url) .color(TextColor.GRAY) .clickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, url)) .build(); broadcast(msg); }
@Test void testMake() { final TextComponent component = TextComponent.make(builder -> { builder.content("foo"); builder.color(TextColor.DARK_PURPLE); }); assertEquals("foo", component.content()); assertEquals(TextColor.DARK_PURPLE, component.color()); }
@Test void testMake_content() { final TextComponent component = TextComponent.make("foo", builder -> builder.color(TextColor.DARK_PURPLE)); assertEquals("foo", component.content()); assertEquals(TextColor.DARK_PURPLE, component.color()); }
@Test void testCopy() { final TextComponent.Builder component = TextComponent.builder().content("").color(TextColor.GRAY); component.append(TextComponent.builder().content("This is a test").color(TextColor.DARK_PURPLE).build()); component.append(TextComponent.builder().content(" ").build()); component.append(TextComponent.builder().content("A what?").color(TextColor.DARK_AQUA).clickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, "/what")).build()); assertEquals(component.build(), component.build().copy()); }
/** * Creates a text component with content, and optional color and decorations. * * @param content the plain text content * @param color the color * @param decorations the decorations * @return the text component */ public static TextComponent of(final @NonNull String content, final @Nullable TextColor color, final @NonNull Set<TextDecoration> decorations) { return builder(content).color(color).decorations(decorations, true).build(); }
/** * Creates a text component with content, and optional color and decorations. * * @param content the plain text content * @param color the color * @param decorations the decorations * @return the text component */ public static TextComponent of(final @NonNull String content, final @Nullable TextColor color, final @NonNull Set<TextDecoration> decorations) { return builder(content).color(color).decorations(decorations, true).build(); }
/** * Creates a text component with content, and optional color and decorations. * * @param content the plain text content * @param color the color * @param decorations the decorations * @return the text component */ public static TextComponent of(final @NonNull String content, final @Nullable TextColor color, final @NonNull Set<TextDecoration> decorations) { return builder(content).color(color).decorations(decorations, true).build(); }
@Subscribe(order = PostOrder.FIRST) public void onEnable(ProxyInitializeEvent e) { this.proxy.getCommandManager().register((sender, args) -> { if (!sender.hasPermission("spark")) { TextComponent msg = TextComponent.builder("You do not have permission to use this command.").color(TextColor.RED).build(); sender.sendMessage(msg); return; } SparkVelocityPlugin.this.sparkPlatform.executeCommand(sender, args); }, "sparkv", "sparkvelocity"); } }
@Test void testSerializeDeserialize() { final TextComponent expected = TextComponent.builder() .content("Hello!") .color(TextColor.DARK_PURPLE) .decoration(TextDecoration.BOLD, TextDecoration.State.TRUE) .clickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, "https://google.com/")) .hoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, TextComponent.builder().content(":o").color(TextColor.DARK_AQUA).build())) .build(); final String json = GsonComponentSerializer.INSTANCE.serialize(expected); assertEquals(expected, GsonComponentSerializer.INSTANCE.deserialize(json)); }