問題タブ [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.

0 投票する
1 に答える
499 参照

bash - bashのバッファパイプ

LinuxマシンでBukkit(Minecraft)サーバーを実行していますが、サーバーのコマンドを使用してサーバーを正常にシャットダウンし、コマンドラインからstop使用して特定の時間にコンピューターを一時停止させたいと考えています。pm-suspendこれが私が持っているものです:

(私は編集した/etc/sudoersので、一時停止するときにパスワードを入力する必要はありません。)

問題は、perl -eがスリープしている間、サーバーは一定のバイトストリームを期待しているため(これは私の推測です。何かを誤解している可能性があります)、受信したものをすべて出力し、貴重なリソースを消費します。

バッファリングされたパイプのようなものはありますか?そうでない場合、遅延入力をスクリプトに送信する方法はありますか?

0 投票する
1 に答える
3665 参照

php - fsockopenを使用してサーバーに接続する-接続が拒否されました

私がやろうとしているのは、私のWebサイトにVotifierプラグインのサポートを追加することです。

Minecraftサーバーの正しいポートを転送し、テストして、それらが開いていることを確認しました。また、 Minestatusを使用して、Votifierプラグインが正しく機能していることを確認しました。

ただし、サーバーに接続するために見つけたPHPスクリプトを使用しようとすると、接続が拒否されるだけです。

おそらく暗号化が正しくないために、Votifierが接続を切断しているようです。

0 投票する
1 に答える
897 参照

clojure - ClojureとのJava相互運用機能、プラグインを読み込めませんでした

ClojureでBukkitプラグインを作成しようとしています。

通常、BukkitプラグインはPluginクラスをオーバーライドする必要がonEnable()あり、onDisable()メソッドがあります。結果がJARファイルにあり、 plugin.ymlが定義されているなど、他にもいくつかの要件がありますが、私にはそれがすべてあります。

私のコードは問題なくコンパイルされますが、サーバーにロードしようとすると、次の例外が発生します。

0 投票する
2 に答える
185 参照

java - コマンドを再度実行しても変数がリセットされない

プレイヤーの総合的な経験を出力するコードがあります。

問題は、実際のXPが変更されても、出力されるXP値が変更されないことです。たとえば、レベル50,000では、XPは2,147,483,647でした。レベルが4に下がったとき、XP値は同じままでした。

実行後にこの値をリセットして、XPを再チェックし、変数を新しい量で更新するにはどうすればよいですか?

0 投票する
1 に答える
2313 参照

java - デフォルト構成から値がコピーされない

私はこのコードを書きました:

このconfig.ymlファイルを JAR 内に取り込んで出力する目的で、次のようにします。

しかし、私がこのように呼び出すと:

値はコピーされません:

0 投票する
1 に答える
10108 参照

java - YAML パスの下にあるすべてのノードを取得する

次のような YAML ファイルがあります。

の下にすべてのノードを取得する方法はありMainますか?

0 投票する
1 に答える
8589 参照

java - プレーヤーの在庫を保存する

世界を転送できるようにするコマンドに取り組んで、プレーヤーのインベントリを保存しようとしています。

問題は 130 行目です。

私はこのスタックトレースを取得します:

0 投票する
2 に答える
407 参照

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():ブロック変更を送信します。これは、特定の場所にいるユーザーのブロック変更パケットを偽造します。これは実際には決して世界を変えることはありません。

0 投票する
1 に答える
818 参照

java - 別のタスクが作成されたときに遅延タスクをキャンセルする

現在、ボタンをクリックするたびに実行される遅延タスクがあります。ボタンをクリックすると、ブール値が に切り替わり、true7 秒後に遅延タスクによってfalse再び に設定されます。

ただし、人がボタンを複数回クリックすると、遅延タスクが積み重なるため、ブール値のオンとオフ、オンとオフなどが切り替わります。ボタンが複数回クリックされた場合、すべての遅延タスクが互いに積み重なる代わりに、単に遅延タスクを延長する方法はありますか?

したがって、ボタンがクリックされると、遅延タスクがブール値を から に切り替える前に 7 秒間待機するとtrueします。false遅延タスクが実行されていないときにボタンをもう一度押すと、前のタスクをキャンセルして次の遅延タスクを実行するようにコードを変更するにはどうすればよいですか (私はこれをサーバーに使用しているため、前のタスクを単にキャンセルしても意味がない場合があります)。それは実際の遅延タスクであったが、他のタスクだった)?