fully make greatness a tag

This commit is contained in:
petrak@ 2023-01-21 15:49:20 -06:00
parent 2f2ab69816
commit 05e4114b97
27 changed files with 109 additions and 167 deletions

View file

@ -3,10 +3,6 @@ package at.petrak.hexcasting.api.casting
import at.petrak.hexcasting.api.casting.eval.CastingContext
import at.petrak.hexcasting.api.casting.eval.vm.SpellContinuation
import at.petrak.hexcasting.api.casting.iota.Iota
import at.petrak.hexcasting.api.utils.asTranslatedComponent
import at.petrak.hexcasting.api.utils.lightPurple
import net.minecraft.network.chat.Component
import net.minecraft.resources.ResourceLocation
import net.minecraft.world.phys.Vec3
import java.text.DecimalFormat
@ -38,30 +34,6 @@ interface Action {
ctx: CastingContext
): OperationResult
/**
* Do you need to be enlightened to use this operator? (i.e. is this operator a Great Pattern)
*/
val isGreat: Boolean get() = false
/**
* Should this Great Pattern process and have side effects, even if its user isn't enlightened?
*
* The pattern itself may modify its effects based on whether the user is enlightened or not, regardless of what this value is.
*/
val alwaysProcessGreatSpell: Boolean get() = this is SpellAction
/**
* Can this Great Pattern give you Blind Diversion?
*/
val causesBlindDiversion: Boolean get() = this is SpellAction
/**
* The component for displaying this pattern's name. Override for dynamic patterns.
*/
fun getDisplayName(resLoc: ResourceLocation): Component {
return "hexcasting.spell.${resLoc.toString()}".asTranslatedComponent.lightPurple
}
companion object {
// I see why vzakii did this: you can't raycast out to infinity!
const val MAX_DISTANCE: Double = 32.0
@ -81,19 +53,6 @@ interface Action {
}
public val DOUBLE_FORMATTER = DecimalFormat("####.####")
@JvmStatic
fun makeConstantOp(x: Double, key: ResourceLocation): Action = object : ConstMediaAction {
override val argc: Int
get() = 0
override fun execute(args: List<Iota>, ctx: CastingContext): List<Iota> =
x.asActionResult
override fun getDisplayName(resLoc: ResourceLocation): Component {
return "hexcasting.spell.$key".asTranslatedComponent(DOUBLE_FORMATTER.format(x)).lightPurple
}
}
}
}

View file

@ -1,8 +1,8 @@
package at.petrak.hexcasting.api.casting
import at.petrak.hexcasting.api.casting.eval.CastingContext
import at.petrak.hexcasting.api.casting.eval.vm.SpellContinuation
import at.petrak.hexcasting.api.casting.eval.sideeffects.OperatorSideEffect
import at.petrak.hexcasting.api.casting.eval.vm.SpellContinuation
import at.petrak.hexcasting.api.casting.iota.Iota
import at.petrak.hexcasting.api.casting.mishaps.MishapNotEnoughArgs
@ -36,15 +36,13 @@ interface SpellAction : Action {
if (media > 0)
sideEffects.add(OperatorSideEffect.ConsumeMedia(media))
// Don't have an effect if the caster isn't enlightened, even if processing other side effects
if (!isGreat || ctx.isCasterEnlightened)
sideEffects.add(
OperatorSideEffect.AttemptSpell(
spell,
this.hasCastingSound(ctx),
this.awardsCastingStat(ctx)
)
sideEffects.add(
OperatorSideEffect.AttemptSpell(
spell,
this.hasCastingSound(ctx),
this.awardsCastingStat(ctx)
)
)
for (spray in particles)
sideEffects.add(OperatorSideEffect.Particles(spray))

View file

@ -3,6 +3,7 @@ package at.petrak.hexcasting.api.casting.eval
import at.petrak.hexcasting.api.HexAPI
import at.petrak.hexcasting.api.advancements.HexAdvancementTriggers
import at.petrak.hexcasting.api.block.circle.BlockEntityAbstractImpetus
import at.petrak.hexcasting.api.casting.Action
import at.petrak.hexcasting.api.casting.ParticleSpray
import at.petrak.hexcasting.api.casting.PatternShapeMatch
import at.petrak.hexcasting.api.casting.PatternShapeMatch.*
@ -29,6 +30,7 @@ import at.petrak.hexcasting.common.casting.PatternRegistryManifest
import at.petrak.hexcasting.common.lib.hex.HexEvalSounds
import at.petrak.hexcasting.common.lib.hex.HexIotaTypes
import at.petrak.hexcasting.xplat.IXplatAbstractions
import com.mojang.datafixers.util.Either
import net.minecraft.nbt.CompoundTag
import net.minecraft.nbt.Tag
import net.minecraft.network.chat.Component
@ -209,50 +211,46 @@ class CastingHarness private constructor(
* When the server gets a packet from the client with a new pattern,
* handle it functionally.
*/
fun updateWithPattern(newPat: HexPattern, world: ServerLevel, continuation: SpellContinuation): CastResult {
private fun updateWithPattern(newPat: HexPattern, world: ServerLevel, continuation: SpellContinuation): CastResult {
var castedName: Component? = null
try {
// Don't catch this one
val lookup = PatternRegistryManifest.matchPattern(newPat, world, false)
val actionNamePair = when (lookup) {
is Normal -> {
val action = IXplatAbstractions.INSTANCE.actionRegistry.get(lookup.key)
val i18n = HexAPI.instance().getActionI18nKey(lookup.key)
action!!.action to i18n.asTranslatedComponent.lightPurple
val lookupResult: Either<Action, List<OperatorSideEffect>> = if (lookup is Normal || lookup is PerWorld) {
val key = when (lookup) {
is Normal -> lookup.key
is PerWorld -> lookup.key
else -> throw IllegalStateException()
}
is PerWorld -> {
// it will always be exact match here.
// TODO add non-exact checking as a hint to the player?
val action = IXplatAbstractions.INSTANCE.actionRegistry.get(lookup.key)
val i18n = HexAPI.instance().getActionI18nKey(lookup.key)
// what the hey let's make great spells golden
action!!.action to i18n.asTranslatedComponent.gold
val reqsEnlightenment = isOfTag(IXplatAbstractions.INSTANCE.actionRegistry, key, HexTags.Actions.REQUIRES_ENLIGHTENMENT)
val canEnlighten = isOfTag(IXplatAbstractions.INSTANCE.actionRegistry, key, HexTags.Actions.CAN_START_ENLIGHTEN)
castedName = HexAPI.instance().getActionI18(key.location(), reqsEnlightenment)
if (!ctx.isCasterEnlightened && reqsEnlightenment) {
Either.right(listOf(OperatorSideEffect.RequiredEnlightenment(canEnlighten)))
} else {
val regiEntry = IXplatAbstractions.INSTANCE.actionRegistry.get(key)!!
Either.left(regiEntry.action)
}
is Special -> {
lookup.handler.act() to lookup.handler.name
}
is PatternShapeMatch.Nothing -> throw MishapInvalidPattern()
else -> throw IllegalStateException()
} else if (lookup is Special) {
castedName = lookup.handler.name
Either.left(lookup.handler.act())
} else if (lookup is PatternShapeMatch.Nothing) {
throw MishapInvalidPattern()
} else {
throw IllegalStateException()
}
castedName = actionNamePair.second
val action = actionNamePair.first
// TODO: the config denylist should be handled per VM type.
// I just removed it for now, should re-add it...
// TODO need to check for enlightenment on VM
val requiresAndFailedEnlightenment = action.isGreat && !ctx.isCasterEnlightened
val sideEffects = mutableListOf<OperatorSideEffect>()
var stack2: List<Iota>? = null
var cont2 = continuation
var ravenmind2: Iota? = null
if (!requiresAndFailedEnlightenment || action.alwaysProcessGreatSpell) {
if (lookupResult.left().isPresent) {
val action = lookupResult.left().get()
displayPatternDebug(false, 0, castedName)
val result = action.operate(
continuation,
@ -265,13 +263,13 @@ class CastingHarness private constructor(
ravenmind2 = result.newRavenmind
// TODO parens also break prescience
sideEffects.addAll(result.sideEffects)
}
if (requiresAndFailedEnlightenment) {
sideEffects.add(OperatorSideEffect.RequiredEnlightenment(action.causesBlindDiversion))
} else {
val problems = lookupResult.right().get()
sideEffects.addAll(problems)
}
// Stick a poofy particle effect at the caster position
// TODO again this should be on the VM lalala
if (this.ctx.spellCircle == null)
sideEffects.add(
OperatorSideEffect.Particles(

View file

@ -57,6 +57,11 @@ public class HexTags {
*/
public static final TagKey<ActionRegistryEntry> PER_WORLD_PATTERN = create("per_world_pattern");
/**
* Actions that can cause Blind Diversion
*/
public static final TagKey<ActionRegistryEntry> CAN_START_ENLIGHTEN = create("can_start_enlighten");
public static TagKey<ActionRegistryEntry> create(String name) {
return TagKey.create(IXplatAbstractions.INSTANCE.getActionRegistry().key(), modLoc(name));
}

View file

@ -1,12 +1,12 @@
package at.petrak.hexcasting.common.casting.operators.akashic
import at.petrak.hexcasting.api.misc.MediaConstants
import at.petrak.hexcasting.api.casting.*
import at.petrak.hexcasting.api.casting.eval.CastingContext
import at.petrak.hexcasting.api.casting.iota.Iota
import at.petrak.hexcasting.api.casting.math.HexPattern
import at.petrak.hexcasting.api.casting.mishaps.MishapNoAkashicRecord
import at.petrak.hexcasting.api.casting.mishaps.MishapOthersName
import at.petrak.hexcasting.api.misc.MediaConstants
import at.petrak.hexcasting.common.blocks.akashic.BlockAkashicRecord
import at.petrak.hexcasting.common.lib.HexSounds
import net.minecraft.core.BlockPos
@ -15,10 +15,6 @@ import net.minecraft.sounds.SoundSource
object OpAkashicWrite : SpellAction {
override val argc = 3
override val isGreat = true
override val alwaysProcessGreatSpell = false
override val causesBlindDiversion = false
override fun execute(
args: List<Iota>,
ctx: CastingContext

View file

@ -1,23 +0,0 @@
package at.petrak.hexcasting.common.casting.operators.math
import at.petrak.hexcasting.api.casting.Action
import at.petrak.hexcasting.api.casting.ConstMediaAction
import at.petrak.hexcasting.api.casting.asActionResult
import at.petrak.hexcasting.api.casting.eval.CastingContext
import at.petrak.hexcasting.api.casting.iota.Iota
import at.petrak.hexcasting.api.utils.asTranslatedComponent
import at.petrak.hexcasting.api.utils.lightPurple
import net.minecraft.network.chat.Component
import net.minecraft.resources.ResourceLocation
class OpNumberLiteral(val x: Double) : ConstMediaAction {
override val argc: Int = 0
override fun execute(args: List<Iota>, ctx: CastingContext): List<Iota> {
return this.x.asActionResult
}
override fun getDisplayName(resLoc: ResourceLocation): Component {
return "hexcasting.spell.${resLoc.toString()}".asTranslatedComponent(Action.DOUBLE_FORMATTER.format(x)).lightPurple
}
}

View file

@ -16,7 +16,7 @@ import net.minecraft.world.level.block.state.BlockState
import net.minecraft.world.level.material.Fluid
import net.minecraft.world.phys.Vec3
class OpCreateFluid(override val isGreat: Boolean, val cost: Int, val bucket: Item, val cauldron: BlockState, val fluid: Fluid) : SpellAction {
class OpCreateFluid(val cost: Int, val bucket: Item, val cauldron: BlockState, val fluid: Fluid) : SpellAction {
override val argc = 1
override fun execute(
args: List<Iota>,

View file

@ -1,7 +1,5 @@
package at.petrak.hexcasting.common.casting.operators.spells
import at.petrak.hexcasting.api.misc.MediaConstants
import at.petrak.hexcasting.api.mod.HexTags
import at.petrak.hexcasting.api.casting.ParticleSpray
import at.petrak.hexcasting.api.casting.RenderedSpell
import at.petrak.hexcasting.api.casting.SpellAction
@ -10,6 +8,8 @@ import at.petrak.hexcasting.api.casting.getItemEntity
import at.petrak.hexcasting.api.casting.iota.Iota
import at.petrak.hexcasting.api.casting.mishaps.MishapBadItem
import at.petrak.hexcasting.api.casting.mishaps.MishapBadOffhandItem
import at.petrak.hexcasting.api.misc.MediaConstants
import at.petrak.hexcasting.api.mod.HexTags
import at.petrak.hexcasting.api.utils.extractMedia
import at.petrak.hexcasting.api.utils.isMediaItem
import at.petrak.hexcasting.common.items.magic.ItemMediaHolder
@ -21,8 +21,6 @@ import net.minecraft.world.item.ItemStack
object OpMakeBattery : SpellAction {
override val argc = 1
override val isGreat = true
override fun execute(
args: List<Iota>,
ctx: CastingContext

View file

@ -12,7 +12,6 @@ class OpPotionEffect(
val baseCost: Int,
val allowPotency: Boolean,
val potencyCubic: Boolean,
override val isGreat: Boolean,
) : SpellAction {
override val argc: Int
get() = if (this.allowPotency) 3 else 2

View file

@ -1,11 +1,11 @@
package at.petrak.hexcasting.common.casting.operators.spells.great
import at.petrak.hexcasting.api.mod.HexConfig
import at.petrak.hexcasting.api.casting.*
import at.petrak.hexcasting.api.casting.eval.CastingContext
import at.petrak.hexcasting.api.casting.iota.Iota
import at.petrak.hexcasting.api.casting.mishaps.MishapAlreadyBrainswept
import at.petrak.hexcasting.api.casting.mishaps.MishapBadBrainsweep
import at.petrak.hexcasting.api.mod.HexConfig
import at.petrak.hexcasting.common.recipe.BrainsweepRecipe
import at.petrak.hexcasting.common.recipe.HexRecipeStuffRegistry
import at.petrak.hexcasting.ktxt.tellWitnessesThatIWasMurdered
@ -22,8 +22,6 @@ import net.minecraft.world.phys.Vec3
object OpBrainsweep : SpellAction {
override val argc = 2
override val isGreat = true
// this way you can hear the villager dying more : )
override fun hasCastingSound(ctx: CastingContext) = false

View file

@ -1,10 +1,10 @@
package at.petrak.hexcasting.common.casting.operators.spells.great
import at.petrak.hexcasting.api.misc.MediaConstants
import at.petrak.hexcasting.api.player.FlightAbility
import at.petrak.hexcasting.api.casting.*
import at.petrak.hexcasting.api.casting.eval.CastingContext
import at.petrak.hexcasting.api.casting.iota.Iota
import at.petrak.hexcasting.api.misc.MediaConstants
import at.petrak.hexcasting.api.player.FlightAbility
import at.petrak.hexcasting.xplat.IXplatAbstractions
import net.minecraft.server.level.ServerLevel
import net.minecraft.server.level.ServerPlayer
@ -14,7 +14,6 @@ import kotlin.math.roundToInt
object OpFlight : SpellAction {
override val argc = 3
override val isGreat = true
override fun execute(
args: List<Iota>,
ctx: CastingContext

View file

@ -1,12 +1,12 @@
package at.petrak.hexcasting.common.casting.operators.spells.great
import at.petrak.hexcasting.api.misc.MediaConstants
import at.petrak.hexcasting.api.casting.ParticleSpray
import at.petrak.hexcasting.api.casting.RenderedSpell
import at.petrak.hexcasting.api.casting.SpellAction
import at.petrak.hexcasting.api.casting.eval.CastingContext
import at.petrak.hexcasting.api.casting.getVec3
import at.petrak.hexcasting.api.casting.iota.Iota
import at.petrak.hexcasting.api.misc.MediaConstants
import net.minecraft.core.BlockPos
import net.minecraft.world.entity.EntityType
import net.minecraft.world.entity.LightningBolt
@ -14,7 +14,6 @@ import net.minecraft.world.phys.Vec3
object OpLightning : SpellAction {
override val argc = 1
override val isGreat = true
override fun execute(
args: List<Iota>,

View file

@ -1,13 +1,13 @@
package at.petrak.hexcasting.common.casting.operators.spells.great
import at.petrak.hexcasting.api.misc.MediaConstants
import at.petrak.hexcasting.api.mod.HexConfig
import at.petrak.hexcasting.api.mod.HexTags
import at.petrak.hexcasting.api.casting.*
import at.petrak.hexcasting.api.casting.eval.CastingContext
import at.petrak.hexcasting.api.casting.iota.Iota
import at.petrak.hexcasting.api.casting.mishaps.MishapImmuneEntity
import at.petrak.hexcasting.api.casting.mishaps.MishapLocationTooFarAway
import at.petrak.hexcasting.api.misc.MediaConstants
import at.petrak.hexcasting.api.mod.HexConfig
import at.petrak.hexcasting.api.mod.HexTags
import at.petrak.hexcasting.common.network.MsgBlinkAck
import at.petrak.hexcasting.xplat.IXplatAbstractions
import net.minecraft.core.BlockPos
@ -23,7 +23,6 @@ import net.minecraft.world.phys.Vec3
// WRT its look vector
object OpTeleport : SpellAction {
override val argc = 2
override val isGreat = true
override fun execute(
args: List<Iota>,
ctx: CastingContext

View file

@ -1,15 +1,14 @@
package at.petrak.hexcasting.common.casting.operators.spells.great
import at.petrak.hexcasting.api.misc.MediaConstants
import at.petrak.hexcasting.api.casting.ParticleSpray
import at.petrak.hexcasting.api.casting.RenderedSpell
import at.petrak.hexcasting.api.casting.iota.Iota
import at.petrak.hexcasting.api.casting.SpellAction
import at.petrak.hexcasting.api.casting.eval.CastingContext
import at.petrak.hexcasting.api.casting.iota.Iota
import at.petrak.hexcasting.api.misc.MediaConstants
class OpWeather(val rain: Boolean) : SpellAction {
override val argc = 0
override val isGreat = true
override fun execute(
args: List<Iota>,

View file

@ -1,19 +1,18 @@
package at.petrak.hexcasting.common.casting.operators.spells.sentinel
import at.petrak.hexcasting.api.misc.MediaConstants
import at.petrak.hexcasting.api.player.Sentinel
import at.petrak.hexcasting.api.casting.ParticleSpray
import at.petrak.hexcasting.api.casting.RenderedSpell
import at.petrak.hexcasting.api.casting.SpellAction
import at.petrak.hexcasting.api.casting.eval.CastingContext
import at.petrak.hexcasting.api.casting.getVec3
import at.petrak.hexcasting.api.casting.iota.Iota
import at.petrak.hexcasting.api.misc.MediaConstants
import at.petrak.hexcasting.api.player.Sentinel
import at.petrak.hexcasting.xplat.IXplatAbstractions
import net.minecraft.world.phys.Vec3
class OpCreateSentinel(val extendsRange: Boolean) : SpellAction {
override val argc = 1
override val isGreat = this.extendsRange
override fun execute(
args: List<Iota>,

View file

@ -241,7 +241,7 @@ public class HexActions {
public static final ActionRegistryEntry COLORIZE = make("colorize",
new ActionRegistryEntry(HexPattern.fromAngles("awddwqawqwawq", HexDir.EAST), OpColorize.INSTANCE));
public static final ActionRegistryEntry CREATE_WATER = make("create_water",
new ActionRegistryEntry(HexPattern.fromAngles("aqawqadaq", HexDir.SOUTH_EAST), new OpCreateFluid(false,
new ActionRegistryEntry(HexPattern.fromAngles("aqawqadaq", HexDir.SOUTH_EAST), new OpCreateFluid(
MediaConstants.DUST_UNIT,
Items.WATER_BUCKET,
Blocks.WATER_CAULDRON.defaultBlockState()
@ -287,44 +287,44 @@ public class HexActions {
public static final ActionRegistryEntry POTION$WEAKNESS = make("potion/weakness", new ActionRegistryEntry(
HexPattern.fromAngles("qqqqqaqwawaw", HexDir.NORTH_WEST), new OpPotionEffect(MobEffects.WEAKNESS,
MediaConstants.DUST_UNIT / 10, true, false, false)
MediaConstants.DUST_UNIT / 10, true, false)
));
public static final ActionRegistryEntry POTION$LEVITATION = make("potion/levitation", new ActionRegistryEntry(
HexPattern.fromAngles("qqqqqawwawawd", HexDir.WEST), new OpPotionEffect(MobEffects.LEVITATION,
MediaConstants.DUST_UNIT / 5, false, false, false)
MediaConstants.DUST_UNIT / 5, false, false)
));
public static final ActionRegistryEntry POTION$WITHER = make("potion/wither", new ActionRegistryEntry(
HexPattern.fromAngles("qqqqqaewawawe", HexDir.SOUTH_WEST), new OpPotionEffect(MobEffects.WITHER,
MediaConstants.DUST_UNIT, true, false, false)
MediaConstants.DUST_UNIT, true, false)
));
public static final ActionRegistryEntry POTION$POISON = make("potion/poison", new ActionRegistryEntry(
HexPattern.fromAngles("qqqqqadwawaww", HexDir.SOUTH_EAST), new OpPotionEffect(MobEffects.POISON,
MediaConstants.DUST_UNIT / 3, true, false, false)
MediaConstants.DUST_UNIT / 3, true, false)
));
public static final ActionRegistryEntry POTION$SLOWNESS = make("potion/slowness", new ActionRegistryEntry(
HexPattern.fromAngles("qqqqqadwawaw", HexDir.SOUTH_EAST), new OpPotionEffect(MobEffects.MOVEMENT_SLOWDOWN,
MediaConstants.DUST_UNIT / 3, true, false, false)
MediaConstants.DUST_UNIT / 3, true, false)
));
public static final ActionRegistryEntry POTION$REGENERATION = make("potion/regeneration", new ActionRegistryEntry(
HexPattern.fromAngles("qqqqaawawaedd", HexDir.NORTH_WEST), new OpPotionEffect(MobEffects.REGENERATION,
MediaConstants.DUST_UNIT, true, true, true)
MediaConstants.DUST_UNIT, true, true)
));
public static final ActionRegistryEntry POTION$NIGHT_VISION = make("potion/night_vision", new ActionRegistryEntry(
HexPattern.fromAngles("qqqaawawaeqdd", HexDir.WEST), new OpPotionEffect(MobEffects.NIGHT_VISION,
MediaConstants.DUST_UNIT / 5, false, true, true)
MediaConstants.DUST_UNIT / 5, false, true)
));
public static final ActionRegistryEntry POTION$ABSORPTION = make("potion/absorption", new ActionRegistryEntry(
HexPattern.fromAngles("qqaawawaeqqdd", HexDir.SOUTH_WEST), new OpPotionEffect(MobEffects.ABSORPTION,
MediaConstants.DUST_UNIT, true, true, true)
MediaConstants.DUST_UNIT, true, true)
));
public static final ActionRegistryEntry POTION$HASTE = make("potion/haste", new ActionRegistryEntry(
HexPattern.fromAngles("qaawawaeqqqdd", HexDir.SOUTH_EAST), new OpPotionEffect(MobEffects.DIG_SPEED,
MediaConstants.DUST_UNIT / 3, true, true, true)
MediaConstants.DUST_UNIT / 3, true, true)
));
public static final ActionRegistryEntry POTION$STRENGTH = make("potion/strength", new ActionRegistryEntry(
HexPattern.fromAngles("aawawaeqqqqdd", HexDir.EAST), new OpPotionEffect(MobEffects.DAMAGE_BOOST,
MediaConstants.DUST_UNIT / 3, true, true, true)
MediaConstants.DUST_UNIT / 3, true, true)
));
public static final ActionRegistryEntry SENTINEL$CREATE = make("sentinel/create",
@ -341,7 +341,7 @@ public class HexActions {
public static final ActionRegistryEntry FLIGHT = make("flight",
new ActionRegistryEntry(HexPattern.fromAngles("eawwaeawawaa", HexDir.NORTH_WEST), OpFlight.INSTANCE));
public static final ActionRegistryEntry CREATE_LAVA = make("create_lava",
new ActionRegistryEntry(HexPattern.fromAngles("eaqawqadaqd", HexDir.EAST), new OpCreateFluid(true,
new ActionRegistryEntry(HexPattern.fromAngles("eaqawqadaqd", HexDir.EAST), new OpCreateFluid(
MediaConstants.CRYSTAL_UNIT,
Items.LAVA_BUCKET,
Blocks.LAVA_CAULDRON.defaultBlockState(),

View file

@ -24,15 +24,9 @@ public class HexActionTagProvider extends TagsProvider<ActionRegistryEntry> {
var loc = modLoc(normalGreat);
var key = ResourceKey.create(IXplatAbstractions.INSTANCE.getActionRegistry().key(), loc);
tag(HexTags.Actions.REQUIRES_ENLIGHTENMENT).add(key);
tag(HexTags.Actions.CAN_START_ENLIGHTEN).add(key);
tag(HexTags.Actions.PER_WORLD_PATTERN).add(key);
}
for (var onlyEnlighten : new String[]{
"akashic/write",
}) {
var loc = modLoc(onlyEnlighten);
var key = ResourceKey.create(IXplatAbstractions.INSTANCE.getActionRegistry().key(), loc);
tag(HexTags.Actions.REQUIRES_ENLIGHTENMENT).add(key);
}
// deciding that akashic write can be just a normal spell (as a treat)
}
}

View file

@ -1,4 +1,4 @@
// 1.19.2 2023-01-21T14:45:49.102988105 Tags for minecraft:item
// 1.19.2 2023-01-21T15:43:08.87507582 Tags for minecraft:item
5928bad07d3872bb60f29ef4f3c885c8e1967c20 data/hexcasting/tags/items/phial_base.json
fdb48f194d7937ab6b423fa4b90a4d438bf6dd90 data/minecraft/tags/items/wooden_doors.json
e5df19a1dc6eadf14cd9b0f0fe45a74330b745e9 data/hexcasting/tags/items/edified_planks.json

View file

@ -1,4 +1,4 @@
// 1.19.2 2023-01-21T14:45:49.133731101 LootTables
// 1.19.2 2023-01-21T15:43:08.837666395 LootTables
01a50f557196c705c275722015cf893e0abe6425 data/hexcasting/loot_tables/inject/scroll_loot_many.json
dec1d3592e82f99d9e059d9c771530f103b2bda5 data/hexcasting/loot_tables/blocks/empty_directrix.json
2c42fc5d8c74c98ad15b8bd50f56541fccbef750 data/hexcasting/loot_tables/blocks/edified_tile.json

View file

@ -1,4 +1,4 @@
// 1.19.2 2023-01-21T14:45:49.143179079 Tags for minecraft:block
// 1.19.2 2023-01-21T15:43:08.873838666 Tags for minecraft:block
20183cd61968ff6548df2dde1100b6378d68d64b data/minecraft/tags/blocks/wooden_buttons.json
357eddf3cee6f16725bed0701d57b2ca3097d74d data/minecraft/tags/blocks/mineable/shovel.json
5216ba5c57db29b8dee9aebc63a2e3b17c97dc17 data/minecraft/tags/blocks/wooden_trapdoors.json

View file

@ -1,3 +1,4 @@
// 1.19.2 2023-01-21T14:45:49.142544446 Tags for hexcasting:action
// 1.19.2 2023-01-21T15:43:08.846211098 Tags for hexcasting:action
e5afc567ea17f035e4eb1d1d48825100b7f6ad68 data/hexcasting/tags/action/per_world_pattern.json
e0464372b1bfe00bb9e9fdaa9889f88c31080cc4 data/hexcasting/tags/action/requires_enlightenment.json
e5afc567ea17f035e4eb1d1d48825100b7f6ad68 data/hexcasting/tags/action/requires_enlightenment.json
e5afc567ea17f035e4eb1d1d48825100b7f6ad68 data/hexcasting/tags/action/can_start_enlighten.json

View file

@ -1,4 +1,4 @@
// 1.19.2 2023-01-21T14:45:49.119742079 Recipes
// 1.19.2 2023-01-21T15:43:08.846955947 Recipes
858dada9c41974f5aa80c66423bf371c9e176a53 data/hexcasting/recipes/pride_colorizer_demigirl.json
bb0f91c534c888d1cff8793b49986dce236c7b2d data/hexcasting/advancements/recipes/hexcasting.creative_tab/dye_colorizer_white.json
9f75d3e93ecbbbf3ed9a92b2943397e09dcae1a9 data/hexcasting/recipes/dye_colorizer_light_blue.json

View file

@ -0,0 +1,13 @@
{
"replace": false,
"values": [
"hexcasting:lightning",
"hexcasting:flight",
"hexcasting:create_lava",
"hexcasting:teleport",
"hexcasting:sentinel/create/great",
"hexcasting:dispel_rain",
"hexcasting:summon_rain",
"hexcasting:brainsweep"
]
}

View file

@ -8,7 +8,6 @@
"hexcasting:sentinel/create/great",
"hexcasting:dispel_rain",
"hexcasting:summon_rain",
"hexcasting:brainsweep",
"hexcasting:akashic/write"
"hexcasting:brainsweep"
]
}

View file

@ -1,3 +1,4 @@
// 1.19.2 2023-01-21T14:47:29.414121689 Tags for hexcasting:action
// 1.19.2 2023-01-21T15:44:11.307837433 Tags for hexcasting:action
7684713a5311ad151b5591d22757988c8462d647 data/hexcasting/tags/hexcasting/action/can_start_enlighten.json
7684713a5311ad151b5591d22757988c8462d647 data/hexcasting/tags/hexcasting/action/per_world_pattern.json
9eb0b98603394a44b9202d1ff6778a539edfdfa4 data/hexcasting/tags/hexcasting/action/requires_enlightenment.json
7684713a5311ad151b5591d22757988c8462d647 data/hexcasting/tags/hexcasting/action/requires_enlightenment.json

View file

@ -0,0 +1,12 @@
{
"values": [
"hexcasting:lightning",
"hexcasting:flight",
"hexcasting:create_lava",
"hexcasting:teleport",
"hexcasting:sentinel/create/great",
"hexcasting:dispel_rain",
"hexcasting:summon_rain",
"hexcasting:brainsweep"
]
}

View file

@ -7,7 +7,6 @@
"hexcasting:sentinel/create/great",
"hexcasting:dispel_rain",
"hexcasting:summon_rain",
"hexcasting:brainsweep",
"hexcasting:akashic/write"
"hexcasting:brainsweep"
]
}