wywf-1.3.0+26.x.jar
Curse Maven Snippet
What's new
Added
onlymodifier (only,just,single,только,лишь,одна): accept seeds with exactly one instance of the structure within range. Example:only desert pyramid— exactly one pyramid within ~500 blocks.betweenmodifier (between,mid,middle,от,между,диапазон): structure must be within a specific distance range. Examples:village between 500 to 800,500..800 village,деревня от 500 до 800. Supports separators..,to,do,до.some Ncount:somenow accepts an explicit count. Example:some 4 village— at least 4 villages within ~320 blocks.some village(no number) defaults to at least 2.- Modifier display in search log: Terms now show modifier details:
some 4 minecraft:village,between 500..800 minecraft:village_plains. - Mod Menu + YACL config screen: settings are now accessible via Mod Menu (config button). Uses YACL for a beautiful categorized UI with sliders, dropdowns, and toggles. Both Mod Menu and YACL are optional — the mod works without them (settings via
config/wywf.json). Available settings: query language, thread mode, scan radii, sample step, candidate count, stop-at-first toggle, sort-by-distance toggle. - "Did you mean?" with consonant-skeleton matching: when the query contains misspelled words, the mod suggests corrections by matching consonant skeletons (e.g. "mnsn" → "mansion", "vllg" → "village", "dsert" → "desert"). Shows ALL corrections at once. Works even when ALL words are misspelled.
- ExclusionZone enforcement: structure placements now respect vanilla exclusion zones — a structure whose placement is blocked by a nearby structure from another set is correctly rejected.
- Spawn block prediction improvement: spawn block scanning now covers ±2 chunks (32 blocks) around the origin, matching vanilla's spawn search area, instead of only the origin chunk.
- Sort candidates by distance: when ON, the final candidate is chosen by distance to the nearest structure (closest first), rather than randomly. Default: OFF. Toggle in Mod Menu → Search.
- Time limit: maximum search time before stopping. Default: 30 minutes, minimum: 5 minutes. When reached, a dialog asks whether to use the best candidate found, double the limits and search more, or cancel.
- Max seeds to check: hard limit on seeds evaluated. Default: 10,000,000, minimum: 1,000,000. When reached, same dialog as time limit. Both limits enforce minimums — inputting a lower value snaps to the minimum.
- Implicit biome for structures: when a structure has a unique natural biome and the query doesn't specify one, the biome is auto-added (mansion → dark_forest, desert_pyramid → desert, swamp_hut → swamp, ocean_monument → ocean, village_desert → desert, village_plains → plains, village_taiga → taiga, village_savanna → savanna, village_snowy → snowy_plains, etc.).
- Reverse variant mapping: structure variants (village_desert, village_plains, etc.) now resolve back to their base structure (village) for placement checks. Without this, the prefilter couldn't find the structure in StructureSets and discarded ALL seeds.
Changed
- Distance constants tuned:
near: 200 blocks (was default radius).in: 64 blocks.far: 500–1000 blocks (was ~1000–2000).some: 320 blocks scan radius.only: 500 blocks scan radius.
- NEVER prefilter removed. The structure placement prefilter for
neverwas too aggressive for common structures (villages, etc.) — it mathematically could never reject within the search radius. Full validation handlesnevercorrectly without a prefilter. - SOME/ONLY re-scan uses biome-aware
positions()(not placement-only). BETWEEN still usespositionsPlacementOnly().
Fixed
- NEVER false positives:
never plains villagepreviously accepted seeds with a village within range. Reverted tofirstPositionPlacementOnlywhich correctly resolves structure variants (e.g.village_plains→ all village placements viaminecraft:villageStructure key). - SOME re-scan radius:
structureScanRadiusChunksfor SOME returned the fullsearchRadiusChunks(40 chunks / 640 blocks) instead ofchunks(SOME_BLOCKS)(20 chunks / 320 blocks). Villages at 668+ blocks were incorrectly shown forsome 4 village. - BETWEEN parsing: trailing
500 to 800after a term (likevillage 500 to 800) was not attached. Now retroactively applied to the last term at end-of-loop. - BETWEEN re-scan display: positions outside
[betweenMin, betweenMax]were shown. Now filtered correctly. evalBiomeTermDirectstep: ONLY/BETWEEN biome cases now useeffectiveStep(quartY)for correct underground biome sampling.evalBiomeTermDirectBETWEEN biome bug: now usesBiomeField.nearestDistanceBlocks(key, betweenMin, betweenMax)for correct range matching.splitBetweenWordhelper: handles single-word BETWEEN patterns (500..800,500до800,500to800,500do800).- Thread safety: structure cache race condition.
SeedValidator.structureCacheinner maps were plainHashMapshared across multiple search threads — could causeConcurrentModificationExceptionor corrupted data during concurrent reads. Changed toConcurrentHashMap. - Thread safety:
WorldContext.sampler()non-volatile lazy init. Multiple threads could see a partially-constructedClimate.Samplerobject. Addedvolatile. stopReasonnot reset between searches. If search A finished with a stop reason (e.g. "time limit reached"), search B's completion handler would show the wrong reason. Now cleared instart().- Duplicate implicit biomes.
addImplicitBiomescould add the same biome multiple times if two structures mapped to the same biome (e.g. "ocean monument ocean ruins" → two ocean biome terms). Now tracks already-added biomes. - Dangling modifier applied to wrong word. "near xyz village" — the NEAR modifier was intended for "xyz" (which was ignored), but was incorrectly applied to "village". Now modifiers are reset when a word is ignored.
- All threads named the same. Worker threads were all named
"WYWF-Search-{count}", making them indistinguishable in thread dumps. Now uses anAtomicIntegercounter. - Progress counter drift in linear (biome-only) search.
SearchWorker.runLineardid not incrementglobalSeedCursoron error, causing the progress display to undercount checked seeds.runSplitalready did this correctly. - Duplicate synonym warnings. Removed duplicate structure entries (
desert_pyramid,jungle_pyramid,swamp_hut,igloo,monument) that shared synonyms with generic entries and caused first-wins warnings at startup. Unique synonyms from removed duplicates were merged into the generic entries. Village variant entries (village_plains, etc.) kept for compound binding. woodlandsynonym conflict. Removed "woodland" from mansion synonyms — it was already claimed by the forest biome entry.- MC lang parser warning. Moved synonym data files from
lang/todata/(assets/wywf/data/en_us.json,ru_ru.json) to prevent Minecraft's resource loader from attempting to parse them as language files (which expected string values, not arrays). UpdatedKeywordDictionaryloader paths. - Empty query handling.
SeedSearcher.start()now firesonFoundwith aSearchResult(primaryDescription=null)when all terms are filtered out (e.g. unsupported biomes/structures for the MC version), instead of silently never completing — the UI no longer gets stuck on "Preparing...". The null description routes toSearchLimitReachedScreeninstead of trying to create a world with seed 0. - Text rendering on MC 26.x.
GuiGraphicsExtractor.text()andcenteredText()checkARGB.alpha(color) == 0and skip the draw. All UI text colors now use0xFFFFFFFF(with alpha byte) instead of0xFFFFFF, which was silently dropped.
All Relations
- All Relations
- Embedded Library
- Optional Dependency
- Required Dependency
- Tool
- Incompatible
- Include
This mod has no related projects