diff --git a/pom.xml b/pom.xml index a3796e1..1c1694d 100644 --- a/pom.xml +++ b/pom.xml @@ -15,7 +15,7 @@ cc.carm.plugin moeteleport - 3.1.0 + 3.1.1 MoeTeleport 喵喵传送,简单的传送、设置家的插件。 @@ -179,7 +179,7 @@ org.jetbrains annotations - 22.0.0 + 23.0.0 provided diff --git a/src/main/java/cc/carm/plugin/moeteleport/Main.java b/src/main/java/cc/carm/plugin/moeteleport/Main.java index bb34058..e8bccbf 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/Main.java +++ b/src/main/java/cc/carm/plugin/moeteleport/Main.java @@ -34,10 +34,11 @@ import java.util.Arrays; public class Main extends EasyPlugin { private static Main instance; - private static DataStorage storage; - private WarpManager warpManager; - private UserManager userManager; - private RequestManager requestManager; + + protected DataStorage storage; + protected WarpManager warpManager; + protected UserManager userManager; + protected RequestManager requestManager; public Main() { super(new EasyPluginMessageProvider.zh_CN()); @@ -81,16 +82,18 @@ public class Main extends EasyPlugin { info("初始化存储方式..."); StorageMethod storageMethod = StorageMethod.read(PluginConfig.STORAGE_METHOD.get()); - info(" 正在使用 " + storageMethod.name() + " 进行数据存储"); - storage = storageMethod.createStorage(); - if (!storage.initialize()) { + try { + info(" 正在使用 " + storageMethod.name() + " 进行数据存储"); + storage = storageMethod.createStorage(); + storage.initialize(); + } catch (Exception ex) { severe("初始化存储失败,请检查配置文件。"); - storage.shutdown(); setEnabled(false); return false; // 初始化失败,不再继续加载 } + info("加载地标管理器..."); warpManager = new WarpManager(); @@ -98,7 +101,7 @@ public class Main extends EasyPlugin { this.userManager = new UserManager(); if (Bukkit.getOnlinePlayers().size() > 0) { info(" 加载现有用户数据..."); - getUserManager().loadAll(); + this.userManager.loadAll(); } info("加载请求管理器..."); @@ -147,16 +150,16 @@ public class Main extends EasyPlugin { @Override protected void shutdown() { info("关闭所有请求..."); - getRequestManager().shutdown(); + this.requestManager.shutdown(); info("保存用户数据..."); - getUserManager().unloadAll(true); + this.userManager.unloadAll(true); info("保存地标数据..."); - getWarpManager().saveWarps(); + this.warpManager.saveWarps(); info("终止存储源..."); - getStorage().shutdown(); + this.storage.shutdown(); info("卸载监听器..."); Bukkit.getServicesManager().unregisterAll(this); @@ -174,21 +177,5 @@ public class Main extends EasyPlugin { } } - protected DataStorage getStorage() { - return storage; - } - - protected WarpManager getWarpManager() { - return getInstance().warpManager; - } - - protected UserManager getUserManager() { - return getInstance().userManager; - } - - protected RequestManager getRequestManager() { - return getInstance().requestManager; - } - } diff --git a/src/main/java/cc/carm/plugin/moeteleport/MoeTeleport.java b/src/main/java/cc/carm/plugin/moeteleport/MoeTeleport.java index f9d55d9..0ab1062 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/MoeTeleport.java +++ b/src/main/java/cc/carm/plugin/moeteleport/MoeTeleport.java @@ -6,8 +6,6 @@ import cc.carm.plugin.moeteleport.manager.WarpManager; import cc.carm.plugin.moeteleport.storage.DataStorage; import cc.carm.plugin.moeteleport.storage.StorageMethod; -import java.util.function.Supplier; - public class MoeTeleport { public static void outputInfo() { @@ -15,27 +13,27 @@ public class MoeTeleport { } public static DataStorage getStorage() { - return Main.getInstance().getStorage(); + return Main.getInstance().storage; } public static WarpManager getWarpManager() { - return Main.getInstance().getWarpManager(); + return Main.getInstance().warpManager; } public static UserManager getUserManager() { - return Main.getInstance().getUserManager(); + return Main.getInstance().userManager; } public static RequestManager getRequestManager() { - return Main.getInstance().getRequestManager(); + return Main.getInstance().requestManager; } - public void registerCustomStorage(DataStorage storage) { - registerCustomStorage(() -> storage); + public void setStorage(DataStorage storage) { + Main.getInstance().storage = storage; } - public void registerCustomStorage(Supplier storageSupplier) { - StorageMethod.CUSTOM.setStorageSupplier(storageSupplier); + public void registerCustomStorage(Class storageClazz) { + StorageMethod.CUSTOM.setStorageClazz(storageClazz); } } diff --git a/src/main/java/cc/carm/plugin/moeteleport/storage/DataStorage.java b/src/main/java/cc/carm/plugin/moeteleport/storage/DataStorage.java index fc7f61c..00819ba 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/storage/DataStorage.java +++ b/src/main/java/cc/carm/plugin/moeteleport/storage/DataStorage.java @@ -15,9 +15,9 @@ public interface DataStorage { /** * 在插件加载存储源时执行。 * - * @return 是否初始化成功 + * @throws Exception 当出现任何错误时抛出 */ - boolean initialize(); + void initialize() throws Exception; /** * 在插件被卸载时执行。 diff --git a/src/main/java/cc/carm/plugin/moeteleport/storage/StorageMethod.java b/src/main/java/cc/carm/plugin/moeteleport/storage/StorageMethod.java index e17bb2e..badba71 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/storage/StorageMethod.java +++ b/src/main/java/cc/carm/plugin/moeteleport/storage/StorageMethod.java @@ -10,25 +10,24 @@ import org.jetbrains.annotations.Nullable; import java.util.Arrays; import java.util.Optional; -import java.util.function.Supplier; public enum StorageMethod { - CUSTOM(0, new String[]{}, CustomStorage::new), - YAML(1, new String[]{"yml"}, YAMLStorage::new), - JSON(2, new String[]{}, JSONStorage::new), - MYSQL(3, new String[]{"my-sql", "mariadb", "sql", "database"}, MySQLStorage::new), + CUSTOM(0, new String[]{}, CustomStorage.class), + YAML(1, new String[]{"yml"}, YAMLStorage.class), + JSON(2, new String[]{}, JSONStorage.class), + MYSQL(3, new String[]{"my-sql", "mariadb", "sql", "database"}, MySQLStorage.class), - ESSENTIALS(11, new String[]{"essential", "ess", "EssentialsX", "essX"}, EssentialStorage::new); + ESSENTIALS(11, new String[]{"essential", "ess", "EssentialsX", "essX"}, EssentialStorage.class); private final int id; private final String[] alias; - private @NotNull Supplier<@NotNull DataStorage> storageSupplier; + private @NotNull Class storageClazz; - StorageMethod(int id, String[] alias, @NotNull Supplier<@NotNull DataStorage> storageSupplier) { + StorageMethod(int id, String[] alias, @NotNull Class storageClazz) { this.id = id; this.alias = alias; - this.storageSupplier = storageSupplier; + this.storageClazz = storageClazz; } public static @NotNull StorageMethod read(String s) { @@ -65,15 +64,15 @@ public enum StorageMethod { return alias; } - public @NotNull Supplier<@NotNull DataStorage> getStorageSupplier() { - return storageSupplier; + public @NotNull Class getStorageClazz() { + return storageClazz; } - public void setStorageSupplier(@NotNull Supplier<@NotNull DataStorage> storageSupplier) { - this.storageSupplier = storageSupplier; + public void setStorageClazz(@NotNull Class storageClazz) { + this.storageClazz = storageClazz; } - public @NotNull DataStorage createStorage() { - return getStorageSupplier().get(); + public @NotNull DataStorage createStorage() throws Exception { + return getStorageClazz().newInstance(); } } diff --git a/src/main/java/cc/carm/plugin/moeteleport/storage/custom/CustomStorage.java b/src/main/java/cc/carm/plugin/moeteleport/storage/custom/CustomStorage.java index b1305ff..f8fc4fe 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/storage/custom/CustomStorage.java +++ b/src/main/java/cc/carm/plugin/moeteleport/storage/custom/CustomStorage.java @@ -17,10 +17,10 @@ public class CustomStorage implements DataStorage { @Override @TestOnly - public boolean initialize() { + public void initialize() throws UnsupportedOperationException { Main.severe("您选择使用自定义存储,但并没有应用成功。"); Main.severe("You are using CustomStorage, but not overwrite the methods."); - return false; + throw new UnsupportedOperationException("您选择使用自定义存储,但并没有应用成功。"); } @Override @@ -31,14 +31,14 @@ public class CustomStorage implements DataStorage { @Override @TestOnly - public @Nullable UserData loadData(@NotNull UUID uuid) { - return null; + public @Nullable UserData loadData(@NotNull UUID uuid) throws UnsupportedOperationException { + throw new UnsupportedOperationException("您选择使用自定义存储,但并没有应用成功。"); } @Override @TestOnly - public void saveUserData(@NotNull UserData data) { - + public void saveUserData(@NotNull UserData data) throws UnsupportedOperationException { + throw new UnsupportedOperationException("您选择使用自定义存储,但并没有应用成功。"); } @Override diff --git a/src/main/java/cc/carm/plugin/moeteleport/storage/database/MySQLStorage.java b/src/main/java/cc/carm/plugin/moeteleport/storage/database/MySQLStorage.java index 65d440b..45b8978 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/storage/database/MySQLStorage.java +++ b/src/main/java/cc/carm/plugin/moeteleport/storage/database/MySQLStorage.java @@ -26,7 +26,7 @@ public class MySQLStorage implements DataStorage { Map warpsMap = new HashMap<>(); @Override - public boolean initialize() { + public void initialize() throws Exception { try { Main.info(" 尝试连接到数据库..."); String url = String.format("jdbc:mysql://%s:%s/%s?useSSL=false", @@ -38,9 +38,7 @@ public class MySQLStorage implements DataStorage { ); this.sqlManager.setDebugMode(() -> Main.getInstance().isDebugging()); } catch (Exception exception) { - Main.severe("无法连接到数据库,请检查配置文件。"); - exception.printStackTrace(); - return false; + throw new Exception("无法连接到数据库,请检查配置文件", exception); } try { @@ -58,20 +56,15 @@ public class MySQLStorage implements DataStorage { .build().execute(); } catch (SQLException exception) { - Main.severe("无法创建插件所需的表,请检查数据库权限。"); - exception.printStackTrace(); - return false; + throw new Exception("无法创建插件所需的表,请检查数据库权限。", exception); } Main.info(" 加载地标数据..."); try { this.warpsMap = loadWarps(); } catch (Exception e) { - Main.severe("无法加载地标数据,请检查数据库权限和相关表。"); - e.printStackTrace(); + throw new Exception("无法加载地标数据,请检查数据库权限和相关表。", e); } - - return true; } @Override diff --git a/src/main/java/cc/carm/plugin/moeteleport/storage/extension/EssentialStorage.java b/src/main/java/cc/carm/plugin/moeteleport/storage/extension/EssentialStorage.java index 715b870..a957a7b 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/storage/extension/EssentialStorage.java +++ b/src/main/java/cc/carm/plugin/moeteleport/storage/extension/EssentialStorage.java @@ -16,17 +16,10 @@ import java.util.UUID; public class EssentialStorage extends PluginBasedStorage { - private Essentials essentials; - public EssentialStorage() { super("Essentials"); } - @Override - public boolean initialize() { - return super.initialize() && (this.essentials = (Essentials) getDependPlugin()) != null; - } - @Override public @Nullable UserData loadData(@NotNull UUID uuid) { return new EssentialUserData(uuid, getEssentials()); @@ -40,7 +33,7 @@ public class EssentialStorage extends PluginBasedStorage { try { Location warpLocation = getEssentials().getWarps().getWarp(warpName); UUID owner = getEssentials().getWarps().getLastOwner(warpName); - warps.put(warpName, new WarpInfo(warpName,owner, new DataLocation(warpLocation))); + warps.put(warpName, new WarpInfo(warpName, owner, new DataLocation(warpLocation))); } catch (Exception ignore) { } } @@ -74,7 +67,7 @@ public class EssentialStorage extends PluginBasedStorage { } public Essentials getEssentials() { - return essentials; + return (Essentials) getDependPlugin(); } public static class EssentialUserData extends UserData { diff --git a/src/main/java/cc/carm/plugin/moeteleport/storage/file/JSONStorage.java b/src/main/java/cc/carm/plugin/moeteleport/storage/file/JSONStorage.java index 2e947d7..7bfe4c2 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/storage/file/JSONStorage.java +++ b/src/main/java/cc/carm/plugin/moeteleport/storage/file/JSONStorage.java @@ -30,17 +30,9 @@ public class JSONStorage extends FileBasedStorage { Map warpsMap = new HashMap<>(); @Override - public boolean initialize() { - if (super.initialize()) { - try { - this.warpsMap = loadWarps(); - return true; - } catch (Exception e) { - Main.severe("无法加载地标数据,请检查文件权限和相关配置。"); - e.printStackTrace(); - } - } - return false; + public void initialize() throws Exception { + super.initialize(); + this.warpsMap = loadWarps(); } @Override diff --git a/src/main/java/cc/carm/plugin/moeteleport/storage/file/YAMLStorage.java b/src/main/java/cc/carm/plugin/moeteleport/storage/file/YAMLStorage.java index 1da3b74..56ab5bc 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/storage/file/YAMLStorage.java +++ b/src/main/java/cc/carm/plugin/moeteleport/storage/file/YAMLStorage.java @@ -26,22 +26,14 @@ public class YAMLStorage extends FileBasedStorage { FileConfiguration warpsConfiguration; @Override - public boolean initialize() { - if (super.initialize()) { - try { - this.warpsDataFile = new File(getDataFolder(), "warps.yml"); - if (!this.warpsDataFile.exists()) { - boolean success = warpsDataFile.createNewFile(); - } - this.warpsConfiguration = YamlConfiguration.loadConfiguration(warpsDataFile); - this.warpsMap = loadWarps(); - return true; - } catch (Exception e) { - Main.severe("无法加载地标数据,请检查文件权限和相关配置。"); - e.printStackTrace(); - } + public void initialize() throws Exception { + super.initialize(); + this.warpsDataFile = new File(getDataFolder(), "warps.yml"); + if (!this.warpsDataFile.exists() && !warpsDataFile.createNewFile()) { + throw new Exception("无法创建 warps.yml 文件。"); } - return false; + this.warpsConfiguration = YamlConfiguration.loadConfiguration(warpsDataFile); + this.warpsMap = loadWarps(); } @Override diff --git a/src/main/java/cc/carm/plugin/moeteleport/storage/impl/FileBasedStorage.java b/src/main/java/cc/carm/plugin/moeteleport/storage/impl/FileBasedStorage.java index 2288480..f9e9b0f 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/storage/impl/FileBasedStorage.java +++ b/src/main/java/cc/carm/plugin/moeteleport/storage/impl/FileBasedStorage.java @@ -20,16 +20,14 @@ public abstract class FileBasedStorage implements DataStorage { protected @Nullable File dataFolder; @Override - public boolean initialize() { - try { - this.dataFolder = new File(Main.getInstance().getDataFolder(), FILE_PATH.get()); - if (!dataFolder.exists()) { - return dataFolder.mkdir(); - } else { - return dataFolder.isDirectory(); + public void initialize() throws Exception { + this.dataFolder = new File(Main.getInstance().getDataFolder(), FILE_PATH.get()); + if (!dataFolder.exists()) { + if (!dataFolder.mkdir()) { + throw new Exception("无法创建数据文件夹!"); } - } catch (Exception ex) { - return false; + } else if (!dataFolder.isDirectory()) { + throw new Exception("数据文件夹路径对应的不是一个文件夹!"); } } diff --git a/src/main/java/cc/carm/plugin/moeteleport/storage/impl/PluginBasedStorage.java b/src/main/java/cc/carm/plugin/moeteleport/storage/impl/PluginBasedStorage.java index f6beade..efc98fc 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/storage/impl/PluginBasedStorage.java +++ b/src/main/java/cc/carm/plugin/moeteleport/storage/impl/PluginBasedStorage.java @@ -20,8 +20,10 @@ public abstract class PluginBasedStorage implements DataStorage { } @Override - public boolean initialize() { - return dependPlugin != null; + public void initialize() throws NullPointerException { + if (dependPlugin == null) { + throw new NullPointerException("该存储类型依赖的插件不存在,请检查配置文件"); + } } public Plugin getDependPlugin() {