|
5 | 5 | import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer; |
6 | 6 | import net.minestom.server.instance.block.Block; |
7 | 7 | import net.minestom.server.item.Material; |
8 | | -import net.swofty.commons.skyblock.statistics.ItemStatistic; |
9 | 8 |
|
10 | 9 | import java.math.RoundingMode; |
11 | 10 | import java.text.DecimalFormat; |
@@ -152,6 +151,85 @@ public static String profileAge(long tbf) { |
152 | 151 | return formatTimeWentBy(System.currentTimeMillis() - tbf); |
153 | 152 | } |
154 | 153 |
|
| 154 | + /** |
| 155 | + * Unescapes a string that contains standard Java escape sequences. |
| 156 | + * This is untested and may not work as expected. |
| 157 | + * |
| 158 | + * @param input the string to unescape |
| 159 | + * @return the unescaped string |
| 160 | + */ |
| 161 | + public static String unescapeJava(String input) { |
| 162 | + if (input == null) { |
| 163 | + return null; |
| 164 | + } |
| 165 | + StringBuilder sb = new StringBuilder(input.length()); |
| 166 | + for (int i = 0; i < input.length(); i++) { |
| 167 | + char c = input.charAt(i); |
| 168 | + if (c == '\\' && i < input.length() - 1) { |
| 169 | + char next = input.charAt(i + 1); |
| 170 | + switch (next) { |
| 171 | + case 'b': |
| 172 | + sb.append('\b'); |
| 173 | + i++; |
| 174 | + break; |
| 175 | + case 't': |
| 176 | + i++; |
| 177 | + break; |
| 178 | + case 'n': |
| 179 | + sb.append('\n'); |
| 180 | + i++; |
| 181 | + break; |
| 182 | + case 'f': |
| 183 | + sb.append('\f'); |
| 184 | + i++; |
| 185 | + break; |
| 186 | + case 'r': |
| 187 | + sb.append('\r'); |
| 188 | + i++; |
| 189 | + break; |
| 190 | + case '\"': |
| 191 | + sb.append('\"'); |
| 192 | + i++; |
| 193 | + break; |
| 194 | + case '\'': |
| 195 | + sb.append('\''); |
| 196 | + i++; |
| 197 | + break; |
| 198 | + case '\\': |
| 199 | + sb.append('\\'); |
| 200 | + i++; |
| 201 | + break; |
| 202 | + case 'u': |
| 203 | + // Unicode escape sequence: |
| 204 | + if (i + 5 < input.length()) { |
| 205 | + String hex = input.substring(i + 2, i + 6); |
| 206 | + try { |
| 207 | + int code = Integer.parseInt(hex, 16); |
| 208 | + sb.append((char) code); |
| 209 | + i += 5; |
| 210 | + } catch (NumberFormatException e) { |
| 211 | + // Not a valid Unicode escape, so fall back |
| 212 | + sb.append('\\').append('u'); |
| 213 | + i++; |
| 214 | + } |
| 215 | + } else { |
| 216 | + sb.append('\\').append('u'); |
| 217 | + i++; |
| 218 | + } |
| 219 | + break; |
| 220 | + default: |
| 221 | + // Unrecognized escape, skip the backslash |
| 222 | + sb.append(next); |
| 223 | + i++; |
| 224 | + break; |
| 225 | + } |
| 226 | + } else { |
| 227 | + sb.append(c); |
| 228 | + } |
| 229 | + } |
| 230 | + return sb.toString(); |
| 231 | + } |
| 232 | + |
155 | 233 | public static String getAsRomanNumeral(int num) { |
156 | 234 | if (num == 0) return ""; |
157 | 235 | int[] values = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; |
|
0 commit comments