参与编写者: MagicLu550
这个项目的需求很简单.实现一个玩家加入自定义提示信息,可以手动取消信息的功能 我们列举下步骤
-
创建项目
-
导入nukkit包
-
创建初始化配置文件set-info.yml
-
创建plugin.yml
-
创建主类
- 创建配置
-
创建监听器
- 读取配置内容
- 发送玩家信息
-
创建命令 -判断
-
注册监听器和命令
-
完成
1.第一到二步请自己完成 2.set-inf的内容
message: 欢迎${player}加入了服务器
3.我的plugin.yml的内容
name: MyJoin
main: net.noyark.www.MyJoin
version: "0.0.1"
author: magiclu550
api: ["1.0.9"]
description: My first plugin
#当采用注册时,控制权限需要在这里声明
commands:
set:
permission: myjoin.set
permissions:
myjoin.set:
default: op
4.创建主类 MyJoin
package net.noyark.www;
import cn.nukkit.plugin.PluginBase;
public class MyJoin extends PluginBase {
private Map<String,Boolean> cancel;
private static MyJoin instance;
@Override
public void onLoad() {
this.getLogger().info("插件开始加载");
}
@Override
public void onEnable() {
instance = this;
this.saveDefaultConfig();
this.getLogger().info("插件初始化完毕");
}
@Override
public void onDisable() {
this.getLogger().info("插件已经关闭");
}
public static MyJoin getInstance() {
return instance;
}
public void setCancel(String name,boolean isCancel) {
cancel.put(name,isCancel);
}
public Map<String, Boolean> getCancel() {
return cancel;
}
}
5.创建监听器
package net.noyark.www;
import cn.nukkit.event.EventHandler;
import cn.nukkit.event.Listener;
import cn.nukkit.event.player.PlayerJoinEvent;
public class MyJoinListener implements Listener {
@EventHandler
public void onJoin(PlayerJoinEvent e){
Boolean isCancel = MyJoin.getInstance().getCancel().get(e.getPlayer().getName());
if(isCancel!=null&&!isCancel) {
String message = MyJoin.getInstance().getConfig().getString("message");
e.setJoinMessage(message.replace("${player}", e.getPlayer().getName()));
}else{
MyJoin.getInstance().getCancel().put(e.getPlayer().getName(),true);
}
}
}
6.创建命令
package net.noyark.www;
import cn.nukkit.command.Command;
import cn.nukkit.command.CommandSender;
public class MyCommand extends Command {
public MyCommand() {
super("set","设置是否改变加入信息","/set");
}
@Override
public boolean execute(CommandSender sender, String commandLabel, String[] args) {
if(args.length!=0)
MyJoin.getInstance().getCancel().put(sender.getName(),Boolean.valueOf(args[0]));
else
//这行代码可能会吓到你,不要担心,他只是一个找玩家名字来找到是否取消
//如果为空,则默认取消,如果不是空,则把玩家之前的状态取反
MyJoin.getInstance().getCancel().put(sender.getName(),
MyJoin.getInstance().getCancel().get(
sender.getName()
)==null?false:!MyJoin.getInstance()
.getCancel()
.get(sender.getName()
)
);
return true;
}
}
- 注册
package net.noyark.www;
import cn.nukkit.plugin.PluginBase;
import java.util.Map;
public class MyJoin extends PluginBase {
private Map<String,Boolean> cancel;
private static MyJoin instance;
@Override
public void onLoad() {
this.getLogger().info("插件开始加载");
}
@Override
public void onEnable() {
instance = this;
this.saveDefaultConfig();
//一定在它的后面注册!!否则会出现一系列奇怪问题...
this.getServer().getCommandMap().register("",new MyCommand());
this.getServer().getPluginManager().registerEvents(new MyJoinListener(),this);
this.getLogger().info("插件初始化完毕");
}
@Override
public void onDisable() {
this.getLogger().info("插件已经关闭");
}
public static MyJoin getInstance() {
return instance;
}
public void setCancel(String name,boolean isCancel) {
cancel.put(name,isCancel);
}
public Map<String, Boolean> getCancel() {
return cancel;
}
}
这大概是这个项目的流程,很简单,但是大家可以练一练,扎实基本功,我们马上开始推入下一节 感谢你们的支持