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":