diff --git a/common/src/main/java/org/vivecraft/client/render/VRPlayerModel_WithArms.java b/common/src/main/java/org/vivecraft/client/render/VRPlayerModel_WithArms.java index 238797c4f..49c5586fe 100644 --- a/common/src/main/java/org/vivecraft/client/render/VRPlayerModel_WithArms.java +++ b/common/src/main/java/org/vivecraft/client/render/VRPlayerModel_WithArms.java @@ -17,9 +17,8 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.phys.Vec3; import org.vivecraft.client.VRPlayersClient; -import org.vivecraft.client.Xplat; +import org.vivecraft.client_vr.utils.ScaleHelper; import org.vivecraft.mod_compat_vr.optifine.OptifineHelper; -import org.vivecraft.mod_compat_vr.pehkui.PehkuiHelper; import org.vivecraft.mod_compat_vr.sodium.SodiumHelper; public class VRPlayerModel_WithArms extends VRPlayerModel { @@ -157,13 +156,11 @@ public void setupAnim(T pEntity, float pLimbSwing, float pLimbSwingAmount, float this.leftShoulder.y += 3.2F; } - Vec3 vec3 = rotinfo.leftArmPos; - Vec3 vec32 = rotinfo.rightArmPos; - if (Xplat.isModLoaded("pehkui")) { - // remove pehkui scale from that, since the whole entity is scaled - vec3 = vec3.scale(1.0F / PehkuiHelper.getPlayerScale(pEntity, Minecraft.getInstance().getTimer().getGameTimeDeltaPartialTick(false))); - vec32 = vec32.scale(1.0F / PehkuiHelper.getPlayerScale(pEntity, Minecraft.getInstance().getTimer().getGameTimeDeltaPartialTick(false))); - } + // remove entity scale from that + float scale = 1.0F / ScaleHelper.getEntityScale(pEntity, Minecraft.getInstance().getTimer().getGameTimeDeltaPartialTick(false)); + Vec3 vec3 = rotinfo.leftArmPos.scale(scale); + Vec3 vec32 = rotinfo.rightArmPos.scale(scale); + vec3 = vec3.add(0.0D, d0, 0.0D); vec3 = vec3.yRot((float) (-Math.PI + d1)); vec3 = vec3.scale(16.0F / rotinfo.heightScale); diff --git a/common/src/main/java/org/vivecraft/client_vr/gameplay/VRPlayer.java b/common/src/main/java/org/vivecraft/client_vr/gameplay/VRPlayer.java index 95e19bc8f..9bce8779e 100644 --- a/common/src/main/java/org/vivecraft/client_vr/gameplay/VRPlayer.java +++ b/common/src/main/java/org/vivecraft/client_vr/gameplay/VRPlayer.java @@ -23,8 +23,8 @@ import net.minecraft.world.phys.HitResult; import net.minecraft.world.phys.Vec3; import org.vivecraft.client.VivecraftVRMod; -import org.vivecraft.client.Xplat; import org.vivecraft.client.network.ClientNetworking; +import org.vivecraft.client_vr.utils.ScaleHelper; import org.vivecraft.client_vr.ClientDataHolderVR; import org.vivecraft.client_vr.ItemTags; import org.vivecraft.client_vr.MethodHolder; @@ -39,7 +39,6 @@ import org.vivecraft.client_vr.render.RenderPass; import org.vivecraft.client_vr.settings.VRSettings; import org.vivecraft.common.VRServerPerms; -import org.vivecraft.mod_compat_vr.pehkui.PehkuiHelper; import java.util.ArrayList; import java.util.Random; @@ -147,16 +146,14 @@ public void preTick() { this.worldScale = rawWorldScale; - if (Xplat.isModLoaded("pehkui")) { - // scale world with player size - this.worldScale *= PehkuiHelper.getPlayerScale(mc.player, mc.getTimer().getGameTimeDeltaPartialTick(false)); - // limit scale - if (this.worldScale > 100F) { - this.worldScale = 100F; - } else if (this.worldScale < 0.025F) //minClip + player position indicator offset - { - this.worldScale = 0.025F; - } + // scale world with player size + this.worldScale *= ScaleHelper.getEntityScale(mc.player, mc.getTimer().getGameTimeDeltaPartialTick(false)); + // limit scale + if (this.worldScale > 100F) { + this.worldScale = 100F; + } else if (this.worldScale < 0.025F) //minClip + player position indicator offset + { + this.worldScale = 0.025F; } // check that nobody tries to bypass the server set worldscale limit it with a runtime worldscale diff --git a/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/BowTracker.java b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/BowTracker.java index 44a44c9dd..c6e0f852a 100644 --- a/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/BowTracker.java +++ b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/BowTracker.java @@ -12,8 +12,8 @@ import net.minecraft.world.item.UseAnim; import net.minecraft.world.phys.Vec3; import org.vivecraft.client.VivecraftVRMod; -import org.vivecraft.client.Xplat; import org.vivecraft.client.network.ClientNetworking; +import org.vivecraft.client_vr.utils.ScaleHelper; import org.vivecraft.client_vr.ClientDataHolderVR; import org.vivecraft.client_vr.VRData; import org.vivecraft.client_vr.extensions.PlayerExtension; @@ -22,7 +22,6 @@ import org.vivecraft.client_vr.settings.VRSettings; import org.vivecraft.common.network.CommonNetworkHelper; import org.vivecraft.common.utils.math.Vector3; -import org.vivecraft.mod_compat_vr.pehkui.PehkuiHelper; import java.nio.ByteBuffer; @@ -126,12 +125,9 @@ public void doProcess(LocalPlayer player) { this.lastpressed = this.pressed; this.lastDraw = this.currentDraw; this.lastcanDraw = this.canDraw; - this.maxDraw = (double) this.mc.player.getBbHeight() * 0.22D; - if (Xplat.isModLoaded("pehkui")) { - // this is meant to be relative to the base Bb height, not the scaled one - this.maxDraw /= PehkuiHelper.getPlayerBbScale(player, mc.getTimer().getGameTimeDeltaPartialTick(false)); - } + // this is meant to be relative to the base Bb height, not the scaled one + this.maxDraw = (double) this.mc.player.getBbHeight() * 0.22D / ScaleHelper.getEntityBbScale(player, mc.getTimer().getGameTimeDeltaPartialTick(false)); Vec3 vec3 = vrdata.getController(0).getPosition(); Vec3 vec31 = vrdata.getController(1).getPosition(); diff --git a/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/CrawlTracker.java b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/CrawlTracker.java index 3d3f0a306..fa252da9b 100644 --- a/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/CrawlTracker.java +++ b/common/src/main/java/org/vivecraft/client_vr/gameplay/trackers/CrawlTracker.java @@ -4,11 +4,10 @@ import net.minecraft.client.player.LocalPlayer; import net.minecraft.network.protocol.common.ServerboundCustomPayloadPacket; import net.minecraft.world.entity.Pose; -import org.vivecraft.client.Xplat; import org.vivecraft.client.network.ClientNetworking; +import org.vivecraft.client_vr.utils.ScaleHelper; import org.vivecraft.client_vr.ClientDataHolderVR; import org.vivecraft.common.network.CommonNetworkHelper; -import org.vivecraft.mod_compat_vr.pehkui.PehkuiHelper; public class CrawlTracker extends Tracker { private boolean wasCrawling; @@ -44,10 +43,7 @@ public void reset(LocalPlayer player) { } public void doProcess(LocalPlayer player) { - double scaleMultiplier = 1.0; - if (Xplat.isModLoaded("pehkui")) { - scaleMultiplier /= PehkuiHelper.getPlayerScale(player, mc.getTimer().getGameTimeDeltaPartialTick(false)); - } + float scaleMultiplier = 1.0F / ScaleHelper.getEntityScale(player, mc.getTimer().getGameTimeDeltaPartialTick(false)); this.crawling = this.dh.vr.hmdPivotHistory.averagePosition(0.2F).y * (double) this.dh.vrPlayer.worldScale * scaleMultiplier + (double) 0.1F < (double) this.dh.vrSettings.crawlThreshold; this.updateState(player); } diff --git a/common/src/main/java/org/vivecraft/client_vr/render/VivecraftItemRendering.java b/common/src/main/java/org/vivecraft/client_vr/render/VivecraftItemRendering.java index 828660399..bbddafd92 100644 --- a/common/src/main/java/org/vivecraft/client_vr/render/VivecraftItemRendering.java +++ b/common/src/main/java/org/vivecraft/client_vr/render/VivecraftItemRendering.java @@ -344,9 +344,12 @@ public static void applyFirstPersonItemTransforms(PoseStack pMatrixStack, Vivecr translateY = 0.0D; translateX = 0.0D; } else if (rendertype == VivecraftItemTransformType.Mace) { - translateX = 0.00D; - translateY = 0.02D; - translateZ = -0.07D; + preRotation = Axis.XP.rotationDegrees((float) gunAngle); + translateX = 0.0D; + translateY = 0.0125; + translateZ = -0.06; + rotation = rotation.mul(Axis.XP.rotationDegrees((float) -gunAngle)); + scale = 0.56F; } } } else { diff --git a/common/src/main/java/org/vivecraft/client_vr/render/helpers/VREffectsHelper.java b/common/src/main/java/org/vivecraft/client_vr/render/helpers/VREffectsHelper.java index 22b218a64..b27dc7e62 100644 --- a/common/src/main/java/org/vivecraft/client_vr/render/helpers/VREffectsHelper.java +++ b/common/src/main/java/org/vivecraft/client_vr/render/helpers/VREffectsHelper.java @@ -885,9 +885,16 @@ public static void renderFaceOverlay(float partialTicks) { if (((GameRendererExtension) mc.gameRenderer).vivecraft$isInBlock() > 0.0F) { renderFaceInBlock(); + RenderSystem.getModelViewStack().pushMatrix().identity(); + RenderHelper.applyVRModelView(dataHolder.currentPass, RenderSystem.getModelViewStack()); + RenderSystem.applyModelViewMatrix(); + renderGuiAndShadow(partialTicks, true, true); VRArmHelper.renderVRHands(partialTicks, true, true, true, true); + + RenderSystem.getModelViewStack().popMatrix(); + RenderSystem.applyModelViewMatrix(); } } diff --git a/common/src/main/java/org/vivecraft/client_vr/utils/ScaleHelper.java b/common/src/main/java/org/vivecraft/client_vr/utils/ScaleHelper.java new file mode 100644 index 000000000..e7fdf4b82 --- /dev/null +++ b/common/src/main/java/org/vivecraft/client_vr/utils/ScaleHelper.java @@ -0,0 +1,24 @@ +package org.vivecraft.client_vr.utils; + +import net.minecraft.world.entity.LivingEntity; +import org.vivecraft.client.Xplat; +import org.vivecraft.mod_compat_vr.pehkui.PehkuiHelper; + +public class ScaleHelper { + + public static float getEntityScale(LivingEntity livingEntity, float tickDelta) { + float scale = livingEntity.getScale(); + if (Xplat.isModLoaded("pehkui")) { + scale *= PehkuiHelper.getEntityScale(livingEntity, tickDelta); + } + return scale; + } + + public static float getEntityBbScale(LivingEntity livingEntity, float tickDelta) { + float scale = livingEntity.getScale(); + if (Xplat.isModLoaded("pehkui")) { + scale *= PehkuiHelper.getEntityBbScale(livingEntity, tickDelta); + } + return scale; + } +} diff --git a/common/src/main/java/org/vivecraft/mixin/client_vr/MinecraftVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/MinecraftVRMixin.java index d8f020a35..0b05cd155 100644 --- a/common/src/main/java/org/vivecraft/mixin/client_vr/MinecraftVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/MinecraftVRMixin.java @@ -542,10 +542,6 @@ public abstract class MinecraftVRMixin implements MinecraftExtension { if (VRState.vrRunning) { if (ClientDataHolderVR.getInstance().menuWorldRenderer.isReady()) { - // update textures in the menu - if (this.level == null) { - this.textureManager.tick(); - } ClientDataHolderVR.getInstance().menuWorldRenderer.tick(); } diff --git a/common/src/main/java/org/vivecraft/mixin/client_vr/particle/ItemPickupParticleVRMixin.java b/common/src/main/java/org/vivecraft/mixin/client_vr/particle/ItemPickupParticleVRMixin.java index 2c70eaddc..f05578fab 100644 --- a/common/src/main/java/org/vivecraft/mixin/client_vr/particle/ItemPickupParticleVRMixin.java +++ b/common/src/main/java/org/vivecraft/mixin/client_vr/particle/ItemPickupParticleVRMixin.java @@ -11,10 +11,8 @@ import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Redirect; -import org.vivecraft.client.Xplat; import org.vivecraft.client_vr.VRState; import org.vivecraft.client_vr.render.helpers.RenderHelper; -import org.vivecraft.mod_compat_vr.pehkui.PehkuiHelper; @Mixin(ItemPickupParticle.class) public class ItemPickupParticleVRMixin { @@ -45,14 +43,7 @@ public class ItemPickupParticleVRMixin { @Redirect(at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;lerp(DDD)D", ordinal = 1), method = "render") public double vivecraft$updateY(double d, double e, double f) { if (VRState.vrRunning && target == vivecraft$mc.player) { - float offset = 0.5F; - if (Xplat.isModLoaded("pehkui")) { - // pehkui changes the offset, need to account for that - offset *= PehkuiHelper.getPlayerScale(target, (float) d); - } - // offset, so the particle is centered around the arm - offset += itemEntity.getBbHeight(); - e = f = vivecraft$playerPos.y - offset; + e = f = vivecraft$playerPos.y - itemEntity.getBbHeight(); } return Mth.lerp(d, e, f); diff --git a/common/src/main/java/org/vivecraft/mod_compat_vr/iris/IrisHelper.java b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/IrisHelper.java index f3f256375..3b146658e 100644 --- a/common/src/main/java/org/vivecraft/mod_compat_vr/iris/IrisHelper.java +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/iris/IrisHelper.java @@ -41,6 +41,7 @@ public class IrisHelper { private static Method CapturedRenderingState_getGbufferProjection; private static Method WorldRenderingSettings_setUseExtendedVertexFormat; + private static Method WorldRenderingSettings_shouldUseExtendedVertexFormat; public static boolean isIrisLoaded() { return Xplat.isModLoaded("iris") || Xplat.isModLoaded("oculus"); @@ -83,7 +84,11 @@ public static boolean hasWaterEffect() { } public static boolean isShaderActive() { - return IrisApi.getInstance().isShaderPackInUse(); + try { + return IrisApi.getInstance().isShaderPackInUse() || (WorldRenderingSettings_shouldUseExtendedVertexFormat != null && (boolean) WorldRenderingSettings_shouldUseExtendedVertexFormat.invoke(WorldRenderingSettings.INSTANCE)); + } catch (InvocationTargetException | IllegalAccessException e) { + return false; + } } public static boolean hasIssuesWithMenuWorld() { @@ -164,6 +169,7 @@ private static boolean init() { try { WorldRenderingSettings_setUseExtendedVertexFormat = Class.forName("net.irisshaders.iris.shaderpack.materialmap.WorldRenderingSettings").getMethod("setUseExtendedVertexFormat", boolean.class); + WorldRenderingSettings_shouldUseExtendedVertexFormat = Class.forName("net.irisshaders.iris.shaderpack.materialmap.WorldRenderingSettings").getMethod("shouldUseExtendedVertexFormat"); } catch (ClassNotFoundException | NoSuchMethodException ignore) {} // distant horizon compat diff --git a/common/src/main/java/org/vivecraft/mod_compat_vr/pehkui/PehkuiHelper.java b/common/src/main/java/org/vivecraft/mod_compat_vr/pehkui/PehkuiHelper.java index 6e39530fb..1c41c44fe 100644 --- a/common/src/main/java/org/vivecraft/mod_compat_vr/pehkui/PehkuiHelper.java +++ b/common/src/main/java/org/vivecraft/mod_compat_vr/pehkui/PehkuiHelper.java @@ -4,11 +4,11 @@ import virtuoel.pehkui.util.ScaleUtils; public class PehkuiHelper { - public static float getPlayerScale(Entity player, float tickDelta) { - return ScaleUtils.getEyeHeightScale(player, tickDelta); + public static float getEntityScale(Entity entity, float tickDelta) { + return ScaleUtils.getEyeHeightScale(entity, tickDelta); } - public static float getPlayerBbScale(Entity player, float tickDelta) { - return ScaleUtils.getBoundingBoxHeightScale(player, tickDelta); + public static float getEntityBbScale(Entity entity, float tickDelta) { + return ScaleUtils.getBoundingBoxHeightScale(entity, tickDelta); } } diff --git a/gradle.properties b/gradle.properties index 8e36e3153..50b230019 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,7 +4,7 @@ minecraft_version=1.21 enabled_platforms=fabric,forge,neoforge archives_base_name=vivecraft -mod_version=1.1.12-b3 +mod_version=1.1.12-b5 maven_group=org.vivecraft architectury_version=12.0.26 diff --git a/stubs/src/main/java/me/jellysquid/mods/sodium/client/render/immediate/model/ModelCuboid.java b/stubs/src/main/java/me/jellysquid/mods/sodium/client/render/immediate/model/ModelCuboid.java index 71e0a6d49..b58058168 100644 --- a/stubs/src/main/java/me/jellysquid/mods/sodium/client/render/immediate/model/ModelCuboid.java +++ b/stubs/src/main/java/me/jellysquid/mods/sodium/client/render/immediate/model/ModelCuboid.java @@ -1,4 +1,4 @@ package me.jellysquid.mods.sodium.client.render.immediate.model; -public interface ModelCuboid { +public class ModelCuboid { } diff --git a/stubs/src/main/java/net/caffeinemc/mods/sodium/client/render/immediate/model/ModelCuboid.java b/stubs/src/main/java/net/caffeinemc/mods/sodium/client/render/immediate/model/ModelCuboid.java index 76c09a399..00bcdc8e4 100644 --- a/stubs/src/main/java/net/caffeinemc/mods/sodium/client/render/immediate/model/ModelCuboid.java +++ b/stubs/src/main/java/net/caffeinemc/mods/sodium/client/render/immediate/model/ModelCuboid.java @@ -1,4 +1,4 @@ package net.caffeinemc.mods.sodium.client.render.immediate.model; -public interface ModelCuboid { +public class ModelCuboid { } diff --git a/stubs/src/main/java/net/irisshaders/iris/compat/sodium/impl/shader_overrides/IrisChunkProgramOverrides.java b/stubs/src/main/java/net/irisshaders/iris/compat/sodium/impl/shader_overrides/IrisChunkProgramOverrides.java index 9588a5dde..995ee237d 100644 --- a/stubs/src/main/java/net/irisshaders/iris/compat/sodium/impl/shader_overrides/IrisChunkProgramOverrides.java +++ b/stubs/src/main/java/net/irisshaders/iris/compat/sodium/impl/shader_overrides/IrisChunkProgramOverrides.java @@ -1,4 +1,4 @@ package net.irisshaders.iris.compat.sodium.impl.shader_overrides; -public interface IrisChunkProgramOverrides { +public class IrisChunkProgramOverrides { } diff --git a/stubs/src/main/java/net/irisshaders/iris/compat/sodium/impl/shader_overrides/IrisChunkShaderInterface.java b/stubs/src/main/java/net/irisshaders/iris/compat/sodium/impl/shader_overrides/IrisChunkShaderInterface.java index c652c862e..1213a5fd7 100644 --- a/stubs/src/main/java/net/irisshaders/iris/compat/sodium/impl/shader_overrides/IrisChunkShaderInterface.java +++ b/stubs/src/main/java/net/irisshaders/iris/compat/sodium/impl/shader_overrides/IrisChunkShaderInterface.java @@ -1,4 +1,4 @@ package net.irisshaders.iris.compat.sodium.impl.shader_overrides; -public interface IrisChunkShaderInterface { +public class IrisChunkShaderInterface { } diff --git a/stubs/src/main/java/net/irisshaders/iris/pipeline/SodiumTerrainPipeline.java b/stubs/src/main/java/net/irisshaders/iris/pipeline/SodiumTerrainPipeline.java index dc2f08933..6c06645c2 100644 --- a/stubs/src/main/java/net/irisshaders/iris/pipeline/SodiumTerrainPipeline.java +++ b/stubs/src/main/java/net/irisshaders/iris/pipeline/SodiumTerrainPipeline.java @@ -1,4 +1,4 @@ package net.irisshaders.iris.pipeline; -public interface SodiumTerrainPipeline { +public class SodiumTerrainPipeline { }