当第一个加入服务器(ArrayList
)时,如何为每个玩家创建一个新的PlayerJoinEvent
,这样每个玩家都有一个ArrayList
(用于朋友列表插件)?
我希望使用新播放器的名称制作ArrayList
或任何其他List
,并将其朋友列表作为列表名称
我希望此列表可以打开以添加命令,这样玩家就可以将朋友从服务器添加到朋友列表中。我只是不知道如何根据播放器制作一个PlayerJoinEvent
列表。
答案 0 :(得分:3)
要创建ArrayList
,您可以使用:
List<UUID> players = new ArrayList<UUID>();
但是,当你说你想为玩家存储朋友列表时,我很确定你正在谈论HashMap
。所以,你可以使用:
Map<UUID, List<UUID>> players = new HashMap<UUID, List<UUID>>();
HashMap
就像一个基于密钥的变量集合。在上述情况下,对于放入地图的每个UUID
,都会有List<UUID>
作为值。
确保从不使用Player
对象作为ArrayList
,HashMap
,HashSet
或类似内容中的类型参数。当玩家离开服务器时,这样做会导致内存泄漏,使得服务器在很多人离开后非常非常迟缓。
要解决此问题,您可以使用播放器的UUID
:
UUID id = player.getUniqueId();
或他们的名字:
String name = player.getName();
所以,这就是你的代码的样子:
Map<UUID, List<UUID>> players = new HashMap<UUID, List<UUID>>();
@EventHandler
public void playerJoin(PlayerJoinEvent e){
UUID uuid = e.getPlayer().getUniqueId();
//get the player's friends here, if they have none, keep the
//new ArrayList<UUID>(); otherwise, don't
List<UUID> friends = new ArrayList<UUID>();
players.add(uuid);
}
确保将上述代码放在implements Listener
:
public class PlayerJoinListener implements Listener{
//...
}
此外,请务必在onEnable()
课程Main
中extends JavaPlugin
注册活动:<{p}}:
@Override
public void onEnable(){
//replace PlayerJoinListener with whatever your Listener class is
this.getServer().getPluginManager().registerEvents(this, new PlayerJoinListener());
}
然后,只要您想获得玩家朋友的列表,就可以使用HashMap.get()
:
UUID uuid = player.getUniqueId();
List<UUID> friends = players.get(uuid);
然后,如果您想将玩家的好友列表设置为新值,则可以使用HashMap.put()
:
List<UUID> newFriendsList = new ArrayList<UUID>();
players.put(uuid, newFriendsList);
因此,如果您想将玩家添加到其他玩家的朋友列表中,您可以使用:
public void addToFriendsList(Player player, Player friend){
//get the unique ids
UUID uuid = player.getUniqueId();
UUID friendID = friend.getUniqueId();
//update the player's friends list and add "friend"
List<UUID> friends = players.get(uuid);
friends.add(friendID);
//put the list back into the HashMap
players.put(uuid, friends);
}
如果您想将玩家的朋友存储在config
文件中,您可以使用:
UUID uuid = player.getUniqueId();
String key = "Friends." + uuid.toString();
config.set(key, players.get(uuid));
设置玩家的朋友(或更新他们),并用它来获取它们:
UUID uuid = player.getUniqueId();
String key = "Friends." + uuid.toString();
List<String> friends = config.getStringList(key);
//this is a list of the friend's UUIDs as strings
答案 1 :(得分:-1)
您可以执行以下操作:
ArrayList<Player> players = new ArrayList<Player>();
public void addPlayer(PlayerJoinEvent e) {
Player p = e.getPlayer();
players.add(p);
}