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

Better Serialization and some more changes #18

Merged
merged 6 commits into from
Nov 8, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 3 additions & 4 deletions src/main/java/de/damcraft/serverseeker/DiscordAuth.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,10 @@
package de.damcraft.serverseeker;

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
import de.damcraft.serverseeker.ssapi_responses.UserInfoResponse;
import de.damcraft.serverseeker.ssapi.responses.UserInfoResponse;
import meteordevelopment.meteorclient.systems.Systems;
import net.minecraft.util.Util;
import org.apache.http.NameValuePair;
Expand All @@ -18,6 +17,8 @@
import java.util.List;
import java.util.function.BiConsumer;

import static de.damcraft.serverseeker.ServerSeeker.gson;

public class DiscordAuth {
private static final int port = 7637;

Expand Down Expand Up @@ -109,8 +110,6 @@ public void handleCode(String code) {

// {"api_key": "..."} or {"error": "..."}

Gson gson = new Gson();

JsonObject obj = gson.fromJson(jsonResp, JsonObject.class);

if (obj.has("error")) {
Expand Down
7 changes: 4 additions & 3 deletions src/main/java/de/damcraft/serverseeker/DiscordAvatar.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
package de.damcraft.serverseeker;

import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.mojang.blaze3d.systems.RenderSystem;
import de.damcraft.serverseeker.ssapi_responses.UserInfoResponse;
import de.damcraft.serverseeker.ssapi.responses.UserInfoResponse;
import meteordevelopment.meteorclient.renderer.Texture;
import meteordevelopment.meteorclient.systems.Systems;
import meteordevelopment.meteorclient.utils.network.Http;
Expand All @@ -15,6 +14,8 @@
import java.io.InputStream;
import java.nio.ByteBuffer;

import static de.damcraft.serverseeker.ServerSeeker.gson;

public class DiscordAvatar extends Texture {
public DiscordAvatar(String url) {
BufferedImage avatar;
Expand All @@ -27,7 +28,7 @@ public DiscordAvatar(String url) {

String jsonResp = SmallHttp.post("https://api.serverseeker.net/user_info", params.toString());

UserInfoResponse userInfo = new Gson().fromJson(jsonResp, UserInfoResponse.class);
UserInfoResponse userInfo = gson.fromJson(jsonResp, UserInfoResponse.class);
if (userInfo.isError()) {
System.out.println("Error: " + userInfo.error);
return;
Expand Down
3 changes: 3 additions & 0 deletions src/main/java/de/damcraft/serverseeker/ServerSeeker.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package de.damcraft.serverseeker;

import com.google.gson.Gson;
import com.mojang.logging.LogUtils;
import de.damcraft.serverseeker.country.Countries;
import de.damcraft.serverseeker.country.Country;
Expand Down Expand Up @@ -30,6 +31,8 @@ public class ServerSeeker extends MeteorAddon {
public static final Logger LOG = LogUtils.getLogger();
public static final Category CATEGORY = new Category("ServerSeeker", Items.SPYGLASS.getDefaultStack());
public static final Map<String, Country> COUNTRY_MAP = new HashMap<>();

public static final Gson gson = new Gson();
@Override
public void onInitialize() {
LOG.info("Loaded the ServerSeeker addon!");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,7 @@ protected Country parseImpl(String str) {

@Override
protected boolean isValueValid(Country value) {
if (value.name == null) return false;
if (value.code == null) return false;
return true;
return value.name == null || value.code == null;
}

@Override
Expand Down
133 changes: 45 additions & 88 deletions src/main/java/de/damcraft/serverseeker/gui/FindNewServersScreen.java
Original file line number Diff line number Diff line change
@@ -1,23 +1,19 @@
package de.damcraft.serverseeker.gui;

import com.google.common.net.HostAndPort;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import de.damcraft.serverseeker.ServerSeeker;
import de.damcraft.serverseeker.ServerSeekerSystem;
import de.damcraft.serverseeker.SmallHttp;
import de.damcraft.serverseeker.country.Country;
import de.damcraft.serverseeker.country.CountrySetting;
import de.damcraft.serverseeker.ssapi_responses.ServersResponse;
import de.damcraft.serverseeker.ssapi.requests.ServersRequest;
import de.damcraft.serverseeker.ssapi.responses.ServersResponse;
import de.damcraft.serverseeker.utils.MultiplayerScreenUtil;
import meteordevelopment.meteorclient.gui.GuiThemes;
import meteordevelopment.meteorclient.gui.WindowScreen;
import meteordevelopment.meteorclient.gui.widgets.containers.WContainer;
import meteordevelopment.meteorclient.gui.widgets.containers.WTable;
import meteordevelopment.meteorclient.gui.widgets.pressable.WButton;
import meteordevelopment.meteorclient.settings.*;
import meteordevelopment.meteorclient.systems.Systems;
import meteordevelopment.meteorclient.utils.network.MeteorExecutor;
import net.minecraft.SharedConstants;
import net.minecraft.client.MinecraftClient;
Expand All @@ -29,6 +25,8 @@

import java.util.List;

import static de.damcraft.serverseeker.ServerSeeker.gson;

public class FindNewServersScreen extends WindowScreen {
private int timer;
public WButton findButton;
Expand All @@ -39,7 +37,15 @@ public class FindNewServersScreen extends WindowScreen {
public enum Cracked {
Any,
Yes,
No
No;

public Boolean toBoolOrNull() {
return switch (this) {
case Any -> null;
case Yes -> true;
case No -> false;
};
}
}

public enum Version {
Expand All @@ -48,14 +54,6 @@ public enum Version {
Custom
}

public enum Software {
Any,
Vanilla,
Paper,
Spigot,
Bukkit
}

public enum NumRangeType {
Any,
Equals,
Expand Down Expand Up @@ -166,10 +164,10 @@ public enum GeoSearchType {
.build()
);

private final Setting<Software> softwareSetting = sg.add(new EnumSetting.Builder<Software>()
private final Setting<ServersRequest.Software> softwareSetting = sg.add(new EnumSetting.Builder<ServersRequest.Software>()
.name("software")
.description("The software the servers should have")
.defaultValue(Software.Any)
.defaultValue(ServersRequest.Software.Any)
.build()
);

Expand Down Expand Up @@ -232,98 +230,59 @@ public FindNewServersScreen(MultiplayerScreen multiplayerScreen) {

@Override
public void initWidgets() {

settingsContainer = add(theme.verticalList()).widget();
settingsContainer.add(theme.settings(settings));
findButton = add(theme.button("Find")).expandX().widget();
findButton.action = () -> {

String apiKey = Systems.get(ServerSeekerSystem.class).apiKey;

// Create a new JSON object
JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("api_key", apiKey);
ServersRequest request = new ServersRequest();

switch (onlinePlayersNumTypeSetting.get()) {

// [n, "inf"]
case At_Least -> {
JsonArray jsonArray = new JsonArray();
jsonArray.add(atLeastOnlinePlayersSetting.get());
jsonArray.add("inf");
jsonObject.add("online_players", jsonArray);
}
case At_Least -> request.setOnlinePlayers(atLeastOnlinePlayersSetting.get(), -1);

// [0, n]
case At_Most -> {
JsonArray jsonArray = new JsonArray();
jsonArray.add(0);
jsonArray.add(atMostOnlinePlayersSetting.get());
jsonObject.add("online_players", jsonArray);
}
case At_Most -> request.setOnlinePlayers(0, atMostOnlinePlayersSetting.get());

// [min, max]
case Between -> {
JsonArray jsonArray = new JsonArray();
jsonArray.add(atLeastOnlinePlayersSetting.get());
jsonArray.add(atMostOnlinePlayersSetting.get());
jsonObject.add("online_players", jsonArray);
}
case Equals -> jsonObject.addProperty("online_players", equalsOnlinePlayersSetting.get());
case Between -> request.setOnlinePlayers(atLeastOnlinePlayersSetting.get(), atMostOnlinePlayersSetting.get());

// [n, n]
case Equals -> request.setOnlinePlayers(equalsOnlinePlayersSetting.get());
}

switch (maxPlayersNumTypeSetting.get()) {
case At_Least -> {
// [n, "inf"]
JsonArray jsonArray = new JsonArray();
jsonArray.add(atLeastMaxPlayersSetting.get());
jsonArray.add("inf");
jsonObject.add("max_players", jsonArray);
}
case At_Most -> {
// [0, n]
JsonArray jsonArray = new JsonArray();
jsonArray.add(0);
jsonArray.add(atMostMaxPlayersSetting.get());
jsonObject.add("max_players", jsonArray);
}
case Between -> {
// [min, max]
JsonArray jsonArray = new JsonArray();
jsonArray.add(atLeastMaxPlayersSetting.get());
jsonArray.add(atMostMaxPlayersSetting.get());
jsonObject.add("max_players", jsonArray);
}
case Equals -> jsonObject.addProperty("max_players", equalsMaxPlayersSetting.get());
// [n, "inf"]
case At_Least -> request.setMaxPlayers(atLeastMaxPlayersSetting.get(), -1);

// [0, n]
case At_Most -> request.setMaxPlayers(0, atMostMaxPlayersSetting.get());

// [min, max]
case Between -> request.setMaxPlayers(atLeastMaxPlayersSetting.get(), atMostMaxPlayersSetting.get());

// [n, n]
case Equals -> request.setMaxPlayers(equalsMaxPlayersSetting.get());
}


switch (geoSearchTypeSetting.get()) {
case None -> {}
case ASN -> jsonObject.addProperty("asn", asnNumberSetting.get());
case ASN -> request.setAsn(asnNumberSetting.get());
case Country -> {
if (!countrySetting.get().name.equalsIgnoreCase("any")) {
jsonObject.addProperty("country_code", countrySetting.get().code);
}
if (countrySetting.get().name.equalsIgnoreCase("any")) break;
request.setCountryCode(countrySetting.get().code);
}
}

if (crackedSetting.get() != Cracked.Any)
jsonObject.addProperty("cracked", crackedSetting.get() == Cracked.Yes);
request.setCracked(crackedSetting.get().toBoolOrNull());
request.setDescription(descriptionSetting.get());
request.setSoftware(softwareSetting.get());

if (!descriptionSetting.get().isEmpty())
jsonObject.addProperty("description", descriptionSetting.get());

if (softwareSetting.get() != Software.Any)
jsonObject.addProperty("software", softwareSetting.get().toString().toLowerCase());

if (versionSetting.get() == Version.Custom)
jsonObject.addProperty("protocol", customProtocolSetting.get());
else if (versionSetting.get() == Version.Current)
jsonObject.addProperty("protocol", SharedConstants.getProtocolVersion());
switch (versionSetting.get()) {
case Custom -> request.setProtocolVersion(customProtocolSetting.get());
case Current -> request.setProtocolVersion(SharedConstants.getProtocolVersion());
}

if (!onlineOnlySetting.get())
jsonObject.addProperty("online_after", 0);
if (!onlineOnlySetting.get()) request.setOnlineAfter(0);


this.locked = true;
Expand All @@ -334,9 +293,7 @@ else if (versionSetting.get() == Version.Current)


MeteorExecutor.execute(() -> {
String json = jsonObject.toString();
String jsonResp = SmallHttp.post("https://api.serverseeker.net/servers", json);
Gson gson = new Gson();
String jsonResp = SmallHttp.post("https://api.serverseeker.net/servers", request.json());

ServersResponse resp = gson.fromJson(jsonResp, ServersResponse.class);

Expand Down
26 changes: 9 additions & 17 deletions src/main/java/de/damcraft/serverseeker/gui/FindPlayerScreen.java
Original file line number Diff line number Diff line change
@@ -1,19 +1,16 @@
package de.damcraft.serverseeker.gui;

import com.google.common.net.HostAndPort;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import de.damcraft.serverseeker.ServerSeekerSystem;
import de.damcraft.serverseeker.SmallHttp;
import de.damcraft.serverseeker.ssapi_responses.WhereisResponse;
import de.damcraft.serverseeker.ssapi.requests.WhereisRequest;
import de.damcraft.serverseeker.ssapi.responses.WhereisResponse;
import de.damcraft.serverseeker.utils.MultiplayerScreenUtil;
import meteordevelopment.meteorclient.gui.GuiThemes;
import meteordevelopment.meteorclient.gui.WindowScreen;
import meteordevelopment.meteorclient.gui.widgets.containers.WContainer;
import meteordevelopment.meteorclient.gui.widgets.containers.WTable;
import meteordevelopment.meteorclient.gui.widgets.pressable.WButton;
import meteordevelopment.meteorclient.settings.*;
import meteordevelopment.meteorclient.systems.Systems;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.ConnectScreen;
import net.minecraft.client.gui.screen.TitleScreen;
Expand All @@ -27,6 +24,7 @@
import java.time.format.FormatStyle;
import java.util.List;

import static de.damcraft.serverseeker.ServerSeeker.gson;
import static meteordevelopment.meteorclient.MeteorClient.mc;

public class FindPlayerScreen extends WindowScreen {
Expand Down Expand Up @@ -78,23 +76,17 @@ public void initWidgets() {
this.settingsContainer = settingsContainer;

add(theme.button("Find Player")).expandX().widget().action = () -> {
String apiKey = Systems.get(ServerSeekerSystem.class).apiKey;

JsonObject jsonObject = new JsonObject();
jsonObject.addProperty("api_key", apiKey);
WhereisRequest request = new WhereisRequest();

if (nameOrUUID.get() == NameOrUUID.Name) {
jsonObject.addProperty("name", name.get());
} else {
jsonObject.addProperty("uuid", uuid.get());
switch (nameOrUUID.get()) {
case Name -> request.setName(name.get());
case UUID -> request.setUuid(uuid.get());
}

String json = jsonObject.toString();
String jsonResponse = SmallHttp.post("https://api.serverseeker.net/whereis", request.json());

String jsonResp = SmallHttp.post("https://api.serverseeker.net/whereis", json);

Gson gson = new Gson();
WhereisResponse resp = gson.fromJson(jsonResp, WhereisResponse.class);
WhereisResponse resp = gson.fromJson(jsonResponse, WhereisResponse.class);

// Set error message if there is one
if (resp.isError()) {
Expand Down
Loading