From a85b7f9a2d31e914735785dbe180cf66c153b55e Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Sun, 9 Jul 2017 21:30:37 +0200 Subject: [PATCH] Continued work on mcchat --- .../discordplugin/commands/MCChatCommand.java | 4 ++-- .../listeners/MCChatListener.java | 18 ++++++++++++++++-- .../discordplugin/listeners/MCListener.java | 13 +++++++++++-- 3 files changed, 29 insertions(+), 6 deletions(-) diff --git a/src/main/java/buttondevteam/discordplugin/commands/MCChatCommand.java b/src/main/java/buttondevteam/discordplugin/commands/MCChatCommand.java index e25092c..6d8f736 100644 --- a/src/main/java/buttondevteam/discordplugin/commands/MCChatCommand.java +++ b/src/main/java/buttondevteam/discordplugin/commands/MCChatCommand.java @@ -16,13 +16,13 @@ public class MCChatCommand extends DiscordCommandBase { @Override public void run(IMessage message, String args) { if (!message.getChannel().isPrivate()) { - message.reply("This command can only be issued while DMing the bot."); + message.reply("This command can only be issued in a direct message with the bot."); return; } try (final DiscordPlayer user = DiscordPlayer.getUser(message.getAuthor().getStringID(), DiscordPlayer.class)) { PlayerData mcchat = user.minecraftChat(); mcchat.set(!mcchat.get()); - MCChatListener.privateMCChat(message.getChannel(), mcchat.get()); + MCChatListener.privateMCChat(message.getChannel(), mcchat.get(), message.getAuthor(), user); message.reply("Minecraft chat " + (mcchat.get() // ? "enabled. Use '" + message.getClient().getOurUser().mention() + " mcchat' (with the mention) to disable." // diff --git a/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java b/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java index 366626e..caacc2d 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java @@ -13,6 +13,8 @@ import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerJoinEvent; +import org.bukkit.event.player.PlayerQuitEvent; import buttondevteam.discordplugin.*; import buttondevteam.lib.*; @@ -123,8 +125,20 @@ public class MCChatListener implements Listener, IListener */ private static ArrayList lastmsgPerUser = new ArrayList(); - public static boolean privateMCChat(IChannel channel, boolean start) { - return start ? lastmsgPerUser.add(new LastMsgData(channel)) + public static boolean privateMCChat(IChannel channel, boolean start, IUser user, DiscordPlayer dp) { + if (start) { + val sender = new DiscordConnectedPlayer(user, channel, + UUID.fromString(dp.getConnectedID(TBMCPlayer.class))); + ConnectedSenders.put(user.getStringID(), sender); + if (!OnlineSenders.containsKey(user.getStringID()))// If the player is online, that takes precedence + Bukkit.getPluginManager().callEvent(new PlayerJoinEvent(sender, "")); + } else { + val sender = ConnectedSenders.remove(user.getStringID()); + if (!OnlineSenders.containsKey(user.getStringID()))// If the player is online, that takes precedence + Bukkit.getPluginManager().callEvent(new PlayerQuitEvent(sender, "")); + } + return start // + ? lastmsgPerUser.add(new LastMsgData(channel)) // : lastmsgPerUser.removeIf(lmd -> lmd.channel.getLongID() == channel.getLongID()); } diff --git a/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java b/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java index 89af699..8dbec53 100644 --- a/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java @@ -1,6 +1,5 @@ package buttondevteam.discordplugin.listeners; -import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.EventPriority; @@ -10,7 +9,9 @@ import org.bukkit.event.server.ServerCommandEvent; import com.earth2me.essentials.CommandSource; +import buttondevteam.discordplugin.DiscordConnectedPlayer; import buttondevteam.discordplugin.DiscordPlayer; +import buttondevteam.discordplugin.DiscordPlayerSender; import buttondevteam.discordplugin.DiscordPlugin; import buttondevteam.discordplugin.commands.ConnectCommand; import buttondevteam.lib.TBMCCoreAPI; @@ -24,7 +25,12 @@ import sx.blah.discord.util.MissingPermissionsException; public class MCListener implements Listener { @EventHandler public void onPlayerJoin(TBMCPlayerJoinEvent e) { - final Player p = Bukkit.getPlayer(e.GetPlayer().getUUID()); + if (e.getPlayer() instanceof DiscordConnectedPlayer) + return; // Don't show the joined message for the fake player + final Player p = e.getPlayer(); + DiscordPlayer dp = e.GetPlayer().getAs(DiscordPlayer.class); + // if(dp!=null) //TODO + // MCChatListener.OnlineSenders.put(dp.getDiscordID(), new DiscordPlayerSender(DiscordPlugin.dc.getUserByID(Long.parseLong(dp.getDiscordID()), channel, player)) if (ConnectCommand.WaitingToConnect.containsKey(e.GetPlayer().PlayerName().get())) { IUser user = DiscordPlugin.dc .getUserByID(Long.parseLong(ConnectCommand.WaitingToConnect.get(e.GetPlayer().PlayerName().get()))); @@ -39,6 +45,9 @@ public class MCListener implements Listener { @EventHandler public void onPlayerLeave(TBMCPlayerQuitEvent e) { + if (MCChatListener.OnlineSenders.entrySet() + .removeIf(entry -> entry.getValue().getUniqueId().equals(e.getPlayer().getUniqueId()))) + ; // TODO DiscordPlugin.sendMessageToChannel(DiscordPlugin.chatchannel, e.GetPlayer().PlayerName().get() + " left the game"); }