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)).
-
+
-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() ) ) {