Skip to content

Commit

Permalink
Switch to JSON as config format
Browse files Browse the repository at this point in the history
  • Loading branch information
glowredman committed Feb 8, 2022
1 parent 9ab942c commit a8aa047
Showing 1 changed file with 48 additions and 29 deletions.
77 changes: 48 additions & 29 deletions src/main/java/glowredman/defaultserverlist/Config.java
Original file line number Diff line number Diff line change
@@ -1,53 +1,72 @@
package glowredman.defaultserverlist;

import java.io.File;
import java.io.InputStream;
import java.io.Reader;
import java.lang.reflect.Type;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.commons.io.IOUtils;

import com.google.common.reflect.TypeToken;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import cpw.mods.fml.common.FMLLog;
import net.minecraft.client.multiplayer.ServerData;
import net.minecraftforge.common.config.Configuration;

public class Config {

public static final List<ServerData> SERVERS = new ArrayList<>();

public static void preInit(File configDir) {
Configuration config = new Configuration(new File(configDir, "defaultserverlist.cfg"));
config.load();

boolean useURL = config.get("general", "useURL", false).getBoolean();
String url = config.get("general", "url", "").getString();
String[] servers = config.get("general", "servers", new String[0], "Pattern: NAME;URL").getStringList();

if(config.hasChanged()) {
config.save();
}

if(useURL) {
InputStream inputStream = null;
try {
inputStream = new URL(url).openStream();
servers = IOUtils.toString(inputStream, StandardCharsets.UTF_8).split("\n");
} catch (Exception e) {
FMLLog.severe("Could not parse default server list from URL!");
e.printStackTrace();
} finally {
IOUtils.closeQuietly(inputStream);
Reader fileReader = null;
try {
Gson gson = new GsonBuilder().setPrettyPrinting().create();
Path path = configDir.toPath().resolve("defaultserverlist.json");
ConfigObj config = new ConfigObj();

if(!Files.exists(path)) {
Files.write(path, Arrays.asList(gson.toJson(config)), StandardCharsets.UTF_8);
} else {
fileReader = Files.newBufferedReader(path, StandardCharsets.UTF_8);
config = gson.fromJson(fileReader, ConfigObj.class);
}
}
for(String s : servers) {
String[] info = s.split(";", 2);
if(info.length < 2) {
continue;

Map<String, String> servers;
if(config.useURL) {
Type type = new TypeToken<Map<String, String>>() {}.getType();
servers = gson.fromJson(IOUtils.toString(new URL(config.url), StandardCharsets.UTF_8), type);
} else {
servers = config.servers;
}
SERVERS.add(new ServerData(info[0], info[1]));

for(Entry<String, String> e : servers.entrySet()) {
SERVERS.add(new ServerData(e.getKey(), e.getValue()));
}

} catch (Exception e) {
FMLLog.severe("Could not parse default server list from URL!");
e.printStackTrace();
} finally {
IOUtils.closeQuietly(fileReader);
}
}

private static final class ConfigObj {

public boolean useURL = false;
public String url = "";
public Map<String, String> servers = new HashMap<>();

}

}

0 comments on commit a8aa047

Please sign in to comment.