配置问题

时间:2015-06-01 20:33:49

标签: java minecraft bukkit

我想知道在输入/shoplist时如何向玩家发送商店列表。此外,我想知道如何根据他们输入的内容更改商店的名称,因此如果他们使用/shopname Shop1 Pie,它会将Shop1的名称更改为饼图。或者,如果他们没有名为shop1的商店,那么如果他们在开店时没有任何商店就会说出一条消息,然后在配置中为他们建立一个新的部分。

这是我的主要文件:

public class Shops extends JavaPlugin implements Listener {

  public void onEnable() {
    Bukkit.getServer().getLogger().info("************************");
    Bukkit.getServer().getLogger().info("*Shops Plugin Enabled  *");
    Bukkit.getServer().getLogger().info("*Shops by McMatt       *");
    Bukkit.getServer().getLogger().info("************************");
    Bukkit.getServer().getPluginManager().registerEvents(new Signs(), this);
    getConfig().options().copyDefaults(true);
    saveConfig();


  }

  public void onDisable() {
    Bukkit.getServer().getLogger().info("************************");
    Bukkit.getServer().getLogger().info("*Shops Plugin Disabled *");
    Bukkit.getServer().getLogger().info("*Shops by McMatt       *");
    Bukkit.getServer().getLogger().info("************************");

  }

  public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) {
    if (cmd.getName().equalsIgnoreCase("shops")) {
      if (!(sender instanceof Player)) {
        sender.sendMessage("You must be a player to run this command");
        return true;
      }

      Player player = (Player) sender;


      if (!player.hasPermission("shops.shops")) {
        player.sendMessage(ChatColor.RED + "You do not have to permission (shops.shops)");
        return true;


      } else {
        player.sendMessage(ChatColor.GOLD + "Shops:");
        player.sendMessage(ChatColor.RED + "---" + ChatColor.GOLD + "Commands" + ChatColor.RED + "---");
        player.sendMessage(ChatColor.DARK_GREEN + "/shops" + ChatColor.GREEN + " Displays this");
        player.sendMessage(ChatColor.DARK_GREEN + "/shopslist" + ChatColor.GREEN + " Used to list shops");
        player.sendMessage(ChatColor.RED + "---" + ChatColor.GOLD + "Signs" + "---");
        player.sendMessage(ChatColor.DARK_GREEN + "First line:" + ChatColor.GREEN + " [shop]");
        player.sendMessage(ChatColor.DARK_GREEN + "Second line:" + ChatColor.GREEN + " {Open or Closed}");

      }
    }
    return true;
  }



  public boolean onCommand1(CommandSender sender, Command cmd, String commandLabel, String[] args) {
    if (cmd.getName().equalsIgnoreCase("shopslist")) {
      sender.sendMessage("Getting shops info!");
      sender.sendMessage(getConfig().getString("" + sender.getName()));
      return true;
    }
    return false;
  }
}

这是我的监听器文件

public class Signs implements Listener {

    @EventHandler
    public void onSignChange(SignChangeEvent e) {
        if (e.getLine(0).equalsIgnoreCase("[shop]")) {
            Block attached = e.getBlock().getRelative(0, -1, 0);
            String name = e.getPlayer().getDisplayName();
            if (!(attached.getType() == Material.CHEST))
                e.getPlayer().sendMessage(ChatColor.RED + "Please place the shop on a chest!");
            else {
                if (!e.getPlayer().hasPermission("shops.create"))
                    e.getPlayer().sendMessage(ChatColor.RED + "You don't have permission to create a shop! (shops.create)");
                else {
                    if (!Arrays.asList("open", "closed").contains(e.getLine(1).toLowerCase())) {
                        e.getPlayer().sendMessage(ChatColor.RED + "You must specify if the shop is open or closed on the second line!");
                    } else {
                        boolean closed = true;
                        if ("open".equalsIgnoreCase(e.getLine(1))) {
                            closed = false;
                        }

                        String lineThree = closed ? "§cClosed" : "§aOpen";
                        e.setLine(3, lineThree);
                        e.setLine(0, "§9[Shop]");
                        e.setLine(1, "§b" + name + "'s");
                        e.setLine(2, "§bShop");
                        e.getPlayer().sendMessage(ChatColor.GREEN + "Shop Created!");
                        e.getPlayer().playSound(e.getPlayer().getLocation(), Sound.LEVEL_UP, 10, 10);
                        //if(getConfig().equals(null)){
                            //int shopAmount = 0;
                            //shopAmount = shopAmount + 1;
                            //getConfig().createSection(name);
                            //getConfig().addDefault(name + ":.Shops:", "Shop" + shopAmount);
                        }
                    }
                }
            }
        }



    @EventHandler
    public void onPlayerInteract(PlayerInteractEvent e) {
        if (e.getAction().equals(Action.RIGHT_CLICK_BLOCK)) {
            Player p = e.getPlayer();
            Block b = e.getClickedBlock();
            Material m = b.getType();
            if (!(m == Material.SIGN_POST)) {
                return;
            } else {
                Sign sign = (Sign) e.getClickedBlock().getState();
                if ((sign.getLine(0).equalsIgnoreCase("§9[Shop]"))) {
                    if ((sign.getLine(3).equalsIgnoreCase("§aOpen"))) {
                        p.sendMessage("I opened the shop!");
                     }
                }
            }
        }
    }
}

这是我的配置文件

  

McMatt:
   - Shop1

1 个答案:

答案 0 :(得分:0)

您可以使用

获取所有玩家商店的List<String>
config.getStringList(playerName);

因此,例如,如果您的配置如下所示:

McMatt:
    - "Shop1"
    - "Awesome Shop"
jojodmo:
    - "Jojo Shop"
使用

config.getStringList("McMatt");

会返回包含字符串 Shop1 Awesome Shop List<String>

另外,要避免使用NullPointerException,您应该确保玩家在配置中使用商店

if(config.contains(playerName))

并向玩家发送一条消息,告诉他们没有商店。

所以,你的代码看起来像这样:

public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args){
    if(cmd.getName().equalsIgnoreCase("shops")){
        //your code
        if(sender instanceof Player){
            Player player = (Player) sender;
            String name = player.getName();

            if(config.contains(name)){
                List<String> shops = config.getStringList(name);

                for(String shop : shops){
                     //do something with the shop       
                }
            }
            else{
                //the user has no shops
            }
        }
        //...
    }
}