Implemented new command execution method

This commit is contained in:
Jonas_Jones 2022-07-25 23:57:42 +02:00
parent 09d4128df5
commit 8efeb1cc5b
11 changed files with 57 additions and 24 deletions

View file

@ -8,9 +8,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ConsoleMC implements ModInitializer {
// This logger is used to write text to the console and the log file.
// It is considered best practice to use your mod id as the logger's name.
// That way, it's clear which mod wrote info, warnings, and errors.
public static final Logger LOGGER = LoggerFactory.getLogger("consolemc");
public static String MOD_ID = "consolemc";
@ -18,9 +15,15 @@ public class ConsoleMC implements ModInitializer {
CommandRegistrationCallback.EVENT.register(RunCommand::register);
}
//find out if operating system is windows
public static boolean ISWINDOWS = System.getProperty("os.name").toLowerCase().startsWith("windows");
public static String OS = System.getProperty("os.name");
@Override
public void onInitialize() {
ModConfigs.registerConfigs();
registerCommands();
LOGGER.info("ConsoleMC initialized!");
LOGGER.info("Server running on " + OS);
}
}

View file

@ -3,6 +3,7 @@ package me.jonasjones.consolemc.command;
import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.context.CommandContext;
import me.jonasjones.consolemc.ConsoleMC;
import me.jonasjones.consolemc.system.ShellCommand;
import net.minecraft.command.CommandRegistryAccess;
import net.minecraft.command.argument.EntityArgumentType;
import net.minecraft.command.argument.MessageArgumentType;
@ -75,27 +76,7 @@ public class RunCommand {
}
}
public static int runCommand(String cmd, CommandContext<ServerCommandSource> context) {
Process process = null;
try {
process = Runtime.getRuntime().exec(cmd);
BufferedReader stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
String s = null;
while ((s = stdInput.readLine()) != null) {
returnCommandOutput(cmd, s, context);
}
BufferedReader stdError = new BufferedReader(new InputStreamReader(process.getErrorStream()));
while ((s = stdError.readLine()) != null) {
returnCommandOutput(cmd, s, context);
}
return 1;
} catch (IOException e) {
//e.printStackTrace();
String errorLog = "Error: \"" + cmd + "\", No such file or directory!";
ConsoleMC.LOGGER.info(errorLog);
broadcastToOP(errorLog, context);
return -1;
}
return ShellCommand.execute(cmd, context);
}
public static void returnCommandOutput(String cmd, String commandFeedback, CommandContext<ServerCommandSource> context) {
String consoleLog = " [" + cmd + "]: " + commandFeedback;

View file

@ -0,0 +1,49 @@
package me.jonasjones.consolemc.system;
import com.mojang.brigadier.context.CommandContext;
import me.jonasjones.consolemc.ConsoleMC;
import me.jonasjones.consolemc.command.RunCommand;
import net.minecraft.server.command.ServerCommandSource;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class ShellCommand {
public static int execute(String command, CommandContext<ServerCommandSource> context) {
new Thread(() -> {
ProcessBuilder processBuilder = new ProcessBuilder();
if (ConsoleMC.ISWINDOWS) {
processBuilder.command("cmd.exe", "/c", command);
} else {
processBuilder.command("bash", "-c", command);
}
try {
Process process = processBuilder.start();
BufferedReader reader =
new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
RunCommand.returnCommandOutput(command, line, context);
}
int exitCode = process.waitFor();
if (exitCode == 0) {
ConsoleMC.LOGGER.info("Exited with error code : " + exitCode);
} else {
ConsoleMC.LOGGER.error("Exited with error code : " + exitCode);
}
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
return 1;
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 605 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 173 B

Before After
Before After

Binary file not shown.

Before

Width:  |  Height:  |  Size: 453 B