From e7e5cd798ef914dc4cf4b20fee1c50c603d4a9fd Mon Sep 17 00:00:00 2001 From: fayer3 Date: Fri, 13 Mar 2026 17:52:29 +0100 Subject: [PATCH] add an api call to get the actual camera entities position during a renderpass --- .../org/vivecraft/api/client/VRRenderingAPI.java | 13 +++++++++++++ .../client/api_impl/VRRenderingAPIImpl.java | 6 ++++++ .../client_vr/renderer/GameRendererVRMixin.java | 14 +++++++++----- gradle.properties | 2 +- 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/common/src/main/java/org/vivecraft/api/client/VRRenderingAPI.java b/common/src/main/java/org/vivecraft/api/client/VRRenderingAPI.java index a079a941a..d585384f3 100644 --- a/common/src/main/java/org/vivecraft/api/client/VRRenderingAPI.java +++ b/common/src/main/java/org/vivecraft/api/client/VRRenderingAPI.java @@ -76,6 +76,19 @@ static VRRenderingAPI instance() { */ Vec3 getHandRenderPos(InteractionHand hand); + /** + * Gets the position of the camera entity during rendering. Vivecraft sets the cameras entities position during a + * renderpass to the camera position for compatibility, so this can be used to get back the actual + * entities position. + *
+ * Calling this outside a level, or when the camera has no entity will return garbage + * + * @param partialTick partial tick of the current frame + * @return The actual world position of the camera entity + * @since 1.3.8 + */ + Vec3 getCameraEntityPos(float partialTick); + /** * Sets the provided {@link PoseStack} to render at the position of and with the rotation of the provided * {@link InteractionHand}, this assumes the given {@code stack} to be set to an identity. diff --git a/common/src/main/java/org/vivecraft/client/api_impl/VRRenderingAPIImpl.java b/common/src/main/java/org/vivecraft/client/api_impl/VRRenderingAPIImpl.java index 5f960e7c7..0b760bf02 100644 --- a/common/src/main/java/org/vivecraft/client/api_impl/VRRenderingAPIImpl.java +++ b/common/src/main/java/org/vivecraft/client/api_impl/VRRenderingAPIImpl.java @@ -12,6 +12,7 @@ import org.vivecraft.client.ClientVRPlayers; import org.vivecraft.client_vr.ClientDataHolderVR; import org.vivecraft.client_vr.VRState; +import org.vivecraft.client_vr.extensions.GameRendererExtension; import org.vivecraft.client_vr.render.helpers.RenderHelper; import org.vivecraft.client_xr.render_pass.RenderPassType; @@ -53,6 +54,11 @@ public Vec3 getHandRenderPos(InteractionHand hand) { return RenderHelper.getControllerRenderPos(hand.ordinal()); } + @Override + public Vec3 getCameraEntityPos(float partialTick) { + return ((GameRendererExtension) Minecraft.getInstance().gameRenderer).vivecraft$getRvePos(partialTick); + } + @Override public void setupRenderingAtHand(InteractionHand hand, PoseStack stack) { RenderHelper.setupRenderingAtController(hand.ordinal(), stack.last().pose()); diff --git a/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/GameRendererVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/GameRendererVRMixin.java index 2a13cf2ba..2ab2d2915 100644 --- a/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/GameRendererVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/renderer/GameRendererVRMixin.java @@ -587,11 +587,15 @@ else if (vivecraft$DATA_HOLDER.vrPlayer.vrdata_world_render == null || @Override @Unique public Vec3 vivecraft$getRvePos(float partialTick) { - return new Vec3( - Mth.lerp(partialTick, this.vivecraft$rvelastX, this.vivecraft$rveX), - Mth.lerp(partialTick, this.vivecraft$rvelastY, this.vivecraft$rveY), - Mth.lerp(partialTick, this.vivecraft$rvelastZ, this.vivecraft$rveZ) - ); + if (this.vivecraft$cached) { + return new Vec3( + Mth.lerp(partialTick, this.vivecraft$rvelastX, this.vivecraft$rveX), + Mth.lerp(partialTick, this.vivecraft$rvelastY, this.vivecraft$rveY), + Mth.lerp(partialTick, this.vivecraft$rvelastZ, this.vivecraft$rveZ) + ); + } else { + return this.mainCamera.entity().getPosition(partialTick); + } } @Unique diff --git a/gradle.properties b/gradle.properties index 76c4e0bb3..01e642385 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,7 @@ loom.ignoreDependencyLoomVersionValidation=true archives_base_name=vivecraft mod_version=1.3.7 -api_version=1.3.3 +api_version=1.3.8 maven_group=org.vivecraft lwjgl_version=3.3.3