1
mirror of https://github.com/CarmJos/MoeTeleport.git synced 2024-09-19 21:35:56 +00:00

支持 #6 中提到的 Essential 存储

This commit is contained in:
Carm Jos 2022-02-25 05:10:16 +08:00
parent 061b41b1a3
commit 848d3aaa33
10 changed files with 212 additions and 45 deletions

13
pom.xml
View File

@ -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>

View File

@ -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

View File

@ -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);

View File

@ -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;

View File

@ -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();
}
}
}

View File

@ -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;

View File

@ -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;

View File

@ -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;

View File

@ -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;
}
}

View File

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