Package com.hbm_m.client.compat.create
Class ContraptionDoorAnimCache
java.lang.Object
com.hbm_m.client.compat.create.ContraptionDoorAnimCache
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 TypeMethodDescriptionstatic floatchase(net.minecraft.world.level.block.entity.BlockEntity be, int openTimeTicks) static voidinvalidate(net.minecraft.world.level.block.entity.BlockEntity be) Сбросить кэш двери (напр. при разборке).
-
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) Сбросить кэш двери (напр. при разборке).
-