【问题标题】:Getting a variable list from a variable从变量中获取变量列表
【发布时间】:2015-05-03 01:42:26
【问题描述】:

我正在使用 Bukkit 1.8 API。我已经制作了一个配置文件来编辑代码。我在配置中有一个等级列表,我正在循环使用它

for(String ranks : plugin.getConfig().getStringList("selllallranks"))

配置中的排名列表如下所示

selllallranks:
- 'a'
- 'b'
- 'c'
- 'd'
- 'e'
- 'f'
# etc...

然后我继续检查带有块的库存,以便以可在配置中编辑的价格出售。这是我剩下的代码

for(String sellallsell : plugin.getConfig().getStringList("sellall" + ranks))
{
    if(p.getInventory().contains(Material.valueOf(sellallsell)))
    {

    }
}

我尝试将其作为字符串列表进行循环。唯一的问题是我不是循环遍历一个字符串列表,而是一个变量列表。 Bukkit API 没有这种方法。 编辑时配置文件看起来像这样

sellalla:
    cobblestone: 10
    dirt: 1
    diamond_block: 1000

这里的每个变量都代表材料名称,后面跟着它的价格。

我的问题是,将配置中的这些变量作为列表获取。在这个列表中,我想遍历它并检查它是否在玩家的库存中。在此之后,我想获得每种材料的数量,并将其乘以价格。然后我会把钱存入玩家的账户。

我唯一需要修复的是如何从 sellalla: 变量中获取变量列表。我也想从中获取整数。

【问题讨论】:

  • 题外话:Bukkit 还在吗? Bukkit 网站上没有硬性的是/否。
  • @DanPantry Spigot 还活着。
  • @DanPantry Bukkit 停止制作更新版本,并且出于某种法律原因,他们的所有下载都已被删除。如果你有 bukkit 的 jar 文件,你仍然可以使用它。
  • @JarFile 我知道它已经死了,我只是对这里使用的 API 感到困惑。

标签: java for-loop yaml bukkit


【解决方案1】:

如果要获取路径中的键列表,可以使用:

plugin.getConfig().getConfigurationSection("path").getKeys(false);

因此,例如,如果上面的代码在此配置上运行:

path:
    key0: 55
    key1: 72
    key2: 8

您将获得包含值key0key1key2List<String>。然后,要获取这些键的值,您可以简单地使用:

plugin().getConfig().get("path." + key);

getConfigurationSection(String) 选择 arg0 处的配置部分(此方法仅用于获取 API 对象)

getKeys(false) 获取上述部分中的所有键。使用false 使它只得到第一个键,而不是下一个键。例如,getKeys(true) 将返回 key0subkey0key1subkey1,而 getKeys(false) 将仅返回 key0key1

 path:
     key0:
         subkey0: 10
     key1:
         subkey1: 6

因此,您的代码可能如下所示:

for(String key : plugin.getConfig().getConfigurationSection("sellall")){
    Material material = Material.valueOf(key); //the material
    int value = plugin().getConfig().getInt("sellall." + key); //the sell price of the material

    //the rest of your code here
}

【讨论】:

  • 谢谢,但你能解释一下getConfigurationSelectiongetKeys(false)的具体方法吗?
  • .getConigurationSelection(String) 不是方法,所以我将其更改为.getConfigurationSection(String),它说我只能遍历数组或实例。这会返回一个数组吗?
  • @Jojodmo 你写了 getConfigurationSelection。它是getConfigurationSection
  • @Jojodmo 我只是在继续我的代码时注意到了这一点。在我测试之后:int value = plugin().getConfig().getInt("sellall." + key); 正在返回 0,但是在我的配置中我有它:sellalla: COBBLESTONE: 10 我已经用服务器配置检查了这个,它是一样的。
  • 如果你使用plugin().getConfig().getInt("sellall." + key);,如果你的配置有sellalla: COBBLESTONE: 10,它将无法工作。所有的名字都需要准确,所以如果你使用的是plugin().getConfig().getInt("sellalla." + key);
【解决方案2】:

我建议使用HashMap(您可以使用HashMap.getEntry() 遍历它们)

这里有一些有用的链接:

Read a HashMap from Config

Write a HashMap to Config

【讨论】:

  • 我不太明白。你能更好地解释一下吗。这些链接对我来说没有多大意义。
猜你喜欢
  • 2013-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-27
  • 1970-01-01
  • 2011-02-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多