public Optional<IPart> getMaybePart( final TileEntity te, final IProbeHitData data ) { if( te instanceof IPartHost ) { BlockPos pos = data.getPos(); final Vec3d position = data.getHitVec().addVector( -pos.getX(), -pos.getY(), -pos.getZ() ); final IPartHost host = (IPartHost) te; final SelectedPart sp = host.selectPart( position ); if( sp.part != null ) { return Optional.of( sp.part ); } } return Optional.empty(); } }
/** * Hits a {@link IPartHost} with {@link BlockPos}. * <p/> * You can derive the looked at {@link IPart} by doing that. If a facade is being looked at, it is * defined as being absent. * * @param te being looked at {@link TileEntity} * @param mop type of ray-trace * * @return maybe the looked at {@link IPart} */ public Optional<IPart> getMaybePart( final TileEntity te, final RayTraceResult mop ) { if( te instanceof IPartHost ) { BlockPos pos = mop.getBlockPos(); final Vec3d position = mop.hitVec.addVector( -pos.getX(), -pos.getY(), -pos.getZ() ); final IPartHost host = (IPartHost) te; final SelectedPart sp = host.selectPart( position ); if( sp.part != null ) { return Optional.of( sp.part ); } } return Optional.empty(); } }
/** * Trace view of players to blocks. * Ignore all which are out of reach. * * @param world word of block * @param player player viewing block * @param pos pos of block * * @return trace movement. Can be null */ public RayTraceResult retraceBlock( final World world, final EntityPlayerMP player, BlockPos pos ) { IBlockState blockState = world.getBlockState( pos ); final Vec3d headVec = this.getCorrectedHeadVec( player ); final Vec3d lookVec = player.getLook( 1.0F ); final double reach = this.getBlockReachDistance_server( player ); final Vec3d endVec = headVec.addVector( lookVec.x * reach, lookVec.y * reach, lookVec.z * reach ); return blockState.collisionRayTrace( world, pos, headVec, endVec ); }
final double d3 = 32.0D; final Vec3d vec31 = vec3.addVector( f7 * d3, f6 * d3, f8 * d3 );
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 ); }
public static Vec3d getPredictedPosition(Entity entity) { return entity.getPositionVector().addVector( entity.motionX, entity.motionY, entity.motionZ); }
from = from.addVector( direction.getFrontOffsetX() * 0.501, direction.getFrontOffsetY() * 0.501, direction.getFrontOffsetZ() * 0.501 ); final Vec3d to = from.addVector( direction.getFrontOffsetX(), direction.getFrontOffsetY(), direction.getFrontOffsetZ() ); final RayTraceResult mop = hostWorld.rayTraceBlocks( from, to, true ); if( mop != null && !BAD_BLOCKS.contains( directedBlock ) )
@SideOnly(Side.CLIENT) private Vec3d getFirePosition(EntityLivingBase entityPlayer, Vec3d dir, boolean isAiming) { Vec3d pos = entityPlayer.getPositionEyes(1); if (!isAiming) { //pos.x -= (double)(MathHelper.cos(entityPlayer.rotationYaw / 180.0F * (float) Math.PI) * 0.16F); //pos.z -= (double)(MathHelper.sin(entityPlayer.rotationYaw / 180.0F * (float) Math.PI) * 0.16F); } pos = pos.addVector(dir.x, dir.y, dir.z); return pos; }
private void findPlayersInRange() { players.clear(); Vec3d posCenter = new Vec3d(pos).addVector(0.5D, 0.5D, 0.5D); for (EntityPlayer player : world.playerEntities) { if (player.getPositionVector().squareDistanceTo(posCenter) < wirelessRange) { players.add(player); } } }
public static Vec3d getEndVec(EntityPlayer player) { Vec3d headVec = getCorrectedHeadVec(player); Vec3d lookVec = player.getLook(1.0F); double reach = getBlockReachDistance(player); return headVec.addVector(lookVec.x * reach, lookVec.y * reach, lookVec.z * reach); }
public static RayTraceResult getPlayerTarget(EntityPlayer player, float range, float border) { HashSet<Entity> excluded = new HashSet<>(); excluded.add(player); if (player.getRidingEntity() != null) { excluded.add(player.getRidingEntity()); } float yOffset = player.getEyeHeight(); Vec3d look = player.getLookVec(); look = look.scale(range); look = look.addVector(player.posX, player.posY + yOffset, player.posZ); return tracePath(player.world, player.posX, player.posY + yOffset, player.posZ, look.x, look.y, look.z, border, excluded); }
mop.hitVec.addVector( -mop.getBlockPos().getX(), -mop.getBlockPos().getY(), -mop.getBlockPos().getZ() ) ); mop.hitVec = mop.hitVec.addVector( -mop.getBlockPos().getX(), -mop.getBlockPos().getY(), -mop.getBlockPos().getZ() ); final SelectedPart sPart = selectPart( player, host, mop.hitVec ); if( sPart != null && sPart.part != null ) mop.hitVec.addVector( -mop.getBlockPos().getX(), -mop.getBlockPos().getY(), -mop.getBlockPos().getZ() ) );
@SideOnly(Side.CLIENT) private void spawnChargedParticle(EntityLivingBase player, boolean mainHand) { Vec3d mainPos = UtilLib.getItemPosition(player, mainHand); for (int j = 0; j < 3; ++j) { Vec3d pos = mainPos.addVector((player.getRNG().nextFloat() - 0.5f) * 0.1f, (player.getRNG().nextFloat() - 0.3f) * 0.9f, (player.getRNG().nextFloat() - 0.5f) * 0.1f); VampLib.proxy.getParticleHandler().spawnParticle(player.getEntityWorld(), ModParticles.FLYING_BLOOD, pos.x, pos.y, pos.z, pos.x + (player.getRNG().nextFloat() - 0.5D) * 0.2D, pos.y + (player.getRNG().nextFloat() - 0.5D) * 0.2D, pos.z + (player.getRNG().nextFloat() - 0.5D) * 0.2D, (int) (4.0F / (player.getRNG().nextFloat() * 0.9F + 0.1F)), 177); } }
private static RayTraceResult getPlayerLookTargetClient(EntityPlayer player, Entity excludedEntity) { Vec3d playerEyesPos = RayTracer.getCorrectedHeadVec(player); Vec3d lookVector = player.getLook(0); Vec3d endVector = playerEyesPos.addVector(lookVector.x * MAX_RANGE, lookVector.y * MAX_RANGE, lookVector.z * MAX_RANGE); RayTraceResult blockHit = player.world.rayTraceBlocks(playerEyesPos, endVector); Optional<Tuple<Double, Entity>> closestEntityFound = getClosestCollidedEntity(excludedEntity, playerEyesPos, lookVector, endVector); if (closestEntityFound.isPresent() && (blockHit == null || closestEntityFound.get().getFirst() < blockHit.hitVec.distanceTo(playerEyesPos))) { Entity hitEntity = closestEntityFound.get().getSecond(); blockHit = new RayTraceResult(hitEntity, new Vec3d(hitEntity.posX, hitEntity.posY + hitEntity.height * 0.65d, hitEntity.posZ)); } return blockHit; }
@SideOnly(Side.CLIENT) private Vec3d getFirePosition(EntityPlayer entityPlayer, Vec3d dir, boolean isAiming) { Vec3d pos = entityPlayer.getPositionEyes(1); pos = pos.subtract((double) (MathHelper.cos(entityPlayer.rotationYaw / 180.0F * (float) Math.PI) * 0.16F), 0, (double) (MathHelper.cos(entityPlayer.rotationYaw / 180.0F * (float) Math.PI) * 0.16F)); pos = pos.addVector(dir.x, dir.y, dir.z); return pos; }
@SideOnly(Side.CLIENT) private Vec3d getFirePosition(EntityPlayer entityPlayer, Vec3d dir, boolean isAiming) { Vec3d pos = entityPlayer.getPositionEyes(1); if (!isAiming) { pos = pos.subtract((double) (MathHelper.cos(entityPlayer.rotationYaw / 180.0F * (float) Math.PI) * 0.16F), 0, (double) (MathHelper.sin(entityPlayer.rotationYaw / 180.0F * (float) Math.PI) * 0.16F)); } pos = pos.addVector(dir.x, dir.y, dir.z); return pos; }
protected void spawnGroundBurst(World world, RayTraceResult hit, float maxVelocity, IAmmo type, int count, float minPitch, Entity shooter) { Vec3i dirVec = hit.sideHit.getDirectionVec(); Vec3d hitVec = hit.hitVec.addVector(dirVec.getX() * 0.2f, dirVec.getY() * 0.2f, dirVec.getZ() * 0.2f); spawnBurst(world, maxVelocity, type, count, minPitch, shooter, hit.sideHit, (float) hitVec.x, (float) hitVec.y, (float) hitVec.z); }
public RayTraceResult rayTrace(Entity entity, double playerReach, float partialTicks) { Vec3d eyePosition = entity.getPositionEyes(partialTicks); Vec3d lookVector = entity.getLook(partialTicks); Vec3d traceEnd = eyePosition.addVector(lookVector.x * playerReach, lookVector.y * playerReach, lookVector.z * playerReach); return entity.getEntityWorld().rayTraceBlocks(eyePosition, traceEnd, ConfigHandler.instance().getConfig(Configuration.CATEGORY_GENERAL, Constants.CFG_WAILA_LIQUID, true)); }
@Override @SideOnly (Side.CLIENT) public ISound getSound() { return new SoundTile(this, getSoundEvent(), getVolume(), 1.0F, true, 0, new Vec3d(pos).addVector(0.5, 0.5, 0.5)); }
public InternalRayTraceResult doRayTrace(World world, BlockPos pos, EntityPlayer player) { double reachDistance = 5; if (player instanceof EntityPlayerMP) { reachDistance = player.getEntityAttribute(EntityPlayer.REACH_DISTANCE).getAttributeValue(); } double eyeHeight = player.getEyeHeight(); Vec3d lookVec = player.getLookVec(); Vec3d start = new Vec3d(player.posX, player.posY + eyeHeight, player.posZ); Vec3d end = start.addVector(lookVec.x * reachDistance, lookVec.y * reachDistance, lookVec.z * reachDistance); return doRayTrace(world, pos, start, end); }