Sunwell
A portable hole in the ceiling — real sky light underground, on your terms.
Sunwell adds craftable Sunwell Lanterns that project true Minecraft sky light into enclosed spaces: crops grow, Dynamic Trees survive, daylight sensors respond, and rain can fall through — like open sky, but you hang it from a ceiling.
Pack makers get a tag-driven sunwell engine: register any block as a simple grow lamp, a full weather-aware sunwell, or anything in between — no Java required.

What makes this different
| Feature |
Sunwell Lantern |
Torch / Glowstone |
| Light type |
Sky light (what plants check) |
Block light only |
| Grows Dynamic Trees |
Yes (≥ 12 sky light) |
No |
| Daylight sensors |
Yes, when exposed to day |
No |
| Undead sun-burn |
Optional (tag + config) |
No |
| Weather & time |
Optional (tag + config) |
Always on |
| Mob spawns |
Suppressed in lit region (configurable) |
Normal rules |
Blocks included

Sunwell Lantern
- Vanilla lantern placement — floor or hanging from a ceiling
- Emits block light 15 so the room stays usable at night
- Projects virtual sky light below (full tag profile: day/night, weather, rain, burn)
- Animated glow, flame, and ambient hum on the client
- Recipe: quartz + iron bars + glowstone + glass
Soulwell Lantern
- Soul-lantern variant with block light 10
- Same sunwell behavior and tag profile as the Sunwell Lantern
- Recipe: quartz + iron bars + soul sand + glass
Tag-driven behavior (for modpacks)
Every sunwell block needs #sunwell:sunwell_source. That alone gives a static grow light — always-on virtual sky at skyLevel, no undead burn, no weather dimming, no rain.
Opt in to extra behavior with additional tags:
| Tag |
Effect |
sunwell:sunwell_source |
Required. Flood-fills virtual sky light for crops & trees |
sunwell:dynamic_exposure |
Light follows day/night, surface sky, weather, and gentle lantern flux |
sunwell:undead_burning |
Undead can sun-burn in the lit region during the day |
sunwell:rain_through |
Rain and snow fall through the region during weather |
Default mod lanterns ship with all four tags. Pack integrations (for example Liminal Industries ceiling lamps and blockofsky:sky_block) can use sunwell_source only — underground farms without burning your base or flickering light.
Datapack — static grow lamp
{
"replace": false,
"values": [
"yourmod:ceiling_lamp"
]
}
File: data/sunwell/tags/blocks/sunwell_source.json
KubeJS — static grow lamp
ServerEvents.tags('block', event => {
event.add('sunwell:sunwell_source', 'kubejs:ceiling_lamp')
event.add('sunwell:sunwell_source', 'blockofsky:sky_block')
})
KubeJS — full sunwell behavior
ServerEvents.tags('block', event => {
const block = 'yourmod:solar_panel'
event.add('sunwell:sunwell_source', block)
event.add('sunwell:dynamic_exposure', block)
event.add('sunwell:undead_burning', block)
event.add('sunwell:rain_through', block)
})
Global config toggles (enableUndeadBurning, respondToWeather, and so on) still act as master switches — tags grant capability; config can disable it pack-wide.
How it works
- Place a Sunwell Lantern (or any tagged block) on a ceiling.
- The mod flood-fills open air below, stopping at solid blocks.
- Inside that region, sky light is raised to a configurable level (default 14).
- Blocks with
dynamic_exposure dim and brighten with the outside world; static sources stay at full grow strength around the clock.
- Block light from the lantern itself keeps the room lit after dark.
Performance: bounded flood-fill with per-tick chunk and node budgets, chunk caching, and adaptive batch sizing — designed for dense lamp layouts in large underground builds.
Configuration
config/sunwell-server.toml
Region
| Option |
Default |
Description |
maxRadius |
12 |
Horizontal spread from each source (blocks) |
maxDepth |
24 |
Maximum depth below a source (blocks) |
Light
| Option |
Default |
Description |
skyLevel |
14 |
Virtual sky brightness (14 grows everything; 15 triggers vanilla canSeeSky) |
attenuateByDepth |
false |
Light falls off with distance from the source |
Behavior
| Option |
Default |
Description |
followDayNightCycle |
true |
Dim sunwell light at night for dynamic_exposure sources |
respondToWeather |
true |
Rain and storms dim dynamic_exposure sources |
respondToSurfaceLight |
true |
Tie strength to real outdoor sky above the column |
lanternFlux |
true |
Subtle flicker on dynamic_exposure sources (matches lantern VFX) |
allowRainThrough |
true |
Master switch for rain/snow through rain_through tags |
enableUndeadBurning |
true |
Master switch for undead burn on undead_burning tags |
blockHostileSpawns |
true |
Block monster spawns inside any lit region |
Performance
| Option |
Default |
Description |
nodeBudgetPerTick |
40000 |
Flood-fill cell budget per tick |
chunkBudgetPerTick |
24 |
Chunks rebuilt per tick |
Tips
- Always-on grow rooms: tag blocks with
sunwell_source only, or set followDayNightCycle = false on dynamic sources.
- Safe undead farms under lamps: omit
undead_burning, or set enableUndeadBurning = false.
- Keep
skyLevel at 14 unless you explicitly need vanilla canSeeSky() (15).
Supported versions
| Minecraft |
Forge |
Java |
Status |
| 1.20.1 |
47.4+ |
17 |
Supported |
Other Minecraft or Forge versions are not supported by this release.
Credits & license
Sunwell is an original mod by SdataG — all code, block models, textures, and client VFX were written and authored for this project. No assets or textures were ported from any prior mod.
The general idea of a ceiling-mounted virtual skylight lantern is familiar in the modding community (including older projects such as Ferreus Veritas's Skylight Lanterns); Sunwell is an independent reimplementation with its own architecture: tag-driven profiles, exposure system, rain-through weather hooks, performance budgets, soul variant, and client presentation.
License: MIT