diff --git a/pom.xml b/pom.xml index 10e2560..37379d6 100644 --- a/pom.xml +++ b/pom.xml @@ -76,6 +76,11 @@ https://repo.minebench.de/ + + essentials-repo + https://repo.essentialsx.net/releases/ + + github GitHub Packages @@ -108,6 +113,14 @@ provided + + + net.essentialsx + EssentialsX + 2.19.2 + provided + + cc.carm.lib easysql-beecp diff --git a/src/main/java/cc/carm/plugin/moeteleport/Main.java b/src/main/java/cc/carm/plugin/moeteleport/Main.java index 869ec56..1a47146 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/Main.java +++ b/src/main/java/cc/carm/plugin/moeteleport/Main.java @@ -97,9 +97,7 @@ public class Main extends JavaPlugin { metrics.addCustomChart(new SimplePie("storage_method", storageMethod::name)); } - log("加载完成 ,共耗时 " + (System.currentTimeMillis() - startTime) + " ms 。"); - } @Override 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 b8d2b53..6c5762e 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/storage/StorageMethod.java +++ b/src/main/java/cc/carm/plugin/moeteleport/storage/StorageMethod.java @@ -1,9 +1,10 @@ package cc.carm.plugin.moeteleport.storage; -import cc.carm.plugin.moeteleport.storage.impl.CustomStorage; -import cc.carm.plugin.moeteleport.storage.file.JSONStorage; import cc.carm.plugin.moeteleport.storage.database.MySQLStorage; +import cc.carm.plugin.moeteleport.storage.extension.EssentialXStorage; +import cc.carm.plugin.moeteleport.storage.file.JSONStorage; import cc.carm.plugin.moeteleport.storage.file.YAMLStorage; +import cc.carm.plugin.moeteleport.storage.custom.CustomStorage; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -12,53 +13,69 @@ import java.util.Optional; import java.util.function.Supplier; public enum StorageMethod { - - CUSTOM(0, CustomStorage::new), - YAML(1, YAMLStorage::new), - JSON(2, JSONStorage::new), - MYSQL(3, MySQLStorage::new); - private final int id; - private @NotNull Supplier<@NotNull DataStorage> storageSupplier; + 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), - StorageMethod(int id, @NotNull Supplier<@NotNull DataStorage> storageSupplier) { - this.id = id; - this.storageSupplier = storageSupplier; - } + ESSENTIALS(11, new String[]{"essential", "ess", "EssentialsX", "essX"}, EssentialXStorage::new); - public int getID() { - return id; - } + private final int id; + private final String[] alias; + private @NotNull Supplier<@NotNull DataStorage> storageSupplier; - public @NotNull Supplier<@NotNull DataStorage> getStorageSupplier() { - return storageSupplier; - } + StorageMethod(int id, String[] alias, @NotNull Supplier<@NotNull DataStorage> storageSupplier) { + this.id = id; + this.alias = alias; + this.storageSupplier = storageSupplier; + } - public void setStorageSupplier(@NotNull Supplier<@NotNull DataStorage> storageSupplier) { - this.storageSupplier = storageSupplier; - } + public int getID() { + return id; + } - public @NotNull DataStorage createStorage() { - return getStorageSupplier().get(); - } + public String[] getAlias() { + return alias; + } - public static @NotNull StorageMethod read(String s) { - StorageMethod byName = readByName(s); - if (byName != null) return byName; - try { - return Optional.ofNullable(readByID(Integer.parseInt(s))).orElse(YAML); - } catch (Exception ex) { - return YAML; - } - } + public @NotNull Supplier<@NotNull DataStorage> getStorageSupplier() { + return storageSupplier; + } + + public void setStorageSupplier(@NotNull Supplier<@NotNull DataStorage> storageSupplier) { + this.storageSupplier = storageSupplier; + } + + public @NotNull DataStorage createStorage() { + return getStorageSupplier().get(); + } + + public static @NotNull StorageMethod read(String s) { + StorageMethod byName = readByName(s); + if (byName != null) return byName; + StorageMethod byAlias = readByAlias(s); + if (byAlias != null) return byAlias; + try { + return Optional.ofNullable(readByID(Integer.parseInt(s))).orElse(YAML); + } catch (Exception ex) { + return YAML; + } + } - public static @Nullable StorageMethod readByName(String name) { - return Arrays.stream(values()).filter(value -> value.name().equalsIgnoreCase(name)).findFirst().orElse(null); - } + public static @Nullable StorageMethod readByName(String name) { + return Arrays.stream(values()).filter(value -> value.name().equalsIgnoreCase(name)).findFirst().orElse(null); + } + + public static @Nullable StorageMethod readByAlias(String name) { + return Arrays.stream(values()) + .filter(value -> Arrays.stream(value.getAlias()).anyMatch(alias -> alias.equalsIgnoreCase(name))) + .findFirst().orElse(null); + } - public static @Nullable StorageMethod readByID(int id) { - return Arrays.stream(values()).filter(value -> value.getID() == id).findFirst().orElse(null); - } + public static @Nullable StorageMethod readByID(int id) { + return Arrays.stream(values()).filter(value -> value.getID() == id).findFirst().orElse(null); + } } diff --git a/src/main/java/cc/carm/plugin/moeteleport/storage/impl/CustomStorage.java b/src/main/java/cc/carm/plugin/moeteleport/storage/custom/CustomStorage.java similarity index 95% rename from src/main/java/cc/carm/plugin/moeteleport/storage/impl/CustomStorage.java rename to src/main/java/cc/carm/plugin/moeteleport/storage/custom/CustomStorage.java index 555bc64..aaedaa2 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/storage/impl/CustomStorage.java +++ b/src/main/java/cc/carm/plugin/moeteleport/storage/custom/CustomStorage.java @@ -1,4 +1,4 @@ -package cc.carm.plugin.moeteleport.storage.impl; +package cc.carm.plugin.moeteleport.storage.custom; import cc.carm.plugin.moeteleport.Main; import cc.carm.plugin.moeteleport.configuration.location.DataLocation; diff --git a/src/main/java/cc/carm/plugin/moeteleport/storage/extension/EssentialXStorage.java b/src/main/java/cc/carm/plugin/moeteleport/storage/extension/EssentialXStorage.java new file mode 100644 index 0000000..6789e89 --- /dev/null +++ b/src/main/java/cc/carm/plugin/moeteleport/storage/extension/EssentialXStorage.java @@ -0,0 +1,86 @@ +package cc.carm.plugin.moeteleport.storage.extension; + +import cc.carm.plugin.moeteleport.configuration.location.DataLocation; +import cc.carm.plugin.moeteleport.model.UserData; +import cc.carm.plugin.moeteleport.storage.impl.PluginBasedStorage; +import com.earth2me.essentials.Essentials; +import com.earth2me.essentials.User; +import org.bukkit.Location; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.LinkedHashMap; +import java.util.UUID; + +public class EssentialXStorage extends PluginBasedStorage { + + public EssentialXStorage() { + super("Essentials"); + } + + private Essentials 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()); + } + + public Essentials getEssentials() { + return essentials; + } + + public static class EssentialUserData extends UserData { + + User essentialsUser; + + public EssentialUserData(@NotNull UUID userUUID, Essentials essentials) { + super(userUUID); + this.essentialsUser = essentials.getUser(userUUID); + } + + public User getEssUser() { + return essentialsUser; + } + + @Override + public LinkedHashMap getHomeLocations() { + LinkedHashMap homes = new LinkedHashMap<>(); + getEssUser().getHomes().forEach(homeName -> { + Location homeLocation = getEssUser().getHome(homeName); + if (homeLocation != null) homes.put(homeName, new DataLocation(homeLocation)); + }); + return homes; + } + + @Override + public void setHomeLocation(String homeName, Location location) { + getEssUser().setHome(homeName, location); + } + + @Override + public void delHomeLocation(String homeName) { + try { + getEssUser().delHome(homeName); + } catch (Exception ignored) { + } + } + + @Override + public void setLastLocation(@Nullable Location lastLocation) { + getEssUser().setLastLocation(lastLocation); + } + + @Override + public @Nullable Location getLastLocation() { + return getEssUser().getLastLocation(); + } + + + } + +} 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 c012a24..3a0dff2 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 @@ -4,6 +4,7 @@ import cc.carm.plugin.moeteleport.Main; import cc.carm.plugin.moeteleport.configuration.location.DataLocation; import cc.carm.plugin.moeteleport.model.UserData; import cc.carm.plugin.moeteleport.storage.DataSerializer; +import cc.carm.plugin.moeteleport.storage.impl.FileBasedStorage; import com.google.gson.Gson; import com.google.gson.JsonElement; import com.google.gson.JsonObject; 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 d738830..a4e346d 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 @@ -4,6 +4,7 @@ import cc.carm.plugin.moeteleport.Main; import cc.carm.plugin.moeteleport.configuration.location.DataLocation; import cc.carm.plugin.moeteleport.model.UserData; import cc.carm.plugin.moeteleport.storage.DataSerializer; +import cc.carm.plugin.moeteleport.storage.impl.FileBasedStorage; import org.bukkit.configuration.file.YamlConfiguration; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; diff --git a/src/main/java/cc/carm/plugin/moeteleport/storage/file/FileBasedStorage.java b/src/main/java/cc/carm/plugin/moeteleport/storage/impl/FileBasedStorage.java similarity index 97% rename from src/main/java/cc/carm/plugin/moeteleport/storage/file/FileBasedStorage.java rename to src/main/java/cc/carm/plugin/moeteleport/storage/impl/FileBasedStorage.java index a97a5bf..1bf1e0a 100644 --- a/src/main/java/cc/carm/plugin/moeteleport/storage/file/FileBasedStorage.java +++ b/src/main/java/cc/carm/plugin/moeteleport/storage/impl/FileBasedStorage.java @@ -1,4 +1,4 @@ -package cc.carm.plugin.moeteleport.storage.file; +package cc.carm.plugin.moeteleport.storage.impl; import cc.carm.plugin.moeteleport.Main; import cc.carm.plugin.moeteleport.configuration.location.DataLocation; 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 new file mode 100644 index 0000000..f727e2c --- /dev/null +++ b/src/main/java/cc/carm/plugin/moeteleport/storage/impl/PluginBasedStorage.java @@ -0,0 +1,50 @@ +package cc.carm.plugin.moeteleport.storage.impl; + +import cc.carm.plugin.moeteleport.configuration.location.DataLocation; +import cc.carm.plugin.moeteleport.model.UserData; +import cc.carm.plugin.moeteleport.storage.DataStorage; +import org.bukkit.Bukkit; +import org.bukkit.plugin.Plugin; +import org.jetbrains.annotations.NotNull; + +import java.util.UUID; + +public abstract class PluginBasedStorage implements DataStorage { + + protected Plugin dependPlugin; + + public PluginBasedStorage(String dependPluginName) { + this.dependPlugin = Bukkit.getPluginManager().getPlugin(dependPluginName); + } + + @Override + public boolean initialize() { + return dependPlugin != null; + } + + public Plugin getDependPlugin() { + return dependPlugin; + } + + @Override + public void shutdown() { + // 一般啥也不需要我们做 + } + + @Override + public void saveUserData(@NotNull UserData data) { + // 一般都由其他插件自行保存,不需要实现。 + } + + @Override + public void setHome(@NotNull UUID uuid, @NotNull String homeName, @NotNull DataLocation homeLocation) { + // 一般都由其他插件自行保存,不需要实现。 + } + + @Override + public boolean delHome(@NotNull UUID uuid, @NotNull String homeName) { + // 一般都由其他插件自行保存,不需要实现。 + return true; + } + +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 0f0e0a3..762ec31 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,5 +1,5 @@ main: cc.carm.plugin.moeteleport.Main -name: ${project.name} +name: MoeTeleport version: ${project.version} author: CarmJos website: ${project.url} @@ -7,6 +7,7 @@ description: ${project.description} softdepend: - PlaceholderAPI + - Essentials permissions: "MoeTeleport":