2015-06-01 2 views
-1

Я хотел бы знать, как отправить игроку список своих магазинов, когда они набирают /shoplist. Кроме того, я хотел бы знать, как изменить название магазина в зависимости от того, что они набирают, поэтому, если они используют /shopname Shop1 Pie, это изменит имя Shop1 на pie. Или, если у них нет магазина под названием 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

ответ

0

Вы можете получить List<String> всех магазинов игрока, используя

config.getStringList(playerName); 

Так, например, если ваш конфиг выглядит следующим образом:

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

использованием

config.getStringList("McMatt"); 

Вернул бы List<String> con олова строк Магазин1 и Awesome Shop.

Кроме того, чтобы избежать 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 
      } 
     } 
     //... 
    } 
}