Skip to content

Scuba Gear

BonsUnleashed edited this page Oct 8, 2026 · 4 revisions

Scuba Gear

Minecraft 1.20.1 / Forge: this page documents that build and its measurements. For the separate 171-control Minecraft 1.21.1 port, see Minecraft 1.21.1 NeoForge.

One control for Scuba Gear 1.20.1-1.0.6 (mod id scuba_gear), a fix: the equipment it gives drowned is set up inside the generation region (structure lookup and random source), which stops a server freeze with Distant Horizons and a crash with C2ME. Background on Generation context fixes. The 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
scuba_gear_generation_context Scuba Gear 1.0.6 BOTH 1.0.11 fix

scuba_gear_generation_context

Target: Scuba Gear 1.0.6 · Side: BOTH · Since: 1.0.11 (first as patched JARs 2026-09-10 and 2026-09-11) · Kind: fix Patched: com.legacy.scuba_gear.ScubaEvents (new context-taking overloads of onDrownedSpawn and isRuinOrWreckNearby) and com.legacy.scuba_gear.mixin.MobEntityMixin.finalizeSpawn (Scuba Gear's Mixin into Mob) — 1.0.19 scripts bons_and_furious-ScubaEvents.js and bons_and_furious-MobEntityMixin.js. The two scripts depend on each other (the Mixin calls the overload the other script adds) and share this one switch. Mixins (since 1.0.20): MobFinalizeSpawnMixin, ScubaEventsMixin

What upstream did. Scuba Gear equips drowned that spawn near ocean ruins and shipwrecks. Its Mob.finalizeSpawn Mixin received the ServerLevelAccessor but dropped it, so ScubaEvents searched the live world's StructureManager (up to 21,144 structure queries at radius 15) and drew from the live world's random even while the drowned was being created inside a generation region. Under Distant Horizons that blocked the server on live chunk loads; under C2ME the live random was read from a worker thread and CheckedThreadLocalRandom stopped generation with a ConcurrentModificationException.

What the patch does. The Mixin now passes its accessor to new overloads that bind the structure manager to the WorldGenRegion and use WorldGenRegion.getRandom during generation.

What stays the same. The one-argument API, the structure search order, the equipment chances and the number of random draws; ordinary, null and custom non-region contexts behave as before. Deliberate difference: a drowned created during generation rolls its gear from the region's random, so individual generated drowned can get different gear than before, with the same probabilities.

Measured. Fixes a server freeze and a C2ME crash. Distant Horizons: the ocean-ruin baseline ran 424 ticks in 70 s (6.057 TPS) with eight zero-tick windows; fixed, 3,800 ticks in 189.997 s (20 TPS); 626 fixture and 187 structural assertions. C2ME: 4,678 assertions including 2,000 concurrent spawns; the exact 172-chunk ocean-ruin replay that crashed now completes (73.094 s) and saves nine drowned, four wearing Scuba gear. The 6.057 → 20 TPS figure quoted on the project pages belongs to this reproduction alone.

Bons and Furious

Minecraft 1.20.1 / Forge 1.0.35

Compatibility

Controls by mod

Links

Clone this wiki locally