reset ops used after each slate when circles are casting.

This commit is contained in:
Talia-12 2023-06-02 20:50:13 +10:00
parent 31b7577605
commit 9157ef5dcb
3 changed files with 8 additions and 4 deletions

View file

@ -273,7 +273,7 @@ public class CircleExecutionState {
Objects.requireNonNull(env.getImpetus()), true);
currentPos = found.getFirst();
enteredFrom = found.getSecond();
currentImage = cont.update;
currentImage = cont.update.withOverriddenUsedOps(0); // reset ops used after each slate finishes executing
}
}

View file

@ -101,8 +101,7 @@ public class StaffCastEnv extends PlayerBasedCastEnv {
IXplatAbstractions.INSTANCE.setStaffcastImage(sender, null);
IXplatAbstractions.INSTANCE.setPatterns(sender, List.of());
} else {
var imageWithOpsReset = vm.getImage().copy(vm.getImage().getStack(), vm.getImage().getParenCount(), vm.getImage().getParenthesized(), vm.getImage().getEscapeNext(), 0, vm.getImage().getUserData());
IXplatAbstractions.INSTANCE.setStaffcastImage(sender, imageWithOpsReset);
IXplatAbstractions.INSTANCE.setStaffcastImage(sender, vm.getImage().withOverriddenUsedOps(0));
if (!resolvedPatterns.isEmpty()) {
resolvedPatterns.get(resolvedPatterns.size() - 1).setType(clientInfo.getResolutionType());
}

View file

@ -34,6 +34,11 @@ data class CastingImage private constructor(
*/
fun withUsedOp() = this.withUsedOps(1)
/**
* Returns a copy of this with the [opsConsumed] replaced with [count].
*/
fun withOverriddenUsedOps(count: Long) = this.copy(opsConsumed = count)
fun serializeToNbt() = NBTBuilder {
TAG_STACK %= stack.serializeToNBT()
@ -54,7 +59,7 @@ data class CastingImage private constructor(
const val TAG_USERDATA = "userdata"
@JvmStatic
public fun loadFromNbt(tag: CompoundTag, world: ServerLevel): CastingImage {
fun loadFromNbt(tag: CompoundTag, world: ServerLevel): CastingImage {
return try {
val stack = mutableListOf<Iota>()
val stackTag = tag.getList(TAG_STACK, Tag.TAG_COMPOUND)