diff --git a/.github/workflows/build-master.yml b/.github/workflows/build-master.yml index e2c3b7e63..62e0e96f4 100644 --- a/.github/workflows/build-master.yml +++ b/.github/workflows/build-master.yml @@ -16,18 +16,18 @@ jobs: steps: - name: Checkout Git repo - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up JDK 17 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: 17 - name: Setup Gradle - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@v3 - name: Build with Gradle run: | @@ -35,7 +35,7 @@ jobs: ./gradlew build --stacktrace - name: Archive plugin jars on GitHub - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: EssentialsX plugin jars path: jars/ @@ -61,7 +61,7 @@ jobs: cp -r EssentialsXMPP/build/docs/javadoc/ javadocs/EssentialsXMPP/ - name: Archive Javadocs - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: javadocs path: javadocs/ @@ -74,12 +74,12 @@ jobs: steps: - name: Setup Node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 16 - name: Download Javadocs - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: name: javadocs path: javadocs/ diff --git a/.github/workflows/build-pr.yml b/.github/workflows/build-pr.yml index fbf6eacd1..5cb330dbb 100644 --- a/.github/workflows/build-pr.yml +++ b/.github/workflows/build-pr.yml @@ -18,18 +18,18 @@ jobs: steps: - name: Checkout Git repo - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up JDK 17 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: 17 - name: Setup Gradle - uses: gradle/gradle-build-action@v2 + uses: gradle/gradle-build-action@v3 - name: Build with Gradle run: | @@ -37,7 +37,7 @@ jobs: ./gradlew build --stacktrace - name: Archive plugin jars on GitHub - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: EssentialsX plugin jars path: jars/ diff --git a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java index a5e091487..3a54a58bc 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Essentials.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Essentials.java @@ -657,6 +657,7 @@ public class Essentials extends JavaPlugin implements net.ess3.api.IEssentials { final PluginManager pm = getServer().getPluginManager(); registerListeners(pm); + AdventureUtil.setEss(this); bukkitAudience = BukkitAudiences.create(this); } diff --git a/Essentials/src/main/java/com/earth2me/essentials/Settings.java b/Essentials/src/main/java/com/earth2me/essentials/Settings.java index 666599a52..5fe884f7a 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/Settings.java +++ b/Essentials/src/main/java/com/earth2me/essentials/Settings.java @@ -53,6 +53,8 @@ import static com.earth2me.essentials.I18n.tlLiteral; public class Settings implements net.ess3.api.ISettings { private static final BigDecimal DEFAULT_MAX_MONEY = new BigDecimal("10000000000000"); private static final BigDecimal DEFAULT_MIN_MONEY = new BigDecimal("-10000000000000"); + private static final Tag DEFAULT_PRIMARY_COLOR = Tag.styling(NamedTextColor.GOLD); + private static final Tag DEFAULT_SECONDARY_COLOR = Tag.styling(NamedTextColor.RED); private final transient EssentialsConfiguration config; private final transient IEssentials ess; private final transient AtomicInteger reloadCount = new AtomicInteger(0); @@ -141,8 +143,8 @@ public class Settings implements net.ess3.api.ISettings { private double maxProjectileSpeed; private boolean removeEffectsOnHeal; private Map worldAliases; - private Tag primaryColor = Tag.styling(NamedTextColor.GOLD); - private Tag secondaryColor = Tag.styling(NamedTextColor.RED); + private Tag primaryColor = DEFAULT_PRIMARY_COLOR; + private Tag secondaryColor = DEFAULT_SECONDARY_COLOR; public Settings(final IEssentials ess) { this.ess = ess; @@ -1970,7 +1972,8 @@ public class Settings implements net.ess3.api.ISettings { private Tag _getPrimaryColor() { final String color = config.getString("message-colors.primary", "#ffaa00"); - return Tag.styling(_getTagColor(color, NamedTextColor.GOLD)); + final TextColor textColor = _getTagColor(color); + return textColor != null ? Tag.styling(textColor) : DEFAULT_PRIMARY_COLOR; } @Override @@ -1980,24 +1983,23 @@ public class Settings implements net.ess3.api.ISettings { private Tag _getSecondaryColor() { final String color = config.getString("message-colors.secondary", "#ff5555"); - return Tag.styling(_getTagColor(color, NamedTextColor.RED)); + final TextColor textColor = _getTagColor(color); + return textColor != null ? Tag.styling(textColor) : DEFAULT_SECONDARY_COLOR; } - private TextColor _getTagColor(final String color, final TextColor def) { + private TextColor _getTagColor(final String color) { try { - if (color.startsWith("#") && color.length() == 7 && NumberUtil.isNumeric(color.substring(1))) { + if (color.startsWith("#") && color.length() == 7 && NumberUtil.isHexadecimal(color.substring(1))) { return TextColor.color(Color.fromRGB(Integer.decode(color)).asRGB()); } if (color.length() == 1) { - final NamedTextColor named = AdventureUtil.fromChar(color.charAt(0)); - return named != null ? named : def; + return AdventureUtil.fromChar(color.charAt(0)); } - final NamedTextColor named = NamedTextColor.NAMES.value(color.toLowerCase(Locale.ENGLISH)); - return named != null ? named : def; + return NamedTextColor.NAMES.value(color.toLowerCase(Locale.ENGLISH)); } catch (IllegalArgumentException ignored) { } - return def; + return null; } } diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandbroadcastworld.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandbroadcastworld.java index b9156cf8b..93c271dca 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandbroadcastworld.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandbroadcastworld.java @@ -19,13 +19,13 @@ public class Commandbroadcastworld extends EssentialsCommand { @Override public void run(final Server server, final User user, final String commandLabel, final String[] args) throws Exception { - if (args.length == 0) { + if (args.length < 2) { throw new NotEnoughArgumentsException(); } World world = user.getWorld(); String message = getFinalArg(args, 0); - if (args.length > 1 && ess.getSettings().isAllowWorldInBroadcastworld()) { + if (ess.getSettings().isAllowWorldInBroadcastworld()) { final World argWorld = ess.getWorld(args[0]); if (argWorld != null) { world = argWorld; @@ -53,7 +53,7 @@ public class Commandbroadcastworld extends EssentialsCommand { if (message.isEmpty()) { throw new NotEnoughArgumentsException(); } - ess.broadcastTl(null, u -> u.getBase().getWorld().equals(world), true, "broadcast", message, AdventureUtil.parsed(AdventureUtil.legacyToMini(name))); + ess.broadcastTl(null, u -> !u.getBase().getWorld().equals(world), true, "broadcast", message, AdventureUtil.parsed(AdventureUtil.legacyToMini(name))); } @Override diff --git a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandme.java b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandme.java index 46cd33d17..ce1e70835 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/commands/Commandme.java +++ b/Essentials/src/main/java/com/earth2me/essentials/commands/Commandme.java @@ -17,8 +17,6 @@ import java.util.HashSet; import java.util.List; import java.util.Set; -import static com.earth2me.essentials.I18n.tlLiteral; - public class Commandme extends EssentialsCommand { public Commandme() { super("me"); @@ -109,7 +107,7 @@ public class Commandme extends EssentialsCommand { String message = getFinalArg(args, 0); message = FormatUtil.replaceFormat(message); - ess.getServer().broadcastMessage(tlLiteral("action", "@", message)); + ess.broadcastTl("action", "@", message); } @Override diff --git a/Essentials/src/main/java/com/earth2me/essentials/utils/AdventureUtil.java b/Essentials/src/main/java/com/earth2me/essentials/utils/AdventureUtil.java index 828ee6886..4016504a5 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/AdventureUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/AdventureUtil.java @@ -15,13 +15,13 @@ import java.util.regex.Pattern; public final class AdventureUtil { private static final LegacyComponentSerializer LEGACY_SERIALIZER; - private static final MiniMessage MINI_MESSAGE_INSTANCE; - private static IEssentials ess; private static final Pattern NAMED_PATTERN = Pattern.compile(ChatColor.COLOR_CHAR + "[0-9a-fk-orA-FK-OR]"); private static final Pattern HEX_PATTERN = Pattern.compile(ChatColor.COLOR_CHAR + "x((?:" + ChatColor.COLOR_CHAR + "[0-9a-fA-F]){6})"); private static final String LOOKUP = "0123456789abcdefklmnor"; private static final String[] MINI_TAGS = new String[] {"black", "dark_blue", "dark_green", "dark_aqua", "dark_red", "dark_purple", "gold", "gray", "dark_gray", "blue", "green", "aqua", "red", "light_purple", "yellow", "white", "obf", "b", "st", "u", "i", "reset"}; private static final NamedTextColor[] COLORS = new NamedTextColor[] {NamedTextColor.BLACK, NamedTextColor.DARK_BLUE, NamedTextColor.DARK_GREEN, NamedTextColor.DARK_AQUA, NamedTextColor.DARK_RED, NamedTextColor.DARK_PURPLE, NamedTextColor.GOLD, NamedTextColor.GRAY, NamedTextColor.DARK_GRAY, NamedTextColor.BLUE, NamedTextColor.GREEN, NamedTextColor.AQUA, NamedTextColor.RED, NamedTextColor.LIGHT_PURPLE, NamedTextColor.YELLOW, NamedTextColor.WHITE}; + private static IEssentials ess; + private static MiniMessage miniMessageInstance; static { final LegacyComponentSerializer.Builder builder = LegacyComponentSerializer.builder().flattener(ComponentFlattener.basic()).useUnusualXRepeatedCharacterHexFormat(); @@ -29,15 +29,7 @@ public final class AdventureUtil { builder.hexColors(); } LEGACY_SERIALIZER = builder.build(); - - MINI_MESSAGE_INSTANCE = MiniMessage.builder() - .tags(TagResolver.builder() - .resolvers(TagResolver.standard()) - .resolver(TagResolver.resolver("primary", supplyTag(true))) - .resolver(TagResolver.resolver("secondary", supplyTag(false))) - .build()) - .build(); - + miniMessageInstance = createMiniMessageInstance(); } private AdventureUtil() { @@ -45,10 +37,21 @@ public final class AdventureUtil { public static void setEss(final IEssentials ess) { AdventureUtil.ess = ess; + miniMessageInstance = createMiniMessageInstance(); + } + + private static MiniMessage createMiniMessageInstance() { + return MiniMessage.builder() + .tags(TagResolver.builder() + .resolvers(TagResolver.standard()) + .resolver(TagResolver.resolver("primary", supplyTag(true))) + .resolver(TagResolver.resolver("secondary", supplyTag(false))) + .build()) + .build(); } public static MiniMessage miniMessage() { - return MINI_MESSAGE_INSTANCE; + return miniMessageInstance; } /** diff --git a/Essentials/src/main/java/com/earth2me/essentials/utils/NumberUtil.java b/Essentials/src/main/java/com/earth2me/essentials/utils/NumberUtil.java index 7bd4adcad..9b253e243 100644 --- a/Essentials/src/main/java/com/earth2me/essentials/utils/NumberUtil.java +++ b/Essentials/src/main/java/com/earth2me/essentials/utils/NumberUtil.java @@ -129,6 +129,15 @@ public final class NumberUtil { return true; } + public static boolean isHexadecimal(final String sNum) { + try { + Integer.parseInt(sNum, 16); + return true; + } catch (final NumberFormatException e) { + return false; + } + } + /** * Backport from Guava. */