七空幻音LOGO

七空幻音

Bukkit插件制作04-Config配置文件2016-04-18 17:53:30

在Bukkit插件的制作中都会储存一些数据来交互, 一般都是用文件或者是数据库储存,对于一些小插件基本是用文件储存也就是.yml的文件,对于一些需要很好的统计数据的插件,比如说登陆插件,AuthMe插件就可以使用数据库来获取,但是连接数据库多了多服务器也是一种压力。

所以说一般不重要的插件就用Bukkit自带的配置文件或者自定义的配置文件就可以了。

Bukkit一般自带的配置文件是config.yml文件,当然我们也可以自行创建自己需要的配置文件。

首先我先说明系统自带的config.yml文件的创建、设置、获取等各种方法。

首先我们还是使用一个最简单的主类。

package com.acgxt.test;

import org.bukkit.plugin.java.JavaPlugin;

public class Test extends JavaPlugin{
	@Override
	public void onEnable(){
		getLogger().info("插件已加载完毕");
	}
	@Override
	public void onDisable(){
		getLogger().info("插件已卸载");
	}
}
在和plugin.yml同级的目录下创建config.yml文件。该配置文件编码可以随意。

注意:中文编码请使用GBK

在Bukkit的Config配置文件中提供了几个方法。

this.reloadConfig();//重新加载配置文件
this.getConfig();//获取配置文件
this.saveConfig();//保存配置文件
this.saveDefaultConfig();//保存默认配置文件
设置一个配置可以使用
this.getConfig().set(键名,值);
获取一个配置可以使用
this.getConfig().getString("xxx.xxx");
获取配置的时候最好使用get+需要的类型。

Bukkit提供了几个获取配置的类型

getBoolean(路径)
getInt(路径)
getString(路径)
getList(路径)
getStringList(路径)

配置文件的路径是YAML的路径,所以你需要了解yaml的路径。

YAML文件的路径是按照类似节点的样子

获取配置文件的时候Bukkit只提供了config.yml文件的获取设置方法,所以我们必须考虑其他的配置文件,因为不可能一直只用一个配置文件吧?

所以我们可以在主类中添加以下方法,用于来创建获取配置文件

public FileConfiguration load(File file){
	if(!(file.exists())){
		try{
			file.createNewFile();
		}catch(IOException e){
			e.printStackTrace();
		}
	}
	return YamlConfiguration.loadConfiguration(file);
}

  简单的来说,上面的代码就是,传递一个File类型的变量,然后判断该文件是否存在,不存在则创建,最后返回yaml配置类型。然后我们就可以使用一些配置了。我们还可以自己制作一些快速的保存,设置,重载等各种方法。

然后了解了一下config配置的方法后,我们就可以开始实战了。我在这里用破坏方块来触发获取配置内容

首先在插件加载完毕的时候自行判断config.yml文件有目录是否存在,然后创建。并且在监听一下。

@Override
public void onEnable(){
	//创建插件文件夹与config.yml文件
	File file = new File(getDataFolder(),"config.yml");
	if(!getDataFolder().exists()){//判断目录是否存在 这里的目录是 plugin/插件名称/
		getDataFolder().mkdir();//不存在则创建这个文件夹
	}
	if(!file.exists()){//判断文件是否存在
		this.saveDefaultConfig();//不存在则创建默认的config.yml文件
	}
	this.reloadConfig();//重载配置
	//监听
	Bukkit.getPluginManager().registerEvents(this,this);
	getLogger().info("插件已加载完毕");
}
 默认创建完毕后,我们在之前创建的config.yml文件中写下
TestMsg: "这是TestMsg的配置内容"   
注意:中文需要改成gbk编码,英文无需。在冒号后面有一个空格!空格!空格!

然后创建一个方块破坏的监听事件。

破坏方块然后获取配置文件的内容。

@EventHandler
public void onBlockBreak(BlockBreakEvent event){
	File file = new File(getDataFolder(),"config.yml");
	FileConfiguration config = this.load(file);
	Bukkit.broadcastMessage("配置:"+config.getString("TestMsg"));
}

 

这里使用之前创建的获取配置文件的方法来获取配置。当然你也可以使用Bukkit自带的获取配置方法。this.getConfig();

这样就可以获取config.yml文件中的TestMsg的字符串内容了,注意:配置的字符串内容最好最好最好加上双引号!不然如果出现一些特殊字符就无法读取了。这是我之前曾体验过的。。

如果想获取有子节点的配置项呢?这个也很简单

比如说一个配置的内容是:

TestConfig:
  num: 1
  boolean: true
    String: "字符串"
这样的配置如何读取呢?这样的配置直接可以使用 '.' 来读取。

读取TestConfig可以使用

config.getInt("TestConfig.num");//获取的类型为int
config.getInt("TestConfig.boolean");//获取的类型为boolean
config.getInt("TestConfig.boolean.String");//获取的类型为String
配置项的键值请使用英文,不要使用特殊字符以及中文

键值出现特殊符号请带上双引号

最后全部代码


package com.acgxt.test;

import java.io.File;
import java.io.IOException;

import org.bukkit.Bukkit;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class Test extends JavaPlugin  implements Listener{
	@Override
	public void onEnable(){
		//创建插件文件夹与config.yml文件
		File file = new File(getDataFolder(),"config.yml");
		if(!getDataFolder().exists()){
			getDataFolder().mkdir();
		}
		if(!file.exists()){
			this.saveDefaultConfig();
		}	
		this.reloadConfig();
		//监听
		Bukkit.getPluginManager().registerEvents(this,this);
		getLogger().info("插件已加载完毕");
	}
	@Override
	public void onDisable(){
		getLogger().info("插件已卸载");
	}
	
	public FileConfiguration load(File file){
		if(!(file.exists())){
			try{
				file.createNewFile();
			}catch(IOException e){
				e.printStackTrace();
			}
		}
		return YamlConfiguration.loadConfiguration(file);
	}
	
	@EventHandler
	public void onBlockBreak(BlockBreakEvent event){
		File file = new File(getDataFolder(),"config.yml");
		FileConfiguration config = this.load(file);
		Bukkit.broadcastMessage("配置:"+config.getString("TestMsg"));
	}
}
	


好了,前几天因为没时间,学校现在电脑充个电太难了....

下一章开始,我将会将一些制作插件的包和类还有各种方法(当然只是常用的)

恩,看完之前的教程,结合BukkitAPI文档就能够制作一些简单的插件了。

请勿直接转载该文章

详细图片
载入中...