diff --git a/.examples/depositories/miner.yml b/.examples/depositories/miner.yml index 4d57c9b..9e72f21 100644 --- a/.examples/depositories/miner.yml +++ b/.examples/depositories/miner.yml @@ -19,7 +19,6 @@ gui: items: "DIAMOND": - original: true #只允许无任何特殊属性的物品被收入 slot: 5 price: 10 limit: 100 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 fa1c496..c06d843 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 @@ -5,6 +5,7 @@ import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.file.FileConfiguration; import org.jetbrains.annotations.NotNull; +import java.util.HashMap; import java.util.Map; import java.util.Objects; @@ -65,19 +66,26 @@ public class Depository { } 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") + return new Depository( + identifier, configuration.getString("name"), + GUIConfiguration.readConfiguration(configuration.getConfigurationSection("gui")), + new DepositoryCapacity( + configuration.getInt("capacity.default", 0), + configuration.getStringList("capacity.permissions") + ), + readItems(configuration.getConfigurationSection("items")) ); + } - ConfigurationSection itemsSection = configuration.getConfigurationSection("items"); - if (itemsSection != null) { - + private static Map readItems(ConfigurationSection section) { + if (section == null) return new HashMap<>(); + Map items = new HashMap<>(); + for (String key : section.getKeys(false)) { + ConfigurationSection itemSection = section.getConfigurationSection(key); + if (itemSection != null) { + items.put(key, DepositoryItem.readFrom(key, itemSection)); + } } - - return null; + return items; } } diff --git a/src/main/java/cc/carm/plugin/ultradepository/configuration/depository/DepositoryItem.java b/src/main/java/cc/carm/plugin/ultradepository/configuration/depository/DepositoryItem.java index f1c625b..3e31527 100644 --- a/src/main/java/cc/carm/plugin/ultradepository/configuration/depository/DepositoryItem.java +++ b/src/main/java/cc/carm/plugin/ultradepository/configuration/depository/DepositoryItem.java @@ -1,7 +1,9 @@ package cc.carm.plugin.ultradepository.configuration.depository; +import cc.carm.plugin.ultradepository.Main; import cc.carm.plugin.ultradepository.util.ItemStackFactory; import org.bukkit.Material; +import org.bukkit.configuration.ConfigurationSection; import org.bukkit.inventory.ItemStack; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -23,7 +25,7 @@ public class DepositoryItem { @Nullable List lore; public DepositoryItem(@NotNull Material material, int data, - int slot, int price, int limit, + int slot, double price, int limit, @Nullable String name, @Nullable List lore) { this.material = material; this.data = data; @@ -35,7 +37,7 @@ public class DepositoryItem { } public @NotNull String getTypeID() { - return getMaterial().name() + (getData() != 0 ? ":" + getData() : ""); + return getMaterial().name() + ":" + getData(); } public @NotNull Material getMaterial() { @@ -89,4 +91,33 @@ public class DepositoryItem { public int hashCode() { return Objects.hash(material, data); } + + public static DepositoryItem readFrom(String typeID, ConfigurationSection section) { + try { + Material material; + int data = 0; + if (typeID.contains(":")) { + String[] args = typeID.split(":"); + material = Material.matchMaterial(args[0]); + data = Integer.parseInt(args[1]); + } else { + material = Material.matchMaterial(typeID); + } + + if (material == null) throw new NullPointerException(typeID); + return new DepositoryItem( + material, data, + section.getInt("slot", 0), + section.getDouble("price", 0), + section.getInt("limit", 0), + section.getString("name", material.name()), + section.getStringList("lore") + ); + + } catch (Exception ex) { + Main.error("没有与 " + typeID + " 匹配的物品!"); + Main.error("No match material of " + typeID + " !"); + return null; + } + } }