Repository navigation
Ryoamic Lights
Minecraft 1.20.1 / Forge: this page documents that build and its measurements. For the separate 170-control Minecraft 1.21.1 port, see Minecraft 1.21.1 NeoForge.
Two controls for Ryoamic Lights 0.2.3+mc1.20.1 (mod id ryoamiclights), both client-side: the chunk rebuild loops run without boxing, and block-entity light checks skip the lock while no block entity is a light source. Every switch checks the code it would change against the tested build; another build is left untouched with one WARN line (see How the patches are applied).
| Key | Target | Side | Since | Kind |
|---|---|---|---|---|
ryoamiclights_block_entity_lock_skip |
Ryoamic Lights 0.2.3+mc1.20.1 | CLIENT | 1.0.21 | opt |
ryoamiclights_chunk_iteration |
Ryoamic Lights 0.2.3+mc1.20.1 | CLIENT | 1.0.3 | opt |
Since: 1.0.3 · Side: CLIENT · Scripts (1.0.19 and earlier): furious3-BlockEntityMixin.js, furious3-EntityMixin.js
Patched: org.thinkingstudio.ryoamiclights.mixin.lightsource.BlockEntityMixin and EntityMixin (scheduleTrackedChunksRebuild)
Mixins (since 1.0.20): EntityChunkRebuildMixin, BlockEntityChunkRebuildMixin
What upstream did. Ryoamic Lights (dynamic lighting) tracks the chunks a light source touched in a LongOpenHashSet and, on every rebuild, iterated it through the boxing iterator, allocating a Long for every chunk position.
What the patch does. Calls LongIterator.nextLong() instead. The world lookup, source membership check, locks, brightness calculation, update interval and rebuild order are unchanged.
What stays the same. Every rebuild request in the original order, including tracked-set mutations and world guards.
Measured. Block-entity loop 40.3 → 30.5 ns (−24.3 %); the entity loop was neutral. A warmed JIT already removes the boxing in some runs (48 → 0 B in one repeat); the interpreter-only loop measured 232 → 40 B for eight chunks. Kept because it is exact and never slower.
Since: 1.0.21 · Side: CLIENT · Mixin: BlockEntityLockSkipMixin · Helper: bons.furious.patch.ryoamiclights.IdentityEquality
Patched: org.thinkingstudio.ryoamiclights.RyoamicLights.addLightSource and containsLightSource
What upstream did. With block-entity light sources enabled, every ticking block entity asks containsLightSource twice per client tick, and each call takes and releases the global read lock to look in the light-source set.
What the patch does. addLightSource, the only way into that set, sets a sticky flag before its write lock whenever a block entity is about to be added. While the flag is clear, containsLightSource answers false for a block entity whose class keeps Object's equals and hashCode (checked once per class through MethodHandles) without taking the lock. The world check still runs first; entities, block entities with their own equality, and everything after the first block-entity light source keep the original locked lookup. Both method bodies are otherwise Ryoamic Lights' own (MIT).
What stays the same. Every answer: 2,000 randomized add/remove traces, including a block-entity class with an unusual equals, agreed with the original, and in the 1.0.21 client run all 376 loaded block entities gave the same answer as a locked lookup of the set.
Measured. 6.3 → 3.0 ns per uncontended check, two per block-entity tick. In two client profiles the check was 0.31 % / 0.25 % of the render thread, almost all of it from block-entity ticks.
Bons and Furious is licensed GPL-3.0-only with upstream notices retained. Target mod names identify compatibility targets and do not imply endorsement; their code, assets and licenses remain their authors' property. All measurements on this wiki are focused method, phase or reproduction measurements from the pack the mod was built for, taken on the historical build named in each entry; they are not whole-game FPS or TPS promises and are not additive.
Bons and Furious
Minecraft 1.20.1 / Forge 1.0.34
- Home
- Installation and configuration
- How the patches are applied
- All controls
- Measurements and caveats
- Whole-modpack benchmark
- Troubleshooting and log messages
- Generation context fixes
- Version history
Compatibility
- Compatibility
- Known conflicts and workarounds
- Tested mod list
- Redundant mods
- Compatibility and target versions
Controls by mod
- Minecraft (51)
- Forge (6)
- Ad Astra (1)
- Alex's Caves (4)
- Alex's Mobs (2)
- Almost Unified (1)
- AmbientSounds (3)
- Architectury API (1)
- Ars Nouveau (2)
- Artifacts (1)
- Better Combat (1)
- Bosses of Mass Destruction (1)
- Butterflies (1)
- ChunkSending (1)
- CIT Reforged (1)
- Citadel (1)
- CoFH Core (1)
- Colorwheel (1)
- Cooking for Blockheads (1)
- Create (4)
- Critters and Companions (1)
- Cryptic Foes (2)
- Cucumber (1)
- Curios API (6)
- Distant Horizons (17)
- Dungeons Delight (1)
- Dynamic Trees (2)
- Embeddium (13)
- Entity Model Features (4)
- Entity Texture Features (1)
- EntityCulling (1)
- FancyMenu (1)
- Farmer's Delight (2)
- FD Bosses (2)
- Fowl Play (2)
- Fusion (2)
- GeckoLib (5)
- Goblins Tyranny (2)
- Hostile Villages (2)
- Ice and Fire (6)
- ImmediatelyFast (3)
- Immersive Engineering (1)
- Jaden's Nether Expansion (1)
- JEI (7)
- Kiwi (1)
- L2 Library (2)
- Legendary Monsters (1)
- Lionfish API (2)
- ModernFix (4)
- Mowzie's Mobs (1)
- Mutant Monsters (1)
- Nether Depths Upgrade (1)
- Occult (1)
- Oculus (12)
- Oh The Biomes We've Gone (1)
- Particular (1)
- Pehkui (1)
- Pipez (2)
- Placebo (1)
- Presence Footsteps (1)
- Radium Re-Reforged (8)
- Regions Unexplored (1)
- Relics (2)
- Ribbits (1)
- Ryoamic Lights (2)
- Sake's Structures (1)
- Scorched (1)
- Scuba Gear (1)
- Simply Swords (1)
- SlashBlade: Resharped (1)
- Slice & Dice (1)
- Spawn (4)
- Storage Drawers (2)
- Structure Gel API (1)
- Structurify (3)
- TaCZ (2)
- TerraBlender (2)
- Terramity (1)
- Under the Moon (1)
- Valkyrien Skies (15)
- Trackwork model repair
- Living Engineering (moved out in 1.0.20)
Links