diff --git a/pom.xml b/pom.xml
index 1793ddb..7890f60 100644
--- a/pom.xml
+++ b/pom.xml
@@ -127,5 +127,28 @@
2.11.1
provided
+
+ net.kyori
+ adventure-api
+ 4.11.0
+ compile
+
+
+ net.kyori
+ adventure-platform-bukkit
+ 4.1.1
+ compile
+
+
+ net.kyori
+ adventure-text-minimessage
+ 4.11.0
+ compile
+
+
+ net.kyori
+ adventure-text-serializer-legacy
+ 4.11.0
+
diff --git a/src/main/java/me/youhavetrouble/preventstabby/PreventStabby.java b/src/main/java/me/youhavetrouble/preventstabby/PreventStabby.java
index 33b628f..42d75ff 100644
--- a/src/main/java/me/youhavetrouble/preventstabby/PreventStabby.java
+++ b/src/main/java/me/youhavetrouble/preventstabby/PreventStabby.java
@@ -11,6 +11,7 @@ import me.youhavetrouble.preventstabby.util.PreventStabbyListener;
import me.youhavetrouble.preventstabby.util.DatabaseSQLite;
import lombok.Getter;
import me.youhavetrouble.preventstabby.util.Util;
+import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import org.bstats.bukkit.Metrics;
import org.bukkit.command.CommandSender;
import org.bukkit.command.PluginCommand;
@@ -29,6 +30,8 @@ public final class PreventStabby extends JavaPlugin {
private SmartCache smartCache;
private static boolean worldGuardHook;
+ private static BukkitAudiences adventure;
+
@Override
public void onEnable() {
plugin = this;
@@ -43,6 +46,7 @@ public final class PreventStabby extends JavaPlugin {
getServer().getPluginManager().disablePlugin(this);
return;
}
+ adventure = BukkitAudiences.create(this);
playerManager = new PlayerManager();
smartCache = new SmartCache();
smartCache.runSmartCache();
@@ -114,4 +118,8 @@ public final class PreventStabby extends JavaPlugin {
public SmartCache getSmartCache() {
return smartCache;
}
+
+ public static BukkitAudiences getAudiences() {
+ return adventure;
+ }
}
diff --git a/src/main/java/me/youhavetrouble/preventstabby/commands/HelpCommand.java b/src/main/java/me/youhavetrouble/preventstabby/commands/HelpCommand.java
index 5e948e5..24caba2 100644
--- a/src/main/java/me/youhavetrouble/preventstabby/commands/HelpCommand.java
+++ b/src/main/java/me/youhavetrouble/preventstabby/commands/HelpCommand.java
@@ -3,24 +3,27 @@ package me.youhavetrouble.preventstabby.commands;
import me.youhavetrouble.preventstabby.PreventStabby;
import me.youhavetrouble.preventstabby.config.PreventStabbyPermission;
import me.youhavetrouble.preventstabby.util.PluginMessages;
+import net.kyori.adventure.audience.MessageType;
+import net.kyori.adventure.text.Component;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
-import java.util.ArrayList;
-import java.util.List;
public class HelpCommand {
- // TODO change this to be 1 component when transitioning to adventure
public static void help(CommandSender sender, String[] args) {
Bukkit.getScheduler().runTaskAsynchronously(PreventStabby.getPlugin(), () -> {
- List helpPage = new ArrayList<>();
- helpPage.add(PluginMessages.parseMessage("&b&m &bPreventStabby Help&b&m "));
- helpPage.add(PluginMessages.parseMessage("&9/pvp &b&lhelp &f- shows this message"));
+ Component helpComponent = PluginMessages.MINIMESSAGE
+ .deserialize(" PreventStabby Help ")
+ .append(Component.newline())
+ .append(PluginMessages.MINIMESSAGE.deserialize("/pvp help - shows this message"));
+
if (PreventStabbyPermission.COMMAND_TOGGLE.doesCommandSenderHave(sender)) {
- helpPage.add(PluginMessages.parseMessage("&9/pvp &b&l[on/off] &f- enables or disables PvP"));
- helpPage.add(PluginMessages.parseMessage("&9/pvp &b<oggle &f- toggles PvP status"));
+ helpComponent = helpComponent.append(Component.newline());
+ helpComponent = helpComponent
+ .append(PluginMessages.MINIMESSAGE.deserialize("/pvp [on/off] - enables or disables PvP"))
+ .append(Component.newline())
+ .append(PluginMessages.MINIMESSAGE.deserialize("/pvp toggle - toggles PvP status"));
}
- String[] helpReady = helpPage.toArray(new String[0]);
- sender.sendMessage(helpReady);
+ PreventStabby.getAudiences().sender(sender).sendMessage(helpComponent, MessageType.SYSTEM);
});
}
diff --git a/src/main/java/me/youhavetrouble/preventstabby/commands/PvpToggleCommand.java b/src/main/java/me/youhavetrouble/preventstabby/commands/PvpToggleCommand.java
index bc855d1..1a6c04d 100644
--- a/src/main/java/me/youhavetrouble/preventstabby/commands/PvpToggleCommand.java
+++ b/src/main/java/me/youhavetrouble/preventstabby/commands/PvpToggleCommand.java
@@ -26,13 +26,11 @@ public class PvpToggleCommand {
}
boolean currentState = PreventStabby.getPlugin().getPlayerManager().togglePlayerPvpState(player.getUniqueId());
- String message;
if (currentState) {
- message = PluginMessages.parseMessage(sender, PreventStabby.getPlugin().getConfigCache().getPvp_enabled());
+ PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getPvp_enabled());
} else {
- message = PluginMessages.parseMessage(sender, PreventStabby.getPlugin().getConfigCache().getPvp_disabled());
+ PluginMessages.sendMessage(sender, PreventStabby.getPlugin().getConfigCache().getPvp_disabled());
}
- PluginMessages.sendMessage(sender, message);
} else {
PluginMessages.sendMessage(sender, "Try /pvp toggle ");
}
@@ -51,7 +49,7 @@ public class PvpToggleCommand {
Player player = Bukkit.getPlayer(args[1]);
if (player == null) {
- PluginMessages.sendMessage(sender, "&cPlayer offline.");
+ PluginMessages.sendMessage(sender, "Player offline.");
return;
}
boolean currentState = PreventStabby.getPlugin().getPlayerManager().togglePlayerPvpState(player.getUniqueId());
@@ -103,7 +101,7 @@ public class PvpToggleCommand {
}
Player player = Bukkit.getPlayer(args[1]);
if (player == null) {
- PluginMessages.sendMessage(sender, PluginMessages.parseMessage("&cPlayer offline."));
+ PluginMessages.sendMessage(sender, "Player offline.");
return;
}
String message = PreventStabby.getPlugin().getConfigCache().getPvp_enabled_other();
@@ -149,7 +147,7 @@ public class PvpToggleCommand {
}
Player player = Bukkit.getPlayer(args[1]);
if (player == null) {
- PluginMessages.sendMessage(sender, PluginMessages.parseMessage("&cPlayer offline."));
+ PluginMessages.sendMessage(sender, "Player offline.");
return;
}
String message = PreventStabby.getPlugin().getConfigCache().getPvp_disabled_other();
diff --git a/src/main/java/me/youhavetrouble/preventstabby/config/ConfigCache.java b/src/main/java/me/youhavetrouble/preventstabby/config/ConfigCache.java
index 5d058fd..5ed0fcd 100644
--- a/src/main/java/me/youhavetrouble/preventstabby/config/ConfigCache.java
+++ b/src/main/java/me/youhavetrouble/preventstabby/config/ConfigCache.java
@@ -51,7 +51,7 @@ public class ConfigCache {
addComment("settings.punish_for_combat_logout", "Kill the player if they log out during combat");
addDefault("settings.punish_for_combat_logout.enabled", true);
addDefault("settings.punish_for_combat_logout.announce", true);
- addDefault("settings.punish_for_combat_logout.message", "&f%player% logged out while in combat. What a loser.");
+ addDefault("settings.punish_for_combat_logout.message", "%player% logged out while in combat. What a loser.");
addDefault("settings.snowballs_do_knockback", false, "Set to true if snowballs should cause knockback to players");
@@ -68,21 +68,21 @@ public class ConfigCache {
addDefault("settings.cache_time", 30, "Time (in seconds) to keep player data in memory when players goes offline.\nThis is used for checking if offline players pvp state.\nAdjust only if you know what you're doing. NEVER set to less than 6.");
- addDefault("messages.pvp_enabled", "&cYou enabled PvP!");
- addDefault("messages.pvp_disabled", "&cYou disabled PvP!");
- addDefault("messages.cannot_attack_victim", "&cYou can't attack players that have PvP turned off!");
- addDefault("messages.cannot_attack_attacker", "&cYou can't attack players while you have PvP turned off!");
- addDefault("messages.cannot_attack_pets_victim", "&cYou can't attack pets of players that have PvP turned off");
- addDefault("messages.cannot_attack_pets_attacker", "&cYou can't attack pets while you have PvP turned off");
- addDefault("messages.cannot_attack_mounts_victim", "&cYou can't attack mounts of players that have PvP turned off");
- addDefault("messages.cannot_attack_mounts_attacker", "&cYou can't attack mounts while you have PvP turned off");
- addDefault("messages.no_permission", "&cYou don't have permission to use that.");
- addDefault("messages.no_such_command", "&cNo such command.");
- addDefault("messages.pvp_enabled_others", "&cYou've enabled %player%'s PvP.");
- addDefault("messages.pvp_disabled_others", "&cYou've disabled %player%'s PvP.");
- addDefault("messages.entering_combat", "&cEntering combat");
- addDefault("messages.leaving_combat", "&cLeaving combat");
- addDefault("messages.cant_do_that_during_combat", "&cYou can't do that while in combat!");
+ addDefault("messages.pvp_enabled", "You enabled PvP!");
+ addDefault("messages.pvp_disabled", "You disabled PvP!");
+ addDefault("messages.cannot_attack_victim", "You can't attack players that have PvP turned off!");
+ addDefault("messages.cannot_attack_attacker", "You can't attack players while you have PvP turned off!");
+ addDefault("messages.cannot_attack_pets_victim", "You can't attack pets of players that have PvP turned off");
+ addDefault("messages.cannot_attack_pets_attacker", "You can't attack pets while you have PvP turned off");
+ addDefault("messages.cannot_attack_mounts_victim", "You can't attack mounts of players that have PvP turned off");
+ addDefault("messages.cannot_attack_mounts_attacker", "You can't attack mounts while you have PvP turned off");
+ addDefault("messages.no_permission", "You don't have permission to use that.");
+ addDefault("messages.no_such_command", "No such command.");
+ addDefault("messages.pvp_enabled_others", "You've enabled %player%'s PvP.");
+ addDefault("messages.pvp_disabled_others", "You've disabled %player%'s PvP.");
+ addDefault("messages.entering_combat", "Entering combat");
+ addDefault("messages.leaving_combat", "Leaving combat");
+ addDefault("messages.cant_do_that_during_combat", "You can't do that while in combat!");
addDefault("placeholder.placeholder_combat_time", "Combat time: %time%");
addDefault("placeholder.not_in_combat", "Not in combat");
}
@@ -106,7 +106,7 @@ public class ConfigCache {
this.combat_time = config.getLong("settings.combat_time", 25L);
this.punish_for_combat_logout = config.getBoolean("settings.punish_for_combat_logout.enabled", true);
this.punish_for_combat_logout_announce = config.getBoolean("settings.punish_for_combat_logout.announce", true);
- this.punish_for_combat_logout_message = config.getString("settings.punish_for_combat_logout.message", "&f%player% logged out while in combat. What a loser.");
+ this.punish_for_combat_logout_message = config.getString("settings.punish_for_combat_logout.message", "%player% logged out while in combat. What a loser.");
this.only_owner_can_interact_with_pet = config.getBoolean("settings.only_owner_can_interact_with_pet", false);
this.snowballs_knockback = config.getBoolean("settings.snowballs_do_knockback", false);
@@ -123,21 +123,21 @@ public class ConfigCache {
this.teleport_protection_time = config.getLong("settings.teleport_protection_time", 0);
// Messages
- this.pvp_enabled = config.getString("messages.pvp_enabled", "&cYou enabled PvP!");
- this.pvp_disabled = config.getString("messages.pvp_disabled", "&cYou disabled PvP!");
- this.cannot_attack_victim = config.getString("messages.cannot_attack_victim", "&cYou can't attack players that have PvP turned off!");
- this.cannot_attack_attacker = config.getString("messages.cannot_attack_attacker", "&cYou can't attack players while you have PvP turned off!");
- this.cannot_attack_pets_victim = config.getString("messages.cannot_attack_pets_victim", "&cYou can't attack pets while you have PvP turned off");
- this.cannot_attack_pets_attacker = config.getString("messages.cannot_attack_pets_attacker", "&cYou can't attack pets of players that have PvP turned off");
- this.cannot_attack_mounts_victim = config.getString("messages.cannot_attack_mounts_victim", "&cYou can't attack mounts of players that have PvP turned off");
- this.cannot_attack_mounts_attacker = config.getString("messages.cannot_attack_mounts_attacker", "&cYou can't attack mounts while you have PvP turned off");
- this.no_permission = config.getString("messages.no_permission", "&cYou don't have permission to use that.");
- this.no_such_command = config.getString("messages.no_such_command", "&cNo such command.");
- this.pvp_enabled_other = config.getString("messages.pvp_enabled_others", "&cYou've enabled %player%'s PvP.");
- this.pvp_disabled_other = config.getString("messages.pvp_disabled_others", "&cYou've disabled %player%'s PvP.");
- this.entering_combat = config.getString("messages.entering_combat", "&cEntering combat");
- this.leaving_combat = config.getString("messages.leaving_combat", "&cLeaving combat");
- this.cant_do_that_during_combat = config.getString("messages.cant_do_that_during_combat", "&cYou can't do that while in combat!");
+ this.pvp_enabled = config.getString("messages.pvp_enabled", "You enabled PvP!");
+ this.pvp_disabled = config.getString("messages.pvp_disabled", "You disabled PvP!");
+ this.cannot_attack_victim = config.getString("messages.cannot_attack_victim", "You can't attack players that have PvP turned off!");
+ this.cannot_attack_attacker = config.getString("messages.cannot_attack_attacker", "You can't attack players while you have PvP turned off!");
+ this.cannot_attack_pets_victim = config.getString("messages.cannot_attack_pets_victim", "You can't attack pets while you have PvP turned off");
+ this.cannot_attack_pets_attacker = config.getString("messages.cannot_attack_pets_attacker", "You can't attack pets of players that have PvP turned off");
+ this.cannot_attack_mounts_victim = config.getString("messages.cannot_attack_mounts_victim", "You can't attack mounts of players that have PvP turned off");
+ this.cannot_attack_mounts_attacker = config.getString("messages.cannot_attack_mounts_attacker", "You can't attack mounts while you have PvP turned off");
+ this.no_permission = config.getString("messages.no_permission", "You don't have permission to use that.");
+ this.no_such_command = config.getString("messages.no_such_command", "No such command.");
+ this.pvp_enabled_other = config.getString("messages.pvp_enabled_others", "You've enabled %player%'s PvP.");
+ this.pvp_disabled_other = config.getString("messages.pvp_disabled_others", "You've disabled %player%'s PvP.");
+ this.entering_combat = config.getString("messages.entering_combat", "Entering combat");
+ this.leaving_combat = config.getString("messages.leaving_combat", "Leaving combat");
+ this.cant_do_that_during_combat = config.getString("messages.cant_do_that_during_combat", "You can't do that while in combat!");
this.placeholder_combat_time = config.getString("placeholder.placeholder_combat_time", "Combat time: %time%");
this.placeholder_not_in_combat = config.getString("placeholder.not_in_combat", "Not in combat");
diff --git a/src/main/java/me/youhavetrouble/preventstabby/hooks/PlacoholderApiHook.java b/src/main/java/me/youhavetrouble/preventstabby/hooks/PlacoholderApiHook.java
index bb07374..9183247 100644
--- a/src/main/java/me/youhavetrouble/preventstabby/hooks/PlacoholderApiHook.java
+++ b/src/main/java/me/youhavetrouble/preventstabby/hooks/PlacoholderApiHook.java
@@ -3,6 +3,7 @@ package me.youhavetrouble.preventstabby.hooks;
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import me.youhavetrouble.preventstabby.PreventStabby;
import me.youhavetrouble.preventstabby.util.PluginMessages;
+import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
import org.bukkit.OfflinePlayer;
import org.jetbrains.annotations.NotNull;
@@ -12,9 +13,11 @@ import java.util.UUID;
public class PlacoholderApiHook extends PlaceholderExpansion {
private final PreventStabby plugin;
+ private final LegacyComponentSerializer legacyComponentSerializer;
public PlacoholderApiHook(PreventStabby preventStabby) {
plugin = preventStabby;
+ this.legacyComponentSerializer = LegacyComponentSerializer.legacyAmpersand();
}
@Override
@@ -48,9 +51,9 @@ public class PlacoholderApiHook extends PlaceholderExpansion {
if (seconds > 0) {
String msg = plugin.getConfigCache().getPlaceholder_combat_time();
msg = msg.replaceAll("%time%", String.valueOf(seconds));
- return PluginMessages.parseMessage(msg);
+ return legacyComponentSerializer.serialize(PluginMessages.parseMessage(msg));
}
- return PluginMessages.parseMessage(plugin.getConfigCache().getPlaceholder_not_in_combat());
+ return legacyComponentSerializer.serialize(PluginMessages.parseMessage(plugin.getConfigCache().getPlaceholder_not_in_combat()));
}
}
diff --git a/src/main/java/me/youhavetrouble/preventstabby/util/PluginMessages.java b/src/main/java/me/youhavetrouble/preventstabby/util/PluginMessages.java
index bb28917..456e773 100644
--- a/src/main/java/me/youhavetrouble/preventstabby/util/PluginMessages.java
+++ b/src/main/java/me/youhavetrouble/preventstabby/util/PluginMessages.java
@@ -2,11 +2,10 @@ package me.youhavetrouble.preventstabby.util;
import me.clip.placeholderapi.PlaceholderAPI;
import me.youhavetrouble.preventstabby.PreventStabby;
-import net.md_5.bungee.api.ChatMessageType;
-import net.md_5.bungee.api.chat.BaseComponent;
-import net.md_5.bungee.api.chat.TextComponent;
+import net.kyori.adventure.platform.bukkit.BukkitAudiences;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.minimessage.MiniMessage;
import org.bukkit.Bukkit;
-import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -14,17 +13,21 @@ import java.util.UUID;
public class PluginMessages {
- public static String parseMessage(String message) {
- return ChatColor.translateAlternateColorCodes('&', message);
+ public static final MiniMessage MINIMESSAGE = MiniMessage.miniMessage();
+ private static final BukkitAudiences audiences = PreventStabby.getAudiences();
+
+ public static Component parseMessage(String message) {
+ message = makeColorsWork('&', message);
+ return MINIMESSAGE.deserialize(message);
}
- public static String parseMessage(CommandSender sender,String message) {
+ public static Component parseMessage(CommandSender sender,String message) {
if (sender instanceof Player && isPlaceholderApiEnabled()) {
Player player = (Player) sender;
message = PlaceholderAPI.setPlaceholders(player, message);
}
- return ChatColor.translateAlternateColorCodes('&', message);
+ return parseMessage(message);
}
private static boolean isPlaceholderApiEnabled() {
@@ -32,15 +35,12 @@ public class PluginMessages {
}
public static void sendMessage(CommandSender sender, String message) {
- message = parseMessage(sender, message);
- sender.sendMessage(message);
+ audiences.sender(sender).sendMessage(parseMessage(sender, message));
}
public static void sendActionBar(Player player, String message) {
- // TODO use adventure
- message = parseMessage(player, message);
- BaseComponent[] component = TextComponent.fromLegacyText(parseMessage(message));
- player.spigot().sendMessage(ChatMessageType.ACTION_BAR, component);
+ Component parsedMessage = parseMessage(player, message);
+ audiences.player(player).sendActionBar(parsedMessage);
}
public static void sendActionBar(UUID uuid, String message) {
@@ -51,7 +51,7 @@ public class PluginMessages {
public static String parsePlayerName(Player player, String message) {
message = message.replaceAll("%player%", player.getDisplayName());
- return parseMessage(message);
+ return message;
}
public static void broadcastMessage(Player player, String message) {
@@ -59,9 +59,40 @@ public class PluginMessages {
if (PreventStabby.getPlugin().getServer().getPluginManager().getPlugin("PlaceholderAPI") != null) {
message = PlaceholderAPI.setPlaceholders(player, message);
}
- message = parseMessage(message);
- BaseComponent[] component = TextComponent.fromLegacyText(parseMessage(message));
- Bukkit.spigot().broadcast(component);
+ audiences.all().sendMessage(parseMessage(message));
+ }
+
+ /**
+ * Swaps most legacy color codes to adventure minimessage tags.
+ * @param symbol Usually '&'.
+ * @param string String to replace symbols in.
+ * @return String with legacy color codes replaced with minimessage tags.
+ */
+ private static String makeColorsWork(Character symbol, String string) {
+ // Adventure and ChatColor do not like each other, so this is a thing.
+ string = string.replaceAll(symbol + "0", "");
+ string = string.replaceAll(symbol + "1", "");
+ string = string.replaceAll(symbol + "2", "");
+ string = string.replaceAll(symbol + "3", "");
+ string = string.replaceAll(symbol + "4", "");
+ string = string.replaceAll(symbol + "5", "");
+ string = string.replaceAll(symbol + "6", "");
+ string = string.replaceAll(symbol + "7", "");
+ string = string.replaceAll(symbol + "8", "");
+ string = string.replaceAll(symbol + "9", "");
+ string = string.replaceAll(symbol + "a", "");
+ string = string.replaceAll(symbol + "b", "");
+ string = string.replaceAll(symbol + "c", "");
+ string = string.replaceAll(symbol + "d", "");
+ string = string.replaceAll(symbol + "e", "");
+ string = string.replaceAll(symbol + "f", "");
+ string = string.replaceAll(symbol + "k", "");
+ string = string.replaceAll(symbol + "l", "");
+ string = string.replaceAll(symbol + "m", "");
+ string = string.replaceAll(symbol + "n", "");
+ string = string.replaceAll(symbol + "o", "");
+ string = string.replaceAll(symbol + "r", "");
+ return string;
}
}