問題タブ [bukkit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
bash - bashのバッファパイプ
LinuxマシンでBukkit(Minecraft)サーバーを実行していますが、サーバーのコマンドを使用してサーバーを正常にシャットダウンし、コマンドラインからstop
使用して特定の時間にコンピューターを一時停止させたいと考えています。pm-suspend
これが私が持っているものです:
(私は編集した/etc/sudoers
ので、一時停止するときにパスワードを入力する必要はありません。)
問題は、perl -e
がスリープしている間、サーバーは一定のバイトストリームを期待しているため(これは私の推測です。何かを誤解している可能性があります)、受信したものをすべて出力し、貴重なリソースを消費します。
バッファリングされたパイプのようなものはありますか?そうでない場合、遅延入力をスクリプトに送信する方法はありますか?
php - fsockopenを使用してサーバーに接続する-接続が拒否されました
私がやろうとしているのは、私のWebサイトにVotifierプラグインのサポートを追加することです。
Minecraftサーバーの正しいポートを転送し、テストして、それらが開いていることを確認しました。また、 Minestatusを使用して、Votifierプラグインが正しく機能していることを確認しました。
ただし、サーバーに接続するために見つけたPHPスクリプトを使用しようとすると、接続が拒否されるだけです。
おそらく暗号化が正しくないために、Votifierが接続を切断しているようです。
clojure - ClojureとのJava相互運用機能、プラグインを読み込めませんでした
ClojureでBukkitプラグインを作成しようとしています。
通常、BukkitプラグインはPlugin
クラスをオーバーライドする必要がonEnable()
あり、onDisable()
メソッドがあります。結果がJARファイルにあり、 plugin.ymlが定義されているなど、他にもいくつかの要件がありますが、私にはそれがすべてあります。
私のコードは問題なくコンパイルされますが、サーバーにロードしようとすると、次の例外が発生します。
java - コマンドを再度実行しても変数がリセットされない
プレイヤーの総合的な経験を出力するコードがあります。
問題は、実際のXPが変更されても、出力されるXP値が変更されないことです。たとえば、レベル50,000では、XPは2,147,483,647でした。レベルが4に下がったとき、XP値は同じままでした。
実行後にこの値をリセットして、XPを再チェックし、変数を新しい量で更新するにはどうすればよいですか?
java - デフォルト構成から値がコピーされない
私はこのコードを書きました:
このconfig.ymlファイルを JAR 内に取り込んで出力する目的で、次のようにします。
しかし、私がこのように呼び出すと:
値はコピーされません:
java - YAML パスの下にあるすべてのノードを取得する
次のような YAML ファイルがあります。
の下にすべてのノードを取得する方法はありMain
ますか?
java - プレーヤーの在庫を保存する
世界を転送できるようにするコマンドに取り組んで、プレーヤーのインベントリを保存しようとしています。
問題は 130 行目です。
私はこのスタックトレースを取得します:
java - Java関数の戻り値をチェックすると、関数が実行するアクションをどのように変更できますか?
関数safeBreak()がCall 1で期待どおりに実行されるのに、Call2またはCall2.1では実行されないのはなぜですか?
MinecraftBukkitプラグインToolBeltに取り組んでいます。
プラグインのツールの1つ(PickHax)を使用すると、プレーヤーは定義されたマテリアル(デフォルトはDIAMOND_PICKAXE)を保持したままブロックを削除できます。リージョン保護(WorldGuardなど)とロギング(HawkEyeなど)を提供する他のプラグインに可能な限り幅広いサポートを提供するために、BlockBreakEventを作成して呼び出します。これを行うコードは次のとおりです。
ToolBeltの現在のリリース(0.1)では、これは非常にうまく機能し、プレーヤーがサーバーのその領域(WorldGuard)に対する権限を持っていない場合、ブロックを削除しません。ターゲットのブロックをに設定しevent.getClickedBlock()
、サブジェクトのプレーヤーをevent.getPlayer()
に設定し、物理ブール値をtrue
左クリックしfalse
た場合と右クリックした場合に設定します。バージョン0.1での呼び出しは次のとおりです。
電話1
私は現在、遠隔ブロック削除をサポートする新しいバージョンに取り組んでいます。ユーザーがしゃがんでいて範囲許可ノードを持っているかどうかに応じて、ターゲットブロックはevent.getClickedBlock()
またはによって設定されsubject.getTargetBlock(null,25)
ます。これは、1つの場合を除いて正常に機能します。
- ケース1:実際にブロック(LEFT_CLICK_BLOCK / RIGHT_CLICK_BLOCK)をクリックした場合、いずれかの物理設定で変更が表示されます。
- ケース2:範囲内でブロックを取得し、物理特性が
true
(LEFT_CLICK_AIR)の場合、変更が表示されます。 - ケース3:ただし、範囲内でブロックを取得し、物理演算が
false
(RIGHT_CLICK_AIR)である場合、クライアントでブロックの更新は表示されません。ログオフして再度ログオンすると、変更が表示されるため、変更はサーバー側で行われます。
この問題を軽減するためsubject.sendBlockChange()
に、偽のブロック変更をユーザーに送信することになっているを使用しようとしましたが、サーバーを変更することはありません。これにより、ユーザーは常に自分が行ったことを確認できます。したがって、新しいコード:
電話2
ただし、何らかの理由で、実行中safeBreak()
と実行中の変更if(safeBreak()) sendBlockChange()
により、リージョン保護(WorldGuard)が尊重されなくなります。ユーザーはWorldGuardからプリントアウトを受け取りますが、ビルド権限がないことを警告しますが、ボックは壊れます。
の説明.sendBlockChange()
が正確でなく、実際に世界を変えていない場合に備えて、「無害な」印刷メッセージで試してみました
2.1に電話する
Call 2.1を実行するときに、ブロックを解除する権限がある地域にいる場合、「エラーはまだ存在しますか?」というメッセージが表示されます。メッセージですが、制限区域にいるときはしません。これはsafeBreak()
、ブロックを壊すべきかどうかについて正しい値を返しているが、どういうわけかまだブロックを壊していることを意味します。.sendBlockChange()
また、 Call 2がないため、ケース3の問題が再度発生します。
電話3
これで、コードはの戻り値をチェックする以外のアクションはsafeBreak()
ありませんが、制限された領域のブロックを壊します。コール1に切り替えましたが、制限区域のブロックは壊れませんでした。
これで元の質問に戻ります。ToolBelt.jarを再コンパイルできますが、唯一の違いはCall1とCall2であり、問題を確実に再現できます。コール1が設定されている場合、リージョンサポートは尊重されますが、ケース3はクライアントを更新しません。コール2が設定されている場合、クライアントは常にブロックの更新を取得しますが、任意のリージョンのブロックを削除できます。
ケース3(範囲内での物理的除去なし)を許可せず、Call 1を使用することで問題を回避できますが、ツールの機能を損なうことはありません。Call1が問題なく機能するのにCall2とCall2.1がリージョンで機能しない理由を誰かが知っていますか?
関心のあるドキュメントリンク:
ブロック:ブロックを表します。これはライブオブジェクトであり、ワールド内の特定の場所に存在できるブロックは1つだけです。
プレーヤー:接続されているかどうかに関係なく、プレーヤーを表します
.isCanceled():このイベントのキャンセル状態を取得します。キャンセルされたイベントはサーバーで実行されませんが、他のプラグインに渡されます
.sendBlockChange():ブロック変更を送信します。これは、特定の場所にいるユーザーのブロック変更パケットを偽造します。これは実際には決して世界を変えることはありません。
java - 別のタスクが作成されたときに遅延タスクをキャンセルする
現在、ボタンをクリックするたびに実行される遅延タスクがあります。ボタンをクリックすると、ブール値が に切り替わり、true
7 秒後に遅延タスクによってfalse
再び に設定されます。
ただし、人がボタンを複数回クリックすると、遅延タスクが積み重なるため、ブール値のオンとオフ、オンとオフなどが切り替わります。ボタンが複数回クリックされた場合、すべての遅延タスクが互いに積み重なる代わりに、単に遅延タスクを延長する方法はありますか?
したがって、ボタンがクリックされると、遅延タスクがブール値を から に切り替える前に 7 秒間待機するとtrue
します。false
遅延タスクが実行されていないときにボタンをもう一度押すと、前のタスクをキャンセルして次の遅延タスクを実行するようにコードを変更するにはどうすればよいですか (私はこれをサーバーに使用しているため、前のタスクを単にキャンセルしても意味がない場合があります)。それは実際の遅延タスクであったが、他のタスクだった)?