From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Aikar Date: Sun, 28 Jun 2020 19:08:41 -0400 Subject: [PATCH] Improve Legacy Component serialization size Don't constantly send format: false for all formatting options when parent already has it false diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java b/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java index a423e3bf3906d3114af885c48d0b45d88d7e7d8b..a223d70b8ae6e6c238877d262b663c8f38d7680c 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftChatMessage.java @@ -45,6 +45,7 @@ public final class CraftChatMessage { // Separate pattern with no group 3, new lines are part of previous string private static final Pattern INCREMENTAL_PATTERN_KEEP_NEWLINES = Pattern.compile("(" + String.valueOf(org.bukkit.ChatColor.COLOR_CHAR) + "[0-9a-fk-orx])|((?:(?:https?):\\/\\/)?(?:[-\\w_\\.]{2,}\\.[a-z]{2,4}.*?(?=[\\.\\?!,;:]?(?:[" + String.valueOf(org.bukkit.ChatColor.COLOR_CHAR) + " ]|$))))", Pattern.CASE_INSENSITIVE); // ChatColor.b does not explicitly reset, its more of empty + private static final ChatModifier EMPTY = ChatModifier.b; // Paper - OBFHELPER private static final ChatModifier RESET = ChatModifier.b.setBold(false).setItalic(false).setUnderline(false).setStrikethrough(false).setRandom(false); private final List list = new ArrayList(); @@ -111,7 +112,25 @@ public final class CraftChatMessage { throw new AssertionError("Unexpected message format"); } } else { // Color resets formatting - modifier = RESET.setColor(format); + // Paper start - improve legacy formatting + ChatModifier previous = modifier; + modifier = EMPTY.setColor(format); + if (previous.isBold()) { + modifier = modifier.setBold(false); + } + if (previous.isItalic()) { + modifier = modifier.setItalic(false); + } + if (previous.isRandom()) { + modifier = modifier.setRandom(false); + } + if (previous.isStrikethrough()) { + modifier = modifier.setStrikethrough(false); + } + if (previous.isUnderlined()) { + modifier = modifier.setUnderline(false); + } + // Paper end } needsAdd = true; break;