diff --git a/module/cmd-bungee/nb-configuration.xml b/module/cmd-bungee/nb-configuration.xml new file mode 100644 index 00000000..7e465924 --- /dev/null +++ b/module/cmd-bungee/nb-configuration.xml @@ -0,0 +1,31 @@ + + + + + + project + NEW_LINE + NEW_LINE + NEW_LINE + true + true + true + true + true + true + true + true + true + true + + diff --git a/module/cmd-bungee/pom.xml b/module/cmd-bungee/pom.xml new file mode 100644 index 00000000..2c00d6c5 --- /dev/null +++ b/module/cmd-bungee/pom.xml @@ -0,0 +1,20 @@ + + + 4.0.0 + + + net.md-5 + bungeecord-module + 1.20-R0.1-SNAPSHOT + ../pom.xml + + + net.md-5 + bungeecord-module-cmd-bungee + 1.20-R0.1-SNAPSHOT + jar + + cmd_bungee + Provides the bungee command + diff --git a/module/cmd-bungee/src/main/java/net/md_5/bungee/module/cmd/bungee/CommandBungee.java b/module/cmd-bungee/src/main/java/net/md_5/bungee/module/cmd/bungee/CommandBungee.java new file mode 100644 index 00000000..15d81b02 --- /dev/null +++ b/module/cmd-bungee/src/main/java/net/md_5/bungee/module/cmd/bungee/CommandBungee.java @@ -0,0 +1,106 @@ +package net.md_5.bungee.module.cmd.bungee; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.URL; +import java.nio.charset.StandardCharsets; +import java.util.stream.Collectors; +import javax.net.ssl.HttpsURLConnection; +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.ClickEvent; +import net.md_5.bungee.api.chat.HoverEvent; +import net.md_5.bungee.api.chat.TextComponent; +import net.md_5.bungee.api.chat.hover.content.Text; +import net.md_5.bungee.api.plugin.Command; + +public class CommandBungee extends Command +{ + private PluginBungee plugin; + + public CommandBungee(PluginBungee plugin) + { + super( "bungee", "bungeecord.command.bungee" ); + + this.plugin = plugin; + } + + @Override + public void execute(CommandSender sender, String[] args) + { + TextComponent bungee = new TextComponent( ChatColor.BLUE + "This server is running HexaCord version " + ProxyServer.getInstance().getVersion() + " by md_5" ); + bungee.setHoverEvent( new HoverEvent( HoverEvent.Action.SHOW_TEXT, new Text( "Click to copy to clipboard" ) ) ); + bungee.setClickEvent( new ClickEvent( ClickEvent.Action.COPY_TO_CLIPBOARD, ChatColor.stripColor( bungee.getText() ) ) ); + + sender.sendMessage( bungee ); + + TextComponent protocol = new TextComponent( ChatColor.BLUE + "Protocol support for 1.7.x by Zartec, ghac and I9hdkill" ); + protocol.setHoverEvent( new HoverEvent( HoverEvent.Action.SHOW_TEXT, new Text( "Click to copy to clipboard" ) ) ); + protocol.setClickEvent( new ClickEvent( ClickEvent.Action.COPY_TO_CLIPBOARD, ChatColor.stripColor( protocol.getText() ) ) ); + + sender.sendMessage( protocol ); + + sender.sendMessage( "Checking version. please wait..." ); + + String version = ProxyServer.getInstance().getVersion(); + int lastColon = version.lastIndexOf( ':' ); + String buildNumber = version.substring( lastColon + 1, version.length() ); + + if ( "unknown".equals( buildNumber ) ) + { + sender.sendMessage( "Couldn't detect bungee version. Custom build?" ); + return; + } + + int currentBuildNumber = Integer.valueOf( buildNumber ).intValue(); + + ProxyServer.getInstance().getScheduler().runAsync( this.plugin, () -> + { + try + { + HttpsURLConnection connection = (HttpsURLConnection) new URL( "https://ci.simplyrin.net/job/HexaCord/lastStableBuild/buildNumber" ).openConnection(); + connection.addRequestProperty( "user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36" ); + + // 5 second timeout at various stages + connection.setConnectTimeout( 5000 ); + connection.setReadTimeout( 5000 ); + + String result = new BufferedReader( new InputStreamReader( connection.getInputStream(), StandardCharsets.UTF_8 ) ).lines().collect( Collectors.joining() ); + + int lastStableBuild = Integer.valueOf( result ).intValue(); + + if ( lastStableBuild == currentBuildNumber ) + { + TextComponent latest = new TextComponent( ChatColor.GREEN + "You are running the latest version" ); + latest.setHoverEvent( bungee.getHoverEvent() ); + latest.setClickEvent( bungee.getClickEvent() ); + + sender.sendMessage( latest ); + } else + { + TextComponent behind = new TextComponent( ChatColor.YELLOW + String.format( "You are %d version(s) behind", lastStableBuild - currentBuildNumber ) ); + behind.setHoverEvent( bungee.getHoverEvent() ); + behind.setClickEvent( bungee.getClickEvent() ); + + sender.sendMessage( behind ); + + TextComponent text = new TextComponent( ChatColor.YELLOW + "Download the new version at: " ); + text.setHoverEvent( bungee.getHoverEvent() ); + text.setClickEvent( bungee.getClickEvent() ); + + TextComponent url = new TextComponent( ChatColor.GOLD + "https://ci.simplyrin.net/job/HexaCord/" ); + url.setHoverEvent( new HoverEvent( HoverEvent.Action.SHOW_TEXT, new Text( "Click to open" ) ) ); + url.setClickEvent( new ClickEvent( ClickEvent.Action.OPEN_URL, "https://ci.simplyrin.net/job/HexaCord/" ) ); + + text.addExtra( url ); + + sender.sendMessage( text ); + } + } catch ( Exception e ) + { + e.printStackTrace(); + } + } ); + } +} diff --git a/module/cmd-bungee/src/main/java/net/md_5/bungee/module/cmd/bungee/PluginBungee.java b/module/cmd-bungee/src/main/java/net/md_5/bungee/module/cmd/bungee/PluginBungee.java new file mode 100644 index 00000000..663c94fb --- /dev/null +++ b/module/cmd-bungee/src/main/java/net/md_5/bungee/module/cmd/bungee/PluginBungee.java @@ -0,0 +1,13 @@ +package net.md_5.bungee.module.cmd.bungee; + +import net.md_5.bungee.api.plugin.Plugin; + +public class PluginBungee extends Plugin +{ + + @Override + public void onEnable() + { + getProxy().getPluginManager().registerCommand( this, new CommandBungee( this ) ); + } +} diff --git a/module/cmd-bungee/src/main/resources/plugin.yml b/module/cmd-bungee/src/main/resources/plugin.yml new file mode 100644 index 00000000..66f3a39c --- /dev/null +++ b/module/cmd-bungee/src/main/resources/plugin.yml @@ -0,0 +1,5 @@ +name: ${project.name} +main: net.md_5.bungee.module.cmd.bungee.PluginBungee +version: ${describe} +description: ${project.description} +author: ${module.author} diff --git a/module/pom.xml b/module/pom.xml index 0b495660..36785bd6 100644 --- a/module/pom.xml +++ b/module/pom.xml @@ -20,6 +20,7 @@ cmd-alert + cmd-bungee cmd-find cmd-kick cmd-list diff --git a/proxy/src/main/java/net/md_5/bungee/conf/YamlConfig.java b/proxy/src/main/java/net/md_5/bungee/conf/YamlConfig.java index 150d8739..dd42cb75 100644 --- a/proxy/src/main/java/net/md_5/bungee/conf/YamlConfig.java +++ b/proxy/src/main/java/net/md_5/bungee/conf/YamlConfig.java @@ -95,7 +95,7 @@ public void load() } ) ); set( "permissions.admin", Arrays.asList( new String[] { - "bungeecord.command.alert", "bungeecord.command.end", "bungeecord.command.ip", "bungeecord.command.reload", "bungeecord.command.kick" + "bungeecord.command.alert", "bungeecord.command.end", "bungeecord.command.ip", "bungeecord.command.reload", "bungeecord.command.kick", "bungeecord.command.bungee" } ) ); } 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 index 9c7293b8..be78145a 100644 --- a/proxy/src/main/java/net/md_5/bungee/module/ModuleManager.java +++ b/proxy/src/main/java/net/md_5/bungee/module/ModuleManager.java @@ -84,6 +84,7 @@ public void load(ProxyServer proxy, File moduleDirectory) throws Exception { case 0: defaults.add( "jenkins://cmd_alert" ); + defaults.add( "jenkins://cmd_bungee" ); defaults.add( "jenkins://cmd_find" ); defaults.add( "jenkins://cmd_list" ); defaults.add( "jenkins://cmd_send" );