diff --git a/module/cmd-alert/nb-configuration.xml b/module/cmd-alert/nb-configuration.xml
deleted file mode 100644
index 7e465924..00000000
--- a/module/cmd-alert/nb-configuration.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
- project
- NEW_LINE
- NEW_LINE
- NEW_LINE
- true
- true
- true
- true
- true
- true
- true
- true
- true
- true
-
-
diff --git a/module/cmd-alert/pom.xml b/module/cmd-alert/pom.xml
deleted file mode 100644
index 62e1f137..00000000
--- a/module/cmd-alert/pom.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
- 4.0.0
-
-
- net.md-5
- bungeecord-module
- 1.20-R0.3-SNAPSHOT
- ../pom.xml
-
-
- net.md-5
- bungeecord-module-cmd-alert
- 1.20-R0.3-SNAPSHOT
- jar
-
- cmd_alert
- Provides the alert and alertraw commands
-
diff --git a/module/cmd-alert/src/main/java/net/md_5/bungee/module/cmd/alert/CommandAlert.java b/module/cmd-alert/src/main/java/net/md_5/bungee/module/cmd/alert/CommandAlert.java
deleted file mode 100644
index 3b1354ac..00000000
--- a/module/cmd-alert/src/main/java/net/md_5/bungee/module/cmd/alert/CommandAlert.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package net.md_5.bungee.module.cmd.alert;
-
-import java.util.Locale;
-import net.md_5.bungee.api.ChatColor;
-import net.md_5.bungee.api.CommandSender;
-import net.md_5.bungee.api.ProxyServer;
-import net.md_5.bungee.api.chat.TextComponent;
-import net.md_5.bungee.api.plugin.Command;
-
-public class CommandAlert extends Command
-{
-
- public CommandAlert()
- {
- super( "alert", "bungeecord.command.alert" );
- }
-
- @Override
- public void execute(CommandSender sender, String[] args)
- {
- if ( args.length == 0 )
- {
- sender.sendMessage( ProxyServer.getInstance().getTranslation( "message_needed" ) );
- } else
- {
- StringBuilder builder = new StringBuilder();
- if ( args[0].toLowerCase( Locale.ROOT ).startsWith( "&h" ) )
- {
- // Remove &h
- args[0] = args[0].substring( 2 );
- } else
- {
- builder.append( ProxyServer.getInstance().getTranslation( "alert" ) );
- }
-
- for ( String s : args )
- {
- builder.append( ChatColor.translateAlternateColorCodes( '&', s ) );
- builder.append( " " );
- }
-
- String message = builder.substring( 0, builder.length() - 1 );
-
- ProxyServer.getInstance().broadcast( TextComponent.fromLegacy( message ) );
- }
- }
-}
diff --git a/module/cmd-alert/src/main/java/net/md_5/bungee/module/cmd/alert/CommandAlertRaw.java b/module/cmd-alert/src/main/java/net/md_5/bungee/module/cmd/alert/CommandAlertRaw.java
deleted file mode 100644
index 7292899d..00000000
--- a/module/cmd-alert/src/main/java/net/md_5/bungee/module/cmd/alert/CommandAlertRaw.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package net.md_5.bungee.module.cmd.alert;
-
-import com.google.common.base.Joiner;
-import net.md_5.bungee.api.ChatColor;
-import net.md_5.bungee.api.CommandSender;
-import net.md_5.bungee.api.ProxyServer;
-import net.md_5.bungee.api.chat.ComponentBuilder;
-import net.md_5.bungee.api.chat.HoverEvent;
-import net.md_5.bungee.api.connection.ProxiedPlayer;
-import net.md_5.bungee.api.plugin.Command;
-import net.md_5.bungee.chat.ComponentSerializer;
-
-public class CommandAlertRaw extends Command
-{
-
- public CommandAlertRaw()
- {
- super( "alertraw", "bungeecord.command.alert" );
- }
-
- @Override
- public void execute(CommandSender sender, String[] args)
- {
- if ( args.length == 0 )
- {
- sender.sendMessage( ProxyServer.getInstance().getTranslation( "message_needed" ) );
- } else
- {
- String message = Joiner.on( ' ' ).join( args );
-
- try
- {
- ProxyServer.getInstance().broadcast( ComponentSerializer.parse( message ) );
- } catch ( Exception e )
- {
- Throwable error = e;
- while ( error.getCause() != null )
- {
- error = error.getCause();
- }
- if ( sender instanceof ProxiedPlayer )
- {
- sender.sendMessage( new ComponentBuilder( ProxyServer.getInstance().getTranslation( "error_occurred_player" ) )
- .event( new HoverEvent( HoverEvent.Action.SHOW_TEXT, new ComponentBuilder( error.getMessage() )
- .color( ChatColor.RED )
- .create() ) )
- .create()
- );
- } else
- {
- sender.sendMessage( ProxyServer.getInstance().getTranslation( "error_occurred_console", error.getMessage() ) );
- }
- }
- }
- }
-}
diff --git a/module/cmd-alert/src/main/java/net/md_5/bungee/module/cmd/alert/PluginAlert.java b/module/cmd-alert/src/main/java/net/md_5/bungee/module/cmd/alert/PluginAlert.java
deleted file mode 100644
index b6f84865..00000000
--- a/module/cmd-alert/src/main/java/net/md_5/bungee/module/cmd/alert/PluginAlert.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package net.md_5.bungee.module.cmd.alert;
-
-import net.md_5.bungee.api.plugin.Plugin;
-
-public class PluginAlert extends Plugin
-{
-
- @Override
- public void onEnable()
- {
- getProxy().getPluginManager().registerCommand( this, new CommandAlert() );
- getProxy().getPluginManager().registerCommand( this, new CommandAlertRaw() );
- }
-}
diff --git a/module/cmd-alert/src/main/resources/plugin.yml b/module/cmd-alert/src/main/resources/plugin.yml
deleted file mode 100644
index 8ed58084..00000000
--- a/module/cmd-alert/src/main/resources/plugin.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-name: ${project.name}
-main: net.md_5.bungee.module.cmd.alert.PluginAlert
-version: ${describe}
-description: ${project.description}
-author: ${module.author}
diff --git a/module/cmd-find/nb-configuration.xml b/module/cmd-find/nb-configuration.xml
deleted file mode 100644
index 7e465924..00000000
--- a/module/cmd-find/nb-configuration.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
- project
- NEW_LINE
- NEW_LINE
- NEW_LINE
- true
- true
- true
- true
- true
- true
- true
- true
- true
- true
-
-
diff --git a/module/cmd-find/pom.xml b/module/cmd-find/pom.xml
deleted file mode 100644
index 5ca1b4c3..00000000
--- a/module/cmd-find/pom.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
- 4.0.0
-
-
- net.md-5
- bungeecord-module
- 1.20-R0.3-SNAPSHOT
- ../pom.xml
-
-
- net.md-5
- bungeecord-module-cmd-find
- 1.20-R0.3-SNAPSHOT
- jar
-
- cmd_find
- Provides the find command
-
diff --git a/module/cmd-find/src/main/java/net/md_5/bungee/module/cmd/find/CommandFind.java b/module/cmd-find/src/main/java/net/md_5/bungee/module/cmd/find/CommandFind.java
deleted file mode 100644
index 912cb0c2..00000000
--- a/module/cmd-find/src/main/java/net/md_5/bungee/module/cmd/find/CommandFind.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package net.md_5.bungee.module.cmd.find;
-
-import java.util.Collections;
-import net.md_5.bungee.api.CommandSender;
-import net.md_5.bungee.api.ProxyServer;
-import net.md_5.bungee.api.chat.ClickEvent;
-import net.md_5.bungee.api.chat.ComponentBuilder;
-import net.md_5.bungee.api.chat.HoverEvent;
-import net.md_5.bungee.api.config.ServerInfo;
-import net.md_5.bungee.api.connection.ProxiedPlayer;
-import net.md_5.bungee.command.PlayerCommand;
-
-public class CommandFind extends PlayerCommand
-{
-
- public CommandFind()
- {
- super( "find", "bungeecord.command.find" );
- }
-
- @Override
- public void execute(CommandSender sender, String[] args)
- {
- if ( args.length != 1 )
- {
- sender.sendMessage( ProxyServer.getInstance().getTranslation( "username_needed" ) );
- } else
- {
- ProxiedPlayer player = ProxyServer.getInstance().getPlayer( args[0] );
- if ( player == null || player.getServer() == null )
- {
- sender.sendMessage( ProxyServer.getInstance().getTranslation( "user_not_online" ) );
- } else
- {
- boolean moduleLoaded = ProxyServer.getInstance().getPluginManager().getPlugin( "cmd_server" ) != null;
- ServerInfo server = player.getServer().getInfo();
- ComponentBuilder componentBuilder = new ComponentBuilder().appendLegacy( ProxyServer.getInstance().getTranslation( "user_online_at", player.getName(), server.getName() ) );
-
- if ( moduleLoaded && server.canAccess( sender ) )
- {
- componentBuilder.event( new HoverEvent(
- HoverEvent.Action.SHOW_TEXT,
- new ComponentBuilder().appendLegacy( ProxyServer.getInstance().getTranslation( "click_to_connect" ) ).create() )
- );
- componentBuilder.event( new ClickEvent( ClickEvent.Action.RUN_COMMAND, "/server " + server.getName() ) );
- }
-
- sender.sendMessage( componentBuilder.create() );
- }
- }
- }
-
- @Override
- public Iterable onTabComplete(CommandSender sender, String[] args)
- {
- return args.length == 1 ? super.onTabComplete( sender, args ) : Collections.emptyList();
- }
-}
diff --git a/module/cmd-find/src/main/java/net/md_5/bungee/module/cmd/find/PluginFind.java b/module/cmd-find/src/main/java/net/md_5/bungee/module/cmd/find/PluginFind.java
deleted file mode 100644
index 63757214..00000000
--- a/module/cmd-find/src/main/java/net/md_5/bungee/module/cmd/find/PluginFind.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package net.md_5.bungee.module.cmd.find;
-
-import net.md_5.bungee.api.plugin.Plugin;
-
-public class PluginFind extends Plugin
-{
-
- @Override
- public void onEnable()
- {
- getProxy().getPluginManager().registerCommand( this, new CommandFind() );
- }
-}
diff --git a/module/cmd-find/src/main/resources/plugin.yml b/module/cmd-find/src/main/resources/plugin.yml
deleted file mode 100644
index e0f346f9..00000000
--- a/module/cmd-find/src/main/resources/plugin.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-name: ${project.name}
-main: net.md_5.bungee.module.cmd.find.PluginFind
-version: ${describe}
-description: ${project.description}
-author: ${module.author}
diff --git a/module/cmd-kick/nb-configuration.xml b/module/cmd-kick/nb-configuration.xml
deleted file mode 100644
index 7e465924..00000000
--- a/module/cmd-kick/nb-configuration.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
- project
- NEW_LINE
- NEW_LINE
- NEW_LINE
- true
- true
- true
- true
- true
- true
- true
- true
- true
- true
-
-
diff --git a/module/cmd-kick/pom.xml b/module/cmd-kick/pom.xml
deleted file mode 100644
index 2a498c05..00000000
--- a/module/cmd-kick/pom.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
- 4.0.0
-
-
- net.md-5
- bungeecord-module
- 1.20-R0.3-SNAPSHOT
- ../pom.xml
-
-
- net.md-5
- bungeecord-module-cmd-kick
- 1.20-R0.3-SNAPSHOT
- jar
-
- cmd_kick
- Provides the gkick command
-
diff --git a/module/cmd-kick/src/main/java/net/md_5/bungee/module/cmd/kick/CommandKick.java b/module/cmd-kick/src/main/java/net/md_5/bungee/module/cmd/kick/CommandKick.java
deleted file mode 100644
index 2750873a..00000000
--- a/module/cmd-kick/src/main/java/net/md_5/bungee/module/cmd/kick/CommandKick.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package net.md_5.bungee.module.cmd.kick;
-
-import com.google.common.base.Joiner;
-import com.google.common.collect.ImmutableSet;
-import java.util.HashSet;
-import java.util.Locale;
-import java.util.Set;
-import net.md_5.bungee.api.ChatColor;
-import net.md_5.bungee.api.CommandSender;
-import net.md_5.bungee.api.ProxyServer;
-import net.md_5.bungee.api.chat.TextComponent;
-import net.md_5.bungee.api.connection.ProxiedPlayer;
-import net.md_5.bungee.api.plugin.Command;
-import net.md_5.bungee.api.plugin.TabExecutor;
-
-public class CommandKick extends Command implements TabExecutor
-{
-
- public CommandKick()
- {
- super( "gkick", "bungeecord.command.kick" );
- }
-
- @Override
- public void execute(CommandSender sender, String[] args)
- {
- if ( args.length == 0 )
- {
- sender.sendMessage( ProxyServer.getInstance().getTranslation( "username_needed" ) );
- } else
- {
- ProxiedPlayer player = ProxyServer.getInstance().getPlayer( args[0] );
-
- if ( player == null )
- {
- sender.sendMessage( TextComponent.fromLegacy( ProxyServer.getInstance().getTranslation( "user_not_online" ) ) );
- return;
- }
-
- if ( args.length == 1 )
- {
- player.disconnect( TextComponent.fromLegacy( ProxyServer.getInstance().getTranslation( "kick_message" ) ) );
- } else
- {
- String[] reason = new String[ args.length - 1 ];
- System.arraycopy( args, 1, reason, 0, reason.length );
- player.disconnect( TextComponent.fromLegacy( ChatColor.translateAlternateColorCodes( '&', Joiner.on( ' ' ).join( reason ) ) ) );
- }
- }
- }
-
- @Override
- public Iterable onTabComplete(CommandSender sender, String[] args)
- {
- if ( args.length == 1 )
- {
- Set matches = new HashSet<>();
- String search = args[0].toLowerCase( Locale.ROOT );
- for ( ProxiedPlayer player : ProxyServer.getInstance().getPlayers() )
- {
- if ( player.getName().toLowerCase( Locale.ROOT ).startsWith( search ) )
- {
- matches.add( player.getName() );
- }
- }
- return matches;
- } else
- {
- return ImmutableSet.of();
- }
- }
-}
diff --git a/module/cmd-kick/src/main/java/net/md_5/bungee/module/cmd/kick/PluginKick.java b/module/cmd-kick/src/main/java/net/md_5/bungee/module/cmd/kick/PluginKick.java
deleted file mode 100644
index 82b2332b..00000000
--- a/module/cmd-kick/src/main/java/net/md_5/bungee/module/cmd/kick/PluginKick.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package net.md_5.bungee.module.cmd.kick;
-
-import net.md_5.bungee.api.plugin.Plugin;
-
-public class PluginKick extends Plugin
-{
-
- @Override
- public void onEnable()
- {
- getProxy().getPluginManager().registerCommand( this, new CommandKick() );
- }
-}
diff --git a/module/cmd-kick/src/main/resources/plugin.yml b/module/cmd-kick/src/main/resources/plugin.yml
deleted file mode 100644
index 142d6901..00000000
--- a/module/cmd-kick/src/main/resources/plugin.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-name: ${project.name}
-main: net.md_5.bungee.module.cmd.kick.PluginKick
-version: ${describe}
-description: ${project.description}
-author: ${module.author}
diff --git a/module/cmd-list/nb-configuration.xml b/module/cmd-list/nb-configuration.xml
deleted file mode 100644
index 7e465924..00000000
--- a/module/cmd-list/nb-configuration.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
- project
- NEW_LINE
- NEW_LINE
- NEW_LINE
- true
- true
- true
- true
- true
- true
- true
- true
- true
- true
-
-
diff --git a/module/cmd-list/pom.xml b/module/cmd-list/pom.xml
deleted file mode 100644
index 99090af7..00000000
--- a/module/cmd-list/pom.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
- 4.0.0
-
-
- net.md-5
- bungeecord-module
- 1.20-R0.3-SNAPSHOT
- ../pom.xml
-
-
- net.md-5
- bungeecord-module-cmd-list
- 1.20-R0.3-SNAPSHOT
- jar
-
- cmd_list
- Provides the glist command
-
diff --git a/module/cmd-list/src/main/java/net/md_5/bungee/module/cmd/list/CommandList.java b/module/cmd-list/src/main/java/net/md_5/bungee/module/cmd/list/CommandList.java
deleted file mode 100644
index 31a064ed..00000000
--- a/module/cmd-list/src/main/java/net/md_5/bungee/module/cmd/list/CommandList.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package net.md_5.bungee.module.cmd.list;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.List;
-import net.md_5.bungee.api.ChatColor;
-import net.md_5.bungee.api.CommandSender;
-import net.md_5.bungee.api.ProxyServer;
-import net.md_5.bungee.api.chat.BaseComponent;
-import net.md_5.bungee.api.chat.ClickEvent;
-import net.md_5.bungee.api.chat.ComponentBuilder;
-import net.md_5.bungee.api.chat.HoverEvent;
-import net.md_5.bungee.api.chat.hover.content.Text;
-import net.md_5.bungee.api.config.ServerInfo;
-import net.md_5.bungee.api.connection.ProxiedPlayer;
-import net.md_5.bungee.api.plugin.Command;
-import net.md_5.bungee.api.plugin.TabExecutor;
-
-/**
- * Command to list all players connected to the proxy.
- */
-public class CommandList extends Command implements TabExecutor
-{
-
- public CommandList()
- {
- super( "glist", "bungeecord.command.list" );
- }
-
- @Override
- public void execute(CommandSender sender, String[] args)
- {
- boolean hideEmptyServers = ( args.length == 0 ) || !args[0].equalsIgnoreCase( "all" );
- boolean moduleLoaded = ProxyServer.getInstance().getPluginManager().getPlugin( "cmd_server" ) != null;
-
- for ( ServerInfo server : ProxyServer.getInstance().getServers().values() )
- {
- if ( !server.canAccess( sender ) )
- {
- continue;
- }
-
- Collection serverPlayers = server.getPlayers();
- if ( hideEmptyServers && serverPlayers.isEmpty() )
- {
- continue;
- }
-
- List players = new ArrayList<>();
- for ( ProxiedPlayer player : serverPlayers )
- {
- players.add( player.getDisplayName() );
- }
- Collections.sort( players, String.CASE_INSENSITIVE_ORDER );
-
- BaseComponent baseComponent = new ComponentBuilder().appendLegacy( ProxyServer.getInstance().getTranslation( "command_list", server.getName(), players.size(), String.join( ChatColor.RESET + ", ", players ) ) ).build();
-
- if ( moduleLoaded )
- {
- baseComponent.setHoverEvent( new HoverEvent(
- HoverEvent.Action.SHOW_TEXT,
- new Text( new ComponentBuilder().appendLegacy( ProxyServer.getInstance().getTranslation( "click_to_connect" ) ).create() ) )
- );
- baseComponent.setClickEvent( new ClickEvent( ClickEvent.Action.RUN_COMMAND, "/server " + server.getName() ) );
- }
-
- sender.sendMessage( baseComponent );
- }
-
- sender.sendMessage( ProxyServer.getInstance().getTranslation( "total_players", ProxyServer.getInstance().getOnlineCount() ) );
- }
-
- @Override
- public Iterable onTabComplete(CommandSender sender, String[] args)
- {
- return ( args.length > 1 ) ? Collections.emptyList() : Collections.singletonList( "all" );
- }
-}
diff --git a/module/cmd-list/src/main/java/net/md_5/bungee/module/cmd/list/PluginList.java b/module/cmd-list/src/main/java/net/md_5/bungee/module/cmd/list/PluginList.java
deleted file mode 100644
index e2a196c1..00000000
--- a/module/cmd-list/src/main/java/net/md_5/bungee/module/cmd/list/PluginList.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package net.md_5.bungee.module.cmd.list;
-
-import net.md_5.bungee.api.plugin.Plugin;
-
-public class PluginList extends Plugin
-{
-
- @Override
- public void onEnable()
- {
- getProxy().getPluginManager().registerCommand( this, new CommandList() );
- }
-}
diff --git a/module/cmd-list/src/main/resources/plugin.yml b/module/cmd-list/src/main/resources/plugin.yml
deleted file mode 100644
index 272e64eb..00000000
--- a/module/cmd-list/src/main/resources/plugin.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-name: ${project.name}
-main: net.md_5.bungee.module.cmd.list.PluginList
-version: ${describe}
-description: ${project.description}
-author: ${module.author}
diff --git a/module/cmd-send/nb-configuration.xml b/module/cmd-send/nb-configuration.xml
deleted file mode 100644
index 7e465924..00000000
--- a/module/cmd-send/nb-configuration.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
- project
- NEW_LINE
- NEW_LINE
- NEW_LINE
- true
- true
- true
- true
- true
- true
- true
- true
- true
- true
-
-
diff --git a/module/cmd-send/pom.xml b/module/cmd-send/pom.xml
deleted file mode 100644
index 5aee8173..00000000
--- a/module/cmd-send/pom.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
- 4.0.0
-
-
- net.md-5
- bungeecord-module
- 1.20-R0.3-SNAPSHOT
- ../pom.xml
-
-
- net.md-5
- bungeecord-module-cmd-send
- 1.20-R0.3-SNAPSHOT
- jar
-
- cmd_send
- Provides the gsend command
-
diff --git a/module/cmd-send/src/main/java/net/md_5/bungee/module/cmd/send/CommandSend.java b/module/cmd-send/src/main/java/net/md_5/bungee/module/cmd/send/CommandSend.java
deleted file mode 100644
index 01cab610..00000000
--- a/module/cmd-send/src/main/java/net/md_5/bungee/module/cmd/send/CommandSend.java
+++ /dev/null
@@ -1,200 +0,0 @@
-package net.md_5.bungee.module.cmd.send;
-
-import com.google.common.base.Joiner;
-import com.google.common.collect.ImmutableSet;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.Set;
-import net.md_5.bungee.api.Callback;
-import net.md_5.bungee.api.ChatColor;
-import net.md_5.bungee.api.CommandSender;
-import net.md_5.bungee.api.ProxyServer;
-import net.md_5.bungee.api.ServerConnectRequest;
-import net.md_5.bungee.api.chat.ComponentBuilder;
-import net.md_5.bungee.api.chat.HoverEvent;
-import net.md_5.bungee.api.config.ServerInfo;
-import net.md_5.bungee.api.connection.ProxiedPlayer;
-import net.md_5.bungee.api.event.ServerConnectEvent;
-import net.md_5.bungee.api.plugin.Command;
-import net.md_5.bungee.api.plugin.TabExecutor;
-
-public class CommandSend extends Command implements TabExecutor
-{
-
- protected static class SendCallback
- {
-
- private final Map> results = new HashMap<>();
- private final CommandSender sender;
- private int count = 0;
-
- public SendCallback(CommandSender sender)
- {
- this.sender = sender;
- for ( ServerConnectRequest.Result result : ServerConnectRequest.Result.values() )
- {
- results.put( result, Collections.synchronizedList( new ArrayList<>() ) );
- }
- }
-
- public void lastEntryDone()
- {
- sender.sendMessage( ChatColor.GREEN.toString() + ChatColor.BOLD + "Send Results:" );
- for ( Map.Entry> entry : results.entrySet() )
- {
- ComponentBuilder builder = new ComponentBuilder( "" );
- if ( !entry.getValue().isEmpty() )
- {
- builder.event( new HoverEvent( HoverEvent.Action.SHOW_TEXT,
- new ComponentBuilder( Joiner.on( ", " ).join( entry.getValue() ) ).color( ChatColor.YELLOW ).create() ) );
- }
- builder.append( entry.getKey().name() + ": " ).color( ChatColor.GREEN );
- builder.append( "" + entry.getValue().size() ).bold( true );
- sender.sendMessage( builder.create() );
- }
- }
-
- public static class Entry implements Callback
- {
-
- private final SendCallback callback;
- private final ProxiedPlayer player;
- private final ServerInfo target;
-
- public Entry(SendCallback callback, ProxiedPlayer player, ServerInfo target)
- {
- this.callback = callback;
- this.player = player;
- this.target = target;
- this.callback.count++;
- }
-
- @Override
- public void done(ServerConnectRequest.Result result, Throwable error)
- {
- callback.results.get( result ).add( player.getName() );
- if ( result == ServerConnectRequest.Result.SUCCESS )
- {
- player.sendMessage( ProxyServer.getInstance().getTranslation( "you_got_summoned", target.getName(), callback.sender.getName() ) );
- }
-
- if ( --callback.count == 0 )
- {
- callback.lastEntryDone();
- }
- }
- }
- }
-
- public CommandSend()
- {
- super( "send", "bungeecord.command.send" );
- }
-
- @Override
- public void execute(CommandSender sender, String[] args)
- {
- if ( args.length != 2 )
- {
- sender.sendMessage( ProxyServer.getInstance().getTranslation( "send_cmd_usage" ) );
- return;
- }
- ServerInfo server = ProxyServer.getInstance().getServerInfo( args[1] );
- if ( server == null )
- {
- sender.sendMessage( ProxyServer.getInstance().getTranslation( "no_server" ) );
- return;
- }
-
- List targets;
- if ( args[0].equalsIgnoreCase( "all" ) )
- {
- targets = new ArrayList<>( ProxyServer.getInstance().getPlayers() );
- } else if ( args[0].equalsIgnoreCase( "current" ) )
- {
- if ( !( sender instanceof ProxiedPlayer ) )
- {
- sender.sendMessage( ProxyServer.getInstance().getTranslation( "player_only" ) );
- return;
- }
- ProxiedPlayer player = (ProxiedPlayer) sender;
- targets = new ArrayList<>( player.getServer().getInfo().getPlayers() );
- } else
- {
- // If we use a server name, send the entire server. This takes priority over players.
- ServerInfo serverTarget = ProxyServer.getInstance().getServerInfo( args[0] );
- if ( serverTarget != null )
- {
- targets = new ArrayList<>( serverTarget.getPlayers() );
- } else
- {
- ProxiedPlayer player = ProxyServer.getInstance().getPlayer( args[0] );
- if ( player == null )
- {
- sender.sendMessage( ProxyServer.getInstance().getTranslation( "user_not_online" ) );
- return;
- }
- targets = Collections.singletonList( player );
- }
- }
-
- final SendCallback callback = new SendCallback( sender );
- for ( ProxiedPlayer player : targets )
- {
- ServerConnectRequest request = ServerConnectRequest.builder()
- .target( server )
- .reason( ServerConnectEvent.Reason.COMMAND )
- .callback( new SendCallback.Entry( callback, player, server ) )
- .build();
- player.connect( request );
- }
-
- sender.sendMessage( ChatColor.DARK_GREEN + "Attempting to send " + targets.size() + " players to " + server.getName() );
- }
-
- @Override
- public Iterable onTabComplete(CommandSender sender, String[] args)
- {
- if ( args.length > 2 || args.length == 0 )
- {
- return ImmutableSet.of();
- }
-
- Set matches = new HashSet<>();
- if ( args.length == 1 )
- {
- String search = args[0].toLowerCase( Locale.ROOT );
- for ( ProxiedPlayer player : ProxyServer.getInstance().getPlayers() )
- {
- if ( player.getName().toLowerCase( Locale.ROOT ).startsWith( search ) )
- {
- matches.add( player.getName() );
- }
- }
- if ( "all".startsWith( search ) )
- {
- matches.add( "all" );
- }
- if ( "current".startsWith( search ) )
- {
- matches.add( "current" );
- }
- } else
- {
- String search = args[1].toLowerCase( Locale.ROOT );
- for ( String server : ProxyServer.getInstance().getServers().keySet() )
- {
- if ( server.toLowerCase( Locale.ROOT ).startsWith( search ) )
- {
- matches.add( server );
- }
- }
- }
- return matches;
- }
-}
diff --git a/module/cmd-send/src/main/java/net/md_5/bungee/module/cmd/send/PluginSend.java b/module/cmd-send/src/main/java/net/md_5/bungee/module/cmd/send/PluginSend.java
deleted file mode 100644
index 4d4cf822..00000000
--- a/module/cmd-send/src/main/java/net/md_5/bungee/module/cmd/send/PluginSend.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package net.md_5.bungee.module.cmd.send;
-
-import net.md_5.bungee.api.plugin.Plugin;
-
-public class PluginSend extends Plugin
-{
-
- @Override
- public void onEnable()
- {
- getProxy().getPluginManager().registerCommand( this, new CommandSend() );
- }
-}
diff --git a/module/cmd-send/src/main/resources/plugin.yml b/module/cmd-send/src/main/resources/plugin.yml
deleted file mode 100644
index a613e78b..00000000
--- a/module/cmd-send/src/main/resources/plugin.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-name: ${project.name}
-main: net.md_5.bungee.module.cmd.send.PluginSend
-version: ${describe}
-description: ${project.description}
-author: ${module.author}
diff --git a/module/cmd-server/nb-configuration.xml b/module/cmd-server/nb-configuration.xml
deleted file mode 100644
index 7e465924..00000000
--- a/module/cmd-server/nb-configuration.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
- project
- NEW_LINE
- NEW_LINE
- NEW_LINE
- true
- true
- true
- true
- true
- true
- true
- true
- true
- true
-
-
diff --git a/module/cmd-server/pom.xml b/module/cmd-server/pom.xml
deleted file mode 100644
index d33200e2..00000000
--- a/module/cmd-server/pom.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
- 4.0.0
-
-
- net.md-5
- bungeecord-module
- 1.20-R0.3-SNAPSHOT
- ../pom.xml
-
-
- net.md-5
- bungeecord-module-cmd-server
- 1.20-R0.3-SNAPSHOT
- jar
-
- cmd_server
- Provides the server command
-
diff --git a/module/cmd-server/src/main/java/net/md_5/bungee/module/cmd/server/CommandServer.java b/module/cmd-server/src/main/java/net/md_5/bungee/module/cmd/server/CommandServer.java
deleted file mode 100644
index 59c104d3..00000000
--- a/module/cmd-server/src/main/java/net/md_5/bungee/module/cmd/server/CommandServer.java
+++ /dev/null
@@ -1,104 +0,0 @@
-package net.md_5.bungee.module.cmd.server;
-
-import com.google.common.base.Function;
-import com.google.common.base.Predicate;
-import com.google.common.collect.Iterables;
-import java.util.Collections;
-import java.util.Locale;
-import java.util.Map;
-import net.md_5.bungee.api.CommandSender;
-import net.md_5.bungee.api.ProxyServer;
-import net.md_5.bungee.api.chat.ClickEvent;
-import net.md_5.bungee.api.chat.ComponentBuilder;
-import net.md_5.bungee.api.chat.HoverEvent;
-import net.md_5.bungee.api.chat.TextComponent;
-import net.md_5.bungee.api.config.ServerInfo;
-import net.md_5.bungee.api.connection.ProxiedPlayer;
-import net.md_5.bungee.api.event.ServerConnectEvent;
-import net.md_5.bungee.api.plugin.Command;
-import net.md_5.bungee.api.plugin.TabExecutor;
-
-/**
- * Command to list and switch a player between available servers.
- */
-public class CommandServer extends Command implements TabExecutor
-{
-
- public CommandServer()
- {
- super( "server", "bungeecord.command.server" );
- }
-
- @Override
- public void execute(CommandSender sender, String[] args)
- {
- Map servers = ProxyServer.getInstance().getServers();
- if ( args.length == 0 )
- {
- if ( sender instanceof ProxiedPlayer )
- {
- sender.sendMessage( ProxyServer.getInstance().getTranslation( "current_server", ( (ProxiedPlayer) sender ).getServer().getInfo().getName() ) );
- }
-
- ComponentBuilder serverList = new ComponentBuilder().appendLegacy( ProxyServer.getInstance().getTranslation( "server_list" ) );
- boolean first = true;
- for ( ServerInfo server : servers.values() )
- {
- if ( server.canAccess( sender ) )
- {
- TextComponent serverTextComponent = new TextComponent( first ? server.getName() : ", " + server.getName() );
- int count = server.getPlayers().size();
- serverTextComponent.setHoverEvent( new HoverEvent(
- HoverEvent.Action.SHOW_TEXT,
- new ComponentBuilder( count + ( count == 1 ? " player" : " players" ) + "\n" ).appendLegacy( ProxyServer.getInstance().getTranslation( "click_to_connect" ) ).create() )
- );
- serverTextComponent.setClickEvent( new ClickEvent( ClickEvent.Action.RUN_COMMAND, "/server " + server.getName() ) );
- serverList.append( serverTextComponent );
- first = false;
- }
- }
- sender.sendMessage( serverList.create() );
- } else
- {
- if ( !( sender instanceof ProxiedPlayer ) )
- {
- return;
- }
- ProxiedPlayer player = (ProxiedPlayer) sender;
-
- ServerInfo server = servers.get( args[0] );
- if ( server == null )
- {
- player.sendMessage( ProxyServer.getInstance().getTranslation( "no_server" ) );
- } else if ( !server.canAccess( player ) )
- {
- player.sendMessage( ProxyServer.getInstance().getTranslation( "no_server_permission" ) );
- } else
- {
- player.connect( server, ServerConnectEvent.Reason.COMMAND );
- }
- }
- }
-
- @Override
- public Iterable onTabComplete(final CommandSender sender, final String[] args)
- {
- return ( args.length > 1 ) ? Collections.EMPTY_LIST : Iterables.transform( Iterables.filter( ProxyServer.getInstance().getServers().values(), new Predicate()
- {
- private final String lower = ( args.length == 0 ) ? "" : args[0].toLowerCase( Locale.ROOT );
-
- @Override
- public boolean apply(ServerInfo input)
- {
- return input.getName().toLowerCase( Locale.ROOT ).startsWith( lower ) && input.canAccess( sender );
- }
- } ), new Function()
- {
- @Override
- public String apply(ServerInfo input)
- {
- return input.getName();
- }
- } );
- }
-}
diff --git a/module/cmd-server/src/main/java/net/md_5/bungee/module/cmd/server/PluginServer.java b/module/cmd-server/src/main/java/net/md_5/bungee/module/cmd/server/PluginServer.java
deleted file mode 100644
index 4aaae7ec..00000000
--- a/module/cmd-server/src/main/java/net/md_5/bungee/module/cmd/server/PluginServer.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package net.md_5.bungee.module.cmd.server;
-
-import net.md_5.bungee.api.plugin.Plugin;
-
-public class PluginServer extends Plugin
-{
-
- @Override
- public void onEnable()
- {
- getProxy().getPluginManager().registerCommand( this, new CommandServer() );
- }
-}
diff --git a/module/cmd-server/src/main/resources/plugin.yml b/module/cmd-server/src/main/resources/plugin.yml
deleted file mode 100644
index 006f3e3f..00000000
--- a/module/cmd-server/src/main/resources/plugin.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-name: ${project.name}
-main: net.md_5.bungee.module.cmd.server.PluginServer
-version: ${describe}
-description: ${project.description}
-author: ${module.author}
diff --git a/module/pom.xml b/module/pom.xml
deleted file mode 100644
index 21ba8f2b..00000000
--- a/module/pom.xml
+++ /dev/null
@@ -1,55 +0,0 @@
-
-
- 4.0.0
-
-
- net.md-5
- bungeecord-parent
- 1.20-R0.3-SNAPSHOT
- ../pom.xml
-
-
- net.md-5
- bungeecord-module
- 1.20-R0.3-SNAPSHOT
- pom
-
- BungeeCord Modules
- Parent project for all BungeeCord modules.
-
-
- cmd-alert
- cmd-find
- cmd-kick
- cmd-list
- cmd-send
- cmd-server
- reconnect-yaml
-
-
-
- SpigotMC
- true
- true
-
-
-
-
- net.md-5
- bungeecord-api
- ${project.version}
- compile
-
-
-
-
- ${project.name}
-
-
- true
- ${basedir}/src/main/resources
-
-
-
-
diff --git a/module/reconnect-yaml/nb-configuration.xml b/module/reconnect-yaml/nb-configuration.xml
deleted file mode 100644
index 7e465924..00000000
--- a/module/reconnect-yaml/nb-configuration.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
- project
- NEW_LINE
- NEW_LINE
- NEW_LINE
- true
- true
- true
- true
- true
- true
- true
- true
- true
- true
-
-
diff --git a/module/reconnect-yaml/pom.xml b/module/reconnect-yaml/pom.xml
deleted file mode 100644
index e3a077f3..00000000
--- a/module/reconnect-yaml/pom.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
- 4.0.0
-
-
- net.md-5
- bungeecord-module
- 1.20-R0.3-SNAPSHOT
- ../pom.xml
-
-
- net.md-5
- bungeecord-module-reconnect-yaml
- 1.20-R0.3-SNAPSHOT
- jar
-
- reconnect_yaml
- Provides reconnect location functionality in locations.yml
-
diff --git a/module/reconnect-yaml/src/main/java/net/md_5/bungee/module/reconnect/yaml/PluginYaml.java b/module/reconnect-yaml/src/main/java/net/md_5/bungee/module/reconnect/yaml/PluginYaml.java
deleted file mode 100644
index 0d77ce2a..00000000
--- a/module/reconnect-yaml/src/main/java/net/md_5/bungee/module/reconnect/yaml/PluginYaml.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package net.md_5.bungee.module.reconnect.yaml;
-
-import net.md_5.bungee.api.config.ListenerInfo;
-import net.md_5.bungee.api.plugin.Plugin;
-
-public class PluginYaml extends Plugin
-{
-
- @Override
- public void onEnable()
- {
- // TODO: Abstract this for other reconnect modules
- for ( ListenerInfo info : getProxy().getConfig().getListeners() )
- {
- if ( !info.isForceDefault() && getProxy().getReconnectHandler() == null )
- {
- getProxy().setReconnectHandler( new YamlReconnectHandler() );
- break;
- }
- }
- }
-}
diff --git a/module/reconnect-yaml/src/main/java/net/md_5/bungee/module/reconnect/yaml/YamlReconnectHandler.java b/module/reconnect-yaml/src/main/java/net/md_5/bungee/module/reconnect/yaml/YamlReconnectHandler.java
deleted file mode 100644
index 3a514a76..00000000
--- a/module/reconnect-yaml/src/main/java/net/md_5/bungee/module/reconnect/yaml/YamlReconnectHandler.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package net.md_5.bungee.module.reconnect.yaml;
-
-import java.io.File;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.concurrent.locks.ReadWriteLock;
-import java.util.concurrent.locks.ReentrantReadWriteLock;
-import java.util.logging.Level;
-import net.md_5.bungee.api.AbstractReconnectHandler;
-import net.md_5.bungee.api.ProxyServer;
-import net.md_5.bungee.api.config.ServerInfo;
-import net.md_5.bungee.api.connection.ProxiedPlayer;
-import net.md_5.bungee.util.CaseInsensitiveMap;
-import org.yaml.snakeyaml.Yaml;
-
-public class YamlReconnectHandler extends AbstractReconnectHandler
-{
-
- private final Yaml yaml = new Yaml();
- private final File file = new File( "locations.yml" );
- private final ReadWriteLock lock = new ReentrantReadWriteLock();
- /*========================================================================*/
- private CaseInsensitiveMap data;
-
- @SuppressWarnings("unchecked")
- public YamlReconnectHandler()
- {
- try
- {
- file.createNewFile();
- try ( FileReader rd = new FileReader( file ) )
- {
- Map map = yaml.loadAs( rd, Map.class );
- if ( map != null )
- {
- data = new CaseInsensitiveMap<>( map );
- }
- }
- } catch ( Exception ex )
- {
- file.renameTo( new File( "locations.yml.old" ) );
- ProxyServer.getInstance().getLogger().log( Level.WARNING, "Could not load reconnect locations, resetting them" );
- }
-
- if ( data == null )
- {
- data = new CaseInsensitiveMap<>();
- }
- }
-
- @Override
- protected ServerInfo getStoredServer(ProxiedPlayer player)
- {
- ServerInfo server = null;
- lock.readLock().lock();
- try
- {
- server = ProxyServer.getInstance().getServerInfo( data.get( key( player ) ) );
- } finally
- {
- lock.readLock().unlock();
- }
- return server;
- }
-
- @Override
- public void setServer(ProxiedPlayer player)
- {
- lock.writeLock().lock();
- try
- {
- data.put( key( player ), ( player.getReconnectServer() != null ) ? player.getReconnectServer().getName() : player.getServer().getInfo().getName() );
- } finally
- {
- lock.writeLock().unlock();
- }
- }
-
- private String key(ProxiedPlayer player)
- {
- InetSocketAddress host = player.getPendingConnection().getVirtualHost();
- return player.getName() + ";" + host.getHostString() + ":" + host.getPort();
- }
-
- @Override
- public void save()
- {
- Map copy = new HashMap<>();
- lock.readLock().lock();
- try
- {
- copy.putAll( data );
- } finally
- {
- lock.readLock().unlock();
- }
-
- try ( FileWriter wr = new FileWriter( file ) )
- {
- yaml.dump( copy, wr );
- } catch ( IOException ex )
- {
- ProxyServer.getInstance().getLogger().log( Level.WARNING, "Could not save reconnect locations", ex );
- }
- }
-
- @Override
- public void close()
- {
- }
-}
diff --git a/module/reconnect-yaml/src/main/resources/plugin.yml b/module/reconnect-yaml/src/main/resources/plugin.yml
deleted file mode 100644
index 451e3c61..00000000
--- a/module/reconnect-yaml/src/main/resources/plugin.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-name: ${project.name}
-main: net.md_5.bungee.module.reconnect.yaml.PluginYaml
-version: ${describe}
-description: ${project.description}
-author: ${module.author}
diff --git a/pom.xml b/pom.xml
index 463012be..85beeb2e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -37,7 +37,6 @@
config
event
log
- module
protocol
proxy
query
diff --git a/proxy/src/main/java/net/md_5/bungee/BungeeCord.java b/proxy/src/main/java/net/md_5/bungee/BungeeCord.java
index e7f3f09a..ec396a55 100644
--- a/proxy/src/main/java/net/md_5/bungee/BungeeCord.java
+++ b/proxy/src/main/java/net/md_5/bungee/BungeeCord.java
@@ -91,7 +91,6 @@ import net.md_5.bungee.forge.ForgeConstants;
import net.md_5.bungee.log.BungeeLogger;
import net.md_5.bungee.log.LoggingForwardHandler;
import net.md_5.bungee.log.LoggingOutputStream;
-import net.md_5.bungee.module.ModuleManager;
import net.md_5.bungee.netty.PipelineUtils;
import net.md_5.bungee.protocol.DefinedPacket;
import net.md_5.bungee.protocol.ProtocolConstants;
@@ -176,7 +175,6 @@ public class BungeeCord extends ProxyServer
.registerTypeAdapter( Favicon.class, Favicon.getFaviconTypeAdapter() ).create();
@Getter
private ConnectionThrottle connectionThrottle;
- private final ModuleManager moduleManager = new ModuleManager();
{
// TODO: Proper fallback when we interface the manager
@@ -274,10 +272,6 @@ public class BungeeCord extends ProxyServer
eventLoops = PipelineUtils.newEventLoopGroup( 0, new ThreadFactoryBuilder().setNameFormat( "Netty IO Thread #%1$d" ).build() );
- File moduleDirectory = new File( "modules" );
- moduleManager.load( this, moduleDirectory );
- pluginManager.detectPlugins( moduleDirectory );
-
pluginsFolder.mkdir();
pluginManager.detectPlugins( pluginsFolder );
diff --git a/proxy/src/main/java/net/md_5/bungee/BungeeCordLauncher.java b/proxy/src/main/java/net/md_5/bungee/BungeeCordLauncher.java
index 7281d6b2..ca93d603 100644
--- a/proxy/src/main/java/net/md_5/bungee/BungeeCordLauncher.java
+++ b/proxy/src/main/java/net/md_5/bungee/BungeeCordLauncher.java
@@ -5,7 +5,6 @@ import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
-import java.util.concurrent.TimeUnit;
import joptsimple.OptionParser;
import joptsimple.OptionSet;
import net.md_5.bungee.api.ChatColor;
@@ -56,8 +55,7 @@ public class BungeeCordLauncher
System.err.println( "*** Warning, this build is outdated ***" );
System.err.println( "*** Please download a new build from http://ci.md-5.net/job/BungeeCord ***" );
System.err.println( "*** You will get NO support regarding this build ***" );
- System.err.println( "*** Server will start in 10 seconds ***" );
- Thread.sleep( TimeUnit.SECONDS.toMillis( 10 ) );
+
}
}
diff --git a/proxy/src/main/java/net/md_5/bungee/module/JenkinsModuleSource.java b/proxy/src/main/java/net/md_5/bungee/module/JenkinsModuleSource.java
deleted file mode 100644
index 2536435c..00000000
--- a/proxy/src/main/java/net/md_5/bungee/module/JenkinsModuleSource.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package net.md_5.bungee.module;
-
-import com.google.common.io.ByteStreams;
-import com.google.common.io.Files;
-import java.io.IOException;
-import java.net.URL;
-import java.net.URLConnection;
-import lombok.Data;
-import net.md_5.bungee.Util;
-
-@Data
-public class JenkinsModuleSource implements ModuleSource
-{
-
- @Override
- public void retrieve(ModuleSpec module, ModuleVersion version)
- {
- System.out.println( "Attempting to Jenkins download module " + module.getName() + " v" + version.getBuild() );
- try
- {
- URL website = new URL( "https://ci.md-5.net/job/BungeeCord/" + version.getBuild() + "/artifact/module/" + module.getName().replace( '_', '-' ) + "/target/" + module.getName() + ".jar" );
- URLConnection con = website.openConnection();
- // 15 second timeout at various stages
- con.setConnectTimeout( 15000 );
- con.setReadTimeout( 15000 );
-
- Files.write( ByteStreams.toByteArray( con.getInputStream() ), module.getFile() );
- System.out.println( "Download complete" );
- } catch ( IOException ex )
- {
- System.out.println( "Failed to download: " + Util.exception( ex ) );
- }
- }
-}
diff --git a/proxy/src/main/java/net/md_5/bungee/module/ModuleManager.java b/proxy/src/main/java/net/md_5/bungee/module/ModuleManager.java
deleted file mode 100644
index 9ec4920e..00000000
--- a/proxy/src/main/java/net/md_5/bungee/module/ModuleManager.java
+++ /dev/null
@@ -1,155 +0,0 @@
-package net.md_5.bungee.module;
-
-import com.google.common.base.Preconditions;
-import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileWriter;
-import java.io.InputStream;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-import java.util.logging.Level;
-import net.md_5.bungee.api.ProxyServer;
-import net.md_5.bungee.api.plugin.PluginDescription;
-import net.md_5.bungee.util.CaseInsensitiveMap;
-import org.yaml.snakeyaml.DumperOptions;
-import org.yaml.snakeyaml.Yaml;
-
-public class ModuleManager
-{
-
- private final Map knownSources = new HashMap<>();
-
- public ModuleManager()
- {
- knownSources.put( "jenkins", new JenkinsModuleSource() );
- }
-
- // CHECKSTYLE:OFF
- @SuppressFBWarnings(
- {
- "SF_SWITCH_FALLTHROUGH", "SF_SWITCH_NO_DEFAULT"
- })
- // CHECKSTYLE:ON
- public void load(ProxyServer proxy, File moduleDirectory) throws Exception
- {
- moduleDirectory.mkdir();
-
- ModuleVersion bungeeVersion = ModuleVersion.parse( proxy.getVersion() );
- if ( bungeeVersion == null )
- {
- System.out.println( "Couldn't detect bungee version. Custom build?" );
- return;
- }
-
- List modules = new ArrayList<>();
- File configFile = new File( "modules.yml" );
- // Start Yaml
- DumperOptions options = new DumperOptions();
- options.setDefaultFlowStyle( DumperOptions.FlowStyle.BLOCK );
- Yaml yaml = new Yaml( options );
-
- Map config;
-
- configFile.createNewFile();
- try ( InputStream is = new FileInputStream( configFile ) )
- {
- config = (Map) yaml.load( is );
- }
-
- if ( config == null )
- {
- config = new CaseInsensitiveMap<>();
- } else
- {
- config = new CaseInsensitiveMap<>( config );
- }
- // End yaml
-
- List defaults = new ArrayList<>();
- Object readModules = config.get( "modules" );
- if ( readModules != null )
- {
- defaults.addAll( (Collection) readModules );
- }
- int version = ( config.containsKey( "version" ) ) ? (int) config.get( "version" ) : 0;
- switch ( version )
- {
- case 0:
- defaults.add( "jenkins://cmd_alert" );
- defaults.add( "jenkins://cmd_find" );
- defaults.add( "jenkins://cmd_list" );
- defaults.add( "jenkins://cmd_send" );
- defaults.add( "jenkins://cmd_server" );
- case 1:
- defaults.add( "jenkins://reconnect_yaml" );
- }
- config.put( "modules", defaults );
- config.put( "version", 2 );
-
- try ( FileWriter wr = new FileWriter( configFile ) )
- {
- yaml.dump( config, wr );
- }
-
- for ( String s : (List) config.get( "modules" ) )
- {
- URI uri = new URI( s );
-
- ModuleSource source = knownSources.get( uri.getScheme() );
- if ( source == null )
- {
- System.out.println( "Unknown module source: " + s );
- continue;
- }
- String name = uri.getAuthority();
- if ( name == null )
- {
- System.out.println( "Unknown module host: " + s );
- continue;
- }
-
- ModuleSpec spec = new ModuleSpec( name, new File( moduleDirectory, name + ".jar" ), source );
- modules.add( spec );
- System.out.println( "Discovered module: " + spec );
- }
-
- for ( ModuleSpec module : modules )
- {
- ModuleVersion moduleVersion = ( module.getFile().exists() ) ? getVersion( module.getFile() ) : null;
-
- if ( !bungeeVersion.equals( moduleVersion ) )
- {
- System.out.println( "Attempting to update plugin from " + moduleVersion + " to " + bungeeVersion );
- module.getProvider().retrieve( module, bungeeVersion );
- }
- }
- }
-
- @SuppressFBWarnings("REC_CATCH_EXCEPTION")
- private ModuleVersion getVersion(File file)
- {
- try ( JarFile jar = new JarFile( file ) )
- {
- JarEntry pdf = jar.getJarEntry( "plugin.yml" );
- Preconditions.checkNotNull( pdf, "Plugin must have a plugin.yml" );
-
- try ( InputStream in = jar.getInputStream( pdf ) )
- {
- PluginDescription desc = new Yaml().loadAs( in, PluginDescription.class );
- return ModuleVersion.parse( desc.getVersion() );
- }
- } catch ( Exception ex )
- {
- ProxyServer.getInstance().getLogger().log( Level.WARNING, "Could not check module from file " + file, ex );
- }
-
- return null;
- }
-}
diff --git a/proxy/src/main/java/net/md_5/bungee/module/ModuleSource.java b/proxy/src/main/java/net/md_5/bungee/module/ModuleSource.java
deleted file mode 100644
index 09f5624c..00000000
--- a/proxy/src/main/java/net/md_5/bungee/module/ModuleSource.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package net.md_5.bungee.module;
-
-interface ModuleSource
-{
-
- void retrieve(ModuleSpec module, ModuleVersion version);
-}
diff --git a/proxy/src/main/java/net/md_5/bungee/module/ModuleSpec.java b/proxy/src/main/java/net/md_5/bungee/module/ModuleSpec.java
deleted file mode 100644
index ebf6cf67..00000000
--- a/proxy/src/main/java/net/md_5/bungee/module/ModuleSpec.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package net.md_5.bungee.module;
-
-import java.io.File;
-import lombok.Data;
-
-@Data
-public class ModuleSpec
-{
-
- private final String name;
- private final File file;
- private final ModuleSource provider;
-}
diff --git a/proxy/src/main/java/net/md_5/bungee/module/ModuleVersion.java b/proxy/src/main/java/net/md_5/bungee/module/ModuleVersion.java
deleted file mode 100644
index d52b8106..00000000
--- a/proxy/src/main/java/net/md_5/bungee/module/ModuleVersion.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package net.md_5.bungee.module;
-
-import lombok.AccessLevel;
-import lombok.Data;
-import lombok.RequiredArgsConstructor;
-
-@Data
-@RequiredArgsConstructor(access = AccessLevel.PRIVATE)
-public class ModuleVersion
-{
-
- private final String build;
- private final String git;
-
- public static ModuleVersion parse(String version)
- {
- int lastColon = version.lastIndexOf( ':' );
- int secondLastColon = version.lastIndexOf( ':', lastColon - 1 );
-
- if ( lastColon == -1 || secondLastColon == -1 )
- {
- return null;
- }
-
- String buildNumber = version.substring( lastColon + 1, version.length() );
- String gitCommit = version.substring( secondLastColon + 1, lastColon ).replaceAll( "\"", "" );
-
- if ( "unknown".equals( buildNumber ) || "unknown".equals( gitCommit ) )
- {
- return null;
- }
-
- return new ModuleVersion( buildNumber, gitCommit );
- }
-}