Initial commit (Forge 1291).
This commit is contained in:
109
src/main/java/org/spigotmc/RestartCommand.java
Normal file
109
src/main/java/org/spigotmc/RestartCommand.java
Normal file
@ -0,0 +1,109 @@
|
||||
package org.spigotmc;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.List;
|
||||
import org.bukkit.command.Command;
|
||||
import org.bukkit.command.CommandSender;
|
||||
import org.bukkit.craftbukkit.util.CraftChatMessage;
|
||||
|
||||
public class RestartCommand extends Command
|
||||
{
|
||||
|
||||
public RestartCommand(String name)
|
||||
{
|
||||
super( name );
|
||||
this.description = "Restarts the server";
|
||||
this.usageMessage = "/restart";
|
||||
this.setPermission( "bukkit.command.restart" );
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean execute(CommandSender sender, String currentAlias, String[] args)
|
||||
{
|
||||
if ( testPermission( sender ) )
|
||||
{
|
||||
restart();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void restart()
|
||||
{
|
||||
try
|
||||
{
|
||||
final File file = new File( SpigotConfig.restartScript );
|
||||
if ( file.isFile() )
|
||||
{
|
||||
System.out.println( "Attempting to restart with " + SpigotConfig.restartScript );
|
||||
|
||||
// Kick all players
|
||||
for ( net.minecraft.entity.player.EntityPlayerMP p : (List< net.minecraft.entity.player.EntityPlayerMP>) net.minecraft.server.MinecraftServer.getServer().getConfigurationManager().playerEntityList )
|
||||
{
|
||||
p.playerNetServerHandler.kickPlayerFromServer(SpigotConfig.restartMessage);
|
||||
p.playerNetServerHandler.netManager.isChannelOpen();
|
||||
}
|
||||
// Give the socket a chance to send the packets
|
||||
try
|
||||
{
|
||||
Thread.sleep( 100 );
|
||||
} catch ( InterruptedException ex )
|
||||
{
|
||||
}
|
||||
// Close the socket so we can rebind with the new process
|
||||
net.minecraft.server.MinecraftServer.getServer().func_147137_ag().terminateEndpoints();
|
||||
|
||||
// Give time for it to kick in
|
||||
try
|
||||
{
|
||||
Thread.sleep( 100 );
|
||||
} catch ( InterruptedException ex )
|
||||
{
|
||||
}
|
||||
|
||||
// Actually shutdown
|
||||
try
|
||||
{
|
||||
net.minecraft.server.MinecraftServer.getServer().stopServer();
|
||||
} catch ( Throwable t )
|
||||
{
|
||||
}
|
||||
|
||||
// This will be done AFTER the server has completely halted
|
||||
Thread shutdownHook = new Thread()
|
||||
{
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
try
|
||||
{
|
||||
String os = System.getProperty( "os.name" ).toLowerCase();
|
||||
if ( os.contains( "win" ) )
|
||||
{
|
||||
Runtime.getRuntime().exec( "cmd /c start " + file.getPath() );
|
||||
} else
|
||||
{
|
||||
Runtime.getRuntime().exec( new String[]
|
||||
{
|
||||
"sh", file.getPath()
|
||||
} );
|
||||
}
|
||||
} catch ( Exception e )
|
||||
{
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
shutdownHook.setDaemon( true );
|
||||
Runtime.getRuntime().addShutdownHook( shutdownHook );
|
||||
} else
|
||||
{
|
||||
System.out.println( "Startup script '" + SpigotConfig.restartScript + "' does not exist! Stopping server." );
|
||||
}
|
||||
System.exit( 0 );
|
||||
} catch ( Exception ex )
|
||||
{
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user