asdf tried to get things working but there's a lot broken!

This commit is contained in:
Talia-12 2023-03-31 21:29:39 +10:00
parent 34f769a895
commit 72efd81285
11 changed files with 48 additions and 20 deletions

View file

@ -25,6 +25,7 @@ import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.block.state.properties.BlockStateProperties; import net.minecraft.world.level.block.state.properties.BlockStateProperties;
import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.AABB;
import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import java.text.DecimalFormat; import java.text.DecimalFormat;

View file

@ -1,6 +1,7 @@
package at.petrak.hexcasting.api.casting.eval.env; package at.petrak.hexcasting.api.casting.eval.env;
import at.petrak.hexcasting.api.casting.ParticleSpray; import at.petrak.hexcasting.api.casting.ParticleSpray;
import at.petrak.hexcasting.api.casting.circles.BlockEntityAbstractImpetus;
import at.petrak.hexcasting.api.casting.eval.CastResult; import at.petrak.hexcasting.api.casting.eval.CastResult;
import at.petrak.hexcasting.api.casting.eval.CastingEnvironment; import at.petrak.hexcasting.api.casting.eval.CastingEnvironment;
import at.petrak.hexcasting.api.casting.eval.MishapEnvironment; import at.petrak.hexcasting.api.casting.eval.MishapEnvironment;
@ -12,6 +13,7 @@ import net.minecraft.server.level.ServerLevel;
import net.minecraft.server.level.ServerPlayer; import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionHand;
import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.ItemStack;
import net.minecraft.world.level.block.entity.BlockEntity;
import net.minecraft.world.phys.Vec3; import net.minecraft.world.phys.Vec3;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@ -32,6 +34,22 @@ public class CircleCastEnv extends CastingEnvironment {
return null; return null;
} }
public @Nullable BlockEntityAbstractImpetus getCircle() {
var entity = this.world.getBlockEntity(impetusLoc);
if (entity instanceof BlockEntityAbstractImpetus)
return (BlockEntityAbstractImpetus) entity;
return null;
}
public BlockPos getImpetusLoc() {
return impetusLoc;
}
public Direction getStartDir() {
return startDir;
}
@Override @Override
public MishapEnvironment getMishapEnvironment() { public MishapEnvironment getMishapEnvironment() {
return null; return null;

View file

@ -20,8 +20,13 @@ import java.util.HashSet;
import java.util.List; import java.util.List;
public class StaffCastEnv extends PlayerBasedCastEnv { public class StaffCastEnv extends PlayerBasedCastEnv {
private InteractionHand castingHand;
public StaffCastEnv(ServerPlayer caster, InteractionHand castingHand) { public StaffCastEnv(ServerPlayer caster, InteractionHand castingHand) {
super(caster, castingHand); super(caster, castingHand);
this.castingHand = castingHand;
} }
@Override @Override
@ -43,6 +48,11 @@ public class StaffCastEnv extends PlayerBasedCastEnv {
return remaining; return remaining;
} }
@Override
public InteractionHand castingHand() {
return castingHand;
}
@Override @Override
public FrozenColorizer getColorizer() { public FrozenColorizer getColorizer() {
return HexAPI.instance().getColorizer(this.caster); return HexAPI.instance().getColorizer(this.caster);

View file

@ -54,7 +54,7 @@ data class FrameForEach(
val (stackTop, newImage, newCont) = if (data.nonEmpty) { val (stackTop, newImage, newCont) = if (data.nonEmpty) {
// Increment the evaluation depth, // Increment the evaluation depth,
// push the next datum to the top of the stack, // push the next datum to the top of the stack,
Triple(data.car, harness.image.incDepth(), continuation Triple(data.car, harness.image.copy(userData = CastingImage.incDepth(harness.image.userData)), continuation
// put the next Thoth object back on the stack for the next Thoth cycle, // put the next Thoth object back on the stack for the next Thoth cycle,
.pushFrame(FrameForEach(data.cdr, code, stack, acc)) .pushFrame(FrameForEach(data.cdr, code, stack, acc))
// and prep the Thoth'd code block for evaluation. // and prep the Thoth'd code block for evaluation.

View file

@ -3,6 +3,7 @@ package at.petrak.hexcasting.common.casting.operators.circles
import at.petrak.hexcasting.api.casting.castables.ConstMediaAction import at.petrak.hexcasting.api.casting.castables.ConstMediaAction
import at.petrak.hexcasting.api.casting.asActionResult import at.petrak.hexcasting.api.casting.asActionResult
import at.petrak.hexcasting.api.casting.eval.CastingEnvironment import at.petrak.hexcasting.api.casting.eval.CastingEnvironment
import at.petrak.hexcasting.api.casting.eval.env.CircleCastEnv
import at.petrak.hexcasting.api.casting.iota.Iota import at.petrak.hexcasting.api.casting.iota.Iota
import at.petrak.hexcasting.api.casting.mishaps.MishapNoSpellCircle import at.petrak.hexcasting.api.casting.mishaps.MishapNoSpellCircle
import net.minecraft.world.phys.Vec3 import net.minecraft.world.phys.Vec3
@ -11,11 +12,11 @@ class OpCircleBounds(val max: Boolean) : ConstMediaAction {
override val argc = 0 override val argc = 0
override fun execute(args: List<Iota>, ctx: CastingEnvironment): List<Iota> { override fun execute(args: List<Iota>, ctx: CastingEnvironment): List<Iota> {
val circle = ctx.spellCircle if (ctx !is CircleCastEnv)
if (circle == null)
throw MishapNoSpellCircle() throw MishapNoSpellCircle()
val circle = ctx.circle ?: throw MishapNoSpellCircle()
val aabb = circle.aabb val aabb = circle.getBounds(listOf())
return if (max) return if (max)
Vec3(aabb.maxX - 0.5, aabb.maxY - 0.5, aabb.maxZ - 0.5).asActionResult Vec3(aabb.maxX - 0.5, aabb.maxY - 0.5, aabb.maxZ - 0.5).asActionResult

View file

@ -4,6 +4,7 @@ import at.petrak.hexcasting.api.block.circle.BlockAbstractImpetus
import at.petrak.hexcasting.api.casting.castables.ConstMediaAction import at.petrak.hexcasting.api.casting.castables.ConstMediaAction
import at.petrak.hexcasting.api.casting.asActionResult import at.petrak.hexcasting.api.casting.asActionResult
import at.petrak.hexcasting.api.casting.eval.CastingEnvironment import at.petrak.hexcasting.api.casting.eval.CastingEnvironment
import at.petrak.hexcasting.api.casting.eval.env.CircleCastEnv
import at.petrak.hexcasting.api.casting.iota.Iota import at.petrak.hexcasting.api.casting.iota.Iota
import at.petrak.hexcasting.api.casting.mishaps.MishapNoSpellCircle import at.petrak.hexcasting.api.casting.mishaps.MishapNoSpellCircle
@ -11,13 +12,9 @@ object OpImpetusDir : ConstMediaAction {
override val argc = 0 override val argc = 0
override fun execute(args: List<Iota>, ctx: CastingEnvironment): List<Iota> { override fun execute(args: List<Iota>, ctx: CastingEnvironment): List<Iota> {
val circle = ctx.spellCircle if (ctx !is CircleCastEnv)
if (circle == null)
throw MishapNoSpellCircle() throw MishapNoSpellCircle()
val pos = circle.impetusPos return ctx.startDir.step().asActionResult
val bs = ctx.world.getBlockState(pos)
val dir = bs.getValue(BlockAbstractImpetus.FACING)
return dir.step().asActionResult
} }
} }

View file

@ -3,6 +3,7 @@ package at.petrak.hexcasting.common.casting.operators.circles
import at.petrak.hexcasting.api.casting.castables.ConstMediaAction import at.petrak.hexcasting.api.casting.castables.ConstMediaAction
import at.petrak.hexcasting.api.casting.asActionResult import at.petrak.hexcasting.api.casting.asActionResult
import at.petrak.hexcasting.api.casting.eval.CastingEnvironment import at.petrak.hexcasting.api.casting.eval.CastingEnvironment
import at.petrak.hexcasting.api.casting.eval.env.CircleCastEnv
import at.petrak.hexcasting.api.casting.iota.Iota import at.petrak.hexcasting.api.casting.iota.Iota
import at.petrak.hexcasting.api.casting.mishaps.MishapNoSpellCircle import at.petrak.hexcasting.api.casting.mishaps.MishapNoSpellCircle
@ -10,10 +11,9 @@ object OpImpetusPos : ConstMediaAction {
override val argc = 0 override val argc = 0
override fun execute(args: List<Iota>, ctx: CastingEnvironment): List<Iota> { override fun execute(args: List<Iota>, ctx: CastingEnvironment): List<Iota> {
val circle = ctx.spellCircle if (ctx !is CircleCastEnv)
if (circle == null)
throw MishapNoSpellCircle() throw MishapNoSpellCircle()
return circle.impetusPos.asActionResult return ctx.impetusLoc.asActionResult
} }
} }

View file

@ -68,10 +68,10 @@ object OpMakeBattery : SpellAction {
val entityStack = itemEntity.item.copy() val entityStack = itemEntity.item.copy()
val mediamount = extractMedia(entityStack, drainForBatteries = true) val mediamount = extractMedia(entityStack, drainForBatteries = true)
if (mediamount > 0) { if (mediamount > 0) {
ctx.caster.setItemInHand( ctx.caster?.setItemInHand(
hand, hand,
ItemMediaHolder.withMedia(ItemStack(HexItems.BATTERY), mediamount, mediamount) ItemMediaHolder.withMedia(ItemStack(HexItems.BATTERY), mediamount, mediamount)
) ) ?: return
} }
itemEntity.item = entityStack itemEntity.item = entityStack

View file

@ -47,7 +47,7 @@ class OpMakePackagedSpell<T : ItemPackagedHex>(val itemType: T, val cost: Int) :
) )
} }
val trueName = MishapOthersName.getTrueNameFromArgs(patterns, ctx.caster) val trueName = ctx.caster?.let { MishapOthersName.getTrueNameFromArgs(patterns, it) }
if (trueName != null) if (trueName != null)
throw MishapOthersName(trueName) throw MishapOthersName(trueName)

View file

@ -10,6 +10,7 @@ import at.petrak.hexcasting.api.casting.iota.Iota
import at.petrak.hexcasting.api.casting.mishaps.MishapBadBlock import at.petrak.hexcasting.api.casting.mishaps.MishapBadBlock
import at.petrak.hexcasting.xplat.IXplatAbstractions import at.petrak.hexcasting.xplat.IXplatAbstractions
import net.minecraft.core.BlockPos import net.minecraft.core.BlockPos
import net.minecraft.core.Direction
import net.minecraft.core.particles.BlockParticleOption import net.minecraft.core.particles.BlockParticleOption
import net.minecraft.core.particles.ParticleTypes import net.minecraft.core.particles.ParticleTypes
import net.minecraft.sounds.SoundSource import net.minecraft.sounds.SoundSource
@ -27,14 +28,14 @@ object OpPlaceBlock : SpellAction {
override fun execute( override fun execute(
args: List<Iota>, args: List<Iota>,
ctx: CastingEnvironment ctx: CastingEnvironment
): Triple<RenderedSpell, Int, List<ParticleSpray>>? { ): Triple<RenderedSpell, Int, List<ParticleSpray>> {
val pos = args.getBlockPos(0, argc) val pos = args.getBlockPos(0, argc)
ctx.assertVecInRange(pos) ctx.assertVecInRange(pos)
val blockHit = BlockHitResult( val blockHit = BlockHitResult(
Vec3.atCenterOf(pos), ctx.caster.direction, pos, false Vec3.atCenterOf(pos), ctx.caster?.direction ?: Direction.NORTH, pos, false
) )
val itemUseCtx = UseOnContext(ctx.caster, ctx.castingHand, blockHit) val itemUseCtx = UseOnContext(ctx.caster, ctx.castingHand(), blockHit)
val placeContext = BlockPlaceContext(itemUseCtx) val placeContext = BlockPlaceContext(itemUseCtx)
val worldState = ctx.world.getBlockState(pos) val worldState = ctx.world.getBlockState(pos)

View file

@ -31,7 +31,7 @@ object OpPrint : Action {
private data class Spell(val datum: Iota) : RenderedSpell { private data class Spell(val datum: Iota) : RenderedSpell {
override fun cast(ctx: CastingEnvironment) { override fun cast(ctx: CastingEnvironment) {
ctx.caster.sendSystemMessage(datum.display()) ctx.caster?.sendSystemMessage(datum.display())
} }
} }
} }