onEntityCollidedWithBlockで一度だけ実行

MOD・プラグイン・ツールなどの開発に関する質問はこちら
ogachan

onEntityCollidedWithBlockで一度だけ実行

投稿記事 by ogachan »

Minecraft1.7.10、Forge10.13.4.1558でのModdingの質問です。
onEntityCollidedWithBlockで、Entityが接触している際、そのEntityが動いていれば停止させ、停止していれば向いている方向に動かすブロックを作りたいのですが、tickごとに実行されてしまい、停止→動かすを繰り返してしまいます。
一度接触したEntityには一度だけ実行するようにしたいのですが、方法をご存じでしたら教えてください。

penM
サーバー管理者
記事: 150
登録日時: 2019年7月23日(火) 02:14

Re: onEntityCollidedWithBlockで一度だけ実行

投稿記事 by penM »

ogachan さんが書きました: 2020年8月20日(木) 18:04

Minecraft1.7.10、Forge10.13.4.1558でのModdingの質問です。
onEntityCollidedWithBlockで、Entityが接触している際、そのEntityが動いていれば停止させ、停止していれば向いている方向に動かすブロックを作りたいのですが、tickごとに実行されてしまい、停止→動かすを繰り返してしまいます。
一度接触したEntityには一度だけ実行するようにしたいのですが、方法をご存じでしたら教えてください。

ForgeのAPIを把握しているわけではないので、間違っていたらすみません。
関数実行時のシステムのtick値を記録しておき、再度呼ばれた際に現在のtick差から、Entityが接触した際にそれが連続で呼び出されたものであるかを判定するのはどうでしょうか?
そもそも現在のtickが取得できるかわかりませんが。
javaの時間ライブラリから現在時刻を持ってきてもできると思いますが、tickの処理落ちの際にどうなるかはわかりません。

ogachan

Re: onEntityCollidedWithBlockで一度だけ実行

投稿記事 by ogachan »

回答ありがとうございます
その方法だと、複数のEntityが連続で接触した時に一つのEntityしか処理されないです

penM
サーバー管理者
記事: 150
登録日時: 2019年7月23日(火) 02:14

Re: onEntityCollidedWithBlockで一度だけ実行

投稿記事 by penM »

ogachan さんが書きました: 2020年8月20日(木) 20:23

回答ありがとうございます
その方法だと、複数のEntityが連続で接触した時に一つのEntityしか処理されないです

Entityをキーとした連想配列でEntityごとの接触時のtick値を保存し、識別してもだめでしょうか?

ogachan

Re: onEntityCollidedWithBlockで一度だけ実行

投稿記事 by ogachan »

ありがとうございます
tick値の取得方法が判らないです

penM
サーバー管理者
記事: 150
登録日時: 2019年7月23日(火) 02:14

Re: onEntityCollidedWithBlockで一度だけ実行

投稿記事 by penM »

ogachan さんが書きました: 2020年8月21日(金) 04:28

ありがとうございます
tick値の取得方法が判らないです

探してみましたが、見つけられませんでした。
1tickが0.05秒なので、javaの時間で判別してみるのはどうでしょうか?

ogachan

Re: onEntityCollidedWithBlockで一度だけ実行

投稿記事 by ogachan »

ありがとうございます
その方法でやってみます。またわからないことがあったら質問します。

返信する