第七节 案例课:玩家进入案例演示

上一节 下一节

第一章 第七节 案例课:玩家进入案例演示

参与编写者: MagicLu550

建议学习时间: 30分钟

学习要点: 对于之前知识的巩固和加深认识

这个项目的需求很简单.实现一个玩家加入自定义提示信息,可以手动取消信息的功能
我们列举下步骤

  • 创建项目

  • 导入nukkit包

  • 创建初始化配置文件set-info.yml

  • 创建plugin.yml

  • 创建主类

    • 创建配置
  • 创建监听器

    • 读取配置内容
    • 发送玩家信息
  • 创建命令
    -判断

  • 注册监听器和命令

  • 完成

1.第一到二步请自己完成
2.set-inf的内容

1
message: 欢迎${player}加入了服务器

3.我的plugin.yml的内容

1
2
3
4
5
6
7
8
9
10
11
12
13
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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.创建监听器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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.创建命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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;
}
}
  1. 注册
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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;
}
}

这大概是这个项目的流程,很简单,但是大家可以练一练,扎实基本功,我们马上开始推入下一节
感谢你们的支持

上一节 下一节