Minecraft1.7.10、Forge10.13.4.1558でのModdingの質問です。
onEntityCollidedWithBlockで、Entityが接触している際、そのEntityが動いていれば停止させ、停止していれば向いている方向に動かすブロックを作りたいのですが、tickごとに実行されてしまい、停止→動かすを繰り返してしまいます。
一度接触したEntityには一度だけ実行するようにしたいのですが、方法をご存じでしたら教えてください。
onEntityCollidedWithBlockで一度だけ実行
onEntityCollidedWithBlockで一度だけ実行
Re: onEntityCollidedWithBlockで一度だけ実行
ogachan さんが書きました: ↑2020年8月20日(木) 18:04Minecraft1.7.10、Forge10.13.4.1558でのModdingの質問です。
onEntityCollidedWithBlockで、Entityが接触している際、そのEntityが動いていれば停止させ、停止していれば向いている方向に動かすブロックを作りたいのですが、tickごとに実行されてしまい、停止→動かすを繰り返してしまいます。
一度接触したEntityには一度だけ実行するようにしたいのですが、方法をご存じでしたら教えてください。
ForgeのAPIを把握しているわけではないので、間違っていたらすみません。
関数実行時のシステムのtick値を記録しておき、再度呼ばれた際に現在のtick差から、Entityが接触した際にそれが連続で呼び出されたものであるかを判定するのはどうでしょうか?
そもそも現在のtickが取得できるかわかりませんが。
javaの時間ライブラリから現在時刻を持ってきてもできると思いますが、tickの処理落ちの際にどうなるかはわかりません。
Re: onEntityCollidedWithBlockで一度だけ実行
回答ありがとうございます
その方法だと、複数のEntityが連続で接触した時に一つのEntityしか処理されないです
Re: onEntityCollidedWithBlockで一度だけ実行
Entityをキーとした連想配列でEntityごとの接触時のtick値を保存し、識別してもだめでしょうか?
Re: onEntityCollidedWithBlockで一度だけ実行
探してみましたが、見つけられませんでした。
1tickが0.05秒なので、javaの時間で判別してみるのはどうでしょうか?