private void draw(int x1, int z1, int x2, int z2, int y, PlayerInteractEvent event){
        boolean xz_swap = false;
        if (Math.abs(z2 - z1) > Math.abs(x2 - x1)) {
            xz_swap = true;
            int temp = x1;
            x1 = z1;
            z1 = temp;
            temp = x2;
            x2 = z2;
            z2 = temp;
        }

        // If line goes from right to left, swap the endpoints
        if (x2 - x1 < 0) {
            int temp = x1;
            x1 = x2;
            x2 = temp;
            temp = z1;
            z1 = z2;
            z2 = temp;
        }

        int x,                       // Current x position
                z = z1,                  // Current z position
                e = 0,                   // Current error
                m_num = z2 - z1,         // Numerator of slope
                m_denom = x2 - x1,       // Denominator of slope
                threshold  = m_denom/2;  // Threshold between E and NE increment 

        for (x = x1; x < x2; x++) {
            if (xz_swap)
                setColumn(z, y, x, event);
            else setColumn(x, y, z, event);

            e += m_num;

            // Deal separately with lines sloping upward and those
            // sloping downward
            if (m_num < 0) {
                if (e < -threshold) {
                    e += m_denom;
                    z--;
                }
            }
            else if (e > threshold) {
                e -= m_denom;
                z++;
            }
        }

        if (xz_swap)
            setColumn(z, y, x, event);
        else setColumn(x, y, z, event);

    }