diff --git a/src/main/java/buttondevteam/discordplugin/DiscordConnectedPlayer.java b/src/main/java/buttondevteam/discordplugin/DiscordConnectedPlayer.java index 2c9af57..16c4f2e 100644 --- a/src/main/java/buttondevteam/discordplugin/DiscordConnectedPlayer.java +++ b/src/main/java/buttondevteam/discordplugin/DiscordConnectedPlayer.java @@ -67,7 +67,7 @@ public abstract class DiscordConnectedPlayer extends DiscordSenderBase implement this.module = module; uniqueId = uuid; displayName = mcname; - vanillaCmdListener = new VCMDWrapper(VCMDWrapper.createListener(this)); + vanillaCmdListener = new VCMDWrapper(VCMDWrapper.createListener(this, module)); } /** diff --git a/src/main/java/buttondevteam/discordplugin/DiscordPlayerSender.java b/src/main/java/buttondevteam/discordplugin/DiscordPlayerSender.java index fb7a75a..083a141 100755 --- a/src/main/java/buttondevteam/discordplugin/DiscordPlayerSender.java +++ b/src/main/java/buttondevteam/discordplugin/DiscordPlayerSender.java @@ -1,5 +1,6 @@ package buttondevteam.discordplugin; +import buttondevteam.discordplugin.mcchat.MinecraftChatModule; import buttondevteam.discordplugin.playerfaker.VCMDWrapper; import discord4j.core.object.entity.MessageChannel; import discord4j.core.object.entity.User; @@ -14,10 +15,10 @@ public abstract class DiscordPlayerSender extends DiscordSenderBase implements I protected Player player; private @Getter VCMDWrapper vanillaCmdListener; - public DiscordPlayerSender(User user, MessageChannel channel, Player player) { + public DiscordPlayerSender(User user, MessageChannel channel, Player player, MinecraftChatModule module) { super(user, channel); this.player = player; - vanillaCmdListener = new VCMDWrapper(VCMDWrapper.createListener(this, player)); + vanillaCmdListener = new VCMDWrapper(VCMDWrapper.createListener(this, player, module)); } @Override @@ -32,11 +33,11 @@ public abstract class DiscordPlayerSender extends DiscordSenderBase implements I super.sendMessage(messages); } - public static DiscordPlayerSender create(User user, MessageChannel channel, Player player) { + public static DiscordPlayerSender create(User user, MessageChannel channel, Player player, MinecraftChatModule module) { return Mockito.mock(DiscordPlayerSender.class, Mockito.withSettings().stubOnly().defaultAnswer(invocation -> { if (!Modifier.isAbstract(invocation.getMethod().getModifiers())) return invocation.callRealMethod(); return invocation.getMethod().invoke(((DiscordPlayerSender) invocation.getMock()).player, invocation.getArguments()); - }).useConstructor(user, channel, player)); + }).useConstructor(user, channel, player, module)); } } diff --git a/src/main/java/buttondevteam/discordplugin/broadcaster/GeneralEventBroadcasterModule.java b/src/main/java/buttondevteam/discordplugin/broadcaster/GeneralEventBroadcasterModule.java index 5a0317e..44492eb 100644 --- a/src/main/java/buttondevteam/discordplugin/broadcaster/GeneralEventBroadcasterModule.java +++ b/src/main/java/buttondevteam/discordplugin/broadcaster/GeneralEventBroadcasterModule.java @@ -1,6 +1,5 @@ package buttondevteam.discordplugin.broadcaster; -import buttondevteam.discordplugin.DPUtils; import buttondevteam.discordplugin.DiscordPlugin; import buttondevteam.lib.TBMCCoreAPI; import buttondevteam.lib.architecture.Component; @@ -17,12 +16,12 @@ public class GeneralEventBroadcasterModule extends Component { protected void enable() { try { PlayerListWatcher.hookUpDown(true); - DPUtils.getLogger().info("Finished hooking into the player list"); + log("Finished hooking into the player list"); hooked = true; } catch (Exception e) { TBMCCoreAPI.SendException("Error while hacking the player list! Disable this module if you're on an incompatible version.", e); } catch (NoClassDefFoundError e) { - DPUtils.getLogger().warning("Error while hacking the player list! Disable this module if you're on an incompatible version."); + logWarn("Error while hacking the player list! Disable this module if you're on an incompatible version."); } } @@ -32,9 +31,9 @@ public class GeneralEventBroadcasterModule extends Component { try { if (!hooked) return; if (PlayerListWatcher.hookUpDown(false)) - DPUtils.getLogger().info("Finished unhooking the player list!"); + log("Finished unhooking the player list!"); else - DPUtils.getLogger().info("Didn't have the player list hooked."); + log("Didn't have the player list hooked."); hooked = false; } catch (Exception e) { TBMCCoreAPI.SendException("Error while hacking the player list!", e); diff --git a/src/main/java/buttondevteam/discordplugin/mcchat/MCChatListener.java b/src/main/java/buttondevteam/discordplugin/mcchat/MCChatListener.java index 0de2e1a..e7cfb45 100755 --- a/src/main/java/buttondevteam/discordplugin/mcchat/MCChatListener.java +++ b/src/main/java/buttondevteam/discordplugin/mcchat/MCChatListener.java @@ -38,7 +38,7 @@ import java.util.stream.Collectors; public class MCChatListener implements Listener { private BukkitTask sendtask; - private LinkedBlockingQueue> sendevents = new LinkedBlockingQueue<>(); + private final LinkedBlockingQueue> sendevents = new LinkedBlockingQueue<>(); private Runnable sendrunnable; private static Thread sendthread; private final MinecraftChatModule module; @@ -362,7 +362,7 @@ public class MCChatListener implements Listener { + "ou can access all of your regular commands (even offline) in private chat: DM me `mcchat`!"); return true; } - Bukkit.getLogger().info(dsender.getName() + " issued command from Discord: /" + cmd); + module.log(dsender.getName() + " ran from DC: /" + cmd); val channel = clmd == null ? user.channel().get() : clmd.mcchannel; val ev = new TBMCCommandPreprocessEvent(dsender, channel, dmessage, clmd == null ? dsender : clmd.dcp); Bukkit.getScheduler().runTask(DiscordPlugin.plugin, //Commands need to be run sync @@ -372,7 +372,9 @@ public class MCChatListener implements Listener { return; try { String mcpackage = Bukkit.getServer().getClass().getPackage().getName(); - if (mcpackage.contains("1_12")) + if (!module.enableVanillaCommands().get()) + Bukkit.dispatchCommand(dsender, cmd); + else if (mcpackage.contains("1_12")) VanillaCommandListener.runBukkitOrVanillaCommand(dsender, cmd); else if (mcpackage.contains("1_14")) VanillaCommandListener14.runBukkitOrVanillaCommand(dsender, cmd); diff --git a/src/main/java/buttondevteam/discordplugin/mcchat/MCChatUtils.java b/src/main/java/buttondevteam/discordplugin/mcchat/MCChatUtils.java index 3e1410a..f8e8ab7 100644 --- a/src/main/java/buttondevteam/discordplugin/mcchat/MCChatUtils.java +++ b/src/main/java/buttondevteam/discordplugin/mcchat/MCChatUtils.java @@ -109,12 +109,12 @@ public class MCChatUtils { } public static T addSender(HashMap> senders, - User user, T sender) { + User user, T sender) { return addSender(senders, user.getId().asString(), sender); } public static T addSender(HashMap> senders, - String did, T sender) { + String did, T sender) { var map = senders.get(did); if (map == null) map = new HashMap<>(); @@ -124,7 +124,7 @@ public class MCChatUtils { } public static T getSender(HashMap> senders, - Snowflake channel, User user) { + Snowflake channel, User user) { var map = senders.get(user.getId().asString()); if (map != null) return map.get(channel); @@ -132,7 +132,7 @@ public class MCChatUtils { } public static T removeSender(HashMap> senders, - Snowflake channel, User user) { + Snowflake channel, User user) { var map = senders.get(user.getId().asString()); if (map != null) return map.remove(channel); @@ -355,7 +355,8 @@ public class MCChatUtils { } callEventExcludingSome(new PlayerJoinEvent(dcp, "")); dcp.setLoggedIn(true); - DPUtils.getLogger().info(dcp.getName() + " (" + dcp.getUniqueId() + ") logged in from Discord"); + if (module != null) + module.log(dcp.getName() + " (" + dcp.getUniqueId() + ") logged in from Discord"); }); } @@ -371,7 +372,8 @@ public class MCChatUtils { if (needsSync) callEventSync(event); else callEventExcludingSome(event); dcp.setLoggedIn(false); - DPUtils.getLogger().info(dcp.getName() + " (" + dcp.getUniqueId() + ") logged out from Discord"); + if (module != null) + module.log(dcp.getName() + " (" + dcp.getUniqueId() + ") logged out from Discord"); } static void callEventSync(Event event) { diff --git a/src/main/java/buttondevteam/discordplugin/mcchat/MCListener.java b/src/main/java/buttondevteam/discordplugin/mcchat/MCListener.java index 5e5575b..2c92a94 100644 --- a/src/main/java/buttondevteam/discordplugin/mcchat/MCListener.java +++ b/src/main/java/buttondevteam/discordplugin/mcchat/MCListener.java @@ -55,9 +55,9 @@ class MCListener implements Listener { if (dp != null) { DiscordPlugin.dc.getUserById(Snowflake.of(dp.getDiscordID())).flatMap(user -> user.getPrivateChannel().flatMap(chan -> module.chatChannelMono().flatMap(cc -> { MCChatUtils.addSender(MCChatUtils.OnlineSenders, dp.getDiscordID(), - DiscordPlayerSender.create(user, chan, p)); + DiscordPlayerSender.create(user, chan, p, module)); MCChatUtils.addSender(MCChatUtils.OnlineSenders, dp.getDiscordID(), - DiscordPlayerSender.create(user, cc, p)); //Stored per-channel + DiscordPlayerSender.create(user, cc, p, module)); //Stored per-channel return Mono.empty(); }))).subscribe(); } @@ -130,7 +130,7 @@ class MCListener implements Listener { user.removeRole(r.getId()); val modlog = module.modlogChannel().get(); String msg = (e.getValue() ? "M" : "Unm") + "uted user: " + user.getUsername() + "#" + user.getDiscriminator(); - DPUtils.getLogger().info(msg); + module.log(msg); if (modlog != null) return modlog.flatMap(ch -> ch.createMessage(msg)); return Mono.empty(); diff --git a/src/main/java/buttondevteam/discordplugin/mcchat/MinecraftChatModule.java b/src/main/java/buttondevteam/discordplugin/mcchat/MinecraftChatModule.java index 282c827..7813813 100644 --- a/src/main/java/buttondevteam/discordplugin/mcchat/MinecraftChatModule.java +++ b/src/main/java/buttondevteam/discordplugin/mcchat/MinecraftChatModule.java @@ -106,6 +106,13 @@ public class MinecraftChatModule extends Component { return getConfig().getData("profileURL", ""); } + /** + * Enables support for running vanilla commands through Discord, if you ever need it. + */ + public ConfigData enableVanillaCommands() { + return getConfig().getData("enableVanillaCommands", true); + } + @Override protected void enable() { if (DPUtils.disableIfConfigErrorRes(this, chatChannel(), chatChannelMono())) @@ -146,7 +153,7 @@ public class MinecraftChatModule extends Component { } catch (Exception e) { TBMCCoreAPI.SendException("Failed to init LuckPerms injector", e); } catch (NoClassDefFoundError e) { - getPlugin().getLogger().info("No LuckPerms, not injecting"); + log("No LuckPerms, not injecting"); //e.printStackTrace(); } } diff --git a/src/main/java/buttondevteam/discordplugin/playerfaker/VCMDWrapper.java b/src/main/java/buttondevteam/discordplugin/playerfaker/VCMDWrapper.java index 21657a6..ae3fd82 100644 --- a/src/main/java/buttondevteam/discordplugin/playerfaker/VCMDWrapper.java +++ b/src/main/java/buttondevteam/discordplugin/playerfaker/VCMDWrapper.java @@ -1,8 +1,8 @@ package buttondevteam.discordplugin.playerfaker; -import buttondevteam.discordplugin.DPUtils; import buttondevteam.discordplugin.DiscordSenderBase; import buttondevteam.discordplugin.IMCPlayer; +import buttondevteam.discordplugin.mcchat.MinecraftChatModule; import buttondevteam.lib.TBMCCoreAPI; import lombok.Getter; import lombok.RequiredArgsConstructor; @@ -19,8 +19,8 @@ public class VCMDWrapper { * * @param player The Discord sender player (the wrapper) */ - public static > Object createListener(T player) { - return createListener(player, null); + public static > Object createListener(T player, MinecraftChatModule module) { + return createListener(player, null, module); } /** @@ -28,8 +28,9 @@ public class VCMDWrapper { * * @param player The Discord sender player (the wrapper) * @param bukkitplayer The Bukkit player to send the raw message to + * @param module The Minecraft chat module */ - public static > Object createListener(T player, Player bukkitplayer) { + public static > Object createListener(T player, Player bukkitplayer, MinecraftChatModule module) { try { Object ret; String mcpackage = Bukkit.getServer().getClass().getPackage().getName(); @@ -42,16 +43,16 @@ public class VCMDWrapper { else ret = null; if (ret == null) - compatWarning(); + compatWarning(module); return ret; } catch (NoClassDefFoundError | Exception e) { - compatWarning(); + compatWarning(module); TBMCCoreAPI.SendException("Failed to create vanilla command listener", e); return null; } } - private static void compatWarning() { - DPUtils.getLogger().warning("Vanilla commands won't be available from Discord due to a compatibility error."); + private static void compatWarning(MinecraftChatModule module) { + module.logWarn("Vanilla commands won't be available from Discord due to a compatibility error. Disable vanilla command support to remove this message."); } } diff --git a/src/main/java/buttondevteam/discordplugin/role/GameRoleModule.java b/src/main/java/buttondevteam/discordplugin/role/GameRoleModule.java index e70bd6a..c5ebd98 100644 --- a/src/main/java/buttondevteam/discordplugin/role/GameRoleModule.java +++ b/src/main/java/buttondevteam/discordplugin/role/GameRoleModule.java @@ -77,7 +77,7 @@ public class GameRoleModule extends Component { } else if (roleEvent instanceof RoleUpdateEvent) { val event = (RoleUpdateEvent) roleEvent; if (!event.getOld().isPresent()) { - DPUtils.getLogger().warning("Old role not stored, cannot update game role!"); + grm.logWarn("Old role not stored, cannot update game role!"); return; } Role or = event.getOld().get();