如何要求用户输入并 return 在新清单中输入

How to ask for user input and return it in a new inventory

我今年 13 岁,所以请不要对我不耐烦,因为我可能会犯一个愚蠢的错误或者没有从正确的角度思考问题。

我想制作一个 Spigot 插件来增加我的 Java 知识,方法是制作一个有趣且有教育意义的项目。我正在学习有关如何制作 GUI 的教程,但我想通过一种不太复杂的方式来创建它。

我四处寻找,发现了一些类似于显示此示例的东西 LobbyCompass

这是我的“GuiConstruct”class


import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.inventory.Inventory;

public class GuiConstruct {

    private String input(String input) {
        return input;
    }


    public Inventory newGui(String Name, int size) {
        return Bukkit.getServer().createInventory(null,9, ChatColor.RED + input());
    }

}

这是我的主要内容class

package me.yarkosharko.worldswitcher;

import org.bukkit.plugin.java.JavaPlugin;

public final class WorldSwitcher extends JavaPlugin {

    @Override
    public void onEnable() {
        // Plugin startup logic

    }

    @Override
    public void onDisable() {
        // Plugin shutdown logic
    }
}

我的想法是否正确?我必须做一些完全不同的事情吗?明确一点,我想做这样的事情:

/worldswitcher 'args'

然后它会显示一个名为 'args'

的库存 GUI

我可能不明白你的问题,因为它不是 straight-forward。正如我所了解的,您想创建打开具有指定名称的 GUI 的命令。有多种方法可以做到这一点...最简单的方法是在插件 main class.

中实现方法 onCommand
public final class WorldSwitcher extends JavaPlugin {

    @Override
    public void onEnable() {
        // Plugin startup logic

    }

    @Override
    public void onDisable() {
        // Plugin shutdown logic
    }

    @Override
    public boolean onCommand(CommandSender sender, Command command, String label,String[] args) {
        // executor must be player
        if(!(sender instanceof Player)) {
            sender.sendMessage("§cYou must be player to execute this command!");
            return true;
        }
        
        // If command name is "worldswitcher", handle logic
        if(command.getName().equalsIgnoreCase("worldswitcher")) {
            // If an argument is present, we can work with it
            if(args.length > 0){
                // cast player from command sender
                Player executor = (Player) commandSender;
                // get first argument
                String worldName = args[0];
                // openup a gui for him
                MyGUIClass.openGui(executor, worldName/*, other parameters*/)
            
            } else {
                // we require single argument, but it is missing
                sender.sendMessage("§cMissing argument");
            }
        }
        return true;
    }
}

并且您必须将此添加到您的 plugin.yml

commands:
    worldswitcher: {}

这段代码可能解释了它是如何工作的,但如果没有的话,还有很多学习命令如何工作的重要资源:Tutorial from TheSourceCode: CommandExecutors, Tutorial from Pogostick(Noah Rubin): Basic commands