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.
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.
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' })
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.
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.
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.
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.
Available for 1.21.1, NeoForge.
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.