如何在PlayerJoinEvent上创建ArrayList

时间:2015-03-16 03:59:46

标签: java bukkit

当第一个加入服务器(ArrayList)时,如何为每个玩家创建一个新的PlayerJoinEvent,这样每个玩家都有一个ArrayList(用于朋友列表插件)?

我希望使用新播放器的名称制作ArrayList或任何其他List,并将其朋友列表作为列表名称

我希望此列表可以打开以添加命令,这样玩家就可以将朋友从服务器添加到朋友列表中。我只是不知道如何根据播放器制作一个PlayerJoinEvent列表。

2 个答案:

答案 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对象作为ArrayListHashMapHashSet或类似内容中的类型参数。当玩家离开服务器时,这样做会导致内存泄漏,使得服务器在很多人离开后非常非常迟缓。

要解决此问题,您可以使用播放器的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()课程Mainextends 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);
}