Skip to content
This repository has been archived by the owner on Nov 22, 2024. It is now read-only.

Commit

Permalink
Host a HTTP server instead of sending data to third party.
Browse files Browse the repository at this point in the history
  • Loading branch information
Ale32bit committed Aug 2, 2024
1 parent 4f3912a commit 3505a3f
Show file tree
Hide file tree
Showing 7 changed files with 152 additions and 91 deletions.
4 changes: 4 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ repositories {
// Loom adds the essential maven repositories to download Minecraft and libraries from automatically.
// See https://docs.gradle.org/current/userguide/declaring_repositories.html
// for more information about repositories.

maven { url 'https://maven.wispforest.io' }
}

loom {
Expand All @@ -38,6 +40,8 @@ dependencies {

// Fabric API. This is technically optional, but you probably want it anyway.
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"

annotationProcessor modImplementation("io.wispforest:owo-lib:${project.owo_version}")

}

Expand Down
4 changes: 3 additions & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,6 @@ maven_group=ct.server
archives_base_name=ct-server

# Dependencies
fabric_version=0.100.8+1.21
fabric_version=0.100.8+1.21

owo_version=0.12.8-alpha.7+1.21
80 changes: 80 additions & 0 deletions src/main/java/ct/server/CtServer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package ct.server;

import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.entity.event.v1.ServerPlayerEvents;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerEntityEvents;
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;

import net.fabricmc.fabric.api.networking.v1.ServerLoginConnectionEvents;
import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.network.ServerPlayerEntity;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.IOException;
import java.io.OutputStream;
import java.net.*;
import java.nio.charset.StandardCharsets;
import java.time.Instant;
import java.util.concurrent.CompletableFuture;


public class CtServer implements ModInitializer {
public static final String MOD_ID = "ct-server";
public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID);

public static final ct.server.CtServerConfig CONFIG = ct.server.CtServerConfig.createAndLoad();

private static float currentTps = 0;
private static float currentMspt = 0;
private static int currentPlayerCount = 0;

private static CtServer INSTANCE;

public static CtServer getInstance() {
return INSTANCE;
}

@Override
public void onInitialize() {
INSTANCE = this;

LOGGER.info("Starting ct-client");

ServerTickEvents.END_SERVER_TICK.register(server -> {
currentMspt = server.getAverageTickTime();
if (currentMspt != 0) {
currentTps = Math.min(20, 1000 / currentMspt);
}
});

ServerEntityEvents.ENTITY_LOAD.register((entity, world) -> {
if(entity instanceof ServerPlayerEntity) {
currentPlayerCount = world.getServer().getCurrentPlayerCount();
}
});

ServerPlayConnectionEvents.DISCONNECT.register((handler, server) -> {
currentPlayerCount = server.getCurrentPlayerCount() - 1;
});

try {
var httpServer = new ServiceHttpServer();
} catch (IOException e) {
LOGGER.error("Unable to start HTTP server", e);
}
}

public static float getTPS() {
return currentTps;
}

public static float getMSPT() {
return currentMspt;
}

public static int getPlayerCount() {
return currentPlayerCount;
}
}
8 changes: 8 additions & 0 deletions src/main/java/ct/server/CtServerConfigModel.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package ct.server;

import io.wispforest.owo.config.annotation.Config;

@Config(name = "ct-server-config", wrapperName = "CtServerConfig")
public class CtServerConfigModel {
public short httpPort = 25581;
}
89 changes: 0 additions & 89 deletions src/main/java/ct/server/Ctserver.java

This file was deleted.

56 changes: 56 additions & 0 deletions src/main/java/ct/server/ServiceHttpServer.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
package ct.server;

import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;

import java.io.IOException;
import java.net.InetSocketAddress;

public class ServiceHttpServer {
private HttpServer server;

public ServiceHttpServer() throws IOException {
server = HttpServer.create(new InetSocketAddress(CtServer.CONFIG.httpPort()), 0);
server.createContext("/tps", new TPSHandler());
server.createContext("/mspt", new MSPTHandler());
server.createContext("/player", new PlayerCountHandler());
server.setExecutor(null);

var httpThread = new Thread(() -> server.start());
httpThread.start();
}

static class TPSHandler implements HttpHandler {
@Override
public void handle(HttpExchange t) throws IOException {
var tps = String.valueOf(CtServer.getTPS());
t.sendResponseHeaders(200, tps.length());
var body = t.getResponseBody();
body.write(tps.getBytes());
body.close();
}
}

static class MSPTHandler implements HttpHandler {
@Override
public void handle(HttpExchange t) throws IOException {
var tps = String.valueOf(CtServer.getMSPT());
t.sendResponseHeaders(200, tps.length());
var body = t.getResponseBody();
body.write(tps.getBytes());
body.close();
}
}

static class PlayerCountHandler implements HttpHandler {
@Override
public void handle(HttpExchange t) throws IOException {
var tps = String.valueOf(CtServer.getPlayerCount());
t.sendResponseHeaders(200, tps.length());
var body = t.getResponseBody();
body.write(tps.getBytes());
body.close();
}
}
}
2 changes: 1 addition & 1 deletion src/main/resources/fabric.mod.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"environment": "*",
"entrypoints": {
"main": [
"ct.server.Ctserver"
"ct.server.CtServer"
],
"client": [
"ct.server.CtserverClient"
Expand Down

0 comments on commit 3505a3f

Please sign in to comment.