Home›Java›Mods›Create : Tick Control
Create : Tick Control
ModsJava

Create : Tick Control

Java mod listed for Minecraft 1.21. Downloads from the MC Java Mods app on Android.

by arginou57 · on CurseForge

⬇ Download on CurseForge

The author built this one for Minecraft 1.21.1 on NeoForge. On other versions it may install and then do nothing.

Create : Tick Control — screenshot 1Create : Tick Control — screenshot 2Create : Tick Control — screenshot 3Create : Tick Control — screenshot 4Create : Tick Control — screenshot 5

Create Tick Controller

Server TPS + Client FPS optimization for Create — with field-measured gains

Create Tick Controller optimizes Create factories on both sides of the wire. On the server, it throttles idle machinery, backs off jammed logistics, and coalesces kinetic recalculations to protect TPS. On the client, it reduces the tick and render cost of distant machinery to recover FPS — field-measured on a production-scale base: 6–10 FPS → 60+ FPS.

Everything is opt-out, configurable in game, and honest about trade-offs: lossless optimizations are on by default, visible ones are behind sliders you control, and every option's tooltip carries its measured gain.


📊 Measured results

Client (spark-profiled, production-scale Create base — NeoForge 1.21.1, Sodium 0.8, Iris, Flywheel):

Metric Before After
FPS in the base 6–10 60+
Drawing Create machines (share of frame) 25.7% 1.1%
Sound handling (share of frame) ~16% ~8% (rest is genuinely audible, capped)
Create client tick cost baseline −71% at defaults, −93% on Potato

Server (controlled benchmarks, i7-10700K):

Scenario Without mod With mod
500-belt loop 78.5 MSPT / 12.7 TPS 38.1 MSPT / 20 TPS (global ÷4)
50 millstones + 50 presses + 100 funnels 89.2 MSPT / 11.2 TPS 41.3 MSPT / 20 TPS (÷4)
Real mixed factory (belts, arms, trains) 125.4 MSPT / 8 TPS 38.7 MSPT / 20 TPS (per-type tuning)

On top of the divisor system, the exponential backoffs (below) remove the cost of jammed logistics entirely — blocks stuck retrying against a full chest go from a full scan every tick to near zero, without slowing working machines at all.


🚀 Quick start

Server admins: drop the jar in mods/, done — safe defaults are active (emergency MSPT protection + all backoffs). Tune live with /tickcontrol, or open the web dashboard for a lag heatmap of your world.

Players chasing FPS: install the mod client-side too, then one command:

/ctcclient quality potato

That's the 6→60 FPS configuration. Profiles: ultra (max visuals, lossless only) · normal (imperceptible defaults) · light (aggressive) · potato (FPS above all). Also available as a selector in Sodium's Video Settings ("Tick Reduction" page) and in the Mods-list config screen.


🖥️ Client-side optimization suite

Every Create block entity also ticks and renders on the client — animation lerps, belt item simulation, dynamic renderers. In a big base that's thousands of ticks and draws per frame; the F3 profiler shows tick starving gameRenderer. Five independent systems fix this. All are local to each client, purely visual, and never affect server logic, item transport, or other players.

Distance-based tick reduction

Create block entities tick at full rate near the camera (default < 32 blocks), every 2nd tick in the mid band (32–64), every Nth beyond (default ÷4, up to ÷16). The loaded area grows with the square of distance — at 12 chunks render distance, ~97% of machinery sits beyond 32 blocks — so the defaults remove ~71% of the Create client tick cost (~93% on Potato) while everything you can see up close stays flawless.

The key reason this is invisible: kinetic rotation (shafts, wheels, fans) is computed at render time, not tick time — it stays perfectly smooth at any distance, even throttled. What actually slows beyond 32 blocks: belt items and flap animations advance in bigger steps (imperceptible at that range; any belt event re-snaps them). A per-position phase offset spreads the remaining work evenly, so the saving never bunches into a periodic stutter. Ponder scenes, contraptions (trains, elevators — they're entities), and ambient machine sounds (full-rate zone covers their range) are untouched.

Create BE render distance — the 6→60 FPS lever

Vanilla draws every visible block entity's dynamic renderer out to 64 blocks, every frame. On the reference base this was the single biggest frame cost: 25.7% of the render thread. This slider culls Create renderers beyond your chosen radius, on both the vanilla and Sodium render paths — and cost falls with the radius squared: 32 draws ~1/4 as many as 64, 8 draws ~1/64. Field-measured: 6–10 FPS at 64 → 60 FPS at 8.

Why the base still looks intact: with Flywheel's backend on (default), machine bodies are GPU-instanced outside this path and stay visible at any distance. What disappears beyond the radius is the dynamic layer — belt items, dial needles, text — illegible from that far anyway. (With /flywheel backend off, whole machines would vanish beyond the radius; keep the backend on.)

Behind-camera culling

Sodium frustum-culls whole 16³ sections, but standing inside a machine hall, the surrounding sections stay "visible" while half their machines are behind you. This culls block entities whose entire render bounding box is behind the view plane. Correctness details that matter: long machines (belts) are tested by their full box, so a belt whose controller is behind you but which extends ahead keeps rendering — nothing visible ever disappears; and the check auto-disables during Iris shadow passes, so machines behind you still cast shadows with shaders. Measured: combined with the render distance, near-machine rendering went from 19.6% to 1.1% of the frame.

Other-BE render distance

The same culling for non-Create block entities: vanilla chests, signs, banners, other mods' containers (measured ~4% of the frame combined). Off by default — unlike Create machines, these are entirely renderer-drawn and visibly disappear beyond the radius. 24–32 is the reasonable aggressive value.

Sound distance + spam culling

A hidden vanilla cost, found by decompiling: SoundEngine.play blocks the render thread on a CompletableFuture to create an audio channel for every sound received — and vanilla never culls sounds by distance, while servers broadcast them to 64 blocks when most are audible at 16. Measured at ~16% of the frame in a loud factory. Three filters: positional sound packets beyond 48 × max(1, volume) blocks are dropped before any processing (3× the audible radius — lossless); at most 6 starts of the same sound per tick; at most 16 total server-sound starts per tick (20 identical clanks are indistinguishable from 6). Measured after: ~8%, the remainder being din you can actually hear. Client-local sounds — your footsteps, UI, music — are untouched.

Where to control it


⚙️ Server-side optimization suite

Tick divisors (the core system)

Reduce how often Create block entities tick: globally, per machine type, with a blacklist for critical types. A divisor of 4 means each block entity processes every 4th tick (~75% cost reduction for that type); position-based offsets spread entities across frames so the load stays flat instead of spiking. Client animations sync automatically — gears visually rotate slower to match the real processing speed, so throttling is never confusing desync.

Game tick     1     2     3     4     5     6     7     8
Divisor 4:   TICK  skip  skip  skip  TICK  skip  skip  skip
4 belts:     A     B     C     D     A     B     C     D     ← offsets keep load flat

Emergency MSPT protection

A reactive safety net: when MSPT crosses a threshold (default 55 ms), an emergency divisor overlay ramps up in steps; when MSPT recovers (below 45 ms), it steps back down. The overlay is max(manual, emergency) — it never fights your manual settings, and the threshold/recovery gap prevents oscillation. /tickcontrol dynamic pause|resume to override during maintenance.

Exponential backoff for jammed logistics

The divisor system slows everything a little; the backoffs remove the cost of blocks that are stuck entirely. Principle: every attempt that moves nothing doubles the wait (2, 4, 8… ticks, capped at 1–2 s); the first success or relevant change resets to full speed instantly. Working machines are never slowed — only ones grinding a retry loop against a full chest or jammed belt.

Target The every-tick waste it removes
Create belts a backed-up belt ran its complete per-item transport loop every tick — no early-out in Create. Wakes instantly on insertion, machine access, speed change
Create funnels Create only starts the extraction cooldown on success; a funnel facing a jammed belt re-ran its full activation path every tick
Factory gauge panels every gauge polls the logistics network every tick even while satisfied or promise-covered; a wall of gauges multiplies that by hundreds. Request timing and promise expiry stay exact
Vanilla hoppers a blocked hopper repeats a full slots×slots scan + item sweep every tick, forever. Hopper-to-hopper wake-ups preserved; hopper-clock users can disable
Sophisticated Storage hopper upgrades the pattern that started it all: ~1 ms/tick per blocked upgrade on large chests, measured in production

Engine fixes and compensations

Web dashboard & lag map

An embedded admin dashboard (/tickcontrol panel): live lag heatmap of every block entity, per-type and per-block profiling (near-zero overhead, strictly zero when closed), remote divisor control, and a ships panel for Sable/Create Aeronautics sub-levels (including deleting off-map ships that crash players). Players can get a read-only visualizer link with /lagmap (permission-gated). Keep it bound to 127.0.0.1 or set a token — see the config comments.


🔬 The method — measure, don't guess

Every optimization in this mod traces to a profiler capture. Do the same on your setup:


Installation

Commands

Command What
/tickcontrol status divisors, blacklist, emergency state, TPS/MSPT
/tickcontrol global <1-200> / sync <1-200> / reset global control
/tickcontrol type <TypeName> <1-200> / type <TypeName> reset per-type divisors
/tickcontrol blacklist add/remove/list/clear protect critical types
/tickcontrol list [dimension] find type names of loaded block entities
/tickcontrol dynamic pause/resume override the emergency system
/tickcontrol panel / /lagmap admin dashboard / player lag map link
/ctcclient (client) quality profiles, tick presets, render distances, status

Configuration

Per-type starting points (server): belts/funnels/arms ÷2–4, millstones/mixers/pumps ÷4–8, crushing wheels ÷4–8. Blacklist (already default): train stations, signals, tracks, sequenced gearshifts, diodes, packagers, stock tickers.


FAQ

Will this break my contraptions? No — contraptions are entities and are never throttled or culled, on either side.

Do items get lost on belts? No. Server-side, throttled belts process less often but never drop items; jammed belts in backoff resume within 2 s of being unblocked.

Machines disappeared at distance! Check /flywheel backend — with the backend on, machine bodies stay visible at any render-distance setting; only far dynamic details (belt items, dials) are culled. Non-Create chests/signs only disappear if you lowered the Other BE slider (off by default).

Will sound culling mute my base? No — it only drops sounds too far to hear (3× the audible radius) and caps identical-sound spam per tick. Your own footsteps, UI and music never pass through the filter.

Why do gears look slow when the server throttles? Intentional: client animations sync to the real tick rate, so what you see matches what the machine actually does.

Does it work with shaders? Yes — behind-camera culling detects Iris shadow passes and stands down, so shadows stay correct.

Does it work with Create addons? Yes — anything extending SmartBlockEntity is throttled/culled like Create's own machines, and you can set per-type divisors for addon machines.

Client-only install on a vanilla-ish server? The client FPS suite works everywhere (it's local). The TPS features need the mod on the server.

Dynamic vs Emergency? The formula-based dynamic system was replaced by the simpler, more predictable emergency MSPT overlay: reactive, threshold-based, max(manual, emergency), with an anti-oscillation gap.


Create Tick Controller is not affiliated with the Create team. Create is developed by simibubi and contributors.

 

Quick facts

Install steps are the general flow for this file type — How to install Minecraft Java mods & modpacks walks through it step by step.

File checked by MCModsHub

These come from our own check of the pack file, not from the source page.

Explore more