protected void setSize(float width, float height)
    {
        if (width != this.width || height != this.height)
        {
            float f = this.width;
            this.width = width;
            this.height = height;
            AxisAlignedBB oldAABB = this.getEntityBoundingBox();

//          if (this.width < f)
//           {
                double d0 = (double)width / 2.0D;
                this.setEntityBoundingBox(new AxisAlignedBB(this.posX - d0, this.posY, this.posZ - d0, this.posX + d0, this.posY + (double)this.height, this.posZ + d0));
//              return;
//          }

//          AxisAlignedBB axisalignedbb = this.getEntityBoundingBox();
//          this.setEntityBoundingBox(new AxisAlignedBB(axisalignedbb.minX, axisalignedbb.minY, axisalignedbb.minZ, axisalignedbb.minX + (double)this.width, axisalignedbb.minY + (double)this.height, axisalignedbb.minZ + (double)this.width));

            if (this.width > f && !this.firstUpdate && !this.world.isRemote)
            {
                this.pushEntityOutOfBlocks(oldAABB); // new code proposed for fixing MC-9568
//              this.move(MoverType.SELF, (double)(f - this.width), 0.0D, (double)(f - this.width));
            }
        }
    }

    // new code for MC-9568 added from here
    private void pushEntityOutOfBlocks(AxisAlignedBB oldHitbox){
        // Pass "null" in first argument to only get _possible_ block collisions
        List<AxisAlignedBB> list1 = this.world.getCollisionBoxes(null, this.getEntityBoundingBox());
        AxisAlignedBB axisalignedbb = this.getEntityBoundingBox();
        
        for(AxisAlignedBB i : list1)
        {
            if(!oldHitbox.intersects(i) && axisalignedbb.intersects(i))
            {
                double minX = axisalignedbb.minX;
                double maxX = axisalignedbb.maxX;
                double minZ = axisalignedbb.minZ;
                double maxZ = axisalignedbb.maxZ;
                
                // Check for collisions on the X and Z axis, and only push the new AABB if the colliding blocks AABB
                // is completely to the opposite side of the original AABB
                if (i.maxX > axisalignedbb.minX && i.minX < axisalignedbb.maxX)
                {
                    if(i.maxX >= oldHitbox.maxX && i.minX >= oldHitbox.maxX)
                    {
                        minX = i.minX - this.width;
                        maxX = i.minX;
                    }
                    else if(i.maxX <= oldHitbox.minX && i.minX <= oldHitbox.minX)
                    {
                        minX = i.maxX;
                        maxX = i.maxX + this.width;
                    }
                }

                if (i.maxZ > axisalignedbb.minZ && i.minZ < axisalignedbb.maxZ)
                {
                    if(i.minZ >= oldHitbox.maxZ && i.maxZ >= oldHitbox.maxZ)
                    {
                        minZ = i.minZ - this.width;
                        maxZ = i.minZ;
                    }
                    else if(i.maxZ <= oldHitbox.minZ && i.minZ <= oldHitbox.minZ)
                    {
                        minZ = i.maxZ;
                        maxZ = i.maxZ + this.width;
                    }
                }
                
                axisalignedbb = new AxisAlignedBB(minX, axisalignedbb.minY, minZ, maxX, axisalignedbb.maxY, maxZ);
            }
        }

        this.setEntityBoundingBox(axisalignedbb);
    }