diff --git a/src/main/java/buttondevteam/discordplugin/BukkitLogWatcher.java b/src/main/java/buttondevteam/discordplugin/BukkitLogWatcher.java new file mode 100644 index 0000000..b02c088 --- /dev/null +++ b/src/main/java/buttondevteam/discordplugin/BukkitLogWatcher.java @@ -0,0 +1,26 @@ +package buttondevteam.discordplugin; + +import buttondevteam.discordplugin.mcchat.MinecraftChatModule; +import buttondevteam.discordplugin.util.DPState; +import org.apache.logging.log4j.Level; +import org.apache.logging.log4j.core.Filter; +import org.apache.logging.log4j.core.LogEvent; +import org.apache.logging.log4j.core.appender.AbstractAppender; +import org.apache.logging.log4j.core.filter.LevelRangeFilter; +import org.apache.logging.log4j.core.layout.PatternLayout; +import org.bukkit.Bukkit; + +public class BukkitLogWatcher extends AbstractAppender { + protected BukkitLogWatcher() { + super("ChromaDiscord", + LevelRangeFilter.createFilter(Level.INFO, Level.INFO, Filter.Result.ACCEPT, Filter.Result.DENY), + PatternLayout.createDefaultLayout()); + } + + @Override + public void append(LogEvent logEvent) { + Bukkit.getLogger().warning("Message: " + logEvent.getMessage().getFormattedMessage()); + if (logEvent.getMessage().getFormattedMessage().contains("Attempting to restart with ")) + MinecraftChatModule.state = DPState.RESTARTING_SERVER; + } +} diff --git a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java index 6f6770a..f6f0bbf 100755 --- a/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java +++ b/src/main/java/buttondevteam/discordplugin/DiscordPlugin.java @@ -32,6 +32,8 @@ import discord4j.core.object.reaction.ReactionEmoji; import discord4j.store.jdk.JdkStoreService; import lombok.Getter; import lombok.val; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.core.Logger; import org.bukkit.configuration.file.YamlConfiguration; import org.mockito.internal.util.MockUtil; import reactor.core.publisher.Mono; @@ -49,6 +51,7 @@ public class DiscordPlugin extends ButtonPlugin { @Getter private Command2DC manager; private boolean starting; + private BukkitLogWatcher logWatcher; /** * The prefix to use with Discord commands like /role. It only works in the bot channel. @@ -215,6 +218,20 @@ public class DiscordPlugin extends ButtonPlugin { TBMCCoreAPI.SendUnsentExceptions(); TBMCCoreAPI.SendUnsentDebugMessages(); + //Bukkit.getLogger().addHandler(new BukkitLogWatcher()); + /*val lc = (LoggerContext) LogManager.getContext(false); + var blw = new BukkitLogWatcher(); + blw.start(); + lc.getConfiguration().addAppender(blw); + Logger logger = lc.getRootLogger(); + logger.addAppender(lc.getConfiguration().getAppender(blw.getName())); + logger.get().addAppender(blw, Level.INFO, blw.getFilter()); + lc.updateLoggers();*/ + var blw = new BukkitLogWatcher(); + blw.start(); + ((Logger) LogManager.getRootLogger()).addAppender(blw); + logWatcher = blw; + if (!TBMCCoreAPI.IsTestServer()) { dc.updatePresence(Presence.online(Activity.playing("Minecraft"))).subscribe(); } else { @@ -259,6 +276,7 @@ public class DiscordPlugin extends ButtonPlugin { ChromaBot.delete(); //timings.printElapsed("Updating presence..."); //dc.updatePresence(Presence.idle(Activity.playing("logging out"))).block(); //No longer using the same account for testing + ((Logger) LogManager.getRootLogger()).removeAppender(logWatcher); timings.printElapsed("Logging out..."); dc.logout().block(); mainServer = null; //Allow ReadyEvent again diff --git a/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java b/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java index f90dfce..febe7ea 100755 --- a/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java @@ -5,7 +5,7 @@ import buttondevteam.discordplugin.DiscordPlugin; import buttondevteam.discordplugin.commands.ConnectCommand; import buttondevteam.discordplugin.mcchat.MinecraftChatModule; import buttondevteam.discordplugin.util.DPState; -import buttondevteam.lib.TBMCCommandPreprocessEvent; +import buttondevteam.lib.ScheduledServerRestartEvent; import buttondevteam.lib.player.TBMCPlayerGetInfoEvent; import discord4j.common.util.Snowflake; import discord4j.core.object.entity.Member; @@ -53,11 +53,16 @@ public class MCListener implements Listener { } } - @EventHandler + /*@EventHandler public void onCommandPreprocess(TBMCCommandPreprocessEvent e) { if (e.getMessage().equalsIgnoreCase("/stop")) MinecraftChatModule.state = DPState.STOPPING_SERVER; - else + else if (e.getMessage().equalsIgnoreCase("/restart")) MinecraftChatModule.state = DPState.RESTARTING_SERVER; + }*/ + + @EventHandler //We don't really need this with the logger stuff but hey + public void onScheduledRestart(ScheduledServerRestartEvent e) { + MinecraftChatModule.state = DPState.RESTARTING_SERVER; } }