mirror of
https://github.com/plan-player-analytics/Plan.git
synced 2024-12-21 05:50:18 +08:00
Random chat formatter work
This commit is contained in:
parent
a4553f5541
commit
8a73753944
@ -19,12 +19,15 @@ package com.djrapitops.plan.commands.subcommands;
|
||||
import com.djrapitops.plan.settings.locale.Locale;
|
||||
import com.djrapitops.plan.settings.locale.lang.CmdHelpLang;
|
||||
import com.djrapitops.plan.settings.locale.lang.CommandLang;
|
||||
import com.djrapitops.plan.utilities.chat.ChatFormatter;
|
||||
import com.djrapitops.plugin.command.CommandNode;
|
||||
import com.djrapitops.plugin.command.CommandType;
|
||||
import com.djrapitops.plugin.command.Sender;
|
||||
import com.djrapitops.plugin.utilities.Verify;
|
||||
import org.apache.commons.text.TextStringBuilder;
|
||||
|
||||
import javax.inject.Inject;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
@ -51,6 +54,18 @@ public class DevCommand extends CommandNode {
|
||||
Verify.isTrue(args.length >= 1,
|
||||
() -> new IllegalArgumentException(locale.getString(CommandLang.FAIL_REQ_ONE_ARG, Arrays.toString(this.getArguments()))));
|
||||
|
||||
sender.sendMessage("No features currently implemented in the command.");
|
||||
Object actual = sender.getSender();
|
||||
|
||||
try {
|
||||
Method method = actual.getClass().getMethod("sendMessage", String.class);
|
||||
int indent = 8;
|
||||
String msg = new TextStringBuilder().appendWithSeparators(args, " ").toString();
|
||||
method.invoke(actual, "With indent: " + indent);
|
||||
method.invoke(actual, ChatFormatter.indent(indent, msg));
|
||||
method.invoke(actual, "Centered:");
|
||||
method.invoke(actual, ChatFormatter.center(msg));
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,76 @@
|
||||
package com.djrapitops.plan.utilities.chat;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
/**
|
||||
* Formats chat messages in different ways.
|
||||
* <p>
|
||||
* Original code: https://hastebin.com/uziyajirag.avrasm
|
||||
*/
|
||||
public class ChatFormatter {
|
||||
private final static int CENTER_PX = 154;
|
||||
private final static int MAX_PX = 250;
|
||||
|
||||
public static String indent(int spaces, String message) {
|
||||
StringBuilder returnMessage = new StringBuilder();
|
||||
|
||||
String padding = StringUtils.leftPad("", spaces);
|
||||
int paddingWidth = getPxMessageWidth(padding);
|
||||
String[] parts = StringUtils.split(message, ' ');
|
||||
|
||||
int lineWidth = paddingWidth;
|
||||
StringBuilder line = new StringBuilder(padding);
|
||||
|
||||
for (String part : parts) {
|
||||
int width = getPxMessageWidth(part) + DefaultFontInfo.SPACE.getLength() + 1;
|
||||
line.append(part).append(' ');
|
||||
lineWidth += width;
|
||||
if (lineWidth > MAX_PX) {
|
||||
String finishedLine = StringUtils.chop(line.toString());
|
||||
returnMessage.append(finishedLine).append("\n");
|
||||
lineWidth = paddingWidth;
|
||||
line = new StringBuilder(padding);
|
||||
}
|
||||
}
|
||||
returnMessage.append(line.toString().trim());
|
||||
return returnMessage.toString();
|
||||
}
|
||||
|
||||
public static String center(String message) {
|
||||
if (message == null) return null;
|
||||
if (message.isEmpty()) return "";
|
||||
|
||||
int messagePxWidth = getPxMessageWidth(message);
|
||||
|
||||
int halfOfWidth = messagePxWidth / 2;
|
||||
int toCompensate = CENTER_PX - halfOfWidth;
|
||||
int spaceLength = DefaultFontInfo.SPACE.getLength() + 1;
|
||||
int compensated = 0;
|
||||
StringBuilder sb = new StringBuilder();
|
||||
while (compensated < toCompensate) {
|
||||
sb.append(" ");
|
||||
compensated += spaceLength;
|
||||
}
|
||||
return sb.toString() + message;
|
||||
}
|
||||
|
||||
public static int getPxMessageWidth(String message) {
|
||||
int messagePxSize = 0;
|
||||
boolean wasColorChar = false;
|
||||
boolean isBold = false;
|
||||
|
||||
for (char c : message.toCharArray()) {
|
||||
if (c == '\u00a7') { // §
|
||||
wasColorChar = true;
|
||||
} else if (wasColorChar) {
|
||||
wasColorChar = false;
|
||||
isBold = c == 'l' || c == 'L';
|
||||
} else {
|
||||
DefaultFontInfo dFI = DefaultFontInfo.getDefaultFontInfo(c);
|
||||
messagePxSize += isBold ? dFI.getBoldLength() : dFI.getLength();
|
||||
messagePxSize++;
|
||||
}
|
||||
}
|
||||
return messagePxSize;
|
||||
}
|
||||
}
|
@ -0,0 +1,134 @@
|
||||
package com.djrapitops.plan.utilities.chat;
|
||||
|
||||
/**
|
||||
* Contains width of characters in the chat with default font.
|
||||
* <p>
|
||||
* Original code form https://www.spigotmc.org/threads/free-code-sending-perfectly-centered-chat-message.95872/page-2
|
||||
*/
|
||||
public enum DefaultFontInfo {
|
||||
|
||||
A('A', 5),
|
||||
a('a', 5),
|
||||
B('B', 5),
|
||||
b('b', 5),
|
||||
C('C', 5),
|
||||
c('c', 5),
|
||||
D('D', 5),
|
||||
d('d', 5),
|
||||
E('E', 5),
|
||||
e('e', 5),
|
||||
F('F', 5),
|
||||
f('f', 4),
|
||||
G('G', 5),
|
||||
g('g', 5),
|
||||
H('H', 5),
|
||||
h('h', 5),
|
||||
I('I', 3),
|
||||
i('i', 1),
|
||||
J('J', 5),
|
||||
j('j', 5),
|
||||
K('K', 5),
|
||||
k('k', 4),
|
||||
L('L', 5),
|
||||
l('l', 1),
|
||||
M('M', 5),
|
||||
m('m', 5),
|
||||
N('N', 5),
|
||||
n('n', 5),
|
||||
O('O', 5),
|
||||
o('o', 5),
|
||||
P('P', 5),
|
||||
p('p', 5),
|
||||
Q('Q', 5),
|
||||
q('q', 5),
|
||||
R('R', 5),
|
||||
r('r', 5),
|
||||
S('S', 5),
|
||||
s('s', 5),
|
||||
T('T', 5),
|
||||
t('t', 4),
|
||||
U('U', 5),
|
||||
u('u', 5),
|
||||
V('V', 5),
|
||||
v('v', 5),
|
||||
W('W', 5),
|
||||
w('w', 5),
|
||||
X('X', 5),
|
||||
x('x', 5),
|
||||
Y('Y', 5),
|
||||
y('y', 5),
|
||||
Z('Z', 5),
|
||||
z('z', 5),
|
||||
NUM_1('1', 5),
|
||||
NUM_2('2', 5),
|
||||
NUM_3('3', 5),
|
||||
NUM_4('4', 5),
|
||||
NUM_5('5', 5),
|
||||
NUM_6('6', 5),
|
||||
NUM_7('7', 5),
|
||||
NUM_8('8', 5),
|
||||
NUM_9('9', 5),
|
||||
NUM_0('0', 5),
|
||||
EXCLAMATION_POINT('!', 1),
|
||||
AT_SYMBOL('@', 6),
|
||||
NUM_SIGN('#', 5),
|
||||
DOLLAR_SIGN('$', 5),
|
||||
PERCENT('%', 5),
|
||||
UP_ARROW('^', 5),
|
||||
AMPERSAND('&', 5),
|
||||
ASTERISK('*', 5),
|
||||
LEFT_PARENTHESIS('(', 4),
|
||||
RIGHT_PERENTHESIS(')', 4),
|
||||
MINUS('-', 5),
|
||||
UNDERSCORE('_', 5),
|
||||
PLUS_SIGN('+', 5),
|
||||
EQUALS_SIGN('=', 5),
|
||||
LEFT_CURL_BRACE('{', 4),
|
||||
RIGHT_CURL_BRACE('}', 4),
|
||||
LEFT_BRACKET('[', 3),
|
||||
RIGHT_BRACKET(']', 3),
|
||||
COLON(':', 1),
|
||||
SEMI_COLON(';', 1),
|
||||
DOUBLE_QUOTE('"', 3),
|
||||
SINGLE_QUOTE('\'', 1),
|
||||
LEFT_ARROW('<', 4),
|
||||
RIGHT_ARROW('>', 4),
|
||||
QUESTION_MARK('?', 5),
|
||||
SLASH('/', 5),
|
||||
BACK_SLASH('\\', 5),
|
||||
LINE('|', 1),
|
||||
TILDE('~', 5),
|
||||
TICK('`', 2),
|
||||
PERIOD('.', 1),
|
||||
COMMA(',', 1),
|
||||
SPACE(' ', 3),
|
||||
DEFAULT('a', 4);
|
||||
|
||||
private char character;
|
||||
private int length;
|
||||
|
||||
DefaultFontInfo(char character, int length) {
|
||||
this.character = character;
|
||||
this.length = length;
|
||||
}
|
||||
|
||||
public static DefaultFontInfo getDefaultFontInfo(char c) {
|
||||
for (DefaultFontInfo dFI : DefaultFontInfo.values()) {
|
||||
if (dFI.getCharacter() == c) return dFI;
|
||||
}
|
||||
return DefaultFontInfo.DEFAULT;
|
||||
}
|
||||
|
||||
public char getCharacter() {
|
||||
return this.character;
|
||||
}
|
||||
|
||||
public int getLength() {
|
||||
return this.length;
|
||||
}
|
||||
|
||||
public int getBoldLength() {
|
||||
if (this == DefaultFontInfo.SPACE) return this.getLength();
|
||||
return this.length + 1;
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user