Skip to content

SdataG/sunwell

Repository files navigation

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.

Sunwell concept art


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 renders

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)
  • Living orb VFX on the client: a soft radial glow, slowly rotating radiant light shafts, and a storm-reactive orb that dims, cools, and flickers with rain and thunder
  • Rare lightning through the lantern during thunderstorms — far more often near a lightning rod
  • 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) can use sunwell_source only — underground farms without burning your base, without weather flicker, without rain/snow shafts or lightning.

Full weather presentation — storm-reactive orb (dim/cool/flicker), rain & snow falling through, rotating radiant shafts, and rare lightning through the column — requires both dynamic_exposure and rain_through. Default Sunwell / Soulwell lanterns include both; pack blocks must opt in explicitly.

Datapack — static grow lamp

{
  "replace": false,
  "values": [
    "yourmod:ceiling_lamp"
  ]
}

File: data/sunwell/tags/blocks/sunwell_source.json (on Minecraft 1.21+ this folder is singular: data/sunwell/tags/block/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

  1. Place a Sunwell Lantern (or any tagged block) on a ceiling.
  2. The mod flood-fills open air below, stopping at solid blocks.
  3. Inside that region, sky light is raised to a configurable level (default 14).
  4. Blocks with dynamic_exposure dim and brighten with the outside world; static sources stay at full grow strength around the clock.
  5. 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. Removing a source re-floods and clears its region, and the client re-renders the affected area so the lit space updates immediately (no stale "still exposed to sky" lighting).


Presentation & weather VFX

Full-profile lanterns (dynamic_exposure + rain_through) come alive with the weather — all rendered additively with no depth-write, so nothing z-fights or "tears":

  • Radial glow — a soft round halo around the orb (no hard-edged square overlay).
  • Radiant shafts — a slowly rotating star-burst of light shafts from the orb; they lengthen and brighten during storms.
  • Storm-reactive orb — in rain and thunder the orb takes a cool, overcast tint and picks up a deeper, restless flicker; calm weather stays a gentle ambient breathe.
  • Rain & snow shafts — precipitation falls through the lit region in a widening cone, splashing on the floor.
  • Lightning through the column — a rare visual bolt during thunderstorms, far more frequent near a lightning rod (lightningRodBoost). Visual-only by default (flash + sound, no fires).

Every effect is gated by config (lanternFlux, respondToWeather, weatherShaftParticles, lightningThroughOdds, lightningRodBoost) so packs can dial it back or off.


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
weatherShaftParticles true Client rain/snow shafts + weather particles (full lantern profile only)
lightningThroughOdds 80000 1-in-N server tick chance for thunder lightning through full-profile lanterns (0 = off)
lightningRodBoost 40 Lightning strikes this many times more often on a column with a vanilla lightning rod within 4 blocks (1 = no bonus)
lightningVisualOnly true Sunwell lightning bolts do not set fires
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.
  • Liminal Industries / sealed backrooms bases: ceiling grow lamps use sunwell_source only (no weather dimming). For portable Sunwell Lanterns underground, set followDayNightCycle = false in config/sunwell-server.toml so crops keep growing at night. Pair with respondToWeather = false if you do not want rain shafts indoors.
  • 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 Loader Java Status
1.20.1 Forge 47.4+ 17 Supported
1.21.1 NeoForge 21.1+ 21 Supported (NeoForge port)

The 1.21.1 NeoForge build is a standalone port of the same engine. It carries the full lantern/VFX and tag-driven light system; it does not bundle the optional Amendments wall/hand-lantern integration that ships on 1.20.1. Data-pack tag folders on 1.21+ are singular (tags/block, recipe, loot_table). Other Minecraft or loader versions are not supported.


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

Links: GitHub · Project page

About

No description, website, or topics provided.

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors