Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 0 additions & 8 deletions Common/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,4 @@ version = "1.1.0.7"

dependencies {
api(projects.api)

testImplementation(platform("org.junit:junit-bom:5.10.0"))
testImplementation("org.junit.jupiter:junit-jupiter")
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
}

tasks.test {
useJUnitPlatform()
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,7 @@
import org.bukkit.event.inventory.InventoryType;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jspecify.annotations.NonNull;

Expand All @@ -30,41 +28,11 @@
import java.time.Duration;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class ComponentMeta implements PaperMetaUpdater {

private static final Pattern LEGACY_HEX_PATTERN = Pattern.compile("§x(§[0-9a-fA-F]){6}");
private static final Pattern HEX_SHORT_PATTERN = Pattern.compile("(?<!<)(?<!:)(?<!</)#([a-fA-F0-9]{6})");
public class ComponentMeta extends MiniMessageColorUtils implements PaperMetaUpdater {
private final MenuPlugin plugin;
private final Component RESET = Component.empty().decoration(TextDecoration.ITALIC, false);
private final MiniMessage MINI_MESSAGE = MiniMessage.builder().tags(TagResolver.builder().resolver(StandardTags.defaults()).build()).build();
private final Map<String, String> COLORS_MAPPINGS = Map.ofEntries(
Map.entry("0", "black"),
Map.entry("1", "dark_blue"),
Map.entry("2", "dark_green"),
Map.entry("3", "dark_aqua"),
Map.entry("4", "dark_red"),
Map.entry("5", "dark_purple"),
Map.entry("6", "gold"),
Map.entry("7", "gray"),
Map.entry("8", "dark_gray"),
Map.entry("9", "blue"),
Map.entry("a", "green"),
Map.entry("b", "aqua"),
Map.entry("c", "red"),
Map.entry("d", "light_purple"),
Map.entry("e", "yellow"),
Map.entry("f", "white"),
Map.entry("k", "obfuscated"),
Map.entry("l", "bold"),
Map.entry("m", "strikethrough"),
Map.entry("n", "underlined"),
Map.entry("o", "italic"),
Map.entry("r", "reset")
);
private final SimpleCache<String, Component> cache = new SimpleCache<>();
private final Method getLoreMethod;
private final Method setLoreMethod;
Expand Down Expand Up @@ -92,9 +60,6 @@ private TextDecoration.State getState(String text) {
return text.contains("&o") || text.contains("<i>") || text.contains("<em>") || text.contains("<italic>") ? TextDecoration.State.TRUE : TextDecoration.State.FALSE;
}

private void test(ItemStack itemStack){
}

@Override
public @NonNull Component getComponent(String text) {
return this.cache.get(text, ()->this.MINI_MESSAGE.deserialize(colorMiniMessage(text)));
Expand Down Expand Up @@ -202,22 +167,7 @@ private Inventory createInventoryInternal(String inventoryName, InventoryHolder
}


private String colorMiniMessage(String message) {

String newMessage = message;

// §x§r§g§b§2§f§3 → <#rgb2f3>
newMessage = convertLegacyHex(newMessage);
// &#a1b2c3 → <#a1b2c3>
newMessage = convertShorLegacyHex(newMessage);
// #a1b2c3 → <#a1b2c3>
newMessage = newMessage.replaceAll("(?<![<&])(?<!:)(?<!</)#([A-Fa-f0-9]{6})", "<#$1>");

// &a → <green>, §c → <red>, etc.
newMessage = replaceLegacyColors(newMessage);

return newMessage;
}

@Override
public void sendMessage(@NonNull CommandSender sender, @NonNull String message) {
Expand Down Expand Up @@ -259,42 +209,4 @@ public void openBook(@NonNull Player player, @NonNull String title, @NonNull Str
public String getLegacyMessage(String message) {
return LegacyComponentSerializer.legacySection().serialize(this.getComponent(message));
}

private @NotNull String convertLegacyHex(String message) {
Matcher matcher = LEGACY_HEX_PATTERN.matcher(message);
StringBuilder sb = new StringBuilder();

while (matcher.find()) {
String hex = matcher.group().replaceAll("§x|§", "");
matcher.appendReplacement(sb, "<#" + hex + ">");
}

matcher.appendTail(sb);
return sb.toString();
}

private @NotNull String convertShorLegacyHex(String message) {
Matcher matcher = HEX_SHORT_PATTERN.matcher(message);
StringBuilder sb = new StringBuilder();

while (matcher.find()) {
matcher.appendReplacement(sb, "<#" + matcher.group(1) + ">");
}

matcher.appendTail(sb);
return sb.toString();
}

private String replaceLegacyColors(String message) {
for (var entry : this.COLORS_MAPPINGS.entrySet()) {
String key = entry.getKey();
String value = "<" + entry.getValue() + ">";

message = message.replace("&" + key, value)
.replace("§" + key, value)
.replace("&" + key.toUpperCase(), value)
.replace("§" + key.toUpperCase(), value);
}
return message;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
package fr.maxlego08.menu.hooks;

import org.jetbrains.annotations.NotNull;

import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class MiniMessageColorUtils {
private static final Pattern LEGACY_HEX_PATTERN = Pattern.compile("§x(§[0-9a-fA-F]){6}");
private static final Pattern HEX_SHORT_PATTERN = Pattern.compile("(?<!<)(?<!:)(?<!</)(&?)#([a-fA-F0-9]{6})");
private final Map<String, String> COLORS_MAPPINGS = Map.ofEntries(
Map.entry("0", "black"),
Map.entry("1", "dark_blue"),
Map.entry("2", "dark_green"),
Map.entry("3", "dark_aqua"),
Map.entry("4", "dark_red"),
Map.entry("5", "dark_purple"),
Map.entry("6", "gold"),
Map.entry("7", "gray"),
Map.entry("8", "dark_gray"),
Map.entry("9", "blue"),
Map.entry("a", "green"),
Map.entry("b", "aqua"),
Map.entry("c", "red"),
Map.entry("d", "light_purple"),
Map.entry("e", "yellow"),
Map.entry("f", "white"),
Map.entry("k", "obfuscated"),
Map.entry("l", "bold"),
Map.entry("m", "strikethrough"),
Map.entry("n", "underlined"),
Map.entry("o", "italic"),
Map.entry("r", "reset")
);

protected String colorMiniMessage(String message) {

String newMessage = message;

// §x§r§g§b§2§f§3 → <#rgb2f3>
newMessage = convertLegacyHex(newMessage);
// &#a1b2c3 → <#a1b2c3>
newMessage = convertShorLegacyHex(newMessage);
// #a1b2c3 → <#a1b2c3>
newMessage = newMessage.replaceAll("(?<![<&])(?<!:)(?<!</)#([A-Fa-f0-9]{6})", "<#$1>");

// &a → <green>, §c → <red>, etc.
newMessage = replaceLegacyColors(newMessage);

return newMessage;
}

private @NotNull String convertLegacyHex(String message) {
Matcher matcher = LEGACY_HEX_PATTERN.matcher(message);
StringBuilder sb = new StringBuilder();

while (matcher.find()) {
String hex = matcher.group().replaceAll("§x|§", "");
matcher.appendReplacement(sb, "<#" + hex + ">");
}

matcher.appendTail(sb);
return sb.toString();
}

private @NotNull String convertShorLegacyHex(String message) {
Matcher matcher = HEX_SHORT_PATTERN.matcher(message);
StringBuilder sb = new StringBuilder();

while (matcher.find()) {
matcher.appendReplacement(sb, "<#" + matcher.group(2) + ">");
}

matcher.appendTail(sb);
return sb.toString();
}

private String replaceLegacyColors(String message) {
for (var entry : this.COLORS_MAPPINGS.entrySet()) {
String key = entry.getKey();
String value = "<" + entry.getValue() + ">";

message = message.replace("&" + key, value)
.replace("§" + key, value)
.replace("&" + key.toUpperCase(), value)
.replace("§" + key.toUpperCase(), value);
}
return message;
}
}
Loading
Loading