好吧,我正在尝试编写一个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:真
等等。
我在世界上如何连接,我找不到任何东西。我知道这是一团糟,因为我不知道该怎么做。
答案 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)
这是您需要了解的配置文件。