Links
Tags
Creators
Details
Licensed GPL-3.0-or-later
Published 9 months ago
Updated 3 days ago
All versions
2.1.2-FAWE.2
Release
BetterStructures-FAWE 2.1.2-FAWE.29 months ago 40
Compatibility
Minecraft: Java Edition
1.21.x
1.20.x
Platforms
Paper
Purpur
Required content
Any compatible version
Changes
Changed
- Async terrain scanning (P0): Moved
runScanners()inNewChunkLoadEventfrom synchronousrunTaskLatertorunTaskAsynchronously. All terrain fitness scanning (Topology.scan(),TerrainAdequacy.scan(),getBlock(),getHighestBlockAt()) now runs off the main thread, eliminating TPS impact during chunk exploration.markChunkProcessed()is dispatched back to the main thread for safePersistentDataContainerwrites. - Thread-safe paste dispatch (P0):
FitAnything.paste()now detects whether it is called from the main thread or an async thread, and automatically schedulesBuildPlaceEventandSchematic.pasteSchematic()to the main thread when needed. - Parallel SchematicContainer initialization (P1):
SchematicContainercreation (triple-nested clipboard scanning for chests, signs, spawns) now runs viaparallelStream()during startup, withsynchronizedprotection on the sharedschematicsmultimap. - Async config file saving (P2): New
AsyncConfigSaverutility snapshotsFileConfigurationviasaveToString()on the calling thread, then writes to disk asynchronously. Applied toSchematicConfigField.toggleEnabled()andModulesConfigFields.validateClones(). - Non-blocking WFC debug paste (P3): Replaced
Thread.sleep(50)inWFCNode.debugPaste()withrunTaskLater(1L), eliminating async thread blocking during WFC debug visualization. - dungeonScanner dispatched to main thread:
WFCGeneratorconstructor is not async-safe (BossBar, non-thread-safeHashSet), sodungeonScanneris now explicitly scheduled back to the main thread from the async scan pipeline.
Fixed
- dungeonScanner IndexOutOfBoundsException: Fixed pre-existing bug where
ThreadLocalRandom.nextInt()usedModuleGeneratorsConfig.getModuleGenerators().size()as the upper bound instead of the filteredvalidatedGenerators.size(), causing potentialIndexOutOfBoundsExceptionwhen some generators are filtered out by world/environment checks.
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle. To learn more about the Modrinth Maven API, click here.
Note: When available, you should use the creator's maven repo instead as it will have transitive dependency information that the Modrinth Maven API does not. You may also end up with duplicate dependencies if you use a mix of Modrinth and non-Modrinth Maven repositories for your dependencies, because the group identifier will be different when served through the Modrinth Maven API.
Maven coordinates:
Version ID:
build.gradle:
repositories {
exclusiveContent {
forRepository {
maven {
name = "Modrinth"
url = "https://api.modrinth.com/maven"
}
}
// forRepositories(fg.repository) // Uncomment when using ForgeGradle
filter {
includeGroup "maven.modrinth"
}
}
}
// Standard Gradle dependency
dependencies {
implementation "maven.modrinth:1JHdsCoL:4UcMDwjP"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:1JHdsCoL:4UcMDwjP"
}

