0

好吧,我正在尝试编写一个 bukkit 插件,我需要从配置文件中获取值,我已经查看了教程 http://wiki.bukkit.org/Configuration_API_Reference#The_Configuration_Object但这没有给我任何帮助。

所以我的 connect.java 代码是这样的:

package com.live.AlioGenerica.netherflight;

import java.util.Set;

import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;

public class users {
    this.getConfig().options().copyDefaults(true);

    public static Boolean getValue(Player p) {
        this.getConfig().getBoolean(p);
        return true;
    }

    public static Object setValue(Player p, Boolean v) {
        conval.myConfig().set("users." + p + ".boolean", v);
        return true;
    }
}

config.yml 是这样的:

用户:
用户名:假用户
其他:真

等等。

我到底如何连接,我找不到任何东西。我知道这是一团糟,因为我不知道该怎么做。

4

4 回答 4

3

我自己创建了 Bukkit 插件。它YamlConfiguration非常易于使用。您可以使用该方法

public void set(String option, Object value)

将某个配置选项 ( option) 设置为指定值 ( value) 和

public Object get(String option)

和其他人获得先前设定的值。要查找您可以使用的所有方法,请在Bukkit 的 JavaDoc 中查找YamlConfiguration.

如果你想保存你的YamlConfiguration,使用

public void save(File f) throws IOException

除此之外,您应该进行编码。这是您的代码的改进版本,就像现在一样。

package com.live.AlioGenerica.netherflight;

import java.io.IOException;

import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;

public class Users {
  private static YamlConfiguration config = null;
  // some code

  // this method has to be static if you want to use it
  // in another static method
  public static YamlConfiguration getConfig() {
    // load the configuration if it hasn't been loaded yet
    if(config == null) {
      config = YamlConfiguration.loadConfiguration("path/to/config.yml");
    }
    // some code
    return config;
  }

  // this will return the boolean you want to get
  public static Boolean getValue(Player p) {
    return getConfig().getBoolean("users."+p.getName());
  }

  // use this code to set the value
  public static void setValue(Player p, Boolean value) {
    getConfig().set("users."+p.getName(), value);
  }

  // save the configuration
  public static void save() {
    try{
      config.save(new File("path/to/config.yml"));
    }catch(IOException e){
      e.printStackTrace();
    }
  }
}

如果还有任何问题,请告诉我。

@EDIT:刚刚意识到您想为播放器保存一个布尔值,以便在配置中看起来像这样。

users:
  player: true
  anotherplayer: false
  andsoon: false
于 2013-09-20T11:44:51.553 回答
0

只能从扩展 JavaPlugin 的主类中使用 this.getConfig()。

如果您执行以下操作,则可以使用 getConfig() 和内置的方法:

public class Example {

   MyPlugin plugin;

   public String getSomethingFromConfig() {
      return plugin.getConfig().getString("path");
   }

}

这是最简单的方法,在我看来。

于 2013-10-27T20:45:16.590 回答
0

好的,所以要处理配置,您要做的第一件事就是实际上有一个配置并将其放在正确的位置。看起来你有一个配置,所以你只需要确保它位于插件的资源部分。在你这样做之后,你就可以开始在你的代码中处理它了。

首先,您要实际获取配置。您可以使用此代码执行此操作。

    FileConfiguration config = plugin.getConfig();

很简单。现在您要做的是使插件能够检索配置中的值。

    config.options().copyDefaults(true);

最后,您只需检查配置是否已保存在插件的数据文件夹中。

    if (!(new File(plugin.getDataFolder() + config.getName()).exists())) {
        plugin.saveDefaultConfig();
    }

完成所有这些操作后,您可以使用以下命令检索配置的实际值:

    plugin.getConfig().getBoolean("username");
于 2013-09-02T21:43:12.907 回答
0

一旦您知道如何使用配置文件来获取引用变量,就很容易做到。从这里开始,您实际上需要config.ymlsrc项目的文件夹中有一个。如果您不在 Eclipse 中,我建议您切换到它以更轻松地执行此操作。只需创建一个名为 config.yml 的文件。你可以把你的变量放在这里,我看到你已经做过了。

在此之后,您需要在服务器启动时创建配置文件。

您需要从主类调用 onEnabled 方法的方法。您也可以从其他类中提取该getConfig()方法,我将在下面向您展示。

由于每次控制台启用它都会执行此方法,您将需要一个try/catch操作:

try 
{

} 
catch (Exception e) 
{
    e.printStackTrace();
}

问题是,如果出现问题,它会将 stackTrace 打印到控制台。在里面try你将创建config.yml. 为此,您需要在以下文件中创建一个文件变量try

File config = new File(getDataFolder(), "config.yml");

在进行配置之前,必须有一个数据文件夹用于存储配置。要创建此数据文件夹,您需要首先查看它是否存在:

if(!getDataFolder().exists())
{
    getDataFolder().mkdirs();
}

创建数据文件夹后,您需要检查 config.yml 是否已经存在,如果没有则创建它。

if(!config.exists())
{
    getLogger().info("Config.yml not found, Creating");
    saveDefaultConfig();
}

拥有该saveDefaultConfig();方法将确保将您保存#notes在配置文件中,以告诉用户每个变量的作用。这是在创建配置文件时保存配置文件的最佳方式。如果配置已经存在,您可以放置​​一个 else 并说它已经存在,但这不是必需的。

onEnable()确保所有这些都在您的主类的方法中调用的方法中。现在您的配置已创建,您可以使用该方法轻松地从主类中获取变量getConfig()

您也可以从其他课程中执行此操作,我将很快告诉您如何操作。你可以通过做和过去从配置中获取任何变量,getConfig().get ...你可以得到很多东西,比如strings, integers, booleans, etc...它会给你一个字符串来从中找到变量。这将是配置中的变量名称。

要使用getConfig()其他类的方法,您需要使用构造函数。您需要从主类调用一个实例来执行此操作。在你的其他类中创建一个这样的构造函数:

[MainClassName] plugin;

public [OtherClassName]([MainClassName] instance)
{
    plugin = instance;
}

plugin变量将是您在主类中的实例。您现在可以使用plugin.getConfig()获取配置。

但是,当您注册事件/命令时,您将需要匹配此构造函数。只需this在注册事件/命令时匹配构造函数。

我还注意到变量中有变量。要获取变量内部的变量,您需要获取一个配置部分:

for(String key : instance#getConfig().getConfigurationSection([config path]).getKeys(false))

String将是变量内部的变量。由于这是迭代,它将使用一个 string 获取变量内部的所有变量key。要获取key变量的值,您只需创建一个 boolean/int/string 或内部的任何内容,然后通过执行以下操作来获取它:

[String/boolean/int/etc...] value = instance#getConfig().get[Int/String/Boolean/etc...]([first config path]+"."+key)

这就是您需要了解的有关配置文件的全部内容。

于 2015-05-16T23:37:35.107 回答