promotional bannermobile promotional banner

Create : Tick Control

Create Tick Control optimisation smart block entities ticks optimise create server and client

File Details

createtickcontroller-1.21.1-1.0.6.jar

  • R
  • May 3, 2026
  • 145.64 KB
  • 11
  • 1.21.1
  • NeoForge

File Name

createtickcontroller-1.21.1-1.0.6.jar

Supported Versions

  • 1.21.1

Curse Maven Snippet

NeoForge

implementation "curse.maven:create-tick-control-1418208:8035124"
Curse Maven does not yet support mods that have disabled 3rd party sharing

Learn more about Curse Maven

# Changelog

## 1.0.6

### Animation sync fixes

- **Gearbox / Vertical Gearbox**: shaft animations now respect the active tick divisor on the client. Both rendering paths are covered — `GearboxVisual` (Flywheel) and `GearboxRenderer` (legacy fallback) — by redirecting `GearboxBlockEntity.getSpeed()` calls so each shaft's rotation speed scales by `1/divisor`. Previously these blocks rendered at full speed regardless of throttling because the `RotatingInstanceMixin` only intercepted the 1- and 2-argument `RotatingInstance.setup()` overloads, while the gearbox uses the 3-argument variant with a pre-computed direction-signed speed.

- **Mechanical Arm**: transitions between idle / pickup / deposit positions now animate smoothly under throttling. The client previously advanced `chasedPointProgress` at full speed (running tick at 100%), reaching `1.0` and freezing while waiting for the throttled server to change phase — the arm appeared to teleport between targets. The animation step in `ArmBlockEntity.tickMovementProgress()` is now divided by the active divisor on the client, so the chase progress matches the server's effective rate.

- **Depot**: items on a depot now reach the center smoothly when throttled, fixing visible flicker and out-of-sync interactions with a Mechanical Press placed above. The exponential approach `beltPosition += diff / 4f` in `DepotBehaviour.tick(TransportedItemStack)` is now scaled by the divisor on the client, keeping the average per-game-tick advance equal to the server side and eliminating sync snaps.

### Logistics network fixes

- **Stock flicker fix (Stock Ticker / Stock Link / Redstone Requester)**: items in a stock-keeper inventory no longer randomly appear and disappear under throttling. Root cause: `LogisticallyLinkedBehaviour.lazyTick()` calls `keepAlive(this)` to refresh the link's entry in the `LogisticsManager.LINKS` cache (TTL: 20 ticks). When the host BlockEntity was throttled, `lazyTick` would be skipped long enough for the link to expire from the cache, dropping it out of the network summary until the next non-skipped tick. The following types are now blacklisted by default:
  - `StockTickerBlockEntity`
  - `PackagerLinkBlockEntity`
  - `RedstoneRequesterBlockEntity`

  Existing user blacklists are preserved and merged with the new defaults on first load.

- **Adaptive logistics cache (large-network performance)**: the `LogisticsManager.SUMMARIES` cache TTL now scales with the active divisor (`20 × divisor` ticks). On large item networks (hundreds of inventories), `createSummaryOfNetwork()` can take 5–20 ms per recompute; under heavy throttling, this multiplied across menu opens and stock requests was a measurable source of lag. Now under `divisor=4` the network summary is recomputed at most every 4 seconds instead of every second, cutting the related CPU cost roughly proportionally.

  - `ACCURATE_SUMMARIES` (1-tick TTL) is intentionally left untouched so real package requests (craft / restock) remain correct.
  - When divisor returns to 1, TTL automatically resets to the vanilla 20.
  - Trade-off: the displayed stock list may be up to `20 × divisor` ticks stale (visible only when items are added/removed elsewhere on the network).

### Implementation details

New mixins:

- `client.GearboxVisualMixin` — redirects `GearboxBlockEntity.getSpeed()` in `GearboxVisual.getSpeed(Direction)`
- `client.GearboxRendererMixin` — redirects `getSpeed()` in `GearboxRenderer.renderSafe()` (ordinal 0)
- `client.ArmBlockEntityClientMixin` — `@ModifyConstant` on `1024.0F` in `tickMovementProgress`
- `client.DepotBehaviourClientMixin` — `@ModifyConstant` on `4.0F` in `DepotBehaviour.tick(TransportedItemStack)`
- `TickBasedCacheAccessor` — `@Accessor` exposing the `ticksUntilTimeout` field on Create's `TickBasedCache`

Updated:

- `TickControllerManager` — new `updateLogisticsCacheTTL()` invoked from both divisor setters; expanded `DEFAULT_BLACKLIST`
- `TickControllerConfig` — default blacklist in generated TOML extended to match