diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..8b73b29 --- /dev/null +++ b/.classpath @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000..f542ec4 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,9 @@ +# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.166.1/containers/java/.devcontainer/base.Dockerfile + +# [Choice] Java version: 11, 15 +ARG VARIANT="11" +FROM mcr.microsoft.com/vscode/devcontainers/java:0-${VARIANT} + +# Install Maven +ARG MAVEN_VERSION="" +RUN su vscode -c "umask 0002 && . /usr/local/sdkman/bin/sdkman-init.sh && sdk install maven \"${MAVEN_VERSION}\"" diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..4bde082 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,19 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: +// https://github.com/microsoft/vscode-dev-containers/tree/v0.166.1/containers/java +{ + "name": "Slipstream-Mod-Manager", + "build": { + "dockerfile": "Dockerfile", + }, + "settings": { + "java.home": "/docker-java-home" + }, + "extensions": [ + "vscjava.vscode-java-pack", + "vscjava.vscode-java-dependency", + "redhat.vscode-xml", + "davidanson.vscode-markdownlint", + "redhat.vscode-yaml" + ], + "remoteUser": "vscode" +} \ No newline at end of file diff --git a/.gitignore b/.gitignore index 2b925ad..58804e3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,22 +1,69 @@ -target/ +# File created using '.gitignore Generator' for Visual Studio Code: https://bit.ly/vscode-gig + +# Created by https://www.toptal.com/developers/gitignore/api/visualstudiocode,java,maven +# Edit at https://www.toptal.com/developers/gitignore?templates=visualstudiocode,java,maven +### Java ### +# Compiled class file *.class -*.tmp -*.bak -~$* +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +### Maven ### +target/ +pom.xml.tag +pom.xml.releaseBackup +pom.xml.versionsBackup +pom.xml.next +release.properties +dependency-reduced-pom.xml +buildNumber.properties +.mvn/timing.properties +# https://github.com/takari/maven-wrapper#usage-without-binary-jar +.mvn/wrapper/maven-wrapper.jar -# Windows image file caches -Thumbs.db +### Maven Patch ### +# Eclipse m2e generated files +# Eclipse Core +.project +# JDT-specific (Eclipse Java Development Tools) +.classpath -# Windows folder config file -Desktop.ini +### VisualStudioCode ### +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +*.code-workspace +# Local History for Visual Studio Code +.history/ -# Mac junk -.DS_Store +### VisualStudioCode Patch ### +# Ignore all local history of files +.history +.ionide +# End of https://www.toptal.com/developers/gitignore/api/visualstudiocode,java,maven -# IdeaJ -*.idea -*.iml +# Custom rules (everything added below won't be overriden by 'Generate .gitignore File' if you use 'Update' option) diff --git a/.project b/.project new file mode 100644 index 0000000..c69d29c --- /dev/null +++ b/.project @@ -0,0 +1,34 @@ + + + ftl-mod-manager + + + + + + org.eclipse.jdt.core.javabuilder + + + + + org.eclipse.m2e.core.maven2Builder + + + + + + org.eclipse.jdt.core.javanature + org.eclipse.m2e.core.maven2Nature + + + + 1635330454157 + + 30 + + org.eclipse.core.resources.regexFilterMatcher + node_modules|.git|__CREATED_BY_JAVA_LANGUAGE_SERVER__ + + + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..abdea9a --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding//src/main/resources=UTF-8 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.apt.core.prefs b/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 0000000..d4313d4 --- /dev/null +++ b/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=false diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..3fc7e86 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,9 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 +org.eclipse.jdt.core.compiler.compliance=1.6 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.processAnnotations=disabled +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.6 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/README.md b/README.md index 2100342..118a36a 100644 --- a/README.md +++ b/README.md @@ -1,26 +1,74 @@ -Slipstream Mod Manager -====================== +# Slipstream Mod Manager -Slipstream is a mod manager for the game FasterThanLight ([FTL](https://subsetgames.com/)), making it easy to install multiple mods at the same time and, later, revert to vanilla gameplay. +Slipstream is a mod manager for the game FasterThanLight +([FTL](https://subsetgames.com/ftl.html)), making it easy to install multiple +mods at the same time and, later, revert to vanilla gameplay. -It is the successor to Grognak's Mod Manager ([GMM](https://subsetgames.com/forum/viewtopic.php?p=9994)). +It is the successor to Grognak's Mod Manager +([GMM](https://subsetgames.com/forum/viewtopic.php?p=9994)). - +![Screenshot of the mod manager in use](img/screenshot01.png) -To download compiled binaries, [click here](https://sourceforge.net/projects/slipstreammodmanager/). +## Requirements -Comments can be made in a forum thread [here](https://subsetgames.com/forum/viewtopic.php?f=12&t=17102). +- Java (1.6 or higher). + - +- FTL (1.01-1.6.3, Windows/OSX/Linux, Steam/GOG/Standalone). + - +- WinXP SP1 can't run Java 1.7. + - (1.7 was built with VisualStudio 2010, causing a DecodePointer error.) + - To get 1.6, you may have to google "jdk-6u45-windows-i586.exe". -I can accept PayPal donations [here](https://vhati.github.io/donate.html). -That would be fantastic. +## Directory structure +- `assets/` + - Screenshots. +- `skel_common/` + - Files to include in distribution archives. +- `skel_win/` and `skel_unix/` + - System-specific files to include in distribution archives. +- `skel_exe/` + - Materials to create modman.exe (not part of Maven). + - [Get Launch4j](http://launch4j.sourceforge.net/index.html) + - Drag "launch4j_*.xml" onto "launch4jc.exe". + - "modman.exe" will appear alongside the xml. + - Drag modman.exe into "skel_win/". + - Run "mvn clean package". + - The manifest files will be embedded to + [prevent VirtualStore redirection](http://www.codeproject.com/Articles/17968/Making-Your-Application-UAC-Aware). +- `auto_update.json` + - Info about the latest release, downloaded periodically by clients. -Requirements ------------- -* Java (1.6 or higher). - * http://www.java.com/en/download/ -* FTL (1.01-1.6.3, Windows/OSX/Linux, Steam/GOG/Standalone). - * https://subsetgames.com/ -* WinXP SP1 can't run Java 1.7. - * (1.7 was built with VisualStudio 2010, causing a DecodePointer error.) - * To get 1.6, you may have to google "jdk-6u45-windows-i586.exe". +## Building + +The build process for this project is automated by +[Maven](http://maven.apache.org/) ([guide](http://docs.codehaus.org/display/MAVENUSER/Getting+Started+with+Maven)). + +1. Open the repository in the provided Visual Studio Code devcontainer. +2. Run `mvn package` from the repository root to compile the source and + generate a zip file containing the compiled assets for each platform in the + `target` directory. + +## Dependencies + +This project depends on the following libraries. + +- [Apache HttpComponents](https://hc.apache.org/) (For JavaDocs, click + HttpCore or HttpClient, then again under "Project reports".) +- [Jackson JSON Processor 2.x](http://jackson.codehaus.org/Home) (For + JavaDocs, look right.) +- [PNGJ](https://code.google.com/p/pngj/) (For JavaDocs, scroll down.) +- [JDOM 2.x](http://www.jdom.org/) (For JavaDocs, look left.) +- [SLF4J](https://www.slf4j.org/) (For JavaDocs, look left.) +- [Logback](https://logback.qos.ch/) (For JavaDocs, look left.) +- [picocli 2.x](http://picocli.info/) (For JavaDocs, look left and scroll + down to "API Javadoc".) + +## Downloads, comments and donations + +[Download compiled binaries](https://sourceforge.net/projects/slipstreammodmanager/). + +Comments can be made in [this forum thread](https://subsetgames.com/forum/viewtopic.php?f=12&t=17102). + +I can accept [PayPal donations](https://vhati.github.io/donate.html). That +would be fantastic. diff --git a/pom.xml b/pom.xml index b235564..7801ad0 100644 --- a/pom.xml +++ b/pom.xml @@ -10,7 +10,7 @@ 2.2.1 - 1.6 + 11 1.6 1.6 UTF-8 @@ -76,10 +76,11 @@ org.apache.maven.plugins maven-compiler-plugin - 3.1 + 3.8.0 -Xlint:unchecked -Xlint:deprecation + 6 diff --git a/readme_developers.txt b/readme_developers.txt deleted file mode 100644 index 7a9c7b1..0000000 --- a/readme_developers.txt +++ /dev/null @@ -1,75 +0,0 @@ -The build process for this project is automated by Maven. - http://maven.apache.org/ - http://docs.codehaus.org/display/MAVENUSER/Getting+Started+with+Maven - - -To build, run "mvn clean package" in this folder. - - -"img/" - Screenshots. - -"skel_common/" - Files to include in distribution archives. - -"skel_win/" and "skel_unix/" - System-specific files to include in distribution archives. - -"skel_exe/" - Materials to create modman.exe (not part of Maven). - - Get Launch4j: http://launch4j.sourceforge.net/index.html - - Drag "launch4j_*.xml" onto "launch4jc.exe". - - "modman.exe" will appear alongside the xml. - - Drag modman.exe into "skel_win/". - - Run "mvn clean package". - - - The manifest files will be embedded to prevent VirtualStore redirection. - http://www.codeproject.com/Articles/17968/Making-Your-Application-UAC-Aware - -"auto_update.json" - Info about the latest release, downloaded periodically by clients. - - - -This project depends on the following libraries. -- Apache HttpComponents - https://hc.apache.org/ - (For JavaDocs, click HttpCore or HttpClient, then again under "Project reports".) -- Jackson JSON Processor 2.x - http://jackson.codehaus.org/Home - (For JavaDocs, look right.) -- PNGJ - https://code.google.com/p/pngj/ - (For JavaDocs, scroll down.) -- JDOM 2.x - http://www.jdom.org/ - (For JavaDocs, look left.) -- SLF4J - https://www.slf4j.org/ - (For JavaDocs, look left.) -- Logback - https://logback.qos.ch/ - (For JavaDocs, look left.) -- picocli 2.x - http://picocli.info/ - (For JavaDocs, look left and scroll down to "API Javadoc".) - - - -Here's a batch file that builds when double-clicked (edit the vars). -- - - - -@ECHO OFF -SETLOCAL - -SET JAVA_HOME=D:\Apps\j2sdk1.6.0_45 -SET M2_HOME=D:\Apps\Maven - -SET M2=%M2_HOME%\bin -SET PATH=%M2%;%PATH% - -CD /D "%~dp0" -CALL mvn clean package - -PAUSE -ENDLOCAL & EXIT /B -- - - - diff --git a/src/main/java/net/vhati/modmanager/ui/ModXMLSandbox.java b/src/main/java/net/vhati/modmanager/ui/ModXMLSandbox.java index 8a07df2..a08e06d 100644 --- a/src/main/java/net/vhati/modmanager/ui/ModXMLSandbox.java +++ b/src/main/java/net/vhati/modmanager/ui/ModXMLSandbox.java @@ -535,7 +535,7 @@ private void buildTreeFromString( DefaultTreeModel treeModel, String path ) { chunk += "/"; boolean found = false; - Enumeration enumIt = currentNode.children(); + Enumeration enumIt = (Enumeration)(Object)currentNode.children(); while ( enumIt.hasMoreElements() ) { DefaultMutableTreeNode tmpNode = enumIt.nextElement(); if ( chunk.equals( tmpNode.getUserObject() ) ) {