当前位置: 首页 > 知识库问答 >
问题:

Minecraft Bukkit YML列表问题

丁俊爽
2023-03-14

好的,所以我试着列出一个列表来收集所有使用插件的在线玩家创建的帮派。

但是当它把一个项目添加到YML列表时,它把它命名为“真实”,这不是我想要的。我想加入帮派的名字。

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

这是我的GangJoinControl类。

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: ''

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

共有2个答案

严亮
2023-03-14

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

collection:
    key: value
    key: value

因此:

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

应该是:

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

假设您没有立即向密钥集合添加某些内容,这会使该行变得多余,因为在中设置了一个值。赫普。durp会自动创建hurp标题,并在hurp下面为durp赋值。

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

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);

公西国发
2023-03-14

根据MemoryConfigurationjavadoc(您正在使用的YamlConfiguration的父类之一),getStringList()返回一个列表

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);

第二种配置也是如此。

 类似资料:
  • 问题内容: python: 我希望此代码应打印 但它打印 问题答案: 这是设计使然。在列表的元素上使用乘法时,您正在复制引用。 请参阅Python编程/列表Wikibook上的“列表创建快捷方式”部分,其中详细介绍了对可变对象的列表引用问题。 他们建议的解决方法是列表理解:

  • 问题发布 功能介绍:学员可向已有专家提问问题,专家可设置付费回答。 适用场景:学员在家自学并询问老师。 步骤(手机端) 从【进入店铺】→【首页】→【导航栏】→【问答】,进入付费问答界面。 首页导航栏可自由设置,详情点此。 问题管理 功能介绍:查看付费问答详情、推荐、隐藏或者删除。 步骤(后台端) 从【在线问答】→【问题列表】,进入付费问答列表。

  • 问题内容: 我在python中有一个由列表列表建模的2D数组,我想提取该列。我进行了快速研究,发现了一种使用numpy数组的方法。问题是 我不想使用numpy, 所以不想将列表列表转换为numpy数组,然后使用[:,1]语法。我尝试在正常的列表列表上使用它,但显示错误,因此是不可能的。我正在为列表列表请求类似的东西,而不必遍历每个元素(在numpy数组中,使用[:,1]语法访问列比在数组元素上进行

  • 我对C模板非常陌生。我目前正在做一个项目,我需要使用模板实现双重链接列表。以下是我目前所拥有的: 然而,在我的析构函数中,为什么我不能访问节点元素?该方法中的代码现在已编译,但不会抛出错误。但是如果我尝试使用- 此外,我如何在函数头中初始化list==NULL,而不是在类之外进行初始化?

  • 我想创建一个程序,允许用户删除员工与指定的工资单号码。 java(在其名为的包中) 当我输入工资单号码时,我的程序只识别第一个工作人员。任何其他工作人员都不会被‘发现’。我在哪里出了问题?如何从数组中删除特定的工资单号码并向用户请求另一个输入(直到数组为“空”)。

  • 根据这个文档,DynamoDB支持map(M)和list(L)类型,但是当我试图创建一个具有(L)类型的表时,我得到一个错误: ValidationException(客户端):检测到1个验证错误:attributeDefinitions处的值“L”。2.member.attributeType未能满足约束:成员必须满足枚举值集:[B,N,S] 将属性添加到表信息后发生此情况: 我的目标是为存储一