Table of Contents
- Patch reference
- Overview
- Per-patch details (0133–0224)
- Folia race fixes (13 + 1 off-stack)
- Anti-lag-machine and anti-dupe — anarchy target (10)
- Behavior-identical perf opts — always-on, NO toggle (40)
- Gated perf opts — slight observable effect (5)
- Gameplay features (6)
- Client protocols and network (5)
- Debug / commands (5)
- Preprod-off — rbtest bake required before any ON (8)
- Lophine base (0001–0132) — summary and pointer
- Togglability audit
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
Patch reference
Per-patch reference of the Folikaii fork (Lophine 26.2 base, branch ekaii-26.2). Two reading directions: patch → option (this page) and option → patch (Options).
Consolidated sources: PATCHES.md, PICKS.md, GAP-ANALYSIS.md, BATCH5-PORTED.md, CENSUS.md. Keys and defaults were re-verified against the fr.ekaii.config.modules modules in the source tree (@ConfigClassInfo/@ConfigInfo annotations).
Overview
- 224 minecraft patches in
luminol/lophine-server/minecraft-patches/features/: 0001–0132 = Lophine base (summarized at the end of this page, details in CENSUS.md), 0133–0224 = 92 Folikaii patches (plus one direct src/main change with no patch number — pick 1.9, see "Folia race fixes"). - Also on the Folikaii side: 5 server paper-patches (0024–0028: copper-golem AR, criterion thread-check, canSee, sculk-exp, tile-snapshot) and 2 API patches (0015 EntityDamageEvent, 0016 sculk-exp).
- Togglability principle: every observable behavior added is togglable through the
ekaiiconfig instance (ekaii_config/ekaii_global_config.toml,/ekaiiconfigcommand). Code defaults = stock/vanilla (4 documented exceptions, see Options). Strictly behavior-identical micro-optimizations are always-on and flagged as such. - GPLv3/AGPL attribution: each
.patchkeeps the original author'sFrom:plus a provenance line naming the source project.
Summary by group
| Group | Patches | Count | Overall gain | Togglable |
|---|---|---|---|---|
| Folia race fixes | 0135, 0143–0150, 0182, 0187, 0205, 0224 | 13 | Multi-region stability: triggerable crashes/CME/NPE, RegionFile corruption, out-of-region write races | Partial — 7 gated (default off), 6 pure fixes always-on |
| Anti-lag-machine and anti-dupe (anarchy) | 0158, 0183–0185, 0188–0189, 0201, 0206, 0222–0223 | 10 | Neutralizes lag machines (sand, TNT, portals, projectiles, spawns) and closes a hopper dupe class | Yes — all gated (2 default-ON toggles: 0184, 0185) |
| Behavior-identical perf opts | 0136–0142, 0159–0180 (excl. gated), 0186, 0190–0200 (excl. gated), 0219 | 40 | CPU/allocations/network, result identical to stock | No — deliberately always-on and flagged (incl. one sensitive case: 0159) |
| Gated perf opts (slight observable effect) | 0133–0134, 0152, 0181, 0203 | 5 | Entity/AI/XP performance with a measurable gameplay effect | Yes — incl. 1 trap default-ON (0134) |
| Gameplay features | 0154–0156, 0194, 0202, 0216 | 6 | Gameplay/policy dials (default = vanilla) | Yes |
| Client protocols and network | 0153, 0157, 0199, 0213, 0215 | 5 | Network flush, packet filtering, anti-ESP, keepalive, non-reportable chat | Yes |
| Debug / commands | 0151, 0204, 0207–0208, 0220 | 5 | Admin tools (network diag) and builder commands (/clone, /spreadplayers, /schedule) | Yes (0207 read at boot only) |
| Preprod-off (rbtest bake required) | 0209–0212, 0214, 0217–0218, 0221 | 8 | Perf/anti-cheat to validate before production | Yes — all off by default (0211: default = stock) |
Total: 92 patches (0133–0224).
Per-patch details (0133–0224)
Columns: no. | short name | source (fork + original author) | what it does | gain | toggle (key + default + profile). Profiles: C = creaclone (whitelisted creative), A = anarchy (eternel.eu, cracked).
Folia race fixes (13 + 1 off-stack)
| No. | Name | Source | What it does | Gain | Toggle |
|---|---|---|---|---|---|
| 0135 | RegionFile concurrent mutation race | ekaii (exo), ex-0075 of the 26.1.2 fork | Locks concurrent RegionFile mutation under Folia regions; complementary layer to the upstream BufferedLinear fixes | chunk-corruption fix | (!) NO toggle — deliberately always-on (corruption fix) |
| 0143 | EntitySelector AABB cross-region | Canvas (989ae18b) | @e with AABB: collects without AABB then filters intersects+predicate instead of reading out of region |
crash fix (thread-check trip) | fixes.entity_selector_region_safe.enabled = false; ON C+A |
| 0144 | FishingHook cross-region | Canvas (c0939dba) | Checks TickThread.isTickThreadFor(hooked) on rod tick when the hooked entity changed region |
crash fix | fixes.fishing_hook_cross_region.enabled = false; ON C+A |
| 0145 | TamableAnimal owner teleport cross-region | Canvas (98102b62) | getBlockStateIfLoaded + bypass of the out-of-region collision check in canTeleportTo/maybeTeleportTo |
crash fix + restores vanilla tamed-animal teleport | fixes.tamable_cross_region_teleport.enabled = false; ON C+A |
| 0146 (+paper 0025) | Criterion triggers async → CME | Canvas (8aba8c2b + 14553ed3) | ensureTickThread/scheduleOrExecute in SimpleCriterionTrigger, ServerRecipeBook, LightningBolt, LivingEntity, PlayerAdvancements award/revoke |
crash fix (advancements CME) | pure fix, always-on |
| 0147 | disconnectPos NPE | Canvas (f7d6134b) | One-line null guard in RegionizedWorldData.cleanUpConnection | crash fix | pure fix, always-on (Lophine upstream candidate) |
| 0148 | LevelStorageSource.resources → ConcurrentMap | Canvas (97d6fd44) | HashMap → Maps.newConcurrentMap() (computeIfAbsent called from multiple threads) |
race fix | pure fix, always-on (Lophine upstream candidate) |
| 0149 | Respawn anchor cross-region | Canvas (05a68895) | Anchor charge consumption rewritten as a region-safe task (RegionScheduler/loadChunksAsync) | race fix (out-of-region blockstate write) | fixes.respawn_anchor_cross_region.enabled = false; ON C+A |
| 0150 | scheduleOrExecute player ops | Canvas (59c880e3) | Replaces schedule(+1 tick) with scheduleOrExecute (MinecraftServer, ExperienceCommand, RecipeCommand…) |
race fix; intra-tick timing changes, hence the toggle | fixes.schedule_or_execute.enabled = false; ON C+A |
| 0182 | End gateway region-safe | Mint 0008 | Skips positions outside the tick-region in the gateway exit search | Folia crash fix (End) | fixes.end_gateway_region_safe.enabled = false; ON A |
| 0187 | Thread-safe bossbars | Canvas (a008767c), lock-based adaptation | synchronized(playerLock) on ServerBossEvent/CustomBossEvent; orthogonal to Luminol 0044 bars (verified) |
real CME crash fix (multi-region End dragon, plugin bossbars) | pure fix, always-on |
| 0205 | updateResources region-safe | Canvas (2624a2dc) | Per-player reloadResources via taskScheduler; reload/Datapack#setEnabled off the safe path → explicit UOE |
race fix (datapack reload) | pure fix, always-on |
| 0224 | Cross-region move unwind (>threshold) | Canvas (8996ca32, BaconCat__) | A single-tick movement ≥ threshold_blocks whose destination lands outside the region unwinds the entity tick (control-flow exception, no stack trace) and is rerouted as an async teleport on the entity scheduler, instead of applying an out-of-region setPos. Two guards: noPhysics branch (raw delta) and post-collide() (resolved displacement); full path sweep, vehicles/passengers and NaN excluded. Reuses the base Lophine unwind plumbing (patch 0022 fix_high_velocity_issue: same exception + same async-teleport catch, independent toggle) |
crash fix (region ownership violation: pearl guns / long-range TNT) | fixes.cross_region_move_unwind.{enabled=false, threshold_blocks=30}; OFF everywhere, test long-range pearl/TNT cannons before any anarchy ON |
Off-stack (src/main, no patch number) — pick 1.9 "shutdown reroute" (canvas ed2a35d0, Dueris): LevelSubRegionShutdownThread (Luminol hot level unload) gets an UncaughtExceptionHandler that, instead of the log-only handler inherited from RegionShutdownThread, escalates to a clean server shutdown scheduled onto the global tick (RegionizedServer.addTask(stopServer)). Without it, an uncaught throwable on that thread abandoned the unload halfway (write lock held, callback never completed) = zombie server. Pure fix, always-on (error path only). The original Canvas bug (full stop logic executed inline on the world thread) cannot reproduce on this base — stopServer() self-reroutes through haltServerRegionThreading(); only the "escalate + reroute" half of the pick applies.
Stack-vs-picks note: pick 1.9 (reroute stopServer → global tick, Canvas ed2a35d0) was never ported (divergence documented in RECOMMENDATIONS §1.6); same for pick 4.2 (move-unwind >30 blocks, Canvas 8996ca32).
Anti-lag-machine and anti-dupe — anarchy target (10)
| No. | Name | Source | What it does | Gain | Toggle |
|---|---|---|---|---|---|
| 0158 | Projectile chunk-load throttle | Canvas (587a40e5 + NPE fixup) | Limits sync chunk-loads per projectile and per region tick; removes the projectile beyond the quota; ender pearls excluded (stasis protected) | anti-lag (pearl/arrow chunk-load spam) | optimizations.projectile_chunk_load_throttle.{enabled=false, max_loads_per_tick=10, max_loads_before_removal=10, exclude_ender_pearls=true}; ON A after bake |
| 0183 | Don't-save falling block / primed TNT | Leaf via Mint 0009+0042 | Overrides shouldBeSaved: in-flight falling blocks and primed TNT not persisted on save/unload |
anti-lag (neutralizes saved sand/TNT lag machines; primed_tnt breaks cross-restart cannons — gameplay decision) |
optimizations.dont_save_entity.{falling_block=false, primed_tnt=false}; falling_block ON A |
| 0184 | Hopper stack aliasing dupe fix | Paper#11945 via Mint 0012 | copy(true) before shrink/grow in HopperBlockEntity.addItem |
anti-dupe (closes an item dupe/corruption class) | fixes.hopper_stack_copy.enabled = true (default ON, keep) |
| 0185 | Zombie reinforcements no chunk load | Leaf/Paper PR via Mint 0013 | Removes sync chunk loads when placing zombie reinforcements | anti-lag (zombie farms) | fixes.zombie_reinforcement_no_chunk_load.enabled = true (default ON, keep) |
| 0188 | Sakura explosions (partial port) | Sakura 0005+0026 (Samsuik) | Gated: origin-block early-exit + block-counting cannon; always-on: bit-identical ray sorting. Remainder (SpecialisedExplosion batching, obstruction/density caches) deferred — depends on Sakura's per-level scheduler, not regionized | anti-lag (massive TNT chains = eternel's no. 1 target) | optimizations.sakura_explosions.enabled = false; ON A after rbtest bake |
| 0189 | Falling block column limit | Sakura 0028, tick-stamped Folia adaptation | Per-column cap on instant falling blocks per tick; non-destructive (unlike the base's Kaiiju 0027 throttler) | anti-lag (sand/gravel cascades) | anti_lag.falling_block_column_limit.{enabled=false, limit=32}; ON A |
| 0201 | Throttle failed spawn attempts | Leaf 0200 / Paper PR 11099 | Throttles, per category, spawn attempts that keep failing in the same chunk | spawning perf/anti-lag (complements 0163/0169) | optimizations.throttle_failed_spawn_attempts.{enabled=false, failed_attempts_threshold=1200, throttled_ticks_per_spawn_<category>} |
| 0206 | Portal entity blacklist | Canvas (11b39dc1) | Blocks non-player entities in nether portals / end portals / end gateways | anti-lag (entity-in-portal lag machines) | fixes.portal_entity_blacklist.{nether_portals, end_portals, end_gateways} = false ×3 — decision: all OFF (nether ON would break portal-based gold farms) |
| 0222 | Weak-chunk guard — random stroll | Leaf 0068 (Gale/MultiPaper) | RandomStrollGoal no longer picks destinations in non-entity-ticking chunks; complements the Folia region guard (ENTITY_TICKING status ≠ ownership) | anti-lag (mobs pulling weak chunks) | anti_lag.entity_weak_chunk_guard.enabled=false + subkey random_stroll=true; ON A after bake |
| 0223 | Weak-chunk guard — projectiles | Leaf 0287 | Projectiles stopped/removed before entering a non-ENTITY_TICKING chunk; pearls excluded (upstream; exclusion required by GAP) | anti-lag (projectile chunk-loading) | same module: subkey projectiles=true (inert while the master enabled is off) |
Behavior-identical perf opts — always-on, NO toggle (40)
Result identical to stock (bit-identical or practically so); deliberately always-on and flagged here. (!) 0159 is the only heavy case: an internal chunk-system optimization, always-on by construction — the only control is operational: do not deploy an unbaked jar to anarchy production (rbtest chunk-loading bake).
| No. | Name | Source | Gain |
|---|---|---|---|
| 0136 | VarInt/VarLong write | Gale via Mint 0034 | Hot path of every packet write (identical bytes, tested with Velocity) |
| 0137 | SynchedEntityData packDirty | Leaf via Mint 0036 | Per tracked entity/tick (500+ boats on creaclone) |
| 0138 | BlockEntityType isValid | Leaf | Block entity tick micro-opt |
| 0139 | Remove stream — visible effects filter | Leaf | Entity effect allocations |
| 0140 | Remove stream — GolemSensor | Leaf | Villager AI sensor |
| 0141 | Skip distanceToSqr ServerEntity | SparklyPaper via Mint 0037 | Tracker sendChanges hot path |
| 0142 | CompoundTag memory footprint | Mint 0055 | NBT memory footprint (verified identical on review) |
| 0159 | ThreadedTicketLevelPropagator (!) | Leaf via Mint 0038 | Multi-threaded Moonrise ticket level propagation — batch 4, always-on, rbtest bake required before production |
| 0160 | Cache canHoldFluid | Leaf | Hoppers/fluids |
| 0161 | Skip stationary player computations | Lithium | Player tick |
| 0162 | fastutil swaps | Lithium | Hot-path collections |
| 0163 | Nearby players for spawning | Leaf | Spawn loop |
| 0164 | Baby villager sensor | Leaf | AI sensor |
| 0165 | Remove stream — enough-depth | Leaf | Breeding/pathing AI |
| 0166 | Remove stream — villagers | Leaf | Villager AI |
| 0167 | Remove stream — BehaviorUtils | Leaf | Behavior AI |
| 0168 | Remove stream — trial spawner | Leaf | Trial spawner tick |
| 0169 | Nearby alive players for spawning | Leaf | Spawn loop |
| 0170 | Cache random tick block status | Leaf | Random ticks (crops, etc.) |
| 0171 | SetLookAndInteract / NearestVisibleLivingEntities | Leaf | AI lookups |
| 0172 | Remove streams — MobSensor | Leaf | AI sensors |
| 0173 | LinearPalette getSerializedSize | Leaf via Mint 0062 | +76% on palette serialization |
| 0174 | Rewrite ClientboundLightUpdatePacketData | Leaf via Mint 0063 | 13–18× faster light packet writing (wire-identical roundtrip tested) |
| 0175 | BlockEntity ticking isRemoved | Leaf | BE tick check |
| 0176 | Combined heightmap update | Lithium via Mint 0065 | Block updates |
| 0177 | C2ME Reduce Allocations (OreFeature) | C2ME via Mint 0073 | Nether worldgen |
| 0178 | Faster hash palette | Lithium via Mint 0079 | Chunk palettes |
| 0179 | Shared block-destruction packets | Gale/SportPaper via Mint 0045 | One shared packet instead of one allocation per player; documented edge: BlockBreakProgressUpdateEvent no longer fired when no player is in range |
| 0180 | Noise generation | Gale/C2ME via Mint 0001 | Worldgen hot path (nether), bit-identical |
| 0186 | Villager golem checks | Mint 0074 | wantsToSpawnGolem without streams + early-exit (iron farms) |
| 0190 | AI stream removal | Mint 0075 | Streams removed from 11 AI classes (509 identical-behavior lines) |
| 0191 | Optimized RecipeManager | Carpet-Fixes via Mint 0046 | getRecipeFor up to 3× (identical results) |
| 0192 (+paper 0026) | canSee tracker | SparklyPaper via Mint 0052+sp-0006 | Specialized canSee in ChunkMap (hurt/sendChanges) |
| 0193 | InsideBrownianWalk | Leaf via Mint 0058 | Fisher-Yates instead of stream+shuffle (BlockAreaUtils copied) |
| 0195 | Tracker player updates | Sakura 0016 | Rescans tracker players only when necessary (gate moved into Folia's newTrackerTick) |
| 0196 | Ban-list date format | Leaf 0173 | Thread-safe, faster DateTimeFormatter |
| 0197 | Bulk writeLongArray | Leaf 0188 | Batched palette writes at chunk load |
| 0198 | Skip merging full stacks | Leaf 0303 | Skips merge checks for full item stacks (overstack-aware) |
| 0200 | Respawn anchor explosion | Leaf 0296 | Anchor-bomb hot path (daily PvP on eternel) |
| 0219 | Cached iterate-outwards | Lithium via Mint 0049 | BlockPos.iterateOutwards cache (POI/pathfinding); byte-identical iteration order, region-thread-safe cache |
Gated perf opts — slight observable effect (5)
| No. | Name | Source | What it does | Gain | Toggle |
|---|---|---|---|---|---|
| 0133 (+paper 0024) | Copper golem activation range | ekaii (EllipsiaLePoulet, exo) | Dedicated spigot activation range for copper golems | golem anti-lag, tunable per world | spigot.yml entity-activation-range.copper-golem = 32 (identical default) — a dial, not an on/off |
| 0134 | Boat launcher sleep | ekaii (exo) | Puts clusters of ≥ cluster_threshold boats from launcher machines to sleep |
creative perf (500+ boat machines) | (!) luminol_config (not ekaii_config): optimizations.boat_launcher_sleep.{enabled=true, cluster_threshold=50, cluster_check_interval_ticks=100} — trap default ON: anarchy must set false explicitly |
| 0152 | Dynamic Activation Brain | Pufferfish via Mint 0080 | Throttles AI brain ticking based on distance to the nearest player | AI perf (villagers, hordes) | optimizations.dynamic_activation_brain.{enabled=false, start_distance=12, activation_distance_mod=8, maximum_activation_prio=20}; C ON-after-test, A OFF |
| 0181 | Suffocation optimization | Pufferfish via Mint 0005 | Skips isInWall 9 ticks out of 10 when the entity is invulnerable | perf (thousands of entities) | optimizations.suffocation_optimization.enabled = false; A ON-after-test |
| 0203 | Clump XP orbs | DivineMC 0046 (Clump mod) | Merges XP orbs of different values into a carrier orb | XP farm anti-lag (gold/enderman) | optimizations.clump_xp_orbs.enabled = false; ON A after rbtest mending test |
Gameplay features (6)
| No. | Name | Source | What it does | Gain | Toggle |
|---|---|---|---|---|---|
| 0154 | MC-261810 firework void | Canvas (1771aead) | Overrides onBelowWorld: the rocket is not discarded below bedrock (if attached entity is same-region) | cult anarchy gameplay (firework travel under the nether roof/bedrock) | fixes.mc261810.enabled = false; C OFF, A ON |
| 0155 | MC-298464 Hoglin combat-tracker leak | Canvas (360a92fc) | Fixes the combat-tracker leak on CHANGED_DIMENSION | memory leak fix (a 1.3 TB nether full of hoglins) | fixes.mc298464.enabled = false; C OFF, A ON |
| 0156 | Player save fail-hard | Canvas (2b498431) | Deliberate crash with a full CrashReport when a player save fails (instead of log-and-continue) | anti-dupe (prevents dupe-by-rollback) | fixes.player_save_fail_hard.enabled = false; A NEVER ON (crash loop armable via forged NBT on cracked); C ON = decision |
| 0194 | Out-of-order chat check togglable | Mint 0018 | Makes the vanilla OUT_OF_ORDER_CHAT kick switchable | QoL (spurious kicks under lag) | misc.out_of_order_chat_check.enabled = true (= vanilla); false conceivable on A if spurious kicks occur |
| 0202 | Copper bulb / crafter 1gt | DivineMC 0053/0054 | Restores the pre-nerf 1-gametick delay: bulb via 1gt scheduled tick, crafter at 1gt instead of 4 (upstream shared-flag bug fixed during port) | tech gameplay (recurring redstone community request) | gameplay.copper_bulb_1gt.enabled = false + gameplay.crafter_1gt.enabled = false (= vanilla) |
| 0216 | Old-PvP combat | Canvas (decided subset) | Client-side ATTACK_SPEED spoof (removes the 1.9 attack cooldown, 1.8-style hit delay) + legacy pre-1.21 Blast Protection (0.15/level) | gameplay (radical impact on the crystal-PvP meta) — pure dial | gameplay.combat.{disable_attack_hit_delay=false, legacy_blast_protection=false} (= modern vanilla) |
Client protocols and network (5)
| No. | Name | Source | What it does | Gain | Toggle |
|---|---|---|---|---|---|
| 0153 | Alternative keepalive | Purpur (MIT) via Canvas features/0001 | Purpur-style multi-pending keepalive: tolerates unstable connections without aggressive kicks | network QoL (bots/unstable cracked connections) | function.alternative_keepalive.enabled = false; A ON conceivable after bake |
| 0157 | Region tick flush | Canvas (ebcecde9) | Suspends/resumes the Netty flush per region tick (batched flush instead of per-packet); resumeFlushing in finally verified |
network perf (syscalls under load) | optimizations.region_tick_flush.enabled = false; A ON after rbtest bake (interaction with Lophine 0083 mt-queue to validate under bot spam) |
| 0199 | Filter entity motion packets | Canvas/Leaf 0293 | Skips ClientboundSetEntityMotionPacket except for entities that visually need it (moving items, ender eyes, squids, shulker bullets) | bandwidth perf | optimizations.filter_entity_motion_packets.enabled = false |
| 0213 | Packet obfuscation | Slice/Sakura 0007 | Per-entity foreignValue: synched data seen by other players is obfuscated (naive gating's double-send fixed during port) | anti-cheat (anti-ESP) + packet reduction | function.packet_obfuscation.enabled = false (preprod; test legitimate mods before ON) |
| 0215 | No Chat Reports server-side | Canvas | Strips chat signatures + converts player chat to system chat: messages not reportable to Mojang | player privacy | function.no_chat_reports.enabled = false, strict (validate vanilla client + LibreLogin before any ON) |
Debug / commands (5)
| No. | Name | Source | What it does | Gain | Toggle |
|---|---|---|---|---|---|
| 0151 | NetworkAnalyser | Mint 0067 | /networkanalyser start/stop: on-demand per-connection traffic analysis (10k conn cap, cleanup on disconnect, zero cost when stopped) |
bot/flood diagnostics | function.network_analyser.enabled = false; C OFF, A ON (analysis remains on-demand) |
| 0204 | Disable criterion triggers | Canvas features/0002 | No-ops the 23 SimpleCriterionTriggers — no more advancement grants (global; Canvas was per-world) | perf (advancements pointless with cracked bots) | function.disable_criterion_triggers.enabled = false; A ON conceivable (decision) |
| 0207 | Restore /clone | Canvas (9f444cf0) | /clone re-enabled via region-scheduled snapshot (~230 self-contained lines). The /data half of the Canvas commit not taken: already gated in the base (Luminol experiment.command.enable_data_command) |
major builder QoL | function.restore_clone_command.enabled = false; ON creaclone — read at boot only |
| 0208 | Restore /spreadplayers | Canvas (9f444cf0) | Region-safe /spreadplayers |
QoL | same toggle as 0207 |
| 0220 | /schedule restored | Mint 0061 (residual) | Re-registers /schedule under Folia (the only leftover commented out in the base; /scoreboard already covered by Lophine's CommandConfig) |
datapack QoL | experiment.schedule_command.enabled = false, strict (timer thread-safety not validated) |
Preprod-off — rbtest bake required before any ON (8)
| No. | Name | Source | What it does | Gain | Toggle |
|---|---|---|---|---|---|
| 0209 | FasterRandomSource | Leaf via Mint 0050 | Xoroshiro128++ ~5× for non-worldgen random; worldgen half (sp-0003) excluded by decision — eternel's seed is public, vanilla slime chunks | RNG perf | optimizations.fast_rng.{enabled=false, random_generator="Xoroshiro128PlusPlus", use_direct_impl=false} |
| 0210 (+paper 0027, api 0016) | Sculk catalyst exp fix | Leaves via Mint 0054+sp-0004+api-0006 | Correct XP at sculk catalysts — a 3-part fix (mc+paper+api) | gameplay fix | fixes.sculk_catalyst_exp.enabled = false |
| 0211 (+paper 0028) | Tile entity snapshot creation | Airplane via Canvas | Block#getState()/BlockEntity#getOwner() without snapshots when disabled (changed API contract); the commit's MTB-convert-cache half out of scope |
big win for polling plugins (CoreProtect, AEF, hoppers) | optimizations.tile_entity_snapshot_creation.snapshot_creation = true (= stock); false to be measured with CoreProtect/AEF on rbtest |
| 0212 | C2ME worldgen extras | C2ME via DivineMC 0009/0052/0059 (covers Leaf 0174) | Aquifer rewrite (precomputed grid, 3-closest sampling), beardifier (array iteration, jigsaw arrays), thread-local End biome cache; hunks proven identical = always-on | worldgen perf | optimizations.worldgen.{aquifer_optimization=false, beardifier_optimization=false, end_biome_cache=false, end_biome_cache_capacity=1024} — aquifer is NOT bit-identical: mandatory seed-identical rbtest validation before any ON |
| 0214 | Lithium equipment tracking | Lithium via Mint 0066 | Equipment dirty-flag, avoids per-tick rescans; reuses the base's Leaves change-tracking infra; subscriber leak from the Mint port fixed | perf (500+ boats, hordes) | optimizations.equipment_tracking.enabled = false — RESTART required |
| 0217 | TT20 lag compensation | TT20 via Leaf 0168 (AGPL) | Fluids compensated at real TPS — wired to Folia's per-region TPS | QoL under lag (double-edged on anarchy: also speeds up machines) | function.lag_compensation.{enabled=false, enable_for_water=false, enable_for_lava=false} |
| 0218 | Rail optimization | FxMorin via Leaf 0226 | Powered-rail propagation rewritten single-pass; region-guarded reads, BlockRedstoneEvent preserved | rail redstone perf | optimizations.rail_optimization.{enabled=false, activation_range=8} (8 = vanilla) — anarchy redstone policy = OFF; C to test on real machines |
| 0221 | Raytrace AntiXray | Leaf 0202 | Raytracing-based AntiXray; SDK vendored into lophine-api, zero external dependencies | anti-cheat (superior stash-hunt defense) | anti_xray.raytrace.enabled = false, strict (CPU cost to measure; kept in reserve if stash-hunting becomes a problem again) |
Documented deferrals (no patch, open tickets): Sakura cannon entity merging (per-level scheduler not regionized), Petal async pathfinding (world reads off the tick thread), C2ME Density Function Compiler (runtime bytecode, public seed), smooth teleports (depends on a Slice API flag), Pufferfish async mob spawning (racy by construction under Folia). Details: BATCH5-PORTED §2.3 and STATUS.md.
Lophine base (0001–0132) — summary and pointer
The base is not re-documented patch by patch here: see CENSUS.md (per-patch entries, verdicts) and census.json (machine-readable). 171 entries (132 mc + api/paper/build): 72 base-ok, 57 base-config-off, 17 base-config-on, 14 base-concern, 11 base-missing-toggle.
By major families:
- Folia fixes (~35): region-threading races (brains, leash, cross-dimension pearls, projectile portals, dragon), scheduler/volatile corrections, /save-all and /datapack re-enabled region-safe.
- Absorbed perf (~30): Gale, Leaf (radix sort sensors, PatchedDataComponentMap, move packets), Lithium sleeping block entities, Pufferfish (projectile chunk loading, goal selector), Petal sensor work, Purpur lobotomize, Krypton, SIMD maps.
- Anti-exploit: portal rate limiter (0050), Kaiiju entity limiter (0027, separate YAML), secure seed V1/V2 (0052/0053 — never on an existing world), switchable packet limiter (0064 — do not switch off), update-suppression catch-crash (0119).
- Leaves/Carpet gameplay features: update suppression (0119–0122, 0126), old-features (raid, explosion, void trade, spawn invuln), fakeplayer /bot (0114), Carpet rules pack (0128), container expansion (0086).
- Client protocols (0102–0130): Servux, Syncmatica, Xaero, Jade, REI, BBOR, AppleSkin, PCA, alternative block placement — all OFF by default unless noted; enabling = creative profile.
- Config/API/monitoring: Luminol config system, tick regions API, ChunkHot/tpsbar/membar/regionbar, bundled spark disabled (install standalone spark).
The base's trap defaults (fakeplayer, boat_launcher_sleep, portal_rate_limit, update-suppression, Syncmatica) are listed in Options and Recommendations.
Togglability audit
Behaviors WITHOUT a toggle (always-on in the jar)
46 of the 92 patches have no config lever. Three classes:
- Deliberate corruption/race fixes (the fix IS the intended behavior): 0135 (RegionFile race), 0146 (+p0025 criterion CME), 0147 (disconnectPos NPE), 0148 (ConcurrentMap), 0187 (thread-safe bossbars), 0205 (updateResources region-safe), plus the off-stack world-unload shutdown reroute (pick 1.9, direct
LevelSubRegionShutdownThreadchange, error path only). - Behavior-identical pure opts (result identical to stock, flagged): batch 2: 0136–0142, 0160–0178 (26 patches); batch 5: 0179, 0180, 0186, 0190, 0191, 0192 (+p0026), 0193, 0195, 0196, 0197, 0198, 0200, 0219 (13 patches). Documented edge: 0179 no longer fires
BlockBreakProgressUpdateEventwhen no player is in range. - Flagged case (!) 0159 ThreadedTicketLevelPropagator: a heavy chunk-system optimization (batch 4, classified preprod in PICKS) ported always-on by construction. The only control is operational: do not deploy an unbaked jar to anarchy production before the rbtest chunk-loading bake.
Hybrid case: 0188 (Sakura explosions) — the "ray sorting" half is always-on (bit-identical), the rest is gated. 0133 is a dial (activation range), not an on/off.
Stack-vs-picks divergences (debt RESOLVED 2026-07-19)
- Pick 1.9 (reroute stopServer → global tick, canvas ed2a35d0): ported as a direct src/main change (
LevelSubRegionShutdownThread, outside the minecraft patch stack), pure fix always-on on an error path — details under "Folia race fixes". - Pick 4.2 (move-unwind >30 blocks, canvas 8996ca32): ported = patch 0224, gated
fixes.cross_region_move_unwind.{enabled=false, threshold_blocks=30}(OFF everywhere; base Lophine 0022fix_high_velocity_issuecovers the same mechanism without a threshold, independent toggle, also OFF). - Documented deferrals with tickets: Sakura cannon merging, Petal async pathfinding, Density Function Compiler, smooth teleports, async mob spawning (BATCH5-PORTED §2.3).
Français
English