【问题标题】:Minecraft Bukkit YML list issueMinecraft Bukkit YML 列表问题
【发布时间】:2014-04-12 07:07:54
【问题描述】:

好的,所以我正在尝试制作一个列表,以收集玩家在线使用该插件创建的所有帮派。

但是,当它向 YML 列表添加一个项目时,它会将其命名为“true”,这不是我想要的。我要添加帮派名称。

当我尝试将帮派中的玩家添加到与帮派所有者一起保存的列表时也会这样做。

这是我的 GangJoinCommand 类。

package me.galaxywarrior6.minecraftgta.commands;


import me.galaxywarrior6.minecraftgta.MinecraftGTA;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import org.bukkit.scoreboard.DisplaySlot;
import org.bukkit.scoreboard.Objective;
import org.bukkit.scoreboard.Score;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.ScoreboardManager;

public class GangCreateCommand implements CommandExecutor{

    public MinecraftGTA plugin;
    public GangCreateCommand(MinecraftGTA instance){
        plugin = instance;  
        }

    public boolean onCommand(CommandSender sender, Command cmd, String label, String args[]){
        Player p = (Player) sender;
        String prefix = ChatColor.DARK_GRAY + "[" + ChatColor.GOLD + "Gangs" + ChatColor.DARK_GRAY + "] ";
        if (cmd.getName().equalsIgnoreCase("gcreate")){

            if (args.length <= 0 || args.length >= 2){
                p.sendMessage(prefix + "That's an invalid command structure!");
                return true;
            }

            String UUID = p.getUniqueId().toString().toLowerCase();

            if (!(MinecraftGTA.config.getString(UUID + ".Gang").equalsIgnoreCase("none"))){
                p.sendMessage(prefix + ChatColor.RED + "You're already in a gang!");
                return true;
            }
            if (MinecraftGTA.config.getStringList("gangs").contains(args[0].toString())){
                p.sendMessage(prefix + ChatColor.RED + "That gang name is already taken!");
                return true;
            }

            if (args[0].length() >= 16){
                p.sendMessage(prefix + ChatColor.RED + "Please shorten your gangname to 15 or less characters.");
                return true;
            }

                MinecraftGTA.config.set(UUID + ".Gang", args[0]);
                MinecraftGTA.config.set(UUID + ".GangOwnership", args[0]);
                MinecraftGTA.config.set(UUID + ".GangRank", "GodFather");
                MinecraftGTA.config.set("gangs", MinecraftGTA.config.getStringList("gangs").add(args[0]));
                MinecraftGTA.config.set(UUID + ".GangMembers", MinecraftGTA.config.getStringList(UUID + ".GangMembers").add(UUID));

                p.sendMessage(prefix + ChatColor.GREEN + "You've successfully created a gang!");
                Bukkit.getServer().broadcastMessage(prefix + ChatColor.BLUE + p.getName() + ChatColor.GREEN + " has started up a gang!");

                ScoreboardManager manager = Bukkit.getScoreboardManager();
                Scoreboard board = manager.getNewScoreboard();

                Objective sidebar = board.registerNewObjective("money", "count");
                sidebar.setDisplaySlot(DisplaySlot.SIDEBAR);
                sidebar.setDisplayName("§a§l-----Stats-----");

                p.setScoreboard(board);

                Score spacer1 = sidebar.getScore(Bukkit.getOfflinePlayer("§f"));
                spacer1.setScore(12);

                Score gangs = sidebar.getScore(Bukkit.getOfflinePlayer("§5§lGang:"));
                gangs.setScore(11);

                Score gangName = sidebar.getScore(Bukkit.getOfflinePlayer("§d§l" + MinecraftGTA.config.getString(UUID + ".Gang")));
                gangName.setScore(10);

                Score spacer4 = sidebar.getScore(Bukkit.getOfflinePlayer("§f"));
                spacer4.setScore(9);

                Score dollars = sidebar.getScore(Bukkit.getOfflinePlayer("§6§lMoney:"));
                dollars.setScore(8);

                Score dollarsnum = sidebar.getScore(Bukkit.getOfflinePlayer("§e§l$" + MinecraftGTA.config.getInt(UUID + ".Dollars")));
                dollarsnum.setScore(7);

                Score spacer2 = sidebar.getScore(Bukkit.getOfflinePlayer("§7"));
                spacer2.setScore(6);

                Score kills = sidebar.getScore(Bukkit.getOfflinePlayer("§3§lKills:"));
                kills.setScore(5);

                Score killsnum = sidebar.getScore(Bukkit.getOfflinePlayer("§b§l" + MinecraftGTA.config.getInt(UUID + ".Kills")));
                killsnum.setScore(4);

                Score spacer3 = sidebar.getScore(Bukkit.getOfflinePlayer("§8"));
                spacer3.setScore(3);

                if(MinecraftGTA.config.getInt(UUID + ".WantedLv") <= 4){
                    Score wanted = sidebar.getScore(Bukkit.getOfflinePlayer("§c§lWanted:"));
                    wanted.setScore(2);

                    Score wantednum = sidebar.getScore(Bukkit.getOfflinePlayer("✩ ✩ ✩ ✩ ✩"));
                    wantednum.setScore(1);
                }else if(MinecraftGTA.config.getInt(UUID + ".WantedLv") <= 10){
                    Score wanted = sidebar.getScore(Bukkit.getOfflinePlayer("§c§lWanted:"));
                    wanted.setScore(2);

                    Score wantednum = sidebar.getScore(Bukkit.getOfflinePlayer("✭ ✩ ✩ ✩ ✩"));
                    wantednum.setScore(1);

                    p.addPotionEffect(new PotionEffect(PotionEffectType.INCREASE_DAMAGE, 99999, 1));

                }else if(MinecraftGTA.config.getInt(UUID + ".WantedLv") <= 15){
                    Score wanted = sidebar.getScore(Bukkit.getOfflinePlayer("§c§lWanted:"));
                    wanted.setScore(2);

                    Score wantednum = sidebar.getScore(Bukkit.getOfflinePlayer("✭ ✭ ✩ ✩ ✩"));
                    wantednum.setScore(1);

                    p.addPotionEffect(new PotionEffect(PotionEffectType.INCREASE_DAMAGE, 99999, 2));

                }else if(MinecraftGTA.config.getInt(UUID + ".WantedLv") <= 20){
                    Score wanted = sidebar.getScore(Bukkit.getOfflinePlayer("§c§lWanted:"));
                    wanted.setScore(2);

                    Score wantednum = sidebar.getScore(Bukkit.getOfflinePlayer("✭ ✭ ✭ ✩ ✩"));
                    wantednum.setScore(1);

                    p.addPotionEffect(new PotionEffect(PotionEffectType.INCREASE_DAMAGE, 99999, 3));

                }else if(MinecraftGTA.config.getInt(UUID + ".WantedLv") <= 25){
                    Score wanted = sidebar.getScore(Bukkit.getOfflinePlayer("§c§lWanted:"));
                    wanted.setScore(2);

                    Score wantednum = sidebar.getScore(Bukkit.getOfflinePlayer("✭ ✭ ✭ ✭ ✩"));
                    wantednum.setScore(1);

                    p.addPotionEffect(new PotionEffect(PotionEffectType.INCREASE_DAMAGE, 99999, 4));

                }else if(MinecraftGTA.config.getInt(UUID + ".WantedLv") >= 30){
                    Score wanted = sidebar.getScore(Bukkit.getOfflinePlayer("§c§lWanted:"));
                    wanted.setScore(2);

                    Score wantednum = sidebar.getScore(Bukkit.getOfflinePlayer("✭ ✭ ✭ ✭ ✭"));
                    wantednum.setScore(1);

                    p.addPotionEffect(new PotionEffect(PotionEffectType.INCREASE_DAMAGE, 99999, 5));

                }
                MinecraftGTA.saveFile();
                return true;
            }
        return false;
    }
}

可以在此处找到它添加到列表中的区域:

        MinecraftGTA.config.set("gangs", MinecraftGTA.config.getStringList("gangs").add(args[0]));
        MinecraftGTA.config.set(UUID + ".GangMembers", MinecraftGTA.config.getStringList(UUID + ".GangMembers").add(UUID));

这会将配置设置为以下内容:

gangs: true
5e1839e8-4c81-4dd9-80f3-18475b98f192:
  Dollars: 78
  Kills: 0
  WantedLv: 0
  LastUsername: I_Stole_The_Sock
  Gang: Tgang
  GangOwnership: Tgang
  GangRank: GodFather
  GangMembers: true
  CurrentInvite: ''
  Inviter: ''

请告诉我如何阻止它说“真”并将其设置为我想要的实际字符串。

【问题讨论】:

    标签: java yaml config minecraft bukkit


    【解决方案1】:

    根据MemoryConfiguration javadoc(这是您正在使用的YamlConfiguration 的父类之一),getStringList() 返回一个List&lt;String&gt;,但我敢打赌它实际上返回一个@ 987654327@,调用ArrayList#add() 将返回一个boolean 指示该项目是否已成功添加到列表中。因此这一行:

    MinecraftGTA.config.set("gangs", MinecraftGTA.config.getStringList("gangs").add(args[0]));
    

    需要成为:

    final List<String> gangs = MinecraftGTA.config.getStringList("gangs");
    gangs.add(args[0]);
    MinecraftGTA.config.set("gangs", gangs);
    

    第二个配置也一样。

    【讨论】:

      【解决方案2】:

      总的来说,插件看起来不错,一切正常;但是您必须以不同的方式看待 YamlConfiguration 类。您的顶级 gangs 不是字符串列表(因此您不能这样设置); gangs 是键的集合。此外,您添加到该密钥集合的帮派也是一个密钥集合。任何有标题和值的东西都是这里的关键。示例:

      collection:
          key: value
          key: value
      

      因此:

      MinecraftGTA.config.set("gangs", MinecraftGTA.config.getStringList("gangs").add(args[0]));
      

      应该是:

      MinecraftGTA.config.createSection("gangs." + args[0]);
      

      假设您没有立即将某些内容添加到密钥集合中,这会使该行变得多余,因为在 gangs.hurp.durp 中设置值会自动创建 gangshurp 标头,并将值分配给durp,在hurp下方。

      至于第二个true,理论上它可以正常工作,但正如另一个答案中所述,add 方法很有可能返回布尔值而不是修改后的字符串列表,这意味着扩展行将是最简单的解决方案。 (我的更正假设您希望 UUID 低于 gangs 顶层)

      MinecraftGTA.config.set(UUID + ".GangMembers", MinecraftGTA.config.getStringList(UUID + ".GangMembers").add(UUID));
      

      然后是:

      List<String> temp = MinecraftGTA.config.getStringList("gangs." + UUID + ".GangMembers");
      temp.add(UUID);
      MinecraftGTA.config.set("gangs." + UUID + ".GangMembers", temp);
      

      【讨论】:

        猜你喜欢
        • 2017-07-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多