Skip to content

Fixed RayTracer reach inconsistency between client and server. #429

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: 1.18.x
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build.properties
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
mc_version=1.18.2
forge_version=40.1.10
forge_version=40.1.23
mod_version=4.1.3
19 changes: 5 additions & 14 deletions src/main/java/codechicken/lib/raytracer/RayTracer.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,25 +41,16 @@ public static BlockHitResult retraceBlock(BlockGetter level, Player player, Bloc
return baseTraceResult;
}

private static double getBlockReachDistance_server(ServerPlayer player) {
return player.getAttribute(ForgeMod.REACH_DISTANCE.get()).getValue();
}

@OnlyIn (Dist.CLIENT)
private static double getBlockReachDistance_client() {
return Minecraft.getInstance().gameMode.getPickRange();
}

public static BlockHitResult retrace(Player player) {
return retrace(player, ClipContext.Block.OUTLINE);
}

public static BlockHitResult retrace(Player player, ClipContext.Block blockMode) {
return retrace(player, getBlockReachDistance(player), blockMode, ClipContext.Fluid.NONE);
return retrace(player, player.getReachDistance(), blockMode, ClipContext.Fluid.NONE);
}

public static BlockHitResult retrace(Player player, ClipContext.Block blockMode, ClipContext.Fluid fluidMode) {
return retrace(player, getBlockReachDistance(player), blockMode, fluidMode);
return retrace(player, player.getReachDistance(), blockMode, fluidMode);
}

public static BlockHitResult retrace(Player player, double reach, ClipContext.Block blockMode) {
Expand All @@ -81,15 +72,15 @@ public static Vec3 getStartVec(Player player) {
return getCorrectedHeadVec(player);
}

@Deprecated // Use attribute directly? avoid all this nonsense.
@Deprecated // Replace with player.getReachDistance()
public static double getBlockReachDistance(Player player) {
return player.level.isClientSide ? getBlockReachDistance_client() : player instanceof ServerPlayer ? getBlockReachDistance_server((ServerPlayer) player) : 5D;
return player.getReachDistance();
}

public static Vec3 getEndVec(Player player) {
Vec3 headVec = getCorrectedHeadVec(player);
Vec3 lookVec = player.getViewVector(1.0F);
double reach = getBlockReachDistance(player);
double reach = player.getReachDistance();
return headVec.add(lookVec.x * reach, lookVec.y * reach, lookVec.z * reach);
}

Expand Down