From 3ca791a7317cecac4ca9659675bd80f315afcda3 Mon Sep 17 00:00:00 2001 From: CarmJos Date: Tue, 28 Dec 2021 22:48:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dmaven=E6=9E=84=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .examples/depositories/miner.yml | 1 + .github/workflows/javadoc.yml | 6 +- .github/workflows/maven.yml | 2 +- README.md | 7 ++ .../configuration/depository/Depository.java | 19 ++++++ .../configuration/gui/GUIConfiguration.java | 68 +++++++++++++++++++ .../manager/ConfigManager.java | 56 --------------- .../manager/DepositoryManager.java | 33 +++++++++ src/test/java/ActionReadTest.java | 4 +- 9 files changed, 134 insertions(+), 62 deletions(-) diff --git a/.examples/depositories/miner.yml b/.examples/depositories/miner.yml index d68cdea..4d57c9b 100644 --- a/.examples/depositories/miner.yml +++ b/.examples/depositories/miner.yml @@ -22,4 +22,5 @@ items: original: true #只允许无任何特殊属性的物品被收入 slot: 5 price: 10 + limit: 100 name: "&b&l钻石" \ No newline at end of file diff --git a/.github/workflows/javadoc.yml b/.github/workflows/javadoc.yml index 6062330..310b412 100644 --- a/.github/workflows/javadoc.yml +++ b/.github/workflows/javadoc.yml @@ -30,14 +30,14 @@ jobs: run: | rm -rf docs mkdir -vp docs - cp -vrf ultrabackpack-api/target/apidocs/* docs/ + cp -vrf target/apidocs/* docs/ cp -vrf .documentation/JAVADOC-README.md docs/README.md - name: Generate the sitemap id: sitemap uses: cicirello/generate-sitemap@v1 with: - base-url-path: https://carmjos.github.io/UltraBackpack + base-url-path: https://carmjos.github.io/UltraDepository path-to-root: docs - name: Output stats @@ -62,7 +62,7 @@ jobs: run: | cd docs git init - git remote add origin git@github.com:CarmJos/UltraBackpack.git + git remote add origin git@github.com:CarmJos/UltraDepository.git git checkout -b gh-pages git add -A git commit -m "API Document generated." diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index c603c1b..4fa8f07 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -30,7 +30,7 @@ jobs: MAVEN_USERNAME: ${{ github.repository_owner }} MAVEN_TOKEN: ${{secrets.GITHUB_TOKEN}} - name: "Target Stage" - run: mkdir staging && cp */target/*.jar staging + run: mkdir staging && cp target/*.jar staging - name: "Upload artifact" uses: actions/upload-artifact@v2 with: diff --git a/README.md b/README.md index b086f7a..3fc3b95 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,13 @@ ## 特殊优势 +- 详细的变量与指令! +- 支持多种存储方式! +- 可自定义程度高,配置任何想要的仓库! +- 仓库容量权限配置,可给予特殊用户更大的仓库容量! +- 仓库自动收集物品,提供API操作玩家数据! +- ... + ## 插件指令 指令主指令为 /UltraDepository (/ud | /Depository) diff --git a/src/main/java/cc/carm/plugin/ultradepository/configuration/depository/Depository.java b/src/main/java/cc/carm/plugin/ultradepository/configuration/depository/Depository.java index c85779d..fa1c496 100644 --- a/src/main/java/cc/carm/plugin/ultradepository/configuration/depository/Depository.java +++ b/src/main/java/cc/carm/plugin/ultradepository/configuration/depository/Depository.java @@ -1,6 +1,8 @@ package cc.carm.plugin.ultradepository.configuration.depository; import cc.carm.plugin.ultradepository.configuration.gui.GUIConfiguration; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.file.FileConfiguration; import org.jetbrains.annotations.NotNull; import java.util.Map; @@ -61,4 +63,21 @@ public class Depository { public int hashCode() { return Objects.hash(identifier); } + + public static Depository loadFrom(String identifier, FileConfiguration configuration) { + String name = configuration.getString("name"); + + GUIConfiguration guiConfiguration = GUIConfiguration.readConfiguration(configuration.getConfigurationSection("gui")); + DepositoryCapacity capacity = new DepositoryCapacity( + configuration.getInt("capacity.default", 0), + configuration.getStringList("capacity.permissions") + ); + + ConfigurationSection itemsSection = configuration.getConfigurationSection("items"); + if (itemsSection != null) { + + } + + return null; + } } diff --git a/src/main/java/cc/carm/plugin/ultradepository/configuration/gui/GUIConfiguration.java b/src/main/java/cc/carm/plugin/ultradepository/configuration/gui/GUIConfiguration.java index 1afc929..bbb8e55 100644 --- a/src/main/java/cc/carm/plugin/ultradepository/configuration/gui/GUIConfiguration.java +++ b/src/main/java/cc/carm/plugin/ultradepository/configuration/gui/GUIConfiguration.java @@ -4,7 +4,15 @@ import cc.carm.plugin.ultradepository.util.ColorParser; import cc.carm.plugin.ultradepository.util.gui.GUI; import cc.carm.plugin.ultradepository.util.gui.GUIItem; import cc.carm.plugin.ultradepository.util.gui.GUIType; +import com.google.common.collect.ArrayListMultimap; import com.google.common.collect.Multimap; +import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.event.inventory.ClickType; +import org.bukkit.inventory.ItemStack; +import org.jetbrains.annotations.Nullable; + +import java.util.*; public class GUIConfiguration { @@ -52,4 +60,64 @@ public class GUIConfiguration { getGuiItems().forEach((gui::setItem)); } + + public static GUIConfiguration readConfiguration(@Nullable ConfigurationSection section) { + if (section == null) { + return new GUIConfiguration("name", 6, ArrayListMultimap.create()); + } + String title = section.getString("title", ""); + int lines = section.getInt("lines", 6); + Multimap guiItemMap = ArrayListMultimap.create(); + ConfigurationSection itemsSection = section.getConfigurationSection("items"); + if (itemsSection != null) { + itemsSection.getKeys(false).stream() + .map(key -> readItem(itemsSection.getConfigurationSection(key))) + .filter(Objects::nonNull) + .forEach(entry -> guiItemMap.putAll(entry.getKey(), entry.getValue())); + + } + return new GUIConfiguration(title, lines, guiItemMap); + } + + @Nullable + private static AbstractMap.SimpleEntry> readItem(@Nullable ConfigurationSection itemSection) { + if (itemSection == null) return null; + ItemStack icon = itemSection.getItemStack("icon", new ItemStack(Material.STONE)); + List slots = itemSection.getIntegerList("slots"); + int slot = itemSection.getInt("slot", 0); + + List actionsString = itemSection.getStringList("actions"); + List actions = new ArrayList<>(); + for (String actionString : actionsString) { + int prefixStart = actionString.indexOf("["); + int prefixEnd = actionString.indexOf("]"); + if (prefixStart < 0 || prefixEnd < 0) continue; + + String prefix = actionString.substring(prefixStart + 1, prefixEnd); + ClickType clickType = null; + GUIActionType actionType; + if (prefix.contains(":")) { + String[] args = prefix.split(":"); + clickType = readClickType(args[0]); + actionType = GUIActionType.readActionType(args[1]); + } else { + actionType = GUIActionType.readActionType(prefix); + } + + if (actionType == null) continue; + actions.add(new GUIActionConfiguration(clickType, actionType, actionString.substring(prefixEnd + 1).trim())); + } + GUIItem item = new GUIItem(icon); + actions.stream().map(GUIActionConfiguration::toClickAction).forEach(item::addClickAction); + + return new AbstractMap.SimpleEntry<>(item, slots.size() > 0 ? slots : Collections.singletonList(slot)); + } + + + public static ClickType readClickType(String type) { + return Arrays.stream(ClickType.values()) + .filter(click -> click.name().equalsIgnoreCase(type)) + .findFirst().orElse(null); + } + } diff --git a/src/main/java/cc/carm/plugin/ultradepository/manager/ConfigManager.java b/src/main/java/cc/carm/plugin/ultradepository/manager/ConfigManager.java index 67ae7b4..d619bd0 100644 --- a/src/main/java/cc/carm/plugin/ultradepository/manager/ConfigManager.java +++ b/src/main/java/cc/carm/plugin/ultradepository/manager/ConfigManager.java @@ -45,60 +45,4 @@ public class ConfigManager { getMessageConfig().save(); } - public static GUIConfiguration readConfiguration(ConfigurationSection section) { - String title = section.getString("title", ""); - int liens = section.getInt("lines", 6); - Multimap guiItemMap = ArrayListMultimap.create(); - ConfigurationSection itemsSection = section.getConfigurationSection("items"); - if (itemsSection != null) { - itemsSection.getKeys(false).stream() - .map(key -> readItem(itemsSection.getConfigurationSection(key))) - .filter(Objects::nonNull) - .forEach(entry -> guiItemMap.putAll(entry.getKey(), entry.getValue())); - - } - return new GUIConfiguration(title, liens, guiItemMap); - } - - @Nullable - private static AbstractMap.SimpleEntry> readItem(@Nullable ConfigurationSection itemSection) { - if (itemSection == null) return null; - ItemStack icon = itemSection.getItemStack("icon", new ItemStack(Material.STONE)); - List slots = itemSection.getIntegerList("slots"); - int slot = itemSection.getInt("slot", 0); - - List actionsString = itemSection.getStringList("actions"); - List actions = new ArrayList<>(); - for (String actionString : actionsString) { - int prefixStart = actionString.indexOf("["); - int prefixEnd = actionString.indexOf("]"); - if (prefixStart < 0 || prefixEnd < 0) continue; - - String prefix = actionString.substring(prefixStart + 1, prefixEnd); - ClickType clickType = null; - GUIActionType actionType; - if (prefix.contains(":")) { - String[] args = prefix.split(":"); - clickType = readClickType(args[0]); - actionType = GUIActionType.readActionType(args[1]); - } else { - actionType = GUIActionType.readActionType(prefix); - } - - if (actionType == null) continue; - actions.add(new GUIActionConfiguration(clickType, actionType, actionString.substring(prefixEnd + 1).trim())); - } - GUIItem item = new GUIItem(icon); - actions.stream().map(GUIActionConfiguration::toClickAction).forEach(item::addClickAction); - - return new AbstractMap.SimpleEntry<>(item, slots.size() > 0 ? slots : Collections.singletonList(slot)); - } - - public static ClickType readClickType(String type) { - return Arrays.stream(ClickType.values()) - .filter(click -> click.name().equalsIgnoreCase(type)) - .findFirst().orElse(null); - } - - } diff --git a/src/main/java/cc/carm/plugin/ultradepository/manager/DepositoryManager.java b/src/main/java/cc/carm/plugin/ultradepository/manager/DepositoryManager.java index 7b0a92a..de31899 100644 --- a/src/main/java/cc/carm/plugin/ultradepository/manager/DepositoryManager.java +++ b/src/main/java/cc/carm/plugin/ultradepository/manager/DepositoryManager.java @@ -1,20 +1,25 @@ package cc.carm.plugin.ultradepository.manager; import cc.carm.plugin.ultradepository.Main; +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.data.UserData; import com.google.common.collect.HashMultimap; import org.bukkit.Material; +import org.bukkit.configuration.file.FileConfiguration; +import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.entity.Player; import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.meta.ItemMeta; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.io.File; import java.util.*; import java.util.stream.Collectors; +@SuppressWarnings("ResultOfMethodCallIgnored") public class DepositoryManager { /** @@ -32,6 +37,32 @@ public class DepositoryManager { this.itemMap = HashMultimap.create(); } + public void loadDepositories() { + File folder = new File(Main.getInstance().getDataFolder(), "depositories"); + if (!folder.exists()) { + folder.mkdir(); + } else if (folder.isDirectory()) { + folder.delete(); + folder.mkdir(); + } + + File[] files = folder.listFiles(); + if (files == null) return; + + HashMap<@NotNull String, @NotNull Depository> data = new HashMap<>(); + for (File file : files) { + String fileName = file.getName(); + if (!file.isFile() || !fileName.toLowerCase().endsWith(".yml")) continue; + String identifier = fileName.substring(0, fileName.lastIndexOf(".")); + FileConfiguration configuration = YamlConfiguration.loadConfiguration(file); + Depository depository = Depository.loadFrom(identifier, configuration); + if (depository != null) { + data.put(identifier, depository); + } + } + this.depositories = data; + } + public @NotNull HashMap<@NotNull String, @NotNull Depository> getDepositories() { return depositories; } @@ -99,9 +130,11 @@ public class DepositoryManager { Depository depository = usableDepositories.stream().findFirst().orElse(null); String typeID = getItemTypeID(item); + String itemName = depository.getItems().get(typeID).getName(); UserData data = Main.getUserManager().getData(player); int itemAmount = item.getAmount(); data.addItemAmount(depository.getIdentifier(), typeID, itemAmount); + PluginMessages.COLLECTED.send(player, new Object[]{itemName, itemAmount, depository.getName()}); return true; } diff --git a/src/test/java/ActionReadTest.java b/src/test/java/ActionReadTest.java index 63bb54d..6a40ee1 100644 --- a/src/test/java/ActionReadTest.java +++ b/src/test/java/ActionReadTest.java @@ -1,5 +1,5 @@ import cc.carm.plugin.ultradepository.configuration.gui.GUIActionType; -import cc.carm.plugin.ultradepository.manager.ConfigManager; +import cc.carm.plugin.ultradepository.configuration.gui.GUIConfiguration; import org.bukkit.event.inventory.ClickType; import org.junit.Test; @@ -29,7 +29,7 @@ public class ActionReadTest { GUIActionType actionType; if (prefix.contains(":")) { String[] args = prefix.split(":"); - clickType = ConfigManager.readClickType(args[0]); + clickType = GUIConfiguration.readClickType(args[0]); actionType = GUIActionType.readActionType(args[1]); } else { actionType = GUIActionType.readActionType(prefix);