1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
|
package io.github.moulberry.notenoughupdates.miscfeatures;
import io.github.moulberry.notenoughupdates.NotEnoughUpdates;
import io.github.moulberry.notenoughupdates.util.Utils;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IChatComponent;
import java.text.NumberFormat;
import java.util.HashMap;
public class DamageCommas {
private static final HashMap<Integer, ChatComponentText> replacementMap = new HashMap<>();
private static final EnumChatFormatting[] colours = {EnumChatFormatting.RED, EnumChatFormatting.GOLD, EnumChatFormatting.YELLOW, EnumChatFormatting.WHITE};
public static void tick() {
replacementMap.clear();
}
public static IChatComponent replaceName(IChatComponent name) {
if(NotEnoughUpdates.INSTANCE.config.misc.damageIndicatorStyle == 0) return name;
String formatted = name.getFormattedText();
int hashCode = formatted.hashCode();
if(replacementMap.containsKey(hashCode)) {
ChatComponentText component = replacementMap.get(hashCode);
if(component == null) return name;
return component;
}
if(formatted.length() >= 7 && formatted.startsWith("\u00A7f\u2727") &&
formatted.endsWith("\u2727\u00a7r")) {
if(NotEnoughUpdates.INSTANCE.config.misc.damageIndicatorStyle == 2) {
String numbers = Utils.cleanColour(formatted.substring(3, formatted.length()-3)).trim().replaceAll("[^0-9]", "");
try {
int damage = Integer.parseInt(numbers);
String damageString;
if(damage > 999) {
damageString = Utils.shortNumberFormat(damage, 0);
} else {
damageString = NumberFormat.getIntegerInstance().format(damage);
}
StringBuilder colouredString = new StringBuilder();
int colourIndex = 0;
for(int i=0; i<damageString.length(); i++) {
int index = damageString.length() - 1 - i;
char c = damageString.charAt(index);
if(c >= '0' && c <= '9') {
colouredString.insert(0, c);
colouredString.insert(0, colours[colourIndex++ % colours.length]);
} else {
colouredString.insert(0, c);
}
}
ChatComponentText ret = new ChatComponentText("\u00A7f\u2727"+colouredString+"\u00a7r\u2727\u00a7r");
replacementMap.put(hashCode, ret);
return ret;
} catch(NumberFormatException ignored) {}
}
StringBuilder builder = new StringBuilder();
boolean numLast = false;
boolean colLast = false;
boolean colLastLast;
int numCount = 0;
for(int i=formatted.length()-4; i>=3; i--) {
char c = formatted.charAt(i);
colLastLast = colLast;
if(c == '\u00a7') {
if(numLast) numCount--;
numLast = false;
colLast = true;
} else if(c >= '0' && c <= '9') {
numLast = true;
colLast = false;
numCount++;
} else {
if(colLast) {
replacementMap.put(hashCode, null);
return name;
}
numLast = false;
}
if(colLastLast && numLast && numCount > 1 && (numCount-1) % 3 == 0) builder.append(',');
builder.append(c);
}
ChatComponentText ret = new ChatComponentText("\u00A7f\u2727"+builder.reverse().toString()+"\u2727\u00a7r");
replacementMap.put(hashCode, ret);
return ret;
}
if(formatted.length() >= 5 && formatted.startsWith(EnumChatFormatting.GRAY.toString()) &&
formatted.endsWith(EnumChatFormatting.RESET.toString())) {
String damageS = formatted.substring(2, formatted.length()-2);
for(int i=0; i<damageS.length(); i++) {
char c = damageS.charAt(i);
if(c < '0' || c > '9') {
replacementMap.put(hashCode, null);
return name;
}
}
try {
int damage = Integer.parseInt(damageS);
String damageFormatted;
if(NotEnoughUpdates.INSTANCE.config.misc.damageIndicatorStyle == 2 && damage > 999) {
damageFormatted = Utils.shortNumberFormat(damage, 0);
} else {
damageFormatted = NumberFormat.getIntegerInstance().format(damage);
}
ChatComponentText ret = new ChatComponentText(EnumChatFormatting.GRAY+damageFormatted+EnumChatFormatting.RESET);
replacementMap.put(hashCode, ret);
return ret;
} catch(Exception e) {
replacementMap.put(hashCode, null);
return name;
}
}
replacementMap.put(hashCode, null);
return name;
}
}
|