如何记录玩家的回复?

时间:2013-06-25 21:02:00

标签: minecraft bukkit

基本上我要做的是让玩家回复一条消息,要求他们只输入数字。从那时起,我可以将String解析为int并将其用于我的其余代码。此外,我试图这样做,所以这发生在我的事件方法中。任何帮助是极大的赞赏!

2 个答案:

答案 0 :(得分: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())获得。如果消除了所有其他引用,则弱引用会被垃圾收集,因此这可以降低内存泄漏的风险。

答案 1 :(得分: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()接受播放器输入的内容并通过新提示对其做出反应。

  5. 我希望这有帮助。如果您有任何疑问,请随时提出。