基本上我要做的是让玩家回复一条消息,要求他们只输入数字。从那时起,我可以将String解析为int并将其用于我的其余代码。此外,我试图这样做,所以这发生在我的事件方法中。任何帮助是极大的赞赏!
答案 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。它正是为了做到这一点。你可以在网上找到教程,但基本上你可以设置它。
与ConversationFactory建立对话
ConversationFactory HudConvo = new ConversationFactory(plugin)
.withModality(true)
.withEscapeSequence("exit")
.withFirstPrompt(new HudConversationMain(plugin, player, 0))
.withLocalEcho(false);
Conversation conversation = HudConvo.buildConversation((Conversable) player);
开始对话
conversation.begin();
将第一个提示作为扩展其中一个输入类型提示(即StringPrompt)的类或实现提示抽象类。
填写方法getPromptText()和acceptInput()。 getPromptText()构造要显示给播放器的消息,acceptInput()接受播放器输入的内容并通过新提示对其做出反应。
我希望这有帮助。如果您有任何疑问,请随时提出。