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