mirror of
https://github.com/CarmJos/MoeTeleport.git
synced 2024-09-19 21:35:56 +00:00
支持 #6 中提到的 Essential 存储
This commit is contained in:
parent
061b41b1a3
commit
848d3aaa33
13
pom.xml
13
pom.xml
@ -76,6 +76,11 @@
|
|||||||
<url>https://repo.minebench.de/</url>
|
<url>https://repo.minebench.de/</url>
|
||||||
</repository>
|
</repository>
|
||||||
|
|
||||||
|
<repository>
|
||||||
|
<id>essentials-repo</id>
|
||||||
|
<url>https://repo.essentialsx.net/releases/</url>
|
||||||
|
</repository>
|
||||||
|
|
||||||
<repository>
|
<repository>
|
||||||
<id>github</id>
|
<id>github</id>
|
||||||
<name>GitHub Packages</name>
|
<name>GitHub Packages</name>
|
||||||
@ -108,6 +113,14 @@
|
|||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>net.essentialsx</groupId>
|
||||||
|
<artifactId>EssentialsX</artifactId>
|
||||||
|
<version>2.19.2</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<artifactId>easysql-beecp</artifactId>
|
<artifactId>easysql-beecp</artifactId>
|
||||||
|
@ -97,9 +97,7 @@ public class Main extends JavaPlugin {
|
|||||||
metrics.addCustomChart(new SimplePie("storage_method", storageMethod::name));
|
metrics.addCustomChart(new SimplePie("storage_method", storageMethod::name));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
log("加载完成 ,共耗时 " + (System.currentTimeMillis() - startTime) + " ms 。");
|
log("加载完成 ,共耗时 " + (System.currentTimeMillis() - startTime) + " ms 。");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
package cc.carm.plugin.moeteleport.storage;
|
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.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.file.YAMLStorage;
|
||||||
|
import cc.carm.plugin.moeteleport.storage.custom.CustomStorage;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@ -13,16 +14,20 @@ import java.util.function.Supplier;
|
|||||||
|
|
||||||
public enum StorageMethod {
|
public enum StorageMethod {
|
||||||
|
|
||||||
CUSTOM(0, CustomStorage::new),
|
CUSTOM(0, new String[]{}, CustomStorage::new),
|
||||||
YAML(1, YAMLStorage::new),
|
YAML(1, new String[]{"yml"}, YAMLStorage::new),
|
||||||
JSON(2, JSONStorage::new),
|
JSON(2, new String[]{}, JSONStorage::new),
|
||||||
MYSQL(3, MySQLStorage::new);
|
MYSQL(3, new String[]{"my-sql", "mariadb", "sql", "database"}, MySQLStorage::new),
|
||||||
|
|
||||||
|
ESSENTIALS(11, new String[]{"essential", "ess", "EssentialsX", "essX"}, EssentialXStorage::new);
|
||||||
|
|
||||||
private final int id;
|
private final int id;
|
||||||
|
private final String[] alias;
|
||||||
private @NotNull Supplier<@NotNull DataStorage> storageSupplier;
|
private @NotNull Supplier<@NotNull DataStorage> storageSupplier;
|
||||||
|
|
||||||
StorageMethod(int id, @NotNull Supplier<@NotNull DataStorage> storageSupplier) {
|
StorageMethod(int id, String[] alias, @NotNull Supplier<@NotNull DataStorage> storageSupplier) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
|
this.alias = alias;
|
||||||
this.storageSupplier = storageSupplier;
|
this.storageSupplier = storageSupplier;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -30,6 +35,10 @@ public enum StorageMethod {
|
|||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String[] getAlias() {
|
||||||
|
return alias;
|
||||||
|
}
|
||||||
|
|
||||||
public @NotNull Supplier<@NotNull DataStorage> getStorageSupplier() {
|
public @NotNull Supplier<@NotNull DataStorage> getStorageSupplier() {
|
||||||
return storageSupplier;
|
return storageSupplier;
|
||||||
}
|
}
|
||||||
@ -45,6 +54,8 @@ public enum StorageMethod {
|
|||||||
public static @NotNull StorageMethod read(String s) {
|
public static @NotNull StorageMethod read(String s) {
|
||||||
StorageMethod byName = readByName(s);
|
StorageMethod byName = readByName(s);
|
||||||
if (byName != null) return byName;
|
if (byName != null) return byName;
|
||||||
|
StorageMethod byAlias = readByAlias(s);
|
||||||
|
if (byAlias != null) return byAlias;
|
||||||
try {
|
try {
|
||||||
return Optional.ofNullable(readByID(Integer.parseInt(s))).orElse(YAML);
|
return Optional.ofNullable(readByID(Integer.parseInt(s))).orElse(YAML);
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
@ -57,6 +68,12 @@ public enum StorageMethod {
|
|||||||
return Arrays.stream(values()).filter(value -> value.name().equalsIgnoreCase(name)).findFirst().orElse(null);
|
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) {
|
public static @Nullable StorageMethod readByID(int id) {
|
||||||
return Arrays.stream(values()).filter(value -> value.getID() == id).findFirst().orElse(null);
|
return Arrays.stream(values()).filter(value -> value.getID() == id).findFirst().orElse(null);
|
||||||
|
@ -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.Main;
|
||||||
import cc.carm.plugin.moeteleport.configuration.location.DataLocation;
|
import cc.carm.plugin.moeteleport.configuration.location.DataLocation;
|
@ -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<String, DataLocation> getHomeLocations() {
|
||||||
|
LinkedHashMap<String, DataLocation> 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();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -4,6 +4,7 @@ import cc.carm.plugin.moeteleport.Main;
|
|||||||
import cc.carm.plugin.moeteleport.configuration.location.DataLocation;
|
import cc.carm.plugin.moeteleport.configuration.location.DataLocation;
|
||||||
import cc.carm.plugin.moeteleport.model.UserData;
|
import cc.carm.plugin.moeteleport.model.UserData;
|
||||||
import cc.carm.plugin.moeteleport.storage.DataSerializer;
|
import cc.carm.plugin.moeteleport.storage.DataSerializer;
|
||||||
|
import cc.carm.plugin.moeteleport.storage.impl.FileBasedStorage;
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.JsonElement;
|
import com.google.gson.JsonElement;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
|
@ -4,6 +4,7 @@ import cc.carm.plugin.moeteleport.Main;
|
|||||||
import cc.carm.plugin.moeteleport.configuration.location.DataLocation;
|
import cc.carm.plugin.moeteleport.configuration.location.DataLocation;
|
||||||
import cc.carm.plugin.moeteleport.model.UserData;
|
import cc.carm.plugin.moeteleport.model.UserData;
|
||||||
import cc.carm.plugin.moeteleport.storage.DataSerializer;
|
import cc.carm.plugin.moeteleport.storage.DataSerializer;
|
||||||
|
import cc.carm.plugin.moeteleport.storage.impl.FileBasedStorage;
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
@ -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.Main;
|
||||||
import cc.carm.plugin.moeteleport.configuration.location.DataLocation;
|
import cc.carm.plugin.moeteleport.configuration.location.DataLocation;
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,5 +1,5 @@
|
|||||||
main: cc.carm.plugin.moeteleport.Main
|
main: cc.carm.plugin.moeteleport.Main
|
||||||
name: ${project.name}
|
name: MoeTeleport
|
||||||
version: ${project.version}
|
version: ${project.version}
|
||||||
author: CarmJos
|
author: CarmJos
|
||||||
website: ${project.url}
|
website: ${project.url}
|
||||||
@ -7,6 +7,7 @@ description: ${project.description}
|
|||||||
|
|
||||||
softdepend:
|
softdepend:
|
||||||
- PlaceholderAPI
|
- PlaceholderAPI
|
||||||
|
- Essentials
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
"MoeTeleport":
|
"MoeTeleport":
|
||||||
|
Loading…
Reference in New Issue
Block a user