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