12
12
import org .jetbrains .annotations .NotNull ;
13
13
14
14
import java .io .*;
15
- import java .math .BigInteger ;
16
15
import java .net .HttpURLConnection ;
17
16
import java .net .URL ;
18
17
import java .nio .charset .StandardCharsets ;
19
18
import java .nio .file .Files ;
20
19
import java .nio .file .StandardCopyOption ;
21
- import java .security .MessageDigest ;
22
- import java .security .NoSuchAlgorithmException ;
23
20
import java .util .Arrays ;
24
21
import java .util .logging .Logger ;
25
22
26
23
public final class Utils {
27
24
static {
25
+ Logger logger = Logger .getLogger ("MiraiMC Preload Checker" );
28
26
// 此处放置插件自检代码
29
27
if (!Boolean .getBoolean ("MiraiMC.StandWithNpp" ) && System .getProperty ("os.name" ).toLowerCase ().contains ("windows" ) && findProcess ("notepad++.exe" )) {
30
28
Arrays .asList ("========================================" ,
@@ -33,26 +31,20 @@ public final class Utils {
33
31
"Sublime: https://www.sublimetext.com/" ,
34
32
"不要向MiraiMC作者寻求任何帮助。" ,
35
33
"进程将在20秒后继续运行" ,
36
- "========================================" ).forEach (s -> Logger . getLogger ( "MiraiMC Preload Checker" ). severe ( s ) );
34
+ "========================================" ).forEach (logger :: severe );
37
35
try {
38
36
Thread .sleep (20000 );
39
37
} catch (InterruptedException ignored ) {}
40
38
}
41
39
if (Boolean .getBoolean ("MiraiMC.StandWithNpp" )){
42
- Logger . getLogger ( "MiraiMC Preload Checker" ) .severe ("不要向MiraiMC作者寻求任何帮助。" );
40
+ logger .severe ("不要向MiraiMC作者寻求任何帮助。" );
43
41
}
44
42
45
43
if (findClass ("cpw.mods.modlauncher.Launcher" ) || findClass ("net.minecraftforge.server.console.TerminalHandler" )) { // 抛弃Forge用户,别问为什么
46
- Logger . getLogger ( "MiraiMC Preload Checker" ) .severe ("任何Forge服务端均不受MiraiMC支持,请尽量更换其他服务端使用!" );
47
- Logger . getLogger ( "MiraiMC Preload Checker" ) .severe ("作者不会处理任何使用了Forge服务端导致的问题。" );
48
- Logger . getLogger ( "MiraiMC Preload Checker" ) .severe ("兼容性报告: https://docs.miraimc.dreamvoid.me/troubleshoot/compatibility-report" );
44
+ logger .severe ("任何Forge服务端均不受MiraiMC支持,请尽量更换其他服务端使用!" );
45
+ logger .severe ("作者不会处理任何使用了Forge服务端导致的问题。" );
46
+ logger .severe ("兼容性报告: https://docs.miraimc.dreamvoid.me/troubleshoot/compatibility-report" );
49
47
}
50
-
51
- if (Boolean .getBoolean ("MiraiMC.DeveloperMode" )){
52
- developerMode = true ;
53
- Logger .getLogger ("MiraiMC Preload Checker" ).warning ("MiraiMC 开发者模式已启用!" );
54
- Logger .getLogger ("MiraiMC Preload Checker" ).warning ("除非你知道你正在做什么,否则请不要启用开发者模式。" );
55
- } else developerMode = false ;
56
48
}
57
49
58
50
private static boolean findProcess (String processName ) {
@@ -89,7 +81,6 @@ public static boolean findClass(String className){
89
81
90
82
private static Logger logger ;
91
83
private static ClassLoader classLoader ;
92
- private static final boolean developerMode ;
93
84
94
85
public static void setLogger (Logger logger ){
95
86
Utils .logger = logger ;
@@ -107,10 +98,6 @@ public static ClassLoader getClassLoader(){
107
98
return classLoader ;
108
99
}
109
100
110
- public static boolean isDeveloperMode (){
111
- return developerMode ;
112
- }
113
-
114
101
/**
115
102
* Http 相关实用类
116
103
*/
@@ -193,52 +180,29 @@ public static void download(String url, File saveFile){
193
180
logger .severe (String .format ("Failed to download %s, reason: %s" , url , e ));
194
181
}
195
182
}
196
-
197
- /**
198
- * 测试链接可用性
199
- * @param url 链接
200
- * @return 服务器是否返回 HTTP 200 OK 状态码
201
- * @throws IOException 连接出现任何异常时抛出
202
- */
203
- public static boolean test (String url ) throws IOException {
204
- URL obj = new URL (url .replace (" " , "%20" ));
205
- StringBuilder sb = new StringBuilder ();
206
- HttpURLConnection httpUrlConn = (HttpURLConnection ) obj .openConnection ();
207
-
208
- httpUrlConn .setDoInput (true );
209
- httpUrlConn .setRequestMethod ("GET" );
210
- httpUrlConn .setRequestProperty ("User-Agent" , "Mozilla/5.0 DreamVoid MiraiMC" );
211
- httpUrlConn .setConnectTimeout (5000 );
212
- httpUrlConn .setReadTimeout (10000 );
213
-
214
- return httpUrlConn .getResponseCode () == HttpURLConnection .HTTP_OK ;
215
- }
216
183
}
217
184
218
185
@ NotNull
219
186
public static File getMiraiDir (){
220
187
return PluginConfig .General .MiraiWorkingDir .equals ("default" ) ? new File (PluginConfig .PluginDir ,"MiraiBot" ) : new File (PluginConfig .General .MiraiWorkingDir );
221
188
}
222
189
223
- public static String getFileSha1 (File file ){
224
- try (FileInputStream fis = new FileInputStream (file )){
225
- byte [] buffer = new byte [1024 ];
226
- MessageDigest digest = MessageDigest .getInstance ("SHA" );
227
- int numRead ;
190
+ public static void resolveException (Exception exception , Logger logger , String reason ) {
191
+ if (!reason .isEmpty ()) logger .severe (reason );
192
+ logger .severe ("如果你确信这是 MiraiMC 的错误,前往 GitHub 报告 issue 并附上完整服务器日志。" );
193
+ logger .severe (exception .toString ());
228
194
229
- do {
230
- numRead = fis .read (buffer );
231
- if (numRead > 0 ) {
232
- digest .update (buffer , 0 , numRead );
233
- }
234
- } while (numRead != -1 );
235
-
236
- fis .close ();
237
- byte [] bytes = digest .digest ();
238
- BigInteger b = new BigInteger (1 , bytes );
239
- return String .format ("%0" + (bytes .length << 1 ) + "x" , b );
240
- } catch (NoSuchAlgorithmException | IOException e ) {
241
- return null ;
195
+ Throwable t = exception ;
196
+ while (t != null ){
197
+ if (t != exception ){
198
+ logger .severe ("Caused by: " + t );
199
+ }
200
+
201
+ for (StackTraceElement element : t .getStackTrace ()){
202
+ getLogger ().severe (String .format ("\t at %s.%s(%s:%d)" , element .getClassName (), element .getMethodName (), element .getFileName (), element .getLineNumber ()));
203
+ }
204
+
205
+ t = t .getCause ();
242
206
}
243
207
}
244
208
}
0 commit comments