mirror of
https://e.coding.net/circlecloud/YumCore.git
synced 2024-11-22 01:48:50 +00:00
refactor: 去除final
Signed-off-by: 502647092 <admin@yumc.pw>
This commit is contained in:
parent
2dd7257dea
commit
335cdeeaad
2
pom.xml
2
pom.xml
@ -6,7 +6,7 @@
|
||||
<version>1.1</version>
|
||||
<name>YumCore</name>
|
||||
<build>
|
||||
<finalName>${project.name}</finalName>
|
||||
<Name>${project.name}</Name>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>src/main/resources</directory>
|
||||
|
@ -37,8 +37,8 @@ public class L {
|
||||
* if the world don't exists
|
||||
* @see ConfigurationSerializable
|
||||
*/
|
||||
public static Location deserialize(final Map<String, Object> args) {
|
||||
final World world = Bukkit.getWorld((String) args.get("world"));
|
||||
public static Location deserialize(Map<String, Object> args) {
|
||||
World world = Bukkit.getWorld((String) args.get("world"));
|
||||
if (world == null) {
|
||||
throw new IllegalArgumentException("unknown world");
|
||||
}
|
||||
@ -54,8 +54,8 @@ public class L {
|
||||
* 地点
|
||||
* @return Map
|
||||
*/
|
||||
public static Map<String, Object> serialize(final Location loc) {
|
||||
final Map<String, Object> data = new LinkedHashMap<>();
|
||||
public static Map<String, Object> serialize(Location loc) {
|
||||
Map<String, Object> data = new LinkedHashMap<>();
|
||||
data.put(ConfigurationSerialization.SERIALIZED_TYPE_KEY, Location.class.getName());
|
||||
data.put("world", loc.getWorld().getName());
|
||||
data.put("x", loc.getX());
|
||||
|
@ -17,8 +17,8 @@ import org.bukkit.command.CommandSender;
|
||||
*/
|
||||
public class Log {
|
||||
private static boolean debug = new File(String.format("plugins%1$sYumCore%1$sdebug", File.separatorChar)).exists();
|
||||
private static final Logger logger = P.instance.getLogger();
|
||||
private static final CommandSender console = Bukkit.getConsoleSender();
|
||||
private static Logger logger = P.instance.getLogger();
|
||||
private static CommandSender console = Bukkit.getConsoleSender();
|
||||
private static String prefix = String.format("§6[§b%s§6]§r ", P.instance.getName());
|
||||
|
||||
private Log() {
|
||||
@ -37,7 +37,7 @@ public class Log {
|
||||
* if a security manager exists and if
|
||||
* the caller does not have LoggingPermission("control").
|
||||
*/
|
||||
public static void addHandler(final Handler handler) throws SecurityException {
|
||||
public static void addHandler(Handler handler) throws SecurityException {
|
||||
logger.addHandler(handler);
|
||||
}
|
||||
|
||||
@ -47,7 +47,7 @@ public class Log {
|
||||
* @param message
|
||||
* Message to be displayed
|
||||
*/
|
||||
public static void console(final String message) {
|
||||
public static void console(String message) {
|
||||
console.sendMessage(prefix + message);
|
||||
}
|
||||
|
||||
@ -59,7 +59,7 @@ public class Log {
|
||||
* @param object
|
||||
* 格式化参数
|
||||
*/
|
||||
public static void console(final String message, final Object... object) {
|
||||
public static void console(String message, Object... object) {
|
||||
console.sendMessage(prefix + String.format(message, object));
|
||||
}
|
||||
|
||||
@ -69,8 +69,8 @@ public class Log {
|
||||
* @param message
|
||||
* Message to be displayed
|
||||
*/
|
||||
public static void console(final String[] msg) {
|
||||
for (final String str : msg) {
|
||||
public static void console(String[] msg) {
|
||||
for (String str : msg) {
|
||||
console(str);
|
||||
}
|
||||
}
|
||||
@ -83,7 +83,7 @@ public class Log {
|
||||
* @param object
|
||||
* 参数
|
||||
*/
|
||||
public static void d(final String msg, final Object... object) {
|
||||
public static void d(String msg, Object... object) {
|
||||
debug(String.format(msg, object));
|
||||
}
|
||||
|
||||
@ -93,7 +93,7 @@ public class Log {
|
||||
* @param msg
|
||||
* 消息
|
||||
*/
|
||||
public static void debug(final String msg) {
|
||||
public static void debug(String msg) {
|
||||
if (debug) {
|
||||
logger.info("[DEBUG] " + msg);
|
||||
}
|
||||
@ -107,7 +107,7 @@ public class Log {
|
||||
* @param object
|
||||
* 参数
|
||||
*/
|
||||
public static void debug(final String msg, final Object... object) {
|
||||
public static void debug(String msg, Object... object) {
|
||||
if (debug) {
|
||||
logger.log(Level.SEVERE, "[DEBUG] " + msg, object);
|
||||
}
|
||||
@ -121,7 +121,7 @@ public class Log {
|
||||
* @param e
|
||||
* 异常
|
||||
*/
|
||||
public static void debug(final String msg, final Throwable e) {
|
||||
public static void debug(String msg, Throwable e) {
|
||||
if (debug) {
|
||||
logger.info("[DEBUG] " + msg);
|
||||
e.printStackTrace();
|
||||
@ -134,7 +134,7 @@ public class Log {
|
||||
* @param e
|
||||
* 异常
|
||||
*/
|
||||
public static void debug(final Throwable e) {
|
||||
public static void debug(Throwable e) {
|
||||
if (debug) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
@ -158,7 +158,7 @@ public class Log {
|
||||
* @param msg
|
||||
* The string message (or a key in the message catalog)
|
||||
*/
|
||||
public static void info(final String msg) {
|
||||
public static void info(String msg) {
|
||||
logger.info(msg);
|
||||
}
|
||||
|
||||
@ -175,7 +175,7 @@ public class Log {
|
||||
* @param msg
|
||||
* The string message (or a key in the message catalog)
|
||||
*/
|
||||
public static void log(final Level level, final String msg) {
|
||||
public static void log(Level level, String msg) {
|
||||
logger.log(level, msg);
|
||||
}
|
||||
|
||||
@ -194,7 +194,7 @@ public class Log {
|
||||
* @param param1
|
||||
* parameter to the message
|
||||
*/
|
||||
public static void log(final Level level, final String msg, final Object param1) {
|
||||
public static void log(Level level, String msg, Object param1) {
|
||||
logger.log(level, msg, param1);
|
||||
}
|
||||
|
||||
@ -213,7 +213,7 @@ public class Log {
|
||||
* @param params
|
||||
* array of parameters to the message
|
||||
*/
|
||||
public static void log(final Level level, final String msg, final Object[] params) {
|
||||
public static void log(Level level, String msg, Object[] params) {
|
||||
logger.log(level, msg, params);
|
||||
}
|
||||
|
||||
@ -237,7 +237,7 @@ public class Log {
|
||||
* @param thrown
|
||||
* Throwable associated with log message.
|
||||
*/
|
||||
public static void log(final Level level, final String msg, final Throwable thrown) {
|
||||
public static void log(Level level, String msg, Throwable thrown) {
|
||||
logger.log(level, msg, thrown);
|
||||
}
|
||||
|
||||
@ -245,7 +245,7 @@ public class Log {
|
||||
* @param prefix
|
||||
* 插件前缀
|
||||
*/
|
||||
public static void setPrefix(final String prefix) {
|
||||
public static void setPrefix(String prefix) {
|
||||
Log.prefix = ChatColor.translateAlternateColorCodes('&', prefix);
|
||||
}
|
||||
|
||||
@ -257,7 +257,7 @@ public class Log {
|
||||
* @param msg
|
||||
* The string message (or a key in the message catalog)
|
||||
*/
|
||||
public static void severe(final String msg) {
|
||||
public static void severe(String msg) {
|
||||
logger.severe(msg);
|
||||
}
|
||||
|
||||
@ -269,7 +269,7 @@ public class Log {
|
||||
* @param msg
|
||||
* 消息
|
||||
*/
|
||||
public static void toSender(final CommandSender sender, final String msg) {
|
||||
public static void toSender(CommandSender sender, String msg) {
|
||||
sender.sendMessage(prefix + msg);
|
||||
}
|
||||
|
||||
@ -283,7 +283,7 @@ public class Log {
|
||||
* @param objs
|
||||
* 参数
|
||||
*/
|
||||
public static void toSender(final CommandSender sender, final String msg, final Object... objs) {
|
||||
public static void toSender(CommandSender sender, String msg, Object... objs) {
|
||||
sender.sendMessage(prefix + String.format(msg, objs));
|
||||
}
|
||||
|
||||
@ -295,8 +295,8 @@ public class Log {
|
||||
* @param msg
|
||||
* 消息
|
||||
*/
|
||||
public static void toSender(final CommandSender sender, final String[] msg) {
|
||||
for (final String str : msg) {
|
||||
public static void toSender(CommandSender sender, String[] msg) {
|
||||
for (String str : msg) {
|
||||
toSender(sender, str);
|
||||
}
|
||||
}
|
||||
@ -309,7 +309,7 @@ public class Log {
|
||||
* @param objects
|
||||
* 参数
|
||||
*/
|
||||
public static void w(final String string, final Object... objects) {
|
||||
public static void w(String string, Object... objects) {
|
||||
logger.warning(String.format(string, objects));
|
||||
}
|
||||
|
||||
@ -324,7 +324,7 @@ public class Log {
|
||||
* @param msg
|
||||
* The string message (or a key in the message catalog)
|
||||
*/
|
||||
public static void warning(final String msg) {
|
||||
public static void warning(String msg) {
|
||||
logger.warning(msg);
|
||||
}
|
||||
|
||||
|
@ -23,12 +23,12 @@ public class P {
|
||||
public static JavaPlugin instance;
|
||||
|
||||
static {
|
||||
final Object pluginClassLoader = P.class.getClassLoader();
|
||||
Object pluginClassLoader = P.class.getClassLoader();
|
||||
try {
|
||||
final Field field = pluginClassLoader.getClass().getDeclaredField("plugin");
|
||||
Field field = pluginClassLoader.getClass().getDeclaredField("plugin");
|
||||
field.setAccessible(true);
|
||||
instance = (JavaPlugin) field.get(pluginClassLoader);
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
@ -39,7 +39,7 @@ public class P {
|
||||
*
|
||||
* @return 插件命令
|
||||
*/
|
||||
public static PluginCommand getCommand(final String name) {
|
||||
public static PluginCommand getCommand(String name) {
|
||||
return instance.getCommand(name);
|
||||
}
|
||||
|
||||
@ -56,28 +56,28 @@ public class P {
|
||||
/**
|
||||
* @return 获得插件文件夹
|
||||
*/
|
||||
public static final File getDataFolder() {
|
||||
public static File getDataFolder() {
|
||||
return instance.getDataFolder();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return 获得插件描述文件
|
||||
*/
|
||||
public static final PluginDescriptionFile getDescription() {
|
||||
public static PluginDescriptionFile getDescription() {
|
||||
return instance.getDescription();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return 获得插件日志器
|
||||
*/
|
||||
public static final Logger getLogger() {
|
||||
public static Logger getLogger() {
|
||||
return instance.getLogger();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return 插件名称
|
||||
*/
|
||||
public static final String getName() {
|
||||
public static String getName() {
|
||||
return instance.getName();
|
||||
}
|
||||
|
||||
@ -94,7 +94,7 @@ public class P {
|
||||
/**
|
||||
* @return 插件是否已启用
|
||||
*/
|
||||
public static final boolean isEnabled() {
|
||||
public static boolean isEnabled() {
|
||||
return instance.isEnabled();
|
||||
}
|
||||
|
||||
|
@ -39,19 +39,19 @@ public class C {
|
||||
static {
|
||||
try {
|
||||
version = getNMSVersion();
|
||||
final boolean newversion = Integer.parseInt(version.split("_")[1]) > 7;
|
||||
boolean newversion = Integer.parseInt(version.split("_")[1]) > 7;
|
||||
nmsChatSerializer = Class.forName(a(newversion ? "IChatBaseComponent$ChatSerializer" : "ChatSerializer"));
|
||||
nmsIChatBaseComponent = Class.forName(a("IChatBaseComponent"));
|
||||
packetType = Class.forName(a("PacketPlayOutChat"));
|
||||
packetActions = Class.forName(a(newversion ? "PacketPlayOutTitle$EnumTitleAction" : "EnumTitleAction"));
|
||||
packetTitle = Class.forName(a("PacketPlayOutTitle"));
|
||||
final Class<?> typeCraftPlayer = Class.forName(b("entity.CraftPlayer"));
|
||||
final Class<?> typeNMSPlayer = Class.forName(a("EntityPlayer"));
|
||||
final Class<?> typePlayerConnection = Class.forName(a("PlayerConnection"));
|
||||
Class<?> typeCraftPlayer = Class.forName(b("entity.CraftPlayer"));
|
||||
Class<?> typeNMSPlayer = Class.forName(a("EntityPlayer"));
|
||||
Class<?> typePlayerConnection = Class.forName(a("PlayerConnection"));
|
||||
getHandle = typeCraftPlayer.getMethod("getHandle");
|
||||
playerConnection = typeNMSPlayer.getField("playerConnection");
|
||||
sendPacket = typePlayerConnection.getMethod("sendPacket", Class.forName(a("Packet")));
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
Log.warning(C.class.getSimpleName() + " 兼容性工具初始化失败 可能造成部分功能不可用!");
|
||||
Log.debug(e);
|
||||
}
|
||||
@ -60,11 +60,11 @@ public class C {
|
||||
private C() {
|
||||
}
|
||||
|
||||
public static String a(final String str) {
|
||||
public static String a(String str) {
|
||||
return "net.minecraft.server." + version + "." + str;
|
||||
}
|
||||
|
||||
public static String b(final String str) {
|
||||
public static String b(String str) {
|
||||
return "org.bukkit.craftbukkit." + version + "." + str;
|
||||
}
|
||||
|
||||
@ -87,8 +87,8 @@ public class C {
|
||||
* @param message
|
||||
* 需要发送的消息
|
||||
*/
|
||||
public static void broadcast(final String message) {
|
||||
for (final org.bukkit.entity.Player player : C.Player.getOnlinePlayers()) {
|
||||
public static void broadcast(String message) {
|
||||
for (org.bukkit.entity.Player player : C.Player.getOnlinePlayers()) {
|
||||
send(player, message);
|
||||
}
|
||||
}
|
||||
@ -107,12 +107,12 @@ public class C {
|
||||
public void run() {
|
||||
int time = times;
|
||||
do {
|
||||
for (final org.bukkit.entity.Player player : C.Player.getOnlinePlayers()) {
|
||||
for (org.bukkit.entity.Player player : C.Player.getOnlinePlayers()) {
|
||||
send(player, message);
|
||||
}
|
||||
try {
|
||||
Thread.sleep(1000);
|
||||
} catch (final InterruptedException e) {
|
||||
} catch (InterruptedException e) {
|
||||
// Ignore
|
||||
}
|
||||
time--;
|
||||
@ -137,14 +137,14 @@ public class C {
|
||||
public void run() {
|
||||
int time = times;
|
||||
do {
|
||||
for (final org.bukkit.entity.Player player : C.Player.getOnlinePlayers()) {
|
||||
for (org.bukkit.entity.Player player : C.Player.getOnlinePlayers()) {
|
||||
if (player.getWorld().getName().equalsIgnoreCase(world.getName())) {
|
||||
send(player, message);
|
||||
}
|
||||
}
|
||||
try {
|
||||
Thread.sleep(1000);
|
||||
} catch (final InterruptedException e) {
|
||||
} catch (InterruptedException e) {
|
||||
// Ignore
|
||||
}
|
||||
time--;
|
||||
@ -162,19 +162,19 @@ public class C {
|
||||
* @param msg
|
||||
* ActionBar信息
|
||||
*/
|
||||
public static void send(final org.bukkit.entity.Player receivingPacket, final String msg) {
|
||||
public static void send(org.bukkit.entity.Player receivingPacket, String msg) {
|
||||
Object packet = null;
|
||||
try {
|
||||
final Object serialized = nmsChatSerializer.getMethod("a", String.class).invoke(null, "{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', JSONObject.escape(msg)) + "\"}");
|
||||
Object serialized = nmsChatSerializer.getMethod("a", String.class).invoke(null, "{\"text\":\"" + ChatColor.translateAlternateColorCodes('&', JSONObject.escape(msg)) + "\"}");
|
||||
if (!version.contains("1_7")) {
|
||||
packet = packetType.getConstructor(nmsIChatBaseComponent, byte.class).newInstance(serialized, (byte) 2);
|
||||
} else {
|
||||
packet = packetType.getConstructor(nmsIChatBaseComponent, int.class).newInstance(serialized, 2);
|
||||
}
|
||||
final Object player = getHandle.invoke(receivingPacket);
|
||||
final Object connection = playerConnection.get(player);
|
||||
Object player = getHandle.invoke(receivingPacket);
|
||||
Object connection = playerConnection.get(player);
|
||||
sendPacket.invoke(connection, packet);
|
||||
} catch (final Exception ex) {
|
||||
} catch (Exception ex) {
|
||||
Log.debug("ActionBar发包错误 " + version, ex);
|
||||
}
|
||||
}
|
||||
@ -198,7 +198,7 @@ public class C {
|
||||
send(receivingPacket, msg);
|
||||
try {
|
||||
Thread.sleep(1000);
|
||||
} catch (final InterruptedException e) {
|
||||
} catch (InterruptedException e) {
|
||||
// Ignore
|
||||
}
|
||||
time--;
|
||||
@ -224,34 +224,34 @@ public class C {
|
||||
// getOnlinePlayers start
|
||||
getOnlinePlayers = Bukkit.class.getDeclaredMethod("getOnlinePlayers");
|
||||
if (getOnlinePlayers.getReturnType() != org.bukkit.entity.Player[].class) {
|
||||
for (final Method method : Bukkit.class.getDeclaredMethods()) {
|
||||
for (Method method : Bukkit.class.getDeclaredMethods()) {
|
||||
if (method.getReturnType() == org.bukkit.entity.Player[].class && method.getName().endsWith("getOnlinePlayers")) {
|
||||
getOnlinePlayers = method;
|
||||
}
|
||||
}
|
||||
}
|
||||
// getOnlinePlayers end
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
Log.warning(Player.class.getSimpleName() + "兼容性工具初始化失败 可能造成部分功能不可用!");
|
||||
}
|
||||
try {
|
||||
// getOfflinePlayer start
|
||||
try {
|
||||
gameProfileClass = Class.forName("net.minecraft.util.com.mojang.authlib.GameProfile");
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
try {
|
||||
gameProfileClass = Class.forName("com.mojang.authlib.GameProfile");
|
||||
} catch (final Exception e1) {
|
||||
} catch (Exception e1) {
|
||||
}
|
||||
}
|
||||
gameProfileConstructor = gameProfileClass.getDeclaredConstructor(new Class[] { UUID.class, String.class });
|
||||
gameProfileConstructor.setAccessible(true);
|
||||
final Class<? extends Server> craftServer = Bukkit.getServer().getClass();
|
||||
final Class<?> craftOfflinePlayer = Class.forName(craftServer.getName().replace("CraftServer", "CraftOfflinePlayer"));
|
||||
Class<? extends Server> craftServer = Bukkit.getServer().getClass();
|
||||
Class<?> craftOfflinePlayer = Class.forName(craftServer.getName().replace("CraftServer", "CraftOfflinePlayer"));
|
||||
craftOfflinePlayerConstructor = craftOfflinePlayer.getDeclaredConstructor(new Class[] { craftServer, gameProfileClass });
|
||||
craftOfflinePlayerConstructor.setAccessible(true);
|
||||
// getOfflinePlayer end
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
Log.debug(e);
|
||||
}
|
||||
}
|
||||
@ -266,12 +266,12 @@ public class C {
|
||||
* 玩家名称
|
||||
* @return {@link OfflinePlayer}
|
||||
*/
|
||||
public static OfflinePlayer getOfflinePlayer(final String playerName) {
|
||||
public static OfflinePlayer getOfflinePlayer(String playerName) {
|
||||
try {
|
||||
final Object gameProfile = gameProfileConstructor.newInstance(new Object[] { UUID.nameUUIDFromBytes(("OfflinePlayer:" + playerName).getBytes(Charsets.UTF_8)), playerName });
|
||||
final Object offlinePlayer = craftOfflinePlayerConstructor.newInstance(new Object[] { Bukkit.getServer(), gameProfile });
|
||||
Object gameProfile = gameProfileConstructor.newInstance(new Object[] { UUID.nameUUIDFromBytes(("OfflinePlayer:" + playerName).getBytes(Charsets.UTF_8)), playerName });
|
||||
Object offlinePlayer = craftOfflinePlayerConstructor.newInstance(new Object[] { Bukkit.getServer(), gameProfile });
|
||||
return (OfflinePlayer) offlinePlayer;
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
return Bukkit.getOfflinePlayer(playerName);
|
||||
}
|
||||
}
|
||||
@ -284,7 +284,7 @@ public class C {
|
||||
public static Collection<? extends org.bukkit.entity.Player> getOnlinePlayers() {
|
||||
try {
|
||||
return Arrays.asList((org.bukkit.entity.Player[]) getOnlinePlayers.invoke(null));
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
return Bukkit.getOnlinePlayers();
|
||||
}
|
||||
}
|
||||
@ -302,8 +302,8 @@ public class C {
|
||||
* @param subtitle
|
||||
* 子标题
|
||||
*/
|
||||
public static void broadcast(final String title, final String subtitle) {
|
||||
for (final org.bukkit.entity.Player player : Player.getOnlinePlayers()) {
|
||||
public static void broadcast(String title, String subtitle) {
|
||||
for (org.bukkit.entity.Player player : Player.getOnlinePlayers()) {
|
||||
send(player, title, subtitle);
|
||||
}
|
||||
}
|
||||
@ -322,8 +322,8 @@ public class C {
|
||||
* @param fadeOutTime
|
||||
* 淡出时间
|
||||
*/
|
||||
public static void broadcast(final String title, final String subtitle, final int fadeInTime, final int stayTime, final int fadeOutTime) {
|
||||
for (final org.bukkit.entity.Player player : Player.getOnlinePlayers()) {
|
||||
public static void broadcast(String title, String subtitle, int fadeInTime, int stayTime, int fadeOutTime) {
|
||||
for (org.bukkit.entity.Player player : Player.getOnlinePlayers()) {
|
||||
send(player, title, subtitle, fadeInTime, stayTime, fadeOutTime);
|
||||
}
|
||||
}
|
||||
@ -338,8 +338,8 @@ public class C {
|
||||
* @param subtitle
|
||||
* 子标题
|
||||
*/
|
||||
public static void broadcast(final World world, final String title, final String subtitle) {
|
||||
for (final org.bukkit.entity.Player player : Player.getOnlinePlayers()) {
|
||||
public static void broadcast(World world, String title, String subtitle) {
|
||||
for (org.bukkit.entity.Player player : Player.getOnlinePlayers()) {
|
||||
if (player.getWorld().getName().equalsIgnoreCase(world.getName())) {
|
||||
send(player, title, subtitle);
|
||||
}
|
||||
@ -354,12 +354,12 @@ public class C {
|
||||
* @throws Exception
|
||||
* 异常
|
||||
*/
|
||||
public static void reset(final org.bukkit.entity.Player recoverPlayer) throws Exception {
|
||||
public static void reset(org.bukkit.entity.Player recoverPlayer) throws Exception {
|
||||
// Send timings first
|
||||
final Object player = getHandle.invoke(recoverPlayer);
|
||||
final Object connection = playerConnection.get(player);
|
||||
final Object[] actions = packetActions.getEnumConstants();
|
||||
final Object packet = packetTitle.getConstructor(packetActions, nmsIChatBaseComponent).newInstance(actions[4], null);
|
||||
Object player = getHandle.invoke(recoverPlayer);
|
||||
Object connection = playerConnection.get(player);
|
||||
Object[] actions = packetActions.getEnumConstants();
|
||||
Object packet = packetTitle.getConstructor(packetActions, nmsIChatBaseComponent).newInstance(actions[4], null);
|
||||
sendPacket.invoke(connection, packet);
|
||||
}
|
||||
|
||||
@ -373,7 +373,7 @@ public class C {
|
||||
* @param subtitle
|
||||
* 子标题
|
||||
*/
|
||||
public static void send(final org.bukkit.entity.Player receivingPacket, final String title, final String subtitle) {
|
||||
public static void send(org.bukkit.entity.Player receivingPacket, String title, String subtitle) {
|
||||
send(receivingPacket, title, subtitle, 1, 2, 1);
|
||||
}
|
||||
|
||||
@ -393,19 +393,23 @@ public class C {
|
||||
* @param fadeOutTime
|
||||
* 淡出时间
|
||||
*/
|
||||
public static void send(final org.bukkit.entity.Player receivingPacket, final String title, final String subtitle, final int fadeInTime, final int stayTime, final int fadeOutTime) {
|
||||
public static void send(org.bukkit.entity.Player receivingPacket, String title, String subtitle, int fadeInTime, int stayTime, int fadeOutTime) {
|
||||
if (packetTitle != null) {
|
||||
try {
|
||||
// First reset previous settings
|
||||
reset(receivingPacket);
|
||||
// Send timings first
|
||||
final Object player = getHandle.invoke(receivingPacket);
|
||||
final Object connection = playerConnection.get(player);
|
||||
final Object[] actions = packetActions.getEnumConstants();
|
||||
Object player = getHandle.invoke(receivingPacket);
|
||||
Object connection = playerConnection.get(player);
|
||||
Object[] actions = packetActions.getEnumConstants();
|
||||
Object packet = null;
|
||||
// Send if set
|
||||
if ((fadeInTime != -1) && (fadeOutTime != -1) && (stayTime != -1)) {
|
||||
packet = packetTitle.getConstructor(packetActions, nmsIChatBaseComponent, Integer.TYPE, Integer.TYPE, Integer.TYPE).newInstance(actions[2], null, fadeInTime * 20, stayTime * 20, fadeOutTime * 20);
|
||||
packet = packetTitle.getConstructor(packetActions, nmsIChatBaseComponent, Integer.TYPE, Integer.TYPE, Integer.TYPE).newInstance(actions[2],
|
||||
null,
|
||||
fadeInTime * 20,
|
||||
stayTime * 20,
|
||||
fadeOutTime * 20);
|
||||
sendPacket.invoke(connection, packet);
|
||||
}
|
||||
// Send title
|
||||
@ -418,7 +422,7 @@ public class C {
|
||||
packet = packetTitle.getConstructor(packetActions, nmsIChatBaseComponent).newInstance(actions[1], serialized);
|
||||
sendPacket.invoke(connection, packet);
|
||||
}
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
Log.debug(e);
|
||||
}
|
||||
}
|
||||
|
@ -11,12 +11,12 @@ import org.bukkit.entity.Player;
|
||||
* @author 喵♂呜
|
||||
*/
|
||||
public class CommandArgument {
|
||||
private final CommandSender sender;
|
||||
private final Command command;
|
||||
private final String alias;
|
||||
private final String[] args;
|
||||
private CommandSender sender;
|
||||
private Command command;
|
||||
private String alias;
|
||||
private String[] args;
|
||||
|
||||
public CommandArgument(final CommandSender sender, final Command command, final String alias, final String[] args) {
|
||||
public CommandArgument(CommandSender sender, Command command, String alias, String[] args) {
|
||||
this.sender = sender;
|
||||
this.command = command;
|
||||
this.alias = alias;
|
||||
|
@ -27,24 +27,24 @@ public class CommandHelp {
|
||||
/**
|
||||
* 消息配置
|
||||
*/
|
||||
private final static String prefix = String.format("§6[§b%s§6] ", P.instance.getName());
|
||||
private final static String commandNotFound = prefix + "§c当前插件未注册任何子命令!";
|
||||
private final static String pageNotFound = prefix + "§c不存在的帮助页面 §b请输入 /%s help §e1-%s";
|
||||
private final static String helpTitle = String.format("§6========= %s §6插件帮助列表=========", prefix);
|
||||
private final static String helpBody = "§6/%1$s §a%2$s §e%3$s §6- §b%4$s";
|
||||
private final static String helpFooter = "§6查看更多的帮助页面 §b请输入 /%s help §e1-%s";
|
||||
private static String prefix = String.format("§6[§b%s§6] ", P.instance.getName());
|
||||
private static String commandNotFound = prefix + "§c当前插件未注册任何子命令!";
|
||||
private static String pageNotFound = prefix + "§c不存在的帮助页面 §b请输入 /%s help §e1-%s";
|
||||
private static String helpTitle = String.format("§6========= %s §6插件帮助列表=========", prefix);
|
||||
private static String helpBody = "§6/%1$s §a%2$s §e%3$s §6- §b%4$s";
|
||||
private static String helpFooter = "§6查看更多的帮助页面 §b请输入 /%s help §e1-%s";
|
||||
/**
|
||||
* 帮助页面每页行数
|
||||
*/
|
||||
private final static int LINES_PER_PAGE = 7;
|
||||
private static int LINES_PER_PAGE = 7;
|
||||
/**
|
||||
* 默认命令
|
||||
*/
|
||||
private final CommandInfo defCmd;
|
||||
private CommandInfo defCmd;
|
||||
/**
|
||||
* 已排序的命令列表
|
||||
*/
|
||||
private final List<CommandInfo> cmdlist;
|
||||
private List<CommandInfo> cmdlist;
|
||||
/**
|
||||
* 命令解析
|
||||
*/
|
||||
@ -52,11 +52,11 @@ public class CommandHelp {
|
||||
/**
|
||||
* 帮助页面数量
|
||||
*/
|
||||
private final int HELPPAGECOUNT;
|
||||
private int HELPPAGECOUNT;
|
||||
/**
|
||||
* 帮助列表缓存
|
||||
*/
|
||||
private final Map<String, String[]> cacheHelp = new HashMap<>();
|
||||
private Map<String, String[]> cacheHelp = new HashMap<>();
|
||||
|
||||
/**
|
||||
* 命令帮助
|
||||
@ -64,7 +64,7 @@ public class CommandHelp {
|
||||
* @param list
|
||||
* 子命令列表
|
||||
*/
|
||||
public CommandHelp(final Collection<? extends CommandInfo> list) {
|
||||
public CommandHelp(Collection<? extends CommandInfo> list) {
|
||||
this(null, list);
|
||||
}
|
||||
|
||||
@ -76,7 +76,7 @@ public class CommandHelp {
|
||||
* @param list
|
||||
* 子命令列表
|
||||
*/
|
||||
public CommandHelp(final CommandInfo defCmd, final Collection<? extends CommandInfo> list) {
|
||||
public CommandHelp(CommandInfo defCmd, Collection<? extends CommandInfo> list) {
|
||||
this.defCmd = defCmd;
|
||||
cmdlist = new LinkedList<>(list);
|
||||
Collections.sort(cmdlist, new CommandComparator());
|
||||
@ -92,10 +92,10 @@ public class CommandHelp {
|
||||
* 命令
|
||||
* @return 格式化后的字串
|
||||
*/
|
||||
public String formatCommand(final CommandInfo ci, final String label) {
|
||||
final String aliases = Arrays.toString(ci.getCommand().aliases());
|
||||
final String cmd = ci.getName() + (aliases.length() == 2 ? "" : "§7" + aliases);
|
||||
final Help help = ci.getHelp();
|
||||
public String formatCommand(CommandInfo ci, String label) {
|
||||
String aliases = Arrays.toString(ci.getCommand().aliases());
|
||||
String cmd = ci.getName() + (aliases.length() == 2 ? "" : "§7" + aliases);
|
||||
Help help = ci.getHelp();
|
||||
return String.format(helpBody, label, cmd, help.possibleArguments(), formatHelp(help.value()));
|
||||
}
|
||||
|
||||
@ -106,7 +106,7 @@ public class CommandHelp {
|
||||
* 参数
|
||||
* @return 解析后的帮助
|
||||
*/
|
||||
public String formatHelp(final String value) {
|
||||
public String formatHelp(String value) {
|
||||
if (helpParse != null) {
|
||||
return helpParse.parse(value);
|
||||
}
|
||||
@ -125,7 +125,7 @@ public class CommandHelp {
|
||||
* @param args
|
||||
* 参数
|
||||
*/
|
||||
public boolean send(final CommandSender sender, final Command command, final String label, final String[] args) {
|
||||
public boolean send(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (this.HELPPAGECOUNT == 0) {
|
||||
sender.sendMessage(commandNotFound);
|
||||
return true;
|
||||
@ -134,12 +134,12 @@ public class CommandHelp {
|
||||
try {
|
||||
page = Integer.parseInt(args[1]);
|
||||
page = page == 0 ? 1 : page;
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
// Ignore
|
||||
}
|
||||
final String helpkey = label + page;
|
||||
String helpkey = label + page;
|
||||
if (!cacheHelp.containsKey(helpkey)) {
|
||||
final List<String> helpList = new LinkedList<>();
|
||||
List<String> helpList = new LinkedList<>();
|
||||
if (page > this.HELPPAGECOUNT || page < 1) {
|
||||
// 帮助页面不存在
|
||||
helpList.add(String.format(pageNotFound, label, HELPPAGECOUNT));
|
||||
@ -149,8 +149,8 @@ public class CommandHelp {
|
||||
if (page == 1 && defCmd != null) {
|
||||
helpList.add(formatCommand(defCmd, label));
|
||||
}
|
||||
final int start = LINES_PER_PAGE * (page - 1);
|
||||
final int end = start + LINES_PER_PAGE;
|
||||
int start = LINES_PER_PAGE * (page - 1);
|
||||
int end = start + LINES_PER_PAGE;
|
||||
for (int i = start; i < end; i++) {
|
||||
if (this.cmdlist.size() > i) {
|
||||
// 帮助列表
|
||||
@ -172,7 +172,7 @@ public class CommandHelp {
|
||||
* @param helpParse
|
||||
* 帮助解析器
|
||||
*/
|
||||
public void setHelpParse(final CommandHelpParse helpParse) {
|
||||
public void setHelpParse(CommandHelpParse helpParse) {
|
||||
this.helpParse = helpParse;
|
||||
}
|
||||
|
||||
@ -184,7 +184,7 @@ public class CommandHelp {
|
||||
*/
|
||||
static class CommandComparator implements Comparator<CommandInfo> {
|
||||
@Override
|
||||
public int compare(final CommandInfo o1, final CommandInfo o2) {
|
||||
public int compare(CommandInfo o1, CommandInfo o2) {
|
||||
if (o1.getSort() > o2.getSort()) {
|
||||
return 1;
|
||||
} else if (o1.getSort() == o2.getSort()) {
|
||||
|
@ -40,24 +40,24 @@ import pw.yumc.YumCore.commands.interfaces.CommandHelpParse;
|
||||
* @author 喵♂呜
|
||||
*/
|
||||
public class CommandManager implements TabExecutor {
|
||||
private final static String argumentTypeError = "注解命令方法 %s 位于 %s 的参数错误 第一个参数应实现 CommandSender 接口!";
|
||||
private final static String returnTypeError = "注解命令补全 %s 位于 %s 的返回值错误 应实现 List 接口!";
|
||||
private static String argumentTypeError = "注解命令方法 %s 位于 %s 的参数错误 第一个参数应实现 CommandSender 接口!";
|
||||
private static String returnTypeError = "注解命令补全 %s 位于 %s 的返回值错误 应实现 List 接口!";
|
||||
private static Constructor<PluginCommand> PluginCommandConstructor;
|
||||
private static Map<String, Command> knownCommands;
|
||||
private static Map<String, Plugin> lookupNames;
|
||||
static {
|
||||
try {
|
||||
final PluginManager pluginManager = Bukkit.getPluginManager();
|
||||
PluginManager pluginManager = Bukkit.getPluginManager();
|
||||
|
||||
final Field lookupNamesField = pluginManager.getClass().getDeclaredField("lookupNames");
|
||||
Field lookupNamesField = pluginManager.getClass().getDeclaredField("lookupNames");
|
||||
lookupNamesField.setAccessible(true);
|
||||
lookupNames = (Map<String, Plugin>) lookupNamesField.get(pluginManager);
|
||||
|
||||
final Field commandMapField = pluginManager.getClass().getDeclaredField("commandMap");
|
||||
Field commandMapField = pluginManager.getClass().getDeclaredField("commandMap");
|
||||
commandMapField.setAccessible(true);
|
||||
final SimpleCommandMap commandMap = (SimpleCommandMap) commandMapField.get(pluginManager);
|
||||
SimpleCommandMap commandMap = (SimpleCommandMap) commandMapField.get(pluginManager);
|
||||
|
||||
final Field knownCommandsField = commandMap.getClass().getDeclaredField("knownCommands");
|
||||
Field knownCommandsField = commandMap.getClass().getDeclaredField("knownCommands");
|
||||
knownCommandsField.setAccessible(true);
|
||||
knownCommands = (Map<String, Command>) knownCommandsField.get(commandMap);
|
||||
|
||||
@ -70,7 +70,7 @@ public class CommandManager implements TabExecutor {
|
||||
/**
|
||||
* 插件实例类
|
||||
*/
|
||||
private final static JavaPlugin plugin = P.instance;
|
||||
private static JavaPlugin plugin = P.instance;
|
||||
/**
|
||||
* 默认命令
|
||||
*/
|
||||
@ -78,19 +78,19 @@ public class CommandManager implements TabExecutor {
|
||||
/**
|
||||
* 命令列表
|
||||
*/
|
||||
private final Set<CommandInfo> cmds = new HashSet<>();
|
||||
private Set<CommandInfo> cmds = new HashSet<>();
|
||||
/**
|
||||
* Tab列表
|
||||
*/
|
||||
private final Set<CommandTabInfo> tabs = new HashSet<>();
|
||||
private Set<CommandTabInfo> tabs = new HashSet<>();
|
||||
/**
|
||||
* 命令缓存列表
|
||||
*/
|
||||
private final Map<String, CommandInfo> cmdCache = new HashMap<>();
|
||||
private Map<String, CommandInfo> cmdCache = new HashMap<>();
|
||||
/**
|
||||
* 命令名称缓存
|
||||
*/
|
||||
private final List<String> cmdNameCache = new ArrayList<>();
|
||||
private List<String> cmdNameCache = new ArrayList<>();
|
||||
/**
|
||||
* 命令帮助
|
||||
*/
|
||||
@ -106,7 +106,7 @@ public class CommandManager implements TabExecutor {
|
||||
* @param name
|
||||
* 注册的命令
|
||||
*/
|
||||
public CommandManager(final String name) {
|
||||
public CommandManager(String name) {
|
||||
cmd = plugin.getCommand(name);
|
||||
if (cmd == null) {
|
||||
try {
|
||||
@ -130,20 +130,20 @@ public class CommandManager implements TabExecutor {
|
||||
* @param executor
|
||||
* 命令执行类
|
||||
*/
|
||||
public CommandManager(final String name, final CommandExecutor... executor) {
|
||||
public CommandManager(String name, CommandExecutor... executor) {
|
||||
this(name);
|
||||
register(executor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onCommand(final CommandSender sender, final Command command, final String label, final String[] args) {
|
||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
||||
if (args.length == 0) {
|
||||
if (defCmd != null) {
|
||||
return defCmd.execute(new CommandArgument(sender, command, label, args));
|
||||
}
|
||||
return help.send(sender, command, label, args);
|
||||
}
|
||||
final String subcmd = args[0].toLowerCase();
|
||||
String subcmd = args[0].toLowerCase();
|
||||
if (subcmd.equalsIgnoreCase("help")) {
|
||||
return help.send(sender, command, label, args);
|
||||
}
|
||||
@ -151,13 +151,13 @@ public class CommandManager implements TabExecutor {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> onTabComplete(final CommandSender sender, final Command command, final String alias, final String[] args) {
|
||||
final List<String> completions = new ArrayList<>();
|
||||
final String token = args[args.length - 1];
|
||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||
List<String> completions = new ArrayList<>();
|
||||
String token = args[args.length - 1];
|
||||
if (args.length == 1) {
|
||||
StringUtil.copyPartialMatches(args[0], cmdNameCache, completions);
|
||||
} else if (args.length >= 2) {
|
||||
for (final CommandTabInfo tab : tabs) {
|
||||
for (CommandTabInfo tab : tabs) {
|
||||
StringUtil.copyPartialMatches(token, tab.execute(sender, command, token, args), completions);
|
||||
}
|
||||
StringUtil.copyPartialMatches(token, getPlayerTabComplete(sender, command, alias, args), completions);
|
||||
@ -172,10 +172,10 @@ public class CommandManager implements TabExecutor {
|
||||
* @param clazzs
|
||||
* 子命令处理类
|
||||
*/
|
||||
public void register(final CommandExecutor... clazzs) {
|
||||
for (final CommandExecutor clazz : clazzs) {
|
||||
final Method[] methods = clazz.getClass().getDeclaredMethods();
|
||||
for (final Method method : methods) {
|
||||
public void register(CommandExecutor... clazzs) {
|
||||
for (CommandExecutor clazz : clazzs) {
|
||||
Method[] methods = clazz.getClass().getDeclaredMethods();
|
||||
for (Method method : methods) {
|
||||
if (registerCommand(method, clazz)) {
|
||||
continue;
|
||||
}
|
||||
@ -192,7 +192,7 @@ public class CommandManager implements TabExecutor {
|
||||
* @param helpParse
|
||||
* 帮助解析器
|
||||
*/
|
||||
public void setHelpParse(final CommandHelpParse helpParse) {
|
||||
public void setHelpParse(CommandHelpParse helpParse) {
|
||||
help.setHelpParse(helpParse);
|
||||
}
|
||||
|
||||
@ -201,7 +201,7 @@ public class CommandManager implements TabExecutor {
|
||||
*/
|
||||
private void buildCmdNameCache() {
|
||||
cmdNameCache.clear();
|
||||
for (final CommandInfo cmd : cmds) {
|
||||
for (CommandInfo cmd : cmds) {
|
||||
cmdNameCache.add(cmd.getName());
|
||||
cmdNameCache.addAll(Arrays.asList(cmd.getCommand().aliases()));
|
||||
}
|
||||
@ -215,9 +215,9 @@ public class CommandManager implements TabExecutor {
|
||||
* 子命令
|
||||
* @return 命令信息
|
||||
*/
|
||||
private CommandInfo getByCache(final String subcmd) {
|
||||
private CommandInfo getByCache(String subcmd) {
|
||||
if (!cmdCache.containsKey(subcmd)) {
|
||||
for (final CommandInfo cmdinfo : cmds) {
|
||||
for (CommandInfo cmdinfo : cmds) {
|
||||
if (cmdinfo.isValid(subcmd)) {
|
||||
cmdCache.put(subcmd, cmdinfo);
|
||||
break;
|
||||
@ -243,12 +243,12 @@ public class CommandManager implements TabExecutor {
|
||||
* 数组
|
||||
* @return 在线玩家数组
|
||||
*/
|
||||
private List<String> getPlayerTabComplete(final CommandSender sender, final Command command, final String alias, final String[] args) {
|
||||
final String lastWord = args[args.length - 1];
|
||||
final Player senderPlayer = sender instanceof Player ? (Player) sender : null;
|
||||
final List<String> matchedPlayers = new ArrayList<>();
|
||||
for (final Player player : C.Player.getOnlinePlayers()) {
|
||||
final String name = player.getName();
|
||||
private List<String> getPlayerTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||
String lastWord = args[args.length - 1];
|
||||
Player senderPlayer = sender instanceof Player ? (Player) sender : null;
|
||||
List<String> matchedPlayers = new ArrayList<>();
|
||||
for (Player player : C.Player.getOnlinePlayers()) {
|
||||
String name = player.getName();
|
||||
if ((senderPlayer == null || senderPlayer.canSee(player)) && StringUtil.startsWithIgnoreCase(name, lastWord)) {
|
||||
matchedPlayers.add(name);
|
||||
}
|
||||
@ -265,8 +265,8 @@ public class CommandManager implements TabExecutor {
|
||||
* 数组开始位置
|
||||
* @return 转移后的数组字符串
|
||||
*/
|
||||
private String[] moveStrings(final String[] args, final int start) {
|
||||
final String[] ret = new String[args.length - start];
|
||||
private String[] moveStrings(String[] args, int start) {
|
||||
String[] ret = new String[args.length - start];
|
||||
System.arraycopy(args, start, ret, 0, ret.length);
|
||||
return ret;
|
||||
}
|
||||
@ -280,10 +280,10 @@ public class CommandManager implements TabExecutor {
|
||||
* 调用对象
|
||||
* @return 是否成功
|
||||
*/
|
||||
private boolean registerCommand(final Method method, final CommandExecutor clazz) {
|
||||
final CommandInfo ci = CommandInfo.parse(method, clazz);
|
||||
private boolean registerCommand(Method method, CommandExecutor clazz) {
|
||||
CommandInfo ci = CommandInfo.parse(method, clazz);
|
||||
if (ci != null) {
|
||||
final Class<?>[] params = method.getParameterTypes();
|
||||
Class<?>[] params = method.getParameterTypes();
|
||||
Log.d("命令 %s 参数类型: %s", ci.getName(), Arrays.toString(params));
|
||||
if (params.length > 0 && params[0].isAssignableFrom(CommandSender.class)) {
|
||||
if (method.getReturnType() == boolean.class) {
|
||||
@ -308,8 +308,8 @@ public class CommandManager implements TabExecutor {
|
||||
* 调用对象
|
||||
* @return 是否成功
|
||||
*/
|
||||
private boolean registerTab(final Method method, final CommandExecutor clazz) {
|
||||
final CommandTabInfo ti = CommandTabInfo.parse(method, clazz);
|
||||
private boolean registerTab(Method method, CommandExecutor clazz) {
|
||||
CommandTabInfo ti = CommandTabInfo.parse(method, clazz);
|
||||
if (ti != null) {
|
||||
if (method.getReturnType().equals(List.class)) {
|
||||
tabs.add(ti);
|
||||
|
@ -92,7 +92,7 @@ public @interface Cmd {
|
||||
UNKNOW("未知");
|
||||
private String name;
|
||||
|
||||
private Executor(final String name) {
|
||||
private Executor(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
@ -103,7 +103,7 @@ public @interface Cmd {
|
||||
* 命令执行者
|
||||
* @return {@link Executor}
|
||||
*/
|
||||
public static Executor valueOf(final CommandSender sender) {
|
||||
public static Executor valueOf(CommandSender sender) {
|
||||
if (sender instanceof Player) {
|
||||
return Executor.PLAYER;
|
||||
} else if (sender instanceof ConsoleCommandSender) {
|
||||
|
@ -8,15 +8,15 @@ package pw.yumc.YumCore.commands.exception;
|
||||
*/
|
||||
public class CommandArgumentException extends CommandException {
|
||||
|
||||
public CommandArgumentException(final Exception e) {
|
||||
public CommandArgumentException(Exception e) {
|
||||
super(e);
|
||||
}
|
||||
|
||||
public CommandArgumentException(final String string) {
|
||||
public CommandArgumentException(String string) {
|
||||
super(string);
|
||||
}
|
||||
|
||||
public CommandArgumentException(final String string, final Exception e) {
|
||||
public CommandArgumentException(String string, Exception e) {
|
||||
super(string, e);
|
||||
}
|
||||
}
|
||||
|
@ -8,15 +8,15 @@ package pw.yumc.YumCore.commands.exception;
|
||||
*/
|
||||
public class CommandException extends RuntimeException {
|
||||
|
||||
public CommandException(final Exception e) {
|
||||
public CommandException(Exception e) {
|
||||
super(e);
|
||||
}
|
||||
|
||||
public CommandException(final String string) {
|
||||
public CommandException(String string) {
|
||||
super(string);
|
||||
}
|
||||
|
||||
public CommandException(final String string, final Exception e) {
|
||||
public CommandException(String string, Exception e) {
|
||||
super(string, e);
|
||||
}
|
||||
|
||||
|
@ -8,15 +8,15 @@ package pw.yumc.YumCore.commands.exception;
|
||||
*/
|
||||
public class CommandParseException extends CommandException {
|
||||
|
||||
public CommandParseException(final Exception e) {
|
||||
public CommandParseException(Exception e) {
|
||||
super(e);
|
||||
}
|
||||
|
||||
public CommandParseException(final String string) {
|
||||
public CommandParseException(String string) {
|
||||
super(string);
|
||||
}
|
||||
|
||||
public CommandParseException(final String string, final Exception e) {
|
||||
public CommandParseException(String string, Exception e) {
|
||||
super(string, e);
|
||||
}
|
||||
}
|
||||
|
@ -28,26 +28,26 @@ import pw.yumc.YumCore.commands.exception.CommandParseException;
|
||||
* @author 喵♂呜
|
||||
*/
|
||||
public class CommandInfo {
|
||||
public static final CommandInfo Unknow = new CommandInfo();
|
||||
private static final String onlyExecutor = "§c当前命令仅允许 §b%s §c执行!";
|
||||
private static final String losePerm = "§c你需要有 %s 的权限才能执行此命令!";
|
||||
private static final String argErr = "§c参数错误: §4%s";
|
||||
private static final String cmdErr = "§6错误原因: §4命令参数不正确!";
|
||||
private static final String cmdUse = "§6使用方法: §e/%s %s %s";
|
||||
private static final String cmdDes = "§6命令描述: §3%s";
|
||||
private final Object origin;
|
||||
private final Method method;
|
||||
private final String name;
|
||||
private final List<String> aliases;
|
||||
private final List<Executor> executors;
|
||||
private final String executorStr;
|
||||
private final boolean async;
|
||||
private final Cmd command;
|
||||
private final Help help;
|
||||
private final int sort;
|
||||
private final CommandParse parse;
|
||||
public static CommandInfo Unknow = new CommandInfo();
|
||||
private static String onlyExecutor = "§c当前命令仅允许 §b%s §c执行!";
|
||||
private static String losePerm = "§c你需要有 %s 的权限才能执行此命令!";
|
||||
private static String argErr = "§c参数错误: §4%s";
|
||||
private static String cmdErr = "§6错误原因: §4命令参数不正确!";
|
||||
private static String cmdUse = "§6使用方法: §e/%s %s %s";
|
||||
private static String cmdDes = "§6命令描述: §3%s";
|
||||
private Object origin;
|
||||
private Method method;
|
||||
private String name;
|
||||
private List<String> aliases;
|
||||
private List<Executor> executors;
|
||||
private String executorStr;
|
||||
private boolean async;
|
||||
private Cmd command;
|
||||
private Help help;
|
||||
private int sort;
|
||||
private CommandParse parse;
|
||||
|
||||
public CommandInfo(final Method method, final Object origin, final Cmd command, final Help help, final boolean async, final int sort, final CommandParse parse) {
|
||||
public CommandInfo(Method method, Object origin, Cmd command, Help help, boolean async, int sort, CommandParse parse) {
|
||||
this.method = method;
|
||||
this.origin = origin;
|
||||
this.name = "".equals(command.value()) ? method.getName().toLowerCase() : command.value();
|
||||
@ -84,20 +84,20 @@ public class CommandInfo {
|
||||
* 源对象
|
||||
* @return {@link CommandInfo}
|
||||
*/
|
||||
public static CommandInfo parse(final Method method, final Object origin) {
|
||||
final Cmd command = method.getAnnotation(Cmd.class);
|
||||
public static CommandInfo parse(Method method, Object origin) {
|
||||
Cmd command = method.getAnnotation(Cmd.class);
|
||||
if (command != null) {
|
||||
final Help help = method.getAnnotation(Help.class);
|
||||
final Async async = method.getAnnotation(Async.class);
|
||||
final Sort sort = method.getAnnotation(Sort.class);
|
||||
final CommandParse cp = CommandParse.get(method);
|
||||
Help help = method.getAnnotation(Help.class);
|
||||
Async async = method.getAnnotation(Async.class);
|
||||
Sort sort = method.getAnnotation(Sort.class);
|
||||
CommandParse cp = CommandParse.get(method);
|
||||
return new CommandInfo(method, origin, command, help != null ? help : Help.DEFAULT, async != null, sort != null ? sort.value() : 50, cp);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(final Object obj) {
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
@ -119,12 +119,12 @@ public class CommandInfo {
|
||||
return false;
|
||||
}
|
||||
if (check(cmdArgs)) {
|
||||
final Runnable runnable = new Runnable() {
|
||||
Runnable runnable = new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
method.invoke(origin, parse.parse(cmdArgs));
|
||||
} catch (final CommandParseException | CommandArgumentException e) {
|
||||
} catch (CommandParseException | CommandArgumentException e) {
|
||||
Log.toSender(cmdArgs.getSender(), argErr, e.getMessage());
|
||||
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
|
||||
throw new CommandException(e);
|
||||
@ -187,7 +187,7 @@ public class CommandInfo {
|
||||
* 需验证命令
|
||||
* @return 是否匹配
|
||||
*/
|
||||
public boolean isValid(final String cmd) {
|
||||
public boolean isValid(String cmd) {
|
||||
return name.equalsIgnoreCase(cmd) || aliases.contains(cmd);
|
||||
}
|
||||
|
||||
@ -198,12 +198,12 @@ public class CommandInfo {
|
||||
* 命令信息
|
||||
* @return 是否验证通过
|
||||
*/
|
||||
private boolean check(final CommandArgument cmdArgs) {
|
||||
final CommandSender sender = cmdArgs.getSender();
|
||||
private boolean check(CommandArgument cmdArgs) {
|
||||
CommandSender sender = cmdArgs.getSender();
|
||||
return checkSender(sender) && checkArgs(sender, cmdArgs) && checkPerm(sender);
|
||||
}
|
||||
|
||||
private boolean checkArgs(final CommandSender sender, final CommandArgument cmdArgs) {
|
||||
private boolean checkArgs(CommandSender sender, CommandArgument cmdArgs) {
|
||||
if (cmdArgs.getArgs().length < command.minimumArguments()) {
|
||||
Log.toSender(sender, cmdErr);
|
||||
Log.toSender(sender, String.format(cmdUse, cmdArgs.getAlias(), getName(), help.possibleArguments()));
|
||||
@ -213,8 +213,8 @@ public class CommandInfo {
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean checkPerm(final CommandSender sender) {
|
||||
final String perm = command.permission();
|
||||
private boolean checkPerm(CommandSender sender) {
|
||||
String perm = command.permission();
|
||||
if (perm != null && !"".equals(perm) && !sender.hasPermission(perm)) {
|
||||
Log.toSender(sender, String.format(losePerm, perm));
|
||||
return false;
|
||||
@ -222,7 +222,7 @@ public class CommandInfo {
|
||||
return true;
|
||||
}
|
||||
|
||||
private boolean checkSender(final CommandSender sender) {
|
||||
private boolean checkSender(CommandSender sender) {
|
||||
if (!executors.contains(Executor.ALL) && !executors.contains(Executor.valueOf(sender))) {
|
||||
Log.toSender(sender, String.format(onlyExecutor, executorStr));
|
||||
return false;
|
||||
@ -230,9 +230,9 @@ public class CommandInfo {
|
||||
return true;
|
||||
}
|
||||
|
||||
private String eS(final List<Executor> executors) {
|
||||
final StringBuilder str = new StringBuilder();
|
||||
for (final Executor executor : executors) {
|
||||
private String eS(List<Executor> executors) {
|
||||
StringBuilder str = new StringBuilder();
|
||||
for (Executor executor : executors) {
|
||||
str.append(executor.getName());
|
||||
str.append(", ");
|
||||
}
|
||||
|
@ -19,10 +19,10 @@ import pw.yumc.YumCore.commands.exception.CommandException;
|
||||
* @author 喵♂呜
|
||||
*/
|
||||
public class CommandTabInfo {
|
||||
private final Object origin;
|
||||
private final Method method;
|
||||
private Object origin;
|
||||
private Method method;
|
||||
|
||||
public CommandTabInfo(final Method method, final Object origin) {
|
||||
public CommandTabInfo(Method method, Object origin) {
|
||||
this.method = method;
|
||||
this.origin = origin;
|
||||
}
|
||||
@ -36,8 +36,8 @@ public class CommandTabInfo {
|
||||
* 对象
|
||||
* @return {@link CommandTabInfo}
|
||||
*/
|
||||
public static CommandTabInfo parse(final Method method, final Object origin) {
|
||||
final Tab tab = method.getAnnotation(Tab.class);
|
||||
public static CommandTabInfo parse(Method method, Object origin) {
|
||||
Tab tab = method.getAnnotation(Tab.class);
|
||||
if (tab != null) {
|
||||
return new CommandTabInfo(method, origin);
|
||||
}
|
||||
@ -45,7 +45,7 @@ public class CommandTabInfo {
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(final Object obj) {
|
||||
public boolean equals(Object obj) {
|
||||
if (this == obj) {
|
||||
return true;
|
||||
}
|
||||
@ -69,8 +69,8 @@ public class CommandTabInfo {
|
||||
* @return Tab补全信息
|
||||
*/
|
||||
@SuppressWarnings("unchecked")
|
||||
public List<String> execute(final CommandSender sender, final org.bukkit.command.Command command, final String label, final String[] args) {
|
||||
final CommandArgument cmdArgs = new CommandArgument(sender, command, label, args);
|
||||
public List<String> execute(CommandSender sender, org.bukkit.command.Command command, String label, String[] args) {
|
||||
CommandArgument cmdArgs = new CommandArgument(sender, command, label, args);
|
||||
try {
|
||||
return (List<String>) method.invoke(origin, cmdArgs);
|
||||
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
|
||||
|
@ -36,20 +36,20 @@ import pw.yumc.YumCore.config.yaml.BukkitRepresenter;
|
||||
* @author 喵♂呜
|
||||
*/
|
||||
public abstract class AbstractConfig extends YamlConfiguration {
|
||||
private static final String CONTENT_NOT_BE_NULL = "内容不能为 null";
|
||||
private static final String TOP_KEY_MUST_BE_MAP = "顶层键值必须是Map.";
|
||||
private static String CONTENT_NOT_BE_NULL = "内容不能为 null";
|
||||
private static String TOP_KEY_MUST_BE_MAP = "顶层键值必须是Map.";
|
||||
|
||||
protected static final Charset UTF_8 = Charset.forName("UTF-8");
|
||||
protected static Charset UTF_8 = Charset.forName("UTF-8");
|
||||
|
||||
protected static final String FILE_NOT_BE_NULL = "文件不能为 NULL";
|
||||
protected static final String CREATE_NEW_CONFIG = "配置: 创建新的文件 %s ...";
|
||||
protected static final String newLine = "\n";
|
||||
protected static String FILE_NOT_BE_NULL = "文件不能为 NULL";
|
||||
protected static String CREATE_NEW_CONFIG = "配置: 创建新的文件 %s ...";
|
||||
protected static String newLine = "\n";
|
||||
|
||||
protected static Plugin plugin = P.instance;
|
||||
|
||||
protected final DumperOptions yamlOptions = new DumperOptions();
|
||||
protected final Representer yamlRepresenter = new BukkitRepresenter();
|
||||
protected final Yaml yamlz = new Yaml(new BukkitConstructor(), yamlRepresenter, yamlOptions);
|
||||
protected DumperOptions yamlOptions = new DumperOptions();
|
||||
protected Representer yamlRepresenter = new BukkitRepresenter();
|
||||
protected Yaml yamlz = new Yaml(new BukkitConstructor(), yamlRepresenter, yamlOptions);
|
||||
|
||||
/**
|
||||
* 配置文件内容MAP
|
||||
@ -69,16 +69,16 @@ public abstract class AbstractConfig extends YamlConfiguration {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load(final File file) throws FileNotFoundException, IOException, InvalidConfigurationException {
|
||||
public void load(File file) throws FileNotFoundException, IOException, InvalidConfigurationException {
|
||||
Validate.notNull(file, FILE_NOT_BE_NULL);
|
||||
final FileInputStream stream = new FileInputStream(file);
|
||||
FileInputStream stream = new FileInputStream(file);
|
||||
load(new InputStreamReader(stream, UTF_8));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void load(final Reader reader) throws IOException, InvalidConfigurationException {
|
||||
final BufferedReader input = reader instanceof BufferedReader ? (BufferedReader) reader : new BufferedReader(reader);
|
||||
final StringBuilder builder = new StringBuilder();
|
||||
public void load(Reader reader) throws IOException, InvalidConfigurationException {
|
||||
BufferedReader input = reader instanceof BufferedReader ? (BufferedReader) reader : new BufferedReader(reader);
|
||||
StringBuilder builder = new StringBuilder();
|
||||
try {
|
||||
String line;
|
||||
while ((line = input.readLine()) != null) {
|
||||
@ -92,16 +92,16 @@ public abstract class AbstractConfig extends YamlConfiguration {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadFromString(final String contents) throws InvalidConfigurationException {
|
||||
public void loadFromString(String contents) throws InvalidConfigurationException {
|
||||
Validate.notNull(contents, CONTENT_NOT_BE_NULL);
|
||||
try {
|
||||
contentsMap = (Map) yamlz.load(contents);
|
||||
} catch (final YAMLException e) {
|
||||
} catch (YAMLException e) {
|
||||
throw new InvalidConfigurationException(e);
|
||||
} catch (final ClassCastException e) {
|
||||
} catch (ClassCastException e) {
|
||||
throw new InvalidConfigurationException(TOP_KEY_MUST_BE_MAP);
|
||||
}
|
||||
final String header = parseHeader(contents);
|
||||
String header = parseHeader(contents);
|
||||
if (header.length() > 0) {
|
||||
options().header(header);
|
||||
}
|
||||
@ -111,14 +111,14 @@ public abstract class AbstractConfig extends YamlConfiguration {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save(final File file) throws IOException {
|
||||
public void save(File file) throws IOException {
|
||||
Validate.notNull(file, FILE_NOT_BE_NULL);
|
||||
Files.createParentDirs(file);
|
||||
if (!file.exists()) {
|
||||
file.createNewFile();
|
||||
Log.info(String.format(CREATE_NEW_CONFIG, file.toPath()));
|
||||
}
|
||||
final Writer writer = new OutputStreamWriter(new FileOutputStream(file), UTF_8);
|
||||
Writer writer = new OutputStreamWriter(new FileOutputStream(file), UTF_8);
|
||||
try {
|
||||
writer.write(data);
|
||||
} finally {
|
||||
@ -131,7 +131,7 @@ public abstract class AbstractConfig extends YamlConfiguration {
|
||||
yamlOptions.setIndent(options().indent());
|
||||
yamlOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
|
||||
yamlRepresenter.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
|
||||
final String header = buildHeader();
|
||||
String header = buildHeader();
|
||||
String dump = yamlz.dump(getValues(false));
|
||||
if (dump.equals(BLANK_CONFIG)) {
|
||||
dump = "";
|
||||
|
@ -10,23 +10,23 @@ import org.yaml.snakeyaml.DumperOptions;
|
||||
|
||||
public class CommentConfig extends AbstractConfig {
|
||||
// 新增保留注释字段
|
||||
protected static final String commentPrefixSymbol = "'注释 ";
|
||||
protected static final String commentSuffixSymbol = "': 注释";
|
||||
protected static String commentPrefixSymbol = "'注释 ";
|
||||
protected static String commentSuffixSymbol = "': 注释";
|
||||
|
||||
protected static final String fromRegex = "( {0,})(#.*)";
|
||||
protected static final Pattern fromPattern = Pattern.compile(fromRegex);
|
||||
protected static String fromRegex = "( {0,})(#.*)";
|
||||
protected static Pattern fromPattern = Pattern.compile(fromRegex);
|
||||
|
||||
protected static final String toRegex = "( {0,})(- ){0,}" + "(" + commentPrefixSymbol + ")" + "(#.*)" + "(" + commentSuffixSymbol + ")";
|
||||
protected static final Pattern toPattern = Pattern.compile(toRegex);
|
||||
protected static String toRegex = "( {0,})(- ){0,}" + "(" + commentPrefixSymbol + ")" + "(#.*)" + "(" + commentSuffixSymbol + ")";
|
||||
protected static Pattern toPattern = Pattern.compile(toRegex);
|
||||
|
||||
protected static final Pattern countSpacePattern = Pattern.compile("( {0,})(- ){0,}(.*)");
|
||||
protected static Pattern countSpacePattern = Pattern.compile("( {0,})(- ){0,}(.*)");
|
||||
|
||||
protected static final int commentSplitWidth = 90;
|
||||
protected static int commentSplitWidth = 90;
|
||||
|
||||
private static String[] split(final String string, final int partLength) {
|
||||
final String[] array = new String[string.length() / partLength + 1];
|
||||
private static String[] split(String string, int partLength) {
|
||||
String[] array = new String[string.length() / partLength + 1];
|
||||
for (int i = 0; i < array.length; i++) {
|
||||
final int beginIndex = i * partLength;
|
||||
int beginIndex = i * partLength;
|
||||
int endIndex = beginIndex + partLength;
|
||||
if (endIndex > string.length()) {
|
||||
endIndex = string.length();
|
||||
@ -37,15 +37,15 @@ public class CommentConfig extends AbstractConfig {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadFromString(final String contents) throws InvalidConfigurationException {
|
||||
final String[] parts = contents.split(newLine);
|
||||
final List<String> lastComments = new ArrayList<>();
|
||||
final StringBuilder builder = new StringBuilder();
|
||||
for (final String part : parts) {
|
||||
public void loadFromString(String contents) throws InvalidConfigurationException {
|
||||
String[] parts = contents.split(newLine);
|
||||
List<String> lastComments = new ArrayList<>();
|
||||
StringBuilder builder = new StringBuilder();
|
||||
for (String part : parts) {
|
||||
Matcher matcher = fromPattern.matcher(part);
|
||||
if (matcher.find()) {
|
||||
final String originComment = matcher.group(2);
|
||||
final String[] splitComments = split(originComment, commentSplitWidth);
|
||||
String originComment = matcher.group(2);
|
||||
String[] splitComments = split(originComment, commentSplitWidth);
|
||||
for (int i = 0; i < splitComments.length; i++) {
|
||||
String comment = splitComments[i];
|
||||
if (i == 0) {
|
||||
@ -57,7 +57,7 @@ public class CommentConfig extends AbstractConfig {
|
||||
} else {
|
||||
matcher = countSpacePattern.matcher(part);
|
||||
if (matcher.find() && !lastComments.isEmpty()) {
|
||||
for (final String comment : lastComments) {
|
||||
for (String comment : lastComments) {
|
||||
builder.append(matcher.group(1));
|
||||
builder.append(this.checkNull(matcher.group(2)));
|
||||
builder.append(commentPrefixSymbol);
|
||||
@ -79,16 +79,16 @@ public class CommentConfig extends AbstractConfig {
|
||||
yamlOptions.setIndent(options().indent());
|
||||
yamlOptions.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
|
||||
yamlRepresenter.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK);
|
||||
final String header = buildHeader();
|
||||
String header = buildHeader();
|
||||
String dump = yamlz.dump(getValues(false));
|
||||
if (dump.equals(BLANK_CONFIG)) {
|
||||
dump = "";
|
||||
}
|
||||
final String contents = header + dump;
|
||||
final StringBuilder savcontent = new StringBuilder();
|
||||
final String[] parts = contents.split(newLine);
|
||||
String contents = header + dump;
|
||||
StringBuilder savcontent = new StringBuilder();
|
||||
String[] parts = contents.split(newLine);
|
||||
for (String part : parts) {
|
||||
final Matcher matcher = toPattern.matcher(part);
|
||||
Matcher matcher = toPattern.matcher(part);
|
||||
if (matcher.find() && matcher.groupCount() == 5) {
|
||||
part = this.checkNull(matcher.group(1)) + matcher.group(4);
|
||||
}
|
||||
@ -106,7 +106,7 @@ public class CommentConfig extends AbstractConfig {
|
||||
* 检查字符串
|
||||
* @return 返回非null字符串
|
||||
*/
|
||||
private String checkNull(final String string) {
|
||||
private String checkNull(String string) {
|
||||
return string == null ? "" : string;
|
||||
}
|
||||
}
|
@ -32,26 +32,26 @@ import pw.yumc.YumCore.bukkit.Log;
|
||||
*/
|
||||
@SuppressWarnings({ "unchecked" })
|
||||
public class FileConfig extends AbstractConfig {
|
||||
protected static final String VERSION = "Version";
|
||||
protected static String VERSION = "Version";
|
||||
|
||||
private static final char ALT_COLOR_CHAR = '&';
|
||||
private static final String DEFAULT = "config.yml";
|
||||
private static final String DATA_FORMANT = "yyyyMMddHHmmss";
|
||||
private static final String CONFIG_BACKUP = "配置: %s 已备份为 %s !";
|
||||
private static final String CONFIG_UPDATED = "配置: %s 升级成功 版本 %s !";
|
||||
private static final String CONFIG_OVERRIDE = "配置: %s 将覆盖原有字段数据...";
|
||||
private static final String CONFIG_NOT_FOUND = "配置: 文件 %s 不存在!";
|
||||
private static final String CONFIG_READ_ERROR = "配置: %s 读取错误...";
|
||||
private static final String CONFIG_SAVE_ERROR = "配置: %s 保存错误...";
|
||||
private static final String CONFIG_UPDATE_WARN = "配置: %s 版本 %s 过低 正在升级到 %s ...";
|
||||
private static final String CONFIG_CREATE_ERROR = "配置: %s 创建失败...";
|
||||
private static final String CONFIG_FORMAT_ERROR = "配置: %s 格式错误...";
|
||||
private static final String CONFIG_BACKUP_ERROR = "配置: %s 备份失败 异常: %s !";
|
||||
private static final String CONFIG_UPDATE_VALUE = "配置: 更新字段 %s 的值为 %s ...";
|
||||
private static final String CONFIG_BACKUP_AND_RESET = "配置: %s 格式错误 已备份为 %s 并恢复默认配置!";
|
||||
private static final String CONFIG_NOT_FOUND_IN_JAR = "配置: 从插件内部未找到预置的 %s 文件!";
|
||||
private static final String CONFIG_READ_COMMENT_ERROR = "配置: 读取文件注释信息失败!";
|
||||
private static final String STREAM_NOT_BE_NULL = "数据流不能为 NULL";
|
||||
private static char ALT_COLOR_CHAR = '&';
|
||||
private static String DEFAULT = "config.yml";
|
||||
private static String DATA_FORMANT = "yyyyMMddHHmmss";
|
||||
private static String CONFIG_BACKUP = "配置: %s 已备份为 %s !";
|
||||
private static String CONFIG_UPDATED = "配置: %s 升级成功 版本 %s !";
|
||||
private static String CONFIG_OVERRIDE = "配置: %s 将覆盖原有字段数据...";
|
||||
private static String CONFIG_NOT_FOUND = "配置: 文件 %s 不存在!";
|
||||
private static String CONFIG_READ_ERROR = "配置: %s 读取错误...";
|
||||
private static String CONFIG_SAVE_ERROR = "配置: %s 保存错误...";
|
||||
private static String CONFIG_UPDATE_WARN = "配置: %s 版本 %s 过低 正在升级到 %s ...";
|
||||
private static String CONFIG_CREATE_ERROR = "配置: %s 创建失败...";
|
||||
private static String CONFIG_FORMAT_ERROR = "配置: %s 格式错误...";
|
||||
private static String CONFIG_BACKUP_ERROR = "配置: %s 备份失败 异常: %s !";
|
||||
private static String CONFIG_UPDATE_VALUE = "配置: 更新字段 %s 的值为 %s ...";
|
||||
private static String CONFIG_BACKUP_AND_RESET = "配置: %s 格式错误 已备份为 %s 并恢复默认配置!";
|
||||
private static String CONFIG_NOT_FOUND_IN_JAR = "配置: 从插件内部未找到预置的 %s 文件!";
|
||||
private static String CONFIG_READ_COMMENT_ERROR = "配置: 读取文件注释信息失败!";
|
||||
private static String STREAM_NOT_BE_NULL = "数据流不能为 NULL";
|
||||
|
||||
protected File file;
|
||||
|
||||
@ -70,7 +70,7 @@ public class FileConfig extends AbstractConfig {
|
||||
* @param file
|
||||
* 配置文件名称
|
||||
*/
|
||||
public FileConfig(final File file) {
|
||||
public FileConfig(File file) {
|
||||
Validate.notNull(file, FILE_NOT_BE_NULL);
|
||||
init(file);
|
||||
}
|
||||
@ -83,7 +83,7 @@ public class FileConfig extends AbstractConfig {
|
||||
* @param filename
|
||||
* 配置文件名称
|
||||
*/
|
||||
public FileConfig(final File parent, final String filename) {
|
||||
public FileConfig(File parent, String filename) {
|
||||
init(new File(parent, filename), true);
|
||||
}
|
||||
|
||||
@ -93,7 +93,7 @@ public class FileConfig extends AbstractConfig {
|
||||
* @param stream
|
||||
* 数据流
|
||||
*/
|
||||
public FileConfig(final InputStream stream) {
|
||||
public FileConfig(InputStream stream) {
|
||||
init(stream);
|
||||
}
|
||||
|
||||
@ -103,7 +103,7 @@ public class FileConfig extends AbstractConfig {
|
||||
* @param filename
|
||||
* 配置文件名称
|
||||
*/
|
||||
public FileConfig(final String filename) {
|
||||
public FileConfig(String filename) {
|
||||
init(new File(plugin.getDataFolder(), filename), true);
|
||||
}
|
||||
|
||||
@ -115,7 +115,7 @@ public class FileConfig extends AbstractConfig {
|
||||
* @param filename
|
||||
* 配置文件名称
|
||||
*/
|
||||
public FileConfig(final String parent, final String filename) {
|
||||
public FileConfig(String parent, String filename) {
|
||||
init(new File(parent, filename), true);
|
||||
}
|
||||
|
||||
@ -130,7 +130,7 @@ public class FileConfig extends AbstractConfig {
|
||||
* 对象
|
||||
* @return {@link FileConfig}
|
||||
*/
|
||||
public <E> FileConfig addToList(final String path, final E obj) {
|
||||
public <E> FileConfig addToList(String path, E obj) {
|
||||
List<E> l = (List<E>) this.getList(path);
|
||||
if (null == l) {
|
||||
l = new ArrayList<>();
|
||||
@ -148,7 +148,7 @@ public class FileConfig extends AbstractConfig {
|
||||
* 字符串
|
||||
* @return {@link FileConfig}
|
||||
*/
|
||||
public FileConfig addToStringList(final String path, final String obj) {
|
||||
public FileConfig addToStringList(String path, String obj) {
|
||||
addToStringList(path, obj, true);
|
||||
return this;
|
||||
}
|
||||
@ -164,7 +164,7 @@ public class FileConfig extends AbstractConfig {
|
||||
* 是否允许重复
|
||||
* @return {@link FileConfig}
|
||||
*/
|
||||
public FileConfig addToStringList(final String path, final String obj, final boolean allowrepeat) {
|
||||
public FileConfig addToStringList(String path, String obj, boolean allowrepeat) {
|
||||
List<String> l = this.getStringList(path);
|
||||
if (null == l) {
|
||||
l = new ArrayList<>();
|
||||
@ -183,12 +183,12 @@ public class FileConfig extends AbstractConfig {
|
||||
* 待转码的List
|
||||
* @return 颜色转码后的文本
|
||||
*/
|
||||
public List<String> getColorList(final List<String> cfgmsg) {
|
||||
final List<String> message = new ArrayList<>();
|
||||
public List<String> getColorList(List<String> cfgmsg) {
|
||||
List<String> message = new ArrayList<>();
|
||||
if (cfgmsg == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
for (final String msg : cfgmsg) {
|
||||
for (String msg : cfgmsg) {
|
||||
message.add(ChatColor.translateAlternateColorCodes('&', msg));
|
||||
}
|
||||
return message;
|
||||
@ -210,7 +210,7 @@ public class FileConfig extends AbstractConfig {
|
||||
* 键
|
||||
* @return {@link Location}
|
||||
*/
|
||||
public Location getLocation(final String key) {
|
||||
public Location getLocation(String key) {
|
||||
return getLocation(key, null);
|
||||
}
|
||||
|
||||
@ -223,8 +223,8 @@ public class FileConfig extends AbstractConfig {
|
||||
* 默认地点
|
||||
* @return {@link Location}
|
||||
*/
|
||||
public Location getLocation(final String path, final Location def) {
|
||||
final Object val = get(path, def);
|
||||
public Location getLocation(String path, Location def) {
|
||||
Object val = get(path, def);
|
||||
return val instanceof Location ? (Location) val : def;
|
||||
}
|
||||
|
||||
@ -235,7 +235,7 @@ public class FileConfig extends AbstractConfig {
|
||||
* 配置路径
|
||||
* @return 颜色转码后的文本
|
||||
*/
|
||||
public String getMessage(final String path) {
|
||||
public String getMessage(String path) {
|
||||
return getMessage(path, null);
|
||||
}
|
||||
|
||||
@ -248,7 +248,7 @@ public class FileConfig extends AbstractConfig {
|
||||
* 默认文本
|
||||
* @return 颜色转码后的文本
|
||||
*/
|
||||
public String getMessage(final String path, final String def) {
|
||||
public String getMessage(String path, String def) {
|
||||
String message = this.getString(path, def);
|
||||
if (message != null) {
|
||||
message = ChatColor.translateAlternateColorCodes('&', message);
|
||||
@ -263,8 +263,8 @@ public class FileConfig extends AbstractConfig {
|
||||
* 配置路径
|
||||
* @return 颜色转码后的文本
|
||||
*/
|
||||
public List<String> getMessageList(final String path) {
|
||||
final List<String> cfgmsg = this.getStringList(path);
|
||||
public List<String> getMessageList(String path) {
|
||||
List<String> cfgmsg = this.getStringList(path);
|
||||
if (cfgmsg == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
@ -281,16 +281,16 @@ public class FileConfig extends AbstractConfig {
|
||||
* 配置路径
|
||||
* @return 字符串数组
|
||||
*/
|
||||
public String[] getStringArray(final String path) {
|
||||
public String[] getStringArray(String path) {
|
||||
return this.getStringList(path).toArray(new String[0]);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void loadFromString(final String contents) throws InvalidConfigurationException {
|
||||
public void loadFromString(String contents) throws InvalidConfigurationException {
|
||||
try {
|
||||
commentConfig = new CommentConfig();
|
||||
commentConfig.loadFromString(contents);
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
Log.debug(CONFIG_READ_COMMENT_ERROR);
|
||||
commentConfig = null;
|
||||
}
|
||||
@ -306,17 +306,17 @@ public class FileConfig extends AbstractConfig {
|
||||
* 旧版本
|
||||
* @return 是否需要更新
|
||||
*/
|
||||
public boolean needUpdate(final String newver, final String oldver) {
|
||||
public boolean needUpdate(String newver, String oldver) {
|
||||
if (newver == null) {
|
||||
return false;
|
||||
}
|
||||
if (oldver == null) {
|
||||
return true;
|
||||
}
|
||||
final String[] va1 = newver.split("\\.");// 注意此处为正则匹配,不能用".";
|
||||
final String[] va2 = oldver.split("\\.");
|
||||
String[] va1 = newver.split("\\.");// 注意此处为正则匹配,不能用".";
|
||||
String[] va2 = oldver.split("\\.");
|
||||
int idx = 0;
|
||||
final int minLength = Math.min(va1.length, va2.length);// 取最小长度值
|
||||
int minLength = Math.min(va1.length, va2.length);// 取最小长度值
|
||||
int diff = 0;
|
||||
while (idx < minLength
|
||||
&& (diff = va1[idx].length() - va2[idx].length()) == 0// 先比较长度
|
||||
@ -348,8 +348,8 @@ public class FileConfig extends AbstractConfig {
|
||||
* 对象
|
||||
* @return {@link FileConfig}
|
||||
*/
|
||||
public <E> FileConfig removeFromList(final String path, final E obj) {
|
||||
final List<E> l = (List<E>) this.getList(path);
|
||||
public <E> FileConfig removeFromList(String path, E obj) {
|
||||
List<E> l = (List<E>) this.getList(path);
|
||||
if (null != l) {
|
||||
l.remove(obj);
|
||||
}
|
||||
@ -365,8 +365,8 @@ public class FileConfig extends AbstractConfig {
|
||||
* 对象
|
||||
* @return {@link FileConfig}
|
||||
*/
|
||||
public FileConfig removeFromStringList(final String path, final String obj) {
|
||||
final List<String> l = this.getStringList(path);
|
||||
public FileConfig removeFromStringList(String path, String obj) {
|
||||
List<String> l = this.getStringList(path);
|
||||
if (null != l) {
|
||||
l.remove(obj);
|
||||
}
|
||||
@ -383,7 +383,7 @@ public class FileConfig extends AbstractConfig {
|
||||
try {
|
||||
this.save(file);
|
||||
return true;
|
||||
} catch (final IOException e) {
|
||||
} catch (IOException e) {
|
||||
Log.warning(String.format(CONFIG_SAVE_ERROR, file.getName()));
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
@ -391,7 +391,7 @@ public class FileConfig extends AbstractConfig {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void save(final File file) throws IOException {
|
||||
public void save(File file) throws IOException {
|
||||
Validate.notNull(file, FILE_NOT_BE_NULL);
|
||||
if (commentConfig != null) {
|
||||
data = commentConfig.saveToString();
|
||||
@ -402,7 +402,7 @@ public class FileConfig extends AbstractConfig {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void set(final String path, final Object value) {
|
||||
public void set(String path, Object value) {
|
||||
if (commentConfig != null) {
|
||||
commentConfig.set(path, value);
|
||||
}
|
||||
@ -415,9 +415,9 @@ public class FileConfig extends AbstractConfig {
|
||||
private void saveFromJar() {
|
||||
if (plugin != null && file != null) {
|
||||
try {
|
||||
final String filename = file.getName();
|
||||
final InputStream filestream = plugin.getResource(file.getName());
|
||||
final String errFileName = this.getErrName(filename);
|
||||
String filename = file.getName();
|
||||
InputStream filestream = plugin.getResource(file.getName());
|
||||
String errFileName = this.getErrName(filename);
|
||||
file.renameTo(new File(file.getParent(), errFileName));
|
||||
if (filestream == null) {
|
||||
file.createNewFile();
|
||||
@ -425,7 +425,7 @@ public class FileConfig extends AbstractConfig {
|
||||
plugin.saveResource(filename, true);
|
||||
}
|
||||
Log.warning(String.format(CONFIG_BACKUP_AND_RESET, filename, errFileName));
|
||||
} catch (final IOException | IllegalArgumentException e) {
|
||||
} catch (IOException | IllegalArgumentException e) {
|
||||
throw new IllegalArgumentException(e);
|
||||
}
|
||||
} else {
|
||||
@ -439,14 +439,14 @@ public class FileConfig extends AbstractConfig {
|
||||
* @param oldcfg
|
||||
* 配置文件
|
||||
*/
|
||||
protected void backupConfig(final FileConfig oldcfg) {
|
||||
final String filename = oldcfg.getConfigName();
|
||||
protected void backupConfig(FileConfig oldcfg) {
|
||||
String filename = oldcfg.getConfigName();
|
||||
try {
|
||||
final String newCfgName = this.getBakName(filename);
|
||||
final File newcfg = new File(file.getParent(), newCfgName);
|
||||
String newCfgName = this.getBakName(filename);
|
||||
File newcfg = new File(file.getParent(), newCfgName);
|
||||
oldcfg.save(newcfg);
|
||||
Log.warning(String.format(CONFIG_BACKUP, filename, newCfgName));
|
||||
} catch (final IOException e) {
|
||||
} catch (IOException e) {
|
||||
Log.warning(String.format(CONFIG_BACKUP_ERROR, filename, e.getMessage()));
|
||||
Log.debug(oldcfg.getConfigName(), e);
|
||||
}
|
||||
@ -458,9 +458,9 @@ public class FileConfig extends AbstractConfig {
|
||||
* @param file
|
||||
* 配置文件
|
||||
*/
|
||||
protected void check(final File file) {
|
||||
final String filename = file.getName();
|
||||
final InputStream stream = plugin.getResource(filename);
|
||||
protected void check(File file) {
|
||||
String filename = file.getName();
|
||||
InputStream stream = plugin.getResource(filename);
|
||||
try {
|
||||
if (!file.exists()) {
|
||||
file.getParentFile().mkdirs();
|
||||
@ -473,23 +473,23 @@ public class FileConfig extends AbstractConfig {
|
||||
if (stream == null) {
|
||||
return;
|
||||
}
|
||||
final FileConfig newcfg = new FileConfig(stream);
|
||||
final FileConfig oldcfg = new FileConfig(file);
|
||||
FileConfig newcfg = new FileConfig(stream);
|
||||
FileConfig oldcfg = new FileConfig(file);
|
||||
if (needUpdate(newcfg, oldcfg)) {
|
||||
backupConfig(oldcfg);
|
||||
updateConfig(newcfg, oldcfg).save(file);
|
||||
}
|
||||
}
|
||||
} catch (final IOException e) {
|
||||
} catch (IOException e) {
|
||||
Log.warning(String.format(CONFIG_CREATE_ERROR, filename));
|
||||
}
|
||||
}
|
||||
|
||||
protected String getBakName(final String cfgname) {
|
||||
protected String getBakName(String cfgname) {
|
||||
return cfgname + "." + getStringDate(DATA_FORMANT) + ".bak";
|
||||
}
|
||||
|
||||
protected String getErrName(final String cfgname) {
|
||||
protected String getErrName(String cfgname) {
|
||||
return cfgname + "." + getStringDate(DATA_FORMANT) + ".err";
|
||||
}
|
||||
|
||||
@ -502,7 +502,7 @@ public class FileConfig extends AbstractConfig {
|
||||
if (format == null) {
|
||||
format = "yyyy-MM-dd HH:mm:ss";
|
||||
}
|
||||
final Date currentTime = new Date();
|
||||
Date currentTime = new Date();
|
||||
return new SimpleDateFormat(format).format(currentTime);
|
||||
}
|
||||
|
||||
@ -513,7 +513,7 @@ public class FileConfig extends AbstractConfig {
|
||||
* 配置文件
|
||||
* @return FileConfig
|
||||
*/
|
||||
protected FileConfig init(final File file) {
|
||||
protected FileConfig init(File file) {
|
||||
init(file, false);
|
||||
return this;
|
||||
}
|
||||
@ -527,7 +527,7 @@ public class FileConfig extends AbstractConfig {
|
||||
* 是否检查文件
|
||||
* @return FileConfig
|
||||
*/
|
||||
protected FileConfig init(final File file, final boolean check) {
|
||||
protected FileConfig init(File file, boolean check) {
|
||||
Validate.notNull(file, FILE_NOT_BE_NULL);
|
||||
this.file = file;
|
||||
if (check) {
|
||||
@ -535,7 +535,7 @@ public class FileConfig extends AbstractConfig {
|
||||
}
|
||||
try {
|
||||
init(new FileInputStream(file));
|
||||
} catch (final FileNotFoundException e) {
|
||||
} catch (FileNotFoundException e) {
|
||||
Log.debug(String.format(CONFIG_NOT_FOUND, file.toPath()));
|
||||
}
|
||||
return this;
|
||||
@ -548,18 +548,18 @@ public class FileConfig extends AbstractConfig {
|
||||
* 输入流
|
||||
* @return FileConfig
|
||||
*/
|
||||
protected FileConfig init(final InputStream stream) {
|
||||
protected FileConfig init(InputStream stream) {
|
||||
Validate.notNull(stream, STREAM_NOT_BE_NULL);
|
||||
try {
|
||||
this.load(new InputStreamReader(stream, UTF_8));
|
||||
} catch (final InvalidConfigurationException | IllegalArgumentException ex) {
|
||||
} catch (InvalidConfigurationException | IllegalArgumentException ex) {
|
||||
if (file == null) {
|
||||
throw new IllegalArgumentException(ex);
|
||||
}
|
||||
Log.warning(String.format(CONFIG_FORMAT_ERROR, file.getName()));
|
||||
Log.warning(ex.getMessage());
|
||||
saveFromJar();
|
||||
} catch (final IOException ex) {
|
||||
} catch (IOException ex) {
|
||||
if (file == null) {
|
||||
throw new IllegalStateException(ex);
|
||||
}
|
||||
@ -577,7 +577,7 @@ public class FileConfig extends AbstractConfig {
|
||||
* 旧配置文件
|
||||
* @return 是否需要升级
|
||||
*/
|
||||
protected boolean needUpdate(final FileConfig newcfg, final FileConfig oldcfg) {
|
||||
protected boolean needUpdate(FileConfig newcfg, FileConfig oldcfg) {
|
||||
return needUpdate(newcfg.getString(VERSION), oldcfg.getString(VERSION));
|
||||
}
|
||||
|
||||
@ -590,7 +590,7 @@ public class FileConfig extends AbstractConfig {
|
||||
* 旧配置文件
|
||||
* @return 更新以后的配置文件
|
||||
*/
|
||||
protected FileConfig updateConfig(final FileConfig newCfg, final FileConfig oldCfg) {
|
||||
protected FileConfig updateConfig(FileConfig newCfg, FileConfig oldCfg) {
|
||||
return updateConfig(newCfg, oldCfg, false);
|
||||
}
|
||||
|
||||
@ -605,11 +605,11 @@ public class FileConfig extends AbstractConfig {
|
||||
* 是否强制更新
|
||||
* @return 更新以后的配置文件
|
||||
*/
|
||||
protected FileConfig updateConfig(final FileConfig newCfg, final FileConfig oldCfg, final boolean force) {
|
||||
final String filename = oldCfg.getConfigName();
|
||||
final String newver = newCfg.getString(VERSION);
|
||||
final String oldver = oldCfg.getString(VERSION);
|
||||
final Set<String> oldConfigKeys = oldCfg.getKeys(true);
|
||||
protected FileConfig updateConfig(FileConfig newCfg, FileConfig oldCfg, boolean force) {
|
||||
String filename = oldCfg.getConfigName();
|
||||
String newver = newCfg.getString(VERSION);
|
||||
String oldver = oldCfg.getString(VERSION);
|
||||
Set<String> oldConfigKeys = oldCfg.getKeys(true);
|
||||
Log.warning(String.format(CONFIG_UPDATE_WARN, filename, oldver, newver));
|
||||
// 保留版本字段 不更新
|
||||
oldConfigKeys.remove(VERSION);
|
||||
@ -619,8 +619,8 @@ public class FileConfig extends AbstractConfig {
|
||||
oldConfigKeys.removeAll(newCfg.getKeys(true));
|
||||
}
|
||||
// 复制旧的数据
|
||||
for (final String string : oldConfigKeys) {
|
||||
final Object var = oldCfg.get(string);
|
||||
for (String string : oldConfigKeys) {
|
||||
Object var = oldCfg.get(string);
|
||||
if (var != null && !(var instanceof MemorySection)) {
|
||||
Log.debug(String.format(CONFIG_UPDATE_VALUE, string, var));
|
||||
newCfg.set(string, var);
|
||||
|
@ -23,7 +23,7 @@ public class PlayerConfig extends FileConfig {
|
||||
* @param player
|
||||
* 玩家
|
||||
*/
|
||||
public PlayerConfig(final File dir, final Player player) {
|
||||
public PlayerConfig(File dir, Player player) {
|
||||
super(dir, player.getName() + ".yml");
|
||||
}
|
||||
|
||||
@ -33,7 +33,7 @@ public class PlayerConfig extends FileConfig {
|
||||
* @param player
|
||||
* 玩家
|
||||
*/
|
||||
public PlayerConfig(final Player player) {
|
||||
public PlayerConfig(Player player) {
|
||||
this(player.getName());
|
||||
}
|
||||
|
||||
@ -43,7 +43,7 @@ public class PlayerConfig extends FileConfig {
|
||||
* @param playername
|
||||
* 玩家名称
|
||||
*/
|
||||
public PlayerConfig(final String playername) {
|
||||
public PlayerConfig(String playername) {
|
||||
super(new File(plugin.getDataFolder(), CONFIG_FOLDER), playername + ".yml");
|
||||
}
|
||||
}
|
||||
|
@ -14,11 +14,11 @@ import pw.yumc.YumCore.config.FileConfig;
|
||||
* @author 喵♂呜
|
||||
*/
|
||||
public class RemoteConfig extends FileConfig {
|
||||
public RemoteConfig(final String url) throws MalformedURLException, IOException {
|
||||
public RemoteConfig(String url) throws MalformedURLException, IOException {
|
||||
this(new URL(url));
|
||||
}
|
||||
|
||||
public RemoteConfig(final URL url) throws IOException {
|
||||
public RemoteConfig(URL url) throws IOException {
|
||||
super(url.openStream());
|
||||
}
|
||||
|
||||
@ -29,10 +29,10 @@ public class RemoteConfig extends FileConfig {
|
||||
* 配置文件地址
|
||||
* @return {@link FileConfig}
|
||||
*/
|
||||
public static FileConfig getConfig(final String url) {
|
||||
public static FileConfig getConfig(String url) {
|
||||
try {
|
||||
return new RemoteConfig(url);
|
||||
} catch (final IOException e) {
|
||||
} catch (IOException e) {
|
||||
Log.debug("获取远程配置文件失败!", e);
|
||||
return null;
|
||||
}
|
||||
@ -49,11 +49,11 @@ public class RemoteConfig extends FileConfig {
|
||||
* 默认值
|
||||
* @return 插件信息
|
||||
*/
|
||||
public static String getYamlTag(final String url, final String tag, final String def) {
|
||||
public static String getYamlTag(String url, String tag, String def) {
|
||||
String result = def;
|
||||
try {
|
||||
result = getConfig(url).getString(tag);
|
||||
} catch (final NullPointerException e) {
|
||||
} catch (NullPointerException e) {
|
||||
// Ignore
|
||||
}
|
||||
return result;
|
||||
|
@ -7,11 +7,11 @@ import pw.yumc.YumCore.bukkit.Log;
|
||||
import pw.yumc.YumCore.config.FileConfig;
|
||||
|
||||
public class YumConfig {
|
||||
protected static final String REMOTEFILECENTER = "http://data.yumc.pw/config/";
|
||||
protected static final String DataFolder = "plugins" + File.separatorChar + "YumCore";
|
||||
protected static String REMOTEFILECENTER = "http://data.yumc.pw/config/";
|
||||
protected static String DataFolder = "plugins" + File.separatorChar + "YumCore";
|
||||
|
||||
private static final String fromYumc = "配置 %s 来自 YUMC 数据中心...";
|
||||
private static final String createError = "从 YUMC 数据中心下载配置 %s 失败...";
|
||||
private static String fromYumc = "配置 %s 来自 YUMC 数据中心...";
|
||||
private static String createError = "从 YUMC 数据中心下载配置 %s 失败...";
|
||||
|
||||
private YumConfig() {
|
||||
}
|
||||
@ -23,8 +23,8 @@ public class YumConfig {
|
||||
* 本地文件名称
|
||||
* @return {@link FileConfig}
|
||||
*/
|
||||
public static FileConfig getLocal(final String filename) {
|
||||
final File file = new File(DataFolder, filename);
|
||||
public static FileConfig getLocal(String filename) {
|
||||
File file = new File(DataFolder, filename);
|
||||
return new FileConfig(file);
|
||||
}
|
||||
|
||||
@ -35,11 +35,11 @@ public class YumConfig {
|
||||
* 配置文件地址
|
||||
* @return {@link FileConfig}
|
||||
*/
|
||||
public static FileConfig getRemote(final String url) {
|
||||
public static FileConfig getRemote(String url) {
|
||||
FileConfig config = null;
|
||||
try {
|
||||
config = new RemoteConfig(REMOTEFILECENTER + url);
|
||||
} catch (final IOException e) {
|
||||
} catch (IOException e) {
|
||||
Log.debug(e);
|
||||
}
|
||||
Log.info(String.format(config == null ? createError : fromYumc, url));
|
||||
|
@ -23,12 +23,12 @@ import pw.yumc.YumCore.config.annotation.Nullable;
|
||||
* @author 喵♂呜
|
||||
*/
|
||||
public abstract class AbstractInjectConfig {
|
||||
private static final String INJECT_TYPE_ERROR = "配置节点 %s 数据类型不匹配 应该为: %s 但实际为: %s!";
|
||||
private static final String INJECT_ERROR = "自动注入配置失败 可能造成插件运行错误 %s: %s!";
|
||||
private static final String DATE_PARSE_ERROR = "配置节点 {0} 日期解析失败 格式应该为: {1} 但输入值为: {2}!";
|
||||
private static final String PATH_NOT_FOUND = "配置节点 %s 丢失 将使用默认值!";
|
||||
private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
|
||||
private static final SimpleDateFormat df = new SimpleDateFormat(DATE_FORMAT);
|
||||
private static String INJECT_TYPE_ERROR = "配置节点 %s 数据类型不匹配 应该为: %s 但实际为: %s!";
|
||||
private static String INJECT_ERROR = "自动注入配置失败 可能造成插件运行错误 %s: %s!";
|
||||
private static String DATE_PARSE_ERROR = "配置节点 {0} 日期解析失败 格式应该为: {1} 但输入值为: {2}!";
|
||||
private static String PATH_NOT_FOUND = "配置节点 %s 丢失 将使用默认值!";
|
||||
private static String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
|
||||
private static SimpleDateFormat df = new SimpleDateFormat(DATE_FORMAT);
|
||||
private ConfigurationSection config;
|
||||
|
||||
/**
|
||||
@ -37,7 +37,7 @@ public abstract class AbstractInjectConfig {
|
||||
* @param config
|
||||
* 配置区
|
||||
*/
|
||||
public void inject(final ConfigurationSection config) {
|
||||
public void inject(ConfigurationSection config) {
|
||||
inject(config, false);
|
||||
}
|
||||
|
||||
@ -49,17 +49,17 @@ public abstract class AbstractInjectConfig {
|
||||
* @param save
|
||||
* 是否为保存
|
||||
*/
|
||||
public void inject(final ConfigurationSection config, final boolean save) {
|
||||
public void inject(ConfigurationSection config, boolean save) {
|
||||
if (config == null) {
|
||||
Log.w("尝试%s ConfigurationSection 为 Null 的数据!", save ? "保存" : "读取");
|
||||
return;
|
||||
}
|
||||
this.config = config;
|
||||
for (final Field field : getClass().getDeclaredFields()) {
|
||||
for (Field field : getClass().getDeclaredFields()) {
|
||||
if (Modifier.isTransient(field.getModifiers()) || field.getType().isPrimitive()) {
|
||||
continue;
|
||||
}
|
||||
final ConfigNode node = field.getAnnotation(ConfigNode.class);
|
||||
ConfigNode node = field.getAnnotation(ConfigNode.class);
|
||||
String path = field.getName();
|
||||
if (node != null && !node.value().isEmpty()) {
|
||||
path = node.value();
|
||||
@ -79,7 +79,7 @@ public abstract class AbstractInjectConfig {
|
||||
* @param config
|
||||
* 配置文件区
|
||||
*/
|
||||
public ConfigurationSection save(final ConfigurationSection config) {
|
||||
public ConfigurationSection save(ConfigurationSection config) {
|
||||
inject(config, true);
|
||||
return config;
|
||||
}
|
||||
@ -94,7 +94,7 @@ public abstract class AbstractInjectConfig {
|
||||
* @throws IllegalAccessException
|
||||
* @throws IllegalArgumentException
|
||||
*/
|
||||
private void applyDefault(final Field field, Object value) throws IllegalArgumentException, IllegalAccessException {
|
||||
private void applyDefault(Field field, Object value) throws IllegalArgumentException, IllegalAccessException {
|
||||
switch (field.getType().getName()) {
|
||||
case "java.util.List":
|
||||
value = new ArrayList<>();
|
||||
@ -122,7 +122,7 @@ public abstract class AbstractInjectConfig {
|
||||
* @throws NoSuchMethodException
|
||||
* @throws SecurityException
|
||||
*/
|
||||
private Object convertType(final Class<?> type, final String path, final Object value) throws ParseException, IllegalAccessException, IllegalArgumentException, InstantiationException, InvocationTargetException, NoSuchMethodException, SecurityException {
|
||||
private Object convertType(Class<?> type, String path, Object value) throws ParseException, IllegalAccessException, IllegalArgumentException, InstantiationException, InvocationTargetException, NoSuchMethodException, SecurityException {
|
||||
switch (type.getName()) {
|
||||
case "java.util.Date":
|
||||
return df.parse((String) value);
|
||||
@ -152,7 +152,7 @@ public abstract class AbstractInjectConfig {
|
||||
* @throws NoSuchMethodException
|
||||
* @throws SecurityException
|
||||
*/
|
||||
private Object hanldeDefault(final Class<?> field, final String path, final Object value) throws IllegalAccessException, IllegalArgumentException, InstantiationException, InvocationTargetException, NoSuchMethodException, SecurityException {
|
||||
private Object hanldeDefault(Class<?> field, String path, Object value) throws IllegalAccessException, IllegalArgumentException, InstantiationException, InvocationTargetException, NoSuchMethodException, SecurityException {
|
||||
if (InjectConfigurationSection.class.isAssignableFrom(field)) {
|
||||
if (config.isConfigurationSection(path)) {
|
||||
return field.getConstructor(ConfigurationSection.class).newInstance(config.getConfigurationSection(path));
|
||||
@ -179,8 +179,8 @@ public abstract class AbstractInjectConfig {
|
||||
* @throws IllegalArgumentException
|
||||
* @throws IllegalAccessException
|
||||
*/
|
||||
private void hanldeValue(final String path, final Field field, Object value) throws IllegalAccessException, IllegalArgumentException, InstantiationException, InvocationTargetException, NoSuchMethodException, SecurityException, ParseException {
|
||||
final Class<?> type = field.getType();
|
||||
private void hanldeValue(String path, Field field, Object value) throws IllegalAccessException, IllegalArgumentException, InstantiationException, InvocationTargetException, NoSuchMethodException, SecurityException, ParseException {
|
||||
Class<?> type = field.getType();
|
||||
if (!type.equals(value.getClass())) {
|
||||
value = convertType(type, path, value);
|
||||
}
|
||||
@ -199,7 +199,7 @@ public abstract class AbstractInjectConfig {
|
||||
* @param field
|
||||
* 字段
|
||||
*/
|
||||
protected void setConfig(final String path, final Field field) {
|
||||
protected void setConfig(String path, Field field) {
|
||||
try {
|
||||
config.set(path, field.get(this));
|
||||
} catch (IllegalArgumentException | IllegalAccessException e) {
|
||||
@ -216,10 +216,10 @@ public abstract class AbstractInjectConfig {
|
||||
* @param field
|
||||
* 字段
|
||||
*/
|
||||
protected void setField(final String path, final Field field) {
|
||||
protected void setField(String path, Field field) {
|
||||
Object value = config.get(path);
|
||||
try {
|
||||
final Default def = field.getAnnotation(Default.class);
|
||||
Default def = field.getAnnotation(Default.class);
|
||||
if (value == null && def != null) {
|
||||
value = def.value();
|
||||
}
|
||||
@ -231,12 +231,12 @@ public abstract class AbstractInjectConfig {
|
||||
return;
|
||||
}
|
||||
hanldeValue(path, field, value);
|
||||
} catch (final IllegalArgumentException ex) {
|
||||
} catch (IllegalArgumentException ex) {
|
||||
Log.w(INJECT_TYPE_ERROR, path, field.getType().getName(), value.getClass().getName());
|
||||
Log.debug(ex);
|
||||
} catch (final ParseException e) {
|
||||
} catch (ParseException e) {
|
||||
Log.w(DATE_PARSE_ERROR, path, DATE_FORMAT, value);
|
||||
} catch (final InstantiationException | InvocationTargetException | NoSuchMethodException | SecurityException | IllegalAccessException ex) {
|
||||
} catch (InstantiationException | InvocationTargetException | NoSuchMethodException | SecurityException | IllegalAccessException ex) {
|
||||
Log.w(INJECT_ERROR, ex.getClass().getName(), ex.getMessage());
|
||||
Log.debug(ex);
|
||||
}
|
||||
|
@ -17,16 +17,16 @@ public abstract class InjectConfig extends AbstractInjectConfig {
|
||||
this(new FileConfig());
|
||||
}
|
||||
|
||||
public InjectConfig(final File file) {
|
||||
public InjectConfig(File file) {
|
||||
this(new FileConfig(file));
|
||||
}
|
||||
|
||||
public InjectConfig(final FileConfig config) {
|
||||
public InjectConfig(FileConfig config) {
|
||||
this.config = config;
|
||||
inject(config);
|
||||
}
|
||||
|
||||
public InjectConfig(final String name) {
|
||||
public InjectConfig(String name) {
|
||||
this(new FileConfig(name));
|
||||
}
|
||||
|
||||
|
@ -10,7 +10,7 @@ import org.bukkit.configuration.ConfigurationSection;
|
||||
*/
|
||||
public abstract class InjectConfigurationSection extends AbstractInjectConfig {
|
||||
|
||||
public InjectConfigurationSection(final ConfigurationSection config) {
|
||||
public InjectConfigurationSection(ConfigurationSection config) {
|
||||
inject(config);
|
||||
}
|
||||
|
||||
@ -20,7 +20,7 @@ public abstract class InjectConfigurationSection extends AbstractInjectConfig {
|
||||
* @param config
|
||||
* 配置区
|
||||
*/
|
||||
public void reload(final ConfigurationSection config) {
|
||||
public void reload(ConfigurationSection config) {
|
||||
inject(config);
|
||||
}
|
||||
}
|
||||
|
@ -29,21 +29,21 @@ public class BukkitConstructor extends YamlConstructor {
|
||||
|
||||
private class ConstructCustomObject extends ConstructYamlMap {
|
||||
@Override
|
||||
public Object construct(final Node node) {
|
||||
public Object construct(Node node) {
|
||||
if (node.isTwoStepsConstruction()) {
|
||||
throw new YAMLException("Unexpected referential mapping structure. Node: " + node);
|
||||
}
|
||||
|
||||
final Map<?, ?> raw = (Map<?, ?>) super.construct(node);
|
||||
Map<?, ?> raw = (Map<?, ?>) super.construct(node);
|
||||
|
||||
if (raw.containsKey(ConfigurationSerialization.SERIALIZED_TYPE_KEY)) {
|
||||
final Map<String, Object> typed = new LinkedHashMap<>(raw.size());
|
||||
for (final Map.Entry<?, ?> entry : raw.entrySet()) {
|
||||
Map<String, Object> typed = new LinkedHashMap<>(raw.size());
|
||||
for (Map.Entry<?, ?> entry : raw.entrySet()) {
|
||||
typed.put(entry.getKey().toString(), entry.getValue());
|
||||
}
|
||||
|
||||
// 自定义解析部分
|
||||
final String key = raw.get(ConfigurationSerialization.SERIALIZED_TYPE_KEY).toString();
|
||||
String key = raw.get(ConfigurationSerialization.SERIALIZED_TYPE_KEY).toString();
|
||||
if (constructor.containsKey(key)) {
|
||||
try {
|
||||
return constructor.get(key).invoke(null, typed);
|
||||
@ -55,7 +55,7 @@ public class BukkitConstructor extends YamlConstructor {
|
||||
// Bukkit自动解析
|
||||
try {
|
||||
return ConfigurationSerialization.deserializeObject(typed);
|
||||
} catch (final IllegalArgumentException ex) {
|
||||
} catch (IllegalArgumentException ex) {
|
||||
throw new YAMLException("Could not deserialize object", ex);
|
||||
}
|
||||
}
|
||||
@ -64,7 +64,7 @@ public class BukkitConstructor extends YamlConstructor {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void construct2ndStep(final Node node, final Object object) {
|
||||
public void construct2ndStep(Node node, Object object) {
|
||||
throw new YAMLException("Unexpected referential mapping structure. Node: " + node);
|
||||
}
|
||||
}
|
||||
|
@ -13,7 +13,7 @@ public class BukkitRepresenter extends YamlRepresenter {
|
||||
|
||||
public class RepresentLocation extends RepresentMap {
|
||||
@Override
|
||||
public Node representData(final Object data) {
|
||||
public Node representData(Object data) {
|
||||
return super.representData(L.serialize((Location) data));
|
||||
}
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ public class L10N {
|
||||
* 物品实体
|
||||
* @return 物品名称
|
||||
*/
|
||||
public static final String getFullName(final ItemStack i) {
|
||||
public static String getFullName(ItemStack i) {
|
||||
return getItemName(getItemType(i)) + (i.hasItemMeta() && i.getItemMeta().hasDisplayName() ? "§r(" + i.getItemMeta().getDisplayName() + "§r)" : "");
|
||||
}
|
||||
|
||||
@ -49,7 +49,7 @@ public class L10N {
|
||||
* 物品实体
|
||||
* @return 物品名称
|
||||
*/
|
||||
public static final String getItemName(final ItemStack i) {
|
||||
public static String getItemName(ItemStack i) {
|
||||
return getItemName(getItemType(i));
|
||||
}
|
||||
|
||||
@ -60,7 +60,7 @@ public class L10N {
|
||||
* 物品实体
|
||||
* @return 物品名称
|
||||
*/
|
||||
public static final String getName(final ItemStack i) {
|
||||
public static String getName(ItemStack i) {
|
||||
return i.hasItemMeta() && i.getItemMeta().hasDisplayName() ? i.getItemMeta().getDisplayName() : getItemName(getItemType(i));
|
||||
}
|
||||
|
||||
@ -80,7 +80,7 @@ public class L10N {
|
||||
* 物品类型名称
|
||||
* @return 物品名称
|
||||
*/
|
||||
private static final String getItemName(final String iname) {
|
||||
private static String getItemName(String iname) {
|
||||
String aname = content.get(iname);
|
||||
if (aname == null) {
|
||||
aname = iname;
|
||||
@ -99,13 +99,13 @@ public class L10N {
|
||||
* 物品实体
|
||||
* @return 物品类型
|
||||
*/
|
||||
private static final String getItemType(final ItemStack i) {
|
||||
private static String getItemType(ItemStack i) {
|
||||
String name = i.getType().name();
|
||||
String dura = "";
|
||||
if (i.getType() == Material.MONSTER_EGG) {
|
||||
name = ((SpawnEgg) i.getData()).getSpawnedType().name();
|
||||
} else {
|
||||
final int dur = i.getDurability();
|
||||
int dur = i.getDurability();
|
||||
dura = (i.getMaxStackSize() != 1 && dur != 0) ? Integer.toString(dur) : "";
|
||||
}
|
||||
return (name + (dura.isEmpty() ? "" : "-" + dura)).toUpperCase();
|
||||
@ -120,8 +120,8 @@ public class L10N {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
final Map<String, String> local = YumConfig.getLocal(CONFIG_NAME).getContentMap();
|
||||
final Map<String, String> remote = YumConfig.getRemote(CONFIG_NAME).getContentMap();
|
||||
Map<String, String> local = YumConfig.getLocal(CONFIG_NAME).getContentMap();
|
||||
Map<String, String> remote = YumConfig.getRemote(CONFIG_NAME).getContentMap();
|
||||
if (local != null) {
|
||||
Log.info("本地汉化文件词条数量: " + local.size());
|
||||
content.putAll(local);
|
||||
@ -131,7 +131,7 @@ public class L10N {
|
||||
content.putAll(remote);
|
||||
}
|
||||
Log.info("本地化工具初始化完毕...");
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
Log.warning(String.format("本地化工具初始化失败: %s %s", e.getClass().getName(), e.getMessage()));
|
||||
Log.debug(CONFIG_NAME, e);
|
||||
}
|
||||
|
@ -29,10 +29,10 @@ public class EntityKit {
|
||||
private static Field _fgoalSelector;
|
||||
private static Field _ftargetSelector;
|
||||
|
||||
private final static Class<?> _cControllerMove = MinecraftReflection.getMinecraftClass("ControllerMove");
|
||||
private final static Class<?> _cPathEntity = MinecraftReflection.getMinecraftClass("PathEntity");
|
||||
private final static Class<?> _cEntityInsentient = MinecraftReflection.getMinecraftClass("EntityInsentient");
|
||||
private final static Class<?> _cPathfinderGoalSelector = MinecraftReflection.getMinecraftClass("PathfinderGoalSelector");
|
||||
private static Class<?> _cControllerMove = MinecraftReflection.getMinecraftClass("ControllerMove");
|
||||
private static Class<?> _cPathEntity = MinecraftReflection.getMinecraftClass("PathEntity");
|
||||
private static Class<?> _cEntityInsentient = MinecraftReflection.getMinecraftClass("EntityInsentient");
|
||||
private static Class<?> _cPathfinderGoalSelector = MinecraftReflection.getMinecraftClass("PathfinderGoalSelector");
|
||||
|
||||
private static Method _mPlayerList_MoveToWorld = null;
|
||||
private static Method _mPlayerConnection_Teleport = null;
|
||||
@ -49,9 +49,9 @@ public class EntityKit {
|
||||
ReflectUtil.getMethodByNameAndParams(_cEntityInsentient, "getControllerMove");
|
||||
ReflectUtil.getDeclaredMethodByParams(_cControllerMove, double.class, double.class, double.class, double.class).get(0);
|
||||
|
||||
final Class<?> cc = MinecraftReflection.getMinecraftClass("NavigationAbstract");
|
||||
for (final Method method : cc.getDeclaredMethods()) {
|
||||
final Class<?>[] parmeters = method.getParameterTypes();
|
||||
Class<?> cc = MinecraftReflection.getMinecraftClass("NavigationAbstract");
|
||||
for (Method method : cc.getDeclaredMethods()) {
|
||||
Class<?>[] parmeters = method.getParameterTypes();
|
||||
switch (parmeters.length) {
|
||||
case 1: {
|
||||
if (parmeters[0] == double.class) {
|
||||
@ -73,7 +73,7 @@ public class EntityKit {
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (final Exception ex) {
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
try {
|
||||
@ -86,7 +86,7 @@ public class EntityKit {
|
||||
Location.class,
|
||||
Boolean.TYPE)
|
||||
.get(0);
|
||||
} catch (final Exception ex) {
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
}
|
||||
@ -98,9 +98,9 @@ public class EntityKit {
|
||||
* 实体ID
|
||||
* @return 实体
|
||||
*/
|
||||
public static Entity getEntityById(final int entityId) {
|
||||
for (final World world : Bukkit.getWorlds()) {
|
||||
for (final Entity entity : world.getEntities()) {
|
||||
public static Entity getEntityById(int entityId) {
|
||||
for (World world : Bukkit.getWorlds()) {
|
||||
for (Entity entity : world.getEntities()) {
|
||||
if (entity.getEntityId() == entityId) {
|
||||
return entity;
|
||||
}
|
||||
@ -116,7 +116,7 @@ public class EntityKit {
|
||||
* 实体
|
||||
* @return 结果
|
||||
*/
|
||||
public static boolean inWater(final Entity ent) {
|
||||
public static boolean inWater(Entity ent) {
|
||||
return ent.getLocation().getBlock().getTypeId() == 8 || ent.getLocation().getBlock().getTypeId() == 9;
|
||||
}
|
||||
|
||||
@ -127,11 +127,11 @@ public class EntityKit {
|
||||
* 实体
|
||||
* @return 是否隐藏
|
||||
*/
|
||||
public static boolean isInvisible(final Entity entity) {
|
||||
final Object ent = ReflectUtil.getHandle(entity);
|
||||
public static boolean isInvisible(Entity entity) {
|
||||
Object ent = ReflectUtil.getHandle(entity);
|
||||
try {
|
||||
return (boolean) ent.getClass().getMethod("isInvisible").invoke(ent);
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -143,7 +143,7 @@ public class EntityKit {
|
||||
* 实体
|
||||
* @return 结果
|
||||
*/
|
||||
public static boolean isOnGround(final Entity ent) {
|
||||
public static boolean isOnGround(Entity ent) {
|
||||
return ent.isOnGround();
|
||||
}
|
||||
|
||||
@ -154,7 +154,7 @@ public class EntityKit {
|
||||
* 实体
|
||||
* @return 结果
|
||||
*/
|
||||
public static boolean isSilence(final Entity entity) {
|
||||
public static boolean isSilence(Entity entity) {
|
||||
return WrappedDataWatcher.getEntityWatcher(entity).getByte(4) == 1;
|
||||
}
|
||||
|
||||
@ -165,7 +165,7 @@ public class EntityKit {
|
||||
* 实体
|
||||
* @return 结果
|
||||
*/
|
||||
public static boolean onBlock(final Entity entity) {
|
||||
public static boolean onBlock(Entity entity) {
|
||||
// Side Standing
|
||||
double xMod = entity.getLocation().getX() % 1;
|
||||
if (entity.getLocation().getX() < 0) {
|
||||
@ -209,7 +209,7 @@ public class EntityKit {
|
||||
}
|
||||
|
||||
// Fences/Walls
|
||||
final Material beneath = entity.getLocation().add(x, -1.5, z).getBlock().getType();
|
||||
Material beneath = entity.getLocation().add(x, -1.5, z).getBlock().getType();
|
||||
if (entity.getLocation().getY() % 0.5 == 0 && (beneath == Material.FENCE || beneath == Material.FENCE_GATE || beneath == Material.NETHER_FENCE || beneath == Material.COBBLE_WALL)) {
|
||||
return true;
|
||||
}
|
||||
@ -226,14 +226,14 @@ public class EntityKit {
|
||||
* 实体名称
|
||||
* @return {@link EntityType}
|
||||
*/
|
||||
public static EntityType parseEntityType(final String str) {
|
||||
public static EntityType parseEntityType(String str) {
|
||||
EntityType type = null;
|
||||
if (str != null) {
|
||||
type = EntityType.fromName(str);
|
||||
if (type == null) {
|
||||
try {
|
||||
type = EntityType.valueOf(str.toUpperCase());
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -246,20 +246,20 @@ public class EntityKit {
|
||||
* @param entity
|
||||
* 实体
|
||||
*/
|
||||
public static void removeGoalSelectors(final Entity entity) {
|
||||
public static void removeGoalSelectors(Entity entity) {
|
||||
try {
|
||||
if (_fgoalSelector == null) {
|
||||
_fgoalSelector = _cEntityInsentient.getDeclaredField("goalSelector");
|
||||
_fgoalSelector.setAccessible(true);
|
||||
}
|
||||
final Object creature = ReflectUtil.getHandle(entity);
|
||||
Object creature = ReflectUtil.getHandle(entity);
|
||||
if (_cEntityInsentient.isInstance(creature)) {
|
||||
final Object world = ReflectUtil.getHandle(entity.getWorld());
|
||||
final Object methodProfiler = world.getClass().getField("methodProfiler").get(world);
|
||||
final Object goalSelector = _cPathfinderGoalSelector.getConstructor(methodProfiler.getClass()).newInstance(methodProfiler);
|
||||
Object world = ReflectUtil.getHandle(entity.getWorld());
|
||||
Object methodProfiler = world.getClass().getField("methodProfiler").get(world);
|
||||
Object goalSelector = _cPathfinderGoalSelector.getConstructor(methodProfiler.getClass()).newInstance(methodProfiler);
|
||||
_fgoalSelector.set(creature, goalSelector);
|
||||
}
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
@ -272,11 +272,11 @@ public class EntityKit {
|
||||
* @param invisible
|
||||
* 是否隐藏
|
||||
*/
|
||||
public static void setInvisible(final Entity entity, final boolean invisible) {
|
||||
final Object ent = ReflectUtil.getHandle(entity);
|
||||
public static void setInvisible(Entity entity, boolean invisible) {
|
||||
Object ent = ReflectUtil.getHandle(entity);
|
||||
try {
|
||||
ent.getClass().getMethod("setInvisible", boolean.class).invoke(ent, invisible);
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
}
|
||||
}
|
||||
|
||||
@ -288,9 +288,9 @@ public class EntityKit {
|
||||
* @param silence
|
||||
* 是否静默
|
||||
*/
|
||||
public static void setSilence(final Entity entity, final boolean silence) {
|
||||
final byte value = (byte) (silence ? 1 : 0);
|
||||
final WrappedDataWatcher watcher = WrappedDataWatcher.getEntityWatcher(entity);
|
||||
public static void setSilence(Entity entity, boolean silence) {
|
||||
byte value = (byte) (silence ? 1 : 0);
|
||||
WrappedDataWatcher watcher = WrappedDataWatcher.getEntityWatcher(entity);
|
||||
watcher.setObject(4, value);
|
||||
}
|
||||
|
||||
@ -300,26 +300,26 @@ public class EntityKit {
|
||||
* @param entity
|
||||
* @param to
|
||||
*/
|
||||
public static void teleportQuietly(final Entity entity, final Location to) {
|
||||
public static void teleportQuietly(Entity entity, Location to) {
|
||||
if (!(entity instanceof Player)) {
|
||||
entity.teleport(to);
|
||||
} else {
|
||||
if (entity.getWorld().equals(to.getWorld())) {
|
||||
final Object playerConnection = MinecraftFields.getPlayerConnection((Player) entity);
|
||||
Object playerConnection = MinecraftFields.getPlayerConnection((Player) entity);
|
||||
if (_mPlayerConnection_Teleport == null) {
|
||||
_mPlayerConnection_Teleport = ReflectUtil.getMethodByNameAndParams(playerConnection.getClass(), "teleport", Location.class);
|
||||
}
|
||||
try {
|
||||
_mPlayerConnection_Teleport.invoke(playerConnection, to);
|
||||
} catch (final Exception ex) {
|
||||
} catch (Exception ex) {
|
||||
ex.printStackTrace();
|
||||
}
|
||||
} else {
|
||||
final Object toWorldServer = ReflectUtil.getHandle(to.getWorld());
|
||||
final Object server = ReflectUtil.getHandle(Bukkit.getServer());
|
||||
Object toWorldServer = ReflectUtil.getHandle(to.getWorld());
|
||||
Object server = ReflectUtil.getHandle(Bukkit.getServer());
|
||||
if (_fWorldServer_dimension == null) {
|
||||
for (final Field field : ReflectUtil.getFieldByType(toWorldServer.getClass(), Integer.TYPE)) {
|
||||
final int modifier = field.getModifiers();
|
||||
for (Field field : ReflectUtil.getFieldByType(toWorldServer.getClass(), Integer.TYPE)) {
|
||||
int modifier = field.getModifiers();
|
||||
if (Modifier.isFinal(modifier) && Modifier.isPublic(modifier)) {
|
||||
_fWorldServer_dimension = field;
|
||||
}
|
||||
@ -327,7 +327,7 @@ public class EntityKit {
|
||||
}
|
||||
try {
|
||||
_mPlayerList_MoveToWorld.invoke(server, ReflectUtil.getHandle(entity), (int) _fWorldServer_dimension.get(toWorldServer), true, to, true);
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
@ -347,7 +347,7 @@ public class EntityKit {
|
||||
* @param groundBoost
|
||||
* 当实体在地上的时候,会稍微抬起一些
|
||||
*/
|
||||
public static void velocity(final Entity ent, final double speed, final double yAdd, final double yMax, final boolean groundBoost) {
|
||||
public static void velocity(Entity ent, double speed, double yAdd, double yMax, boolean groundBoost) {
|
||||
velocity(ent, ent.getLocation().getDirection(), speed, false, 0.0D, yAdd, yMax, groundBoost);
|
||||
}
|
||||
|
||||
@ -370,7 +370,7 @@ public class EntityKit {
|
||||
* @param groundBoost
|
||||
* 当实体在地上的时候,会稍微抬起一些
|
||||
*/
|
||||
public static void velocity(final Entity ent, final Vector vec, final double speed, final boolean ySet, final double yBase, final double yAdd, final double yMax, final boolean groundBoost) {
|
||||
public static void velocity(Entity ent, Vector vec, double speed, boolean ySet, double yBase, double yAdd, double yMax, boolean groundBoost) {
|
||||
if ((Double.isNaN(vec.getX())) || (Double.isNaN(vec.getY())) || (Double.isNaN(vec.getZ())) || (vec.length() == 0.0D)) {
|
||||
return;
|
||||
}
|
||||
@ -395,19 +395,19 @@ public class EntityKit {
|
||||
ent.setVelocity(vec);
|
||||
}
|
||||
|
||||
public static void walkTo(final Entity entity, final Location location) {
|
||||
public static void walkTo(Entity entity, Location location) {
|
||||
if (entity == null || location == null) {
|
||||
return;
|
||||
}
|
||||
final Object nmsEntityEntity = ReflectUtil.getHandle(entity);
|
||||
Object nmsEntityEntity = ReflectUtil.getHandle(entity);
|
||||
if (!_cEntityInsentient.isInstance(nmsEntityEntity)) {
|
||||
entity.teleport(location);
|
||||
return;
|
||||
}
|
||||
try {
|
||||
final Object oFollowerNavigation = _mGetNavigation.invoke(nmsEntityEntity);
|
||||
Object oFollowerNavigation = _mGetNavigation.invoke(nmsEntityEntity);
|
||||
|
||||
final Object path = _mA3.invoke(oFollowerNavigation, location.getX(), location.getY(), location.getZ());
|
||||
Object path = _mA3.invoke(oFollowerNavigation, location.getX(), location.getY(), location.getZ());
|
||||
if (path != null) {
|
||||
_mA2.invoke(oFollowerNavigation, path, 1D);
|
||||
_mA1.invoke(oFollowerNavigation, 2D);
|
||||
@ -415,7 +415,7 @@ public class EntityKit {
|
||||
if (location.distance(entity.getLocation()) > 20) {
|
||||
entity.teleport(location);
|
||||
}
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Copyright (c) 2011-2015, James Zhan 詹波 (jfinal@126.com).
|
||||
* Copyright (c) 2011-2015, James Zhan 詹波 (j@126.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -40,8 +40,8 @@ public class HashKit {
|
||||
* 数字比特
|
||||
* @return 种子字串
|
||||
*/
|
||||
public static String generateSalt(final int numberOfBytes) {
|
||||
final byte[] salt = new byte[numberOfBytes];
|
||||
public static String generateSalt(int numberOfBytes) {
|
||||
byte[] salt = new byte[numberOfBytes];
|
||||
random.nextBytes(salt);
|
||||
return toHex(salt);
|
||||
}
|
||||
@ -55,20 +55,20 @@ public class HashKit {
|
||||
* 字符串
|
||||
* @return 加密后的字符串
|
||||
*/
|
||||
public static String hash(final String algorithm, final String srcStr) {
|
||||
public static String hash(String algorithm, String srcStr) {
|
||||
try {
|
||||
final StringBuilder result = new StringBuilder();
|
||||
final MessageDigest md = MessageDigest.getInstance(algorithm);
|
||||
final byte[] bytes = md.digest(srcStr.getBytes("utf-8"));
|
||||
for (final byte b : bytes) {
|
||||
final String hex = Integer.toHexString(b & 0xFF);
|
||||
StringBuilder result = new StringBuilder();
|
||||
MessageDigest md = MessageDigest.getInstance(algorithm);
|
||||
byte[] bytes = md.digest(srcStr.getBytes("utf-8"));
|
||||
for (byte b : bytes) {
|
||||
String hex = Integer.toHexString(b & 0xFF);
|
||||
if (hex.length() == 1) {
|
||||
result.append("0");
|
||||
}
|
||||
result.append(hex);
|
||||
}
|
||||
return result.toString();
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
@ -80,7 +80,7 @@ public class HashKit {
|
||||
* 字符串
|
||||
* @return 加密后的字符串
|
||||
*/
|
||||
public static String md5(final String srcStr) {
|
||||
public static String md5(String srcStr) {
|
||||
return hash("MD5", srcStr);
|
||||
}
|
||||
|
||||
@ -91,7 +91,7 @@ public class HashKit {
|
||||
* 字符串
|
||||
* @return 加密后的字符串
|
||||
*/
|
||||
public static String sha1(final String srcStr) {
|
||||
public static String sha1(String srcStr) {
|
||||
return hash("SHA-1", srcStr);
|
||||
}
|
||||
|
||||
@ -102,7 +102,7 @@ public class HashKit {
|
||||
* 字符串
|
||||
* @return 加密后的字符串
|
||||
*/
|
||||
public static String sha256(final String srcStr) {
|
||||
public static String sha256(String srcStr) {
|
||||
return hash("SHA-256", srcStr);
|
||||
}
|
||||
|
||||
@ -113,7 +113,7 @@ public class HashKit {
|
||||
* 字符串
|
||||
* @return 加密后的字符串
|
||||
*/
|
||||
public static String sha384(final String srcStr) {
|
||||
public static String sha384(String srcStr) {
|
||||
return hash("SHA-384", srcStr);
|
||||
}
|
||||
|
||||
@ -124,7 +124,7 @@ public class HashKit {
|
||||
* 字符串
|
||||
* @return 加密后的字符串
|
||||
*/
|
||||
public static String sha512(final String srcStr) {
|
||||
public static String sha512(String srcStr) {
|
||||
return hash("SHA-512", srcStr);
|
||||
}
|
||||
|
||||
@ -135,10 +135,10 @@ public class HashKit {
|
||||
* Byte数组
|
||||
* @return 字符串
|
||||
*/
|
||||
private static String toHex(final byte[] bytes) {
|
||||
final StringBuilder result = new StringBuilder();
|
||||
for (final byte b : bytes) {
|
||||
final String hex = Integer.toHexString(b & 0xFF);
|
||||
private static String toHex(byte[] bytes) {
|
||||
StringBuilder result = new StringBuilder();
|
||||
for (byte b : bytes) {
|
||||
String hex = Integer.toHexString(b & 0xFF);
|
||||
if (hex.length() == 1) {
|
||||
result.append("0");
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Copyright (c) 2011-2015, James Zhan 詹波 (jfinal@126.com).
|
||||
* Copyright (c) 2011-2015, James Zhan 詹波 (j@126.com).
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -46,14 +46,14 @@ import javax.net.ssl.X509TrustManager;
|
||||
*/
|
||||
public class HttpKit {
|
||||
|
||||
private static final String GET = "GET";
|
||||
private static String GET = "GET";
|
||||
|
||||
private static final String POST = "POST";
|
||||
private static String POST = "POST";
|
||||
|
||||
private static final String CHARSET = "UTF-8";
|
||||
private static String CHARSET = "UTF-8";
|
||||
|
||||
private static final SSLSocketFactory sslSocketFactory = initSSLSocketFactory();
|
||||
private static final TrustAnyHostnameVerifier trustAnyHostnameVerifier = new HttpKit.TrustAnyHostnameVerifier();
|
||||
private static SSLSocketFactory sslSocketFactory = initSSLSocketFactory();
|
||||
private static TrustAnyHostnameVerifier trustAnyHostnameVerifier = new HttpKit.TrustAnyHostnameVerifier();
|
||||
|
||||
private HttpKit() {
|
||||
}
|
||||
@ -65,7 +65,7 @@ public class HttpKit {
|
||||
* 网址
|
||||
* @return 网页HTML
|
||||
*/
|
||||
public static String get(final String url) {
|
||||
public static String get(String url) {
|
||||
return get(url, null, null);
|
||||
}
|
||||
|
||||
@ -78,7 +78,7 @@ public class HttpKit {
|
||||
* 查询参数
|
||||
* @return 网页HTML
|
||||
*/
|
||||
public static String get(final String url, final Map<String, String> queryParas) {
|
||||
public static String get(String url, Map<String, String> queryParas) {
|
||||
return get(url, queryParas, null);
|
||||
}
|
||||
|
||||
@ -93,13 +93,13 @@ public class HttpKit {
|
||||
* 头信息
|
||||
* @return 网页HTML
|
||||
*/
|
||||
public static String get(final String url, final Map<String, String> queryParas, final Map<String, String> headers) {
|
||||
public static String get(String url, Map<String, String> queryParas, Map<String, String> headers) {
|
||||
HttpURLConnection conn = null;
|
||||
try {
|
||||
conn = getHttpConnection(buildUrlWithQueryString(url, queryParas), GET, headers);
|
||||
conn.connect();
|
||||
return readResponseString(conn);
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
} finally {
|
||||
if (conn != null) {
|
||||
@ -119,7 +119,7 @@ public class HttpKit {
|
||||
* 数据
|
||||
* @return 网页HTML
|
||||
*/
|
||||
public static String post(final String url, final Map<String, String> queryParas, final String data) {
|
||||
public static String post(String url, Map<String, String> queryParas, String data) {
|
||||
return post(url, queryParas, data, null);
|
||||
}
|
||||
|
||||
@ -136,19 +136,19 @@ public class HttpKit {
|
||||
* 头信息
|
||||
* @return 网页HTML
|
||||
*/
|
||||
public static String post(final String url, final Map<String, String> queryParas, final String data, final Map<String, String> headers) {
|
||||
public static String post(String url, Map<String, String> queryParas, String data, Map<String, String> headers) {
|
||||
HttpURLConnection conn = null;
|
||||
try {
|
||||
conn = getHttpConnection(buildUrlWithQueryString(url, queryParas), POST, headers);
|
||||
conn.connect();
|
||||
|
||||
final OutputStream out = conn.getOutputStream();
|
||||
OutputStream out = conn.getOutputStream();
|
||||
out.write(data.getBytes(CHARSET));
|
||||
out.flush();
|
||||
out.close();
|
||||
|
||||
return readResponseString(conn);
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
} finally {
|
||||
if (conn != null) {
|
||||
@ -166,7 +166,7 @@ public class HttpKit {
|
||||
* 查询参数
|
||||
* @return 网页HTML
|
||||
*/
|
||||
public static String post(final String url, final String data) {
|
||||
public static String post(String url, String data) {
|
||||
return post(url, null, data, null);
|
||||
}
|
||||
|
||||
@ -181,7 +181,7 @@ public class HttpKit {
|
||||
* 头信息
|
||||
* @return 网页HTML
|
||||
*/
|
||||
public static String post(final String url, final String data, final Map<String, String> headers) {
|
||||
public static String post(String url, String data, Map<String, String> headers) {
|
||||
return post(url, null, data, headers);
|
||||
}
|
||||
|
||||
@ -194,12 +194,12 @@ public class HttpKit {
|
||||
* 参数
|
||||
* @return 构建后的地址
|
||||
*/
|
||||
private static String buildUrlWithQueryString(final String url, final Map<String, String> queryParas) {
|
||||
private static String buildUrlWithQueryString(String url, Map<String, String> queryParas) {
|
||||
if (queryParas == null || queryParas.isEmpty()) {
|
||||
return url;
|
||||
}
|
||||
|
||||
final StringBuilder sb = new StringBuilder(url);
|
||||
StringBuilder sb = new StringBuilder(url);
|
||||
boolean isFirst;
|
||||
if (url.indexOf("?") == -1) {
|
||||
isFirst = true;
|
||||
@ -208,19 +208,19 @@ public class HttpKit {
|
||||
isFirst = false;
|
||||
}
|
||||
|
||||
for (final Entry<String, String> entry : queryParas.entrySet()) {
|
||||
for (Entry<String, String> entry : queryParas.entrySet()) {
|
||||
if (isFirst) {
|
||||
isFirst = false;
|
||||
} else {
|
||||
sb.append("&");
|
||||
}
|
||||
|
||||
final String key = entry.getKey();
|
||||
String key = entry.getKey();
|
||||
String value = entry.getValue();
|
||||
if (StrKit.notBlank(value)) {
|
||||
try {
|
||||
value = URLEncoder.encode(value, CHARSET);
|
||||
} catch (final UnsupportedEncodingException e) {
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
@ -244,9 +244,9 @@ public class HttpKit {
|
||||
* @throws NoSuchProviderException
|
||||
* @throws KeyManagementException
|
||||
*/
|
||||
private static HttpURLConnection getHttpConnection(final String url, final String method, final Map<String, String> headers) throws IOException, NoSuchAlgorithmException, NoSuchProviderException, KeyManagementException {
|
||||
final URL _url = new URL(url);
|
||||
final HttpURLConnection conn = (HttpURLConnection) _url.openConnection();
|
||||
private static HttpURLConnection getHttpConnection(String url, String method, Map<String, String> headers) throws IOException, NoSuchAlgorithmException, NoSuchProviderException, KeyManagementException {
|
||||
URL _url = new URL(url);
|
||||
HttpURLConnection conn = (HttpURLConnection) _url.openConnection();
|
||||
if (conn instanceof HttpsURLConnection) {
|
||||
((HttpsURLConnection) conn).setSSLSocketFactory(sslSocketFactory);
|
||||
((HttpsURLConnection) conn).setHostnameVerifier(trustAnyHostnameVerifier);
|
||||
@ -263,7 +263,7 @@ public class HttpKit {
|
||||
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.146 Safari/537.36");
|
||||
|
||||
if (headers != null && !headers.isEmpty()) {
|
||||
for (final Entry<String, String> entry : headers.entrySet()) {
|
||||
for (Entry<String, String> entry : headers.entrySet()) {
|
||||
conn.setRequestProperty(entry.getKey(), entry.getValue());
|
||||
}
|
||||
}
|
||||
@ -278,11 +278,11 @@ public class HttpKit {
|
||||
*/
|
||||
private static SSLSocketFactory initSSLSocketFactory() {
|
||||
try {
|
||||
final TrustManager[] tm = { new HttpKit.TrustAnyTrustManager() };
|
||||
final SSLContext sslContext = SSLContext.getInstance("TLS", "SunJSSE");
|
||||
TrustManager[] tm = { new HttpKit.TrustAnyTrustManager() };
|
||||
SSLContext sslContext = SSLContext.getInstance("TLS", "SunJSSE");
|
||||
sslContext.init(null, tm, new java.security.SecureRandom());
|
||||
return sslContext.getSocketFactory();
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
@ -294,24 +294,24 @@ public class HttpKit {
|
||||
* HTTP连接
|
||||
* @return 字符串
|
||||
*/
|
||||
private static String readResponseString(final HttpURLConnection conn) {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
private static String readResponseString(HttpURLConnection conn) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
InputStream inputStream = null;
|
||||
try {
|
||||
inputStream = conn.getInputStream();
|
||||
final BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, CHARSET));
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, CHARSET));
|
||||
String line = null;
|
||||
while ((line = reader.readLine()) != null) {
|
||||
sb.append(line).append("\n");
|
||||
}
|
||||
return sb.toString();
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
} finally {
|
||||
if (inputStream != null) {
|
||||
try {
|
||||
inputStream.close();
|
||||
} catch (final IOException e) {
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
@ -326,7 +326,7 @@ public class HttpKit {
|
||||
*/
|
||||
private static class TrustAnyHostnameVerifier implements HostnameVerifier {
|
||||
@Override
|
||||
public boolean verify(final String hostname, final SSLSession session) {
|
||||
public boolean verify(String hostname, SSLSession session) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
@ -339,11 +339,11 @@ public class HttpKit {
|
||||
*/
|
||||
private static class TrustAnyTrustManager implements X509TrustManager {
|
||||
@Override
|
||||
public void checkClientTrusted(final X509Certificate[] chain, final String authType) throws CertificateException {
|
||||
public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void checkServerTrusted(final X509Certificate[] chain, final String authType) throws CertificateException {
|
||||
public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -17,7 +17,7 @@ import pw.yumc.YumCore.bukkit.P;
|
||||
* @author 喵♂呜
|
||||
*/
|
||||
public class PKit {
|
||||
private static final Map<ClassLoader, Plugin> pluginMap = new HashMap<>();
|
||||
private static Map<ClassLoader, Plugin> pluginMap = new HashMap<>();
|
||||
|
||||
/**
|
||||
* 关闭插件
|
||||
@ -32,7 +32,7 @@ public class PKit {
|
||||
* @param msg
|
||||
* 关闭提示
|
||||
*/
|
||||
public static void disable(final String msg) {
|
||||
public static void disable(String msg) {
|
||||
Log.warning(msg);
|
||||
disable();
|
||||
}
|
||||
@ -53,15 +53,15 @@ public class PKit {
|
||||
* 堆栈
|
||||
* @return 操作插件
|
||||
*/
|
||||
public static Plugin getOperatePlugin(final StackTraceElement[] stacktrace) {
|
||||
public static Plugin getOperatePlugin(StackTraceElement[] stacktrace) {
|
||||
collectPlugin();
|
||||
for (final StackTraceElement element : stacktrace) {
|
||||
for (StackTraceElement element : stacktrace) {
|
||||
try {
|
||||
final ClassLoader loader = Class.forName(element.getClassName(), false, PKit.class.getClassLoader()).getClassLoader();
|
||||
ClassLoader loader = Class.forName(element.getClassName(), false, PKit.class.getClassLoader()).getClassLoader();
|
||||
if (pluginMap.containsKey(loader)) {
|
||||
return pluginMap.get(loader);
|
||||
}
|
||||
} catch (final ClassNotFoundException ex) {
|
||||
} catch (ClassNotFoundException ex) {
|
||||
}
|
||||
}
|
||||
return null;
|
||||
@ -74,7 +74,7 @@ public class PKit {
|
||||
* 任务
|
||||
* @return Bukkit 任务 {@link BukkitTask}
|
||||
*/
|
||||
public static BukkitTask runTask(final Runnable run) {
|
||||
public static BukkitTask runTask(Runnable run) {
|
||||
return Bukkit.getScheduler().runTask(P.instance, run);
|
||||
}
|
||||
|
||||
@ -85,7 +85,7 @@ public class PKit {
|
||||
* 任务
|
||||
* @return Bukkit 任务 {@link BukkitTask}
|
||||
*/
|
||||
public static BukkitTask runTaskAsync(final Runnable run) {
|
||||
public static BukkitTask runTaskAsync(Runnable run) {
|
||||
return Bukkit.getScheduler().runTaskAsynchronously(P.instance, run);
|
||||
}
|
||||
|
||||
@ -98,7 +98,7 @@ public class PKit {
|
||||
* 延时多久
|
||||
* @return Bukkit 任务 {@link BukkitTask}
|
||||
*/
|
||||
public static BukkitTask runTaskLater(final Runnable run, final long delay) {
|
||||
public static BukkitTask runTaskLater(Runnable run, long delay) {
|
||||
return Bukkit.getScheduler().runTaskLater(P.instance, run, delay);
|
||||
}
|
||||
|
||||
@ -111,7 +111,7 @@ public class PKit {
|
||||
* 延时多久
|
||||
* @return Bukkit 任务 {@link BukkitTask}
|
||||
*/
|
||||
public static BukkitTask runTaskLaterAsync(final Runnable run, final long delay) {
|
||||
public static BukkitTask runTaskLaterAsync(Runnable run, long delay) {
|
||||
return Bukkit.getScheduler().runTaskLaterAsynchronously(P.instance, run, delay);
|
||||
}
|
||||
|
||||
@ -126,7 +126,7 @@ public class PKit {
|
||||
* 任务间隔
|
||||
* @return Bukkit 任务 {@link BukkitTask}
|
||||
*/
|
||||
public static BukkitTask runTaskTimer(final Runnable run, final long delay, final long timer) {
|
||||
public static BukkitTask runTaskTimer(Runnable run, long delay, long timer) {
|
||||
return Bukkit.getScheduler().runTaskTimer(P.instance, run, delay, timer);
|
||||
}
|
||||
|
||||
@ -141,7 +141,7 @@ public class PKit {
|
||||
* 任务间隔
|
||||
* @return Bukkit 任务 {@link BukkitTask}
|
||||
*/
|
||||
public static BukkitTask runTaskTimerAsync(final Runnable run, final long delay, final long timer) {
|
||||
public static BukkitTask runTaskTimerAsync(Runnable run, long delay, long timer) {
|
||||
return Bukkit.getScheduler().runTaskTimerAsynchronously(P.instance, run, delay, timer);
|
||||
}
|
||||
|
||||
@ -152,7 +152,7 @@ public class PKit {
|
||||
* 任务
|
||||
* @return 任务ID
|
||||
*/
|
||||
public static int scheduleTask(final Runnable run) {
|
||||
public static int scheduleTask(Runnable run) {
|
||||
return Bukkit.getScheduler().scheduleSyncDelayedTask(P.instance, run);
|
||||
}
|
||||
|
||||
@ -167,7 +167,7 @@ public class PKit {
|
||||
* 执行间隔
|
||||
* @return 任务ID
|
||||
*/
|
||||
public static int scheduleTask(final Runnable run, final long delay, final long timer) {
|
||||
public static int scheduleTask(Runnable run, long delay, long timer) {
|
||||
return Bukkit.getScheduler().scheduleSyncRepeatingTask(P.instance, run, delay, timer);
|
||||
}
|
||||
|
||||
@ -177,7 +177,7 @@ public class PKit {
|
||||
private static void collectPlugin() {
|
||||
if (Bukkit.getPluginManager().getPlugins().length != pluginMap.keySet().size() - 1) {
|
||||
pluginMap.clear();
|
||||
for (final Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
|
||||
for (Plugin plugin : Bukkit.getPluginManager().getPlugins()) {
|
||||
pluginMap.put(plugin.getClass().getClassLoader(), plugin);
|
||||
}
|
||||
pluginMap.remove(PKit.class.getClassLoader());
|
||||
|
@ -12,7 +12,7 @@ import org.bukkit.ChatColor;
|
||||
* @since 2016年9月14日 上午1:02:23
|
||||
*/
|
||||
public class StrKit {
|
||||
private static final String EMPTY = "";
|
||||
private static String EMPTY = "";
|
||||
|
||||
private StrKit() {
|
||||
}
|
||||
@ -22,7 +22,7 @@ public class StrKit {
|
||||
* 源字串
|
||||
* @return 颜色转化后的字串
|
||||
*/
|
||||
public static String color(final String string) {
|
||||
public static String color(String string) {
|
||||
return ChatColor.translateAlternateColorCodes('&', string);
|
||||
}
|
||||
|
||||
@ -35,7 +35,7 @@ public class StrKit {
|
||||
* 数组开始位置
|
||||
* @return 转移后的数组字符串
|
||||
*/
|
||||
public static String consolidateStrings(final String[] args, final int start) {
|
||||
public static String consolidateStrings(String[] args, int start) {
|
||||
String ret = args[start];
|
||||
if (args.length > start + 1) {
|
||||
for (int i = start + 1; i < args.length; i++) {
|
||||
@ -69,12 +69,12 @@ public class StrKit {
|
||||
* if originals contains a null element.
|
||||
* <b>Note: the collection may be modified before this is thrown</b>
|
||||
*/
|
||||
public static <T extends Collection<? super String>> T copyPartialMatches(final String token, final Iterable<String> originals, final T collection) throws UnsupportedOperationException, IllegalArgumentException {
|
||||
public static <T extends Collection<? super String>> T copyPartialMatches(String token, Iterable<String> originals, T collection) throws UnsupportedOperationException, IllegalArgumentException {
|
||||
Validate.notNull(token, "Search token cannot be null");
|
||||
Validate.notNull(collection, "Collection cannot be null");
|
||||
Validate.notNull(originals, "Originals cannot be null");
|
||||
|
||||
for (final String string : originals) {
|
||||
for (String string : originals) {
|
||||
if (startsWithIgnoreCase(string, token)) {
|
||||
collection.add(string);
|
||||
}
|
||||
@ -88,7 +88,7 @@ public class StrKit {
|
||||
* 字串
|
||||
* @return 是否为空字串
|
||||
*/
|
||||
public static boolean isBlank(final String str) {
|
||||
public static boolean isBlank(String str) {
|
||||
return str == null || str.isEmpty();
|
||||
}
|
||||
|
||||
@ -99,7 +99,7 @@ public class StrKit {
|
||||
* 数组
|
||||
* @return 字符串
|
||||
*/
|
||||
public static String join(final Object[] arr) {
|
||||
public static String join(Object[] arr) {
|
||||
return join(arr, EMPTY);
|
||||
}
|
||||
|
||||
@ -112,9 +112,9 @@ public class StrKit {
|
||||
* 分割符
|
||||
* @return 字符串
|
||||
*/
|
||||
public static String join(final Object[] arr, final String split) {
|
||||
final StringBuffer str = new StringBuffer();
|
||||
for (final Object s : arr) {
|
||||
public static String join(Object[] arr, String split) {
|
||||
StringBuffer str = new StringBuffer();
|
||||
for (Object s : arr) {
|
||||
str.append(s.toString());
|
||||
str.append(split);
|
||||
}
|
||||
@ -126,7 +126,7 @@ public class StrKit {
|
||||
* 字串
|
||||
* @return 是否不为空字串
|
||||
*/
|
||||
public static boolean notBlank(final String str) {
|
||||
public static boolean notBlank(String str) {
|
||||
return str != null && !str.isEmpty();
|
||||
}
|
||||
|
||||
@ -146,7 +146,7 @@ public class StrKit {
|
||||
* @throws IllegalArgumentException
|
||||
* if string is null
|
||||
*/
|
||||
public static boolean startsWithIgnoreCase(final String string, final String prefix) throws IllegalArgumentException, NullPointerException {
|
||||
public static boolean startsWithIgnoreCase(String string, String prefix) throws IllegalArgumentException, NullPointerException {
|
||||
Validate.notNull(string, "Cannot check a null string for a match");
|
||||
if (string.length() < prefix.length()) {
|
||||
return false;
|
||||
@ -200,7 +200,7 @@ public class StrKit {
|
||||
* @return substring from start position to end positon,
|
||||
* <code>null</code> if null String input
|
||||
*/
|
||||
public static String substring(final String str, int start, int end) {
|
||||
public static String substring(String str, int start, int end) {
|
||||
if (str == null) {
|
||||
return null;
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ public class ZipKit {
|
||||
* 名称
|
||||
* @return
|
||||
*/
|
||||
public static String getRealName(final String name) {
|
||||
public static String getRealName(String name) {
|
||||
return new File(name).getName();
|
||||
}
|
||||
|
||||
@ -37,7 +37,7 @@ public class ZipKit {
|
||||
* @throws IOException
|
||||
* IO异常
|
||||
*/
|
||||
public static void unzip(final File zipFile, final File destPath) throws ZipException, IOException {
|
||||
public static void unzip(File zipFile, File destPath) throws ZipException, IOException {
|
||||
unzip(zipFile, destPath, null);
|
||||
}
|
||||
|
||||
@ -53,12 +53,12 @@ public class ZipKit {
|
||||
* @throws IOException
|
||||
* IO异常
|
||||
*/
|
||||
public static void unzip(final File zipFile, final File destPath, final String ext) throws ZipException, IOException {
|
||||
final ZipFile zipObj = new ZipFile(zipFile);
|
||||
final Enumeration<? extends ZipEntry> e = zipObj.entries();
|
||||
public static void unzip(File zipFile, File destPath, String ext) throws ZipException, IOException {
|
||||
ZipFile zipObj = new ZipFile(zipFile);
|
||||
Enumeration<? extends ZipEntry> e = zipObj.entries();
|
||||
while (e.hasMoreElements()) {
|
||||
final ZipEntry entry = e.nextElement();
|
||||
final File destinationFilePath = new File(destPath, getRealName(entry.getName()));
|
||||
ZipEntry entry = e.nextElement();
|
||||
File destinationFilePath = new File(destPath, getRealName(entry.getName()));
|
||||
if (entry.isDirectory() || (ext != null && !destinationFilePath.getName().endsWith(ext))) {
|
||||
continue;
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ public class MailAPI {
|
||||
* 内容
|
||||
* @return 是否发送成功
|
||||
*/
|
||||
public static boolean send(final HostAndPort smtp, final String from, final String to, final String subject, final String content) {
|
||||
public static boolean send(HostAndPort smtp, String from, String to, String subject, String content) {
|
||||
return send(smtp, from, to, subject, content, null, null);
|
||||
}
|
||||
|
||||
@ -47,7 +47,7 @@ public class MailAPI {
|
||||
* 密码
|
||||
* @return 是否发送成功
|
||||
*/
|
||||
public static boolean send(final HostAndPort smtp, final String from, final String to, final String subject, final String content, final String username, final String password) {
|
||||
public static boolean send(HostAndPort smtp, String from, String to, String subject, String content, String username, String password) {
|
||||
return send(smtp, from, null, to, subject, content, username, password);
|
||||
}
|
||||
|
||||
@ -72,7 +72,7 @@ public class MailAPI {
|
||||
* 密码
|
||||
* @return 是否发送成功
|
||||
*/
|
||||
public static boolean send(final HostAndPort smtp, final String from, final String fromName, final String to, final String subject, final String content, final String username, final String password) {
|
||||
public static boolean send(HostAndPort smtp, String from, String fromName, String to, String subject, String content, String username, String password) {
|
||||
return send(smtp, from, fromName, to, null, subject, content, username, password);
|
||||
}
|
||||
|
||||
@ -99,7 +99,7 @@ public class MailAPI {
|
||||
* 密码
|
||||
* @return 是否发送成功
|
||||
*/
|
||||
public static boolean send(final HostAndPort smtp, final String from, final String fromName, final String to, final String copyto, final String subject, final String content, final String username, final String password) {
|
||||
public static boolean send(HostAndPort smtp, String from, String fromName, String to, String copyto, String subject, String content, String username, String password) {
|
||||
return send(smtp, from, fromName, to, copyto, subject, content, null, username, password);
|
||||
}
|
||||
|
||||
@ -128,7 +128,7 @@ public class MailAPI {
|
||||
* 密码
|
||||
* @return 是否发送成功
|
||||
*/
|
||||
public static boolean send(final HostAndPort smtp, final String from, final String fromName, final String to, final String copyto, final String subject, final String content, final String[] filename, final String username, final String password) {
|
||||
public static boolean send(HostAndPort smtp, String from, String fromName, String to, String copyto, String subject, String content, String[] filename, String username, String password) {
|
||||
return XMail.send(smtp, from, fromName, to, copyto, subject, content, filename, username, password, true);
|
||||
}
|
||||
}
|
||||
|
@ -28,16 +28,16 @@ public class MailAuthenticator extends Authenticator {
|
||||
* @param password
|
||||
* 密码
|
||||
*/
|
||||
public MailAuthenticator(final String username, final String password) {
|
||||
public MailAuthenticator(String username, String password) {
|
||||
this.username = username;
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
public void setPassword(final String password) {
|
||||
public void setPassword(String password) {
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
public void setUsername(final String username) {
|
||||
public void setUsername(String username) {
|
||||
this.username = username;
|
||||
}
|
||||
|
||||
|
@ -13,7 +13,7 @@ class SimpleMail {
|
||||
private String from = null;
|
||||
private Address sender;
|
||||
|
||||
public SimpleMail(final String subject, final Object content) {
|
||||
public SimpleMail(String subject, Object content) {
|
||||
this.subject = subject;
|
||||
this.content = content;
|
||||
}
|
||||
@ -53,19 +53,19 @@ class SimpleMail {
|
||||
*
|
||||
* @param content
|
||||
*/
|
||||
public void setContent(final Object content) {
|
||||
public void setContent(Object content) {
|
||||
this.content = content;
|
||||
}
|
||||
|
||||
public void setFrom(final String from) {
|
||||
public void setFrom(String from) {
|
||||
this.from = from;
|
||||
}
|
||||
|
||||
public void setSender(final Address sender) {
|
||||
public void setSender(Address sender) {
|
||||
this.sender = sender;
|
||||
}
|
||||
|
||||
public void setSentDate(final Date date) {
|
||||
public void setSentDate(Date date) {
|
||||
this.sentDate = date;
|
||||
}
|
||||
|
||||
@ -74,7 +74,7 @@ class SimpleMail {
|
||||
*
|
||||
* @param subject
|
||||
*/
|
||||
public void setSubject(final String subject) {
|
||||
public void setSubject(String subject) {
|
||||
this.subject = subject;
|
||||
}
|
||||
|
||||
|
@ -20,7 +20,7 @@ public class SimpleMailSender {
|
||||
/**
|
||||
* 发送邮件的props文件
|
||||
*/
|
||||
private final transient Properties props = System.getProperties();
|
||||
private transient Properties props = System.getProperties();
|
||||
|
||||
/**
|
||||
* 邮件服务器登录验证
|
||||
@ -40,9 +40,9 @@ public class SimpleMailSender {
|
||||
* @param password
|
||||
* 发送邮件的密码
|
||||
*/
|
||||
public SimpleMailSender(final String username, final String password) {
|
||||
public SimpleMailSender(String username, String password) {
|
||||
// 通过邮箱地址解析出smtp服务器,对大多数邮箱都管用
|
||||
final String smtpHostName = "smtp." + username.split("@")[1];
|
||||
String smtpHostName = "smtp." + username.split("@")[1];
|
||||
init(smtpHostName, username, password);
|
||||
}
|
||||
|
||||
@ -56,7 +56,7 @@ public class SimpleMailSender {
|
||||
* @param password
|
||||
* 发送邮件的密码
|
||||
*/
|
||||
public SimpleMailSender(final String smtpHostName, final String username, final String password) {
|
||||
public SimpleMailSender(String smtpHostName, String username, String password) {
|
||||
init(username, password, smtpHostName);
|
||||
}
|
||||
|
||||
@ -70,9 +70,9 @@ public class SimpleMailSender {
|
||||
* @throws AddressException
|
||||
* @throws MessagingException
|
||||
*/
|
||||
public void send(final SimpleMail mail, final String... recipients) throws AddressException, MessagingException {
|
||||
public void send(SimpleMail mail, String... recipients) throws AddressException, MessagingException {
|
||||
// 创建mime类型邮件
|
||||
final MimeMessage message = new MimeMessage(session);
|
||||
MimeMessage message = new MimeMessage(session);
|
||||
// 设置发信人
|
||||
if (mail.getFrom() != null) {
|
||||
message.setFrom(new InternetAddress(mail.getFrom()));
|
||||
@ -80,8 +80,8 @@ public class SimpleMailSender {
|
||||
message.setFrom(new InternetAddress(authenticator.getUsername()));
|
||||
}
|
||||
// 设置收件人们
|
||||
final int num = recipients.length;
|
||||
final InternetAddress[] addresses = new InternetAddress[num];
|
||||
int num = recipients.length;
|
||||
InternetAddress[] addresses = new InternetAddress[num];
|
||||
for (int i = 0; i < num; i++) {
|
||||
addresses[i] = new InternetAddress(recipients[i]);
|
||||
}
|
||||
@ -112,7 +112,7 @@ public class SimpleMailSender {
|
||||
* @throws AddressException
|
||||
* @throws MessagingException
|
||||
*/
|
||||
public void send(final String subject, final Object content, final String... recipients) throws AddressException, MessagingException {
|
||||
public void send(String subject, Object content, String... recipients) throws AddressException, MessagingException {
|
||||
this.send(new SimpleMail(subject, content), recipients);
|
||||
}
|
||||
|
||||
@ -126,7 +126,7 @@ public class SimpleMailSender {
|
||||
* @param smtpHostName
|
||||
* SMTP主机地址
|
||||
*/
|
||||
private void init(final String smtpHostName, final String username, final String password) {
|
||||
private void init(String smtpHostName, String username, String password) {
|
||||
// 初始化props
|
||||
props.put("mail.smtp.auth", "true");
|
||||
props.put("mail.smtp.host", smtpHostName);
|
||||
|
@ -26,8 +26,8 @@ public class XMail {
|
||||
|
||||
private static boolean autoRegister = true;
|
||||
|
||||
private static final HashMap<String, DataContentHandler> handlers = new HashMap<>();
|
||||
private static final DataContentHandlerFactory defaultDataContentHandlerFactory;
|
||||
private static HashMap<String, DataContentHandler> handlers = new HashMap<>();
|
||||
private static DataContentHandlerFactory defaultDataContentHandlerFactory;
|
||||
static {
|
||||
// todo
|
||||
// activation.jar
|
||||
@ -43,8 +43,8 @@ public class XMail {
|
||||
handlers.put("image/jpeg", new com.sun.mail.handlers.image_jpeg());
|
||||
defaultDataContentHandlerFactory = new DataContentHandlerFactory() {
|
||||
@Override
|
||||
public DataContentHandler createDataContentHandler(final String type) {
|
||||
final DataContentHandler handler = handlers.get(type);
|
||||
public DataContentHandler createDataContentHandler(String type) {
|
||||
DataContentHandler handler = handlers.get(type);
|
||||
if (handler != null) {
|
||||
return handler;
|
||||
}
|
||||
@ -54,7 +54,7 @@ public class XMail {
|
||||
};
|
||||
}
|
||||
|
||||
public static void addDataContentHandler(final String type, final DataContentHandler handler) {
|
||||
public static void addDataContentHandler(String type, DataContentHandler handler) {
|
||||
handlers.put(type, handler);
|
||||
}
|
||||
|
||||
@ -66,7 +66,7 @@ public class XMail {
|
||||
try {
|
||||
DataHandler.setDataContentHandlerFactory(defaultDataContentHandlerFactory);
|
||||
return true;
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -98,19 +98,19 @@ public class XMail {
|
||||
* 是否需要验证
|
||||
* @return 是否发送成功
|
||||
*/
|
||||
public static boolean send(final HostAndPort smtp, final String from, String fromName, final String to, final String copyto, final String subject, final String content, final String[] filename, final String username, final String password, final boolean needAuth) {
|
||||
public static boolean send(HostAndPort smtp, String from, String fromName, String to, String copyto, String subject, String content, String[] filename, final String username, final String password, boolean needAuth) {
|
||||
try {
|
||||
if (isAutoRegister()) {
|
||||
unregisterDefaultDataContentHandlerFactory();
|
||||
registerDefaultDataContentHandlerFactory();
|
||||
}
|
||||
final Properties props = new Properties();
|
||||
Properties props = new Properties();
|
||||
props.put("mail.smtp.host", smtp.getHostText());
|
||||
props.put("mail.smtp.port", smtp.getPort());
|
||||
props.put("mail.smtp.socketFactory.port", smtp.getPort());
|
||||
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
|
||||
props.put("mail.smtp.auth", needAuth);
|
||||
final Session mailSession = Session.getInstance(props, new Authenticator() {
|
||||
Session mailSession = Session.getInstance(props, new Authenticator() {
|
||||
|
||||
@Override
|
||||
protected PasswordAuthentication getPasswordAuthentication() {
|
||||
@ -120,31 +120,31 @@ public class XMail {
|
||||
if (fromName == null) {
|
||||
fromName = from;
|
||||
}
|
||||
final MimeMessage mimeMsg = new MimeMessage(mailSession);
|
||||
MimeMessage mimeMsg = new MimeMessage(mailSession);
|
||||
mimeMsg.setSubject(subject);
|
||||
|
||||
final MimeMultipart mp = new MimeMultipart();
|
||||
MimeMultipart mp = new MimeMultipart();
|
||||
|
||||
if (content != null) {
|
||||
try {
|
||||
final BodyPart bp = new MimeBodyPart();
|
||||
BodyPart bp = new MimeBodyPart();
|
||||
bp.setContent("" + content, "text/html;charset=GBK");
|
||||
mp.addBodyPart(bp);
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
System.err.println("设置邮件正文时发生错误!" + e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (filename != null) {
|
||||
for (final String file : filename) {
|
||||
for (String file : filename) {
|
||||
try {
|
||||
final BodyPart bp = new MimeBodyPart();
|
||||
final FileDataSource fileds = new FileDataSource(file);
|
||||
BodyPart bp = new MimeBodyPart();
|
||||
FileDataSource fileds = new FileDataSource(file);
|
||||
bp.setDataHandler(new DataHandler(fileds));
|
||||
bp.setFileName(fileds.getName());
|
||||
mp.addBodyPart(bp);
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
System.err.println("增加邮件附件:" + file + "发生错误!" + e);
|
||||
}
|
||||
}
|
||||
@ -156,10 +156,10 @@ public class XMail {
|
||||
// 设置发信人
|
||||
try {
|
||||
mimeMsg.setFrom(new InternetAddress(from, fromName));
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
mimeMsg.setFrom(new InternetAddress(from));
|
||||
}
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
System.err.println("设置发信人发生错误!");
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
@ -167,7 +167,7 @@ public class XMail {
|
||||
|
||||
try {
|
||||
mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
System.err.println("设置接收人发生错误!");
|
||||
e.printStackTrace();
|
||||
return false;
|
||||
@ -178,10 +178,10 @@ public class XMail {
|
||||
// 设置抄送人
|
||||
try {
|
||||
mimeMsg.setFrom(new InternetAddress(from, fromName));
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
mimeMsg.setFrom(new InternetAddress(from));
|
||||
}
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
System.err.println("设置抄送人发生错误!");
|
||||
e.printStackTrace();
|
||||
}
|
||||
@ -194,7 +194,7 @@ public class XMail {
|
||||
Transport.send(mimeMsg);
|
||||
|
||||
return true;
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
if (isAutoRegister()) {
|
||||
@ -204,18 +204,18 @@ public class XMail {
|
||||
return false;
|
||||
}
|
||||
|
||||
public static void setAutoRegister(final boolean autoRegister) {
|
||||
public static void setAutoRegister(boolean autoRegister) {
|
||||
XMail.autoRegister = autoRegister;
|
||||
}
|
||||
|
||||
public static Object unregisterDefaultDataContentHandlerFactory() {
|
||||
try {
|
||||
final Field field = DataHandler.class.getDeclaredField("factory");
|
||||
Field field = DataHandler.class.getDeclaredField("factory");
|
||||
field.setAccessible(true);
|
||||
final Object object = field.get(null);
|
||||
Object object = field.get(null);
|
||||
field.set(null, null);
|
||||
return object;
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
@ -14,11 +14,11 @@ import java.util.List;
|
||||
* @author 喵♂呜
|
||||
*/
|
||||
public class PasteContent {
|
||||
private final static String errN = "异常名称: %s";
|
||||
private final static String errM = "异常说明: %s";
|
||||
private final static String errInfo = "简易错误信息如下:";
|
||||
private final static String errStackTrace = " 位于 %s.%s(%s:%s)";
|
||||
private final List<String> TEXT = new ArrayList<>();
|
||||
private static String errN = "异常名称: %s";
|
||||
private static String errM = "异常说明: %s";
|
||||
private static String errInfo = "简易错误信息如下:";
|
||||
private static String errStackTrace = " 位于 %s.%s(%s:%s)";
|
||||
private List<String> TEXT = new ArrayList<>();
|
||||
|
||||
/**
|
||||
* 添加文件
|
||||
@ -28,7 +28,7 @@ public class PasteContent {
|
||||
* @throws IOException
|
||||
* IO异常
|
||||
*/
|
||||
public void addFile(final File file) throws IOException {
|
||||
public void addFile(File file) throws IOException {
|
||||
if (file == null) {
|
||||
throw new IllegalArgumentException("文件不得为Null!");
|
||||
}
|
||||
@ -41,7 +41,7 @@ public class PasteContent {
|
||||
* @param str
|
||||
* 行
|
||||
*/
|
||||
public void addLine(final String str) {
|
||||
public void addLine(String str) {
|
||||
this.TEXT.add(str);
|
||||
}
|
||||
|
||||
@ -51,7 +51,7 @@ public class PasteContent {
|
||||
* @param str
|
||||
* 行
|
||||
*/
|
||||
public void addLines(final List<String> str) {
|
||||
public void addLines(List<String> str) {
|
||||
this.TEXT.addAll(str);
|
||||
}
|
||||
|
||||
@ -61,7 +61,7 @@ public class PasteContent {
|
||||
* @param e
|
||||
* 异常
|
||||
*/
|
||||
public void addThrowable(final Throwable e) {
|
||||
public void addThrowable(Throwable e) {
|
||||
Throwable temp = e;
|
||||
while (temp.getCause() != null) {
|
||||
temp = temp.getCause();
|
||||
@ -69,15 +69,15 @@ public class PasteContent {
|
||||
TEXT.add(String.format(errN, e.getClass().getName()));
|
||||
TEXT.add(String.format(errM, e.getMessage()));
|
||||
TEXT.add(errInfo);
|
||||
for (final StackTraceElement ste : e.getStackTrace()) {
|
||||
for (StackTraceElement ste : e.getStackTrace()) {
|
||||
TEXT.add(String.format(errStackTrace, ste.getClassName(), ste.getMethodName(), ste.getFileName(), ste.getLineNumber() < 0 ? "未知" : ste.getLineNumber()));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
final StringBuilder text = new StringBuilder();
|
||||
for (final String str : TEXT) {
|
||||
StringBuilder text = new StringBuilder();
|
||||
for (String str : TEXT) {
|
||||
text.append(str + '\n');
|
||||
}
|
||||
return text.toString();
|
||||
|
@ -14,7 +14,7 @@ public enum PasteFormat {
|
||||
|
||||
String format;
|
||||
|
||||
private PasteFormat(final String format) {
|
||||
private PasteFormat(String format) {
|
||||
this.format = format;
|
||||
}
|
||||
|
||||
|
@ -5,39 +5,40 @@ import java.net.HttpURLConnection;
|
||||
import java.net.URL;
|
||||
|
||||
public class PasteXcode {
|
||||
private final static String POST_URL = "http://paste.xcode.ro/";
|
||||
private static String POST_URL = "http://paste.xcode.ro/";
|
||||
|
||||
public static void main(final String[] args) {
|
||||
final PasteXcode p = new PasteXcode();
|
||||
final PasteContent paste = new PasteContent();
|
||||
public static void main(String[] args) {
|
||||
PasteXcode p = new PasteXcode();
|
||||
PasteContent paste = new PasteContent();
|
||||
paste.addLine("异常提交测试!");
|
||||
paste.addThrowable(new Throwable());
|
||||
System.out.println(p.post(paste));;
|
||||
System.out.println(p.post(paste));
|
||||
;
|
||||
}
|
||||
|
||||
public String post(final PasteContent content) {
|
||||
public String post(PasteContent content) {
|
||||
return post("YumCore", PasteFormat.JAVA, content);
|
||||
}
|
||||
|
||||
public String post(final String name, final PasteFormat format, final PasteContent content) {
|
||||
public String post(String name, PasteFormat format, PasteContent content) {
|
||||
String result = "Failed to post!";
|
||||
try {
|
||||
final HttpURLConnection connection = (HttpURLConnection) new URL(POST_URL).openConnection();
|
||||
HttpURLConnection connection = (HttpURLConnection) new URL(POST_URL).openConnection();
|
||||
connection.setConnectTimeout(20000);
|
||||
connection.setReadTimeout(20000);
|
||||
connection.setRequestMethod("POST");
|
||||
connection.addRequestProperty("Content-type", "application/x-www-form-urlencoded");
|
||||
connection.setInstanceFollowRedirects(false);
|
||||
connection.setDoOutput(true);
|
||||
final OutputStream outputStream = connection.getOutputStream();
|
||||
final byte[] outByte = String.format("paste_user=%s&paste_lang=%s&paste_data=%s&paste_submit=Paste&paste_expire=0", name, format.toString(), content.toString()).getBytes();
|
||||
OutputStream outputStream = connection.getOutputStream();
|
||||
byte[] outByte = String.format("paste_user=%s&paste_lang=%s&paste_data=%s&paste_submit=Paste&paste_expire=0", name, format.toString(), content.toString()).getBytes();
|
||||
outputStream.write(outByte);
|
||||
outputStream.flush();
|
||||
outputStream.close();
|
||||
if (connection.getResponseCode() == HttpURLConnection.HTTP_MOVED_TEMP) {
|
||||
result = connection.getHeaderField("Location");
|
||||
}
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return result;
|
||||
|
@ -8,41 +8,42 @@ import java.net.URL;
|
||||
import java.net.URLEncoder;
|
||||
|
||||
public class Pastebin {
|
||||
private final static String POST_URL = "http://pastebin.com/api/api_post.php";
|
||||
private final String API_KEY;
|
||||
private static String POST_URL = "http://pastebin.com/api/api_post.php";
|
||||
private String API_KEY;
|
||||
|
||||
public Pastebin() {
|
||||
this.API_KEY = "0e7d92011945cbcc1e884ab6e3e75e69";
|
||||
}
|
||||
|
||||
public Pastebin(final String API_KEY) {
|
||||
public Pastebin(String API_KEY) {
|
||||
this.API_KEY = API_KEY;
|
||||
}
|
||||
|
||||
public static void main(final String[] args) {
|
||||
final Pastebin p = new Pastebin();
|
||||
final PasteContent paste = new PasteContent();
|
||||
public static void main(String[] args) {
|
||||
Pastebin p = new Pastebin();
|
||||
PasteContent paste = new PasteContent();
|
||||
paste.addLine("异常提交测试!");
|
||||
paste.addThrowable(new Throwable());
|
||||
System.out.println(p.post(paste));;
|
||||
System.out.println(p.post(paste));
|
||||
;
|
||||
}
|
||||
|
||||
public String post(final PasteContent content) {
|
||||
public String post(PasteContent content) {
|
||||
return post("", PasteFormat.JAVA, Pastebin.Private.UNLISTED, content);
|
||||
}
|
||||
|
||||
public String post(final String name, final PasteFormat format, final Pastebin.Private level, final PasteContent content) {
|
||||
public String post(String name, PasteFormat format, Pastebin.Private level, PasteContent content) {
|
||||
String result = "Failed to post!";
|
||||
try {
|
||||
final HttpURLConnection connection = (HttpURLConnection) new URL(POST_URL).openConnection();
|
||||
HttpURLConnection connection = (HttpURLConnection) new URL(POST_URL).openConnection();
|
||||
connection.setConnectTimeout(20000);
|
||||
connection.setReadTimeout(20000);
|
||||
connection.setRequestMethod("POST");
|
||||
connection.addRequestProperty("Content-type", "application/x-www-form-urlencoded");
|
||||
connection.setInstanceFollowRedirects(false);
|
||||
connection.setDoOutput(true);
|
||||
final OutputStream outputStream = connection.getOutputStream();
|
||||
final byte[] outByte = ("api_option=paste&api_dev_key="
|
||||
OutputStream outputStream = connection.getOutputStream();
|
||||
byte[] outByte = ("api_option=paste&api_dev_key="
|
||||
+ URLEncoder.encode(this.API_KEY, "utf-8")
|
||||
+ "&api_paste_code="
|
||||
+ URLEncoder.encode(content.toString(), "utf-8")
|
||||
@ -59,8 +60,8 @@ public class Pastebin {
|
||||
outputStream.write(outByte);
|
||||
outputStream.flush();
|
||||
outputStream.close();
|
||||
final BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
||||
final StringBuffer request = new StringBuffer();
|
||||
BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
||||
StringBuffer request = new StringBuffer();
|
||||
String temp;
|
||||
while ((temp = br.readLine()) != null) {
|
||||
request.append(temp);
|
||||
@ -71,7 +72,7 @@ public class Pastebin {
|
||||
if (!result.contains("http://")) {
|
||||
result = "Failed to post! (returned result: " + result;
|
||||
}
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return result;
|
||||
@ -84,7 +85,7 @@ public class Pastebin {
|
||||
|
||||
int level;
|
||||
|
||||
private Private(final int level) {
|
||||
private Private(int level) {
|
||||
this.level = level;
|
||||
}
|
||||
|
||||
|
@ -16,13 +16,13 @@ import org.json.simple.JSONValue;
|
||||
* @author 喵♂呜
|
||||
*/
|
||||
public class StickyNotes {
|
||||
private final static String DOMAIN = "http://paste.yumc.pw";
|
||||
private final static String POST_URL = DOMAIN + "/api/json/create";
|
||||
private final static String VIEW_URL = DOMAIN + "/%s/%s";
|
||||
private static String DOMAIN = "http://paste.yumc.pw";
|
||||
private static String POST_URL = DOMAIN + "/api/json/create";
|
||||
private static String VIEW_URL = DOMAIN + "/%s/%s";
|
||||
|
||||
public static void main(final String[] args) {
|
||||
final StickyNotes p = new StickyNotes();
|
||||
final PasteContent paste = new PasteContent();
|
||||
public static void main(String[] args) {
|
||||
StickyNotes p = new StickyNotes();
|
||||
PasteContent paste = new PasteContent();
|
||||
paste.addLine("异常提交测试!");
|
||||
paste.addThrowable(new Throwable());
|
||||
System.out.println(p.post(StickyNotes.Expire.HalfHour, paste));
|
||||
@ -35,7 +35,7 @@ public class StickyNotes {
|
||||
* 内容
|
||||
* @return 地址
|
||||
*/
|
||||
public String post(final PasteContent content) {
|
||||
public String post(PasteContent content) {
|
||||
return post("YumCore-" + System.currentTimeMillis(), PasteFormat.JAVA, StickyNotes.Expire.Never, content);
|
||||
}
|
||||
|
||||
@ -48,7 +48,7 @@ public class StickyNotes {
|
||||
* 内容
|
||||
* @return 地址
|
||||
*/
|
||||
public String post(final StickyNotes.Expire expire, final PasteContent content) {
|
||||
public String post(StickyNotes.Expire expire, PasteContent content) {
|
||||
return post("YumCore-" + System.currentTimeMillis(), PasteFormat.JAVA, expire, content);
|
||||
}
|
||||
|
||||
@ -65,7 +65,7 @@ public class StickyNotes {
|
||||
* 内容
|
||||
* @return 地址
|
||||
*/
|
||||
public String post(final String title, final PasteFormat format, final StickyNotes.Expire expire, final PasteContent content) {
|
||||
public String post(String title, PasteFormat format, StickyNotes.Expire expire, PasteContent content) {
|
||||
return post(title, format.toString(), expire.getExpire(), content.toString());
|
||||
}
|
||||
|
||||
@ -82,23 +82,23 @@ public class StickyNotes {
|
||||
* 内容
|
||||
* @return 地址
|
||||
*/
|
||||
public String post(final String title, final String format, final int expire, final String content) {
|
||||
public String post(String title, String format, int expire, String content) {
|
||||
String result = "Failed to post!";
|
||||
try {
|
||||
final HttpURLConnection connection = (HttpURLConnection) new URL(POST_URL).openConnection();
|
||||
HttpURLConnection connection = (HttpURLConnection) new URL(POST_URL).openConnection();
|
||||
connection.setConnectTimeout(20000);
|
||||
connection.setReadTimeout(20000);
|
||||
connection.setRequestMethod("POST");
|
||||
connection.addRequestProperty("Content-type", "application/x-www-form-urlencoded");
|
||||
connection.setInstanceFollowRedirects(false);
|
||||
connection.setDoOutput(true);
|
||||
final OutputStream outputStream = connection.getOutputStream();
|
||||
final byte[] outByte = String.format("title=%s&language=%s&expire=%s&data=%s", title, format, expire, content).getBytes();
|
||||
OutputStream outputStream = connection.getOutputStream();
|
||||
byte[] outByte = String.format("title=%s&language=%s&expire=%s&data=%s", title, format, expire, content).getBytes();
|
||||
outputStream.write(outByte);
|
||||
outputStream.flush();
|
||||
outputStream.close();
|
||||
final BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
||||
final StringBuilder request = new StringBuilder();
|
||||
BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
|
||||
StringBuilder request = new StringBuilder();
|
||||
String temp;
|
||||
while ((temp = br.readLine()) != null) {
|
||||
request.append(temp);
|
||||
@ -111,7 +111,7 @@ public class StickyNotes {
|
||||
return object.get("error").toString();
|
||||
}
|
||||
return String.format(VIEW_URL, object.get("id"), object.get("hash"));
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return result;
|
||||
@ -134,7 +134,7 @@ public class StickyNotes {
|
||||
|
||||
int expire;
|
||||
|
||||
private Expire(final int expire) {
|
||||
private Expire(int expire) {
|
||||
this.expire = expire;
|
||||
}
|
||||
|
||||
|
@ -38,7 +38,7 @@ public class SignKit extends ProtocolLibBase {
|
||||
static {
|
||||
try {
|
||||
GameMode.SPECTATOR.name();
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
newVer = false;
|
||||
}
|
||||
}
|
||||
@ -52,9 +52,9 @@ public class SignKit extends ProtocolLibBase {
|
||||
* 木牌内容
|
||||
* @throws InvocationTargetException
|
||||
*/
|
||||
public static void open(final Player player, final String[] lines) throws InvocationTargetException {
|
||||
final Location loc = player.getLocation();
|
||||
final int x = loc.getBlockX(), y = 0, z = loc.getBlockZ();
|
||||
public static void open(Player player, String[] lines) throws InvocationTargetException {
|
||||
Location loc = player.getLocation();
|
||||
int x = loc.getBlockX(), y = 0, z = loc.getBlockZ();
|
||||
if (newVer) {
|
||||
// Set
|
||||
PacketContainer packet = manager.createPacket(Server.BLOCK_CHANGE);
|
||||
@ -66,7 +66,8 @@ public class SignKit extends ProtocolLibBase {
|
||||
packet = manager.createPacket(Server.UPDATE_SIGN);
|
||||
packet.getBlockPositionModifier().write(0, new BlockPosition(x, y, z));
|
||||
packet.getChatComponentArrays().write(0,
|
||||
new WrappedChatComponent[] { WrappedChatComponent.fromText(lines[0]), WrappedChatComponent.fromText(lines[1]), WrappedChatComponent.fromText(lines[2]), WrappedChatComponent.fromText(lines[3]) });
|
||||
new WrappedChatComponent[] { WrappedChatComponent.fromText(lines[0]), WrappedChatComponent.fromText(lines[1]), WrappedChatComponent.fromText(lines[2]),
|
||||
WrappedChatComponent.fromText(lines[3]) });
|
||||
|
||||
manager.sendServerPacket(player, packet);
|
||||
|
||||
@ -108,12 +109,12 @@ public class SignKit extends ProtocolLibBase {
|
||||
* @author 喵♂呜
|
||||
*/
|
||||
public static class SignUpdateEvent extends Event implements Cancellable {
|
||||
private static final HandlerList handlers = new HandlerList();
|
||||
private final Player player;
|
||||
private final String[] lines;
|
||||
private static HandlerList handlers = new HandlerList();
|
||||
private Player player;
|
||||
private String[] lines;
|
||||
private boolean cancel = false;
|
||||
|
||||
public SignUpdateEvent(final Player player, final String[] lines) {
|
||||
public SignUpdateEvent(Player player, String[] lines) {
|
||||
this.player = player;
|
||||
this.lines = lines;
|
||||
}
|
||||
@ -157,7 +158,7 @@ public class SignKit extends ProtocolLibBase {
|
||||
* @see org.bukkit.event.Cancellable#setCancelled(boolean)
|
||||
*/
|
||||
@Override
|
||||
public void setCancelled(final boolean cancel) {
|
||||
public void setCancelled(boolean cancel) {
|
||||
this.cancel = cancel;
|
||||
}
|
||||
|
||||
@ -176,25 +177,25 @@ public class SignKit extends ProtocolLibBase {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPacketReceiving(final PacketEvent event) {
|
||||
final Player player = event.getPlayer();
|
||||
final PacketContainer packet = event.getPacket();
|
||||
final List<String> lines = new ArrayList<>();
|
||||
public void onPacketReceiving(PacketEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
PacketContainer packet = event.getPacket();
|
||||
List<String> lines = new ArrayList<>();
|
||||
if (newVer) {
|
||||
final WrappedChatComponent[] input1_8 = packet.getChatComponentArrays().read(0);
|
||||
for (final WrappedChatComponent wrappedChatComponent : input1_8) {
|
||||
WrappedChatComponent[] input1_8 = packet.getChatComponentArrays().read(0);
|
||||
for (WrappedChatComponent wrappedChatComponent : input1_8) {
|
||||
lines.add(subString(wrappedChatComponent.getJson()));
|
||||
}
|
||||
} else {
|
||||
final String[] input = packet.getStringArrays().getValues().get(0);
|
||||
String[] input = packet.getStringArrays().getValues().get(0);
|
||||
lines.addAll(Arrays.asList(input));
|
||||
}
|
||||
final SignUpdateEvent sue = new SignUpdateEvent(player, lines.toArray(new String[0]));
|
||||
SignUpdateEvent sue = new SignUpdateEvent(player, lines.toArray(new String[0]));
|
||||
Bukkit.getPluginManager().callEvent(sue);
|
||||
event.setCancelled(sue.isCancelled());
|
||||
}
|
||||
|
||||
private String subString(final String string) {
|
||||
private String subString(String string) {
|
||||
return string.substring(1, string.length() - 1);
|
||||
}
|
||||
}
|
||||
|
@ -18,7 +18,7 @@ public class VaultChat extends VaultBase {
|
||||
private static Chat chat;
|
||||
|
||||
static {
|
||||
final RegisteredServiceProvider<Chat> rsp = Bukkit.getServer().getServicesManager().getRegistration(Chat.class);
|
||||
RegisteredServiceProvider<Chat> rsp = Bukkit.getServer().getServicesManager().getRegistration(Chat.class);
|
||||
if (rsp == null || (chat = rsp.getProvider()) == null) {
|
||||
PKit.disable("已加载 Vault 但是未找到聊天相关插件 停止加载...");
|
||||
} else {
|
||||
@ -42,7 +42,7 @@ public class VaultChat extends VaultBase {
|
||||
* 玩家实体
|
||||
* @return 玩家称号
|
||||
*/
|
||||
public static String getPlayerPrefix(final Player player) {
|
||||
public static String getPlayerPrefix(Player player) {
|
||||
return chat.getPlayerPrefix(player);
|
||||
}
|
||||
|
||||
@ -54,7 +54,7 @@ public class VaultChat extends VaultBase {
|
||||
* @param prefix
|
||||
* 玩家称号
|
||||
*/
|
||||
public static void setPlayerPrefix(final Player player, final String prefix) {
|
||||
public static void setPlayerPrefix(Player player, String prefix) {
|
||||
chat.setPlayerPrefix(player, prefix);
|
||||
}
|
||||
}
|
||||
|
@ -19,7 +19,7 @@ public class VaultEconomy extends VaultBase {
|
||||
private static Economy economy;
|
||||
|
||||
static {
|
||||
final RegisteredServiceProvider<Economy> rsp = Bukkit.getServer().getServicesManager().getRegistration(Economy.class);
|
||||
RegisteredServiceProvider<Economy> rsp = Bukkit.getServer().getServicesManager().getRegistration(Economy.class);
|
||||
if (rsp == null || (economy = rsp.getProvider()) == null) {
|
||||
PKit.disable("已加载 Vault 但是未找到经济相关插件 停止加载...");
|
||||
} else {
|
||||
@ -36,7 +36,7 @@ public class VaultEconomy extends VaultBase {
|
||||
* 数量
|
||||
* @return {@link EconomyResponse}
|
||||
*/
|
||||
public static EconomyResponse add(final OfflinePlayer oPlayer, final double amont) {
|
||||
public static EconomyResponse add(OfflinePlayer oPlayer, double amont) {
|
||||
return economy.depositPlayer(oPlayer, amont);
|
||||
}
|
||||
|
||||
@ -58,7 +58,7 @@ public class VaultEconomy extends VaultBase {
|
||||
* 数量
|
||||
* @return 是否
|
||||
*/
|
||||
public static boolean had(final OfflinePlayer oPlayer, final double amont) {
|
||||
public static boolean had(OfflinePlayer oPlayer, double amont) {
|
||||
return economy.has(oPlayer, amont);
|
||||
}
|
||||
|
||||
@ -71,7 +71,7 @@ public class VaultEconomy extends VaultBase {
|
||||
* 数量
|
||||
* @return {@link EconomyResponse}
|
||||
*/
|
||||
public static EconomyResponse remove(final OfflinePlayer oPlayer, final double amont) {
|
||||
public static EconomyResponse remove(OfflinePlayer oPlayer, double amont) {
|
||||
return economy.withdrawPlayer(oPlayer, amont);
|
||||
}
|
||||
}
|
||||
|
@ -18,7 +18,7 @@ public class VaultPermission extends VaultBase {
|
||||
private static Permission permission;
|
||||
|
||||
static {
|
||||
final RegisteredServiceProvider<Permission> rsp = Bukkit.getServer().getServicesManager().getRegistration(Permission.class);
|
||||
RegisteredServiceProvider<Permission> rsp = Bukkit.getServer().getServicesManager().getRegistration(Permission.class);
|
||||
if (rsp == null || (permission = rsp.getProvider()) == null) {
|
||||
PKit.disable("已加载 Vault 但是未找到权限相关插件 停止加载...");
|
||||
} else {
|
||||
@ -35,7 +35,7 @@ public class VaultPermission extends VaultBase {
|
||||
* 权限
|
||||
* @return 结果
|
||||
*/
|
||||
public static boolean add(final Player player, final String perm) {
|
||||
public static boolean add(Player player, String perm) {
|
||||
return permission.playerAdd(player, perm);
|
||||
}
|
||||
|
||||
@ -46,7 +46,7 @@ public class VaultPermission extends VaultBase {
|
||||
* 玩家
|
||||
* @return 权限组
|
||||
*/
|
||||
public static String getGroup(final Player player) {
|
||||
public static String getGroup(Player player) {
|
||||
return permission.getPrimaryGroup(player);
|
||||
}
|
||||
|
||||
@ -68,7 +68,7 @@ public class VaultPermission extends VaultBase {
|
||||
* 权限
|
||||
* @return 结果
|
||||
*/
|
||||
public static boolean has(final Player player, final String perm) {
|
||||
public static boolean has(Player player, String perm) {
|
||||
return permission.has(player, perm);
|
||||
}
|
||||
|
||||
@ -81,7 +81,7 @@ public class VaultPermission extends VaultBase {
|
||||
* 权限
|
||||
* @return 结果
|
||||
*/
|
||||
public static boolean remove(final Player player, final String perm) {
|
||||
public static boolean remove(Player player, String perm) {
|
||||
return permission.playerRemove(player, perm);
|
||||
}
|
||||
}
|
||||
|
@ -28,7 +28,7 @@ import pw.yumc.YumCore.sql.core.SQLiteCore;
|
||||
*
|
||||
*/
|
||||
public class DataBase {
|
||||
private final DataBaseCore dataBaseCore;
|
||||
private DataBaseCore dataBaseCore;
|
||||
|
||||
/**
|
||||
* 初始化数据库管理
|
||||
@ -36,12 +36,12 @@ public class DataBase {
|
||||
* @param core
|
||||
* 数据库核心
|
||||
*/
|
||||
public DataBase(final DataBaseCore core) {
|
||||
public DataBase(DataBaseCore core) {
|
||||
this.dataBaseCore = core;
|
||||
}
|
||||
|
||||
public static DataBase create(final Plugin plugin, final ConfigurationSection dbConfig) {
|
||||
final ConfigurationSection cfg = dbConfig.getConfigurationSection("MySQL");
|
||||
public static DataBase create(Plugin plugin, ConfigurationSection dbConfig) {
|
||||
ConfigurationSection cfg = dbConfig.getConfigurationSection("MySQL");
|
||||
if (dbConfig.getString("FileSystem").equalsIgnoreCase("MySQL")) {
|
||||
plugin.getLogger().info("已启用MySQL保存数据,开始连接数据库...");
|
||||
return new DataBase(new MySQLCore(cfg));
|
||||
@ -58,7 +58,7 @@ public class DataBase {
|
||||
try {
|
||||
this.dataBaseCore.getConnection().close();
|
||||
return true;
|
||||
} catch (final SQLException e) {
|
||||
} catch (SQLException e) {
|
||||
Log.debug("数据库链接关闭失败!", e);
|
||||
return false;
|
||||
}
|
||||
@ -75,21 +75,21 @@ public class DataBase {
|
||||
* 接受数据的数据库核心
|
||||
* @return 是否转换成功
|
||||
*/
|
||||
public boolean copyTo(final DataBaseCore db) {
|
||||
public boolean copyTo(DataBaseCore db) {
|
||||
try {
|
||||
final String src = this.dataBaseCore.getConnection().getMetaData().getURL();
|
||||
final String des = db.getConnection().getMetaData().getURL();
|
||||
String src = this.dataBaseCore.getConnection().getMetaData().getURL();
|
||||
String des = db.getConnection().getMetaData().getURL();
|
||||
Log.info("开始从源 " + src + " 复制数据到 " + des + " ...");
|
||||
ResultSet rs = this.dataBaseCore.getConnection().getMetaData().getTables(null, null, "%", null);
|
||||
final List<String> tables = new LinkedList<>();
|
||||
List<String> tables = new LinkedList<>();
|
||||
while (rs.next()) {
|
||||
tables.add(rs.getString("TABLE_NAME"));
|
||||
}
|
||||
info("源数据库中有 " + tables.size() + " 张数据表 ...");
|
||||
rs.close();
|
||||
int s = 0;
|
||||
final long start = System.currentTimeMillis();
|
||||
for (final String table : tables) {
|
||||
long start = System.currentTimeMillis();
|
||||
for (String table : tables) {
|
||||
Log.info("开始复制源数据库中的表 " + table + " ...");
|
||||
if (table.toLowerCase().startsWith("sqlite_autoindex_")) {
|
||||
continue;
|
||||
@ -104,10 +104,10 @@ public class DataBase {
|
||||
}
|
||||
query = query.substring(0, query.length() - 2) + ")";
|
||||
|
||||
final Connection con = db.getConnection();
|
||||
Connection con = db.getConnection();
|
||||
try {
|
||||
con.setAutoCommit(false);
|
||||
final PreparedStatement ps = con.prepareStatement(query);
|
||||
PreparedStatement ps = con.prepareStatement(query);
|
||||
long time = System.currentTimeMillis();
|
||||
while (rs.next()) {
|
||||
n++;
|
||||
@ -119,7 +119,7 @@ public class DataBase {
|
||||
try {
|
||||
ps.executeBatch();
|
||||
con.commit();
|
||||
} catch (final SQLException e) {
|
||||
} catch (SQLException e) {
|
||||
info("#====================================================");
|
||||
info("#数据复制区段(不是ID!) " + (n - 100) + "-" + n + " 出现错误...");
|
||||
info("#错误信息如下: ");
|
||||
@ -136,7 +136,7 @@ public class DataBase {
|
||||
ps.executeBatch();
|
||||
con.commit();
|
||||
info("数据表 " + table + " 复制完成 共 " + n + " 条记录...");
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
} finally {
|
||||
con.setAutoCommit(true);
|
||||
@ -147,7 +147,7 @@ public class DataBase {
|
||||
db.getConnection().close();
|
||||
this.dataBaseCore.getConnection().close();
|
||||
return true;
|
||||
} catch (final SQLException e) {
|
||||
} catch (SQLException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -163,11 +163,11 @@ public class DataBase {
|
||||
* -附加值
|
||||
* @return 运行结果
|
||||
*/
|
||||
public boolean createTables(final String tableName, final KeyValue fields, final String Conditions) {
|
||||
public boolean createTables(String tableName, KeyValue fields, String Conditions) {
|
||||
try {
|
||||
this.dataBaseCore.createTables(tableName, fields, Conditions);
|
||||
return isTableExists(tableName);
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
sqlerr("创建数据表 " + tableName + " 异常(内部方法)...", e);
|
||||
return false;
|
||||
}
|
||||
@ -182,11 +182,11 @@ public class DataBase {
|
||||
* 删除条件
|
||||
* @return 受到影响的数据条目
|
||||
*/
|
||||
public int dbDelete(final String tableName, final KeyValue fields) {
|
||||
final String sql = "DELETE FROM `" + tableName + "` WHERE " + fields.toWhereString();
|
||||
public int dbDelete(String tableName, KeyValue fields) {
|
||||
String sql = "DELETE FROM `" + tableName + "` WHERE " + fields.toWhereString();
|
||||
try {
|
||||
return this.dataBaseCore.update(sql);
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
sqlerr(sql, e);
|
||||
return 0;
|
||||
}
|
||||
@ -201,11 +201,11 @@ public class DataBase {
|
||||
* 选择条件
|
||||
* @return 首个符合条件的结果
|
||||
*/
|
||||
public boolean dbExist(final String tableName, final KeyValue fields) {
|
||||
final String sql = "SELECT * FROM " + tableName + " WHERE " + fields.toWhereString();
|
||||
public boolean dbExist(String tableName, KeyValue fields) {
|
||||
String sql = "SELECT * FROM " + tableName + " WHERE " + fields.toWhereString();
|
||||
try {
|
||||
return this.dataBaseCore.query(sql).next();
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
sqlerr(sql, e);
|
||||
return false;
|
||||
}
|
||||
@ -220,11 +220,11 @@ public class DataBase {
|
||||
* 带键值的
|
||||
* @return 受到影响的数据条目
|
||||
*/
|
||||
public int dbInsert(final String tabName, final KeyValue fields) {
|
||||
final String sql = "INSERT INTO `" + tabName + "` " + fields.toInsertString();
|
||||
public int dbInsert(String tabName, KeyValue fields) {
|
||||
String sql = "INSERT INTO `" + tabName + "` " + fields.toInsertString();
|
||||
try {
|
||||
return this.dataBaseCore.update(sql);
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
sqlerr(sql, e);
|
||||
return 0;
|
||||
}
|
||||
@ -232,23 +232,23 @@ public class DataBase {
|
||||
}
|
||||
|
||||
// @SuppressWarnings("unchecked")
|
||||
// public <M> List<M> dbSelect(final Class<? extends Model<?>> model, final KeyValue selCondition) {
|
||||
// final List<M> modellist = new ArrayList<>();
|
||||
// final String sql = "SELECT " + toKeys(model) + " FROM `" + model.getAnnotation(Entity.class).name() + "`" + (selCondition == null ? "" : " WHERE " + selCondition.toWhereString());
|
||||
// public <M> List<M> dbSelect( Class<? extends Model<?>> model, KeyValue selCondition) {
|
||||
// List<M> modellist = new ArrayList<>();
|
||||
// String sql = "SELECT " + toKeys(model) + " FROM `" + model.getAnnotation(Entity.class).name() + "`" + (selCondition == null ? "" : " WHERE " + selCondition.toWhereString());
|
||||
// try {
|
||||
// final ResultSet dbresult = this.dataBaseCore.execute(sql);
|
||||
// ResultSet dbresult = this.dataBaseCore.execute(sql);
|
||||
// while (dbresult.next()) {
|
||||
// final M m = (M) model.newInstance();
|
||||
// final Field[] fields = model.getDeclaredFields();
|
||||
// for (final Field col : fields) {
|
||||
// M m = (M) model.newInstance();
|
||||
// Field[] fields = model.getDeclaredFields();
|
||||
// for ( Field col : fields) {
|
||||
// col.set(m, dbresult.getObject(col.getName()));
|
||||
// }
|
||||
// modellist.add(m);
|
||||
// }
|
||||
// } catch (final InstantiationException e) {
|
||||
// } catch ( InstantiationException e) {
|
||||
// info("模型类实例化失败!");
|
||||
// e.printStackTrace();
|
||||
// } catch (final Exception e) {
|
||||
// } catch ( Exception e) {
|
||||
// sqlerr(sql, e);
|
||||
// }
|
||||
// return modellist;
|
||||
@ -265,19 +265,19 @@ public class DataBase {
|
||||
* 选择条件
|
||||
* @return 一个含有KeyValue的List(列表)
|
||||
*/
|
||||
public List<KeyValue> dbSelect(final String tableName, final KeyValue fields, final KeyValue selCondition) {
|
||||
final String sql = "SELECT " + fields.toKeys() + " FROM `" + tableName + "`" + (selCondition == null ? "" : " WHERE " + selCondition.toWhereString());
|
||||
final List<KeyValue> kvlist = new ArrayList<>();
|
||||
public List<KeyValue> dbSelect(String tableName, KeyValue fields, KeyValue selCondition) {
|
||||
String sql = "SELECT " + fields.toKeys() + " FROM `" + tableName + "`" + (selCondition == null ? "" : " WHERE " + selCondition.toWhereString());
|
||||
List<KeyValue> kvlist = new ArrayList<>();
|
||||
try {
|
||||
final ResultSet dbresult = this.dataBaseCore.query(sql);
|
||||
ResultSet dbresult = this.dataBaseCore.query(sql);
|
||||
while (dbresult.next()) {
|
||||
final KeyValue kv = new KeyValue();
|
||||
for (final String col : fields.getKeys()) {
|
||||
KeyValue kv = new KeyValue();
|
||||
for (String col : fields.getKeys()) {
|
||||
kv.add(col, dbresult.getString(col.toString()));
|
||||
}
|
||||
kvlist.add(kv);
|
||||
}
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
sqlerr(sql, e);
|
||||
}
|
||||
return kvlist;
|
||||
@ -294,19 +294,19 @@ public class DataBase {
|
||||
* 读取的字段
|
||||
* @return 一个含有KeyValue的List(列表)
|
||||
*/
|
||||
public List<KeyValue> dbSelect(final String tableName, final KeyValue selCondition, final String... fields) {
|
||||
final String sql = "SELECT " + getKeys(fields) + " FROM `" + tableName + "`" + (selCondition == null ? "" : " WHERE " + selCondition.toWhereString());
|
||||
final List<KeyValue> kvlist = new ArrayList<>();
|
||||
public List<KeyValue> dbSelect(String tableName, KeyValue selCondition, String... fields) {
|
||||
String sql = "SELECT " + getKeys(fields) + " FROM `" + tableName + "`" + (selCondition == null ? "" : " WHERE " + selCondition.toWhereString());
|
||||
List<KeyValue> kvlist = new ArrayList<>();
|
||||
try {
|
||||
final ResultSet dbresult = this.dataBaseCore.query(sql);
|
||||
ResultSet dbresult = this.dataBaseCore.query(sql);
|
||||
while (dbresult.next()) {
|
||||
final KeyValue kv = new KeyValue();
|
||||
for (final String col : fields) {
|
||||
KeyValue kv = new KeyValue();
|
||||
for (String col : fields) {
|
||||
kv.add(col, dbresult.getString(col.toString()));
|
||||
}
|
||||
kvlist.add(kv);
|
||||
}
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
sqlerr(sql, e);
|
||||
}
|
||||
return kvlist;
|
||||
@ -323,14 +323,14 @@ public class DataBase {
|
||||
* 选择条件
|
||||
* @return 首个符合条件的结果
|
||||
*/
|
||||
public String dbSelectFirst(final String tableName, final String fields, final KeyValue selConditions) {
|
||||
final String sql = "SELECT " + fields + " FROM " + tableName + " WHERE " + selConditions.toWhereString() + " limit 1";
|
||||
public String dbSelectFirst(String tableName, String fields, KeyValue selConditions) {
|
||||
String sql = "SELECT " + fields + " FROM " + tableName + " WHERE " + selConditions.toWhereString() + " limit 1";
|
||||
try {
|
||||
final ResultSet dbresult = this.dataBaseCore.query(sql);
|
||||
ResultSet dbresult = this.dataBaseCore.query(sql);
|
||||
if (dbresult.next()) {
|
||||
return dbresult.getString(fields);
|
||||
}
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
sqlerr(sql, e);
|
||||
}
|
||||
return null;
|
||||
@ -347,11 +347,11 @@ public class DataBase {
|
||||
* 更新条件
|
||||
* @return 受到影响的数据条目
|
||||
*/
|
||||
public int dbUpdate(final String tabName, final KeyValue fields, final KeyValue upCondition) {
|
||||
final String sql = "UPDATE `" + tabName + "` SET " + fields.toUpdateString() + " WHERE " + upCondition.toWhereString();
|
||||
public int dbUpdate(String tabName, KeyValue fields, KeyValue upCondition) {
|
||||
String sql = "UPDATE `" + tabName + "` SET " + fields.toUpdateString() + " WHERE " + upCondition.toWhereString();
|
||||
try {
|
||||
return this.dataBaseCore.update(sql);
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
sqlerr(sql, e);
|
||||
return 0;
|
||||
}
|
||||
@ -373,9 +373,9 @@ public class DataBase {
|
||||
* 字段数组
|
||||
* @return 字段字符串
|
||||
*/
|
||||
public String getKeys(final String... fields) {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
for (final String string : fields) {
|
||||
public String getKeys(String... fields) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (String string : fields) {
|
||||
sb.append("`");
|
||||
sb.append(string);
|
||||
sb.append("`, ");
|
||||
@ -383,17 +383,17 @@ public class DataBase {
|
||||
return sb.toString().substring(0, sb.length() - 2);
|
||||
}
|
||||
|
||||
public boolean isFieldExists(final String tableName, final KeyValue fields) {
|
||||
final DatabaseMetaData dbm;
|
||||
final ResultSet tables;
|
||||
public boolean isFieldExists(String tableName, KeyValue fields) {
|
||||
DatabaseMetaData dbm;
|
||||
ResultSet tables;
|
||||
try {
|
||||
dbm = this.dataBaseCore.getConnection().getMetaData();
|
||||
tables = dbm.getTables(null, null, tableName, null);
|
||||
if (tables.next()) {
|
||||
final ResultSet f = dbm.getColumns(null, null, tableName, fields.getKeys()[0]);
|
||||
ResultSet f = dbm.getColumns(null, null, tableName, fields.getKeys()[0]);
|
||||
return f.next();
|
||||
}
|
||||
} catch (final SQLException e) {
|
||||
} catch (SQLException e) {
|
||||
sqlerr("判断 表名:" + tableName + " 字段名:" + fields.getKeys()[0] + " 是否存在时出错!", e);
|
||||
}
|
||||
return false;
|
||||
@ -406,12 +406,12 @@ public class DataBase {
|
||||
* 表名
|
||||
* @return 是否存在
|
||||
*/
|
||||
public boolean isTableExists(final String tableName) {
|
||||
public boolean isTableExists(String tableName) {
|
||||
try {
|
||||
final DatabaseMetaData dbm = this.dataBaseCore.getConnection().getMetaData();
|
||||
final ResultSet tables = dbm.getTables(null, null, tableName, null);
|
||||
DatabaseMetaData dbm = this.dataBaseCore.getConnection().getMetaData();
|
||||
ResultSet tables = dbm.getTables(null, null, tableName, null);
|
||||
return tables.next();
|
||||
} catch (final SQLException e) {
|
||||
} catch (SQLException e) {
|
||||
sqlerr("判断 表名:" + tableName + " 是否存在时出错!", e);
|
||||
return false;
|
||||
}
|
||||
@ -423,15 +423,15 @@ public class DataBase {
|
||||
* @param sqls
|
||||
* SQL语句列表
|
||||
*/
|
||||
public void runSqlList(final Collection<String> sqls) {
|
||||
final Connection con = getDataBaseCore().getConnection();
|
||||
final long start = System.currentTimeMillis();
|
||||
public void runSqlList(Collection<String> sqls) {
|
||||
Connection con = getDataBaseCore().getConnection();
|
||||
long start = System.currentTimeMillis();
|
||||
try {
|
||||
long time = System.currentTimeMillis();
|
||||
con.setAutoCommit(false);
|
||||
final Statement st = con.createStatement();
|
||||
Statement st = con.createStatement();
|
||||
int i = 0;
|
||||
for (final String sql : sqls) {
|
||||
for (String sql : sqls) {
|
||||
st.addBatch(sql);
|
||||
i++;
|
||||
if (i % 100 == 0) {
|
||||
@ -446,17 +446,17 @@ public class DataBase {
|
||||
st.executeBatch();
|
||||
con.commit();
|
||||
info("执行SQL完毕 总计: " + sqls.size() + " 条 耗时: " + start + "ms!");
|
||||
} catch (final SQLException e) {
|
||||
} catch (SQLException e) {
|
||||
try {
|
||||
con.rollback();
|
||||
sqlerr("执行SQL数组发生错误 数据已回滚...", e);
|
||||
} catch (final SQLException e1) {
|
||||
} catch (SQLException e1) {
|
||||
sqlerr("执行SQL数组发生错误 警告! 数据回滚失败...", e1);
|
||||
}
|
||||
} finally {
|
||||
try {
|
||||
con.setAutoCommit(true);
|
||||
} catch (final SQLException e) {
|
||||
} catch (SQLException e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -469,7 +469,7 @@ public class DataBase {
|
||||
* @param e
|
||||
* 错误异常
|
||||
*/
|
||||
public void sqlerr(final String sql, final Exception e) {
|
||||
public void sqlerr(String sql, Exception e) {
|
||||
info("数据库操作出错: " + e.getMessage());
|
||||
info("SQL查询语句: " + sql);
|
||||
Log.debug(this.getClass().getName());
|
||||
@ -485,14 +485,14 @@ public class DataBase {
|
||||
return this.dataBaseCore.getConnection() != null;
|
||||
}
|
||||
|
||||
private void info(final String info) {
|
||||
private void info(String info) {
|
||||
Log.info(info);
|
||||
}
|
||||
|
||||
// private String toKeys(final Class<? extends Model<?>> model) {
|
||||
// final Field[] fields = model.getDeclaredFields();
|
||||
// final StringBuilder sb = new StringBuilder();
|
||||
// for (final Field next : fields) {
|
||||
// private String toKeys( Class<? extends Model<?>> model) {
|
||||
// Field[] fields = model.getDeclaredFields();
|
||||
// StringBuilder sb = new StringBuilder();
|
||||
// for ( Field next : fields) {
|
||||
// sb.append("`");
|
||||
// sb.append(next.getName());
|
||||
// sb.append("`, ");
|
||||
|
@ -28,7 +28,7 @@ public abstract class DataBaseCore {
|
||||
* @throws SQLException
|
||||
* SQL异常
|
||||
*/
|
||||
public abstract boolean createTables(final String tableName, final KeyValue fields, final String Conditions) throws SQLException;
|
||||
public abstract boolean createTables(String tableName, KeyValue fields, String Conditions) throws SQLException;
|
||||
|
||||
/**
|
||||
* 执行SQL语句
|
||||
@ -39,10 +39,10 @@ public abstract class DataBaseCore {
|
||||
* @throws SQLException
|
||||
* SQL执行异常
|
||||
*/
|
||||
public boolean execute(final String sql) throws SQLException {
|
||||
public boolean execute(String sql) throws SQLException {
|
||||
debug(sql);
|
||||
final Statement st = getStatement();
|
||||
final boolean result = st.execute(sql);
|
||||
Statement st = getStatement();
|
||||
boolean result = st.execute(sql);
|
||||
st.close();
|
||||
return result;
|
||||
}
|
||||
@ -58,13 +58,13 @@ public abstract class DataBaseCore {
|
||||
* @throws SQLException
|
||||
* SQL执行异常
|
||||
*/
|
||||
public boolean execute(final String sql, final Object... obj) throws SQLException {
|
||||
public boolean execute(String sql, Object... obj) throws SQLException {
|
||||
debug(sql);
|
||||
final PreparedStatement ps = prepareStatement(sql);
|
||||
PreparedStatement ps = prepareStatement(sql);
|
||||
for (int i = 0; i < obj.length; i++) {
|
||||
ps.setObject(i + 1, obj[i]);
|
||||
}
|
||||
final boolean result = ps.execute(sql);
|
||||
boolean result = ps.execute(sql);
|
||||
ps.close();
|
||||
return result;
|
||||
}
|
||||
@ -92,10 +92,10 @@ public abstract class DataBaseCore {
|
||||
* @throws SQLException
|
||||
* SQL查询异常
|
||||
*/
|
||||
public ResultSet query(final String sql) throws SQLException {
|
||||
public ResultSet query(String sql) throws SQLException {
|
||||
debug(sql);
|
||||
final Statement st = getStatement();
|
||||
final ResultSet result = st.executeQuery(sql);
|
||||
Statement st = getStatement();
|
||||
ResultSet result = st.executeQuery(sql);
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -108,10 +108,10 @@ public abstract class DataBaseCore {
|
||||
* @throws SQLException
|
||||
* SQL执行异常
|
||||
*/
|
||||
public int update(final String sql) throws SQLException {
|
||||
public int update(String sql) throws SQLException {
|
||||
debug(sql);
|
||||
final Statement st = getStatement();
|
||||
final int result = st.executeUpdate(sql);
|
||||
Statement st = getStatement();
|
||||
int result = st.executeUpdate(sql);
|
||||
st.close();
|
||||
return result;
|
||||
}
|
||||
@ -127,13 +127,13 @@ public abstract class DataBaseCore {
|
||||
* @throws SQLException
|
||||
* SQL执行异常
|
||||
*/
|
||||
public int update(final String sql, final Object[] obj) throws SQLException {
|
||||
public int update(String sql, Object[] obj) throws SQLException {
|
||||
debug(sql);
|
||||
final PreparedStatement ps = prepareStatement(sql);
|
||||
PreparedStatement ps = prepareStatement(sql);
|
||||
for (int i = 0; i < obj.length; i++) {
|
||||
ps.setObject(i + 1, obj[i]);
|
||||
}
|
||||
final int result = ps.executeUpdate(sql);
|
||||
int result = ps.executeUpdate(sql);
|
||||
ps.close();
|
||||
return result;
|
||||
}
|
||||
@ -144,7 +144,7 @@ public abstract class DataBaseCore {
|
||||
* @param warn
|
||||
* 警告消息
|
||||
*/
|
||||
public void warn(final String warn) {
|
||||
public void warn(String warn) {
|
||||
Log.warning(warn);
|
||||
}
|
||||
|
||||
@ -154,7 +154,7 @@ public abstract class DataBaseCore {
|
||||
* @param sql
|
||||
* SQL语句
|
||||
*/
|
||||
private void debug(final String sql) {
|
||||
private void debug(String sql) {
|
||||
Log.debug("[SQL] " + sql);
|
||||
}
|
||||
|
||||
@ -178,7 +178,7 @@ public abstract class DataBaseCore {
|
||||
* @throws SQLException
|
||||
* SQL执行异常
|
||||
*/
|
||||
protected PreparedStatement prepareStatement(final String sql) throws SQLException {
|
||||
protected PreparedStatement prepareStatement(String sql) throws SQLException {
|
||||
return getConnection().prepareStatement(sql);
|
||||
}
|
||||
}
|
||||
|
@ -14,7 +14,7 @@ import java.util.Map.Entry;
|
||||
*/
|
||||
public class KeyValue {
|
||||
|
||||
private final Map<Object, Object> keyvalues = new HashMap<>();
|
||||
private Map<Object, Object> keyvalues = new HashMap<>();
|
||||
|
||||
/**
|
||||
* 数据库键值管理类
|
||||
@ -30,7 +30,7 @@ public class KeyValue {
|
||||
* @param value
|
||||
* 值
|
||||
*/
|
||||
public KeyValue(final String key, final Object value) {
|
||||
public KeyValue(String key, Object value) {
|
||||
add(key, value);
|
||||
}
|
||||
|
||||
@ -43,7 +43,7 @@ public class KeyValue {
|
||||
* 值
|
||||
* @return {@link KeyValue}
|
||||
*/
|
||||
public KeyValue add(final String key, final Object value) {
|
||||
public KeyValue add(String key, Object value) {
|
||||
this.keyvalues.put(key, value);
|
||||
return this;
|
||||
}
|
||||
@ -64,8 +64,8 @@ public class KeyValue {
|
||||
* 查询的键
|
||||
* @return 值
|
||||
*/
|
||||
public String getString(final String key) {
|
||||
final Object obj = this.keyvalues.get(key);
|
||||
public String getString(String key) {
|
||||
Object obj = this.keyvalues.get(key);
|
||||
return obj == null ? "" : obj.toString();
|
||||
}
|
||||
|
||||
@ -75,8 +75,8 @@ public class KeyValue {
|
||||
* @return 所有的值
|
||||
*/
|
||||
public Object[] getValues() {
|
||||
final List<Object> keys = new ArrayList<>();
|
||||
for (final Entry<Object, Object> next : this.keyvalues.entrySet()) {
|
||||
List<Object> keys = new ArrayList<>();
|
||||
for (Entry<Object, Object> next : this.keyvalues.entrySet()) {
|
||||
keys.add(next.getValue());
|
||||
}
|
||||
return keys.toArray(new Object[0]);
|
||||
@ -97,8 +97,8 @@ public class KeyValue {
|
||||
* @return 数据表创建SQL语句
|
||||
*/
|
||||
public String toCreateString() {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
for (final Entry<Object, Object> next : this.keyvalues.entrySet()) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (Entry<Object, Object> next : this.keyvalues.entrySet()) {
|
||||
sb.append("`");
|
||||
sb.append(next.getKey());
|
||||
sb.append("` ");
|
||||
@ -116,7 +116,7 @@ public class KeyValue {
|
||||
public String toInsertString() {
|
||||
String ks = "";
|
||||
String vs = "";
|
||||
for (final Entry<Object, Object> next : this.keyvalues.entrySet()) {
|
||||
for (Entry<Object, Object> next : this.keyvalues.entrySet()) {
|
||||
ks += "`" + next.getKey() + "`, ";
|
||||
vs += "'" + next.getValue() + "', ";
|
||||
}
|
||||
@ -127,8 +127,8 @@ public class KeyValue {
|
||||
* @return 转换为键列
|
||||
*/
|
||||
public String toKeys() {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
for (final Object next : this.keyvalues.keySet()) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (Object next : this.keyvalues.keySet()) {
|
||||
sb.append("`");
|
||||
sb.append(next);
|
||||
sb.append("`, ");
|
||||
@ -147,8 +147,8 @@ public class KeyValue {
|
||||
* @return 更新SQL语句
|
||||
*/
|
||||
public String toUpdateString() {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
for (final Entry<Object, Object> next : this.keyvalues.entrySet()) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (Entry<Object, Object> next : this.keyvalues.entrySet()) {
|
||||
sb.append("`");
|
||||
sb.append(next.getKey());
|
||||
sb.append("`='");
|
||||
@ -164,8 +164,8 @@ public class KeyValue {
|
||||
* @return 查询SQL语句
|
||||
*/
|
||||
public String toWhereString() {
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
for (final Entry<Object, Object> next : this.keyvalues.entrySet()) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (Entry<Object, Object> next : this.keyvalues.entrySet()) {
|
||||
sb.append("`");
|
||||
sb.append(next.getKey());
|
||||
sb.append("`='");
|
||||
|
@ -14,10 +14,10 @@ import org.bukkit.configuration.ConfigurationSection;
|
||||
* @author 喵♂呜
|
||||
*/
|
||||
public class MySQLCore extends DataBaseCore {
|
||||
private static final String driverName = "com.mysql.jdbc.Driver";
|
||||
private static String driverName = "com.mysql.jdbc.Driver";
|
||||
private Connection connection;
|
||||
private final Properties info;
|
||||
private final String url;
|
||||
private Properties info;
|
||||
private String url;
|
||||
|
||||
/**
|
||||
* 初始化连接信息
|
||||
@ -25,7 +25,7 @@ public class MySQLCore extends DataBaseCore {
|
||||
* @param cfg
|
||||
* 配置节点
|
||||
*/
|
||||
public MySQLCore(final ConfigurationSection cfg) {
|
||||
public MySQLCore(ConfigurationSection cfg) {
|
||||
this(cfg.getString("ip", "127.0.0.1"), cfg.getInt("port", 3306), cfg.getString("database", "minecraft"), cfg.getString("username", "root"), cfg.getString("password", ""));
|
||||
}
|
||||
|
||||
@ -43,7 +43,7 @@ public class MySQLCore extends DataBaseCore {
|
||||
* @param password
|
||||
* 密码
|
||||
*/
|
||||
public MySQLCore(final String host, final int port, final String dbname, final String username, final String password) {
|
||||
public MySQLCore(String host, int port, String dbname, String username, String password) {
|
||||
this.info = new Properties();
|
||||
this.info.put("autoReconnect", "true");
|
||||
this.info.put("user", username);
|
||||
@ -53,7 +53,7 @@ public class MySQLCore extends DataBaseCore {
|
||||
this.url = "jdbc:mysql://" + host + ":" + port + "/" + dbname;
|
||||
try {
|
||||
Class.forName(driverName).newInstance();
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
warn("数据库初始化失败 请检查驱动 " + driverName + " 是否存在!");
|
||||
}
|
||||
}
|
||||
@ -72,8 +72,8 @@ public class MySQLCore extends DataBaseCore {
|
||||
* SQL异常
|
||||
*/
|
||||
@Override
|
||||
public boolean createTables(final String tableName, final KeyValue fields, final String Conditions) throws SQLException {
|
||||
final String sql = "CREATE TABLE IF NOT EXISTS `%s` ( %s %s ) ENGINE = InnoDB DEFAULT CHARSET=UTF8";
|
||||
public boolean createTables(String tableName, KeyValue fields, String Conditions) throws SQLException {
|
||||
String sql = "CREATE TABLE IF NOT EXISTS `%s` ( %s %s ) ENGINE = InnoDB DEFAULT CHARSET=UTF8";
|
||||
return execute(String.format(sql, tableName, fields.toCreateString(), Conditions == null ? "" : ", " + Conditions));
|
||||
}
|
||||
|
||||
@ -85,7 +85,7 @@ public class MySQLCore extends DataBaseCore {
|
||||
}
|
||||
this.connection = DriverManager.getConnection(this.url, this.info);
|
||||
return this.connection;
|
||||
} catch (final SQLException e) {
|
||||
} catch (SQLException e) {
|
||||
warn("数据库操作出错: " + e.getMessage());// 得到出错信息
|
||||
warn("登录URL: " + this.url); // 发生错误时,将连接数据库信息打印出来
|
||||
warn("登录账户: " + this.info.getProperty("user"));
|
||||
|
@ -16,9 +16,9 @@ import org.bukkit.plugin.Plugin;
|
||||
* @author 喵♂呜
|
||||
*/
|
||||
public class SQLiteCore extends DataBaseCore {
|
||||
private static final String driverName = "org.sqlite.JDBC";
|
||||
private static String driverName = "org.sqlite.JDBC";
|
||||
private Connection connection;
|
||||
private final File dbFile;
|
||||
private File dbFile;
|
||||
|
||||
/**
|
||||
* 初始化连接信息
|
||||
@ -26,20 +26,20 @@ public class SQLiteCore extends DataBaseCore {
|
||||
* @param dbFile
|
||||
* 数据库文件
|
||||
*/
|
||||
public SQLiteCore(final File dbFile) {
|
||||
public SQLiteCore(File dbFile) {
|
||||
this.dbFile = dbFile;
|
||||
if (this.dbFile.exists()) {
|
||||
// So we need a new connection
|
||||
try {
|
||||
this.dbFile.createNewFile();
|
||||
} catch (final IOException e) {
|
||||
} catch (IOException e) {
|
||||
warn("数据库文件 " + dbFile.getAbsolutePath() + " 创建失败!");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
try {
|
||||
Class.forName(driverName).newInstance();
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
warn("数据库初始化失败 请检查驱动 " + driverName + " 是否存在!");
|
||||
e.printStackTrace();
|
||||
}
|
||||
@ -53,7 +53,7 @@ public class SQLiteCore extends DataBaseCore {
|
||||
* @param cfg
|
||||
* 配置信息
|
||||
*/
|
||||
public SQLiteCore(final Plugin plugin, final ConfigurationSection cfg) {
|
||||
public SQLiteCore(Plugin plugin, ConfigurationSection cfg) {
|
||||
this(plugin, cfg.getString("database"));
|
||||
}
|
||||
|
||||
@ -65,20 +65,20 @@ public class SQLiteCore extends DataBaseCore {
|
||||
* @param filename
|
||||
* 文件名称
|
||||
*/
|
||||
public SQLiteCore(final Plugin plugin, final String filename) {
|
||||
public SQLiteCore(Plugin plugin, String filename) {
|
||||
this.dbFile = new File(plugin.getDataFolder(), filename + ".db");
|
||||
if (this.dbFile.exists()) {
|
||||
// So we need a new connection
|
||||
try {
|
||||
this.dbFile.createNewFile();
|
||||
} catch (final IOException e) {
|
||||
} catch (IOException e) {
|
||||
warn("数据库文件 " + this.dbFile.getAbsolutePath() + " 创建失败!");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
try {
|
||||
Class.forName(driverName).newInstance();
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
warn("数据库初始化失败 请检查驱动 " + driverName + " 是否存在!");
|
||||
e.printStackTrace();
|
||||
}
|
||||
@ -90,13 +90,13 @@ public class SQLiteCore extends DataBaseCore {
|
||||
* @param filepath
|
||||
* 文件路径
|
||||
*/
|
||||
public SQLiteCore(final String filepath) {
|
||||
public SQLiteCore(String filepath) {
|
||||
this(new File(filepath));
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean createTables(final String tableName, final KeyValue fields, final String Conditions) throws SQLException {
|
||||
final String sql = "CREATE TABLE IF NOT EXISTS `%s` ( %s %s )";
|
||||
public boolean createTables(String tableName, KeyValue fields, String Conditions) throws SQLException {
|
||||
String sql = "CREATE TABLE IF NOT EXISTS `%s` ( %s %s )";
|
||||
return execute(String.format(sql, tableName, fields.toCreateString().replace("AUTO_INCREMENT", "AUTOINCREMENT"), Conditions == null ? "" : " , " + Conditions));
|
||||
}
|
||||
|
||||
@ -116,7 +116,7 @@ public class SQLiteCore extends DataBaseCore {
|
||||
}
|
||||
this.connection = DriverManager.getConnection("jdbc:sqlite:" + this.dbFile);
|
||||
return this.connection;
|
||||
} catch (final SQLException e) {
|
||||
} catch (SQLException e) {
|
||||
warn("数据库操作出错: " + e.getMessage());// 得到出错信息
|
||||
warn("数据库文件: " + this.dbFile.getAbsolutePath()); // 发生错误时,将连接数据库信息打印出来
|
||||
return null;
|
||||
|
@ -39,17 +39,17 @@ public class Statistics {
|
||||
/**
|
||||
* 统计系统版本
|
||||
*/
|
||||
private final static int REVISION = 10;
|
||||
private static int REVISION = 10;
|
||||
|
||||
/**
|
||||
* 统计插件基础配置文件
|
||||
*/
|
||||
private final static File configfile = new File(String.format("plugins%1$sPluginHelper%1$sconfig.yml", File.separatorChar));
|
||||
private static File configfile = new File(String.format("plugins%1$sPluginHelper%1$sconfig.yml", File.separatorChar));
|
||||
|
||||
/**
|
||||
* UTF-8编码
|
||||
*/
|
||||
private static final Charset UTF_8 = Charset.forName("UTF-8");
|
||||
private static Charset UTF_8 = Charset.forName("UTF-8");
|
||||
|
||||
/**
|
||||
* getOnlinePlayers方法
|
||||
@ -65,14 +65,14 @@ public class Statistics {
|
||||
try {
|
||||
getOnlinePlayers = Bukkit.class.getDeclaredMethod("getOnlinePlayers");
|
||||
if (getOnlinePlayers.getReturnType() != Player[].class) {
|
||||
for (final Method method : Bukkit.class.getDeclaredMethods()) {
|
||||
for (Method method : Bukkit.class.getDeclaredMethods()) {
|
||||
if (method.getReturnType() == Player[].class && method.getName().endsWith("getOnlinePlayers")) {
|
||||
getOnlinePlayers = method;
|
||||
}
|
||||
}
|
||||
}
|
||||
final Object pluginClassLoader = Statistics.class.getClassLoader();
|
||||
final Field field = pluginClassLoader.getClass().getDeclaredField("plugin");
|
||||
Object pluginClassLoader = Statistics.class.getClassLoader();
|
||||
Field field = pluginClassLoader.getClass().getDeclaredField("plugin");
|
||||
field.setAccessible(true);
|
||||
plugin = (JavaPlugin) field.get(pluginClassLoader);
|
||||
} catch (NoSuchMethodException | SecurityException | NoSuchFieldException | IllegalArgumentException | IllegalAccessException e) {
|
||||
@ -87,12 +87,12 @@ public class Statistics {
|
||||
/**
|
||||
* 调试模式
|
||||
*/
|
||||
private final boolean debug;
|
||||
private boolean debug;
|
||||
|
||||
/**
|
||||
* 唯一服务器编码
|
||||
*/
|
||||
private final String guid;
|
||||
private String guid;
|
||||
|
||||
/**
|
||||
* 线程任务
|
||||
@ -115,7 +115,7 @@ public class Statistics {
|
||||
}
|
||||
config = YamlConfiguration.loadConfiguration(configfile);
|
||||
initFile(config);
|
||||
} catch (final IOException e) {
|
||||
} catch (IOException e) {
|
||||
}
|
||||
this.guid = config.getString("guid");
|
||||
this.debug = config.getBoolean("debug", false);
|
||||
@ -132,12 +132,12 @@ public class Statistics {
|
||||
* @return 所代表远程资源的响应结果
|
||||
* @throws IOException
|
||||
*/
|
||||
public static String postData(final String url, final String param) throws IOException {
|
||||
public static String postData(String url, String param) throws IOException {
|
||||
PrintWriter out = null;
|
||||
String result = "";
|
||||
final URL realUrl = new URL(url);
|
||||
URL realUrl = new URL(url);
|
||||
// 打开和URL之间的连接
|
||||
final URLConnection conn = realUrl.openConnection();
|
||||
URLConnection conn = realUrl.openConnection();
|
||||
// 设置通用的请求属性
|
||||
conn.setRequestProperty("Accept", "*/*");
|
||||
conn.setRequestProperty("Connection", "Keep-Alive");
|
||||
@ -154,7 +154,7 @@ public class Statistics {
|
||||
// flush输出流的缓冲
|
||||
out.flush();
|
||||
String response = "";
|
||||
final BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), UTF_8));
|
||||
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), UTF_8));
|
||||
while ((response = reader.readLine()) != null) {
|
||||
result += response;
|
||||
}
|
||||
@ -172,7 +172,7 @@ public class Statistics {
|
||||
* 配置文件
|
||||
* @throws IOException
|
||||
*/
|
||||
private static void initFile(final YamlConfiguration config) throws IOException {
|
||||
private static void initFile(YamlConfiguration config) throws IOException {
|
||||
if (config.getString("guid") == null) {
|
||||
config.options().header("YUMC数据中心 http://www.yumc.pw 收集的数据仅用于统计插件使用情况").copyDefaults(true);
|
||||
config.set("guid", UUID.randomUUID().toString());
|
||||
@ -196,7 +196,7 @@ public class Statistics {
|
||||
* @param msg
|
||||
* 输出对象
|
||||
*/
|
||||
public void print(final String msg) {
|
||||
public void print(String msg) {
|
||||
if (debug) {
|
||||
System.out.println("[Statistics] " + msg);
|
||||
}
|
||||
@ -220,7 +220,7 @@ public class Statistics {
|
||||
public void run() {
|
||||
try {
|
||||
postPlugin();
|
||||
} catch (final Throwable e) {
|
||||
} catch (Throwable e) {
|
||||
if (debug) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
@ -238,7 +238,7 @@ public class Statistics {
|
||||
private int getOnlinePlayerNumber() {
|
||||
try {
|
||||
return ((Player[]) getOnlinePlayers.invoke(Bukkit.getServer())).length;
|
||||
} catch (final Exception ex) {
|
||||
} catch (Exception ex) {
|
||||
return Bukkit.getOnlinePlayers().size();
|
||||
}
|
||||
}
|
||||
@ -248,11 +248,11 @@ public class Statistics {
|
||||
*/
|
||||
private void postPlugin() throws IOException {
|
||||
// 服务器数据获取
|
||||
final PluginDescriptionFile description = plugin.getDescription();
|
||||
final String pluginname = description.getName();
|
||||
final String tmposarch = System.getProperty("os.arch");
|
||||
PluginDescriptionFile description = plugin.getDescription();
|
||||
String pluginname = description.getName();
|
||||
String tmposarch = System.getProperty("os.arch");
|
||||
|
||||
final Map<String, Object> data = new HashMap<>();
|
||||
Map<String, Object> data = new HashMap<>();
|
||||
data.put("guid", guid);
|
||||
data.put("server_version", Bukkit.getVersion());
|
||||
data.put("server_port", Bukkit.getServer().getPort());
|
||||
@ -267,24 +267,24 @@ public class Statistics {
|
||||
data.put("auth_mode", Bukkit.getServer().getOnlineMode() ? 1 : 0);
|
||||
data.put("java_version", System.getProperty("java.version"));
|
||||
|
||||
final String jsondata = "Info=" + JSONValue.toJSONString(data);
|
||||
String jsondata = "Info=" + JSONValue.toJSONString(data);
|
||||
|
||||
final String url = String.format("http://api.yumc.pw/I/P/S/V/%s/P/%s", REVISION, URLEncoder.encode(pluginname, "UTF-8"));
|
||||
String url = String.format("http://api.yumc.pw/I/P/S/V/%s/P/%s", REVISION, URLEncoder.encode(pluginname, "UTF-8"));
|
||||
print("Plugin: " + pluginname + " Send Data To CityCraft Data Center");
|
||||
print("Address: " + url);
|
||||
print("Data: " + jsondata);
|
||||
// 发送数据
|
||||
final JSONObject result = (JSONObject) JSONValue.parse(postData(url, jsondata));
|
||||
JSONObject result = (JSONObject) JSONValue.parse(postData(url, jsondata));
|
||||
print("Plugin: " + pluginname + " Recover Data From CityCraft Data Center: " + result.get("info"));
|
||||
}
|
||||
|
||||
public class StatisticsTimer implements Runnable {
|
||||
private final LinkedList<Double> history = new LinkedList<>();
|
||||
private LinkedList<Double> history = new LinkedList<>();
|
||||
private transient long lastPoll = System.nanoTime();
|
||||
|
||||
public double getAverageTPS() {
|
||||
double avg = 0.0D;
|
||||
for (final Double f : history) {
|
||||
for (Double f : history) {
|
||||
avg += f.doubleValue();
|
||||
}
|
||||
return avg / history.size();
|
||||
@ -292,12 +292,12 @@ public class Statistics {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
final long startTime = System.nanoTime();
|
||||
final long timeSpent = (startTime - lastPoll) / 1000;
|
||||
long startTime = System.nanoTime();
|
||||
long timeSpent = (startTime - lastPoll) / 1000;
|
||||
if (history.size() > 10) {
|
||||
history.removeFirst();
|
||||
}
|
||||
final double ttps = 2.0E7D / (timeSpent == 0 ? 1 : timeSpent);
|
||||
double ttps = 2.0E7D / (timeSpent == 0 ? 1 : timeSpent);
|
||||
if (ttps <= 21.0D) {
|
||||
history.add(ttps);
|
||||
}
|
||||
|
@ -30,15 +30,15 @@ public abstract class ItemSerialize {
|
||||
}
|
||||
}
|
||||
|
||||
public static String $(final ItemStack item) {
|
||||
final String result = itemSerialize.parse(item);
|
||||
public static String $(ItemStack item) {
|
||||
String result = itemSerialize.parse(item);
|
||||
Log.d("%s物品序列化结果: %s", itemSerialize.getName(), result);
|
||||
return result;
|
||||
}
|
||||
|
||||
public abstract String getName();
|
||||
|
||||
public abstract String parse(final ItemStack item);
|
||||
public abstract String parse(ItemStack item);
|
||||
|
||||
static class Automatic extends ItemSerialize {
|
||||
Method asNMSCopyMethod;
|
||||
@ -47,18 +47,18 @@ public abstract class ItemSerialize {
|
||||
String ver = Bukkit.getServer().getClass().getPackage().getName().replace(".", ",").split(",")[3];
|
||||
|
||||
public Automatic() throws ClassNotFoundException, NoSuchMethodException, SecurityException {
|
||||
final Class<?> cis = getOBCClass("inventory.CraftItemStack");
|
||||
Class<?> cis = getOBCClass("inventory.CraftItemStack");
|
||||
asNMSCopyMethod = cis.getMethod("asNMSCopy", ItemStack.class);
|
||||
final Class<?> nmsItemStack = asNMSCopyMethod.getReturnType();
|
||||
for (final Method method : nmsItemStack.getMethods()) {
|
||||
final Class<?> rt = method.getReturnType();
|
||||
Class<?> nmsItemStack = asNMSCopyMethod.getReturnType();
|
||||
for (Method method : nmsItemStack.getMethods()) {
|
||||
Class<?> rt = method.getReturnType();
|
||||
if (method.getParameterTypes().length == 0 && "NBTTagCompound".equals(rt.getSimpleName())) {
|
||||
nmsNBTTagCompound = rt;
|
||||
}
|
||||
}
|
||||
for (final Method method : nmsItemStack.getMethods()) {
|
||||
final Class<?>[] paras = method.getParameterTypes();
|
||||
final Class<?> rt = method.getReturnType();
|
||||
for (Method method : nmsItemStack.getMethods()) {
|
||||
Class<?>[] paras = method.getParameterTypes();
|
||||
Class<?> rt = method.getReturnType();
|
||||
if (paras.length == 1 && "NBTTagCompound".equals(paras[0].getSimpleName()) && "NBTTagCompound".equals(rt.getSimpleName())) {
|
||||
nmsSaveNBTMethod = method;
|
||||
}
|
||||
@ -70,12 +70,12 @@ public abstract class ItemSerialize {
|
||||
return "Automatic";
|
||||
}
|
||||
|
||||
public Class getOBCClass(final String cname) throws ClassNotFoundException {
|
||||
public Class getOBCClass(String cname) throws ClassNotFoundException {
|
||||
return Class.forName("org.bukkit.craftbukkit." + ver + "." + cname);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String parse(final ItemStack item) {
|
||||
public String parse(ItemStack item) {
|
||||
try {
|
||||
return nmsSaveNBTMethod.invoke(asNMSCopyMethod.invoke(null, item), nmsNBTTagCompound.newInstance()).toString();
|
||||
} catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | InstantiationException e) {
|
||||
@ -93,7 +93,7 @@ public abstract class ItemSerialize {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String parse(final ItemStack item) {
|
||||
public String parse(ItemStack item) {
|
||||
return serialize(item);
|
||||
}
|
||||
|
||||
@ -104,8 +104,8 @@ public abstract class ItemSerialize {
|
||||
* 物品属性
|
||||
* @return 获取显示序列化
|
||||
*/
|
||||
private String getDisplay(final ItemMeta im) {
|
||||
final StringBuilder display = new StringBuilder();
|
||||
private String getDisplay(ItemMeta im) {
|
||||
StringBuilder display = new StringBuilder();
|
||||
display.append("{");
|
||||
if (im.hasDisplayName()) {
|
||||
display.append(String.format("Name:\"%s\",", im.getDisplayName()));
|
||||
@ -113,7 +113,7 @@ public abstract class ItemSerialize {
|
||||
if (im.hasLore()) {
|
||||
display.append("Lore:[");
|
||||
int i = 0;
|
||||
for (final String line : im.getLore()) {
|
||||
for (String line : im.getLore()) {
|
||||
display.append(String.format("%s:\"%s\",", i, new JsonBuilder(line).toString()));
|
||||
i++;
|
||||
}
|
||||
@ -132,9 +132,9 @@ public abstract class ItemSerialize {
|
||||
* 附魔集合
|
||||
* @return 获得附魔序列化
|
||||
*/
|
||||
private String getEnch(final Set<Entry<Enchantment, Integer>> set) {
|
||||
final StringBuilder enchs = new StringBuilder();
|
||||
for (final Map.Entry<Enchantment, Integer> ench : set) {
|
||||
private String getEnch(Set<Entry<Enchantment, Integer>> set) {
|
||||
StringBuilder enchs = new StringBuilder();
|
||||
for (Map.Entry<Enchantment, Integer> ench : set) {
|
||||
enchs.append(String.format("{id:%s,lvl:%s},", ench.getKey().getId(), ench.getValue()));
|
||||
}
|
||||
enchs.deleteCharAt(enchs.length() - 1);
|
||||
@ -148,8 +148,8 @@ public abstract class ItemSerialize {
|
||||
* 物品属性
|
||||
* @return 获得属性序列化
|
||||
*/
|
||||
private String getTag(final ItemMeta im) {
|
||||
final StringBuilder meta = new StringBuilder("{");
|
||||
private String getTag(ItemMeta im) {
|
||||
StringBuilder meta = new StringBuilder("{");
|
||||
if (im.hasEnchants()) {
|
||||
meta.append(String.format("ench:[%s],", getEnch(im.getEnchants().entrySet())));
|
||||
}
|
||||
@ -168,8 +168,8 @@ public abstract class ItemSerialize {
|
||||
* {@link ItemStack}
|
||||
* @return 物品字符串
|
||||
*/
|
||||
private String serialize(final ItemStack item) {
|
||||
final StringBuilder json = new StringBuilder("{");
|
||||
private String serialize(ItemStack item) {
|
||||
StringBuilder json = new StringBuilder("{");
|
||||
json.append(String.format("id:\"%s\",Damage:\"%s\"", item.getTypeId(), item.getDurability()));
|
||||
if (item.getAmount() > 1) {
|
||||
json.append(String.format(",Count:%s", item.getAmount()));
|
||||
|
@ -7,7 +7,7 @@ package pw.yumc.YumCore.tellraw;
|
||||
* @author 喵♂呜
|
||||
*/
|
||||
public class JsonBuilder {
|
||||
public static final String[] REPLACEMENT_CHARS;
|
||||
public static String[] REPLACEMENT_CHARS;
|
||||
static {
|
||||
REPLACEMENT_CHARS = new String[128];
|
||||
for (int i = 0; i <= 0x1f; i++) {
|
||||
@ -27,16 +27,16 @@ public class JsonBuilder {
|
||||
json = new StringBuilder();
|
||||
}
|
||||
|
||||
public JsonBuilder(final String string) {
|
||||
public JsonBuilder(String string) {
|
||||
this();
|
||||
append(string);
|
||||
}
|
||||
|
||||
public void append(final String value) {
|
||||
public void append(String value) {
|
||||
int last = 0;
|
||||
final int length = value.length();
|
||||
int length = value.length();
|
||||
for (int i = 0; i < length; i++) {
|
||||
final char c = value.charAt(i);
|
||||
char c = value.charAt(i);
|
||||
String replacement;
|
||||
if (c < 128) {
|
||||
replacement = REPLACEMENT_CHARS[c];
|
||||
|
@ -7,10 +7,10 @@ package pw.yumc.YumCore.tellraw;
|
||||
* @author 喵♂呜
|
||||
*/
|
||||
public class MessagePart {
|
||||
private static final String TEXT_FORMAT = "\"text\":\"%s\"";
|
||||
private static final String CLICK_FORMAT = "\"clickEvent\":{\"action\":\"%s\",\"value\":\"%s\"}";
|
||||
private static final String HOVER_FORMAT = "\"hoverEvent\":{\"action\":\"%s\",\"value\":\"%s\"}";
|
||||
private static final String INSERT_FORMAT = " \"insertion\":\"%s\"";
|
||||
private static String TEXT_FORMAT = "\"text\":\"%s\"";
|
||||
private static String CLICK_FORMAT = "\"clickEvent\":{\"action\":\"%s\",\"value\":\"%s\"}";
|
||||
private static String HOVER_FORMAT = "\"hoverEvent\":{\"action\":\"%s\",\"value\":\"%s\"}";
|
||||
private static String INSERT_FORMAT = " \"insertion\":\"%s\"";
|
||||
/**
|
||||
* 消息文本
|
||||
*/
|
||||
@ -40,7 +40,7 @@ public class MessagePart {
|
||||
this("");
|
||||
}
|
||||
|
||||
public MessagePart(final String text) {
|
||||
public MessagePart(String text) {
|
||||
this.text = text;
|
||||
}
|
||||
|
||||
@ -57,7 +57,7 @@ public class MessagePart {
|
||||
* @param str
|
||||
* 流对象
|
||||
*/
|
||||
public void writeJson(final StringBuilder str) {
|
||||
public void writeJson(StringBuilder str) {
|
||||
str.append("{");
|
||||
str.append(String.format(TEXT_FORMAT, new JsonBuilder(text)));
|
||||
if (clickActionName != null) {
|
||||
|
@ -24,7 +24,7 @@ public class Tellraw {
|
||||
static boolean isPaper = Bukkit.getVersion().contains("Paper");
|
||||
List<MessagePart> messageParts = new ArrayList<>();
|
||||
|
||||
public Tellraw(final String text) {
|
||||
public Tellraw(String text) {
|
||||
messageParts.add(new MessagePart(text));
|
||||
}
|
||||
|
||||
@ -44,7 +44,7 @@ public class Tellraw {
|
||||
* 文本
|
||||
* @return {@link Tellraw}
|
||||
*/
|
||||
public static Tellraw create(final String text) {
|
||||
public static Tellraw create(String text) {
|
||||
return new Tellraw(text);
|
||||
}
|
||||
|
||||
@ -57,7 +57,7 @@ public class Tellraw {
|
||||
* 参数
|
||||
* @return {@link Tellraw}
|
||||
*/
|
||||
public static Tellraw create(final String text, final Object... objects) {
|
||||
public static Tellraw create(String text, Object... objects) {
|
||||
return new Tellraw(String.format(text, objects));
|
||||
}
|
||||
|
||||
@ -65,7 +65,7 @@ public class Tellraw {
|
||||
* 发送Tellraw公告
|
||||
*/
|
||||
public void broadcast() {
|
||||
for (final Player player : C.Player.getOnlinePlayers()) {
|
||||
for (Player player : C.Player.getOnlinePlayers()) {
|
||||
send(player);
|
||||
}
|
||||
}
|
||||
@ -79,7 +79,7 @@ public class Tellraw {
|
||||
* 提示
|
||||
* @return {@link Tellraw}
|
||||
*/
|
||||
public Tellraw cmd_tip(final String command, final String... tip) {
|
||||
public Tellraw cmd_tip(String command, String... tip) {
|
||||
return command(command).tip(tip);
|
||||
}
|
||||
|
||||
@ -90,7 +90,7 @@ public class Tellraw {
|
||||
* 命令
|
||||
* @return {@link Tellraw}
|
||||
*/
|
||||
public Tellraw command(final String command) {
|
||||
public Tellraw command(String command) {
|
||||
return onClick("run_command", command);
|
||||
}
|
||||
|
||||
@ -101,11 +101,11 @@ public class Tellraw {
|
||||
* 文件路径
|
||||
* @return {@link Tellraw}
|
||||
*/
|
||||
public Tellraw file(final String path) {
|
||||
public Tellraw file(String path) {
|
||||
return onClick("open_file", path);
|
||||
}
|
||||
|
||||
public Tellraw insertion(final String data) {
|
||||
public Tellraw insertion(String data) {
|
||||
latest().insertionData = data;
|
||||
return this;
|
||||
}
|
||||
@ -117,7 +117,7 @@ public class Tellraw {
|
||||
* {@link ItemStack}
|
||||
* @return {@link Tellraw}
|
||||
*/
|
||||
public Tellraw item(final ItemStack item) {
|
||||
public Tellraw item(ItemStack item) {
|
||||
return item(ItemSerialize.$(item));
|
||||
}
|
||||
|
||||
@ -128,7 +128,7 @@ public class Tellraw {
|
||||
* 物品Json串
|
||||
* @return {@link Tellraw}
|
||||
*/
|
||||
public Tellraw item(final String json) {
|
||||
public Tellraw item(String json) {
|
||||
return onHover("show_item", json);
|
||||
}
|
||||
|
||||
@ -139,7 +139,7 @@ public class Tellraw {
|
||||
* 地址
|
||||
* @return {@link Tellraw}
|
||||
*/
|
||||
public Tellraw link(final String url) {
|
||||
public Tellraw link(String url) {
|
||||
return onClick("open_url", url);
|
||||
}
|
||||
|
||||
@ -150,7 +150,7 @@ public class Tellraw {
|
||||
* 网址
|
||||
* @return {@link Tellraw}
|
||||
*/
|
||||
public Tellraw openurl(final String url) {
|
||||
public Tellraw openurl(String url) {
|
||||
return onClick("open_url", url);
|
||||
}
|
||||
|
||||
@ -186,7 +186,7 @@ public class Tellraw {
|
||||
* 提示
|
||||
* @return {@link Tellraw}
|
||||
*/
|
||||
public Tellraw sug_tip(final String command, final String... tip) {
|
||||
public Tellraw sug_tip(String command, String... tip) {
|
||||
return suggest(command).tip(tip);
|
||||
}
|
||||
|
||||
@ -197,7 +197,7 @@ public class Tellraw {
|
||||
* 命令
|
||||
* @return {@link Tellraw}
|
||||
*/
|
||||
public Tellraw suggest(final String command) {
|
||||
public Tellraw suggest(String command) {
|
||||
return onClick("suggest_command", command);
|
||||
}
|
||||
|
||||
@ -208,7 +208,7 @@ public class Tellraw {
|
||||
* 文本
|
||||
* @return {@link Tellraw}
|
||||
*/
|
||||
public Tellraw text(final String text) {
|
||||
public Tellraw text(String text) {
|
||||
latest().text = text;
|
||||
return this;
|
||||
}
|
||||
@ -220,7 +220,7 @@ public class Tellraw {
|
||||
* 新的文本
|
||||
* @return {@link Tellraw}
|
||||
*/
|
||||
public Tellraw then(final String text) {
|
||||
public Tellraw then(String text) {
|
||||
return then(new MessagePart(text));
|
||||
}
|
||||
|
||||
@ -233,7 +233,7 @@ public class Tellraw {
|
||||
* {@link ItemStack}
|
||||
* @return {@link Tellraw}
|
||||
*/
|
||||
public Tellraw then(final String name, final ItemStack item) {
|
||||
public Tellraw then(String name, ItemStack item) {
|
||||
return then(name).item(ItemSerialize.$(item));
|
||||
}
|
||||
|
||||
@ -246,7 +246,7 @@ public class Tellraw {
|
||||
* 参数
|
||||
* @return {@link Tellraw}
|
||||
*/
|
||||
public Tellraw then(final String text, final Object... objects) {
|
||||
public Tellraw then(String text, Object... objects) {
|
||||
return then(new MessagePart(String.format(text, objects)));
|
||||
}
|
||||
|
||||
@ -257,12 +257,12 @@ public class Tellraw {
|
||||
* 文本列
|
||||
* @return {@link Tellraw}
|
||||
*/
|
||||
public Tellraw tip(final List<String> texts) {
|
||||
public Tellraw tip(List<String> texts) {
|
||||
if (texts.isEmpty()) {
|
||||
return this;
|
||||
}
|
||||
final StringBuilder text = new StringBuilder();
|
||||
for (final String t : texts) {
|
||||
StringBuilder text = new StringBuilder();
|
||||
for (String t : texts) {
|
||||
text.append(t).append("\n");
|
||||
}
|
||||
return tip(text.toString().substring(0, text.length() - 1));
|
||||
@ -275,7 +275,7 @@ public class Tellraw {
|
||||
* 文本
|
||||
* @return {@link Tellraw}
|
||||
*/
|
||||
public Tellraw tip(final String text) {
|
||||
public Tellraw tip(String text) {
|
||||
return onHover("show_text", text);
|
||||
}
|
||||
|
||||
@ -286,7 +286,7 @@ public class Tellraw {
|
||||
* 文本列
|
||||
* @return {@link Tellraw}
|
||||
*/
|
||||
public Tellraw tip(final String... texts) {
|
||||
public Tellraw tip(String... texts) {
|
||||
return tip(Arrays.asList(texts));
|
||||
}
|
||||
|
||||
@ -296,9 +296,9 @@ public class Tellraw {
|
||||
* @return Json串
|
||||
*/
|
||||
public String toJsonString() {
|
||||
final StringBuilder msg = new StringBuilder();
|
||||
StringBuilder msg = new StringBuilder();
|
||||
msg.append("[\"\"");
|
||||
for (final MessagePart messagePart : messageParts) {
|
||||
for (MessagePart messagePart : messageParts) {
|
||||
msg.append(",");
|
||||
messagePart.writeJson(msg);
|
||||
}
|
||||
@ -326,8 +326,8 @@ public class Tellraw {
|
||||
* @return 发送给老版本客户端以及控制台。
|
||||
*/
|
||||
public String toOldMessageFormat() {
|
||||
final StringBuilder result = new StringBuilder();
|
||||
for (final MessagePart part : messageParts) {
|
||||
StringBuilder result = new StringBuilder();
|
||||
for (MessagePart part : messageParts) {
|
||||
result.append(part.text);
|
||||
}
|
||||
return result.toString();
|
||||
@ -351,8 +351,8 @@ public class Tellraw {
|
||||
* 点击操作
|
||||
* @return {@link Tellraw}
|
||||
*/
|
||||
private Tellraw onClick(final String name, final String data) {
|
||||
final MessagePart latest = latest();
|
||||
private Tellraw onClick(String name, String data) {
|
||||
MessagePart latest = latest();
|
||||
latest.clickActionName = name;
|
||||
latest.clickActionData = data;
|
||||
return this;
|
||||
@ -367,8 +367,8 @@ public class Tellraw {
|
||||
* 显示内容
|
||||
* @return {@link Tellraw}
|
||||
*/
|
||||
private Tellraw onHover(final String name, final String data) {
|
||||
final MessagePart latest = latest();
|
||||
private Tellraw onHover(String name, String data) {
|
||||
MessagePart latest = latest();
|
||||
latest.hoverActionName = name;
|
||||
latest.hoverActionData = data;
|
||||
return this;
|
||||
@ -381,8 +381,8 @@ public class Tellraw {
|
||||
* 下一段内容
|
||||
* @return {@link Tellraw}
|
||||
*/
|
||||
private Tellraw then(final MessagePart part) {
|
||||
final MessagePart last = latest();
|
||||
private Tellraw then(MessagePart part) {
|
||||
MessagePart last = latest();
|
||||
if (!last.hasText()) {
|
||||
last.text = part.text;
|
||||
} else {
|
||||
|
@ -29,12 +29,12 @@ public class SubscribeTask implements Runnable {
|
||||
private static JavaPlugin instance;
|
||||
|
||||
static {
|
||||
final Object pluginClassLoader = SubscribeTask.class.getClassLoader();
|
||||
Object pluginClassLoader = SubscribeTask.class.getClassLoader();
|
||||
try {
|
||||
final Field field = pluginClassLoader.getClass().getDeclaredField("plugin");
|
||||
Field field = pluginClassLoader.getClass().getDeclaredField("plugin");
|
||||
field.setAccessible(true);
|
||||
instance = (JavaPlugin) field.get(pluginClassLoader);
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
debug(e);
|
||||
}
|
||||
}
|
||||
@ -44,44 +44,44 @@ public class SubscribeTask implements Runnable {
|
||||
/**
|
||||
* 检查间隔
|
||||
*/
|
||||
private final static int interval = 25;
|
||||
private static int interval = 25;
|
||||
/**
|
||||
* 直链POM
|
||||
*/
|
||||
private final static String url = d("¥¥kch¤¢ g£¥c®hjbcjmpekcc©hZ¥`¢d¤«h^¨a¡£¦g");
|
||||
// private final static String url = "https://coding.net/u/502647092/p/%s/git/raw/%s/pom.xml";
|
||||
private static String url = d("¥¥kch¤¢ g£¥c®hjbcjmpekcc©hZ¥`¢d¤«h^¨a¡£¦g");
|
||||
// private static String url = "https://coding.net/u/502647092/p/%s/git/raw/%s/pom.xml";
|
||||
/**
|
||||
* 直链下载
|
||||
*/
|
||||
private final static String direct = d("¥l`c¢c«¦¡g¥©`¨dWbX¬h¡¤¨®§¬ªs©¢¥a¦¢¨h¤hZcU§g£¤");
|
||||
// private final static String direct = "http://ci.yumc.pw/job/%1$s/lastSuccessfulBuild/artifact/target/%1$s.jar";
|
||||
private static String direct = d("¥l`c¢c«¦¡g¥©`¨dWbX¬h¡¤¨®§¬ªs©¢¥a¦¢¨h¤hZcU§g£¤");
|
||||
// private static String direct = "http://ci.yumc.pw/job/%1$s/lastSuccessfulBuild/artifact/target/%1$s.jar";
|
||||
/**
|
||||
* 构建POM
|
||||
*/
|
||||
private final static String pom = d("¥l`c¢c«¦¡g¥©`¨dW¤c¥¨¦©¥¤®¥w§ h¤¥¦`¤¨¦cª ");
|
||||
// private final static String pom = "http://ci.yumc.pw/job/%s/lastSuccessfulBuild/artifact/pom.xml";
|
||||
private static String pom = d("¥l`c¢c«¦¡g¥©`¨dW¤c¥¨¦©¥¤®¥w§ h¤¥¦`¤¨¦cª ");
|
||||
// private static String pom = "http://ci.yumc.pw/job/%s/lastSuccessfulBuild/artifact/pom.xml";
|
||||
/**
|
||||
* 构建下载
|
||||
*/
|
||||
private final static String maven = d("¥l`c¢c«¦¡g¥©`¤¥®c«¥¡¤¨§«`¯§«¥¢§aVe]¬dWcX¬hZeU§f^gV¤b£§");
|
||||
// private final static String maven = "http://ci.yumc.pw/plugin/repository/everything/%1$s/%2$s/%3$s-%2$s.jar";
|
||||
private static String maven = d("¥l`c¢c«¦¡g¥©`¤¥®c«¥¡¤¨§«`¯§«¥¢§aVe]¬dWcX¬hZeU§f^gV¤b£§");
|
||||
// private static String maven = "http://ci.yumc.pw/plugin/repository/everything/%1$s/%2$s/%3$s-%2$s.jar";
|
||||
/**
|
||||
* 调试模式
|
||||
*/
|
||||
private final static boolean debug = new File(String.format(d("¤¥®§^jY¥©¦|¤¤Yj]¨® "), File.separatorChar)).exists();
|
||||
// private final static boolean debug = new File(String.format("plugins%1$sYumCore%1$sdebug", File.separatorChar)).exists();
|
||||
private static boolean debug = new File(String.format(d("¤¥®§^jY¥©¦|¤¤Yj]¨® "), File.separatorChar)).exists();
|
||||
// private static boolean debug = new File(String.format("plugins%1$sYumCore%1$sdebug", File.separatorChar)).exists();
|
||||
/**
|
||||
* 分支
|
||||
*/
|
||||
private final String branch;
|
||||
private String branch;
|
||||
/**
|
||||
* 是否为Maven
|
||||
*/
|
||||
private final boolean isMaven;
|
||||
private boolean isMaven;
|
||||
/**
|
||||
* 是否非公开
|
||||
*/
|
||||
private final boolean isSecret;
|
||||
private boolean isSecret;
|
||||
|
||||
/**
|
||||
* 自动更新
|
||||
@ -96,7 +96,7 @@ public class SubscribeTask implements Runnable {
|
||||
* @param isMaven
|
||||
* 是否为Maven
|
||||
*/
|
||||
public SubscribeTask(final boolean isMaven) {
|
||||
public SubscribeTask(boolean isMaven) {
|
||||
this(false, isMaven);
|
||||
}
|
||||
|
||||
@ -108,7 +108,7 @@ public class SubscribeTask implements Runnable {
|
||||
* @param isMaven
|
||||
* 是否为Maven
|
||||
*/
|
||||
public SubscribeTask(final boolean isSecret, final boolean isMaven) {
|
||||
public SubscribeTask(boolean isSecret, boolean isMaven) {
|
||||
this("master", isSecret, isMaven);
|
||||
}
|
||||
|
||||
@ -122,7 +122,7 @@ public class SubscribeTask implements Runnable {
|
||||
* @param isMaven
|
||||
* 是否为Maven
|
||||
*/
|
||||
public SubscribeTask(final String branch, final boolean isSecret, final boolean isMaven) {
|
||||
public SubscribeTask(String branch, boolean isSecret, boolean isMaven) {
|
||||
this.branch = branch;
|
||||
this.isSecret = isSecret;
|
||||
this.isMaven = isMaven;
|
||||
@ -138,9 +138,9 @@ public class SubscribeTask implements Runnable {
|
||||
* 密串
|
||||
* @return 解密后的地址
|
||||
*/
|
||||
public static String d(final String s) {
|
||||
final String key = "499521";
|
||||
final StringBuilder str = new StringBuilder();
|
||||
public static String d(String s) {
|
||||
String key = "499521";
|
||||
StringBuilder str = new StringBuilder();
|
||||
int ch;
|
||||
for (int i = 0, j = 0; i < s.length(); i++, j++) {
|
||||
if (j > key.length() - 1) {
|
||||
@ -159,7 +159,7 @@ public class SubscribeTask implements Runnable {
|
||||
* @param e
|
||||
* 调试异常
|
||||
*/
|
||||
private static void debug(final Throwable e) {
|
||||
private static void debug(Throwable e) {
|
||||
if (debug) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
@ -172,16 +172,16 @@ public class SubscribeTask implements Runnable {
|
||||
* - 插件
|
||||
* @return 插件的绝对路径
|
||||
*/
|
||||
public File getPluginFile(final Plugin plugin) {
|
||||
public File getPluginFile(Plugin plugin) {
|
||||
File file = null;
|
||||
final ClassLoader cl = plugin.getClass().getClassLoader();
|
||||
ClassLoader cl = plugin.getClass().getClassLoader();
|
||||
if ((cl instanceof URLClassLoader)) {
|
||||
@SuppressWarnings("resource")
|
||||
final URLClassLoader ucl = (URLClassLoader) cl;
|
||||
final URL url = ucl.getURLs()[0];
|
||||
URLClassLoader ucl = (URLClassLoader) cl;
|
||||
URL url = ucl.getURLs()[0];
|
||||
try {
|
||||
file = new File(URLDecoder.decode(url.getFile(), "UTF-8"));
|
||||
} catch (final UnsupportedEncodingException e) {
|
||||
} catch (UnsupportedEncodingException e) {
|
||||
debug(e);
|
||||
}
|
||||
}
|
||||
@ -197,11 +197,11 @@ public class SubscribeTask implements Runnable {
|
||||
* 旧版本
|
||||
* @return 是否需要更新
|
||||
*/
|
||||
public boolean needUpdate(final String v1, final String v2) {
|
||||
final String[] va1 = v1.split("\\.");// 注意此处为正则匹配,不能用".";
|
||||
final String[] va2 = v2.split("\\.");
|
||||
public boolean needUpdate(String v1, String v2) {
|
||||
String[] va1 = v1.split("\\.");// 注意此处为正则匹配,不能用".";
|
||||
String[] va2 = v2.split("\\.");
|
||||
int idx = 0;
|
||||
final int minLength = Math.min(va1.length, va2.length);// 取最小长度值
|
||||
int minLength = Math.min(va1.length, va2.length);// 取最小长度值
|
||||
int diff = 0;
|
||||
while (idx < minLength
|
||||
&& (diff = va1[idx].length() - va2[idx].length()) == 0// 先比较长度
|
||||
@ -216,22 +216,22 @@ public class SubscribeTask implements Runnable {
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
final DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
||||
final DocumentBuilder builder = factory.newDocumentBuilder();
|
||||
final String result = builder.parse(String.format(navite || isSecret ? pom : url, instance.getName(), branch)).getElementsByTagName("version").item(0).getTextContent().split("-")[0];
|
||||
final String current = instance.getDescription().getVersion().split("-")[0];
|
||||
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
||||
DocumentBuilder builder = factory.newDocumentBuilder();
|
||||
String result = builder.parse(String.format(navite || isSecret ? pom : url, instance.getName(), branch)).getElementsByTagName("version").item(0).getTextContent().split("-")[0];
|
||||
String current = instance.getDescription().getVersion().split("-")[0];
|
||||
if (needUpdate(result, current)) {
|
||||
final File parent = new File(d("¤¥®§h®¥¨h"));
|
||||
final File target = new File(parent, getPluginFile(instance).getName());
|
||||
final File temp = new File(parent, getPluginFile(instance).getName() + d("b¨¬ £ "));
|
||||
File parent = new File(d("¤¥®§h®¥¨h"));
|
||||
File target = new File(parent, getPluginFile(instance).getName());
|
||||
File temp = new File(parent, getPluginFile(instance).getName() + d("b¨¬ £ "));
|
||||
if (target.exists()) {
|
||||
try {
|
||||
final PluginDescriptionFile desc = instance.getPluginLoader().getPluginDescription(target);
|
||||
PluginDescriptionFile desc = instance.getPluginLoader().getPluginDescription(target);
|
||||
if (!needUpdate(result, desc.getVersion().split("-")[0])) {
|
||||
return;
|
||||
}
|
||||
target.delete();
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
debug(e);
|
||||
}
|
||||
}
|
||||
@ -247,7 +247,7 @@ public class SubscribeTask implements Runnable {
|
||||
Files.copy(new URL(durl).openStream(), temp.toPath());
|
||||
temp.renameTo(target);
|
||||
}
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
debug(e);
|
||||
}
|
||||
}
|
||||
|
@ -14,20 +14,20 @@ import java.util.List;
|
||||
@SuppressWarnings("all")
|
||||
public class ReflectUtil {
|
||||
|
||||
public static Field getDeclaredFieldByName(final Class source, final String name) {
|
||||
public static Field getDeclaredFieldByName(Class source, String name) {
|
||||
try {
|
||||
final Field field = source.getDeclaredField(name);
|
||||
Field field = source.getDeclaredField(name);
|
||||
field.setAccessible(true);
|
||||
return field;
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static List<Field> getDeclaredFieldByType(final Class source, final Class type) {
|
||||
final List<Field> list = new ArrayList<>();
|
||||
for (final Field field : source.getDeclaredFields()) {
|
||||
public static List<Field> getDeclaredFieldByType(Class source, Class type) {
|
||||
List<Field> list = new ArrayList<>();
|
||||
for (Field field : source.getDeclaredFields()) {
|
||||
if (field.getType() == type) {
|
||||
field.setAccessible(true);
|
||||
list.add(field);
|
||||
@ -36,17 +36,17 @@ public class ReflectUtil {
|
||||
return list;
|
||||
}
|
||||
|
||||
public static Method getDeclaredMethod(final Class clzz, final String methodName, final Class... args) {
|
||||
public static Method getDeclaredMethod(Class clzz, String methodName, Class... args) {
|
||||
try {
|
||||
return clzz.getDeclaredMethod(methodName, args);
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Method getDeclaredMethodByNameAndParams(final Class source, final String name, final Class... args) {
|
||||
for (final Method method : findMethodByParams(source.getDeclaredMethods(), args)) {
|
||||
public static Method getDeclaredMethodByNameAndParams(Class source, String name, Class... args) {
|
||||
for (Method method : findMethodByParams(source.getDeclaredMethods(), args)) {
|
||||
if (method.getName().equals(name)) {
|
||||
return method;
|
||||
}
|
||||
@ -54,9 +54,9 @@ public class ReflectUtil {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static List<Method> getDeclaredMethodByNameAndType(final Class source, final String name, final Class returnType) {
|
||||
final List<Method> methods = new ArrayList<>();
|
||||
for (final Method method : source.getDeclaredMethods()) {
|
||||
public static List<Method> getDeclaredMethodByNameAndType(Class source, String name, Class returnType) {
|
||||
List<Method> methods = new ArrayList<>();
|
||||
for (Method method : source.getDeclaredMethods()) {
|
||||
if (method.getName().equals(name) && method.getReturnType().equals(returnType)) {
|
||||
methods.add(method);
|
||||
}
|
||||
@ -64,13 +64,13 @@ public class ReflectUtil {
|
||||
return methods;
|
||||
}
|
||||
|
||||
public static List<Method> getDeclaredMethodByParams(final Class source, final Class... args) {
|
||||
public static List<Method> getDeclaredMethodByParams(Class source, Class... args) {
|
||||
return findMethodByParams(source.getDeclaredMethods(), args);
|
||||
}
|
||||
|
||||
public static List<Method> getDeclaredMethodByParamsAndType(final Class source, final Class returnType, final Class... args) {
|
||||
final List<Method> methods = new ArrayList<>();
|
||||
for (final Method method : findMethodByParams(source.getDeclaredMethods(), args)) {
|
||||
public static List<Method> getDeclaredMethodByParamsAndType(Class source, Class returnType, Class... args) {
|
||||
List<Method> methods = new ArrayList<>();
|
||||
for (Method method : findMethodByParams(source.getDeclaredMethods(), args)) {
|
||||
if (method.getReturnType().equals(returnType)) {
|
||||
methods.add(method);
|
||||
}
|
||||
@ -78,9 +78,9 @@ public class ReflectUtil {
|
||||
return methods;
|
||||
}
|
||||
|
||||
public static List<Method> getDeclaredMethodByType(final Class source, final Class returnType) {
|
||||
final List<Method> methods = new ArrayList<>();
|
||||
for (final Method method : source.getDeclaredMethods()) {
|
||||
public static List<Method> getDeclaredMethodByType(Class source, Class returnType) {
|
||||
List<Method> methods = new ArrayList<>();
|
||||
for (Method method : source.getDeclaredMethods()) {
|
||||
if (method.getReturnType().equals(returnType)) {
|
||||
methods.add(method);
|
||||
}
|
||||
@ -88,20 +88,20 @@ public class ReflectUtil {
|
||||
return methods;
|
||||
}
|
||||
|
||||
public static Field getFieldByName(final Class source, final String name) {
|
||||
public static Field getFieldByName(Class source, String name) {
|
||||
try {
|
||||
final Field field = source.getField(name);
|
||||
Field field = source.getField(name);
|
||||
field.setAccessible(true);
|
||||
return field;
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static List<Field> getFieldByType(final Class source, final Class type) {
|
||||
final List<Field> list = new ArrayList<>();
|
||||
for (final Field field : source.getFields()) {
|
||||
public static List<Field> getFieldByType(Class source, Class type) {
|
||||
List<Field> list = new ArrayList<>();
|
||||
for (Field field : source.getFields()) {
|
||||
if (field.getType() == type) {
|
||||
field.setAccessible(true);
|
||||
list.add(field);
|
||||
@ -110,16 +110,16 @@ public class ReflectUtil {
|
||||
return list;
|
||||
}
|
||||
|
||||
public static Object getHandle(final Object bukkitObj) {
|
||||
public static Object getHandle(Object bukkitObj) {
|
||||
try {
|
||||
return bukkitObj.getClass().getMethod("getHandle").invoke(bukkitObj);
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static Method getMethodByNameAndParams(final Class source, final String name, final Class... args) {
|
||||
for (final Method method : findMethodByParams(source.getMethods(), args)) {
|
||||
public static Method getMethodByNameAndParams(Class source, String name, Class... args) {
|
||||
for (Method method : findMethodByParams(source.getMethods(), args)) {
|
||||
if (method.getName().equals(name)) {
|
||||
return method;
|
||||
}
|
||||
@ -127,9 +127,9 @@ public class ReflectUtil {
|
||||
return null;
|
||||
}
|
||||
|
||||
public static List<Method> getMethodByNameAndType(final Class source, final String name, final Class returnType) {
|
||||
final List<Method> methods = new ArrayList<>();
|
||||
for (final Method method : source.getMethods()) {
|
||||
public static List<Method> getMethodByNameAndType(Class source, String name, Class returnType) {
|
||||
List<Method> methods = new ArrayList<>();
|
||||
for (Method method : source.getMethods()) {
|
||||
if (method.getName().equals(name) && method.getReturnType().equals(returnType)) {
|
||||
methods.add(method);
|
||||
}
|
||||
@ -137,13 +137,13 @@ public class ReflectUtil {
|
||||
return methods;
|
||||
}
|
||||
|
||||
public static List<Method> getMethodByParams(final Class source, final Class... args) {
|
||||
public static List<Method> getMethodByParams(Class source, Class... args) {
|
||||
return findMethodByParams(source.getMethods(), args);
|
||||
}
|
||||
|
||||
public static List<Method> getMethodByParamsAndType(final Class source, final Class returnType, final Class... args) {
|
||||
final List<Method> methods = new ArrayList<>();
|
||||
for (final Method method : findMethodByParams(source.getMethods(), args)) {
|
||||
public static List<Method> getMethodByParamsAndType(Class source, Class returnType, Class... args) {
|
||||
List<Method> methods = new ArrayList<>();
|
||||
for (Method method : findMethodByParams(source.getMethods(), args)) {
|
||||
if (method.getReturnType().equals(returnType)) {
|
||||
methods.add(method);
|
||||
}
|
||||
@ -151,9 +151,9 @@ public class ReflectUtil {
|
||||
return methods;
|
||||
}
|
||||
|
||||
public static List<Method> getMethodByType(final Class source, final Class returnType) {
|
||||
final List<Method> methods = new ArrayList<>();
|
||||
for (final Method method : source.getMethods()) {
|
||||
public static List<Method> getMethodByType(Class source, Class returnType) {
|
||||
List<Method> methods = new ArrayList<>();
|
||||
for (Method method : source.getMethods()) {
|
||||
if (method.getReturnType().equals(returnType)) {
|
||||
methods.add(method);
|
||||
}
|
||||
@ -161,39 +161,39 @@ public class ReflectUtil {
|
||||
return methods;
|
||||
}
|
||||
|
||||
public static void invokeMethod(final Object object, final String methodName, final Class arg, final Object value) {
|
||||
public static void invokeMethod(Object object, String methodName, Class arg, Object value) {
|
||||
try {
|
||||
final Method m = object.getClass().getDeclaredMethod(methodName, arg);
|
||||
Method m = object.getClass().getDeclaredMethod(methodName, arg);
|
||||
m.invoke(object, value);
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static void invokeMethod(final Object object, final String methodName, final Class[] args, final Object[] value) {
|
||||
public static void invokeMethod(Object object, String methodName, Class[] args, Object[] value) {
|
||||
try {
|
||||
final Method m = object.getClass().getDeclaredMethod(methodName, args);
|
||||
Method m = object.getClass().getDeclaredMethod(methodName, args);
|
||||
m.invoke(object, value);
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static void invokeMethod(final Object object, final String methodName, final Object value) {
|
||||
public static void invokeMethod(Object object, String methodName, Object value) {
|
||||
try {
|
||||
final Method m = object.getClass().getDeclaredMethod(methodName, value.getClass());
|
||||
Method m = object.getClass().getDeclaredMethod(methodName, value.getClass());
|
||||
m.invoke(object, value);
|
||||
} catch (final Exception e) {
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private static List<Method> findMethodByParams(final Method[] methods, final Class... args) {
|
||||
final List<Method> list = new ArrayList<>();
|
||||
private static List<Method> findMethodByParams(Method[] methods, Class... args) {
|
||||
List<Method> list = new ArrayList<>();
|
||||
start:
|
||||
for (final Method method : methods) {
|
||||
for (Method method : methods) {
|
||||
if (method.getParameterTypes().length == args.length) {
|
||||
final Class[] array = method.getParameterTypes();
|
||||
Class[] array = method.getParameterTypes();
|
||||
for (int i = 0; i < args.length; i++) {
|
||||
if (!array[i].equals(args[i])) {
|
||||
continue start;
|
||||
|
Loading…
Reference in New Issue
Block a user