当前位置: 首页 > 知识库问答 >
问题:

在Bukkit中为命令使用多个类?

周凯捷
2023-03-14

最近我启动了一个Bukkit插件,但由于使用两个类(main和CommandExecutor)而遇到了麻烦。我已经尝试了所有的方法,但是当我加载我的插件时,它抛出了一个错误,这个错误就在文章的末尾。

package me.mucapapipa.ekits;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class ekits extends JavaPlugin implements Listener {


@Override
public void onEnable() {
    System.out.println("Main plugin enabled");
    getCommand("pvp").setExecutor(new NormalPlayer(this));
    getServer().getPluginManager().registerEvents(this, this);
}
@Override
public void onDisable() {
    System.out.println("Main plugin disabled");
}


}
package me.mucapapipa.ekits;

import org.bukkit.ChatColor;
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.plugin.java.JavaPlugin;

public class NormalPlayer extends JavaPlugin implements CommandExecutor {

@SuppressWarnings("unused")
private ekits core;
public NormalPlayer(ekits core) {
        this.core = core;
}

private String kit;

public boolean onCommand(CommandSender sender, Command cmd, String CommandLabel, String[] args) {

    if (sender instanceof Player) {
        Player player = (Player) sender;
        if (cmd.getName().equalsIgnoreCase("pvp")) {
            kit = "PvP";
            player.getInventory().clear();
            player.getInventory().addItem(new ItemStack(Material.DIAMOND_SWORD));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            player.getInventory().addItem(new ItemStack(Material.MUSHROOM_SOUP));
            /* We then set the armor */
            player.getInventory().setBoots(new ItemStack(Material.IRON_BOOTS));
            player.getInventory().setHelmet(new ItemStack(Material.IRON_HELMET));
            player.getInventory().setLeggings(new ItemStack(Material.IRON_LEGGINGS));
            player.getInventory().setChestplate(new ItemStack(Material.IRON_CHESTPLATE));

            player.sendMessage(ChatColor.GRAY + "~ " + ChatColor.AQUA + "Kit: " + kit);
        }
        else {
            sender.sendMessage("The console should not play. It would be so OP.");
        }
    }

    return true; }
}
name: EKits
author: Mucapapipa
main: me.mucapapipa.ekits.ekits
version: 1.0
description: The server's main plugin.

commands:
  pvp:
    usage: /<command>
    aliases: [kitpvp]
    description: Uses the kit PvP.

共有1个答案

拓拔麒
2023-03-14

公共类NormalPlayer扩展JavaPlugin实现CommandExecutor

为什么您的命令执行器要扩展主插件类?这就是双初始化的原因,移除超类可能会修复代码。

 类似资料:
  • 问题内容: 我试图弄清楚如何使用argparser执行以下操作: 本身是一个子命令。我的目标是使脚本具有链接一系列子命令(成为其中一个命令)并按顺序执行它们的能力。在上面的示例中,它将执行构建,然后设置环境,然后再次执行构建。如何使用argparse完成此操作?我尝试了以下方法: 但是,似乎每次执行此操作时,它都会进入子命令并报告它不知道是什么。我尝试解析额外的内容,以便可以执行重复调用/链,但是

  • 问题内容: 似乎python支持许多不同的命令来停止脚本执行。 我发现的选择是: ,,, 我错过了吗?它们之间有什么区别?你何时会使用它们? 问题答案: 让我给他们一些信息: 在幕后提出异常。 此外,如果你打印它,它将给出一条消息: 包含此功能是为了帮助不了解Python的人。毕竟,新手尝试退出Python的最有可能的事情之一就是输入quit。 然而,quit应该不是在生产代码中使用。这是因为它仅

  • python似乎支持许多不同的命令来停止脚本执行。 我找到的选择有:、、、 我错过了什么吗?它们之间有什么区别?你什么时候用?

  • 前几天我开始开发一个bukkit插件,目的是在用户输入“/hello”时在文本窗口中返回hello。但是,这不起作用,因为我无法在eclipse中导入命令行。有什么建议吗?它说,“命令不能解析为类型”

  • 问题内容: 有什么方法可以在一个命令中复制多个目录以减少层数?例如,代替: 我想要做: 但是,这会复制目录的 内容 …但是我想复制 目录本身 。 问题答案: 这是copy命令的记录行为: 如果是目录,则将复制目录的整个内容,包括文件系统元数据。 注意:目录本身不会被复制,只是其内容被复制。 我建议的最佳解决方法是更改​​构建文件夹中的目录布局,将三个文件夹移动到一个父文件夹下,然后添加父文件夹。

  • 问题内容: 我正在开发一个Java应用程序,该应用程序偶尔会在Windows计算机上运行。在某个时候,我需要运行Cygwin提示符并在其中执行一些命令。 我找到了一个使用Runtime类的主题:http : //www.javaquery.com/2011/03/how-to-execute- multiple-command-in.html 但是,它不会启动真正的 cmd.exe 窗口,它仅在后