Skip to content

Commit 2efe6b2

Browse files
authored
fix: pad empty lines in messages with a space for chat rendering (#1057)
Consecutive \n\n in messages.yml produced empty lines that Minecraft's chat collapses. Insert a space into empty segments so they render as visible blank lines. Closes #1051
1 parent c49655d commit 2efe6b2

2 files changed

Lines changed: 52 additions & 1 deletion

File tree

common/src/main/java/me/confuser/banmanager/common/util/Message.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public static void load(YamlConfiguration config, CommonLogger commonLogger) {
6464
for (String key : config.getConfigurationSection("messages").getKeys(true)) {
6565
String value = config.getString("messages." + key);
6666
if (value != null) {
67-
newMessages.put(key, value.replace("\\n", "\n"));
67+
newMessages.put(key, value.replace("\\n", "\n").replaceAll("(?<=\\n)(?=\\n)", " "));
6868
}
6969
}
7070

common/src/test/java/me/confuser/banmanager/common/configs/MessagesConfigTest.java

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
package me.confuser.banmanager.common.configs;
22

33
import me.confuser.banmanager.common.BasePluginTest;
4+
import me.confuser.banmanager.common.TestLogger;
5+
import me.confuser.banmanager.common.configuration.file.YamlConfiguration;
46
import me.confuser.banmanager.common.util.Message;
57
import org.junit.Test;
68

9+
import java.io.StringReader;
10+
711
import static org.junit.Assert.assertEquals;
12+
import static org.junit.Assert.assertFalse;
813

914
public class MessagesConfigTest extends BasePluginTest {
1015

@@ -15,4 +20,50 @@ public void isValid() {
1520
.get("info.ban.temporary").set("reason", "abc").set("actor", "def").set("created",
1621
"8th July").set("expires", "1d").toString());
1722
}
23+
24+
@Test
25+
public void doubleNewlineProducesNonEmptyLine() {
26+
String yaml = "messages:\n test:\n greeting: 'Hello\\n\\nWorld'";
27+
YamlConfiguration config = YamlConfiguration.loadConfiguration(new StringReader(yaml));
28+
Message.load(config, new TestLogger());
29+
30+
String result = Message.get("test.greeting").toString();
31+
32+
assertEquals("Hello\n \nWorld", result);
33+
}
34+
35+
@Test
36+
public void tripleNewlineProducesNonEmptyLines() {
37+
String yaml = "messages:\n test:\n greeting: 'Hello\\n\\n\\nWorld'";
38+
YamlConfiguration config = YamlConfiguration.loadConfiguration(new StringReader(yaml));
39+
Message.load(config, new TestLogger());
40+
41+
String result = Message.get("test.greeting").toString();
42+
43+
assertEquals("Hello\n \n \nWorld", result);
44+
}
45+
46+
@Test
47+
public void singleNewlineIsUnchanged() {
48+
String yaml = "messages:\n test:\n greeting: 'Hello\\nWorld'";
49+
YamlConfiguration config = YamlConfiguration.loadConfiguration(new StringReader(yaml));
50+
Message.load(config, new TestLogger());
51+
52+
String result = Message.get("test.greeting").toString();
53+
54+
assertEquals("Hello\nWorld", result);
55+
}
56+
57+
@Test
58+
public void noConsecutiveEmptyLinesInLoadedMessages() {
59+
String yaml = "messages:\n test:\n msg: 'Line1\\n\\nLine2\\n\\n\\nLine3'";
60+
YamlConfiguration config = YamlConfiguration.loadConfiguration(new StringReader(yaml));
61+
Message.load(config, new TestLogger());
62+
63+
String result = Message.get("test.msg").toString();
64+
65+
for (String line : result.split("\n", -1)) {
66+
assertFalse("Empty lines should contain a space for chat rendering", line.isEmpty());
67+
}
68+
}
1869
}

0 commit comments

Comments
 (0)