This mod is a port of the original version.
I have obtained the creator’s permission to port it.
For versions 1.20.1 or earlier, download the original mod here
Modifies vanilla behaviour when locating features to run asynchronously, mitigating associated lag.
This is currently implemented for:
- Locate structure command when executed by a user
- Locate biome command when executed by a user (v1.5.0+)
- Villager explorer map trade offers
- Dolphin treasure finding
- Exploration map in chests
This mod is only required to be installed server side! So clients only need this installed if they want it for single player.
This alone only works for vanilla (see list above). Other mods may need to implement usage of this mod themselves to make use of the async functionality.
Incompatibilities
Mods that affect vanilla's structure locating features may impact Async Locator's functionality.
Right now, the list below states other mods that I'm aware of:
Has been seen that on startup only one of either Async Locator's or Structure Essentials' locating improvements will work. No real issues otherwise, but only one of the mods are required.
Mod Integration
Other mods can also use Async Locators as a dependency to implement the asynchronous locating into their own code. To do so, please use CurseMaven or Modrinth Maven to add this mod to your build.gradle, and then make use of the AsyncLocator class and/or logic classes.
All Versions
+ Add Version| Name | Game version | Platforms | Published | Downloads | Actions |
|---|---|---|---|---|---|
| 2mo ago | 1 | ||||
| 2mo ago | 1 | ||||
| 3mo ago | 1 | ||||
| 3mo ago | 1 | ||||
| 3mo ago | 1 | ||||
| 3mo ago | 1 | ||||
| 4mo ago | 1 | ||||
| 4mo ago | 1 | ||||
| 5mo ago | 1 | ||||
| 5mo ago | 1 | ||||
| 7mo ago | 1 | ||||
| 7mo ago | 1 | ||||
| 7mo ago | 1 | ||||
| 7mo ago | 1 | ||||
| 8mo ago | 1 | ||||
| 8mo ago | 1 | ||||
| 10mo ago | 1 | ||||
| 10mo ago | 1 | ||||
| 10mo ago | 1 | ||||
| 10mo ago | 1 | ||||
| 10mo ago | 1 | ||||
| 10mo ago | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 | ||||
| last yr. | 1 |
- This version has all the features up to 1.21.5-1.6.0 and:**
### Fixes:
- Added a correct server lifecycle cleanup, that atomically removes all pending shared locates. Now shutdown clear PENDING_LOCATES and coalescing key contains MinecraftServer
- Improved mixin compatibility using MixinExtras injectors
- Optimized and resized the logo, reducing the mod JAR size by 46 KB
### Added:
- Added /asynclocator status and reload commands with /al shortcut
- Added validated runtime configuration reloads for Fabric and NeoForge
- Added locate coalescing with safe cancellation
<details>
<summary>All Changes</summary>
[Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.5-1.6.0...1.21.8-1.6.1)
</details>
- This version has all the features up to 1.21.5-1.6.0 and:**
### Fixes:
- Added a correct server lifecycle cleanup, that atomically removes all pending shared locates. Now shutdown clear PENDING_LOCATES and coalescing key contains MinecraftServer
- Improved mixin compatibility using MixinExtras injectors
- Optimized and resized the logo, reducing the mod JAR size by 46 KB
### Added:
- Added /asynclocator status and reload commands with /al shortcut
- Added validated runtime configuration reloads for Fabric and NeoForge
- Added locate coalescing with safe cancellation
<details>
<summary>All Changes</summary>
[Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.5-1.6.0...1.21.8-1.6.1)
</details>
### Fixes:
- ExplorationMapFunction.run performed the search before calling MapItem.create, meaning the original mixin never prevented the blocking operation from running on the main thread and instead started a redundant asynchronous search afterwards. The injection has now been moved to run before ServerLevel#findNearestMapStructure, cancelling the synchronous search entirely so exploration maps are now located asynchronously. This was a critical issue since first version of AsyncLocator-Refined.
- Fixed thread safety races in structure lookups that could corrupt state or crash when locating off-thread.
- Fixed a race where locate callbacks could run before the map item was placed, producing broken maps in chests and villager trades.
- Eyes of Ender are now refunded if the stronghold search fails, times out (60s), or errors, like vanilla.
- Dolphins no longer lose their treasure target when their search goal restarts, and handle failed searches like vanilla.
- Villager trade offers now refresh correctly for the trading player once a map search completes.
- /locate errors are now reported to the command sender instead of being swallowed, while preserving the client's language.
### Added:
- Expanded the public API for other mods, adding configurable locate timeouts and support for biome searches using custom biome predicates.
- Identical concurrent locate requests (same dimension, target, position, radius) now share one search instead of running duplicates.
- Game tests for both Fabric and NeoForge, run automatically on pull requests.
- Sources jars are now published for mod developers.
- Added configurable limits for concurrent and queued locate searches, preventing unbounded locate work during request bursts. The default allows 2 active searches and 128 queued searches.
<details>
<summary>All Changes</summary>
[Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.1-1.5.4...1.21.1-1.6.0)
</details>
### Fixes:
- ExplorationMapFunction.run performed the search before calling MapItem.create, meaning the original mixin never prevented the blocking operation from running on the main thread and instead started a redundant asynchronous search afterwards. The injection has now been moved to run before ServerLevel#findNearestMapStructure, cancelling the synchronous search entirely so exploration maps are now located asynchronously. This was a critical issue since first version of AsyncLocator-Refined.
- Fixed thread safety races in structure lookups that could corrupt state or crash when locating off-thread.
- Fixed a race where locate callbacks could run before the map item was placed, producing broken maps in chests and villager trades.
- Eyes of Ender are now refunded if the stronghold search fails, times out (60s), or errors, like vanilla.
- Dolphins no longer lose their treasure target when their search goal restarts, and handle failed searches like vanilla.
- Villager trade offers now refresh correctly for the trading player once a map search completes.
- /locate errors are now reported to the command sender instead of being swallowed, while preserving the client's language.
### Added:
- Expanded the public API for other mods, adding configurable locate timeouts and support for biome searches using custom biome predicates.
- Identical concurrent locate requests (same dimension, target, position, radius) now share one search instead of running duplicates.
- Game tests for both Fabric and NeoForge, run automatically on pull requests.
- Sources jars are now published for mod developers.
- Added configurable limits for concurrent and queued locate searches, preventing unbounded locate work during request bursts. The default allows 2 active searches and 128 queued searches.
<details>
<summary>All Changes</summary>
[Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.1-1.5.4...1.21.1-1.6.0)
</details>
### Fixes:
- ExplorationMapFunction.run performed the search before calling MapItem.create, meaning the original mixin never prevented the blocking operation from running on the main thread and instead started a redundant asynchronous search afterwards. The injection has now been moved to run before ServerLevel#findNearestMapStructure, cancelling the synchronous search entirely so exploration maps are now located asynchronously. This was a critical issue since first version of AsyncLocator-Refined.
- Fixed thread safety races in structure lookups that could corrupt state or crash when locating off-thread.
- Fixed a race where locate callbacks could run before the map item was placed, producing broken maps in chests and villager trades.
- Eyes of Ender are now refunded if the stronghold search fails, times out (60s), or errors, like vanilla.
- Dolphins no longer lose their treasure target when their search goal restarts, and handle failed searches like vanilla.
- Villager trade offers now refresh correctly for the trading player once a map search completes.
- /locate errors are now reported to the command sender instead of being swallowed, while preserving the client's language.
### Added:
- Expanded the public API for other mods, adding configurable locate timeouts and support for biome searches using custom biome predicates.
- Identical concurrent locate requests (same dimension, target, position, radius) now share one search instead of running duplicates.
- Game tests for both Fabric and NeoForge, run automatically on pull requests.
- Sources jars are now published for mod developers.
- Added configurable limits for concurrent and queued locate searches, preventing unbounded locate work during request bursts. The default allows 2 active searches and 128 queued searches.
<details>
<summary>All Changes</summary>
[Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.5-1.5.0...1.21.5-1.6.0)
</details>
### Fixes:
- ExplorationMapFunction.run performed the search before calling MapItem.create, meaning the original mixin never prevented the blocking operation from running on the main thread and instead started a redundant asynchronous search afterwards. The injection has now been moved to run before ServerLevel#findNearestMapStructure, cancelling the synchronous search entirely so exploration maps are now located asynchronously. This was a critical issue since first version of AsyncLocator-Refined.
- Fixed thread safety races in structure lookups that could corrupt state or crash when locating off-thread.
- Fixed a race where locate callbacks could run before the map item was placed, producing broken maps in chests and villager trades.
- Eyes of Ender are now refunded if the stronghold search fails, times out (60s), or errors, like vanilla.
- Dolphins no longer lose their treasure target when their search goal restarts, and handle failed searches like vanilla.
- Villager trade offers now refresh correctly for the trading player once a map search completes.
- /locate errors are now reported to the command sender instead of being swallowed, while preserving the client's language.
### Added:
- Expanded the public API for other mods, adding configurable locate timeouts and support for biome searches using custom biome predicates.
- Identical concurrent locate requests (same dimension, target, position, radius) now share one search instead of running duplicates.
- Game tests for both Fabric and NeoForge, run automatically on pull requests.
- Sources jars are now published for mod developers.
- Added configurable limits for concurrent and queued locate searches, preventing unbounded locate work during request bursts. The default allows 2 active searches and 128 queued searches.
<details>
<summary>All Changes</summary>
[Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.5-1.5.0...1.21.5-1.6.0)
</details>
- Fixed exploration maps getting stuck with mods that virtualize per-player inventories. Maps are now updated via players' containers as the default option.
- This issue was reported due to an incompatibility with Lootr. [See Issue #5](https://github.com/Alvaro842DEV/AsyncLocator-Refined/issues/5)
- This fix is a improvement over the same fix of the 1.21.1, because it now stores the UUID, update all types of containers and improves performance on large servers by not having to count the inventories of all connected players
<details>
<summary>All Changes</summary>
[Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.1-1.5.3...1.21.1-1.5.4)
</details>
- Fixed exploration maps getting stuck with mods that virtualize per-player inventories. Maps are now updated via players' containers as the default option.
- This issue was reported due to an incompatibility with Lootr. [See Issue #5](https://github.com/Alvaro842DEV/AsyncLocator-Refined/issues/5)
- This fix is a improvement over the same fix of the 1.21.1, because it now stores the UUID, update all types of containers and improves performance on large servers by not having to count the inventories of all connected players
<details>
<summary>All Changes</summary>
[Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.1-1.5.3...1.21.1-1.5.4)
</details>
- Fixed exploration maps getting stuck with mods that virtualize per-player inventories. Maps are now updated via players' containers as the default option.
- This issue was reported due to an incompatibility with Lootr. [See Issue #5](https://github.com/Alvaro842DEV/AsyncLocator-Refined/issues/5)
- This fix is a improvement over the same fix of the 1.21.1, because it now stores the UUID, update all types of containers and improves performance on large servers by not having to count the inventories of all connected players
<details>
<summary>All Changes</summary>
[Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.4-1.5.2-Hotfix...1.21.4-1.5.3)
</details>
- Fixed exploration maps getting stuck with mods that virtualize per-player inventories. Maps are now updated via players' containers as the default option.
- This issue was reported due to an incompatibility with Lootr. [See Issue #5](https://github.com/Alvaro842DEV/AsyncLocator-Refined/issues/5)
- This fix is a improvement over the same fix of the 1.21.1, because it now stores the UUID, update all types of containers and improves performance on large servers by not having to count the inventories of all connected players
<details>
<summary>All Changes</summary>
[Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.4-1.5.2-Hotfix...1.21.4-1.5.3)
</details>
- Fixed exploration maps getting stuck with mods that virtualize per-player inventories. Maps are now updated via players' containers as the default option
- This issue was reported due to an incompatibility with Lootr. [See Issue #5](https://github.com/Alvaro842DEV/AsyncLocator-Refined/issues/5)
<details>
<summary>All Changes</summary>
[Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.1-1.5.2-Hotfix...1.21.1-1.5.3)
</details>
- Fixed exploration maps getting stuck with mods that virtualize per-player inventories. Maps are now updated via players' containers as the default option
- This issue was reported due to an incompatibility with Lootr. [See Issue #5](https://github.com/Alvaro842DEV/AsyncLocator-Refined/issues/5)
<details>
<summary>All Changes</summary>
[Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.1-1.5.2-Hotfix...1.21.1-1.5.3)
</details>
- Fixed a bug where, when the server had the mod installed, it
- would block clients from joining unless they had the mod too, even though the mod is server-side only
- Added Spotless to enforce a code format
- Improved build times by applying Gradle parameters
<details>
<summary>All Changes</summary>
[Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.11-1.5.2...1.21.11-1.5.3)
</details>
- Fixed a bug where, when the server had the mod installed, it
- would block clients from joining unless they had the mod too, even though the mod is server-side only
- Added Spotless to enforce a code format
- Improved build times by applying Gradle parameters
<details>
<summary>All Changes</summary>
[Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.11-1.5.2...1.21.11-1.5.3)
</details>
- This is a port of the latest 1.21.5 version to 1.21.11. It's experimental and I haven't tested it thoroughly, but the features seem to work both in vanilla and with mods
<details>
<summary>All Changes</summary>
[Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.5-1.5.0...1.21.11-1.5.2)
</details>
- This is a port of the latest 1.21.5 version to 1.21.11. It's experimental and I haven't tested it thoroughly, but the features seem to work both in vanilla and with mods
<details>
<summary>All Changes</summary>
[Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.5-1.5.0...1.21.11-1.5.2)
</details>
- Fixed a bug where, when the server had the mod installed, it
mod is server-side only
<details>
<summary>All Changes</summary>
[Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.4-1.5.0...1.21.4-1.5.2-Hotfix)
</details>
- Fixed a bug where, when the server had the mod installed, it
mod is server-side only
<details>
<summary>All Changes</summary>
[Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.4-1.5.0...1.21.4-1.5.2-Hotfix)
</details>
- Fixed a bug where, when the server had the mod installed, it
mod is server-side only
<details>
<summary>All Changes</summary>
[Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.1-1.5.1...1.21.1-1.5.2-Hotfix)
</details>
- Fixed a bug where, when the server had the mod installed, it
mod is server-side only
<details>
<summary>All Changes</summary>
[Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.1-1.5.1...1.21.1-1.5.2-Hotfix)
</details>
> Probably the last update to 1.21.1
- Virtual threads are now used, which are much more efficient and managed by the JVM
- Added a consistent format to all code
- Some improvements ported from the 1.21.5
<details>
<summary>All Changes</summary>
- [Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.1-1.5.0...1.21.1-1.5.1)
</details>
> Probably the last update to 1.21.1
- Virtual threads are now used, which are much more efficient and managed by the JVM
- Added a consistent format to all code
- Some improvements ported from the 1.21.5
<details>
<summary>All Changes</summary>
- [Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.1-1.5.0...1.21.1-1.5.1)
</details>
- Contains all the features **up to 1.21.4-1.5.0**
- Updated some methods that have changed since 1.21.4
- Minor improvements
<details>
<summary>All Changes</summary>
- [Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.4-1.5.0...1.21.5-1.5.0)
</details>
- Contains all the features **up to 1.21.4-1.5.0**
- Updated some methods that have changed since 1.21.4
- Minor improvements
<details>
<summary>All Changes</summary>
- [Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.4-1.5.0...1.21.5-1.5.0)
</details>
- Contains all the features **up to 1.21.1-1.5.0**
- Updated some methods that have changed since 1.21.1
<details>
<summary>All Changes</summary>
- [Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.1-1.4.3...1.21.4-1.5.0)
</details>
- Contains all the features **up to 1.21.1-1.5.0**
- Updated some methods that have changed since 1.21.1
<details>
<summary>All Changes</summary>
- [Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.1-1.4.3...1.21.4-1.5.0)
</details>
- The command **/locate biome** is asynchronous!
- Support locating strongholds from mods that replace the vanilla stronghold
<details>
<summary>All Changes</summary>
- [Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.1-1.4.3...1.21.1-1.5.0)
</details>
- The command **/locate biome** is asynchronous!
- Support locating strongholds from mods that replace the vanilla stronghold
<details>
<summary>All Changes</summary>
- [Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.1-1.4.3...1.21.1-1.5.0)
</details>
- Validate invalid config values and set limits
- Avoid shutdown crash and improves lazy initialization
- Minor fix to be compatible with merchant offer create by another mods.
- Related to this [issue](https://github.com/Alvaro842DEV/AsyncLocator-Refined/issues/2)**
<details>
<summary>All Changes</summary>
- [Commit](https://github.com/Alvaro842DEV/AsyncLocator-Refined/commit/33dabaa4aa4b989e157bf4a7a53b21966804c5de) with the fix
- [Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.1-1.4.2...1.21.1-1.4.3)
- Validate invalid config values and set limits
- Avoid shutdown crash and improves lazy initialization
- Minor fix to be compatible with merchant offer create by another mods.
- Related to this [issue](https://github.com/Alvaro842DEV/AsyncLocator-Refined/issues/2)**
<details>
<summary>All Changes</summary>
- [Commit](https://github.com/Alvaro842DEV/AsyncLocator-Refined/commit/33dabaa4aa4b989e157bf4a7a53b21966804c5de) with the fix
- [Full Changelog](https://github.com/Alvaro842DEV/AsyncLocator-Refined/compare/1.21.1-1.4.2...1.21.1-1.4.3)