Kore Releases

Browse all Kore releases, release notes, and version history, automatically fetched from GitHub.

Changelogs focus on what changed between two minor Minecraft releases. If there were no changes in-between, you may see a short or empty entry.

Release Type
Sort Order
Minecraft Versions
26.2(16)
26.1(25)
26.1.2(4)
26.1.1(2)
1.21(117)
1.21.11(23)
1.21.10(2)
1.21.9(15)
1.21.8(3)
1.21.7(3)
1.21.6(13)
1.21.5(15)
1.21.4(10)
1.21.3(2)
1.21.2(15)
1.21.1(4)
1.20(43)
1.20.6(2)
1.20.5(24)
1.20.4(2)
1.20.3(15)

Changelogs

Showing 37 out of 201 releases

2.13.1-26.2

Minecraft changelog

Welcome to Kore 26.2!

kore-2 13 1-26 2-banner

Kore 26.2 is the cycle where the library stopped being JVM-only, and where most of the data-driven DSL got a serious retype.

It started on the tail of 26.1 with a Kotlin 2.4 upgrade and a multiplatform port, then turned into a long pass over worldgen and predicates: scoped builders everywhere, vanilla names everywhere, and a lot of fields fixed to actually match the JSON the game reads. On top of that, the new 26.2 content landed as it came: sulfur cubes, speleothems, geysers, and the usual batch of item component changes.

This cycle is also the most breaking one in a while. Nearly every rename here exists because the old API let you write something the game refuses, or because a global function polluted autocomplete in places it had no business being. The migration is mostly mechanical, and the examples below show the before and after.

What's new?

The big stuff this cycle was:

  • Multiplatform Support: kore, oop, helpers and bindings now target JVM and JS (browser + Node.js) at the same coordinates, powered by a pure-Kotlin ZipReader/ZipWriter and a PlatformIO abstraction (OPFS in the browser). org.joml and kotlin-reflect are gone as dependencies.
  • Kotlin 2.4: no more -Xcontext-parameters compiler argument, and java.util.UUID is replaced by the stable multiplatform kotlin.uuid.Uuid.
  • Worldgen: density functions, surface rules, carvers, processor lists, template pools, structures, block predicates, state providers, vertical anchors and height providers all moved to scoped builders, so autocomplete only offers what is valid in each context. New Providers and Carvers pages came with it.
  • Predicates: every sub-predicate now carries its vanilla *Predicate name, serialization is checked against vanilla-mcdoc, item sub-predicates moved to the component matchers, and score holders became a sealed ScoreProvider.
  • 26.2 content: sulfur_cube_archetype with explosion, contact damage, knockback and sounds, the speleothem rename, geyser particles, the sequence, template, weighted_random_selector and random_patch configured features, and the interval_select density function.

Code examples

Here is what the biggest 26.2 changes look like in practice.

Multiplatform datapacks

kotlin {
	jvm()
	js { browser(); nodejs() }
}

// works on every target
val zipBytes: ByteArray = pack.generateZipBytes()

// JVM/Node only, real filesystem
val datapack = exploreDatapackZip(zipBytes, "uploaded_pack.zip")
Kotlin

Scoped worldgen builders

Configured features, carvers and surface rules are built inside their own scope instead of loose global functions, so autocomplete only offers what is valid where you are.

// Before: global functions, the name is a positional argument of an outer call
configuredFeature("ore_iron", ore(size = 9, discardChanceOnAirExposure = 0.0) {
	targets(target(tagMatch(BlockTags.STONE_ORE_REPLACEABLES), blockState(Blocks.IRON_ORE)))
})
configuredFeature("bamboo_feature", bamboo(probability = 0.2))

// After: one scope, one method per feature type, the name is the first parameter
configuredFeatures {
	ore("ore_iron", size = 9, discardChanceOnAirExposure = 0.0) {
		targets { target(blockState(Blocks.IRON_ORE)) { target = tagMatch(BlockTags.STONE_ORE_REPLACEABLES) } }
	}
	bamboo("bamboo_feature", probability = 0.2)
}
Kotlin
// Before: surface rules built as nested sequence(condition(...), ...) calls
noiseSettings("overworld") {
	surfaceRule = sequence(
		condition(biome(Biomes.DESERT), block(Blocks.SAND)),
		condition(stoneDepthFloor(offset = 0, addSurfaceDepth = false, secondaryDepthRange = 0), block(Blocks.GRASS_BLOCK)),
		block(Blocks.STONE),
	)
}

// After: a surfaceRules { } scope, condition() takes a block lambda
noiseSettings("overworld") {
	surfaceRules {
		condition(biomes(Biomes.DESERT)) { block(Blocks.SAND) }
		condition(stoneDepth(Surface.FLOOR, addSurfaceDepth = false, secondaryDepthRange = 0)) { block(Blocks.GRASS_BLOCK) }
		block(Blocks.STONE)
	}
}
Kotlin
// Before: carvers split between air and liquid lists on the biome
biome("my_biome") {
	carvers(air = listOf(ConfiguredCarvers.CAVE), liquid = listOf(ConfiguredCarvers.CANYON))
}

// After: a configuredCarvers { } scope, and one flat carvers list on the biome
configuredCarvers {
	cave("my_cave") {
		probability = 0.15
		y = uniformHeightProvider(aboveBottom(8), absolute(180))
		replaceable(Blocks.STONE, Blocks.DIRT, Tags.Block.BASE_STONE_OVERWORLD)
	}
}
biome("my_biome") {
	carvers(ConfiguredCarvers.CANYON, ConfiguredCarvers.CAVE)
}
Kotlin
// Before: positional predicates, offset shared by the whole filter
configuredFeaturesBuilder.spike("test_spike", canPlaceOn = Solid, canReplace = Solid, state = blockStateStone())
blockPredicateFilter(allOf { matchingBlockTag(tag = Tags.Block.DIRT) })

// After: scoped blocks, offset moved inside each predicate
configuredFeaturesBuilder.spike("test_spike", state = blockStateStone()) {
	canPlaceOn { solid() }
	canReplace { solid() }
}
blockPredicateFilter { predicate { matchingBlockTag(Tags.Block.DIRT) { offset(0, -1, 0) } } }
Kotlin
// Before: template pool and processor list entries added through entry()/add()
templatePool("every_element") {
	fallback = TemplatePools.Village.Plains.TOWN_CENTERS
	entry(feature(PlacedFeatures.PILE_HAY), weight = 3, projection = Projection.TERRAIN_MATCHING)
}

// After: one flat builder method per element type, weight/projection as named params
templatePool("every_element") {
	fallback = TemplatePools.Village.Plains.TOWN_CENTERS
	feature(PlacedFeatures.PILE_HAY, weight = 3, projection = Projection.TERRAIN_MATCHING)
	single(Structures.EndCity.BRIDGE_GENTLE_STAIRS, ProcessorLists.HOUSING, weight = 2) {
		overrideLiquidSettings = LiquidSettings.IGNORE_WATERLOGGING
	}
}

processorList("every_processor") {
	blockRot(0.75, Blocks.STONE_BRICKS, Tags.Block.STAIRS)
	capped(6, Nop)
	gravity(HeightMap.OCEAN_FLOOR, offset = -1)
}
Kotlin

World presets keyed by dimension id

Dimensions are keyed by their id instead of their type, so two dimensions can share a type, and generator builders set generator themselves.

// Before: keyed by dimension type, generator assigned by hand, one type usable only once
worldPreset("my_preset") {
	dimension(DimensionTypes.OVERWORLD) {
		generator = noiseGenerator(NoiseSettings.OVERWORLD, multiNoise(BiomePresets.OVERWORLD))
	}
}
dp.noise("hills", firstOctave = -5, amplitudes = listOf(1.0, 0.5, 0.25))

// After: keyed by dimension id, the builder sets generator itself, amplitudes is variadic
worldPreset("my_preset") {
	dimension(Dimensions.OVERWORLD, DimensionTypes.OVERWORLD) {
		noiseGenerator(NoiseSettings.OVERWORLD, multiNoise(BiomePresets.OVERWORLD))
	}
	dimension(DimensionArgument("mining", "test"), DimensionTypes.OVERWORLD_CAVES) {
		noiseGenerator(NoiseSettings.CAVES, multiNoise(BiomePresets.OVERWORLD))
	}
}
dp.noise("cave/entrance") { firstOctave = -5; amplitudes(1.0, 0.5, 0.25) }

// Superflat settings get a layers { } builder, and structureOverrides takes structure set tags
flatLevelGeneratorPreset("tunnelers_dream", Items.STONE) {
	settings {
		layers { layer(Blocks.BEDROCK); layer(Blocks.STONE, height = 230); layer(Blocks.GRASS_BLOCK) }
		structureOverrides(StructureSetTagArgument("my_structure_sets", "test"))
	}
}
Kotlin

Sulfur cubes

// Before: a single explosionFuse field
sulfurCubeArchetype("regular", items = Tags.Item.SWORDS) { explosionFuse = 80 }

// After: structured explosion, contact damage and knockback, plus sound settings
sulfurCubeArchetype("regular", Tags.Item.SWORDS, horizontalKnockbackPower = 0.4f, verticalKnockbackPower = 0.2f) {
	contactDamage(amount = 3f, damageType = DamageTypes.GENERIC, attributeToSource = true)
	explosion(fuse = 80, power = 3, causesFire = true)
}
Kotlin

Migration notes

Every rename in this cycle, with the code to change on your side.

UUID becomes Uuid

The stable kotlin.uuid.Uuid is idiomatic, simpler, and multiplatform. If you only use the uuid() helpers, nothing changes.

// Before
UUID.fromString("6c0b9f1e-...")
UUID.randomUUID()

// After
Uuid.parse("6c0b9f1e-...")
Uuid.random()
Kotlin

item(...) becomes items(...) on item predicates

The builder takes several items and matches any of them, so the plural fits. Loot table entries keep their own item(...), which drops a single item.

// Before
matchTool { item(Items.DIAMOND_PICKAXE, Items.NETHERITE_PICKAXE) }

// After
matchTool { items(Items.DIAMOND_PICKAXE, Items.NETHERITE_PICKAXE) }
Kotlin

Sub-predicates take their vanilla name

Each one is named after the vanilla type it produces, so a name found in the wiki maps to the Kore one, and the global functions stop clashing with other builders of the same name. The loot context enum EntityType became EntityTarget to stop clashing with the EntityTypes registry.

// Before
effects { this[Effects.INVISIBILITY] = effect { amplifier = rangeOrInt(1) } }
equipment { mainHand = itemStack(Items.DIAMOND_SWORD) }
slots { this[WEAPON.MAINHAND] = itemStack(Items.DIAMOND_SWORD) }
location { block { blocks(Blocks.STONE) } }
scoreNumber("kills", EntityType.THIS)

// After
effects { this[Effects.INVISIBILITY] = mobEffectPredicate { amplifier = rangeOrInt(1) } }
equipment { mainHand = itemStackPredicate(Items.DIAMOND_SWORD) }
slots { this[WEAPON.MAINHAND] = itemStackPredicate(Items.DIAMOND_SWORD) }
location { block(Blocks.STONE) }
scoreNumber("kills", EntityTarget.THIS)
Kotlin

timeCheck requires its clock

Vanilla needs a clock to know which time to read, so it moved from a trailing nullable argument to the mandatory first one.

// Before
timeCheck(10f..20f, clock = WorldClocks.OVERWORLD)
timeCheck(0f..6000f, period = 24000, clock = WorldClocks.THE_END)

// After
timeCheck(WorldClocks.OVERWORLD, 10f..20f)
timeCheck(WorldClocks.THE_END, 0f..6000f, period = 24000)
Kotlin

valueCheck requires its range

A value_check without a range never matches anything, so the range is mandatory. An IntRange overload comes with it, since the game clamps both bounds to an integer anyway.

// Before
valueCheck(scoreNumber("kills", EntityType.THIS))

// After
valueCheck(scoreNumber("kills", EntityTarget.THIS), 1..10)
valueCheck(scoreNumber("kills", EntityTarget.THIS), intRange(0f, 10f))
Kotlin

Score holders are now a sealed ScoreProvider

Two nullable parameters let you pass both or neither and get invalid JSON, so the holder is a sealed type now: contextScore for a loot context entity, fixedScore for a name.

// Before
scoreNumber("kills", target = EntityType.THIS)
scoreNumber("kills", name = "Ayfri")

// After
scoreNumber("kills", contextScore(EntityTarget.THIS))
scoreNumber("kills", fixedScore("Ayfri"))
Kotlin

providersRange(...) becomes intRange(...)

Both built the same bound, so they are merged under intRange, which covers floats, providers, ClosedFloatingPointRange and IntRange.

// Before
limitCount(providersRange(min = constant(1f), max = constant(32f)))

// After
limitCount(intRange(min = constant(1f), max = constant(32f)))
Kotlin

Number providers only resolve inside their scopes

constant, uniform and the others now extend IntProviderScope/FloatProviderScope, so they only show up where a provider is accepted, and the int and float versions stop being ambiguous. weightedList gets a shorter syntax at the same time.

// Before
count(weightedList {
	add(weightedEntry(7, constant(1)))
	add(weightedEntry(3, constant(3)))
})

// After
count(weightedList {
	entry(7, constant(1))
	entry(3, constant(3))
})
count(weightedList(7 to constant(1), 3 to constant(3)))
Kotlin

HeightConstant becomes VerticalAnchor

Vertical anchors and height providers are scoped too, so they only appear where a height is expected.

// Before
heightRange(uniform(HeightConstant.aboveBottom(8), HeightConstant.belowTop(2)))

// After
heightRange(uniformHeightProvider(aboveBottom(8), belowTop(2)))
Kotlin

equippable takes a generated EquipmentAssets entry

The asset id was typed as ModelArgument, so any model name compiled. EquipmentAssets is generated from the vanilla list instead.

// Before
equippable(EquipmentSlot.HEAD, ModelArgument("iron"))

// After
equippable(EquipmentSlot.HEAD, EquipmentAssets.IRON)
Kotlin

Dripstone becomes speleothem

Vanilla renamed the features in 26.2, and they gained base_block, pointed_block and replaceable_blocks.

// Before
configuredFeature("cluster", dripstoneCluster(...))
configuredFeature("pointed", pointedDripstone(...))

// After
configuredFeatures {
	speleothemCluster("cluster") { /* baseBlock, pointedBlock, replaceableBlocks */ }
	speleothem("pointed") { /* ... */ }
}
Kotlin

Removed, with no replacement

weird_scaled_sampler and the noise_gradient surface rule are gone from vanilla, so they are gone from Kore. noise_threshold gained an optional 3D evaluation and covers most of what noise_gradient was used for.

New builders worth knowing

// team modify <team> color reset
modify("my_team") { colorReset() }

// scatter a placed feature around its origin
configuredFeaturesBuilder.randomPatch("flowers", PlacedFeatures.FLOWER_DEFAULT) {
	tries = 64
	xzSpread = 5
	ySpread = 2
}
Kotlin

Changelog

Documentation

  • docs(commands): Clarify and expand the command docs. 1d1e597
  • docs(components): Revise the components guide to update examples, clarify predicates, and link the component matchers table. 9d3cf51
  • docs(contributing): Update the architecture guide with GeneratedSealedSerializer usage and KSP-based serializer factory details. b5cf883
  • docs(generation): Add short KDoc to the generation module's key entry points. f8b527a
  • docs(home): Add community project links and the jumpr entry to the README list. e6b41aa 5aaf9c4
  • docs(oop): Improve the item, scoreboard, and team documentation. 708af24
  • docs(vfx-engine): Enhance the VfxEngine documentation with detailed explanations on shapes, coordinate spaces, and offsets. 035c1b9
  • docs(website): Update the guide content, clarify Kore usage and migration paths, add a version matrix to the Home page. 0af799b
  • docs(worldgen): Add a dedicated Carvers page and move the carver sections out of the Biomes page. d2f3cf1
  • docs(worldgen): Document the IntProviderScope/FloatProviderScope builder receivers on the Providers page, fix the stale providersRange/binomial snippets in Item Modifiers and Loot Tables. 6aec34b
  • docs(worldgen): Restructure the worldgen pages around a single end-to-end example, extract the shared providers to their own page, and condense the environment attribute reference into tables. 6aa1827
  • docs(worldgen): Rewrite the Noise & Terrain page as a full density function, noise router, and surface rule reference. 38558ae
  • docs(worldgen): Rewrite the Structures processor list and template pool sections with the scoped element builders. c403250 ba6c643

New Features

  • feat(arguments): Add toStringWithDecimal for consistent decimal point formatting, update the positional, rotational, and vector conversions. 03158e9
  • feat(bindings): Add the DatapackUpload API for exploring and importing datapack ZIPs in-memory, with cross-platform tests. 7dc0800
  • feat(bindings): Enhance parseReference to support dotted GitHub repo names. a3f00b4
  • feat(commands): Add team modify <team> color reset through colorReset. f6c6bc5
  • feat(datapack): Introduce folderName to decouple output folder names from namespaces, add tests for the folder, jar, and zip modes. 8497d8b
  • feat(enchantments): Add the geyser, geyser_base, geyser_plume, and geyser_poof particle options with unit tests. ccea6c1
  • feat(entity-predicates): Introduce type-specific EntitySubPredicate subclasses (CubeMob, FishingHook, Lightning, Player, Raider, Sheep) and an EntityTypeSpecificScope to group them. 987b370
  • feat(execute): Change run's block to Function.() -> Unit, allowing if/for control flow inside it. abc4a5c
  • feat(fabric): Add ResourceCondition with fabricLoadConditions, implement condition-based JSON generation. 10543f8
  • feat(generation): Add a DatapackFolderRegistry generator producing a datapack-folder-to-Argument-type map from the existing generator definitions. 75bf9a9
  • feat(generation): Add a pure-Kotlin ZipReader and Inflate for cross-platform ZIP handling, unify the unzip logic with commonUnzipToTempDir. 2cad91a
  • feat(generation): Generate the EnchantmentProviders and EquipmentAssets enums, retype equippable around EquipmentAssetArgument. c2c2bc5
  • feat(generation): Introduce platform-agnostic I/O with PlatformIO, OPFS browser support, and a pure-Kotlin ZipWriter, unifying file operations across JVM, JS, and browser. 05e7b6a
  • feat(helpers): Add a minimal in-house port of org.joml (Matrix4f, Matrix3f, AxisAngle4f, Quaternionf, Vector3f, JomlMath) for display transformation math. 0265cd6
  • feat(item-components): Add the SulfurCubeContentComponent, with tests and documentation. 8afcac3
  • feat(selector-arguments): Add fromString to parse selectors back from text, with deserialization logic and advanced selector support. 6feb45f
  • feat(sulfur-cube-archetype): Add the sulfur_cube_archetype data-driven registry with attribute modifiers and buoyancy. b2e9a3d
  • feat(sulfur-cube-archetype): Replace explosionFuse with structured explosion, contactDamage, and knockback powers, then add hit and push sound settings with pushSoundCooldown and pushSoundImpulseThreshold. 03233a1 42a9fbb df98bdf
  • feat(test-environments): Add the difficulty test environment with unit tests. 961bbe7
  • feat(vfx-engine): Add coordinate space support to drawShape, enhance VfxShape with positionType and origin. 2a5a916
  • feat(worldgen): Accept a block ID or list of IDs, in addition to a tag, for the geode, root system, vegetation patch, dimension type infiniburn, and protected blocks replaceable fields. 7349b97
  • feat(worldgen): Add the sequence and template configured feature types. 53eb47e
  • feat(worldgen): Add the weighted_random_selector configured feature, plus levelTestDistance and maxLevelDeviation on root_system. bf4163c f9fdad8
  • feat(worldgen): Add the interval_select density function and the matching_biomes block predicate, remove weird_scaled_sampler, make the multiface_growth block and the tree below_trunk_provider mandatory. af33acf
  • feat(worldgen): Add optional 3D evaluation to noise_threshold and remove the obsolete noise_gradient surface rule. d25fd01
  • feat(worldgen): Introduce IntProviderScope/FloatProviderScope as builder receivers across placed features, configured features, dimension types, enchantment providers, carvers, and processors, and add the random_patch configured feature. 779217c
  • feat(worldgen): Enhance the Lake configuration with the canPlaceFeature, canReplaceWithAirOrFluid, and canReplaceWithBarrier block predicates. dccef30
  • feat(worldgen): Rename the dripstone_cluster/pointed_dripstone configured features to speleothem_cluster/speleothem, add the base_block/pointed_block/replaceable_blocks fields, and add replaceable_blocks to large_dripstone. 9a56efe

Bug Fixes

  • fix(bindings): Fix the illegal interface property initializers and unsafe identifiers left in the Resources and Tags generators. 53d8836
  • fix(chat-components): Simplify the serialization logic for extra fields and enhance the JSON/NBT handling in chat components. 0aee14b 34d72bb 400f99f
  • fix(commands-execute): Correct the targetArg logic to handle UUIDArgument equality with a self-check, and optimize the selector argument handling. 59c6eca
  • fix(components): Add the missing saddle equipment slot. b5df734
  • fix(datapack): Set pack_format to an integer only and fix its default value. b613e04
  • fix(enchantments): Write the providers to enchantment_provider instead of trades, and allow any file name and sub-folder. 7d649e9
  • fix(helpers): Rewrite fromAxisAngle to use sin/cos trigonometric calculations instead of instantiating a Quaternionf. c25bcdf
  • fix(item-components): Change food's nutrition field from Float to Int, make use_cooldown's cooldown_group optional, and remove the invalid contact_cooldown_ticks field from kinetic_weapon. d47a492 2175192 1de41ea
  • fix(item-components): Rename attack_range's min_range/max_range to min_reach/max_reach, blocks_attacks's disable_sound to disabled_sound, and firework_explosion's has_flicker to has_twinkle. f6ef4da 26bf1b2 415971b
  • fix(item-components): Serialize the SulfurCubeContentComponent as an inlined item id instead of a nested object. 65db924
  • fix(item-predicates): Add support for partial and negated components, enhance clearPredicate, and simplify the setPartial and negate logic. 3e7804d
  • fix(pack): Fix the packFormat warning wrongly reported as outside the min_format/max_format range when it shares their major version. b458689
  • fix(predicates): Rename the mob effect ambiant field to ambient, and write the periodic_tick and type_specific/cube_mob sub-predicate keys vanilla expects. 9a20f9b f3b3204
  • fix(serializers): Serialize and deserialize half-open bounds in FloatRangeOrFloatJsonSerializer instead of throwing. 2e273bf
  • fix(worldgen): Fix the noise and spline density functions and the stone_depth surface type to match the vanilla JSON, make the noise settings tests exhaustive. d09d92f
  • fix(worldgen): Rename the misspelled biome spawner categories to ambient, axolotls, and waterAmbient, and add the missing misc one. 626e421 c4946a4
  • fix(worldgen): Replace the ocean ruin type field by biomeTemp, and default the jigsaw size to 1 instead of the out-of-range 0. 635cc66 0e9bd53
  • fix(worldgen): Return a ConfiguredStructureArgument from every configured structure builder so structure sets accept them. fab9d5c

Performance improvements

  • perf(arguments): Scope the Argument interface classpath scan to the arguments packages and parallelize the Class.forName lookups. 00bfcde
  • perf(datapack): Cache the jsonEncoder instead of rebuilding a Json config on every access. 7441a97
  • perf(item-components): Encode component values directly instead of round-tripping through a JsonElement/NbtTag tree, and skip the redundant encode-to-element pass in ComponentsScope.asJson/asNbt. de3a95e f69791c

Refactors

  • refactor(uuid)!: Replace java.util.UUID with kotlin.uuid.Uuid across modules, updating the related methods and constructors.
  • refactor(components): Move the item sub-predicates to components/matchers as DataComponentPredicate and EnchantmentPredicate, rename item(...) to items(...), and add the missing villager/variant matcher. 72b3a6b
  • refactor(density-functions): Add the densityFunctions builder with per-type block syntax, fix the snakeCase acronym and digit boundaries. dfe5c62
  • refactor(enchantments): Share the effect builders through scopes, fix the explode, play_sound, and crossbow_charging_sounds codecs, and complete the effect components. 9a2be54
  • refactor(predicates): Rename the sub-predicates to their vanilla *Predicate names, fix their serialization against vanilla-mcdoc, and require clock on timeCheck. 111e1a1
  • refactor(predicates): Split the score targets into a ScoreProvider sealed type, require ranges on valueCheck, and add the IntRange overload. 1674e14
  • refactor(trade-sets): Enhance TradeSet with new builder methods for trade amounts and sequences, with tests for empty and single trades. 892f75e
  • refactor(worldgen): Scope the configured carver builders to ConfiguredCarversScope, add the missing nether_cave type, fix the vanilla defaults and the flat biome carvers list. f68c443
  • refactor(worldgen): Scope the surface rule builders to SurfaceRulesScope, replace entry() with state/empty, and collapse the single-rule conditions. 1068a96
  • refactor(worldgen): Scope the processor list builders to ProcessorsScope, fix the blackstone_replace name and the vanilla defaults. 0ddc09c
  • refactor(worldgen): Scope the template pool builders to PoolEntriesScope and PoolElementsScope, fix the vanilla defaults, and add the legacySingle liquid settings. 87c932c
  • refactor(worldgen): Scope the block predicate, block state provider, and rule test builders, replace offset with a per-predicate offset { }, add unobstructed and targets { } on the ore-like features, and fix the noise_threshold_provider, randomized_int_state_provider, and tag_match naming. 43d05a9 cf5c3c8 872ab1c
  • refactor(worldgen): Rename HeightConstant to VerticalAnchor, scope the anchor and height provider builders, and document them with tests. e5ebca4
  • refactor(worldgen): Key the world preset dimensions by their id instead of their type, make every dimension generator builder set generator, remove the obsolete natural dimension type field, and add a layers { } builder for the superflat settings. e8ca92c 41c83f7 99f997e bed0900
  • refactor(worldgen): Replace the list-based amplitude and octave methods with a unified amplitudes(...). 2de880c
  • refactor(worldgen): Retype the structures builder around a StructuresScope, fix the mineshaft, shipwreck, spawn override, and generation step keys, and document every type with tests. 6a0795f

Full changelog: https://github.com/Ayfri/Kore/compare/v2.6.1-26.1..v2.13.1-26.2-rc-2

2.8.0-26.1.2

Minecraft changelog

Big one this release: Kore was JVM-only until now. kore, oop, helpers and bindings are all Kotlin Multiplatform (JVM + JS, browser and Node.js), at the same coordinates. Full writeup here: Multiplatform Support.

kotlin {
	jvm()
	js { browser(); nodejs() }
}

// works on every target
val zipBytes: ByteArray = pack.generateZipBytes()

// JVM/Node only, real filesystem
val datapack = exploreDatapackZip(zipBytes, "uploaded_pack.zip")
Kotlin

That's powered by new pure-Kotlin ZipReader/ZipWriter + PlatformIO (OPFS in the browser), a hand-rolled codegen model replacing KotlinPoet in bindings, and KSP-generated serializers replacing reflection everywhere. Two dependencies gone as a result: org.joml (re-ported by hand, see below) and kotlin-reflect.

A few smaller additions too:

// folderName: decouple output folder from namespace
datapack {
	folderName("generated")
}

// run: if/for directly in the block
execute {
	run {
		if (condition) say("hi")
	}
}

// selectors: parse back from text
val selector = Selector.fromString("@e[limit=1,tag=!foo]")
Kotlin

Plus a minimal in-house org.joml port (Matrix4f, Matrix3f, AxisAngle4f, Quaternionf, Vector3f, JomlMath) for display transforms, one less dependency, and fabricLoadConditions/ResourceCondition for condition-based Fabric resources. Less libraries: faster and simplified Kore usage.

Documentation

  • docs(contributing): Update architecture guide with GeneratedSealedSerializer usage and KSP-based serializer factory details. b5cf883

New Features

  • feat(arguments): Add toStringWithDecimal for consistent decimal point formatting, update positional, rotational, and vector conversions. 03158e9
  • feat(bindings): Add DatapackUpload API for exploring and importing datapack ZIPs in-memory, implement cross-platform tests. 7dc0800
  • feat(bindings): Enhance parseReference to support dotted GitHub repo names, update tests to verify functionality. a3f00b4
  • feat(datapack): Introduce folderName to decouple output folder names from namespaces, add tests for folder, jar, and zip modes, and update documentation for creating datapacks. 8497d8b #246
  • feat(execute): Change run's block to Function.() -> Unit, allowing if/for control flow. abc4a5c #243
  • feat(fabric): Add ResourceCondition with fabricLoadConditions, implement condition-based JSON generation. 10543f8
  • feat(generation): Add DatapackFolderRegistry generator producing a datapack-folder-to-Argument-type map from existing generator definitions. 75bf9a9 #246
  • feat(generation): Add pure-Kotlin ZipReader, Inflate for cross-platform ZIP handling, unify unzip logic with commonUnzipToTempDir. 2cad91a
  • feat(generation): Introduce platform-agnostic I/O abstractions with PlatformIO, implement OPFS browser support, add ZipWriter for pure-Kotlin ZIP generation, and unify file operations across JVM, JS, and browser. 05e7b6a
  • feat(helpers): Add minimal port of org.joml classes including Matrix4f, Matrix3f, AxisAngle4f, Quaternionf, Vector3f, and JomlMath for display transformation math. 0265cd6
  • feat(selector-arguments): Add fromString to parse selector arguments, implement deserialization logic, enhance test cases, and support advanced selector parsing. 6feb45f

Bug Fixes

  • fix(datapack): Set pack_format to integer only and fix default value. b613e04 #245
  • fix(helpers): Rewrite fromAxisAngle to use trigonometric calculations with sin and cos, replacing Quaternionf instantiation, and adjust imports in Quaternion. c25bcdf

Full changelog: https://github.com/Ayfri/Kore/compare/v2.7.0-26.1.2..v2.8.0-26.1.2

2.7.0-26.1.2

Minecraft changelog

This release updates Kore to Kotlin 2.4.0, which is great news because you don't need the -Xcontext-parameters compiler argument anymore ! I also migrated the UUIDArgument to use the new stable Uuid API from Kotlin instead of UUID from Java, this is because the API is more idiomatic to Kotlin and simpler and multiplatform.

If you're using the uuid() functions you probably don't need to change anything, else the migration is very easy:

UUID.fromString("...")Uuid.parse("...")
Kotlin
UUID.randomUUID()Uuid.random()
Kotlin

Documentation

  • docs(components): Revise components guide to update examples, clarify predicates, and link component matchers table. 9d3cf51
  • docs(generation): Add short KDoc to the generation module's key entry points. f8b527a

Refactors

  • refactor(uuid)!: Replace java.util.UUID with kotlin.uuid.Uuid across modules, update related methods and constructors accordingly.

Full changelog: https://github.com/Ayfri/Kore/compare/v2.6.2-26.1.2..v2.7.0-26.1.2

2.6.2-26.1.2

Minecraft changelog
  • No changes were required.

Full changelog: https://github.com/Ayfri/Kore/compare/v2.6.2-26.1.1..v2.6.2-26.1.2

2.6.2-26.1.1

Minecraft changelog

Bug Fixes

  • fix(chat-components): Simplify serialization logic for extra fields and enhance JSON/NBT handling in chat components. 0aee14b 34d72bb 400f99f

Full changelog: https://github.com/Ayfri/Kore/compare/v2.6.1-26.1.1-rc-1..v2.6.2-26.1.1

2.6.1-26.1

Minecraft changelog
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"))
}
Kotlin

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
}
Kotlin

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()
}
Kotlin

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)
Kotlin

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

2.0.3-1.21.11

Minecraft changelog

Another small release with many improvements to the documentation, a few small fixes, a missing advancement trigger, and improvements to NBTs with even its own documentation page.

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(getting-started): Add link to "Learn X in Y Minutes - Kotlin" for 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(nbt): Add complete documentation about NBTs. 5a7592d
  • docs(pages): Add copy button for markdown content and load sources. ec2d4c1 2ec7dcf

New Features

  • feat(advancement): Add player interact with entity trigger 69cd1be
  • feat(nbt-utils): Add more builders for Nbt Lists. fbe3973
  • feat(oop): Add a more customizable ItemStack.summon. 91d4be2
  • feat(vec3): Enhance Vec3 and PosNumber with serialization support and docs. f68a73c

Bug Fixes

  • fix(data): Add missing data ... string commands support, append, insert, merge, and prepend operations. e041065

Refactors

Full changelog: https://github.com/Ayfri/Kore/compare/v2.0.2-1.21.11..v2.0.3-1.21.11

2.0.2-1.21.11

Minecraft changelog

Small but big release, adding a lot of missing KDoc on commands, new documentation for Selectors, Arguments Internals for contributors and a Cookbook with common patterns you would want to know.

I've also fixed many small issues with rarely used commands. Point Of Interest enum generation and argument support for locate poi command, new way to configure Bindings Github API Key and url parameters.

Documentation

  • 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(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

New Features

  • feat(bindings): Add support for customizable HTTP request payload and headers, update related tests and documentation. eefe605
  • feat(bindings): Enhance GitHub function with API key authentication details, add tests and docs. 00f7dcf
  • feat(commands): Add placeJigsaw overload with JigsawArgument, enhance placeTemplate with integrity and TemplateMirror, and improve KDoc for place functions. f885b8f
  • feat(commands): Update locatePointOfInterest to use PointOfInterestTypeOrTagArgument, add KDoc comments to locate functions. 8a223fd 513a6d7 d4a906e
  • feat(predicates): Add utility x, y, z setter functions to Position. 40995b2

Bug Fixes

  • fix(advancement): Add missing from AdvancementRoute, improve KDoc. bf07d93
  • fix(bindings): Correct cache directory path in getCacheDir function for consistency. 48bde8d
  • fix(bossbar): Add missing setName with text component and improve KDoc. 15b8767
  • fix(commands): Add set sub-literal for style in waypoint modify, refine KDoc for WaypointModify and related functions. c0a7fa2
  • fix(commands): Add missing entity literal to teleport overloads, improve KDoc. 318f75e
  • fix(commands): Add missing fill options for fill command. c76866e
  • fix(commands): Fix many clone command grammar issues, add missing modes and sub-literals, improve KDoc. 9ed7482
  • fix(commands): Replace sequenceId with RandomSequenceArgument, improve random command KDoc. 5eb7557
  • fix(docs): Update test commands in contributing documentation for consistency. 32feda0
  • fix(item): Correct argument order in toItemArgument method. 669152c #216
  • fix(playsound): Replace SoundArgument with SoundEventArgument in playSound command. 4ae24e5
  • fix(stopwatch): Update scale parameter to use float type. 84edfb0

Full changelog: https://github.com/Ayfri/Kore/compare/v2.0.1-1.21.11..v2.0.2-1.21.11

2.0.1-1.21.11

Minecraft changelog

Small fix to execute if block and a lot of new documentation on how to contribute to Kore!

Documentation

  • docs(commands): Add KDoc to all execute and execute condition functions. 6773147
  • docs(contributing): Add comprehensive contributor guides on architecture, workflow, CI/CD, and generator creation. 50d926c
  • docs(contributing): Revise guidelines for contribution, link to detailed docs for architecture, workflow, and CI/CD, and update README and website with clearer contribution instructions. 1fbb46a
  • docs(home): Fix error in example code. 8ea2d2e

Bug Fixes

  • fix(execute): Add missing execute if block with BlockTag argument. 993bf55

Full changelog: https://github.com/Ayfri/Kore/compare/v2.0.0-1.21.11..v2.0.1-1.21.11

2.0.0-1.21.11

Minecraft changelog
kore-2 0-banner

Welcome to Kore 2.0!

Kore 2.0 is here! This release contains so many changes, improvements, and new features that it deserved a major version bump. From a completely revamped build system to powerful new OOP utilities and helpers, this is the biggest update Kore has ever seen.

What's new?

The new Helpers module provides a rich set of utilities for common datapack patterns:

  • Math engine - vector math, area utilities, and floating-point formatting helpers for Vec2, Vec3, Position, and Rotation.
  • Raycasts - easily create block and entity raycasts with configurable step size, max distance, and hit callbacks.
  • State delegates - Kotlin property delegates backed by scoreboards.
  • Text utilities - selectors, text components, and formatting helpers.
  • MiniMessageRenderer, MarkdownRenderer, and ANSIRenderer - advanced text formatting renderers.
  • VFX & Particles - high-level particle helpers for visual effects.

Also, the prior Helpers have been moved to the helpers module, such as Display Entities, Inventory Manager, Mannequins, Scheduler, and ScoreboardManager. See also Scoreboard Math.

The OOP module brings object-oriented abstractions on top of Minecraft commands:

  • Boss Bars - create and manage boss bars with team integration.
  • Entity management - EntityCommands for fluent entity manipulation.
  • Events - event-driven architecture for datapack logic.
  • Game State Machine - GameState and GameStateManager for managing game phases and transitions.
  • Spawners - configurable entity spawner utilities.
  • Timers & Cooldowns - schedule delayed or repeating actions with Timer and Cooldown APIs.

Code examples

Here are a few examples of what you can build with the biggest additions in Kore 2.0.

Helpers

This first example combines the math helpers with a raycast to measure a path and react to blocks or entities hit along the way.

val origin = pos(0, 64, 0)
val target = pos(12.75, 65.0, -3.5)
val distance = origin.distanceTo(target)

function("helpers_demo") {
	comment("Formatted distance: ${distance.toStringTruncatedIfRound()}")

	raycast(
		from = origin,
		direction = rotation(0f, 0f),
		maxDistance = 32.0,
		step = 0.25,
		onHitBlock = ::hitBlock,
		onHitEntity = ::hitEntity,
	)
}
Kotlin

And this one uses the particle helpers to turn an impact point into a small visual burst.

function("helpers_particles_demo") {
	val impact = pos(4.5, 65.0, -2.5)

	particle(
		particle = flame(),
		pos = impact,
		delta = vec3(0.15, 0.35, 0.15),
		speed = 0.02f,
		count = 12,
	)
}
Kotlin

This one shows how state delegates let you read and write scoreboard-backed values like regular Kotlin properties.

class GameContext {
	var score by score("game.score")
	var phase by score("game.phase")
}

val context = GameContext()

function("state_delegate_demo") {
	context.score += 10
	context.phase = 2
	comment("Score: ${context.score} | Phase: ${context.phase}")

	runIf(context.phase eq 2) {
		say("Phase 2 is over!")
	}
}
Kotlin

OOP

Here, a boss bar and a timer are wired together so players see the bar appear and initialize automatically when the intro starts.

val bossBar = BossBar("game:boss") {
	name = text("Final Boss")
	color = BossBarColor.PURPLE
	max = 100
}

val introTimer = Timer("game:intro", 100) {
	bossBar.players += allPlayers()
	bossBar.value = 100
}
Kotlin

This last example shows the event system forwarding a player join into the current game state, which keeps phase-specific logic nicely encapsulated.

val gameStateManager = GameStateManager(
	initialState = LobbyState(),
)

events.listen<PlayerJoinEvent> {
	gameStateManager.currentState.onPlayerJoin(player)
}
Kotlin

And here a spawner is paired with a cooldown to keep waves under control without scattering timing logic everywhere.

val waveCooldown = Cooldown("game:next_wave", 200)

val arenaSpawner = Spawner("game:arena") {
	spawnEntity = EntityTypes.ZOMBIE
	position = pos(0, 64, 0)
}

events.listen<TickEvent> {
	if (waveCooldown.isFinished) {
		arenaSpawner.spawn()
		waveCooldown.reset()
	}
}
Kotlin

Changelog

CI/CD

  • Add ci.yml workflow for automated tests. 2720e85
  • Add publish-snapshot.yml workflow for snapshot builds, update docs with snapshot setup instructions, and enhance build logic for snapshot versioning. b93e1df

Documentation

  • Update bindings documentation for namespace remapping and normalization. 5c066da - @e-psi-lon
  • Add scoreboard comparison examples for equalTo, notEqualTo, and related helpers. Extend documentation with Kotlin DSL mappings to generated commands. a516ef1
  • Add new documentation for helpers module (renderers, raycasts, math, particles, state delegates). 941fa47
  • Enhance Helpers and OOP documentation with new workflows, API examples, expanded Events, Display Entities, Raycasts, and scheduling sections. e6d986d
  • Update module descriptions, installation guides, and examples for bindings, helpers, and oop modules. 4c59c0b
  • Add OOP documentation for cooldowns, timers, game state machine, boss bars, events, entities, and spawners. 761d7ec 89bb489 33747c3

New Features

  • State: Add score-based comparison functions, runIf, runWhile, and repeatScore helpers. Enhance ScoreboardDelegate with asExecuteScore and scoreboardEntity integration. fd63024
  • State: Replace repeatScore with repeat, update iteration handling, enhance documentation, and adjust tests and examples. ce4a0ef
  • Bindings: Add support for per-namespace renaming. e9ded19 - @e-psi-lon
  • Bindings: Use XDG-compliant caching and prefer Path over File. 67e8f76 - @e-psi-lon
  • Maths: Add utility functions for truncation and formatting in Position, Rotation, Time, Vec2, and Vec3, improve toString methods and type-specific property access. fb0be06
  • Maths: Add delegate-based math helpers, improve trigonometric functions, enhance sqrt initialization, and update tests and documentation. c16b0e79
  • OOP: Add OOP wrappers for entity management, game state transitions, timers, spawners, and boss bars. d677d20 a8b3ba9 46f9de7

Bug Fixes

  • Bindings: Normalize namespace object name. a1b167a - @e-psi-lon
  • Commands: Add missing literal("under") argument to spreadPlayers command. c7cdcfa
  • Arguments: Fix unintended cast of Double coordinates to Int (e.g. 0.00), replace str with toStringTruncatedIfRound for correct entity positioning. c28b4ba 08a37ef - #213
  • Files: Fix createTempDirectory actually not creating the temporary directory, add more utilities to Path, and update docs and tests. 0c95069

Refactors

  • Arguments: Add Argument parsing and deserialization logic, enhance BlockArgument serializer, and introduce proxy creation for arguments. 6353257 bedbedc
  • Bindings: Add @Suppress("DEPRECATION") for deprecated properties, update code generators to use CodeBlock for pack metadata, remove infix remapping function. 449b021 b6c500a c9c5f78 - @e-psi-lon
  • Bindings: Use native cache directory for macOS and Windows. a68df12 - @e-psi-lon
  • Build: Remove buildSrc, migrate build logic to build-logic directory, introduce kotlin-dsl plugin, define version catalogs, configure repositories, and add kotest-conventions for shared test configuration. f0aab38 601b748 d30d43f 788d574
  • Core: Remove unnecessary @OptIn annotations, fix typos, improve validation for path commonality check. 4a44232
  • Generation: Add merging logic for load.json/tick.json tags, improve path normalization, fix duplicate archive entries, and simplify mod function parameters. 7d938be 865947d
  • Helpers & OOP: Migrate helpers from oop to dedicated helpers module, add Area utilities, enhance GameState/GameStateManager, improve entities, timers, teams, and standardize indentation to tabs. ace2f01 2efe908 53cef64 fd2326d
  • Scoreboard: Replace fn.data/fn.scoreboard with direct calls, update copyDataFrom/copyTo logic. b948855
  • Serialization: Improve deserialization logic, simplify serializers by leveraging EnumStringSerializer, enhance NBT/JSON compatibility. 1785d7a 20677eb
  • Utils: Simplify dateFormats calculations, optimize imports in MarkdownRenderer, simplify parentElement type usage. 3c168b9

Thanks to @e-psi-lon for his contributions!

Full changelog: https://github.com/Ayfri/Kore/compare/v1.42.1-1.21.11..v2.0.0-1.21.11

1.42.1-1.21.11

Minecraft changelog

Small release to fix the default datapacks containing features field, also simplify the usage of pack formats and add more KDoc. I've also revamped a bit the tool I use to generate changelogs.

Documentation

  • docs(datapack): Update Creating A Datapack guide, improve minFormat/maxFormat examples, add legacy format handling and overlays DSL usage documentation. 79a34d7

Bug Fixes

  • fix(datapack): Make features optional. 13d9bd8

Refactors

  • refactor(colors): Add ColorSerializer deserialization for hex and named colors. 32f7e7a
  • refactor(pack): Update pack.mcmeta handling, add DSL for overlays, improve serialization for legacy fields, and clarify deprecation warnings. fbf7e5d
  • refactor(worldgen): Simplify Features serialization logic, add InlinableListSerializer, optimize toList and fromList conversion methods. b3c5d96

Full changelog: https://github.com/Ayfri/Kore/compare/v1.42.0-1.21.11..v1.42.1-1.21.11

1.42.0-1.21.11

Minecraft changelog

A release to fix many small issues with advancements/item-modifiers/loot-tables/predicates/structures/test-instances, also some simplifications of serializers. It contains some small breaking changes so that's why the version bump.

Changelog

  • feat(maths): Add toArray and fromArray conversion for Vec3f, add deserialization support. 97a589c
  • feat(worldgen-structures): Add Terrain Adaptation and Pool Aliases documentation, enhance pool alias logic with weighted entries in tests. 6309c34
  • fix(advancements): Rename AvoidVibrations to AvoidVibration. 7c09253
  • fix(docs): Update Advancements.md and Triggers.md, add brewedPotion. Enhance Item_Modifiers.md with new examples, correct inconsistencies. 5626439
  • fix(item-modifiers): Add @Serializable to SetBookCover. b9a2cc4
  • fix(item-modifiers): Fix serialization of ApplyBonus item modifier. e3a867f
  • fix(item-modifiers): Remove UUIDArgument, add id property in AttributeModifier. 3d51818
  • fix(item-modifiers): Rename potion to id in SetPotion. dff1c54
  • fix(item-modifiers): Replace nbt with tag in SetCustomData and write as inline nbt, add helper to setBannerPattern. c820f1f
  • fix(loot-tables): Rename name to value in LootTable. 58b6d3e
  • fix(predicates): Add Light class to replace light field in Location. 64cdfa4
  • fix(predicates): Rename Enchantment int provider to EnchantmentLevel, update related functions. 6289eae
  • fix(predicates): Rename EntityScore to EntityScores. f46733a
  • fix(predicates): Replace Block with Location in steppingOn. 784e0d3
  • fix(predicates): Set default value of entity in EntityProperties to EntityType.THIS. 76d8717
  • fix(test-instances): Replace FunctionArgument with String for function references, align logic and documentation with new GameTest framework. 7f3514a
  • fix(test-instances): Replace Function with FunctionArgument, remove FunctionDSLBuilder. 41fda93
  • fix(worldgen-structures): Update pool alias logic, introduce weighted entries. 309b9fe
  • refactor(advancements): Replace criteria serialization logic with InlineSerializer, adjust trigger classes to remove name property. 82f6727
  • refactor(advancements): Set default lambda value for recipeUnlocked and recipeCrafted criteria. 4eb7e7f
  • refactor(item-modifiers): Adjust Source enum values, rename parameters in copyCustomData, add helper methods for MutableList<CopyNbtOperation>. 11f9481
  • refactor(predicates): Simplify Fluid sub predicate usage. a4657b7

Full changelog: https://github.com/Ayfri/Kore/compare/v1.41.3-1.21.11..v1.42.0-1.21.11

1.41.3-1.21.11

Minecraft changelog

Small release to fix a pretty important bug.

Changelog

  • docs(website): Update Kore Template links to reflect new GitHub repository. 15e05b0
  • fix(arguments): Fix serialization of IntRangeOrInt with only min or max. 79b9c8d b8e3b2a

Full changelog: https://github.com/Ayfri/Kore/compare/v1.41.2-1.21.11..v1.41.3-1.21.11

1.41.2-1.21.11

Minecraft changelog

Small fixes and improved predicates/pack usages.

Changelog

  • feat(pack): Add supportedFormats DSL, implement range and min-max validation, and add corresponding tests. 15d08f0
  • feat(predicates): Add matchTool function with ItemArgument support, enable multi-item condition handling. 60363c2
  • feat(predicates): Extend enchantments to support EnchantmentOrTagArgument with optional levels. 0ba6dd5
  • feat(utils): Add extractBaseMinecraftVersion, implement compareMinecraftVersions, update version filtering logic. 46be380
  • fix(loot-tables): Fix alternatives being mis-spelled and simplify usage. 177b236

Full changelog: https://github.com/Ayfri/Kore/compare/v1.41.1-1.21.11..v1.41.2-1.21.11

1.41.1-1.21.11

Minecraft changelog

Massive update covering the snapshot cycle. Major additions to Worldgen, Environment control, and Combat components. Also a complete revamp of the documentation pages/architecture and to the updates page.

Changelog

Worldgen & Environment

  • feat(timelines): Introduced the Timelines System for data-driven environment animations (keyframes, easing).
  • feat(environment): Added fine-grained control for cloudColor, fogStart/End, waterFog, skybox, and CardinalLight.
  • feat(worldgen): Added BlendToGray modifier and Activity registry generator.

Combat & Components

  • feat(components): Added Weapon Components: KineticWeapon, PiercingWeapon, and DamageType.
  • feat(components): Added AttackRangeComponent with max/minCreativeReach.
  • feat(components): Added interactVibrations, minimumAttackCharge, and swingAnimation.

Datapack Utilities

  • feat(commands): Added worldborder (add/set/warning) and stopwatch commands.
  • feat(functions): Enhance addLine to support multiline strings, add test cases. 9775e08
  • feat(loot-tables): Added Slots entries (contents, empty, filtered, group, limit-slots) and fixed dynamic names.
  • feat(predicates): Added matchTool (multi-item support), isFallFlying, and isInWater.
  • feat(enchantments): Added ApplyImpulse, postPiercingAttack, and applyExhaustion.

Core & Docs

  • docs: Massive documentation overhaul (Worldgen, Tags, Trims, variants) + llms.txt support.
  • refactor: Migrated to Vanniktech Maven Publish (lighter & faster builds).

Full changelog: https://github.com/Ayfri/Kore/compare/v1.37.0-1.21.10..v1.41.1-1.21.11

1.37.0-1.21.10

Minecraft changelog

Changelog

  • No changes were required.

Full changelog: https://github.com/Ayfri/Kore/compare/v1.37.0-1.21.10-rc1..v1.37.0-1.21.10

1.37.0-1.21.9

Minecraft changelog

Changelog

  • No changes were required.

Full changelog: https://github.com/Ayfri/Kore/compare/v1.37.0-1.21.9-rc1..v1.37.0-1.21.9

1.33.2-1.21.8

Minecraft changelog

Somes fixes, update to KNbt, new documentation and missing interfaces/generated things. Also, I'm currently working on something bigger and very interesting for Kore!

Changelog

  • chore(dependencies): Update knbt version from 0.11.8 to 0.11.9. c01183c
  • docs(macro): Add example for TeleportMacros and clarify limitations. 387be86
  • docs(publishing): Add guide for publishing datapacks using GitHub Actions. 98d7e5e
  • feat(generation): Add missing worldgen tags interfaces parents. 1a0e39e feat(generation): Add painting_asset to additional arguments and update tagsParents for PaintingAssetArgument. d095f93
  • feat(tags): Add missing common tags functions. d597df3
  • fix(advancements): Change background type to ModelArgument in AdvancementDisplay. c76b6b1
  • fix(execute): Fix execute if items syntax missing source literal name. 0202e87 #175
  • fix(generation): Move DEFAULT_DATAPACK_FORMAT to DataPack.Companion for easier use. 7a9c0ad
  • fix(painting): Change assetId type to PaintingAssetArgument in PaintingVariant. e3aff11, 966a085

Full changelog: https://github.com/Ayfri/Kore/compare/v1.33.1-1.21.8..v1.33.2-1.21.8

1.33.1-1.21.8

Minecraft changelog

No changes at all since 1.21.7.

Changelog

  • No changes were required.

Full changelog: https://github.com/Ayfri/Kore/compare/v1.33.1-1.21.8-rc1..v1.33.1-1.21.8

1.33.1-1.21.7

Minecraft changelog

1.33.1-1.21.6

Minecraft changelog

The big new "small" release is finally out! I took a long time because life is life, and you can get pretty busy at some times, but now Kore is back and updating quickly!

See the new 1.21.6 changes from Minecraft themselves: https://www.minecraft.net/en-us/article/minecraft-java-edition-1-21-6

Changelog

  • No changes were required since 1.21.6-rc1.

Full changelog: https://github.com/Ayfri/Kore/compare/v1.28.0-1.21.5..v1.33.1-1.21.6

1.28.0-1.21.5

Minecraft changelog

Finally, 1.21.5 is here! Check for previous releases for the full list of changes.

Changelog

  • No changes were required.

Full changelog: https://github.com/Ayfri/Kore/compare/v1.28.0-1.21.5-rc2..v1.28.0-1.21.5

Changelog since 1.21.4: https://github.com/Ayfri/Kore/compare/v1.23.0-1.21.4..v1.28.0-1.21.5

1.24.0-1.21.4

Minecraft changelog

Small release containing one bug fix! But I also updated Kore to 2.1.0, this changes the process of creating projects because you have to ignore one warning, sadly that's the best way I found for the current state of Kore. We're waiting on the context parameters feature to release to remove these flags, but currently the KEEP is still in construction.

You'll now have to add this flag to freeCompilerArgs list : "-Xsuppress-warning=CONTEXT_RECEIVERS_DEPRECATED" Example

kotlin {
	compilerOptions {
		freeCompilerArgs = listOf("-Xcontext-receivers", "-Xsuppress-warning=CONTEXT_RECEIVERS_DEPRECATED")
	}
}
Kotlin

Note that I've also updated Kore-Template.

Changelog

  • chore(build): Update compiler arguments for context receivers. 192f9c1
  • chore(dependencies): Update jetbrains-compose to version 1.7.3, update kobweb to version 0.20.0, and upgrade kotlin.version to 2.1.0. 18f75fb a33baf6
  • fix(scoreboard): Update asString method to use camelCase, add tests for some scoreboard criterion. #135 c6ed581
  • feat(string-utils): Add camelCase function to convert strings to camel case. f033e3b

Full changelog: https://github.com/Ayfri/Kore/compare/v1.23.0-1.21.4..v1.24.0-1.21.4

1.23.0-1.21.4

Minecraft changelog

Changelog

  • No changes were required.

Full changelog: https://github.com/Ayfri/Kore/compare/1.23.0-1.21.4..HEAD

1.21.3-1.21.3

Minecraft changelog

Fixes a small bug, and increase the version of Kore making it aligned with Minecraft again, lul

Changelog

  • fix(chat-components): Fix chat components serialization in escaped JSON contexts. #123 0577198
  • refactor(advancements): Do not serialize empty conditions of triggers. decf34c

Full changelog: https://github.com/Ayfri/Kore/compare/v1.21.2-1.21.3..v1.21.3-1.21.3

1.21.2-1.21.3

Minecraft changelog

Changelog

  • No changes were required.

Full changelog: https://github.com/Ayfri/Kore/compare/v1.21.2-1.21.2..v1.21.2-1.21.3

1.21.2-1.21.2

Minecraft changelog

So this is it, 1.21.2 for 1.21.2, for explanation I started Kore at 1.0 on Minecraft 1.20, but by pure chance we stepped on a version where both Kore and Minecraft are in version 1.21.2 :')

Changelog

  • No changes were required.

Full changelog: https://github.com/Ayfri/Kore/compare/v1.21.2-1.21.2-rc2..v1.21.2-1.21.2

1.17.0-1.21.1

Minecraft changelog

Another release with a big new feature : jar file generation. You can now create datapacks that can be used as mods for fabric, forge, neoforge and quilt mod-loaders ! Check out the documentation on this new feature here : https://github.com/Ayfri/Kore/wiki/creating-a-datapack#jar-generation The next release should be focused on updating Kore to 1.21.2 👌

Changelog

  • feat(creating-datapacks): Add NeoForge neoforge.mods.toml generation. f1f21e1 5f7f90c
  • feat(creating-datapacks): Add Quilt quild.mod.json generation. 44b75a
  • feat(creating-datapacks): Add forge mods.toml generation. 796a595
  • feat(creating-datapacks): Add jar generation and fabric mod generation. 3f60647
  • feat(generators): Generate minecraft version. c75f6cc
  • fix(neoforge): Fix NeoForge dependency type value should be lowercase.
  • refactor(datapacks): Streamline datapack generation from different mode into one unique, fix tags not merging when generating a zip, simplify generation. 22eb17b

Full changelog: https://github.com/Ayfri/Kore/compare/v1.16.0-1.21.1..v1.17.0-1.21.1

1.16.0-1.21.1

Minecraft changelog

This release introduces a big new feature very cool for datapack developers: Being able to merge datapacks together, even with external datapacks or zip files. Check out the documentation on this new feature here. Let me know if this feature has any bugs or missing features!

Changelog

  • feat(chat-components): Introduce deserialization of chat components for Json. f105bd4
  • feat(datapacks): Add generations options, add merging with other packs option, add tests. d01296d
  • feat(pack-mcmeta): Introduce deserialization of SupportedFormats, add useful functions for comparing versions, add toString. 39d53e3
  • feat(tags): Introduce deserialization of Tags. 33a5b51

Full changelog: https://github.com/Ayfri/Kore/compare/v1.15.1-1.21.1..v1.16.0-1.21.1

1.15.1-1.21.1

Minecraft changelog

Fixes a bug related to tag generation folder when setting the tag of a function using the setTag function, also updates unit tests about functions generation for checking if all files are correctly generated and are at the correct location.

[!IMPORTANT] I will in a future release rename the setTag function to addToTag because a function in Minecraft can be linked to multiple tags.

Changelog

  • fix(functions): Fix generated tag folder for setTag method of functions, update tests for functions generation files locations. #102 0efd2da

Full changelog: https://github.com/Ayfri/Kore/compare/v1.15.0-1.21.1..v1.15.1-1.21.1

1.15.0-1.21.1

Minecraft changelog

Changelog

  • No changes were required.

Full changelog: https://github.com/Ayfri/Kore/compare/v1.15.0-1.21..v1.15.0-1.21.1

1.15.0-1.21

Minecraft changelog

Kore is finally entirely compatible with 1.21, with a lot of fixes (even from features of prior versions, which is great for the project).

Changelog

  • No changes were required.

Full changelog: https://github.com/Ayfri/Kore/compare/v1.15.0-1.21-rc1..v1.15.0-1.21

1.10.1-1.20.6

Minecraft changelog

Changelog

  • No changes were required.

Full changelog: https://github.com/Ayfri/Kore/compare/v1.10.1-1.20.6-rc1..v1.10.1-1.20.6

1.10.1-1.20.5

Minecraft changelog

Changelog

  • No changes were required.

Full changelog: https://github.com/Ayfri/Kore/compare/v1.10.1-1.20.5-rc3..v1.10.1-1.20.5

1.1.0-1.20.4

Minecraft changelog

Changelog

  • No changes were required.

Full changelog: https://github.com/Ayfri/Kore/compare/v1.1.0-1.20.4-rc1..v1.1.0-1.20.4

1.1.0-1.20.3

Minecraft changelog

Changelog

  • No changes were required.

Full changelog: https://github.com/Ayfri/Kore/compare/v1.1.0-1.20.3-rc1..v1.1.0-1.20.3

1.0.0-1.20.2 First release !

Kore Library v1.0.0 Released! 🎉

I'm excited to announce the first stable release of the Kore library! After months of development and testing, Kore v1.0.0 is now available.

Get started now with the documentation and the example.

Your feedback and contributions are welcome! Feel free to open issues or pull requests on the GitHub repository.

Happy datapacking! ⛏️

201
Total Releases
22/09/2023
First Release
24/08/2026
Latest Release

Releases by Minecraft Version

26.2
16
26.1
25
1.21
117
1.20
43