嗨,我想知道我怎么可能存储玩家数据?我需要额外的课程吗?我需要某个代码吗?我不知道如何做到这一点,如果有人可以帮助,将不胜感激!我想存储数据,因此如果玩家选择了一个套件,他们就不能选择另一个套件。Bukkit如何存储数据
回答
如果您想存储用户正在使用的临时存储套件,可以使用带有玩家UUID和套件的地图。例如假设您的套件有它自己的对象。然后,当他们试图挑选另一个时,只检查他们是否在Map中,如果他们发送了一条消息,如果不添加它们。
如果你想要更多的永久存储,你需要将它存储在一个文件中。
基本上我想这样做,所以玩家可以选择一个套件,只选择一个,如果他们死了,然后他们可以选择另一个,我想我需要一个PlayerDeathEvent的侦听器,但是我需要一个特定类的hashmap /地图? – CodeIsCool
你确实需要听取死亡。一旦他们死亡,将他们从地图上移除。不,你不需要某个班级,它可以上任何班级。只要确保不是静态滥用。 – bwfcwalshy
所以,你只是说当玩家选择一个套件时,他们将不能再次选择套件,除非他们死亡。一个简单的解决方案是将其存储在一个数组中。我个人使用Arraylists,这样我就可以随时为每个玩家存储数据。
举例来说。你想创建一个名为kitTrue的新Arraylist,你需要使用这个方法。
ArrayList<Player> kitTrue = new ArrayList<Player>();
然后,只需将播放器存储在数组列表中。这是一个很好的方法,因为你可以在死亡事件中移除玩家并离开事件。当玩家只需选择套件,就可以将它们添加到数组列表中。当他们死亡或注销时,他们将从数组列表中移除。
从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);
}
所以当玩家选择套件时,这可能是您如何执行它的选项。可能看起来像这样。但你会明白的。这就是你将玩家添加到数组列表的方式。
@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能够存储单个值,例如玩家和字符串等。您可以简单地检查ArrayList是否在列表中包含玩家或字符串,然后您可以运行代码说明玩家在列表中或者确定播放器不在阵列内部。非常容易,并一直使用这个。我希望这是你正在寻找的东西。
Thx Pixl
为什么在使用自己的UUID时使用玩家的对象? – Lightspeed360
你也可以使用,我知道UUID是识别玩家的更好方式,但它确实没有关系。 – Pixlation
其实它的确如此。你根本没有强调**为什么在断开连接时从列表中删除玩家很重要。玩家对象不像UUID的加载块,如果在断开连接时没有移除,这是一个很大的内存泄漏。 现在,就其他代码而言,它并不是很好。首先你滥用转换,它不合逻辑地将玩家转换为玩家。将**发送给**播放器**并不确定它实际上是播放器实例同样是不合逻辑的。不要相信我?通过控制台运行命令/套件并找出自己。 –
- 1. Bukkit:如何存储玩家和课程信息?
- 2. 如何存储MongoDB数据
- 3. redis如何存储数据
- 4. 如何存储Json数据
- 5. HDR数据如何存储?
- 6. MySQL如何存储数据
- 7. 如何将数据存储到数据存储 - AppEngine
- 8. Python:如何在Google App Engine数据存储中存储数组
- 9. 节点:如何存储JSON数组在谷歌数据存储
- 10. 如何将数据存储为本地存储中的数组?
- 11. 如何将数据存储在存储器或寄存器中
- 12. 数据如何存储/我们如何获取存储在unordered_map存储桶中的数据11
- 13. 何处/如何存储数据集合
- 14. 如何存储数据,如书籍?
- 15. 如何在GAE数据存储区中正确保存数据?
- 16. 如何在Appcraft数据存储中保存数据?
- 17. 存储数据
- 18. 存储数据
- 19. 存储数据
- 20. 存储数据
- 21. 存储数据
- 22. 存储数据
- 23. 数据存储
- 24. 存储数据
- 25. 存储数据
- 26. 如何删除存储在本地存储中的数据?
- 27. 如何将数据从aspx页面存储到存储过程?
- 28. 如何在App Engine数据存储中存储键值对?
- 29. 如何在数据存储中存储RDF图?
- 30. 如何使用量角器存储本地存储数据?
你的意思是你想写在一个文件例如'playername:kitname'? – Nightfighter001
是的,我可以检测他们是否可以使用其他套件。 – CodeIsCool