基本的に私がやろうとしているのは、プレーヤーに数字のみを入力するように要求するメッセージに応答させることです。その時点から、String を解析して int にし、それをコードの残りの部分で使用できます。また、これが私のイベントメソッドで発生するようにしようとしています。どんな助けでも大歓迎です!
2 に答える
基本的にやりたいことは、次に話すまでプレーヤーをコンテナに保管してから、それらを削除することです。これを疑似コードで表すと、次のようになります。
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())
。弱い参照は、他のすべての参照が削除されるとガベージ コレクションされるため、メモリ リークのリスクが軽減されます。
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) の 1 つを拡張するか、Prompt 抽象クラスを実装するクラスとして作成します。
メソッド getPromptText() および acceptInput() に入力します。getPromptText() はプレーヤーに表示されるメッセージを作成し、acceptInput() はプレーヤーが入力した内容を受け取り、新しいプロンプトでそれに反応します。
これが役に立ったことを願っています。ご不明な点がございましたら、お気軽にお問い合わせください。