2.6.1-26.1
Welcome to Kore 26.1!
Kore 26.1 was a pretty long cycle.
It started with some groundwork on the late 1.21.11 side, then turned into a proper push for the new 26.1 data-driven systems. World clocks, timelines, villager trades, better time utilities, more worldgen coverage, and nicer OOP handles for displays and mannequins all landed here.
A lot of this cycle was also just polish, in the good way. There are plenty of docs, tests, serializer cleanups, and small API fixes in here because 26.1 added a lot of surface area, and I wanted Kore's DSL around it to feel nice instead of just technically complete.
What's new?
The big stuff this cycle was:
- World Clocks and the expanded Time DSL let you create custom clocks, timelines, time markers, clock-aware predicates, and
time.of(clock)command flows. - Villager Trades introduce fully data-driven
villager_tradeandtrade_setgenerators, with item modifiers, predicates, and reusable trade pools. - Worldgen Features grew a lot during 26.1: more vanilla configured features, better block state providers, new height and number providers, and stronger test coverage for generated JSON.
- Display Entities and Mannequins gained cleaner OOP entity handles, making it easier to summon, target, move, and manage generated entities from Kotlin.
A lot of the later releases were quieter, but they still mattered. Most of that work went into tightening serialization, filling API gaps, and expanding docs and test coverage for worldgen, predicates, commands, and helpers.
Code examples
Here are a few examples of what the biggest 26.1 additions look like in practice.
World clocks, timelines, and commands
val seasonClock = dataPack.worldClock("season")
dataPack.timeline("seasons", clock = seasonClock) {
periodTicks = 96000
timeMarker("spring", ticks = 0, showInCommands = true)
timeMarker("summer", ticks = 24000, showInCommands = true)
timeMarker("autumn", ticks = 48000, showInCommands = true)
timeMarker("winter", ticks = 72000, showInCommands = true)
}
function("skip_to_winter") {
time.of(seasonClock).set(timeMarker("winter", "my_mod"))
}Villager trades and trade sets
This one defines a custom trade and groups it into a level-based trade set, which is exactly the kind of data-driven economy flow 26.1 made possible.
val wheatTrade = dataPack.villagerTrade("wheat_for_emerald") {
wants(Items.WHEAT, count = 20)
gives(Items.EMERALD)
maxUses = constant(16f)
xp = constant(1f)
}
dataPack.tradeSet(
"custom_farmer_novice",
trades = listOf(wheatTrade),
amount = constant(1f),
) {
allowDuplicates = false
}Expanded worldgen DSL
Worldgen got a lot more expressive in 26.1, with richer configured features, state providers, and placement helpers.
val oakTreeCfg = tree {
blobFoliagePlacer(radius = constant(2), offset = constant(0), height = 3)
foliageProvider = simpleStateProvider(Blocks.OAK_LEAVES)
straightTrunkPlacer(baseHeight = 5, heightRandA = 2, heightRandB = 0)
trunkProvider = simpleStateProvider(Blocks.OAK_LOG)
belowTrunkProvider = ruleBasedStateProvider {
fallback = simpleStateProvider(Blocks.DIRT)
rule {
ifTrue { hasSturdyFace(direction = Direction.DOWN) }
then(simpleStateProvider(Blocks.GRASS_BLOCK))
}
}
}
val oakTree = dataPack.configuredFeature("oak_tree", oakTreeCfg) {}
dataPack.placedFeature("oak_tree_placed", oakTree) {
inSquare()
count(constant(8))
heightRange(trapezoidHeightProvider(minInclusive = 64, maxInclusive = 100, plateau = 12))
biome()
}OOP handles for generated entities
Helpers and OOP utilities also became easier to compose, especially when you want a generated display or mannequin to turn into a strongly-typed handle you can reuse later.
val display = blockDisplay {
blockState(Blocks.STONE)
}.interpolable(vec3(0, 64, 0))
display.summon()
val entity = display.toEntity<BlockDisplayEntity>()
entity.addTag("intro_display")
entity.teleportTo(0, 65, 0)Changelog
Documentation
docs(advanced): ExtendKnown_Issues.mdwith detailed limitations and workarounds for Kore.51f7ab3docs(ai): Update README and Home.md to includeKore-SkillAI skills pack link.0cde2afdocs(bindings): UpdateBindings.mdwith new setup steps and example improvements.d0028c5docs(commands): Add KDoc to all commands.e5bf892docs(commands): Fix wrong syntaxes in commands examples.16ba50bdocs(concepts): AddSelectors.mdwith comprehensive overview on building Minecraft target selectors in Kore, including typed builders, filtering capabilities, and score-based conditions.2d44932docs(concepts): AddTimedocumentation for ticks, seconds, and days, usage examples, arithmetic, conversions, and command integration.9b2c569docs(contributing): AddArguments.mdandCookbook.mdfor contributors. Introduction to Kore's argument system, practical datapack patterns, including setup functions, logic reuse, custom items, delayed actions, and more.150a54480bc008docs(getting-started): Add link to "Learn X in Y Minutes - Kotlin" for a quick syntax refresher.8b8750bdocs(getting-started): Expand Kotlin basics section, add explanations forval/var, functions, and extension functions, include quick learning resources links.9ac611cdocs(guide): RevampGetting_Started.mdto provide a more comprehensive guide, emphasizing iterative development, modular project structure, and practical tips.ddbcb78docs(guides): Add advanced migration guide from Datapacks to Kore.5c22ebadocs(guides): Enhance configuration guide with detailed explanations.8a3862fdocs(helpers): UpdateDisplay_EntitiesandMannequinsdocs with OOP entity handles, code examples, and enhanced functionality descriptions.48fac17docs(markdown): Standardize links and hyphenation in documentation, fix inconsistent Markdown syntax, and improve clarity in examples and descriptions.c5df568docs(nbt): Add complete documentation about NBTs.5a7592ddocs(number-providers): Add KDoc to all number providers, update documentation.8ff7ba5docs(pages): Add copy button for markdown content and load sources.ec2d4c12ec7dcfdocs(villager-trades): AddVillager Tradesdocumentation, update related pages with references to trade gating, item modifiers, and enchantments.68f02d9docs(world-clock): Add theWorld Clocksguide, updateTimelinesto reference clocks and time markers, improve examples, and align the docs with snapshot 26.1 changes.f3436b5docs(worldgen): Add documentation forFloatProvidertypes with descriptions, examples, and usage scenarios in feature configuration.2b1991edocs(worldgen): DocumentIntProvidertypes with descriptions, examples, and usage scenarios in feature configuration.aeb9e5fdocs(worldgen): ExpandFeatures.mdwith new vanilla feature types, no-config objects, modifiers, and height providers. Add examples, update descriptions, and fix typos.676cc22
New Features
feat(arguments): IntroduceMOB.INVENTORY, replacing the oldPIGLINandVILLAGERslots.aba3d82feat(advancement): Add the player-interact-with-entity trigger.69cd1befeat(bindings): Add support for customizable HTTP request payload and headers, update related tests and documentation.eefe605feat(bindings): Enhance the GitHub function with API key authentication details, add tests and docs.00f7dcffeat(chat-components): Add thefallbackproperty toObjectTextComponentand its subcomponents, update builders, tests, and docs.30b7b80feat(commands): Add the firstswingcommand support withSwingHandand unit tests.e8bc54ffeat(commands): AddplaceJigsawoverload withJigsawArgument, enhanceplaceTemplatewithintegrityandTemplateMirror, and improve KDoc forplacefunctions.f885b8ffeat(commands): Expand/timewithofsubcommands for clocks, addpause,resume, new queries and setters, update docs and tests.09fc73ffeat(commands): Expandswingwith main-hand usage andtargetssupport, update tests.f4ff4f4feat(commands): UpdatelocatePointOfInterestto usePointOfInterestTypeOrTagArgument, add KDoc comments tolocatefunctions.8a223fd513a6d7d4a906efeat(data-driven): AddTradeSetandVillagerTradegenerators with builder functions, integrate them intoDataPack.2d035aec6f034b94590e7feat(datapack): AddpathandiconPathutility functions, removing the need for thekotlinx.iolibrary in simple projects.8556f71feat(entities): Add OOP entity handles for displays and mannequins, with selector-based targeting, UUID-based identity, and enhanced functionality.f22d89bfeat(entities): AddtoEntityandentityfactory methods forEntityType, update docs with usage examples, and extend tests to validate the new flow.7e92bf3feat(environment-attributes): AddambientLightColor,blockLightTint, andnightVisionColorwith tests and documentation.fa73f7afeat(item-components): Add theAdditionalTradeCostcomponent with tests and documentation.79af872feat(item-modifiers): AddincludeAdditionalCostComponenttoenchantRandomlyandenchantWithLevels, update tests and documentation.c6f7022feat(item-modifiers): AddsetRandomDyesandsetRandomPotion, update documentation and item modifier functionality.55e6daefeat(item-slot): Add the piglin item slot.37a10b7feat(nbt-utils): Add more builders for NBT lists.fbe3973feat(oop): Add a more customizableItemStack.summon.91d4be2feat(pig-sound-variants): Add theeatSoundproperty toPigSoundVariant, update docs and tests.d96d2a4feat(predicates): Add theenvironmentAttributefunction andEnvironmentAttributeNumberProvider.2e0c84efeat(predicates): AddenvironmentAttributeCheckcondition and overloads, update docs and tests.654d184feat(predicates): AddPlayerFoodPredicatewithlevelandsaturation, update tests and documentation.09db797feat(predicates): Add theclockparameter toTimeCheck, update overloads, and coverclockplusperiodcombinations in tests.7f1df0dfeat(predicates): Add thesumnumber provider, update documentation and tests.a4fc50efeat(predicates): Add utilityx,y,zsetter functions toPosition.40995b2feat(test-environments): Add thetimelineAttributesenvironment, update docs and tests for timeline-driven mechanics.5c6e0a6feat(test-environments): ReplaceTimeOfDaywithClockTimeEnvironment, add aclockparameter, update tests and docs for clock-based time environments.7b722edfeat(time-command): Add theratefunction to control day-night cycle speed, update tests and docs accordingly.346ad90feat(timelines): Add support fortimeMarkersin timelines, introduceTimeMarkerArgumentandTimelineMarker, update tests to cover marker usage and clock-aware flows.ea7bbeffeat(vec3): EnhanceVec3andPosNumberwith serialization support and docs.f68a73cfeat(website-styles): AddscrollMarginTopto thehtmlelement for better scrolling behavior.7cfd313feat(wolf-sound-variants): Add support for age-specific wolf sounds withadultSoundsandbabySounds, update tests and docs.c1c40b8feat(worldclock): Add theWorldClockclass andworldClockfunction, with tests for creation and registration.77bd8a8feat(worldgen): AdddefaultClocktoDimensionType, update tests and docs forWorldClockintegration.0af46d7feat(worldgen): Add theendSpikefactory function, update docs.b55db8dfeat(worldgen): Add extensiveconfiguredFeaturetest coverage for many vanilla feature types, includingbamboo,basaltColumns,dripstoneCluster,geode, and more.53df549feat(worldgen): AddFloatProviderfactory functions with aliases for disambiguation, plus full unit test coverage for all supported float provider types.a1ea226feat(worldgen): AddTrapezoidIntProviderand thetrapezoidfactory function, updatefunctions.ktordering.16dab69
Bug Fixes
fix(advancement): Add the missingfromAdvancementRoute, improve KDoc.bf07d93fix(bindings): Correct the cache directory path ingetCacheDirfor consistency.48bde8dfix(bossbar): Add the missingsetNameoverload with a text component and improve KDoc.15b8767fix(commands): Add the missingentityliteral toteleportoverloads, improve KDoc.318f75efix(commands): Add the missing fill options for the fill command.c76866efix(commands): Add the missingsetsub-literal forstyleinwaypoint modify, refine KDoc forWaypointModifyand related functions.c0a7fa2fix(commands): Fix manyclonegrammar issues, add missing modes and sub-literals, improve KDoc.9ed7482fix(commands): ReplacesequenceIdwithRandomSequenceArgument, improverandomcommand KDoc.5eb7557fix(components): ReplaceInlinableListwithListinProvidesBannerPatterns, addPatternListSerializer, and updateprovidesBannerPatternshelpers.3515467fix(data): Add missing support for string-based data commands, including append, insert, merge, and prepend operations.e041065fix(docs): Update test commands in contributing documentation for consistency.32feda0fix(helpers): Fix the double namespace issue, broken self-recursion, and max-hit dedup in raycast.933743bfix(item): Correct the argument order intoItemArgument.669152cfix(playsound): ReplaceSoundArgumentwithSoundEventArgumentinplaySound.4ae24e5fix(stopwatch): Update thescaleparameter to use a float type.84edfb0fix(time): UpdateTime.toString()to usetoStringTruncatedIfRound, extendTitleCommandtests.5b7969bfix(vec): Fix the double truncation logic, add more tests, and repair the raycast test.b3e3618fix(worldgen): Add therandomSelectorfactory function and DSL, update docs.25114ccfix(worldgen): SimplifyFeaturesserialization logic, replaceInlinableListSerializerwithListSerializer, and preserve positional order with empty lists.ebde9c9
Refactors
refactor(item-components): Update components to support multiple IDs or tags forprovidesBannerPatterns,blocksAttacks, anddamageResistant.945596brefactor(item-modifiers): EnhancesetInstrumentto support a single ID, a tag, or multiple IDs and tags, update related docs and tests.d3d82afrefactor(number-providers): Remove the custom serializer fromScoreTargetNumberProvider, simplify the implementation.e7d0d5arefactor(worldgen): Add DSL improvements forRuleBasedBlockStateProvider, enhance rule configurability, update related tests and docs.7af02b8refactor(worldgen): Enhance theAlterGroundtree decorator DSL, add builder block support, update tests and usage.c87b7e3refactor(worldgen): RemoveFlower,NoBonemealFlower, andRandomPatchconfigurations, update documentation to reflect the change.f16ae73refactor(worldgen): RenameRuleBasedBlockStateProvidertoRuleBasedStateProvider, update usages, tests, and docs accordingly.aef0afbrefactor(worldgen): ReplaceRuleBasedBlockStateProviderwithBlockStateProvideracross tree configurations, update the relevant docs and test cases.fa1f987
Full changelog: https://github.com/Ayfri/Kore/compare/v2.0.2-1.21.11..v2.6.1-26.1-rc-3