From 51f0f6c93b7d106a901a0f8d7a94954f78907a1d Mon Sep 17 00:00:00 2001 From: YouHaveTrouble Date: Tue, 22 Mar 2022 23:02:58 +0100 Subject: [PATCH] add placeholderapi hook --- pom.xml | 10 ++++ .../preventstabby/PreventStabby.java | 5 ++ .../preventstabby/config/ConfigCache.java | 8 ++- .../hooks/PlacoholderApiHook.java | 53 +++++++++++++++++++ .../preventstabby/util/PluginMessages.java | 17 +++--- src/main/resources/plugin.yml | 1 + 6 files changed, 86 insertions(+), 8 deletions(-) create mode 100644 src/main/java/me/youhavetrouble/preventstabby/hooks/PlacoholderApiHook.java diff --git a/pom.xml b/pom.xml index 1866e00..ddb5607 100644 --- a/pom.xml +++ b/pom.xml @@ -80,6 +80,10 @@ sk89q-repo https://maven.enginehub.org/repo/ + + placeholderapi + https://repo.extendedclip.com/content/repositories/placeholderapi/ + @@ -117,5 +121,11 @@ 7.0.4-SNAPSHOT provided + + me.clip + placeholderapi + 2.11.1 + provided + diff --git a/src/main/java/me/youhavetrouble/preventstabby/PreventStabby.java b/src/main/java/me/youhavetrouble/preventstabby/PreventStabby.java index 904ed9c..f4fd38f 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/PreventStabby.java +++ b/src/main/java/me/youhavetrouble/preventstabby/PreventStabby.java @@ -2,6 +2,7 @@ package me.youhavetrouble.preventstabby; import me.youhavetrouble.preventstabby.commands.MainCommand; import me.youhavetrouble.preventstabby.config.ConfigCache; +import me.youhavetrouble.preventstabby.hooks.PlacoholderApiHook; import me.youhavetrouble.preventstabby.hooks.WorldGuardHook; import me.youhavetrouble.preventstabby.players.PlayerManager; import me.youhavetrouble.preventstabby.players.SmartCache; @@ -77,6 +78,10 @@ public final class PreventStabby extends JavaPlugin { worldGuardHook = false; } + if (getServer().getPluginManager().getPlugin("PlaceholderAPI") != null) { + new PlacoholderApiHook(this).register(); + } + Metrics metrics = new Metrics(this, 14074); } diff --git a/src/main/java/me/youhavetrouble/preventstabby/config/ConfigCache.java b/src/main/java/me/youhavetrouble/preventstabby/config/ConfigCache.java index a46223c..2fcd5a4 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/config/ConfigCache.java +++ b/src/main/java/me/youhavetrouble/preventstabby/config/ConfigCache.java @@ -20,7 +20,8 @@ public class ConfigCache { @Getter private final String pvp_enabled, pvp_disabled, cannot_attack_victim, cannot_attack_attacker, cannot_attack_pets_victim, cannot_attack_pets_attacker, no_permission, no_such_command, pvp_enabled_other, pvp_disabled_other, punish_for_combat_logout_message, entering_combat, leaving_combat, - cant_do_that_during_combat, cannot_attack_mounts_attacker, cannot_attack_mounts_victim; + cant_do_that_during_combat, cannot_attack_mounts_attacker, cannot_attack_mounts_victim, + placeholder_combat_time, placeholder_not_in_combat; @Getter private final double lava_and_fire_stopper_radius; @Getter private final long cache_time, combat_time, login_protection_time, teleport_protection_time; @Getter private final Set combatBlockedCommands = new HashSet<>(); @@ -82,6 +83,8 @@ public class ConfigCache { 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("placeholder.placeholder_combat_time", "Combat time: %time%"); + addDefault("placeholder.not_in_combat", "Not in combat"); } }; @@ -135,6 +138,9 @@ public class ConfigCache { 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.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 new file mode 100644 index 0000000..e093bb9 --- /dev/null +++ b/src/main/java/me/youhavetrouble/preventstabby/hooks/PlacoholderApiHook.java @@ -0,0 +1,53 @@ +package me.youhavetrouble.preventstabby.hooks; + +import me.clip.placeholderapi.expansion.PlaceholderExpansion; +import me.youhavetrouble.preventstabby.PreventStabby; +import me.youhavetrouble.preventstabby.util.PluginMessages; +import org.bukkit.OfflinePlayer; +import org.jetbrains.annotations.NotNull; + +import java.time.Instant; +import java.util.UUID; + +public class PlacoholderApiHook extends PlaceholderExpansion { + + private final PreventStabby plugin; + + public PlacoholderApiHook(PreventStabby preventStabby) { + plugin = preventStabby; + } + + @Override + public @NotNull String getIdentifier() { + return "preventstabby"; + } + + @Override + public @NotNull String getAuthor() { + return plugin.getDescription().getAuthors().get(0); + } + + @Override + public @NotNull String getVersion() { + return plugin.getDescription().getVersion(); + } + + @Override + public String onRequest(OfflinePlayer player, String params) { + if (params.equalsIgnoreCase("combat_time")) { + return getCombatTimePlaceholder(player.getUniqueId()); + } + return null; + } + + private String getCombatTimePlaceholder(UUID uuid) { + long seconds = plugin.getPlayerManager().getPlayer(uuid).getCombattime() - Instant.now().getEpochSecond(); + if (seconds > 0) { + String msg = plugin.getConfigCache().getPlaceholder_combat_time(); + msg = msg.replaceAll("%time%", String.valueOf(seconds)); + return PluginMessages.parseMessage(msg); + } + return 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 6922f48..a75c6f4 100644 --- a/src/main/java/me/youhavetrouble/preventstabby/util/PluginMessages.java +++ b/src/main/java/me/youhavetrouble/preventstabby/util/PluginMessages.java @@ -1,5 +1,7 @@ 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; @@ -9,16 +11,18 @@ import org.bukkit.entity.Player; import java.util.UUID; - public class PluginMessages { public static String parseMessage(String message) { - //TODO PAPI support return ChatColor.translateAlternateColorCodes('&', message); } public static void sendMessage(Player player, String message) { - String parsedMessage = ChatColor.translateAlternateColorCodes('&', message); + String parsedMessage = message; + if (PreventStabby.getPlugin().getServer().getPluginManager().getPlugin("PlaceholderAPI") != null) { + parsedMessage = PlaceholderAPI.setPlaceholders(player, parsedMessage); + } + parsedMessage = ChatColor.translateAlternateColorCodes('&', parsedMessage); player.sendMessage(parsedMessage); } @@ -29,10 +33,9 @@ public class PluginMessages { } public static void sendActionBar(UUID uuid, String message) { - try { - Player player = Bukkit.getPlayer(uuid); - sendActionBar(player, message); - } catch (NullPointerException ignored) {} + Player player = Bukkit.getPlayer(uuid); + if (player == null) return; + sendActionBar(player, message); } public static String parsePlayerName(Player player, String message) { diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 0c03497..2667bd0 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -6,6 +6,7 @@ api-version: 1.13 description: Stop people from getting stabbed! soft-depend: - WorldGuard + - PlaceholderAPI commands: preventstabby: permission: preventstabby.command