Skip to content

⚡ 타임 워프 및 틱 가속 엔진

📌 저장소 소스 코드 고지 사항: 이 위키의 문서는 CurseForge 및 Modrinth의 공개 릴리스 빌드에 앞서 최근 릴리스되지 않은 커밋 또는 개발 기능을 포함할 수 있는 저장소의 현재 소스 코드 상태를 반영합니다.


🔬 타임 워프 동작 원리 심층 분석

True Sleep의 핵심 혁신은 **물리적 서버 엔진 속도 (engine_tps)**와 **체감 가상 시간 속도 (virtual_tps)**를 완전히 분리한 점입니다.

CPU에 초당 1,000번의 실제 게임 틱을 강제 연산하게 하면 극심한 서버 렉과 연결 끊김이 발생합니다. 반면 True Sleep은 물리 엔진을 안정적인 설정값(기본값: $50\text{ TPS}$)으로 유지하면서 수학적 **스트라이드 승수(Stride Multiplier)**를 활용하여 세계 시간을 대폭 전진시킵니다.


📐 수학적 공식 및 스트라이드 비율

1. 스트라이드 비율 산출 공식

서버는 물리 엔진 1틱당 전진시킬 월드 틱 수를 다음과 같이 계산합니다: $$\text{Physical Target} = \min(\text{engine_tps}, \text{targetRate})$$ $$\text{Stride} = \max\left(1, \text{round}\left(\frac{\text{targetRate}}{\text{Physical Target}}\right)\right)$$

  • 기본값 연산 예시:
    • $\text{engine_tps} = 50\text{ TPS}$
    • $\text{virtual_tps} = 1000\text{ TPS}$
    • $\text{Stride} = \frac{1000}{50} = 20\times\text{ 스트라이드 승수}$
    • 결과: 서버는 50 TPS로 가볍게 작동하면서 틱당 20월드 틱을 진행시켜, 일반 CPU 부하의 2.5배만으로 $1000\text{ TPS}$의 광속 시간 진행을 완벽히 구현합니다!

2. 아침 도달 시 부드러운 감속 테이퍼링

목표 기상 시간에 근접할 때($\text{dist} < 200\text{ 틱}$) 급작스러운 시간 멈춤을 방지하기 위해 워프 엔진이 매끄럽게 감속합니다:

$$\text{progress} = \max\left(0.0, \min\left(1.0, \frac{\text{dist} - 20}{180}\right)\right)$$ $$\text{targetRate} = 20.0 + (\text{virtual_tps} - 20.0) \times \text{progress}$$


3. 조기 기상 시 15틱 선형 감속 시퀀스

침대가 부서지거나 자발적으로 일어나는 등 수면이 조기 중단될 경우, 즉시 20 TPS로 튕기지 않고 15틱에 걸쳐 선형으로 감속합니다:

$$\text{progress} = \frac{\text{decelerateTicks}}{15.0}$$ $$\text{currentRate} = 20.0 + (\text{lastWarpRate} - 20.0) \times \text{progress}$$ $$\text{stride} = \max(1, \text{round}(1 + (\text{lastWarpStride} - 1) \times \text{progress}))$$


4. 무작위 틱 속도 (randomTickSpeed) 동적 스케일링

작물 성장, 나뭇잎 부패, 구리 산화는 바닐라의 randomTickSpeed 규칙에 의해 제어됩니다. True Sleep은 수면 가속 중 이 규칙을 스트라이드에 비례하여 동적으로 확장함으로써 농장이 시간과 완벽하게 1:1로 성장하도록 보장합니다:

$$\text{newRandomSpeed} = \min(500, \text{originalRandomTickSpeed} \times \text{stride})$$


5. 단조 증가 월드 시계 정렬

목표 기상 시간에 도달하면 True Sleep은 세계 시계를 단조 증가 방향으로 안전하게 스냅합니다: $$\text{snappedTime} = \text{currentDay} + \text{wakeTime}$$ $$\text{if } \text{snappedTime} < \text{currentFull} \implies \text{snappedTime} += 24000L$$

이를 통해 세계 시계가 절대 뒤로 감기지 않으며, 햇빛 감지기나 시간에 의존하는 데이터팩이 오류 없이 정상 작동합니다.

Official documentation & web portal for Dasik Igaijinn mods.