#java #minecraft #bukkit
Вопрос:
Я узнал, что это можно использовать n
в файле конфигурации server.properties.
К сожалению , это не соответствует моим потребностям, так как мне нужно динамически настраивать сообщение дня во время работы плагина, и я хочу его использовать event.setMotd()
, а не пытаться играть с изменением самого файла server.propertiers.
В настоящее время я делаю это с хорошо подсчитанным пробелом:
@EventHandler
public void onPing(ServerListPingEvent e) {
int rnd = r.nextInt(allMotds.size());
String tps = new DecimalFormat("0.00").format(LagProcessor.getTPS());
final String msg = "u00A73u00A7l RVA-Survival 1.16.5 u00A7ru00A77 | TPS: " tps
" u00A7ru00A76u00A7o" allMotds.get(rnd);
e.setMotd(msg);
}
В будущем это не сработает, так как я хочу, чтобы первая строка также была настраиваемой.
Я знаю, что не могу использовать Юникод u2424
, так как он печатает только фактический графический символ. n
к сожалению, здесь тоже не работает.
В своих исследованиях я не смог найти никаких решений, кроме использования server.properties для установки motd, который снова не работает здесь для меня.
Есть какие-нибудь идеи?
Ответ №1:
В случае, если лучшего ответа не будет найдено, я должен поделиться своим текущим обходным путем.
Я записал это в класс, который обрабатывает события ping:
private static String center(String ln) {
StringBuilder whiteSpace = new StringBuilder();
// trim and truncate strings
String trimmed = ln.trim();
int charTotal = trimmed.length();
final String trunc;
if (charTotal >= 60) trunc = trimmed.substring(0, 60);
else trunc = trimmed;
// count missing whitespace
int diff = 60 - charTotal;
int half = diff / 2;
int i = 1;
while (i <= half) { i ; whiteSpace.append(" "); }
// add the whitespace and make the tail end a bit longer
StringBuilder out = new StringBuilder(whiteSpace trunc whiteSpace);
while (out.length() < 62) out.append(" ");
return out.toString();
}
Тогда я использую его вот так:
@EventHandler
public void onPing(ServerListPingEvent e) {
int rnd = r.nextInt(allMotds.size());
String tps = new DecimalFormat("0.00").format(LagProcessor.getTPS());
final String msg1 = "u00A73u00A7lRVA-Survival 1.16.5 u00A7ru00A77 | TPS: " tps;
final String msg2 = "u00A7ru00A76u00A7o" allMotds.get(rnd);
e.setMotd(center(msg1) msg2);
}
Примечание: Имейте в виду, что центрирование технически не имеет значения, и что важно, так это метод, который вы реализуете, добавляя правильное количество завершающего пробела.
Для вашего удобства это будет выглядеть так:
private static String fillLine(String ln) {
// trim and truncate string
String trimmed = ln.trim();
int charTotal = trimmed.length();
final String trunc;
if (charTotal >= 61) trunc = trimmed.substring(0, 61);
else trunc = trimmed;
// add the whitespace tail
StringBuilder out = new StringBuilder(trunc);
while (out.length() < 62) out.append(" ");
return out.toString();
}