2013-06-25 28 views
0

基本上我想要做的就是讓玩家迴應一條只需要輸入數字的信息。從這一點,我可以將String解析爲一個int,並將其用於我的其餘代碼。另外,我正在嘗試使它在我的事件方法中發生。任何幫助是極大的讚賞!如何記錄玩家的迴應?

+0

如果您需要幫助,請發佈一些代碼。 – Tyler

回答

0

你基本上想要做的就是把玩家存放在一個容器中,直到下一次他們說話,然後將它們移除。此,在僞代碼表示的,將如下所示的情況如下:

on your condition: 
    add player to collection 

on player chat: 
    does the player exist in the collection? 
     yes: is input a valid number? 
      yes: proceed with execution, remove player from collection after 
      no: print error 
     no: ignore, let event pass 

由於的Minecraft協議不允許輸入驗證,就會有這樣的情況,其中用戶可以提交非數字字符。 Integer.parseInt或其兄弟值valueOf會在這種情況下拋出異常。

爲防止內存泄漏,您應該在註銷時將其從集合中刪除。或者,您可以將它們存儲在弱參考容器中。對於這種情況來說,一個好的方法就是一個WeakSet,你可以通過Collections.newSetFromMap(new WeakHashMap())來獲得。如果所有其他引用都被刪除,那麼弱引用會被垃圾回收,這樣可以降低內存泄漏的風險。

0

你應該看看bukkit會話API。這是爲了做到這一點。你可以在網上找到教程,但基本上要設置它,你這樣做。

  1. 構建與ConversationFactory

    ConversationFactory HudConvo = new ConversationFactory(plugin) 
    .withModality(true) 
    .withEscapeSequence("exit") 
    .withFirstPrompt(new HudConversationMain(plugin, player, 0)) 
    .withLocalEcho(false); 
    
    
    Conversation conversation = HudConvo.buildConversation((Conversable) player); 
    
  2. 會話開始的會話

    conversation.begin(); 
    
  3. 使所述第一提示作爲一類,要麼延伸輸入類型的提示的一個(即StringPrompt)或實現提示抽象類。

  4. 填寫方法getPromptText()和acceptInput()。 getPromptText()構造要顯示給播放器的消息,acceptInput()取得播放器輸入的內容並用新的提示對其作出反應。

我希望這對我有所幫助。如果您有問題,請隨時提問。