From 9157ef5dcb87f8194375ba6c698393257d18d45d Mon Sep 17 00:00:00 2001 From: Talia-12 Date: Fri, 2 Jun 2023 20:50:13 +1000 Subject: [PATCH] reset ops used after each slate when circles are casting. --- .../api/casting/circles/CircleExecutionState.java | 2 +- .../hexcasting/api/casting/eval/env/StaffCastEnv.java | 3 +-- .../petrak/hexcasting/api/casting/eval/vm/CastingImage.kt | 7 ++++++- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/CircleExecutionState.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/CircleExecutionState.java index ace46ac4..0d392058 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/CircleExecutionState.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/circles/CircleExecutionState.java @@ -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 } } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/StaffCastEnv.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/StaffCastEnv.java index 6a656ffc..05310d46 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/StaffCastEnv.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/StaffCastEnv.java @@ -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()); } diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/CastingImage.kt b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/CastingImage.kt index 1bd2dfcc..bf58503c 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/CastingImage.kt +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/vm/CastingImage.kt @@ -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() val stackTag = tag.getList(TAG_STACK, Tag.TAG_COMPOUND)