void generateLeafNodeList() {
      this.height = (int)((double)this.heightLimit * this.heightAttenuation);
      if(this.height >= this.heightLimit) {
         this.height = this.heightLimit - 1;
      }

      int var1 = (int)(1.382D + Math.pow(this.field_872_k * (double)this.heightLimit / 13.0D, 2.0D));
      if(var1 < 1) {
         var1 = 1;
      }

      int[][] var2 = new int[var1 * this.heightLimit][4];
      int var3 = this.basePos[1] + this.heightLimit - this.leafDistanceLimit;
      int var4 = 1;
      int var5 = this.basePos[1] + this.height;
      int var6 = var3 - this.basePos[1];
      var2[0][0] = this.basePos[0];
      var2[0][1] = var3;
      var2[0][2] = this.basePos[2];
      var2[0][3] = var5;
      --var3;

      while(var6 >= 0) {
         int var7 = 0;
         float var8 = this.func_528_a(var6);
         if(var8 < 0.0F) {
            --var3;
            --var6;
         } else {
            for(double var9 = 0.5D; var7 < var1; ++var7) {
               double var11 = this.field_873_j * (double)var8 * ((double)this.rand.nextFloat() + 0.328D);
               double var13 = (double)this.rand.nextFloat() * 2.0D * 3.14159D;
               int var15 = MathHelper.floor_double(var11 * Math.sin(var13) + (double)this.basePos[0] + var9);
               int var16 = MathHelper.floor_double(var11 * Math.cos(var13) + (double)this.basePos[2] + var9);
               int[] var17 = new int[]{var15, var3, var16};
               int[] var18 = new int[]{var15, var3 + this.leafDistanceLimit, var16};
               if(this.checkBlockLine(var17, var18) == -1) {
                  int[] var19 = new int[]{this.basePos[0], this.basePos[1], this.basePos[2]};
                  double var20 = Math.sqrt(Math.pow((double)Math.abs(this.basePos[0] - var17[0]), 2.0D) + Math.pow((double)Math.abs(this.basePos[2] - var17[2]), 2.0D));
                  double var22 = var20 * this.field_874_i;
                  if((double)var17[1] - var22 > (double)var5) {
                     var19[1] = var5;
                  } else {
                     var19[1] = (int)((double)var17[1] - var22);
                  }

                  if(this.checkBlockLine(var19, var17) == -1) {
                     var2[var4][0] = var15;
                     var2[var4][1] = var3;
                     var2[var4][2] = var16;
                     var2[var4][3] = var19[1];
                     ++var4;
                  }
               }
            }

            --var3;
            --var6;
         }
      }

      this.leafNodes = new int[var4][4];
      System.arraycopy(var2, 0, this.leafNodes, 0, var4);
   }