2018-07-23 05:44:20 +02:00
package net.ME1312.SubServers.Client.Sponge ;
2018-07-27 21:36:51 +02:00
import com.google.gson.Gson ;
2020-06-12 07:45:49 +02:00
import net.ME1312.Galaxi.Library.AsyncConsolidator ;
2020-11-14 08:07:25 +01:00
import net.ME1312.Galaxi.Library.Container.ContainedPair ;
import net.ME1312.Galaxi.Library.Container.Container ;
import net.ME1312.Galaxi.Library.Container.Pair ;
2020-06-12 07:45:49 +02:00
import net.ME1312.Galaxi.Library.Platform ;
2019-05-12 03:22:18 +02:00
import net.ME1312.SubData.Client.SubDataClient ;
2018-07-23 05:44:20 +02:00
import net.ME1312.SubServers.Client.Sponge.Graphic.UIRenderer ;
2019-05-12 03:22:18 +02:00
import net.ME1312.Galaxi.Library.Callback.Callback ;
2020-06-12 07:45:49 +02:00
import net.ME1312.SubServers.Client.Sponge.Library.Compatibility.ChatColor ;
2019-05-12 03:22:18 +02:00
import net.ME1312.Galaxi.Library.Map.ObjectMap ;
2020-11-14 08:07:25 +01:00
import net.ME1312.Galaxi.Library.Container.Value ;
2019-05-12 03:22:18 +02:00
import net.ME1312.Galaxi.Library.Util ;
import net.ME1312.Galaxi.Library.Version.Version ;
2020-06-12 07:45:49 +02:00
import net.ME1312.SubServers.Client.Sponge.Library.Compatibility.ListArgument ;
2020-11-14 06:29:29 +01:00
import net.ME1312.SubServers.Client.Common.Network.API.* ;
import net.ME1312.SubServers.Client.Common.Network.Packet.* ;
2018-07-23 05:44:20 +02:00
import net.ME1312.SubServers.Client.Sponge.Network.Packet.* ;
import org.spongepowered.api.Sponge ;
import org.spongepowered.api.command.CommandException ;
import org.spongepowered.api.command.CommandResult ;
import org.spongepowered.api.command.CommandSource ;
import org.spongepowered.api.command.args.CommandContext ;
import org.spongepowered.api.command.args.GenericArguments ;
import org.spongepowered.api.command.spec.CommandExecutor ;
import org.spongepowered.api.command.spec.CommandSpec ;
2020-06-12 07:45:49 +02:00
import org.spongepowered.api.entity.Entity ;
2018-07-23 05:44:20 +02:00
import org.spongepowered.api.entity.living.player.Player ;
2018-07-26 19:34:31 +02:00
import org.spongepowered.api.plugin.PluginContainer ;
2018-07-23 05:44:20 +02:00
import org.spongepowered.api.text.Text ;
import org.spongepowered.api.text.action.TextActions ;
import org.spongepowered.api.text.format.TextColors ;
2020-06-12 07:45:49 +02:00
import org.spongepowered.api.text.selector.Selector ;
2018-07-23 05:44:20 +02:00
import java.io.BufferedReader ;
import java.io.InputStreamReader ;
import java.lang.reflect.InvocationTargetException ;
import java.net.URL ;
import java.nio.charset.Charset ;
import java.text.DecimalFormat ;
import java.util.* ;
2019-01-07 22:09:20 +01:00
import java.util.concurrent.TimeUnit ;
2018-07-23 05:44:20 +02:00
2020-11-14 06:29:29 +01:00
import static net.ME1312.SubServers.Client.Sponge.Library.ObjectPermission.* ;
2018-07-23 05:44:20 +02:00
public final class SubCommand implements CommandExecutor {
private SubPlugin plugin ;
public SubCommand ( SubPlugin plugin ) {
this . plugin = plugin ;
}
2018-07-26 19:34:31 +02:00
/ * *
* Generate CommandSpec for this command
*
* @return CommandSpec
* /
2018-07-23 05:44:20 +02:00
public CommandSpec spec ( ) {
SubCommand root = new SubCommand ( plugin ) ;
return CommandSpec . builder ( )
. description ( Text . of ( " The SubServers Command " ) )
. executor ( root )
. arguments ( GenericArguments . optional ( GenericArguments . string ( Text . of ( " subcommand " ) ) ) , GenericArguments . optional ( GenericArguments . remainingJoinedStrings ( Text . of ( " extra " ) ) ) )
. child ( CommandSpec . builder ( )
. description ( Text . of ( " The SubServers Command - Help " ) )
. executor ( new HELP ( ) )
. arguments ( GenericArguments . optional ( GenericArguments . remainingJoinedStrings ( Text . of ( " extra " ) ) ) )
. build ( ) , " help " , " ? " )
. child ( CommandSpec . builder ( )
. description ( Text . of ( " The SubServers Command - Version " ) )
. executor ( new VERSION ( ) )
. arguments ( GenericArguments . optional ( GenericArguments . remainingJoinedStrings ( Text . of ( " extra " ) ) ) )
. build ( ) , " version " , " ver " )
. child ( CommandSpec . builder ( )
. description ( Text . of ( " The SubServers Command - List " ) )
. executor ( new LIST ( ) )
. arguments ( GenericArguments . optional ( GenericArguments . remainingJoinedStrings ( Text . of ( " extra " ) ) ) )
. build ( ) , " list " )
. child ( CommandSpec . builder ( )
. description ( Text . of ( " The SubServers Command - Info " ) )
. executor ( new INFO ( ) )
2018-08-10 06:50:10 +02:00
. arguments ( GenericArguments . optional ( GenericArguments . string ( Text . of ( " Type " ) ) ) , GenericArguments . optional ( GenericArguments . string ( Text . of ( " Name " ) ) ) , GenericArguments . optional ( GenericArguments . remainingJoinedStrings ( Text . of ( " extra " ) ) ) )
2018-07-23 05:44:20 +02:00
. build ( ) , " info " , " status " )
. child ( CommandSpec . builder ( )
. description ( Text . of ( " The SubServers Command - Start " ) )
. executor ( new START ( ) )
2020-06-12 07:45:49 +02:00
. arguments ( GenericArguments . optional ( new ListArgument ( Text . of ( " Subservers " ) ) ) , GenericArguments . optional ( GenericArguments . remainingJoinedStrings ( Text . of ( " extra " ) ) ) )
2018-07-23 05:44:20 +02:00
. build ( ) , " start " )
2019-01-07 22:09:20 +01:00
. child ( CommandSpec . builder ( )
. description ( Text . of ( " The SubServers Command - Restart " ) )
. executor ( new RESTART ( ) )
2020-06-12 07:45:49 +02:00
. arguments ( GenericArguments . optional ( new ListArgument ( Text . of ( " Subservers " ) ) ) , GenericArguments . optional ( GenericArguments . remainingJoinedStrings ( Text . of ( " extra " ) ) ) )
2019-01-07 22:09:20 +01:00
. build ( ) , " restart " )
2018-07-23 05:44:20 +02:00
. child ( CommandSpec . builder ( )
. description ( Text . of ( " The SubServers Command - Stop " ) )
. executor ( new STOP ( ) )
2020-06-12 07:45:49 +02:00
. arguments ( GenericArguments . optional ( new ListArgument ( Text . of ( " Subservers " ) ) ) , GenericArguments . optional ( GenericArguments . remainingJoinedStrings ( Text . of ( " extra " ) ) ) )
2018-07-23 05:44:20 +02:00
. build ( ) , " stop " )
. child ( CommandSpec . builder ( )
. description ( Text . of ( " The SubServers Command - Terminate " ) )
. executor ( new TERMINATE ( ) )
2020-06-12 07:45:49 +02:00
. arguments ( GenericArguments . optional ( new ListArgument ( Text . of ( " Subservers " ) ) ) , GenericArguments . optional ( GenericArguments . remainingJoinedStrings ( Text . of ( " extra " ) ) ) )
2018-07-23 05:44:20 +02:00
. build ( ) , " kill " , " terminate " )
. child ( CommandSpec . builder ( )
. description ( Text . of ( " The SubServers Command - Command " ) )
. executor ( new COMMAND ( ) )
2020-06-12 07:45:49 +02:00
. arguments ( GenericArguments . optional ( new ListArgument ( Text . of ( " Subservers " ) ) ) , GenericArguments . optional ( GenericArguments . remainingJoinedStrings ( Text . of ( " Command " ) ) ) )
2018-07-23 05:44:20 +02:00
. build ( ) , " command " , " cmd " )
. child ( CommandSpec . builder ( )
. description ( Text . of ( " The SubServers Command - Create " ) )
. executor ( new CREATE ( ) )
. arguments ( GenericArguments . optional ( GenericArguments . string ( Text . of ( " Name " ) ) ) , GenericArguments . optional ( GenericArguments . string ( Text . of ( " Host " ) ) ) , GenericArguments . optional ( GenericArguments . string ( Text . of ( " Template " ) ) ) , GenericArguments . optional ( GenericArguments . string ( Text . of ( " Version " ) ) ) , GenericArguments . optional ( GenericArguments . string ( Text . of ( " Port " ) ) ) , GenericArguments . optional ( GenericArguments . remainingJoinedStrings ( Text . of ( " extra " ) ) ) )
. build ( ) , " create " )
2019-06-17 05:13:48 +02:00
. child ( CommandSpec . builder ( )
. description ( Text . of ( " The SubServers Command - Update " ) )
. executor ( new UPDATE ( ) )
2020-08-20 03:15:55 +02:00
. arguments ( GenericArguments . optional ( new ListArgument ( Text . of ( " Subservers " ) ) ) , GenericArguments . optional ( GenericArguments . string ( Text . of ( " Template " ) ) ) , GenericArguments . optional ( GenericArguments . string ( Text . of ( " Version " ) ) ) , GenericArguments . optional ( GenericArguments . remainingJoinedStrings ( Text . of ( " extra " ) ) ) )
2019-06-17 05:13:48 +02:00
. build ( ) , " update " , " upgrade " )
2020-06-12 07:45:49 +02:00
. child ( CommandSpec . builder ( )
. description ( Text . of ( " The SubServers Command - Teleport " ) )
. executor ( new TELEPORT ( ) )
. arguments ( GenericArguments . optional ( GenericArguments . string ( Text . of ( " Player " ) ) ) , GenericArguments . optional ( GenericArguments . string ( Text . of ( " Server " ) ) ) , GenericArguments . optional ( GenericArguments . remainingJoinedStrings ( Text . of ( " extra " ) ) ) )
. build ( ) , " tp " , " teleport " )
2018-07-23 05:44:20 +02:00
. child ( CommandSpec . builder ( )
. description ( Text . of ( " The SubServers Command - Open Menu " ) )
. executor ( new OPEN ( ) )
. arguments ( GenericArguments . optional ( GenericArguments . string ( Text . of ( " MenuID " ) ) ) , GenericArguments . optional ( GenericArguments . allOf ( GenericArguments . string ( Text . of ( " Args " ) ) ) ) )
. build ( ) , " open " , " view " )
. build ( ) ;
}
2018-08-07 23:54:57 +02:00
private boolean canRun ( CommandSource sender ) throws CommandException {
2019-05-12 03:22:18 +02:00
if ( SubAPI . getInstance ( ) . getSubDataNetwork ( ) [ 0 ] = = null ) {
2018-08-07 23:54:57 +02:00
throw new CommandException ( Text . builder ( " An exception has occurred while running this command " ) . color ( TextColors . RED ) . build ( ) , new IllegalStateException ( " SubData is not connected " ) , false ) ;
2018-07-23 05:44:20 +02:00
} else if ( plugin . lang = = null ) {
2018-08-07 23:54:57 +02:00
throw new CommandException ( Text . builder ( " An exception has occurred while running this command " ) . color ( TextColors . RED ) . build ( ) , new IllegalStateException ( " There are no lang options available at this time " ) , false ) ;
2018-07-23 05:44:20 +02:00
} else {
2019-04-18 16:02:09 +02:00
return sender . hasPermission ( " subservers.command " ) ;
2018-07-23 05:44:20 +02:00
}
}
public CommandResult execute ( CommandSource sender , CommandContext args ) throws CommandException {
if ( canRun ( sender ) ) {
Optional < String > subcommand = args . getOne ( Text . of ( " subcommand " ) ) ;
if ( subcommand . isPresent ( ) ) {
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Invalid-Subcommand " ) . replace ( " $str$ " , subcommand . get ( ) ) ) ) ;
2018-07-23 05:44:20 +02:00
return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
} else {
if ( sender . hasPermission ( " subservers.interface " ) & & sender instanceof Player & & plugin . gui ! = null ) {
plugin . gui . getRenderer ( ( Player ) sender ) . newUI ( ) ;
} else {
sender . sendMessages ( printHelp ( ) ) ;
}
return CommandResult . builder ( ) . successCount ( 1 ) . build ( ) ;
}
} else {
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Invalid-Permission " ) . replace ( " $str$ " , " subservers.command " ) ) ) ;
2018-07-23 05:44:20 +02:00
return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
}
}
public final class HELP implements CommandExecutor {
public CommandResult execute ( CommandSource sender , CommandContext args ) throws CommandException {
if ( canRun ( sender ) ) {
sender . sendMessages ( printHelp ( ) ) ;
return CommandResult . builder ( ) . successCount ( 1 ) . build ( ) ;
} else {
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Invalid-Permission " ) . replace ( " $str$ " , " subservers.command " ) ) ) ;
2018-07-23 05:44:20 +02:00
return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
}
}
}
public final class VERSION implements CommandExecutor {
2018-07-27 21:36:51 +02:00
@SuppressWarnings ( " unchecked " )
2018-07-23 05:44:20 +02:00
public CommandResult execute ( CommandSource sender , CommandContext args ) throws CommandException {
if ( canRun ( sender ) ) {
2020-11-14 08:07:25 +01:00
PluginContainer container = Util . getDespiteException ( ( ) - > ( PluginContainer ) org . spongepowered . api . Platform . class . getMethod ( " getValue " , Class . forName ( " org.spongepowered.api.Platform$Component " ) ) . invoke ( Sponge . getPlatform ( ) , Enum . valueOf ( ( Class < Enum > ) Class . forName ( " org.spongepowered.api.Platform$Component " ) , " IMPLEMENTATION " ) ) , null ) ;
2020-06-12 07:45:49 +02:00
if ( container = = null ) container = Util . getDespiteException ( ( ) - > ( PluginContainer ) org . spongepowered . api . Platform . class . getMethod ( " getImplementation " ) . invoke ( Sponge . getPlatform ( ) ) , null ) ;
2018-07-30 18:29:36 +02:00
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Version " ) . replace ( " $str$ " , " SubServers.Client.Sponge " ) ) ) ;
2020-06-12 07:45:49 +02:00
sender . sendMessage ( Text . builder ( " " + Platform . getSystemName ( ) + ' ' + Platform . getSystemVersion ( ) + ( ( ! Platform . getSystemArchitecture ( ) . equals ( " unknown " ) ) ? " [ " + Platform . getSystemArchitecture ( ) + ']' : " " ) ) . color ( TextColors . WHITE ) . append ( Text . of ( " , " ) ) . build ( ) ) ;
sender . sendMessage ( Text . builder ( " Java " + Platform . getJavaVersion ( ) + ( ( ! Platform . getJavaArchitecture ( ) . equals ( " unknown " ) ) ? " [ " + Platform . getJavaArchitecture ( ) + ']' : " " ) ) . color ( TextColors . WHITE ) . append ( Text . of ( " , " ) ) . build ( ) ) ;
2018-07-30 18:29:36 +02:00
sender . sendMessage ( Text . builder ( " " + container . getName ( ) + ' ' + container . getVersion ( ) . get ( ) ) . color ( TextColors . WHITE ) . append ( Text . of ( " , " ) ) . build ( ) ) ;
2018-07-29 20:39:42 +02:00
sender . sendMessage ( Text . builder ( " SubServers.Client.Sponge v " + plugin . version . toExtendedString ( ) + ( ( plugin . api . getPluginBuild ( ) ! = null ) ? " ( " + plugin . api . getPluginBuild ( ) + ')' : " " ) ) . color ( TextColors . WHITE ) . build ( ) ) ;
2018-07-23 05:44:20 +02:00
sender . sendMessage ( Text . EMPTY ) ;
plugin . game . getScheduler ( ) . createTaskBuilder ( ) . async ( ) . execute ( ( ) - > {
try {
2019-05-12 03:22:18 +02:00
ObjectMap < String > tags = new ObjectMap < String > ( new Gson ( ) . fromJson ( " { \" tags \" : " + Util . readAll ( new BufferedReader ( new InputStreamReader ( new URL ( " https://api.github.com/repos/ME1312/SubServers-2/git/refs/tags " ) . openStream ( ) , Charset . forName ( " UTF-8 " ) ) ) ) + '}' , Map . class ) ) ;
2018-07-29 20:39:42 +02:00
List < Version > versions = new LinkedList < Version > ( ) ;
2018-07-23 05:44:20 +02:00
Version updversion = plugin . version ;
int updcount = 0 ;
2019-05-12 03:22:18 +02:00
for ( ObjectMap < String > tag : tags . getMapList ( " tags " ) ) versions . add ( Version . fromString ( tag . getString ( " ref " ) . substring ( 10 ) ) ) ;
2018-07-29 20:39:42 +02:00
Collections . sort ( versions ) ;
for ( Version version : versions ) {
2018-07-29 05:02:47 +02:00
if ( version . compareTo ( updversion ) > 0 ) {
2018-07-27 21:36:51 +02:00
updversion = version ;
updcount + + ;
2018-07-23 05:44:20 +02:00
}
}
if ( updcount = = 0 ) {
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Version.Latest " ) ) ) ;
2018-07-23 05:44:20 +02:00
} else {
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Version.Outdated " ) . replace ( " $name$ " , " SubServers.Client.Sponge " ) . replace ( " $str$ " , updversion . toString ( ) ) . replace ( " $int$ " , Integer . toString ( updcount ) ) ) ) ;
2018-07-23 05:44:20 +02:00
}
} catch ( Exception e ) { }
2018-07-30 18:29:36 +02:00
} ) . submit ( plugin ) ;
2018-07-23 05:44:20 +02:00
return CommandResult . builder ( ) . successCount ( 1 ) . build ( ) ;
} else {
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Invalid-Permission " ) . replace ( " $str$ " , " subservers.command " ) ) ) ;
2018-07-23 05:44:20 +02:00
return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
}
}
}
public final class LIST implements CommandExecutor {
public CommandResult execute ( CommandSource sender , CommandContext args ) throws CommandException {
if ( canRun ( sender ) ) {
2018-08-09 20:54:56 +02:00
plugin . api . getGroups ( groups - > plugin . api . getHosts ( hosts - > plugin . api . getServers ( servers - > plugin . api . getMasterProxy ( proxymaster - > plugin . api . getProxies ( proxies - > {
2018-07-23 05:44:20 +02:00
int i = 0 ;
boolean sent = false ;
2018-08-10 06:50:10 +02:00
Text div = ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.List.Divider " ) ) ;
2018-08-09 20:54:56 +02:00
if ( groups . keySet ( ) . size ( ) > 0 ) {
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.List.Group-Header " ) ) ) ;
2018-08-09 20:54:56 +02:00
for ( String group : groups . keySet ( ) ) {
2018-07-23 05:44:20 +02:00
Text . Builder msg = Text . builder ( group ) . color ( TextColors . GOLD ) . onHover ( TextActions . showText (
Text . builder ( group + '\n' ) . color ( TextColors . GOLD ) . append (
2018-08-10 06:50:10 +02:00
ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Interface.Group-Menu.Group-Server-Count " ) . replace ( " $int$ " , new DecimalFormat ( " #,### " ) . format ( groups . get ( group ) . size ( ) ) ) )
2018-07-23 05:44:20 +02:00
) . build ( ) )
2018-08-10 06:50:10 +02:00
) . onClick ( TextActions . runCommand ( " /subservers open Server 1 " + group ) ) . append ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.List.Header " ) ) ) ;
2018-07-23 05:44:20 +02:00
2018-08-09 20:54:56 +02:00
for ( Server server : groups . get ( group ) ) {
Text . Builder message = Text . builder ( server . getDisplayName ( ) ) ;
Text . Builder hover = Text . builder ( server . getDisplayName ( ) + '\n' ) ;
if ( server instanceof SubServer ) {
message . onClick ( TextActions . runCommand ( " /subservers open SubServer/ " + server . getName ( ) ) ) ;
2018-08-30 03:55:59 +02:00
if ( ( ( SubServer ) server ) . isRunning ( ) ) {
2018-07-23 05:44:20 +02:00
message . color ( TextColors . GREEN ) ;
hover . color ( TextColors . GREEN ) ;
2018-08-09 20:54:56 +02:00
if ( ! server . getName ( ) . equals ( server . getDisplayName ( ) ) ) {
hover . append ( Text . builder ( server . getName ( ) + '\n' ) . color ( TextColors . GRAY ) . build ( ) ) ;
2018-07-23 05:44:20 +02:00
}
2019-05-12 03:22:18 +02:00
if ( ( ( SubServer ) server ) . getStopAction ( ) = = SubServer . StopAction . REMOVE_SERVER | | ( ( SubServer ) server ) . getStopAction ( ) = = SubServer . StopAction . RECYCLE_SERVER | | ( ( SubServer ) server ) . getStopAction ( ) = = SubServer . StopAction . DELETE_SERVER ) {
2018-08-30 03:55:59 +02:00
message . color ( TextColors . AQUA ) ;
hover . color ( TextColors . AQUA ) ;
hover . append ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Interface.Server-Menu.SubServer-Temporary " ) + '\n' ) ) ;
}
2018-07-23 05:44:20 +02:00
hover . append (
2020-11-14 19:12:08 +01:00
ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Interface.Server-Menu.Server-Player-Count " ) . replace ( " $int$ " , new DecimalFormat ( " #,### " ) . format ( server . getRemotePlayers ( ) . size ( ) ) ) )
2018-07-23 05:44:20 +02:00
) ;
2019-06-17 05:13:48 +02:00
} else if ( ( ( SubServer ) server ) . isAvailable ( ) & & ( ( SubServer ) server ) . isEnabled ( ) & & ( ( SubServer ) server ) . getCurrentIncompatibilities ( ) . size ( ) = = 0 ) {
2018-07-23 05:44:20 +02:00
message . color ( TextColors . YELLOW ) ;
hover . color ( TextColors . YELLOW ) ;
2018-08-09 20:54:56 +02:00
if ( ! server . getName ( ) . equals ( server . getDisplayName ( ) ) ) {
hover . append ( Text . builder ( server . getName ( ) + '\n' ) . color ( TextColors . GRAY ) . build ( ) ) ;
2018-07-23 05:44:20 +02:00
}
hover . append (
2018-08-10 06:50:10 +02:00
ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Interface.Server-Menu.SubServer-Offline " ) )
2018-07-23 05:44:20 +02:00
) ;
} else {
message . color ( TextColors . RED ) ;
hover . color ( TextColors . RED ) ;
2018-08-09 20:54:56 +02:00
if ( ! server . getName ( ) . equals ( server . getDisplayName ( ) ) ) {
hover . append ( Text . builder ( server . getName ( ) + '\n' ) . color ( TextColors . GRAY ) . build ( ) ) ;
2018-07-23 05:44:20 +02:00
}
2018-08-09 20:54:56 +02:00
if ( ( ( SubServer ) server ) . getCurrentIncompatibilities ( ) . size ( ) ! = 0 ) {
2018-07-23 05:44:20 +02:00
String list = " " ;
2018-08-09 20:54:56 +02:00
for ( String other : ( ( SubServer ) server ) . getCurrentIncompatibilities ( ) ) {
2018-07-23 05:44:20 +02:00
if ( list . length ( ) ! = 0 ) list + = " , " ;
2018-08-09 20:54:56 +02:00
list + = other ;
2018-07-23 05:44:20 +02:00
}
2019-06-17 05:13:48 +02:00
hover . append ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Interface.Server-Menu.SubServer-Incompatible " ) . replace ( " $str$ " , list ) + ( ( ( SubServer ) server ) . isAvailable ( ) & & ( ( ( SubServer ) server ) . isEnabled ( ) ) ? " " : " \ n " ) ) ) ;
2018-07-23 05:44:20 +02:00
}
2019-06-17 05:13:48 +02:00
if ( ! ( ( SubServer ) server ) . isAvailable ( ) | | ! ( ( SubServer ) server ) . isEnabled ( ) ) {
hover . append ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , ( ! ( ( SubServer ) server ) . isAvailable ( ) ) ? " Interface.Server-Menu.SubServer-Unavailable " : " Interface.Server-Menu.SubServer-Disabled " ) ) ) ;
2018-07-23 05:44:20 +02:00
}
}
2019-05-12 03:22:18 +02:00
if ( plugin . config . get ( ) . getMap ( " Settings " ) . getBoolean ( " Show-Addresses " , false ) ) {
2018-08-09 20:54:56 +02:00
hover . append ( Text . builder ( '\n' + server . getAddress ( ) . getAddress ( ) . getHostAddress ( ) + ':' + server . getAddress ( ) . getPort ( ) ) . color ( TextColors . WHITE ) . build ( ) ) ;
2018-07-23 05:44:20 +02:00
} else {
2018-08-09 20:54:56 +02:00
hover . append ( Text . builder ( " \ n " + server . getAddress ( ) . getPort ( ) ) . color ( TextColors . WHITE ) . build ( ) ) ;
2018-07-23 05:44:20 +02:00
}
2018-08-09 20:54:56 +02:00
message . onClick ( TextActions . runCommand ( " /subservers open SubServer/ " + server . getName ( ) ) ) ;
2018-07-23 05:44:20 +02:00
} else {
message . color ( TextColors . WHITE ) ;
hover . color ( TextColors . WHITE ) ;
2018-08-09 20:54:56 +02:00
if ( ! server . getName ( ) . equals ( server . getDisplayName ( ) ) ) {
hover . append ( Text . builder ( server . getName ( ) + '\n' ) . color ( TextColors . GRAY ) . build ( ) ) ;
}
2018-08-07 04:39:29 +02:00
hover . append (
2018-08-10 06:50:10 +02:00
ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Interface.Server-Menu.Server-External " ) + '\n' ) ,
2020-11-14 19:12:08 +01:00
ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Interface.Server-Menu.Server-Player-Count " ) . replace ( " $int$ " , new DecimalFormat ( " #,### " ) . format ( server . getRemotePlayers ( ) . size ( ) ) ) )
2018-08-07 04:39:29 +02:00
) ;
2019-05-12 03:22:18 +02:00
if ( plugin . config . get ( ) . getMap ( " Settings " ) . getBoolean ( " Show-Addresses " , false ) ) {
2018-08-09 20:54:56 +02:00
hover . append ( Text . builder ( '\n' + server . getAddress ( ) . getAddress ( ) . getHostAddress ( ) + ':' + server . getAddress ( ) . getPort ( ) ) . color ( TextColors . WHITE ) . build ( ) ) ;
2018-07-23 05:44:20 +02:00
} else {
2018-08-09 20:54:56 +02:00
hover . append ( Text . builder ( " \ n " + server . getAddress ( ) . getPort ( ) ) . color ( TextColors . WHITE ) . build ( ) ) ;
2018-07-23 05:44:20 +02:00
}
}
message . onHover ( TextActions . showText ( hover . build ( ) ) ) ;
if ( i ! = 0 ) msg . append ( div ) ;
msg . append ( message . build ( ) ) ;
i + + ;
}
2018-08-10 06:50:10 +02:00
if ( i = = 0 ) msg . append ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.List.Empty " ) ) ) ;
2018-07-23 05:44:20 +02:00
sender . sendMessages ( Text . builder ( " " ) . append ( msg . build ( ) ) . build ( ) ) ;
i = 0 ;
sent = true ;
}
2018-08-10 06:50:10 +02:00
if ( ! sent ) sender . sendMessage ( ChatColor . convertColor ( " " + plugin . api . getLang ( " SubServers " , " Command.List.Empty " ) ) ) ;
2018-07-23 05:44:20 +02:00
sent = false ;
}
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.List.Host-Header " ) ) ) ;
2018-08-09 20:54:56 +02:00
for ( Host host : hosts . values ( ) ) {
Text . Builder msg = Text . builder ( host . getDisplayName ( ) ) ;
Text . Builder hover = Text . builder ( host . getDisplayName ( ) + '\n' ) ;
2018-08-30 03:55:59 +02:00
if ( host . isAvailable ( ) & & host . isEnabled ( ) ) {
2018-07-23 05:44:20 +02:00
msg . color ( TextColors . AQUA ) ;
hover . color ( TextColors . AQUA ) ;
2018-08-09 20:54:56 +02:00
if ( ! host . getName ( ) . equals ( host . getDisplayName ( ) ) ) {
hover . append ( Text . builder ( host . getName ( ) + '\n' ) . color ( TextColors . GRAY ) . build ( ) ) ;
2018-07-23 05:44:20 +02:00
}
2018-08-10 06:50:10 +02:00
hover . append ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Interface.Host-Menu.Host-Server-Count " ) . replace ( " $int$ " , new DecimalFormat ( " #,### " ) . format ( host . getSubServers ( ) . keySet ( ) . size ( ) ) ) ) ) ;
2018-07-23 05:44:20 +02:00
} else {
msg . color ( TextColors . RED ) ;
hover . color ( TextColors . RED ) ;
2018-08-09 20:54:56 +02:00
if ( ! host . getName ( ) . equals ( host . getDisplayName ( ) ) ) {
hover . append ( Text . builder ( host . getName ( ) + '\n' ) . color ( TextColors . GRAY ) . build ( ) ) ;
2018-07-23 05:44:20 +02:00
}
2018-08-30 03:55:59 +02:00
if ( ! host . isAvailable ( ) ) hover . append ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Interface.Host-Menu.Host-Unavailable " ) ) ) ;
else hover . append ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Interface.Host-Menu.Host-Disabled " ) ) ) ;
2018-07-23 05:44:20 +02:00
}
2019-05-12 03:22:18 +02:00
if ( plugin . config . get ( ) . getMap ( " Settings " ) . getBoolean ( " Show-Addresses " , false ) ) {
2018-08-09 20:54:56 +02:00
hover . append ( Text . builder ( '\n' + host . getAddress ( ) . getHostAddress ( ) ) . color ( TextColors . WHITE ) . build ( ) ) ;
2018-07-23 05:44:20 +02:00
}
2018-08-09 20:54:56 +02:00
msg . onClick ( TextActions . runCommand ( " /subservers open Host/ " + host . getName ( ) ) ) ;
2018-07-23 05:44:20 +02:00
msg . onHover ( TextActions . showText ( hover . build ( ) ) ) ;
2018-08-10 06:50:10 +02:00
msg . append ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.List.Header " ) ) ) ;
2018-07-23 05:44:20 +02:00
2018-08-09 20:54:56 +02:00
for ( SubServer subserver : host . getSubServers ( ) . values ( ) ) {
Text . Builder message = Text . builder ( subserver . getDisplayName ( ) ) ;
hover = Text . builder ( subserver . getDisplayName ( ) + '\n' ) ;
2018-08-30 03:55:59 +02:00
if ( subserver . isRunning ( ) ) {
2018-07-23 05:44:20 +02:00
message . color ( TextColors . GREEN ) ;
hover . color ( TextColors . GREEN ) ;
2018-08-09 20:54:56 +02:00
if ( ! subserver . getName ( ) . equals ( subserver . getDisplayName ( ) ) ) {
hover . append ( Text . builder ( subserver . getName ( ) + '\n' ) . color ( TextColors . GRAY ) . build ( ) ) ;
2018-07-23 05:44:20 +02:00
}
2019-05-12 03:22:18 +02:00
if ( subserver . getStopAction ( ) = = SubServer . StopAction . REMOVE_SERVER | | subserver . getStopAction ( ) = = SubServer . StopAction . RECYCLE_SERVER | | subserver . getStopAction ( ) = = SubServer . StopAction . DELETE_SERVER ) {
2018-08-30 03:55:59 +02:00
message . color ( TextColors . AQUA ) ;
hover . color ( TextColors . AQUA ) ;
hover . append ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Interface.Server-Menu.SubServer-Temporary " ) + '\n' ) ) ;
}
2020-11-14 19:12:08 +01:00
hover . append ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Interface.Server-Menu.Server-Player-Count " ) . replace ( " $int$ " , new DecimalFormat ( " #,### " ) . format ( subserver . getRemotePlayers ( ) . size ( ) ) ) ) ) ;
2019-06-17 05:13:48 +02:00
} else if ( subserver . isAvailable ( ) & & subserver . isEnabled ( ) & & subserver . getCurrentIncompatibilities ( ) . size ( ) = = 0 ) {
2018-07-23 05:44:20 +02:00
message . color ( TextColors . YELLOW ) ;
hover . color ( TextColors . YELLOW ) ;
2018-08-09 20:54:56 +02:00
if ( ! subserver . getName ( ) . equals ( subserver . getDisplayName ( ) ) ) {
hover . append ( Text . builder ( subserver . getName ( ) + '\n' ) . color ( TextColors . GRAY ) . build ( ) ) ;
2018-07-23 05:44:20 +02:00
}
2018-08-10 06:50:10 +02:00
hover . append ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Interface.Server-Menu.SubServer-Offline " ) ) ) ;
2018-07-23 05:44:20 +02:00
} else {
message . color ( TextColors . RED ) ;
hover . color ( TextColors . RED ) ;
2018-08-09 20:54:56 +02:00
if ( ! subserver . getName ( ) . equals ( subserver . getDisplayName ( ) ) ) {
hover . append ( Text . builder ( subserver . getName ( ) + '\n' ) . color ( TextColors . GRAY ) . build ( ) ) ;
2018-07-23 05:44:20 +02:00
}
2018-08-09 20:54:56 +02:00
if ( subserver . getCurrentIncompatibilities ( ) . size ( ) ! = 0 ) {
2018-07-23 05:44:20 +02:00
String list = " " ;
2018-08-09 20:54:56 +02:00
for ( String other : subserver . getCurrentIncompatibilities ( ) ) {
2018-07-23 05:44:20 +02:00
if ( list . length ( ) ! = 0 ) list + = " , " ;
2018-08-09 20:54:56 +02:00
list + = other ;
2018-07-23 05:44:20 +02:00
}
2019-06-17 05:13:48 +02:00
hover . append ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Interface.Server-Menu.SubServer-Incompatible " ) . replace ( " $str$ " , list ) + ( ( subserver . isAvailable ( ) & & subserver . isEnabled ( ) ) ? " " : " \ n " ) ) ) ;
2018-07-23 05:44:20 +02:00
}
2019-06-17 05:13:48 +02:00
if ( ! subserver . isAvailable ( ) | | ! subserver . isEnabled ( ) ) {
hover . append ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , ( ! subserver . isAvailable ( ) ) ? " Interface.Server-Menu.SubServer-Unavailable " : " Interface.Server-Menu.SubServer-Disabled " ) ) ) ;
2018-07-23 05:44:20 +02:00
}
}
2019-05-12 03:22:18 +02:00
if ( plugin . config . get ( ) . getMap ( " Settings " ) . getBoolean ( " Show-Addresses " , false ) ) {
2018-08-09 20:54:56 +02:00
hover . append ( Text . builder ( '\n' + subserver . getAddress ( ) . getAddress ( ) . getHostAddress ( ) + ':' + subserver . getAddress ( ) . getPort ( ) ) . color ( TextColors . WHITE ) . build ( ) ) ;
2018-07-23 05:44:20 +02:00
} else {
2018-08-09 20:54:56 +02:00
hover . append ( Text . builder ( " \ n " + subserver . getAddress ( ) . getPort ( ) ) . color ( TextColors . WHITE ) . build ( ) ) ;
2018-07-23 05:44:20 +02:00
}
2018-08-09 20:54:56 +02:00
message . onClick ( TextActions . runCommand ( " /subservers open SubServer/ " + subserver . getName ( ) ) ) ;
2018-07-23 05:44:20 +02:00
message . onHover ( TextActions . showText ( hover . build ( ) ) ) ;
if ( i ! = 0 ) msg . append ( div ) ;
msg . append ( message . build ( ) ) ;
i + + ;
}
2018-08-10 06:50:10 +02:00
if ( i = = 0 ) msg . append ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.List.Empty " ) ) ) ;
2018-07-23 05:44:20 +02:00
sender . sendMessage ( Text . builder ( " " ) . append ( msg . build ( ) ) . build ( ) ) ;
i = 0 ;
sent = true ;
}
2018-08-10 06:50:10 +02:00
if ( ! sent ) sender . sendMessage ( ChatColor . convertColor ( " " + plugin . api . getLang ( " SubServers " , " Command.List.Empty " ) ) ) ;
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.List.Server-Header " ) ) ) ;
2018-07-23 05:44:20 +02:00
Text . Builder msg = Text . builder ( ) ;
2018-08-09 20:54:56 +02:00
for ( Server server : servers . values ( ) ) if ( ! ( server instanceof SubServer ) ) {
Text . Builder message = Text . builder ( server . getDisplayName ( ) ) ;
Text . Builder hover = Text . builder ( server . getDisplayName ( ) + '\n' ) ;
2018-07-23 05:44:20 +02:00
message . color ( TextColors . WHITE ) ;
hover . color ( TextColors . WHITE ) ;
2018-08-09 20:54:56 +02:00
if ( ! server . getName ( ) . equals ( server . getDisplayName ( ) ) ) {
hover . append ( Text . builder ( server . getName ( ) + '\n' ) . color ( TextColors . GRAY ) . build ( ) ) ;
2018-08-05 23:41:17 +02:00
}
2018-08-07 04:39:29 +02:00
hover . append (
2018-08-10 06:50:10 +02:00
ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Interface.Server-Menu.Server-External " ) + '\n' ) ,
2020-11-14 19:12:08 +01:00
ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Interface.Server-Menu.Server-Player-Count " ) . replace ( " $int$ " , new DecimalFormat ( " #,### " ) . format ( server . getRemotePlayers ( ) . size ( ) ) ) ) ) ;
2019-05-12 03:22:18 +02:00
if ( plugin . config . get ( ) . getMap ( " Settings " ) . getBoolean ( " Show-Addresses " , false ) ) {
2018-08-09 20:54:56 +02:00
hover . append ( Text . builder ( '\n' + server . getAddress ( ) . getAddress ( ) . getHostAddress ( ) + ':' + server . getAddress ( ) . getPort ( ) ) . color ( TextColors . WHITE ) . build ( ) ) ;
2018-07-23 05:44:20 +02:00
} else {
2018-08-09 20:54:56 +02:00
hover . append ( Text . builder ( " \ n " + server . getAddress ( ) . getPort ( ) ) . color ( TextColors . WHITE ) . build ( ) ) ;
2018-07-23 05:44:20 +02:00
}
message . onHover ( TextActions . showText ( hover . build ( ) ) ) ;
if ( i ! = 0 ) msg . append ( div ) ;
msg . append ( message . build ( ) ) ;
i + + ;
}
2018-08-10 06:50:10 +02:00
if ( i = = 0 ) sender . sendMessage ( ChatColor . convertColor ( " " + plugin . api . getLang ( " SubServers " , " Command.List.Empty " ) ) ) ;
2018-08-05 23:51:18 +02:00
else sender . sendMessage ( Text . builder ( " " ) . append ( msg . build ( ) ) . build ( ) ) ;
2018-08-09 20:54:56 +02:00
if ( proxies . keySet ( ) . size ( ) > 0 ) {
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.List.Proxy-Header " ) ) ) ;
2018-08-05 23:41:17 +02:00
msg = Text . builder ( ) ;
2018-08-06 04:07:18 +02:00
Text . Builder message = Text . builder ( " (master) " ) ;
Text . Builder hover = Text . builder ( " (master) " ) ;
message . color ( TextColors . GRAY ) ;
hover . color ( TextColors . GRAY ) ;
2018-08-09 20:54:56 +02:00
if ( proxymaster ! = null ) {
2020-07-25 07:20:59 +02:00
if ( ! proxymaster . getName ( ) . equals ( proxymaster . getDisplayName ( ) ) ) {
hover . append ( Text . builder ( '\n' + proxymaster . getDisplayName ( ) ) . color ( TextColors . GRAY ) . build ( ) ) ;
}
2018-08-09 20:54:56 +02:00
hover . append (
2018-08-10 06:50:10 +02:00
ChatColor . convertColor ( '\n' + plugin . api . getLang ( " SubServers " , " Interface.Proxy-Menu.Proxy-Master " ) ) ,
ChatColor . convertColor ( '\n' + plugin . api . getLang ( " SubServers " , " Interface.Proxy-Menu.Proxy-Player-Count " ) . replace ( " $int$ " , new DecimalFormat ( " #,### " ) . format ( proxymaster . getPlayers ( ) . size ( ) ) ) )
2018-08-09 20:54:56 +02:00
) ;
2018-08-10 06:50:10 +02:00
} else hover . append ( ChatColor . convertColor ( '\n' + plugin . api . getLang ( " SubServers " , " Interface.Proxy-Menu.Proxy-Master " ) ) ) ;
2018-08-06 04:07:18 +02:00
message . onHover ( TextActions . showText ( hover . build ( ) ) ) ;
msg . append ( message . build ( ) ) ;
2018-08-09 20:54:56 +02:00
for ( Proxy proxy : proxies . values ( ) ) {
message = Text . builder ( proxy . getDisplayName ( ) ) ;
hover = Text . builder ( proxy . getDisplayName ( ) ) ;
2020-07-25 07:20:59 +02:00
if ( proxy . getSubData ( ) [ 0 ] ! = null ) {
2018-08-05 23:41:17 +02:00
message . color ( TextColors . AQUA ) ;
hover . color ( TextColors . AQUA ) ;
2018-08-09 20:54:56 +02:00
if ( ! proxy . getName ( ) . equals ( proxy . getDisplayName ( ) ) ) {
hover . append ( Text . builder ( '\n' + proxy . getName ( ) ) . color ( TextColors . GRAY ) . build ( ) ) ;
2018-08-06 04:07:18 +02:00
}
2020-07-25 07:20:59 +02:00
hover . append ( ChatColor . convertColor ( '\n' + plugin . api . getLang ( " SubServers " , " Interface.Proxy-Menu.Proxy-Player-Count " ) . replace ( " $int$ " , new DecimalFormat ( " #,### " ) . format ( proxy . getPlayers ( ) . size ( ) ) ) ) ) ;
2018-08-06 04:07:18 +02:00
} else {
message . color ( TextColors . RED ) ;
hover . color ( TextColors . RED ) ;
2018-08-09 20:54:56 +02:00
if ( ! proxy . getName ( ) . equals ( proxy . getDisplayName ( ) ) ) {
hover . append ( Text . builder ( '\n' + proxy . getName ( ) ) . color ( TextColors . GRAY ) . build ( ) ) ;
2018-08-06 04:07:18 +02:00
}
2018-08-10 06:50:10 +02:00
hover . append ( ChatColor . convertColor ( '\n' + plugin . api . getLang ( " SubServers " , " Interface.Proxy-Menu.Proxy-Disconnected " ) ) ) ;
2018-08-05 23:41:17 +02:00
}
message . onHover ( TextActions . showText ( hover . build ( ) ) ) ;
msg . append ( div , message . build ( ) ) ;
}
2018-08-06 04:07:18 +02:00
sender . sendMessage ( Text . builder ( " " ) . append ( msg . build ( ) ) . build ( ) ) ;
2018-08-05 23:41:17 +02:00
}
2018-08-09 20:54:56 +02:00
} ) ) ) ) ) ;
2018-07-23 05:44:20 +02:00
return CommandResult . builder ( ) . successCount ( 1 ) . build ( ) ;
} else {
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Invalid-Permission " ) . replace ( " $str$ " , " subservers.command " ) ) ) ;
2018-07-23 05:44:20 +02:00
return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
}
}
}
public final class INFO implements CommandExecutor {
public CommandResult execute ( CommandSource sender , CommandContext args ) throws CommandException {
if ( canRun ( sender ) ) {
2018-08-10 06:50:10 +02:00
Optional < String > t = args . getOne ( Text . of ( " Type " ) ) ;
Optional < String > n = args . getOne ( Text . of ( " Name " ) ) ;
if ( ! n . isPresent ( ) ) {
Optional < String > tmp = n ;
n = t ;
t = tmp ;
}
if ( n . isPresent ( ) ) {
String type = ( t . isPresent ( ) ) ? t . get ( ) : null ;
String name = n . get ( ) ;
2020-06-12 07:45:49 +02:00
2020-11-14 19:12:08 +01:00
Runnable getPlayer = ( ) - > plugin . api . getRemotePlayer ( name , player - > {
2020-06-12 07:45:49 +02:00
if ( player ! = null ) {
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info " ) . replace ( " $str$ " , " player " ) ) . toBuilder ( ) . append ( Text . builder ( player . getName ( ) ) . color ( TextColors . WHITE ) . build ( ) ) . build ( ) ) ;
if ( player . getProxy ( ) ! = null ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Proxy " ) ) . toBuilder ( ) . append ( Text . builder ( player . getProxy ( ) ) . color ( TextColors . WHITE ) . build ( ) ) . build ( ) ) ;
if ( player . getServer ( ) ! = null ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Server " ) ) . toBuilder ( ) . append ( Text . builder ( player . getServer ( ) ) . color ( TextColors . WHITE ) . build ( ) ) . build ( ) ) ;
if ( player . getAddress ( ) ! = null & & plugin . config . get ( ) . getMap ( " Settings " ) . getBoolean ( " Show-Addresses " , false ) )
2020-07-25 07:20:59 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Address " ) ) . toBuilder ( ) . append ( Text . builder ( player . getAddress ( ) . getAddress ( ) . getHostAddress ( ) + ':' + player . getAddress ( ) . getPort ( ) ) . color ( TextColors . WHITE ) . build ( ) ) . build ( ) ) ;
2020-06-12 07:45:49 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " UUID " ) ) . toBuilder ( ) . append ( Text . builder ( player . getUniqueId ( ) . toString ( ) ) . color ( TextColors . AQUA ) . build ( ) ) . build ( ) ) ;
} else {
if ( type = = null ) {
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Unknown " ) ) ) ;
} else {
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Unknown-Player " ) ) ) ;
}
}
} ) ;
2018-08-10 06:50:10 +02:00
Runnable getServer = ( ) - > plugin . api . getServer ( name , server - > {
if ( server ! = null ) {
2020-06-12 07:45:49 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info " ) . replace ( " $str$ " , ( ( server instanceof SubServer ) ? " sub " : " " ) + " server " ) ) . toBuilder ( ) . append ( Text . builder ( server . getDisplayName ( ) ) . color ( TextColors . WHITE ) . build ( ) ) . build ( ) ) ;
2018-08-10 06:50:10 +02:00
if ( ! server . getName ( ) . equals ( server . getDisplayName ( ) ) ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " System Name " ) ) . toBuilder ( ) . append ( Text . builder ( server . getName ( ) ) . color ( TextColors . WHITE ) . build ( ) ) . build ( ) ) ;
if ( server instanceof SubServer ) {
2019-06-17 05:13:48 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Available " ) ) . toBuilder ( ) . append ( Text . builder ( ( ( ( SubServer ) server ) . isAvailable ( ) ) ? " yes " : " no " ) . color ( ( ( ( SubServer ) server ) . isAvailable ( ) ) ? TextColors . GREEN : TextColors . RED ) . build ( ) ) . build ( ) ) ;
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Enabled " ) ) . toBuilder ( ) . append ( Text . builder ( ( ( ( SubServer ) server ) . isEnabled ( ) ) ? " yes " : " no " ) . color ( ( ( ( SubServer ) server ) . isEnabled ( ) ) ? TextColors . GREEN : TextColors . RED ) . build ( ) ) . build ( ) ) ;
if ( ! ( ( SubServer ) server ) . isEditable ( ) ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Editable " ) ) . toBuilder ( ) . append ( Text . builder ( " no " ) . color ( TextColors . RED ) . build ( ) ) . build ( ) ) ;
2020-06-12 07:45:49 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Host " ) ) . toBuilder ( ) . append ( Text . builder ( ( ( SubServer ) server ) . getHost ( ) ) . color ( TextColors . WHITE ) . build ( ) ) . build ( ) ) ;
if ( ( ( SubServer ) server ) . getTemplate ( ) ! = null ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Template " ) ) . toBuilder ( ) . append ( Text . builder ( ( ( SubServer ) server ) . getTemplate ( ) ) . color ( TextColors . WHITE ) . build ( ) ) . build ( ) ) ;
2018-08-10 06:50:10 +02:00
}
if ( server . getGroups ( ) . size ( ) > 0 ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Group " + ( ( server . getGroups ( ) . size ( ) > 1 ) ? " s " : " " ) ) ) . toBuilder ( ) . append ( Text . builder ( ( server . getGroups ( ) . size ( ) > 1 ) ? " " : server . getGroups ( ) . get ( 0 ) ) . color ( TextColors . WHITE ) . build ( ) ) . build ( ) ) ;
if ( server . getGroups ( ) . size ( ) > 1 ) for ( String group : server . getGroups ( ) ) sender . sendMessage ( ChatColor . convertColor ( " " + plugin . api . getLang ( " SubServers " , " Command.Info.List " ) ) . toBuilder ( ) . append ( Text . builder ( group ) . color ( TextColors . WHITE ) . build ( ) ) . build ( ) ) ;
2019-05-12 03:22:18 +02:00
if ( plugin . config . get ( ) . getMap ( " Settings " ) . getBoolean ( " Show-Addresses " , false ) ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Address " ) ) . toBuilder ( ) . append ( Text . builder ( server . getAddress ( ) . getAddress ( ) . getHostAddress ( ) + ':' + server . getAddress ( ) . getPort ( ) ) . color ( TextColors . WHITE ) . build ( ) ) . build ( ) ) ;
2018-08-10 06:50:10 +02:00
else sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Port " ) ) . toBuilder ( ) . append ( Text . builder ( Integer . toString ( server . getAddress ( ) . getPort ( ) ) ) . color ( TextColors . AQUA ) . build ( ) ) . build ( ) ) ;
2020-07-05 04:39:59 +02:00
if ( server instanceof SubServer ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , ( ( ( ( SubServer ) server ) . isOnline ( ) ) ? " Online " : " Running " ) ) ) . toBuilder ( ) . append ( Text . builder ( ( ( ( SubServer ) server ) . isRunning ( ) ) ? " yes " : " no " ) . color ( ( ( ( SubServer ) server ) . isRunning ( ) ) ? TextColors . GREEN : TextColors . RED ) . build ( ) ) . build ( ) ) ;
2018-08-10 06:50:10 +02:00
if ( ! ( server instanceof SubServer ) | | ( ( SubServer ) server ) . isRunning ( ) ) {
2019-05-13 05:28:27 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Connected " ) ) . toBuilder ( ) . append ( Text . builder ( ( server . getSubData ( ) [ 0 ] ! = null ) ? " yes " : " no " ) . color ( ( server . getSubData ( ) [ 0 ] ! = null ) ? TextColors . GREEN : TextColors . RED ) . build ( ) , Text . builder ( ( server . getSubData ( ) . length > 1 ) ? " + " + ( server . getSubData ( ) . length - 1 ) + " subchannel " + ( ( server . getSubData ( ) . length = = 2 ) ? " " : " s " ) : " " ) . color ( TextColors . AQUA ) . build ( ) ) . build ( ) ) ;
2020-11-14 19:12:08 +01:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Players " ) ) . toBuilder ( ) . append ( Text . builder ( server . getRemotePlayers ( ) . size ( ) + " online " ) . color ( TextColors . AQUA ) . build ( ) ) . build ( ) ) ;
2018-08-10 06:50:10 +02:00
}
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " MOTD " ) ) . toBuilder ( ) . append ( Text . builder ( server . getMotd ( ) . replaceAll ( " \\ u00A7[0-9a-fA-Fk-oK-ORr] " , " " ) ) . color ( TextColors . WHITE ) . build ( ) ) . build ( ) ) ;
2018-08-30 03:55:59 +02:00
if ( server instanceof SubServer & & ( ( SubServer ) server ) . getStopAction ( ) ! = SubServer . StopAction . NONE ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Stop Action " ) ) . toBuilder ( ) . append ( Text . builder ( ( ( SubServer ) server ) . getStopAction ( ) . toString ( ) ) . color ( TextColors . WHITE ) . build ( ) ) . build ( ) ) ;
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Signature " ) ) . toBuilder ( ) . append ( Text . builder ( server . getSignature ( ) ) . color ( TextColors . AQUA ) . build ( ) ) . build ( ) ) ;
2018-08-30 03:55:59 +02:00
if ( server instanceof SubServer ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Logging " ) ) . toBuilder ( ) . append ( Text . builder ( ( ( ( SubServer ) server ) . isLogging ( ) ) ? " yes " : " no " ) . color ( ( ( ( SubServer ) server ) . isLogging ( ) ) ? TextColors . GREEN : TextColors . RED ) . build ( ) ) . build ( ) ) ;
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Restricted " ) ) . toBuilder ( ) . append ( Text . builder ( ( server . isRestricted ( ) ) ? " yes " : " no " ) . color ( ( server . isRestricted ( ) ) ? TextColors . GREEN : TextColors . RED ) . build ( ) ) . build ( ) ) ;
if ( server instanceof SubServer & & ( ( SubServer ) server ) . getIncompatibilities ( ) . size ( ) > 0 ) {
List < String > current = new ArrayList < String > ( ) ;
for ( String other : ( ( SubServer ) server ) . getCurrentIncompatibilities ( ) ) current . add ( other . toLowerCase ( ) ) ;
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Incompatibilities " ) ) ) ;
for ( String other : ( ( SubServer ) server ) . getIncompatibilities ( ) ) sender . sendMessage ( ChatColor . convertColor ( " " + plugin . api . getLang ( " SubServers " , " Command.Info.List " ) ) . toBuilder ( ) . append ( Text . builder ( other ) . color ( ( current . contains ( other . toLowerCase ( ) ) ) ? TextColors . WHITE : TextColors . GRAY ) . build ( ) ) . build ( ) ) ;
}
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Hidden " ) ) . toBuilder ( ) . append ( Text . builder ( ( server . isHidden ( ) ) ? " yes " : " no " ) . color ( ( server . isHidden ( ) ) ? TextColors . GREEN : TextColors . RED ) . build ( ) ) . build ( ) ) ;
} else {
if ( type = = null ) {
2020-06-12 07:45:49 +02:00
getPlayer . run ( ) ;
2018-08-09 20:54:56 +02:00
} else {
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Unknown-Server " ) ) ) ;
2018-08-09 20:54:56 +02:00
}
2018-08-10 06:50:10 +02:00
}
2018-08-09 20:54:56 +02:00
} ) ;
2018-08-10 06:50:10 +02:00
Runnable getGroup = ( ) - > plugin . api . getGroup ( name , group - > {
if ( group ! = null ) {
2020-11-14 08:07:25 +01:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info " ) . replace ( " $str$ " , " group " ) ) . toBuilder ( ) . append ( Text . builder ( group . key ( ) ) . color ( TextColors . WHITE ) . build ( ) ) . build ( ) ) ;
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Servers " ) ) . toBuilder ( ) . append ( Text . builder ( ( group . value ( ) . size ( ) < = 0 ) ? " (none) " : Integer . toString ( group . value ( ) . size ( ) ) ) . color ( ( group . value ( ) . size ( ) < = 0 ) ? TextColors . GRAY : TextColors . AQUA ) . build ( ) ) . build ( ) ) ;
for ( Server server : group . value ( ) ) sender . sendMessage ( ChatColor . convertColor ( " " + plugin . api . getLang ( " SubServers " , " Command.Info.List " ) ) . toBuilder ( ) . append ( Text . builder ( server . getDisplayName ( ) + ( ( server . getName ( ) . equals ( server . getDisplayName ( ) ) ) ? " " : " [ " + server . getName ( ) + ']' ) ) . color ( TextColors . WHITE ) . build ( ) ) . build ( ) ) ;
2018-08-10 06:50:10 +02:00
} else {
if ( type = = null ) {
getServer . run ( ) ;
} else {
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Unknown-Group " ) ) ) ;
}
}
} ) ;
Runnable getHost = ( ) - > plugin . api . getHost ( name , host - > {
if ( host ! = null ) {
2020-06-12 07:45:49 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info " ) . replace ( " $str$ " , " host " ) ) . toBuilder ( ) . append ( Text . builder ( host . getDisplayName ( ) ) . color ( TextColors . WHITE ) . build ( ) ) . build ( ) ) ;
2018-08-10 06:50:10 +02:00
if ( ! host . getName ( ) . equals ( host . getDisplayName ( ) ) ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " System Name " ) ) . toBuilder ( ) . append ( Text . builder ( host . getName ( ) ) . color ( TextColors . WHITE ) . build ( ) ) . build ( ) ) ;
2018-08-30 03:55:59 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Available " ) ) . toBuilder ( ) . append ( Text . builder ( ( host . isAvailable ( ) ) ? " yes " : " no " ) . color ( ( host . isAvailable ( ) ) ? TextColors . GREEN : TextColors . RED ) . build ( ) ) . build ( ) ) ;
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Enabled " ) ) . toBuilder ( ) . append ( Text . builder ( ( host . isEnabled ( ) ) ? " yes " : " no " ) . color ( ( host . isEnabled ( ) ) ? TextColors . GREEN : TextColors . RED ) . build ( ) ) . build ( ) ) ;
2019-05-12 03:22:18 +02:00
if ( plugin . config . get ( ) . getMap ( " Settings " ) . getBoolean ( " Show-Addresses " , false ) ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Address " ) ) . toBuilder ( ) . append ( Text . builder ( host . getAddress ( ) . getHostAddress ( ) ) . color ( TextColors . WHITE ) . build ( ) ) . build ( ) ) ;
2019-05-13 05:28:27 +02:00
if ( host . getSubData ( ) . length > 0 ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Connected " ) ) . toBuilder ( ) . append ( Text . builder ( ( host . getSubData ( ) [ 0 ] ! = null ) ? " yes " : " no " ) . color ( ( host . getSubData ( ) [ 0 ] ! = null ) ? TextColors . GREEN : TextColors . RED ) . build ( ) , Text . builder ( ( host . getSubData ( ) . length > 1 ) ? " + " + ( host . getSubData ( ) . length - 1 ) + " subchannel " + ( ( host . getSubData ( ) . length = = 2 ) ? " " : " s " ) : " " ) . color ( TextColors . AQUA ) . build ( ) ) . build ( ) ) ;
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " SubServers " ) ) . toBuilder ( ) . append ( Text . builder ( ( host . getSubServers ( ) . keySet ( ) . size ( ) < = 0 ) ? " (none) " : Integer . toString ( host . getSubServers ( ) . keySet ( ) . size ( ) ) ) . color ( ( host . getSubServers ( ) . keySet ( ) . size ( ) < = 0 ) ? TextColors . GRAY : TextColors . AQUA ) . build ( ) ) . build ( ) ) ;
2020-06-12 07:45:49 +02:00
for ( SubServer subserver : host . getSubServers ( ) . values ( ) ) sender . sendMessage ( ChatColor . convertColor ( " " + plugin . api . getLang ( " SubServers " , " Command.Info.List " ) ) . toBuilder ( ) . append ( Text . builder ( subserver . getDisplayName ( ) + ( ( subserver . getName ( ) . equals ( subserver . getDisplayName ( ) ) ) ? " " : " [ " + subserver . getName ( ) + ']' ) ) . color ( ( subserver . isEnabled ( ) ) ? TextColors . WHITE : TextColors . GRAY ) . build ( ) ) . build ( ) ) ;
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Templates " ) ) . toBuilder ( ) . append ( Text . builder ( ( host . getCreator ( ) . getTemplates ( ) . keySet ( ) . size ( ) < = 0 ) ? " (none) " : Integer . toString ( host . getCreator ( ) . getTemplates ( ) . keySet ( ) . size ( ) ) ) . color ( ( host . getCreator ( ) . getTemplates ( ) . keySet ( ) . size ( ) < = 0 ) ? TextColors . GRAY : TextColors . AQUA ) . build ( ) ) . build ( ) ) ;
2020-06-12 07:45:49 +02:00
for ( SubCreator . ServerTemplate template : host . getCreator ( ) . getTemplates ( ) . values ( ) ) sender . sendMessage ( ChatColor . convertColor ( " " + plugin . api . getLang ( " SubServers " , " Command.Info.List " ) ) . toBuilder ( ) . append ( Text . builder ( template . getDisplayName ( ) + ( ( template . getName ( ) . equals ( template . getDisplayName ( ) ) ) ? " " : " [ " + template . getName ( ) + ']' ) ) . color ( ( template . isEnabled ( ) ) ? TextColors . WHITE : TextColors . GRAY ) . build ( ) ) . build ( ) ) ;
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Signature " ) ) . toBuilder ( ) . append ( Text . builder ( host . getSignature ( ) ) . color ( TextColors . AQUA ) . build ( ) ) . build ( ) ) ;
} else {
if ( type = = null ) {
getGroup . run ( ) ;
} else {
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Unknown-Host " ) ) ) ;
}
}
} ) ;
Runnable getProxy = ( ) - > plugin . api . getProxy ( name , proxy - > {
if ( proxy ! = null ) {
2020-06-12 07:45:49 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info " ) . replace ( " $str$ " , " proxy " ) ) . toBuilder ( ) . append ( Text . builder ( proxy . getDisplayName ( ) ) . color ( TextColors . WHITE ) . build ( ) ) . build ( ) ) ;
if ( ! proxy . getName ( ) . equals ( proxy . getDisplayName ( ) ) ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " System Name " ) ) . toBuilder ( ) . append ( Text . builder ( proxy . getName ( ) ) . color ( TextColors . WHITE ) . build ( ) ) . build ( ) ) ;
if ( ! proxy . isMaster ( ) ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Connected " ) ) . toBuilder ( ) . append ( Text . builder ( ( proxy . getSubData ( ) [ 0 ] ! = null ) ? " yes " : " no " ) . color ( ( proxy . getSubData ( ) [ 0 ] ! = null ) ? TextColors . GREEN : TextColors . RED ) . build ( ) , Text . builder ( ( proxy . getSubData ( ) . length > 1 ) ? " + " + ( proxy . getSubData ( ) . length - 1 ) + " subchannel " + ( ( proxy . getSubData ( ) . length = = 2 ) ? " " : " s " ) : " " ) . color ( TextColors . AQUA ) . build ( ) ) . build ( ) ) ;
else if ( ! proxy . getDisplayName ( ) . toLowerCase ( ) . contains ( " master " ) ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Type " ) ) . toBuilder ( ) . append ( Text . builder ( " Master " ) . color ( TextColors . WHITE ) . build ( ) ) . build ( ) ) ;
2020-07-25 07:20:59 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Players " ) ) . toBuilder ( ) . append ( Text . builder ( proxy . getPlayers ( ) . size ( ) + " online " ) . color ( TextColors . AQUA ) . build ( ) ) . build ( ) ) ;
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Format " ) . replace ( " $str$ " , " Signature " ) ) . toBuilder ( ) . append ( Text . builder ( proxy . getSignature ( ) ) . color ( TextColors . AQUA ) . build ( ) ) . build ( ) ) ;
} else {
if ( type = = null ) {
getHost . run ( ) ;
} else {
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Unknown-Proxy " ) ) ) ;
}
}
} ) ;
if ( type = = null ) {
getProxy . run ( ) ;
} else {
switch ( type . toLowerCase ( ) ) {
case " p " :
case " proxy " :
getProxy . run ( ) ;
break ;
case " h " :
case " host " :
getHost . run ( ) ;
break ;
case " g " :
case " group " :
getGroup . run ( ) ;
break ;
case " s " :
case " server " :
case " subserver " :
getServer . run ( ) ;
break ;
2020-06-12 07:45:49 +02:00
case " player " :
getPlayer . run ( ) ;
break ;
2018-08-10 06:50:10 +02:00
default :
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Info.Unknown-Type " ) ) ) ;
}
}
2018-07-23 05:44:20 +02:00
return CommandResult . builder ( ) . successCount ( 1 ) . build ( ) ;
} else {
2020-06-12 07:45:49 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Usage " ) . replace ( " $str$ " , " /sub info [proxy|host|group|server|player] <Name> " ) ) ) ;
2018-07-23 05:44:20 +02:00
return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
}
} else {
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Invalid-Permission " ) . replace ( " $str$ " , " subservers.command " ) ) ) ;
2018-07-23 05:44:20 +02:00
return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
}
}
}
public final class START implements CommandExecutor {
public CommandResult execute ( CommandSource sender , CommandContext args ) throws CommandException {
if ( canRun ( sender ) ) {
2020-06-12 07:45:49 +02:00
Optional < String [ ] > s = args . getOne ( Text . of ( " Subservers " ) ) ;
if ( s . isPresent ( ) ) {
selectServers ( sender , s . get ( ) , true , Arrays . asList ( " subservers.subserver.%.* " , " subservers.subserver.%.start " ) , select - > {
if ( select . subservers . length > 0 ) {
2020-11-14 08:07:25 +01:00
Container < Integer > success = new Container < Integer > ( 0 ) ;
Container < Integer > running = new Container < Integer > ( 0 ) ;
2020-06-12 07:45:49 +02:00
AsyncConsolidator merge = new AsyncConsolidator ( ( ) - > {
if ( running . value > 0 ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Start.Running " ) . replace ( " $int$ " , running . value . toString ( ) ) ) ) ;
if ( success . value > 0 ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Start " ) . replace ( " $int$ " , success . value . toString ( ) ) ) ) ;
} ) ;
for ( SubServer server : select . subservers ) {
merge . reserve ( ) ;
server . start ( ( sender instanceof Player ) ? ( ( Player ) sender ) . getUniqueId ( ) : null , response - > {
switch ( response ) {
case 3 :
case 4 :
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Start.Disappeared " ) . replace ( " $str$ " , server . getName ( ) ) ) ) ;
break ;
case 5 :
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Start.Host-Unavailable " ) . replace ( " $str$ " , server . getName ( ) ) ) ) ;
break ;
case 6 :
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Start.Host-Disabled " ) . replace ( " $str$ " , server . getName ( ) ) ) ) ;
break ;
case 7 :
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Start.Server-Unavailable " ) . replace ( " $str$ " , server . getName ( ) ) ) ) ;
break ;
case 8 :
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Start.Server-Disabled " ) . replace ( " $str$ " , server . getName ( ) ) ) ) ;
break ;
case 9 :
running . value + + ;
break ;
case 10 :
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Start.Server-Incompatible " ) . replace ( " $str$ " , server . getName ( ) ) ) ) ;
break ;
case 0 :
success . value + + ;
break ;
}
merge . release ( ) ;
} ) ;
2019-01-07 22:09:20 +01:00
}
2020-06-12 07:45:49 +02:00
}
} ) ;
return CommandResult . builder ( ) . successCount ( 1 ) . build ( ) ;
2019-01-07 22:09:20 +01:00
} else {
2020-06-12 07:45:49 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Usage " ) . replace ( " $str$ " , " /sub start <Subservers> " ) ) ) ;
2019-01-07 22:09:20 +01:00
return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
}
} else {
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Invalid-Permission " ) . replace ( " $str$ " , " subservers.command " ) ) ) ;
return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
}
}
}
public final class RESTART implements CommandExecutor {
public CommandResult execute ( CommandSource sender , CommandContext args ) throws CommandException {
if ( canRun ( sender ) ) {
2020-06-12 07:45:49 +02:00
Optional < String [ ] > s = args . getOne ( Text . of ( " Subservers " ) ) ;
if ( s . isPresent ( ) ) {
selectServers ( sender , s . get ( ) , true , Arrays . asList ( Arrays . asList ( " subservers.subserver.%.* " , " subservers.subserver.%.start " ) , Arrays . asList ( " subservers.subserver.%.* " , " subservers.subserver.%.stop " ) ) , select - > {
if ( select . subservers . length > 0 ) {
// Step 5: Start the stopped Servers once more
final UUID player = ( sender instanceof Player ) ? ( ( Player ) sender ) . getUniqueId ( ) : null ;
Callback < SubServer > starter = server - > server . start ( player , response - > {
switch ( response ) {
case 3 :
case 4 :
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Restart.Disappeared " ) . replace ( " $str$ " , server . getName ( ) ) ) ) ;
break ;
case 5 :
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Restart.Host-Unavailable " ) . replace ( " $str$ " , server . getName ( ) ) ) ) ;
break ;
case 6 :
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Restart.Host-Disabled " ) . replace ( " $str$ " , server . getName ( ) ) ) ) ;
break ;
case 7 :
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Restart.Server-Unavailable " ) . replace ( " $str$ " , server . getName ( ) ) ) ) ;
break ;
case 8 :
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Restart.Server-Disabled " ) . replace ( " $str$ " , server . getName ( ) ) ) ) ;
break ;
case 10 :
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Start.Server-Incompatible " ) . replace ( " $str$ " , server . getName ( ) ) ) ) ;
break ;
case 9 :
case 0 :
// success!
break ;
}
} ) ;
2019-01-07 22:09:20 +01:00
2020-06-12 07:45:49 +02:00
// Step 4: Listen for stopped Servers
final HashMap < String , SubServer > listening = new HashMap < String , SubServer > ( ) ;
PacketInExRunEvent . callback ( " SubStoppedEvent " , new Callback < ObjectMap < String > > ( ) {
@Override
public void run ( ObjectMap < String > json ) {
try {
if ( listening . size ( ) > 0 ) {
PacketInExRunEvent . callback ( " SubStoppedEvent " , this ) ;
String name = json . getString ( " server " ) . toLowerCase ( ) ;
if ( listening . keySet ( ) . contains ( name ) ) {
plugin . game . getScheduler ( ) . createTaskBuilder ( ) . execute ( ( ) - > {
starter . run ( listening . get ( name ) ) ;
listening . remove ( name ) ;
} ) . delay ( 100 , TimeUnit . MILLISECONDS ) . submit ( plugin ) ;
}
}
} catch ( Exception e ) { }
}
} ) ;
2019-01-07 22:09:20 +01:00
2020-06-12 07:45:49 +02:00
// Step 3: Receive command Responses
2020-11-14 08:07:25 +01:00
Container < Integer > success = new Container < Integer > ( 0 ) ;
2020-06-12 07:45:49 +02:00
AsyncConsolidator merge = new AsyncConsolidator ( ( ) - > {
if ( success . value > 0 ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Restart " ) . replace ( " $int$ " , success . value . toString ( ) ) ) ) ;
} ) ;
2020-11-14 08:07:25 +01:00
Callback < Pair < Integer , SubServer > > stopper = data - > {
if ( data . key ( ) ! = 0 ) listening . remove ( data . value ( ) . getName ( ) . toLowerCase ( ) ) ;
switch ( data . key ( ) ) {
2020-06-12 07:45:49 +02:00
case 3 :
case 4 :
2020-11-14 08:07:25 +01:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Restart.Disappeared " ) . replace ( " $str$ " , data . value ( ) . getName ( ) ) ) ) ;
2020-06-12 07:45:49 +02:00
break ;
case 5 :
2020-11-14 08:07:25 +01:00
starter . run ( data . value ( ) ) ;
2020-06-12 07:45:49 +02:00
case 0 :
success . value + + ;
break ;
}
merge . release ( ) ;
} ;
// Step 1: Detect Self
SubServer self = null ;
for ( SubServer server : select . subservers ) {
if ( server . getName ( ) . equalsIgnoreCase ( plugin . api . getName ( ) ) ) {
self = server ;
2018-07-23 05:44:20 +02:00
break ;
2020-06-12 07:45:49 +02:00
}
2018-07-23 05:44:20 +02:00
}
2019-01-20 23:49:12 +01:00
2020-06-12 07:45:49 +02:00
// Step 2: Restart Servers
for ( SubServer server : select . subservers ) {
merge . reserve ( ) ;
if ( self = = null ) {
listening . put ( server . getName ( ) . toLowerCase ( ) , server ) ;
2020-11-14 08:07:25 +01:00
server . stop ( player , response - > stopper . run ( new ContainedPair < > ( response , server ) ) ) ;
2020-06-12 07:45:49 +02:00
} else if ( self ! = server ) {
2020-11-14 08:07:25 +01:00
( ( SubDataClient ) plugin . api . getSubDataNetwork ( ) [ 0 ] ) . sendPacket ( new PacketRestartServer ( player , server . getName ( ) , data - > stopper . run ( new ContainedPair < > ( data . getInt ( 0x0001 ) , server ) ) ) ) ;
2020-06-12 07:45:49 +02:00
}
}
if ( self ! = null ) {
final SubServer fself = self ;
2020-11-14 08:07:25 +01:00
( ( SubDataClient ) plugin . api . getSubDataNetwork ( ) [ 0 ] ) . sendPacket ( new PacketRestartServer ( player , self . getName ( ) , data - > stopper . run ( new ContainedPair < > ( data . getInt ( 0x0001 ) , fself ) ) ) ) ;
2020-06-12 07:45:49 +02:00
}
2019-01-20 23:49:12 +01:00
}
2020-06-12 07:45:49 +02:00
} ) ;
return CommandResult . builder ( ) . successCount ( 1 ) . build ( ) ;
2018-07-23 05:44:20 +02:00
} else {
2020-06-12 07:45:49 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Usage " ) . replace ( " $str$ " , " /sub restart <Subservers> " ) ) ) ;
2018-07-23 05:44:20 +02:00
return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
}
} else {
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Invalid-Permission " ) . replace ( " $str$ " , " subservers.command " ) ) ) ;
2018-07-23 05:44:20 +02:00
return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
}
}
}
public final class STOP implements CommandExecutor {
public CommandResult execute ( CommandSource sender , CommandContext args ) throws CommandException {
if ( canRun ( sender ) ) {
2020-06-12 07:45:49 +02:00
Optional < String [ ] > s = args . getOne ( Text . of ( " Subservers " ) ) ; ;
if ( s . isPresent ( ) ) {
selectServers ( sender , s . get ( ) , true , Arrays . asList ( " subservers.subserver.%.* " , " subservers.subserver.%.stop " ) , select - > {
if ( select . subservers . length > 0 ) {
2020-11-14 08:07:25 +01:00
Container < Integer > success = new Container < Integer > ( 0 ) ;
Container < Integer > running = new Container < Integer > ( 0 ) ;
2020-06-12 07:45:49 +02:00
AsyncConsolidator merge = new AsyncConsolidator ( ( ) - > {
if ( running . value > 0 ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Stop.Not-Running " ) . replace ( " $int$ " , running . value . toString ( ) ) ) ) ;
if ( success . value > 0 ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Stop " ) . replace ( " $int$ " , success . value . toString ( ) ) ) ) ;
} ) ;
2020-11-14 08:07:25 +01:00
Callback < Pair < Integer , SubServer > > stopper = data - > {
switch ( data . key ( ) ) {
2020-06-12 07:45:49 +02:00
case 3 :
case 4 :
2020-11-14 08:07:25 +01:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Stop.Disappeared " ) . replace ( " $str$ " , data . value ( ) . getName ( ) ) ) ) ;
2020-06-12 07:45:49 +02:00
break ;
case 5 :
running . value + + ;
break ;
case 0 :
success . value + + ;
break ;
}
merge . release ( ) ;
} ;
SubServer self = null ;
for ( SubServer server : select . subservers ) {
if ( server . getName ( ) . equalsIgnoreCase ( plugin . api . getName ( ) ) ) {
self = server ;
2018-07-23 05:44:20 +02:00
break ;
2020-06-12 07:45:49 +02:00
}
2018-07-23 05:44:20 +02:00
}
2020-06-12 07:45:49 +02:00
for ( SubServer server : select . subservers ) {
merge . reserve ( ) ;
2020-11-14 08:07:25 +01:00
if ( self ! = server ) server . stop ( ( sender instanceof Player ) ? ( ( Player ) sender ) . getUniqueId ( ) : null , response - > stopper . run ( new ContainedPair < > ( response , server ) ) ) ;
2020-06-12 07:45:49 +02:00
}
if ( self ! = null ) {
final SubServer fself = self ;
2020-11-14 08:07:25 +01:00
self . stop ( ( sender instanceof Player ) ? ( ( Player ) sender ) . getUniqueId ( ) : null , response - > stopper . run ( new ContainedPair < > ( response , fself ) ) ) ;
2020-06-12 07:45:49 +02:00
}
}
} ) ;
return CommandResult . builder ( ) . successCount ( 1 ) . build ( ) ;
2018-07-23 05:44:20 +02:00
} else {
2020-06-12 07:45:49 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Usage " ) . replace ( " $str$ " , " /sub stop <Subservers> " ) ) ) ;
2018-07-23 05:44:20 +02:00
return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
}
} else {
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Invalid-Permission " ) . replace ( " $str$ " , " subservers.command " ) ) ) ;
2018-07-23 05:44:20 +02:00
return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
}
}
}
public final class TERMINATE implements CommandExecutor {
public CommandResult execute ( CommandSource sender , CommandContext args ) throws CommandException {
if ( canRun ( sender ) ) {
2020-06-12 07:45:49 +02:00
Optional < String [ ] > s = args . getOne ( Text . of ( " Subservers " ) ) ;
if ( s . isPresent ( ) ) {
selectServers ( sender , s . get ( ) , true , Arrays . asList ( " subservers.subserver.%.* " , " subservers.subserver.%.terminate " ) , select - > {
if ( select . subservers . length > 0 ) {
2020-11-14 08:07:25 +01:00
Container < Integer > success = new Container < Integer > ( 0 ) ;
Container < Integer > running = new Container < Integer > ( 0 ) ;
2020-06-12 07:45:49 +02:00
AsyncConsolidator merge = new AsyncConsolidator ( ( ) - > {
if ( running . value > 0 ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Terminate.Not-Running " ) . replace ( " $int$ " , running . value . toString ( ) ) ) ) ;
if ( success . value > 0 ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Terminate " ) . replace ( " $int$ " , success . value . toString ( ) ) ) ) ;
} ) ;
2020-11-14 08:07:25 +01:00
Callback < Pair < Integer , SubServer > > stopper = data - > {
switch ( data . key ( ) ) {
2020-06-12 07:45:49 +02:00
case 3 :
case 4 :
2020-11-14 08:07:25 +01:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Terminate.Disappeared " ) . replace ( " $str$ " , data . value ( ) . getName ( ) ) ) ) ;
2020-06-12 07:45:49 +02:00
break ;
case 5 :
running . value + + ;
break ;
case 0 :
success . value + + ;
break ;
}
merge . release ( ) ;
} ;
SubServer self = null ;
for ( SubServer server : select . subservers ) {
if ( server . getName ( ) . equalsIgnoreCase ( plugin . api . getName ( ) ) ) {
self = server ;
2018-07-23 05:44:20 +02:00
break ;
2020-06-12 07:45:49 +02:00
}
2018-07-23 05:44:20 +02:00
}
2020-06-12 07:45:49 +02:00
for ( SubServer server : select . subservers ) {
merge . reserve ( ) ;
2020-11-14 08:07:25 +01:00
if ( self ! = server ) server . terminate ( ( sender instanceof Player ) ? ( ( Player ) sender ) . getUniqueId ( ) : null , response - > stopper . run ( new ContainedPair < > ( response , server ) ) ) ;
2020-06-12 07:45:49 +02:00
}
if ( self ! = null ) {
final SubServer fself = self ;
2020-11-14 08:07:25 +01:00
fself . terminate ( ( sender instanceof Player ) ? ( ( Player ) sender ) . getUniqueId ( ) : null , response - > stopper . run ( new ContainedPair < > ( response , fself ) ) ) ;
2020-06-12 07:45:49 +02:00
}
}
} ) ;
return CommandResult . builder ( ) . successCount ( 1 ) . build ( ) ;
2018-07-23 05:44:20 +02:00
} else {
2020-06-12 07:45:49 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Usage " ) . replace ( " $str$ " , " /sub terminate <Subservers> " ) ) ) ;
2018-07-23 05:44:20 +02:00
return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
}
} else {
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Invalid-Permission " ) . replace ( " $str$ " , " subservers.command " ) ) ) ;
2018-07-23 05:44:20 +02:00
return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
}
}
}
public final class COMMAND implements CommandExecutor {
public CommandResult execute ( CommandSource sender , CommandContext args ) throws CommandException {
if ( canRun ( sender ) ) {
2020-06-12 07:45:49 +02:00
Optional < String [ ] > s = args . getOne ( Text . of ( " Subservers " ) ) ;
2018-07-23 05:44:20 +02:00
Optional < String > command = args . getOne ( Text . of ( " Command " ) ) ;
2020-06-12 07:45:49 +02:00
if ( s . isPresent ( ) ) {
selectServers ( sender , s . get ( ) , true , Arrays . asList ( " subservers.subserver.%.* " , " subservers.subserver.%.command " ) , select - > {
if ( select . subservers . length > 0 ) {
if ( command . isPresent ( ) ) {
2020-11-14 08:07:25 +01:00
Container < Integer > success = new Container < Integer > ( 0 ) ;
Container < Integer > running = new Container < Integer > ( 0 ) ;
2020-06-12 07:45:49 +02:00
AsyncConsolidator merge = new AsyncConsolidator ( ( ) - > {
if ( running . value > 0 ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Command.Not-Running " ) . replace ( " $int$ " , running . value . toString ( ) ) ) ) ;
if ( success . value > 0 ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Command " ) . replace ( " $int$ " , success . value . toString ( ) ) ) ) ;
} ) ;
for ( SubServer server : select . subservers ) {
merge . reserve ( ) ;
server . command ( ( sender instanceof Player ) ? ( ( Player ) sender ) . getUniqueId ( ) : null , command . get ( ) , response - > {
switch ( response ) {
case 3 :
case 4 :
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Command.Disappeared " ) . replace ( " $str$ " , server . getName ( ) ) ) ) ;
break ;
case 5 :
running . value + + ;
break ;
case 0 :
success . value + + ;
break ;
}
merge . release ( ) ;
} ) ;
}
} else {
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Command.No-Command " ) ) ) ;
2018-07-23 05:44:20 +02:00
}
2020-06-12 07:45:49 +02:00
}
} ) ;
return CommandResult . builder ( ) . successCount ( 1 ) . build ( ) ;
2018-07-23 05:44:20 +02:00
} else {
2020-06-12 07:45:49 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Usage " ) . replace ( " $str$ " , " /sub command <Subservers> <Command> [Args...] " ) ) ) ;
2018-07-23 05:44:20 +02:00
return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
}
} else {
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Invalid-Permission " ) . replace ( " $str$ " , " subservers.command " ) ) ) ;
2018-07-23 05:44:20 +02:00
return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
}
}
}
public final class CREATE implements CommandExecutor {
public CommandResult execute ( CommandSource sender , CommandContext args ) throws CommandException {
if ( canRun ( sender ) ) {
Optional < String > name = args . getOne ( Text . of ( " Name " ) ) ;
Optional < String > host = args . getOne ( Text . of ( " Host " ) ) ;
Optional < String > template = args . getOne ( Text . of ( " Template " ) ) ;
Optional < String > version = args . getOne ( Text . of ( " Version " ) ) ;
Optional < String > port = args . getOne ( Text . of ( " Port " ) ) ;
2019-05-12 03:22:18 +02:00
if ( name . isPresent ( ) & & host . isPresent ( ) & & template . isPresent ( ) ) {
2020-06-12 07:45:49 +02:00
if ( sender . hasPermission ( " subservers.host.*.* " ) | | sender . hasPermission ( " subservers.host.*.create " ) | | sender . hasPermission ( " subservers.host. " + host . get ( ) . toLowerCase ( ) + " .* " ) | | sender . hasPermission ( " subservers.host. " + host . get ( ) . toLowerCase ( ) + " .create " ) ) {
2018-10-08 23:07:44 +02:00
if ( port . isPresent ( ) & & Util . isException ( ( ) - > Integer . parseInt ( port . get ( ) ) ) ) {
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Creator.Invalid-Port " ) ) ) ;
2018-07-23 05:44:20 +02:00
return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
} else {
2019-05-12 03:22:18 +02:00
( ( SubDataClient ) SubAPI . getInstance ( ) . getSubDataNetwork ( ) [ 0 ] ) . sendPacket ( new PacketCreateServer ( ( sender instanceof Player ) ? ( ( Player ) sender ) . getUniqueId ( ) : null , name . get ( ) , host . get ( ) , template . get ( ) , ( version . isPresent ( ) & & version . get ( ) . length ( ) > 0 ) ? new Version ( version . get ( ) ) : null , ( port . isPresent ( ) ) ? Integer . parseInt ( port . get ( ) ) : null , data - > {
switch ( data . getInt ( 0x0001 ) ) {
2018-07-23 05:44:20 +02:00
case 3 :
2018-08-09 20:54:56 +02:00
case 4 :
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Creator.Exists " ) ) ) ;
2018-07-23 05:44:20 +02:00
break ;
2018-08-09 20:54:56 +02:00
case 5 :
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Creator.Unknown-Host " ) ) ) ;
2018-07-23 05:44:20 +02:00
break ;
case 6 :
2018-08-30 03:55:59 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Start.Host-Unavailable " ) ) ) ;
2018-07-23 05:44:20 +02:00
break ;
case 7 :
2018-08-30 03:55:59 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Start.Host-Disabled " ) ) ) ;
2018-07-23 05:44:20 +02:00
break ;
case 8 :
2018-08-30 03:55:59 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Creator.Unknown-Template " ) ) ) ;
break ;
case 9 :
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Creator.Template-Disabled " ) ) ) ;
break ;
case 10 :
2019-05-12 03:22:18 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Creator.Version-Required " ) ) ) ;
2018-08-30 03:55:59 +02:00
break ;
case 11 :
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Creator.Invalid-Port " ) ) ) ;
2018-07-23 05:44:20 +02:00
break ;
2019-01-07 22:09:20 +01:00
case 0 :
case 1 :
2020-08-20 03:15:55 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Creator " ) . replace ( " $str$ " , name . get ( ) ) ) ) ;
2018-07-23 05:44:20 +02:00
break ;
}
} ) ) ;
return CommandResult . builder ( ) . successCount ( 1 ) . build ( ) ;
}
} else {
2020-06-12 07:45:49 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Invalid-Permission " ) . replace ( " $str$ " , " subservers.host. " + host . get ( ) . toLowerCase ( ) + " .create " ) ) ) ;
2018-07-23 05:44:20 +02:00
return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
}
} else {
2019-05-12 03:22:18 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Usage " ) . replace ( " $str$ " , " /sub create <Name> <Host> <Template> [Version] [Port] " ) ) ) ;
2018-07-23 05:44:20 +02:00
return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
}
} else {
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Invalid-Permission " ) . replace ( " $str$ " , " subservers.command " ) ) ) ;
2018-07-23 05:44:20 +02:00
return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
}
}
}
2019-06-17 05:13:48 +02:00
public final class UPDATE implements CommandExecutor {
public CommandResult execute ( CommandSource sender , CommandContext args ) throws CommandException {
if ( canRun ( sender ) ) {
2020-06-12 07:45:49 +02:00
Optional < String [ ] > s = args . getOne ( Text . of ( " Subservers " ) ) ;
2020-08-20 03:15:55 +02:00
Optional < String > template = args . getOne ( Text . of ( " Template " ) ) ;
2019-06-17 05:13:48 +02:00
Optional < String > version = args . getOne ( Text . of ( " Version " ) ) ;
2020-08-20 03:15:55 +02:00
final String ft ;
final Version fv ;
if ( version . isPresent ( ) ) {
ft = template . get ( ) ;
fv = new Version ( version . get ( ) ) ;
} else if ( template . isPresent ( ) ) {
ft = null ;
fv = new Version ( template . get ( ) ) ;
} else {
ft = null ;
fv = null ;
}
2020-06-12 07:45:49 +02:00
if ( s . isPresent ( ) ) {
selectServers ( sender , s . get ( ) , true , Arrays . asList ( " subservers.subserver.%.* " , " subservers.subserver.%.update " ) , select - > {
if ( select . subservers . length > 0 ) {
2020-08-20 03:15:55 +02:00
boolean ts = ft = = null ;
2020-11-14 08:07:25 +01:00
Container < Integer > success = new Container < Integer > ( 0 ) ;
2020-06-12 07:45:49 +02:00
AsyncConsolidator merge = new AsyncConsolidator ( ( ) - > {
if ( success . value > 0 ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Update " ) . replace ( " $int$ " , success . value . toString ( ) ) ) ) ;
} ) ;
for ( SubServer server : select . subservers ) {
merge . reserve ( ) ;
2020-08-20 03:15:55 +02:00
( ( SubDataClient ) SubAPI . getInstance ( ) . getSubDataNetwork ( ) [ 0 ] ) . sendPacket ( new PacketUpdateServer ( ( sender instanceof Player ) ? ( ( Player ) sender ) . getUniqueId ( ) : null , server . getName ( ) , ft , fv , data - > {
2020-06-12 07:45:49 +02:00
switch ( data . getInt ( 0x0001 ) ) {
case 3 :
case 4 :
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Update.Disappeared " ) . replace ( " $str$ " , server . getName ( ) ) ) ) ;
break ;
case 5 :
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Update.Host-Unavailable " ) . replace ( " $str$ " , server . getName ( ) ) ) ) ;
break ;
case 6 :
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Update.Host-Disabled " ) . replace ( " $str$ " , server . getName ( ) ) ) ) ;
break ;
case 7 :
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Update.Server-Unavailable " ) . replace ( " $str$ " , server . getName ( ) ) ) ) ;
break ;
case 8 :
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Update.Running " ) . replace ( " $str$ " , server . getName ( ) ) ) ) ;
break ;
case 9 :
2020-08-20 03:15:55 +02:00
if ( ts ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Update.Unknown-Template " ) . replace ( " $str$ " , server . getName ( ) ) ) ) ;
else sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Creator.Unknown-Template " ) ) ) ;
2020-06-12 07:45:49 +02:00
break ;
case 10 :
2020-08-20 03:15:55 +02:00
if ( ts ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Update.Template-Disabled " ) . replace ( " $str$ " , server . getName ( ) ) ) ) ;
else sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Creator.Template-Disabled " ) ) ) ;
2020-06-12 07:45:49 +02:00
break ;
case 11 :
2020-08-20 03:15:55 +02:00
if ( ts ) sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Update.Template-Invalid " ) . replace ( " $str$ " , server . getName ( ) ) ) ) ;
else sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Creator.Template-Invalid " ) ) ) ;
2020-06-12 07:45:49 +02:00
break ;
case 12 :
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Update.Version-Required " ) . replace ( " $str$ " , server . getName ( ) ) ) ) ;
break ;
case 0 :
success . value + + ;
break ;
}
merge . release ( ) ;
} ) ) ;
2019-06-17 05:13:48 +02:00
}
2020-06-12 07:45:49 +02:00
}
} ) ;
return CommandResult . builder ( ) . successCount ( 1 ) . build ( ) ;
} else {
2020-08-20 03:15:55 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Usage " ) . replace ( " $str$ " , " /sub update <Subservers> [[Template] <Version>] " ) ) ) ;
2020-06-12 07:45:49 +02:00
return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
}
} else {
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Invalid-Permission " ) . replace ( " $str$ " , " subservers.command " ) ) ) ;
return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
}
}
}
public final class TELEPORT implements CommandExecutor {
public CommandResult execute ( CommandSource sender , CommandContext args ) throws CommandException {
if ( canRun ( sender ) ) {
Optional < String > p = args . getOne ( Text . of ( " Player " ) ) ;
Optional < String > s = args . getOne ( Text . of ( " Server " ) ) ;
if ( ! s . isPresent ( ) ) {
Optional < String > tmp = s ;
s = p ;
p = tmp ;
}
if ( s . isPresent ( ) & & ( p . isPresent ( ) | | sender instanceof Player ) ) {
String name = ( p . isPresent ( ) ) ? p . get ( ) : null ;
String select = s . get ( ) ;
plugin . api . getServer ( select , server - > {
if ( server ! = null ) {
2020-11-14 06:29:29 +01:00
if ( permits ( server , sender , " subservers.server.%.* " , " subservers.server.%.teleport " ) ) {
2020-06-12 07:45:49 +02:00
if ( ! ( server instanceof SubServer ) | | ( ( SubServer ) server ) . isRunning ( ) ) {
2020-11-14 08:07:25 +01:00
Value < Boolean > msg = new Container < > ( false ) ;
2020-06-12 07:45:49 +02:00
Callback < Player > action = target - > {
2020-11-14 06:29:29 +01:00
if ( target = = sender | | permits ( server , sender , " subservers.server.%.* " , " subservers.server.%.teleport-others " ) ) {
2020-06-12 07:45:49 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Teleport " ) . replace ( " $str$ " , target . getName ( ) ) ) ) ;
plugin . pmc ( target , " Connect " , server . getName ( ) ) ;
2020-11-14 08:07:25 +01:00
} else if ( ! msg . value ( ) ) {
msg . value ( true ) ;
2020-06-12 07:45:49 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Invalid-Permission " ) . replace ( " $str$ " , " subservers.server. " + server . getName ( ) + " .teleport-others " ) ) ) ;
}
} ;
Optional < Player > player ;
2020-11-14 08:07:25 +01:00
Container < Set < Entity > > entities = new Container < > ( null ) ;
2020-06-12 07:45:49 +02:00
if ( name = = null ) {
action . run ( ( Player ) sender ) ;
} else if ( ( player = plugin . game . getServer ( ) . getPlayer ( name ) ) . isPresent ( ) ) {
action . run ( player . get ( ) ) ;
} else if ( Util . getDespiteException ( ( ) - > ( entities . value = Selector . parse ( name ) . resolve ( sender ) ) . size ( ) > 0 , false ) ) {
for ( Entity entity : entities . value ) {
if ( entity instanceof Player ) {
action . run ( ( Player ) entity ) ;
} else {
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Unknown-Player " ) . replace ( " $str$ " , entity . getUniqueId ( ) . toString ( ) ) ) ) ;
}
}
} else {
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Unknown-Player " ) . replace ( " $str$ " , name ) ) ) ;
}
} else {
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Teleport.Not-Running " ) . replace ( " $str$ " , server . getName ( ) ) ) ) ;
}
} else {
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Invalid-Select-Permission " ) . replace ( " $str$ " , server . getName ( ) ) ) ) ;
}
} else {
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Unknown-Server " ) . replace ( " $str$ " , select ) ) ) ;
}
} ) ;
return CommandResult . builder ( ) . successCount ( 1 ) . build ( ) ;
2019-06-17 05:13:48 +02:00
} else {
2020-06-12 07:45:49 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Usage " ) . replace ( " $str$ " , " /sub teleport " + ( ( sender instanceof Player ) ? " [Player] " : " <Player> " ) + " <Server> " ) ) ) ;
2019-06-17 05:13:48 +02:00
return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
}
} else {
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Invalid-Permission " ) . replace ( " $str$ " , " subservers.command " ) ) ) ;
return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
}
}
}
2018-07-23 05:44:20 +02:00
public final class OPEN implements CommandExecutor {
public CommandResult execute ( CommandSource sender , CommandContext args ) throws CommandException {
if ( canRun ( sender ) ) {
if ( plugin . gui ! = null ) {
Optional < String > menu = args . getOne ( Text . of ( " MenuID " ) ) ;
String [ ] menuopts = args . < String > getAll ( Text . of ( " Args " ) ) . toArray ( new String [ 0 ] ) ;
if ( sender . hasPermission ( " subservers.interface " ) ) {
try {
plugin . gui . getRenderer ( ( Player ) sender ) . clearHistory ( ) ;
switch ( menu . get ( ) . toLowerCase ( ) ) {
case " host " :
if ( menuopts . length > 0 ) plugin . gui . getRenderer ( ( Player ) sender ) . hostMenu ( Integer . parseInt ( menuopts [ 0 ] ) ) ;
else plugin . gui . getRenderer ( ( Player ) sender ) . hostMenu ( 1 ) ;
break ;
case " host/ " :
plugin . gui . getRenderer ( ( Player ) sender ) . hostAdmin ( menuopts [ 0 ] ) ;
break ;
case " host/creator " :
2020-06-12 07:45:49 +02:00
if ( sender . hasPermission ( " subservers.host.*.* " ) | | sender . hasPermission ( " subservers.host.*.create " ) | | sender . hasPermission ( " subservers.host. " + menuopts [ 0 ] . toLowerCase ( ) + " .* " ) | | sender . hasPermission ( " subservers.host. " + menuopts [ 0 ] . toLowerCase ( ) + " .create " ) )
plugin . gui . getRenderer ( ( Player ) sender ) . hostCreator ( new UIRenderer . CreatorOptions ( menuopts [ 0 ] ) ) ;
2018-07-23 05:44:20 +02:00
else throw new IllegalStateException ( " Player does not meet the requirements to render this page " ) ;
break ;
case " host/plugin " :
if ( menuopts . length > 1 ) plugin . gui . getRenderer ( ( Player ) sender ) . hostPlugin ( Integer . parseInt ( menuopts [ 1 ] ) , menuopts [ 0 ] ) ;
else plugin . gui . getRenderer ( ( Player ) sender ) . hostPlugin ( 1 , menuopts [ 0 ] ) ;
break ;
case " group " :
if ( menuopts . length > 0 ) plugin . gui . getRenderer ( ( Player ) sender ) . groupMenu ( Integer . parseInt ( menuopts [ 0 ] ) ) ;
else plugin . gui . getRenderer ( ( Player ) sender ) . groupMenu ( 1 ) ;
break ;
case " server " :
2019-12-18 21:07:51 +01:00
case " subserver " :
2018-07-23 05:44:20 +02:00
if ( menuopts . length > 2 ) plugin . gui . getRenderer ( ( Player ) sender ) . serverMenu ( Integer . parseInt ( menuopts [ 0 ] ) , menuopts [ 2 ] , null ) ;
else if ( menuopts . length > 1 ) plugin . gui . getRenderer ( ( Player ) sender ) . serverMenu ( Integer . parseInt ( menuopts [ 0 ] ) , null , menuopts [ 1 ] ) ;
else if ( menuopts . length > 0 ) plugin . gui . getRenderer ( ( Player ) sender ) . serverMenu ( Integer . parseInt ( menuopts [ 0 ] ) , null , null ) ;
else plugin . gui . getRenderer ( ( Player ) sender ) . serverMenu ( 1 , null , null ) ;
break ;
case " subserver/ " :
plugin . gui . getRenderer ( ( Player ) sender ) . subserverAdmin ( menuopts [ 0 ] ) ;
break ;
case " subserver/plugin " :
if ( menuopts . length > 1 ) plugin . gui . getRenderer ( ( Player ) sender ) . subserverPlugin ( Integer . parseInt ( menuopts [ 1 ] ) , menuopts [ 0 ] ) ;
else plugin . gui . getRenderer ( ( Player ) sender ) . subserverPlugin ( 1 , menuopts [ 0 ] ) ;
break ;
}
return CommandResult . builder ( ) . successCount ( 1 ) . build ( ) ;
2020-06-12 07:45:49 +02:00
} catch ( Throwable e ) { / *
2018-07-23 05:44:20 +02:00
List < String > list = new LinkedList < String > ( ) ;
list . addAll ( Arrays . asList ( menuopts ) ) ;
list . remove ( 0 ) ;
2020-06-12 07:45:49 +02:00
new InvocationTargetException ( e , " Could not render page with arguments: " + list . toString ( ) ) . printStackTrace ( ) ; * /
2018-07-23 05:44:20 +02:00
return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
}
} else {
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Invalid-Permission " ) . replace ( " $str$ " , " subservers.interface " ) ) ) ;
2018-07-23 05:44:20 +02:00
return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
}
} else return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
} else {
2018-08-10 06:50:10 +02:00
sender . sendMessage ( ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Invalid-Permission " ) . replace ( " $str$ " , " subservers.command " ) ) ) ;
2018-07-23 05:44:20 +02:00
return CommandResult . builder ( ) . successCount ( 0 ) . build ( ) ;
}
}
}
2020-06-12 07:45:49 +02:00
private void selectServers ( CommandSource sender , String [ ] selection , boolean mode , String permissions , Callback < ServerSelection > callback ) {
selectServers ( sender , selection , mode , Arrays . asList ( permissions ) , callback ) ;
}
private void selectServers ( CommandSource sender , String [ ] selection , boolean mode , List < String > permissions , Callback < ServerSelection > callback ) {
selectServers ( sender , selection , mode , Arrays . asList ( permissions ) , callback ) ;
}
@SuppressWarnings ( " unchecked " )
private void selectServers ( CommandSource sender , String [ ] selection , boolean mode , Collection < List < String > > permissions , Callback < ServerSelection > callback ) {
StackTraceElement [ ] origin = new Exception ( ) . getStackTrace ( ) ;
LinkedList < Text > msgs = new LinkedList < Text > ( ) ;
LinkedList < Server > select = new LinkedList < Server > ( ) ;
// Step 3
Runnable finished = ( ) - > {
LinkedList < Server > history = new LinkedList < Server > ( ) ;
LinkedList < Server > servers = new LinkedList < Server > ( ) ;
LinkedList < SubServer > subservers = new LinkedList < SubServer > ( ) ;
for ( Server server : select ) {
if ( ! history . contains ( server ) ) {
history . add ( server ) ;
boolean permitted = sender = = null | | permissions = = null | | permissions . size ( ) < = 0 ;
if ( ! permitted ) {
permitted = true ;
List < String > [ ] checks = permissions . toArray ( new List [ 0 ] ) ;
for ( int p = 0 ; permitted & & p < permissions . size ( ) ; p + + ) {
if ( checks [ p ] = = null | | checks [ p ] . size ( ) < = 0 ) continue ;
2020-11-14 06:29:29 +01:00
else permitted = permits ( server , sender , checks [ p ] . toArray ( new String [ 0 ] ) ) ;
2020-06-12 07:45:49 +02:00
}
}
if ( permitted ) {
servers . add ( server ) ;
if ( server instanceof SubServer )
subservers . add ( ( SubServer ) server ) ;
} else {
Text msg = ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Invalid-Select-Permission " ) . replace ( " $str$ " , server . getName ( ) ) ) ;
sender . sendMessage ( msg ) ;
msgs . add ( msg ) ;
}
}
}
if ( ( ! mode & & servers . size ( ) < = 0 ) | | ( mode & & subservers . size ( ) < = 0 ) ) {
Text msg = ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.No- " + ( ( mode ) ? " Sub " : " " ) + " Servers-Selected " ) ) ;
if ( sender ! = null ) sender . sendMessage ( msg ) ;
msgs . add ( msg ) ;
}
try {
callback . run ( new ServerSelection ( msgs , selection , servers , subservers ) ) ;
} catch ( Throwable e ) {
Throwable ew = new InvocationTargetException ( e ) ;
ew . setStackTrace ( origin ) ;
ew . printStackTrace ( ) ;
}
} ;
// Step 2
AsyncConsolidator merge = new AsyncConsolidator ( finished ) ;
2020-11-14 08:07:25 +01:00
for ( Value < Integer > ic = new Container < Integer > ( 0 ) ; ic . value ( ) < selection . length ; ic . value ( ic . value ( ) + 1 ) ) {
String current = selection [ ic . value ( ) ] ;
2020-06-12 07:45:49 +02:00
if ( current . length ( ) > 0 ) {
merge . reserve ( ) ;
if ( current . startsWith ( " :: " ) & & current . length ( ) > 2 ) {
current = current . substring ( 2 ) ;
if ( current . equals ( " . " ) ) {
plugin . api . getSubServer ( plugin . api . getName ( ) , self - > {
if ( self ! = null ) {
merge . reserve ( ) ;
self . getHost ( host - > {
select . addAll ( host . getSubServers ( ) . values ( ) ) ;
merge . release ( ) ;
} ) ;
} else {
Text msg = ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Unknown-SubServer " ) . replace ( " $str$ " , plugin . api . getName ( ) ) ) ;
if ( sender ! = null ) sender . sendMessage ( msg ) ;
msgs . add ( msg ) ;
}
merge . release ( ) ;
} ) ;
} else if ( current . equals ( " * " ) ) {
plugin . api . getHosts ( hostMap - > {
for ( Host host : hostMap . values ( ) ) {
select . addAll ( host . getSubServers ( ) . values ( ) ) ;
}
merge . release ( ) ;
} ) ;
} else {
final String fcurrent = current ;
plugin . api . getHost ( current , host - > {
if ( host ! = null ) {
if ( ! select . addAll ( host . getSubServers ( ) . values ( ) ) ) {
Text msg = ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.No- " + ( ( mode ) ? " Sub " : " " ) + " Servers-On-Host " ) . replace ( " $str$ " , host . getName ( ) ) ) ;
if ( sender ! = null ) sender . sendMessage ( msg ) ;
msgs . add ( msg ) ;
}
} else {
Text msg = ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Unknown-Host " ) . replace ( " $str$ " , fcurrent ) ) ;
if ( sender ! = null ) sender . sendMessage ( msg ) ;
msgs . add ( msg ) ;
}
merge . release ( ) ;
} ) ;
}
} else if ( current . startsWith ( " : " ) & & current . length ( ) > 1 ) {
current = current . substring ( 1 ) ;
if ( current . equals ( " . " ) ) {
plugin . api . getSubServer ( plugin . api . getName ( ) , self - > {
AsyncConsolidator merge2 = new AsyncConsolidator ( merge : : release ) ;
for ( String name : self . getGroups ( ) ) {
merge2 . reserve ( ) ;
plugin . api . getGroup ( name , group - > {
2020-11-14 08:07:25 +01:00
for ( Server server : group . value ( ) ) {
2020-06-12 07:45:49 +02:00
if ( ! mode | | server instanceof SubServer ) select . add ( server ) ;
}
merge2 . release ( ) ;
} ) ;
}
} ) ;
} else if ( current . equals ( " * " ) ) {
plugin . api . getGroups ( groupMap - > {
for ( List < Server > group : groupMap . values ( ) ) for ( Server server : group ) {
if ( ! mode | | server instanceof SubServer ) select . add ( server ) ;
}
merge . release ( ) ;
} ) ;
} else {
final String fcurrent = current ;
plugin . api . getGroup ( current , group - > {
if ( group ! = null ) {
int i = 0 ;
2020-11-14 08:07:25 +01:00
for ( Server server : group . value ( ) ) {
2020-06-12 07:45:49 +02:00
if ( ! mode | | server instanceof SubServer ) {
select . add ( server ) ;
i + + ;
}
}
if ( i < = 0 ) {
2020-11-14 08:07:25 +01:00
Text msg = ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.No- " + ( ( mode ) ? " Sub " : " " ) + " Servers-In-Group " ) . replace ( " $str$ " , group . key ( ) ) ) ;
2020-06-12 07:45:49 +02:00
if ( sender ! = null ) sender . sendMessage ( msg ) ;
msgs . add ( msg ) ;
}
} else {
Text msg = ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Unknown-Group " ) . replace ( " $str$ " , fcurrent ) ) ;
if ( sender ! = null ) sender . sendMessage ( msg ) ;
msgs . add ( msg ) ;
}
merge . release ( ) ;
} ) ;
}
} else {
if ( current . equals ( " . " ) ) {
plugin . api . getServer ( plugin . api . getName ( ) , self - > {
if ( ! mode | | self instanceof SubServer ) select . add ( self ) ;
merge . release ( ) ;
} ) ;
} else if ( current . equals ( " * " ) ) {
plugin . api . getServers ( serverMap - > {
for ( Server server : serverMap . values ( ) ) {
if ( ! mode | | server instanceof SubServer ) select . add ( server ) ;
}
merge . release ( ) ;
} ) ;
} else {
final String fcurrent = current ;
plugin . api . getServer ( current , server - > {
if ( server ! = null ) {
select . add ( server ) ;
} else {
Text msg = ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Generic.Unknown- " + ( ( mode ) ? " Sub " : " " ) + " Server " ) . replace ( " $str$ " , fcurrent ) ) ;
if ( sender ! = null ) sender . sendMessage ( msg ) ;
msgs . add ( msg ) ;
}
merge . release ( ) ;
} ) ;
}
}
}
}
}
private static final class ServerSelection {
private final Text [ ] msgs ;
private final String [ ] selection ;
private final Server [ ] servers ;
private final SubServer [ ] subservers ;
private ServerSelection ( List < Text > msgs , String [ ] selection , List < Server > servers , List < SubServer > subservers ) {
this . msgs = msgs . toArray ( new Text [ 0 ] ) ;
this . selection = selection ;
this . servers = servers . toArray ( new Server [ 0 ] ) ;
this . subservers = subservers . toArray ( new SubServer [ 0 ] ) ;
Arrays . sort ( this . selection ) ;
}
}
2018-07-23 05:44:20 +02:00
private Text [ ] printHelp ( ) {
return new Text [ ] {
2018-08-10 06:50:10 +02:00
ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Help.Header " ) ) ,
ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Help.Help " ) . replace ( " $str$ " , " /sub help " ) ) ,
ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Help.List " ) . replace ( " $str$ " , " /sub list " ) ) ,
ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Help.Version " ) . replace ( " $str$ " , " /sub version " ) ) ,
2020-06-12 07:45:49 +02:00
ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Help.Info " ) . replace ( " $str$ " , " /sub info [proxy|host|group|server|player] <Name> " ) ) ,
ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Help.SubServer.Start " ) . replace ( " $str$ " , " /sub start <Subservers> " ) ) ,
ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Help.SubServer.Restart " ) . replace ( " $str$ " , " /sub restart <Subservers> " ) ) ,
ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Help.SubServer.Stop " ) . replace ( " $str$ " , " /sub stop <Subservers> " ) ) ,
ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Help.SubServer.Terminate " ) . replace ( " $str$ " , " /sub kill <Subservers> " ) ) ,
ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Help.SubServer.Command " ) . replace ( " $str$ " , " /sub cmd <Subservers> <Command> [Args...] " ) ) ,
2019-05-12 03:22:18 +02:00
ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Help.Host.Create " ) . replace ( " $str$ " , " /sub create <Name> <Host> <Template> [Version] [Port] " ) ) ,
2020-08-20 03:15:55 +02:00
ChatColor . convertColor ( plugin . api . getLang ( " SubServers " , " Command.Help.SubServer.Update " ) . replace ( " $str$ " , " /sub update <Subservers> [[Template] <Version>] " ) ) ,
2018-07-23 05:44:20 +02:00
} ;
}
}