tick
別名: Tick
目次
tickとはサーバーの処理が1回進む単位、またはその処理が行われること自体を指す
ゲームティックと同じ意味で使われる場合がある
通常では1tickは0.05秒であり、0.05秒経つことで「1tick経過する」と言える
また、エンティティなどに対して、処理が進むことを「tickされる」ということもある
サーバーのtick順序#
サーバーのtickは以下の順で進む
1. ワールドボーダー、天候、睡眠判定や時刻関連
2. 予約されたtick
3. 襲撃イベント
4. チャンクのロード/アンロード、ランダムティック、スポーン
5. ブロックイベント
6. エンティティ
7. ブロックエンティティ
このうち、6,7はそのディメンションにアクティブなチケットがない状態が300tick続くと停止する。
tick対象エンティティの決定#
エンティティのいるチャンクが読み込みレベル31以下の場合、そのエンティティはtick対象のリストに入れられる。
この時リストに入れられた順にtickされる
リストに入れた順ではなくエンティティのID順じゃないのか
通常、エンティティが生成されてIDが振られたすぐ後にリストに入れられるのでID順とリスト順は一致することが多い
ただし、一度LazyChunkに入ってからEntityTickingに戻ってきた場合は、IDはそのままにリストの末尾に入るのでこの場合は一致しない
そして順にtickされる。
tickされたエンティティは順に判定があり
1. すでにゲームから削除された判定のエンティティはスキップする
2. /tick freezeなどで凍結されているならスキップする
3. デスポーンするかを判定する
4. チャンクがレベル31以上のシミュレーションチャンクでないならスキップする
5. 乗り物に乗っている場合はスキップする
3と4の順序関係
デスポーン判定のほうがシミュレーションチャンク判定よりも先に来ることで
ポータルチケットなど、 FLAG_LOADING と FLAG_SIMULATION が同じならLazyChunkではデスポーンしないのに対し
描画距離内に入っている遠くのMOBは演算距離に関係なく(LazyChunkでも)デスポーンするよう
ただしこれは描画距離が演算距離より大きい場合の話であり、これらは同じ値にするのが望ましいとされている
エンティティ共通のtick順#
1. 移動量の計測
2.乗り物が削除済みなら降りる
3. ポータル関連の処理
4. パーティクル処理
5. 粉雪フラグのリセット、液体関連の処理(押し出しや泳ぎ判定)
6. 炎上ダメージ
7. リードの処理
これらはbaseTick()にあり、移動などの処理はそれぞれのエンティティが自前で処理している