Bukkit如何存储数据

时间:2016-04-04 03:38:18

标签: bukkit

嗨我想知道怎么可能存储播放器数据?我需要额外的课吗?我需要一定的代码吗?我不知道该怎么做,如果有人能提供帮助,那将不胜感激!我想存储数据,所以如果玩家选择套件,他们就不能选择另一个。

2 个答案:

答案 0 :(得分:1)

如果您想存储用户用于临时存储的工具包,您可以使用带有播放器UUID和工具包的地图。例如Map<UUID, Kit> userKits = new HashMap<UUID, Kit>();假设你的工具包有它自己的对象。然后,当他们尝试选择另一个时,只需检查它们是否在Map中,如果没有添加它们,则向他们发送消息。

如果您想要更长久的存储空间,则需要将其存储在一个文件中。

答案 1 :(得分:-3)

所以,简单地说,当玩家选择套件时,除非他们死亡,否则他们将无法再次挑选套件。一个简单的解决方案是将其存储在一个数组中。我个人使用Arraylists,这样我就可以随时为每个玩家存储数据。

所以举个例子。你想创建一个名为kitTrue的新Arraylist,你需要使用这个方法。

ArrayList<Player> kitTrue = new ArrayList<Player>();

然后只需将玩家存放在arraylist中。这是一个很好的使用方法,因为你可以删除死亡事件中的玩家并离开事件。当玩家只选择套件时,您可以将它们添加到arraylist中。当他们死亡或退出时,他们将被从arraylist中删除。

从Arraylist中移除玩家:

kitTrue.remove(p);

将玩家添加到Arraylist:

kitTrue.add(p);

所以这里有一个关于你如何在死亡和退出事件中移除玩家的例子。

@EventHandler
public void onPlayerDeath(PlayerDeathEvent e){
    Player p = (Player) e.getEntity();
    kitTrue.remove(p);  
}
@EventHandler
public void onLogout(PlayerQuitEvent e){
    Player p = (Player) e.getPlayer();
    kitTrue.remove(p);  
}

因此,当玩家选择套件时,这可能是您执行它的选项。看起来像这样。但你会明白这个想法。这就是你如何将一个玩家添加到arraylist。

@Override
public boolean onCommand(CommandSender sender, Command cmd, String   label, String[] args) {
    Player p = (Player) sender;
    if(cmd.getLabel().equalsIgnoreCase("kit")){
        if(args.length == 0){
            p.sendMessage("§7You have chosen the kit.");
            archer(p);
            kitTrue.add(p);
        } else{
            p.sendMessage("§7Usage§8: §b/kit");
        }
    }
    return false;
    }

接下来,您要确定玩家是否已选择套件。有很多方法可以设置这个系统,但我只会向您展示它是如何工作的基础知识。所以希望你明白这个想法。

@Override
public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
    Player p = (Player) sender;
    if(cmd.getLabel().equalsIgnoreCase("kit")){
        if(args.length == 0){
            if(kitTrue.contains(p)){
                p.sendMessage("§7You have already chosen a kit this life.");
            }
            p.sendMessage("§7You have chosen the kit.");
            archer(p);
            kitTrue.add(p);
        }
    }
    return false;
    }

那你为什么要选择arraylists呢?好吧Arraylists能够存储单个值,如玩家和字符串等。你可以简单地检查arraylist是否在列表中有播放器或字符串,然后你可以运行一个代码,说明播放器在列表中或者识别是否玩家不在阵列内部。很容易,并一直使用这个。我希望这是你正在寻找的东西。

Thx Pixl