2013-11-21 71 views
0

我是bukkit jython/python插件编码器,但我卡在这里。我有一个由服务器预生成的array.array(所以ArrayList),并返回在线玩家列表。检查列表中的每个特定项目是否在散列表中?

那就是:

online = Bukkit.getOnlinePlayers() 

所以,我想要什么? (检查#hashcomments)

我创建此HashMap():

channelList = HashMap() 

@hook.command("channel", usage="/channel [channelname]", desc="Use this command to join an channel!", 
       aliases = ["c", "cjoin", "cj"]) 
def channel(sender, command, args): 
    channel = args[0] 
    channelList.put(sender, channel) #so if player does /channel balkan command it puts his name and channel (balkan in this case) in hashmap... 
    sender.sendMessage("%sYou've successfully joined %s %s %s channel!"%(bukkit.ChatColor.DARK_AQUA, bukkit.ChatColor.AQUA, channel, bukkit.ChatColor.DARK_AQUA)) 
    return True 

@hook.event("player.PlayerChatEvent", "NORMAL") 
def onPlayerChatEvent(event): 
    p = event.getPlayer() 
    message = event.getMessage() 
    messagesubstring = message[:1] 
    event.setCancelled(1) 
    playername = event.getPlayer().getDisplayName() 
     if messagesubstring == "!": 
      plist1 = #How do I get this list? It's list of players that are in HashMap with "balkan" as second hashmap argument... 
      userChannel = "balkan" 
      online = Bukkit.getOnlinePlayers() 
      lenghtonline = len(online) 
      b = lenghtonline - 1 
      a = 0 
      if a <= b: 
      if channelList.get(p) == userChannel: 
       plist1.sendMessage("blabla") 

提前感谢!

回答

0

您可以使用HashMap.entrySet()迭代一个HashMap的条目:

的Java:

for(Entry<String, String> e: channelList.entrySet()){ 
    if(userChannel.equals(e.getValue()){ 
      pist1.add(e.getKey()); 
    } 
} 

在Jython中,您可能需要这样的呼吁:

Iterator<Entry<String, String>> it = channelList.entrySet().iterator(); 
while(it.hasNext()){ 
    Entry<String, String> e = it.next(); 
    ... 
} 
+0

我真的不知道我理解你。我不认为这会输出一个所有已经加入巴尔干聊天的玩家名称的数组列表?总结一下:我有一个在线玩家的数组列表,我需要检查这些玩家是否在hashmap中,但是我想从hashmap中获得在线玩家的列表,这些玩家是在巴尔干聊天中(以前也被命令放在HashMap中) ) –

+0

这个小小的摘录显示了如何迭代用'channelList.put(sender,channel)'填充的地图的值。如果不理解您的问题,我很抱歉。 –

相关问题