Skip to content

2.6.1-26.1

Choose a tag to compare

@Ayfri Ayfri released this 29 Jun 19:40
Immutable release. Only release title and notes can be modified.
d5c2390
image

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_trade and trade_set generators, 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): Extend Known_Issues.md with detailed limitations and workarounds for Kore. 51f7ab3
  • docs(ai): Update README and Home.md to include Kore-Skill AI skills pack link. 0cde2af
  • docs(bindings): Update Bindings.md with new setup steps and example improvements. d0028c5
  • docs(commands): Add KDoc to all commands. e5bf892
  • docs(commands): Fix wrong syntaxes in commands examples. 16ba50b
  • docs(concepts): Add Selectors.md with comprehensive overview on building Minecraft target selectors in Kore, including typed builders, filtering capabilities, and score-based conditions. 2d44932
  • docs(concepts): Add Time documentation for ticks, seconds, and days, usage examples, arithmetic, conversions, and command integration. 9b2c569
  • docs(contributing): Add Arguments.md and Cookbook.md for contributors. Introduction to Kore's argument system, practical datapack patterns, including setup functions, logic reuse, custom items, delayed actions, and more. 150a544 80bc008
  • docs(getting-started): Add link to "Learn X in Y Minutes - Kotlin" for a quick syntax refresher. 8b8750b
  • docs(getting-started): Expand Kotlin basics section, add explanations for val/var, functions, and extension functions, include quick learning resources links. 9ac611c
  • docs(guide): Revamp Getting_Started.md to provide a more comprehensive guide, emphasizing iterative development, modular project structure, and practical tips. ddbcb78
  • docs(guides): Add advanced migration guide from Datapacks to Kore. 5c22eba
  • docs(guides): Enhance configuration guide with detailed explanations. 8a3862f
  • docs(helpers): Update Display_Entities and Mannequins docs with OOP entity handles, code examples, and enhanced functionality descriptions. 48fac17
  • docs(markdown): Standardize links and hyphenation in documentation, fix inconsistent Markdown syntax, and improve clarity in examples and descriptions. c5df568
  • docs(nbt): Add complete documentation about NBTs. 5a7592d
  • docs(number-providers): Add KDoc to all number providers, update documentation. 8ff7ba5
  • docs(pages): Add copy button for markdown content and load sources. ec2d4c1 2ec7dcf
  • docs(villager-trades): Add Villager Trades documentation, update related pages with references to trade gating, item modifiers, and enchantments. 68f02d9
  • docs(world-clock): Add the World Clocks guide, update Timelines to reference clocks and time markers, improve examples, and align the docs with snapshot 26.1 changes. f3436b5
  • docs(worldgen): Add documentation for FloatProvider types with descriptions, examples, and usage scenarios in feature configuration. 2b1991e
  • docs(worldgen): Document IntProvider types with descriptions, examples, and usage scenarios in feature configuration. aeb9e5f
  • docs(worldgen): Expand Features.md with new vanilla feature types, no-config objects, modifiers, and height providers. Add examples, update descriptions, and fix typos. 676cc22

New Features

  • feat(arguments): Introduce MOB.INVENTORY, replacing the old PIGLIN and VILLAGER slots. aba3d82
  • feat(advancement): Add the player-interact-with-entity trigger. 69cd1be
  • feat(bindings): Add support for customizable HTTP request payload and headers, update related tests and documentation. eefe605
  • feat(bindings): Enhance the GitHub function with API key authentication details, add tests and docs. 00f7dcf
  • feat(chat-components): Add the fallback property to ObjectTextComponent and its subcomponents, update builders, tests, and docs. 30b7b80
  • feat(commands): Add the first swing command support with SwingHand and unit tests. e8bc54f
  • feat(commands): Add placeJigsaw overload with JigsawArgument, enhance placeTemplate with integrity and TemplateMirror, and improve KDoc for place functions. f885b8f
  • feat(commands): Expand /time with of subcommands for clocks, add pause, resume, new queries and setters, update docs and tests. 09fc73f
  • feat(commands): Expand swing with main-hand usage and targets support, update tests. f4ff4f4
  • feat(commands): Update locatePointOfInterest to use PointOfInterestTypeOrTagArgument, add KDoc comments to locate functions. 8a223fd 513a6d7 d4a906e
  • feat(data-driven): Add TradeSet and VillagerTrade generators with builder functions, integrate them into DataPack. 2d035ae c6f034b 94590e7
  • feat(datapack): Add path and iconPath utility functions, removing the need for the kotlinx.io library in simple projects. 8556f71
  • feat(entities): Add OOP entity handles for displays and mannequins, with selector-based targeting, UUID-based identity, and enhanced functionality. f22d89b
  • feat(entities): Add toEntity and entity factory methods for EntityType, update docs with usage examples, and extend tests to validate the new flow. 7e92bf3
  • feat(environment-attributes): Add ambientLightColor, blockLightTint, and nightVisionColor with tests and documentation. fa73f7a
  • feat(item-components): Add the AdditionalTradeCost component with tests and documentation. 79af872
  • feat(item-modifiers): Add includeAdditionalCostComponent to enchantRandomly and enchantWithLevels, update tests and documentation. c6f7022
  • feat(item-modifiers): Add setRandomDyes and setRandomPotion, update documentation and item modifier functionality. 55e6dae
  • feat(item-slot): Add the piglin item slot. 37a10b7
  • feat(nbt-utils): Add more builders for NBT lists. fbe3973
  • feat(oop): Add a more customizable ItemStack.summon. 91d4be2
  • feat(pig-sound-variants): Add the eatSound property to PigSoundVariant, update docs and tests. d96d2a4
  • feat(predicates): Add the environmentAttribute function and EnvironmentAttributeNumberProvider. 2e0c84e
  • feat(predicates): Add environmentAttributeCheck condition and overloads, update docs and tests. 654d184
  • feat(predicates): Add PlayerFoodPredicate with level and saturation, update tests and documentation. 09db797
  • feat(predicates): Add the clock parameter to TimeCheck, update overloads, and cover clock plus period combinations in tests. 7f1df0d
  • feat(predicates): Add the sum number provider, update documentation and tests. a4fc50e
  • feat(predicates): Add utility x, y, z setter functions to Position. 40995b2
  • feat(test-environments): Add the timelineAttributes environment, update docs and tests for timeline-driven mechanics. 5c6e0a6
  • feat(test-environments): Replace TimeOfDay with ClockTimeEnvironment, add a clock parameter, update tests and docs for clock-based time environments. 7b722ed
  • feat(time-command): Add the rate function to control day-night cycle speed, update tests and docs accordingly. 346ad90
  • feat(timelines): Add support for timeMarkers in timelines, introduce TimeMarkerArgument and TimelineMarker, update tests to cover marker usage and clock-aware flows. ea7bbef
  • feat(vec3): Enhance Vec3 and PosNumber with serialization support and docs. f68a73c
  • feat(website-styles): Add scrollMarginTop to the html element for better scrolling behavior. 7cfd313
  • feat(wolf-sound-variants): Add support for age-specific wolf sounds with adultSounds and babySounds, update tests and docs. c1c40b8
  • feat(worldclock): Add the WorldClock class and worldClock function, with tests for creation and registration. 77bd8a8
  • feat(worldgen): Add defaultClock to DimensionType, update tests and docs for WorldClock integration. 0af46d7
  • feat(worldgen): Add the endSpike factory function, update docs. b55db8d
  • feat(worldgen): Add extensive configuredFeature test coverage for many vanilla feature types, including bamboo, basaltColumns, dripstoneCluster, geode, and more. 53df549
  • feat(worldgen): Add FloatProvider factory functions with aliases for disambiguation, plus full unit test coverage for all supported float provider types. a1ea226
  • feat(worldgen): Add TrapezoidIntProvider and the trapezoid factory function, update functions.kt ordering. 16dab69

Bug Fixes

  • fix(advancement): Add the missing from AdvancementRoute, improve KDoc. bf07d93
  • fix(bindings): Correct the cache directory path in getCacheDir for consistency. 48bde8d
  • fix(bossbar): Add the missing setName overload with a text component and improve KDoc. 15b8767
  • fix(commands): Add the missing entity literal to teleport overloads, improve KDoc. 318f75e
  • fix(commands): Add the missing fill options for the fill command. c76866e
  • fix(commands): Add the missing set sub-literal for style in waypoint modify, refine KDoc for WaypointModify and related functions. c0a7fa2
  • fix(commands): Fix many clone grammar issues, add missing modes and sub-literals, improve KDoc. 9ed7482
  • fix(commands): Replace sequenceId with RandomSequenceArgument, improve random command KDoc. 5eb7557
  • fix(components): Replace InlinableList with List in ProvidesBannerPatterns, add PatternListSerializer, and update providesBannerPatterns helpers. 3515467
  • fix(data): Add missing support for string-based data commands, including append, insert, merge, and prepend operations. e041065
  • fix(docs): Update test commands in contributing documentation for consistency. 32feda0
  • fix(helpers): Fix the double namespace issue, broken self-recursion, and max-hit dedup in raycast. 933743b
  • fix(item): Correct the argument order in toItemArgument. 669152c
  • fix(playsound): Replace SoundArgument with SoundEventArgument in playSound. 4ae24e5
  • fix(stopwatch): Update the scale parameter to use a float type. 84edfb0
  • fix(time): Update Time.toString() to use toStringTruncatedIfRound, extend TitleCommand tests. 5b7969b
  • fix(vec): Fix the double truncation logic, add more tests, and repair the raycast test. b3e3618
  • fix(worldgen): Add the randomSelector factory function and DSL, update docs. 25114cc
  • fix(worldgen): Simplify Features serialization logic, replace InlinableListSerializer with ListSerializer, and preserve positional order with empty lists. ebde9c9

Refactors

  • refactor(item-components): Update components to support multiple IDs or tags for providesBannerPatterns, blocksAttacks, and damageResistant. 945596b
  • refactor(item-modifiers): Enhance setInstrument to support a single ID, a tag, or multiple IDs and tags, update related docs and tests. d3d82af
  • refactor(number-providers): Remove the custom serializer from ScoreTargetNumberProvider, simplify the implementation. e7d0d5a
  • refactor(worldgen): Add DSL improvements for RuleBasedBlockStateProvider, enhance rule configurability, update related tests and docs. 7af02b8
  • refactor(worldgen): Enhance the AlterGround tree decorator DSL, add builder block support, update tests and usage. c87b7e3
  • refactor(worldgen): Remove Flower, NoBonemealFlower, and RandomPatch configurations, update documentation to reflect the change. f16ae73
  • refactor(worldgen): Rename RuleBasedBlockStateProvider to RuleBasedStateProvider, update usages, tests, and docs accordingly. aef0afb
  • refactor(worldgen): Replace RuleBasedBlockStateProvider with BlockStateProvider across 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