# 最简单的插件
# Bukkit插件的本质
插件本质是一个基于BukkitAPI的Java应用. 一个插件必须要有 主类 和 plugin.yml文件.
例如下面是一个常见插件, 让我们找一下它的主类和plugin.yml文件.

# 简单的插件
在编写自己想做的插件之前, 不妨做一个简单的插件来了解一下Bukkit插件如何编写.
新建一个Java工程, 导入开服用的服务端jar文件到工程的Libraries中. 创建tdiant.helloworld.HelloWorld类作为插件的主类, 并继承JavaPlugin类.
在主类里覆写onEnable方法和onDisable方法. 完成后, 代码应该类似这样:
package tdiant.helloworld;
import org.bukkit.plugin.java.JavaPlugin;
public class HelloWorld extends JavaPlugin {
@Override
public void onEnable() {
System.out.println("Hello World");
}
@Override
public void onDisable() { }
}
Bukkit服务端会在插件被启用时调用onEnable方法, 被停用时调用onDisable方法.
但这还不够,我们还需要告诉Bukkit,插件的一些信息才能让他更好的识别.
创建plugin.yml文件. 打开plugin.yml文件并在其中输入如下信息:
name: HelloWorld
main: tdiant.helloworld.HelloWorld
version: 1
author: MinecraftDev
特别注意: 如果你的插件是基于新版本API(1.13以及以上版本)编写的, 应当在plugin.yml中额外增加
api-version: 1.13键值对.例如这样:name: HelloWorld main: tdiant.helloworld.HelloWorld api-version: 1.13 version: 1 author: MinecraftDev这会告诉Bukkit, 这个插件是基于新版API编写的.
若要兼容1.13及以上版本的同时兼容旧版本, 应特别注意各版本之间的 API 变化(譬如1.12进度系统取代了成就系统, 1.13的 Material 枚举发生了巨大变化).
注意: 主类的名称并不是固定的, 但是plugin.yml文件的名称是固定的.
上面的plugin.yml文件逐行分析如下:
| 键 | 意义 | 备注 |
|---|---|---|
| name | 插件名 | 不允许带有中文和空格, 推荐只含有下划线、英文. |
| main | 插件的完整主类名 | 例如我这里插件主类为tdiant.helloworld.HelloWorld, 此处则需填写tdiant.helloworld.HelloWorld. |
| version | 插件版本 | 您可以填写一个合理的String内容, 而不一定必须为数字, 例如可填写v1.0.0 |
| author | 作者 | - |
可以发现, 当插件Jar被正常加载后, 会在控制台输出Hello World字符串, 这标志着我们的HelloWorld插件正常工作.

# BukkitAPI中的Logger
# Logger
这里只是简要提及, 不详细介绍, 只需要知道有这件事即可.
BukkitAPI“修改”了我们常用的sout (即System.out.println), 将其“引入”了BukkitAPI提供的Logger.
只有通过Logger输出的文本信息才能记录在服务端生成的log文件中.
在BukkitAPI插件开发时, 我们通常不用sout输出想往后台输出给服主看的文本信息, 而应用Logger.
主类有getLogger()方法, 可以利用这个方法获得Logger.
例如这样:
public class HelloWorld extends JavaPlugin {
@Override
public void onEnable(){
this.getLogger().info("Hello World");
}
@Override
public void onDisable(){}
}
这样输出信息的方式与sout相比最主要的区别是, 如果你的插件plugin.yml里的名称为Test那么:
this.getLogger().info("测试");
System.out.println("测试");
输出的结果是
[23:33:33] [Server thread/INFO]: [Test] 测试
[23:33:33] [Server thread/INFO]: 测试
# ChatColor
在所有能发彩色文字的地方, 你可以直接使用双s (即§符号, Windows系统下按住键盘Alt键, 在数字键盘区域依次按下0167后松开Alt键即可输入该字符) + 对应颜色代码(可以在Minecraft Wiki上查到)代表颜色.
颜色是可以混用的: §4比§c如§6这§2样.
在开发中, 你不必这样, ChatColor可以替代.
p.sendMessage(ChatColor.RED+"你" + ChatColor.GREEN+"好"+ ChatColor.YELLOW + "!");
这样就可以发送一个 红色的“你”, 绿色的“好”, 黄色的感叹号 给玩家.
后面了解配置文件的操作后, 一些插件允许服主在设定一些提示语时用&符号代替§, 插件处理这样的文本信息时, 可以这样处理成带颜色的字符串:
String str = "&4哈&c哈&6哈....."; //待处理字符串
p.sendMessage(str); //发给玩家的还是: &4哈&c哈&6哈.....
String str_finish = ChatColor.translateAlternateColorCodes('&',str); //处理好的字符串
p.sendMessage(str_finish); //发给玩家就是彩色的
提示:你可以使用
import static org.bukkit.ChatColor.*;来导入
ChatColor中的所有枚举。接下来你就可以更方便地写颜色代码:String str = RED + "/test help" + GREY + " - " + WHITE + "显示帮助菜单。";
入门
15分钟