diff --git a/build.gradle b/build.gradle index 02032a4..b5420ca 100644 --- a/build.gradle +++ b/build.gradle @@ -10,7 +10,7 @@ sourceCompatibility = 1.8 targetCompatibility = 1.8 compileJava.options.encoding = 'UTF-8' group = 'dev.esophose' -version = '7.13' +version = '7.14' java { withJavadocJar() @@ -24,6 +24,7 @@ repositories { maven { url = 'https://hub.spigotmc.org/nexus/content/repositories/snapshots/' } maven { url = 'https://repo.codemc.org/repository/maven-public' } maven { url = 'http://repo.extendedclip.com/content/repositories/placeholderapi/' } + maven { url = 'https://repo.rosewooddev.io/repository/public/' } } dependencies { @@ -36,7 +37,7 @@ dependencies { shadow 'org.jetbrains:annotations:16.0.2' shadow 'me.clip:placeholderapi:2.10.4' shadow 'org.xerial:sqlite-jdbc:3.23.1' - shadow 'org.spigotmc:spigot-api:1.15.2-R0.1-SNAPSHOT' + shadow 'org.spigotmc:spigot:1.16.1' } shadowJar { diff --git a/src/main/java/dev/esophose/playerparticles/command/FixedCommandModule.java b/src/main/java/dev/esophose/playerparticles/command/FixedCommandModule.java index d436948..afee0bb 100644 --- a/src/main/java/dev/esophose/playerparticles/command/FixedCommandModule.java +++ b/src/main/java/dev/esophose/playerparticles/command/FixedCommandModule.java @@ -22,8 +22,8 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; +import net.md_5.bungee.api.ChatColor; import org.bukkit.Bukkit; -import org.bukkit.ChatColor; import org.bukkit.Location; import org.bukkit.Material; import org.bukkit.entity.Player; diff --git a/src/main/java/dev/esophose/playerparticles/command/VersionCommandModule.java b/src/main/java/dev/esophose/playerparticles/command/VersionCommandModule.java index b8870b5..9f8021d 100644 --- a/src/main/java/dev/esophose/playerparticles/command/VersionCommandModule.java +++ b/src/main/java/dev/esophose/playerparticles/command/VersionCommandModule.java @@ -5,7 +5,7 @@ import dev.esophose.playerparticles.manager.LocaleManager; import dev.esophose.playerparticles.particles.PPlayer; import java.util.ArrayList; import java.util.List; -import org.bukkit.ChatColor; +import net.md_5.bungee.api.ChatColor; public class VersionCommandModule implements CommandModule { diff --git a/src/main/java/dev/esophose/playerparticles/gui/GuiActionButton.java b/src/main/java/dev/esophose/playerparticles/gui/GuiActionButton.java index bca3e78..aef4aaf 100644 --- a/src/main/java/dev/esophose/playerparticles/gui/GuiActionButton.java +++ b/src/main/java/dev/esophose/playerparticles/gui/GuiActionButton.java @@ -6,7 +6,7 @@ import dev.esophose.playerparticles.particles.PPlayer; import dev.esophose.playerparticles.util.NMSUtil; import java.util.ArrayList; import java.util.List; -import org.bukkit.ChatColor; +import net.md_5.bungee.api.ChatColor; import org.bukkit.Material; import org.bukkit.inventory.ItemFlag; import org.bukkit.inventory.ItemStack; diff --git a/src/main/java/dev/esophose/playerparticles/hook/ParticlePlaceholderExpansion.java b/src/main/java/dev/esophose/playerparticles/hook/ParticlePlaceholderExpansion.java index 8a47b88..6a4a534 100644 --- a/src/main/java/dev/esophose/playerparticles/hook/ParticlePlaceholderExpansion.java +++ b/src/main/java/dev/esophose/playerparticles/hook/ParticlePlaceholderExpansion.java @@ -5,7 +5,7 @@ import dev.esophose.playerparticles.manager.DataManager; import dev.esophose.playerparticles.particles.PPlayer; import dev.esophose.playerparticles.particles.ParticlePair; import me.clip.placeholderapi.expansion.PlaceholderExpansion; -import org.bukkit.ChatColor; +import net.md_5.bungee.api.ChatColor; import org.bukkit.entity.Player; public class ParticlePlaceholderExpansion extends PlaceholderExpansion { diff --git a/src/main/java/dev/esophose/playerparticles/manager/LocaleManager.java b/src/main/java/dev/esophose/playerparticles/manager/LocaleManager.java index 5ea0353..14792e2 100644 --- a/src/main/java/dev/esophose/playerparticles/manager/LocaleManager.java +++ b/src/main/java/dev/esophose/playerparticles/manager/LocaleManager.java @@ -12,16 +12,22 @@ import dev.esophose.playerparticles.locale.SimplifiedChineseLocale; import dev.esophose.playerparticles.locale.VietnameseLocale; import dev.esophose.playerparticles.manager.ConfigurationManager.Setting; import dev.esophose.playerparticles.particles.PPlayer; +import dev.esophose.playerparticles.util.NMSUtil; import dev.esophose.playerparticles.util.StringPlaceholders; import java.io.File; import java.io.IOException; import java.util.Map; -import org.bukkit.ChatColor; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import net.md_5.bungee.api.ChatColor; +import net.md_5.bungee.api.chat.TextComponent; import org.bukkit.command.CommandSender; import org.bukkit.entity.Player; public class LocaleManager extends Manager { + private static final Pattern HEX_PATTERN = Pattern.compile("#([A-Fa-f0-9]){6}"); + private CommentedFileConfiguration locale; public LocaleManager(PlayerParticles playerParticles) { @@ -127,7 +133,7 @@ public class LocaleManager extends Manager { if (!Setting.MESSAGES_ENABLED.getBoolean()) return; - sender.sendMessage(this.getLocaleMessage("prefix") + this.getLocaleMessage(messageKey, stringPlaceholders)); + this.sendParsedMessage(sender, this.getLocaleMessage("prefix") + this.getLocaleMessage(messageKey, stringPlaceholders)); } /** @@ -141,7 +147,7 @@ public class LocaleManager extends Manager { if (!Setting.MESSAGES_ENABLED.getBoolean()) return; - pplayer.getUnderlyingExecutor().sendMessage(this.parsePlaceholders(pplayer.getPlayer(), this.getLocaleMessage("prefix") + this.getLocaleMessage(messageKey, stringPlaceholders))); + this.sendParsedMessage(pplayer.getUnderlyingExecutor(), this.getLocaleMessage("prefix") + this.getLocaleMessage(messageKey, stringPlaceholders)); } /** @@ -175,7 +181,7 @@ public class LocaleManager extends Manager { if (!Setting.MESSAGES_ENABLED.getBoolean()) return; - sender.sendMessage(this.getLocaleMessage(messageKey, stringPlaceholders)); + this.sendParsedMessage(sender, this.getLocaleMessage(messageKey, stringPlaceholders)); } /** @@ -189,7 +195,7 @@ public class LocaleManager extends Manager { if (!Setting.MESSAGES_ENABLED.getBoolean()) return; - pplayer.getUnderlyingExecutor().sendMessage(this.parsePlaceholders(pplayer.getPlayer(), this.getLocaleMessage(messageKey, stringPlaceholders))); + this.sendParsedMessage(pplayer.getUnderlyingExecutor(), this.getLocaleMessage(messageKey, stringPlaceholders)); } /** @@ -222,7 +228,7 @@ public class LocaleManager extends Manager { if (!Setting.MESSAGES_ENABLED.getBoolean()) return; - sender.sendMessage(message); + this.sendParsedMessage(sender, message); } /** @@ -232,18 +238,58 @@ public class LocaleManager extends Manager { * @param message The message to send */ public void sendCustomMessage(PPlayer pplayer, String message) { - this.sendCustomMessage(pplayer.getUnderlyingExecutor(), this.parsePlaceholders(pplayer.getPlayer(), message)); + this.sendCustomMessage(pplayer.getUnderlyingExecutor(), message); } /** * Replaces PlaceholderAPI placeholders if PlaceholderAPI is enabled * - * @param player The Player to replace with + * @param sender The Player to replace with * @param message The message * @return A placeholder-replaced message */ - private String parsePlaceholders(Player player, String message) { - return PlaceholderAPIHook.applyPlaceholders(player, message); + private String parsePlaceholders(CommandSender sender, String message) { + if (sender instanceof Player) + return PlaceholderAPIHook.applyPlaceholders((Player) sender, message); + return message; + } + + /** + * Parses the colors in a message + * Parses & to the normal color code character + * Parses hex codes if the game version is 1.16 or higher + * + * @param message The message + * @return A color-replaced message + */ + private String parseColors(String message) { + String parsed = message; + + if (NMSUtil.getVersionNumber() >= 16) { + Matcher matcher = HEX_PATTERN.matcher(parsed); + while (matcher.find()) { + ChatColor hexColor = ChatColor.of(matcher.group()); + String before = parsed.substring(0, matcher.start()); + String after = parsed.substring(matcher.end()); + parsed = before + hexColor + after; + } + } + + return ChatColor.translateAlternateColorCodes('&', parsed); + } + + /** + * Sends a message with placeholders and colors parsed to a CommandSender + * + * @param sender The sender to send the message to + * @param message The message + */ + private void sendParsedMessage(CommandSender sender, String message) { + if (NMSUtil.getVersionNumber() >= 16) { + sender.spigot().sendMessage(TextComponent.fromLegacyText(this.parseColors(this.parsePlaceholders(sender, message)))); + } else { + sender.sendMessage(this.parseColors(this.parsePlaceholders(sender, message))); + } } } diff --git a/src/main/java/dev/esophose/playerparticles/particles/ParticleEffect.java b/src/main/java/dev/esophose/playerparticles/particles/ParticleEffect.java index 219b6d1..fd3496c 100644 --- a/src/main/java/dev/esophose/playerparticles/particles/ParticleEffect.java +++ b/src/main/java/dev/esophose/playerparticles/particles/ParticleEffect.java @@ -38,7 +38,7 @@ public enum ParticleEffect { CAMPFIRE_SIGNAL_SMOKE("CAMPFIRE_SIGNAL_SMOKE", Collections.singletonList("REDSTONE_TORCH")), CLOUD("CLOUD", Arrays.asList("WHITE_WOOL", "WOOL")), COMPOSTER("COMPOSTER", Collections.singletonList("COMPOSTER")), - CRIMSON_SPORE("CRIMSON_SPORE", Collections.singletonList("CRIMSON_SPORE")), + CRIMSON_SPORE("CRIMSON_SPORE", Collections.singletonList("CRIMSON_FUNGUS")), CRIT("CRIT", Collections.singletonList("IRON_SWORD")), CURRENT_DOWN("CURRENT_DOWN", Collections.singletonList("SOUL_SAND")), DAMAGE_INDICATOR("DAMAGE_INDICATOR", Collections.singletonList("BOW")), diff --git a/src/main/java/dev/esophose/playerparticles/particles/ParticlePair.java b/src/main/java/dev/esophose/playerparticles/particles/ParticlePair.java index bffcf56..b2fcd11 100644 --- a/src/main/java/dev/esophose/playerparticles/particles/ParticlePair.java +++ b/src/main/java/dev/esophose/playerparticles/particles/ParticlePair.java @@ -12,7 +12,7 @@ import dev.esophose.playerparticles.styles.ParticleStyle; import dev.esophose.playerparticles.util.ParticleUtils; import dev.esophose.playerparticles.util.StringPlaceholders; import java.util.UUID; -import org.bukkit.ChatColor; +import net.md_5.bungee.api.ChatColor; import org.bukkit.Material; public class ParticlePair {