Skip to content

Latest commit

 

History

History
201 lines (159 loc) · 5.03 KB

1-8_案例玩家进入信息等效果.md

File metadata and controls

201 lines (159 loc) · 5.03 KB

上一节 下一节

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

参与编写者: MagicLu550

建议学习时间: 30分钟

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

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

  • 创建项目

  • 导入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;
    }
}
  1. 注册
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;
    }
}

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

上一节 下一节