2018-09-12 15:55:10 +00:00
package xyz.etztech.minecraftmanager.command ;
import net.md_5.bungee.api.chat.ClickEvent ;
import net.md_5.bungee.api.chat.TextComponent ;
import org.bukkit.Bukkit ;
import org.bukkit.ChatColor ;
import org.bukkit.command.Command ;
import org.bukkit.command.CommandExecutor ;
import org.bukkit.command.CommandSender ;
import org.bukkit.entity.Player ;
2022-02-11 17:18:58 +00:00
import xyz.etztech.core.web.Http ;
2018-09-12 16:03:59 +00:00
import xyz.etztech.core.web.ICallback ;
2018-09-12 15:55:10 +00:00
import xyz.etztech.minecraftmanager.MCMAPI ;
import xyz.etztech.minecraftmanager.MinecraftManager ;
2022-02-11 17:18:58 +00:00
import xyz.etztech.minecraftmanager.objects.MCMResponse ;
2018-09-12 16:03:59 +00:00
import xyz.etztech.minecraftmanager.objects.MinecraftManagerThread ;
import xyz.etztech.minecraftmanager.tasks.ReportRunnable ;
2018-09-12 15:55:10 +00:00
import java.io.DataOutputStream ;
import java.io.IOException ;
import java.net.Socket ;
2018-09-12 16:03:59 +00:00
import java.util.Map ;
2018-09-12 15:55:10 +00:00
public class CommandMain implements CommandExecutor {
MinecraftManager plugin ;
private MinecraftManagerThread cmdThread ;
public CommandMain ( MinecraftManager plugin ) {
this . plugin = plugin ;
this . cmdThread = new MinecraftManagerThread ( plugin ) ;
2022-02-11 17:18:58 +00:00
plugin . getCommand ( "minecraftmanager" ) . setExecutor ( this ) ;
2018-09-12 15:55:10 +00:00
}
@Override
public boolean onCommand ( CommandSender sender , Command command , String base , String [ ] args ) {
if ( args . length = = 0 ) {
other ( sender ) ;
} else if ( args . length = = 1 ) {
switch ( args [ 0 ] . toLowerCase ( ) ) {
case "help" :
sender . sendMessage ( ChatColor . GOLD + "----- MinecraftManager Commands -----" ) ;
sender . sendMessage ( ChatColor . YELLOW + "/mcm reload - Reload the config" ) ;
sender . sendMessage ( ChatColor . YELLOW + "/mcm port - Display the port MinecraftManager is on" ) ;
sender . sendMessage ( ChatColor . YELLOW + "/mcm register - Register for the web application" ) ;
sender . sendMessage ( ChatColor . GOLD + "----- Application Command -----" ) ;
sender . sendMessage ( ChatColor . YELLOW + "/application [accept|deny] <ID>" ) ;
sender . sendMessage ( ChatColor . YELLOW + "/application [search|info] <Username>" ) ;
break ;
case "port" :
port ( sender ) ;
break ;
case "reload" :
reload ( sender ) ;
break ;
case "register" :
register ( sender ) ;
break ;
2018-09-12 16:03:59 +00:00
case "report" :
report ( sender ) ;
break ;
2018-09-12 15:55:10 +00:00
default :
other ( sender ) ;
}
}
return true ;
}
private void other ( CommandSender sender ) {
String version = Bukkit . getPluginManager ( ) . getPlugin ( "MinecraftManager" ) . getDescription ( ) . getVersion ( ) ;
sender . sendMessage ( ChatColor . GOLD + "----- MinecraftManager v" + version + " -----" ) ;
sender . sendMessage ( ChatColor . YELLOW + "Developed by EtzTech" ) ;
sender . sendMessage ( ChatColor . YELLOW + "Use \"/mcm help\" for help." ) ;
}
private void port ( CommandSender sender ) {
if ( ! sender . hasPermission ( "minecraftmanager.use" ) ) {
sender . sendMessage ( ChatColor . RED + "You do not have permission to use this command." ) ;
return ;
}
sender . sendMessage ( "MinecraftManager is listening on port " + plugin . getConfig ( ) . getInt ( "port" ) ) ;
}
private void reload ( CommandSender sender ) {
if ( ! sender . hasPermission ( "minecraftmanager.use" ) ) {
sender . sendMessage ( ChatColor . RED + "You do not have permission to use this command." ) ;
return ;
}
try {
sender . sendMessage ( "Reloading MinecraftManager..." ) ;
stopThread ( ) ;
Thread . sleep ( 1000 ) ;
this . plugin . reloadConfig ( ) ;
Thread . sleep ( 1000 ) ;
startThread ( ) ;
sender . sendMessage ( "MinecraftManager reloaded." ) ;
} catch ( Exception ex ) {
sender . sendMessage ( "MinecraftManager reload was interrupted." ) ;
}
}
2018-09-12 16:03:59 +00:00
private class RegisterCallback implements ICallback {
private Player player ;
RegisterCallback ( Player player ) {
this . player = player ;
}
@Override
public void invoke ( String s ) {
MCMResponse response = new MCMResponse ( s ) ;
if ( response . getStatus ( ) ) {
TextComponent password = new TextComponent ( ChatColor . YELLOW + response . getMessage ( ) ) ;
password . setClickEvent ( new ClickEvent ( ClickEvent . Action . SUGGEST_COMMAND , response . getMessage ( ) ) ) ;
TextComponent message = new TextComponent ( ChatColor . GREEN + "Your password is " ) ;
message . addExtra ( password ) ;
message . addExtra ( new TextComponent ( ChatColor . GREEN + "." ) ) ;
player . spigot ( ) . sendMessage ( message ) ;
player . sendMessage ( ChatColor . GREEN + "This password is not shown in Console, however you should consider changing it immediately from the web application." ) ;
player . sendMessage ( ChatColor . GREEN + "You can click the password to bring it into your chat for easy copying." ) ;
} else {
player . sendMessage ( ChatColor . RED + response . getMessage ( ) ) ;
}
}
}
2018-09-12 15:55:10 +00:00
private void register ( CommandSender sender ) {
if ( ! ( sender instanceof Player ) ) {
sender . sendMessage ( ChatColor . RED + "Console cannot register for the web application." ) ;
return ;
}
if ( ! sender . hasPermission ( "minecraftmanager.register" ) ) {
sender . sendMessage ( ChatColor . RED + "You do not have permission to register for the web application." ) ;
return ;
}
Player player = ( Player ) sender ;
2018-09-12 16:03:59 +00:00
String djangoUrl = MCMAPI . getDjangoUrl ( ) + "plugin/register/" ;
Map < String , String > data = MCMAPI . setup ( ) ;
data . put ( "uuid" , player . getUniqueId ( ) . toString ( ) ) ;
2022-02-11 17:18:58 +00:00
Http . asyncPostCallback ( plugin , djangoUrl , data , new RegisterCallback ( player ) ) ;
2018-09-12 16:03:59 +00:00
}
private void report ( CommandSender sender ) {
String name = sender instanceof Player ? sender . getName ( ) : "Console" ;
if ( sender . hasPermission ( "minecraftmanager.report" ) ) {
if ( MinecraftManager . getReportRunning ( ) ) {
MinecraftManager . setReportStop ( true ) ;
sender . sendMessage ( ChatColor . GREEN + "Stopping report generation." ) ;
}
Bukkit . getScheduler ( ) . runTaskAsynchronously ( plugin , new ReportRunnable ( name ) ) ;
2018-09-12 15:55:10 +00:00
} else {
2018-09-12 16:03:59 +00:00
sender . sendMessage ( ChatColor . RED + "You do not have permission to generate a report." ) ;
2018-09-12 15:55:10 +00:00
}
}
public void startThread ( ) {
Bukkit . getConsoleSender ( ) . sendMessage ( "Starting MinecraftManager on Port " + plugin . getConfig ( ) . get ( "port" ) ) ;
cmdThread . setRunning ( true ) ;
Thread th = new Thread ( cmdThread ) ;
th . start ( ) ;
}
public void stopThread ( ) {
cmdThread . setRunning ( false ) ;
try {
Socket trashSock = new Socket ( "127.0.0.1" , plugin . getConfig ( ) . getInt ( "port" ) ) ;
DataOutputStream trashStream = new DataOutputStream ( trashSock . getOutputStream ( ) ) ;
trashStream . writeUTF ( "trash" ) ;
trashStream . flush ( ) ;
trashStream . close ( ) ;
} catch ( IOException ex ) {
Bukkit . getConsoleSender ( ) . sendMessage ( "Error: " + ex . getMessage ( ) ) ;
}
}
}