本帖最后由 connection_lost 于 2016-2-10 10:40 编辑
简单的说一下吧,目前来说看到很多插件的编写中有着非常多的误区,希望各位注意一下。写的差劲的插件,不仅会拉低开发者的平均智商,性能差的插件也会在不同程度的情况下浪费性能。本篇教程将告诉你,如何写并且发布出一个差劲的插件。
1. 写好插件并不需要学习Java基础
由于BukkitAPI相对简单,对编程基础要求较低,如果你要写插件的话,你大可以边写插件边学Java基础。
2. 插件构思 —— 对自己有用即可
想要写插件?你要先考虑写什么。
看起来我们需要一个清屏插件,一个双跳插件,一个可以右键地板获得钻石的插件,很简单吧?三下五除二搞定,好,我们发到MCBBS就行了。
[功能] ClearChat —— 聊天清屏![1.8.x]
[娱乐] DoubleJump —— 在服务器中双跳吧 [1.8.x]
[娱乐] Diamonds —— 钻石不够多?找地板要![1.8.x]
3. 功能无法调节的插件会凸显你的独一无二
我今天要写一个死亡信息的插件,你看,MC里面自带的死亡信息非常无聊,而且还是白色的。所以我来把被JJ炸死的信息改一下吧。
复制代码感觉良好,发一下吧。
[娱乐] JJDeath —— 被JJ怪炸死不再无聊![1.8.x]
4. 开始设计你的插件结构
我们来想一下这个插件每个文件的结构吧。
包的名字?随便来一个,写自己名字吧。文件的名字?插件的名字吧。
看起来很顺眼,非常棒。
5. 使用方便自己使用的变量名称
插件是自己的,别人根本就不应该看你写的插件,所以你可以根据自己的喜好为变量命名。
复制代码String 信息 = "测试测试";
int 数量 = 1000;
6. 节省时间,多使用public
所有地方使用全局public前缀的变量可以直接从其他地方调用,免去了get与set的麻烦。
复制代码
7. 检查类别是多余的,因为即使出错也不会崩服,只会无关紧要的报错而已。复制代码
8. 记住使用复制粘贴
这是一个例子
复制代码
9. 发布插件的时候让为下载者保留一个惊喜
发布插件的时候,由于下载者可以从你的描述中精确的看出你的插件可以做什么。所以在你上传插件的时候,你不应该具体的描述插件,而是使用“这个插件很厉害”,“绝对独一无二”这种新颖且吸引人的字眼,吸引更多的人下载。
e. 后记
以上内容全部为根据真实内容改编,如果你发现自己中枪,请看着办。
简单的说一下吧,目前来说看到很多插件的编写中有着非常多的误区,希望各位注意一下。写的差劲的插件,不仅会拉低开发者的平均智商,性能差的插件也会在不同程度的情况下浪费性能。本篇教程将告诉你,如何写并且发布出一个差劲的插件。
1. 写好插件并不需要学习Java基础
由于BukkitAPI相对简单,对编程基础要求较低,如果你要写插件的话,你大可以边写插件边学Java基础。
2. 插件构思 —— 对自己有用即可
想要写插件?你要先考虑写什么。
看起来我们需要一个清屏插件,一个双跳插件,一个可以右键地板获得钻石的插件,很简单吧?三下五除二搞定,好,我们发到MCBBS就行了。
[功能] ClearChat —— 聊天清屏![1.8.x]
[娱乐] DoubleJump —— 在服务器中双跳吧 [1.8.x]
[娱乐] Diamonds —— 钻石不够多?找地板要![1.8.x]
3. 功能无法调节的插件会凸显你的独一无二
我今天要写一个死亡信息的插件,你看,MC里面自带的死亡信息非常无聊,而且还是白色的。所以我来把被JJ炸死的信息改一下吧。
- @EventHandler
- public void onPlayerDeath(PlayerDeathEvent event){
- if (event.getEntity().getKiller() instanceof Creeper){
- event.setDeathMessage(event.getPlayer().getName() + "被JJ崩死拉!")
- }
- }
[娱乐] JJDeath —— 被JJ怪炸死不再无聊![1.8.x]
4. 开始设计你的插件结构
我们来想一下这个插件每个文件的结构吧。
包的名字?随便来一个,写自己名字吧。文件的名字?插件的名字吧。
看起来很顺眼,非常棒。

5. 使用方便自己使用的变量名称
插件是自己的,别人根本就不应该看你写的插件,所以你可以根据自己的喜好为变量命名。
- String number = "walala";
- int text = 10;
- Player a;
- Entity b;
int 数量 = 1000;
6. 节省时间,多使用public
所有地方使用全局public前缀的变量可以直接从其他地方调用,免去了get与set的麻烦。
- public String number = "walala";
- public int text = 10;
- public Player a;
- public Entity b;
- public Creeper c;
7. 检查类别是多余的,因为即使出错也不会崩服,只会无关紧要的报错而已。
- public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
- ((Player)sender).sendMessage("欢迎使用!");
- }
8. 记住使用复制粘贴
这是一个例子
- player.sendMessage("");
- player.sendMessage("");
- player.sendMessage("");
- player.sendMessage("");
- player.sendMessage("");
- player.sendMessage("");
- player.sendMessage("");
- player.sendMessage("");
- player.sendMessage("");
- player.sendMessage("");
- player.sendMessage("");
- player.sendMessage("");
- player.sendMessage("");
9. 发布插件的时候让为下载者保留一个惊喜
发布插件的时候,由于下载者可以从你的描述中精确的看出你的插件可以做什么。所以在你上传插件的时候,你不应该具体的描述插件,而是使用“这个插件很厉害”,“绝对独一无二”这种新颖且吸引人的字眼,吸引更多的人下载。
e. 后记
以上内容全部为根据真实内容改编,如果你发现自己中枪,请看着办。
没中枪 233333333
多亏机智没有中枪 ...
报错不好,
没中((
差勁的插件 XDDD
没中枪_(:_」∠)_话说以前差点就这样了……
噗。。。
大公鸡快来当插件版版主~
6中枪了.. 然而现在知道IDE自带gettersetter了。。
a390807154 发表于 2016-2-12 10:23
大公鸡快来当插件版版主~
呃,现实世界,服务器,还有一些别的事情实在是太忙了,目前还是不行呐 QwQ
楼主真是同道中人呐,老衲不胜佩服
写的太好了,完美的教程
(⊙v⊙)嗯。我会告诉你我喜欢用随便乱打的字母做变量吗?【手动混淆= =
写的真牛= =