diff --git a/core/pom.xml b/core/pom.xml
index 7b46fbfb4..e595e0865 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -160,7 +160,12 @@
org.slf4j
slf4j-simple
- 1.7.32
+ 1.7.33
+
+
+ org.apache.logging.log4j
+ log4j-core
+ 2.17.1
me.blackvein.quests
diff --git a/core/src/main/java/me/blackvein/quests/Quests.java b/core/src/main/java/me/blackvein/quests/Quests.java
index 50078d507..ee77f6441 100644
--- a/core/src/main/java/me/blackvein/quests/Quests.java
+++ b/core/src/main/java/me/blackvein/quests/Quests.java
@@ -15,14 +15,14 @@ package me.blackvein.quests;
import com.codisimus.plugins.phatloots.PhatLootsAPI;
import com.gmail.nossr50.datatypes.skills.SkillType;
import com.herocraftonline.heroes.characters.classes.HeroClass;
-import me.blackvein.quests.actions.IAction;
-import me.blackvein.quests.actions.ActionFactory;
import me.blackvein.quests.actions.Action;
+import me.blackvein.quests.actions.ActionFactory;
import me.blackvein.quests.actions.BukkitActionFactory;
-import me.blackvein.quests.conditions.Condition;
+import me.blackvein.quests.actions.IAction;
import me.blackvein.quests.conditions.BukkitConditionFactory;
-import me.blackvein.quests.conditions.ICondition;
+import me.blackvein.quests.conditions.Condition;
import me.blackvein.quests.conditions.ConditionFactory;
+import me.blackvein.quests.conditions.ICondition;
import me.blackvein.quests.config.ISettings;
import me.blackvein.quests.convo.misc.MiscStringPrompt;
import me.blackvein.quests.convo.misc.NpcOfferQuestPrompt;
@@ -44,6 +44,7 @@ import me.blackvein.quests.listeners.NpcListener;
import me.blackvein.quests.listeners.PartiesListener;
import me.blackvein.quests.listeners.PlayerListener;
import me.blackvein.quests.listeners.UniteListener;
+import me.blackvein.quests.logging.QuestsLog4JFilter;
import me.blackvein.quests.module.ICustomObjective;
import me.blackvein.quests.player.IQuester;
import me.blackvein.quests.quests.BukkitQuestFactory;
@@ -72,6 +73,7 @@ import net.citizensnpcs.api.CitizensAPI;
import net.citizensnpcs.api.npc.NPC;
import net.md_5.bungee.api.chat.ClickEvent;
import net.md_5.bungee.api.chat.TextComponent;
+import org.apache.logging.log4j.LogManager;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Color;
@@ -271,6 +273,7 @@ public class Quests extends JavaPlugin implements QuestsAPI {
});
// 12 - Delay loading of Quests, Actions and modules
+ ((org.apache.logging.log4j.core.Logger) LogManager.getRootLogger()).addFilter(new QuestsLog4JFilter());
delayLoadQuestInfo();
}
diff --git a/core/src/main/java/me/blackvein/quests/convo/quests/objectives/NpcsPrompt.java b/core/src/main/java/me/blackvein/quests/convo/quests/objectives/NpcsPrompt.java
index 1308cb416..8e5f77560 100644
--- a/core/src/main/java/me/blackvein/quests/convo/quests/objectives/NpcsPrompt.java
+++ b/core/src/main/java/me/blackvein/quests/convo/quests/objectives/NpcsPrompt.java
@@ -300,9 +300,10 @@ public class NpcsPrompt extends QuestsEditorNumericPrompt {
= (List) context.getSessionData(pref + CK.S_DELIVERY_NPCS);
if (deliveryNpcs != null) {
for (final int i : deliveryNpcs) {
- text.append(")\n").append(ChatColor.GRAY).append(" - ").append(ChatColor.AQUA).append(i)
- .append(" (").append(plugin.getDependencies().getCitizens().getNPCRegistry()
- .getById(i).getName());
+ text.append("\n").append(ChatColor.GRAY).append(" - ").append(ChatColor.AQUA).append(i)
+ .append(ChatColor.GRAY).append(" (").append(ChatColor.AQUA)
+ .append(plugin.getDependencies().getCitizens().getNPCRegistry()
+ .getById(i).getName()).append(ChatColor.GRAY).append(")");
}
}
return text.toString();
diff --git a/core/src/main/java/me/blackvein/quests/logging/QuestsLog4JFilter.java b/core/src/main/java/me/blackvein/quests/logging/QuestsLog4JFilter.java
new file mode 100644
index 000000000..deef9c61c
--- /dev/null
+++ b/core/src/main/java/me/blackvein/quests/logging/QuestsLog4JFilter.java
@@ -0,0 +1,57 @@
+package me.blackvein.quests.logging;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.Marker;
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.Logger;
+import org.apache.logging.log4j.core.filter.AbstractFilter;
+import org.apache.logging.log4j.message.Message;
+
+public class QuestsLog4JFilter extends AbstractFilter {
+
+ private static final long serialVersionUID = -5594073755007974514L;
+
+ /**
+ * Validates a message and returns the {@link Result} value
+ * depending on whether the message contains undesirable data.
+ *
+ * @param message The message to filter for
+ *
+ * @return Result of DENY or NUETRAL
+ */
+ private static Result validateMessage(String message) {
+ if (message == null) {
+ return Result.NEUTRAL;
+ }
+ // Paper outputs errors when dependencies for module events are missing
+ return message.contains("Plugin Quests") ? Result.DENY : Result.NEUTRAL;
+ }
+
+ @Override
+ public Result filter(LogEvent event) {
+ if (event == null) {
+ return Result.NEUTRAL;
+ }
+
+ return validateMessage(event.getMessage().getFormattedMessage());
+ }
+
+ @Override
+ public Result filter(Logger logger, Level level, Marker marker, Message msg, Throwable t) {
+ return validateMessage(msg.getFormattedMessage());
+ }
+
+ @Override
+ public Result filter(Logger logger, Level level, Marker marker, String msg, Object... params) {
+ return validateMessage(msg);
+ }
+
+ @Override
+ public Result filter(Logger logger, Level level, Marker marker, Object msg, Throwable t) {
+ if (msg == null) {
+ return Result.NEUTRAL;
+ }
+
+ return validateMessage(msg.toString());
+ }
+}