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