Links
Tags
Creators
Details
3.3.1
Compatibility
Changes
AntiSeedCracker 3.3.1 — Concurrency, Security & Performance Fixes Follow-up to 3.3.0's critical world-generation fix. This release comes from a full audit pass of the codebase looking specifically for bugs, not new features.
Fixed Thread-visibility bug: pluginConfig and databaseManager were reassigned by /asc reload on the main thread but read from PacketEvents' Netty I/O threads and the async scheduler with no volatile — no guaranteed visibility of a live config reload to those threads on a busy server. Both are now volatile. Security-relevant bug: extra_blocked_commands entries were never lowercased at load, while the matching logic always compares against a lowercased command name. Any admin who typed a mixed-case command in config.yml had it silently fail to block. Fixed by normalizing the list once at load. Performance regression introduced in 3.3.0: StructureReconMonitor called chunk.getStructures() on every chunk-boundary crossing for every player with no caching — the same class of large-server cost problem this whole release line exists to fix, just in new code. Now backed by a shared per-world chunk cache, so each chunk's structure lookup happens once total instead of once per player-visit. Also added ANCIENT_CITY to the tracked structure set. I/O inefficiency: the audit logger opened and closed a fresh file handle for every single logged event. It now keeps one writer open per day, flushed per write, rotated only on date change. Dead code removal: leftover fields/methods from the 3.3.0 removal of WorldSeedInterceptor (SeedManager.worldSeeds, assignWorldFakeSeed, getWorldFakeSeed, forgetWorld, purgeOfflinePlayers) had zero remaining callers and were deleted.
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:gQUW81Bf:oGdzka3Z"
}
// Legacy Loom dependency
dependencies {
modImplementation "maven.modrinth:gQUW81Bf:oGdzka3Z"
}

