From 4082c2abbf2bd2489535d9603d7d9aa169f7dae6 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Sun, 30 Jun 2019 22:05:33 +0200 Subject: [PATCH] Fixes, error handling Sync events Vanilla command error handling (Older changes ^) Fixed exception Coder pinging --- .../discordplugin/DiscordConnectedPlayer.java | 6 ++- .../discordplugin/DiscordPlayerSender.java | 6 ++- .../exceptions/ExceptionListenerModule.java | 44 +++++++++---------- .../discordplugin/mcchat/MCChatListener.java | 9 +++- 4 files changed, 39 insertions(+), 26 deletions(-) diff --git a/src/main/java/buttondevteam/discordplugin/DiscordConnectedPlayer.java b/src/main/java/buttondevteam/discordplugin/DiscordConnectedPlayer.java index 6e30a53..843484c 100755 --- a/src/main/java/buttondevteam/discordplugin/DiscordConnectedPlayer.java +++ b/src/main/java/buttondevteam/discordplugin/DiscordConnectedPlayer.java @@ -19,7 +19,11 @@ public class DiscordConnectedPlayer extends DiscordFakePlayer implements IMCPlay public DiscordConnectedPlayer(User user, MessageChannel channel, UUID uuid, String mcname, MinecraftChatModule module) { super(user, channel, nextEntityId++, uuid, mcname, module); - vanillaCmdListener = new VanillaCommandListener<>(this); + try { + vanillaCmdListener = new VanillaCommandListener<>(this); + } catch (NoClassDefFoundError e) { + DPUtils.getLogger().warning("Vanilla commands won't be available from Discord due to a compatibility error."); + } } } diff --git a/src/main/java/buttondevteam/discordplugin/DiscordPlayerSender.java b/src/main/java/buttondevteam/discordplugin/DiscordPlayerSender.java index 807abd4..41bb696 100755 --- a/src/main/java/buttondevteam/discordplugin/DiscordPlayerSender.java +++ b/src/main/java/buttondevteam/discordplugin/DiscordPlayerSender.java @@ -41,7 +41,11 @@ public class DiscordPlayerSender extends DiscordSenderBase implements IMCPlayer< public DiscordPlayerSender(User user, MessageChannel channel, Player player) { super(user, channel); this.player = player; - vanillaCmdListener = new VanillaCommandListener(this); + try { + vanillaCmdListener = new VanillaCommandListener(this); + } catch (NoClassDefFoundError e) { + DPUtils.getLogger().warning("Vanilla commands won't be available from Discord due to a compatibility error."); + } } @Override diff --git a/src/main/java/buttondevteam/discordplugin/exceptions/ExceptionListenerModule.java b/src/main/java/buttondevteam/discordplugin/exceptions/ExceptionListenerModule.java index d57c313..17d029a 100755 --- a/src/main/java/buttondevteam/discordplugin/exceptions/ExceptionListenerModule.java +++ b/src/main/java/buttondevteam/discordplugin/exceptions/ExceptionListenerModule.java @@ -50,28 +50,28 @@ public class ExceptionListenerModule extends Component implements private static void SendException(Throwable e, String sourcemessage) { if (instance == null) return; try { - Mono channel = getChannel(); - assert channel != null; - Mono coderRole; - if (channel instanceof GuildChannel) - coderRole = instance.pingRole(((GuildChannel) channel).getGuild()).get(); - else - coderRole = Mono.empty(); - coderRole.map(role -> TBMCCoreAPI.IsTestServer() ? new StringBuilder() - : new StringBuilder(role.getMention()).append("\n")) - .defaultIfEmpty(new StringBuilder()) - .flatMap(sb -> { - sb.append(sourcemessage).append("\n"); - sb.append("```").append("\n"); - String stackTrace = Arrays.stream(ExceptionUtils.getStackTrace(e).split("\\n")) - .filter(s -> !s.contains("\tat ") || s.contains("\tat buttondevteam.")) - .collect(Collectors.joining("\n")); - if (sb.length() + stackTrace.length() >= 1980) - stackTrace = stackTrace.substring(0, 1980 - sb.length()); - sb.append(stackTrace).append("\n"); - sb.append("```"); - return channel.flatMap(ch -> ch.createMessage(sb.toString())); - }).subscribe(); + getChannel().flatMap(channel -> { + Mono coderRole; + if (channel instanceof GuildChannel) + coderRole = instance.pingRole(((GuildChannel) channel).getGuild()).get(); + else + coderRole = Mono.empty(); + return coderRole.map(role -> TBMCCoreAPI.IsTestServer() ? new StringBuilder() + : new StringBuilder(role.getMention()).append("\n")) + .defaultIfEmpty(new StringBuilder()) + .flatMap(sb -> { + sb.append(sourcemessage).append("\n"); + sb.append("```").append("\n"); + String stackTrace = Arrays.stream(ExceptionUtils.getStackTrace(e).split("\\n")) + .filter(s -> !s.contains("\tat ") || s.contains("\tat buttondevteam.")) + .collect(Collectors.joining("\n")); + if (sb.length() + stackTrace.length() >= 1980) + stackTrace = stackTrace.substring(0, 1980 - sb.length()); + sb.append(stackTrace).append("\n"); + sb.append("```"); + return channel.createMessage(sb.toString()); + }); + }).subscribe(); } catch (Exception ex) { ex.printStackTrace(); } diff --git a/src/main/java/buttondevteam/discordplugin/mcchat/MCChatListener.java b/src/main/java/buttondevteam/discordplugin/mcchat/MCChatListener.java index aa7e278..790edfb 100755 --- a/src/main/java/buttondevteam/discordplugin/mcchat/MCChatListener.java +++ b/src/main/java/buttondevteam/discordplugin/mcchat/MCChatListener.java @@ -321,7 +321,8 @@ public class MCChatListener implements Listener { return; } val ev = new TBMCCommandPreprocessEvent(dsender, dmessage); - Bukkit.getPluginManager().callEvent(ev); + Bukkit.getScheduler().runTask(DiscordPlugin.plugin, () -> + Bukkit.getPluginManager().callEvent(ev)); if (ev.isCancelled()) return; int spi = cmdlowercased.indexOf(' '); @@ -338,7 +339,11 @@ public class MCChatListener implements Listener { if (clmd != null) { channel.set(clmd.mcchannel); //Hack to send command in the channel } //TODO: Permcheck isn't implemented for commands - VanillaCommandListener.runBukkitOrVanillaCommand(dsender, cmd); + try { + VanillaCommandListener.runBukkitOrVanillaCommand(dsender, cmd); + } catch (NoClassDefFoundError e) { + Bukkit.dispatchCommand(dsender, cmd); + } Bukkit.getLogger().info(dsender.getName() + " issued command from Discord: /" + cmdlowercased); if (clmd != null) channel.set(chtmp);