@Override public void onLivingUpdatePost(EntityPlayerSP player) { GCPlayerStatsClient stats = GCPlayerStatsClient.get(player); if (player.worldObj.provider instanceof WorldProviderOrbit) { ((WorldProviderOrbit) player.worldObj.provider).postVanillaMotion(player); if (stats.inFreefall) { // No limb swing player.limbSwing -= player.limbSwingAmount; player.limbSwingAmount = player.prevLimbSwingAmount; float adjust = Math.min(Math.abs(player.limbSwing), Math.abs(player.limbSwingAmount) / 3); if (player.limbSwing < 0) player.limbSwing += adjust; else if (player.limbSwing > 0) player.limbSwing -= adjust; player.limbSwingAmount *= 0.9; } else { if (stats.inFreefallLast && this.downMot2 < -0.01D) { stats.landingTicks = 2 - (int) (Math.min(this.downMot2, stats.downMotionLast) * 75); if (stats.landingTicks > 6) stats.landingTicks = 6; } } if (stats.landingTicks > 0) stats.landingTicks--; } else stats.inFreefall = false; boolean ridingThirdPersonEntity = player.ridingEntity instanceof ICameraZoomEntity && ((ICameraZoomEntity) player.ridingEntity).defaultThirdPerson(); if (ridingThirdPersonEntity && !stats.lastRidingCameraZoomEntity) { FMLClientHandler.instance().getClient().gameSettings.thirdPersonView = 1; } if (player.ridingEntity != null && player.ridingEntity instanceof ICameraZoomEntity) { stats.lastZoomed = true; TickHandlerClient.zoom(((ICameraZoomEntity) player.ridingEntity).getCameraZoom()); } else if (stats.lastZoomed) { stats.lastZoomed = false; TickHandlerClient.zoom(4.0F); } stats.lastRidingCameraZoomEntity = ridingThirdPersonEntity; if (stats.usingParachute) { player.fallDistance = 0.0F; } PlayerGearData gearData = ModelPlayerGC.getGearData(player); stats.usingParachute = false; if (gearData != null) { stats.usingParachute = gearData.getParachute() != null; if (gearData.getMask() >= 0) { player.height = 1.9375F; } else { player.height = 1.8F; } AxisAlignedBB bounds = player.getEntityBoundingBox(); player.setEntityBoundingBox( new AxisAlignedBB( bounds.minX, bounds.minY, bounds.minZ, bounds.maxX, bounds.minY + (double) player.height, bounds.maxZ)); } if (stats.usingParachute && player.onGround) { stats.setParachute(false); FMLClientHandler.instance().getClient().gameSettings.thirdPersonView = stats.thirdPersonView; } if (!stats.lastUsingParachute && stats.usingParachute) { FMLClientHandler.instance() .getClient() .getSoundHandler() .playSound( new PositionedSoundRecord( new ResourceLocation(GalacticraftCore.TEXTURE_PREFIX + "player.parachute"), 0.95F + player.getRNG().nextFloat() * 0.1F, 1.0F, (float) player.posX, (float) player.posY, (float) player.posZ)); } stats.lastUsingParachute = stats.usingParachute; stats.lastOnGround = player.onGround; }
private void updateFeet(EntityPlayerSP player, double motionX, double motionZ) { GCPlayerStatsClient stats = GCPlayerStatsClient.get(player); double motionSqrd = motionX * motionX + motionZ * motionZ; // If the player is on the moon, not airbourne and not riding anything if (motionSqrd > 0.001 && player.worldObj != null && player.worldObj.provider instanceof WorldProviderMoon && player.ridingEntity == null && !player.capabilities.isFlying) { int iPosX = (int) Math.floor(player.posX); int iPosY = (int) Math.floor(player.posY - 1); int iPosZ = (int) Math.floor(player.posZ); BlockPos pos1 = new BlockPos(iPosX, iPosY, iPosZ); IBlockState state = player.worldObj.getBlockState(pos1); // If the block below is the moon block if (state.getBlock() == GCBlocks.blockMoon) { // And is the correct metadata (moon turf) if (state.getBlock().getMetaFromState(state) == 5) { // If it has been long enough since the last step if (stats.distanceSinceLastStep > 0.35) { Vector3 pos = new Vector3(player); // Set the footprint position to the block below and add random number to stop // z-fighting pos.y = MathHelper.floor_double(player.posY) + player.getRNG().nextFloat() / 100.0F; // Adjust footprint to left or right depending on step count switch (stats.lastStep) { case 0: pos.translate( new Vector3( Math.sin(Math.toRadians(-player.rotationYaw + 90)) * 0.25, 0, Math.cos(Math.toRadians(-player.rotationYaw + 90)) * 0.25)); break; case 1: pos.translate( new Vector3( Math.sin(Math.toRadians(-player.rotationYaw - 90)) * 0.25, 0, Math.cos(Math.toRadians(-player.rotationYaw - 90)) * 0.25)); break; } pos = WorldUtil.getFootprintPosition( player.worldObj, player.rotationYaw - 180, pos, new BlockVec3(player)); long chunkKey = ChunkCoordIntPair.chunkXZ2Int(pos.intX() >> 4, pos.intZ() >> 4); ClientProxyCore.footprintRenderer.addFootprint( chunkKey, player.worldObj.provider.getDimensionId(), pos, player.rotationYaw, player.getName()); // Increment and cap step counter at 1 stats.lastStep++; stats.lastStep %= 2; stats.distanceSinceLastStep = 0; } else { stats.distanceSinceLastStep += motionSqrd; } } } } }