Each version has its own settings
This commit is contained in:
@@ -43,7 +43,7 @@ public class AssetsMojangLoader extends IAssetsHandler {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public OverridableSwingWorker<String[]> getList(MinecraftVersion mv, IMinecraftAssetService mp) {
|
public OverridableSwingWorker<String[]> getList(final MinecraftVersion mv, final IMinecraftAssetService mp) {
|
||||||
return new OverridableSwingWorker<String[]>() {
|
return new OverridableSwingWorker<String[]>() {
|
||||||
@Override
|
@Override
|
||||||
protected void work() throws Exception {
|
protected void work() throws Exception {
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ public class MinecraftAssetService extends IMinecraftAssetService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Task downloadAssets(String mcVersion) {
|
public Task downloadAssets(final String mcVersion) {
|
||||||
return new Task() {
|
return new Task() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ import org.jackhuang.hellominecraft.utils.system.JdkVersion;
|
|||||||
*/
|
*/
|
||||||
public class LaunchOptions {
|
public class LaunchOptions {
|
||||||
|
|
||||||
private String name, versionName, javaArgs, minecraftArgs, maxMemory, permSize, width, height, userProperties, serverIp;
|
private String name, versionName, javaArgs, minecraftArgs, maxMemory, permSize, width, height, serverIp;
|
||||||
private String proxyHost, proxyPort, proxyUser, proxyPass, javaDir, launchVersion;
|
private String proxyHost, proxyPort, proxyUser, proxyPass, javaDir, launchVersion;
|
||||||
private boolean fullscreen, debug, noJVMArgs, canceledWrapper;
|
private boolean fullscreen, debug, noJVMArgs, canceledWrapper;
|
||||||
private JdkVersion java;
|
private JdkVersion java;
|
||||||
@@ -114,16 +114,6 @@ public class LaunchOptions {
|
|||||||
this.height = height;
|
this.height = height;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUserProperties() {
|
|
||||||
if (userProperties == null)
|
|
||||||
return "";
|
|
||||||
return userProperties;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUserProperties(String userProperties) {
|
|
||||||
this.userProperties = userProperties;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isFullscreen() {
|
public boolean isFullscreen() {
|
||||||
return fullscreen;
|
return fullscreen;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -74,7 +74,8 @@ public class MinecraftModService extends IMinecraftModService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
Collections.sort(mods);
|
Collections.sort(mods);
|
||||||
return modCache.put(id, mods);
|
modCache.put(id, mods);
|
||||||
|
return mods;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -33,12 +33,12 @@ import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftProvider;
|
|||||||
import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftService;
|
import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftService;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.version.MinecraftVersion;
|
import org.jackhuang.hellominecraft.launcher.core.version.MinecraftVersion;
|
||||||
import org.jackhuang.hellominecraft.utils.functions.BiFunction;
|
import org.jackhuang.hellominecraft.utils.functions.BiFunction;
|
||||||
|
import org.jackhuang.hellominecraft.utils.functions.Predicate;
|
||||||
import org.jackhuang.hellominecraft.utils.system.Compressor;
|
import org.jackhuang.hellominecraft.utils.system.Compressor;
|
||||||
import org.jackhuang.hellominecraft.utils.system.FileUtils;
|
import org.jackhuang.hellominecraft.utils.system.FileUtils;
|
||||||
import org.jackhuang.hellominecraft.utils.system.ZipEngine;
|
import org.jackhuang.hellominecraft.utils.system.ZipEngine;
|
||||||
import org.jackhuang.hellominecraft.utils.tasks.Task;
|
import org.jackhuang.hellominecraft.utils.tasks.Task;
|
||||||
import org.jackhuang.hellominecraft.utils.version.MinecraftVersionRequest;
|
import org.jackhuang.hellominecraft.utils.version.MinecraftVersionRequest;
|
||||||
import org.jackhuang.hellominecraft.utils.views.wizard.spi.ResultProgressHandle;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A mod pack(*.zip) includes these things:
|
* A mod pack(*.zip) includes these things:
|
||||||
@@ -60,7 +60,7 @@ import org.jackhuang.hellominecraft.utils.views.wizard.spi.ResultProgressHandle;
|
|||||||
*/
|
*/
|
||||||
public final class ModpackManager {
|
public final class ModpackManager {
|
||||||
|
|
||||||
public static Task install(File input, IMinecraftService service, String id) {
|
public static Task install(final File input, final IMinecraftService service, final String id) {
|
||||||
return new Task() {
|
return new Task() {
|
||||||
Collection<Task> c = new ArrayList<>();
|
Collection<Task> c = new ArrayList<>();
|
||||||
|
|
||||||
@@ -87,12 +87,15 @@ public final class ModpackManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
AtomicInteger b = new AtomicInteger(0);
|
final AtomicInteger b = new AtomicInteger(0);
|
||||||
HMCLog.log("Decompressing modpack");
|
HMCLog.log("Decompressing modpack");
|
||||||
Compressor.unzip(input, versions, t -> {
|
Compressor.unzip(input, versions, new Predicate<String>() {
|
||||||
|
@Override
|
||||||
|
public boolean apply(String t) {
|
||||||
if (t.equals("minecraft/pack.json"))
|
if (t.equals("minecraft/pack.json"))
|
||||||
b.incrementAndGet();
|
b.incrementAndGet();
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
}, true);
|
}, true);
|
||||||
if (b.get() < 1)
|
if (b.get() < 1)
|
||||||
throw new FileNotFoundException(C.i18n("modpack.incorrect_format.no_json"));
|
throw new FileNotFoundException(C.i18n("modpack.incorrect_format.no_json"));
|
||||||
@@ -138,26 +141,31 @@ public final class ModpackManager {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final List<String> MODPACK_BLACK_LIST = Arrays.asList(new String[] { "usernamecache.json", "asm", "logs", "backups", "versions", "assets", "usercache.json", "libraries", "crash-reports", "launcher_profiles.json", "NVIDIA", "TCNodeTracker", "screenshots", "natives", "native" });
|
public static final List<String> MODPACK_BLACK_LIST = Arrays.asList(new String[] { "usernamecache.json", "asm", "logs", "backups", "versions", "assets", "usercache.json", "libraries", "crash-reports", "launcher_profiles.json", "NVIDIA", "TCNodeTracker", "screenshots", "natives", "native", "hmclversion.cfg", "pack.json" });
|
||||||
public static final List<String> MODPACK_SUGGESTED_BLACK_LIST = Arrays.asList(new String[] { "saves", "servers.dat", "options.txt", "optionsshaders.txt", "mods/VoxelMods" });
|
public static final List<String> MODPACK_SUGGESTED_BLACK_LIST = Arrays.asList(new String[] { "saves", "servers.dat", "options.txt", "optionsshaders.txt", "mods/VoxelMods" });
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* < String, Boolean, Boolean >: Folder/File name, Is Directory,
|
* < String, Boolean, Boolean >: Folder/File name, Is Directory,
|
||||||
* Return 0: non blocked, 1: non shown, 2: suggested, checked.
|
* Return 0: non blocked, 1: non shown, 2: suggested, checked.
|
||||||
*/
|
*/
|
||||||
public static final BiFunction<String, Boolean, Integer> MODPACK_PREDICATE = (String x, Boolean y) -> {
|
public static final BiFunction<String, Boolean, Integer> MODPACK_PREDICATE = new BiFunction<String, Boolean, Integer>() {
|
||||||
|
@Override
|
||||||
|
public Integer apply(String x, Boolean y) {
|
||||||
if (ModpackManager.MODPACK_BLACK_LIST_PREDICATE.apply(x, y))
|
if (ModpackManager.MODPACK_BLACK_LIST_PREDICATE.apply(x, y))
|
||||||
return 1;
|
return 1;
|
||||||
if (ModpackManager.MODPACK_SUGGESTED_BLACK_LIST_PREDICATE.apply(x, y))
|
if (ModpackManager.MODPACK_SUGGESTED_BLACK_LIST_PREDICATE.apply(x, y))
|
||||||
return 2;
|
return 2;
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
public static final BiFunction<String, Boolean, Boolean> MODPACK_BLACK_LIST_PREDICATE = modpackPredicateMaker(MODPACK_BLACK_LIST);
|
public static final BiFunction<String, Boolean, Boolean> MODPACK_BLACK_LIST_PREDICATE = modpackPredicateMaker(MODPACK_BLACK_LIST);
|
||||||
public static final BiFunction<String, Boolean, Boolean> MODPACK_SUGGESTED_BLACK_LIST_PREDICATE = modpackPredicateMaker(MODPACK_SUGGESTED_BLACK_LIST);
|
public static final BiFunction<String, Boolean, Boolean> MODPACK_SUGGESTED_BLACK_LIST_PREDICATE = modpackPredicateMaker(MODPACK_SUGGESTED_BLACK_LIST);
|
||||||
|
|
||||||
private static BiFunction<String, Boolean, Boolean> modpackPredicateMaker(List<String> l) {
|
private static BiFunction<String, Boolean, Boolean> modpackPredicateMaker(final List<String> l) {
|
||||||
return (String x, Boolean y) -> {
|
return new BiFunction<String, Boolean, Boolean>() {
|
||||||
|
@Override
|
||||||
|
public Boolean apply(String x, Boolean y) {
|
||||||
for (String s : l)
|
for (String s : l)
|
||||||
if (y) {
|
if (y) {
|
||||||
if (x.startsWith(s + "/"))
|
if (x.startsWith(s + "/"))
|
||||||
@@ -165,6 +173,7 @@ public final class ModpackManager {
|
|||||||
} else if (x.equals(s))
|
} else if (x.equals(s))
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -179,14 +188,18 @@ public final class ModpackManager {
|
|||||||
* @throws IOException if create tmp directory failed
|
* @throws IOException if create tmp directory failed
|
||||||
*/
|
*/
|
||||||
public static void export(File output, IMinecraftProvider provider, String version, List<String> blacklist) throws IOException, GameException {
|
public static void export(File output, IMinecraftProvider provider, String version, List<String> blacklist) throws IOException, GameException {
|
||||||
ArrayList<String> b = new ArrayList<>(MODPACK_BLACK_LIST);
|
final ArrayList<String> b = new ArrayList<>(MODPACK_BLACK_LIST);
|
||||||
if (blacklist != null)
|
if (blacklist != null)
|
||||||
b.addAll(blacklist);
|
b.addAll(blacklist);
|
||||||
|
b.add(version + ".jar");
|
||||||
|
b.add(version + ".json");
|
||||||
HMCLog.log("Compressing game files without some files in blacklist, including files or directories: usernamecache.json, asm, logs, backups, versions, assets, usercache.json, libraries, crash-reports, launcher_profiles.json, NVIDIA, TCNodeTracker");
|
HMCLog.log("Compressing game files without some files in blacklist, including files or directories: usernamecache.json, asm, logs, backups, versions, assets, usercache.json, libraries, crash-reports, launcher_profiles.json, NVIDIA, TCNodeTracker");
|
||||||
ZipEngine zip = null;
|
ZipEngine zip = null;
|
||||||
try {
|
try {
|
||||||
zip = new ZipEngine(output);
|
zip = new ZipEngine(output);
|
||||||
zip.putDirectory(provider.getRunDirectory(version), (String x, Boolean y) -> {
|
zip.putDirectory(provider.getRunDirectory(version), new BiFunction<String, Boolean, String>() {
|
||||||
|
@Override
|
||||||
|
public String apply(String x, Boolean y) {
|
||||||
for (String s : b)
|
for (String s : b)
|
||||||
if (y) {
|
if (y) {
|
||||||
if (x.startsWith(s + "/"))
|
if (x.startsWith(s + "/"))
|
||||||
@@ -194,14 +207,15 @@ public final class ModpackManager {
|
|||||||
} else if (x.equals(s))
|
} else if (x.equals(s))
|
||||||
return null;
|
return null;
|
||||||
return "minecraft/" + x;
|
return "minecraft/" + x;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
MinecraftVersion mv = provider.getVersionById(version).resolve(provider);
|
MinecraftVersion mv = provider.getVersionById(version).resolve(provider);
|
||||||
mv.runDir = "version";
|
|
||||||
MinecraftVersionRequest r = MinecraftVersionRequest.minecraftVersion(provider.getMinecraftJar(version));
|
MinecraftVersionRequest r = MinecraftVersionRequest.minecraftVersion(provider.getMinecraftJar(version));
|
||||||
if (r.type != MinecraftVersionRequest.OK)
|
if (r.type != MinecraftVersionRequest.OK)
|
||||||
throw new FileSystemException(C.i18n("modpack.cannot_read_version") + ": " + MinecraftVersionRequest.getResponse(r));
|
throw new FileSystemException(C.i18n("modpack.cannot_read_version") + ": " + MinecraftVersionRequest.getResponse(r));
|
||||||
mv.jar = r.version;
|
mv.jar = r.version;
|
||||||
|
mv.runDir = "version";
|
||||||
zip.putTextFile(C.gsonPrettyPrinting.toJson(mv), "minecraft/pack.json");
|
zip.putTextFile(C.gsonPrettyPrinting.toJson(mv), "minecraft/pack.json");
|
||||||
} finally {
|
} finally {
|
||||||
if (zip != null)
|
if (zip != null)
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ import java.io.File;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.GameException;
|
import org.jackhuang.hellominecraft.launcher.core.GameException;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.version.DecompressLibraryJob;
|
import org.jackhuang.hellominecraft.launcher.core.version.DecompressLibraryJob;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.version.GameDirType;
|
|
||||||
import org.jackhuang.hellominecraft.launcher.core.version.MinecraftVersion;
|
import org.jackhuang.hellominecraft.launcher.core.version.MinecraftVersion;
|
||||||
|
import org.jackhuang.hellominecraft.utils.EventHandler;
|
||||||
import org.jackhuang.hellominecraft.utils.functions.Consumer;
|
import org.jackhuang.hellominecraft.utils.functions.Consumer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -54,6 +54,8 @@ public abstract class IMinecraftProvider {
|
|||||||
*/
|
*/
|
||||||
public abstract File getRunDirectory(String id);
|
public abstract File getRunDirectory(String id);
|
||||||
|
|
||||||
|
public abstract File versionRoot(String id);
|
||||||
|
|
||||||
public File getRunDirectory(String id, String subFolder) {
|
public File getRunDirectory(String id, String subFolder) {
|
||||||
return new File(getRunDirectory(id), subFolder);
|
return new File(getRunDirectory(id), subFolder);
|
||||||
}
|
}
|
||||||
@@ -91,12 +93,6 @@ public abstract class IMinecraftProvider {
|
|||||||
*/
|
*/
|
||||||
public abstract File getMinecraftJar(String id);
|
public abstract File getMinecraftJar(String id);
|
||||||
|
|
||||||
protected GameDirType gameDirType = GameDirType.ROOT_FOLDER;
|
|
||||||
|
|
||||||
public void setGameDirType(GameDirType gameDirType) {
|
|
||||||
this.gameDirType = gameDirType;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Rename version
|
* Rename version
|
||||||
*
|
*
|
||||||
@@ -148,9 +144,15 @@ public abstract class IMinecraftProvider {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Refind the versions in this profile.
|
* Refind the versions in this profile.
|
||||||
|
* Must call onRefreshingVersions, onRefreshedVersions, onLoadedVersion
|
||||||
|
* Events.
|
||||||
*/
|
*/
|
||||||
public abstract void refreshVersions();
|
public abstract void refreshVersions();
|
||||||
|
|
||||||
|
public final EventHandler<Void> onRefreshingVersions = new EventHandler<>(this),
|
||||||
|
onRefreshedVersions = new EventHandler<>(this);
|
||||||
|
public final EventHandler<String> onLoadedVersion = new EventHandler<>(this);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clean redundant files.
|
* Clean redundant files.
|
||||||
*/
|
*/
|
||||||
@@ -163,4 +165,8 @@ public abstract class IMinecraftProvider {
|
|||||||
*/
|
*/
|
||||||
public abstract boolean onLaunch();
|
public abstract boolean onLaunch();
|
||||||
|
|
||||||
|
public File baseDirectory() {
|
||||||
|
return service.baseDirectory();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -68,6 +68,8 @@ public class MinecraftVersionManager extends IMinecraftProvider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void refreshVersions() {
|
public void refreshVersions() {
|
||||||
|
onRefreshingVersions.execute(null);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
MCUtils.tryWriteProfile(service.baseDirectory());
|
MCUtils.tryWriteProfile(service.baseDirectory());
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
@@ -140,15 +142,22 @@ public class MinecraftVersionManager extends IMinecraftProvider {
|
|||||||
for (MinecraftLibrary ml : mcVersion.libraries)
|
for (MinecraftLibrary ml : mcVersion.libraries)
|
||||||
ml.init();
|
ml.init();
|
||||||
versions.put(id, mcVersion);
|
versions.put(id, mcVersion);
|
||||||
|
onLoadedVersion.execute(id);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
HMCLog.warn("Ignoring: " + dir + ", the json of this Minecraft is malformed.", e);
|
HMCLog.warn("Ignoring: " + dir + ", the json of this Minecraft is malformed.", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
onRefreshedVersions.execute(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public File versionRoot(String id) {
|
||||||
|
return new File(service.baseDirectory(), "versions/" + id);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean removeVersionFromDisk(String name) {
|
public boolean removeVersionFromDisk(String name) {
|
||||||
File version = new File(service.baseDirectory(), "versions/" + name);
|
File version = versionRoot(name);
|
||||||
if (!version.exists())
|
if (!version.exists())
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
@@ -159,12 +168,12 @@ public class MinecraftVersionManager extends IMinecraftProvider {
|
|||||||
@Override
|
@Override
|
||||||
public boolean renameVersion(String from, String to) {
|
public boolean renameVersion(String from, String to) {
|
||||||
try {
|
try {
|
||||||
File fromJson = new File(service.baseDirectory(), "versions/" + from + "/" + from + ".json");
|
File fromJson = new File(versionRoot(from), from + ".json");
|
||||||
MinecraftVersion mcVersion = C.gson.fromJson(FileUtils.readFileToString(fromJson), MinecraftVersion.class);
|
MinecraftVersion mcVersion = C.gson.fromJson(FileUtils.readFileToString(fromJson), MinecraftVersion.class);
|
||||||
mcVersion.id = to;
|
mcVersion.id = to;
|
||||||
FileUtils.writeQuietly(fromJson, C.gsonPrettyPrinting.toJson(mcVersion));
|
FileUtils.writeQuietly(fromJson, C.gsonPrettyPrinting.toJson(mcVersion));
|
||||||
File toDir = new File(service.baseDirectory(), "versions/" + to);
|
File toDir = versionRoot(to);
|
||||||
new File(service.baseDirectory(), "versions/" + from).renameTo(toDir);
|
versionRoot(from).renameTo(toDir);
|
||||||
File toJson = new File(toDir, to + ".json");
|
File toJson = new File(toDir, to + ".json");
|
||||||
File toJar = new File(toDir, to + ".jar");
|
File toJar = new File(toDir, to + ".jar");
|
||||||
new File(toDir, from + ".json").renameTo(toJson);
|
new File(toDir, from + ".json").renameTo(toJson);
|
||||||
@@ -180,14 +189,9 @@ public class MinecraftVersionManager extends IMinecraftProvider {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public File getRunDirectory(String id) {
|
public File getRunDirectory(String id) {
|
||||||
if ("version".equals(versions.get(id).runDir))
|
if ("version".equals(getVersionById(id).runDir))
|
||||||
return new File(service.baseDirectory(), "versions/" + id + "/");
|
return versionRoot(id);
|
||||||
switch (gameDirType) {
|
return baseDirectory();
|
||||||
case VERSION_FOLDER:
|
|
||||||
return new File(service.baseDirectory(), "versions/" + id + "/");
|
|
||||||
default:
|
|
||||||
return service.baseDirectory();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -195,7 +199,7 @@ public class MinecraftVersionManager extends IMinecraftProvider {
|
|||||||
MinecraftVersion v = service.download().downloadMinecraft(id);
|
MinecraftVersion v = service.download().downloadMinecraft(id);
|
||||||
if (callback != null) {
|
if (callback != null) {
|
||||||
callback.accept(v);
|
callback.accept(v);
|
||||||
File mvt = new File(service.baseDirectory(), "versions/" + id + "/" + id + ".json");
|
File mvt = new File(versionRoot(id), id + ".json");
|
||||||
FileUtils.writeQuietly(mvt, C.gsonPrettyPrinting.toJson(v));
|
FileUtils.writeQuietly(mvt, C.gsonPrettyPrinting.toJson(v));
|
||||||
}
|
}
|
||||||
if (v != null) {
|
if (v != null) {
|
||||||
@@ -265,9 +269,9 @@ public class MinecraftVersionManager extends IMinecraftProvider {
|
|||||||
@Override
|
@Override
|
||||||
public void cleanFolder() {
|
public void cleanFolder() {
|
||||||
for (MinecraftVersion s : getVersions()) {
|
for (MinecraftVersion s : getVersions()) {
|
||||||
FileUtils.deleteDirectoryQuietly(new File(service.baseDirectory(), "versions" + File.separator + s.id + File.separator + s.id + "-natives"));
|
FileUtils.deleteDirectoryQuietly(new File(versionRoot(s.id), s.id + "-natives"));
|
||||||
File f = getRunDirectory(s.id);
|
File f = getRunDirectory(s.id);
|
||||||
String[] dir = { "logs", "asm", "NVIDIA", "crash-reports", "server-resource-packs", "natives", "native" };
|
String[] dir = { "asm", "NVIDIA", "server-resource-packs", "natives", "native" };
|
||||||
for (String str : dir)
|
for (String str : dir)
|
||||||
FileUtils.deleteDirectoryQuietly(new File(f, str));
|
FileUtils.deleteDirectoryQuietly(new File(f, str));
|
||||||
String[] files = { "output-client.log", "usercache.json", "usernamecache.json", "hmclmc.log" };
|
String[] files = { "output-client.log", "usercache.json", "usernamecache.json", "hmclmc.log" };
|
||||||
|
|||||||
@@ -15,11 +15,12 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program. If not, see {http://www.gnu.org/licenses/}.
|
* along with this program. If not, see {http://www.gnu.org/licenses/}.
|
||||||
*/
|
*/
|
||||||
package org.jackhuang.hellominecraft.launcher.utils;
|
package org.jackhuang.hellominecraft.launcher.settings;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.GameException;
|
import org.jackhuang.hellominecraft.launcher.core.GameException;
|
||||||
import org.jackhuang.hellominecraft.launcher.settings.Profile;
|
|
||||||
import org.jackhuang.hellominecraft.launcher.core.installers.MinecraftInstallerService;
|
import org.jackhuang.hellominecraft.launcher.core.installers.MinecraftInstallerService;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.assets.MinecraftAssetService;
|
import org.jackhuang.hellominecraft.launcher.core.assets.MinecraftAssetService;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.auth.UserProfileProvider;
|
import org.jackhuang.hellominecraft.launcher.core.auth.UserProfileProvider;
|
||||||
@@ -34,7 +35,8 @@ import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftModService;
|
|||||||
import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftProvider;
|
import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftProvider;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftService;
|
import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftService;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.mod.MinecraftModService;
|
import org.jackhuang.hellominecraft.launcher.core.mod.MinecraftModService;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.version.MinecraftVersionManager;
|
import org.jackhuang.hellominecraft.utils.C;
|
||||||
|
import org.jackhuang.hellominecraft.utils.system.FileUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -44,15 +46,51 @@ public class DefaultMinecraftService extends IMinecraftService {
|
|||||||
|
|
||||||
File base;
|
File base;
|
||||||
Profile p;
|
Profile p;
|
||||||
|
final Map<String, VersionSetting> versionSettings = new HashMap<>();
|
||||||
|
|
||||||
public DefaultMinecraftService(Profile p) {
|
public DefaultMinecraftService(Profile p) {
|
||||||
this.p = p;
|
this.p = p;
|
||||||
this.provider = new MinecraftVersionManager(this);
|
this.provider = new HMCLGameProvider(this);
|
||||||
provider.initializeMiencraft();
|
provider.initializeMiencraft();
|
||||||
|
provider.onRefreshingVersions.register((sender, x) -> {
|
||||||
|
versionSettings.clear();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
|
provider.onLoadedVersion.register((sender, id) -> {
|
||||||
|
VersionSetting vs = new VersionSetting();
|
||||||
|
File f = new File(provider.versionRoot(id), "hmclversion.cfg");
|
||||||
|
if (f.exists()) {
|
||||||
|
String s = FileUtils.readFileToStringQuietly(f);
|
||||||
|
if (s != null)
|
||||||
|
vs = C.gson.fromJson(s, VersionSetting.class);
|
||||||
|
}
|
||||||
|
vs.id = id;
|
||||||
|
versionSettings.put(id, vs);
|
||||||
|
return true;
|
||||||
|
});
|
||||||
this.mms = new MinecraftModService(this);
|
this.mms = new MinecraftModService(this);
|
||||||
this.mds = new MinecraftDownloadService(this);
|
this.mds = new MinecraftDownloadService(this);
|
||||||
this.mas = new MinecraftAssetService(this);
|
this.mas = new MinecraftAssetService(this);
|
||||||
this.mis = new MinecraftInstallerService(this);
|
this.mis = new MinecraftInstallerService(this);
|
||||||
|
|
||||||
|
Runtime.getRuntime().addShutdownHook(new Thread() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
for (String key : versionSettings.keySet())
|
||||||
|
saveVersionSetting(key);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public VersionSetting getVersionSetting(String id) {
|
||||||
|
return versionSettings.get(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void saveVersionSetting(String id) {
|
||||||
|
if (!versionSettings.containsKey(id))
|
||||||
|
return;
|
||||||
|
File f = new File(provider.versionRoot(id), "hmclversion.cfg");
|
||||||
|
FileUtils.writeQuietly(f, C.gson.toJson(versionSettings.get(id)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -17,10 +17,8 @@
|
|||||||
*/
|
*/
|
||||||
package org.jackhuang.hellominecraft.launcher.settings;
|
package org.jackhuang.hellominecraft.launcher.settings;
|
||||||
|
|
||||||
import org.jackhuang.hellominecraft.launcher.utils.DefaultMinecraftService;
|
|
||||||
import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftService;
|
import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftService;
|
||||||
import org.jackhuang.hellominecraft.launcher.api.IPlugin;
|
import org.jackhuang.hellominecraft.launcher.api.IPlugin;
|
||||||
import org.jackhuang.hellominecraft.launcher.settings.Settings;
|
|
||||||
import org.jackhuang.hellominecraft.launcher.core.auth.IAuthenticator;
|
import org.jackhuang.hellominecraft.launcher.core.auth.IAuthenticator;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.auth.OfflineAuthenticator;
|
import org.jackhuang.hellominecraft.launcher.core.auth.OfflineAuthenticator;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.auth.SkinmeAuthenticator;
|
import org.jackhuang.hellominecraft.launcher.core.auth.SkinmeAuthenticator;
|
||||||
@@ -54,11 +52,14 @@ public class DefaultPlugin implements IPlugin {
|
|||||||
SKINME_LOGIN = new SkinmeAuthenticator(clientToken);
|
SKINME_LOGIN = new SkinmeAuthenticator(clientToken);
|
||||||
SKINME_LOGIN.onLoadSettings(Settings.getInstance().getAuthenticatorConfig(SKINME_LOGIN.id()));
|
SKINME_LOGIN.onLoadSettings(Settings.getInstance().getAuthenticatorConfig(SKINME_LOGIN.id()));
|
||||||
|
|
||||||
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
|
Runtime.getRuntime().addShutdownHook(new Thread() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
Settings.getInstance().setAuthenticatorConfig(OFFLINE_LOGIN.id(), OFFLINE_LOGIN.onSaveSettings());
|
Settings.getInstance().setAuthenticatorConfig(OFFLINE_LOGIN.id(), OFFLINE_LOGIN.onSaveSettings());
|
||||||
Settings.getInstance().setAuthenticatorConfig(YGGDRASIL_LOGIN.id(), YGGDRASIL_LOGIN.onSaveSettings());
|
Settings.getInstance().setAuthenticatorConfig(YGGDRASIL_LOGIN.id(), YGGDRASIL_LOGIN.onSaveSettings());
|
||||||
Settings.getInstance().setAuthenticatorConfig(SKINME_LOGIN.id(), SKINME_LOGIN.onSaveSettings());
|
Settings.getInstance().setAuthenticatorConfig(SKINME_LOGIN.id(), SKINME_LOGIN.onSaveSettings());
|
||||||
}));
|
}
|
||||||
|
});
|
||||||
apply.accept(OFFLINE_LOGIN);
|
apply.accept(OFFLINE_LOGIN);
|
||||||
apply.accept(YGGDRASIL_LOGIN);
|
apply.accept(YGGDRASIL_LOGIN);
|
||||||
apply.accept(SKINME_LOGIN);
|
apply.accept(SKINME_LOGIN);
|
||||||
|
|||||||
@@ -0,0 +1,40 @@
|
|||||||
|
/*
|
||||||
|
* Hello Minecraft! Launcher.
|
||||||
|
* Copyright (C) 2013 huangyuhui <huanghongxun2008@126.com>
|
||||||
|
*
|
||||||
|
* 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 {http://www.gnu.org/licenses/}.
|
||||||
|
*/
|
||||||
|
package org.jackhuang.hellominecraft.launcher.settings;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import org.jackhuang.hellominecraft.launcher.core.version.GameDirType;
|
||||||
|
import org.jackhuang.hellominecraft.launcher.core.version.MinecraftVersionManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author huangyuhui
|
||||||
|
*/
|
||||||
|
public class HMCLGameProvider extends MinecraftVersionManager {
|
||||||
|
|
||||||
|
public HMCLGameProvider(DefaultMinecraftService p) {
|
||||||
|
super(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public File getRunDirectory(String id) {
|
||||||
|
return ((DefaultMinecraftService) service).getVersionSetting(id).getGameDirType() == GameDirType.VERSION_FOLDER
|
||||||
|
? service.version().versionRoot(id)
|
||||||
|
: super.getRunDirectory(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -18,22 +18,12 @@
|
|||||||
package org.jackhuang.hellominecraft.launcher.settings;
|
package org.jackhuang.hellominecraft.launcher.settings;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
|
||||||
import org.jackhuang.hellominecraft.utils.C;
|
|
||||||
import org.jackhuang.hellominecraft.utils.logging.HMCLog;
|
|
||||||
import org.jackhuang.hellominecraft.launcher.Main;
|
|
||||||
import org.jackhuang.hellominecraft.launcher.api.PluginManager;
|
import org.jackhuang.hellominecraft.launcher.api.PluginManager;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.LauncherVisibility;
|
|
||||||
import org.jackhuang.hellominecraft.launcher.core.MCUtils;
|
import org.jackhuang.hellominecraft.launcher.core.MCUtils;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.launch.LaunchOptions;
|
|
||||||
import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftService;
|
import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftService;
|
||||||
import org.jackhuang.hellominecraft.utils.system.IOUtils;
|
import org.jackhuang.hellominecraft.utils.system.IOUtils;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.version.GameDirType;
|
|
||||||
import org.jackhuang.hellominecraft.utils.StrUtils;
|
import org.jackhuang.hellominecraft.utils.StrUtils;
|
||||||
import org.jackhuang.hellominecraft.utils.Utils;
|
|
||||||
import org.jackhuang.hellominecraft.utils.EventHandler;
|
import org.jackhuang.hellominecraft.utils.EventHandler;
|
||||||
import org.jackhuang.hellominecraft.utils.system.Java;
|
|
||||||
import org.jackhuang.hellominecraft.utils.system.JdkVersion;
|
|
||||||
import org.jackhuang.hellominecraft.utils.system.OS;
|
import org.jackhuang.hellominecraft.utils.system.OS;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -42,22 +32,7 @@ import org.jackhuang.hellominecraft.utils.system.OS;
|
|||||||
*/
|
*/
|
||||||
public final class Profile {
|
public final class Profile {
|
||||||
|
|
||||||
private String name, selectedMinecraftVersion = "", javaArgs, minecraftArgs, maxMemory, permSize, width, height, userProperties;
|
private String name, selectedMinecraftVersion = "", gameDir;
|
||||||
private String gameDir, javaDir, precalledCommand, serverIp, java;
|
|
||||||
private boolean fullscreen, debug, noJVMArgs, canceledWrapper;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 0 - Close the launcher when the game starts.<br/>
|
|
||||||
* 1 - Hide the launcher when the game starts.<br/>
|
|
||||||
* 2 - Keep the launcher open.<br/>
|
|
||||||
*/
|
|
||||||
private int launcherVisibility;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 0 - .minecraft<br/>
|
|
||||||
* 1 - .minecraft/versions/<version>/<br/>
|
|
||||||
*/
|
|
||||||
private int gameDirType;
|
|
||||||
|
|
||||||
protected transient IMinecraftService service;
|
protected transient IMinecraftService service;
|
||||||
public transient final EventHandler<String> propertyChanged = new EventHandler<>(this);
|
public transient final EventHandler<String> propertyChanged = new EventHandler<>(this);
|
||||||
@@ -69,14 +44,7 @@ public final class Profile {
|
|||||||
public Profile(String name) {
|
public Profile(String name) {
|
||||||
this.name = name;
|
this.name = name;
|
||||||
gameDir = MCUtils.getInitGameDir().getPath();
|
gameDir = MCUtils.getInitGameDir().getPath();
|
||||||
debug = fullscreen = canceledWrapper = false;
|
|
||||||
launcherVisibility = gameDirType = 0;
|
|
||||||
PluginManager.NOW_PLUGIN.onInitializingProfile(this);
|
PluginManager.NOW_PLUGIN.onInitializingProfile(this);
|
||||||
javaDir = java = minecraftArgs = serverIp = precalledCommand = "";
|
|
||||||
}
|
|
||||||
|
|
||||||
public void initialize(int gameDirType) {
|
|
||||||
this.gameDirType = gameDirType;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Profile(Profile v) {
|
public Profile(Profile v) {
|
||||||
@@ -85,22 +53,6 @@ public final class Profile {
|
|||||||
return;
|
return;
|
||||||
name = v.name;
|
name = v.name;
|
||||||
gameDir = v.gameDir;
|
gameDir = v.gameDir;
|
||||||
maxMemory = v.maxMemory;
|
|
||||||
width = v.width;
|
|
||||||
height = v.height;
|
|
||||||
java = v.java;
|
|
||||||
fullscreen = v.fullscreen;
|
|
||||||
javaArgs = v.javaArgs;
|
|
||||||
javaDir = v.javaDir;
|
|
||||||
debug = v.debug;
|
|
||||||
minecraftArgs = v.minecraftArgs;
|
|
||||||
permSize = v.permSize;
|
|
||||||
gameDirType = v.gameDirType;
|
|
||||||
canceledWrapper = v.canceledWrapper;
|
|
||||||
noJVMArgs = v.noJVMArgs;
|
|
||||||
launcherVisibility = v.launcherVisibility;
|
|
||||||
precalledCommand = v.precalledCommand;
|
|
||||||
serverIp = v.serverIp;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public IMinecraftService service() {
|
public IMinecraftService service() {
|
||||||
@@ -109,6 +61,14 @@ public final class Profile {
|
|||||||
return service;
|
return service;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public VersionSetting getSelectedVersionSetting() {
|
||||||
|
return getVersionSetting(getSelectedVersion());
|
||||||
|
}
|
||||||
|
|
||||||
|
public VersionSetting getVersionSetting(String id) {
|
||||||
|
return ((DefaultMinecraftService) service()).getVersionSetting(id);
|
||||||
|
}
|
||||||
|
|
||||||
public String getSettingsSelectedMinecraftVersion() {
|
public String getSettingsSelectedMinecraftVersion() {
|
||||||
return selectedMinecraftVersion;
|
return selectedMinecraftVersion;
|
||||||
}
|
}
|
||||||
@@ -157,60 +117,6 @@ public final class Profile {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getJavaDir() {
|
|
||||||
Java j = getJava();
|
|
||||||
if (j.getHome() == null)
|
|
||||||
return javaDir;
|
|
||||||
else
|
|
||||||
return j.getJava();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getSettingsJavaDir() {
|
|
||||||
return javaDir;
|
|
||||||
}
|
|
||||||
|
|
||||||
public File getJavaDirFile() {
|
|
||||||
return new File(getJavaDir());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setJavaDir(String javaDir) {
|
|
||||||
this.javaDir = javaDir;
|
|
||||||
propertyChanged.execute("javaDir");
|
|
||||||
}
|
|
||||||
|
|
||||||
public Java getJava() {
|
|
||||||
return Java.JAVA.get(getJavaIndexInAllJavas());
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getJavaIndexInAllJavas() {
|
|
||||||
if (StrUtils.isBlank(java) && StrUtils.isNotBlank(javaDir))
|
|
||||||
java = "Custom";
|
|
||||||
int idx = Java.JAVA.indexOf(new Java(java, null));
|
|
||||||
if (idx == -1) {
|
|
||||||
java = "Default";
|
|
||||||
idx = 0;
|
|
||||||
}
|
|
||||||
return idx;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setJava(Java java) {
|
|
||||||
if (java == null)
|
|
||||||
this.java = Java.JAVA.get(0).getName();
|
|
||||||
else {
|
|
||||||
int idx = Java.JAVA.indexOf(java);
|
|
||||||
if (idx == -1)
|
|
||||||
return;
|
|
||||||
this.java = java.getName();
|
|
||||||
}
|
|
||||||
propertyChanged.execute("java");
|
|
||||||
}
|
|
||||||
|
|
||||||
public File getFolder(String folder) {
|
|
||||||
if (getSelectedVersion() == null)
|
|
||||||
return new File(getCanonicalGameDirFile(), folder);
|
|
||||||
return service().version().getRunDirectory(getSelectedVersion(), folder);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
@@ -220,207 +126,7 @@ public final class Profile {
|
|||||||
propertyChanged.execute("name");
|
propertyChanged.execute("name");
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getJavaArgs() {
|
|
||||||
if (StrUtils.isBlank(javaArgs))
|
|
||||||
return "";
|
|
||||||
return javaArgs;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setJavaArgs(String javaArgs) {
|
|
||||||
this.javaArgs = javaArgs;
|
|
||||||
propertyChanged.execute("javaArgs");
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean hasJavaArgs() {
|
|
||||||
return StrUtils.isNotBlank(getJavaArgs().trim());
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getMaxMemory() {
|
|
||||||
if (StrUtils.isBlank(maxMemory))
|
|
||||||
return String.valueOf(Utils.getSuggestedMemorySize());
|
|
||||||
return maxMemory;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMaxMemory(String maxMemory) {
|
|
||||||
this.maxMemory = maxMemory;
|
|
||||||
propertyChanged.execute("maxMemory");
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getWidth() {
|
|
||||||
if (StrUtils.isBlank(width))
|
|
||||||
return "854";
|
|
||||||
return width;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setWidth(String width) {
|
|
||||||
this.width = width;
|
|
||||||
propertyChanged.execute("width");
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getHeight() {
|
|
||||||
if (StrUtils.isBlank(height))
|
|
||||||
return "480";
|
|
||||||
return height;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHeight(String height) {
|
|
||||||
this.height = height;
|
|
||||||
propertyChanged.execute("height");
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getUserProperties() {
|
|
||||||
if (userProperties == null)
|
|
||||||
return "";
|
|
||||||
return userProperties;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUserProperties(String userProperties) {
|
|
||||||
this.userProperties = userProperties;
|
|
||||||
propertyChanged.execute("userProperties");
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isFullscreen() {
|
|
||||||
return fullscreen;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setFullscreen(boolean fullscreen) {
|
|
||||||
this.fullscreen = fullscreen;
|
|
||||||
propertyChanged.execute("fullscreen");
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isDebug() {
|
|
||||||
return debug;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDebug(boolean debug) {
|
|
||||||
this.debug = debug;
|
|
||||||
propertyChanged.execute("debug");
|
|
||||||
}
|
|
||||||
|
|
||||||
public LauncherVisibility getLauncherVisibility() {
|
|
||||||
return LauncherVisibility.values()[launcherVisibility];
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLauncherVisibility(LauncherVisibility launcherVisibility) {
|
|
||||||
this.launcherVisibility = launcherVisibility.ordinal();
|
|
||||||
propertyChanged.execute("launcherVisibility");
|
|
||||||
}
|
|
||||||
|
|
||||||
public GameDirType getGameDirType() {
|
|
||||||
if (gameDirType < 0 || gameDirType > 1)
|
|
||||||
setGameDirType(GameDirType.ROOT_FOLDER);
|
|
||||||
return GameDirType.values()[gameDirType];
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setGameDirType(GameDirType gameDirType) {
|
|
||||||
this.gameDirType = gameDirType.ordinal();
|
|
||||||
service().version().setGameDirType(getGameDirType());
|
|
||||||
propertyChanged.execute("gameDirType");
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getPermSize() {
|
|
||||||
return permSize;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPermSize(String permSize) {
|
|
||||||
this.permSize = permSize;
|
|
||||||
propertyChanged.execute("permSize");
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isNoJVMArgs() {
|
|
||||||
return noJVMArgs;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setNoJVMArgs(boolean noJVMArgs) {
|
|
||||||
this.noJVMArgs = noJVMArgs;
|
|
||||||
propertyChanged.execute("noJVMArgs");
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getMinecraftArgs() {
|
|
||||||
return minecraftArgs;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMinecraftArgs(String minecraftArgs) {
|
|
||||||
this.minecraftArgs = minecraftArgs;
|
|
||||||
propertyChanged.execute("minecraftArgs");
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isCanceledWrapper() {
|
|
||||||
return canceledWrapper;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setCanceledWrapper(boolean canceledWrapper) {
|
|
||||||
this.canceledWrapper = canceledWrapper;
|
|
||||||
propertyChanged.execute("canceledWrapper");
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getPrecalledCommand() {
|
|
||||||
return precalledCommand;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPrecalledCommand(String precalledCommand) {
|
|
||||||
this.precalledCommand = precalledCommand;
|
|
||||||
propertyChanged.execute("precalledCommand");
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getServerIp() {
|
|
||||||
return serverIp;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setServerIp(String serverIp) {
|
|
||||||
this.serverIp = serverIp;
|
|
||||||
propertyChanged.execute("serverIp");
|
|
||||||
}
|
|
||||||
|
|
||||||
public void checkFormat() {
|
public void checkFormat() {
|
||||||
gameDir = gameDir.replace('/', OS.os().fileSeparator).replace('\\', OS.os().fileSeparator);
|
gameDir = gameDir.replace('/', OS.os().fileSeparator).replace('\\', OS.os().fileSeparator);
|
||||||
}
|
}
|
||||||
|
|
||||||
public LaunchOptions createLaunchOptions() {
|
|
||||||
LaunchOptions x = new LaunchOptions();
|
|
||||||
x.setCanceledWrapper(isCanceledWrapper());
|
|
||||||
x.setDebug(isDebug());
|
|
||||||
x.setFullscreen(isFullscreen());
|
|
||||||
x.setGameDir(getCanonicalGameDirFile());
|
|
||||||
x.setGameDirType(getGameDirType());
|
|
||||||
x.setHeight(getHeight());
|
|
||||||
x.setJavaArgs(getJavaArgs());
|
|
||||||
x.setLaunchVersion(getSelectedVersion());
|
|
||||||
x.setMaxMemory(getMaxMemory());
|
|
||||||
x.setMinecraftArgs(getMinecraftArgs());
|
|
||||||
x.setName(getName());
|
|
||||||
x.setNoJVMArgs(isNoJVMArgs());
|
|
||||||
x.setPermSize(getPermSize());
|
|
||||||
x.setPrecalledCommand(getPrecalledCommand());
|
|
||||||
x.setProxyHost(Settings.getInstance().getProxyHost());
|
|
||||||
x.setProxyPort(Settings.getInstance().getProxyPort());
|
|
||||||
x.setProxyUser(Settings.getInstance().getProxyUserName());
|
|
||||||
x.setProxyPass(Settings.getInstance().getProxyPassword());
|
|
||||||
x.setServerIp(getServerIp());
|
|
||||||
x.setUserProperties(getUserProperties());
|
|
||||||
x.setVersionName(Main.makeTitle());
|
|
||||||
x.setWidth(getWidth());
|
|
||||||
|
|
||||||
String str = getJavaDir();
|
|
||||||
if (!getJavaDirFile().exists()) {
|
|
||||||
HMCLog.err(C.i18n("launch.wrong_javadir"));
|
|
||||||
setJava(null);
|
|
||||||
str = getJavaDir();
|
|
||||||
}
|
|
||||||
JdkVersion jv = new JdkVersion(str);
|
|
||||||
if (Settings.getInstance().getJava().contains(jv))
|
|
||||||
jv = Settings.getInstance().getJava().get(Settings.getInstance().getJava().indexOf(jv));
|
|
||||||
else
|
|
||||||
try {
|
|
||||||
jv = JdkVersion.getJavaVersionFromExecutable(str);
|
|
||||||
Settings.getInstance().getJava().add(jv);
|
|
||||||
Settings.save();
|
|
||||||
} catch (IOException ex) {
|
|
||||||
HMCLog.warn("Failed to get java version", ex);
|
|
||||||
jv = null;
|
|
||||||
}
|
|
||||||
x.setJava(jv);
|
|
||||||
x.setJavaDir(str);
|
|
||||||
return x;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,21 +20,20 @@ package org.jackhuang.hellominecraft.launcher.settings;
|
|||||||
import com.google.gson.JsonSyntaxException;
|
import com.google.gson.JsonSyntaxException;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import org.jackhuang.hellominecraft.utils.C;
|
import org.jackhuang.hellominecraft.utils.C;
|
||||||
import org.jackhuang.hellominecraft.utils.logging.HMCLog;
|
import org.jackhuang.hellominecraft.utils.logging.HMCLog;
|
||||||
import org.jackhuang.hellominecraft.launcher.Main;
|
import org.jackhuang.hellominecraft.launcher.Main;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.download.DownloadType;
|
import org.jackhuang.hellominecraft.launcher.core.download.DownloadType;
|
||||||
import org.jackhuang.hellominecraft.utils.CollectionUtils;
|
import org.jackhuang.hellominecraft.utils.CollectionUtils;
|
||||||
|
import org.jackhuang.hellominecraft.utils.Event;
|
||||||
import org.jackhuang.hellominecraft.utils.system.FileUtils;
|
import org.jackhuang.hellominecraft.utils.system.FileUtils;
|
||||||
import org.jackhuang.hellominecraft.utils.system.IOUtils;
|
import org.jackhuang.hellominecraft.utils.system.IOUtils;
|
||||||
import org.jackhuang.hellominecraft.utils.MessageBox;
|
import org.jackhuang.hellominecraft.utils.MessageBox;
|
||||||
import org.jackhuang.hellominecraft.utils.UpdateChecker;
|
import org.jackhuang.hellominecraft.utils.UpdateChecker;
|
||||||
import org.jackhuang.hellominecraft.utils.VersionNumber;
|
import org.jackhuang.hellominecraft.utils.VersionNumber;
|
||||||
|
import org.jackhuang.hellominecraft.utils.functions.Predicate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -56,9 +55,12 @@ public final class Settings {
|
|||||||
|
|
||||||
static {
|
static {
|
||||||
SETTINGS = initSettings();
|
SETTINGS = initSettings();
|
||||||
SETTINGS.downloadTypeChangedEvent.register((s, t) -> {
|
SETTINGS.downloadTypeChangedEvent.register(new Event<DownloadType>() {
|
||||||
|
@Override
|
||||||
|
public boolean call(Object sender, DownloadType t) {
|
||||||
DownloadType.setSuggestedDownloadType(t);
|
DownloadType.setSuggestedDownloadType(t);
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
DownloadType.setSuggestedDownloadType(SETTINGS.getDownloadSource());
|
DownloadType.setSuggestedDownloadType(SETTINGS.getDownloadSource());
|
||||||
if (!getProfiles().containsKey(DEFAULT_PROFILE))
|
if (!getProfiles().containsKey(DEFAULT_PROFILE))
|
||||||
@@ -66,9 +68,12 @@ public final class Settings {
|
|||||||
|
|
||||||
for (Profile e : getProfiles().values()) {
|
for (Profile e : getProfiles().values()) {
|
||||||
e.checkFormat();
|
e.checkFormat();
|
||||||
e.propertyChanged.register((sender, t) -> {
|
e.propertyChanged.register(new Event<String>() {
|
||||||
|
@Override
|
||||||
|
public boolean call(Object sender, String t) {
|
||||||
save();
|
save();
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -121,7 +126,12 @@ public final class Settings {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static Collection<Profile> getProfilesFiltered() {
|
public static Collection<Profile> getProfilesFiltered() {
|
||||||
return CollectionUtils.map(getProfiles().values(), (t) -> t != null && t.getName() != null);
|
return CollectionUtils.map(getProfiles().values(), new Predicate<Profile>() {
|
||||||
|
@Override
|
||||||
|
public boolean apply(Profile t) {
|
||||||
|
return t != null && t.getName() != null;
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Profile getOneProfile() {
|
public static Profile getOneProfile() {
|
||||||
|
|||||||
@@ -0,0 +1,323 @@
|
|||||||
|
/*
|
||||||
|
* Hello Minecraft! Launcher.
|
||||||
|
* Copyright (C) 2013 huangyuhui <huanghongxun2008@126.com>
|
||||||
|
*
|
||||||
|
* 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 {http://www.gnu.org/licenses/}.
|
||||||
|
*/
|
||||||
|
package org.jackhuang.hellominecraft.launcher.settings;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import org.jackhuang.hellominecraft.launcher.Main;
|
||||||
|
import org.jackhuang.hellominecraft.launcher.core.LauncherVisibility;
|
||||||
|
import org.jackhuang.hellominecraft.launcher.core.launch.LaunchOptions;
|
||||||
|
import org.jackhuang.hellominecraft.launcher.core.version.GameDirType;
|
||||||
|
import org.jackhuang.hellominecraft.utils.C;
|
||||||
|
import org.jackhuang.hellominecraft.utils.EventHandler;
|
||||||
|
import org.jackhuang.hellominecraft.utils.StrUtils;
|
||||||
|
import org.jackhuang.hellominecraft.utils.Utils;
|
||||||
|
import org.jackhuang.hellominecraft.utils.logging.HMCLog;
|
||||||
|
import org.jackhuang.hellominecraft.utils.system.Java;
|
||||||
|
import org.jackhuang.hellominecraft.utils.system.JdkVersion;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author huangyuhui
|
||||||
|
*/
|
||||||
|
public class VersionSetting {
|
||||||
|
|
||||||
|
public transient String id;
|
||||||
|
|
||||||
|
private String javaArgs, minecraftArgs, maxMemory, permSize, width, height;
|
||||||
|
private String javaDir, precalledCommand, serverIp, java;
|
||||||
|
private boolean fullscreen, debug, noJVMArgs, canceledWrapper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 0 - Close the launcher when the game starts.<br/>
|
||||||
|
* 1 - Hide the launcher when the game starts.<br/>
|
||||||
|
* 2 - Keep the launcher open.<br/>
|
||||||
|
*/
|
||||||
|
private int launcherVisibility;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 0 - .minecraft<br/>
|
||||||
|
* 1 - .minecraft/versions/<version>/<br/>
|
||||||
|
*/
|
||||||
|
private int gameDirType;
|
||||||
|
|
||||||
|
public transient final EventHandler<String> propertyChanged = new EventHandler<>(this);
|
||||||
|
|
||||||
|
public VersionSetting() {
|
||||||
|
debug = fullscreen = canceledWrapper = false;
|
||||||
|
launcherVisibility = gameDirType = 0;
|
||||||
|
javaDir = java = minecraftArgs = serverIp = precalledCommand = "";
|
||||||
|
}
|
||||||
|
|
||||||
|
public VersionSetting(VersionSetting v) {
|
||||||
|
this();
|
||||||
|
if (v == null)
|
||||||
|
return;
|
||||||
|
maxMemory = v.maxMemory;
|
||||||
|
width = v.width;
|
||||||
|
height = v.height;
|
||||||
|
java = v.java;
|
||||||
|
fullscreen = v.fullscreen;
|
||||||
|
javaArgs = v.javaArgs;
|
||||||
|
javaDir = v.javaDir;
|
||||||
|
debug = v.debug;
|
||||||
|
minecraftArgs = v.minecraftArgs;
|
||||||
|
permSize = v.permSize;
|
||||||
|
gameDirType = v.gameDirType;
|
||||||
|
canceledWrapper = v.canceledWrapper;
|
||||||
|
noJVMArgs = v.noJVMArgs;
|
||||||
|
launcherVisibility = v.launcherVisibility;
|
||||||
|
precalledCommand = v.precalledCommand;
|
||||||
|
serverIp = v.serverIp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getJavaDir() {
|
||||||
|
Java j = getJava();
|
||||||
|
if (j.getHome() == null)
|
||||||
|
return javaDir;
|
||||||
|
else
|
||||||
|
return j.getJava();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSettingsJavaDir() {
|
||||||
|
return javaDir;
|
||||||
|
}
|
||||||
|
|
||||||
|
public File getJavaDirFile() {
|
||||||
|
return new File(getJavaDir());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setJavaDir(String javaDir) {
|
||||||
|
this.javaDir = javaDir;
|
||||||
|
propertyChanged.execute("javaDir");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Java getJava() {
|
||||||
|
return Java.JAVA.get(getJavaIndexInAllJavas());
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getJavaIndexInAllJavas() {
|
||||||
|
if (StrUtils.isBlank(java) && StrUtils.isNotBlank(javaDir))
|
||||||
|
java = "Custom";
|
||||||
|
int idx = Java.JAVA.indexOf(new Java(java, null));
|
||||||
|
if (idx == -1) {
|
||||||
|
java = "Default";
|
||||||
|
idx = 0;
|
||||||
|
}
|
||||||
|
return idx;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setJava(Java java) {
|
||||||
|
if (java == null)
|
||||||
|
this.java = Java.JAVA.get(0).getName();
|
||||||
|
else {
|
||||||
|
int idx = Java.JAVA.indexOf(java);
|
||||||
|
if (idx == -1)
|
||||||
|
return;
|
||||||
|
this.java = java.getName();
|
||||||
|
}
|
||||||
|
propertyChanged.execute("java");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getJavaArgs() {
|
||||||
|
if (StrUtils.isBlank(javaArgs))
|
||||||
|
return "";
|
||||||
|
return javaArgs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setJavaArgs(String javaArgs) {
|
||||||
|
this.javaArgs = javaArgs;
|
||||||
|
propertyChanged.execute("javaArgs");
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasJavaArgs() {
|
||||||
|
return StrUtils.isNotBlank(getJavaArgs().trim());
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMaxMemory() {
|
||||||
|
if (StrUtils.isBlank(maxMemory))
|
||||||
|
return String.valueOf(Utils.getSuggestedMemorySize());
|
||||||
|
return maxMemory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMaxMemory(String maxMemory) {
|
||||||
|
this.maxMemory = maxMemory;
|
||||||
|
propertyChanged.execute("maxMemory");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getWidth() {
|
||||||
|
if (StrUtils.isBlank(width))
|
||||||
|
return "854";
|
||||||
|
return width;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWidth(String width) {
|
||||||
|
this.width = width;
|
||||||
|
propertyChanged.execute("width");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getHeight() {
|
||||||
|
if (StrUtils.isBlank(height))
|
||||||
|
return "480";
|
||||||
|
return height;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHeight(String height) {
|
||||||
|
this.height = height;
|
||||||
|
propertyChanged.execute("height");
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isFullscreen() {
|
||||||
|
return fullscreen;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFullscreen(boolean fullscreen) {
|
||||||
|
this.fullscreen = fullscreen;
|
||||||
|
propertyChanged.execute("fullscreen");
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isDebug() {
|
||||||
|
return debug;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDebug(boolean debug) {
|
||||||
|
this.debug = debug;
|
||||||
|
propertyChanged.execute("debug");
|
||||||
|
}
|
||||||
|
|
||||||
|
public LauncherVisibility getLauncherVisibility() {
|
||||||
|
return LauncherVisibility.values()[launcherVisibility];
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLauncherVisibility(LauncherVisibility launcherVisibility) {
|
||||||
|
this.launcherVisibility = launcherVisibility.ordinal();
|
||||||
|
propertyChanged.execute("launcherVisibility");
|
||||||
|
}
|
||||||
|
|
||||||
|
public GameDirType getGameDirType() {
|
||||||
|
if (gameDirType < 0 || gameDirType > 1)
|
||||||
|
setGameDirType(GameDirType.ROOT_FOLDER);
|
||||||
|
return GameDirType.values()[gameDirType];
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGameDirType(GameDirType gameDirType) {
|
||||||
|
this.gameDirType = gameDirType.ordinal();
|
||||||
|
propertyChanged.execute("gameDirType");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPermSize() {
|
||||||
|
return permSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPermSize(String permSize) {
|
||||||
|
this.permSize = permSize;
|
||||||
|
propertyChanged.execute("permSize");
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isNoJVMArgs() {
|
||||||
|
return noJVMArgs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNoJVMArgs(boolean noJVMArgs) {
|
||||||
|
this.noJVMArgs = noJVMArgs;
|
||||||
|
propertyChanged.execute("noJVMArgs");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMinecraftArgs() {
|
||||||
|
return minecraftArgs;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMinecraftArgs(String minecraftArgs) {
|
||||||
|
this.minecraftArgs = minecraftArgs;
|
||||||
|
propertyChanged.execute("minecraftArgs");
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isCanceledWrapper() {
|
||||||
|
return canceledWrapper;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCanceledWrapper(boolean canceledWrapper) {
|
||||||
|
this.canceledWrapper = canceledWrapper;
|
||||||
|
propertyChanged.execute("canceledWrapper");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPrecalledCommand() {
|
||||||
|
return precalledCommand;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPrecalledCommand(String precalledCommand) {
|
||||||
|
this.precalledCommand = precalledCommand;
|
||||||
|
propertyChanged.execute("precalledCommand");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getServerIp() {
|
||||||
|
return serverIp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setServerIp(String serverIp) {
|
||||||
|
this.serverIp = serverIp;
|
||||||
|
propertyChanged.execute("serverIp");
|
||||||
|
}
|
||||||
|
|
||||||
|
public LaunchOptions createLaunchOptions(File gameDir) {
|
||||||
|
LaunchOptions x = new LaunchOptions();
|
||||||
|
x.setCanceledWrapper(isCanceledWrapper());
|
||||||
|
x.setDebug(isDebug());
|
||||||
|
x.setFullscreen(isFullscreen());
|
||||||
|
x.setGameDir(gameDir);
|
||||||
|
x.setGameDirType(getGameDirType());
|
||||||
|
x.setHeight(getHeight());
|
||||||
|
x.setJavaArgs(getJavaArgs());
|
||||||
|
x.setLaunchVersion(id);
|
||||||
|
x.setMaxMemory(getMaxMemory());
|
||||||
|
x.setMinecraftArgs(getMinecraftArgs());
|
||||||
|
x.setName(Main.makeTitle());
|
||||||
|
x.setNoJVMArgs(isNoJVMArgs());
|
||||||
|
x.setPermSize(getPermSize());
|
||||||
|
x.setPrecalledCommand(getPrecalledCommand());
|
||||||
|
x.setProxyHost(Settings.getInstance().getProxyHost());
|
||||||
|
x.setProxyPort(Settings.getInstance().getProxyPort());
|
||||||
|
x.setProxyUser(Settings.getInstance().getProxyUserName());
|
||||||
|
x.setProxyPass(Settings.getInstance().getProxyPassword());
|
||||||
|
x.setServerIp(getServerIp());
|
||||||
|
x.setVersionName(Main.makeTitle());
|
||||||
|
x.setWidth(getWidth());
|
||||||
|
|
||||||
|
String str = getJavaDir();
|
||||||
|
if (!getJavaDirFile().exists()) {
|
||||||
|
HMCLog.err(C.i18n("launch.wrong_javadir"));
|
||||||
|
setJava(null);
|
||||||
|
str = getJavaDir();
|
||||||
|
}
|
||||||
|
JdkVersion jv = new JdkVersion(str);
|
||||||
|
if (Settings.getInstance().getJava().contains(jv))
|
||||||
|
jv = Settings.getInstance().getJava().get(Settings.getInstance().getJava().indexOf(jv));
|
||||||
|
else
|
||||||
|
try {
|
||||||
|
jv = JdkVersion.getJavaVersionFromExecutable(str);
|
||||||
|
Settings.getInstance().getJava().add(jv);
|
||||||
|
Settings.save();
|
||||||
|
} catch (IOException ex) {
|
||||||
|
HMCLog.warn("Failed to get java version", ex);
|
||||||
|
jv = null;
|
||||||
|
}
|
||||||
|
x.setJava(jv);
|
||||||
|
x.setJavaDir(str);
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -106,7 +106,12 @@ public class CrashReporter implements Thread.UncaughtExceptionHandler {
|
|||||||
System.out.println(text);
|
System.out.println(text);
|
||||||
|
|
||||||
if (checkThrowable(e) && !System.getProperty("java.vm.name").contains("OpenJDK")) {
|
if (checkThrowable(e) && !System.getProperty("java.vm.name").contains("OpenJDK")) {
|
||||||
SwingUtilities.invokeLater(() -> LogWindow.INSTANCE.showAsCrashWindow(Settings.UPDATE_CHECKER.OUT_DATED));
|
SwingUtilities.invokeLater(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
LogWindow.INSTANCE.showAsCrashWindow(Settings.UPDATE_CHECKER.OUT_DATED);
|
||||||
|
}
|
||||||
|
});
|
||||||
if (!Settings.UPDATE_CHECKER.OUT_DATED)
|
if (!Settings.UPDATE_CHECKER.OUT_DATED)
|
||||||
reportToServer(text, s);
|
reportToServer(text, s);
|
||||||
}
|
}
|
||||||
@@ -127,11 +132,13 @@ public class CrashReporter implements Thread.UncaughtExceptionHandler {
|
|||||||
|
|
||||||
private static final HashSet<String> THROWABLE_SET = new HashSet<>();
|
private static final HashSet<String> THROWABLE_SET = new HashSet<>();
|
||||||
|
|
||||||
void reportToServer(String text, String stacktrace) {
|
void reportToServer(final String text, String stacktrace) {
|
||||||
if (THROWABLE_SET.contains(stacktrace))
|
if (THROWABLE_SET.contains(stacktrace))
|
||||||
return;
|
return;
|
||||||
THROWABLE_SET.add(stacktrace);
|
THROWABLE_SET.add(stacktrace);
|
||||||
new Thread(() -> {
|
new Thread() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
HashMap<String, String> map = new HashMap<>();
|
HashMap<String, String> map = new HashMap<>();
|
||||||
map.put("CrashReport", text);
|
map.put("CrashReport", text);
|
||||||
try {
|
try {
|
||||||
@@ -140,7 +147,8 @@ public class CrashReporter implements Thread.UncaughtExceptionHandler {
|
|||||||
System.out.println("Failed to send post request to HMCL server.");
|
System.out.println("Failed to send post request to HMCL server.");
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
}
|
}
|
||||||
}).start();
|
}
|
||||||
|
}.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ import org.jackhuang.hellominecraft.utils.MessageBox;
|
|||||||
import org.jackhuang.hellominecraft.utils.UpdateChecker;
|
import org.jackhuang.hellominecraft.utils.UpdateChecker;
|
||||||
import org.jackhuang.hellominecraft.utils.Utils;
|
import org.jackhuang.hellominecraft.utils.Utils;
|
||||||
import org.jackhuang.hellominecraft.utils.VersionNumber;
|
import org.jackhuang.hellominecraft.utils.VersionNumber;
|
||||||
|
import org.jackhuang.hellominecraft.utils.functions.Consumer;
|
||||||
import org.jackhuang.hellominecraft.utils.system.FileUtils;
|
import org.jackhuang.hellominecraft.utils.system.FileUtils;
|
||||||
import org.jackhuang.hellominecraft.utils.system.IOUtils;
|
import org.jackhuang.hellominecraft.utils.system.IOUtils;
|
||||||
import org.jackhuang.hellominecraft.utils.system.OS;
|
import org.jackhuang.hellominecraft.utils.system.OS;
|
||||||
@@ -89,8 +90,10 @@ public class AppDataUpgrader extends IUpgrader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean call(Object sender, VersionNumber number) {
|
public boolean call(Object sender, final VersionNumber number) {
|
||||||
((UpdateChecker) sender).requestDownloadLink().reg(map -> {
|
((UpdateChecker) sender).requestDownloadLink().reg(new Consumer<Map<String, String>>() {
|
||||||
|
@Override
|
||||||
|
public void accept(Map<String, String> map) {
|
||||||
if (map != null && map.containsKey("pack"))
|
if (map != null && map.containsKey("pack"))
|
||||||
try {
|
try {
|
||||||
if (TaskWindow.getInstance().addTask(new AppDataUpgraderTask(map.get("pack"), number.version)).start()) {
|
if (TaskWindow.getInstance().addTask(new AppDataUpgraderTask(map.get("pack"), number.version)).start()) {
|
||||||
@@ -119,6 +122,7 @@ public class AppDataUpgrader extends IUpgrader {
|
|||||||
MessageBox.Show(C.i18n("update.no_browser"));
|
MessageBox.Show(C.i18n("update.no_browser"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}).execute();
|
}).execute();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -142,7 +146,7 @@ public class AppDataUpgrader extends IUpgrader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Collection<Task> getDependTasks() {
|
public Collection<? extends Task> getDependTasks() {
|
||||||
return Arrays.asList(new FileDownloadTask(downloadLink, tempFile));
|
return Arrays.asList(new FileDownloadTask(downloadLink, tempFile));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -112,7 +112,7 @@
|
|||||||
<Component id="lblDimensionX" min="-2" max="-2" attributes="0"/>
|
<Component id="lblDimensionX" min="-2" max="-2" attributes="0"/>
|
||||||
<EmptySpace max="-2" attributes="0"/>
|
<EmptySpace max="-2" attributes="0"/>
|
||||||
<Component id="txtHeight" min="-2" pref="100" max="-2" attributes="0"/>
|
<Component id="txtHeight" min="-2" pref="100" max="-2" attributes="0"/>
|
||||||
<EmptySpace pref="444" max="32767" attributes="0"/>
|
<EmptySpace pref="410" max="32767" attributes="0"/>
|
||||||
<Component id="chkFullscreen" min="-2" max="-2" attributes="0"/>
|
<Component id="chkFullscreen" min="-2" max="-2" attributes="0"/>
|
||||||
</Group>
|
</Group>
|
||||||
<Group type="102" alignment="1" attributes="0">
|
<Group type="102" alignment="1" attributes="0">
|
||||||
@@ -300,7 +300,7 @@
|
|||||||
<Component class="javax.swing.JLabel" name="lblRunDirectory">
|
<Component class="javax.swing.JLabel" name="lblRunDirectory">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="org/jackhuang/hellominecraft/launcher/I18N.properties" key="advancedsettings.run_directory" replaceFormat="C.i18n("{key}")"/>
|
<ResourceString bundle="org/jackhuang/hellominecraft/launcher/I18N.properties" key="settings.run_directory" replaceFormat="C.i18n("{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
</Component>
|
</Component>
|
||||||
@@ -461,7 +461,7 @@
|
|||||||
<Component class="javax.swing.JCheckBox" name="chkDebug">
|
<Component class="javax.swing.JCheckBox" name="chkDebug">
|
||||||
<Properties>
|
<Properties>
|
||||||
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
<Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor">
|
||||||
<ResourceString bundle="org/jackhuang/hellominecraft/launcher/I18N.properties" key="advencedsettings.debug_mode" replaceFormat="C.i18n("{key}")"/>
|
<ResourceString bundle="org/jackhuang/hellominecraft/launcher/I18N.properties" key="advancedsettings.debug_mode" replaceFormat="C.i18n("{key}")"/>
|
||||||
</Property>
|
</Property>
|
||||||
</Properties>
|
</Properties>
|
||||||
<Events>
|
<Events>
|
||||||
|
|||||||
@@ -53,6 +53,8 @@ import org.jackhuang.hellominecraft.launcher.core.installers.InstallerType;
|
|||||||
import org.jackhuang.hellominecraft.launcher.core.mod.ModpackManager;
|
import org.jackhuang.hellominecraft.launcher.core.mod.ModpackManager;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.version.GameDirType;
|
import org.jackhuang.hellominecraft.launcher.core.version.GameDirType;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.version.MinecraftVersion;
|
import org.jackhuang.hellominecraft.launcher.core.version.MinecraftVersion;
|
||||||
|
import org.jackhuang.hellominecraft.launcher.settings.DefaultMinecraftService;
|
||||||
|
import org.jackhuang.hellominecraft.launcher.settings.VersionSetting;
|
||||||
import org.jackhuang.hellominecraft.launcher.views.modpack.ModpackWizard;
|
import org.jackhuang.hellominecraft.launcher.views.modpack.ModpackWizard;
|
||||||
import org.jackhuang.hellominecraft.utils.tasks.TaskWindow;
|
import org.jackhuang.hellominecraft.utils.tasks.TaskWindow;
|
||||||
import org.jackhuang.hellominecraft.utils.Event;
|
import org.jackhuang.hellominecraft.utils.Event;
|
||||||
@@ -372,7 +374,7 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget
|
|||||||
|
|
||||||
lblLauncherVisibility.setText(C.i18n("advancedsettings.launcher_visible")); // NOI18N
|
lblLauncherVisibility.setText(C.i18n("advancedsettings.launcher_visible")); // NOI18N
|
||||||
|
|
||||||
lblRunDirectory.setText(C.i18n("advancedsettings.run_directory")); // NOI18N
|
lblRunDirectory.setText(C.i18n("settings.run_directory")); // NOI18N
|
||||||
|
|
||||||
cboRunDirectory.setModel(new javax.swing.DefaultComboBoxModel(new String[] { C.I18N.getString("advancedsettings.game_dir.default"), C.I18N.getString("advancedsettings.game_dir.independent") }));
|
cboRunDirectory.setModel(new javax.swing.DefaultComboBoxModel(new String[] { C.I18N.getString("advancedsettings.game_dir.default"), C.I18N.getString("advancedsettings.game_dir.independent") }));
|
||||||
cboRunDirectory.addFocusListener(new java.awt.event.FocusAdapter() {
|
cboRunDirectory.addFocusListener(new java.awt.event.FocusAdapter() {
|
||||||
@@ -446,7 +448,7 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget
|
|||||||
.addComponent(lblDimensionX)
|
.addComponent(lblDimensionX)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
|
||||||
.addComponent(txtHeight, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
|
.addComponent(txtHeight, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
|
||||||
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 444, Short.MAX_VALUE)
|
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 410, Short.MAX_VALUE)
|
||||||
.addComponent(chkFullscreen))
|
.addComponent(chkFullscreen))
|
||||||
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlSettingsLayout.createSequentialGroup()
|
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlSettingsLayout.createSequentialGroup()
|
||||||
.addComponent(txtMaxMemory)
|
.addComponent(txtMaxMemory)
|
||||||
@@ -508,7 +510,7 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget
|
|||||||
|
|
||||||
tabVersionEdit.addTab(C.i18n("settings"), pnlSettings); // NOI18N
|
tabVersionEdit.addTab(C.i18n("settings"), pnlSettings); // NOI18N
|
||||||
|
|
||||||
chkDebug.setText(C.i18n("advencedsettings.debug_mode")); // NOI18N
|
chkDebug.setText(C.i18n("advancedsettings.debug_mode")); // NOI18N
|
||||||
chkDebug.addFocusListener(new java.awt.event.FocusAdapter() {
|
chkDebug.addFocusListener(new java.awt.event.FocusAdapter() {
|
||||||
public void focusLost(java.awt.event.FocusEvent evt) {
|
public void focusLost(java.awt.event.FocusEvent evt) {
|
||||||
chkDebugFocusLost(evt);
|
chkDebugFocusLost(evt);
|
||||||
@@ -915,7 +917,7 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget
|
|||||||
Settings.getInstance().setLast((String) cboProfiles.getSelectedItem());
|
Settings.getInstance().setLast((String) cboProfiles.getSelectedItem());
|
||||||
if (getProfile().service().version().getVersionCount() <= 0)
|
if (getProfile().service().version().getVersionCount() <= 0)
|
||||||
versionChanged(null);
|
versionChanged(null);
|
||||||
prepare(getProfile());
|
prepareProfile(getProfile());
|
||||||
}
|
}
|
||||||
}//GEN-LAST:event_cboProfilesItemStateChanged
|
}//GEN-LAST:event_cboProfilesItemStateChanged
|
||||||
|
|
||||||
@@ -974,45 +976,45 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget
|
|||||||
}//GEN-LAST:event_btnModifyMouseClicked
|
}//GEN-LAST:event_btnModifyMouseClicked
|
||||||
|
|
||||||
private void txtJavaArgsFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_txtJavaArgsFocusLost
|
private void txtJavaArgsFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_txtJavaArgsFocusLost
|
||||||
getProfile().setJavaArgs(txtJavaArgs.getText());
|
getProfile().getSelectedVersionSetting().setJavaArgs(txtJavaArgs.getText());
|
||||||
}//GEN-LAST:event_txtJavaArgsFocusLost
|
}//GEN-LAST:event_txtJavaArgsFocusLost
|
||||||
|
|
||||||
private void txtMinecraftArgsFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_txtMinecraftArgsFocusLost
|
private void txtMinecraftArgsFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_txtMinecraftArgsFocusLost
|
||||||
getProfile().setMinecraftArgs(txtMinecraftArgs.getText());
|
getProfile().getSelectedVersionSetting().setMinecraftArgs(txtMinecraftArgs.getText());
|
||||||
}//GEN-LAST:event_txtMinecraftArgsFocusLost
|
}//GEN-LAST:event_txtMinecraftArgsFocusLost
|
||||||
|
|
||||||
private void txtPermSizeFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_txtPermSizeFocusLost
|
private void txtPermSizeFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_txtPermSizeFocusLost
|
||||||
getProfile().setPermSize(txtPermSize.getText());
|
getProfile().getSelectedVersionSetting().setPermSize(txtPermSize.getText());
|
||||||
}//GEN-LAST:event_txtPermSizeFocusLost
|
}//GEN-LAST:event_txtPermSizeFocusLost
|
||||||
|
|
||||||
private void chkDebugFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_chkDebugFocusLost
|
private void chkDebugFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_chkDebugFocusLost
|
||||||
getProfile().setDebug(chkDebug.isSelected());
|
getProfile().getSelectedVersionSetting().setDebug(chkDebug.isSelected());
|
||||||
}//GEN-LAST:event_chkDebugFocusLost
|
}//GEN-LAST:event_chkDebugFocusLost
|
||||||
|
|
||||||
private void chkNoJVMArgsFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_chkNoJVMArgsFocusLost
|
private void chkNoJVMArgsFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_chkNoJVMArgsFocusLost
|
||||||
getProfile().setNoJVMArgs(chkNoJVMArgs.isSelected());
|
getProfile().getSelectedVersionSetting().setNoJVMArgs(chkNoJVMArgs.isSelected());
|
||||||
}//GEN-LAST:event_chkNoJVMArgsFocusLost
|
}//GEN-LAST:event_chkNoJVMArgsFocusLost
|
||||||
|
|
||||||
private void chkCancelWrapperFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_chkCancelWrapperFocusLost
|
private void chkCancelWrapperFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_chkCancelWrapperFocusLost
|
||||||
getProfile().setCanceledWrapper(chkCancelWrapper.isSelected());
|
getProfile().getSelectedVersionSetting().setCanceledWrapper(chkCancelWrapper.isSelected());
|
||||||
}//GEN-LAST:event_chkCancelWrapperFocusLost
|
}//GEN-LAST:event_chkCancelWrapperFocusLost
|
||||||
|
|
||||||
private void txtPrecalledCommandFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_txtPrecalledCommandFocusLost
|
private void txtPrecalledCommandFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_txtPrecalledCommandFocusLost
|
||||||
getProfile().setPrecalledCommand(txtPrecalledCommand.getText());
|
getProfile().getSelectedVersionSetting().setPrecalledCommand(txtPrecalledCommand.getText());
|
||||||
}//GEN-LAST:event_txtPrecalledCommandFocusLost
|
}//GEN-LAST:event_txtPrecalledCommandFocusLost
|
||||||
|
|
||||||
private void txtServerIPFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_txtServerIPFocusLost
|
private void txtServerIPFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_txtServerIPFocusLost
|
||||||
getProfile().setServerIp(txtServerIP.getText());
|
getProfile().getSelectedVersionSetting().setServerIp(txtServerIP.getText());
|
||||||
}//GEN-LAST:event_txtServerIPFocusLost
|
}//GEN-LAST:event_txtServerIPFocusLost
|
||||||
|
|
||||||
private void cboRunDirectoryFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_cboRunDirectoryFocusLost
|
private void cboRunDirectoryFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_cboRunDirectoryFocusLost
|
||||||
if (cboRunDirectory.getSelectedIndex() >= 0)
|
if (cboRunDirectory.getSelectedIndex() >= 0)
|
||||||
getProfile().setGameDirType(GameDirType.values()[cboRunDirectory.getSelectedIndex()]);
|
getProfile().getSelectedVersionSetting().setGameDirType(GameDirType.values()[cboRunDirectory.getSelectedIndex()]);
|
||||||
}//GEN-LAST:event_cboRunDirectoryFocusLost
|
}//GEN-LAST:event_cboRunDirectoryFocusLost
|
||||||
|
|
||||||
private void cboLauncherVisibilityFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_cboLauncherVisibilityFocusLost
|
private void cboLauncherVisibilityFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_cboLauncherVisibilityFocusLost
|
||||||
if (cboLauncherVisibility.getSelectedIndex() >= 0)
|
if (cboLauncherVisibility.getSelectedIndex() >= 0)
|
||||||
getProfile().setLauncherVisibility(LauncherVisibility.values()[cboLauncherVisibility.getSelectedIndex()]);
|
getProfile().getSelectedVersionSetting().setLauncherVisibility(LauncherVisibility.values()[cboLauncherVisibility.getSelectedIndex()]);
|
||||||
}//GEN-LAST:event_cboLauncherVisibilityFocusLost
|
}//GEN-LAST:event_cboLauncherVisibilityFocusLost
|
||||||
|
|
||||||
private void btnDownloadAllAssetsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnDownloadAllAssetsActionPerformed
|
private void btnDownloadAllAssetsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnDownloadAllAssetsActionPerformed
|
||||||
@@ -1021,23 +1023,23 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget
|
|||||||
}//GEN-LAST:event_btnDownloadAllAssetsActionPerformed
|
}//GEN-LAST:event_btnDownloadAllAssetsActionPerformed
|
||||||
|
|
||||||
private void txtMaxMemoryFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_txtMaxMemoryFocusLost
|
private void txtMaxMemoryFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_txtMaxMemoryFocusLost
|
||||||
getProfile().setMaxMemory(txtMaxMemory.getText());
|
getProfile().getSelectedVersionSetting().setMaxMemory(txtMaxMemory.getText());
|
||||||
}//GEN-LAST:event_txtMaxMemoryFocusLost
|
}//GEN-LAST:event_txtMaxMemoryFocusLost
|
||||||
|
|
||||||
private void txtJavaDirFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_txtJavaDirFocusLost
|
private void txtJavaDirFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_txtJavaDirFocusLost
|
||||||
getProfile().setJavaDir(txtJavaDir.getText());
|
getProfile().getSelectedVersionSetting().setJavaDir(txtJavaDir.getText());
|
||||||
}//GEN-LAST:event_txtJavaDirFocusLost
|
}//GEN-LAST:event_txtJavaDirFocusLost
|
||||||
|
|
||||||
private void chkFullscreenFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_chkFullscreenFocusLost
|
private void chkFullscreenFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_chkFullscreenFocusLost
|
||||||
getProfile().setFullscreen(chkFullscreen.isSelected());
|
getProfile().getSelectedVersionSetting().setFullscreen(chkFullscreen.isSelected());
|
||||||
}//GEN-LAST:event_chkFullscreenFocusLost
|
}//GEN-LAST:event_chkFullscreenFocusLost
|
||||||
|
|
||||||
private void txtHeightFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_txtHeightFocusLost
|
private void txtHeightFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_txtHeightFocusLost
|
||||||
getProfile().setHeight(txtHeight.getText());
|
getProfile().getSelectedVersionSetting().setHeight(txtHeight.getText());
|
||||||
}//GEN-LAST:event_txtHeightFocusLost
|
}//GEN-LAST:event_txtHeightFocusLost
|
||||||
|
|
||||||
private void txtWidthFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_txtWidthFocusLost
|
private void txtWidthFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_txtWidthFocusLost
|
||||||
getProfile().setWidth(txtWidth.getText());
|
getProfile().getSelectedVersionSetting().setWidth(txtWidth.getText());
|
||||||
}//GEN-LAST:event_txtWidthFocusLost
|
}//GEN-LAST:event_txtWidthFocusLost
|
||||||
|
|
||||||
private void txtGameDirFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_txtGameDirFocusLost
|
private void txtGameDirFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_txtGameDirFocusLost
|
||||||
@@ -1061,7 +1063,7 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget
|
|||||||
try {
|
try {
|
||||||
String path = fc.getSelectedFile().getCanonicalPath();
|
String path = fc.getSelectedFile().getCanonicalPath();
|
||||||
txtJavaDir.setText(path);
|
txtJavaDir.setText(path);
|
||||||
getProfile().setJavaDir(txtJavaDir.getText());
|
getProfile().getSelectedVersionSetting().setJavaDir(txtJavaDir.getText());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
HMCLog.warn("Failed to set java path.", e);
|
HMCLog.warn("Failed to set java path.", e);
|
||||||
MessageBox.Show(C.i18n("ui.label.failed_set") + e.getMessage());
|
MessageBox.Show(C.i18n("ui.label.failed_set") + e.getMessage());
|
||||||
@@ -1074,9 +1076,9 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget
|
|||||||
int idx = cboJava.getSelectedIndex();
|
int idx = cboJava.getSelectedIndex();
|
||||||
if (idx != -1) {
|
if (idx != -1) {
|
||||||
Java j = Java.JAVA.get(idx);
|
Java j = Java.JAVA.get(idx);
|
||||||
getProfile().setJava(j);
|
getProfile().getSelectedVersionSetting().setJava(j);
|
||||||
txtJavaDir.setEnabled(idx == 1);
|
txtJavaDir.setEnabled(idx == 1);
|
||||||
txtJavaDir.setText(j.getHome() == null ? getProfile().getSettingsJavaDir() : j.getJava());
|
txtJavaDir.setText(j.getHome() == null ? getProfile().getSelectedVersionSetting().getSettingsJavaDir() : j.getJava());
|
||||||
}
|
}
|
||||||
}//GEN-LAST:event_cboJavaItemStateChanged
|
}//GEN-LAST:event_cboJavaItemStateChanged
|
||||||
|
|
||||||
@@ -1171,7 +1173,7 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget
|
|||||||
isLoading = true;
|
isLoading = true;
|
||||||
cboProfiles.setSelectedIndex(index);
|
cboProfiles.setSelectedIndex(index);
|
||||||
isLoading = false;
|
isLoading = false;
|
||||||
prepare(getProfile());
|
prepareProfile(getProfile());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1179,15 +1181,26 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget
|
|||||||
return Settings.getProfile((String) cboProfiles.getSelectedItem());
|
return Settings.getProfile((String) cboProfiles.getSelectedItem());
|
||||||
}
|
}
|
||||||
|
|
||||||
void prepare(Profile profile) {
|
final String mcVersion() {
|
||||||
|
return getProfile().getSelectedVersion();
|
||||||
|
}
|
||||||
|
|
||||||
|
void prepareProfile(Profile profile) {
|
||||||
if (profile == null)
|
if (profile == null)
|
||||||
return;
|
return;
|
||||||
profile.selectedVersionChangedEvent.register(this);
|
profile.selectedVersionChangedEvent.register(this);
|
||||||
|
txtGameDir.setText(profile.getGameDir());
|
||||||
|
|
||||||
|
loadVersions();
|
||||||
|
}
|
||||||
|
|
||||||
|
void prepareVersionSetting(VersionSetting profile) {
|
||||||
|
if (profile == null)
|
||||||
|
return;
|
||||||
txtWidth.setText(profile.getWidth());
|
txtWidth.setText(profile.getWidth());
|
||||||
txtHeight.setText(profile.getHeight());
|
txtHeight.setText(profile.getHeight());
|
||||||
txtMaxMemory.setText(profile.getMaxMemory());
|
txtMaxMemory.setText(profile.getMaxMemory());
|
||||||
txtPermSize.setText(profile.getPermSize());
|
txtPermSize.setText(profile.getPermSize());
|
||||||
txtGameDir.setText(profile.getGameDir());
|
|
||||||
txtJavaArgs.setText(profile.getJavaArgs());
|
txtJavaArgs.setText(profile.getJavaArgs());
|
||||||
txtMinecraftArgs.setText(profile.getMinecraftArgs());
|
txtMinecraftArgs.setText(profile.getMinecraftArgs());
|
||||||
txtJavaDir.setText(profile.getSettingsJavaDir());
|
txtJavaDir.setText(profile.getSettingsJavaDir());
|
||||||
@@ -1204,8 +1217,6 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget
|
|||||||
cboJava.setSelectedIndex(profile.getJavaIndexInAllJavas());
|
cboJava.setSelectedIndex(profile.getJavaIndexInAllJavas());
|
||||||
isLoading = false;
|
isLoading = false;
|
||||||
cboJavaItemStateChanged(new ItemEvent(cboJava, 0, cboJava.getSelectedItem(), ItemEvent.SELECTED));
|
cboJavaItemStateChanged(new ItemEvent(cboJava, 0, cboJava.getSelectedItem(), ItemEvent.SELECTED));
|
||||||
|
|
||||||
loadVersions();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void loadVersions() {
|
void loadVersions() {
|
||||||
@@ -1224,11 +1235,7 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget
|
|||||||
cboVersions.setSelectedIndex(index);
|
cboVersions.setSelectedIndex(index);
|
||||||
|
|
||||||
reloadMods();
|
reloadMods();
|
||||||
|
prepareVersionSetting(((DefaultMinecraftService) getProfile().service()).getVersionSetting(getProfile().getSelectedVersion()));
|
||||||
loadMinecraftVersion();
|
|
||||||
}
|
|
||||||
|
|
||||||
void loadMinecraftVersion() {
|
|
||||||
loadMinecraftVersion(getProfile().getSelectedVersion());
|
loadMinecraftVersion(getProfile().getSelectedVersion());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1309,6 +1316,7 @@ public final class GameSettingsPanel extends AnimatedPanel implements DropTarget
|
|||||||
// </editor-fold>
|
// </editor-fold>
|
||||||
public void versionChanged(String version) {
|
public void versionChanged(String version) {
|
||||||
this.mcVersion = version;
|
this.mcVersion = version;
|
||||||
|
prepareVersionSetting(getProfile().getVersionSetting(version));
|
||||||
for (InstallerPanel p : installerPanels)
|
for (InstallerPanel p : installerPanels)
|
||||||
p.loadVersions();
|
p.loadVersions();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -319,10 +319,10 @@ public class MainPagePanel extends AnimatedPanel implements Event<String> {
|
|||||||
}//GEN-LAST:event_cboProfilesItemStateChanged
|
}//GEN-LAST:event_cboProfilesItemStateChanged
|
||||||
|
|
||||||
private void cboVersionsItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cboVersionsItemStateChanged
|
private void cboVersionsItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_cboVersionsItemStateChanged
|
||||||
if (isLoading || evt.getStateChange() != ItemEvent.SELECTED || cboVersions.getSelectedIndex() < 0 || StrUtils.isBlank((String) cboVersions.getSelectedItem()) || getCurrentProfile() == null)
|
if (isLoading || evt.getStateChange() != ItemEvent.SELECTED || cboVersions.getSelectedIndex() < 0 || StrUtils.isBlank((String) cboVersions.getSelectedItem()) || getProfile() == null)
|
||||||
return;
|
return;
|
||||||
String mcv = (String) cboVersions.getSelectedItem();
|
String mcv = (String) cboVersions.getSelectedItem();
|
||||||
getCurrentProfile().setSelectedMinecraftVersion(mcv);
|
getProfile().setSelectedMinecraftVersion(mcv);
|
||||||
}//GEN-LAST:event_cboVersionsItemStateChanged
|
}//GEN-LAST:event_cboVersionsItemStateChanged
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -379,18 +379,18 @@ public class MainPagePanel extends AnimatedPanel implements Event<String> {
|
|||||||
|
|
||||||
// <editor-fold defaultstate="collapsed" desc="Game Launch">
|
// <editor-fold defaultstate="collapsed" desc="Game Launch">
|
||||||
void genLaunchCode(final Consumer<GameLauncher> listener) {
|
void genLaunchCode(final Consumer<GameLauncher> listener) {
|
||||||
if (isLaunching || getCurrentProfile() == null)
|
if (isLaunching || getProfile() == null)
|
||||||
return;
|
return;
|
||||||
isLaunching = true;
|
isLaunching = true;
|
||||||
HMCLog.log("Start generating launching command...");
|
HMCLog.log("Start generating launching command...");
|
||||||
File file = getCurrentProfile().getCanonicalGameDirFile();
|
File file = getProfile().getCanonicalGameDirFile();
|
||||||
if (!file.exists()) {
|
if (!file.exists()) {
|
||||||
HMCLog.warn("The minecraft path is wrong, please check it yourself.");
|
HMCLog.warn("The minecraft path is wrong, please check it yourself.");
|
||||||
MessageBox.ShowLocalized("minecraft.wrong_path");
|
MessageBox.ShowLocalized("minecraft.wrong_path");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final String name = (String) cboProfiles.getSelectedItem();
|
final String name = (String) cboProfiles.getSelectedItem();
|
||||||
if (StrUtils.isBlank(name) || getCurrentProfile().getSelectedVersion() == null) {
|
if (StrUtils.isBlank(name) || getProfile().getSelectedVersion() == null) {
|
||||||
HMCLog.warn("There's no selected version, rechoose a version.");
|
HMCLog.warn("There's no selected version, rechoose a version.");
|
||||||
MessageBox.ShowLocalized("minecraft.no_selected_version");
|
MessageBox.ShowLocalized("minecraft.no_selected_version");
|
||||||
return;
|
return;
|
||||||
@@ -408,8 +408,8 @@ public class MainPagePanel extends AnimatedPanel implements Event<String> {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
Thread.currentThread().setName("Game Launcher");
|
Thread.currentThread().setName("Game Launcher");
|
||||||
DefaultGameLauncher gl = new DefaultGameLauncher(getCurrentProfile().createLaunchOptions(), getCurrentProfile().service(), li, l);
|
DefaultGameLauncher gl = new DefaultGameLauncher(getProfile().getSelectedVersionSetting().createLaunchOptions(getProfile().getCanonicalGameDirFile()), getProfile().service(), li, l);
|
||||||
gl.setTag(getCurrentProfile().getLauncherVisibility());
|
gl.setTag(getProfile().getSelectedVersionSetting().getLauncherVisibility());
|
||||||
gl.successEvent.register((sender, s) -> {
|
gl.successEvent.register((sender, s) -> {
|
||||||
isLaunching = false;
|
isLaunching = false;
|
||||||
return true;
|
return true;
|
||||||
@@ -478,10 +478,10 @@ public class MainPagePanel extends AnimatedPanel implements Event<String> {
|
|||||||
isLoading = true;
|
isLoading = true;
|
||||||
cboVersions.removeAllItems();
|
cboVersions.removeAllItems();
|
||||||
int index = 0, i = 0;
|
int index = 0, i = 0;
|
||||||
getCurrentProfile().selectedVersionChangedEvent.register(this);
|
getProfile().selectedVersionChangedEvent.register(this);
|
||||||
getCurrentProfile().service().version().refreshVersions();
|
getProfile().service().version().refreshVersions();
|
||||||
String selVersion = getCurrentProfile().getSelectedVersion();
|
String selVersion = getProfile().getSelectedVersion();
|
||||||
if (getCurrentProfile().service().version().getVersions().isEmpty()) {
|
if (getProfile().service().version().getVersions().isEmpty()) {
|
||||||
if (!showedNoVersion)
|
if (!showedNoVersion)
|
||||||
SwingUtilities.invokeLater(() -> {
|
SwingUtilities.invokeLater(() -> {
|
||||||
if (MessageBox.Show(C.i18n("mainwindow.no_version"), MessageBox.YES_NO_OPTION) == MessageBox.YES_OPTION) {
|
if (MessageBox.Show(C.i18n("mainwindow.no_version"), MessageBox.YES_NO_OPTION) == MessageBox.YES_OPTION) {
|
||||||
@@ -491,7 +491,7 @@ public class MainPagePanel extends AnimatedPanel implements Event<String> {
|
|||||||
showedNoVersion = true;
|
showedNoVersion = true;
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
for (MinecraftVersion mcVersion : getCurrentProfile().service().version().getVersions()) {
|
for (MinecraftVersion mcVersion : getProfile().service().version().getVersions()) {
|
||||||
if (mcVersion.hidden)
|
if (mcVersion.hidden)
|
||||||
continue;
|
continue;
|
||||||
cboVersions.addItem(mcVersion.id);
|
cboVersions.addItem(mcVersion.id);
|
||||||
@@ -628,7 +628,7 @@ public class MainPagePanel extends AnimatedPanel implements Event<String> {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Profile getCurrentProfile() {
|
public Profile getProfile() {
|
||||||
return Settings.getProfile((String) cboProfiles.getSelectedItem());
|
return Settings.getProfile((String) cboProfiles.getSelectedItem());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -46,11 +46,13 @@ public abstract class OverridableSwingWorker<T> extends SwingWorker<Void, T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public OverridableSwingWorker reg(Consumer<T> c) {
|
public OverridableSwingWorker reg(Consumer<T> c) {
|
||||||
|
Utils.requireNonNull(c);
|
||||||
processListeners.add(c);
|
processListeners.add(c);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public OverridableSwingWorker regDone(Runnable c) {
|
public OverridableSwingWorker regDone(Runnable c) {
|
||||||
|
Utils.requireNonNull(c);
|
||||||
doneListeners.add(c);
|
doneListeners.add(c);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ public final class UpdateChecker implements IUpdateChecker {
|
|||||||
VersionNumber value;
|
VersionNumber value;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public OverridableSwingWorker<VersionNumber> process(boolean showMessage) {
|
public OverridableSwingWorker<VersionNumber> process(final boolean showMessage) {
|
||||||
return new OverridableSwingWorker() {
|
return new OverridableSwingWorker() {
|
||||||
@Override
|
@Override
|
||||||
protected void work() throws Exception {
|
protected void work() throws Exception {
|
||||||
|
|||||||
@@ -87,11 +87,11 @@ public abstract class Task {
|
|||||||
|
|
||||||
public abstract String getInfo();
|
public abstract String getInfo();
|
||||||
|
|
||||||
public Collection<Task> getDependTasks() {
|
public Collection<? extends Task> getDependTasks() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Collection<Task> getAfterTasks() {
|
public Collection<? extends Task> getAfterTasks() {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -79,15 +79,15 @@ public class TaskList extends Thread {
|
|||||||
public void run() {
|
public void run() {
|
||||||
executeTask(task);
|
executeTask(task);
|
||||||
s.remove(this);
|
s.remove(this);
|
||||||
threadPool.remove(this);
|
THREAD_POOL.remove(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static final Set<InvokeThread> threadPool = Collections.synchronizedSet(new HashSet<InvokeThread>());
|
static final Set<InvokeThread> THREAD_POOL = Collections.synchronizedSet(new HashSet<InvokeThread>());
|
||||||
static final Set<Task> taskPool = Collections.synchronizedSet(new HashSet<Task>());
|
static final Set<Task> TASK_POOL = Collections.synchronizedSet(new HashSet<Task>());
|
||||||
|
|
||||||
private void processTasks(Collection<Task> c) {
|
private void processTasks(Collection<? extends Task> c) {
|
||||||
if (c == null)
|
if (c == null)
|
||||||
return;
|
return;
|
||||||
this.totTask += c.size();
|
this.totTask += c.size();
|
||||||
@@ -95,7 +95,7 @@ public class TaskList extends Thread {
|
|||||||
for (Task t2 : c) {
|
for (Task t2 : c) {
|
||||||
t2.setParallelExecuting(true);
|
t2.setParallelExecuting(true);
|
||||||
InvokeThread thread = new InvokeThread(t2, runningThread);
|
InvokeThread thread = new InvokeThread(t2, runningThread);
|
||||||
threadPool.add(thread);
|
THREAD_POOL.add(thread);
|
||||||
runningThread.add(thread);
|
runningThread.add(thread);
|
||||||
thread.start();
|
thread.start();
|
||||||
}
|
}
|
||||||
@@ -147,7 +147,7 @@ public class TaskList extends Thread {
|
|||||||
public void run() {
|
public void run() {
|
||||||
Thread.currentThread().setName("TaskList");
|
Thread.currentThread().setName("TaskList");
|
||||||
|
|
||||||
threadPool.clear();
|
THREAD_POOL.clear();
|
||||||
totTask = taskQueue.size();
|
totTask = taskQueue.size();
|
||||||
while (!taskQueue.isEmpty())
|
while (!taskQueue.isEmpty())
|
||||||
executeTask(taskQueue.remove(0));
|
executeTask(taskQueue.remove(0));
|
||||||
@@ -162,12 +162,12 @@ public class TaskList extends Thread {
|
|||||||
|
|
||||||
public void abort() {
|
public void abort() {
|
||||||
shouldContinue = false;
|
shouldContinue = false;
|
||||||
while (!threadPool.isEmpty())
|
while (!THREAD_POOL.isEmpty())
|
||||||
synchronized (threadPool) {
|
synchronized (THREAD_POOL) {
|
||||||
InvokeThread it = threadPool.iterator().next();
|
InvokeThread it = THREAD_POOL.iterator().next();
|
||||||
if (!it.task.abort())
|
if (!it.task.abort())
|
||||||
it.interrupt();
|
it.interrupt();
|
||||||
threadPool.remove(it);
|
THREAD_POOL.remove(it);
|
||||||
}
|
}
|
||||||
this.interrupt();
|
this.interrupt();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -199,7 +199,9 @@ public class NavButtonManager implements ActionListener {
|
|||||||
final boolean enableNext = nextStep != null && canContinue && problem == null && !isDeferredResult;
|
final boolean enableNext = nextStep != null && canContinue && problem == null && !isDeferredResult;
|
||||||
final boolean enablePrevious = wizard.getPreviousStep() != null && !isDeferredResult;
|
final boolean enablePrevious = wizard.getPreviousStep() != null && !isDeferredResult;
|
||||||
|
|
||||||
final Runnable runnable = () -> {
|
final Runnable runnable = new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
next.setEnabled(enableNext);
|
next.setEnabled(enableNext);
|
||||||
prev.setEnabled(enablePrevious);
|
prev.setEnabled(enablePrevious);
|
||||||
finish.setEnabled(enableFinish);
|
finish.setEnabled(enableFinish);
|
||||||
@@ -213,6 +215,7 @@ public class NavButtonManager implements ActionListener {
|
|||||||
root.setDefaultButton(prev);
|
root.setDefaultButton(prev);
|
||||||
else
|
else
|
||||||
root.setDefaultButton(null);
|
root.setDefaultButton(null);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if (EventQueue.isDispatchThread())
|
if (EventQueue.isDispatchThread())
|
||||||
@@ -263,7 +266,9 @@ public class NavButtonManager implements ActionListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void deferredResultFailed(final boolean canGoBack) {
|
void deferredResultFailed(final boolean canGoBack) {
|
||||||
final Runnable runnable = () -> {
|
final Runnable runnable = new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
if (!canGoBack)
|
if (!canGoBack)
|
||||||
getCancel().setText(getCloseString());
|
getCancel().setText(getCloseString());
|
||||||
getPrev().setEnabled(true);
|
getPrev().setEnabled(true);
|
||||||
@@ -275,6 +280,7 @@ public class NavButtonManager implements ActionListener {
|
|||||||
// no action
|
// no action
|
||||||
} else
|
} else
|
||||||
deferredStatus = DEFERRED_FAILED + deferredStatus;
|
deferredStatus = DEFERRED_FAILED + deferredStatus;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
if (EventQueue.isDispatchThread())
|
if (EventQueue.isDispatchThread())
|
||||||
runnable.run();
|
runnable.run();
|
||||||
@@ -596,7 +602,9 @@ public class NavButtonManager implements ActionListener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void navigabilityChanged(final Wizard wizard) {
|
public void navigabilityChanged(final Wizard wizard) {
|
||||||
final Runnable runnable = () -> {
|
final Runnable runnable = new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
if (wizard.isBusy()) {
|
if (wizard.isBusy()) {
|
||||||
next.setEnabled(false);
|
next.setEnabled(false);
|
||||||
prev.setEnabled(false);
|
prev.setEnabled(false);
|
||||||
@@ -612,6 +620,7 @@ public class NavButtonManager implements ActionListener {
|
|||||||
configureNavigationButtons(wizard, prev, next, finish);
|
configureNavigationButtons(wizard, prev, next, finish);
|
||||||
|
|
||||||
parent.updateProblem();
|
parent.updateProblem();
|
||||||
|
}
|
||||||
};
|
};
|
||||||
if (EventQueue.isDispatchThread())
|
if (EventQueue.isDispatchThread())
|
||||||
runnable.run();
|
runnable.run();
|
||||||
|
|||||||
@@ -29,7 +29,6 @@ import java.awt.IllegalComponentStateException;
|
|||||||
import java.awt.Insets;
|
import java.awt.Insets;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URL;
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import javax.accessibility.Accessible;
|
import javax.accessibility.Accessible;
|
||||||
@@ -119,34 +118,6 @@ public class InstructionsPanelImpl extends JComponent implements WizardObserver,
|
|||||||
}
|
}
|
||||||
|
|
||||||
public InstructionsPanelImpl(BufferedImage img, Wizard wizard) {
|
public InstructionsPanelImpl(BufferedImage img, Wizard wizard) {
|
||||||
if (img == null)
|
|
||||||
//In the event of classloader issues, also have a way to get
|
|
||||||
//the image from UIManager - slightly more portable for large
|
|
||||||
//apps
|
|
||||||
img = (BufferedImage) UIManager.get("wizard.sidebar.image");
|
|
||||||
|
|
||||||
String imgStr = System.getProperty("wizard.sidebar.image");
|
|
||||||
//image has not been loaded and user wishes to supply their own image
|
|
||||||
if (img == null && imgStr != null) {
|
|
||||||
//get an URL, works for jars
|
|
||||||
ClassLoader cl = this.getClass().getClassLoader();
|
|
||||||
URL url = cl.getResource(imgStr);
|
|
||||||
//successfully parsed the URL
|
|
||||||
if (url != null)
|
|
||||||
try {
|
|
||||||
img = ImageIO.read(url);
|
|
||||||
} catch (IOException ioe) {
|
|
||||||
System.err.println("Could not load wizard image "
|
|
||||||
+ ioe.getMessage());
|
|
||||||
System.setProperty("wizard.sidebar.image", null);
|
|
||||||
img = null; //error loading img, set to null to use default
|
|
||||||
}
|
|
||||||
else { //URL was not successfully parsed, set img to null to use default
|
|
||||||
System.err.println("Bad URL for wizard image " + imgStr);
|
|
||||||
System.setProperty("wizard.sidebar.image", null);
|
|
||||||
img = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (img == null)
|
if (img == null)
|
||||||
try {
|
try {
|
||||||
img = ImageIO.read(InstructionsPanelImpl.class.getResourceAsStream(
|
img = ImageIO.read(InstructionsPanelImpl.class.getResourceAsStream(
|
||||||
|
|||||||
0
HMCLAPI/src/main/java/org/tukaani/xz/CountingInputStream.java
Executable file → Normal file
0
HMCLAPI/src/main/java/org/tukaani/xz/CountingInputStream.java
Executable file → Normal file
0
HMCLAPI/src/main/java/org/tukaani/xz/CountingOutputStream.java
Executable file → Normal file
0
HMCLAPI/src/main/java/org/tukaani/xz/CountingOutputStream.java
Executable file → Normal file
@@ -198,9 +198,10 @@ settings.cannot_remove_default_config=\u4e0d\u80fd\u5220\u9664\u9ed8\u8ba4\u914d
|
|||||||
settings.max_memory=\u6700\u5927\u5185\u5b58/MB
|
settings.max_memory=\u6700\u5927\u5185\u5b58/MB
|
||||||
settings.java_dir=Java\u8def\u5f84
|
settings.java_dir=Java\u8def\u5f84
|
||||||
settings.game_directory=\u6e38\u620f\u8def\u5f84
|
settings.game_directory=\u6e38\u620f\u8def\u5f84
|
||||||
settings.dimension=\u5206\u8fa8\u7387
|
settings.dimension=\u6e38\u620f\u7a97\u53e3\u5206\u8fa8\u7387
|
||||||
settings.fullscreen=\u5168\u5c4f
|
settings.fullscreen=\u5168\u5c4f
|
||||||
settings.update_version=\u66f4\u65b0\u7248\u672c\u6587\u4ef6
|
settings.update_version=\u66f4\u65b0\u7248\u672c\u6587\u4ef6
|
||||||
|
settings.run_directory=\u8fd0\u884c\u8def\u5f84(\u7248\u672c\u9694\u79bb)
|
||||||
settings.physical_memory=\u7269\u7406\u5185\u5b58\u5927\u5c0f
|
settings.physical_memory=\u7269\u7406\u5185\u5b58\u5927\u5c0f
|
||||||
settings.choose_javapath=\u9009\u62e9Java\u8def\u5f84
|
settings.choose_javapath=\u9009\u62e9Java\u8def\u5f84
|
||||||
settings.default=\u9ed8\u8ba4
|
settings.default=\u9ed8\u8ba4
|
||||||
@@ -237,8 +238,7 @@ mods.default_information=<html><font color=#c0392b>\u5b89\u88c5Mod\u524d\u4f60\u
|
|||||||
|
|
||||||
advancedsettings=\u9ad8\u7ea7\u8bbe\u7f6e
|
advancedsettings=\u9ad8\u7ea7\u8bbe\u7f6e
|
||||||
advancedsettings.launcher_visible=\u542f\u52a8\u5668\u53ef\u89c1\u6027
|
advancedsettings.launcher_visible=\u542f\u52a8\u5668\u53ef\u89c1\u6027
|
||||||
advancedsettings.run_directory=\u8fd0\u884c\u8def\u5f84
|
advancedsettings.debug_mode=\u8c03\u8bd5\u6a21\u5f0f
|
||||||
advencedsettings.debug_mode=\u8c03\u8bd5\u6a21\u5f0f
|
|
||||||
advancedsettings.java_permanent_generation_space=\u5185\u5b58\u6c38\u4e45\u4fdd\u5b58\u533a\u57df(\u4e0d\u5fc5\u586b\u5199,MB)
|
advancedsettings.java_permanent_generation_space=\u5185\u5b58\u6c38\u4e45\u4fdd\u5b58\u533a\u57df(\u4e0d\u5fc5\u586b\u5199,MB)
|
||||||
advancedsettings.jvm_args=Java\u865a\u62df\u673a\u53c2\u6570(\u4e0d\u5fc5\u586b\u5199)
|
advancedsettings.jvm_args=Java\u865a\u62df\u673a\u53c2\u6570(\u4e0d\u5fc5\u586b\u5199)
|
||||||
advancedsettings.Minecraft_arguments=Minecraft\u989d\u5916\u53c2\u6570(\u4e0d\u5fc5\u586b\u5199)
|
advancedsettings.Minecraft_arguments=Minecraft\u989d\u5916\u53c2\u6570(\u4e0d\u5fc5\u586b\u5199)
|
||||||
@@ -369,3 +369,4 @@ wizard.close_mnemonic=\u5173
|
|||||||
wizard.summary=\u6982\u8981
|
wizard.summary=\u6982\u8981
|
||||||
wizard.failed=\u5931\u8d25
|
wizard.failed=\u5931\u8d25
|
||||||
wizard.steps=\u6b65\u9aa4
|
wizard.steps=\u6b65\u9aa4
|
||||||
|
advancedsettings.debug_mode=\u8c03\u8bd5\u6a21\u5f0f
|
||||||
|
|||||||
@@ -197,10 +197,11 @@ settings.manage=Manage
|
|||||||
settings.cannot_remove_default_config=Cannot remove the default configution.
|
settings.cannot_remove_default_config=Cannot remove the default configution.
|
||||||
settings.max_memory=Max Memory/MB
|
settings.max_memory=Max Memory/MB
|
||||||
settings.java_dir=Java Dir
|
settings.java_dir=Java Dir
|
||||||
settings.game_directory=Game Dir
|
settings.game_directory=Game Directory
|
||||||
settings.dimension=Dimension
|
settings.dimension=Game Window Dimension
|
||||||
settings.fullscreen=Fullscreen
|
settings.fullscreen=Fullscreen
|
||||||
settings.update_version=Update version json.
|
settings.update_version=Update version json.
|
||||||
|
settings.run_directory=Run Directory(Version Isolation)
|
||||||
settings.physical_memory=Physical Memory Size
|
settings.physical_memory=Physical Memory Size
|
||||||
settings.choose_javapath=Choose Java Directory.
|
settings.choose_javapath=Choose Java Directory.
|
||||||
settings.default=Default
|
settings.default=Default
|
||||||
@@ -237,8 +238,7 @@ mods.default_information=<html><font color=#c0392b>Please ensure that you have i
|
|||||||
|
|
||||||
advancedsettings=Advanced
|
advancedsettings=Advanced
|
||||||
advancedsettings.launcher_visible=Launcher Visibility
|
advancedsettings.launcher_visible=Launcher Visibility
|
||||||
advancedsettings.run_directory=Run Directory
|
advancedsettings.debug_mode=Debug Mode
|
||||||
advencedsettings.debug_mode=Debug Mode
|
|
||||||
advancedsettings.java_permanent_generation_space=Permanent Generation Space/MB
|
advancedsettings.java_permanent_generation_space=Permanent Generation Space/MB
|
||||||
advancedsettings.jvm_args=Java VM Arguments
|
advancedsettings.jvm_args=Java VM Arguments
|
||||||
advancedsettings.Minecraft_arguments=Minecraft Arguments
|
advancedsettings.Minecraft_arguments=Minecraft Arguments
|
||||||
|
|||||||
@@ -198,9 +198,10 @@ settings.cannot_remove_default_config=\u4e0d\u80fd\u522a\u9664\u9ed8\u8a8d\u914d
|
|||||||
settings.max_memory=\u6700\u5927\u5167\u5b58\uff08MB\uff09
|
settings.max_memory=\u6700\u5927\u5167\u5b58\uff08MB\uff09
|
||||||
settings.java_dir=Java\u8def\u5f91
|
settings.java_dir=Java\u8def\u5f91
|
||||||
settings.game_directory=\u904a\u6232\u8def\u5f91
|
settings.game_directory=\u904a\u6232\u8def\u5f91
|
||||||
settings.dimension=\u5206\u8fa8\u7387
|
settings.dimension=\u6e38\u620f\u7a97\u53e3\u5206\u8fa8\u7387
|
||||||
settings.fullscreen=\u5168\u5c4f
|
settings.fullscreen=\u5168\u5c4f
|
||||||
settings.update_version=\u66f4\u65b0\u7248\u672c\u8cc7\u6599
|
settings.update_version=\u66f4\u65b0\u7248\u672c\u8cc7\u6599
|
||||||
|
settings.run_directory=\u904b\u884c\u8def\u5f91(\u7248\u672c\u9694\u96e2)
|
||||||
settings.physical_memory=\u7269\u7406\u5185\u5b58\u5927\u5c0f
|
settings.physical_memory=\u7269\u7406\u5185\u5b58\u5927\u5c0f
|
||||||
settings.choose_javapath=\u9009\u62e9Java\u8def\u5f84
|
settings.choose_javapath=\u9009\u62e9Java\u8def\u5f84
|
||||||
settings.default=\u9ed8\u8a8d
|
settings.default=\u9ed8\u8a8d
|
||||||
@@ -237,8 +238,7 @@ mods.default_information=<html>\u60a8\u53ef\u4ee5\u62d6\u52a8mod\u5230\u5217\u88
|
|||||||
|
|
||||||
advancedsettings=\u9ad8\u7d1a\u8a2d\u5b9a
|
advancedsettings=\u9ad8\u7d1a\u8a2d\u5b9a
|
||||||
advancedsettings.launcher_visible=\u555f\u52d5\u5668\u53ef\u898b\u6027
|
advancedsettings.launcher_visible=\u555f\u52d5\u5668\u53ef\u898b\u6027
|
||||||
advancedsettings.run_directory=\u904b\u884c\u8def\u5f91
|
advancedsettings.debug_mode=\u8abf\u8a66\u6a21\u5f0f
|
||||||
advencedsettings.debug_mode=\u8abf\u8a66\u6a21\u5f0f
|
|
||||||
advancedsettings.java_permanent_generation_space=\u5167\u5b58\u6c38\u4e45\u4fdd\u5b58\u5340\u57df/MB
|
advancedsettings.java_permanent_generation_space=\u5167\u5b58\u6c38\u4e45\u4fdd\u5b58\u5340\u57df/MB
|
||||||
advancedsettings.jvm_args=Java\u865b\u64ec\u6a5f\u53c3\u6578(\u4e0d\u5fc5\u586b\u5beb)
|
advancedsettings.jvm_args=Java\u865b\u64ec\u6a5f\u53c3\u6578(\u4e0d\u5fc5\u586b\u5beb)
|
||||||
advancedsettings.Minecraft_arguments=Minecraft\u984d\u5916\u53c3\u6578(\u4e0d\u5fc5\u586b\u5beb)
|
advancedsettings.Minecraft_arguments=Minecraft\u984d\u5916\u53c3\u6578(\u4e0d\u5fc5\u586b\u5beb)
|
||||||
|
|||||||
@@ -198,10 +198,11 @@ settings.cannot_remove_default_config=\u4e0d\u80fd\u5220\u9664\u9ed8\u8ba4\u914d
|
|||||||
settings.max_memory=\u6700\u5927\u5185\u5b58/MB
|
settings.max_memory=\u6700\u5927\u5185\u5b58/MB
|
||||||
settings.java_dir=Java\u8def\u5f84
|
settings.java_dir=Java\u8def\u5f84
|
||||||
settings.game_directory=\u6e38\u620f\u8def\u5f84
|
settings.game_directory=\u6e38\u620f\u8def\u5f84
|
||||||
settings.dimension=\u5206\u8fa8\u7387
|
settings.dimension=\u6e38\u620f\u7a97\u53e3\u5206\u8fa8\u7387
|
||||||
settings.fullscreen=\u5168\u5c4f
|
settings.fullscreen=\u5168\u5c4f
|
||||||
settings.update_version=\u66f4\u65b0\u7248\u672c\u6587\u4ef6
|
settings.update_version=\u66f4\u65b0\u7248\u672c\u6587\u4ef6
|
||||||
settings.physical_memory=\u7269\u7406\u5185\u5b58\u5927\u5c0f
|
settings.physical_memory=\u7269\u7406\u5185\u5b58\u5927\u5c0f
|
||||||
|
settings.run_directory=\u8fd0\u884c\u8def\u5f84(\u7248\u672c\u9694\u79bb)
|
||||||
settings.choose_javapath=\u9009\u62e9Java\u8def\u5f84
|
settings.choose_javapath=\u9009\u62e9Java\u8def\u5f84
|
||||||
settings.default=\u9ed8\u8ba4
|
settings.default=\u9ed8\u8ba4
|
||||||
settings.custom=\u81ea\u5b9a\u4e49
|
settings.custom=\u81ea\u5b9a\u4e49
|
||||||
@@ -237,8 +238,7 @@ mods.default_information=<html><font color=#c0392b>\u5b89\u88c5Mod\u524d\u4f60\u
|
|||||||
|
|
||||||
advancedsettings=\u9ad8\u7ea7\u8bbe\u7f6e
|
advancedsettings=\u9ad8\u7ea7\u8bbe\u7f6e
|
||||||
advancedsettings.launcher_visible=\u542f\u52a8\u5668\u53ef\u89c1\u6027
|
advancedsettings.launcher_visible=\u542f\u52a8\u5668\u53ef\u89c1\u6027
|
||||||
advancedsettings.run_directory=\u8fd0\u884c\u8def\u5f84
|
advancedsettings.debug_mode=\u8c03\u8bd5\u6a21\u5f0f
|
||||||
advencedsettings.debug_mode=\u8c03\u8bd5\u6a21\u5f0f
|
|
||||||
advancedsettings.java_permanent_generation_space=\u5185\u5b58\u6c38\u4e45\u4fdd\u5b58\u533a\u57df(\u4e0d\u5fc5\u586b\u5199,MB)
|
advancedsettings.java_permanent_generation_space=\u5185\u5b58\u6c38\u4e45\u4fdd\u5b58\u533a\u57df(\u4e0d\u5fc5\u586b\u5199,MB)
|
||||||
advancedsettings.jvm_args=Java\u865a\u62df\u673a\u53c2\u6570(\u4e0d\u5fc5\u586b\u5199)
|
advancedsettings.jvm_args=Java\u865a\u62df\u673a\u53c2\u6570(\u4e0d\u5fc5\u586b\u5199)
|
||||||
advancedsettings.Minecraft_arguments=Minecraft\u989d\u5916\u53c2\u6570(\u4e0d\u5fc5\u586b\u5199)
|
advancedsettings.Minecraft_arguments=Minecraft\u989d\u5916\u53c2\u6570(\u4e0d\u5fc5\u586b\u5199)
|
||||||
|
|||||||
Reference in New Issue
Block a user