Bukkit config.yml连接

时间:2013-09-02 05:18:43

标签: java bukkit

好吧,我正在尝试编写一个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是这样的:

  

用户:
    用户名:false
  userother:真

等等。

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

4 个答案:

答案 0 :(得分:3)

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

public void set(String option, Object value)

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

public Object get(String option)

和其他人获得之前设定的值。要找到您可以使用的所有方法,请在Bukkit's JavaDoc for 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

答案 1 :(得分:0)

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

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

    FileConfiguration config = plugin.getConfig();

足够简单。现在你要做的就是让插件检索配置中的值。

    config.options().copyDefaults(true);

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

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

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

    plugin.getConfig().getBoolean("username");

答案 2 :(得分:0)

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

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

public class Example {

   MyPlugin plugin;

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

}

这是最简单的方式,在我的意见中。

答案 3 :(得分:0)

一旦知道如何操作,就可以很容易地获得一个配置文件来获取引用变量。从此开始,您需要在项目的config.yml文件夹中 src。如果你不在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保存在配置文件中,以告知用户每个变量的作用。这是在创建配置文件时保存配置文件的最佳方法。如果配置已经存在,你可以放一个其他的并说它已经存在,但这不是必需的。

确保所有内容都在主类的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 将是变量内部的变量。由于这是迭代的,它将使用一个字符串key获取变量内的所有变量。要获取key变量的值,您只需要生成一个布尔/ int /字符串或其他任何内容并通过执行以下操作:

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

这是您需要了解的配置文件。