Skip to content

Releases: Team-Arcadia/arcadia-patchcreate

Arcadia Patch Create 1.4.3

Choose a tag to compare

@Blushister Blushister released this 05 Aug 10:55

Performance release targeting the hotspots measured on the production servers, plus a fix that made adaptive throttling inoperative.

Requires Create 6.0.10. Every patch is validated against an exact bytecode fingerprint and disables itself on any other build.

Performance

CreateHeatJS metadata cache — the addon rebuilt a recipe context on every basin heat check, and each context walked the entire recipe list to recover one identifier. This ran even with no custom heat provider configured.

Measured on server 1: 1.907 ms/tick → 0.002 ms/tick. Basin recipe handling dropped by 99%, mixers by 98%, presses by 89%. Only immutable recipe identifiers are cached; a fresh context is still built for every check, so predicates and custom heat levels are unaffected.

Mechanical Arm simulation reuse — while searching for an item, an arm probes every slot of every input and simulates insertion against every output for each one. Identical stacks ran the identical simulation repeatedly. Results are now memoized for the duration of a single search pass. simulateInsertion mutates nothing, so this is strictly equivalent.

Item Drain lookup reuse — Create resolved the same emptying recipe twice per processing call. The first positive result is reused for the simulation that immediately follows. Measured: 0.227 → 0.135 ms/tick.

Fluid pipes — the idle fast-path no longer inspects Create state reflectively, which cost up to 0.272 ms/tick on its own. The connection map moved from an IdentityHashMap to an EnumMap: at most six entries, iterated four times per pipe per tick, and profiling attributed 0.218 ms/tick to that iterator alone.

Belt fast-path anchor — moved after Create's own housekeeping. Injected at HEAD it could leave a stale lazyClientItem behind or miss the synchronization of an inversion on an empty belt.

Fixes

Adaptive throttling never engaged. The MSPT accessor was looked up under a single hardcoded name taken from the compile classpath, but the deployed server is remapped to official names. The lookup failed silently and the reading was always zero, so the 35 / 45 / 55 ms steps were never crossed — a server measured at 33.7 ms average and 42 ms at the 95th percentile stayed on interval 1.

Chute throttle removed. It cancelled the input probe before re-reading the capability, delaying a valid transfer by one to four ticks, and never targeted the real hotspot. Removing it costs nothing: chute tick time is unchanged at 0.86 ms/tick.

Administration

The panel moved to a six-row layout with modules grouped by family, and gained a health banner: current MSPT against the 50 ms budget, throttle mode and interval, and how many modules are effective versus how many had their target rejected. A patch disabled by a fingerprint mismatch was previously invisible without running a debug dump.

Each module now reports configured, available and effective as three distinct states, across the panel, the commands and the debug dump.

New: /arcadiapatchcreate arm status|enabled <bool>.

Still server-side only — vanilla menu type, no custom screen or packet, works the same in single player.

Notes

Measurements come from two 120-second Spark profiles taken four days apart on the same production server under comparable load. Observable was running during both captures, which inflates absolute values equally on each side; the comparisons hold.

Create's own block entity tick time dropped by 1.405 ms/tick overall. Note that on the observed server this gain was offset by unrelated content growth over the same period.

Build verification: ./gradlew.bat clean build, plus a dedicated server startup with and without CreateHeatJS installed.

Arcadia Patch Create 1.4.2

Choose a tag to compare

@Blushister Blushister released this 18 May 09:54

Conservative Create crash guards.\n\n- Guard invalid continuous OBB collision manifolds where Create can expose a null axis during contraption collision.\n- Reject unreadable or corrupted contraption NBT before Create dereferences invalid state.\n- Discard invalid contraption entities during load instead of crashing the server tick.\n\nBuild verification: ./gradlew.bat clean build.

v1.4.1

Choose a tag to compare

@Blushister Blushister released this 21 Apr 19:58

Arcadia Patch Create 1.4.1

Correctifs

  • Panel admin — Les clics sur les catégories naviguent maintenant correctement vers les sous-pages (fix sync server.execute)
  • Panel admin — Les messages de navigation affichaient toujours "Panel refreshed" au lieu du nom de la page ouverte
  • Panel admin — Le clic droit sur le bouton délai drops dupliquait le toggle on/off du bouton principal, comportement clarifié

Nettoyage

  • PatchRuntime : suppression de la réflexion sur getAverageTickTime(), appel direct à server.getAverageTickTime()
  • PatchRuntime : 6 aliases factory gauge obsolètes supprimés, champs réorganisés
  • isAdaptiveThrottleActive() renommé en isThrottleActive() (le nom était trompeur : retournait true pour STATIC aussi)

Patches validés

Patch Cible Effet
Belt BeltInventory.tick() Skip si belt complètement vide
Fluid FluidTransportBehaviour.tick() Fast-path idle si aucune pression/flow
Factory Gauge FactoryPanelBehaviour.tickStorageMonitor() Throttle adaptatif si état stable
Chute ChuteBlockEntity.handleInputFromAbove/Below() Throttle adaptatif si idle
Create Drops ItemEntity Despawn anticipé des items Create

Dépendances

  • Minecraft 1.21.1
  • NeoForge 21.1.221+
  • Create 6.0.9+
  • Côté serveur uniquement