【Minecraft】【Java】插件开发多之带参数命令

In this blog, I want to introduce arguments in Java that refer to placeholders in Minecraft in the Minecraft plugin development.

Note that this is for me to retrospect only. So I just use whatever I want. And that’s cool. After all, It’s mine.

To illustrate, I am going to take ‘repeat command’ for example

使用两个例子,一个是多参命令,”/repeat I like Chen anyhow“。
另一个是”/repeat“。下面开始。

In the first place, generate a class called ‘Repeat.java’.

在这里插入图片描述
Naturally, implement CommandExcutor Class, and press Alt+Enter at the end of ‘CommandExcuter’ to automatically create something default.

Then, change the return value to true.

package com.kiong.commands;

import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;

public class Repeat implements CommandExecutor {
    @Override
    public boolean onCommand(CommandSender commandSender, Command command, String s, String[] strings) {

        return true;
    }
}

Secondly, code the command.
在“/repeat I like Chen anyhow”中,对应的三个四个参数分别是“I”,“like”,“Chen”和“anyhow”。

如果命令只有一个/repeat,也就没有参数。那么输出“你没有输入参数,再试一次”,并给出用例。用else if判断参数个数,如果参数为1个,那么用String word = string[0]接收,然后通过消息框再发出去。
(注意,如果命令是/repeat I am Kiong,这里strings,即第四个参数,的长度为3。即strings.length = 4。Because ‘/repeat’ doesn’t count.)

public class Repeat implements CommandExecutor {
    @Override
    public boolean onCommand(CommandSender commandSender, Command command, String s, String[] strings) {
        // /repeat I like Chen anyhow
        //"I", "like", "Chen", "anyhow"


        if(commandSender instanceof Player p){
            if(strings.length == 0){
                p.sendMessage("You did not provide any arguments. Try again");
                p.sendMessage("Example: /repeat <massage>");
            }else if (strings.length==1){
                String word = strings[0];
                p.sendMessage("Message: " + word);
            }
        }

        return true;
    }
}

然而这样做的弊端很明显,如果我有好多的参数,总不能一直用else if判断个数再处理吧!

此方法用于从字符串中去除尾随空格,即stripTrailing()方法仅在字符串末尾删除所有空格。

使用StringBuilder来拼接参数,然后删除末尾空格,最后发出去。

else{
                StringBuilder sb = new StringBuilder();

                for (int i = 0; i < strings.length; i++) {
                    sb.append(strings[i]);
                    sb.append(" ");
                }
                String finalMessage = sb.toString();
                //to chop off the last space
                finalMessage = finalMessage.stripTrailing();
                p.sendMessage(finalMessage);
            }

StringBuilder的讲解:

stripTrailing方法:删除字符串结尾的空格。
例:

Input:

String name = " kapil “;
System.out.println(”#" + name + “#);
System.out.println(”#" + name.stripLeading());

Output:
【 kapil 】
【 kapil】//末尾的空格被删除

最后,不要忘了在主类和plugin.yml中注册一下。
在这里插入图片描述
在这里插入图片描述

结果验证:/repeat I like you anyhow
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值