firestar/src/Main.java

156 lines
7.1 KiB
Java
Raw Normal View History

2024-04-09 23:06:05 -04:00
/*
* Firestar Mod Manager
* Copyright (C) 2024 bonkmaykr
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see https://www.gnu.org/licenses/.
*/
import org.json.*;
2024-07-01 15:51:36 -04:00
import java.awt.*;
2024-04-09 23:06:05 -04:00
import java.io.*;
2024-05-07 05:26:40 -04:00
import java.nio.file.*;
2024-04-12 00:26:26 -04:00
import java.util.*;
2024-07-01 15:51:36 -04:00
import java.util.List;
2024-05-08 15:10:00 -04:00
import javax.swing.JOptionPane;
2024-04-09 23:06:05 -04:00
public class Main {
// Build Information
2024-06-30 19:38:05 -04:00
public static final String vstr = "Release 1.0";
public static final String vcode = "Dekka";
public static final int vint = 0;
2024-04-09 23:06:05 -04:00
// User Settings
2024-05-07 13:21:22 -04:00
// TODO: replace with user preference when config i/o is done
// also please double check that outpath is actually valid
public static String outpath = System.getProperty("user.home") + "/.firestar/out/"; //game assets location
2024-04-10 03:15:36 -04:00
public static String inpath = System.getProperty("user.home") + "/.firestar/"; //game assets location
2024-04-09 23:06:05 -04:00
public static boolean repatch; //are we in compat mode?
2024-05-08 08:17:26 -04:00
public static boolean windows; //True = windows
2024-04-09 23:06:05 -04:00
//public static String psarc; //sdk location
public class Mod {
public String path; // file name
public int version = 1;
//public int gameversion; //TODO detect a game version and compatibility? // no
public int priority = 0; //unused
public String friendlyName;
2024-05-07 06:26:54 -04:00
public String description = "";
2024-04-12 00:26:26 -04:00
public String game; //TODO for multi game support
public int loaderversion = 0; //minimum required vint or feature level from Firestar
public String author; // if null, "Author is unknown."
2024-06-29 15:23:21 -04:00
public boolean enabled = true;
}
// Mods
2024-04-12 00:26:26 -04:00
public static List<Mod> Mods = new ArrayList<Mod>();
2024-07-01 15:51:36 -04:00
// UI Global Assets
public static Font fExo2;
2024-04-09 23:06:05 -04:00
public static void main(String[] args) {
// license string
System.out.printf("FIRESTAR MOD MANAGER for WipEout 2048\nversion " + vstr + " (codename " + vcode + ") major " + vint + "\n" +
"JVM host appears to be " + System.getProperty("os.name") +
2024-04-13 11:04:35 -04:00
"\nRunning from " + System.getProperty("user.dir") +
"\nCopyright (C) 2024 bonkmaykr\n\nThis program is free software: you can redistribute it and/or modify\n" +
2024-04-09 23:06:05 -04:00
"it under the terms of the GNU General Public License as published by\n" +
"the Free Software Foundation, either version 3 of the License, or\n" +
"(at your option) any later version.\n" +
"\n" +
"This program is distributed in the hope that it will be useful,\n" +
"but WITHOUT ANY WARRANTY; without even the implied warranty of\n" +
"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" +
"GNU General Public License for more details.\n" +
"\n" +
"You should have received a copy of the GNU General Public License\n" +
"along with this program. If not, see https://www.gnu.org/licenses/.\n\n\n\n");
//begin
2024-07-01 15:51:36 -04:00
// load global assets
try {
fExo2 = Font.createFont(Font.TRUETYPE_FONT, new File(System.getProperty("user.dir") + "/resources/exo2.ttf"));
} catch (Exception e) {
System.out.println("Font \"Exo 2\" is missing!");
fExo2 = new Font("Arial", Font.PLAIN, 12);
}
2024-04-09 23:06:05 -04:00
// check and load configs
File fConf = new File(System.getProperty("user.home") + "/.firestar/firestar.conf");
if (!fConf.isFile()) {
2024-05-07 06:41:53 -04:00
System.out.println("No configuration was found. Starting the initial setup");
2024-04-09 23:06:05 -04:00
new Kermit().setup(fConf); // this is a fresh install, run the OOBE.
2024-04-10 03:35:27 -04:00
} else {
2024-04-12 00:26:26 -04:00
new MissPiggy().Action(); // Quick! Start singing Firework by Katy Perry! (or open the main window i guess...)
2024-04-09 23:06:05 -04:00
}
2024-04-10 03:35:27 -04:00
}
public static void writeConf(){
JSONObject container = new JSONObject();
container.put("version", vint);
container.put("2048path", outpath);
container.put("HDpath", "TODO"); // proposed hd/fury support for ps3, will use very simplified Fast Mode due to less difficulty installing
container.put("safemode", repatch);
2024-05-08 08:17:26 -04:00
container.put("isWin32", windows);
container.put("currentPlaylist", "TODO"); // proposed feature: store separate mod lists in lists/ to load/save later?
2024-04-10 03:35:27 -04:00
try {
Files.write(Paths.get(System.getProperty("user.home") + "/.firestar/firestar.conf"), container.toString().getBytes());
} catch (IOException e) {
throw new RuntimeException(e);
}
2024-04-10 03:35:27 -04:00
}
public static void loadConf(){
2024-05-08 15:10:00 -04:00
try {
JSONObject container = new JSONObject(new String(Files.readAllBytes(Paths.get(System.getProperty("user.home") + "/.firestar/firestar.conf"))));
System.out.println(container.toString()); // debug
int confvint = (int) container.get("version"); // used for converting configs between program versions later down the line
outpath = container.get("2048path").toString();
repatch = (boolean) container.get("safemode");
windows = (boolean) container.get("isWin32");
} catch (IOException e) {
System.out.println("ERROR: Failed to load firestar.conf");
System.out.println(e.getMessage());
}
return;
}
2024-04-09 23:06:05 -04:00
2024-05-08 15:10:00 -04:00
public static void loadConf(MissPiggy w){
try {
JSONObject container = new JSONObject(new String(Files.readAllBytes(Paths.get(System.getProperty("user.home") + "/.firestar/firestar.conf"))));
System.out.println(container.toString()); // debug
int confvint = (int) container.get("version"); // used for converting configs between program versions later down the line
outpath = container.get("2048path").toString();
repatch = (boolean) container.get("safemode");
windows = (boolean) container.get("isWin32");
} catch (Exception e) {
JOptionPane.showMessageDialog(w.frame, "Firestar couldn't load your config file. Tread lightly.\n\n" + e.getMessage(), "Critical Error", JOptionPane.ERROR_MESSAGE);
System.out.println("ERROR: Failed to load firestar.conf");
System.out.println(e.getMessage());
}
2024-04-09 23:06:05 -04:00
}
2024-06-30 08:15:48 -04:00
public static void deleteDir(File file) { // https://stackoverflow.com/a/29175213/9259829
File[] contents = file.listFiles();
if (contents != null) {
for (File f : contents) {
if (! Files.isSymbolicLink(f.toPath())) {
deleteDir(f);
}
}
}
file.delete();
}
2024-04-09 23:06:05 -04:00
}