diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastingEnvironment.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastingEnvironment.java index 2345eb426..42cbed303 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastingEnvironment.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/CastingEnvironment.java @@ -128,6 +128,13 @@ public ServerPlayer getCaster() { @Nullable public abstract LivingEntity getCastingEntity(); + /** + * Gets the caster's position. Useful for compatibility. + * + * @return the position of the caster + */ + public abstract Vec3 getCastingPosition(); + /** * Get an interface used to do mishaps */ diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/CircleCastEnv.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/CircleCastEnv.java index 333deaa81..14272315c 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/CircleCastEnv.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/CircleCastEnv.java @@ -48,6 +48,11 @@ public CircleCastEnv(ServerLevel world, CircleExecutionState execState) { return this.execState.getCaster(this.world); } + @Override + public Vec3 getCastingPosition() { + return this.getImpetus() == null ? this.execState.impetusPos.getCenter() : this.getImpetus().getBlockPos().getCenter(); + } + public @Nullable BlockEntityAbstractImpetus getImpetus() { var entity = this.world.getBlockEntity(execState.impetusPos); diff --git a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/PlayerBasedCastEnv.java b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/PlayerBasedCastEnv.java index 83e58a818..24b35f418 100644 --- a/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/PlayerBasedCastEnv.java +++ b/Common/src/main/java/at/petrak/hexcasting/api/casting/eval/env/PlayerBasedCastEnv.java @@ -62,6 +62,11 @@ public ServerPlayer getCaster() { return this.caster; } + @Override + public Vec3 getCastingPosition() { + return this.caster.position(); + } + @Override public void postExecution(CastResult result) { super.postExecution(result);