From fba5c5b49a34c8012b7ed97b1976db836eab2f53 Mon Sep 17 00:00:00 2001 From: NorbiPeti Date: Tue, 22 May 2018 01:42:52 +0200 Subject: [PATCH] Fixes, channel con work Connecting channels is WIP --- .../commands/ConnectCommand.java | 4 +- .../discordplugin/commands/HereCommand.java | 25 ++++++++ .../listeners/MCChatListener.java | 10 ++++ .../discordplugin/listeners/MCListener.java | 2 +- .../mccommands/ChannelconMCCommand.java | 58 +++++++++++++++++++ 5 files changed, 96 insertions(+), 3 deletions(-) create mode 100644 src/main/java/buttondevteam/discordplugin/commands/HereCommand.java create mode 100644 src/main/java/buttondevteam/discordplugin/mccommands/ChannelconMCCommand.java diff --git a/src/main/java/buttondevteam/discordplugin/commands/ConnectCommand.java b/src/main/java/buttondevteam/discordplugin/commands/ConnectCommand.java index 5a6f0f7..65ebda2 100755 --- a/src/main/java/buttondevteam/discordplugin/commands/ConnectCommand.java +++ b/src/main/java/buttondevteam/discordplugin/commands/ConnectCommand.java @@ -58,8 +58,8 @@ public class ConnectCommand extends DiscordCommandBase { } WaitingToConnect.put(p.getName(), message.getAuthor().getStringID()); DiscordPlugin.sendMessageToChannel(message.getChannel(), - "Pending connection - accept connection in Minecraft from the account " + args - + " before the server gets restarted. You can also adjust the Minecraft name you want to connect to with the same command."); + "Alright! Now accept the connection in Minecraft from the account " + args + + " before the next server restart. You can also adjust the Minecraft name you want to connect to with the same command."); if (p.isOnline()) ((Player) p).sendMessage("§bTo connect with the Discord account " + message.getAuthor().getName() + "#" + message.getAuthor().getDiscriminator() + " do /discord accept"); diff --git a/src/main/java/buttondevteam/discordplugin/commands/HereCommand.java b/src/main/java/buttondevteam/discordplugin/commands/HereCommand.java new file mode 100644 index 0000000..f2717d7 --- /dev/null +++ b/src/main/java/buttondevteam/discordplugin/commands/HereCommand.java @@ -0,0 +1,25 @@ +package buttondevteam.discordplugin.commands; + +import buttondevteam.discordplugin.mccommands.ChannelconMCCommand; +import lombok.val; +import sx.blah.discord.handle.obj.IMessage; + +public class HereCommand extends DiscordCommandBase { + @Override + public String getCommandName() { + return "here"; + } + + @Override + public void run(IMessage message, String args) { + val chgroup = ChannelconMCCommand.PendingConnections.get(message.getAuthor().getStringID()); + if (chgroup == null) { + message.reply("no pending connection found! "); //TODO + } + } + + @Override + public String[] getHelpText() { + return new String[0]; + } +} diff --git a/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java b/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java index 1aca8e6..7aa12ff 100755 --- a/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/MCChatListener.java @@ -46,6 +46,12 @@ public class MCChatListener implements Listener, IListener private LinkedBlockingQueue> sendevents = new LinkedBlockingQueue<>(); private Runnable sendrunnable; + public static void addCustomChat(IChannel channel, String groupid, Channel mcchannel) { + val lmd = new LastMsgData(channel, null, null); + lmd.mcchannel = mcchannel; + lastmsgCustom.put(groupid, lmd); + } + @EventHandler // Minecraft public void onMCChat(TBMCChatEvent ev) { if (ev.isCancelled()) @@ -177,6 +183,10 @@ public class MCChatListener implements Listener, IListener * Used for messages in PMs (mcchat). */ private static ArrayList lastmsgPerUser = new ArrayList(); + /** + * Used for town or nation chats or anything else + */ + private static HashMap lastmsgCustom = new HashMap<>(); public static boolean privateMCChat(IChannel channel, boolean start, IUser user, DiscordPlayer dp) { TBMCPlayer mcp = dp.getAs(TBMCPlayer.class); diff --git a/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java b/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java index 42e85a0..67a0cce 100755 --- a/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java +++ b/src/main/java/buttondevteam/discordplugin/listeners/MCListener.java @@ -93,7 +93,7 @@ public class MCListener implements Listener { if (DiscordPlugin.SafeMode) return; DiscordPlayer dp = e.getPlayer().getAs(DiscordPlayer.class); - if (dp == null || dp.getDiscordID() == null || dp.getDiscordID() == "") + if (dp == null || dp.getDiscordID() == null || dp.getDiscordID().equals("")) return; IUser user = DiscordPlugin.dc.getUserByID(Long.parseLong(dp.getDiscordID())); e.addInfo("Discord tag: " + user.getName() + "#" + user.getDiscriminator()); diff --git a/src/main/java/buttondevteam/discordplugin/mccommands/ChannelconMCCommand.java b/src/main/java/buttondevteam/discordplugin/mccommands/ChannelconMCCommand.java new file mode 100644 index 0000000..10f871d --- /dev/null +++ b/src/main/java/buttondevteam/discordplugin/mccommands/ChannelconMCCommand.java @@ -0,0 +1,58 @@ +package buttondevteam.discordplugin.mccommands; + +import buttondevteam.discordplugin.DiscordPlayer; +import buttondevteam.lib.TBMCChannelConnectEvent; +import buttondevteam.lib.chat.Channel; +import buttondevteam.lib.chat.CommandClass; +import buttondevteam.lib.player.TBMCPlayer; +import lombok.val; +import org.bukkit.Bukkit; +import org.bukkit.entity.Player; + +import java.util.AbstractMap; +import java.util.Arrays; +import java.util.HashMap; + +@CommandClass(modOnly = false, path = "channelcon") +public class ChannelconMCCommand extends DiscordMCCommandBase { + @Override //TODO: Since we require connecting the accounts, it can be done entirely on Discord. + public boolean OnCommand(Player player, String alias, String[] args) { + if (args.length < 1) + return false; + val chan = Channel.getChannels().stream().filter(ch -> ch.ID.equalsIgnoreCase(args[0]) || (ch.IDs != null && Arrays.stream(ch.IDs).anyMatch(cid -> cid.equalsIgnoreCase(args[0])))).findAny(); + if (!chan.isPresent()) { + player.sendMessage("§cChannel with ID '" + args[0] + "' not found! The ID is the command for it without the /."); + return true; + } + val dp = TBMCPlayer.getPlayer(player.getUniqueId(), TBMCPlayer.class).getAs(DiscordPlayer.class); + if (dp == null) { + player.sendMessage("§cYou need to connect your Discord account. In #bot do @ChromaBot connect " + player.getName()); + return true; + } + val ev = new TBMCChannelConnectEvent(player, chan.get()); + Bukkit.getPluginManager().callEvent(ev); + if (ev.isCancelled() || ev.getGroupid() == null) { + player.sendMessage("§cSorry, that didn't work. You cannot use that channel."); + return true; + } + //MCChatListener.addCustomChat() - TODO: Call in Discord cmd + PendingConnections.put(dp.getDiscordID(), new AbstractMap.SimpleEntry<>(ev.getChannel(), ev.getGroupid())); + player.sendMessage("§bAlright! Now invite me to your server then show me the channel to use (@ChromaBot here)."); + return true; + } + + @Override + public String[] GetHelpText(String s) { + return new String[]{// + "§6---- Channel connect ---", // + "This command allows you to connect a Minecraft channel to a Discord channel.", // + "You need to have access to the MC channel and have manage permissions on the Discord channel." // + }; + } + + /** + * Key: Discord ID + * Value of value. Channel Group ID + */ + public static HashMap> PendingConnections = new HashMap<>(); +}