Skip to content
BonsUnleashed edited this page Oct 7, 2026 · 3 revisions

Timeless and Classics Zero (TaCZ)

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 Timeless and Classics Zero (TaCZ) 1.20.1-1.1.5 (mod id tacz): the synced-data holder is resolved once per tick, and the sync collections are filled with plain loops instead of stream collectors. Since 1.0.30 the first one applies to TaCZ 1.1.5 to 1.1.7, is skipped on 1.1.8 and steps aside while TaCZ Tweaks is installed; its section has the details. 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 Result
tacz_sync_collections TaCZ 1.1.5 BOTH 1.0.1 opt 77–81 % less allocation
tacz_sync_scope TaCZ 1.1.5 BOTH 1.0.0 opt 128 → 16 B per tick

tacz_sync_scope

Since: 1.0.0 · Scripts (1.0.19 and earlier): bons_and_furious-SyncedEntityData.js, bons_and_furious-LivingEntityMixin.js · Helper: agentcraft.pure.TaCZScope Patched: com.tacz.guns.entity.sync.core.SyncedEntityData.getDataHolder and TaCZ's LivingEntityMixin.onTickServerSide Mixins (since 1.0.20): SyncedEntityDataMixin, TaczLivingEntityMixin

What upstream did. TaCZ's server-side living-entity tick resolved the entity's synced-data capability holder separately for each of eight adjacent state writes, every tick, for every living entity.

What the patch does. Opens a scope around those writes so the holder is resolved once and reused. The handle is checked for validity; a different entity or an absent holder falls back to the original lookup; scopes nest; exceptions clean the scope up.

What stays the same. Every setter, tick, dirty flag, registration check, packet payload and invalidation; no entity is retained after the scope ends. 27,398 native dedicated-server assertions, including 200 randomised update sequences and 4,000 parallel scope iterations.

Measured. Eight holder resolutions: 128 → 16 B and 0.378 → 0.235 µs per tick (medians of eight alternating rounds).

Since 1.0.30. Applies to TaCZ 1.1.5 to 1.1.7 (the same class) and is skipped on TaCZ 1.1.8, which added charged shots to that class. It steps aside, with one log line, while a mod that builds on TaCZ's own version of this code is installed (TaCZ Tweaks); before, that combination stopped the game at start.


tacz_sync_collections

Since: 1.0.1 · Scripts (1.0.19 and earlier): bons_and_furious-DataHolder.js, bons_and_furious-SyncedEntityDataEvent.js · Helper: AcCollections Patched: DataHolder.gatherDirty / gatherAll and SyncedEntityDataEvent.onServerTick Mixins (since 1.0.20): DataHolderMixin, SyncedEntityDataEventMixin

What upstream did. Built the per-tick dirty-data lists and the packet routing lists with stream collectors.

What the patch does. Ordered ArrayList loops that keep gather, self-send, tracking-send and clean as separate phases in the original order.

What stays the same. Entry identity, collection order, mutable-list behaviour, dirty-state transitions, self/tracking membership and byte-for-byte packet serialisation; equal across 2,000 randomised sequences in the native server fixture.

Measured. Dirty collection 432 → 80 B per call and routing 688 → 160 B per call (77–81 % less allocation).

Bons and Furious

Minecraft 1.20.1 / Forge 1.0.34

Compatibility

Controls by mod

Links

Clone this wiki locally