我的世界Bukkit插件开发-第五章-搭建基于spigot核心的服务器-自定义命令-通过命令获取一把钻石剑


我的世界Bukkit插件开发【自定义命令】(spogit核心)

前言

  • 本章实现完成【自定义命令-获取一把钻石剑】
  • 基于Spigot核心的插件开发
  • 前置开发工具:IDEA
  • JDK环境-JKD-17
  • 构建工具:maven
  • 必备idea插件:Minecraft Development
  • 服务器核心: Spigot-1.20.jar
  • mc客户端
  • 小部分内容来自AI大模型,如需深入,请联系博主或自行了解
  • 持续更新中…

一、自定义命令

通过bukkit插件,注册一个命令

1. 创建一个插件项目

打开idea - new project 选择Minecraft-填写项目信息,我是在原有的项目上新增了一个新的module,实际是一样的
没有Minecraft选项的需要下载idea插件 Minecraft Development,可以看下前面的章节
在这里插入图片描述
创建完成后项目结构如下
在这里插入图片描述
查看主类信息
onEnable 插件开启时执行(注册事件监听器、注册命令、初始化数据等)
onDisable 插件关闭时执行(关闭资源、处理结束数据等)

package com.shunxin;

import org.bukkit.plugin.java.JavaPlugin;

public final class GenerateDiamondSword extends JavaPlugin {

    @Override
    public void onEnable() {
        // Plugin startup logic

    }

    @Override
    public void onDisable() {
        // Plugin shutdown logic
    }
}

查看plugin.yml文件

name: GenerateDiamondSword
version: '1.0'
main: com.shunxin.GenerateDiamondSword
api-version: '1.20'
authors: [ shuxnin ]
description: 获取一把钻石剑

2.配置命令

plugin.yml文件中定义命令配置。
配置如下,命令的名称为:generateDiamondSword ,玩家需要输入 /generateDiamondSword

name: GenerateDiamondSword
version: '1.0'
main: com.shunxin.GenerateDiamondSword
api-version: '1.20'
authors: [ shuxnin ]
description: 获取一把钻石剑
commands:
  generateDiamondSword:
    description: 生成一个钻石剑
    usage: /generateDiamondSword

二、自定义命令执行器对象

在bukkit插件开发中,自定义一个命令,需要实现 CommandExecutor 接口,并重写接口的 onCommand方法

1. CommandExecutor 接口

ommandExecutor 是一个接口,属于 org.bukkit.command 包,用于处理玩家输入的命令。当插件需要响应特定的命令时,需要创建一个类实现这个接口。
CommandExecutor 接口中包含一个核心方法 onCommand,该方法会在玩家执行命令时被调用

1.1 onCommand 方法

onCommand:这个方法入参包含四个参数,返回值为布尔值类型,代表成功或失败

  • CommandSender sender:命令的发送者,可以是玩家、控制台或其他
  • Command command:被执行的命令对象
  • String label:使用的命令别名
  • String[] args:传递的命令参数,不包含命令主体

1.2 代码如下

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
   
        return false; 
    }

2.自定义执行器

在主类目录下建立一个包 命名为 commands ,创建类GenerateDiamondSwordCms符合Java规范即可
在这里插入图片描述
GenerateDiamondSwordCms类需要实现CommandExecutor接口并重写onCommand方法
代码如下

package com.shunxin.commands;

import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;

/**
 * @version 1.0
 * @ClassName GenerateDiamondSwordCms
 * @Author huitailang
 * @Description 生成一个钻石剑 -命令
 */
public class GenerateDiamondSwordCms implements CommandExecutor {

    @Override
    public boolean onCommand(CommandSender commandSender, Command command, String label, String[] args) {

        // 判断命令和发送对象
        if (command.getName().equalsIgnoreCase("generateDiamondSword")
                && commandSender instanceof Player) {
            commandSender.sendMessage("正在生产一把钻石剑...");
            // 创建钻石剑
            _generate((Player) commandSender);

            return true;
        }
        return false;
    }

    private void _generate(Player player) {
        // 定义钻石剑
        ItemStack sword = new ItemStack(new ItemStack(Material.DIAMOND_SWORD, 1));
        // 获取玩家物品栏
        PlayerInventory inventory = player.getInventory();
        inventory.addItem(sword);
      	// 提示玩家
        player.sendMessage("你获得了一把钻石剑");
    }
}

三、注册命令

1.在插件中注册命令对象

在插件主类中的 onEnable方法中注册,增加一个提示

    @Override
    public void onEnable() {
        // 设置插件开启提示
        CommandSender sender = Bukkit.getConsoleSender();
        sender.sendMessage("generateDiamondSword 命令已部署");
        // Plugin startup logic
        getCommand("generateDiamondSword").setExecutor(new GenerateDiamondSwordCms());

    }

四、插件打包

使用maven进行打包,打包后生成target目录,详细操作及介绍前章节有,不做多复述
在这里插入图片描述

五、运行插件

将打包后的GenerateDiamondSword-1.0.jar 文件放到服务器中的plugins文件夹中,启动服务器
输入命令: generateDiamondSword
在这里插入图片描述

本章完

总结

提示:本章小结:持续更新中......
【文章实现总结】
实现自定义命令并完成指定效果
如果对您有帮助,别忘了收藏点赞评论留言,有问题评论区回答,后续继续更新插件相关文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值