2013-11-18 2 views
0

Я Jython/Python Bukkit плагин кодировщик, и я получаю странные ошибки .. Я пытаюсь перекодировать то, что уже сделано (в Java) в Python ... Вот ява часть кода:Что это за ошибка и как ее исправить?

HashMap<Player, String> channelList = new HashMap<Player, String>(); 
    public void useChannel(Player p, String format, String channel){ 
    if(channel == "main"){ 
     Bukkit.broadcastMessage(format); 
    } else { 
      Player[] online = Bukkit.getOnlinePlayers(); 
      for(int a = 0; a <= online.length - 1; a++){ 
       if(channelList.get(online[a]) == channel){ 
        online[a].sendMessage("*" + format); 
       } 
      } 
    } 
} 

@EventHandler 
public void onChat(AsyncPlayerChatEvent event){ 
    event.setCancelled(true); 
    String channel = event.getMessage().substring(0, 1); 
    String userChannel = ""; 
    switch(channel){ 
    case "!": userChannel = "spanish"; 
    case "?": userChannel = "french"; 
    case "@": userChannel = "dutch"; 
    case "$": userChannel = "spanish"; 
    default: userChannel = "main";  
    } 
    useChannel(event.getPlayer(), event.getFormat(), userChannel); 
} 

}

и вот что я сделал в Python/Jython (иметь на виду, что это может быть, это не то же самое, и что является причиной ошибки):

channelList = HashMap() 

    def useChannel(self): 
    format = event.player.AsyncPlayerChatEvent.getFormat()  
    if(channel == "main"): 
     Bukkit.broadcastMessage(format) 
    else: 
     online = Bukkit.getOnlinePlayers() 
     b = online.lenght - 1 
     a = 0 
     for a in a <= b: 
      if channelList.get(online[a]) == channel: 
       online[a].sendMessage("* %s"%format) 

def balkanChannel(self): 
    userChannel = "balkan" 
    return userChannel 

def germanChannel(self): 
    userChannel = "german" 
    return userChannel 

@hook.event("player.AsyncPlayerChatEvent", "HIGHEST") 
def onAsyncPlayerChatEvent(event): 
    event.setCancelled(1) 
    channel = event.getMessage().substring(0, 1) 
    userChannel = "" 
    try: 
     options = { 
       '!': pyplugin.balkanChannel, 
       '$': pyplugin.germanChannel} 
     if value in switch: 
      switch[value]() 
     else: 
      pass 
    except KeyError: 
      userChannel = "main" 
    pyplugin.useChannel(event.getPlayer(), event.getFormat(), userChannel) 

Это чат связанных плагин, который должен на AsyncChatPlayerEvent проверить, есть ли! или $ prefix в сообщении ... Эти префиксы выполняются как «случаи» в Java, но, насколько я знаю, в Python нет такой вещи, поэтому я сделал это таким образом (что, возможно, неверно)?

Вот Я получаю ошибку при чате с этими префиксами ($ и!):

14:38:59 [SEVERE] java.util.logging.ErrorManager: 5 
> 
Exception: org.python.core.PyException thrown from the UncaughtExceptionHandler 
in thread "Connection #1 read thread" 

Подводя итог, я пытаюсь «перекодировать» выше кода Java в Python, но я получаю какая-то странная ошибка ...

Спасибо за ответ!)

P.S. сервер зависает после ошибки spitts ... Если вам нужна дополнительная информация, просто комментарий ...

+1

в 'onAsyncPlayerChatEvent', какие' 'value' и switch'? – Vlad

+0

@ Vlad, независимо от того, я просто понял, что это вызывает одну ошибку, когда я использую это событие? Знаете ли вы, о чем говорит эта ошибка, поскольку нет никаких следов ... –

+0

«PyException» имеет [traceback] (http://www.jython.org/javadoc/org/python/core/PyException.html #traceback), но я не знаю, как его использовать. Проще всего сделать, что вы можете обернуть все в инструкции 'try' с помощью' except Exception, e: print e.message' в конце. – Vlad

ответ

0

Это была моя ошибка, извините. Я использовал неправильное событие ...

Я использовал AsyncPlayerChatEvent вместо регулярных PlayerChatEvent ...

Смежные вопросы