命令无法正确执行

时间:2015-08-06 22:43:02

标签: java bukkit

我正在尝试将播放器位置放入 config.yml 文件中。 我想将playerXplayerYplayerZplayerWorld变量作为字符串。

出于某种原因,它不再做任何事情了。 现在代码肯定有问题,因为当我执行/spleef setgame {name}时,它会在 plugin.yml 文件中显示数据。

package me.olsyboy.spleef;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.World;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.configuration.file.YamlConfiguration;
public class Main extends JavaPlugin {
    public void onEnable() {
        loadConfiguration();
        reloadConfig();
        getCommand("spleef").setExecutor(this);
    }
    public void onDisable() {
        saveDefaultConfig();
    }
    public void loadConfiguration() {
        //See "Creating you're defaults"
        getConfig().options().copyDefaults(true); // NOTE: You do not have to use "plugin." if the class extends the java plugin
        //Save the config whenever you manipulate it
        saveDefaultConfig();
     }
    public boolean onCommand(CommandSender sender, Command cmd, String    label, String[] args, double playerX, double playerY, double playerZ, World   playerWorld, String Location) {
        Player player = (Player) sender;
        if (cmd.getName().equalsIgnoreCase("spleef")) {
             if (args[0].equalsIgnoreCase("setgame")) {
                if (args.length == 2) {
                    String gameName = args[1]; //initialize the gameName variable here
                    String path = "GamesLocations." + gameName;
                    playerX = player.getLocation().getX();
                    playerY = player.getLocation().getY();
                    playerZ = player.getLocation().getZ();
                    playerWorld = player.getLocation().getWorld();
                    Location = String.valueOf(playerX) + String.valueOf(playerY) + String.valueOf(playerZ) + playerWorld;
                    getConfig().addDefault(path, Location);
                    getConfig().options().copyDefaults(true);
                    saveConfig();
                    player.sendMessage("Spleef Game Location Set");
                }
                return true;
            }
        } else if (cmd.getName().equalsIgnoreCase("help")) {
            player.sendMessage("/spleef setGame {GameName}");
            return true;
        }
        return false;
    }
}

1 个答案:

答案 0 :(得分:1)

您的问题是您创建的onCommand()方法由于参数不正确而未被Bukkit注意到。

Bukkit onCommand()的标准是:

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

然而,你提供了:

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args, double playerX, double playerY, double playerZ, World playerWorld, String Location)

因此,要实现这一点,请更改您的方法以使用传统参数。

如果您想保留自己的方法,请将传统onCommand()重定向到您的方法:

public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    if (sender instanceof Player) {
        if (cmd.getName().equalsIgnoreCase("spleef") ||
                cmd.getName().equalsIgnoreCase("help")) {
            Player p = (Player) sender;
            onCommand(sender, cmd, label, args,
                    p.getLocation().getX(),
                    p.getLocation().getY(),
                    p.getLocation().getZ(),
                    p.getLocation().getWorld(),
                    String.valueOf(p.getLocation())); // Or whatever this is