diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/api/PluginManager.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/api/PluginManager.java index 68e2e957b..63d3bb7d4 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/api/PluginManager.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/api/PluginManager.java @@ -27,13 +27,6 @@ public class PluginManager { private static IPlugin NOW_PLUGIN; - public static void getServerPlugin() { - try { - getPlugin(Thread.currentThread().getContextClassLoader().loadClass("org.jackhuang.hellominecraft.launcher.server.ServerPlugin")); - } catch (ClassNotFoundException ignore) { - } - } - public static void getPlugin(Class cls) { try { IPlugin p = (IPlugin) cls.newInstance(); diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/asset/AssetsIndex.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/asset/AssetsIndex.java index c1fb867ba..9de6ce609 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/asset/AssetsIndex.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/asset/AssetsIndex.java @@ -38,7 +38,7 @@ public class AssetsIndex { public boolean virtual; public AssetsIndex() { - this.objects = new LinkedHashMap(); + this.objects = new LinkedHashMap<>(); } public Map getFileMap() { @@ -46,7 +46,7 @@ public class AssetsIndex { } public Set getUniqueObjects() { - return new HashSet(this.objects.values()); + return new HashSet<>(this.objects.values()); } public boolean isVirtual() { diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/asset/AssetsObject.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/asset/AssetsObject.java index c1fdfb66f..dca3c813b 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/asset/AssetsObject.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/asset/AssetsObject.java @@ -26,11 +26,6 @@ public class AssetsObject { private String hash; private long size; - public AssetsObject(String hash, long size) { - this.hash = hash; - this.size = size; - } - public void setHash(String hash) { this.hash = hash; } diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/asset/Contents.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/asset/Contents.java index 290f4747b..f88a69bc2 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/asset/Contents.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/asset/Contents.java @@ -28,15 +28,6 @@ public class Contents { public Contents() { } - public Contents(String key, String eTag, String lastModified, String storageClass, long size) { - this(); - this.key = key; - this.eTag = eTag; - this.lastModified = lastModified; - this.storageClass = storageClass; - this.size = size; - } - public String getKey() { return key; } diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/asset/IAssetsHandler.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/asset/IAssetsHandler.java index be3e1eaac..d09a6275f 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/asset/IAssetsHandler.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/asset/IAssetsHandler.java @@ -31,6 +31,7 @@ import org.jackhuang.hellominecraft.launcher.core.version.MinecraftVersion; import org.jackhuang.hellominecraft.util.tasks.Task; import org.jackhuang.hellominecraft.util.tasks.download.FileDownloadTask; import org.jackhuang.hellominecraft.util.code.DigestUtils; +import org.jackhuang.hellominecraft.util.system.FileUtils; import org.jackhuang.hellominecraft.util.system.IOUtils; import org.jackhuang.hellominecraft.util.tasks.TaskInfo; @@ -113,8 +114,8 @@ public abstract class IAssetsHandler { boolean need = true; try { if (location.exists()) { - FileInputStream fis = new FileInputStream(location); - String sha = DigestUtils.sha1Hex(IOUtils.readFully(fis).toByteArray()); + FileInputStream fis = FileUtils.openInputStream(location); + String sha = DigestUtils.sha1Hex(IOUtils.toByteArray(fis)); IOUtils.closeQuietly(fis); if (contents.get(i).geteTag().equals(sha)) { ++hasDownloaded; diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/asset/MinecraftAssetService.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/asset/MinecraftAssetService.java index 5811a18f7..1c3b3c948 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/asset/MinecraftAssetService.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/asset/MinecraftAssetService.java @@ -57,7 +57,7 @@ public class MinecraftAssetService extends IMinecraftAssetService { public Task downloadAssets(final MinecraftVersion mv) throws GameException { if (mv == null) return null; - return IAssetsHandler.ASSETS_HANDLER.getList(mv.resolve(service.version()), service.asset()).after(IAssetsHandler.ASSETS_HANDLER.getDownloadTask(service.getDownloadType().getProvider())); + return IAssetsHandler.ASSETS_HANDLER.getList(mv.resolve(service.version()), service.asset()).with(IAssetsHandler.ASSETS_HANDLER.getDownloadTask(service.getDownloadType().getProvider())); } @Override @@ -155,7 +155,7 @@ public class MinecraftAssetService extends IMinecraftAssetService { if (index == null) return false; - for (Map.Entry entry : index.getFileMap().entrySet()) + for (Map.Entry entry : index.getFileMap().entrySet()) if (!new File(getAssets(), "objects/" + ((AssetsObject) entry.getValue()).getHash().substring(0, 2) + "/" + ((AssetsObject) entry.getValue()).getHash()).exists()) return false; return true; @@ -185,7 +185,7 @@ public class MinecraftAssetService extends IMinecraftAssetService { int cnt = 0; HMCLog.log("Reconstructing virtual assets folder at " + virtualRoot); int tot = index.getFileMap().entrySet().size(); - for (Map.Entry entry : index.getFileMap().entrySet()) { + for (Map.Entry entry : index.getFileMap().entrySet()) { File target = new File(virtualRoot, (String) entry.getKey()); File original = new File(assetsDir, "objects/" + ((AssetsObject) entry.getValue()).getHash().substring(0, 2) + "/" + ((AssetsObject) entry.getValue()).getHash()); if (original.exists()) { diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/auth/IAuthenticator.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/auth/IAuthenticator.java index f7a3a1133..dcac75f9d 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/auth/IAuthenticator.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/auth/IAuthenticator.java @@ -87,13 +87,13 @@ public abstract class IAuthenticator { public abstract void logOut(); - public Map onSaveSettings() { + public Map onSaveSettings() { HashMap m = new HashMap<>(); m.put("IAuthenticator_UserName", username); return m; } - public void onLoadSettings(Map m) { + public void onLoadSettings(Map m) { if (m == null) return; Object o = m.get("IAuthenticator_UserName"); diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/auth/OfflineAuthenticator.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/auth/OfflineAuthenticator.java index a10cc14d4..7997d6a07 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/auth/OfflineAuthenticator.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/auth/OfflineAuthenticator.java @@ -29,7 +29,7 @@ import org.jackhuang.hellominecraft.util.code.DigestUtils; */ public final class OfflineAuthenticator extends IAuthenticator { - Map uuidMap = new HashMap<>(); + Map uuidMap = new HashMap<>(); public OfflineAuthenticator(String clientToken) { super(clientToken); @@ -42,7 +42,7 @@ public final class OfflineAuthenticator extends IAuthenticator { return; Object o = m.get("uuidMap"); if (o != null && o instanceof Map) - uuidMap = (Map) o; + uuidMap = (Map) o; } @Override @@ -57,8 +57,8 @@ public final class OfflineAuthenticator extends IAuthenticator { if (StrUtils.isBlank(info.username)) throw new AuthenticationException(C.i18n("login.no_Player007")); String uuid = getUUIDFromUserName(info.username); - if (uuidMap != null && uuidMap.containsKey(uuid)) - uuid = uuidMap.get(info.username); + if (uuidMap != null && uuidMap.containsKey(info.username) && uuidMap.get(info.username) instanceof String) + uuid = (String) uuidMap.get(info.username); else { if (uuidMap == null) uuidMap = new HashMap<>(); @@ -69,7 +69,8 @@ public final class OfflineAuthenticator extends IAuthenticator { .setSession(uuid) .setUserId(uuid) .setAccessToken(uuid) - .setUserType("Legacy"); + .setUserType("Legacy") + .setClientIdentifier(clientToken); } public static String getUUIDFromUserName(String str) { diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/auth/YggdrasilAuthenticator.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/auth/YggdrasilAuthenticator.java index b885e7f14..5a945be88 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/auth/YggdrasilAuthenticator.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/auth/YggdrasilAuthenticator.java @@ -86,7 +86,8 @@ public final class YggdrasilAuthenticator extends IAuthenticator { .setUserProperties(new GsonBuilder().registerTypeAdapter(PropertyMap.class, new PropertyMap.LegacySerializer()).create().toJson(ua.getUserProperties())) .setUserPropertyMap(new GsonBuilder().registerTypeAdapter(PropertyMap.class, new PropertyMap.Serializer()).create().toJson(ua.getUserProperties())) .setAccessToken(ua.getAuthenticatedToken()) - .setSession(ua.getAuthenticatedToken()); + .setSession(ua.getAuthenticatedToken()) + .setClientIdentifier(clientToken); } @Override diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/auth/yggdrasil/User.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/auth/yggdrasil/User.java index e5e0d111f..48f0e2d4f 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/auth/yggdrasil/User.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/auth/yggdrasil/User.java @@ -25,11 +25,6 @@ public class User { public User() { } - public User(String id, PropertyMap properties) { - this.id = id; - this.properties = properties; - } - public String getId() { return id; } diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/download/MinecraftRemoteLatestVersion.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/download/MinecraftRemoteLatestVersion.java index 02973eef6..d707fef92 100644 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/download/MinecraftRemoteLatestVersion.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/download/MinecraftRemoteLatestVersion.java @@ -17,12 +17,18 @@ */ package org.jackhuang.hellominecraft.launcher.core.download; +import com.google.gson.annotations.SerializedName; + /** * * @author huangyuhui */ public class MinecraftRemoteLatestVersion { - public String snapshot, release; + @SerializedName("snapshot") + public String snapshot; + + @SerializedName("release") + public String release; } diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/download/MinecraftRemoteVersion.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/download/MinecraftRemoteVersion.java index 04fe13457..64d787c8b 100644 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/download/MinecraftRemoteVersion.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/download/MinecraftRemoteVersion.java @@ -17,13 +17,23 @@ */ package org.jackhuang.hellominecraft.launcher.core.download; +import com.google.gson.annotations.SerializedName; + /** * * @author huangyuhui */ public class MinecraftRemoteVersion { - public String id, time, releaseTime, type; + @SerializedName("id") + public String id; + @SerializedName("time") + public String time; + @SerializedName("releaseTime") + public String releaseTime; + @SerializedName("type") + public String type; + @SerializedName("url") private String url; public String getUrl(DownloadType type) { diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/InstallerVersionList.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/InstallerVersionList.java index 2aefcea2c..c683028b1 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/InstallerVersionList.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/InstallerVersionList.java @@ -19,9 +19,12 @@ package org.jackhuang.hellominecraft.launcher.core.install; import java.io.Serializable; import java.util.ArrayList; +import java.util.Collections; import java.util.Comparator; import java.util.List; +import java.util.Map; import java.util.Objects; +import org.jackhuang.hellominecraft.util.StrUtils; import org.jackhuang.hellominecraft.util.tasks.Task; /** @@ -29,6 +32,9 @@ import org.jackhuang.hellominecraft.util.tasks.Task; * @author huangyuhui */ public abstract class InstallerVersionList { + + public Map> versionMap; + public List versions; /** * Refresh installer versions list from the downloaded content. @@ -53,7 +59,17 @@ public abstract class InstallerVersionList { * * @return cached result. */ - protected abstract List getVersionsImpl(String mcVersion); + public List getVersionsImpl(String mcVersion) { + if (versions == null || versionMap == null) + return null; + if (StrUtils.isBlank(mcVersion)) + return versions; + List c = versionMap.get(mcVersion); + if (c == null) + return versions; + Collections.sort(c, InstallerVersionComparator.INSTANCE); + return c; + } /** * Get installers you want, please cache this method's result to save time. diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/MinecraftInstallerService.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/MinecraftInstallerService.java index 634b43905..4a79cb7b5 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/MinecraftInstallerService.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/MinecraftInstallerService.java @@ -62,8 +62,8 @@ public final class MinecraftInstallerService extends IMinecraftInstallerService return null; else return new FileDownloadTask(service.getDownloadType().getProvider().getParsedDownloadURL(v.installer), filepath).setTag("forge") - .after(new ForgeInstaller(service, filepath)) - .after(new DeleteFileTask(filepath)); + .with(new ForgeInstaller(service, filepath)) + .with(new DeleteFileTask(filepath)); } @Override @@ -72,9 +72,9 @@ public final class MinecraftInstallerService extends IMinecraftInstallerService if (v.installer == null) return null; OptiFineDownloadFormatter task = new OptiFineDownloadFormatter(v.installer); - return task.after(new FileDownloadTask(filepath).registerPreviousResult(task).setTag("optifine")) - .after(new OptiFineInstaller(service, installId, v, filepath)) - .after(new DeleteFileTask(filepath)); + return task.with(new FileDownloadTask(filepath).registerPreviousResult(task).setTag("optifine")) + .with(new OptiFineInstaller(service, installId, v, filepath)) + .with(new DeleteFileTask(filepath)); } @Override @@ -83,7 +83,7 @@ public final class MinecraftInstallerService extends IMinecraftInstallerService throw new Error("Download lite loader but the version is not ll's."); File filepath = IOUtils.tryGetCanonicalFile("liteloader-universal.jar"); FileDownloadTask task = (FileDownloadTask) new FileDownloadTask(v.universal, filepath).setTag("LiteLoader"); - return task.after(new LiteLoaderInstaller(service, installId, (LiteLoaderVersionList.LiteLoaderInstallerVersion) v).registerPreviousResult(task)) - .after(new DeleteFileTask(filepath)); + return task.with(new LiteLoaderInstaller(service, installId, (LiteLoaderVersionList.LiteLoaderInstallerVersion) v).registerPreviousResult(task)) + .with(new DeleteFileTask(filepath)); } } diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/PackMinecraftInstaller.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/PackMinecraftInstaller.java deleted file mode 100755 index 5b239300c..000000000 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/PackMinecraftInstaller.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Hello Minecraft! Launcher. - * Copyright (C) 2013 huangyuhui - * - * 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.core.install; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import org.jackhuang.hellominecraft.util.logging.HMCLog; -import org.jackhuang.hellominecraft.util.system.CompressingUtils; -import org.jackhuang.hellominecraft.util.system.FileUtils; - -/** - * - * @author huangyuhui - */ -public class PackMinecraftInstaller { - - File dest; - ArrayList src; - - public PackMinecraftInstaller(ArrayList src, File dest) { - this.dest = dest; - this.src = src; - } - - public void install() throws IOException { - File file = new File("HMCL-MERGE-TEMP"); - if (!file.exists() && !file.mkdirs()) - HMCLog.warn("Failed to make directories: " + file); - for (String src1 : src) - CompressingUtils.unzip(new File(src1), file); - CompressingUtils.zip(file.getAbsolutePath(), dest.getAbsolutePath()); - FileUtils.deleteDirectory(file); - } -} diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/forge/ForgeInstaller.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/forge/ForgeInstaller.java index 7ef87e25c..573dc87f7 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/forge/ForgeInstaller.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/forge/ForgeInstaller.java @@ -81,7 +81,7 @@ public class ForgeInstaller extends Task { File file = new File(gameDir, "libraries/" + forge.getDownloadInfo().path); if (file.getParentFile().mkdirs()) HMCLog.warn("Failed to make library directory " + file.getParent()); - try (FileOutputStream fos = new FileOutputStream(file)) { + try (FileOutputStream fos = FileUtils.openOutputStream(file)) { IOUtils.copyStream(is, fos); } mp.version().refreshVersions(); diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/forge/ForgeOldInstaller.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/forge/ForgeOldInstaller.java deleted file mode 100755 index 8a84e41ba..000000000 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/forge/ForgeOldInstaller.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Hello Minecraft! Launcher. - * Copyright (C) 2013 huangyuhui - * - * 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.core.install.forge; - -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import org.jackhuang.hellominecraft.launcher.core.install.PackMinecraftInstaller; - -/** - * - * @author huangyuhui - */ -public class ForgeOldInstaller { - - public static void install(String destMinecraftJar, String srcMinecraftJar, String forgeUniversal) throws IOException { - ArrayList al = new ArrayList<>(); - al.add(srcMinecraftJar); - al.add(forgeUniversal); - new PackMinecraftInstaller(al, new File(destMinecraftJar)).install(); - } - -} diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/forge/Install.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/forge/Install.java index eadf7b065..4c8863ef2 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/forge/Install.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/forge/Install.java @@ -47,19 +47,6 @@ public class Install { public Install() { } - public Install(String profileName, String target, String path, String version, String filePath, String welcome, String minecraft, String mirrorList, String logo) { - this(); - this.profileName = profileName; - this.target = target; - this.path = path; - this.version = version; - this.filePath = filePath; - this.welcome = welcome; - this.minecraft = minecraft; - this.mirrorList = mirrorList; - this.logo = logo; - } - public String getProfileName() { return profileName; } diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/forge/MinecraftForgeVersion.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/forge/MinecraftForgeVersion.java index 349f589eb..f6bd01f03 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/forge/MinecraftForgeVersion.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/forge/MinecraftForgeVersion.java @@ -76,16 +76,4 @@ public class MinecraftForgeVersion { this.modified = modified; } - public MinecraftForgeVersion() { - } - - public MinecraftForgeVersion(String branch, String mcversion, String jobver, String version, int build, double modified) { - this.branch = branch; - this.mcversion = mcversion; - this.jobver = jobver; - this.version = version; - this.build = build; - this.modified = modified; - } - } diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/forge/MinecraftForgeVersionList.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/forge/MinecraftForgeVersionList.java index efce43f95..12379dee0 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/forge/MinecraftForgeVersionList.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/forge/MinecraftForgeVersionList.java @@ -22,7 +22,6 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; -import java.util.List; import java.util.Map; import org.jackhuang.hellominecraft.util.C; import org.jackhuang.hellominecraft.launcher.core.download.DownloadType; @@ -48,8 +47,6 @@ public class MinecraftForgeVersionList extends InstallerVersionList { } public MinecraftForgeVersionRoot root; - public Map> versionMap; - public List versions; @Override public Task refresh(String[] needed) { @@ -116,19 +113,6 @@ public class MinecraftForgeVersionList extends InstallerVersionList { }; } - @Override - public List getVersionsImpl(String mcVersion) { - if (versions == null || versionMap == null) - return null; - if (StrUtils.isBlank(mcVersion)) - return versions; - List c = versionMap.get(mcVersion); - if (c == null) - return versions; - Collections.sort(c, InstallerVersionComparator.INSTANCE); - return c; - } - @Override public String getName() { return "Forge - MinecraftForge Offical Site"; diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/liteloader/LiteLoaderInstaller.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/liteloader/LiteLoaderInstaller.java index 255a7f775..0610c2a32 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/liteloader/LiteLoaderInstaller.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/liteloader/LiteLoaderInstaller.java @@ -63,7 +63,7 @@ public class LiteLoaderInstaller extends Task implements PreviousResultRegistrar MinecraftVersion mv = (MinecraftVersion) service.version().getVersionById(installId).clone(); mv.inheritsFrom = mv.id; mv.jar = mv.jar == null ? mv.id : mv.jar; - mv.libraries = new ArrayList(Arrays.asList(version.libraries)); + mv.libraries = new ArrayList<>(Arrays.asList(version.libraries)); MinecraftLibrary ml = new MinecraftLibrary("com.mumfrey:liteloader:" + version.selfVersion); //ml.url = "http://dl.liteloader.com/versions/com/mumfrey/liteloader/" + version.mcVersion + "/liteloader-" + version.selfVersion + ".jar"; @@ -92,7 +92,7 @@ public class LiteLoaderInstaller extends Task implements PreviousResultRegistrar ArrayList> pre = new ArrayList<>(); @Override - public Task registerPreviousResult(PreviousResult pr) { + public Task registerPreviousResult(PreviousResult pr) { pre.add(pr); return this; } diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/liteloader/LiteLoaderVersionList.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/liteloader/LiteLoaderVersionList.java index 8d0192551..b689478a5 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/liteloader/LiteLoaderVersionList.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/liteloader/LiteLoaderVersionList.java @@ -22,13 +22,11 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.Objects; import org.jackhuang.hellominecraft.util.C; import org.jackhuang.hellominecraft.launcher.core.version.MinecraftLibrary; import org.jackhuang.hellominecraft.launcher.core.install.InstallerVersionList; -import org.jackhuang.hellominecraft.launcher.core.install.InstallerVersionList.InstallerVersion; import org.jackhuang.hellominecraft.launcher.core.install.InstallerVersionNewerComparator; import org.jackhuang.hellominecraft.util.StrUtils; import org.jackhuang.hellominecraft.util.tasks.Task; @@ -50,8 +48,6 @@ public class LiteLoaderVersionList extends InstallerVersionList { } public LiteLoaderVersionsRoot root; - public Map> versionMap; - public List versions; @Override public Task refresh(String[] needed) { @@ -102,19 +98,6 @@ public class LiteLoaderVersionList extends InstallerVersionList { }; } - @Override - public List getVersionsImpl(String mcVersion) { - if (versions == null || versionMap == null) - return null; - if (StrUtils.isBlank(mcVersion)) - return versions; - List c = versionMap.get(mcVersion); - if (c == null) - return versions; - Collections.sort(c, InstallerVersionComparator.INSTANCE); - return c; - } - @Override public String getName() { return "LiteLoader - LiteLoader Official Site(By: Mumfrey)"; diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/liteloader/LiteLoaderVersionsMeta.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/liteloader/LiteLoaderVersionsMeta.java index ee7a991e6..078ad9823 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/liteloader/LiteLoaderVersionsMeta.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/liteloader/LiteLoaderVersionsMeta.java @@ -35,13 +35,6 @@ public class LiteLoaderVersionsMeta { public LiteLoaderVersionsMeta() { } - public LiteLoaderVersionsMeta(String description, String authors, String url) { - this(); - this.description = description; - this.authors = authors; - this.url = url; - } - public String getDescription() { return description; } diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/optifine/OptiFineInstaller.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/optifine/OptiFineInstaller.java index 6c10f828e..41ffc7c69 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/optifine/OptiFineInstaller.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/optifine/OptiFineInstaller.java @@ -42,10 +42,6 @@ public class OptiFineInstaller extends Task implements PreviousResultRegistrar> pre = new ArrayList(); + ArrayList> pre = new ArrayList<>(); @Override - public Task registerPreviousResult(PreviousResult pr) { + public Task registerPreviousResult(PreviousResult pr) { pre.add(pr); return this; } diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/optifine/bmcl/OptiFineBMCLVersionList.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/optifine/bmcl/OptiFineBMCLVersionList.java index 002d92835..b18d7763f 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/optifine/bmcl/OptiFineBMCLVersionList.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/optifine/bmcl/OptiFineBMCLVersionList.java @@ -25,7 +25,6 @@ import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.jackhuang.hellominecraft.util.C; @@ -52,8 +51,6 @@ public class OptiFineBMCLVersionList extends InstallerVersionList { } public ArrayList root; - public Map> versionMap; - public List versions; private static final Type TYPE = new TypeToken>() { }.getType(); @@ -101,19 +98,6 @@ public class OptiFineBMCLVersionList extends InstallerVersionList { }; } - @Override - public List getVersionsImpl(String mcVersion) { - if (versions == null || versionMap == null) - return null; - if (StrUtils.isBlank(mcVersion)) - return versions; - List c = versionMap.get(mcVersion); - if (c == null) - return versions; - Collections.sort(c, InstallerVersionComparator.INSTANCE); - return c; - } - @Override public String getName() { return "OptiFine - BMCLAPI(By: bangbang93)"; diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/optifine/vanilla/OptiFineVersionList.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/optifine/vanilla/OptiFineVersionList.java index 5dc2c08df..81fbd7079 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/optifine/vanilla/OptiFineVersionList.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/install/optifine/vanilla/OptiFineVersionList.java @@ -25,7 +25,6 @@ import java.util.Collection; import java.util.Collections; import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.xml.parsers.DocumentBuilder; @@ -59,9 +58,7 @@ public class OptiFineVersionList extends InstallerVersionList { return instance; } - public ArrayList root = new ArrayList(); - public Map> versionMap; - public List versions; + public ArrayList root = new ArrayList<>(); @Override public Task refresh(String[] sss) { @@ -138,18 +135,4 @@ public class OptiFineVersionList extends InstallerVersionList { public String getName() { return "OptiFine - OptiFine Official Site"; } - - @Override - public List getVersionsImpl(String mcVersion) { - if (versions == null || versionMap == null) - return null; - if (StrUtils.isBlank(mcVersion)) - return versions; - List c = versionMap.get(mcVersion); - if (c == null) - return versions; - Collections.sort(c, InstallerVersionComparator.INSTANCE); - return c; - } - } diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/launch/GameLauncher.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/launch/GameLauncher.java index 69a95d4d7..c827f0641 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/launch/GameLauncher.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/launch/GameLauncher.java @@ -22,8 +22,6 @@ import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; -import java.io.UnsupportedEncodingException; -import java.nio.charset.Charset; import java.util.List; import org.jackhuang.hellominecraft.launcher.api.PluginManager; import org.jackhuang.hellominecraft.launcher.core.GameException; @@ -38,6 +36,7 @@ import org.jackhuang.hellominecraft.launcher.core.version.DecompressLibraryJob; import org.jackhuang.hellominecraft.util.C; import org.jackhuang.hellominecraft.util.EventHandler; import org.jackhuang.hellominecraft.util.StrUtils; +import org.jackhuang.hellominecraft.util.code.Charsets; import org.jackhuang.hellominecraft.util.logging.HMCLog; import org.jackhuang.hellominecraft.util.system.FileUtils; import org.jackhuang.hellominecraft.util.system.IOUtils; @@ -153,7 +152,7 @@ public class GameLauncher { * * @throws java.io.IOException write contents failed. */ - public File makeLauncher(String launcherName, List str) throws IOException { + public File makeLauncher(String launcherName, List str) throws IOException { HMCLog.log("Making shell launcher..."); service.version().onLaunch(options.getLaunchVersion()); boolean isWin = OS.os() == OS.WINDOWS; @@ -161,13 +160,8 @@ public class GameLauncher { if (!f.exists() && !f.createNewFile()) HMCLog.warn("Failed to create " + f); BufferedWriter writer; - try (FileOutputStream fos = new FileOutputStream(f)) { - try { - writer = new BufferedWriter(new OutputStreamWriter(fos, System.getProperty("sun.jnu.encoding", "UTF-8"))); - } catch (UnsupportedEncodingException ex) { - HMCLog.warn("Failed to create writer, will try again.", ex); - writer = new BufferedWriter(new OutputStreamWriter(fos, Charset.defaultCharset())); - } + try (FileOutputStream fos = FileUtils.openOutputStream(f)) { + writer = new BufferedWriter(new OutputStreamWriter(fos, Charsets.toCharset())); if (isWin) { writer.write("@echo off"); writer.newLine(); diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/mod/MinecraftModService.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/mod/MinecraftModService.java index 68812bbbb..c29b00c49 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/mod/MinecraftModService.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/mod/MinecraftModService.java @@ -18,7 +18,6 @@ package org.jackhuang.hellominecraft.launcher.core.mod; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; @@ -28,7 +27,6 @@ import java.util.Map; import org.jackhuang.hellominecraft.util.logging.HMCLog; import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftModService; import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftService; -import org.jackhuang.hellominecraft.util.code.DigestUtils; import org.jackhuang.hellominecraft.util.system.FileUtils; /** @@ -113,11 +111,4 @@ public class MinecraftModService extends IMinecraftModService { return flag; } - public String[] checkMd5s(String id) throws IOException { - String[] res = new String[getMods(id).size()]; - for (int i = 0; i < res.length; i++) - res[i] = DigestUtils.md5Hex(new FileInputStream(getMods(id).get(i).location)); - return res; - } - } diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/mod/ModpackManager.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/mod/ModpackManager.java index 25dcabe73..69f178418 100644 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/mod/ModpackManager.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/mod/ModpackManager.java @@ -93,15 +93,15 @@ public final class ModpackManager { // Read modpack name and description from `modpack.json` try (ZipFile zip = new ZipFile(input)) { - HashMap map = C.GSON.fromJson(new InputStreamReader(zip.getInputStream(zip.getEntry("modpack.json")), "UTF-8"), HashMap.class); + HashMap map = C.GSON.fromJson(new InputStreamReader(zip.getInputStream(zip.getEntry("modpack.json")), "UTF-8"), HashMap.class); if (map != null) { if (id == null) if (map.containsKey("name") && map.get("name") instanceof String) - id = (String) map.get("name"); + id = map.get("name"); if (id != null) description += id; if (map.containsKey("description") && map.get("description") instanceof String) - description += "\n" + (String) map.get("description"); + description += "\n" + map.get("description"); } if (id == null) throw new IllegalStateException("Illegal modpack id!"); @@ -245,7 +245,7 @@ public final class ModpackManager { * * @throws IOException if create tmp directory failed */ - public static void export(File output, IMinecraftProvider provider, String version, List blacklist, Map modpackJson, CallbackIO callback) throws IOException, GameException { + public static void export(File output, IMinecraftProvider provider, String version, List blacklist, Map modpackPreferences, CallbackIO callback) throws IOException, GameException { final ArrayList b = new ArrayList<>(MODPACK_BLACK_LIST); if (blacklist != null) b.addAll(blacklist); @@ -272,7 +272,7 @@ public final class ModpackManager { mv.jar = r.version; mv.runDir = "version"; zip.putTextFile(C.GSON.toJson(mv), "minecraft/pack.json"); - zip.putTextFile(C.GSON.toJson(modpackJson), "modpack.json"); + zip.putTextFile(C.GSON.toJson(modpackPreferences), "modpack.json"); if (callback != null) callback.call(zip); } finally { diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/Extract.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/Extract.java index 8e6d04580..ca6d914b2 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/Extract.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/Extract.java @@ -36,7 +36,6 @@ public class Extract implements Cloneable { } @Override - @SuppressWarnings("CloneDeclaresCloneNotSupported") public Object clone() { try { return super.clone(); diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/IMinecraftLibrary.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/IMinecraftLibrary.java index be53ddd18..5de53abe4 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/IMinecraftLibrary.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/IMinecraftLibrary.java @@ -56,7 +56,6 @@ public abstract class IMinecraftLibrary implements Cloneable { } @Override - @SuppressWarnings("CloneDeclaresCloneNotSupported") public Object clone() { try { return super.clone(); diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/MinecraftLibrary.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/MinecraftLibrary.java index 53aed81e4..d4ba265e9 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/MinecraftLibrary.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/MinecraftLibrary.java @@ -46,14 +46,6 @@ public class MinecraftLibrary extends IMinecraftLibrary { super(name); } - public MinecraftLibrary(ArrayList rules, String url, Natives natives, String name, Extract extract, LibraryDownloadInfo downloads) { - super(name); - this.rules = rules == null ? null : (ArrayList) rules.clone(); - this.url = url; - this.natives = natives == null ? null : (Natives) natives.clone(); - this.extract = extract == null ? null : (Extract) extract.clone(); - } - /** * is the library allowed to load. * diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/MinecraftVersion.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/MinecraftVersion.java index c5ed69445..16fc0e3e3 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/MinecraftVersion.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/MinecraftVersion.java @@ -31,7 +31,6 @@ import org.jackhuang.hellominecraft.launcher.core.GameException; import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftProvider; import org.jackhuang.hellominecraft.launcher.core.asset.AssetsIndex; import org.jackhuang.hellominecraft.util.ArrayUtils; -import org.jackhuang.hellominecraft.util.Utils; /** * @@ -213,6 +212,6 @@ public class MinecraftVersion implements Cloneable, Comparable } public Set getLibraries() { - return libraries == null ? new HashSet() : new HashSet(libraries); + return libraries == null ? new HashSet<>() : new HashSet<>(libraries); } } diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/MinecraftVersionManager.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/MinecraftVersionManager.java index 1401e903b..5536459e3 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/MinecraftVersionManager.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/MinecraftVersionManager.java @@ -45,7 +45,7 @@ import org.jackhuang.hellominecraft.util.ui.SwingUtils; */ public class MinecraftVersionManager extends IMinecraftProvider { - final Map versions = new TreeMap(); + final Map versions = new TreeMap<>(); /** * diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/Natives.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/Natives.java index c13051e4a..e7f05983c 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/Natives.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/Natives.java @@ -33,7 +33,6 @@ public class Natives implements Cloneable { public String linux; @Override - @SuppressWarnings("CloneDeclaresCloneNotSupported") protected Object clone() { try { return super.clone(); diff --git a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/Rules.java b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/Rules.java index 9b8e37fc7..0d792759a 100755 --- a/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/Rules.java +++ b/HMCL/src/core/java/org/jackhuang/hellominecraft/launcher/core/version/Rules.java @@ -33,12 +33,6 @@ public class Rules { public Rules() { } - public Rules(String action, OSRestriction os) { - this(); - this.action = action; - this.os = os; - } - public String action() { return os == null || os.isCurrentOS() ? action : null; } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/Main.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/Main.java index 64d063637..688849897 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/Main.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/Main.java @@ -98,7 +98,6 @@ public final class Main implements Runnable { return "HMCL" + ' ' + LAUNCHER_VERSION; } - public static final Main INSTANCE = new Main(); private static HelloMinecraftLookAndFeel LOOK_AND_FEEL; private static final Logger LOGGER = Logger.getLogger(Main.class.getName()); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/setting/Settings.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/setting/Settings.java index eb839b7ba..a73e77fc4 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/setting/Settings.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/setting/Settings.java @@ -126,18 +126,10 @@ public final class Settings { return SETTINGS.getConfigurations(); } - public static void setProfile(Profile ver) { - getProfiles().put(ver.getName(), ver); - } - public static Collection getProfilesFiltered() { return CollectionUtils.filter(getProfiles().values(), t -> t != null && t.getName() != null); } - public static Profile getOneProfile() { - return SETTINGS.getConfigurations().firstEntry().getValue(); - } - public static boolean putProfile(Profile ver) { if (ver == null || ver.getName() == null || getProfiles().containsKey(ver.getName())) return false; @@ -163,8 +155,8 @@ public final class Settings { return flag; } - public static final EventHandler profileChangedEvent = new EventHandler(null); - public static final EventHandler profileLoadingEvent = new EventHandler(null); + public static final EventHandler profileChangedEvent = new EventHandler<>(null); + public static final EventHandler profileLoadingEvent = new EventHandler<>(null); static void onProfileChanged() { Profile p = getLastProfile(); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/setting/VersionSetting.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/setting/VersionSetting.java index 879bc0d45..fa266d775 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/setting/VersionSetting.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/setting/VersionSetting.java @@ -93,27 +93,6 @@ public class VersionSetting { javaDir = java = minecraftArgs = serverIp = precalledCommand = wrapper = ""; } - 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; - minecraftArgs = v.minecraftArgs; - permSize = v.permSize; - gameDirType = v.gameDirType; - noJVMArgs = v.noJVMArgs; - launcherVisibility = v.launcherVisibility; - precalledCommand = v.precalledCommand; - wrapper = v.wrapper; - serverIp = v.serverIp; - } - public String getJavaDir() { Java j = getJava(); if (j.getHome() == null) @@ -173,10 +152,6 @@ public class VersionSetting { propertyChanged.execute("javaArgs"); } - public boolean hasJavaArgs() { - return StrUtils.isNotBlank(getJavaArgs().trim()); - } - public String getMaxMemory() { if (StrUtils.isBlank(maxMemory)) return String.valueOf(OS.getSuggestedMemorySize()); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/GameSettingsPanel.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/GameSettingsPanel.java index 419135b6f..51d43a2d8 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/GameSettingsPanel.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/GameSettingsPanel.java @@ -1410,7 +1410,7 @@ public final class GameSettingsPanel extends RepaintPage implements DropTargetLi private void loadProfiles() { isLoading = true; - DefaultComboBoxModel model = new DefaultComboBoxModel(); + DefaultComboBoxModel model = new DefaultComboBoxModel<>(); for (Profile s : Settings.getProfilesFiltered()) model.addElement(s.getName()); cboProfiles.setModel(model); @@ -1423,7 +1423,7 @@ public final class GameSettingsPanel extends RepaintPage implements DropTargetLi }; void loadVersions() { - DefaultComboBoxModel model = new DefaultComboBoxModel(); + DefaultComboBoxModel model = new DefaultComboBoxModel<>(); for (MinecraftVersion each : Settings.getLastProfile().service().version().getVersions()) { if (each.hidden) continue; @@ -1438,7 +1438,7 @@ public final class GameSettingsPanel extends RepaintPage implements DropTargetLi public void versionChanged(String version) { isLoading = true; - DefaultComboBoxModel model = (DefaultComboBoxModel) cboVersions.getModel(); + DefaultComboBoxModel model = (DefaultComboBoxModel) cboVersions.getModel(); for (int i = 0; i < model.getSize(); ++i) if (model.getElementAt(i).equals(version)) { model.setSelectedItem(version); @@ -1462,7 +1462,7 @@ public final class GameSettingsPanel extends RepaintPage implements DropTargetLi txtGameDir.setText(t.getGameDir()); isLoading = true; - DefaultComboBoxModel model = (DefaultComboBoxModel) cboProfiles.getModel(); + DefaultComboBoxModel model = (DefaultComboBoxModel) cboProfiles.getModel(); for (int i = 0; i < model.getSize(); ++i) if (model.getElementAt(i).equals(t.getName())) { model.setSelectedItem(t.getName()); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/HeaderTab.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/HeaderTab.java index 54cb65370..0a4dc9c3b 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/HeaderTab.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/HeaderTab.java @@ -68,10 +68,6 @@ public class HeaderTab extends JLabel return this.model.getActionListeners(); } - public void removeActionListener(ActionListener listener) { - this.model.removeActionListener(listener); - } - public void setActionCommand(String command) { this.model.setActionCommand(command); } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/InstallerPanel.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/InstallerPanel.java index 142063f19..81a852ca2 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/InstallerPanel.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/InstallerPanel.java @@ -124,7 +124,7 @@ public class InstallerPanel extends Page { Task refreshVersionsTask() { Task t = list.refresh(new String[] { gsp.getMinecraftVersionFormatted() }); if (t != null) - return t.after(new TaskRunnable(this::loadVersions)); + return t.with(new TaskRunnable(this::loadVersions)); else return null; } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/LauncherSettingsPanel.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/LauncherSettingsPanel.java index 01b4c3e9a..042231e5e 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/LauncherSettingsPanel.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/LauncherSettingsPanel.java @@ -49,12 +49,12 @@ public class LauncherSettingsPanel extends RepaintPage { setBackground(GraphicsUtils.getWebColorWithAlpha("FFFFFF7F")); setOpaque(true); - DefaultComboBoxModel d = new DefaultComboBoxModel(); + DefaultComboBoxModel d = new DefaultComboBoxModel<>(); for (DownloadType type : DownloadType.values()) d.addElement(type.getName()); cboDownloadSource.setModel(d); - d = new DefaultComboBoxModel(); + d = new DefaultComboBoxModel<>(); int id = 0; for (SupportedLocales type : SupportedLocales.values()) { d.addElement(type.showString()); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/MainPagePanel.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/MainPagePanel.java index 7d7a12706..ebb09115b 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/MainPagePanel.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/MainPagePanel.java @@ -38,7 +38,7 @@ import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftService; import org.jackhuang.hellominecraft.launcher.ui.modpack.ModpackWizard; import org.jackhuang.hellominecraft.launcher.util.HMCLMinecraftService; import org.jackhuang.hellominecraft.util.Event; -import org.jackhuang.hellominecraft.lookandfeel.comp.ConstomButton; +import org.jackhuang.hellominecraft.lookandfeel.ConstomButton; import org.jackhuang.hellominecraft.util.func.Consumer; import org.jackhuang.hellominecraft.util.system.FileUtils; import org.jackhuang.hellominecraft.util.tasks.TaskWindow; @@ -473,7 +473,7 @@ public class MainPagePanel extends GaussionPage { final Runnable onLoadingProfiles = () -> { isLoading = true; - DefaultComboBoxModel model = new DefaultComboBoxModel(); + DefaultComboBoxModel model = new DefaultComboBoxModel<>(); for (Profile s : Settings.getProfilesFiltered()) model.addElement(s.getName()); cboProfiles.setModel(model); @@ -516,7 +516,7 @@ public class MainPagePanel extends GaussionPage { void versionChanged(String selectedVersion) { isLoading = true; - DefaultComboBoxModel model = (DefaultComboBoxModel) cboVersions.getModel(); + DefaultComboBoxModel model = (DefaultComboBoxModel) cboVersions.getModel(); for (int i = 0; i < model.getSize(); ++i) if (model.getElementAt(i).equals(selectedVersion)) { model.setSelectedItem(selectedVersion); @@ -532,7 +532,7 @@ public class MainPagePanel extends GaussionPage { t.launcher().launchingStateChanged.register(launchingStateChanged); isLoading = true; - DefaultComboBoxModel model = (DefaultComboBoxModel) cboProfiles.getModel(); + DefaultComboBoxModel model = (DefaultComboBoxModel) cboProfiles.getModel(); for (int i = 0; i < model.getSize(); ++i) if (model.getElementAt(i).equals(t.getName())) { model.setSelectedItem(t.getName()); diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/WideComboBox.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/WideComboBox.java index 2205864da..5000fb690 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/WideComboBox.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/WideComboBox.java @@ -24,7 +24,7 @@ import javax.swing.JComboBox; * Make the popup menu of combo boxes wider. * @author huangyuhui */ -public class WideComboBox extends JComboBox { +public class WideComboBox extends JComboBox { public WideComboBox() { } diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/modpack/ModpackInitializationPanel.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/modpack/ModpackInitializationPanel.java index 5d15ed7f3..998d49fe8 100644 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/modpack/ModpackInitializationPanel.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/ui/modpack/ModpackInitializationPanel.java @@ -38,12 +38,12 @@ public class ModpackInitializationPanel extends javax.swing.JPanel { public static final String KEY_INCLUDING_LAUNCHER = "launcher"; private final transient WizardController controller; - private final Map wizardData; + private final Map wizardData; /** * Creates new form ModpackInitializationPanel */ - public ModpackInitializationPanel(WizardController controller, Map wizardData, Vector versions, String selVersion) { + public ModpackInitializationPanel(WizardController controller, Map wizardData, Vector versions, String selVersion) { initComponents(); this.controller = controller; diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/util/ModpackUpdater.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/util/ModpackUpdater.java deleted file mode 100755 index fd4160e15..000000000 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/util/ModpackUpdater.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Hello Minecraft! Launcher. - * Copyright (C) 2013 huangyuhui - * - * 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.util; - -import java.io.File; -import java.util.ArrayList; - -/** - * - * @author huangyuhui - */ -public class ModpackUpdater { - - private ModpackInfo info; - - public ModpackUpdater(File baseFolder, ModpackInfo info) { - this.info = info; - } - - void update() { - - } - - public ModpackInfo getInfo() { - return info; - } - - public void setInfo(ModpackInfo info) { - this.info = info; - } - - public static class ModpackInfo { - - ArrayList folders; - ArrayList files; - - public static class ModpackFolder { - - String ext, name; - } - - public static class ModpackFile { - - String hash, loc; - } - } -} diff --git a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/util/upgrade/AppDataUpgrader.java b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/util/upgrade/AppDataUpgrader.java index 2991788c5..8feb96497 100755 --- a/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/util/upgrade/AppDataUpgrader.java +++ b/HMCL/src/main/java/org/jackhuang/hellominecraft/launcher/util/upgrade/AppDataUpgrader.java @@ -18,8 +18,6 @@ package org.jackhuang.hellominecraft.launcher.util.upgrade; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; @@ -173,8 +171,8 @@ public class AppDataUpgrader extends IUpgrader { if (!f.createNewFile()) HMCLog.warn("Failed to create new file: " + f); - try (JarOutputStream jos = new JarOutputStream(new FileOutputStream(f))) { - Pack200.newUnpacker().unpack(new GZIPInputStream(new FileInputStream(tempFile)), jos); + try (JarOutputStream jos = new JarOutputStream(FileUtils.openOutputStream(f))) { + Pack200.newUnpacker().unpack(new GZIPInputStream(FileUtils.openInputStream(tempFile)), jos); } json.put("ver", newestVersion); json.put("loc", f.getAbsolutePath()); diff --git a/HMCLaF/src/main/java/org/jackhuang/hellominecraft/lookandfeel/comp/ConstomButton.java b/HMCLaF/src/main/java/org/jackhuang/hellominecraft/lookandfeel/ConstomButton.java similarity index 91% rename from HMCLaF/src/main/java/org/jackhuang/hellominecraft/lookandfeel/comp/ConstomButton.java rename to HMCLaF/src/main/java/org/jackhuang/hellominecraft/lookandfeel/ConstomButton.java index 4ba9f5025..b2071a6a9 100755 --- a/HMCLaF/src/main/java/org/jackhuang/hellominecraft/lookandfeel/comp/ConstomButton.java +++ b/HMCLaF/src/main/java/org/jackhuang/hellominecraft/lookandfeel/ConstomButton.java @@ -14,7 +14,7 @@ * You should have received a copy of the GNU General Public License * along with this program. */ -package org.jackhuang.hellominecraft.lookandfeel.comp; +package org.jackhuang.hellominecraft.lookandfeel; import java.awt.Color; import org.jackhuang.hellominecraft.util.ui.GraphicsUtils; @@ -28,7 +28,5 @@ public class ConstomButton extends javax.swing.JButton { prelightFg = GraphicsUtils.getWebColorWithAlpha("FFFFFF7F"), prelightBg = GraphicsUtils.getWebColorWithAlpha("FFFFFF7F"), activeFg = GraphicsUtils.getWebColorWithAlpha("EAEDF83F"), activeBg = GraphicsUtils.getWebColorWithAlpha("EAEDF83F"); public int drawPercent = 0; - public long lastDrawTime = 0; public int radix = 0; - public boolean notDraw = false; } diff --git a/HMCLaF/src/main/java/org/jackhuang/hellominecraft/lookandfeel/comp/IConstomable.java b/HMCLaF/src/main/java/org/jackhuang/hellominecraft/lookandfeel/comp/IConstomable.java deleted file mode 100755 index 38756e3b4..000000000 --- a/HMCLaF/src/main/java/org/jackhuang/hellominecraft/lookandfeel/comp/IConstomable.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2013 huangyuhui - * - * 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 2 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. - */ -package org.jackhuang.hellominecraft.lookandfeel.comp; - -/** - * - * @author huangyuhui - */ -public interface IConstomable { - boolean constomBackground(); - boolean constomForeground(); -} diff --git a/HMCLaF/src/main/java/org/jackhuang/hellominecraft/lookandfeel/painter/ButtonPainter.java b/HMCLaF/src/main/java/org/jackhuang/hellominecraft/lookandfeel/painter/ButtonPainter.java index 304145259..b0001cb11 100755 --- a/HMCLaF/src/main/java/org/jackhuang/hellominecraft/lookandfeel/painter/ButtonPainter.java +++ b/HMCLaF/src/main/java/org/jackhuang/hellominecraft/lookandfeel/painter/ButtonPainter.java @@ -31,7 +31,7 @@ import javax.swing.plaf.synth.SynthConstants; import javax.swing.plaf.synth.SynthContext; import javax.swing.plaf.synth.SynthPainter; import org.jackhuang.hellominecraft.util.ui.GraphicsUtils; -import org.jackhuang.hellominecraft.lookandfeel.comp.ConstomButton; +import org.jackhuang.hellominecraft.lookandfeel.ConstomButton; /** * ButtonPainter - handles painting Nimbus style buttons with Java2D diff --git a/HMCLaF/src/main/java/org/jackhuang/hellominecraft/lookandfeel/ui/ListCellRender.java b/HMCLaF/src/main/java/org/jackhuang/hellominecraft/lookandfeel/ui/ListCellRender.java index 1200d9e25..215145dd7 100755 --- a/HMCLaF/src/main/java/org/jackhuang/hellominecraft/lookandfeel/ui/ListCellRender.java +++ b/HMCLaF/src/main/java/org/jackhuang/hellominecraft/lookandfeel/ui/ListCellRender.java @@ -34,7 +34,7 @@ import java.awt.Component; public class ListCellRender extends DefaultListCellRenderer { @Override - public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { setOpaque(true); setBackground(Color.magenta); diff --git a/HMCLaF/src/main/java/org/jackhuang/hellominecraft/lookandfeel/ui/ScrollButton.java b/HMCLaF/src/main/java/org/jackhuang/hellominecraft/lookandfeel/ui/ScrollButton.java index 9387ceeba..616c7d4e0 100755 --- a/HMCLaF/src/main/java/org/jackhuang/hellominecraft/lookandfeel/ui/ScrollButton.java +++ b/HMCLaF/src/main/java/org/jackhuang/hellominecraft/lookandfeel/ui/ScrollButton.java @@ -20,10 +20,6 @@ */ package org.jackhuang.hellominecraft.lookandfeel.ui; -import static javax.swing.SwingConstants.NORTH; -import static javax.swing.SwingConstants.SOUTH; - -import javax.swing.SwingConstants; import javax.swing.plaf.metal.MetalScrollButton; import java.awt.Dimension; import java.awt.Graphics; diff --git a/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/Main.java b/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/Main.java index a9dfef364..f7aea9bb1 100755 --- a/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/Main.java +++ b/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/Main.java @@ -18,8 +18,6 @@ package org.jackhuang.hellominecraft.svrmgr; import java.awt.Font; -import java.io.PrintWriter; -import java.io.StringWriter; import java.text.ParseException; import javax.swing.UIManager; import javax.swing.UnsupportedLookAndFeelException; @@ -60,13 +58,7 @@ public class Main { new MainWindow().setVisible(true); } catch (Throwable t) { HMCLog.err("There's something wrong when running server holder.", t); - - LogWindow.INSTANCE.clean(); - LogWindow.INSTANCE.warning("开服器崩溃了QAQ"); - StringWriter trace = new StringWriter(); - t.printStackTrace(new PrintWriter(trace)); - LogWindow.INSTANCE.warning(trace.toString()); - LogWindow.INSTANCE.setVisible(true); + LogWindow.INSTANCE.showAsCrashWindow(false); System.exit(-1); } diff --git a/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/install/cauldron/ForgeInstaller.java b/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/install/cauldron/ForgeInstaller.java index 6b54d1b9e..cccb71912 100755 --- a/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/install/cauldron/ForgeInstaller.java +++ b/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/install/cauldron/ForgeInstaller.java @@ -122,7 +122,7 @@ public class ForgeInstaller { File packFile = new File(gameDir, "libraries" + File.separator + library.formatted + ".pack.xz"); if (packFile.exists() && packFile.isFile()) try { - unpackLibrary(lib.getParentFile(), IOUtils.readFully(FileUtils.openInputStream(packFile)).toByteArray()); + unpackLibrary(lib.getParentFile(), IOUtils.toByteArray(FileUtils.openInputStream(packFile))); if (!checksumValid(lib, Arrays.asList(library.checksums))) badLibs.add(library.name); } catch (IOException e) { @@ -139,7 +139,7 @@ public class ForgeInstaller { if (output.exists()) output.delete(); - byte[] decompressed = IOUtils.readFully(new XZInputStream(new ByteArrayInputStream(data))).toByteArray(); + byte[] decompressed = IOUtils.toByteArray(new XZInputStream(new ByteArrayInputStream(data))); String end = new String(decompressed, decompressed.length - 4, 4); if (!end.equals("SIGN")) { @@ -165,7 +165,7 @@ public class ForgeInstaller { private static boolean checksumValid(File libPath, List checksums) { try { - byte[] fileData = IOUtils.readFully(FileUtils.openInputStream(libPath)).toByteArray(); + byte[] fileData = IOUtils.toByteArray(FileUtils.openInputStream(libPath)); boolean valid = (checksums == null) || (checksums.isEmpty()) || (checksums.contains(DigestUtils.sha1Hex(fileData))); if ((!valid) && (libPath.getName().endsWith(".jar"))) valid = validateJar(libPath, fileData, checksums); @@ -184,7 +184,7 @@ public class ForgeInstaller { try (JarInputStream jar = new JarInputStream(new ByteArrayInputStream(data))) { JarEntry entry = jar.getNextJarEntry(); while (entry != null) { - byte[] eData = IOUtils.readFully(jar).toByteArray(); + byte[] eData = IOUtils.toByteArray(jar); if (entry.getName().equals("checksums.sha1")) hashes = new String(eData, Charset.forName("UTF-8")).split("\n"); diff --git a/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/server/Server.java b/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/server/Server.java index 7c55aa46a..1e2682a8a 100755 --- a/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/server/Server.java +++ b/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/server/Server.java @@ -24,7 +24,6 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStreamWriter; -import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; @@ -47,6 +46,7 @@ import org.jackhuang.hellominecraft.svrmgr.util.WaitForThread; import org.jackhuang.hellominecraft.svrmgr.util.Utilities; import org.jackhuang.hellominecraft.util.Event; import org.jackhuang.hellominecraft.util.EventHandler; +import org.jackhuang.hellominecraft.util.code.Charsets; import org.jackhuang.hellominecraft.util.func.Consumer; /** @@ -54,7 +54,7 @@ import org.jackhuang.hellominecraft.util.func.Consumer; * @author huangyuhui */ public class Server implements Event, MonitorThread.MonitorThreadListener, - ActionListener { + ActionListener { private static Server instance; private static boolean disactived = false; @@ -125,17 +125,13 @@ public class Server implements Event, MonitorThread.MonitorThreadListen pb.directory(new File(SettingsManager.settings.mainjar).getParentFile()); try { disactiveMods(SettingsManager.settings.inactiveExtMods, - SettingsManager.settings.inactiveCoreMods, - SettingsManager.settings.inactivePlugins); + SettingsManager.settings.inactiveCoreMods, + SettingsManager.settings.inactivePlugins); server = pb.start(); registerThread(threadA, server.getInputStream()); registerThread(threadB, server.getErrorStream()); registerThreadC(server); - try { - bw = new BufferedWriter(new OutputStreamWriter(server.getOutputStream(), System.getProperty("sun.jnu.encoding", "utf-8"))); - } catch (UnsupportedEncodingException ex) { - bw = new BufferedWriter(new OutputStreamWriter(server.getOutputStream())); - } + bw = new BufferedWriter(new OutputStreamWriter(server.getOutputStream(), Charsets.toCharset())); isRunning = true; startedEvent.execute(null); sendStatus("*** 启动服务端中 ***"); @@ -244,7 +240,7 @@ public class Server implements Event, MonitorThread.MonitorThreadListen } private static void disactiveMods(ArrayList inactiveExtMods, - ArrayList inactiveCoreMods, ArrayList inactivePlugins) { + ArrayList inactiveCoreMods, ArrayList inactivePlugins) { disactiveModsByType(inactiveExtMods, "mods"); disactiveModsByType(inactiveCoreMods, "coremods"); disactiveModsByType(inactivePlugins, "plugins"); @@ -267,7 +263,7 @@ public class Server implements Event, MonitorThread.MonitorThreadListen String name = file.getName(); if ((!paramArrayOfString.contains(name)) - || ((!name.toLowerCase().endsWith(".zip")) && (!name.toLowerCase().endsWith(".jar")))) + || ((!name.toLowerCase().endsWith(".zip")) && (!name.toLowerCase().endsWith(".jar")))) continue; String newName = name + "X"; diff --git a/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/setting/PlayerList.java b/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/setting/PlayerList.java index b0236de4a..0f69d94a7 100755 --- a/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/setting/PlayerList.java +++ b/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/setting/PlayerList.java @@ -90,7 +90,7 @@ public abstract class PlayerList { op = null; if (txt.exists()) try { - initByText(FileUtils.readIgnoreFileNotFound(txt)); + initByText(FileUtils.read(txt)); if (op != null) player.addAll(op); } catch (IOException e) { @@ -100,7 +100,7 @@ public abstract class PlayerList { } public void saveAsText(File file) throws IOException { - FileUtils.write(file, StrUtils.parseParams("", op, System.getProperty("line.separator"))); + FileUtils.write(file, StrUtils.parseParams("", op.toArray(), System.getProperty("line.separator"))); } public void saveAsJson(File file) throws IOException { diff --git a/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/setting/ServerProperties.java b/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/setting/ServerProperties.java index 814a3777e..8bb6c5c19 100755 --- a/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/setting/ServerProperties.java +++ b/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/setting/ServerProperties.java @@ -26,6 +26,7 @@ import java.text.SimpleDateFormat; import java.util.Date; import java.util.Properties; import org.jackhuang.hellominecraft.util.logging.HMCLog; +import org.jackhuang.hellominecraft.util.system.FileUtils; import org.jackhuang.hellominecraft.util.system.IOUtils; /** @@ -58,7 +59,7 @@ public class ServerProperties { public String getProperty(String key, String defaultValue) { try { - is = new FileInputStream(new File(path, "server.properties")); + is = FileUtils.openInputStream(new File(path, "server.properties")); p = new Properties(); p.load(is); return p.getProperty(key, defaultValue); @@ -84,12 +85,12 @@ public class ServerProperties { public void setProperty(String key, String value) { try { - is = new FileInputStream(new File(path, "server.properties")); + is = FileUtils.openInputStream(new File(path, "server.properties")); p = new Properties(); p.load(is); p.setProperty(key, value); SimpleDateFormat f = new SimpleDateFormat("E M d HH:mm:ss z y"); - p.store(new FileOutputStream(new File(path, "server.properties")), + p.store(FileUtils.openOutputStream(new File(path, "server.properties")), "Minecraft server properties\n" + f.format(new Date())); } catch (IOException ex) { HMCLog.warn("Failed to set property in server.properties", ex); diff --git a/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/ui/MainWindow.java b/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/ui/MainWindow.java index b5f37d057..2c8d18e25 100755 --- a/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/ui/MainWindow.java +++ b/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/ui/MainWindow.java @@ -86,7 +86,7 @@ import org.jackhuang.hellominecraft.svrmgr.util.IPGet; import org.jackhuang.hellominecraft.svrmgr.util.Utilities; import org.jackhuang.hellominecraft.util.ui.SwingUtils; import org.jackhuang.hellominecraft.svrmgr.util.version.MinecraftRemoteVersion; -import org.jackhuang.hellominecraft.lookandfeel.comp.ConstomButton; +import org.jackhuang.hellominecraft.lookandfeel.ConstomButton; import org.jackhuang.hellominecraft.util.Event; import org.jackhuang.hellominecraft.util.StrUtils; diff --git a/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/util/MonitorThread.java b/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/util/MonitorThread.java index 581879058..02d055160 100755 --- a/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/util/MonitorThread.java +++ b/HMCSM/src/main/java/org/jackhuang/hellominecraft/svrmgr/util/MonitorThread.java @@ -21,8 +21,8 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; import java.util.ArrayList; +import org.jackhuang.hellominecraft.util.code.Charsets; import org.jackhuang.hellominecraft.util.logging.HMCLog; /** @@ -42,11 +42,7 @@ public class MonitorThread extends Thread { public MonitorThread(InputStream is) { this.listeners = new ArrayList<>(5); - try { - br = new BufferedReader(new InputStreamReader(is, System.getProperty("sun.jnu.encoding", "gbk"))); - } catch (UnsupportedEncodingException ex) { - br = new BufferedReader(new InputStreamReader(is)); - } + br = new BufferedReader(new InputStreamReader(is, Charsets.toCharset(System.getProperty("sun.jnu.encoding", "gbk")))); } public void addListener(MonitorThreadListener l) { diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/AbstractSwingWorker.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/AbstractSwingWorker.java index e666477e7..6a3f0fa4c 100644 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/AbstractSwingWorker.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/AbstractSwingWorker.java @@ -47,12 +47,12 @@ public abstract class AbstractSwingWorker extends SwingWorker { return null; } - public AbstractSwingWorker reg(Consumer c) { + public AbstractSwingWorker reg(Consumer c) { processListeners.add(Objects.requireNonNull(c)); return this; } - public AbstractSwingWorker regDone(Runnable c) { + public AbstractSwingWorker regDone(Runnable c) { doneListeners.add(Objects.requireNonNull(c)); return this; } diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ArrayUtils.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ArrayUtils.java index e5b4a4651..4fb48c1d4 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ArrayUtils.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ArrayUtils.java @@ -18,6 +18,8 @@ package org.jackhuang.hellominecraft.util; import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; import java.util.List; import java.util.Map; @@ -57,10 +59,6 @@ public final class ArrayUtils { return -1; } - public static int lastIndexOf(T[] array, T valueToFind) { - return lastIndexOf(array, valueToFind, 2147483647); - } - public static int lastIndexOf(T[] array, T valueToFind, int startIndex) { if (array == null) return -1; @@ -75,16 +73,16 @@ public final class ArrayUtils { } public static ArrayList merge(List a, List b) { - ArrayList al = new ArrayList(a.size() + b.size()); + ArrayList al = new ArrayList<>(a.size() + b.size()); al.addAll(a); al.addAll(b); return al; } - public static List tryGetMapWithList(Map map, String key) { - List l = (List) map.get(key); + public static List tryGetMapWithList(Map> map, String key) { + List l = (List) map.get(key); if (l == null) - map.put(key, l = new ArrayList()); + map.put(key, l = new ArrayList<>()); return l; } @@ -102,4 +100,8 @@ public final class ArrayUtils { } return -1; } + + public static boolean hasDuplicateElements(T[] t) { + return new HashSet<>(Arrays.asList(t)).size() < t.length; + } } diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/C.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/C.java index 2c8f5a111..8dba3ae2b 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/C.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/C.java @@ -35,10 +35,6 @@ public final class C { public static final String URL_GITHUB = "https://github.com/huanghongxun/HMCL/issues"; public static final String URL_MINECRAFTFORUM = "http://www.minecraftforum.net/forums/mapping-and-modding/minecraft-tools/1265720-hello-minecraft-launcher-1-9-3-mc-1-7-4-auto"; - public static final String FILE_MINECRAFT_VERSIONS = "versions"; - - public static final String LINE_SEPARATOR = System.getProperty("line.separator"); - public static final String URL_FORGE_LIST = "http://files.minecraftforge.net/maven/net/minecraftforge/forge/json"; public static final String URL_LITELOADER_LIST = "http://dl.liteloader.com/versions/versions.json"; diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/EventHandler.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/EventHandler.java index 450976a16..8f6f3a96f 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/EventHandler.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/EventHandler.java @@ -49,26 +49,14 @@ public class EventHandler { events.add(t); } - public void unregister(Event t) { - events.remove(t); - } - - public void unregister(Consumer t) { - events.remove(t); - } - - public void unregister(Runnable t) { - events.remove(t); - } - public boolean execute(T x) { boolean flag = true; for (Object t : events) if (t instanceof Event) { - if (!((Event) t).call(sender, x)) + if (!((Event) t).call(sender, x)) flag = false; } else if (t instanceof Consumer) - ((Consumer) t).accept(x); + ((Consumer) t).accept(x); else if (t instanceof Runnable) ((Runnable) t).run(); return flag; diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/LauncherPrintStream.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/LauncherPrintStream.java deleted file mode 100755 index 0c0b81ace..000000000 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/LauncherPrintStream.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Hello Minecraft!. - * Copyright (C) 2013 huangyuhui - * - * 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.util; - -import org.jackhuang.hellominecraft.util.func.Consumer; -import java.io.OutputStream; -import java.io.PrintStream; -import java.util.ArrayList; - -/** - * - * @author huangyuhui - */ -public class LauncherPrintStream extends PrintStream { - - private final ArrayList> printListeners = new ArrayList<>(); - - public LauncherPrintStream(OutputStream paramOutputStream) { - super(paramOutputStream); - } - - @Override - public final void println(String paramString) { - super.println(paramString); - - for (Consumer a1 : printListeners) - a1.accept(paramString); - } - - public final LauncherPrintStream addPrintListener(Consumer paraml) { - this.printListeners.add(paraml); - return this; - } -} diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/MinecraftVersionRequest.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/MinecraftVersionRequest.java index 259e3770e..e904964de 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/MinecraftVersionRequest.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/MinecraftVersionRequest.java @@ -68,7 +68,7 @@ public class MinecraftVersionRequest implements Serializable { private static MinecraftVersionRequest getVersionOfOldMinecraft(ZipFile file, ZipEntry entry) throws IOException { MinecraftVersionRequest r = new MinecraftVersionRequest(); - byte[] tmp = IOUtils.readFully(file.getInputStream(entry)).toByteArray(); + byte[] tmp = IOUtils.toByteArray(file.getInputStream(entry)); byte[] bytes = "Minecraft Minecraft ".getBytes("ASCII"); int j = ArrayUtils.matchArray(tmp, bytes); @@ -92,7 +92,7 @@ public class MinecraftVersionRequest implements Serializable { private static MinecraftVersionRequest getVersionOfNewMinecraft(ZipFile file, ZipEntry entry) throws IOException { MinecraftVersionRequest r = new MinecraftVersionRequest(); - byte[] tmp = IOUtils.readFully(file.getInputStream(entry)).toByteArray(); + byte[] tmp = IOUtils.toByteArray(file.getInputStream(entry)); byte[] str = "-server.txt".getBytes("ASCII"); int j = ArrayUtils.matchArray(tmp, str); diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/NetUtils.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/NetUtils.java index 5b8fd4bed..135a9b7c7 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/NetUtils.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/NetUtils.java @@ -55,10 +55,6 @@ public final class NetUtils { return get(url, IOUtils.DEFAULT_CHARSET); } - public static String get(URL url) throws IOException { - return get(url, Proxy.NO_PROXY); - } - public static String get(URL url, Proxy proxy) throws IOException { return readData(createConnection(url, proxy)); } @@ -123,12 +119,4 @@ public final class NetUtils { return null; } } - - public static URL concatenateURL(URL url, String query) { - try { - return new URL(url.getProtocol(), url.getHost(), url.getPort(), url.getFile() + (url.getQuery() != null && url.getQuery().length() > 0 ? '&' : '?') + query); - } catch (MalformedURLException ex) { - throw new IllegalArgumentException("Could not concatenate given URL with GET arguments!", ex); - } - } } diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/StrUtils.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/StrUtils.java index d5cbd42fe..d6f9db641 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/StrUtils.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/StrUtils.java @@ -17,7 +17,6 @@ */ package org.jackhuang.hellominecraft.util; -import java.awt.Dimension; import java.io.PrintWriter; import java.io.StringWriter; import java.lang.reflect.Array; @@ -72,15 +71,6 @@ public final class StrUtils { return base != null && base.startsWith(match); } - public static boolean startsWithOne(String[] a, String match) { - if (a == null) - return false; - for (String b : a) - if (startsWith(match, b)) - return true; - return false; - } - public static boolean startsWithOne(Collection a, String match) { if (a == null) return false; @@ -97,21 +87,6 @@ public final class StrUtils { return false; } - public static boolean containsOne(String base, String... match) { - for (String s : match) - if (base.contains(s)) - return true; - return false; - } - - public static boolean containsOne(List base, List match) { - for (String a : base) - for (String b : match) - if (a.toLowerCase().contains(b.toLowerCase())) - return true; - return false; - } - public static boolean containsOne(List base, List match, Predicate pred) { for (String a : base) for (String b : match) @@ -142,12 +117,12 @@ public final class StrUtils { return ver; } - public static String parseParams(String addBefore, Collection paramArrayOfObject, String paramString) { - return parseParams(addBefore, paramArrayOfObject.toArray(), paramString); + public static String parseParams(String addBefore, Collection objects, String addAfter) { + return parseParams(addBefore, objects.toArray(), addAfter); } - public static String parseParams(String addBefore, Object[] params, String addAfter) { - return parseParams(t -> addBefore, params, t -> addAfter); + public static String parseParams(String addBefore, Object[] objects, String addAfter) { + return parseParams(t -> addBefore, objects, t -> addAfter); } public static String parseParams(Function beforeFunc, Object[] params, Function afterFunc) { @@ -179,37 +154,19 @@ public final class StrUtils { return sb.toString(); } - public static boolean equals(String base, String to) { - if (base == null) - return to == null; - else - return base.equals(to); - } - - public static Dimension parseDimension(String str) { - String[] tokenized = tokenize(str, "x,"); - if (tokenized.length != 2) - return null; - int i = MathUtils.parseInt(tokenized[0], -1); - int j = MathUtils.parseInt(tokenized[1], -1); - if ((i < 0) || (j < 0)) - return null; - return new Dimension(i, j); - } - public static String[] tokenize(String paramString1) { return tokenize(paramString1, " \t\n\r\f"); } - public static String[] tokenize(String paramString1, String paramString2) { - ArrayList localArrayList = new ArrayList(); - StringTokenizer tokenizer = new StringTokenizer(paramString1, paramString2); + public static String[] tokenize(String str, String delim) { + ArrayList al = new ArrayList<>(); + StringTokenizer tokenizer = new StringTokenizer(str, delim); while (tokenizer.hasMoreTokens()) { - paramString2 = tokenizer.nextToken(); - localArrayList.add(paramString2); + delim = tokenizer.nextToken(); + al.add(delim); } - return (String[]) localArrayList.toArray(new String[localArrayList.size()]); + return al.toArray(new String[al.size()]); } public static boolean isBlank(String s) { @@ -226,14 +183,4 @@ public final class StrUtils { t.printStackTrace(writer); return trace.toString(); } - - public static List findAllPos(String t, String p) { - ArrayList ret = new ArrayList<>(); - int i = 0, index; - while ((index = t.indexOf(p, i)) != -1) { - ret.add(index); - i = index + p.length(); - } - return ret; - } } diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/UpdateChecker.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/UpdateChecker.java index f30e2cedc..b39a772be 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/UpdateChecker.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/UpdateChecker.java @@ -47,7 +47,7 @@ public final class UpdateChecker implements IUpdateChecker { @Override public AbstractSwingWorker process(final boolean showMessage) { - return new AbstractSwingWorker() { + return new AbstractSwingWorker() { @Override protected void work() throws Exception { if (value == null) { @@ -74,12 +74,12 @@ public final class UpdateChecker implements IUpdateChecker { @Override public synchronized AbstractSwingWorker> requestDownloadLink() { - return new AbstractSwingWorker() { + return new AbstractSwingWorker>() { @Override protected void work() throws Exception { if (download_link == null) try { - download_link = C.GSON.fromJson(NetUtils.get("http://huangyuhui.duapp.com/update_link.php?type=" + type), Map.class); + download_link = C.GSON.>fromJson(NetUtils.get("http://huangyuhui.duapp.com/update_link.php?type=" + type), Map.class); } catch (JsonSyntaxException | IOException e) { HMCLog.warn("Failed to get update link.", e); } diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/Utils.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/Utils.java index 77c9ae792..b90acdf42 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/Utils.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/Utils.java @@ -52,7 +52,7 @@ public final class Utils { */ public static void shutdownForcely(int status) throws Exception { AccessController.doPrivileged((PrivilegedExceptionAction) () -> { - Class z = Class.forName("java.lang.Shutdown"); + Class z = Class.forName("java.lang.Shutdown"); Method exit = z.getDeclaredMethod("exit", int.class); exit.setAccessible(true); exit.invoke(z, status); diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/code/Base64.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/code/Base64.java deleted file mode 100755 index 31ae91c1b..000000000 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/code/Base64.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Hello Minecraft!. - * Copyright (C) 2013 huangyuhui - * - * 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.util.code; - -/** - * - * @author huangyuhui - */ -public final class Base64 { - - private Base64() { - } - - public static char[] encode(byte[] data) { - char[] out = new char[((data.length + 2) / 3) * 4]; - for (int i = 0, index = 0; i < data.length; i += 3, index += 4) { - boolean quad = false; - boolean trip = false; - int val = (0xFF & (int) data[i]); - val <<= 8; - if ((i + 1) < data.length) { - val |= (0xFF & (int) data[i + 1]); - trip = true; - } - val <<= 8; - if ((i + 2) < data.length) { - val |= (0xFF & (int) data[i + 2]); - quad = true; - } - out[index + 3] = ALPHABET[(quad ? (val & 0x3F) : 64)]; - val >>= 6; - out[index + 2] = ALPHABET[(trip ? (val & 0x3F) : 64)]; - val >>= 6; - out[index + 1] = ALPHABET[val & 0x3F]; - val >>= 6; - out[index + 0] = ALPHABET[val & 0x3F]; - } - return out; - } - - public static char[] encode(String s) { - return encode(s.getBytes(Charsets.UTF_8)); - } - - public static byte[] decode(char[] data) { - int len = ((data.length + 3) / 4) * 3; - if (data.length > 0 && data[data.length - 1] == '=') - --len; - if (data.length > 1 && data[data.length - 2] == '=') - --len; - byte[] out = new byte[len]; - int shift = 0; - int accum = 0; - int index = 0; - for (int ix = 0; ix < data.length; ix++) { - int value = CODES[data[ix] & 0xFF]; - if (value >= 0) { - accum <<= 6; - shift += 6; - accum |= value; - if (shift >= 8) { - shift -= 8; - out[index++] = (byte) ((accum >> shift) & 0xff); - } - } - } - if (index != out.length) - throw new Error("miscalculated data length!"); - return out; - } - private static final char[] ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=" - .toCharArray(); - private static final byte[] CODES = new byte[256]; - - static { - for (int i = 0; i < 256; i++) - CODES[i] = -1; - for (int i = 'A'; i <= 'Z'; i++) - CODES[i] = (byte) (i - 'A'); - for (int i = 'a'; i <= 'z'; i++) - CODES[i] = (byte) (26 + i - 'a'); - for (int i = '0'; i <= '9'; i++) - CODES[i] = (byte) (52 + i - '0'); - CODES['+'] = 62; - CODES['/'] = 63; - } -} diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/code/Charsets.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/code/Charsets.java index e82910087..a4fc9d024 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/code/Charsets.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/code/Charsets.java @@ -18,13 +18,15 @@ package org.jackhuang.hellominecraft.util.code; import java.nio.charset.Charset; +import java.nio.charset.UnsupportedCharsetException; +import org.jackhuang.hellominecraft.util.system.IOUtils; public final class Charsets { private Charsets() { } - public static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1"); + /*public static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1"); public static final Charset US_ASCII = Charset.forName("US-ASCII"); @@ -32,15 +34,22 @@ public final class Charsets { public static final Charset UTF_16BE = Charset.forName("UTF-16BE"); - public static final Charset UTF_16LE = Charset.forName("UTF-16LE"); + public static final Charset UTF_16LE = Charset.forName("UTF-16LE");*/ public static final Charset UTF_8 = Charset.forName("UTF-8"); - - public static Charset toCharset(Charset charset) { - return charset == null ? Charset.defaultCharset() : charset; - } + + public static final Charset DEFAULT_CHARSET = UTF_8; public static Charset toCharset(String charset) { - return charset == null ? Charset.defaultCharset() : Charset.forName(charset); + if (charset == null) return Charset.defaultCharset(); + try { + return Charset.forName(charset); + } catch(UnsupportedCharsetException ignored) { + return Charset.defaultCharset(); + } + } + + public static Charset toCharset() { + return toCharset(System.getProperty("sun.jnu.encoding", IOUtils.DEFAULT_CHARSET)); } } diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/code/DigestUtils.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/code/DigestUtils.java index 4f4176b1e..17d9b7350 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/code/DigestUtils.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/code/DigestUtils.java @@ -70,11 +70,6 @@ public final class DigestUtils { return getDigest("SHA-512"); } - @Deprecated - public static MessageDigest getShaDigest() { - return getSha1Digest(); - } - public static byte[] md2(byte[] data) { return getMd2Digest().digest(data); } @@ -127,22 +122,6 @@ public final class DigestUtils { return Hex.encodeHexString(md5(data)); } - @Deprecated - public static byte[] sha(byte[] data) { - return sha1(data); - } - - @Deprecated - public static byte[] sha(InputStream data) - throws IOException { - return sha1(data); - } - - @Deprecated - public static byte[] sha(String data) { - return sha1(data); - } - public static byte[] sha1(byte[] data) { return getSha1Digest().digest(data); } @@ -247,22 +226,6 @@ public final class DigestUtils { return Hex.encodeHexString(sha512(data)); } - @Deprecated - public static String shaHex(byte[] data) { - return sha1Hex(data); - } - - @Deprecated - public static String shaHex(InputStream data) - throws IOException { - return sha1Hex(data); - } - - @Deprecated - public static String shaHex(String data) { - return sha1Hex(data); - } - public static MessageDigest updateDigest(MessageDigest messageDigest, byte[] valueToDigest) { messageDigest.update(valueToDigest); return messageDigest; diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/code/Hex.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/code/Hex.java index c678aaf40..44773f209 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/code/Hex.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/code/Hex.java @@ -21,8 +21,6 @@ import java.nio.charset.Charset; public final class Hex { - public static final Charset DEFAULT_CHARSET = Charsets.UTF_8; - public static final String DEFAULT_CHARSET_NAME = "UTF-8"; private static final char[] DIGITS_LOWER = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; private static final char[] DIGITS_UPPER = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; @@ -80,17 +78,13 @@ public final class Hex { } public Hex() { - this.charset = DEFAULT_CHARSET; + this(Charsets.DEFAULT_CHARSET); } public Hex(Charset charset) { this.charset = charset; } - public Hex(String charsetName) { - this(Charset.forName(charsetName)); - } - public byte[] decode(byte[] array) throws Exception { return decodeHex(new String(array, getCharset()).toCharArray()); } diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/func/BiConsumer.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/func/BiConsumer.java deleted file mode 100755 index 0b9fd1bd1..000000000 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/func/BiConsumer.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Hello Minecraft!. - * Copyright (C) 2013 huangyuhui - * - * 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.util.func; - -/** - * @author huangyuhui - */ -public interface BiConsumer { - - void call(V value, V2 value2); -} diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/func/TriConsumer.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/func/TriConsumer.java deleted file mode 100755 index 5281028de..000000000 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/func/TriConsumer.java +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Hello Minecraft!. - * Copyright (C) 2013 huangyuhui - * - * 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.util.func; - -/** - * - * @author huangyuhui - */ -public interface TriConsumer { - - void onDone(V1 v1, V2 v2, V3 v3); -} diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/AppenderControl.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/AppenderControl.java index 3ea9e6918..a530db27c 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/AppenderControl.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/AppenderControl.java @@ -21,7 +21,7 @@ import org.jackhuang.hellominecraft.util.logging.appender.IAppender; public class AppenderControl { - private final ThreadLocal recursive = new ThreadLocal(); + private final ThreadLocal recursive = new ThreadLocal<>(); private final IAppender appender; private final Level level; private final int intLevel; diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/HMCLog.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/HMCLog.java index 10b753129..270d2668f 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/HMCLog.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/HMCLog.java @@ -35,18 +35,10 @@ public class HMCLog { LOGGER.warn(message); } - public static void debug(String message) { - LOGGER.debug(message); - } - public static void warn(String msg, Throwable t) { LOGGER.warn(msg, t); } - public static void debug(String msg, Throwable t) { - LOGGER.debug(msg, t); - } - public static void err(String msg) { LOGGER.error(msg); } diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/Level.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/Level.java index 7bba9c70b..f09182646 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/Level.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/Level.java @@ -27,7 +27,6 @@ import java.util.regex.Pattern; */ public enum Level { - OFF(0, Color.gray), FATAL(1, Color.red), ERROR(2, Color.red), WARN(3, Color.orange), @@ -48,10 +47,6 @@ public enum Level { return this.level <= level.level; } - public boolean lessOrEqual(int level) { - return this.level <= level; - } - public static final Pattern MINECRAFT_LOGGER = Pattern.compile("\\[(?[0-9:]+)\\] \\[[^/]+/(?[^\\]]+)\\]"); public static final String JAVA_SYMBOL = "([a-zA-Z_$][a-zA-Z\\d_$]*\\.)+[a-zA-Z_$][a-zA-Z\\d_$]*"; diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/logger/AbstractLogger.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/logger/AbstractLogger.java index ce5269594..f44a98233 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/logger/AbstractLogger.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/logger/AbstractLogger.java @@ -28,7 +28,6 @@ public abstract class AbstractLogger public static final Class DEFAULT_MESSAGE_FACTORY_CLASS = ParameterizedMessageFactory.class; - private static final String FQCN = AbstractLogger.class.getName(); private static final String THROWING = "throwing"; private static final String CATCHING = "catching"; private final String name; @@ -68,50 +67,6 @@ public abstract class AbstractLogger catching(Level.ERROR, t); } - @Override - public void debug(IMessage msg) { - if (isEnabled(Level.DEBUG, msg, null)) - log(Level.DEBUG, msg, null); - } - - @Override - public void debug(IMessage msg, Throwable t) { - if (isEnabled(Level.DEBUG, msg, t)) - log(Level.DEBUG, msg, t); - } - - @Override - public void debug(Object message) { - if (isEnabled(Level.DEBUG, message, null)) - log(Level.DEBUG, this.messageFactory.newMessage(message), null); - } - - @Override - public void debug(Object message, Throwable t) { - if (isEnabled(Level.DEBUG, message, t)) - log(Level.DEBUG, this.messageFactory.newMessage(message), t); - } - - @Override - public void debug(String message) { - if (isEnabled(Level.DEBUG, message)) - log(Level.DEBUG, this.messageFactory.newMessage(message), null); - } - - @Override - public void debug(String message, Object[] params) { - if (isEnabled(Level.DEBUG, message, params)) { - IMessage msg = this.messageFactory.newMessage(message, params); - log(Level.DEBUG, msg, msg.getThrowable()); - } - } - - @Override - public void debug(String message, Throwable t) { - if (isEnabled(Level.DEBUG, message, t)) - log(Level.DEBUG, this.messageFactory.newMessage(message), t); - } - @Override public void entry() { entry(new Object[0]); @@ -395,50 +350,6 @@ public abstract class AbstractLogger return this.name; } - @Override - public void trace(IMessage msg) { - if (isEnabled(Level.TRACE, msg, null)) - log(Level.TRACE, msg, null); - } - - @Override - public void trace(IMessage msg, Throwable t) { - if (isEnabled(Level.TRACE, msg, t)) - log(Level.TRACE, msg, t); - } - - @Override - public void trace(Object message) { - if (isEnabled(Level.TRACE, message, null)) - log(Level.TRACE, this.messageFactory.newMessage(message), null); - } - - @Override - public void trace(Object message, Throwable t) { - if (isEnabled(Level.TRACE, message, t)) - log(Level.TRACE, this.messageFactory.newMessage(message), t); - } - - @Override - public void trace(String message) { - if (isEnabled(Level.TRACE, message)) - log(Level.TRACE, this.messageFactory.newMessage(message), null); - } - - @Override - public void trace(String message, Object[] params) { - if (isEnabled(Level.TRACE, message, params)) { - IMessage msg = this.messageFactory.newMessage(message, params); - log(Level.TRACE, msg, msg.getThrowable()); - } - } - - @Override - public void trace(String message, Throwable t) { - if (isEnabled(Level.TRACE, message, t)) - log(Level.TRACE, this.messageFactory.newMessage(message), t); - } - @Override public void warn(IMessage msg) { if (isEnabled(Level.WARN, msg, null)) diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/logger/ILogger.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/logger/ILogger.java index b4355607a..2e89ce88d 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/logger/ILogger.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/logger/ILogger.java @@ -30,20 +30,6 @@ public interface ILogger { void catching(Throwable paramThrowable); - void debug(IMessage paramIMessage); - - void debug(IMessage paramIMessage, Throwable paramThrowable); - - void debug(Object paramObject); - - void debug(Object paramObject, Throwable paramThrowable); - - void debug(String paramString); - - void debug(String paramString, Object[] paramArrayOfObject); - - void debug(String paramString, Throwable paramThrowable); - void entry(); void entry(Object[] paramArrayOfObject); @@ -126,20 +112,6 @@ public interface ILogger { T throwing(T paramT); - void trace(IMessage paramIMessage); - - void trace(IMessage paramIMessage, Throwable paramThrowable); - - void trace(Object paramObject); - - void trace(Object paramObject, Throwable paramThrowable); - - void trace(String paramString); - - void trace(String paramString, Object[] paramArrayOfObject); - - void trace(String paramString, Throwable paramThrowable); - void warn(IMessage paramIMessage); void warn(IMessage paramIMessage, Throwable paramThrowable); diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/logger/Logger.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/logger/Logger.java index b5cc7c6d8..83068bb6f 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/logger/Logger.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/logger/Logger.java @@ -31,7 +31,7 @@ import org.jackhuang.hellominecraft.util.logging.message.IMessageFactory; public class Logger extends AbstractLogger { protected volatile PrivateConfig config; - private final Map appenders = new ConcurrentHashMap(); + private final Map appenders = new ConcurrentHashMap<>(); public Logger(String name) { this(name, null, Level.INFO); @@ -109,8 +109,8 @@ public class Logger extends AbstractLogger { } public Map getAppenders() { - Map map = new HashMap(); - for (Map.Entry entry : this.appenders.entrySet()) + Map map = new HashMap<>(); + for (Map.Entry entry : this.appenders.entrySet()) map.put(entry.getKey(), ((AppenderControl) entry.getValue()).getAppender()); return map; } diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/logger/SimpleLogger.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/logger/SimpleLogger.java deleted file mode 100755 index facd7e4ff..000000000 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/logger/SimpleLogger.java +++ /dev/null @@ -1,137 +0,0 @@ -/* - * Hello Minecraft!. - * Copyright (C) 2013 huangyuhui - * - * 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.util.logging.logger; - -import java.io.ByteArrayOutputStream; -import java.io.PrintStream; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Date; -import org.jackhuang.hellominecraft.util.logging.Level; -import org.jackhuang.hellominecraft.util.logging.message.IMessage; -import org.jackhuang.hellominecraft.util.logging.message.IMessageFactory; - -public class SimpleLogger extends AbstractLogger { - - private static final char SPACE = ' '; - private DateFormat dateFormatter; - private Level level; - private final boolean showDateTime; - private final boolean showContextMap; - private PrintStream stream; - private final String logName; - - public SimpleLogger(String name, Level defaultLevel, boolean showLogName, boolean showShortLogName, boolean showDateTime, boolean showContextMap, String dateTimeFormat, IMessageFactory messageFactory, PrintStream stream) { - super(name, messageFactory); - this.level = defaultLevel; - if (showShortLogName) { - int index = name.lastIndexOf('.'); - if ((index > 0) && (index < name.length())) - this.logName = name.substring(index + 1); - else - this.logName = name; - } else if (showLogName) - this.logName = name; - else - this.logName = null; - this.showDateTime = showDateTime; - this.showContextMap = showContextMap; - this.stream = stream; - - if (showDateTime) - try { - this.dateFormatter = new SimpleDateFormat(dateTimeFormat); - } catch (IllegalArgumentException e) { - this.dateFormatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss:SSS zzz"); - } - } - - public void setStream(PrintStream stream) { - this.stream = stream; - } - - public Level getLevel() { - return this.level; - } - - public void setLevel(Level level) { - if (level != null) - this.level = level; - } - - @Override - public void abstractLog(Level level, IMessage msg, Throwable throwable) { - StringBuilder sb = new StringBuilder(); - - if (this.showDateTime) { - Date now = new Date(); - String dateText; - synchronized (this.dateFormatter) { - dateText = this.dateFormatter.format(now); - } - sb.append(dateText); - sb.append(SPACE); - } - - sb.append(level.toString()); - sb.append(SPACE); - if ((this.logName != null) && (this.logName.length() > 0)) { - sb.append(this.logName); - sb.append(SPACE); - } - sb.append(msg.getFormattedMessage()); - Object[] params = msg.getParameters(); - Throwable t; - if ((throwable == null) && (params != null) && ((params[(params.length - 1)] instanceof Throwable))) - t = (Throwable) params[(params.length - 1)]; - else - t = throwable; - if (t != null) { - sb.append(SPACE); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - t.printStackTrace(new PrintStream(baos)); - sb.append(baos.toString()); - } - this.stream.println(sb.toString()); - } - - @Override - protected boolean isEnabled(Level level, String msg) { - return this.level.level >= level.level; - } - - @Override - protected boolean isEnabled(Level level, String msg, Throwable t) { - return this.level.level >= level.level; - } - - @Override - protected boolean isEnabled(Level level, String msg, Object[] p1) { - return this.level.level >= level.level; - } - - @Override - protected boolean isEnabled(Level level, Object msg, Throwable t) { - return this.level.level >= level.level; - } - - @Override - protected boolean isEnabled(Level level, IMessage msg, Throwable t) { - return this.level.level >= level.level; - } -} diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/message/ParameterizedMessage.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/message/ParameterizedMessage.java index 7a05ca2f7..95de0aed0 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/message/ParameterizedMessage.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/message/ParameterizedMessage.java @@ -22,7 +22,6 @@ import java.util.Arrays; import java.util.Collection; import java.util.Date; import java.util.HashSet; -import java.util.Iterator; import java.util.Map; import java.util.Set; @@ -230,7 +229,7 @@ public class ParameterizedMessage if (o instanceof String) return (String) o; StringBuilder str = new StringBuilder(); - Set dejaVu = new HashSet(); + Set dejaVu = new HashSet<>(); recursiveDeepToString(o, str, dejaVu); return str.toString(); } @@ -244,7 +243,7 @@ public class ParameterizedMessage str.append(o); return; } - Class oClass = o.getClass(); + Class oClass = o.getClass(); if (oClass.isArray()) if (oClass == byte[].class) str.append(Arrays.toString((byte[]) (byte[]) o)); @@ -265,7 +264,7 @@ public class ParameterizedMessage else { String id = identityToString(o); if (dejaVu.contains(id)) - str.append("[...").append(id).append("...]"); + str.append(RECURSION_PREFIX).append(id).append(RECURSION_SUFFIX); else { dejaVu.add(id); Object[] oArray = (Object[]) (Object[]) o; @@ -276,7 +275,7 @@ public class ParameterizedMessage first = false; else str.append(", "); - recursiveDeepToString(current, str, new HashSet(dejaVu)); + recursiveDeepToString(current, str, new HashSet<>(dejaVu)); } str.append("]"); } @@ -284,42 +283,40 @@ public class ParameterizedMessage else if ((o instanceof Map)) { String id = identityToString(o); if (dejaVu.contains(id)) - str.append("[...").append(id).append("...]"); + str.append(RECURSION_PREFIX).append(id).append(RECURSION_SUFFIX); else { dejaVu.add(id); - Map oMap = (Map) o; + Map oMap = (Map) o; str.append("{"); boolean isFirst = true; - for (Object o1 : oMap.entrySet()) { - Map.Entry current = (Map.Entry) o1; + for (Map.Entry current : oMap.entrySet()) { if (isFirst) isFirst = false; else str.append(", "); Object key = current.getKey(); Object value = current.getValue(); - recursiveDeepToString(key, str, new HashSet(dejaVu)); + recursiveDeepToString(key, str, new HashSet<>(dejaVu)); str.append("="); - recursiveDeepToString(value, str, new HashSet(dejaVu)); + recursiveDeepToString(value, str, new HashSet<>(dejaVu)); } str.append("}"); } } else if ((o instanceof Collection)) { String id = identityToString(o); if (dejaVu.contains(id)) - str.append("[...").append(id).append("...]"); + str.append(RECURSION_PREFIX).append(id).append(RECURSION_SUFFIX); else { dejaVu.add(id); - Collection oCol = (Collection) o; + Collection oCol = (Collection) o; str.append("["); boolean isFirst = true; - for (Iterator i$ = oCol.iterator(); i$.hasNext();) { - Object anOCol = i$.next(); + for (Object anOCol : oCol) { if (isFirst) isFirst = false; else str.append(", "); - recursiveDeepToString(anOCol, str, new HashSet(dejaVu)); + recursiveDeepToString(anOCol, str, new HashSet<>(dejaVu)); } str.append("]"); } @@ -332,17 +329,17 @@ public class ParameterizedMessage try { str.append(o.toString()); } catch (Throwable t) { - str.append("[!!!"); + str.append(ERROR_PREFIX); str.append(identityToString(o)); - str.append("=>"); + str.append(ERROR_SEPARATOR); String msg = t.getMessage(); String className = t.getClass().getName(); str.append(className); if (!className.equals(msg)) { - str.append(":"); + str.append(ERROR_MSG_SEPARATOR); str.append(msg); } - str.append("!!!]"); + str.append(ERROR_SUFFIX); } } diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/message/ParameterizedMessageFactory.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/message/ParameterizedMessageFactory.java index 95474e0e0..e2a9059f9 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/message/ParameterizedMessageFactory.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/logging/message/ParameterizedMessageFactory.java @@ -23,8 +23,6 @@ package org.jackhuang.hellominecraft.util.logging.message; */ public final class ParameterizedMessageFactory extends AbstractMessageFactory { - public static final ParameterizedMessageFactory INSTANCE = new ParameterizedMessageFactory(); - @Override public IMessage newMessage(String message, Object[] params) { return new ParameterizedMessage(message, params); diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/CompressingUtils.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/CompressingUtils.java index 5dc5b41de..4d3653c12 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/CompressingUtils.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/CompressingUtils.java @@ -17,10 +17,7 @@ */ package org.jackhuang.hellominecraft.util.system; -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; import java.io.File; -import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; @@ -55,9 +52,7 @@ public final class CompressingUtils { * @throws java.io.IOException 压缩失败或无法读取 */ public static void zip(File sourceDir, File zipFile, BiFunction pathNameCallback) throws IOException { - FileOutputStream os = new FileOutputStream(zipFile); - BufferedOutputStream bos = new BufferedOutputStream(os); - try (ZipOutputStream zos = new ZipOutputStream(bos)) { + try (ZipOutputStream zos = new ZipOutputStream(FileUtils.openOutputStream(zipFile))) { String basePath; if (sourceDir.isDirectory()) basePath = sourceDir.getPath(); @@ -68,30 +63,6 @@ public final class CompressingUtils { } } - /** - * 功能:把 sourceDir 目录下的所有文件进行 zip 格式的压缩,保存为指定 zip 文件 - * - * @param sourceDir 源文件夹 - * @param zipFile 压缩生成的zip文件路径。 - * @param pathNameCallback callback(pathName, isDirectory) returns your - * modified pathName - * - * @throws java.io.IOException 压缩失败或无法读取 - */ - public static ZipOutputStream zipContinuing(File sourceDir, File zipFile, BiFunction pathNameCallback) throws IOException { - FileOutputStream os = new FileOutputStream(zipFile); - BufferedOutputStream bos = new BufferedOutputStream(os); - try (ZipOutputStream zos = new ZipOutputStream(bos)) { - String basePath; - if (sourceDir.isDirectory()) - basePath = sourceDir.getPath(); - else//直接压缩单个文件时,取父目录 - basePath = sourceDir.getParent(); - zipFile(sourceDir, basePath, zos, pathNameCallback); - return zos; - } - } - /** * 将文件压缩成zip文件 * @@ -128,18 +99,13 @@ public final class CompressingUtils { pathName = pathNameCallback.apply(pathName, true); if (pathName == null) continue; - try (InputStream is = new FileInputStream(file)) { - BufferedInputStream bis = new BufferedInputStream(is); + try (InputStream is = FileUtils.openInputStream(file)) { zos.putNextEntry(new ZipEntry(pathName)); - IOUtils.copyStream(bis, zos, buf); + IOUtils.copyStream(is, zos, buf); } } } - public static void unzip(String zipFileName, String extPlace) throws IOException { - unzip(new File(zipFileName), new File(extPlace)); - } - public static void unzip(File zipFileName, File extPlace) throws IOException { unzip(zipFileName, extPlace, null, true); } @@ -157,7 +123,7 @@ public final class CompressingUtils { public static void unzip(File zipFileName, File extPlace, Predicate callback, boolean ignoreExistsFile) throws IOException { byte[] buf = new byte[1024]; extPlace.mkdirs(); - try (ZipInputStream zipFile = new ZipInputStream(new FileInputStream(zipFileName))) { + try (ZipInputStream zipFile = new ZipInputStream(FileUtils.openInputStream(zipFileName))) { if (zipFileName.exists()) { String strPath, gbkPath, strtemp; strPath = extPlace.getAbsolutePath(); @@ -186,7 +152,7 @@ public final class CompressingUtils { } if (ignoreExistsFile && new File(strtemp).exists()) continue; - try (FileOutputStream fos = new FileOutputStream(strtemp)) { + try (FileOutputStream fos = FileUtils.openOutputStream(new File(strtemp))) { IOUtils.copyStream(zipFile, fos, buf); } } diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/FileUtils.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/FileUtils.java index b7043186d..41fb160dd 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/FileUtils.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/FileUtils.java @@ -152,11 +152,11 @@ public final class FileUtils { if (srcDir.getCanonicalPath().equals(destDir.getCanonicalPath())) throw new IOException("Source '" + srcDir + "' and destination '" + destDir + "' are the same"); - List exclusionList = null; + List exclusionList = null; if (destDir.getCanonicalPath().startsWith(srcDir.getCanonicalPath())) { File[] srcFiles = filter == null ? srcDir.listFiles() : srcDir.listFiles(filter); if ((srcFiles != null) && (srcFiles.length > 0)) { - exclusionList = new ArrayList(srcFiles.length); + exclusionList = new ArrayList<>(srcFiles.length); for (File srcFile : srcFiles) { File copiedFile = new File(destDir, srcFile.getName()); exclusionList.add(copiedFile.getCanonicalPath()); @@ -193,12 +193,12 @@ public final class FileUtils { public static String read(File file) throws IOException { - return IOUtils.toString(IOUtils.openInputStream(file)); + return IOUtils.toString(openInputStream(file)); } public static String readQuietly(File file) { try { - return IOUtils.toString(IOUtils.openInputStream(file)); + return IOUtils.toString(openInputStream(file)); } catch (IOException ex) { HMCLog.err("Failed to read file: " + file, ex); return null; @@ -207,15 +207,7 @@ public final class FileUtils { public static String read(File file, String charset) throws IOException { - return IOUtils.toString(IOUtils.openInputStream(file), charset); - } - - public static String readIgnoreFileNotFound(File file) throws IOException { - try { - return IOUtils.toString(IOUtils.openInputStream(file)); - } catch (FileNotFoundException ex) { - return ""; - } + return IOUtils.toString(openInputStream(file), charset); } public static void copyFileQuietly(File srcFile, File destFile) { @@ -371,7 +363,7 @@ public final class FileUtils { } public static File[] searchSuffix(File dir, String suffix) { - ArrayList al = new ArrayList(); + ArrayList al = new ArrayList<>(); File[] files = dir.listFiles(); if (files == null) return new File[0]; diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/IOUtils.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/IOUtils.java index 076ec511a..8dc318e26 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/IOUtils.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/IOUtils.java @@ -21,8 +21,6 @@ import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.Closeable; import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -81,16 +79,6 @@ public final class IOUtils { return t; } - public static String extractLastDirectory(String dir) { - String t = removeLastSeparator(dir); - int i = t.length() - 1; - while (i >= 0 && !isSeparator(dir.charAt(i))) - i--; - if (i < 0) - return t; - return t.substring(i + 1, (t.length() - i) + (i + 1) - 1); - } - public static void findAllFile(File f, Consumer callback) { if (f.isDirectory()) { File[] f1 = f.listFiles(); @@ -110,7 +98,7 @@ public final class IOUtils { callback.accept(f1[i].getName()); } } - + public static String getRealPath() { String realPath = IOUtils.class.getClassLoader().getResource("").getFile(); java.io.File file = new java.io.File(realPath); @@ -171,11 +159,6 @@ public final class IOUtils { return mac; } - public static String extractFileName(String fileName) { - File file = new File(fileName); - return file.getName(); - } - public static String getJavaDir() { return getJavaDir(System.getProperty("java.home")); } @@ -246,18 +229,6 @@ public final class IOUtils { output.write(data.getBytes(encoding)); } - public static FileInputStream openInputStream(File file) - throws IOException { - if (file.exists()) { - if (file.isDirectory()) - throw new IOException("File '" + file + "' exists but is a directory"); - if (!file.canRead()) - throw new IOException("File '" + file + "' cannot be read"); - } else - throw new FileNotFoundException("File '" + file + "' does not exist"); - return new FileInputStream(file); - } - public static String tryGetCanonicalFolderPath(File file) { try { return IOUtils.addSeparator(file.getCanonicalPath()); diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/JavaProcess.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/JavaProcess.java index d4b06d847..477c5f2b3 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/JavaProcess.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/JavaProcess.java @@ -30,10 +30,12 @@ public class JavaProcess { private final List commands; private final Process process; private final ArrayList stdOutLines = new ArrayList<>(); + private final ProcessManager pm; public JavaProcess(List commands, Process process, ProcessManager pm) { this.commands = commands; this.process = process; + this.pm = pm; if (pm != null) pm.registerProcess(this); } @@ -53,6 +55,10 @@ public class JavaProcess { public String getStartupCommand() { return this.process.toString(); } + + public ProcessManager getProcessManager() { + return pm; + } public ArrayList getStdOutLines() { return this.stdOutLines; diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/JdkVersion.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/JdkVersion.java index eb5b6405b..d58ee22ed 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/JdkVersion.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/JdkVersion.java @@ -115,15 +115,6 @@ public final class JdkVersion implements Cloneable { */ public static final int JAVA_19 = 6; - private static final String JAVA_VER; - private static final int MAJOR_JAVA_VER; - - static { - JAVA_VER = System.getProperty("java.version"); - // version String should look like "1.4.2_10" - MAJOR_JAVA_VER = parseVersion(JAVA_VER); - } - private static int parseVersion(String javaVersion) { if (StrUtils.isBlank(javaVersion)) return UNKOWN; @@ -139,42 +130,6 @@ public final class JdkVersion implements Cloneable { return a; } - /** - * Return the full Java version string, as returned by - * System.getProperty("java.version"). - * - * @return the full Java version string - * - * @see System#getProperty(String) - */ - public static String getJavaVersion() { - return JAVA_VER; - } - - /** - * Get the major version code. This means we can do things like - * if (getMajorJavaVersion() < JAVA_14). @retu - * - * - * rn a code comparable to the JAVA_XX codes in this class - * - * @return - * - * @see #JAVA_13 - * @see #JAVA_14 - * @see #JAVA_15 - * @see #JAVA_16 - * @see #JAVA_17 - */ - public static int getMajorJavaVersion() { - return MAJOR_JAVA_VER; - } - - public static boolean isJava64Bit() { - String jdkBit = System.getProperty("sun.arch.data.model"); - return jdkBit.contains("64"); - } - private static final Pattern p = Pattern.compile("java version \"[1-9]*\\.[1-9]*\\.[0-9]*(.*?)\""); public static JdkVersion getJavaVersionFromExecutable(String file) throws IOException { @@ -197,11 +152,6 @@ public final class JdkVersion implements Cloneable { return new JdkVersion(file, ver, platform); } - public void write(File f) throws IOException { - if (ver != null && getPlatform() != Platform.UNKNOWN) - FileUtils.write(f, ver + "\n" + platform); - } - public boolean isEarlyAccess() { return getVersion() != null && getVersion().endsWith("-ea"); } diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/OS.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/OS.java index a081480cb..12e3c73f0 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/OS.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/OS.java @@ -20,7 +20,6 @@ package org.jackhuang.hellominecraft.util.system; import com.sun.management.OperatingSystemMXBean; import java.io.BufferedReader; import java.io.File; -import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.lang.management.ManagementFactory; @@ -92,7 +91,7 @@ public enum OS { public static long[] memoryInfoForLinux() throws IOException { File file = new File("/proc/meminfo"); - try (BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file), Charsets.UTF_8))) { + try (BufferedReader br = new BufferedReader(new InputStreamReader(FileUtils.openInputStream(file), Charsets.UTF_8))) { long[] result = new long[4]; String str; StringTokenizer token; diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/ProcessManager.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/ProcessManager.java index 31dd171dc..2742bc7d2 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/ProcessManager.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/ProcessManager.java @@ -25,7 +25,7 @@ import java.util.HashSet; */ public class ProcessManager { - private static final HashSet GAME_PROCESSES = new HashSet(); + private static final HashSet GAME_PROCESSES = new HashSet<>(); public void registerProcess(JavaProcess jp) { GAME_PROCESSES.add(jp); diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/ProcessThread.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/ProcessThread.java index 9b382c95d..d145dd057 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/ProcessThread.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/ProcessThread.java @@ -21,9 +21,9 @@ import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.io.UnsupportedEncodingException; import org.jackhuang.hellominecraft.util.logging.HMCLog; import org.jackhuang.hellominecraft.util.EventHandler; +import org.jackhuang.hellominecraft.util.code.Charsets; /** * @@ -50,15 +50,9 @@ public class ProcessThread extends Thread { BufferedReader br = null; try { InputStream in = p.getRawProcess().getInputStream(); - try { - br = new BufferedReader(new InputStreamReader(in, System.getProperty("sun.jnu.encoding", "UTF-8"))); - } catch (UnsupportedEncodingException ex) { - HMCLog.warn("Unsupported encoding: " + System.getProperty("sun.jnu.encoding", "UTF-8"), ex); - br = new BufferedReader(new InputStreamReader(in)); - } + br = new BufferedReader(new InputStreamReader(in, Charsets.toCharset())); - int ch; - String line = ""; + String line; while (p.isRunning()) while ((line = br.readLine()) != null) { printlnEvent.execute(line); @@ -70,6 +64,8 @@ public class ProcessThread extends Thread { System.out.println("Minecraft: " + line); p.getStdOutLines().add(line); } + if (p.getProcessManager() != null) + p.getProcessManager().onProcessStopped(p); stopEvent.execute(p); } catch (IOException e) { HMCLog.err("An error occured when reading process stdout/stderr.", e); diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/ThreadExecutor.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/ThreadExecutor.java deleted file mode 100755 index ee76ae85d..000000000 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/ThreadExecutor.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Hello Minecraft!. - * Copyright (C) 2013 huangyuhui - * - * 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.util.system; - -import org.jackhuang.hellominecraft.util.func.Consumer; - -/** - * - * @author huangyuhui - */ -public class ThreadExecutor extends Thread { - - public final Consumer c; - public final Runnable r; - - public ThreadExecutor(Consumer c, Runnable r) { - super(); - this.c = c; - this.r = r; - } - - @Override - public void run() { - try { - r.run(); - c.accept(null); - } catch (Throwable t) { - c.accept(t); - } - } - -} diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/ZipEngine.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/ZipEngine.java index 686a3812c..4375f1b49 100644 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/ZipEngine.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/system/ZipEngine.java @@ -22,7 +22,6 @@ import java.io.ByteArrayInputStream; import java.io.Closeable; import java.io.File; import java.io.FileInputStream; -import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.HashSet; @@ -41,8 +40,7 @@ public class ZipEngine implements Closeable { ZipOutputStream zos; public ZipEngine(File f) throws IOException { - FileOutputStream os = new FileOutputStream(f); - zos = new ZipOutputStream(new BufferedOutputStream(os)); + zos = new ZipOutputStream(new BufferedOutputStream(FileUtils.openOutputStream(f))); } @Override @@ -51,10 +49,6 @@ public class ZipEngine implements Closeable { zos.close(); } - public void putDirectory(String sourceDir) throws IOException { - putDirectory(new File(sourceDir), null); - } - public void putDirectory(File sourceDir) throws IOException { putDirectory(sourceDir, null); } @@ -117,7 +111,7 @@ public class ZipEngine implements Closeable { } public void putFile(File file, String pathName) throws IOException { - try (FileInputStream fis = new FileInputStream(file)) { + try (FileInputStream fis = FileUtils.openInputStream(file)) { putStream(fis, pathName); } } diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/tasks/DecompressTask.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/tasks/DecompressTask.java deleted file mode 100755 index b22599011..000000000 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/tasks/DecompressTask.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Hello Minecraft!. - * Copyright (C) 2013 huangyuhui - * - * 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.util.tasks; - -import java.io.File; -import org.jackhuang.hellominecraft.util.system.CompressingUtils; - -/** - * - * @author huangyuhui - */ -public class DecompressTask extends Task { - - File src, dest; - - public DecompressTask(File src, File dest) { - this.src = src; - this.dest = dest; - } - - @Override - public void executeTask(boolean areDependTasksSucceeded) throws Throwable { - CompressingUtils.unzip(src, dest); - } - - @Override - public String getInfo() { - return "Decompress: " + src.getAbsolutePath() + " to " + dest.getAbsolutePath(); - } - -} diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/tasks/NoShownTaskException.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/tasks/NoShownTaskException.java index 5b3a76fb0..4e7cd962a 100644 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/tasks/NoShownTaskException.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/tasks/NoShownTaskException.java @@ -22,6 +22,7 @@ package org.jackhuang.hellominecraft.util.tasks; * @author huangyuhui */ public class NoShownTaskException extends RuntimeException { + private static final long serialVersionUID = 4893571368018439312L; public NoShownTaskException(String msg) { super(msg); diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/tasks/Task.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/tasks/Task.java index 80c85290c..24d9349f8 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/tasks/Task.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/tasks/Task.java @@ -18,7 +18,6 @@ package org.jackhuang.hellominecraft.util.tasks; import java.util.Collection; -import org.jackhuang.hellominecraft.util.logging.HMCLog; /** * @@ -102,14 +101,10 @@ public abstract class Task { return this; } - public Task after(Task t) { + public Task with(Task t) { return new DoubleTask(this, t); } - public Task before(Task t) { - return new DoubleTask(t, this); - } - public void runWithException() throws Throwable { Collection c = getDependTasks(); if (c != null) @@ -121,14 +116,4 @@ public abstract class Task { for (Task t : c) t.runWithException(); } - - public boolean run() { - try { - runWithException(); - return true; - } catch (Throwable t) { - HMCLog.err("Failed to execute task", t); - return false; - } - } } diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/tasks/TaskList.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/tasks/TaskList.java index 7e06bf5f3..322f5f369 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/tasks/TaskList.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/tasks/TaskList.java @@ -40,7 +40,7 @@ public class TaskList extends Thread { List taskQueue = Collections.synchronizedList(new LinkedList<>()); public final EventHandler doneEvent = new EventHandler<>(this); - ArrayList> taskListener = new ArrayList(); + ArrayList> taskListener = new ArrayList<>(); int totTask; boolean shouldContinue = true; @@ -49,11 +49,6 @@ public class TaskList extends Thread { setDaemon(true); } - public void clean() { - shouldContinue = true; - taskQueue.clear(); - } - public void addTaskListener(DoingDoneListener l) { taskListener.add(l); } diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/tasks/TaskWindow.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/tasks/TaskWindow.java index edaf8c498..1ac7c1dc5 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/tasks/TaskWindow.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/tasks/TaskWindow.java @@ -44,7 +44,7 @@ public class TaskWindow extends javax.swing.JDialog boolean suc = false; private transient TaskList taskList; - private final ArrayList failReasons = new ArrayList(); + private final ArrayList failReasons = new ArrayList<>(); private String stackTrace = null, lastStackTrace = null; /** @@ -299,7 +299,6 @@ public class TaskWindow extends javax.swing.JDialog public static class TaskWindowFactory { LinkedList ll = new LinkedList<>(); - boolean flag; public TaskWindowFactory append(Task ts) { if (ts != null) diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/tasks/download/FileDownloadTask.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/tasks/download/FileDownloadTask.java index f8ae04bbc..02e2bf16e 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/tasks/download/FileDownloadTask.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/tasks/download/FileDownloadTask.java @@ -237,7 +237,7 @@ public class FileDownloadTask extends Task implements PreviousResult, Prev return filePath; } - ArrayList> al = new ArrayList(); + ArrayList> al = new ArrayList<>(); @Override public Task registerPreviousResult(PreviousResult pr) { diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/AlwaysDirty.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/AlwaysDirty.java deleted file mode 100644 index 1e7f0ed92..000000000 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/AlwaysDirty.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Hello Minecraft! Launcher. - * Copyright (C) 2013 huangyuhui - * - * 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.util.ui; - -/** - * - * @author huang - */ -public interface AlwaysDirty { - -} diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/DropShadowBorder.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/DropShadowBorder.java index aed92f16c..75148c195 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/DropShadowBorder.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/DropShadowBorder.java @@ -37,10 +37,6 @@ public class DropShadowBorder extends AbstractBorder { private Insets insets = null; RenderingHints hints; - public DropShadowBorder(Color color) { - this(color, 3); - } - public DropShadowBorder(Color color, int thickness) { this.thickness = thickness; this.color = color; @@ -95,10 +91,4 @@ public class DropShadowBorder extends AbstractBorder { } g.drawImage(list, 0, 0, width, height, null); } - - void copyFromArray(int[] from, int W, int H, int[] to, int x, int y, int w, int h) { - for (int i = 0; i < h; ++i) - for (int j = 0; j < w; ++j) - to[i * w + j] = from[(i + y) * W + j + x]; - } } diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/LogWindow.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/LogWindow.java index c52e58a4e..89e32d87c 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/LogWindow.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/LogWindow.java @@ -17,6 +17,7 @@ */ package org.jackhuang.hellominecraft.util.ui; +import java.io.PrintStream; import javax.swing.SwingUtilities; import javax.swing.text.Document; import javax.swing.text.SimpleAttributeSet; @@ -26,7 +27,6 @@ import org.jackhuang.hellominecraft.util.logging.HMCLog; import org.jackhuang.hellominecraft.util.logging.Level; import org.jackhuang.hellominecraft.util.func.NonFunction; import org.jackhuang.hellominecraft.util.DoubleOutputStream; -import org.jackhuang.hellominecraft.util.LauncherPrintStream; import org.jackhuang.hellominecraft.util.Utils; /** @@ -48,9 +48,9 @@ public class LogWindow extends javax.swing.JFrame { movingEnd = true; DoubleOutputStream out = new DoubleOutputStream(new LogWindowOutputStream(this, Level.INFO), System.out); - System.setOut(new LauncherPrintStream(out)); + System.setOut(new PrintStream(out)); DoubleOutputStream err = new DoubleOutputStream(new LogWindowOutputStream(this, Level.ERROR), System.err); - System.setErr(new LauncherPrintStream(err)); + System.setErr(new PrintStream(err)); SwingUtilities.invokeLater(() -> { setLocationRelativeTo(null); @@ -206,7 +206,7 @@ public class LogWindow extends javax.swing.JFrame { }//GEN-LAST:event_btnCloseActionPerformed private void btnClearActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnClearActionPerformed - this.txtLog.setText(""); + clean(); }//GEN-LAST:event_btnClearActionPerformed private void btnCopyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCopyActionPerformed @@ -240,14 +240,6 @@ public class LogWindow extends javax.swing.JFrame { SwingUtils.exitIfNoWindow(this); }//GEN-LAST:event_formWindowClosing - public void log(String status) { - log(status, Level.INFO); - } - - public void warning(String status) { - log(status, Level.WARN); - } - public synchronized void log(String status, Level c) { status = status.replace("\t", " "); Document d = txtLog.getStyledDocument(); diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/LogWindowOutputStream.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/LogWindowOutputStream.java index 4aef2404c..76cc2bff9 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/LogWindowOutputStream.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/LogWindowOutputStream.java @@ -19,7 +19,6 @@ package org.jackhuang.hellominecraft.util.ui; import java.io.OutputStream; import java.util.Objects; -import java.util.Timer; import javax.swing.SwingUtilities; import org.jackhuang.hellominecraft.util.code.Charsets; import org.jackhuang.hellominecraft.util.logging.Level; @@ -30,8 +29,6 @@ import org.jackhuang.hellominecraft.util.logging.Level; */ public class LogWindowOutputStream extends OutputStream { - private static final Timer TIMER = new Timer(); - private final LogWindow txt; private final Level sas; @@ -60,8 +57,4 @@ public class LogWindowOutputStream extends OutputStream { public final void write(int i) { append(new String(new byte[] { (byte) i }, Charsets.UTF_8)); } - - public static void dispose() { - TIMER.cancel(); - } } diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/SwingUtils.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/SwingUtils.java index 5c7ed045b..a6b7eef1d 100755 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/SwingUtils.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/SwingUtils.java @@ -40,7 +40,6 @@ import javax.swing.JOptionPane; import javax.swing.JScrollBar; import javax.swing.JScrollPane; import javax.swing.JTable; -import javax.swing.JTextArea; import javax.swing.SwingUtilities; import javax.swing.table.DefaultTableModel; import org.jackhuang.hellominecraft.util.C; @@ -70,15 +69,13 @@ public final class SwingUtils { * * @return */ - public static DefaultTableModel makeDefaultTableModel(String[] titleA, final Class[] typesA, final boolean[] canEditA) { - return new DefaultTableModel( - new Object[][] {}, - titleA) { - Class[] types = typesA; + public static DefaultTableModel makeDefaultTableModel(String[] titleA, final Class[] typesA, final boolean[] canEditA) { + return new DefaultTableModel(new Object[][] {}, titleA) { + Class[] types = typesA; boolean[] canEdit = canEditA; @Override - public Class getColumnClass(int columnIndex) { + public Class getColumnClass(int columnIndex) { return types[columnIndex]; } @@ -132,16 +129,6 @@ public final class SwingUtils { } } - /** - * Move the cursor to the end of TextArea. - * - * @param tf the TextArea - */ - public static void moveEnd(JTextArea tf) { - int position = tf.getText().length(); - tf.setCaretPosition(position); - } - /** * Move the cursor to the end of ScrollPane. * @@ -159,27 +146,8 @@ public final class SwingUtils { * * @return Forcely Type casted to DefaultListModel */ - public static DefaultListModel getDefaultListModel(JList list) { - return (DefaultListModel) list.getModel(); - } - - /** - * Append new element to JList - * - * @param list the JList - * @param element the Element - */ - public static void appendLast(JList list, Object element) { - getDefaultListModel(list).addElement(element); - } - - public static void replaceLast(JList list, Object element) { - DefaultListModel model = getDefaultListModel(list); - model.set(model.getSize() - 1, element); - } - - public static void clear(JList list) { - list.setModel(new DefaultListModel()); + public static DefaultListModel getDefaultListModel(JList list) { + return (DefaultListModel) list.getModel(); } /** @@ -269,13 +237,14 @@ public final class SwingUtils { } public static int select(String[] selList, String msg) { + JComboBox box = new JComboBox<>(selList); Object msgs[] = new Object[2]; msgs[0] = msg; - msgs[1] = new JComboBox(selList); + msgs[1] = box; int result = JOptionPane.showOptionDialog(null, msgs, msg, JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, null, null); if (result == JOptionPane.CANCEL_OPTION) return -1; - return ((JComboBox) msgs[1]).getSelectedIndex(); + return box.getSelectedIndex(); } public static void setEnabled(JComponent component, boolean t) { diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/checktree/CheckBoxTreeCellRenderer.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/checktree/CheckBoxTreeCellRenderer.java index be0bed27f..f82ab5d0f 100644 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/checktree/CheckBoxTreeCellRenderer.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/checktree/CheckBoxTreeCellRenderer.java @@ -27,7 +27,6 @@ import javax.swing.JTree; import javax.swing.UIManager; import javax.swing.plaf.ColorUIResource; import javax.swing.tree.TreeCellRenderer; -import org.jackhuang.hellominecraft.util.Pair; public class CheckBoxTreeCellRenderer extends JPanel implements TreeCellRenderer { diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/checktree/CheckBoxTreeNode.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/checktree/CheckBoxTreeNode.java index b6003fa3c..d231aa402 100644 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/checktree/CheckBoxTreeNode.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/checktree/CheckBoxTreeNode.java @@ -44,7 +44,7 @@ public class CheckBoxTreeNode extends DefaultMutableTreeNode { @Override public String toString() { if (userObject instanceof Pair) - return "" + ((Pair) userObject).key + " - " + ((Pair) userObject).value + ""; + return "" + ((Pair) userObject).key + " - " + ((Pair) userObject).value + ""; else return userObject.toString(); } diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/api/WizardDisplayer.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/api/WizardDisplayer.java index aa9cf0180..dbf770c4d 100644 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/api/WizardDisplayer.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/api/WizardDisplayer.java @@ -15,9 +15,9 @@ package org.jackhuang.hellominecraft.util.ui.wizard.api; import java.awt.Container; import java.awt.Rectangle; import java.util.Arrays; -import java.util.HashSet; import java.util.Map; import javax.swing.Action; +import org.jackhuang.hellominecraft.util.ArrayUtils; import org.jackhuang.hellominecraft.util.ui.wizard.api.displayer.WizardDisplayerImpl; import org.jackhuang.hellominecraft.util.ui.wizard.spi.Wizard; @@ -88,7 +88,6 @@ public abstract class WizardDisplayer { protected WizardDisplayer() { } - private static final String SYSPROP_KEY = "WizardDisplayer.default"; /** * Display a wizard in a dialog, using the default implementation of @@ -103,7 +102,7 @@ public abstract class WizardDisplayer { * shown * and entered in the wizard. May be null. */ - public static Object showWizard(Wizard wizard, Rectangle rect, Action help, Map initialProperties) { + public static Object showWizard(Wizard wizard, Rectangle rect, Action help, Map initialProperties) { // assert nonBuggyWizard (wizard); // validate it nonBuggyWizard(wizard); @@ -124,31 +123,6 @@ public abstract class WizardDisplayer { return showWizard(wizard, null, null, null); } - /** - * Show a wizard with default window placement, showing the help button, - * which will invoke the passed action. - * - * @param wizard The wizard to show - * @param help An action to invoke if the user presses the help button - * - * @return The result of Wizard.finish() - */ - public static Object showWizard(Wizard wizard, Action help) { - return showWizard(wizard, null, help, null); - } - - /** - * Show a wizard in the passed location on screen with no help button - * - * @param wizard The wizard to show - * @param r The rectangle on screen for the wizard - * - * @return The result of Wizard.finish() - */ - public static Object showWizard(Wizard wizard, Rectangle r) { - return showWizard(wizard, r, null, null); - } - /** * Show a wizard. * @@ -165,46 +139,19 @@ public abstract class WizardDisplayer { * @return Whatever object the wizard returns from its finish() * method, if the Wizard was completed by the user. */ - protected abstract Object show(Wizard wizard, Rectangle r, Action help, Map initialProperties); - - /** - * Install a panel representing a Wizard in a user-supplied container - * with a user-supplied layout constraint. - * - * @param c The container the wizard panel should be added - * to. May not - * be null. - * @param layoutConstraint The argument to use when adding the wizard's - * ui component to the container. May be null. - * @param helpAction An action that should be invoked when the help - * button - * is clicked (if null, no help button will be displayed) - * @param initialProperties A set of properties that should be pre-set upon - * entering the wizard. May be null. - * @param receiver An object which will be called when the Finish - * or - * Cancel buttons are pressed. May not be null. - */ - public static void installInContainer(Container c, Object layoutConstraint, - Wizard awizard, - Action helpAction, Map initialProperties, - WizardResultReceiver receiver) { - getDefault().install(c, layoutConstraint, awizard, helpAction, - initialProperties, receiver); - } + protected abstract Object show(Wizard wizard, Rectangle r, Action help, Map initialProperties); /** * Instance implementation of installInContainer(). */ protected abstract void install(Container c, Object layoutConstraint, - Wizard awizard, Action helpAction, Map initialProperties, + Wizard awizard, Action helpAction, Map initialProperties, WizardResultReceiver receiver); private static boolean nonBuggyWizard(Wizard wizard) { String[] s = wizard.getAllSteps(); - // assert new HashSet(Arrays.asList(s)).size() == s.length; // for JDK 1.4.2: replace assert with runtime exception - if (new HashSet(Arrays.asList(s)).size() != s.length) + if (ArrayUtils.hasDuplicateElements(s)) throw new RuntimeException("steps are duplicated: " + Arrays.asList(s)); if (s.length == 1 && Wizard.UNDETERMINED_STEP.equals(s[0])) // assert false : "Only ID may not be UNDETERMINED_ID"; diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/api/displayer/WizardDisplayerImpl.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/api/displayer/WizardDisplayerImpl.java index d43f7e976..74cbd24c6 100644 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/api/displayer/WizardDisplayerImpl.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/api/displayer/WizardDisplayerImpl.java @@ -164,7 +164,7 @@ public class WizardDisplayerImpl extends WizardDisplayer { * java.awt.Rectangle, javax.swing.Action, java.util.Map) */ private JPanel createOuterPanel(final Wizard awizard, Rectangle bounds, Action helpAction, - Map initialProperties) { + Map initialProperties) { this.wizard = awizard; diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/modules/MergeMap.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/modules/MergeMap.java index e750cd280..238fb1145 100644 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/modules/MergeMap.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/modules/MergeMap.java @@ -50,10 +50,10 @@ import java.util.Stack; * * @author Tim Boudreau */ -public class MergeMap implements Map { +public class MergeMap implements Map { - private final Stack order = new Stack(); - private final Map id2map = new HashMap(); + private final Stack order = new Stack<>(); + private final Map> id2map = new HashMap<>(); /** * Creates a new instance of MergeMap @@ -71,7 +71,7 @@ public class MergeMap implements Map { * have a first panel that gathered some settings using the old APIs * framework, and we need to inject them here. */ - public MergeMap(String currId, Map everpresent) { + public MergeMap(String currId, Map everpresent) { order.push(BASE); id2map.put(BASE, everpresent); push(currId); @@ -81,16 +81,16 @@ public class MergeMap implements Map { * Move to a different ID (meaning add a new named map to proxy which can be * calved off if necessary). */ - public Map push(String id) { + public Map push(String id) { // assert !order.contains(id) : id + " already present"; if (order.contains(id)) throw new RuntimeException(id + " already present"); // assert !order.contains(id) : id + " already present"; if (!order.isEmpty() && id.equals(order.peek())) - return (Map) id2map.get(id); - Map result = (Map) id2map.get(id); + return (Map) id2map.get(id); + Map result = (Map) id2map.get(id); if (result == null) { - result = new HashMap(); + result = new HashMap<>(); id2map.put(id, result); } order.push(id); @@ -115,7 +115,7 @@ public class MergeMap implements Map { + "entry"); //Get the current map String result = (String) order.peek(); - Map curr = (Map) id2map.get(result); + Map curr = (Map) id2map.get(result); order.pop(); //Though unlikely, it is possible that a later step in a wizard @@ -124,13 +124,11 @@ public class MergeMap implements Map { //we're removing, and if any of them are in steps lower on the //stack, change those lower steps values to whatever was written //into the map we're calving off - for (Iterator i = orderIterator(); i.hasNext();) { - Map other = (Map) id2map.get(i.next()); - for (Iterator j = curr.keySet().iterator(); j.hasNext();) { - Object key = j.next(); + for (Iterator i = orderIterator(); i.hasNext();) { + Map other = (Map) id2map.get(i.next()); + for (K key : curr.keySet()) if (other.containsKey(key)) other.put(key, curr.get(key)); - } } return result; } @@ -142,8 +140,8 @@ public class MergeMap implements Map { @Override public boolean containsKey(Object obj) { - for (Iterator i = orderIterator(); i.hasNext();) { - Map curr = (Map) id2map.get(i.next()); + for (Iterator i = orderIterator(); i.hasNext();) { + Map curr = (Map) id2map.get(i.next()); if (curr.containsKey(obj)) return true; } @@ -152,8 +150,8 @@ public class MergeMap implements Map { @Override public boolean containsValue(Object obj) { - for (Iterator i = orderIterator(); i.hasNext();) { - Map curr = (Map) id2map.get(i.next()); + for (Iterator i = orderIterator(); i.hasNext();) { + Map curr = (Map) id2map.get(i.next()); if (curr.containsValue(obj)) return true; } @@ -161,21 +159,21 @@ public class MergeMap implements Map { } @Override - public java.util.Set entrySet() { - HashSet result = new HashSet(); - for (Iterator i = orderIterator(); i.hasNext();) { - Map curr = (Map) id2map.get(i.next()); + public java.util.Set> entrySet() { + HashSet> result = new HashSet<>(); + for (Iterator i = orderIterator(); i.hasNext();) { + Map curr = (Map) id2map.get(i.next()); result.addAll(curr.entrySet()); } return result; } @Override - public Object get(Object obj) { - for (Iterator i = orderIterator(); i.hasNext();) { + public V get(Object obj) { + for (Iterator i = orderIterator(); i.hasNext();) { String id = (String) i.next(); - Map curr = (Map) id2map.get(id); - Object result = curr.get(obj); + Map curr = (Map) id2map.get(id); + V result = curr.get(obj); if (result != null) return result; } @@ -188,33 +186,33 @@ public class MergeMap implements Map { } @Override - public Set keySet() { - HashSet result = new HashSet(); - for (Iterator i = orderIterator(); i.hasNext();) { - Map curr = (Map) id2map.get(i.next()); + public Set keySet() { + HashSet result = new HashSet<>(); + for (Iterator i = orderIterator(); i.hasNext();) { + Map curr = (Map) id2map.get(i.next()); result.addAll(curr.keySet()); } return result; } @Override - public Object put(Object obj, Object obj1) { - Map curr = (Map) id2map.get(order.peek()); + public V put(K obj, V obj1) { + Map curr = (Map) id2map.get(order.peek()); return curr.put(obj, obj1); } @Override - public void putAll(Map map) { - Map curr = (Map) id2map.get(order.peek()); + public void putAll(Map map) { + Map curr = (Map) id2map.get(order.peek()); curr.putAll(map); } - private Object doRemove(Object obj) { - Map curr = (Map) id2map.get(order.peek()); - Object result = curr.remove(obj); + private V doRemove(Object obj) { + Map curr = (Map) id2map.get(order.peek()); + V result = curr.remove(obj); if (result == null) - for (Iterator i = orderIterator(); i.hasNext();) { - curr = (Map) id2map.get(i.next()); + for (Iterator i = orderIterator(); i.hasNext();) { + curr = (Map) id2map.get(i.next()); result = curr.remove(obj); if (result != null) break; @@ -223,9 +221,9 @@ public class MergeMap implements Map { } @Override - public Object remove(Object obj) { + public V remove(Object obj) { //Ensure we remove any duplicates in upper arrays - Object result = get(obj); + V result = get(obj); while (get(obj) != null) doRemove(obj); return result; @@ -238,40 +236,43 @@ public class MergeMap implements Map { } @Override - public Collection values() { - HashSet result = new HashSet(); - Set keys = keySet(); - for (Iterator i = keys.iterator(); i.hasNext();) + public Collection values() { + HashSet result = new HashSet<>(); + Set keys = keySet(); + for (Iterator i = keys.iterator(); i.hasNext();) result.add(get(i.next())); return result; } - private Iterator orderIterator() { + private Iterator orderIterator() { return new ReverseIterator(order); } - private static final class ReverseIterator implements Iterator { + private static final class ReverseIterator implements Iterator { private int pos; - private final List l; + private final List l; - public ReverseIterator(Stack s) { + public ReverseIterator(Stack s) { pos = s.size() - 1; - l = new ArrayList(s); + l = new ArrayList<>(s); } + @Override public boolean hasNext() { return pos != -1; } - public Object next() { + @Override + public String next() { if (pos < 0) throw new NoSuchElementException(); - Object result = l.get(pos); + String result = l.get(pos); pos--; return result; } + @Override public void remove() { throw new UnsupportedOperationException(); } diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/AbstractWizard.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/AbstractWizard.java index 0742dddf6..809cb5556 100644 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/AbstractWizard.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/AbstractWizard.java @@ -28,10 +28,10 @@ import org.jackhuang.hellominecraft.util.func.Consumer; */ public abstract class AbstractWizard implements WizardImplementation { - protected final List listenerList = Collections.synchronizedList(new LinkedList()); + protected final List listenerList = Collections.synchronizedList(new LinkedList<>()); protected void fireChanged(Consumer r) { - WizardObserver[] listeners = (WizardObserver[]) listenerList.toArray(new WizardObserver[listenerList.size()]); + WizardObserver[] listeners = listenerList.toArray(new WizardObserver[listenerList.size()]); for (int i = listeners.length - 1; i >= 0; i--) { WizardObserver l = (WizardObserver) listeners[i]; diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/GenericListener.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/GenericListener.java index b4f51f85d..171211176 100644 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/GenericListener.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/GenericListener.java @@ -27,7 +27,6 @@ import java.beans.PropertyChangeListener; import java.util.Arrays; import java.util.EventObject; import java.util.HashSet; -import java.util.Iterator; import java.util.Set; import javax.swing.*; import javax.swing.table.*; @@ -71,7 +70,7 @@ final class GenericListener * Set of components that we're listening to models of, so we can look * up the component from the model as needed */ - private final Set listenedTo = new HashSet(); + private final Set listenedTo = new HashSet<>(); private final WizardPage.CustomComponentListener extListener; private final WizardPage.CustomComponentNotifier extNotifier; @@ -150,9 +149,9 @@ final class GenericListener attachToHierarchyOf((Container) jc); else if (jc instanceof JList) { listenedTo.add(jc); - ((JList) jc).addListSelectionListener(this); + ((JList) jc).addListSelectionListener(this); } else if (jc instanceof JComboBox) - ((JComboBox) jc).addActionListener(this); + ((JComboBox) jc).addActionListener(this); else if (jc instanceof JTree) { listenedTo.add(jc); ((JTree) jc).getSelectionModel().addTreeSelectionListener(this); @@ -189,9 +188,9 @@ final class GenericListener if (isProbablyAContainer(jc)) detachFromHierarchyOf((Container) jc); else if (jc instanceof JList) - ((JList) jc).removeListSelectionListener(this); + ((JList) jc).removeListSelectionListener(this); else if (jc instanceof JComboBox) - ((JComboBox) jc).removeActionListener(this); + ((JComboBox) jc).removeActionListener(this); else if (jc instanceof JTree) ((JTree) jc).getSelectionModel().removeTreeSelectionListener(this); else if (jc instanceof JToggleButton) @@ -271,34 +270,28 @@ final class GenericListener wizardPage.userInputReceived((Component) ((EventObject) e).getSource(), e); else if (e instanceof TreeSelectionEvent) { TreeSelectionModel mdl = (TreeSelectionModel) ((TreeSelectionEvent) e).getSource(); - for (Iterator i = listenedTo.iterator(); i.hasNext();) { - Object o = i.next(); + for (Object o : listenedTo) if (o instanceof JTree && ((JTree) o).getSelectionModel() == mdl) { wizardPage.userInputReceived((Component) o, e); break; } - } } else if (e instanceof DocumentEvent) { Document document = ((DocumentEvent) e).getDocument(); - for (Iterator i = listenedTo.iterator(); i.hasNext();) { - Object o = i.next(); + for (Component o : listenedTo) if (o instanceof JTextComponent && ((JTextComponent) o).getDocument() == document) { wizardPage.userInputReceived((Component) o, e); break; } - } } else if (e instanceof ListSelectionEvent) { ListSelectionModel model = (ListSelectionModel) ((ListSelectionEvent) e).getSource(); - for (Iterator i = listenedTo.iterator(); i.hasNext();) { - Object o = i.next(); - if (o instanceof JList && ((JList) o).getSelectionModel() == model) { + for (Object o : listenedTo) + if (o instanceof JList && ((JList) o).getSelectionModel() == model) { wizardPage.userInputReceived((Component) o, e); break; } else if (o instanceof JTable && ((JTable) o).getSelectionModel() == model) { wizardPage.userInputReceived((Component) o, e); break; } - } } else wizardPage.userInputReceived(null, e); } finally { @@ -307,10 +300,12 @@ final class GenericListener } } + @Override public void actionPerformed(ActionEvent e) { fire(e); } + @Override public void propertyChange(PropertyChangeEvent e) { if (e.getSource() instanceof JComponent && "name".equals(e.getPropertyName())) { // Note - most components do NOT fire a property change on @@ -324,10 +319,12 @@ final class GenericListener } } + @Override public void itemStateChanged(ItemEvent e) { fire(e); } + @Override public void componentAdded(ContainerEvent e) { // if (extListener != null && extListener.accept(e.getChild())) { // extListener.startListeningTo(e.getChild(), extNotifier); @@ -337,6 +334,7 @@ final class GenericListener attachTo(e.getChild()); } + @Override public void componentRemoved(ContainerEvent e) { if (extListener != null && extListener.accept(e.getChild())) { extListener.stopListeningTo(e.getChild()); @@ -345,30 +343,37 @@ final class GenericListener detachFrom(e.getChild()); } + @Override public void insertUpdate(DocumentEvent e) { fire(e); } + @Override public void changedUpdate(DocumentEvent e) { fire(e); } + @Override public void removeUpdate(DocumentEvent e) { fire(e); } + @Override public void stateChanged(ChangeEvent e) { fire(e); } + @Override public void valueChanged(ListSelectionEvent e) { fire(e); } + @Override public void valueChanged(TreeSelectionEvent e) { fire(e); } + @Override public void tableChanged(TableModelEvent e) { fire(e); } diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/SimpleWizard.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/SimpleWizard.java index 09b33ca7d..d71ee6f45 100644 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/SimpleWizard.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/SimpleWizard.java @@ -32,7 +32,7 @@ import javax.swing.JComponent; */ final class SimpleWizard extends AbstractWizard { - private final Map ids2panels = new HashMap(); + private final Map ids2panels = new HashMap<>(); final SimpleWizardInfo info; diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/SimpleWizardInfo.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/SimpleWizardInfo.java index cc38e7a10..8b4dcb883 100644 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/SimpleWizardInfo.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/SimpleWizardInfo.java @@ -23,13 +23,13 @@ import java.io.ByteArrayOutputStream; import java.io.PrintStream; import java.lang.ref.WeakReference; import java.util.Arrays; -import java.util.HashSet; import java.util.Map; import java.util.Objects; import javax.swing.BorderFactory; import javax.swing.JComponent; import javax.swing.JScrollPane; import javax.swing.JTextArea; +import org.jackhuang.hellominecraft.util.ArrayUtils; import org.jackhuang.hellominecraft.util.code.Charsets; import org.jackhuang.hellominecraft.util.system.IOUtils; @@ -62,7 +62,7 @@ public final class SimpleWizardInfo implements WizardControllerImplementation { protected SimpleWizardInfo(String title, String[] steps, String[] descriptions, WizardPanelProvider provider) { this.steps = Objects.requireNonNull(steps, "Null steps"); this.descriptions = Objects.requireNonNull(descriptions, "Null descriptions"); - if (new HashSet(Arrays.asList(steps)).size() < steps.length) + if (ArrayUtils.hasDuplicateElements(steps)) throw new IllegalArgumentException("Duplicate ID: " + Arrays.asList(steps)); if (descriptions.length != steps.length) if (steps.length != descriptions.length + 1 && !WizardImplementation.UNDETERMINED_STEP.equals(steps[steps.length - 1])) @@ -76,17 +76,13 @@ public final class SimpleWizardInfo implements WizardControllerImplementation { } final void setWizard(SimpleWizard wizard) { - this.wizard = new WeakReference(wizard); + this.wizard = new WeakReference<>(wizard); } final SimpleWizard getWizard() { return wizard != null ? (SimpleWizard) wizard.get() : null; } - final SimpleWizard createWizard() { - return new SimpleWizard(this); - } - //pkg private for unit tests final WizardController controller = new WizardController(this); diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/Summary.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/Summary.java index 089b2b3c3..5e25a7cf8 100644 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/Summary.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/Summary.java @@ -89,7 +89,7 @@ public class Summary { if (ArrayUtils.isEmpty(items)) throw new IllegalArgumentException("Items array empty"); this.result = result; - JList list = new JList(items); + JList list = new JList<>(items); comp = new JScrollPane(list); } diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/Util.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/Util.java index fc70c92a5..8c08f6865 100644 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/Util.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/Util.java @@ -28,7 +28,7 @@ final class Util { static String[] getSteps(WizardPage[] pages) { String[] result = new String[pages.length]; - Set uniqueNames = new HashSet(pages.length); + Set uniqueNames = new HashSet<>(pages.length); for (int i = 0; i < pages.length; i++) { result[i] = pages[i].id(); if (result[i] == null || uniqueNames.contains(result[i])) { @@ -41,7 +41,7 @@ final class Util { return result; } - static String uniquify(String s, Set /* */ used) { + static String uniquify(String s, Set used) { String test = s; if (test != null) { int ix = 0; @@ -66,11 +66,11 @@ final class Util { return result; } - static String getIDFromStaticMethod(Class clazz) { + static String getIDFromStaticMethod(Class clazz) { // System.err.println("GetID by method for " + clazz); String result = null; try { - Method m = clazz.getDeclaredMethod("getStep", new Class[]{}); + Method m = clazz.getDeclaredMethod("getStep", new Class[]{}); // assert m.getReturnType() == String.class; result = Objects.requireNonNull((String) m.invoke(clazz, (Object[]) null), "getStep may not return null"); } catch (Exception ex) { @@ -83,12 +83,12 @@ final class Util { * Get an array of steps by looking for a static method getID() on each * class object passed */ - static String[] getSteps(Class[] pages) { + static String[] getSteps(Class[] pages) { Objects.requireNonNull(pages, "Null array of classes"); String[] result = new String[pages.length]; - Set used = new HashSet(pages.length); + Set used = new HashSet<>(pages.length); for (int i = 0; i < pages.length; i++) { Objects.requireNonNull(pages[i], "Null at " + i + " in array of panel classes"); @@ -116,7 +116,7 @@ final class Util { * Get an array of descriptions by looking for the static method * getDescription() on each passed class object */ - static String[] getDescriptions(Class[] pages) { + static String[] getDescriptions(Class[] pages) { String[] result = new String[pages.length]; for (int i = 0; i < pages.length; i++) @@ -125,7 +125,7 @@ final class Util { return result; } - static String getDescriptionFromStaticMethod(Class clazz) { + static String getDescriptionFromStaticMethod(Class clazz) { Method m; try { m = clazz.getDeclaredMethod("getDescription", (Class[]) null); diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/Wizard.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/Wizard.java index 8cde77bac..d463305f9 100644 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/Wizard.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/Wizard.java @@ -10,15 +10,12 @@ enclosed by brackets [] replaced by your own identifying information: "Portions Copyrighted [year] [name of copyright owner]" */ package org.jackhuang.hellominecraft.util.ui.wizard.spi; -import java.awt.Rectangle; import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Objects; -import javax.swing.Action; import javax.swing.JComponent; -import org.jackhuang.hellominecraft.util.ui.wizard.api.WizardDisplayer; /** * Encapsulates the logic and state of a Wizard. A Wizard gathers information @@ -284,8 +281,8 @@ public final class Wizard { } private volatile boolean listeningToImpl = false; - private final List listeners = Collections.synchronizedList( - new LinkedList()); + private final List listeners = Collections.synchronizedList( + new LinkedList<>()); private WizardObserver l = null; @@ -360,31 +357,4 @@ public final class Wizard { return false; } - /** - * Delegates to WizardDisplayer.showWizard() - */ - public void show() { - WizardDisplayer.showWizard(this); - } - - /** - * Delegates to WizardDisplayer.showWizard() - */ - public Object show(Wizard wizard, Action help) { - return WizardDisplayer.showWizard(wizard, help); - } - - /** - * Delegates to WizardDisplayer.showWizard() - */ - public Object show(Wizard wizard, Rectangle r) { - return WizardDisplayer.showWizard(wizard, r); - } - - /** - * Delegates to WizardDisplayer.showWizard() - */ - public Object show(Wizard wizard, Rectangle r, Action help) { - return WizardDisplayer.showWizard(wizard, r, help, null); - } } diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/WizardPage.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/WizardPage.java index 8ee85f0cc..bd1b3d177 100644 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/WizardPage.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/WizardPage.java @@ -23,9 +23,10 @@ import java.awt.Color; import java.awt.Component; import java.util.Arrays; import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; import java.util.Map; +import java.util.Objects; +import java.util.Set; +import org.jackhuang.hellominecraft.util.ArrayUtils; /** * A convenience JPanel subclass that makes it easy to create wizard panels. @@ -191,7 +192,7 @@ public class WizardPage extends JPanel implements WizardPanel { /** * Use this constructor or the default constructor if you intend to pass an - * array of Class objects to lazily create WizardPanels. + * array of Class objects to lazily create WizardPanels. */ protected WizardPage(boolean autoListen) { this(null, null, autoListen); @@ -428,7 +429,7 @@ public class WizardPage extends JPanel implements WizardPanel { * Create simple Wizard from an array of classes, each of which is a unique * subclass of WizardPage. */ - public static Wizard createWizard(Class[] wizardPageClasses, WizardResultProducer finisher) { + public static Wizard createWizard(Class[] wizardPageClasses, WizardResultProducer finisher) { return new CWPP(wizardPageClasses, finisher).createWizard(); } @@ -436,7 +437,7 @@ public class WizardPage extends JPanel implements WizardPanel { * Create simple Wizard from an array of classes, each of which is a unique * subclass of WizardPage. */ - public static Wizard createWizard(String title, Class[] wizardPageClasses, WizardResultProducer finisher) { + public static Wizard createWizard(String title, Class[] wizardPageClasses, WizardResultProducer finisher) { return new CWPP(title, wizardPageClasses, finisher).createWizard(); } @@ -444,7 +445,7 @@ public class WizardPage extends JPanel implements WizardPanel { * Create simple Wizard from an array of classes, each of which is a unique * subclass of WizardPage. */ - public static Wizard createWizard(String title, Class[] wizardPageClasses) { + public static Wizard createWizard(String title, Class[] wizardPageClasses) { return new CWPP(title, wizardPageClasses, WizardResultProducer.NO_OP).createWizard(); } @@ -453,7 +454,7 @@ public class WizardPage extends JPanel implements WizardPanel { * Create a simple Wizard from an array of classes, each of which is a * unique subclass of WizardPage, with a no-op WizardResultProducer. */ - public static Wizard createWizard(Class[] wizardPageClasses) { + public static Wizard createWizard(Class[] wizardPageClasses) { return createWizard(wizardPageClasses, WizardResultProducer.NO_OP); } @@ -469,14 +470,13 @@ public class WizardPage extends JPanel implements WizardPanel { */ void setWizardDataMap(Map m) { if (m == null) - wizardData = new HashMap(); + wizardData = new HashMap<>(); else { if (wizardData instanceof HashMap) // our initial map has keys for all of our components // but with dummy empty values // So make sure we don't override data that was put in as part of the initialProperties - for (Iterator iter = wizardData.entrySet().iterator(); iter.hasNext();) { - Map.Entry entry = (Map.Entry) iter.next(); + for (Map.Entry entry : (Set) wizardData.entrySet()) { Object key = entry.getKey(); if (!m.containsKey(key)) m.put(key, entry.getValue()); @@ -660,7 +660,7 @@ public class WizardPage extends JPanel implements WizardPanel { } else if (comp instanceof JFormattedTextField) return ((JFormattedTextField) comp).getValue(); else if (comp instanceof JList) { - Object[] o = ((JList) comp).getSelectedValues(); + Object[] o = ((JList) comp).getSelectedValues(); if (o.length > 1) return o; else if (o.length == 1) @@ -668,7 +668,7 @@ public class WizardPage extends JPanel implements WizardPanel { } else if (comp instanceof JTextComponent) return ((JTextComponent) comp).getText(); else if (comp instanceof JComboBox) - return ((JComboBox) comp).getSelectedItem(); + return ((JComboBox) comp).getSelectedItem(); else if (comp instanceof JColorChooser) return ((JColorChooser) comp).getSelectionModel().getSelectedColor(); else if (comp instanceof JSpinner) @@ -702,7 +702,7 @@ public class WizardPage extends JPanel implements WizardPanel { else if (comp instanceof JList) { if (value instanceof Object[]) throw new IllegalArgumentException("can't handle multi-select lists"); - ((JList) comp).setSelectedValue(value, true); + ((JList) comp).setSelectedValue(value, true); } else if (comp instanceof JTextComponent) ((JTextComponent) comp).setText((String) value); else if (comp instanceof JComboBox) @@ -898,7 +898,7 @@ public class WizardPage extends JPanel implements WizardPanel { * Make sure we haven't been passed bogus data */ private String valid(WizardPage[] pages) { - if (new HashSet(Arrays.asList(pages)).size() != pages.length) + if (ArrayUtils.hasDuplicateElements(pages)) return "Duplicate entry in array: " + Arrays.asList(pages); @@ -934,44 +934,27 @@ public class WizardPage extends JPanel implements WizardPanel { */ private static final class CWPP extends WizardPanelProvider { - private final Class[] classes; + private final Class[] classes; private final WizardResultProducer finish; private final String[] longDescriptions; - CWPP(String title, Class[] classes, WizardResultProducer finish) { + CWPP(String title, Class[] classes, WizardResultProducer finish) { super(title, Util.getSteps(classes), Util.getDescriptions(classes)); -// assert classes != null : "Class array may not be null"; -// assert new HashSet(Arrays.asList(classes)).size() == classes.length : -// "Duplicate entries in class array"; -// assert finish != null : "WizardResultProducer may not be null"; - _validateArgs(classes, finish); this.finish = finish; this.classes = classes; longDescriptions = new String[classes.length]; } - private void _validateArgs(Class[] classes, WizardResultProducer finish) { -// assert classes != null : "Class array may not be null"; -// assert new HashSet(Arrays.asList(classes)).size() == classes.length : -// "Duplicate entries in class array"; -// assert finish != null : "WizardResultProducer may not be null"; - - if (classes == null) - throw new RuntimeException("Class array may not be null"); - if (new HashSet(Arrays.asList(classes)).size() != classes.length) + private void _validateArgs(Class[] classes, WizardResultProducer finish) { + Objects.requireNonNull(classes, "Class array may not be null"); + Objects.requireNonNull(finish, "WizardResultProducer may not be null"); + if (ArrayUtils.hasDuplicateElements(classes)) throw new RuntimeException("Duplicate entries in class array"); - if (finish == null) - throw new RuntimeException("WizardResultProducer may not be null"); } - CWPP(Class[] classes, WizardResultProducer finish) { + CWPP(Class[] classes, WizardResultProducer finish) { super(Util.getSteps(classes), Util.getDescriptions(classes)); - -// assert classes != null : "Class array may not be null"; -// assert new HashSet(Arrays.asList(classes)).size() == classes.length : -// "Duplicate entries in class array"; -// assert finish != null : "WizardResultProducer may not be null"; longDescriptions = new String[classes.length]; _validateArgs(classes, finish); diff --git a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/WizardPanelProvider.java b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/WizardPanelProvider.java index f7eb231af..724b98cd8 100644 --- a/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/WizardPanelProvider.java +++ b/HMCUtils/src/main/java/org/jackhuang/hellominecraft/util/ui/wizard/spi/WizardPanelProvider.java @@ -16,10 +16,10 @@ enclosed by brackets [] replaced by your own identifying information: package org.jackhuang.hellominecraft.util.ui.wizard.spi; import java.util.Arrays; -import java.util.HashSet; import java.util.Map; import java.util.Objects; import javax.swing.JComponent; +import org.jackhuang.hellominecraft.util.ArrayUtils; /** * (Note: WizardPage offers somewhat simpler functionality for @@ -142,7 +142,7 @@ public abstract class WizardPanelProvider { Objects.requireNonNull(steps[i], "Step id " + i + " is null"); Objects.requireNonNull(descriptions[i], "Description " + i + " is null"); } - if (new HashSet(Arrays.asList(steps)).size() != steps.length) + if (ArrayUtils.hasDuplicateElements(steps)) return "Duplicate step ids: " + Arrays.asList(steps); return null; }