mirror of
https://github.com/CarmJos/UltraDepository.git
synced 2026-06-04 16:48:21 +08:00
Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| af82d64ab1 | |||
| 5d057d2e8e | |||
| a427db36e9 | |||
| afd62a493d | |||
| c841a7b1b3 | |||
| dc57e822b5 | |||
| 54cc9c070b | |||
| fa07564548 |
@@ -17,18 +17,18 @@
|
||||
|
||||
## 预设配置截图
|
||||
|
||||
### 渔夫仓库 ([fishman.yml](files/fishman.yml))
|
||||
### 渔夫仓库 ([fishman.yml](../../src/main/resources/depositories/fishman.yml))
|
||||
|
||||

|
||||
|
||||
### 矿工仓库 ([miner.yml](files/miner.yml))
|
||||
### 矿工仓库 ([miner.yml](../../src/main/resources/depositories/miner.yml))
|
||||
|
||||

|
||||
|
||||
### 农夫仓库 ([farmer.yml](files/farmer.yml))
|
||||
### 农夫仓库 ([farmer.yml](../../src/main/resources/depositories/farmer.yml))
|
||||
|
||||

|
||||
|
||||
### 猎人仓库 ([hunter.yml](files/hunter.yml))
|
||||
### 猎人仓库 ([hunter.yml](../../src/main/resources/depositories/hunter.yml))
|
||||
|
||||

|
||||
@@ -32,7 +32,7 @@
|
||||
|
||||
进入仓库后的物品玩家可以选择拿出或直接按量出售,且每日的出售数量上限和每件物品的价格可以自定义。
|
||||
|
||||
插件支持针对不同的权限配置仓库的容量,由此可以制作付费享用的”农业仓库“、”战斗仓库“、”伐木仓库“...
|
||||
插件支持针对不同的权限配置仓库的容量,由此可以制作付费享用的”作物仓库“、”药剂师仓库“、”伐木仓库“...
|
||||
|
||||
综上,该插件不但提供了一种功能特权,对其合理配置之后也将大大为玩家带来便利。
|
||||
|
||||
@@ -218,7 +218,7 @@
|
||||
|
||||
文件名即仓库的ID,**强烈推荐使用纯英文**。以`.`开头的仓库配置不会被加载。部分符号可能会影响正常读取,请避免使用。
|
||||
|
||||
随本项目预设了几个常用的仓库类型,可以 [在这里](.examples/depositories) 找到您需要的仓库配置加以修改后使用。
|
||||
随本项目预设了几个常用的仓库类型,可以 [在这里](.examples/depositories) 直接下载您需要的仓库配置加以修改后使用。
|
||||
|
||||
您也可以 [点击这里](src/main/resources/depositories/.example-depository.yml) 查看一份*详细的仓库配置示例*,以制作您自己的仓库。
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<groupId>cc.carm.plugin</groupId>
|
||||
<artifactId>ultradepository</artifactId>
|
||||
<packaging>jar</packaging>
|
||||
<version>1.2.6</version>
|
||||
<version>1.3.4</version>
|
||||
|
||||
<name>UltraDepository</name>
|
||||
<description>超级仓库插件,支持设定不同物品的存储仓库。</description>
|
||||
@@ -116,6 +116,13 @@
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>cc.carm.lib</groupId>
|
||||
<artifactId>githubreleases4j</artifactId>
|
||||
<version>1.3.0</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.spigotmc</groupId>
|
||||
<artifactId>spigot-api</artifactId>
|
||||
@@ -252,10 +259,18 @@
|
||||
<pattern>org.bstats</pattern>
|
||||
<shadedPattern>cc.carm.plugin.ultradepository.lib.bstats</shadedPattern>
|
||||
</relocation>
|
||||
<relocation>
|
||||
<pattern>org.json</pattern>
|
||||
<shadedPattern>cc.carm.plugin.ultradepository.lib.json</shadedPattern>
|
||||
</relocation>
|
||||
<relocation>
|
||||
<pattern>cc.carm.lib.easyplugin</pattern>
|
||||
<shadedPattern>cc.carm.plugin.ultradepository.lib.easyplugin</shadedPattern>
|
||||
</relocation>
|
||||
<relocation>
|
||||
<pattern>cc.carm.lib.githubreleases4j</pattern>
|
||||
<shadedPattern>cc.carm.plugin.ultradepository.lib.github</shadedPattern>
|
||||
</relocation>
|
||||
</relocations>
|
||||
<filters>
|
||||
<filter>
|
||||
|
||||
@@ -7,6 +7,7 @@ import cc.carm.lib.easyplugin.utils.MessageUtils;
|
||||
import cc.carm.plugin.ultradepository.command.DepositoryCommand;
|
||||
import cc.carm.plugin.ultradepository.configuration.PluginConfig;
|
||||
import cc.carm.plugin.ultradepository.hooker.PAPIExpansion;
|
||||
import cc.carm.plugin.ultradepository.hooker.UpdateChecker;
|
||||
import cc.carm.plugin.ultradepository.listener.CollectListener;
|
||||
import cc.carm.plugin.ultradepository.listener.UserListener;
|
||||
import cc.carm.plugin.ultradepository.manager.ConfigManager;
|
||||
@@ -60,9 +61,6 @@ public class UltraDepository extends EasyPlugin {
|
||||
return false;
|
||||
}
|
||||
|
||||
log("加载用户系统...");
|
||||
userManager = new UserManager();
|
||||
|
||||
log("加载经济系统...");
|
||||
if (Bukkit.getPluginManager().getPlugin("Vault") != null) {
|
||||
economyManager = new EconomyManager();
|
||||
@@ -76,11 +74,15 @@ public class UltraDepository extends EasyPlugin {
|
||||
log("加载仓库管理器...");
|
||||
depositoryManager = new DepositoryManager();
|
||||
getDepositoryManager().loadDepositories();
|
||||
GUI.initialize(this);
|
||||
|
||||
log("加载用户系统...");
|
||||
userManager = new UserManager();
|
||||
|
||||
|
||||
log("注册监听器...");
|
||||
regListener(new UserListener());
|
||||
regListener(new CollectListener());
|
||||
GUI.initialize(this);
|
||||
|
||||
log("注册指令...");
|
||||
registerCommand("UltraDepository", new DepositoryCommand());
|
||||
@@ -107,6 +109,16 @@ public class UltraDepository extends EasyPlugin {
|
||||
else return plugin.getDescription().getVersion();
|
||||
}));
|
||||
}
|
||||
|
||||
if (PluginConfig.CHECK_UPDATE.get()) {
|
||||
log("开始检查更新...");
|
||||
UpdateChecker.checkUpdate(this);
|
||||
} else {
|
||||
log("已禁用检查更新,跳过。");
|
||||
}
|
||||
|
||||
getUserManager().loadPlayersData();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -123,6 +135,7 @@ public class UltraDepository extends EasyPlugin {
|
||||
|
||||
log("卸载监听器...");
|
||||
Bukkit.getServicesManager().unregisterAll(this);
|
||||
|
||||
}
|
||||
|
||||
public static DataStorage getStorage() {
|
||||
|
||||
@@ -21,6 +21,10 @@ public class PluginConfig {
|
||||
"metrics", Boolean.class, true
|
||||
);
|
||||
|
||||
public static final ConfigValue<Boolean> CHECK_UPDATE = new ConfigValue<>(
|
||||
"check-update", Boolean.class, true
|
||||
);
|
||||
|
||||
public static final ConfigStringCast<StorageMethod> STORAGE_METHOD = new ConfigStringCast<>(
|
||||
"storage.method", StorageMethod::read, StorageMethod.YAML
|
||||
);
|
||||
|
||||
@@ -95,4 +95,8 @@ public class PluginMessages extends MessagesRoot {
|
||||
"&f数目输入错误,请输入正确的数字!"
|
||||
);
|
||||
|
||||
public static final EasyMessage LOAD_FAILED = new EasyMessage(
|
||||
"&c您的背包数据未被正确加载,请重新进入!"
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,32 @@
|
||||
package cc.carm.plugin.ultradepository.hooker;
|
||||
|
||||
import cc.carm.lib.githubreleases4j.GithubReleases4J;
|
||||
import cc.carm.plugin.ultradepository.UltraDepository;
|
||||
|
||||
public class UpdateChecker {
|
||||
|
||||
public static void checkUpdate(UltraDepository plugin) {
|
||||
plugin.getScheduler().runAsync(() -> {
|
||||
|
||||
Integer behindVersions = GithubReleases4J.getVersionBehind(
|
||||
"CarmJos", "UltraDepository",
|
||||
plugin.getDescription().getVersion()
|
||||
);
|
||||
|
||||
if (behindVersions == null) {
|
||||
plugin.error("检查更新失败,请您定期查看插件是否更新,避免安全问题。");
|
||||
plugin.error("插件下载地址&e " + GithubReleases4J.getReleasesURL("CarmJos", "UltraDepository"));
|
||||
} else {
|
||||
if (behindVersions > 0) {
|
||||
plugin.log("检查更新完成,当前已落后 " + behindVersions + " 个版本。");
|
||||
plugin.log("最新版本下载地址&e " + GithubReleases4J.getLatestReleaseURL("CarmJos", "UltraDepository"));
|
||||
} else {
|
||||
plugin.log("检查更新完成,当前已是最新版本。");
|
||||
}
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package cc.carm.plugin.ultradepository.listener;
|
||||
|
||||
import cc.carm.plugin.ultradepository.UltraDepository;
|
||||
import cc.carm.plugin.ultradepository.configuration.PluginMessages;
|
||||
import cc.carm.plugin.ultradepository.data.UserData;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.event.EventHandler;
|
||||
@@ -19,15 +20,13 @@ public class UserListener implements Listener {
|
||||
if (event.getLoginResult() != AsyncPlayerPreLoginEvent.Result.ALLOWED) {
|
||||
return;
|
||||
}
|
||||
UUID uuid = event.getUniqueId();
|
||||
UltraDepository.getInstance().debug("尝试加载玩家 " + event.getName() + " 的数据...");
|
||||
UltraDepository.getUserManager().getDataCache().put(uuid, UltraDepository.getUserManager().loadData(uuid));
|
||||
UltraDepository.getUserManager().loadDataCache(event.getUniqueId());
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.MONITOR)
|
||||
public void onPreLoginMonitor(AsyncPlayerPreLoginEvent event) {
|
||||
if (event.getLoginResult() != AsyncPlayerPreLoginEvent.Result.ALLOWED) {
|
||||
UltraDepository.getUserManager().getDataCache().remove(event.getUniqueId());
|
||||
UltraDepository.getUserManager().removeDataCache(event.getUniqueId());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,7 +35,7 @@ public class UserListener implements Listener {
|
||||
UserData data = UltraDepository.getUserManager().getData(e.getPlayer().getUniqueId());
|
||||
if (data == null) {
|
||||
e.setResult(PlayerLoginEvent.Result.KICK_OTHER);
|
||||
e.setKickMessage(UltraDepository.getInstance().getName() + " 数据未被正确加载,请重新进入。");
|
||||
e.setKickMessage(PluginMessages.LOAD_FAILED.get(e.getPlayer()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,7 +43,8 @@ public class UserListener implements Listener {
|
||||
public void onQuit(PlayerQuitEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
UUID playerUUID = player.getUniqueId();
|
||||
UltraDepository.getInstance().getScheduler().runAsync(() -> UltraDepository.getUserManager().unloadData(playerUUID, true));
|
||||
UltraDepository.getInstance().getScheduler()
|
||||
.runAsync(() -> UltraDepository.getUserManager().unloadData(playerUUID, true));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -6,6 +6,7 @@ import cc.carm.plugin.ultradepository.configuration.PluginMessages;
|
||||
import cc.carm.plugin.ultradepository.configuration.depository.Depository;
|
||||
import cc.carm.plugin.ultradepository.configuration.depository.DepositoryItem;
|
||||
import cc.carm.plugin.ultradepository.event.DepositoryCollectItemEvent;
|
||||
import cc.carm.plugin.ultradepository.util.JarUtil;
|
||||
import com.google.common.collect.HashMultimap;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Material;
|
||||
@@ -18,6 +19,7 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@@ -45,10 +47,14 @@ public class DepositoryManager {
|
||||
File folder = new File(UltraDepository.getInstance().getDataFolder(), "depositories");
|
||||
if (!folder.exists()) {
|
||||
folder.mkdir();
|
||||
|
||||
UltraDepository.getInstance().saveResource(
|
||||
"depositories/.example-depository.yml", false
|
||||
);
|
||||
|
||||
try {
|
||||
JarUtil.copyFolderFromJar(
|
||||
"depositories", UltraDepository.getInstance().getDataFolder(),
|
||||
JarUtil.CopyOption.COPY_IF_NOT_EXIST
|
||||
);
|
||||
} catch (IOException ignore) {
|
||||
}
|
||||
|
||||
} else if (folder.isDirectory()) {
|
||||
folder.delete();
|
||||
|
||||
@@ -4,6 +4,7 @@ import cc.carm.plugin.ultradepository.UltraDepository;
|
||||
import cc.carm.plugin.ultradepository.data.UserData;
|
||||
import cc.carm.plugin.ultradepository.storage.DataStorage;
|
||||
import cc.carm.plugin.ultradepository.util.DateIntUtil;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -20,6 +21,27 @@ public class UserManager {
|
||||
return dataCache;
|
||||
}
|
||||
|
||||
public void loadPlayersData() {
|
||||
if (Bukkit.getOnlinePlayers().size() < 1) return;
|
||||
|
||||
UltraDepository.getInstance().log("加载当前在线玩家数据...");
|
||||
// 用于热加载时重载玩家数据。
|
||||
Bukkit.getOnlinePlayers().forEach(player -> loadDataCache(player.getUniqueId()));
|
||||
}
|
||||
|
||||
public @NotNull UserData loadDataCache(@NotNull UUID userUUID) {
|
||||
UserData data = loadData(userUUID);
|
||||
UltraDepository.getUserManager().getDataCache().put(userUUID, data);
|
||||
return data;
|
||||
}
|
||||
|
||||
|
||||
public boolean removeDataCache(@NotNull UUID userUUID) {
|
||||
boolean contains = getDataCache().containsKey(userUUID);
|
||||
getDataCache().remove(userUUID);
|
||||
return contains;
|
||||
}
|
||||
|
||||
public @Nullable UserData getData(@NotNull UUID userUUID) {
|
||||
return getDataCache().get(userUUID);
|
||||
}
|
||||
@@ -32,7 +54,7 @@ public class UserManager {
|
||||
try {
|
||||
long start = System.currentTimeMillis();
|
||||
DataStorage storage = UltraDepository.getStorage();
|
||||
UltraDepository.getInstance().debug("正通过 " + storage.getClass().getSimpleName() + " 加载 " + userUUID + " 的用户数据...");
|
||||
UltraDepository.getInstance().debug("正通过 " + storage.getClass().getSimpleName() + " 加载 " + userUUID + " 的用户数据...(" + System.currentTimeMillis() + ")");
|
||||
UserData data = UltraDepository.getStorage().loadData(userUUID);
|
||||
|
||||
if (data == null) {
|
||||
@@ -56,7 +78,7 @@ public class UserManager {
|
||||
UserData data = getData(uuid);
|
||||
if (data == null) return;
|
||||
if (save) saveData(data);
|
||||
dataCache.remove(uuid);
|
||||
removeDataCache(uuid);
|
||||
}
|
||||
|
||||
public void saveData(UserData data) {
|
||||
@@ -64,7 +86,7 @@ public class UserManager {
|
||||
long start = System.currentTimeMillis();
|
||||
DataStorage storage = UltraDepository.getStorage();
|
||||
|
||||
UltraDepository.getInstance().debug("正通过 " + storage.getClass().getSimpleName() + " 保存 " + data.getUserUUID() + " 的用户数据...");
|
||||
UltraDepository.getInstance().debug("正通过 " + storage.getClass().getSimpleName() + " 保存 " + data.getUserUUID() + " 的用户数据...(" + System.currentTimeMillis() + ")");
|
||||
storage.saveUserData(data);
|
||||
|
||||
UltraDepository.getInstance().debug("通过 " + storage.getClass().getSimpleName() + " 保存 " + data.getUserUUID() + " 的用户数据完成," +
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package cc.carm.plugin.ultradepository.storage;
|
||||
|
||||
import cc.carm.plugin.ultradepository.data.UserData;
|
||||
import cc.carm.plugin.ultradepository.manager.UserManager;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
@@ -8,14 +9,38 @@ import java.util.UUID;
|
||||
|
||||
public interface DataStorage {
|
||||
|
||||
|
||||
/**
|
||||
* 在插件加载存储源时执行。
|
||||
*
|
||||
* @return 是否初始化成功
|
||||
*/
|
||||
boolean initialize();
|
||||
|
||||
/**
|
||||
* 在插件被卸载时执行。
|
||||
*/
|
||||
void shutdown();
|
||||
|
||||
/**
|
||||
* 用于加载用户数据的方法。<b>该方法将会被异步运行!</b>
|
||||
* <br>该方法一般无需自行执行,见 {@link UserManager#loadData(UUID)}
|
||||
* <br>
|
||||
* <br>若不存在该用户的数据,请返回 null 。
|
||||
* <br>若加载出现任何错误,请抛出异常。
|
||||
*
|
||||
* @param uuid 用户UUID
|
||||
* @throws Exception 当出现任何错误时抛出
|
||||
*/
|
||||
@Nullable
|
||||
UserData loadData(@NotNull UUID uuid) throws Exception;
|
||||
|
||||
/**
|
||||
* 用于保存用户数据的方法。 <b>该方法将会被异步运行!</b>
|
||||
* <br>该方法一般无需自行执行,见 {@link UserManager#saveData(UserData)}
|
||||
*
|
||||
* @param data 用户数据
|
||||
* @throws Exception 当出现任何错误时抛出
|
||||
*/
|
||||
void saveUserData(@NotNull UserData data) throws Exception;
|
||||
|
||||
/**
|
||||
|
||||
@@ -11,6 +11,11 @@ debug: false
|
||||
# 当然,您也可以选择在这里关闭,或在plugins/bStats下的配置文件中关闭。
|
||||
metrics: true
|
||||
|
||||
# 检查更新设定
|
||||
# 该选项用于插件判断是否要检查更新,若您不希望插件检查更新并提示您,可以选择关闭。
|
||||
# 检查更新为异步操作,绝不会影响性能与使用体验。
|
||||
check-update: true
|
||||
|
||||
# 存储相关配置
|
||||
# 注意:存储配置不会通过重载指令生效,如有修改请重新启动服务器。
|
||||
storage:
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
import cc.carm.lib.githubreleases4j.GithubRelease;
|
||||
import cc.carm.lib.githubreleases4j.GithubReleases4J;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class ReleasesTest {
|
||||
|
||||
@Test
|
||||
public void onTest() {
|
||||
|
||||
List<GithubRelease> releases = GithubReleases4J.listReleases("CarmJos", "UltraDepository");
|
||||
|
||||
for (GithubRelease release : releases) {
|
||||
System.out.println("#" + release.getID() + " (:" + release.getTagName() + ")" + " " + release.getName());
|
||||
System.out.println("- " + release.getHTMLUrl());
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user