11時41分]bukkitでplayerがブロックの上に乗った場合を検出するいただいたご質問の返信として。自分もプラグイン作り始めて2週間くらいの初心者なので他にもっと有用な方法が無いかも探してみてくださいね。今ほしいのですが、playerがブロックの上に乗った場合のevent?ソースコード?がないのでコメントさしてもらいました。「プレイヤーが移動した」という"PlayerMoveEvent"を使用しつつその移動先が目標ブロックの上かどうかを調べることになると思う。「プレイヤーがレッドストーンブロックの上に立ったらサーバーメッセージを流す」ように書いてみた。}}まずonPlayerMoveEventメソッドでPlayerMoveEvent(プレイヤーが移動した)イベントを捕まえる。つぎにプレイヤーが今地面の上に立っているのかを確認するためisOnGround()メソッドでtrueが返ることを確認する。最後に、プレイヤーの足元10センチ下のところに何があるか確認し、レッドストーンブロックであればサーバーメッセージを流している。ハーフブロックの高さが50センチなので、今回は「10センチ」下のブロックを判定基準にしてみた。50センチより大きな数字を使ってしまうと、ハーフブロックの上に立ったとき、ハーフブロックの高さをすり抜けて、その下にあるブロックを判定基準にしてしまう。ところで、Entity#isOnGround()メソッドについてひとつ気になったので補足。moves.」(この値はエンティティが移動しない限り再計算されない)と書かれていて、実際ためしたところ「ブロックの上でジャンプして、ブロックにまっすぐ着地した場合」に、isOnGround()がfalseを返してしまう。次に一歩歩こうとした段階で、再計算されて、isOnGround()がtrueを返し始める。このため、ジャンプや飛行から着地した瞬間を見定めるには上記では足らない。このあたりをもっと厳密にチェックしたい場合は、isOnGround()を使わずにプレイヤーの位置のY座標を見て地面から1ミリ以上浮いていないことを確認してついでにクリエイティブで飛行中でないことを確認するためPlayer#isFlying()でfalseが返ることを確認する...とか色々試行錯誤が必要になるかと思う。ご不明な点があればまたコメント下さい。すいません、依頼は付けつけてません。前回と同じブロックの上に立っている場合はメッセージを抑止する、というのがいいんじゃないかな。Location#getBlock()を使ってBlockオブジェクトを取得する。次回もう一度同じイベントが着たら、また同様にBlockオブジェクトを取得する。2回のBlockが同じオブジェクトなら、同じブロックの上を移動したと判断してメッセージを出さない。PlayerMoveEventの場合、ピストンとかで押された場合に発生しないので、1Tickごとに判定してもいいかなと思います。初めまして、ブルーという者です。このページにあるコードを一部改変(レッドストーンブロックを鉄ブロックに変更)してサーバーで実行したのですが、首を回す(マウスを動かした状態)だけで下のブロックに対するあたり判定が消え、地中に生き埋めになってしまいました。原因がわからず、この原理を応用したプラグインが作成できず、困っており、ぜひ解決方法などをご教示いただければ幸いです。ブルーさんこんにちは。たしかに地面に沈みますね。以下のように、コードを1行書き換えてみてください。処理速度の向上目的かなにかで、プレイヤーの座標そのものを返すようになり、それをloc.add(0,-0.1,0);してしまったためにプレイヤーを10センチ沈ませたんだと思います。「.clone()」を追加することで、座標をコピーしたLocationオブジェクトが返されるようになるので、記事記載時点の挙動に治ります。返信ありがとうございます。ご指摘くださった部分を書き換えたところ、無事に問題を解決することができました。ありがとうございました。RSS2.0最近のコメントおー、お役に立てたようでなによりです。再起...[9/11]この記事が非常の役立ちました。おかげさまで...[9/9]1.14.2のAPIで試しましたが、MapInitializeEv...[9/9]天晴れ!押したらポーションのモヤモヤでまし...[5/26]習うより慣れろって感じで。記事へのリンクは大歓迎です。連絡不要でご自由に貼ってください。画像や添付ファイルへの直リンクはご遠慮願います。