mirror of
https://e.coding.net/circlecloud/YumCore.git
synced 2024-11-22 01:48:50 +00:00
fix: 修复开发版本无法自动更新的问题 添加单元测试
Signed-off-by: 502647092 <admin@yumc.pw>
This commit is contained in:
parent
e578f33608
commit
d767dba2e6
15
pom.xml
15
pom.xml
@ -4,7 +4,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>pw.yumc</groupId>
|
<groupId>pw.yumc</groupId>
|
||||||
<artifactId>YumCore</artifactId>
|
<artifactId>YumCore</artifactId>
|
||||||
<version>1.8.3</version>
|
<version>1.8.5</version>
|
||||||
<build>
|
<build>
|
||||||
<finalName>${project.artifactId}</finalName>
|
<finalName>${project.artifactId}</finalName>
|
||||||
<plugins>
|
<plugins>
|
||||||
@ -66,7 +66,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.spigotmc</groupId>
|
<groupId>org.spigotmc</groupId>
|
||||||
<artifactId>spigot-api</artifactId>
|
<artifactId>spigot-api</artifactId>
|
||||||
<version>1.11.2-R0.1-SNAPSHOT</version>
|
<version>[1.12.1-R0.1-SNAPSHOT,)</version>
|
||||||
<exclusions>
|
<exclusions>
|
||||||
<exclusion>
|
<exclusion>
|
||||||
<artifactId>gson</artifactId>
|
<artifactId>gson</artifactId>
|
||||||
@ -81,7 +81,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.md-5</groupId>
|
<groupId>net.md-5</groupId>
|
||||||
<artifactId>bungeecord-api</artifactId>
|
<artifactId>bungeecord-api</artifactId>
|
||||||
<version>1.11-SNAPSHOT</version>
|
<version>[1.12-SNAPSHOT,)</version>
|
||||||
<exclusions>
|
<exclusions>
|
||||||
<exclusion>
|
<exclusion>
|
||||||
<artifactId>snakeyaml</artifactId>
|
<artifactId>snakeyaml</artifactId>
|
||||||
@ -92,7 +92,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>me.clip</groupId>
|
<groupId>me.clip</groupId>
|
||||||
<artifactId>placeholderapi</artifactId>
|
<artifactId>placeholderapi</artifactId>
|
||||||
<version>2.5.1</version>
|
<version>[2.5.1,)</version>
|
||||||
<exclusions>
|
<exclusions>
|
||||||
<exclusion>
|
<exclusion>
|
||||||
<artifactId>spigot-api</artifactId>
|
<artifactId>spigot-api</artifactId>
|
||||||
@ -108,7 +108,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.milkbowl.vault</groupId>
|
<groupId>net.milkbowl.vault</groupId>
|
||||||
<artifactId>Vault</artifactId>
|
<artifactId>Vault</artifactId>
|
||||||
<version>1.5.6</version>
|
<version>[1.5.6,)</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>javax.mail</groupId>
|
<groupId>javax.mail</groupId>
|
||||||
@ -130,6 +130,11 @@
|
|||||||
<artifactId>worldedit-bukkit</artifactId>
|
<artifactId>worldedit-bukkit</artifactId>
|
||||||
<version>6.1.5</version>
|
<version>6.1.5</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.puharesource.mc</groupId>
|
||||||
|
<artifactId>TitleManager</artifactId>
|
||||||
|
<version>2.0.0</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.alibaba</groupId>
|
<groupId>com.alibaba</groupId>
|
||||||
<artifactId>fastjson</artifactId>
|
<artifactId>fastjson</artifactId>
|
||||||
|
@ -2,7 +2,7 @@ package pw.yumc.YumCore.bukkit;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.Optional;
|
||||||
import java.util.logging.Handler;
|
import java.util.logging.Handler;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
@ -27,6 +27,7 @@ public class Log {
|
|||||||
private static Logger logger;
|
private static Logger logger;
|
||||||
private static CommandSender console;
|
private static CommandSender console;
|
||||||
private static String prefix;
|
private static String prefix;
|
||||||
|
|
||||||
static {
|
static {
|
||||||
try {
|
try {
|
||||||
debug = globalDebug || P.getDescription().getVersion().contains("DEV");
|
debug = globalDebug || P.getDescription().getVersion().contains("DEV");
|
||||||
@ -36,7 +37,6 @@ public class Log {
|
|||||||
} catch (Throwable ex) {
|
} catch (Throwable ex) {
|
||||||
logger = Logger.getLogger("YumCore");
|
logger = Logger.getLogger("YumCore");
|
||||||
debug = true;
|
debug = true;
|
||||||
d(ex);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -51,10 +51,10 @@ public class Log {
|
|||||||
* that essentially act as default handlers for all loggers.
|
* that essentially act as default handlers for all loggers.
|
||||||
*
|
*
|
||||||
* @param handler
|
* @param handler
|
||||||
* a logging Handler
|
* a logging Handler
|
||||||
* @throws SecurityException
|
* @throws SecurityException
|
||||||
* if a security manager exists and if
|
* if a security manager exists and if
|
||||||
* the caller does not have LoggingPermission("control").
|
* the caller does not have LoggingPermission("control").
|
||||||
*/
|
*/
|
||||||
public static void addHandler(Handler handler) throws SecurityException {
|
public static void addHandler(Handler handler) throws SecurityException {
|
||||||
logger.addHandler(handler);
|
logger.addHandler(handler);
|
||||||
@ -64,7 +64,7 @@ public class Log {
|
|||||||
* Sends console a message
|
* Sends console a message
|
||||||
*
|
*
|
||||||
* @param message
|
* @param message
|
||||||
* Message to be displayed
|
* Message to be displayed
|
||||||
*/
|
*/
|
||||||
public static void console(String message) {
|
public static void console(String message) {
|
||||||
console.sendMessage(prefix + message);
|
console.sendMessage(prefix + message);
|
||||||
@ -74,9 +74,9 @@ public class Log {
|
|||||||
* Sends console a message
|
* Sends console a message
|
||||||
*
|
*
|
||||||
* @param message
|
* @param message
|
||||||
* 消息
|
* 消息
|
||||||
* @param object
|
* @param object
|
||||||
* 格式化参数
|
* 格式化参数
|
||||||
*/
|
*/
|
||||||
public static void console(String message, Object... object) {
|
public static void console(String message, Object... object) {
|
||||||
console.sendMessage(prefix + String.format(message, object));
|
console.sendMessage(prefix + String.format(message, object));
|
||||||
@ -86,7 +86,7 @@ public class Log {
|
|||||||
* Sends console a message
|
* Sends console a message
|
||||||
*
|
*
|
||||||
* @param msg
|
* @param msg
|
||||||
* Message to be displayed
|
* Message to be displayed
|
||||||
*/
|
*/
|
||||||
public static void console(String[] msg) {
|
public static void console(String[] msg) {
|
||||||
for (String str : msg) {
|
for (String str : msg) {
|
||||||
@ -98,7 +98,7 @@ public class Log {
|
|||||||
* 调试消息
|
* 调试消息
|
||||||
*
|
*
|
||||||
* @param msg
|
* @param msg
|
||||||
* 消息
|
* 消息
|
||||||
*/
|
*/
|
||||||
public static void d(String msg) {
|
public static void d(String msg) {
|
||||||
if (debug) {
|
if (debug) {
|
||||||
@ -110,9 +110,9 @@ public class Log {
|
|||||||
* 调试消息
|
* 调试消息
|
||||||
*
|
*
|
||||||
* @param msg
|
* @param msg
|
||||||
* 消息
|
* 消息
|
||||||
* @param object
|
* @param object
|
||||||
* 参数
|
* 参数
|
||||||
*/
|
*/
|
||||||
public static void d(String msg, Object... object) {
|
public static void d(String msg, Object... object) {
|
||||||
if (debug) {
|
if (debug) {
|
||||||
@ -124,7 +124,7 @@ public class Log {
|
|||||||
* 调试消息
|
* 调试消息
|
||||||
*
|
*
|
||||||
* @param e
|
* @param e
|
||||||
* 异常
|
* 异常
|
||||||
*/
|
*/
|
||||||
public static void d(Throwable e) {
|
public static void d(Throwable e) {
|
||||||
if (debug) {
|
if (debug) {
|
||||||
@ -136,9 +136,9 @@ public class Log {
|
|||||||
* 调试消息
|
* 调试消息
|
||||||
*
|
*
|
||||||
* @param msg
|
* @param msg
|
||||||
* 消息
|
* 消息
|
||||||
* @param e
|
* @param e
|
||||||
* 异常
|
* 异常
|
||||||
*/
|
*/
|
||||||
public static void d(String msg, Throwable e) {
|
public static void d(String msg, Throwable e) {
|
||||||
if (debug) {
|
if (debug) {
|
||||||
@ -151,7 +151,7 @@ public class Log {
|
|||||||
* 完全调试消息
|
* 完全调试消息
|
||||||
*
|
*
|
||||||
* @param msg
|
* @param msg
|
||||||
* 消息
|
* 消息
|
||||||
*/
|
*/
|
||||||
public static void fd(String msg) {
|
public static void fd(String msg) {
|
||||||
if (fullDebug) {
|
if (fullDebug) {
|
||||||
@ -163,9 +163,9 @@ public class Log {
|
|||||||
* 完全调试消息
|
* 完全调试消息
|
||||||
*
|
*
|
||||||
* @param msg
|
* @param msg
|
||||||
* 消息
|
* 消息
|
||||||
* @param object
|
* @param object
|
||||||
* 参数
|
* 参数
|
||||||
*/
|
*/
|
||||||
public static void fd(String msg, Object... object) {
|
public static void fd(String msg, Object... object) {
|
||||||
if (fullDebug) {
|
if (fullDebug) {
|
||||||
@ -177,7 +177,7 @@ public class Log {
|
|||||||
* 完全调试消息
|
* 完全调试消息
|
||||||
*
|
*
|
||||||
* @param e
|
* @param e
|
||||||
* 异常
|
* 异常
|
||||||
*/
|
*/
|
||||||
public static void fd(Throwable e) {
|
public static void fd(Throwable e) {
|
||||||
if (fullDebug) {
|
if (fullDebug) {
|
||||||
@ -189,9 +189,9 @@ public class Log {
|
|||||||
* 完全调试消息
|
* 完全调试消息
|
||||||
*
|
*
|
||||||
* @param msg
|
* @param msg
|
||||||
* 消息
|
* 消息
|
||||||
* @param e
|
* @param e
|
||||||
* 异常
|
* 异常
|
||||||
*/
|
*/
|
||||||
public static void fd(String msg, Throwable e) {
|
public static void fd(String msg, Throwable e) {
|
||||||
if (fullDebug) {
|
if (fullDebug) {
|
||||||
@ -224,9 +224,9 @@ public class Log {
|
|||||||
* <p>
|
* <p>
|
||||||
*
|
*
|
||||||
* @param level
|
* @param level
|
||||||
* One of the message level identifiers, e.g., SEVERE
|
* One of the message level identifiers, e.g., SEVERE
|
||||||
* @param msg
|
* @param msg
|
||||||
* The string message (or a key in the message catalog)
|
* The string message (or a key in the message catalog)
|
||||||
*/
|
*/
|
||||||
public static void log(Level level, String msg) {
|
public static void log(Level level, String msg) {
|
||||||
logger.log(level, msg);
|
logger.log(level, msg);
|
||||||
@ -241,11 +241,11 @@ public class Log {
|
|||||||
* <p>
|
* <p>
|
||||||
*
|
*
|
||||||
* @param level
|
* @param level
|
||||||
* One of the message level identifiers, e.g., SEVERE
|
* One of the message level identifiers, e.g., SEVERE
|
||||||
* @param msg
|
* @param msg
|
||||||
* The string message (or a key in the message catalog)
|
* The string message (or a key in the message catalog)
|
||||||
* @param param1
|
* @param param1
|
||||||
* parameter to the message
|
* parameter to the message
|
||||||
*/
|
*/
|
||||||
public static void log(Level level, String msg, Object param1) {
|
public static void log(Level level, String msg, Object param1) {
|
||||||
logger.log(level, msg, param1);
|
logger.log(level, msg, param1);
|
||||||
@ -260,11 +260,11 @@ public class Log {
|
|||||||
* <p>
|
* <p>
|
||||||
*
|
*
|
||||||
* @param level
|
* @param level
|
||||||
* One of the message level identifiers, e.g., SEVERE
|
* One of the message level identifiers, e.g., SEVERE
|
||||||
* @param msg
|
* @param msg
|
||||||
* The string message (or a key in the message catalog)
|
* The string message (or a key in the message catalog)
|
||||||
* @param params
|
* @param params
|
||||||
* array of parameters to the message
|
* array of parameters to the message
|
||||||
*/
|
*/
|
||||||
public static void log(Level level, String msg, Object[] params) {
|
public static void log(Level level, String msg, Object[] params) {
|
||||||
logger.log(level, msg, params);
|
logger.log(level, msg, params);
|
||||||
@ -284,11 +284,11 @@ public class Log {
|
|||||||
* <p>
|
* <p>
|
||||||
*
|
*
|
||||||
* @param level
|
* @param level
|
||||||
* One of the message level identifiers, e.g., SEVERE
|
* One of the message level identifiers, e.g., SEVERE
|
||||||
* @param msg
|
* @param msg
|
||||||
* The string message (or a key in the message catalog)
|
* The string message (or a key in the message catalog)
|
||||||
* @param thrown
|
* @param thrown
|
||||||
* Throwable associated with log message.
|
* Throwable associated with log message.
|
||||||
*/
|
*/
|
||||||
public static void log(Level level, String msg, Throwable thrown) {
|
public static void log(Level level, String msg, Throwable thrown) {
|
||||||
logger.log(level, msg, thrown);
|
logger.log(level, msg, thrown);
|
||||||
@ -296,7 +296,7 @@ public class Log {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param prefix
|
* @param prefix
|
||||||
* 插件前缀
|
* 插件前缀
|
||||||
*/
|
*/
|
||||||
public static void setPrefix(String prefix) {
|
public static void setPrefix(String prefix) {
|
||||||
Log.prefix = ChatColor.translateAlternateColorCodes('&', prefix);
|
Log.prefix = ChatColor.translateAlternateColorCodes('&', prefix);
|
||||||
@ -309,7 +309,7 @@ public class Log {
|
|||||||
* given message is forwarded to all the registered output Handler objects.
|
* given message is forwarded to all the registered output Handler objects.
|
||||||
*
|
*
|
||||||
* @param msg
|
* @param msg
|
||||||
* The string message (or a key in the message catalog)
|
* The string message (or a key in the message catalog)
|
||||||
*/
|
*/
|
||||||
public static void severe(String msg) {
|
public static void severe(String msg) {
|
||||||
logger.severe(msg);
|
logger.severe(msg);
|
||||||
@ -319,9 +319,9 @@ public class Log {
|
|||||||
* Sends this sender a message
|
* Sends this sender a message
|
||||||
*
|
*
|
||||||
* @param sender
|
* @param sender
|
||||||
* 命令发送者
|
* 命令发送者
|
||||||
* @param msg
|
* @param msg
|
||||||
* 消息
|
* 消息
|
||||||
*/
|
*/
|
||||||
public static void sender(CommandSender sender, String msg) {
|
public static void sender(CommandSender sender, String msg) {
|
||||||
sender.sendMessage(prefix + msg);
|
sender.sendMessage(prefix + msg);
|
||||||
@ -331,11 +331,11 @@ public class Log {
|
|||||||
* Sends this sender a message
|
* Sends this sender a message
|
||||||
*
|
*
|
||||||
* @param sender
|
* @param sender
|
||||||
* 命令发送者
|
* 命令发送者
|
||||||
* @param msg
|
* @param msg
|
||||||
* 消息
|
* 消息
|
||||||
* @param objs
|
* @param objs
|
||||||
* 参数
|
* 参数
|
||||||
*/
|
*/
|
||||||
public static void sender(CommandSender sender, String msg, Object... objs) {
|
public static void sender(CommandSender sender, String msg, Object... objs) {
|
||||||
sender.sendMessage(prefix + String.format(msg, objs));
|
sender.sendMessage(prefix + String.format(msg, objs));
|
||||||
@ -345,9 +345,9 @@ public class Log {
|
|||||||
* Sends this sender a message
|
* Sends this sender a message
|
||||||
*
|
*
|
||||||
* @param sender
|
* @param sender
|
||||||
* 命令发送者
|
* 命令发送者
|
||||||
* @param msg
|
* @param msg
|
||||||
* 消息
|
* 消息
|
||||||
*/
|
*/
|
||||||
public static void sender(CommandSender sender, String[] msg) {
|
public static void sender(CommandSender sender, String[] msg) {
|
||||||
Arrays.stream(msg).forEach(str -> sender(sender, str));
|
Arrays.stream(msg).forEach(str -> sender(sender, str));
|
||||||
@ -357,7 +357,7 @@ public class Log {
|
|||||||
* 格式化警告消息
|
* 格式化警告消息
|
||||||
*
|
*
|
||||||
* @param string
|
* @param string
|
||||||
* 消息
|
* 消息
|
||||||
*/
|
*/
|
||||||
public static void w(String string) {
|
public static void w(String string) {
|
||||||
logger.warning(string);
|
logger.warning(string);
|
||||||
@ -367,14 +367,21 @@ public class Log {
|
|||||||
* 格式化警告消息
|
* 格式化警告消息
|
||||||
*
|
*
|
||||||
* @param string
|
* @param string
|
||||||
* 消息
|
* 消息
|
||||||
* @param objects
|
* @param objects
|
||||||
* 参数
|
* 参数
|
||||||
*/
|
*/
|
||||||
public static void w(String string, Object... objects) {
|
public static void w(String string, Object... objects) {
|
||||||
w(String.format(string, objects));
|
w(String.format(string, objects));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return 是否为调试模式
|
||||||
|
*/
|
||||||
|
public static boolean isDebug() {
|
||||||
|
return debug;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return 是否为全局调试模式
|
* @return 是否为全局调试模式
|
||||||
*/
|
*/
|
||||||
@ -382,23 +389,20 @@ public class Log {
|
|||||||
return globalDebug;
|
return globalDebug;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String osn(List<?> classes) {
|
/**
|
||||||
|
* 打印对象简易名称
|
||||||
|
*
|
||||||
|
* @param objects
|
||||||
|
* 对象
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static String getSimpleNames(Object... objects) {
|
||||||
StringBuilder str = new StringBuilder("[");
|
StringBuilder str = new StringBuilder("[");
|
||||||
classes.forEach(c -> str.append(c == null ? null : c.getClass().getSimpleName()).append(", "));
|
Arrays.stream(objects)
|
||||||
return classes.isEmpty() ? "[]" : str.substring(0, str.length() - 2) + "]";
|
.forEach(o -> str.append(Optional.ofNullable(o)
|
||||||
}
|
.map(obj -> obj instanceof Class ? (Class) obj : obj.getClass())
|
||||||
|
.map(Class::getSimpleName)
|
||||||
public static String osn(Object... classes) {
|
.orElse(null)).append(", "));
|
||||||
return osn(Arrays.asList(classes));
|
return objects.length == 0 ? "[]" : str.substring(0, str.length() - 2) + "]";
|
||||||
}
|
|
||||||
|
|
||||||
public static String csn(List<Class> classes) {
|
|
||||||
StringBuilder str = new StringBuilder("[");
|
|
||||||
classes.forEach(c -> str.append(c == null ? null : c.getSimpleName()).append(", "));
|
|
||||||
return classes.isEmpty() ? "[]" : str.substring(0, str.length() - 2) + "]";
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String csn(Class[] classes) {
|
|
||||||
return csn(Arrays.asList(classes));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -7,18 +7,21 @@ import java.lang.reflect.InvocationTargetException;
|
|||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLDecoder;
|
import java.net.URLDecoder;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.jar.JarFile;
|
import java.util.jar.JarFile;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.PluginCommand;
|
import org.bukkit.command.PluginCommand;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.plugin.PluginDescriptionFile;
|
import org.bukkit.plugin.PluginDescriptionFile;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 插件Instance获取类
|
* 插件Instance获取类
|
||||||
*
|
*
|
||||||
* @since 2016年7月23日 上午9:09:57
|
|
||||||
* @author 喵♂呜
|
* @author 喵♂呜
|
||||||
|
* @since 2016年7月23日 上午9:09:57
|
||||||
*/
|
*/
|
||||||
public class P {
|
public class P {
|
||||||
/**
|
/**
|
||||||
@ -48,8 +51,7 @@ public class P {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param name
|
* @param name
|
||||||
* 命令名称
|
* 命令名称
|
||||||
*
|
|
||||||
* @return 插件命令
|
* @return 插件命令
|
||||||
*/
|
*/
|
||||||
public static PluginCommand getCommand(String name) {
|
public static PluginCommand getCommand(String name) {
|
||||||
@ -58,7 +60,7 @@ public class P {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param <FC>
|
* @param <FC>
|
||||||
* 配置源类型
|
* 配置源类型
|
||||||
* @return 获得插件配置文件
|
* @return 获得插件配置文件
|
||||||
*/
|
*/
|
||||||
public static <FC> FC getConfig() {
|
public static <FC> FC getConfig() {
|
||||||
@ -67,7 +69,7 @@ public class P {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param <FC>
|
* @param <FC>
|
||||||
* 注入配置源类型
|
* 注入配置源类型
|
||||||
* @return 获得插件注入配置
|
* @return 获得插件注入配置
|
||||||
*/
|
*/
|
||||||
public static <FC> FC getInjectConfig() {
|
public static <FC> FC getInjectConfig() {
|
||||||
@ -108,7 +110,7 @@ public class P {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param <PI>
|
* @param <PI>
|
||||||
* 插件源类型
|
* 插件源类型
|
||||||
* @return 获得插件
|
* @return 获得插件
|
||||||
*/
|
*/
|
||||||
public static <PI> PI getPlugin() {
|
public static <PI> PI getPlugin() {
|
||||||
@ -122,11 +124,21 @@ public class P {
|
|||||||
return instance.isEnabled();
|
return instance.isEnabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 批量注册监听器
|
||||||
|
*
|
||||||
|
* @param listeners
|
||||||
|
* 监听器
|
||||||
|
*/
|
||||||
|
public static void registerEvents(Listener... listeners) {
|
||||||
|
Arrays.stream(listeners).forEach(listener -> Bukkit.getPluginManager().registerEvents(listener, instance));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 保存文件
|
* 保存文件
|
||||||
*
|
*
|
||||||
* @param dirs
|
* @param dirs
|
||||||
* 目录
|
* 目录
|
||||||
*/
|
*/
|
||||||
public static void saveFile(final String... dirs) {
|
public static void saveFile(final String... dirs) {
|
||||||
saveFile(false, dirs);
|
saveFile(false, dirs);
|
||||||
@ -136,9 +148,9 @@ public class P {
|
|||||||
* 保存文件
|
* 保存文件
|
||||||
*
|
*
|
||||||
* @param replace
|
* @param replace
|
||||||
* 是否替换
|
* 是否替换
|
||||||
* @param dirs
|
* @param dirs
|
||||||
* 目录
|
* 目录
|
||||||
*/
|
*/
|
||||||
public static void saveFile(boolean replace, final String... dirs) {
|
public static void saveFile(boolean replace, final String... dirs) {
|
||||||
URL url = instance.getClass().getClassLoader().getResource("plugin.yml");
|
URL url = instance.getClass().getClassLoader().getResource("plugin.yml");
|
||||||
|
@ -48,7 +48,7 @@ public class CommandMain implements CommandExecutor {
|
|||||||
* 主类命令管理类
|
* 主类命令管理类
|
||||||
*
|
*
|
||||||
* @param clazzs
|
* @param clazzs
|
||||||
* 命令类
|
* 命令类
|
||||||
*/
|
*/
|
||||||
public CommandMain(Executor... clazzs) {
|
public CommandMain(Executor... clazzs) {
|
||||||
register(clazzs);
|
register(clazzs);
|
||||||
@ -58,10 +58,10 @@ public class CommandMain implements CommandExecutor {
|
|||||||
* 注册命令
|
* 注册命令
|
||||||
*
|
*
|
||||||
* @param clazzs
|
* @param clazzs
|
||||||
* 命令类
|
* 命令类
|
||||||
* @return {@link CommandMain}
|
* @return {@link CommandMain}
|
||||||
*/
|
*/
|
||||||
public CommandMain register(Executor... clazzs) {
|
public void register(Executor... clazzs) {
|
||||||
for (Executor clazz : clazzs) {
|
for (Executor clazz : clazzs) {
|
||||||
Method[] methods = clazz.getClass().getDeclaredMethods();
|
Method[] methods = clazz.getClass().getDeclaredMethods();
|
||||||
for (Method method : methods) {
|
for (Method method : methods) {
|
||||||
@ -70,30 +70,29 @@ public class CommandMain implements CommandExecutor {
|
|||||||
}
|
}
|
||||||
help = new CommandHelp(cmds);
|
help = new CommandHelp(cmds);
|
||||||
help.setHelpGenerator(helpGenerator);
|
help.setHelpGenerator(helpGenerator);
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean registerCommand(Method method, Executor clazz) {
|
private void registerCommand(Method method, Executor clazz) {
|
||||||
CommandInfo ci = CommandInfo.parse(method, clazz);
|
CommandInfo ci = CommandInfo.parse(method, clazz);
|
||||||
if (ci != null) {
|
if (ci != null) {
|
||||||
injectPluginCommand(ci);
|
injectPluginCommand(ci);
|
||||||
Class[] params = method.getParameterTypes();
|
Class[] params = method.getParameterTypes();
|
||||||
Log.d("注册主命令 %s 参数类型: %s", ci.getName(), Log.csn(params));
|
Log.d("注册主命令 %s 参数类型: %s", ci.getName(), Log.getSimpleNames((Object[]) params));
|
||||||
try {
|
try {
|
||||||
Class<? extends CommandSender> sender = params[0];
|
Class<? extends CommandSender> sender = params[0];
|
||||||
cmds.add(ci);
|
cmds.add(ci);
|
||||||
return true;
|
|
||||||
} catch (ArrayIndexOutOfBoundsException | ClassCastException ignored) {
|
} catch (ArrayIndexOutOfBoundsException | ClassCastException ignored) {
|
||||||
|
Log.w(argumentTypeError, method.getName(), clazz.getClass().getName());
|
||||||
}
|
}
|
||||||
Log.w(argumentTypeError, method.getName(), clazz.getClass().getName());
|
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void injectPluginCommand(CommandInfo ci) {
|
private void injectPluginCommand(CommandInfo ci) {
|
||||||
PluginCommand cmd = P.getCommand(ci.getName());
|
PluginCommand cmd = P.getCommand(ci.getName());
|
||||||
if (cmd == null) {
|
if (cmd == null) {
|
||||||
if ((cmd = CommandKit.create(ci.getName(), ci.getAliases().toArray(new String[] {}))) == null) { throw new IllegalStateException("未找到命令 必须在plugin.yml先注册 " + ci.getName() + " 命令!"); }
|
if ((cmd = CommandKit.create(ci.getName(), ci.getAliases().toArray(new String[]{}))) == null) {
|
||||||
|
throw new IllegalStateException("未找到命令 必须在plugin.yml先注册 " + ci.getName() + " 命令!");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
cmd.setExecutor(this);
|
cmd.setExecutor(this);
|
||||||
}
|
}
|
||||||
@ -102,7 +101,7 @@ public class CommandMain implements CommandExecutor {
|
|||||||
* 检查缓存并获得命令
|
* 检查缓存并获得命令
|
||||||
*
|
*
|
||||||
* @param cmd
|
* @param cmd
|
||||||
* 子命令
|
* 子命令
|
||||||
* @return 命令信息
|
* @return 命令信息
|
||||||
*/
|
*/
|
||||||
private CommandInfo getByCache(String cmd) {
|
private CommandInfo getByCache(String cmd) {
|
||||||
|
@ -29,6 +29,7 @@ public class CommandParse {
|
|||||||
private static Map<String, Class> primitiveMap = new HashMap<>();
|
private static Map<String, Class> primitiveMap = new HashMap<>();
|
||||||
private boolean isMain;
|
private boolean isMain;
|
||||||
private List<Parse> parses = new LinkedList<>();
|
private List<Parse> parses = new LinkedList<>();
|
||||||
|
|
||||||
static {
|
static {
|
||||||
register(File.class, FileParse.class);
|
register(File.class, FileParse.class);
|
||||||
register(Player.class, PlayerParse.class);
|
register(Player.class, PlayerParse.class);
|
||||||
@ -68,7 +69,7 @@ public class CommandParse {
|
|||||||
if (parse == null) { throw new ParseException(String.format("存在无法解析的参数类型 %s", clazz.getName())); }
|
if (parse == null) { throw new ParseException(String.format("存在无法解析的参数类型 %s", clazz.getName())); }
|
||||||
this.parses.add(parse.parseAnnotation(annotations).handleAttrs());
|
this.parses.add(parse.parseAnnotation(annotations).handleAttrs());
|
||||||
}
|
}
|
||||||
Log.d("命令解析器 %s", Log.osn(parses));
|
Log.d("命令解析器 %s", Log.getSimpleNames(parses));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CommandParse get(Method method) {
|
public static CommandParse get(Method method) {
|
||||||
@ -79,9 +80,9 @@ public class CommandParse {
|
|||||||
* 转化数组为字符串
|
* 转化数组为字符串
|
||||||
*
|
*
|
||||||
* @param arr
|
* @param arr
|
||||||
* 数组
|
* 数组
|
||||||
* @param split
|
* @param split
|
||||||
* 分割符
|
* 分割符
|
||||||
* @return 字符串
|
* @return 字符串
|
||||||
*/
|
*/
|
||||||
public static String join(Object[] arr, String split) {
|
public static String join(Object[] arr, String split) {
|
||||||
@ -114,7 +115,7 @@ public class CommandParse {
|
|||||||
throw new ParseException(String.format("第 %s 个参数 %s", isMain ? 1 : 2 + i, e.getMessage()));
|
throw new ParseException(String.format("第 %s 个参数 %s", isMain ? 1 : 2 + i, e.getMessage()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Log.d("解析参数: %s => %s", Arrays.toString(args), Log.osn(pobjs));
|
Log.d("解析参数: %s => %s", Arrays.toString(args), Log.getSimpleNames(pobjs));
|
||||||
return pobjs.toArray();
|
return pobjs.toArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,7 +74,7 @@ public class CommandSub implements TabExecutor {
|
|||||||
* 命令管理器
|
* 命令管理器
|
||||||
*
|
*
|
||||||
* @param name
|
* @param name
|
||||||
* 注册的命令
|
* 注册的命令
|
||||||
*/
|
*/
|
||||||
public CommandSub(String name) {
|
public CommandSub(String name) {
|
||||||
cmd = plugin.getCommand(name);
|
cmd = plugin.getCommand(name);
|
||||||
@ -90,9 +90,9 @@ public class CommandSub implements TabExecutor {
|
|||||||
* 命令管理器
|
* 命令管理器
|
||||||
*
|
*
|
||||||
* @param name
|
* @param name
|
||||||
* 注册的命令
|
* 注册的命令
|
||||||
* @param executor
|
* @param executor
|
||||||
* 命令执行类
|
* 命令执行类
|
||||||
*/
|
*/
|
||||||
public CommandSub(String name, Executor... executor) {
|
public CommandSub(String name, Executor... executor) {
|
||||||
this(name);
|
this(name);
|
||||||
@ -115,7 +115,7 @@ public class CommandSub implements TabExecutor {
|
|||||||
* 检查缓存并获得命令
|
* 检查缓存并获得命令
|
||||||
*
|
*
|
||||||
* @param subcmd
|
* @param subcmd
|
||||||
* 子命令
|
* 子命令
|
||||||
* @return 命令信息
|
* @return 命令信息
|
||||||
*/
|
*/
|
||||||
private CommandInfo getByCache(String subcmd) {
|
private CommandInfo getByCache(String subcmd) {
|
||||||
@ -137,21 +137,25 @@ public class CommandSub implements TabExecutor {
|
|||||||
* 获取玩家命令补全
|
* 获取玩家命令补全
|
||||||
*
|
*
|
||||||
* @param sender
|
* @param sender
|
||||||
* 命令发送者
|
* 命令发送者
|
||||||
* @param command
|
* @param command
|
||||||
* 命令
|
* 命令
|
||||||
* @param alias
|
* @param alias
|
||||||
* 别名
|
* 别名
|
||||||
* @param args
|
* @param args
|
||||||
* 数组
|
* 数组
|
||||||
* @return 在线玩家数组
|
* @return 在线玩家数组
|
||||||
*/
|
*/
|
||||||
private List<String> getPlayerTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
private List<String> getPlayerTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
String lastWord = args[args.length - 1];
|
String lastWord = args[args.length - 1];
|
||||||
Player senderPlayer = sender instanceof Player ? (Player) sender : null;
|
Player senderPlayer = sender instanceof Player ? (Player) sender : null;
|
||||||
List<String> matchedPlayers = new ArrayList<>();
|
List<String> matchedPlayers = new ArrayList<>();
|
||||||
C.Player.getOnlinePlayers().stream().filter(player -> (senderPlayer == null || senderPlayer.canSee(player)) && StringUtil.startsWithIgnoreCase(player.getName(), lastWord)).forEach(
|
C.Player.getOnlinePlayers()
|
||||||
player -> matchedPlayers.add(player.getName()));
|
.stream()
|
||||||
|
.filter(player -> (senderPlayer == null || senderPlayer.canSee(player)) && StringUtil.startsWithIgnoreCase(player.getName(),
|
||||||
|
lastWord))
|
||||||
|
.forEach(
|
||||||
|
player -> matchedPlayers.add(player.getName()));
|
||||||
return matchedPlayers;
|
return matchedPlayers;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,7 +163,7 @@ public class CommandSub implements TabExecutor {
|
|||||||
* 转移数组
|
* 转移数组
|
||||||
*
|
*
|
||||||
* @param args
|
* @param args
|
||||||
* 原数组
|
* 原数组
|
||||||
* @return 转移后的数组字符串
|
* @return 转移后的数组字符串
|
||||||
*/
|
*/
|
||||||
private String[] moveStrings(String[] args) {
|
private String[] moveStrings(String[] args) {
|
||||||
@ -203,10 +207,10 @@ public class CommandSub implements TabExecutor {
|
|||||||
* 通过注解读取命令并注册
|
* 通过注解读取命令并注册
|
||||||
*
|
*
|
||||||
* @param clazzs
|
* @param clazzs
|
||||||
* 子命令处理类
|
* 子命令处理类
|
||||||
* @return {@link CommandSub}
|
* @return {@link CommandSub}
|
||||||
*/
|
*/
|
||||||
public CommandSub register(Executor... clazzs) {
|
public void register(Executor... clazzs) {
|
||||||
for (Executor clazz : clazzs) {
|
for (Executor clazz : clazzs) {
|
||||||
Log.d("解析执行类: %s", clazz.getClass().getName());
|
Log.d("解析执行类: %s", clazz.getClass().getName());
|
||||||
Method[] methods = clazz.getClass().getDeclaredMethods();
|
Method[] methods = clazz.getClass().getDeclaredMethods();
|
||||||
@ -219,23 +223,22 @@ public class CommandSub implements TabExecutor {
|
|||||||
}
|
}
|
||||||
help = new CommandHelp(defCmd, cmds);
|
help = new CommandHelp(defCmd, cmds);
|
||||||
buildCmdNameCache();
|
buildCmdNameCache();
|
||||||
return this;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 注册命令
|
* 注册命令
|
||||||
*
|
*
|
||||||
* @param method
|
* @param method
|
||||||
* 方法
|
* 方法
|
||||||
* @param clazz
|
* @param clazz
|
||||||
* 调用对象
|
* 调用对象
|
||||||
* @return 是否成功
|
* @return 是否成功
|
||||||
*/
|
*/
|
||||||
private boolean registerCommand(Method method, Executor clazz) {
|
private boolean registerCommand(Method method, Executor clazz) {
|
||||||
CommandInfo ci = CommandInfo.parse(method, clazz);
|
CommandInfo ci = CommandInfo.parse(method, clazz);
|
||||||
if (ci != null) {
|
if (ci != null) {
|
||||||
Class[] params = method.getParameterTypes();
|
Class[] params = method.getParameterTypes();
|
||||||
Log.d("注册子命令: %s 参数类型: %s", ci.getName(), Log.csn(params));
|
Log.d("注册子命令: %s 参数类型: %s", ci.getName(), Log.getSimpleNames((Object[]) params));
|
||||||
try {
|
try {
|
||||||
Class<? extends CommandSender> sender = params[0];
|
Class<? extends CommandSender> sender = params[0];
|
||||||
// 用于消除unuse警告
|
// 用于消除unuse警告
|
||||||
@ -257,29 +260,28 @@ public class CommandSub implements TabExecutor {
|
|||||||
* 注册Tab补全
|
* 注册Tab补全
|
||||||
*
|
*
|
||||||
* @param method
|
* @param method
|
||||||
* 方法
|
* 方法
|
||||||
* @param clazz
|
* @param clazz
|
||||||
* 调用对象
|
* 调用对象
|
||||||
* @return 是否成功
|
* @return 是否成功
|
||||||
*/
|
*/
|
||||||
private boolean registerTab(Method method, Executor clazz) {
|
private void registerTab(Method method, Executor clazz) {
|
||||||
CommandTabInfo ti = CommandTabInfo.parse(method, clazz);
|
CommandTabInfo ti = CommandTabInfo.parse(method, clazz);
|
||||||
if (ti != null) {
|
if (ti != null) {
|
||||||
if (method.getReturnType().equals(List.class)) {
|
if (method.getReturnType().equals(List.class)) {
|
||||||
Log.d("注册子命令补全: %s ", method.getName());
|
Log.d("注册子命令补全: %s ", method.getName());
|
||||||
tabs.add(ti);
|
tabs.add(ti);
|
||||||
return true;
|
} else {
|
||||||
|
Log.w(returnTypeError, method.getName(), clazz.getClass().getName());
|
||||||
}
|
}
|
||||||
Log.w(returnTypeError, method.getName(), clazz.getClass().getName());
|
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 设置命令错误处理器
|
* 设置命令错误处理器
|
||||||
*
|
*
|
||||||
* @param commandErrorHanlder
|
* @param commandErrorHanlder
|
||||||
* 命令错误处理器
|
* 命令错误处理器
|
||||||
* @return {@link CommandSub}
|
* @return {@link CommandSub}
|
||||||
*/
|
*/
|
||||||
public CommandSub setCommandErrorHanlder(ErrorHanlder commandErrorHanlder) {
|
public CommandSub setCommandErrorHanlder(ErrorHanlder commandErrorHanlder) {
|
||||||
@ -291,7 +293,7 @@ public class CommandSub implements TabExecutor {
|
|||||||
* 设置帮助生成器
|
* 设置帮助生成器
|
||||||
*
|
*
|
||||||
* @param helpGenerator
|
* @param helpGenerator
|
||||||
* 帮助生成器
|
* 帮助生成器
|
||||||
* @return {@link CommandSub}
|
* @return {@link CommandSub}
|
||||||
*/
|
*/
|
||||||
public CommandSub setHelpGenerator(HelpGenerator helpGenerator) {
|
public CommandSub setHelpGenerator(HelpGenerator helpGenerator) {
|
||||||
@ -303,7 +305,7 @@ public class CommandSub implements TabExecutor {
|
|||||||
* 设置帮助解析器
|
* 设置帮助解析器
|
||||||
*
|
*
|
||||||
* @param helpParse
|
* @param helpParse
|
||||||
* 帮助解析器
|
* 帮助解析器
|
||||||
* @return {@link CommandSub}
|
* @return {@link CommandSub}
|
||||||
*/
|
*/
|
||||||
public CommandSub setHelpParse(HelpParse helpParse) {
|
public CommandSub setHelpParse(HelpParse helpParse) {
|
||||||
|
@ -3,7 +3,6 @@ package pw.yumc.YumCore.update;
|
|||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.UnsupportedEncodingException;
|
import java.io.UnsupportedEncodingException;
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.net.HttpURLConnection;
|
import java.net.HttpURLConnection;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.URLClassLoader;
|
import java.net.URLClassLoader;
|
||||||
@ -30,31 +29,21 @@ import org.w3c.dom.Document;
|
|||||||
import org.xml.sax.SAXException;
|
import org.xml.sax.SAXException;
|
||||||
|
|
||||||
import pw.yumc.YumCore.bukkit.Log;
|
import pw.yumc.YumCore.bukkit.Log;
|
||||||
|
import pw.yumc.YumCore.bukkit.P;
|
||||||
import pw.yumc.YumCore.tellraw.Tellraw;
|
import pw.yumc.YumCore.tellraw.Tellraw;
|
||||||
import pw.yumc.YumCore.text.Encrypt;
|
import pw.yumc.YumCore.text.Encrypt;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 自动更新程序
|
* 自动更新程序
|
||||||
*
|
*
|
||||||
* @since 2016年8月3日 上午11:20:21
|
|
||||||
* @author 喵♂呜
|
* @author 喵♂呜
|
||||||
|
* @since 2016年8月3日 上午11:20:21
|
||||||
*/
|
*/
|
||||||
public class SubscribeTask implements Runnable, Listener {
|
public class SubscribeTask implements Runnable, Listener {
|
||||||
/**
|
/**
|
||||||
* 插件实例
|
* 插件实例
|
||||||
*/
|
*/
|
||||||
private static JavaPlugin instance;
|
private static JavaPlugin instance = P.instance;
|
||||||
|
|
||||||
static {
|
|
||||||
try {
|
|
||||||
Object pluginClassLoader = SubscribeTask.class.getClassLoader();
|
|
||||||
Field field = pluginClassLoader.getClass().getDeclaredField("plugin");
|
|
||||||
field.setAccessible(true);
|
|
||||||
instance = (JavaPlugin) field.get(pluginClassLoader);
|
|
||||||
} catch (Exception e) {
|
|
||||||
Log.d(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 检查间隔
|
* 检查间隔
|
||||||
@ -82,7 +71,7 @@ public class SubscribeTask implements Runnable, Listener {
|
|||||||
* 自动更新
|
* 自动更新
|
||||||
*
|
*
|
||||||
* @param type
|
* @param type
|
||||||
* 是否为Maven
|
* 是否为Maven
|
||||||
*/
|
*/
|
||||||
public SubscribeTask(UpdateType type) {
|
public SubscribeTask(UpdateType type) {
|
||||||
this(false, type);
|
this(false, type);
|
||||||
@ -92,9 +81,9 @@ public class SubscribeTask implements Runnable, Listener {
|
|||||||
* 自动更新
|
* 自动更新
|
||||||
*
|
*
|
||||||
* @param isSecret
|
* @param isSecret
|
||||||
* 是否为私有
|
* 是否为私有
|
||||||
* @param type
|
* @param type
|
||||||
* 更新类型
|
* 更新类型
|
||||||
*/
|
*/
|
||||||
public SubscribeTask(boolean isSecret, UpdateType type) {
|
public SubscribeTask(boolean isSecret, UpdateType type) {
|
||||||
this("master", isSecret, type);
|
this("master", isSecret, type);
|
||||||
@ -104,13 +93,14 @@ public class SubscribeTask implements Runnable, Listener {
|
|||||||
* 自动更新
|
* 自动更新
|
||||||
*
|
*
|
||||||
* @param branch
|
* @param branch
|
||||||
* 更新分支
|
* 更新分支
|
||||||
* @param isSecret
|
* @param isSecret
|
||||||
* 是否为私有
|
* 是否为私有
|
||||||
* @param type
|
* @param type
|
||||||
* 更新类型
|
* 更新类型
|
||||||
*/
|
*/
|
||||||
public SubscribeTask(String branch, boolean isSecret, UpdateType type) {
|
public SubscribeTask(String branch, boolean isSecret, UpdateType type) {
|
||||||
|
Log.d("订阅更新 分支 %s 是否加密 %s 更新类型 %s", branch, isSecret, type.name());
|
||||||
updateFile = new UpdateFile(instance);
|
updateFile = new UpdateFile(instance);
|
||||||
versionInfo = new VersionInfo(instance, branch, isSecret);
|
versionInfo = new VersionInfo(instance, branch, isSecret);
|
||||||
updateType = type;
|
updateType = type;
|
||||||
@ -180,11 +170,11 @@ public class SubscribeTask implements Runnable, Listener {
|
|||||||
|
|
||||||
public String getDownloadUrl(Plugin instance, String version) {
|
public String getDownloadUrl(Plugin instance, String version) {
|
||||||
switch (this) {
|
switch (this) {
|
||||||
case DIRECT:
|
case DIRECT:
|
||||||
case WS:
|
case WS:
|
||||||
return String.format(url, instance.getName());
|
return String.format(url, instance.getName());
|
||||||
case MAVEN:
|
case MAVEN:
|
||||||
return String.format(url, instance.getClass().getPackage().getName().replaceAll("\\.", "/"), version, instance.getName());
|
return String.format(url, instance.getClass().getPackage().getName().replaceAll("\\.", "/"), version, instance.getName());
|
||||||
}
|
}
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
@ -216,7 +206,7 @@ public class SubscribeTask implements Runnable, Listener {
|
|||||||
* 获得插件绝对路径
|
* 获得插件绝对路径
|
||||||
*
|
*
|
||||||
* @param plugin
|
* @param plugin
|
||||||
* - 插件
|
* - 插件
|
||||||
* @return 插件的绝对路径
|
* @return 插件的绝对路径
|
||||||
*/
|
*/
|
||||||
public File getPluginFile(Plugin plugin) {
|
public File getPluginFile(Plugin plugin) {
|
||||||
@ -289,9 +279,9 @@ public class SubscribeTask implements Runnable, Listener {
|
|||||||
* 获得插件信息
|
* 获得插件信息
|
||||||
*
|
*
|
||||||
* @param tag
|
* @param tag
|
||||||
* 数据标签
|
* 数据标签
|
||||||
* @param def
|
* @param def
|
||||||
* 默认值
|
* 默认值
|
||||||
* @return 信息
|
* @return 信息
|
||||||
*/
|
*/
|
||||||
public String getPluginInfo(String tag, String def) {
|
public String getPluginInfo(String tag, String def) {
|
||||||
@ -313,11 +303,11 @@ public class SubscribeTask implements Runnable, Listener {
|
|||||||
*/
|
*/
|
||||||
public String[] getUpdateChanges() {
|
public String[] getUpdateChanges() {
|
||||||
final String des = getPluginInfo("update.changes", null);
|
final String des = getPluginInfo("update.changes", null);
|
||||||
if (des == null) { return new String[] {}; }
|
if (des == null) { return new String[]{}; }
|
||||||
String[] temp = ChatColor.translateAlternateColorCodes('&', des).replaceAll("\n", "").replaceAll("\u0009", "").split(";");
|
String[] temp = ChatColor.translateAlternateColorCodes('&', des).replaceAll("\n", "").replaceAll("\u0009", "").split(";");
|
||||||
List<String> ltemp = new ArrayList<>();
|
List<String> ltemp = new ArrayList<>();
|
||||||
Arrays.stream(temp).forEach(s -> ltemp.add(s.trim()));
|
Arrays.stream(temp).forEach(s -> ltemp.add(s.trim()));
|
||||||
return ltemp.toArray(new String[] {});
|
return ltemp.toArray(new String[]{});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -343,7 +333,7 @@ public class SubscribeTask implements Runnable, Listener {
|
|||||||
* 通知更新信息
|
* 通知更新信息
|
||||||
*
|
*
|
||||||
* @param sender
|
* @param sender
|
||||||
* 命令接受者
|
* 命令接受者
|
||||||
*/
|
*/
|
||||||
public void notify(CommandSender sender) {
|
public void notify(CommandSender sender) {
|
||||||
Log.sender(sender, "§a插件更新: §b" + name + " §a已更新到最新版本 §bv" + getLastestVersion());
|
Log.sender(sender, "§a插件更新: §b" + name + " §a已更新到最新版本 §bv" + getLastestVersion());
|
||||||
@ -367,9 +357,9 @@ public class SubscribeTask implements Runnable, Listener {
|
|||||||
* 比较版本号
|
* 比较版本号
|
||||||
*
|
*
|
||||||
* @param v1
|
* @param v1
|
||||||
* 新版本
|
* 新版本
|
||||||
* @param v2
|
* @param v2
|
||||||
* 旧版本
|
* 旧版本
|
||||||
* @return 是否需要更新
|
* @return 是否需要更新
|
||||||
*/
|
*/
|
||||||
public boolean needUpdate(String v1, String v2) {
|
public boolean needUpdate(String v1, String v2) {
|
||||||
@ -379,7 +369,7 @@ public class SubscribeTask implements Runnable, Listener {
|
|||||||
int minLength = Math.min(va1.length, va2.length);// 取最小长度值
|
int minLength = Math.min(va1.length, va2.length);// 取最小长度值
|
||||||
int diff = 0;
|
int diff = 0;
|
||||||
while (idx < minLength && (diff = va1[idx].length() - va2[idx].length()) == 0// 先比较长度
|
while (idx < minLength && (diff = va1[idx].length() - va2[idx].length()) == 0// 先比较长度
|
||||||
&& (diff = va1[idx].compareTo(va2[idx])) == 0) {// 再比较字符
|
&& (diff = va1[idx].compareTo(va2[idx])) == 0) {// 再比较字符
|
||||||
++idx;
|
++idx;
|
||||||
}
|
}
|
||||||
// 如果已经分出大小 则直接返回 如果未分出大小 则再比较位数 有子版本的为大
|
// 如果已经分出大小 则直接返回 如果未分出大小 则再比较位数 有子版本的为大
|
||||||
@ -390,12 +380,11 @@ public class SubscribeTask implements Runnable, Listener {
|
|||||||
public String getNewVersion() {
|
public String getNewVersion() {
|
||||||
try {
|
try {
|
||||||
String result = getLastestVersion();
|
String result = getLastestVersion();
|
||||||
if (version.contains("DEV") && !Log.isGlobalDebug()) {
|
if (Log.isDebug() && !Log.isGlobalDebug()) {
|
||||||
Log.console("§4注意: §c当前版本为开发版本 且未开启全局调试 已自动下载最新稳定版!");
|
Log.console("§4注意: §c当前版本为开发版本 且未开启全局调试 已自动下载最新稳定版!");
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
String current = version.split("-")[0];
|
if (needUpdate(result, version)) { return result; }
|
||||||
if (needUpdate(result, current)) { return result; }
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.d(e);
|
Log.d(e);
|
||||||
}
|
}
|
||||||
|
17
src/test/java/pw/yumc/YumCore/bukkit/LogTest.java
Normal file
17
src/test/java/pw/yumc/YumCore/bukkit/LogTest.java
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
package pw.yumc.YumCore.bukkit;
|
||||||
|
|
||||||
|
import org.junit.Assert;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Created with IntelliJ IDEA
|
||||||
|
*
|
||||||
|
* @author 喵♂呜
|
||||||
|
* Created on 2017/8/22 15:16.
|
||||||
|
*/
|
||||||
|
public class LogTest {
|
||||||
|
@Test
|
||||||
|
public void testSimpleNames() {
|
||||||
|
Assert.assertTrue("[LogTest, LogTest, null]".equals(Log.getSimpleNames(this, this.getClass(), null)));
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user