diff --git a/src/main/java/com/comandante/creeper/command/commands/admin/RestartCommand.java b/src/main/java/com/comandante/creeper/command/commands/admin/RestartCommand.java new file mode 100644 index 0000000000000000000000000000000000000000..3d7bc959c8ff679b0aec27725f5ff7bae1f9db36 --- /dev/null +++ b/src/main/java/com/comandante/creeper/command/commands/admin/RestartCommand.java @@ -0,0 +1,50 @@ +package com.comandante.creeper.command.commands.admin; + +import com.comandante.creeper.Main; +import com.comandante.creeper.command.commands.Command; +import com.comandante.creeper.core_game.GameManager; +import com.comandante.creeper.player.PlayerRole; +import com.google.common.collect.Sets; +import org.jboss.netty.channel.ChannelHandlerContext; +import org.jboss.netty.channel.MessageEvent; + +import java.io.File; +import java.lang.management.ManagementFactory; +import java.util.Arrays; +import java.util.List; +import java.util.Set; + +/** + * Created by chrisk on 5/13/17. + */ +public class RestartCommand extends Command { + + + + final static List<String> validTriggers = Arrays.asList("restart"); + final static String description = "restart server."; + final static String correctUsage = "restart"; + final static Set<PlayerRole> roles = Sets.newHashSet(PlayerRole.GOD); + + public RestartCommand(GameManager gameManager) { + super(gameManager, validTriggers, description, correctUsage, roles); + } + + @Override + public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception { + execCommandThreadSafe(ctx, e, BounceIrcBotCommand.class, () -> { + StringBuilder cmd = new StringBuilder(); + cmd.append(System.getProperty("java.home") + File.separator + "bin" + File.separator + "java "); + for (String jvmArg : ManagementFactory.getRuntimeMXBean().getInputArguments()) { + cmd.append(jvmArg + " "); + } + cmd.append("-cp ").append(ManagementFactory.getRuntimeMXBean().getClassPath()).append(" "); + cmd.append(Main.class.getName()).append(" "); +// for (String arg : args) { +// cmd.append(arg).append(" "); +// } + Runtime.getRuntime().exec(cmd.toString() + " server.config"); + System.exit(0); + }); + } +} \ No newline at end of file diff --git a/src/main/java/com/comandante/creeper/configuration/ConfigureCommands.java b/src/main/java/com/comandante/creeper/configuration/ConfigureCommands.java index 1c4b1e0e156ec9bdca9d9afc0ad753fcbf8cdda7..3c9103a75802cf95768210f0776a4344e8971472 100644 --- a/src/main/java/com/comandante/creeper/configuration/ConfigureCommands.java +++ b/src/main/java/com/comandante/creeper/configuration/ConfigureCommands.java @@ -104,5 +104,6 @@ public class ConfigureCommands { creeperCommandRegistry.addCommand(new LoadNpcCommand(gameManager)); creeperCommandRegistry.addCommand(new LoadItemCommand(gameManager)); creeperCommandRegistry.addCommand(new LoadMerchantCommand(gameManager)); + creeperCommandRegistry.addCommand(new RestartCommand(gameManager)); } }