Added Quests and Real Settings (yay)
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package de.fullrisk.citrusDev.client;
|
||||
|
||||
|
||||
import de.fullrisk.citrusDev.Config;
|
||||
import de.fullrisk.citrusDev.UI.Module_FPS;
|
||||
import de.fullrisk.citrusDev.UI.MyScreen;
|
||||
@@ -36,6 +37,10 @@ public class CitrusDevClient implements ClientModInitializer {
|
||||
));
|
||||
|
||||
ClientTickEvents.END_CLIENT_TICK.register(client -> {
|
||||
if (client.player != null && !client.isPaused()) {
|
||||
PlaytimeTracker.tick();
|
||||
}
|
||||
|
||||
Module_FPS.tick(); // update every tick, unconditionally
|
||||
while (openScreenKey.consumeClick()) {
|
||||
client.setScreen(new MyScreen(null)); // always general tab
|
||||
|
||||
@@ -0,0 +1,160 @@
|
||||
// PLACE THIS FILE AT:
|
||||
// src/client/java/de/fullrisk/citrusDev/client/PlaytimeTracker.java
|
||||
//
|
||||
// NOT under src/main/java — MinecraftClient and client.player only exist
|
||||
// on the client source set. That is the actual cause of the
|
||||
// "Cannot resolve symbol" errors, not a mistake in this code.
|
||||
|
||||
package de.fullrisk.citrusDev.client;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import java.net.URI;
|
||||
import java.net.http.HttpClient;
|
||||
import java.net.http.HttpRequest;
|
||||
import java.net.http.HttpResponse;
|
||||
import java.time.Duration;
|
||||
import java.util.UUID;
|
||||
import com.google.gson.JsonObject;
|
||||
import com.google.gson.JsonParser;
|
||||
|
||||
public class PlaytimeTracker {
|
||||
|
||||
//ticks zu backend schicken
|
||||
|
||||
private static final String BACKEND_URL =
|
||||
"http://127.0.0.1:5000/api/heartbeat";
|
||||
|
||||
private static final HttpClient HTTP =
|
||||
HttpClient.newBuilder()
|
||||
.connectTimeout(Duration.ofSeconds(10))
|
||||
.build();
|
||||
|
||||
private static int ticks = 0;
|
||||
private static int currentPlaytimeSeconds = 0;
|
||||
|
||||
public static void tick() {
|
||||
ticks++;
|
||||
|
||||
if (ticks % 100 == 0) {
|
||||
System.out.println("Ticking: " + ticks);
|
||||
}
|
||||
|
||||
if (ticks >= 60) {
|
||||
ticks = 0;
|
||||
sendHeartbeat();
|
||||
getPlaytime(); // <-- add this
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
private static void sendHeartbeat() {
|
||||
Minecraft client =
|
||||
Minecraft.getInstance();
|
||||
|
||||
if (client.player == null) {
|
||||
System.out.println("No player yet");
|
||||
return;
|
||||
}
|
||||
|
||||
UUID uuid = client.player.getUUID();
|
||||
|
||||
String json = """
|
||||
{
|
||||
"uuid": "%s"
|
||||
}
|
||||
""".formatted(uuid);
|
||||
|
||||
HttpRequest request = HttpRequest.newBuilder()
|
||||
.uri(URI.create(BACKEND_URL))
|
||||
.timeout(Duration.ofSeconds(10))
|
||||
.header("Content-Type", "application/json")
|
||||
.POST(HttpRequest.BodyPublishers.ofString(json))
|
||||
.build();
|
||||
|
||||
HTTP.sendAsync(request, HttpResponse.BodyHandlers.ofString())
|
||||
.thenAccept(response -> {
|
||||
if (response.statusCode() != 200) {
|
||||
System.out.println("Heartbeat failed: " + response.statusCode());
|
||||
}
|
||||
})
|
||||
.exceptionally(error -> {
|
||||
error.printStackTrace();
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
//playtime vom server holen
|
||||
|
||||
private static final String PLAYTIME_URL =
|
||||
"http://localhost:5000/api/player/%s/playtime";
|
||||
|
||||
|
||||
public static void getPlaytime() {
|
||||
|
||||
Minecraft client = Minecraft.getInstance();
|
||||
|
||||
if (client.player == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
UUID uuid = client.player.getUUID();
|
||||
|
||||
HttpRequest request = HttpRequest.newBuilder()
|
||||
.uri(URI.create(
|
||||
PLAYTIME_URL.formatted(uuid)
|
||||
))
|
||||
.GET()
|
||||
.build();
|
||||
|
||||
|
||||
HTTP.sendAsync(
|
||||
request,
|
||||
HttpResponse.BodyHandlers.ofString()
|
||||
)
|
||||
.thenAccept(response -> {
|
||||
|
||||
if (response.statusCode() == 200) {
|
||||
|
||||
String json = response.body();
|
||||
|
||||
JsonObject data =
|
||||
JsonParser.parseString(json)
|
||||
.getAsJsonObject();
|
||||
|
||||
|
||||
currentPlaytimeSeconds =
|
||||
data.get("playtime_seconds")
|
||||
.getAsInt();
|
||||
|
||||
|
||||
// Compare playtime here
|
||||
if (currentPlaytimeSeconds >= 3600) {
|
||||
System.out.println(
|
||||
"Player has more than 1 hour!"
|
||||
);
|
||||
}
|
||||
else {
|
||||
System.out.println(
|
||||
"Player needs more time"
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
System.out.println(
|
||||
"Seconds played: " + currentPlaytimeSeconds
|
||||
);
|
||||
|
||||
} else {
|
||||
System.out.println(
|
||||
"Failed: " + response.statusCode()
|
||||
);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
public static int getCurrentPlaytimeSeconds() {
|
||||
return currentPlaytimeSeconds;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user