# 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` | ---