1
mirror of https://github.com/CarmJos/UltraDepository.git synced 2026-06-04 16:48:21 +08:00

Compare commits

..

9 Commits

Author SHA1 Message Date
carm 52df1863f4 [v1.2.1] 版本更新
- [U] 采用最新版本 EasyPlugin
- [U] 保留插件配置文件原本的注解
2022-01-06 16:21:48 +08:00
carm 4c46af55d0 [v1.2.1] 版本更新
- [U] 采用最新版本 EasyPlugin
- [U] 保留插件配置文件原本的注解
2022-01-06 16:21:29 +08:00
carm 123ae0b039 [v1.2.0] 版本更新
- `[U]` 采用最新版本 EasyPlugin
- `[U]` 令安静模式的权限默认不生效。
2022-01-06 14:22:42 +08:00
carm dd5793427a 指定只获取storageMethod的name 2022-01-06 00:15:00 +08:00
carm 6bf8e261d0 [v1.1.8] [F] 修复小数精度 2022-01-06 00:00:38 +08:00
carm fcdda893f1 [v1.1.8] [U] 添加安静模式下不收到提示。 2022-01-05 23:54:28 +08:00
carm 27ad14c7ab [v1.1.8] [U] 支持无限背包容量 2022-01-05 23:50:41 +08:00
carm b6a6502713 打包包含许可证 2022-01-05 23:05:24 +08:00
carm d8d589ba76 [v1.1.8] [F] 修复Debug模式失效的问题 2022-01-05 11:55:00 +08:00
14 changed files with 119 additions and 55 deletions
+3
View File
@@ -176,6 +176,9 @@
# UltraDepository.use
- 超级仓库的基本使用权限 (默认所有人都有)
# UltraDepository.silent
- 拥有该权限将不再接收到放入背包的提示。
# UltraDepository.Command.Sell
- 玩家使用Sell指令的权限
+2 -2
View File
@@ -9,13 +9,13 @@
<maven.compiler.target>11</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<easyplugin.version>1.1.0</easyplugin.version>
<easyplugin.version>1.1.3</easyplugin.version>
</properties>
<groupId>cc.carm.plugin</groupId>
<artifactId>ultradepository</artifactId>
<packaging>jar</packaging>
<version>1.1.7</version>
<version>1.2.1</version>
<name>UltraDepository</name>
<description>超级仓库插件,支持设定不同物品的存储仓库。</description>
@@ -36,30 +36,27 @@ public class UltraDepository extends EasyPlugin {
}
@Override
public void load() {
protected void load() {
instance = this;
log("加载配置文件...");
ConfigManager.initConfig();
GUI.initialize(this);
}
@Override
public boolean initialize() {
protected boolean initialize() {
log("初始化存储方式...");
StorageMethod storageMethod = PluginConfig.STORAGE_METHOD.get();
if (storageMethod == null) {
log("初始化存储方式失败,放弃加载");
log("加载配置文件...");
if (!ConfigManager.initialize()) {
log("初始化配置文件失败,放弃加载。");
return false;
}
storage = storageMethod.createStorage();
log("初始化存储方式...");
StorageMethod storageMethod = PluginConfig.STORAGE_METHOD.getOptional().orElse(StorageMethod.YAML);
log(" 正在使用 " + storageMethod.name() + " 进行数据存储");
storage = storageMethod.createStorage();
if (!storage.initialize()) {
error("存储初始化失败,请检查配置文件。");
error("初始化存储失败,请检查配置文件。");
storage.shutdown();
return false;
}
@@ -79,6 +76,7 @@ public class UltraDepository extends EasyPlugin {
log("加载仓库管理器...");
depositoryManager = new DepositoryManager();
getDepositoryManager().loadDepositories();
GUI.initialize(this);
log("注册监听器...");
regListener(new UserListener());
@@ -101,7 +99,7 @@ public class UltraDepository extends EasyPlugin {
"active_depositories",
() -> getDepositoryManager().getDepositories().size())
);
metrics.addCustomChart(new SimplePie("storage_method", () -> getStorage().getClass().getSimpleName()));
metrics.addCustomChart(new SimplePie("storage_method", storageMethod::name));
metrics.addCustomChart(new SimplePie("economy_enabled", () -> economyManager.isInitialized() ? "YES" : "NO"));
metrics.addCustomChart(new SimplePie("papi_version", () -> {
Plugin plugin = Bukkit.getPluginManager().getPlugin("PlaceholderAPI");
@@ -113,7 +111,7 @@ public class UltraDepository extends EasyPlugin {
}
@Override
public void shutdown() {
protected void shutdown() {
if (!isInitialized()) return;
log("保存现有用户数据...");
@@ -147,6 +145,11 @@ public class UltraDepository extends EasyPlugin {
return depositoryManager;
}
@Override
public boolean isDebugging() {
return PluginConfig.DEBUG.get();
}
@Override
public void outputInfo() {
log(" ",
@@ -1,13 +1,14 @@
package cc.carm.plugin.ultradepository.configuration;
import cc.carm.lib.easyplugin.configuration.cast.ConfigStringCast;
import cc.carm.lib.easyplugin.configuration.impl.ConfigSound;
import cc.carm.lib.easyplugin.configuration.impl.ConfigStringCast;
import cc.carm.lib.easyplugin.configuration.message.ConfigMessage;
import cc.carm.lib.easyplugin.configuration.message.ConfigMessageList;
import cc.carm.lib.easyplugin.configuration.values.ConfigValue;
import cc.carm.plugin.ultradepository.manager.ConfigManager;
import cc.carm.plugin.ultradepository.storage.StorageMethod;
import org.bukkit.Material;
import org.bukkit.Sound;
public class PluginConfig {
@@ -44,7 +45,7 @@ public class PluginConfig {
public static class Sounds {
public static final ConfigSound COLLECT = new ConfigSound("sounds.collect");
public static final ConfigSound COLLECT = new ConfigSound("sounds.collect", Sound.ENTITY_VILLAGER_CELEBRATE);
public static final ConfigSound SELL_SUCCESS = new ConfigSound("sounds.sell-success");
public static final ConfigSound SELL_FAIL = new ConfigSound("sounds.sell-fail");
public static final ConfigSound GUI_CLICK = new ConfigSound("sounds.gui-click");
@@ -42,10 +42,21 @@ public class DepositoryCapacity {
}
public int getPlayerCapacity(Player player) {
return getPermissions().entrySet().stream()
.filter(entry -> player.hasPermission(entry.getKey()))
.mapToInt(Map.Entry::getValue)
.max().orElse(defaultCapacity);
if (defaultCapacity == -1) return -1;
int capacity = defaultCapacity;
for (Map.Entry<String, Integer> entry : getPermissions().entrySet()) {
if (player.hasPermission(entry.getKey())) {
int value = entry.getValue();
if (value == -1) {
return -1;
} else if (value > capacity) {
capacity = value;
}
}
}
return capacity;
}
}
@@ -19,7 +19,7 @@ public class PAPIExpansion extends PlaceholderExpansion {
"%UltraDepository_amount_<BackpackID>_<ItemTypeID>%",
"%UltraDepository_sold_<BackpackID>_<ItemTypeID>%",
"%UltraDepository_price_<BackpackID>_<ItemTypeID>%",
"%UltraDepository_reUltraDepository_<BackpackID>_<ItemTypeID>%",
"%UltraDepository_remain_<BackpackID>_<ItemTypeID>%",
"%UltraDepository_capacity_<BackpackID>%",
"%UltraDepository_used_<BackpackID>%",
"%UltraDepository_usable_<BackpackID>%"
@@ -80,7 +80,7 @@ public class PAPIExpansion extends PlaceholderExpansion {
if (sold == null) return "Depository or Item not exists";
else return sold.toString();
}
case "reUltraDepository": {
case "remain": {
if (args.length < 2) return "Error Params";
Depository depository = UltraDepository.getDepositoryManager().getDepository(args[1]);
if (depository == null) return "Depository not exists";
@@ -106,7 +106,8 @@ public class PAPIExpansion extends PlaceholderExpansion {
if (args.length < 2) return "Error Params";
Depository depository = UltraDepository.getDepositoryManager().getDepository(args[1]);
if (depository == null) return "Depository not exists";
return Integer.toString(depository.getCapacity().getPlayerCapacity(player));
int capacity = depository.getCapacity().getPlayerCapacity(player);
return capacity < 0 ? "" : Integer.toString(capacity);
}
case "used": {
if (args.length < 2) return "Error Params";
@@ -118,8 +119,9 @@ public class PAPIExpansion extends PlaceholderExpansion {
if (args.length < 2) return "Error Params";
Depository depository = UltraDepository.getDepositoryManager().getDepository(args[1]);
if (depository == null) return "Depository not exists";
int max = depository.getCapacity().getPlayerCapacity(player);
int used = data.getDepositoryData(depository).getUsedCapacity();
return Integer.toString(depository.getCapacity().getPlayerCapacity(player) - used);
return max < 0 ? "" : Integer.toString(max - used);
}
case "version": {
return getVersion();
@@ -9,12 +9,17 @@ public class ConfigManager {
private static FileConfig pluginConfiguration;
private static FileConfig messageConfiguration;
public static void initConfig() {
pluginConfiguration = new FileConfig(UltraDepository.getInstance(), "config.yml");
messageConfiguration = new FileConfig(UltraDepository.getInstance(), "messages.yml");
public static boolean initialize() {
try {
pluginConfiguration = new FileConfig(UltraDepository.getInstance(), "config.yml");
messageConfiguration = new FileConfig(UltraDepository.getInstance(), "messages.yml");
FileConfig.pluginConfiguration = () -> pluginConfiguration;
FileConfig.messageConfiguration = () -> messageConfiguration;
FileConfig.pluginConfiguration = () -> pluginConfiguration;
FileConfig.messageConfiguration = () -> messageConfiguration;
return true;
} catch (Exception ex) {
return false;
}
}
public static FileConfig getPluginConfig() {
@@ -26,13 +31,21 @@ public class ConfigManager {
}
public static void reload() {
getPluginConfig().reload();
getMessageConfig().reload();
try {
getPluginConfig().reload();
getMessageConfig().reload();
} catch (Exception ex) {
ex.printStackTrace();
}
}
public static void saveConfig() {
getPluginConfig().save();
getMessageConfig().save();
try {
getPluginConfig().save();
getMessageConfig().save();
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
@@ -115,7 +115,7 @@ public class DepositoryManager {
return getItemDepositories(itemStack).stream().filter(configuration -> {
int used = UltraDepository.getUserManager().getData(player).getDepositoryData(configuration).getUsedCapacity();
int max = configuration.getCapacity().getPlayerCapacity(player);
return used + itemStack.getAmount() <= max;
return max < 0 || used + itemStack.getAmount() <= max;
}).collect(Collectors.toSet());
}
@@ -165,11 +165,13 @@ public class DepositoryManager {
int finalAmount = collectItemEvent.getItemAmount();
collectItemEvent.getUserData().addItemAmount(depository.getIdentifier(), typeID, finalAmount);
PluginMessages.COLLECTED.send(player, new Object[]{
depository.getItems().get(typeID).getName(),
finalAmount, depository.getName()
});
PluginConfig.Sounds.COLLECT.play(player);
if (!player.hasPermission("UltraDepository.silent")) {
PluginMessages.COLLECTED.send(player, new Object[]{
depository.getItems().get(typeID).getName(),
finalAmount, depository.getName()
});
PluginConfig.Sounds.COLLECT.play(player);
}
UltraDepository.getInstance().debug("Item collected successfully.");
return true;
}
@@ -12,6 +12,9 @@ import cc.carm.plugin.ultradepository.hooker.VaultHooker;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class EconomyManager {
VaultHooker hooker;
@@ -35,9 +38,9 @@ public class EconomyManager {
public double sell(Player player, double price, int amount) {
if (!isInitialized()) return 0D;
double money = price * amount;
getHooker().addMoney(player, money);
return money;
BigDecimal money = BigDecimal.valueOf(price * amount).setScale(2, RoundingMode.DOWN);
getHooker().addMoney(player, money.doubleValue());
return money.doubleValue();
}
public void sellAllItem(Player player, UserData userData) {
@@ -7,7 +7,6 @@ import cc.carm.lib.easyplugin.database.api.SQLManager;
import cc.carm.lib.easyplugin.database.api.action.query.PreparedQueryAction;
import cc.carm.lib.easyplugin.database.api.action.query.SQLQuery;
import cc.carm.plugin.ultradepository.UltraDepository;
import cc.carm.plugin.ultradepository.configuration.PluginConfig;
import cc.carm.plugin.ultradepository.configuration.depository.Depository;
import cc.carm.plugin.ultradepository.data.DepositoryData;
import cc.carm.plugin.ultradepository.data.UserData;
@@ -62,7 +61,7 @@ public class MySQLStorage extends JSONStorage {
try {
UltraDepository.getInstance().log(" 尝试连接到数据库...");
this.sqlManager = EasySQL.createManager(DRIVER_NAME.get(), URL.get(), USERNAME.get(), PASSWORD.get());
this.sqlManager.setDebugMode(PluginConfig.DEBUG.get());
this.sqlManager.setDebugMode(UltraDepository.getInstance().isDebugging());
} catch (Exception exception) {
UltraDepository.getInstance().error("无法连接到数据库,请检查配置文件。");
UltraDepository.getInstance().error("Could not connect to the database, please check the configuration.");
@@ -42,12 +42,12 @@ public class DepositoryGUI extends GUI {
private GUIItem createGUIItem(DepositoryItem item) {
DepositoryItemData itemData = userData.getItemData(item);
int remain = item.getLimit() - itemData.getSold();
int canSell = item.getLimit() - itemData.getSold();
ItemStackFactory factory = new ItemStackFactory(item.getDisplayItem());
List<String> additionalLore = PluginConfig.General.ADDITIONAL_LORE.get(player, new Object[]{
item.getName(), itemData.getAmount(), item.getPrice(),
itemData.getSold(), remain, item.getLimit()
itemData.getSold(), canSell, item.getLimit()
});
additionalLore.forEach(factory::addLore);
@@ -65,10 +65,12 @@ public class DepositoryGUI extends GUI {
}
if (type == ClickType.LEFT) {
if (remain >= 1) {
if (canSell >= 1) {
SellItemGUI.open(player, userData, itemData, depository, item);
} else {
PluginMessages.ITEM_SOLD_LIMIT.send(player, new Object[]{remain, item.getLimit()});
PluginConfig.Sounds.SELL_FAIL.play(player);
PluginMessages.ITEM_SOLD_LIMIT.send(player, new Object[]{canSell, item.getLimit()});
player.closeInventory();
}
} else if (type == ClickType.RIGHT) {
@@ -11,6 +11,7 @@ import cc.carm.plugin.ultradepository.configuration.depository.Depository;
import cc.carm.plugin.ultradepository.configuration.depository.DepositoryItem;
import cc.carm.plugin.ultradepository.data.DepositoryItemData;
import cc.carm.plugin.ultradepository.data.UserData;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.inventory.ClickType;
import org.bukkit.inventory.ItemStack;
@@ -73,7 +74,7 @@ public class SellItemGUI extends GUI {
}
private GUIItem getAddItem(int amount) {
ItemStackFactory factory = new ItemStackFactory(Add.TYPE.get());
ItemStackFactory factory = new ItemStackFactory(Add.TYPE.getOptional().orElse(Material.STONE));
factory.setDurability(Add.DATA.get());
factory.setDisplayName(Add.NAME.get(player, new Object[]{
getItemName(), amount
@@ -93,7 +94,7 @@ public class SellItemGUI extends GUI {
}
private GUIItem getRemoveItem(int amount) {
ItemStackFactory factory = new ItemStackFactory(Remove.TYPE.get());
ItemStackFactory factory = new ItemStackFactory(Remove.TYPE.getOptional().orElse(Material.STONE));
factory.setDurability(Remove.DATA.get());
factory.setDisplayName(Remove.NAME.get(player, new Object[]{
getItemName(), amount
@@ -112,7 +113,7 @@ public class SellItemGUI extends GUI {
}
private GUIItem getConfirmItem() {
ItemStackFactory factory = new ItemStackFactory(Confirm.TYPE.get());
ItemStackFactory factory = new ItemStackFactory(Confirm.TYPE.getOptional().orElse(Material.STONE));
factory.setDurability(Confirm.DATA.get());
factory.setDisplayName(Confirm.NAME.get(player, new Object[]{
getItemName(), getCurrentAmount(), getTotalMoney()
@@ -131,7 +132,7 @@ public class SellItemGUI extends GUI {
}
private GUIItem getCancelItem() {
ItemStackFactory factory = new ItemStackFactory(Cancel.TYPE.get());
ItemStackFactory factory = new ItemStackFactory(Cancel.TYPE.getOptional().orElse(Material.STONE));
factory.setDurability(Cancel.DATA.get());
factory.setDisplayName(Cancel.NAME.get());
factory.setLore(Cancel.LORE.get());
+4
View File
@@ -30,6 +30,10 @@ permissions:
description: "超级仓库的基本使用权限"
default: true
"UltraDepository.silent":
description: "超级仓库的安静模式权限,拥有该权限将不再接收到放入背包的提示。"
default: false
"UltraDepository.auto":
description: "超级仓库的自动收集权限"
default: op
+20
View File
@@ -0,0 +1,20 @@
import org.junit.Test;
import java.math.BigDecimal;
import java.math.RoundingMode;
public class MoneyTest {
@Test
public void test() {
System.out.println(get(1.2, 100));
System.out.println(get(0.55, 10));
System.out.println(get(0.21, 5));
}
public double get(double price, int amount) {
BigDecimal money = BigDecimal.valueOf(price * amount).setScale(2, RoundingMode.DOWN);
return money.doubleValue();
}
}