Class ContraptionDoorAnimCache

java.lang.Object
com.hbm_m.client.compat.create.ContraptionDoorAnimCache

public final class ContraptionDoorAnimCache extends Object
Renderer-owned chase-кэш плавной анимации двери на контрапшене.

Проблема: toggling OPEN/PASSABLE blockstate на контрапшене вызывает resetClientContraption — клиентский DoorBlockEntity пересоздаётся из замороженного NBT (state=0), а значит вести анимацию через be.state нельзя (мерцание/конвульсия). Вместо этого DoorRenderer на контрапшене читает синкаемое OPEN blockstate-свойство и гонит прогресс к таргету (0/1) здесь, в кэше, привязанном к стабильному (level, pos).

Level на контрапшене = VirtualRenderWorld (один экземпляр на ClientContraption, переживает resetRenderLevel), на земле = ClientLevel. pos = локальная позиция BE. Оба стабильны между пересозданиями BE.

  • Method Summary

    Modifier and Type
    Method
    Description
    static float
    chase(net.minecraft.world.level.block.entity.BlockEntity be, int openTimeTicks)
     
    static void
    invalidate(net.minecraft.world.level.block.entity.BlockEntity be)
    Сбросить кэш двери (напр. при разборке).

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Method Details

    • chase

      public static float chase(net.minecraft.world.level.block.entity.BlockEntity be, int openTimeTicks)
      Parameters:
      openTimeTicks - время открытия в тиках (DoorDecl.getOpenTime).
      Returns:
      прогресс открытия 0..1, плавно догоняющий OPEN-таргет blockstate.
    • invalidate

      public static void invalidate(net.minecraft.world.level.block.entity.BlockEntity be)
      Сбросить кэш двери (напр. при разборке).