|
|
|
|
@@ -29,6 +29,8 @@ import java.io.File;
|
|
|
|
|
import java.io.FileWriter;
|
|
|
|
|
import java.io.IOException;
|
|
|
|
|
import java.math.RoundingMode;
|
|
|
|
|
import java.net.URI;
|
|
|
|
|
import java.net.URISyntaxException;
|
|
|
|
|
import java.nio.file.*;
|
|
|
|
|
import java.text.DecimalFormat;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
@@ -72,6 +74,7 @@ public class MissPiggy implements ActionListener {
|
|
|
|
|
//private int selectedItem;
|
|
|
|
|
|
|
|
|
|
public String priorityList;
|
|
|
|
|
public String blackList;
|
|
|
|
|
|
|
|
|
|
public boolean listenersAlreadySet = false; // was written to troubleshoot a bug but this wasn't actually the cause
|
|
|
|
|
|
|
|
|
|
@@ -87,9 +90,10 @@ public class MissPiggy implements ActionListener {
|
|
|
|
|
toolsMenu = new JMenu("Tools");
|
|
|
|
|
helpMenu = new JMenu("Help");
|
|
|
|
|
|
|
|
|
|
fileMenu.add(new JMenuItem("Deploy All Mods"));
|
|
|
|
|
fileMenu.add(new JMenuItem("Import Mod..."));
|
|
|
|
|
fileMenu.add(new JMenuItem("Remove All"));
|
|
|
|
|
fileMenu.add(new JMenuItem("Deploy Mods"));
|
|
|
|
|
fileMenu.add(new JMenuItem("Import Mod from File"));
|
|
|
|
|
//fileMenu.add(new JSeparator());
|
|
|
|
|
fileMenu.add(new JMenuItem("Delete All"));
|
|
|
|
|
fileMenu.add(new JSeparator());
|
|
|
|
|
fileMenu.add(new JMenuItem("Options"));
|
|
|
|
|
fileMenu.add(new JMenuItem("Quit"));
|
|
|
|
|
@@ -99,6 +103,9 @@ public class MissPiggy implements ActionListener {
|
|
|
|
|
toolsMenu.add(new JMenuItem("Create Soundtrack Mod..."));
|
|
|
|
|
//toolsMenu.add(new JMenuItem("Download Mod from URL")); // TODO: implement. move option to File menu. should be ez
|
|
|
|
|
|
|
|
|
|
helpMenu.add(new JMenuItem("Source Code")); //replace with Website 'screwgravity.net' and 'Issue Tracker' gitea later
|
|
|
|
|
helpMenu.add(new JMenuItem("License"));
|
|
|
|
|
helpMenu.add(new JSeparator());
|
|
|
|
|
helpMenu.add(new JMenuItem("About Firestar"));
|
|
|
|
|
|
|
|
|
|
menuBar.add(fileMenu);
|
|
|
|
|
@@ -119,7 +126,10 @@ public class MissPiggy implements ActionListener {
|
|
|
|
|
fileMenu.getItem(5).addActionListener(this);
|
|
|
|
|
toolsMenu.getItem(0).addActionListener(this);
|
|
|
|
|
toolsMenu.getItem(1).addActionListener(this);
|
|
|
|
|
toolsMenu.getItem(2).addActionListener(this);
|
|
|
|
|
helpMenu.getItem(0).addActionListener(this);
|
|
|
|
|
helpMenu.getItem(1).addActionListener(this);
|
|
|
|
|
helpMenu.getItem(3).addActionListener(this);
|
|
|
|
|
|
|
|
|
|
deployButton.addActionListener(this);
|
|
|
|
|
importButton.addActionListener(this);
|
|
|
|
|
@@ -208,6 +218,33 @@ public class MissPiggy implements ActionListener {
|
|
|
|
|
if (!s.isEmpty()) {System.out.println("WARNING: mod entry for " + s + " doesn't actually exist. skipping");}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
blackList = new String(Files.readAllBytes(Paths.get(System.getProperty("user.home") + "/.firestar/mods/blacklist")));
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
File blackListFileHandle = new File(System.getProperty("user.home") + "/.firestar/mods/blacklist");
|
|
|
|
|
new File(System.getProperty("user.home") + "/.firestar/mods/").mkdirs();
|
|
|
|
|
if(!blackListFileHandle.isFile()){
|
|
|
|
|
try {
|
|
|
|
|
blackListFileHandle.createNewFile();
|
|
|
|
|
} catch (IOException ex) {
|
|
|
|
|
throw new RuntimeException(ex);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
blackList = "";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// initialize data structures from each list entry
|
|
|
|
|
String[] bListArray = blackList.split("\n");
|
|
|
|
|
//Arrays.sort(bListArray);
|
|
|
|
|
System.out.println("Initializing blacklist from file with length of " + bListArray.length + " units"); //debug
|
|
|
|
|
for (String s : bListArray) {
|
|
|
|
|
for (Main.Mod m : Main.Mods) {
|
|
|
|
|
if (s.equals(m.path)) {
|
|
|
|
|
m.enabled = false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void InitializeModListInGUI() {
|
|
|
|
|
@@ -224,7 +261,8 @@ public class MissPiggy implements ActionListener {
|
|
|
|
|
/*JLabel[]*/String[] contents = new String[Main.Mods.size()];
|
|
|
|
|
System.out.println("Initializing modList to GUI with length of " + Main.Mods.size() + " units"); //debug
|
|
|
|
|
while (i < Main.Mods.size()) {
|
|
|
|
|
contents[i] = Main.Mods.get(i).friendlyName;
|
|
|
|
|
if (Main.Mods.get(i).enabled) {contents[i] = Main.Mods.get(i).friendlyName;}
|
|
|
|
|
else {contents[i] = Main.Mods.get(i).friendlyName + " (Disabled)";}
|
|
|
|
|
|
|
|
|
|
//debug
|
|
|
|
|
String authorDisplay;
|
|
|
|
|
@@ -255,15 +293,43 @@ public class MissPiggy implements ActionListener {
|
|
|
|
|
if (actionEvent.getSource() == moveUpButton) {moveUp(modList.getSelectedIndex());} else
|
|
|
|
|
if (actionEvent.getSource() == moveDownButton) {moveDown(modList.getSelectedIndex());} else
|
|
|
|
|
|
|
|
|
|
if (actionEvent.getSource() == toggleButton) {throwUnimplemented();} else // todo
|
|
|
|
|
if (actionEvent.getSource() == toggleButton) {toggleSelected(modList.getSelectedIndex());} else
|
|
|
|
|
if (actionEvent.getSource() == deleteButton1) {deleteSelected();} else
|
|
|
|
|
|
|
|
|
|
if (actionEvent.getSource() == helpMenu.getItem(0)) {new Rowlf().displayAboutScreen();}
|
|
|
|
|
if (actionEvent.getSource() == toolsMenu.getItem(0)) {throwUnimplemented();} else
|
|
|
|
|
if (actionEvent.getSource() == toolsMenu.getItem(1)) {throwUnimplemented();} else
|
|
|
|
|
if (actionEvent.getSource() == toolsMenu.getItem(2)) {throwUnimplemented();} else
|
|
|
|
|
|
|
|
|
|
if (actionEvent.getSource() == helpMenu.getItem(0)) {
|
|
|
|
|
try {
|
|
|
|
|
Desktop.getDesktop().browse(new URI("https://git.worlio.com/bonkmaykr/firestar"));
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
System.out.println(e.getMessage());
|
|
|
|
|
JOptionPane.showMessageDialog(frame, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
|
|
|
|
|
}
|
|
|
|
|
} else
|
|
|
|
|
if (actionEvent.getSource() == helpMenu.getItem(1)) {
|
|
|
|
|
try {
|
|
|
|
|
Desktop.getDesktop().browse(new URI("https://www.gnu.org/licenses/gpl-3.0.en.html"));
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
System.out.println(e.getMessage());
|
|
|
|
|
JOptionPane.showMessageDialog(frame, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
|
|
|
|
|
}
|
|
|
|
|
} else
|
|
|
|
|
if (actionEvent.getSource() == helpMenu.getItem(3)) {new Rowlf().displayAboutScreen();}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Will likely split the below functions into separate classes to work with intellij GUI designer.
|
|
|
|
|
|
|
|
|
|
public void deployModGUI() {
|
|
|
|
|
int i = 0;
|
|
|
|
|
for (Main.Mod m : Main.Mods) {
|
|
|
|
|
if (m.enabled) {i++;}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (i > 0) {
|
|
|
|
|
int result = JOptionPane.showConfirmDialog(frame, "A new PSARC will be generated. This can take several minutes.\nDuring this time, your computer may be very busy or slow.\n\nAre you sure you want to continue?", "Deploy Mods", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
|
|
|
|
|
if (result == JOptionPane.YES_OPTION) {
|
|
|
|
|
// prevent interruptions
|
|
|
|
|
frame.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE);
|
|
|
|
|
frame.setEnabled(false);
|
|
|
|
|
@@ -271,6 +337,10 @@ public class MissPiggy implements ActionListener {
|
|
|
|
|
// start
|
|
|
|
|
new Gonzo().DeployMods(this);
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
JOptionPane.showMessageDialog(frame, "Please add at least one mod file to continue.", "Error", JOptionPane.ERROR_MESSAGE);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void wrapUpDeployment() {
|
|
|
|
|
// restore functionality to main window
|
|
|
|
|
@@ -325,13 +395,14 @@ public class MissPiggy implements ActionListener {
|
|
|
|
|
for (Main.Mod entry : Main.Mods) {
|
|
|
|
|
new File(System.getProperty("user.home") + "/.firestar/mods/" + entry.path).delete();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
new File(System.getProperty("user.home") + "/.firestar/mods/index").delete();
|
|
|
|
|
Main.Mods.clear();
|
|
|
|
|
|
|
|
|
|
InitializeModListStructure();
|
|
|
|
|
InitializeModListInGUI();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void optionsGUI() {
|
|
|
|
|
// todo settings page w/ reset switch
|
|
|
|
|
@@ -339,11 +410,15 @@ public class MissPiggy implements ActionListener {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void deleteSelected() {
|
|
|
|
|
if (modList.getSelectedIndex() >= 0) {
|
|
|
|
|
File file = new File(System.getProperty("user.home") + "/.firestar/mods/" + Main.Mods.get(modList.getSelectedIndex()).path);
|
|
|
|
|
file.delete();
|
|
|
|
|
System.out.println("Deleted " + Main.Mods.get(modList.getSelectedIndex()).friendlyName); //debug
|
|
|
|
|
Main.Mods.remove(modList.getSelectedIndex());
|
|
|
|
|
regenerateModIndex(true);
|
|
|
|
|
} else {
|
|
|
|
|
JOptionPane.showMessageDialog(frame, "Please select a mod to delete first.", "Error", JOptionPane.ERROR_MESSAGE);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void generatorGUI() {
|
|
|
|
|
@@ -374,8 +449,17 @@ public class MissPiggy implements ActionListener {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void toggleSelected(int index) {
|
|
|
|
|
if (index >= 0) {
|
|
|
|
|
Main.Mods.get(index).enabled = !Main.Mods.get(index).enabled;
|
|
|
|
|
regenerateModBlacklist(true);
|
|
|
|
|
} else {
|
|
|
|
|
JOptionPane.showMessageDialog(frame, "Please select a mod to toggle first.", "Error", JOptionPane.ERROR_MESSAGE);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void throwUnimplemented() {
|
|
|
|
|
JOptionPane.showMessageDialog(frame, "Unimplemented.\nSee README at https://git.worlio.com/bonkmaykr/firestar", "Unimplemented", JOptionPane.INFORMATION_MESSAGE);
|
|
|
|
|
JOptionPane.showMessageDialog(frame, "This feature is unimplemented and will be coming soon.\nSee README at https://git.worlio.com/bonkmaykr/firestar", "Unimplemented", JOptionPane.INFORMATION_MESSAGE);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void createSelectionEventListener() { // moved incase needs to be removed and re-added
|
|
|
|
|
@@ -439,7 +523,6 @@ public class MissPiggy implements ActionListener {
|
|
|
|
|
File priorityListFileHandle = new File(System.getProperty("user.home") + "/.firestar/mods/index");
|
|
|
|
|
priorityListFileHandle.createNewFile();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BufferedWriter bw = new BufferedWriter(new FileWriter(System.getProperty("user.home") + "/.firestar/mods/index", true));
|
|
|
|
|
int i = 0;
|
|
|
|
|
for (Main.Mod m : Main.Mods) {
|
|
|
|
|
@@ -448,6 +531,7 @@ public class MissPiggy implements ActionListener {
|
|
|
|
|
i++;
|
|
|
|
|
}
|
|
|
|
|
bw.close();
|
|
|
|
|
System.out.println("Mod index file regenerated.");
|
|
|
|
|
|
|
|
|
|
if(reload) {
|
|
|
|
|
Main.Mods.clear(); //cleanup
|
|
|
|
|
@@ -455,7 +539,38 @@ public class MissPiggy implements ActionListener {
|
|
|
|
|
InitializeModListStructure();
|
|
|
|
|
InitializeModListInGUI();
|
|
|
|
|
}
|
|
|
|
|
System.out.println("Mod index file regenerated.");
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
System.out.println(e.getMessage());
|
|
|
|
|
JOptionPane.showMessageDialog(frame, "An error has occured.\n" + e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public void regenerateModBlacklist(boolean reload) {
|
|
|
|
|
try {
|
|
|
|
|
System.out.println("Regenerating blacklist..."); //debug
|
|
|
|
|
|
|
|
|
|
new File(System.getProperty("user.home") + "/.firestar/mods/blacklist").delete();
|
|
|
|
|
File blackListFileHandle = new File(System.getProperty("user.home") + "/.firestar/mods/blacklist");
|
|
|
|
|
blackListFileHandle.createNewFile();
|
|
|
|
|
|
|
|
|
|
BufferedWriter bw2 = new BufferedWriter(new FileWriter(System.getProperty("user.home") + "/.firestar/mods/blacklist", true));
|
|
|
|
|
int i2 = 0;
|
|
|
|
|
for (Main.Mod m : Main.Mods) {
|
|
|
|
|
if (!m.enabled) {
|
|
|
|
|
bw2.write(m.path);
|
|
|
|
|
bw2.newLine();
|
|
|
|
|
i2++;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
bw2.close();
|
|
|
|
|
System.out.println("Mod blacklist file regenerated.");
|
|
|
|
|
|
|
|
|
|
if(reload) {
|
|
|
|
|
Main.Mods.clear(); //cleanup
|
|
|
|
|
blackList = "";
|
|
|
|
|
InitializeModListStructure();
|
|
|
|
|
InitializeModListInGUI();
|
|
|
|
|
}
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
System.out.println(e.getMessage());
|
|
|
|
|
JOptionPane.showMessageDialog(frame, "An error has occured.\n" + e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
|
|
|
|
|
|