Skip to content

Backport master 26.1 changes to 1.21.1#184

Merged
AxalotLDev merged 1 commit into
AxalotLDev:multiloader-1.21.1from
alchemyyy:multiloader-1.21.1
Jun 26, 2026
Merged

Backport master 26.1 changes to 1.21.1#184
AxalotLDev merged 1 commit into
AxalotLDev:multiloader-1.21.1from
alchemyyy:multiloader-1.21.1

Conversation

@alchemyyy

Copy link
Copy Markdown
Contributor

This is a backport of the changes from the 26.1 branch after the 1.21.11 backport on 2026-02-23. This is a pretty nasty commit because of the amount of refactoring that got backported.

  • Moved shared concurrency helpers into a new api module, including the fastutil-backed concurrent maps/sets, IteratorSafeOrderedReferenceSet, ConcurrentCollections, ConcurrentObjectArrayList, AsyncCompatible, SensorUtils, and SyncItemPickup.
  • Updated common, Fabric, and NeoForge code to consume the shared API helpers.

Refreshed the async entity ticking pipeline and related mixins:

  • Updated ParallelProcessor compatibility checks and tick error handling
  • Added TickStats and refresh stats/config command output
  • Synchronized item pickup call sites through SyncItemPickup
  • Updated entity, AI sensor, breeding, movement, server, world, and Lithium mixins for the backported 26.1 concurrency changes
  • Added MinecartHopperMixin, ServerEntityMixin, ThreadSafeLegacyRandomSourceMixin, LithiumInternerMixin, LithiumSectionedBlockChangeTrackerMixin, and ReferenceMaskedListMixin
  • Removed older helpers only where they were replaced or unused on this branch

1.21.1-specific method signatures and injection targets that were left alone or restored after checking them against 1.21.1:

  • Mob tryEquip and pickUpItem wrappers on the 1.21.1 signatures
  • vanilla pickup mixins on pickUpItem(ItemEntity), not the newer ServerLevel signature
  • ChunkHolder blockChanged and sectionLightChanged wrappers void-returning
  • LivingEntity tickEffects List.of hook that does not exist in 1.21.1
  • 1.21.1 Util and ClassInstanceMultiMap lambda names
  • ServerWatchdog local capture for the 1.21.1 watchdog body
  • CrashReport.addCategory for NeoForge production runtime
  • PersistentEntitySectionManager.Callback onMove/onRemove locking
  • NetherPortalBlock getExitPortal locking/cache with PortalCreationCache
  • NeoForge Level capturedBlockSnapshots add/remove synchronization
  • ServerChunkCache ChunkAndHolder constructor access transformer for clean CI builds

The old LegacyRandomSourceMixin is removed because ThreadSafeLegacyRandomSourceMixin now covers the same 1.21.1 methods directly with setSeed, next, and nextGaussian overwrites.

Fixed the NeoForge API packaging by embedding the named API output directly into the NeoForge jar instead of jarJar'ing the Fabric/intermediary-remapped API artifact. This prevents runtime NoSuchMethodError failures such as SensorUtils.comparingDouble(Entity) and SyncItemPickup.wrap(ItemEntity, Runnable) resolving against intermediary Minecraft descriptors.

Updated loader metadata, mixin configs, access wideners/transformers, Gradle config, README, changelog, and issue template metadata for the backported branch.

Verified these changes with a few quick tests against my Neoforge 1.21.1 modpack server. I have not verified Fabric.

This is a backport of the changes from the 26.1 branch after the 1.21.11 backport on 2026-02-23. This is a pretty nasty commit because of the amount of refactoring that got backported.

- Moved shared concurrency helpers into a new api module, including the fastutil-backed concurrent maps/sets, IteratorSafeOrderedReferenceSet, ConcurrentCollections, ConcurrentObjectArrayList, AsyncCompatible, SensorUtils, and SyncItemPickup.
- Updated common, Fabric, and NeoForge code to consume the shared API helpers.

Refreshed the async entity ticking pipeline and related mixins:
- update ParallelProcessor compatibility checks and tick error handling
- added TickStats and refresh stats/config command output
- synchronized item pickup call sites through SyncItemPickup
- updated entity, AI sensor, breeding, movement, server, world, and Lithium
  mixins for the backported 26.1 concurrency changes
- added MinecartHopperMixin, ServerEntityMixin, ThreadSafeLegacyRandomSourceMixin,
  LithiumInternerMixin, LithiumSectionedBlockChangeTrackerMixin, and
  ReferenceMaskedListMixin
- removed older helpers only where they were replaced or unused on this branch

1.21.1-specific method signatures and injection targets that were left alone or restored after checking them against 1.21.1:
- Mob tryEquip and pickUpItem wrappers on the 1.21.1 signatures
- vanilla pickup mixins on pickUpItem(ItemEntity), not the newer ServerLevel signature
- ChunkHolder blockChanged and sectionLightChanged wrappers void-returning
- LivingEntity tickEffects List.of hook that does not exist in 1.21.1
- 1.21.1 Util and ClassInstanceMultiMap lambda names
- ServerWatchdog local capture for the 1.21.1 watchdog body
- CrashReport.addCategory for NeoForge production runtime
- PersistentEntitySectionManager.Callback onMove/onRemove locking
- NetherPortalBlock getExitPortal locking/cache with PortalCreationCache
- NeoForge Level capturedBlockSnapshots add/remove synchronization
- ServerChunkCache ChunkAndHolder constructor access transformer for clean CI builds

I left the old LegacyRandomSourceMixin removed because ThreadSafeLegacyRandomSourceMixin now covers the same 1.21.1 methods directly with setSeed, next, and nextGaussian overwrites.

Fixed the NeoForge API packaging by embedding the named API output directly into the NeoForge jar instead of jarJar'ing the Fabric/intermediary-remapped API artifact. This prevents runtime NoSuchMethodError failures such as SensorUtils.comparingDouble(Entity) and SyncItemPickup.wrap(ItemEntity, Runnable) resolving against intermediary Minecraft descriptors.

Updated loader metadata, mixin configs, access wideners/transformers, Gradle config, README, changelog, and issue template metadata for the backported branch.

Verified these changes with a cache-disabled CI-style build:
./gradlew clean processIncludeJars build --stacktrace --rerun-tasks --no-build-cache

Also checked the sensitive mixin targets against the 1.21.1 generated sources/jars with javap/source spot checks, and ran some quick tests against my neoforge 1.21.1 modpack server. I have not verified fabric.
@alchemyyy alchemyyy force-pushed the multiloader-1.21.1 branch 2 times, most recently from be5237c to aee7deb Compare June 25, 2026 18:07
@AxalotLDev AxalotLDev merged commit 79eafbd into AxalotLDev:multiloader-1.21.1 Jun 26, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants