Skip to content

Commit 4820310

Browse files
committed
setup basic web server
1 parent 104ecb8 commit 4820310

3 files changed

Lines changed: 107 additions & 2 deletions

File tree

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
11
package fn10.smm;
22

3+
import com.mojang.logging.LogUtils;
34
import net.fabricmc.api.ModInitializer;
5+
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback;
46
import org.slf4j.Logger;
5-
import org.slf4j.LoggerFactory;
67

78
public class ModManager implements ModInitializer {
89

9-
public static final Logger LOG = LoggerFactory.getLogger("ServerModManager");
10+
public static final Logger LOG = LogUtils.getLogger();
1011

1112
@Override
1213
public void onInitialize() {
1314
LOG.info("ServerModManager initializing...");
1415

16+
CommandRegistrationCallback.EVENT.register(new ModManagerCommands());
1517
}
1618
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package fn10.smm;
2+
3+
import com.mojang.brigadier.Command;
4+
import com.mojang.brigadier.CommandDispatcher;
5+
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback;
6+
import net.minecraft.commands.CommandBuildContext;
7+
import net.minecraft.commands.CommandSourceStack;
8+
import net.minecraft.commands.Commands;
9+
import net.minecraft.network.chat.Component;
10+
import net.minecraft.server.permissions.Permissions;
11+
12+
public class ModManagerCommands implements CommandRegistrationCallback {
13+
14+
private static ModManagerWebServer currentServer;
15+
16+
public static final Command<CommandSourceStack> startCommand = css -> {
17+
final CommandSourceStack src = css.getSource();
18+
Integer port = 8880;
19+
try {
20+
port = css.getArgument("port", Integer.class);
21+
} catch (Exception ignored) {
22+
}
23+
src.sendSystemMessage(Component.literal("Starting web server at port: " + port));
24+
if (ModManagerWebServer.isServerRunning()) {
25+
src.sendFailure(Component.literal("Failed to start web server. See log for details."));
26+
return 1;
27+
} else {
28+
try {
29+
currentServer = new ModManagerWebServer(port);
30+
currentServer.start();
31+
src.sendSystemMessage(Component.literal("Server started at localhost:" + port));
32+
} catch (Exception e) {
33+
src.sendFailure(Component.literal("Failed to start web server. See log for details."));
34+
}
35+
}
36+
return 1;
37+
};
38+
39+
@Override
40+
public void register(CommandDispatcher<CommandSourceStack> dispatcher, CommandBuildContext registryAccess, Commands.CommandSelection environment) {
41+
dispatcher.register(
42+
Commands.literal("servermodman")
43+
.executes(css -> {
44+
css.getSource().sendSystemMessage(Component.literal("-------- Server Mod Manager --------"));
45+
css.getSource().sendSystemMessage(Component.literal("-------- By xFN10x --------"));
46+
return 1;
47+
}).then(
48+
Commands.literal("start")
49+
.requires(src -> src.permissions().hasPermission(Permissions.COMMANDS_ADMIN))
50+
.executes(startCommand)
51+
)
52+
);
53+
}
54+
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
package fn10.smm;
2+
3+
import net.freeutils.httpserver.HTTPServer;
4+
5+
import java.net.http.HttpClient;
6+
import java.nio.charset.StandardCharsets;
7+
8+
import static fn10.smm.ModManager.LOG;
9+
10+
public class ModManagerWebServer {
11+
12+
public final int port;
13+
public final HTTPServer server;
14+
private HttpClient client = null;
15+
private static boolean webServerRunning;
16+
17+
public HttpClient getClient() {
18+
return client;
19+
}
20+
21+
public static boolean isServerRunning() {return webServerRunning;}
22+
23+
public ModManagerWebServer(int port) {
24+
this.port = port;
25+
this.server = new HTTPServer();
26+
server.setPort(this.port);
27+
}
28+
29+
public void start() throws Exception {
30+
try {
31+
LOG.info("Starting web server...");
32+
33+
server.start();
34+
client = HttpClient.newBuilder().version(HttpClient.Version.HTTP_2).build();
35+
36+
final HTTPServer.VirtualHost host = server.getVirtualHost(null);
37+
host.addContext("/", (req, resp) -> {
38+
resp.getBody().write("yo, world".getBytes(StandardCharsets.UTF_8));
39+
resp.send(200, "where is this");
40+
return 0;
41+
});
42+
LOG.info("Started web server at: {}", port);
43+
webServerRunning = true;
44+
} catch (Exception e) {
45+
LOG.error("Failed to start web server", e);
46+
throw e;
47+
}
48+
}
49+
}

0 commit comments

Comments
 (0)