ページ 11

onEntityCollidedWithBlockで一度だけ実行

Posted: 2020年8月20日(木) 18:04
by ogachan

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


Re: onEntityCollidedWithBlockで一度だけ実行

Posted: 2020年8月20日(木) 20:11
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の処理落ちの際にどうなるかはわかりません。


Re: onEntityCollidedWithBlockで一度だけ実行

Posted: 2020年8月20日(木) 20:23
by ogachan

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


Re: onEntityCollidedWithBlockで一度だけ実行

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

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

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


Re: onEntityCollidedWithBlockで一度だけ実行

Posted: 2020年8月21日(金) 04:28
by ogachan

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


Re: onEntityCollidedWithBlockで一度だけ実行

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

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

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


Re: onEntityCollidedWithBlockで一度だけ実行

Posted: 2020年8月21日(金) 20:40
by ogachan

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