/** * @param player multi-player player * * @return block reach distance of player */ private double getBlockReachDistance_server( final EntityPlayerMP player ) { return player.interactionManager.getBlockReachDistance(); } }
public static LookDirection getPlayerRay( final EntityPlayer playerIn, final float eyeOffset ) { double reachDistance = 5.0d; final double x = playerIn.prevPosX + ( playerIn.posX - playerIn.prevPosX ); final double y = playerIn.prevPosY + ( playerIn.posY - playerIn.prevPosY ) + playerIn.getEyeHeight(); final double z = playerIn.prevPosZ + ( playerIn.posZ - playerIn.prevPosZ ); final float playerPitch = playerIn.prevRotationPitch + ( playerIn.rotationPitch - playerIn.prevRotationPitch ); final float playerYaw = playerIn.prevRotationYaw + ( playerIn.rotationYaw - playerIn.prevRotationYaw ); final float yawRayX = MathHelper.sin( -playerYaw * 0.017453292f - (float) Math.PI ); final float yawRayZ = MathHelper.cos( -playerYaw * 0.017453292f - (float) Math.PI ); final float pitchMultiplier = -MathHelper.cos( -playerPitch * 0.017453292F ); final float eyeRayY = MathHelper.sin( -playerPitch * 0.017453292F ); final float eyeRayX = yawRayX * pitchMultiplier; final float eyeRayZ = yawRayZ * pitchMultiplier; if( playerIn instanceof EntityPlayerMP ) { reachDistance = ( (EntityPlayerMP) playerIn ).interactionManager.getBlockReachDistance(); } final Vec3d from = new Vec3d( x, y, z ); final Vec3d to = from.addVector( eyeRayX * reachDistance, eyeRayY * reachDistance, eyeRayZ * reachDistance ); return new LookDirection( from, to ); }
protected RayTraceResult raytraceFromEntity(World worldIn, EntityPlayer playerIn, boolean useLiquids) { float f = playerIn.rotationPitch; float f1 = playerIn.rotationYaw; double d0 = playerIn.posX; double d1 = playerIn.posY + (double) playerIn.getEyeHeight(); double d2 = playerIn.posZ; Vec3d vec3d = new Vec3d(d0, d1, d2); float f2 = MathHelper.cos(-f1 * 0.017453292F - (float) Math.PI); float f3 = MathHelper.sin(-f1 * 0.017453292F - (float) Math.PI); float f4 = -MathHelper.cos(-f * 0.017453292F); float f5 = MathHelper.sin(-f * 0.017453292F); float f6 = f3 * f4; float f7 = f2 * f4; double d3 = 5.0D; if(playerIn instanceof net.minecraft.entity.player.EntityPlayerMP) { d3 = ((net.minecraft.entity.player.EntityPlayerMP) playerIn).interactionManager.getBlockReachDistance(); } Vec3d vec3d1 = vec3d.add((double) f6 * d3, (double) f5 * d3, (double) f7 * d3); return worldIn.rayTraceBlocks(vec3d, vec3d1, useLiquids, !useLiquids, false); }
private static double getBlockReachDistanceServer(EntityPlayerMP player) { return player.interactionManager.getBlockReachDistance(); }
@Override public double getReachDistanceForPlayer(EntityPlayer entityPlayer) { if (entityPlayer instanceof EntityPlayerMP) { return ((EntityPlayerMP) entityPlayer).interactionManager.getBlockReachDistance(); } return super.getReachDistanceForPlayer(entityPlayer); }
public void extendRange(Entity entity, double amount) { if (entity instanceof EntityPlayerMP) { PlayerInteractionManager mgr = ((EntityPlayerMP) entity).interactionManager; double reach = mgr.getBlockReachDistance(); mgr.setBlockReachDistance(reach + amount); } }
public static Pair<Vec3d, Vec3d> getRayTraceVectors(EntityPlayer player) { float pitch = player.rotationPitch; float yaw = player.rotationYaw; Vec3d start = new Vec3d(player.posX, player.posY + player.getEyeHeight(), player.posZ); float f1 = MathHelper.cos(-yaw * 0.017453292F - (float) Math.PI); float f2 = MathHelper.sin(-yaw * 0.017453292F - (float) Math.PI); float f3 = -MathHelper.cos(-pitch * 0.017453292F); float f4 = MathHelper.sin(-pitch * 0.017453292F); float f5 = f2 * f3; float f6 = f1 * f3; double d3 = 5.0D; if (player instanceof EntityPlayerMP) { d3 = ((EntityPlayerMP) player).interactionManager.getBlockReachDistance(); } Vec3d end = start.addVector(f5 * d3, f4 * d3, f6 * d3); return Pair.of(start, end); }
static public Pair<Vec3d, Vec3d> getPlayerRay( final EntityPlayer playerIn ) { double reachDistance = 5.0d; final double x = playerIn.prevPosX + ( playerIn.posX - playerIn.prevPosX ); final double y = playerIn.prevPosY + ( playerIn.posY - playerIn.prevPosY ) + playerIn.getEyeHeight(); final double z = playerIn.prevPosZ + ( playerIn.posZ - playerIn.prevPosZ ); final float playerPitch = playerIn.prevRotationPitch + ( playerIn.rotationPitch - playerIn.prevRotationPitch ); final float playerYaw = playerIn.prevRotationYaw + ( playerIn.rotationYaw - playerIn.prevRotationYaw ); final float yawRayX = MathHelper.sin( -playerYaw * DEG_TO_RAD - (float) Math.PI ); final float yawRayZ = MathHelper.cos( -playerYaw * DEG_TO_RAD - (float) Math.PI ); final float pitchMultiplier = -MathHelper.cos( -playerPitch * DEG_TO_RAD ); final float eyeRayY = MathHelper.sin( -playerPitch * DEG_TO_RAD ); final float eyeRayX = yawRayX * pitchMultiplier; final float eyeRayZ = yawRayZ * pitchMultiplier; if ( playerIn instanceof EntityPlayerMP ) { reachDistance = ( (EntityPlayerMP) playerIn ).interactionManager.getBlockReachDistance(); } final Vec3d from = new Vec3d( x, y, z ); final Vec3d to = from.addVector( eyeRayX * reachDistance, eyeRayY * reachDistance, eyeRayZ * reachDistance ); return Pair.of( from, to ); }
/** * Do a ray trace for the current look direction of the player. * @param world The world. * @param pos The block position to perform a ray trace for. * @param player The player. * @return A holder object with information on the ray tracing. */ public RayTraceResult<P> doRayTrace(World world, BlockPos pos, EntityPlayer player) { if(player == null) { return null; } double reachDistance; if (player instanceof EntityPlayerMP) { reachDistance = ((EntityPlayerMP) player).interactionManager.getBlockReachDistance(); } else { reachDistance = 5; } double eyeHeight = world.isRemote ? player.getEyeHeight(): player.getEyeHeight(); // Client removed : - player.getDefaultEyeHeight() Vec3d lookVec = player.getLookVec(); Vec3d origin = new Vec3d(player.posX, player.posY + eyeHeight, player.posZ); Vec3d direction = origin.addVector(lookVec.x * reachDistance, lookVec.y * reachDistance, lookVec.z * reachDistance); return doRayTrace(world, pos, origin, direction); }
private RayTraceResult retraceBlock(World world, EntityPlayerMP player, BlockPos pos) { IBlockState blockState = world.getBlockState(pos); Vec3d head = new Vec3d(player.posX, player.posY, player.posZ).addVector(0, player.getEyeHeight(), 0); if (player.isSneaking()) { head = head.addVector(0, -0.08, 0); } Vec3d look = player.getLook(1.0F); double reach = player.interactionManager.getBlockReachDistance(); Vec3d endVec = head.addVector(look.x * reach, look.y * reach, look.z * reach); return blockState.collisionRayTrace(world, pos, head, endVec); } }
private RayTraceResult rayTrace(World worldIn, EntityPlayer playerIn, boolean useLiquids) { float f = playerIn.rotationPitch; float f1 = playerIn.rotationYaw; double d0 = playerIn.posX; double d1 = playerIn.posY + (double)playerIn.getEyeHeight(); double d2 = playerIn.posZ; Vec3d vec3d = new Vec3d(d0, d1, d2); float f2 = MathHelper.cos(-f1 * 0.017453292F - (float)Math.PI); float f3 = MathHelper.sin(-f1 * 0.017453292F - (float)Math.PI); float f4 = -MathHelper.cos(-f * 0.017453292F); float f5 = MathHelper.sin(-f * 0.017453292F); float f6 = f3 * f4; float f7 = f2 * f4; double d3 = 5.0D; if(playerIn instanceof net.minecraft.entity.player.EntityPlayerMP) d3 = ((net.minecraft.entity.player.EntityPlayerMP)playerIn).interactionManager.getBlockReachDistance(); Vec3d vec3d1 = vec3d.addVector((double)f6 * d3, (double)f5 * d3, (double)f7 * d3); return worldIn.rayTraceBlocks(vec3d, vec3d1, useLiquids, !useLiquids, false); }
protected RayTraceResult getMovingObjectPositionFromPlayer(World world, EntityLivingBase entity) { float f = entity.rotationPitch; float f1 = entity.rotationYaw; double d0 = entity.posX; double d1 = entity.posY + (double)entity.getEyeHeight(); double d2 = entity.posZ; Vec3d vec3 = new Vec3d(d0, d1, d2); float f2 = MathHelper.cos(-f1 * 0.017453292F - (float)Math.PI); float f3 = MathHelper.sin(-f1 * 0.017453292F - (float)Math.PI); float f4 = -MathHelper.cos(-f * 0.017453292F); float f5 = MathHelper.sin(-f * 0.017453292F); float f6 = f3 * f4; float f7 = f2 * f4; double d3 = 5.0D; if (entity instanceof EntityPlayerMP) { d3 = ((EntityPlayerMP) entity).interactionManager.getBlockReachDistance(); } Vec3d vec31 = vec3.addVector((double)f6 * d3, (double)f5 * d3, (double)f7 * d3); return world.rayTraceBlocks(vec3, vec31, false, false, false); }
public static RayTraceResult rayTrace(EntityPlayer player, boolean useLiquids) { float pitch = player.rotationPitch; float yaw = player.rotationYaw; Vec3d eyePosition = new Vec3d(player.posX, player.posY + (double) player.getEyeHeight(), player.posZ); float f2 = MathHelper.cos(-yaw * 0.017453292F - (float) Math.PI); float f3 = MathHelper.sin(-yaw * 0.017453292F - (float) Math.PI); float f4 = -MathHelper.cos(-pitch * 0.017453292F); float f5 = MathHelper.sin(-pitch * 0.017453292F); float f6 = f3 * f4; float f7 = f2 * f4; double reachDistance = 5.0D; if (player instanceof EntityPlayerMP) reachDistance = ((EntityPlayerMP) player).interactionManager.getBlockReachDistance(); Vec3d reachPosition = eyePosition.addVector((double) f6 * reachDistance, (double) f5 * reachDistance, (double) f7 * reachDistance); return player.getEntityWorld().rayTraceBlocks(eyePosition, reachPosition, useLiquids, !useLiquids, false); } }
@Redirect(method = "processPacket", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/play/INetHandlerPlayServer;processUpdateSign(Lnet/minecraft/network/play/client/CPacketUpdateSign;)V")) public void handleUpdateSignPacket(INetHandlerPlayServer server, CPacketUpdateSign packetIn) { EntityPlayerMP player = ((NetHandlerPlayServer) server).player; INHPServerVW vw = (INHPServerVW) (NetHandlerPlayServer) server; BlockPos packetPos = packetIn.getPosition(); PlayerDataBackup playerBackup = new PlayerDataBackup(player); PhysicsWrapperEntity wrapper = ValkyrienWarfareMod.physicsManager.getObjectManagingPos(player.world, packetPos); if (player.interactionManager.getBlockReachDistance() != vw.dummyBlockReachDist()) { vw.lastGoodBlockReachDist(player.interactionManager.getBlockReachDistance()); } if (wrapper != null) { player.interactionManager.setBlockReachDistance(vw.dummyBlockReachDist()); } if (wrapper != null && wrapper.wrapping.coordTransform != null) { RotationMatrices.applyTransform(wrapper.wrapping.coordTransform.wToLTransform, wrapper.wrapping.coordTransform.wToLRotation, player); server.processUpdateSign(packetIn); RotationMatrices.applyTransform(wrapper.wrapping.coordTransform.lToWTransform, wrapper.wrapping.coordTransform.lToWRotation, player); playerBackup.restorePlayerToBackup(); } else { server.processUpdateSign(packetIn); } player.interactionManager.setBlockReachDistance(vw.lastGoodBlockReachDist()); } }
/** * Gets players looking spot (blocks only). * * @param player * @param restriction Max distance or 0 for player reach distance or -1 for not restricted * @return The position as a MovingObjectPosition, null if not existent cf: https ://github.com/bspkrs/bspkrsCore/blob/master/src/main/java/bspkrs /util/CommonUtils.java */ public static RayTraceResult getPlayerLookingSpot(EntityPlayer player, double restriction) { float scale = 1.0F; float pitch = player.prevRotationPitch + (player.rotationPitch - player.prevRotationPitch) * scale; float yaw = player.prevRotationYaw + (player.rotationYaw - player.prevRotationYaw) * scale; double x = player.prevPosX + (player.posX - player.prevPosX) * scale; double y = player.prevPosY + (player.posY - player.prevPosY) * scale + 1.62D; double z = player.prevPosZ + (player.posZ - player.prevPosZ) * scale; Vec3d vector1 = new Vec3d(x, y, z); float cosYaw = MathHelper.cos(-yaw * 0.017453292F - (float) Math.PI); float sinYaw = MathHelper.sin(-yaw * 0.017453292F - (float) Math.PI); float cosPitch = -MathHelper.cos(-pitch * 0.017453292F); float sinPitch = MathHelper.sin(-pitch * 0.017453292F); float pitchAdjustedSinYaw = sinYaw * cosPitch; float pitchAdjustedCosYaw = cosYaw * cosPitch; double distance = 500D; if (restriction == 0 && player instanceof EntityPlayerMP) { distance = ((EntityPlayerMP) player).interactionManager.getBlockReachDistance(); } else if (restriction > 0) { distance = restriction; } Vec3d vector2 = vector1.addVector(pitchAdjustedSinYaw * distance, sinPitch * distance, pitchAdjustedCosYaw * distance); return player.getEntityWorld().rayTraceBlocks(vector1, vector2); }
@Redirect(method = "processPacket", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/play/INetHandlerPlayServer;processPlayerDigging(Lnet/minecraft/network/play/client/CPacketPlayerDigging;)V")) public void handleDiggingPacket(INetHandlerPlayServer server, CPacketPlayerDigging packetIn) { INHPServerVW vw = (INHPServerVW) (NetHandlerPlayServer) server; vw.checkForPacketEnqueueTrap(packetIn); EntityPlayerMP player = vw.getEntityPlayerFromHandler(); BlockPos packetPos = packetIn.getPosition(); PlayerDataBackup playerBackup = new PlayerDataBackup(player); PhysicsWrapperEntity wrapper = ValkyrienWarfareMod.physicsManager.getObjectManagingPos(player.world, packetPos); if (player.interactionManager.getBlockReachDistance() != vw.dummyBlockReachDist()) { vw.lastGoodBlockReachDist(player.interactionManager.getBlockReachDistance()); } if (wrapper != null) { player.interactionManager.setBlockReachDistance(vw.dummyBlockReachDist()); } if (wrapper != null && wrapper.wrapping.coordTransform != null) { RotationMatrices.applyTransform(wrapper.wrapping.coordTransform.wToLTransform, wrapper.wrapping.coordTransform.wToLRotation, player); server.processPlayerDigging(packetIn); RotationMatrices.applyTransform(wrapper.wrapping.coordTransform.lToWTransform, wrapper.wrapping.coordTransform.lToWRotation, player); playerBackup.restorePlayerToBackup(); } else { server.processPlayerDigging(packetIn); } player.interactionManager.setBlockReachDistance(vw.lastGoodBlockReachDist()); }
@Redirect(method = "processPacket", at = @At(value = "INVOKE", target = "Lnet/minecraft/network/play/INetHandlerPlayServer;processTryUseItemOnBlock(Lnet/minecraft/network/play/client/CPacketPlayerTryUseItemOnBlock;)V")) public void handleUseItemPacket(INetHandlerPlayServer server, CPacketPlayerTryUseItemOnBlock packetIn) { INHPServerVW vw = (INHPServerVW) (NetHandlerPlayServer) server; vw.checkForPacketEnqueueTrap(packetIn); EntityPlayerMP player = vw.getEntityPlayerFromHandler(); BlockPos packetPos = packetIn.getPos(); PlayerDataBackup playerBackup = new PlayerDataBackup(player); PhysicsWrapperEntity wrapper = ValkyrienWarfareMod.physicsManager.getObjectManagingPos(player.world, packetPos); if (player.interactionManager.getBlockReachDistance() != vw.dummyBlockReachDist()) { vw.lastGoodBlockReachDist(player.interactionManager.getBlockReachDistance()); } if (wrapper != null) { player.interactionManager.setBlockReachDistance(vw.dummyBlockReachDist()); } if (wrapper != null && wrapper.wrapping.coordTransform != null) { RotationMatrices.applyTransform(wrapper.wrapping.coordTransform.wToLTransform, wrapper.wrapping.coordTransform.wToLRotation, player); if (player.getHeldItem(packetIn.getHand()) != null && player.getHeldItem(packetIn.getHand()).getItem() instanceof ItemBucket) { player.interactionManager.setBlockReachDistance(vw.lastGoodBlockReachDist()); } try { server.processTryUseItemOnBlock(packetIn); } catch (Exception e) { e.printStackTrace(); } playerBackup.restorePlayerToBackup(); } else { server.processTryUseItemOnBlock(packetIn); } player.interactionManager.setBlockReachDistance(vw.lastGoodBlockReachDist()); }