Clean up again
This commit is contained in:
@@ -27,13 +27,6 @@ public class PluginManager {
|
|||||||
|
|
||||||
private static IPlugin NOW_PLUGIN;
|
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) {
|
public static void getPlugin(Class<?> cls) {
|
||||||
try {
|
try {
|
||||||
IPlugin p = (IPlugin) cls.newInstance();
|
IPlugin p = (IPlugin) cls.newInstance();
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ public class AssetsIndex {
|
|||||||
public boolean virtual;
|
public boolean virtual;
|
||||||
|
|
||||||
public AssetsIndex() {
|
public AssetsIndex() {
|
||||||
this.objects = new LinkedHashMap();
|
this.objects = new LinkedHashMap<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<String, AssetsObject> getFileMap() {
|
public Map<String, AssetsObject> getFileMap() {
|
||||||
@@ -46,7 +46,7 @@ public class AssetsIndex {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Set<AssetsObject> getUniqueObjects() {
|
public Set<AssetsObject> getUniqueObjects() {
|
||||||
return new HashSet(this.objects.values());
|
return new HashSet<>(this.objects.values());
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isVirtual() {
|
public boolean isVirtual() {
|
||||||
|
|||||||
@@ -26,11 +26,6 @@ public class AssetsObject {
|
|||||||
private String hash;
|
private String hash;
|
||||||
private long size;
|
private long size;
|
||||||
|
|
||||||
public AssetsObject(String hash, long size) {
|
|
||||||
this.hash = hash;
|
|
||||||
this.size = size;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setHash(String hash) {
|
public void setHash(String hash) {
|
||||||
this.hash = hash;
|
this.hash = hash;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,15 +28,6 @@ public class Contents {
|
|||||||
public 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() {
|
public String getKey() {
|
||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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.Task;
|
||||||
import org.jackhuang.hellominecraft.util.tasks.download.FileDownloadTask;
|
import org.jackhuang.hellominecraft.util.tasks.download.FileDownloadTask;
|
||||||
import org.jackhuang.hellominecraft.util.code.DigestUtils;
|
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.system.IOUtils;
|
||||||
import org.jackhuang.hellominecraft.util.tasks.TaskInfo;
|
import org.jackhuang.hellominecraft.util.tasks.TaskInfo;
|
||||||
|
|
||||||
@@ -113,8 +114,8 @@ public abstract class IAssetsHandler {
|
|||||||
boolean need = true;
|
boolean need = true;
|
||||||
try {
|
try {
|
||||||
if (location.exists()) {
|
if (location.exists()) {
|
||||||
FileInputStream fis = new FileInputStream(location);
|
FileInputStream fis = FileUtils.openInputStream(location);
|
||||||
String sha = DigestUtils.sha1Hex(IOUtils.readFully(fis).toByteArray());
|
String sha = DigestUtils.sha1Hex(IOUtils.toByteArray(fis));
|
||||||
IOUtils.closeQuietly(fis);
|
IOUtils.closeQuietly(fis);
|
||||||
if (contents.get(i).geteTag().equals(sha)) {
|
if (contents.get(i).geteTag().equals(sha)) {
|
||||||
++hasDownloaded;
|
++hasDownloaded;
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ public class MinecraftAssetService extends IMinecraftAssetService {
|
|||||||
public Task downloadAssets(final MinecraftVersion mv) throws GameException {
|
public Task downloadAssets(final MinecraftVersion mv) throws GameException {
|
||||||
if (mv == null)
|
if (mv == null)
|
||||||
return 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
|
@Override
|
||||||
@@ -155,7 +155,7 @@ public class MinecraftAssetService extends IMinecraftAssetService {
|
|||||||
|
|
||||||
if (index == null)
|
if (index == null)
|
||||||
return false;
|
return false;
|
||||||
for (Map.Entry entry : index.getFileMap().entrySet())
|
for (Map.Entry<String, AssetsObject> entry : index.getFileMap().entrySet())
|
||||||
if (!new File(getAssets(), "objects/" + ((AssetsObject) entry.getValue()).getHash().substring(0, 2) + "/" + ((AssetsObject) entry.getValue()).getHash()).exists())
|
if (!new File(getAssets(), "objects/" + ((AssetsObject) entry.getValue()).getHash().substring(0, 2) + "/" + ((AssetsObject) entry.getValue()).getHash()).exists())
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
@@ -185,7 +185,7 @@ public class MinecraftAssetService extends IMinecraftAssetService {
|
|||||||
int cnt = 0;
|
int cnt = 0;
|
||||||
HMCLog.log("Reconstructing virtual assets folder at " + virtualRoot);
|
HMCLog.log("Reconstructing virtual assets folder at " + virtualRoot);
|
||||||
int tot = index.getFileMap().entrySet().size();
|
int tot = index.getFileMap().entrySet().size();
|
||||||
for (Map.Entry entry : index.getFileMap().entrySet()) {
|
for (Map.Entry<String, AssetsObject> entry : index.getFileMap().entrySet()) {
|
||||||
File target = new File(virtualRoot, (String) entry.getKey());
|
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());
|
File original = new File(assetsDir, "objects/" + ((AssetsObject) entry.getValue()).getHash().substring(0, 2) + "/" + ((AssetsObject) entry.getValue()).getHash());
|
||||||
if (original.exists()) {
|
if (original.exists()) {
|
||||||
|
|||||||
@@ -87,13 +87,13 @@ public abstract class IAuthenticator {
|
|||||||
|
|
||||||
public abstract void logOut();
|
public abstract void logOut();
|
||||||
|
|
||||||
public Map onSaveSettings() {
|
public Map<?, ?> onSaveSettings() {
|
||||||
HashMap<String, String> m = new HashMap<>();
|
HashMap<String, String> m = new HashMap<>();
|
||||||
m.put("IAuthenticator_UserName", username);
|
m.put("IAuthenticator_UserName", username);
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onLoadSettings(Map m) {
|
public void onLoadSettings(Map<?, ?> m) {
|
||||||
if (m == null)
|
if (m == null)
|
||||||
return;
|
return;
|
||||||
Object o = m.get("IAuthenticator_UserName");
|
Object o = m.get("IAuthenticator_UserName");
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ import org.jackhuang.hellominecraft.util.code.DigestUtils;
|
|||||||
*/
|
*/
|
||||||
public final class OfflineAuthenticator extends IAuthenticator {
|
public final class OfflineAuthenticator extends IAuthenticator {
|
||||||
|
|
||||||
Map<String, String> uuidMap = new HashMap<>();
|
Map uuidMap = new HashMap<>();
|
||||||
|
|
||||||
public OfflineAuthenticator(String clientToken) {
|
public OfflineAuthenticator(String clientToken) {
|
||||||
super(clientToken);
|
super(clientToken);
|
||||||
@@ -42,7 +42,7 @@ public final class OfflineAuthenticator extends IAuthenticator {
|
|||||||
return;
|
return;
|
||||||
Object o = m.get("uuidMap");
|
Object o = m.get("uuidMap");
|
||||||
if (o != null && o instanceof Map)
|
if (o != null && o instanceof Map)
|
||||||
uuidMap = (Map<String, String>) o;
|
uuidMap = (Map<?, ?>) o;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -57,8 +57,8 @@ public final class OfflineAuthenticator extends IAuthenticator {
|
|||||||
if (StrUtils.isBlank(info.username))
|
if (StrUtils.isBlank(info.username))
|
||||||
throw new AuthenticationException(C.i18n("login.no_Player007"));
|
throw new AuthenticationException(C.i18n("login.no_Player007"));
|
||||||
String uuid = getUUIDFromUserName(info.username);
|
String uuid = getUUIDFromUserName(info.username);
|
||||||
if (uuidMap != null && uuidMap.containsKey(uuid))
|
if (uuidMap != null && uuidMap.containsKey(info.username) && uuidMap.get(info.username) instanceof String)
|
||||||
uuid = uuidMap.get(info.username);
|
uuid = (String) uuidMap.get(info.username);
|
||||||
else {
|
else {
|
||||||
if (uuidMap == null)
|
if (uuidMap == null)
|
||||||
uuidMap = new HashMap<>();
|
uuidMap = new HashMap<>();
|
||||||
@@ -69,7 +69,8 @@ public final class OfflineAuthenticator extends IAuthenticator {
|
|||||||
.setSession(uuid)
|
.setSession(uuid)
|
||||||
.setUserId(uuid)
|
.setUserId(uuid)
|
||||||
.setAccessToken(uuid)
|
.setAccessToken(uuid)
|
||||||
.setUserType("Legacy");
|
.setUserType("Legacy")
|
||||||
|
.setClientIdentifier(clientToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getUUIDFromUserName(String str) {
|
public static String getUUIDFromUserName(String str) {
|
||||||
|
|||||||
@@ -86,7 +86,8 @@ public final class YggdrasilAuthenticator extends IAuthenticator {
|
|||||||
.setUserProperties(new GsonBuilder().registerTypeAdapter(PropertyMap.class, new PropertyMap.LegacySerializer()).create().toJson(ua.getUserProperties()))
|
.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()))
|
.setUserPropertyMap(new GsonBuilder().registerTypeAdapter(PropertyMap.class, new PropertyMap.Serializer()).create().toJson(ua.getUserProperties()))
|
||||||
.setAccessToken(ua.getAuthenticatedToken())
|
.setAccessToken(ua.getAuthenticatedToken())
|
||||||
.setSession(ua.getAuthenticatedToken());
|
.setSession(ua.getAuthenticatedToken())
|
||||||
|
.setClientIdentifier(clientToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -25,11 +25,6 @@ public class User {
|
|||||||
public User() {
|
public User() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public User(String id, PropertyMap properties) {
|
|
||||||
this.id = id;
|
|
||||||
this.properties = properties;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getId() {
|
public String getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,12 +17,18 @@
|
|||||||
*/
|
*/
|
||||||
package org.jackhuang.hellominecraft.launcher.core.download;
|
package org.jackhuang.hellominecraft.launcher.core.download;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author huangyuhui
|
* @author huangyuhui
|
||||||
*/
|
*/
|
||||||
public class MinecraftRemoteLatestVersion {
|
public class MinecraftRemoteLatestVersion {
|
||||||
|
|
||||||
public String snapshot, release;
|
@SerializedName("snapshot")
|
||||||
|
public String snapshot;
|
||||||
|
|
||||||
|
@SerializedName("release")
|
||||||
|
public String release;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,13 +17,23 @@
|
|||||||
*/
|
*/
|
||||||
package org.jackhuang.hellominecraft.launcher.core.download;
|
package org.jackhuang.hellominecraft.launcher.core.download;
|
||||||
|
|
||||||
|
import com.google.gson.annotations.SerializedName;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @author huangyuhui
|
* @author huangyuhui
|
||||||
*/
|
*/
|
||||||
public class MinecraftRemoteVersion {
|
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;
|
private String url;
|
||||||
|
|
||||||
public String getUrl(DownloadType type) {
|
public String getUrl(DownloadType type) {
|
||||||
|
|||||||
@@ -19,9 +19,12 @@ package org.jackhuang.hellominecraft.launcher.core.install;
|
|||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import org.jackhuang.hellominecraft.util.StrUtils;
|
||||||
import org.jackhuang.hellominecraft.util.tasks.Task;
|
import org.jackhuang.hellominecraft.util.tasks.Task;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -29,6 +32,9 @@ import org.jackhuang.hellominecraft.util.tasks.Task;
|
|||||||
* @author huangyuhui
|
* @author huangyuhui
|
||||||
*/
|
*/
|
||||||
public abstract class InstallerVersionList {
|
public abstract class InstallerVersionList {
|
||||||
|
|
||||||
|
public Map<String, List<InstallerVersion>> versionMap;
|
||||||
|
public List<InstallerVersion> versions;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Refresh installer versions list from the downloaded content.
|
* Refresh installer versions list from the downloaded content.
|
||||||
@@ -53,7 +59,17 @@ public abstract class InstallerVersionList {
|
|||||||
*
|
*
|
||||||
* @return cached result.
|
* @return cached result.
|
||||||
*/
|
*/
|
||||||
protected abstract List<InstallerVersion> getVersionsImpl(String mcVersion);
|
public List<InstallerVersion> getVersionsImpl(String mcVersion) {
|
||||||
|
if (versions == null || versionMap == null)
|
||||||
|
return null;
|
||||||
|
if (StrUtils.isBlank(mcVersion))
|
||||||
|
return versions;
|
||||||
|
List<InstallerVersion> 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.
|
* Get installers you want, please cache this method's result to save time.
|
||||||
|
|||||||
@@ -62,8 +62,8 @@ public final class MinecraftInstallerService extends IMinecraftInstallerService
|
|||||||
return null;
|
return null;
|
||||||
else
|
else
|
||||||
return new FileDownloadTask(service.getDownloadType().getProvider().getParsedDownloadURL(v.installer), filepath).setTag("forge")
|
return new FileDownloadTask(service.getDownloadType().getProvider().getParsedDownloadURL(v.installer), filepath).setTag("forge")
|
||||||
.after(new ForgeInstaller(service, filepath))
|
.with(new ForgeInstaller(service, filepath))
|
||||||
.after(new DeleteFileTask(filepath));
|
.with(new DeleteFileTask(filepath));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -72,9 +72,9 @@ public final class MinecraftInstallerService extends IMinecraftInstallerService
|
|||||||
if (v.installer == null)
|
if (v.installer == null)
|
||||||
return null;
|
return null;
|
||||||
OptiFineDownloadFormatter task = new OptiFineDownloadFormatter(v.installer);
|
OptiFineDownloadFormatter task = new OptiFineDownloadFormatter(v.installer);
|
||||||
return task.after(new FileDownloadTask(filepath).registerPreviousResult(task).setTag("optifine"))
|
return task.with(new FileDownloadTask(filepath).registerPreviousResult(task).setTag("optifine"))
|
||||||
.after(new OptiFineInstaller(service, installId, v, filepath))
|
.with(new OptiFineInstaller(service, installId, v, filepath))
|
||||||
.after(new DeleteFileTask(filepath));
|
.with(new DeleteFileTask(filepath));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -83,7 +83,7 @@ public final class MinecraftInstallerService extends IMinecraftInstallerService
|
|||||||
throw new Error("Download lite loader but the version is not ll's.");
|
throw new Error("Download lite loader but the version is not ll's.");
|
||||||
File filepath = IOUtils.tryGetCanonicalFile("liteloader-universal.jar");
|
File filepath = IOUtils.tryGetCanonicalFile("liteloader-universal.jar");
|
||||||
FileDownloadTask task = (FileDownloadTask) new FileDownloadTask(v.universal, filepath).setTag("LiteLoader");
|
FileDownloadTask task = (FileDownloadTask) new FileDownloadTask(v.universal, filepath).setTag("LiteLoader");
|
||||||
return task.after(new LiteLoaderInstaller(service, installId, (LiteLoaderVersionList.LiteLoaderInstallerVersion) v).registerPreviousResult(task))
|
return task.with(new LiteLoaderInstaller(service, installId, (LiteLoaderVersionList.LiteLoaderInstallerVersion) v).registerPreviousResult(task))
|
||||||
.after(new DeleteFileTask(filepath));
|
.with(new DeleteFileTask(filepath));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,50 +0,0 @@
|
|||||||
/*
|
|
||||||
* Hello Minecraft! Launcher.
|
|
||||||
* Copyright (C) 2013 huangyuhui <huanghongxun2008@126.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see {http://www.gnu.org/licenses/}.
|
|
||||||
*/
|
|
||||||
package org.jackhuang.hellominecraft.launcher.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<String> src;
|
|
||||||
|
|
||||||
public PackMinecraftInstaller(ArrayList<String> 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -81,7 +81,7 @@ public class ForgeInstaller extends Task {
|
|||||||
File file = new File(gameDir, "libraries/" + forge.getDownloadInfo().path);
|
File file = new File(gameDir, "libraries/" + forge.getDownloadInfo().path);
|
||||||
if (file.getParentFile().mkdirs())
|
if (file.getParentFile().mkdirs())
|
||||||
HMCLog.warn("Failed to make library directory " + file.getParent());
|
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);
|
IOUtils.copyStream(is, fos);
|
||||||
}
|
}
|
||||||
mp.version().refreshVersions();
|
mp.version().refreshVersions();
|
||||||
|
|||||||
@@ -1,38 +0,0 @@
|
|||||||
/*
|
|
||||||
* Hello Minecraft! Launcher.
|
|
||||||
* Copyright (C) 2013 huangyuhui <huanghongxun2008@126.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see {http://www.gnu.org/licenses/}.
|
|
||||||
*/
|
|
||||||
package org.jackhuang.hellominecraft.launcher.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<String> al = new ArrayList<>();
|
|
||||||
al.add(srcMinecraftJar);
|
|
||||||
al.add(forgeUniversal);
|
|
||||||
new PackMinecraftInstaller(al, new File(destMinecraftJar)).install();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -47,19 +47,6 @@ public class Install {
|
|||||||
public 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() {
|
public String getProfileName() {
|
||||||
return profileName;
|
return profileName;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,16 +76,4 @@ public class MinecraftForgeVersion {
|
|||||||
this.modified = modified;
|
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,7 +22,6 @@ import java.util.Arrays;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import org.jackhuang.hellominecraft.util.C;
|
import org.jackhuang.hellominecraft.util.C;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.download.DownloadType;
|
import org.jackhuang.hellominecraft.launcher.core.download.DownloadType;
|
||||||
@@ -48,8 +47,6 @@ public class MinecraftForgeVersionList extends InstallerVersionList {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public MinecraftForgeVersionRoot root;
|
public MinecraftForgeVersionRoot root;
|
||||||
public Map<String, List<InstallerVersion>> versionMap;
|
|
||||||
public List<InstallerVersion> versions;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Task refresh(String[] needed) {
|
public Task refresh(String[] needed) {
|
||||||
@@ -116,19 +113,6 @@ public class MinecraftForgeVersionList extends InstallerVersionList {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<InstallerVersion> 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
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return "Forge - MinecraftForge Offical Site";
|
return "Forge - MinecraftForge Offical Site";
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ public class LiteLoaderInstaller extends Task implements PreviousResultRegistrar
|
|||||||
MinecraftVersion mv = (MinecraftVersion) service.version().getVersionById(installId).clone();
|
MinecraftVersion mv = (MinecraftVersion) service.version().getVersionById(installId).clone();
|
||||||
mv.inheritsFrom = mv.id;
|
mv.inheritsFrom = mv.id;
|
||||||
mv.jar = mv.jar == null ? mv.id : mv.jar;
|
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);
|
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";
|
//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<PreviousResult<File>> pre = new ArrayList<>();
|
ArrayList<PreviousResult<File>> pre = new ArrayList<>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Task registerPreviousResult(PreviousResult pr) {
|
public Task registerPreviousResult(PreviousResult<File> pr) {
|
||||||
pre.add(pr);
|
pre.add(pr);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,13 +22,11 @@ import java.util.Arrays;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import org.jackhuang.hellominecraft.util.C;
|
import org.jackhuang.hellominecraft.util.C;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.version.MinecraftLibrary;
|
import org.jackhuang.hellominecraft.launcher.core.version.MinecraftLibrary;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.install.InstallerVersionList;
|
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.launcher.core.install.InstallerVersionNewerComparator;
|
||||||
import org.jackhuang.hellominecraft.util.StrUtils;
|
import org.jackhuang.hellominecraft.util.StrUtils;
|
||||||
import org.jackhuang.hellominecraft.util.tasks.Task;
|
import org.jackhuang.hellominecraft.util.tasks.Task;
|
||||||
@@ -50,8 +48,6 @@ public class LiteLoaderVersionList extends InstallerVersionList {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public LiteLoaderVersionsRoot root;
|
public LiteLoaderVersionsRoot root;
|
||||||
public Map<String, List<InstallerVersion>> versionMap;
|
|
||||||
public List<InstallerVersion> versions;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Task refresh(String[] needed) {
|
public Task refresh(String[] needed) {
|
||||||
@@ -102,19 +98,6 @@ public class LiteLoaderVersionList extends InstallerVersionList {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<InstallerVersion> 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
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return "LiteLoader - LiteLoader Official Site(By: Mumfrey)";
|
return "LiteLoader - LiteLoader Official Site(By: Mumfrey)";
|
||||||
|
|||||||
@@ -35,13 +35,6 @@ public class LiteLoaderVersionsMeta {
|
|||||||
public LiteLoaderVersionsMeta() {
|
public LiteLoaderVersionsMeta() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public LiteLoaderVersionsMeta(String description, String authors, String url) {
|
|
||||||
this();
|
|
||||||
this.description = description;
|
|
||||||
this.authors = authors;
|
|
||||||
this.url = url;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDescription() {
|
public String getDescription() {
|
||||||
return description;
|
return description;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,10 +42,6 @@ public class OptiFineInstaller extends Task implements PreviousResultRegistrar<F
|
|||||||
public InstallerVersionList.InstallerVersion version;
|
public InstallerVersionList.InstallerVersion version;
|
||||||
public String installId;
|
public String installId;
|
||||||
|
|
||||||
public OptiFineInstaller(IMinecraftService service, String installId, InstallerVersionList.InstallerVersion version) {
|
|
||||||
this(service, installId, version, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public OptiFineInstaller(IMinecraftService service, String installId, InstallerVersionList.InstallerVersion version, File installer) {
|
public OptiFineInstaller(IMinecraftService service, String installId, InstallerVersionList.InstallerVersion version, File installer) {
|
||||||
this.service = service;
|
this.service = service;
|
||||||
this.installId = installId;
|
this.installId = installId;
|
||||||
@@ -90,10 +86,10 @@ public class OptiFineInstaller extends Task implements PreviousResultRegistrar<F
|
|||||||
return "OptiFine Installer";
|
return "OptiFine Installer";
|
||||||
}
|
}
|
||||||
|
|
||||||
ArrayList<PreviousResult<File>> pre = new ArrayList();
|
ArrayList<PreviousResult<File>> pre = new ArrayList<>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Task registerPreviousResult(PreviousResult pr) {
|
public Task registerPreviousResult(PreviousResult<File> pr) {
|
||||||
pre.add(pr);
|
pre.add(pr);
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ import java.util.Collection;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import org.jackhuang.hellominecraft.util.C;
|
import org.jackhuang.hellominecraft.util.C;
|
||||||
@@ -52,8 +51,6 @@ public class OptiFineBMCLVersionList extends InstallerVersionList {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList<OptiFineVersion> root;
|
public ArrayList<OptiFineVersion> root;
|
||||||
public Map<String, List<InstallerVersion>> versionMap;
|
|
||||||
public List<InstallerVersion> versions;
|
|
||||||
|
|
||||||
private static final Type TYPE = new TypeToken<ArrayList<OptiFineVersion>>() {
|
private static final Type TYPE = new TypeToken<ArrayList<OptiFineVersion>>() {
|
||||||
}.getType();
|
}.getType();
|
||||||
@@ -101,19 +98,6 @@ public class OptiFineBMCLVersionList extends InstallerVersionList {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<InstallerVersion> 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
|
@Override
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return "OptiFine - BMCLAPI(By: bangbang93)";
|
return "OptiFine - BMCLAPI(By: bangbang93)";
|
||||||
|
|||||||
@@ -25,7 +25,6 @@ import java.util.Collection;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import javax.xml.parsers.DocumentBuilder;
|
import javax.xml.parsers.DocumentBuilder;
|
||||||
@@ -59,9 +58,7 @@ public class OptiFineVersionList extends InstallerVersionList {
|
|||||||
return instance;
|
return instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ArrayList<OptiFineVersion> root = new ArrayList();
|
public ArrayList<OptiFineVersion> root = new ArrayList<>();
|
||||||
public Map<String, List<InstallerVersion>> versionMap;
|
|
||||||
public List<InstallerVersion> versions;
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Task refresh(String[] sss) {
|
public Task refresh(String[] sss) {
|
||||||
@@ -138,18 +135,4 @@ public class OptiFineVersionList extends InstallerVersionList {
|
|||||||
public String getName() {
|
public String getName() {
|
||||||
return "OptiFine - OptiFine Official Site";
|
return "OptiFine - OptiFine Official Site";
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<InstallerVersion> 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,8 +22,6 @@ import java.io.File;
|
|||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.OutputStreamWriter;
|
import java.io.OutputStreamWriter;
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
import java.nio.charset.Charset;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import org.jackhuang.hellominecraft.launcher.api.PluginManager;
|
import org.jackhuang.hellominecraft.launcher.api.PluginManager;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.GameException;
|
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.C;
|
||||||
import org.jackhuang.hellominecraft.util.EventHandler;
|
import org.jackhuang.hellominecraft.util.EventHandler;
|
||||||
import org.jackhuang.hellominecraft.util.StrUtils;
|
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.logging.HMCLog;
|
||||||
import org.jackhuang.hellominecraft.util.system.FileUtils;
|
import org.jackhuang.hellominecraft.util.system.FileUtils;
|
||||||
import org.jackhuang.hellominecraft.util.system.IOUtils;
|
import org.jackhuang.hellominecraft.util.system.IOUtils;
|
||||||
@@ -153,7 +152,7 @@ public class GameLauncher {
|
|||||||
*
|
*
|
||||||
* @throws java.io.IOException write contents failed.
|
* @throws java.io.IOException write contents failed.
|
||||||
*/
|
*/
|
||||||
public File makeLauncher(String launcherName, List str) throws IOException {
|
public File makeLauncher(String launcherName, List<String> str) throws IOException {
|
||||||
HMCLog.log("Making shell launcher...");
|
HMCLog.log("Making shell launcher...");
|
||||||
service.version().onLaunch(options.getLaunchVersion());
|
service.version().onLaunch(options.getLaunchVersion());
|
||||||
boolean isWin = OS.os() == OS.WINDOWS;
|
boolean isWin = OS.os() == OS.WINDOWS;
|
||||||
@@ -161,13 +160,8 @@ public class GameLauncher {
|
|||||||
if (!f.exists() && !f.createNewFile())
|
if (!f.exists() && !f.createNewFile())
|
||||||
HMCLog.warn("Failed to create " + f);
|
HMCLog.warn("Failed to create " + f);
|
||||||
BufferedWriter writer;
|
BufferedWriter writer;
|
||||||
try (FileOutputStream fos = new FileOutputStream(f)) {
|
try (FileOutputStream fos = FileUtils.openOutputStream(f)) {
|
||||||
try {
|
writer = new BufferedWriter(new OutputStreamWriter(fos, Charsets.toCharset()));
|
||||||
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()));
|
|
||||||
}
|
|
||||||
if (isWin) {
|
if (isWin) {
|
||||||
writer.write("@echo off");
|
writer.write("@echo off");
|
||||||
writer.newLine();
|
writer.newLine();
|
||||||
|
|||||||
@@ -18,7 +18,6 @@
|
|||||||
package org.jackhuang.hellominecraft.launcher.core.mod;
|
package org.jackhuang.hellominecraft.launcher.core.mod;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
@@ -28,7 +27,6 @@ import java.util.Map;
|
|||||||
import org.jackhuang.hellominecraft.util.logging.HMCLog;
|
import org.jackhuang.hellominecraft.util.logging.HMCLog;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftModService;
|
import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftModService;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftService;
|
import org.jackhuang.hellominecraft.launcher.core.service.IMinecraftService;
|
||||||
import org.jackhuang.hellominecraft.util.code.DigestUtils;
|
|
||||||
import org.jackhuang.hellominecraft.util.system.FileUtils;
|
import org.jackhuang.hellominecraft.util.system.FileUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -113,11 +111,4 @@ public class MinecraftModService extends IMinecraftModService {
|
|||||||
return flag;
|
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -93,15 +93,15 @@ public final class ModpackManager {
|
|||||||
|
|
||||||
// Read modpack name and description from `modpack.json`
|
// Read modpack name and description from `modpack.json`
|
||||||
try (ZipFile zip = new ZipFile(input)) {
|
try (ZipFile zip = new ZipFile(input)) {
|
||||||
HashMap map = C.GSON.fromJson(new InputStreamReader(zip.getInputStream(zip.getEntry("modpack.json")), "UTF-8"), HashMap.class);
|
HashMap<String, String> map = C.GSON.fromJson(new InputStreamReader(zip.getInputStream(zip.getEntry("modpack.json")), "UTF-8"), HashMap.class);
|
||||||
if (map != null) {
|
if (map != null) {
|
||||||
if (id == null)
|
if (id == null)
|
||||||
if (map.containsKey("name") && map.get("name") instanceof String)
|
if (map.containsKey("name") && map.get("name") instanceof String)
|
||||||
id = (String) map.get("name");
|
id = map.get("name");
|
||||||
if (id != null)
|
if (id != null)
|
||||||
description += id;
|
description += id;
|
||||||
if (map.containsKey("description") && map.get("description") instanceof String)
|
if (map.containsKey("description") && map.get("description") instanceof String)
|
||||||
description += "\n" + (String) map.get("description");
|
description += "\n" + map.get("description");
|
||||||
}
|
}
|
||||||
if (id == null)
|
if (id == null)
|
||||||
throw new IllegalStateException("Illegal modpack id!");
|
throw new IllegalStateException("Illegal modpack id!");
|
||||||
@@ -245,7 +245,7 @@ public final class ModpackManager {
|
|||||||
*
|
*
|
||||||
* @throws IOException if create tmp directory failed
|
* @throws IOException if create tmp directory failed
|
||||||
*/
|
*/
|
||||||
public static void export(File output, IMinecraftProvider provider, String version, List<String> blacklist, Map modpackJson, CallbackIO<ZipEngine> callback) throws IOException, GameException {
|
public static void export(File output, IMinecraftProvider provider, String version, List<String> blacklist, Map<String, String> modpackPreferences, CallbackIO<ZipEngine> callback) throws IOException, GameException {
|
||||||
final ArrayList<String> b = new ArrayList<>(MODPACK_BLACK_LIST);
|
final ArrayList<String> b = new ArrayList<>(MODPACK_BLACK_LIST);
|
||||||
if (blacklist != null)
|
if (blacklist != null)
|
||||||
b.addAll(blacklist);
|
b.addAll(blacklist);
|
||||||
@@ -272,7 +272,7 @@ public final class ModpackManager {
|
|||||||
mv.jar = r.version;
|
mv.jar = r.version;
|
||||||
mv.runDir = "version";
|
mv.runDir = "version";
|
||||||
zip.putTextFile(C.GSON.toJson(mv), "minecraft/pack.json");
|
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)
|
if (callback != null)
|
||||||
callback.call(zip);
|
callback.call(zip);
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ public class Extract implements Cloneable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("CloneDeclaresCloneNotSupported")
|
|
||||||
public Object clone() {
|
public Object clone() {
|
||||||
try {
|
try {
|
||||||
return super.clone();
|
return super.clone();
|
||||||
|
|||||||
@@ -56,7 +56,6 @@ public abstract class IMinecraftLibrary implements Cloneable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("CloneDeclaresCloneNotSupported")
|
|
||||||
public Object clone() {
|
public Object clone() {
|
||||||
try {
|
try {
|
||||||
return super.clone();
|
return super.clone();
|
||||||
|
|||||||
@@ -46,14 +46,6 @@ public class MinecraftLibrary extends IMinecraftLibrary {
|
|||||||
super(name);
|
super(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public MinecraftLibrary(ArrayList<Rules> rules, String url, Natives natives, String name, Extract extract, LibraryDownloadInfo downloads) {
|
|
||||||
super(name);
|
|
||||||
this.rules = rules == null ? null : (ArrayList<Rules>) 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.
|
* is the library allowed to load.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -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.service.IMinecraftProvider;
|
||||||
import org.jackhuang.hellominecraft.launcher.core.asset.AssetsIndex;
|
import org.jackhuang.hellominecraft.launcher.core.asset.AssetsIndex;
|
||||||
import org.jackhuang.hellominecraft.util.ArrayUtils;
|
import org.jackhuang.hellominecraft.util.ArrayUtils;
|
||||||
import org.jackhuang.hellominecraft.util.Utils;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -213,6 +212,6 @@ public class MinecraftVersion implements Cloneable, Comparable<MinecraftVersion>
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Set<IMinecraftLibrary> getLibraries() {
|
public Set<IMinecraftLibrary> getLibraries() {
|
||||||
return libraries == null ? new HashSet() : new HashSet(libraries);
|
return libraries == null ? new HashSet<>() : new HashSet<>(libraries);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ import org.jackhuang.hellominecraft.util.ui.SwingUtils;
|
|||||||
*/
|
*/
|
||||||
public class MinecraftVersionManager extends IMinecraftProvider {
|
public class MinecraftVersionManager extends IMinecraftProvider {
|
||||||
|
|
||||||
final Map<String, MinecraftVersion> versions = new TreeMap();
|
final Map<String, MinecraftVersion> versions = new TreeMap<>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -33,7 +33,6 @@ public class Natives implements Cloneable {
|
|||||||
public String linux;
|
public String linux;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@SuppressWarnings("CloneDeclaresCloneNotSupported")
|
|
||||||
protected Object clone() {
|
protected Object clone() {
|
||||||
try {
|
try {
|
||||||
return super.clone();
|
return super.clone();
|
||||||
|
|||||||
@@ -33,12 +33,6 @@ public class Rules {
|
|||||||
public Rules() {
|
public Rules() {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Rules(String action, OSRestriction os) {
|
|
||||||
this();
|
|
||||||
this.action = action;
|
|
||||||
this.os = os;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String action() {
|
public String action() {
|
||||||
return os == null || os.isCurrentOS() ? action : null;
|
return os == null || os.isCurrentOS() ? action : null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -98,7 +98,6 @@ public final class Main implements Runnable {
|
|||||||
return "HMCL" + ' ' + LAUNCHER_VERSION;
|
return "HMCL" + ' ' + LAUNCHER_VERSION;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final Main INSTANCE = new Main();
|
|
||||||
private static HelloMinecraftLookAndFeel LOOK_AND_FEEL;
|
private static HelloMinecraftLookAndFeel LOOK_AND_FEEL;
|
||||||
|
|
||||||
private static final Logger LOGGER = Logger.getLogger(Main.class.getName());
|
private static final Logger LOGGER = Logger.getLogger(Main.class.getName());
|
||||||
|
|||||||
@@ -126,18 +126,10 @@ public final class Settings {
|
|||||||
return SETTINGS.getConfigurations();
|
return SETTINGS.getConfigurations();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setProfile(Profile ver) {
|
|
||||||
getProfiles().put(ver.getName(), ver);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Collection<Profile> getProfilesFiltered() {
|
public static Collection<Profile> getProfilesFiltered() {
|
||||||
return CollectionUtils.filter(getProfiles().values(), t -> t != null && t.getName() != null);
|
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) {
|
public static boolean putProfile(Profile ver) {
|
||||||
if (ver == null || ver.getName() == null || getProfiles().containsKey(ver.getName()))
|
if (ver == null || ver.getName() == null || getProfiles().containsKey(ver.getName()))
|
||||||
return false;
|
return false;
|
||||||
@@ -163,8 +155,8 @@ public final class Settings {
|
|||||||
return flag;
|
return flag;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final EventHandler<Profile> profileChangedEvent = new EventHandler(null);
|
public static final EventHandler<Profile> profileChangedEvent = new EventHandler<>(null);
|
||||||
public static final EventHandler<Void> profileLoadingEvent = new EventHandler(null);
|
public static final EventHandler<Void> profileLoadingEvent = new EventHandler<>(null);
|
||||||
|
|
||||||
static void onProfileChanged() {
|
static void onProfileChanged() {
|
||||||
Profile p = getLastProfile();
|
Profile p = getLastProfile();
|
||||||
|
|||||||
@@ -93,27 +93,6 @@ public class VersionSetting {
|
|||||||
javaDir = java = minecraftArgs = serverIp = precalledCommand = wrapper = "";
|
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() {
|
public String getJavaDir() {
|
||||||
Java j = getJava();
|
Java j = getJava();
|
||||||
if (j.getHome() == null)
|
if (j.getHome() == null)
|
||||||
@@ -173,10 +152,6 @@ public class VersionSetting {
|
|||||||
propertyChanged.execute("javaArgs");
|
propertyChanged.execute("javaArgs");
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasJavaArgs() {
|
|
||||||
return StrUtils.isNotBlank(getJavaArgs().trim());
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getMaxMemory() {
|
public String getMaxMemory() {
|
||||||
if (StrUtils.isBlank(maxMemory))
|
if (StrUtils.isBlank(maxMemory))
|
||||||
return String.valueOf(OS.getSuggestedMemorySize());
|
return String.valueOf(OS.getSuggestedMemorySize());
|
||||||
|
|||||||
@@ -1410,7 +1410,7 @@ public final class GameSettingsPanel extends RepaintPage implements DropTargetLi
|
|||||||
|
|
||||||
private void loadProfiles() {
|
private void loadProfiles() {
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
DefaultComboBoxModel model = new DefaultComboBoxModel();
|
DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>();
|
||||||
for (Profile s : Settings.getProfilesFiltered())
|
for (Profile s : Settings.getProfilesFiltered())
|
||||||
model.addElement(s.getName());
|
model.addElement(s.getName());
|
||||||
cboProfiles.setModel(model);
|
cboProfiles.setModel(model);
|
||||||
@@ -1423,7 +1423,7 @@ public final class GameSettingsPanel extends RepaintPage implements DropTargetLi
|
|||||||
};
|
};
|
||||||
|
|
||||||
void loadVersions() {
|
void loadVersions() {
|
||||||
DefaultComboBoxModel model = new DefaultComboBoxModel();
|
DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>();
|
||||||
for (MinecraftVersion each : Settings.getLastProfile().service().version().getVersions()) {
|
for (MinecraftVersion each : Settings.getLastProfile().service().version().getVersions()) {
|
||||||
if (each.hidden)
|
if (each.hidden)
|
||||||
continue;
|
continue;
|
||||||
@@ -1438,7 +1438,7 @@ public final class GameSettingsPanel extends RepaintPage implements DropTargetLi
|
|||||||
|
|
||||||
public void versionChanged(String version) {
|
public void versionChanged(String version) {
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
DefaultComboBoxModel model = (DefaultComboBoxModel) cboVersions.getModel();
|
DefaultComboBoxModel<String> model = (DefaultComboBoxModel<String>) cboVersions.getModel();
|
||||||
for (int i = 0; i < model.getSize(); ++i)
|
for (int i = 0; i < model.getSize(); ++i)
|
||||||
if (model.getElementAt(i).equals(version)) {
|
if (model.getElementAt(i).equals(version)) {
|
||||||
model.setSelectedItem(version);
|
model.setSelectedItem(version);
|
||||||
@@ -1462,7 +1462,7 @@ public final class GameSettingsPanel extends RepaintPage implements DropTargetLi
|
|||||||
txtGameDir.setText(t.getGameDir());
|
txtGameDir.setText(t.getGameDir());
|
||||||
|
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
DefaultComboBoxModel model = (DefaultComboBoxModel) cboProfiles.getModel();
|
DefaultComboBoxModel<String> model = (DefaultComboBoxModel<String>) cboProfiles.getModel();
|
||||||
for (int i = 0; i < model.getSize(); ++i)
|
for (int i = 0; i < model.getSize(); ++i)
|
||||||
if (model.getElementAt(i).equals(t.getName())) {
|
if (model.getElementAt(i).equals(t.getName())) {
|
||||||
model.setSelectedItem(t.getName());
|
model.setSelectedItem(t.getName());
|
||||||
|
|||||||
@@ -68,10 +68,6 @@ public class HeaderTab extends JLabel
|
|||||||
return this.model.getActionListeners();
|
return this.model.getActionListeners();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeActionListener(ActionListener listener) {
|
|
||||||
this.model.removeActionListener(listener);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setActionCommand(String command) {
|
public void setActionCommand(String command) {
|
||||||
this.model.setActionCommand(command);
|
this.model.setActionCommand(command);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ public class InstallerPanel extends Page {
|
|||||||
Task refreshVersionsTask() {
|
Task refreshVersionsTask() {
|
||||||
Task t = list.refresh(new String[] { gsp.getMinecraftVersionFormatted() });
|
Task t = list.refresh(new String[] { gsp.getMinecraftVersionFormatted() });
|
||||||
if (t != null)
|
if (t != null)
|
||||||
return t.after(new TaskRunnable(this::loadVersions));
|
return t.with(new TaskRunnable(this::loadVersions));
|
||||||
else
|
else
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,12 +49,12 @@ public class LauncherSettingsPanel extends RepaintPage {
|
|||||||
setBackground(GraphicsUtils.getWebColorWithAlpha("FFFFFF7F"));
|
setBackground(GraphicsUtils.getWebColorWithAlpha("FFFFFF7F"));
|
||||||
setOpaque(true);
|
setOpaque(true);
|
||||||
|
|
||||||
DefaultComboBoxModel d = new DefaultComboBoxModel();
|
DefaultComboBoxModel<String> d = new DefaultComboBoxModel<>();
|
||||||
for (DownloadType type : DownloadType.values())
|
for (DownloadType type : DownloadType.values())
|
||||||
d.addElement(type.getName());
|
d.addElement(type.getName());
|
||||||
cboDownloadSource.setModel(d);
|
cboDownloadSource.setModel(d);
|
||||||
|
|
||||||
d = new DefaultComboBoxModel();
|
d = new DefaultComboBoxModel<>();
|
||||||
int id = 0;
|
int id = 0;
|
||||||
for (SupportedLocales type : SupportedLocales.values()) {
|
for (SupportedLocales type : SupportedLocales.values()) {
|
||||||
d.addElement(type.showString());
|
d.addElement(type.showString());
|
||||||
|
|||||||
@@ -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.ui.modpack.ModpackWizard;
|
||||||
import org.jackhuang.hellominecraft.launcher.util.HMCLMinecraftService;
|
import org.jackhuang.hellominecraft.launcher.util.HMCLMinecraftService;
|
||||||
import org.jackhuang.hellominecraft.util.Event;
|
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.func.Consumer;
|
||||||
import org.jackhuang.hellominecraft.util.system.FileUtils;
|
import org.jackhuang.hellominecraft.util.system.FileUtils;
|
||||||
import org.jackhuang.hellominecraft.util.tasks.TaskWindow;
|
import org.jackhuang.hellominecraft.util.tasks.TaskWindow;
|
||||||
@@ -473,7 +473,7 @@ public class MainPagePanel extends GaussionPage {
|
|||||||
|
|
||||||
final Runnable onLoadingProfiles = () -> {
|
final Runnable onLoadingProfiles = () -> {
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
DefaultComboBoxModel model = new DefaultComboBoxModel();
|
DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>();
|
||||||
for (Profile s : Settings.getProfilesFiltered())
|
for (Profile s : Settings.getProfilesFiltered())
|
||||||
model.addElement(s.getName());
|
model.addElement(s.getName());
|
||||||
cboProfiles.setModel(model);
|
cboProfiles.setModel(model);
|
||||||
@@ -516,7 +516,7 @@ public class MainPagePanel extends GaussionPage {
|
|||||||
|
|
||||||
void versionChanged(String selectedVersion) {
|
void versionChanged(String selectedVersion) {
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
DefaultComboBoxModel model = (DefaultComboBoxModel) cboVersions.getModel();
|
DefaultComboBoxModel<String> model = (DefaultComboBoxModel<String>) cboVersions.getModel();
|
||||||
for (int i = 0; i < model.getSize(); ++i)
|
for (int i = 0; i < model.getSize(); ++i)
|
||||||
if (model.getElementAt(i).equals(selectedVersion)) {
|
if (model.getElementAt(i).equals(selectedVersion)) {
|
||||||
model.setSelectedItem(selectedVersion);
|
model.setSelectedItem(selectedVersion);
|
||||||
@@ -532,7 +532,7 @@ public class MainPagePanel extends GaussionPage {
|
|||||||
t.launcher().launchingStateChanged.register(launchingStateChanged);
|
t.launcher().launchingStateChanged.register(launchingStateChanged);
|
||||||
|
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
DefaultComboBoxModel model = (DefaultComboBoxModel) cboProfiles.getModel();
|
DefaultComboBoxModel<String> model = (DefaultComboBoxModel<String>) cboProfiles.getModel();
|
||||||
for (int i = 0; i < model.getSize(); ++i)
|
for (int i = 0; i < model.getSize(); ++i)
|
||||||
if (model.getElementAt(i).equals(t.getName())) {
|
if (model.getElementAt(i).equals(t.getName())) {
|
||||||
model.setSelectedItem(t.getName());
|
model.setSelectedItem(t.getName());
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ import javax.swing.JComboBox;
|
|||||||
* Make the popup menu of combo boxes wider.
|
* Make the popup menu of combo boxes wider.
|
||||||
* @author huangyuhui
|
* @author huangyuhui
|
||||||
*/
|
*/
|
||||||
public class WideComboBox extends JComboBox {
|
public class WideComboBox<E> extends JComboBox<E> {
|
||||||
|
|
||||||
public WideComboBox() {
|
public WideComboBox() {
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,12 +38,12 @@ public class ModpackInitializationPanel extends javax.swing.JPanel {
|
|||||||
public static final String KEY_INCLUDING_LAUNCHER = "launcher";
|
public static final String KEY_INCLUDING_LAUNCHER = "launcher";
|
||||||
|
|
||||||
private final transient WizardController controller;
|
private final transient WizardController controller;
|
||||||
private final Map wizardData;
|
private final Map<String, Object> wizardData;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates new form ModpackInitializationPanel
|
* Creates new form ModpackInitializationPanel
|
||||||
*/
|
*/
|
||||||
public ModpackInitializationPanel(WizardController controller, Map wizardData, Vector<String> versions, String selVersion) {
|
public ModpackInitializationPanel(WizardController controller, Map<String, Object> wizardData, Vector<String> versions, String selVersion) {
|
||||||
initComponents();
|
initComponents();
|
||||||
|
|
||||||
this.controller = controller;
|
this.controller = controller;
|
||||||
|
|||||||
@@ -1,62 +0,0 @@
|
|||||||
/*
|
|
||||||
* Hello Minecraft! Launcher.
|
|
||||||
* Copyright (C) 2013 huangyuhui <huanghongxun2008@126.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see {http://www.gnu.org/licenses/}.
|
|
||||||
*/
|
|
||||||
package org.jackhuang.hellominecraft.launcher.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<ModpackFolder> folders;
|
|
||||||
ArrayList<ModpackFile> files;
|
|
||||||
|
|
||||||
public static class ModpackFolder {
|
|
||||||
|
|
||||||
String ext, name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static class ModpackFile {
|
|
||||||
|
|
||||||
String hash, loc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -18,8 +18,6 @@
|
|||||||
package org.jackhuang.hellominecraft.launcher.util.upgrade;
|
package org.jackhuang.hellominecraft.launcher.util.upgrade;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.URI;
|
import java.net.URI;
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
@@ -173,8 +171,8 @@ public class AppDataUpgrader extends IUpgrader {
|
|||||||
if (!f.createNewFile())
|
if (!f.createNewFile())
|
||||||
HMCLog.warn("Failed to create new file: " + f);
|
HMCLog.warn("Failed to create new file: " + f);
|
||||||
|
|
||||||
try (JarOutputStream jos = new JarOutputStream(new FileOutputStream(f))) {
|
try (JarOutputStream jos = new JarOutputStream(FileUtils.openOutputStream(f))) {
|
||||||
Pack200.newUnpacker().unpack(new GZIPInputStream(new FileInputStream(tempFile)), jos);
|
Pack200.newUnpacker().unpack(new GZIPInputStream(FileUtils.openInputStream(tempFile)), jos);
|
||||||
}
|
}
|
||||||
json.put("ver", newestVersion);
|
json.put("ver", newestVersion);
|
||||||
json.put("loc", f.getAbsolutePath());
|
json.put("loc", f.getAbsolutePath());
|
||||||
|
|||||||
@@ -14,7 +14,7 @@
|
|||||||
* You should have received a copy of the GNU General Public License
|
* You should have received a copy of the GNU General Public License
|
||||||
* along with this program.
|
* along with this program.
|
||||||
*/
|
*/
|
||||||
package org.jackhuang.hellominecraft.lookandfeel.comp;
|
package org.jackhuang.hellominecraft.lookandfeel;
|
||||||
|
|
||||||
import java.awt.Color;
|
import java.awt.Color;
|
||||||
import org.jackhuang.hellominecraft.util.ui.GraphicsUtils;
|
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"),
|
prelightFg = GraphicsUtils.getWebColorWithAlpha("FFFFFF7F"), prelightBg = GraphicsUtils.getWebColorWithAlpha("FFFFFF7F"),
|
||||||
activeFg = GraphicsUtils.getWebColorWithAlpha("EAEDF83F"), activeBg = GraphicsUtils.getWebColorWithAlpha("EAEDF83F");
|
activeFg = GraphicsUtils.getWebColorWithAlpha("EAEDF83F"), activeBg = GraphicsUtils.getWebColorWithAlpha("EAEDF83F");
|
||||||
public int drawPercent = 0;
|
public int drawPercent = 0;
|
||||||
public long lastDrawTime = 0;
|
|
||||||
public int radix = 0;
|
public int radix = 0;
|
||||||
public boolean notDraw = false;
|
|
||||||
}
|
}
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright 2013 huangyuhui <huanghongxun2008@126.com>
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation; either version 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();
|
|
||||||
}
|
|
||||||
@@ -31,7 +31,7 @@ import javax.swing.plaf.synth.SynthConstants;
|
|||||||
import javax.swing.plaf.synth.SynthContext;
|
import javax.swing.plaf.synth.SynthContext;
|
||||||
import javax.swing.plaf.synth.SynthPainter;
|
import javax.swing.plaf.synth.SynthPainter;
|
||||||
import org.jackhuang.hellominecraft.util.ui.GraphicsUtils;
|
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
|
* ButtonPainter - handles painting Nimbus style buttons with Java2D
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ import java.awt.Component;
|
|||||||
public class ListCellRender extends DefaultListCellRenderer {
|
public class ListCellRender extends DefaultListCellRenderer {
|
||||||
|
|
||||||
@Override
|
@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) {
|
boolean cellHasFocus) {
|
||||||
setOpaque(true);
|
setOpaque(true);
|
||||||
setBackground(Color.magenta);
|
setBackground(Color.magenta);
|
||||||
|
|||||||
@@ -20,10 +20,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.jackhuang.hellominecraft.lookandfeel.ui;
|
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 javax.swing.plaf.metal.MetalScrollButton;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
|
|||||||
@@ -18,8 +18,6 @@
|
|||||||
package org.jackhuang.hellominecraft.svrmgr;
|
package org.jackhuang.hellominecraft.svrmgr;
|
||||||
|
|
||||||
import java.awt.Font;
|
import java.awt.Font;
|
||||||
import java.io.PrintWriter;
|
|
||||||
import java.io.StringWriter;
|
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
import javax.swing.UIManager;
|
import javax.swing.UIManager;
|
||||||
import javax.swing.UnsupportedLookAndFeelException;
|
import javax.swing.UnsupportedLookAndFeelException;
|
||||||
@@ -60,13 +58,7 @@ public class Main {
|
|||||||
new MainWindow().setVisible(true);
|
new MainWindow().setVisible(true);
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
HMCLog.err("There's something wrong when running server holder.", t);
|
HMCLog.err("There's something wrong when running server holder.", t);
|
||||||
|
LogWindow.INSTANCE.showAsCrashWindow(false);
|
||||||
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);
|
|
||||||
|
|
||||||
System.exit(-1);
|
System.exit(-1);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ public class ForgeInstaller {
|
|||||||
File packFile = new File(gameDir, "libraries" + File.separator + library.formatted + ".pack.xz");
|
File packFile = new File(gameDir, "libraries" + File.separator + library.formatted + ".pack.xz");
|
||||||
if (packFile.exists() && packFile.isFile())
|
if (packFile.exists() && packFile.isFile())
|
||||||
try {
|
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)))
|
if (!checksumValid(lib, Arrays.asList(library.checksums)))
|
||||||
badLibs.add(library.name);
|
badLibs.add(library.name);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
@@ -139,7 +139,7 @@ public class ForgeInstaller {
|
|||||||
if (output.exists())
|
if (output.exists())
|
||||||
output.delete();
|
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);
|
String end = new String(decompressed, decompressed.length - 4, 4);
|
||||||
if (!end.equals("SIGN")) {
|
if (!end.equals("SIGN")) {
|
||||||
@@ -165,7 +165,7 @@ public class ForgeInstaller {
|
|||||||
|
|
||||||
private static boolean checksumValid(File libPath, List<String> checksums) {
|
private static boolean checksumValid(File libPath, List<String> checksums) {
|
||||||
try {
|
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)));
|
boolean valid = (checksums == null) || (checksums.isEmpty()) || (checksums.contains(DigestUtils.sha1Hex(fileData)));
|
||||||
if ((!valid) && (libPath.getName().endsWith(".jar")))
|
if ((!valid) && (libPath.getName().endsWith(".jar")))
|
||||||
valid = validateJar(libPath, fileData, checksums);
|
valid = validateJar(libPath, fileData, checksums);
|
||||||
@@ -184,7 +184,7 @@ public class ForgeInstaller {
|
|||||||
try (JarInputStream jar = new JarInputStream(new ByteArrayInputStream(data))) {
|
try (JarInputStream jar = new JarInputStream(new ByteArrayInputStream(data))) {
|
||||||
JarEntry entry = jar.getNextJarEntry();
|
JarEntry entry = jar.getNextJarEntry();
|
||||||
while (entry != null) {
|
while (entry != null) {
|
||||||
byte[] eData = IOUtils.readFully(jar).toByteArray();
|
byte[] eData = IOUtils.toByteArray(jar);
|
||||||
|
|
||||||
if (entry.getName().equals("checksums.sha1"))
|
if (entry.getName().equals("checksums.sha1"))
|
||||||
hashes = new String(eData, Charset.forName("UTF-8")).split("\n");
|
hashes = new String(eData, Charset.forName("UTF-8")).split("\n");
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ import java.io.File;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.OutputStreamWriter;
|
import java.io.OutputStreamWriter;
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Calendar;
|
import java.util.Calendar;
|
||||||
import java.util.Date;
|
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.svrmgr.util.Utilities;
|
||||||
import org.jackhuang.hellominecraft.util.Event;
|
import org.jackhuang.hellominecraft.util.Event;
|
||||||
import org.jackhuang.hellominecraft.util.EventHandler;
|
import org.jackhuang.hellominecraft.util.EventHandler;
|
||||||
|
import org.jackhuang.hellominecraft.util.code.Charsets;
|
||||||
import org.jackhuang.hellominecraft.util.func.Consumer;
|
import org.jackhuang.hellominecraft.util.func.Consumer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -54,7 +54,7 @@ import org.jackhuang.hellominecraft.util.func.Consumer;
|
|||||||
* @author huangyuhui
|
* @author huangyuhui
|
||||||
*/
|
*/
|
||||||
public class Server implements Event<Integer>, MonitorThread.MonitorThreadListener,
|
public class Server implements Event<Integer>, MonitorThread.MonitorThreadListener,
|
||||||
ActionListener {
|
ActionListener {
|
||||||
|
|
||||||
private static Server instance;
|
private static Server instance;
|
||||||
private static boolean disactived = false;
|
private static boolean disactived = false;
|
||||||
@@ -125,17 +125,13 @@ public class Server implements Event<Integer>, MonitorThread.MonitorThreadListen
|
|||||||
pb.directory(new File(SettingsManager.settings.mainjar).getParentFile());
|
pb.directory(new File(SettingsManager.settings.mainjar).getParentFile());
|
||||||
try {
|
try {
|
||||||
disactiveMods(SettingsManager.settings.inactiveExtMods,
|
disactiveMods(SettingsManager.settings.inactiveExtMods,
|
||||||
SettingsManager.settings.inactiveCoreMods,
|
SettingsManager.settings.inactiveCoreMods,
|
||||||
SettingsManager.settings.inactivePlugins);
|
SettingsManager.settings.inactivePlugins);
|
||||||
server = pb.start();
|
server = pb.start();
|
||||||
registerThread(threadA, server.getInputStream());
|
registerThread(threadA, server.getInputStream());
|
||||||
registerThread(threadB, server.getErrorStream());
|
registerThread(threadB, server.getErrorStream());
|
||||||
registerThreadC(server);
|
registerThreadC(server);
|
||||||
try {
|
bw = new BufferedWriter(new OutputStreamWriter(server.getOutputStream(), Charsets.toCharset()));
|
||||||
bw = new BufferedWriter(new OutputStreamWriter(server.getOutputStream(), System.getProperty("sun.jnu.encoding", "utf-8")));
|
|
||||||
} catch (UnsupportedEncodingException ex) {
|
|
||||||
bw = new BufferedWriter(new OutputStreamWriter(server.getOutputStream()));
|
|
||||||
}
|
|
||||||
isRunning = true;
|
isRunning = true;
|
||||||
startedEvent.execute(null);
|
startedEvent.execute(null);
|
||||||
sendStatus("*** 启动服务端中 ***");
|
sendStatus("*** 启动服务端中 ***");
|
||||||
@@ -244,7 +240,7 @@ public class Server implements Event<Integer>, MonitorThread.MonitorThreadListen
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void disactiveMods(ArrayList<String> inactiveExtMods,
|
private static void disactiveMods(ArrayList<String> inactiveExtMods,
|
||||||
ArrayList<String> inactiveCoreMods, ArrayList<String> inactivePlugins) {
|
ArrayList<String> inactiveCoreMods, ArrayList<String> inactivePlugins) {
|
||||||
disactiveModsByType(inactiveExtMods, "mods");
|
disactiveModsByType(inactiveExtMods, "mods");
|
||||||
disactiveModsByType(inactiveCoreMods, "coremods");
|
disactiveModsByType(inactiveCoreMods, "coremods");
|
||||||
disactiveModsByType(inactivePlugins, "plugins");
|
disactiveModsByType(inactivePlugins, "plugins");
|
||||||
@@ -267,7 +263,7 @@ public class Server implements Event<Integer>, MonitorThread.MonitorThreadListen
|
|||||||
String name = file.getName();
|
String name = file.getName();
|
||||||
|
|
||||||
if ((!paramArrayOfString.contains(name))
|
if ((!paramArrayOfString.contains(name))
|
||||||
|| ((!name.toLowerCase().endsWith(".zip")) && (!name.toLowerCase().endsWith(".jar"))))
|
|| ((!name.toLowerCase().endsWith(".zip")) && (!name.toLowerCase().endsWith(".jar"))))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
String newName = name + "X";
|
String newName = name + "X";
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ public abstract class PlayerList<T extends BasePlayer> {
|
|||||||
op = null;
|
op = null;
|
||||||
if (txt.exists())
|
if (txt.exists())
|
||||||
try {
|
try {
|
||||||
initByText(FileUtils.readIgnoreFileNotFound(txt));
|
initByText(FileUtils.read(txt));
|
||||||
if (op != null)
|
if (op != null)
|
||||||
player.addAll(op);
|
player.addAll(op);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
@@ -100,7 +100,7 @@ public abstract class PlayerList<T extends BasePlayer> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void saveAsText(File file) throws IOException {
|
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 {
|
public void saveAsJson(File file) throws IOException {
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import java.text.SimpleDateFormat;
|
|||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import org.jackhuang.hellominecraft.util.logging.HMCLog;
|
import org.jackhuang.hellominecraft.util.logging.HMCLog;
|
||||||
|
import org.jackhuang.hellominecraft.util.system.FileUtils;
|
||||||
import org.jackhuang.hellominecraft.util.system.IOUtils;
|
import org.jackhuang.hellominecraft.util.system.IOUtils;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -58,7 +59,7 @@ public class ServerProperties {
|
|||||||
|
|
||||||
public String getProperty(String key, String defaultValue) {
|
public String getProperty(String key, String defaultValue) {
|
||||||
try {
|
try {
|
||||||
is = new FileInputStream(new File(path, "server.properties"));
|
is = FileUtils.openInputStream(new File(path, "server.properties"));
|
||||||
p = new Properties();
|
p = new Properties();
|
||||||
p.load(is);
|
p.load(is);
|
||||||
return p.getProperty(key, defaultValue);
|
return p.getProperty(key, defaultValue);
|
||||||
@@ -84,12 +85,12 @@ public class ServerProperties {
|
|||||||
|
|
||||||
public void setProperty(String key, String value) {
|
public void setProperty(String key, String value) {
|
||||||
try {
|
try {
|
||||||
is = new FileInputStream(new File(path, "server.properties"));
|
is = FileUtils.openInputStream(new File(path, "server.properties"));
|
||||||
p = new Properties();
|
p = new Properties();
|
||||||
p.load(is);
|
p.load(is);
|
||||||
p.setProperty(key, value);
|
p.setProperty(key, value);
|
||||||
SimpleDateFormat f = new SimpleDateFormat("E M d HH:mm:ss z y");
|
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()));
|
"Minecraft server properties\n" + f.format(new Date()));
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
HMCLog.warn("Failed to set property in server.properties", ex);
|
HMCLog.warn("Failed to set property in server.properties", ex);
|
||||||
|
|||||||
@@ -86,7 +86,7 @@ import org.jackhuang.hellominecraft.svrmgr.util.IPGet;
|
|||||||
import org.jackhuang.hellominecraft.svrmgr.util.Utilities;
|
import org.jackhuang.hellominecraft.svrmgr.util.Utilities;
|
||||||
import org.jackhuang.hellominecraft.util.ui.SwingUtils;
|
import org.jackhuang.hellominecraft.util.ui.SwingUtils;
|
||||||
import org.jackhuang.hellominecraft.svrmgr.util.version.MinecraftRemoteVersion;
|
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.Event;
|
||||||
import org.jackhuang.hellominecraft.util.StrUtils;
|
import org.jackhuang.hellominecraft.util.StrUtils;
|
||||||
|
|
||||||
|
|||||||
@@ -21,8 +21,8 @@ import java.io.BufferedReader;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import org.jackhuang.hellominecraft.util.code.Charsets;
|
||||||
import org.jackhuang.hellominecraft.util.logging.HMCLog;
|
import org.jackhuang.hellominecraft.util.logging.HMCLog;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -42,11 +42,7 @@ public class MonitorThread extends Thread {
|
|||||||
|
|
||||||
public MonitorThread(InputStream is) {
|
public MonitorThread(InputStream is) {
|
||||||
this.listeners = new ArrayList<>(5);
|
this.listeners = new ArrayList<>(5);
|
||||||
try {
|
br = new BufferedReader(new InputStreamReader(is, Charsets.toCharset(System.getProperty("sun.jnu.encoding", "gbk"))));
|
||||||
br = new BufferedReader(new InputStreamReader(is, System.getProperty("sun.jnu.encoding", "gbk")));
|
|
||||||
} catch (UnsupportedEncodingException ex) {
|
|
||||||
br = new BufferedReader(new InputStreamReader(is));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addListener(MonitorThreadListener l) {
|
public void addListener(MonitorThreadListener l) {
|
||||||
|
|||||||
@@ -47,12 +47,12 @@ public abstract class AbstractSwingWorker<T> extends SwingWorker<Void, T> {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AbstractSwingWorker reg(Consumer<T> c) {
|
public AbstractSwingWorker<T> reg(Consumer<T> c) {
|
||||||
processListeners.add(Objects.requireNonNull(c));
|
processListeners.add(Objects.requireNonNull(c));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public AbstractSwingWorker regDone(Runnable c) {
|
public AbstractSwingWorker<T> regDone(Runnable c) {
|
||||||
doneListeners.add(Objects.requireNonNull(c));
|
doneListeners.add(Objects.requireNonNull(c));
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,6 +18,8 @@
|
|||||||
package org.jackhuang.hellominecraft.util;
|
package org.jackhuang.hellominecraft.util;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@@ -57,10 +59,6 @@ public final class ArrayUtils {
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static <T> int lastIndexOf(T[] array, T valueToFind) {
|
|
||||||
return lastIndexOf(array, valueToFind, 2147483647);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static <T> int lastIndexOf(T[] array, T valueToFind, int startIndex) {
|
public static <T> int lastIndexOf(T[] array, T valueToFind, int startIndex) {
|
||||||
if (array == null)
|
if (array == null)
|
||||||
return -1;
|
return -1;
|
||||||
@@ -75,16 +73,16 @@ public final class ArrayUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static <T> ArrayList<T> merge(List<T> a, List<T> b) {
|
public static <T> ArrayList<T> merge(List<T> a, List<T> b) {
|
||||||
ArrayList al = new ArrayList(a.size() + b.size());
|
ArrayList<T> al = new ArrayList<>(a.size() + b.size());
|
||||||
al.addAll(a);
|
al.addAll(a);
|
||||||
al.addAll(b);
|
al.addAll(b);
|
||||||
return al;
|
return al;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List tryGetMapWithList(Map map, String key) {
|
public static <T> List<T> tryGetMapWithList(Map<String, List<T>> map, String key) {
|
||||||
List l = (List) map.get(key);
|
List<T> l = (List<T>) map.get(key);
|
||||||
if (l == null)
|
if (l == null)
|
||||||
map.put(key, l = new ArrayList());
|
map.put(key, l = new ArrayList<>());
|
||||||
return l;
|
return l;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,4 +100,8 @@ public final class ArrayUtils {
|
|||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static <T> boolean hasDuplicateElements(T[] t) {
|
||||||
|
return new HashSet<>(Arrays.asList(t)).size() < t.length;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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_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 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_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";
|
public static final String URL_LITELOADER_LIST = "http://dl.liteloader.com/versions/versions.json";
|
||||||
|
|
||||||
|
|||||||
@@ -49,26 +49,14 @@ public class EventHandler<T> {
|
|||||||
events.add(t);
|
events.add(t);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void unregister(Event<T> t) {
|
|
||||||
events.remove(t);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void unregister(Consumer<T> t) {
|
|
||||||
events.remove(t);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void unregister(Runnable t) {
|
|
||||||
events.remove(t);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean execute(T x) {
|
public boolean execute(T x) {
|
||||||
boolean flag = true;
|
boolean flag = true;
|
||||||
for (Object t : events)
|
for (Object t : events)
|
||||||
if (t instanceof Event) {
|
if (t instanceof Event) {
|
||||||
if (!((Event) t).call(sender, x))
|
if (!((Event<T>) t).call(sender, x))
|
||||||
flag = false;
|
flag = false;
|
||||||
} else if (t instanceof Consumer)
|
} else if (t instanceof Consumer)
|
||||||
((Consumer) t).accept(x);
|
((Consumer<T>) t).accept(x);
|
||||||
else if (t instanceof Runnable)
|
else if (t instanceof Runnable)
|
||||||
((Runnable) t).run();
|
((Runnable) t).run();
|
||||||
return flag;
|
return flag;
|
||||||
|
|||||||
@@ -1,49 +0,0 @@
|
|||||||
/*
|
|
||||||
* Hello Minecraft!.
|
|
||||||
* Copyright (C) 2013 huangyuhui <huanghongxun2008@126.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see {http://www.gnu.org/licenses/}.
|
|
||||||
*/
|
|
||||||
package org.jackhuang.hellominecraft.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<Consumer<String>> printListeners = new ArrayList<>();
|
|
||||||
|
|
||||||
public LauncherPrintStream(OutputStream paramOutputStream) {
|
|
||||||
super(paramOutputStream);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public final void println(String paramString) {
|
|
||||||
super.println(paramString);
|
|
||||||
|
|
||||||
for (Consumer<String> a1 : printListeners)
|
|
||||||
a1.accept(paramString);
|
|
||||||
}
|
|
||||||
|
|
||||||
public final LauncherPrintStream addPrintListener(Consumer<String> paraml) {
|
|
||||||
this.printListeners.add(paraml);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -68,7 +68,7 @@ public class MinecraftVersionRequest implements Serializable {
|
|||||||
|
|
||||||
private static MinecraftVersionRequest getVersionOfOldMinecraft(ZipFile file, ZipEntry entry) throws IOException {
|
private static MinecraftVersionRequest getVersionOfOldMinecraft(ZipFile file, ZipEntry entry) throws IOException {
|
||||||
MinecraftVersionRequest r = new MinecraftVersionRequest();
|
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");
|
byte[] bytes = "Minecraft Minecraft ".getBytes("ASCII");
|
||||||
int j = ArrayUtils.matchArray(tmp, bytes);
|
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 {
|
private static MinecraftVersionRequest getVersionOfNewMinecraft(ZipFile file, ZipEntry entry) throws IOException {
|
||||||
MinecraftVersionRequest r = new MinecraftVersionRequest();
|
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");
|
byte[] str = "-server.txt".getBytes("ASCII");
|
||||||
int j = ArrayUtils.matchArray(tmp, str);
|
int j = ArrayUtils.matchArray(tmp, str);
|
||||||
|
|||||||
@@ -55,10 +55,6 @@ public final class NetUtils {
|
|||||||
return get(url, IOUtils.DEFAULT_CHARSET);
|
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 {
|
public static String get(URL url, Proxy proxy) throws IOException {
|
||||||
return readData(createConnection(url, proxy));
|
return readData(createConnection(url, proxy));
|
||||||
}
|
}
|
||||||
@@ -123,12 +119,4 @@ public final class NetUtils {
|
|||||||
return null;
|
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,6 @@
|
|||||||
*/
|
*/
|
||||||
package org.jackhuang.hellominecraft.util;
|
package org.jackhuang.hellominecraft.util;
|
||||||
|
|
||||||
import java.awt.Dimension;
|
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.io.StringWriter;
|
import java.io.StringWriter;
|
||||||
import java.lang.reflect.Array;
|
import java.lang.reflect.Array;
|
||||||
@@ -72,15 +71,6 @@ public final class StrUtils {
|
|||||||
return base != null && base.startsWith(match);
|
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<String> a, String match) {
|
public static boolean startsWithOne(Collection<String> a, String match) {
|
||||||
if (a == null)
|
if (a == null)
|
||||||
return false;
|
return false;
|
||||||
@@ -97,21 +87,6 @@ public final class StrUtils {
|
|||||||
return false;
|
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<String> base, List<String> match) {
|
|
||||||
for (String a : base)
|
|
||||||
for (String b : match)
|
|
||||||
if (a.toLowerCase().contains(b.toLowerCase()))
|
|
||||||
return true;
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean containsOne(List<String> base, List<String> match, Predicate<String> pred) {
|
public static boolean containsOne(List<String> base, List<String> match, Predicate<String> pred) {
|
||||||
for (String a : base)
|
for (String a : base)
|
||||||
for (String b : match)
|
for (String b : match)
|
||||||
@@ -142,12 +117,12 @@ public final class StrUtils {
|
|||||||
return ver;
|
return ver;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String parseParams(String addBefore, Collection paramArrayOfObject, String paramString) {
|
public static String parseParams(String addBefore, Collection<?> objects, String addAfter) {
|
||||||
return parseParams(addBefore, paramArrayOfObject.toArray(), paramString);
|
return parseParams(addBefore, objects.toArray(), addAfter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String parseParams(String addBefore, Object[] params, String addAfter) {
|
public static String parseParams(String addBefore, Object[] objects, String addAfter) {
|
||||||
return parseParams(t -> addBefore, params, t -> addAfter);
|
return parseParams(t -> addBefore, objects, t -> addAfter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String parseParams(Function<Object, String> beforeFunc, Object[] params, Function<Object, String> afterFunc) {
|
public static String parseParams(Function<Object, String> beforeFunc, Object[] params, Function<Object, String> afterFunc) {
|
||||||
@@ -179,37 +154,19 @@ public final class StrUtils {
|
|||||||
return sb.toString();
|
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) {
|
public static String[] tokenize(String paramString1) {
|
||||||
return tokenize(paramString1, " \t\n\r\f");
|
return tokenize(paramString1, " \t\n\r\f");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String[] tokenize(String paramString1, String paramString2) {
|
public static String[] tokenize(String str, String delim) {
|
||||||
ArrayList localArrayList = new ArrayList();
|
ArrayList<String> al = new ArrayList<>();
|
||||||
StringTokenizer tokenizer = new StringTokenizer(paramString1, paramString2);
|
StringTokenizer tokenizer = new StringTokenizer(str, delim);
|
||||||
while (tokenizer.hasMoreTokens()) {
|
while (tokenizer.hasMoreTokens()) {
|
||||||
paramString2 = tokenizer.nextToken();
|
delim = tokenizer.nextToken();
|
||||||
localArrayList.add(paramString2);
|
al.add(delim);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (String[]) localArrayList.toArray(new String[localArrayList.size()]);
|
return al.toArray(new String[al.size()]);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isBlank(String s) {
|
public static boolean isBlank(String s) {
|
||||||
@@ -226,14 +183,4 @@ public final class StrUtils {
|
|||||||
t.printStackTrace(writer);
|
t.printStackTrace(writer);
|
||||||
return trace.toString();
|
return trace.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Integer> findAllPos(String t, String p) {
|
|
||||||
ArrayList<Integer> ret = new ArrayList<>();
|
|
||||||
int i = 0, index;
|
|
||||||
while ((index = t.indexOf(p, i)) != -1) {
|
|
||||||
ret.add(index);
|
|
||||||
i = index + p.length();
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ public final class UpdateChecker implements IUpdateChecker {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public AbstractSwingWorker<VersionNumber> process(final boolean showMessage) {
|
public AbstractSwingWorker<VersionNumber> process(final boolean showMessage) {
|
||||||
return new AbstractSwingWorker() {
|
return new AbstractSwingWorker<VersionNumber>() {
|
||||||
@Override
|
@Override
|
||||||
protected void work() throws Exception {
|
protected void work() throws Exception {
|
||||||
if (value == null) {
|
if (value == null) {
|
||||||
@@ -74,12 +74,12 @@ public final class UpdateChecker implements IUpdateChecker {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public synchronized AbstractSwingWorker<Map<String, String>> requestDownloadLink() {
|
public synchronized AbstractSwingWorker<Map<String, String>> requestDownloadLink() {
|
||||||
return new AbstractSwingWorker() {
|
return new AbstractSwingWorker<Map<String, String>>() {
|
||||||
@Override
|
@Override
|
||||||
protected void work() throws Exception {
|
protected void work() throws Exception {
|
||||||
if (download_link == null)
|
if (download_link == null)
|
||||||
try {
|
try {
|
||||||
download_link = C.GSON.fromJson(NetUtils.get("http://huangyuhui.duapp.com/update_link.php?type=" + type), Map.class);
|
download_link = C.GSON.<Map<String, String>>fromJson(NetUtils.get("http://huangyuhui.duapp.com/update_link.php?type=" + type), Map.class);
|
||||||
} catch (JsonSyntaxException | IOException e) {
|
} catch (JsonSyntaxException | IOException e) {
|
||||||
HMCLog.warn("Failed to get update link.", e);
|
HMCLog.warn("Failed to get update link.", e);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ public final class Utils {
|
|||||||
*/
|
*/
|
||||||
public static void shutdownForcely(int status) throws Exception {
|
public static void shutdownForcely(int status) throws Exception {
|
||||||
AccessController.doPrivileged((PrivilegedExceptionAction<Void>) () -> {
|
AccessController.doPrivileged((PrivilegedExceptionAction<Void>) () -> {
|
||||||
Class z = Class.forName("java.lang.Shutdown");
|
Class<?> z = Class.forName("java.lang.Shutdown");
|
||||||
Method exit = z.getDeclaredMethod("exit", int.class);
|
Method exit = z.getDeclaredMethod("exit", int.class);
|
||||||
exit.setAccessible(true);
|
exit.setAccessible(true);
|
||||||
exit.invoke(z, status);
|
exit.invoke(z, status);
|
||||||
|
|||||||
@@ -1,102 +0,0 @@
|
|||||||
/*
|
|
||||||
* Hello Minecraft!.
|
|
||||||
* Copyright (C) 2013 huangyuhui <huanghongxun2008@126.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see {http://www.gnu.org/licenses/}.
|
|
||||||
*/
|
|
||||||
package org.jackhuang.hellominecraft.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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -18,13 +18,15 @@
|
|||||||
package org.jackhuang.hellominecraft.util.code;
|
package org.jackhuang.hellominecraft.util.code;
|
||||||
|
|
||||||
import java.nio.charset.Charset;
|
import java.nio.charset.Charset;
|
||||||
|
import java.nio.charset.UnsupportedCharsetException;
|
||||||
|
import org.jackhuang.hellominecraft.util.system.IOUtils;
|
||||||
|
|
||||||
public final class Charsets {
|
public final class Charsets {
|
||||||
|
|
||||||
private 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");
|
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_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 final Charset UTF_8 = Charset.forName("UTF-8");
|
||||||
|
|
||||||
public static Charset toCharset(Charset charset) {
|
public static final Charset DEFAULT_CHARSET = UTF_8;
|
||||||
return charset == null ? Charset.defaultCharset() : charset;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Charset toCharset(String charset) {
|
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));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,11 +70,6 @@ public final class DigestUtils {
|
|||||||
return getDigest("SHA-512");
|
return getDigest("SHA-512");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public static MessageDigest getShaDigest() {
|
|
||||||
return getSha1Digest();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static byte[] md2(byte[] data) {
|
public static byte[] md2(byte[] data) {
|
||||||
return getMd2Digest().digest(data);
|
return getMd2Digest().digest(data);
|
||||||
}
|
}
|
||||||
@@ -127,22 +122,6 @@ public final class DigestUtils {
|
|||||||
return Hex.encodeHexString(md5(data));
|
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) {
|
public static byte[] sha1(byte[] data) {
|
||||||
return getSha1Digest().digest(data);
|
return getSha1Digest().digest(data);
|
||||||
}
|
}
|
||||||
@@ -247,22 +226,6 @@ public final class DigestUtils {
|
|||||||
return Hex.encodeHexString(sha512(data));
|
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) {
|
public static MessageDigest updateDigest(MessageDigest messageDigest, byte[] valueToDigest) {
|
||||||
messageDigest.update(valueToDigest);
|
messageDigest.update(valueToDigest);
|
||||||
return messageDigest;
|
return messageDigest;
|
||||||
|
|||||||
@@ -21,8 +21,6 @@ import java.nio.charset.Charset;
|
|||||||
|
|
||||||
public final class Hex {
|
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_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' };
|
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() {
|
public Hex() {
|
||||||
this.charset = DEFAULT_CHARSET;
|
this(Charsets.DEFAULT_CHARSET);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Hex(Charset charset) {
|
public Hex(Charset charset) {
|
||||||
this.charset = charset;
|
this.charset = charset;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Hex(String charsetName) {
|
|
||||||
this(Charset.forName(charsetName));
|
|
||||||
}
|
|
||||||
|
|
||||||
public byte[] decode(byte[] array) throws Exception {
|
public byte[] decode(byte[] array) throws Exception {
|
||||||
return decodeHex(new String(array, getCharset()).toCharArray());
|
return decodeHex(new String(array, getCharset()).toCharArray());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,26 +0,0 @@
|
|||||||
/*
|
|
||||||
* Hello Minecraft!.
|
|
||||||
* Copyright (C) 2013 huangyuhui <huanghongxun2008@126.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see {http://www.gnu.org/licenses/}.
|
|
||||||
*/
|
|
||||||
package org.jackhuang.hellominecraft.util.func;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @author huangyuhui
|
|
||||||
*/
|
|
||||||
public interface BiConsumer<V, V2> {
|
|
||||||
|
|
||||||
void call(V value, V2 value2);
|
|
||||||
}
|
|
||||||
@@ -1,27 +0,0 @@
|
|||||||
/*
|
|
||||||
* Hello Minecraft!.
|
|
||||||
* Copyright (C) 2013 huangyuhui <huanghongxun2008@126.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see {http://www.gnu.org/licenses/}.
|
|
||||||
*/
|
|
||||||
package org.jackhuang.hellominecraft.util.func;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author huangyuhui
|
|
||||||
*/
|
|
||||||
public interface TriConsumer<V1, V2, V3> {
|
|
||||||
|
|
||||||
void onDone(V1 v1, V2 v2, V3 v3);
|
|
||||||
}
|
|
||||||
@@ -21,7 +21,7 @@ import org.jackhuang.hellominecraft.util.logging.appender.IAppender;
|
|||||||
|
|
||||||
public class AppenderControl {
|
public class AppenderControl {
|
||||||
|
|
||||||
private final ThreadLocal<AppenderControl> recursive = new ThreadLocal();
|
private final ThreadLocal<AppenderControl> recursive = new ThreadLocal<>();
|
||||||
private final IAppender appender;
|
private final IAppender appender;
|
||||||
private final Level level;
|
private final Level level;
|
||||||
private final int intLevel;
|
private final int intLevel;
|
||||||
|
|||||||
@@ -35,18 +35,10 @@ public class HMCLog {
|
|||||||
LOGGER.warn(message);
|
LOGGER.warn(message);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void debug(String message) {
|
|
||||||
LOGGER.debug(message);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void warn(String msg, Throwable t) {
|
public static void warn(String msg, Throwable t) {
|
||||||
LOGGER.warn(msg, t);
|
LOGGER.warn(msg, t);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void debug(String msg, Throwable t) {
|
|
||||||
LOGGER.debug(msg, t);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void err(String msg) {
|
public static void err(String msg) {
|
||||||
LOGGER.error(msg);
|
LOGGER.error(msg);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,6 @@ import java.util.regex.Pattern;
|
|||||||
*/
|
*/
|
||||||
public enum Level {
|
public enum Level {
|
||||||
|
|
||||||
OFF(0, Color.gray),
|
|
||||||
FATAL(1, Color.red),
|
FATAL(1, Color.red),
|
||||||
ERROR(2, Color.red),
|
ERROR(2, Color.red),
|
||||||
WARN(3, Color.orange),
|
WARN(3, Color.orange),
|
||||||
@@ -48,10 +47,6 @@ public enum Level {
|
|||||||
return this.level <= level.level;
|
return this.level <= level.level;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean lessOrEqual(int level) {
|
|
||||||
return this.level <= level;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static final Pattern MINECRAFT_LOGGER = Pattern.compile("\\[(?<timestamp>[0-9:]+)\\] \\[[^/]+/(?<level>[^\\]]+)\\]");
|
public static final Pattern MINECRAFT_LOGGER = Pattern.compile("\\[(?<timestamp>[0-9:]+)\\] \\[[^/]+/(?<level>[^\\]]+)\\]");
|
||||||
public static final String JAVA_SYMBOL = "([a-zA-Z_$][a-zA-Z\\d_$]*\\.)+[a-zA-Z_$][a-zA-Z\\d_$]*";
|
public static final String JAVA_SYMBOL = "([a-zA-Z_$][a-zA-Z\\d_$]*\\.)+[a-zA-Z_$][a-zA-Z\\d_$]*";
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,6 @@ public abstract class AbstractLogger
|
|||||||
|
|
||||||
public static final Class<? extends IMessageFactory> DEFAULT_MESSAGE_FACTORY_CLASS = ParameterizedMessageFactory.class;
|
public static final Class<? extends IMessageFactory> DEFAULT_MESSAGE_FACTORY_CLASS = ParameterizedMessageFactory.class;
|
||||||
|
|
||||||
private static final String FQCN = AbstractLogger.class.getName();
|
|
||||||
private static final String THROWING = "throwing";
|
private static final String THROWING = "throwing";
|
||||||
private static final String CATCHING = "catching";
|
private static final String CATCHING = "catching";
|
||||||
private final String name;
|
private final String name;
|
||||||
@@ -68,50 +67,6 @@ public abstract class AbstractLogger
|
|||||||
catching(Level.ERROR, t);
|
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
|
@Override
|
||||||
public void entry() {
|
public void entry() {
|
||||||
entry(new Object[0]);
|
entry(new Object[0]);
|
||||||
@@ -395,50 +350,6 @@ public abstract class AbstractLogger
|
|||||||
return this.name;
|
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
|
@Override
|
||||||
public void warn(IMessage msg) {
|
public void warn(IMessage msg) {
|
||||||
if (isEnabled(Level.WARN, msg, null))
|
if (isEnabled(Level.WARN, msg, null))
|
||||||
|
|||||||
@@ -30,20 +30,6 @@ public interface ILogger {
|
|||||||
|
|
||||||
void catching(Throwable paramThrowable);
|
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();
|
||||||
|
|
||||||
void entry(Object[] paramArrayOfObject);
|
void entry(Object[] paramArrayOfObject);
|
||||||
@@ -126,20 +112,6 @@ public interface ILogger {
|
|||||||
|
|
||||||
<T extends Throwable> T throwing(T paramT);
|
<T extends Throwable> 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);
|
||||||
|
|
||||||
void warn(IMessage paramIMessage, Throwable paramThrowable);
|
void warn(IMessage paramIMessage, Throwable paramThrowable);
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ import org.jackhuang.hellominecraft.util.logging.message.IMessageFactory;
|
|||||||
public class Logger extends AbstractLogger {
|
public class Logger extends AbstractLogger {
|
||||||
|
|
||||||
protected volatile PrivateConfig config;
|
protected volatile PrivateConfig config;
|
||||||
private final Map<String, AppenderControl> appenders = new ConcurrentHashMap();
|
private final Map<String, AppenderControl> appenders = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
public Logger(String name) {
|
public Logger(String name) {
|
||||||
this(name, null, Level.INFO);
|
this(name, null, Level.INFO);
|
||||||
@@ -109,8 +109,8 @@ public class Logger extends AbstractLogger {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Map<String, IAppender> getAppenders() {
|
public Map<String, IAppender> getAppenders() {
|
||||||
Map map = new HashMap();
|
Map<String, IAppender> map = new HashMap<>();
|
||||||
for (Map.Entry entry : this.appenders.entrySet())
|
for (Map.Entry<String, AppenderControl> entry : this.appenders.entrySet())
|
||||||
map.put(entry.getKey(), ((AppenderControl) entry.getValue()).getAppender());
|
map.put(entry.getKey(), ((AppenderControl) entry.getValue()).getAppender());
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,137 +0,0 @@
|
|||||||
/*
|
|
||||||
* Hello Minecraft!.
|
|
||||||
* Copyright (C) 2013 huangyuhui <huanghongxun2008@126.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see {http://www.gnu.org/licenses/}.
|
|
||||||
*/
|
|
||||||
package org.jackhuang.hellominecraft.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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -22,7 +22,6 @@ import java.util.Arrays;
|
|||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Iterator;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@@ -230,7 +229,7 @@ public class ParameterizedMessage
|
|||||||
if (o instanceof String)
|
if (o instanceof String)
|
||||||
return (String) o;
|
return (String) o;
|
||||||
StringBuilder str = new StringBuilder();
|
StringBuilder str = new StringBuilder();
|
||||||
Set dejaVu = new HashSet();
|
Set<String> dejaVu = new HashSet<>();
|
||||||
recursiveDeepToString(o, str, dejaVu);
|
recursiveDeepToString(o, str, dejaVu);
|
||||||
return str.toString();
|
return str.toString();
|
||||||
}
|
}
|
||||||
@@ -244,7 +243,7 @@ public class ParameterizedMessage
|
|||||||
str.append(o);
|
str.append(o);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Class oClass = o.getClass();
|
Class<?> oClass = o.getClass();
|
||||||
if (oClass.isArray())
|
if (oClass.isArray())
|
||||||
if (oClass == byte[].class)
|
if (oClass == byte[].class)
|
||||||
str.append(Arrays.toString((byte[]) (byte[]) o));
|
str.append(Arrays.toString((byte[]) (byte[]) o));
|
||||||
@@ -265,7 +264,7 @@ public class ParameterizedMessage
|
|||||||
else {
|
else {
|
||||||
String id = identityToString(o);
|
String id = identityToString(o);
|
||||||
if (dejaVu.contains(id))
|
if (dejaVu.contains(id))
|
||||||
str.append("[...").append(id).append("...]");
|
str.append(RECURSION_PREFIX).append(id).append(RECURSION_SUFFIX);
|
||||||
else {
|
else {
|
||||||
dejaVu.add(id);
|
dejaVu.add(id);
|
||||||
Object[] oArray = (Object[]) (Object[]) o;
|
Object[] oArray = (Object[]) (Object[]) o;
|
||||||
@@ -276,7 +275,7 @@ public class ParameterizedMessage
|
|||||||
first = false;
|
first = false;
|
||||||
else
|
else
|
||||||
str.append(", ");
|
str.append(", ");
|
||||||
recursiveDeepToString(current, str, new HashSet(dejaVu));
|
recursiveDeepToString(current, str, new HashSet<>(dejaVu));
|
||||||
}
|
}
|
||||||
str.append("]");
|
str.append("]");
|
||||||
}
|
}
|
||||||
@@ -284,42 +283,40 @@ public class ParameterizedMessage
|
|||||||
else if ((o instanceof Map)) {
|
else if ((o instanceof Map)) {
|
||||||
String id = identityToString(o);
|
String id = identityToString(o);
|
||||||
if (dejaVu.contains(id))
|
if (dejaVu.contains(id))
|
||||||
str.append("[...").append(id).append("...]");
|
str.append(RECURSION_PREFIX).append(id).append(RECURSION_SUFFIX);
|
||||||
else {
|
else {
|
||||||
dejaVu.add(id);
|
dejaVu.add(id);
|
||||||
Map oMap = (Map) o;
|
Map<?, ?> oMap = (Map<?, ?>) o;
|
||||||
str.append("{");
|
str.append("{");
|
||||||
boolean isFirst = true;
|
boolean isFirst = true;
|
||||||
for (Object o1 : oMap.entrySet()) {
|
for (Map.Entry<?, ?> current : oMap.entrySet()) {
|
||||||
Map.Entry current = (Map.Entry) o1;
|
|
||||||
if (isFirst)
|
if (isFirst)
|
||||||
isFirst = false;
|
isFirst = false;
|
||||||
else
|
else
|
||||||
str.append(", ");
|
str.append(", ");
|
||||||
Object key = current.getKey();
|
Object key = current.getKey();
|
||||||
Object value = current.getValue();
|
Object value = current.getValue();
|
||||||
recursiveDeepToString(key, str, new HashSet(dejaVu));
|
recursiveDeepToString(key, str, new HashSet<>(dejaVu));
|
||||||
str.append("=");
|
str.append("=");
|
||||||
recursiveDeepToString(value, str, new HashSet(dejaVu));
|
recursiveDeepToString(value, str, new HashSet<>(dejaVu));
|
||||||
}
|
}
|
||||||
str.append("}");
|
str.append("}");
|
||||||
}
|
}
|
||||||
} else if ((o instanceof Collection)) {
|
} else if ((o instanceof Collection)) {
|
||||||
String id = identityToString(o);
|
String id = identityToString(o);
|
||||||
if (dejaVu.contains(id))
|
if (dejaVu.contains(id))
|
||||||
str.append("[...").append(id).append("...]");
|
str.append(RECURSION_PREFIX).append(id).append(RECURSION_SUFFIX);
|
||||||
else {
|
else {
|
||||||
dejaVu.add(id);
|
dejaVu.add(id);
|
||||||
Collection oCol = (Collection) o;
|
Collection<?> oCol = (Collection<?>) o;
|
||||||
str.append("[");
|
str.append("[");
|
||||||
boolean isFirst = true;
|
boolean isFirst = true;
|
||||||
for (Iterator i$ = oCol.iterator(); i$.hasNext();) {
|
for (Object anOCol : oCol) {
|
||||||
Object anOCol = i$.next();
|
|
||||||
if (isFirst)
|
if (isFirst)
|
||||||
isFirst = false;
|
isFirst = false;
|
||||||
else
|
else
|
||||||
str.append(", ");
|
str.append(", ");
|
||||||
recursiveDeepToString(anOCol, str, new HashSet(dejaVu));
|
recursiveDeepToString(anOCol, str, new HashSet<>(dejaVu));
|
||||||
}
|
}
|
||||||
str.append("]");
|
str.append("]");
|
||||||
}
|
}
|
||||||
@@ -332,17 +329,17 @@ public class ParameterizedMessage
|
|||||||
try {
|
try {
|
||||||
str.append(o.toString());
|
str.append(o.toString());
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
str.append("[!!!");
|
str.append(ERROR_PREFIX);
|
||||||
str.append(identityToString(o));
|
str.append(identityToString(o));
|
||||||
str.append("=>");
|
str.append(ERROR_SEPARATOR);
|
||||||
String msg = t.getMessage();
|
String msg = t.getMessage();
|
||||||
String className = t.getClass().getName();
|
String className = t.getClass().getName();
|
||||||
str.append(className);
|
str.append(className);
|
||||||
if (!className.equals(msg)) {
|
if (!className.equals(msg)) {
|
||||||
str.append(":");
|
str.append(ERROR_MSG_SEPARATOR);
|
||||||
str.append(msg);
|
str.append(msg);
|
||||||
}
|
}
|
||||||
str.append("!!!]");
|
str.append(ERROR_SUFFIX);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -23,8 +23,6 @@ package org.jackhuang.hellominecraft.util.logging.message;
|
|||||||
*/
|
*/
|
||||||
public final class ParameterizedMessageFactory extends AbstractMessageFactory {
|
public final class ParameterizedMessageFactory extends AbstractMessageFactory {
|
||||||
|
|
||||||
public static final ParameterizedMessageFactory INSTANCE = new ParameterizedMessageFactory();
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IMessage newMessage(String message, Object[] params) {
|
public IMessage newMessage(String message, Object[] params) {
|
||||||
return new ParameterizedMessage(message, params);
|
return new ParameterizedMessage(message, params);
|
||||||
|
|||||||
@@ -17,10 +17,7 @@
|
|||||||
*/
|
*/
|
||||||
package org.jackhuang.hellominecraft.util.system;
|
package org.jackhuang.hellominecraft.util.system;
|
||||||
|
|
||||||
import java.io.BufferedInputStream;
|
|
||||||
import java.io.BufferedOutputStream;
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
@@ -55,9 +52,7 @@ public final class CompressingUtils {
|
|||||||
* @throws java.io.IOException 压缩失败或无法读取
|
* @throws java.io.IOException 压缩失败或无法读取
|
||||||
*/
|
*/
|
||||||
public static void zip(File sourceDir, File zipFile, BiFunction<String, Boolean, String> pathNameCallback) throws IOException {
|
public static void zip(File sourceDir, File zipFile, BiFunction<String, Boolean, String> pathNameCallback) throws IOException {
|
||||||
FileOutputStream os = new FileOutputStream(zipFile);
|
try (ZipOutputStream zos = new ZipOutputStream(FileUtils.openOutputStream(zipFile))) {
|
||||||
BufferedOutputStream bos = new BufferedOutputStream(os);
|
|
||||||
try (ZipOutputStream zos = new ZipOutputStream(bos)) {
|
|
||||||
String basePath;
|
String basePath;
|
||||||
if (sourceDir.isDirectory())
|
if (sourceDir.isDirectory())
|
||||||
basePath = sourceDir.getPath();
|
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<String, Boolean, String> 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文件
|
* 将文件压缩成zip文件
|
||||||
*
|
*
|
||||||
@@ -128,18 +99,13 @@ public final class CompressingUtils {
|
|||||||
pathName = pathNameCallback.apply(pathName, true);
|
pathName = pathNameCallback.apply(pathName, true);
|
||||||
if (pathName == null)
|
if (pathName == null)
|
||||||
continue;
|
continue;
|
||||||
try (InputStream is = new FileInputStream(file)) {
|
try (InputStream is = FileUtils.openInputStream(file)) {
|
||||||
BufferedInputStream bis = new BufferedInputStream(is);
|
|
||||||
zos.putNextEntry(new ZipEntry(pathName));
|
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 {
|
public static void unzip(File zipFileName, File extPlace) throws IOException {
|
||||||
unzip(zipFileName, extPlace, null, true);
|
unzip(zipFileName, extPlace, null, true);
|
||||||
}
|
}
|
||||||
@@ -157,7 +123,7 @@ public final class CompressingUtils {
|
|||||||
public static void unzip(File zipFileName, File extPlace, Predicate<String> callback, boolean ignoreExistsFile) throws IOException {
|
public static void unzip(File zipFileName, File extPlace, Predicate<String> callback, boolean ignoreExistsFile) throws IOException {
|
||||||
byte[] buf = new byte[1024];
|
byte[] buf = new byte[1024];
|
||||||
extPlace.mkdirs();
|
extPlace.mkdirs();
|
||||||
try (ZipInputStream zipFile = new ZipInputStream(new FileInputStream(zipFileName))) {
|
try (ZipInputStream zipFile = new ZipInputStream(FileUtils.openInputStream(zipFileName))) {
|
||||||
if (zipFileName.exists()) {
|
if (zipFileName.exists()) {
|
||||||
String strPath, gbkPath, strtemp;
|
String strPath, gbkPath, strtemp;
|
||||||
strPath = extPlace.getAbsolutePath();
|
strPath = extPlace.getAbsolutePath();
|
||||||
@@ -186,7 +152,7 @@ public final class CompressingUtils {
|
|||||||
}
|
}
|
||||||
if (ignoreExistsFile && new File(strtemp).exists())
|
if (ignoreExistsFile && new File(strtemp).exists())
|
||||||
continue;
|
continue;
|
||||||
try (FileOutputStream fos = new FileOutputStream(strtemp)) {
|
try (FileOutputStream fos = FileUtils.openOutputStream(new File(strtemp))) {
|
||||||
IOUtils.copyStream(zipFile, fos, buf);
|
IOUtils.copyStream(zipFile, fos, buf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -152,11 +152,11 @@ public final class FileUtils {
|
|||||||
if (srcDir.getCanonicalPath().equals(destDir.getCanonicalPath()))
|
if (srcDir.getCanonicalPath().equals(destDir.getCanonicalPath()))
|
||||||
throw new IOException("Source '" + srcDir + "' and destination '" + destDir + "' are the same");
|
throw new IOException("Source '" + srcDir + "' and destination '" + destDir + "' are the same");
|
||||||
|
|
||||||
List exclusionList = null;
|
List<String> exclusionList = null;
|
||||||
if (destDir.getCanonicalPath().startsWith(srcDir.getCanonicalPath())) {
|
if (destDir.getCanonicalPath().startsWith(srcDir.getCanonicalPath())) {
|
||||||
File[] srcFiles = filter == null ? srcDir.listFiles() : srcDir.listFiles(filter);
|
File[] srcFiles = filter == null ? srcDir.listFiles() : srcDir.listFiles(filter);
|
||||||
if ((srcFiles != null) && (srcFiles.length > 0)) {
|
if ((srcFiles != null) && (srcFiles.length > 0)) {
|
||||||
exclusionList = new ArrayList(srcFiles.length);
|
exclusionList = new ArrayList<>(srcFiles.length);
|
||||||
for (File srcFile : srcFiles) {
|
for (File srcFile : srcFiles) {
|
||||||
File copiedFile = new File(destDir, srcFile.getName());
|
File copiedFile = new File(destDir, srcFile.getName());
|
||||||
exclusionList.add(copiedFile.getCanonicalPath());
|
exclusionList.add(copiedFile.getCanonicalPath());
|
||||||
@@ -193,12 +193,12 @@ public final class FileUtils {
|
|||||||
|
|
||||||
public static String read(File file)
|
public static String read(File file)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
return IOUtils.toString(IOUtils.openInputStream(file));
|
return IOUtils.toString(openInputStream(file));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String readQuietly(File file) {
|
public static String readQuietly(File file) {
|
||||||
try {
|
try {
|
||||||
return IOUtils.toString(IOUtils.openInputStream(file));
|
return IOUtils.toString(openInputStream(file));
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
HMCLog.err("Failed to read file: " + file, ex);
|
HMCLog.err("Failed to read file: " + file, ex);
|
||||||
return null;
|
return null;
|
||||||
@@ -207,15 +207,7 @@ public final class FileUtils {
|
|||||||
|
|
||||||
public static String read(File file, String charset)
|
public static String read(File file, String charset)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
return IOUtils.toString(IOUtils.openInputStream(file), charset);
|
return IOUtils.toString(openInputStream(file), charset);
|
||||||
}
|
|
||||||
|
|
||||||
public static String readIgnoreFileNotFound(File file) throws IOException {
|
|
||||||
try {
|
|
||||||
return IOUtils.toString(IOUtils.openInputStream(file));
|
|
||||||
} catch (FileNotFoundException ex) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void copyFileQuietly(File srcFile, File destFile) {
|
public static void copyFileQuietly(File srcFile, File destFile) {
|
||||||
@@ -371,7 +363,7 @@ public final class FileUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static File[] searchSuffix(File dir, String suffix) {
|
public static File[] searchSuffix(File dir, String suffix) {
|
||||||
ArrayList<File> al = new ArrayList();
|
ArrayList<File> al = new ArrayList<>();
|
||||||
File[] files = dir.listFiles();
|
File[] files = dir.listFiles();
|
||||||
if (files == null)
|
if (files == null)
|
||||||
return new File[0];
|
return new File[0];
|
||||||
|
|||||||
@@ -21,8 +21,6 @@ import java.io.BufferedReader;
|
|||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.Closeable;
|
import java.io.Closeable;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
@@ -81,16 +79,6 @@ public final class IOUtils {
|
|||||||
return t;
|
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<String> callback) {
|
public static void findAllFile(File f, Consumer<String> callback) {
|
||||||
if (f.isDirectory()) {
|
if (f.isDirectory()) {
|
||||||
File[] f1 = f.listFiles();
|
File[] f1 = f.listFiles();
|
||||||
@@ -110,7 +98,7 @@ public final class IOUtils {
|
|||||||
callback.accept(f1[i].getName());
|
callback.accept(f1[i].getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getRealPath() {
|
public static String getRealPath() {
|
||||||
String realPath = IOUtils.class.getClassLoader().getResource("").getFile();
|
String realPath = IOUtils.class.getClassLoader().getResource("").getFile();
|
||||||
java.io.File file = new java.io.File(realPath);
|
java.io.File file = new java.io.File(realPath);
|
||||||
@@ -171,11 +159,6 @@ public final class IOUtils {
|
|||||||
return mac;
|
return mac;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String extractFileName(String fileName) {
|
|
||||||
File file = new File(fileName);
|
|
||||||
return file.getName();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getJavaDir() {
|
public static String getJavaDir() {
|
||||||
return getJavaDir(System.getProperty("java.home"));
|
return getJavaDir(System.getProperty("java.home"));
|
||||||
}
|
}
|
||||||
@@ -246,18 +229,6 @@ public final class IOUtils {
|
|||||||
output.write(data.getBytes(encoding));
|
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) {
|
public static String tryGetCanonicalFolderPath(File file) {
|
||||||
try {
|
try {
|
||||||
return IOUtils.addSeparator(file.getCanonicalPath());
|
return IOUtils.addSeparator(file.getCanonicalPath());
|
||||||
|
|||||||
@@ -30,10 +30,12 @@ public class JavaProcess {
|
|||||||
private final List<String> commands;
|
private final List<String> commands;
|
||||||
private final Process process;
|
private final Process process;
|
||||||
private final ArrayList<String> stdOutLines = new ArrayList<>();
|
private final ArrayList<String> stdOutLines = new ArrayList<>();
|
||||||
|
private final ProcessManager pm;
|
||||||
|
|
||||||
public JavaProcess(List<String> commands, Process process, ProcessManager pm) {
|
public JavaProcess(List<String> commands, Process process, ProcessManager pm) {
|
||||||
this.commands = commands;
|
this.commands = commands;
|
||||||
this.process = process;
|
this.process = process;
|
||||||
|
this.pm = pm;
|
||||||
if (pm != null)
|
if (pm != null)
|
||||||
pm.registerProcess(this);
|
pm.registerProcess(this);
|
||||||
}
|
}
|
||||||
@@ -53,6 +55,10 @@ public class JavaProcess {
|
|||||||
public String getStartupCommand() {
|
public String getStartupCommand() {
|
||||||
return this.process.toString();
|
return this.process.toString();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public ProcessManager getProcessManager() {
|
||||||
|
return pm;
|
||||||
|
}
|
||||||
|
|
||||||
public ArrayList<String> getStdOutLines() {
|
public ArrayList<String> getStdOutLines() {
|
||||||
return this.stdOutLines;
|
return this.stdOutLines;
|
||||||
|
|||||||
@@ -115,15 +115,6 @@ public final class JdkVersion implements Cloneable {
|
|||||||
*/
|
*/
|
||||||
public static final int JAVA_19 = 6;
|
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) {
|
private static int parseVersion(String javaVersion) {
|
||||||
if (StrUtils.isBlank(javaVersion))
|
if (StrUtils.isBlank(javaVersion))
|
||||||
return UNKOWN;
|
return UNKOWN;
|
||||||
@@ -139,42 +130,6 @@ public final class JdkVersion implements Cloneable {
|
|||||||
return a;
|
return a;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Return the full Java version string, as returned by
|
|
||||||
* <code>System.getProperty("java.version")</code>.
|
|
||||||
*
|
|
||||||
* @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
|
|
||||||
* <code>if (getMajorJavaVersion() < JAVA_14)</code>. @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]*(.*?)\"");
|
private static final Pattern p = Pattern.compile("java version \"[1-9]*\\.[1-9]*\\.[0-9]*(.*?)\"");
|
||||||
|
|
||||||
public static JdkVersion getJavaVersionFromExecutable(String file) throws IOException {
|
public static JdkVersion getJavaVersionFromExecutable(String file) throws IOException {
|
||||||
@@ -197,11 +152,6 @@ public final class JdkVersion implements Cloneable {
|
|||||||
return new JdkVersion(file, ver, platform);
|
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() {
|
public boolean isEarlyAccess() {
|
||||||
return getVersion() != null && getVersion().endsWith("-ea");
|
return getVersion() != null && getVersion().endsWith("-ea");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ package org.jackhuang.hellominecraft.util.system;
|
|||||||
import com.sun.management.OperatingSystemMXBean;
|
import com.sun.management.OperatingSystemMXBean;
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.lang.management.ManagementFactory;
|
import java.lang.management.ManagementFactory;
|
||||||
@@ -92,7 +91,7 @@ public enum OS {
|
|||||||
|
|
||||||
public static long[] memoryInfoForLinux() throws IOException {
|
public static long[] memoryInfoForLinux() throws IOException {
|
||||||
File file = new File("/proc/meminfo");
|
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];
|
long[] result = new long[4];
|
||||||
String str;
|
String str;
|
||||||
StringTokenizer token;
|
StringTokenizer token;
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ import java.util.HashSet;
|
|||||||
*/
|
*/
|
||||||
public class ProcessManager {
|
public class ProcessManager {
|
||||||
|
|
||||||
private static final HashSet<JavaProcess> GAME_PROCESSES = new HashSet();
|
private static final HashSet<JavaProcess> GAME_PROCESSES = new HashSet<>();
|
||||||
|
|
||||||
public void registerProcess(JavaProcess jp) {
|
public void registerProcess(JavaProcess jp) {
|
||||||
GAME_PROCESSES.add(jp);
|
GAME_PROCESSES.add(jp);
|
||||||
|
|||||||
@@ -21,9 +21,9 @@ import java.io.BufferedReader;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
import org.jackhuang.hellominecraft.util.logging.HMCLog;
|
import org.jackhuang.hellominecraft.util.logging.HMCLog;
|
||||||
import org.jackhuang.hellominecraft.util.EventHandler;
|
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;
|
BufferedReader br = null;
|
||||||
try {
|
try {
|
||||||
InputStream in = p.getRawProcess().getInputStream();
|
InputStream in = p.getRawProcess().getInputStream();
|
||||||
try {
|
br = new BufferedReader(new InputStreamReader(in, Charsets.toCharset()));
|
||||||
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));
|
|
||||||
}
|
|
||||||
|
|
||||||
int ch;
|
String line;
|
||||||
String line = "";
|
|
||||||
while (p.isRunning())
|
while (p.isRunning())
|
||||||
while ((line = br.readLine()) != null) {
|
while ((line = br.readLine()) != null) {
|
||||||
printlnEvent.execute(line);
|
printlnEvent.execute(line);
|
||||||
@@ -70,6 +64,8 @@ public class ProcessThread extends Thread {
|
|||||||
System.out.println("Minecraft: " + line);
|
System.out.println("Minecraft: " + line);
|
||||||
p.getStdOutLines().add(line);
|
p.getStdOutLines().add(line);
|
||||||
}
|
}
|
||||||
|
if (p.getProcessManager() != null)
|
||||||
|
p.getProcessManager().onProcessStopped(p);
|
||||||
stopEvent.execute(p);
|
stopEvent.execute(p);
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
HMCLog.err("An error occured when reading process stdout/stderr.", e);
|
HMCLog.err("An error occured when reading process stdout/stderr.", e);
|
||||||
|
|||||||
@@ -1,47 +0,0 @@
|
|||||||
/*
|
|
||||||
* Hello Minecraft!.
|
|
||||||
* Copyright (C) 2013 huangyuhui <huanghongxun2008@126.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see {http://www.gnu.org/licenses/}.
|
|
||||||
*/
|
|
||||||
package org.jackhuang.hellominecraft.util.system;
|
|
||||||
|
|
||||||
import org.jackhuang.hellominecraft.util.func.Consumer;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @author huangyuhui
|
|
||||||
*/
|
|
||||||
public class ThreadExecutor extends Thread {
|
|
||||||
|
|
||||||
public final Consumer<Throwable> c;
|
|
||||||
public final Runnable r;
|
|
||||||
|
|
||||||
public ThreadExecutor(Consumer<Throwable> 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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -22,7 +22,6 @@ import java.io.ByteArrayInputStream;
|
|||||||
import java.io.Closeable;
|
import java.io.Closeable;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
@@ -41,8 +40,7 @@ public class ZipEngine implements Closeable {
|
|||||||
ZipOutputStream zos;
|
ZipOutputStream zos;
|
||||||
|
|
||||||
public ZipEngine(File f) throws IOException {
|
public ZipEngine(File f) throws IOException {
|
||||||
FileOutputStream os = new FileOutputStream(f);
|
zos = new ZipOutputStream(new BufferedOutputStream(FileUtils.openOutputStream(f)));
|
||||||
zos = new ZipOutputStream(new BufferedOutputStream(os));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -51,10 +49,6 @@ public class ZipEngine implements Closeable {
|
|||||||
zos.close();
|
zos.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void putDirectory(String sourceDir) throws IOException {
|
|
||||||
putDirectory(new File(sourceDir), null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void putDirectory(File sourceDir) throws IOException {
|
public void putDirectory(File sourceDir) throws IOException {
|
||||||
putDirectory(sourceDir, null);
|
putDirectory(sourceDir, null);
|
||||||
}
|
}
|
||||||
@@ -117,7 +111,7 @@ public class ZipEngine implements Closeable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void putFile(File file, String pathName) throws IOException {
|
public void putFile(File file, String pathName) throws IOException {
|
||||||
try (FileInputStream fis = new FileInputStream(file)) {
|
try (FileInputStream fis = FileUtils.openInputStream(file)) {
|
||||||
putStream(fis, pathName);
|
putStream(fis, pathName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,46 +0,0 @@
|
|||||||
/*
|
|
||||||
* Hello Minecraft!.
|
|
||||||
* Copyright (C) 2013 huangyuhui <huanghongxun2008@126.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see {http://www.gnu.org/licenses/}.
|
|
||||||
*/
|
|
||||||
package org.jackhuang.hellominecraft.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();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -22,6 +22,7 @@ package org.jackhuang.hellominecraft.util.tasks;
|
|||||||
* @author huangyuhui
|
* @author huangyuhui
|
||||||
*/
|
*/
|
||||||
public class NoShownTaskException extends RuntimeException {
|
public class NoShownTaskException extends RuntimeException {
|
||||||
|
private static final long serialVersionUID = 4893571368018439312L;
|
||||||
|
|
||||||
public NoShownTaskException(String msg) {
|
public NoShownTaskException(String msg) {
|
||||||
super(msg);
|
super(msg);
|
||||||
|
|||||||
@@ -18,7 +18,6 @@
|
|||||||
package org.jackhuang.hellominecraft.util.tasks;
|
package org.jackhuang.hellominecraft.util.tasks;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import org.jackhuang.hellominecraft.util.logging.HMCLog;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
@@ -102,14 +101,10 @@ public abstract class Task {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task after(Task t) {
|
public Task with(Task t) {
|
||||||
return new DoubleTask(this, t);
|
return new DoubleTask(this, t);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Task before(Task t) {
|
|
||||||
return new DoubleTask(t, this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void runWithException() throws Throwable {
|
public void runWithException() throws Throwable {
|
||||||
Collection<Task> c = getDependTasks();
|
Collection<Task> c = getDependTasks();
|
||||||
if (c != null)
|
if (c != null)
|
||||||
@@ -121,14 +116,4 @@ public abstract class Task {
|
|||||||
for (Task t : c)
|
for (Task t : c)
|
||||||
t.runWithException();
|
t.runWithException();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean run() {
|
|
||||||
try {
|
|
||||||
runWithException();
|
|
||||||
return true;
|
|
||||||
} catch (Throwable t) {
|
|
||||||
HMCLog.err("Failed to execute task", t);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ public class TaskList extends Thread {
|
|||||||
|
|
||||||
List<Task> taskQueue = Collections.synchronizedList(new LinkedList<>());
|
List<Task> taskQueue = Collections.synchronizedList(new LinkedList<>());
|
||||||
public final EventHandler<Object> doneEvent = new EventHandler<>(this);
|
public final EventHandler<Object> doneEvent = new EventHandler<>(this);
|
||||||
ArrayList<DoingDoneListener<Task>> taskListener = new ArrayList();
|
ArrayList<DoingDoneListener<Task>> taskListener = new ArrayList<>();
|
||||||
|
|
||||||
int totTask;
|
int totTask;
|
||||||
boolean shouldContinue = true;
|
boolean shouldContinue = true;
|
||||||
@@ -49,11 +49,6 @@ public class TaskList extends Thread {
|
|||||||
setDaemon(true);
|
setDaemon(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void clean() {
|
|
||||||
shouldContinue = true;
|
|
||||||
taskQueue.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addTaskListener(DoingDoneListener<Task> l) {
|
public void addTaskListener(DoingDoneListener<Task> l) {
|
||||||
taskListener.add(l);
|
taskListener.add(l);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ public class TaskWindow extends javax.swing.JDialog
|
|||||||
boolean suc = false;
|
boolean suc = false;
|
||||||
|
|
||||||
private transient TaskList taskList;
|
private transient TaskList taskList;
|
||||||
private final ArrayList<String> failReasons = new ArrayList();
|
private final ArrayList<String> failReasons = new ArrayList<>();
|
||||||
private String stackTrace = null, lastStackTrace = null;
|
private String stackTrace = null, lastStackTrace = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -299,7 +299,6 @@ public class TaskWindow extends javax.swing.JDialog
|
|||||||
public static class TaskWindowFactory {
|
public static class TaskWindowFactory {
|
||||||
|
|
||||||
LinkedList<Task> ll = new LinkedList<>();
|
LinkedList<Task> ll = new LinkedList<>();
|
||||||
boolean flag;
|
|
||||||
|
|
||||||
public TaskWindowFactory append(Task ts) {
|
public TaskWindowFactory append(Task ts) {
|
||||||
if (ts != null)
|
if (ts != null)
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user