private void updateFeet(double motionX, double motionZ) { double motionSqrd = (motionX * motionX + motionZ * motionZ); // If the player is on the moon, not airbourne and not riding anything if (motionSqrd > 0.001 && this.worldObj != null && this.worldObj.provider instanceof WorldProviderMoon && this.ridingEntity == null) { int iPosX = (int) Math.floor(this.posX); int iPosY = (int) Math.floor(this.posY - 2); int iPosZ = (int) Math.floor(this.posZ); // If the block below is the moon block if (this.worldObj.getBlock(iPosX, iPosY, iPosZ) == GCBlocks.blockMoon) { // And is the correct metadata (moon turf) if (this.worldObj.getBlockMetadata(iPosX, iPosY, iPosZ) == 5) { // If it has been long enough since the last step if (this.distanceSinceLastStep > 0.35) { Vector3 pos = new Vector3(this); // Set the footprint position to the block below and add random number to stop // z-fighting pos.y = MathHelper.floor_double(this.posY - 1) + this.rand.nextFloat() / 100.0F; // Adjust footprint to left or right depending on step count switch (this.lastStep) { case 0: pos.translate( new Vector3( Math.sin(Math.toRadians(-this.rotationYaw + 90)) * 0.25, 0, Math.cos(Math.toRadians(-this.rotationYaw + 90)) * 0.25)); break; case 1: pos.translate( new Vector3( Math.sin(Math.toRadians(-this.rotationYaw - 90)) * 0.25, 0, Math.cos(Math.toRadians(-this.rotationYaw - 90)) * 0.25)); break; } ClientProxyCore.footprintRenderer.addFootprint(pos, this.rotationYaw); // Increment and cap step counter at 1 this.lastStep++; this.lastStep %= 2; this.distanceSinceLastStep = 0; } else { this.distanceSinceLastStep += motionSqrd; } } } } }
@Override public void onUpdate() { super.onUpdate(); if ((this.ticksExisted - 1) % 20 == 0 && this.worldObj.isRemote && FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) { this.flagData = ClientUtil.updateFlagData( this.getOwner(), Minecraft.getMinecraft().thePlayer.getDistanceToEntity(this) < 50.0D); } Vector3 vec = new Vector3(this.posX, this.posY, this.posZ); vec = vec.translate(new Vector3(0, -1, 0)); final Block blockAt = vec.getBlock(this.worldObj); if (blockAt != null) { if (blockAt instanceof BlockFence) { } else if (blockAt.isAir(this.worldObj, vec.intX(), vec.intY(), vec.intZ())) { this.motionY -= 0.02F; } } this.moveEntity(this.motionX, this.motionY, this.motionZ); }
@Override public void onUpdate() { Vector3 vec = new Vector3(this.posX, this.posY, this.posZ); vec = vec.translate(new Vector3(0, -1, 0)); final Block blockAt = Block.blocksList[vec.getBlockID(this.worldObj)]; if (blockAt != null) { if (blockAt instanceof BlockFence) { } else if (blockAt.isAirBlock(this.worldObj, vec.intX(), vec.intY(), vec.intZ())) { this.motionY -= 0.02F; } } this.moveEntity(this.motionX, this.motionY, this.motionZ); }
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; } } } } }