本帖最后由 白色的小熊 于 2021-8-17 15:03 编辑
源代码在这里:复制代码
你们说的错误我已经改了,现在的问题就是命令参数的判断,虽然有两个命令,实质上是一个命令,然后还有一个问题,就是怎么在其他类中注销主类的事件监听器
源代码在这里:
- import org.bukkit.command.Command;
- import org.bukkit.command.CommandExecutor;
- import org.bukkit.command.CommandSender;
- import org.bukkit.event.Listener;
- import org.bukkit.event.player.AsyncPlayerChatEvent;
- import org.bukkit.plugin.Plugin;
- public class OnCommand implements CommandExecutor, Listener {
- public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
- if (cmd.toString().equals("chat")) {
- if (args[0].equals("close")) {
- AsyncPlayerChatEvent.getHandlerList().unregister(this);
- sender.sendMessage("已关闭聊天功能");
- }
- if (args.length == 1) {
- return false;
- }
- if (args[0].equals("open")) {
- sender.getServer().getPluginManager().registerEvents(this, (Plugin) this);
- sender.sendMessage("已开启聊天功能");
- }
- return true;
- }
- return false;
- }
- }
你们说的错误我已经改了,现在的问题就是命令参数的判断,虽然有两个命令,实质上是一个命令,然后还有一个问题,就是怎么在其他类中注销主类的事件监听器
额,完全看不懂呢
toString 不应该在这里使用
要使用 cmd.getName().equalsIgnoreCase("chat")
要使用 cmd.getName().equalsIgnoreCase("chat")
本帖最后由 白色的小熊 于 2021-8-17 12:00 编辑
这样的话就只能实现/chat close而不能实现/chat open,怎么在另一个类里关闭主类的事件监听器?
不管是/chat open还是/chat close实质上都是一个指令,两个不同的参数
RarityEG 发表于 2021-8-17 11:24
toString 不应该在这里使用
要使用 cmd.getName().equalsIgnoreCase("chat")
这样的话就只能实现/chat close而不能实现/chat open,怎么在另一个类里关闭主类的事件监听器?
不管是/chat open还是/chat close实质上都是一个指令,两个不同的参数
多试几次吧
今天怎么这么多灌水的?不会你来回复啥?
sdgavfdhieavfc
我在想 if (cmd.toString().equals("chat")) 有什么意义,setExcutor的时候不是指定了命令了吗,为什么还要判断一次,还有你判长为什么在中间.
本帖最后由 南柯郡守 于 2021-8-17 13:00 编辑
你在主类有没有注册指令
this.getCommand(cmd).setExecutor(executor)
命令长度最好先判断 不然你第一个if容易npe
if (cmd.toString().equals("chat")) 百分百false 你这里的cmd是一个指令对象 不单单是你的/chat
你在主类有没有注册指令
this.getCommand(cmd).setExecutor(executor)
命令长度最好先判断 不然你第一个if容易npe
if (cmd.toString().equals("chat")) 百分百false 你这里的cmd是一个指令对象 不单单是你的/chat
结冰的离季 发表于 2021-8-17 12:53
我在想 if (cmd.toString().equals("chat")) 有什么意义,setExcutor的时候不是指定了命令了吗,为什么还 ...
已经改了,还是不管用啊,输入/chat open还是给我返回false
南柯郡守 发表于 2021-8-17 12:54
你在主类有没有注册指令
this.getCommand(cmd).setExecutor(executor)
这个在主类里写了,请仔细看问题,谢谢
本帖最后由 结冰的离季 于 2021-8-17 13:15 编辑
print大法,确定到底是哪个false输出args[0] 和 args[0].equals("open")
如果if (cmd.toString().equals("chat")) { 已经去掉的话 false百分百是length的
白色的小熊 发表于 2021-8-17 13:05
已经改了,还是不管用啊,输入/chat open还是给我返回false
print大法,确定到底是哪个false输出args[0] 和 args[0].equals("open")
如果if (cmd.toString().equals("chat")) { 已经去掉的话 false百分百是length的