Astral Sorcery KJS
Astral Sorcery 2.0 is back on 1.21.1, rewritten from the ground up. It has no KubeJS support at all — no recipe schemas, no way to add constellations, no way to touch the tome.
Astral Sorcery KJS adds all of it: every recipe type with chainable methods, new constellations, new altar tiers, your own tome entries, and script control over lumen bindings, config values and the focal point.
Every recipe type
All nine, from a server script:
altar_crafting · focal_combine · focal_transmutation · lumen_generation · lumen_crystallization · lightwell · infusion · liquid_starlight · liquid_interaction
AstralSorcery.recipes(event => {
event.altar_crafting('minecraft:elytra', ['FFF', 'FDF', 'FFF'], { F: 'minecraft:feather', D: 'minecraft:diamond' })
.type('radiance')
.constellation('vicio')
.starlight('vicio')
.lumen('prismatic', 200)
.fluid('astralsorcery:liquid_starlight', 1000)
.anyTime()
event.focal_transmutation('minecraft:cake[bites=0]', 'minecraft:pumpkin')
.constellation('aevitas')
.focused(true)
event.infusion('minecraft:glowstone', 'minecraft:redstone_block')
.duration(100)
})
The function only asks for what the recipe needs. Everything else is a chained method: altar tier, focus constellation, relay pattern, starlight, lumen, fluids, extra inputs, altar upgrades, research tier, output modifiers, durations, colours.
replaceInput and replaceOutput reach inside Astral Sorcery recipes too, down to altar grid keys and relay slots.
Remove one recipe or a hundred
All KubeJS filters work, plus new ones made for Astral Sorcery:
astral_type · altar_tier · altar · constellation · focus · lumen · fluid · output_block · research_tier
event.remove({ altar_tier: 'radiance', output: 'astralsorcery:dynamism_gem_sky' })
event.remove({ lumen: ['caldor', 'hyle'], astral_type: 'lumen' })
event.remove({ constellation: 'discidia' })
New constellations
AstralSorcery.registry('constellations', event => {
event.create('kubejs:lyra')
.displayName('Lyra')
.color('#7F5FFF')
.major()
.star(4, 5).star(12, 3).star(20, 9).star(26, 20).star(16, 27).star(6, 22)
.chain(0, 1, 2, 3, 4, 5)
.focalPoint()
.rootPerk('vicio', -45, 20)
})
They show up in the sky, on constellation paper and in the tome. They can have their own focal points in the world, their own focus crystal layout and their own root perk in the perk tree. You can also pin them to moon phases and pick where they sit in the sky.
New altar tiers — two ways
A new altar on an existing tier. Your own altar block with its own multiblock structure, written in the script, and recipes only it can craft.
A real new tier. Above Radiance, usable as .type('stellar') in recipes, able to craft everything below it. It opens with the grid of the tier it is based on and shows correctly in the tome and JEI.
AstralSorcery.altarTiers(event => {
event.create('stellar').base('radiance').block('kubejs:stellar_altar')
})
StartupEvents.registry('block', event => {
event.create('kubejs:stellar_altar', 'astralsorcery:altar')
.realTier('stellar')
.structureLayer(-1, ['D D', ' ', ' D ', ' ', 'D D'], { D: 'minecraft:diamond_block' })
})
The wand shows the structure preview, and the tome can show it as a 3D page.
Your own tome entries
Add pages to the book, change existing ones or remove them:
AstralSorcery.research(event => {
event.create('kubejs:starry_diamond')
.title('Starry Diamond')
.tier('shimmer')
.position(0, 3)
.icon('minecraft:diamond')
.text('A diamond shaped by the stars.')
.recipe('mypack:altar/starry_diamond')
.constellation('aevitas')
})
Text, recipe, constellation, structure and lumen pages, connections, locks and hidden entries. Everything reloads with /reload and is sent to every player.
Lumen bindings, config and the focal point
Astral Sorcery 2.0 has no ritual pedestal: a constellation's power now lives in its lumen bindings. You can change their potion effects, costs and bonuses, create new bindings and map lumen to them.
AstralSorcery.lumenBindings(event => {
event.modify('aevitas', b => b.potionDuration(100, 200).scaleModifiers(2))
})
AstralSorcery.config(event => event.set('general.dayLength', 30000))
AstralSorcery.focalPoint(event => event.flightRadius(12).starlightMultiplier(2))
Also fixes a crash in Astral Sorcery when Curios is not installed.
Requirements
- KubeJS 2101.7.2 or newer
- Astral Sorcery 2.0.1 or newer
Available for 1.21.1, NeoForge.
Documentation
Every feature is documented with working examples in the wiki:
The examples/ folder has ready-to-run startup and server scripts covering all of it.

