# Skybox
> OptiFine-style custom skybox driven by Lectern. Server pushes a config; the Fabric client renders a textured cube during the sky pass, analogous to the Skyboxify mod (single layer, no biome / height filters).
`gg.lode.lecternapi.api.sky.Skybox`
---
## Signature
```java
public record Skybox( String id, String texturePath, int startFadeIn, int endFadeIn, int startFadeOut, int endFadeOut, Blend blend, boolean rotate, float axisX, float axisY, float axisZ )
```
---
## Notes
The texture must be a 3:2 OptiFine cube atlas (e.g. 3072×2048). UV layout
(matches OptiFine + Skyboxify):
```java
+--------+--------+--------+
| BOTTOM | TOP | EAST | row 0 (v = 0.0, 0.5)
+--------+--------+--------+
| SOUTH | WEST | NORTH | row 1 (v = 0.5, 1.0)
+--------+--------+--------+
```
Fade times are stored as raw Minecraft daytime ticks (0(23999, where 0 =
sunrise / 06:00, 6000 = noon, 12000 = sunset, 18000 = midnight). Server can
compute these from OptiFine "HH:MM" via `int)`.
---
## Variants
| Type | Description |
|---|---|
| `Blend` | Values: `ADD`, `MULTIPLY`, `NORMAL` |
---
## Methods
### ticksFromClockTime
```java
public static int ticksFromClockTime(int hour, int minute)
```
Convert OptiFine HH:MM clock time → Minecraft daytime ticks.
| Parameter | Type |
|---|---|
| `hour` | `int` |
| `minute` | `int` |
---
### always
```java
public static Skybox always(String id, String texturePath)
```
Always-visible skybox (no fade), with ADD blend + Y-axis rotation.
| Parameter | Type |
|---|---|
| `id` | `String` |
| `texturePath` | `String` |
---
### night
```java
public static Skybox night(String id, String texturePath)
```
Night skybox between dusk (19:00) and dawn (5:25), ADD blend, Y rotation.
| Parameter | Type |
|---|---|
| `id` | `String` |
| `texturePath` | `String` |
---