diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java
index d67e8d9c6fb..3a1971a9973 100644
--- a/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java
+++ b/Essentials/src/com/earth2me/essentials/EssentialsPlayerListener.java
@@ -5,6 +5,7 @@
import com.earth2me.essentials.textreader.TextInput;
import com.earth2me.essentials.textreader.TextPager;
import com.earth2me.essentials.utils.DateUtil;
+import com.earth2me.essentials.utils.FormatUtil;
import com.earth2me.essentials.utils.LocationUtil;
import net.ess3.api.IEssentials;
import net.ess3.nms.refl.ReflUtil;
@@ -152,7 +153,12 @@ public void onPlayerQuit(final PlayerQuitEvent event) {
event.setQuitMessage(null);
} else if (ess.getSettings().isCustomQuitMessage() && event.getQuitMessage() != null) {
final Player player = event.getPlayer();
- event.setQuitMessage(ess.getSettings().getCustomQuitMessage().replace("{PLAYER}", player.getDisplayName()).replace("{USERNAME}", player.getName()));
+ String quitMessage = ess.getSettings().getCustomQuitMessage()
+ .replace("{PLAYER}", player.getDisplayName())
+ .replace("{USERNAME}", player.getName());
+ //Untested, should work tho
+ quitMessage = FormatUtil.placeholderAPIFormat(user, quitMessage);
+ event.setQuitMessage(quitMessage);
}
user.startTransaction();
@@ -256,9 +262,11 @@ public void run() {
} else if (message == null) {
//NOOP
} else if (ess.getSettings().isCustomJoinMessage()) {
+ //Untested, should work tho
String msg = ess.getSettings().getCustomJoinMessage()
.replace("{PLAYER}", player.getDisplayName()).replace("{USERNAME}", player.getName())
.replace("{UNIQUE}", NumberFormat.getInstance().format(ess.getUserMap().getUniqueUsers()));
+ msg = FormatUtil.placeholderAPIFormat(player, msg);
ess.getServer().broadcastMessage(msg);
} else if (ess.getSettings().allowSilentJoinQuit()) {
ess.getServer().broadcastMessage(message);
diff --git a/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java b/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java
index d7543cdc8d5..1499b83bd5d 100644
--- a/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java
+++ b/Essentials/src/com/earth2me/essentials/EssentialsPluginListener.java
@@ -1,7 +1,9 @@
package com.earth2me.essentials;
import com.earth2me.essentials.register.payment.Methods;
+import com.earth2me.essentials.utils.FormatUtil;
import net.ess3.api.IEssentials;
+import org.bukkit.Bukkit;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
@@ -29,6 +31,10 @@ public void onPluginEnable(final PluginEnableEvent event) {
if (!Methods.hasMethod() && Methods.setMethod(ess.getServer().getPluginManager())) {
ess.getLogger().log(Level.INFO, "Payment method found (" + Methods.getMethod().getLongName() + " version: " + ess.getPaymentMethod().getMethod().getVersion() + ")");
}
+
+ if((FormatUtil.papiEnabled == null || !FormatUtil.papiEnabled) && event.getPlugin().getName().equals("PlaceholderAPI")) {
+ FormatUtil.papiEnabled = true;
+ }
}
@EventHandler(priority = EventPriority.MONITOR)
@@ -42,6 +48,10 @@ public void onPluginDisable(final PluginDisableEvent event) {
Methods.reset();
ess.getLogger().log(Level.INFO, "Payment method was disabled. No longer accepting payments.");
}
+
+ if(FormatUtil.papiEnabled != null && FormatUtil.papiEnabled && event.getPlugin().getName().equals("PlaceholderAPI")){
+ FormatUtil.papiEnabled = false;
+ }
}
@Override
diff --git a/Essentials/src/com/earth2me/essentials/User.java b/Essentials/src/com/earth2me/essentials/User.java
index f6f502b172a..51295378071 100644
--- a/Essentials/src/com/earth2me/essentials/User.java
+++ b/Essentials/src/com/earth2me/essentials/User.java
@@ -784,6 +784,7 @@ public void setRecipeSee(boolean recipeSee) {
@Override
public void sendMessage(String message) {
if (!message.isEmpty()) {
+ message = FormatUtil.placeholderAPIFormat(this, message);
base.sendMessage(message);
}
}
diff --git a/Essentials/src/com/earth2me/essentials/textreader/KeywordReplacer.java b/Essentials/src/com/earth2me/essentials/textreader/KeywordReplacer.java
index 2a1ed4caee2..7f1cf87e7c2 100644
--- a/Essentials/src/com/earth2me/essentials/textreader/KeywordReplacer.java
+++ b/Essentials/src/com/earth2me/essentials/textreader/KeywordReplacer.java
@@ -6,6 +6,7 @@
import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.DateUtil;
import com.earth2me.essentials.utils.DescParseTickFormat;
+import com.earth2me.essentials.utils.FormatUtil;
import com.earth2me.essentials.utils.NumberUtil;
import net.ess3.api.IEssentials;
import org.bukkit.Location;
@@ -74,6 +75,7 @@ private void replaceKeywords(final CommandSource sender) {
for (int i = 0; i < input.getLines().size(); i++) {
String line = input.getLines().get(i);
+ line = FormatUtil.placeholderAPIFormat(user, line);
final Matcher matcher = KEYWORD.matcher(line);
while (matcher.find()) {
diff --git a/Essentials/src/com/earth2me/essentials/utils/FormatUtil.java b/Essentials/src/com/earth2me/essentials/utils/FormatUtil.java
index 7de0a472688..1fdb725d5a6 100644
--- a/Essentials/src/com/earth2me/essentials/utils/FormatUtil.java
+++ b/Essentials/src/com/earth2me/essentials/utils/FormatUtil.java
@@ -1,7 +1,10 @@
package com.earth2me.essentials.utils;
+import me.clip.placeholderapi.PlaceholderAPI;
import net.ess3.api.IUser;
+import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
+import org.bukkit.entity.Player;
import java.util.regex.Pattern;
@@ -22,6 +25,9 @@ public class FormatUtil {
static final transient Pattern URL_PATTERN = Pattern.compile("((?:(?:https?)://)?[\\w-_\\.]{2,})\\.([a-zA-Z]{2,3}(?:/\\S+)?)");
public static final Pattern IPPATTERN = Pattern.compile("^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." + "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\.([01]?\\d\\d?|2[0-4]\\d|25[0-5])$");
+ //If we are going to make this static, should we move it?
+ public static Boolean papiEnabled = null;
+
//This method is used to simply strip the native minecraft colour codes
public static String stripFormat(final String input) {
if (input == null) {
@@ -38,6 +44,28 @@ public static String stripEssentialsFormat(final String input) {
return stripColor(input, REPLACE_ALL_PATTERN);
}
+ public static String placeholderAPIFormat(final IUser user, final String input) {
+ return placeholderAPIFormat(user.getBase(), input);
+ }
+
+ //Formatting PlaceholderAPI Placeholders, returns the original string if the plugin isn't enabled
+ //Seperate this from #getChatFormat() in ISettings due to the requirement of Player as an argument
+ public static String placeholderAPIFormat(final Player player, final String input) {
+ if (input == null) {
+ return null;
+ }
+
+ if (papiEnabled == null) {
+ papiEnabled = Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI");
+ }
+
+ //Checking here instead, please tell me if there is a better way
+ if (papiEnabled) {
+ return PlaceholderAPI.setPlaceholders(player, input);
+ }
+ return input;
+ }
+
//This is the general permission sensitive message format function, checks for urls.
public static String formatMessage(final IUser user, final String permBase, final String input) {
if (input == null) {
diff --git a/Essentials/src/plugin.yml b/Essentials/src/plugin.yml
index 6012c572722..e7fdba30cf6 100644
--- a/Essentials/src/plugin.yml
+++ b/Essentials/src/plugin.yml
@@ -5,7 +5,7 @@ main: com.earth2me.essentials.Essentials
version: ${full.version}
website: http://tiny.cc/EssentialsCommands
description: Provides an essential, core set of commands for Bukkit.
-softdepend: [Vault]
+softdepend: [Vault, PlaceholderAPI]
authors: [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology, KHobbits, md_5, Iaccidentally, drtshock, vemacs, SupaHam, md678685]
commands:
afk:
diff --git a/Essentials/test/com/earth2me/essentials/FakeServer.java b/Essentials/test/com/earth2me/essentials/FakeServer.java
index 41d50879d7d..7d53a3dccc5 100644
--- a/Essentials/test/com/earth2me/essentials/FakeServer.java
+++ b/Essentials/test/com/earth2me/essentials/FakeServer.java
@@ -989,7 +989,7 @@ public Plugin[] getPlugins() {
@Override
public boolean isPluginEnabled(String name) {
- throw new UnsupportedOperationException("Not supported yet.");
+ return name.equals("Essentials");
}
@Override
diff --git a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerLowest.java b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerLowest.java
index 95284e5c965..20d904b76e0 100644
--- a/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerLowest.java
+++ b/EssentialsChat/src/com/earth2me/essentials/chat/EssentialsChatPlayerListenerLowest.java
@@ -3,6 +3,7 @@
import com.earth2me.essentials.User;
import com.earth2me.essentials.utils.FormatUtil;
import net.ess3.api.IEssentials;
+import org.bukkit.Bukkit;
import org.bukkit.Server;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
@@ -57,6 +58,8 @@ public void onPlayerChat(final AsyncPlayerChatEvent event) {
format = format.replace("{5}", team == null ? "" : team.getDisplayName());
format = format.replace("{6}", prefix);
format = format.replace("{7}", suffix);
+ format = FormatUtil.placeholderAPIFormat(user, format);
+
synchronized (format) {
event.setFormat(format);
}
diff --git a/EssentialsChat/src/plugin.yml b/EssentialsChat/src/plugin.yml
index 5f855228b0e..09249aaa4d1 100644
--- a/EssentialsChat/src/plugin.yml
+++ b/EssentialsChat/src/plugin.yml
@@ -7,4 +7,4 @@ website: http://tiny.cc/EssentialsCommands
description: Provides chat control features for Essentials. Requires Permissions.
authors: [Zenexer, ementalo, Aelux, Brettflan, KimKandor, snowleo, ceulemans, Xeology, KHobbits, md_5, Okamosy, Iaccidentally]
depend: [Essentials]
-#softdepend: [Factions]
+softdepend: [PlaceholderAPI]
diff --git a/pom.xml b/pom.xml
index 3efbf97d14e..14250c2a433 100644
--- a/pom.xml
+++ b/pom.xml
@@ -31,6 +31,10 @@
bukkit-repo
https://hub.spigotmc.org/nexus/content/groups/public/
+
+ placeholderapi
+ http://repo.extendedclip.com/content/repositories/placeholderapi/
+
@@ -68,6 +72,12 @@
1.12.2
provided
+
+ me.clip
+ placeholderapi
+ LATEST
+ provided
+