avatar
@bangbang93

写在BMCL一周年前夕

6/25/2014, 2:49:55 AM

BMCL在GitHub上开源的时间是2013年7月3日,创建项目的时间是7月1日
先来讲讲历史吧,BMCL前身是2dmmcLauncher,再前身是RMCALauncher

RMCALauncher是R菌写的RMCA的一部分,虽然现在炉心的RMCA已经从里到外都换过了,已经没有最初的RMCA半点影子,但是我也懒得改名了,毕竟整体结构还是和RMCA一样的

后来在废话二次元三周目的时候,R菌和妹子啪啪啪去了,至今都没回归服务器。但是得有人维护服务器啊,于是我就上了。RMCALauncher是Delphi写的我不太想写Delphi,于是就用C#新写了一个2dmmcLauncher
QQ截图20140625015359.jpg
它长这样,没有多线程,在获取服务器信息的时候若是卡了就会主界面失去响应。写法也挺面向过程的,虽然用的是C#。不过那时候的我居然会写注释,这倒是我没想到的地方


然后到了四周目,启动器更新为https://github.com/bangbang93/2dmmclauncher4th,没啥大的变化,添加了自动更新的功能,原理是去服务器获取版本号,然后和本地对比,若版本号不同就去下载一个完整的7z,然后从exe中释放一个7za.exe出来并且用命令行解压。


然后就到了五周目,这时候的客户端版本号是1.5.2,并且在1.5.2的文件结构上支持了多版本切换(当时废二又开放了一个创造服务器,允许玩家自行切换)

接下来的事情促使了BMCLV1的面世

Mojang修改了Minecraft目录结构

废二换周目前夕,旧启动器自然不能适应1.6的更新,但是换用其他启动器的话RMCA的功能势必受到影响。自然就有一个新启动器来完成交替

谁写呢,自然是我

于是就有了BMCL

QQ截图20140625021025.jpg

最初它长这样,虽然这已经是BMCLV1最后一个版本1.16的截图了,但是除了多了几个Tab,多了几个按钮以外一直没啥变化。

但是写好他的时候离废二换周目还有一段日子,于是我把它完善了一下在mcbbs发布了V1.1,支持正版登录。当时mcbbs里支持1.6的启动器除了MCBN就是BMCL,然后就是国外的Magic Launcher和正版启动器了。

V1.1发布之后对比其他启动器1.5之前的更新都是基础功能,比如对Forge的支持和下载客户端的功能。V1.6-1.8开始加入了一键安装Forge的tab,当时的方案是用客户端直接去抓取http://files.minecraftforge.net/,但是国内的线路有些地方压根就没法访问到这个页面或者访问非常缓慢,这个问题直到V2.11.5推出了BMCLAPI才解决

V1.9增加了导入旧Minecraft的功能,用于导入1.6之前的客户端

V1.10增加了导出到正版客户端的功能,这个功能在V2中去掉了,因为用途不大

V1.11允许重命名客户端

V1.13允许多版本使用不同的mod,这个存储结构后来被HMCL使用,V3将会修改这个存储结构,不过V3的这个修改仅支持Vista以上的系统,XP用户请升级或者继续使用旧的存储结构。

V1.14起为解决optifine的问题提供自定义java arguments的功能,这是国内启动器第一个支持的

V1.15受一个1.5的启动器启发,增加了服务器列表的功能,但是读取NBT的library实在是太大了,于是采用的方法比较暴力,直接按字节读取servers.dat并且解析

然后八月了,BMCLV2出场了

QQ截图20140625024329.jpg

BMCLV2的生日应该是2013年8月4日,github上的第一个commit是8月6日https://github.com/bangbang93/BMCL/

BMCLV2为了解决V1界面难看的问题,使用了WPF作为界面驱动,其实这是我第一次接触WPF,不过2dmmcLauncher还是我第一次用C#写出真正有用的程序呢,于是我就这么开工了

V1-V2的变化不只是改了WPF,会阻塞UI的地方我都尽量用了多线程,不过WPF的调试比WinForm要复杂一点,很多时候WPF抛出的异常是不会被定位到代码的,只会告诉你有这个异常,但是不知道在哪,这时候就要逐行运行手动定位了,而且WPF没有WinForm自带的异常捕捉器,WPF抛异常是直接崩溃的,而不是弹一个窗口告诉你有异常了。于是在翻阅资料后在V2.3加入了自己的异常处理窗口

不过,子线程抛出的异常不会被捕捉,而是直接导致程序崩溃

V2.4起和MCBN合作推出统一的登录插件接口

V2.5推出BMCLAPI的雏形,那时候还是手动更新,每次Mojang发布一个版本,我都手动下载,然后启动一次,手动上传客户端并且对比library有没有变化

V2.5.2为了解决WPF初始化过慢的问题加入了豆腐史莱姆的启动界面(再发一遍作者http://weibo.com/delta4s

V2.6支持繁体中文

V2.10加入了自(shou)动更新

然后就是沿用至今的V2.11了。最终BMCLV2的版本号停在了V2.11.21,接下来就是BMCLV3的天下了

那么,BMCLV3会是怎样的呢

界面不会有啥变化,不过BMCLAPI的速度和稳定性会增强,并且拥有更强的自定义能力,过多的我就不剧透了,总之敬请期待

贴一下完整的更新日志吧,之前这份日志只在mcbbs上留存过

V2.11.19-V2.11.21
*部分mod目录无法创建在.minecraft目录内

V2.11.18
+ 对非UTF8编码的JSON文件的支持,支持Encoding.Default。简体中文系统为GBK,繁体中文系统为BIG5,英文系统为ANSI

V2.11.17
*修正路径中带有空格时无法安装Forge的bug

V2.11.16
* 启动时不选择最后一次开启的版本

V2.11.15
* 修改资源文件下载不判断是否成功的bug
* 修改log写法,避免并发写入造成的混乱
* 修正旧资源文件地址错误
* 修正log中不写入下载成功的资源信息

V2.11.14
* 删除无用类库,减小程序体积
* 下载窗口下载完成时自动关闭
* 修正一个语言加载错误
该版本起更新将不跳转论坛

V2.11.13
* 修改Assets路径,作者源全面采用BMCLAPI

V2.11.12
* 一个会造成bmcl无法退出的bug
* Forge列表刷不出来
* 版本列表和下载的官方源修改,使用BMCLAPI(http://www.bangbang93.com/thread-2073-1-1.html)

V2.11.11
* native解压错误导致无法启动的bug

V2.11.10
* 修改Forge获取方式

V2.11.9
*作者源下载地址错误

V2.11.8
*下载依赖文件会出错
V2.11.7
* 适应新的资源文件结构

V2.11.6
* 修复1.7.3,1.7.4无法启动的bug

V2.11.5
*修改Forge列表获取方式,加快获取速度

V2.11.4
* Forge地址变化

V2.11.3
+ 对twitch的支持

V2.11.2
* 调整下载策略,增强稳定性

V2.11.1
* 错误窗口调整
* 适应Forge版本目录变化

V2.11.0.889
无任何功能更新,仅仅修改了官方下载源地址,所以版本号不变

V2.11
+ 对付新声音文件的下载窗口
* 界面调整,在xp下应该会好看点

该版本发布时Mojang官方的资源出现HTTP404错误,请使用作者源更新资源文件

V2.10
+ 更新检查
* 适应Mojang资源目录变化

V2.9.1
* XP专属路径错误bug

V2.9
* 修复了无法退出的bug
* 升级登录插件接口和登录插件,以兼容Minecraft1.7更新

V2.8.3
+ 重构错误报告,增强纠错能力

V2.8.2
* 下载native出错(玩家misyauyau@yahoo.com协助纠错)

V2.8.1
* 增强错误报告
* 重构按钮菜单

V2.8
+ 版本的Libraries管理(可编辑属性增加中)
* 尝试修复DLL锁定问题(不确定)

V2.7.5
* 各种优化,尽可能消除了后面报上来的bug

V2.7.4
* 可能会导致内存识别出错的bug

V2.7.3
* 繁琐的体验优化(具体参见http://www.bangbang93.com/forum. ... &pid=4995&fromuid=1)

V2.7.2
+ 读取Forge更新日志
* 同步资源文件多线程优化

V2.7.1
*wangtao03:增强WinXP兼容性

V2.7
+ 客户端崩溃后自动读取错误报告,正在写智能处理或者给出建议的功能

V2.6.8
* 增强日志功能

V2.6.7
* 一处提示错误

V2.6.6
+ 初次启动或无法找到asset目录的时候提示下载

V2.6.5
* wangtao03:Mod设置管理打开路径为Moddir
* wangtao03:xp下:手工设置Java路径后,游戏绝对路径会变成,Java路径+.minecraft
* チルノ:禁止启动时内存容量检测
* 无法保存上次的登录方式

V2.6.4
* 版本管理按照发布日期降序排序

V2.6.3
* 修改统计代码

V2.6.2
* JackLin84911:“版本管理”内的“检查资源文件”的“对比本地”按钮按下崩溃

V2.6.1
* 语言选项无法被保存
* 加载到无效的语言文件会崩溃
V2.6
+ 多语言支持,支持自定义语言包,内置简中和繁中(英文翻得太烂),语言文件放到Lang目录内即可被识别

V2.5.2
+ 启动界面
* 重构部分代码,减小程序体积

V2.5.1
* 重写启动部分,增强错误判断
* 没有背景图时每次启动都会提醒

V2.5 (该版本未在mcbbs发布)
+ 添加我提供的下载源,内有资源文件和至今为止发布的所有版本
+ 日志功能,可以获取游戏输出信息,供游戏错误诊断用

若要开启日志功能,请在启动后找到系统任务栏右边托盘区的BMCL图标,右键选择“以Debug模式重启”。相关log信息会写在启动器目录下的“bmcl.log”文件内,可以粘贴该文件或者将该文件上传为附件

V2.4.2
* keroro686:找不到服务器列表时点击取消就崩溃

V2.4.1
* CGS1230,鹿猩猩,mlxzlas:刷新Forge版本时报错
* CGS1230:自动启动无效
+ 隐藏主界面

V2.4
+ 通用验证插件接口
- 旧插件验证接口

V2.3.2
* qq459280185,523860169 提交

V2.3.1
+ Optifine和中文补丁的JVM Arg一键勾选
* @JackLin84911 反馈 直接保存在mods文件夹下的配置文件无法被保存

V2.3
+ 程序崩溃时的错误报告
* 启动时如果处理速度过慢窗口假死

V2.2.1
* 启动后窗口不隐藏

V2.2 
+ 服务器列表编辑功能
至此已实现V1所有功能

V2.1.1Beta Build283
+ 配置保存成功的提示信息
+ 一些提示信息

V2.1Beta Build259
* 统计信息提交失败* 启动淡入淡出效果加速

V2.1Beta Build257
* tab切换动画会在不该出现的时候出现
* 启动时一定概率无tab界面

V2.1Beta Build248
+ 安装Forge功能
+ 安装Forge和获取版本列表多线程,以解决界面失去响应的问题
+ 切换背景动画,背景过大的时候可能会卡一下(我加载5806*3540的分辨率才有微弱的感觉)
+ 切换tab动画

V2.0Beta Build160
+-* 界面使用WPF驱动,所有代码几乎推翻重构,自定义背景,自定义窗口透明度

V1.15.8 20130804 00:15
+ 双击服务器列表进入编辑窗口
+ For整合包作者:除了java路径和内存,此次添加了用户名强制修改,发布前将用户名修改为"!!!"三个英文感叹号,下次启动会直接定位到用户名输入,没有修改用户名则无法启动
fix 无法编辑服务器


V1.15.7 20130803 02:40
+ For整合包作者:发布前可通过编辑xml或者修改启动设置里的javaw.exe路径为“autosearch”(不包括引号,全小写),程序会在下次启动时尝试自动寻找javaw.exe(就像第一次打开启动器),java内存同理
fix 同步资源文件使用线程池,以加快对比和同步速度(对比速度加快极其明显)
(程序写着的版本号是V1.16.0.23,V1.16是多语言支持,正在开发,有点要坑)


V1.15.6 20130728 17:30
fix 读取服务器列表报错
fix 服务器列表黄色分类看不清
(程序写着的版本号是V1.16.0.15,V1.16是多语言支持,正在开发)


V1.15.5 20130724 18:40
fix 直接保存在mods文件夹下的配置文件无法被保存


V1.15.4 20130717 23:33
fix 读取服务器列表可能会停止响应


V1.15.3 20130717 13:18
fix 上一版本当不存在servers.dat文件时无法启动


V1.15.2 20130717 00:11
+ 服务器列表根据延迟分颜色
fix 没有选择服务器直接删除或者编辑会引发异常


V1.15.1 20130716 23:25
fix 编辑服务器列表可能会使得客户端无法读取


V1.15 20130716 22:15
+ 编辑服务器列表功能


V1.14.2 20130715 01:34
fix JVM Arguments不会被读入到文本框,该版本由@qi437103 贡献修复


V1.14.1 20130701 21:35
fix JVM Arguments无法保存的问题


V1.14 20130714 00:30
+ 应@SF_Chipan 的要求,添加自定义JVM Argument功能,以支持诸如Optifine之类的mod。


V1.13 20130712 17:00
+ 版本间MOD切换
+ 支持导入的客户端里带MOD


V1.12.1RE 20130711 18:00
fix 打包失误,无法加载dll


V1.12.1 20130711 04:24
fix Forge下载完成后下载进度条不消失


V1.12 20130711 03:50
+ 适应Mojang的JSON变化
fix 界面,资源管理和版本选择界面一次可以选中一行,在一行内任意地方都可点中选择


V1.11.1 20130711 00:59
fix 下载Forge页面,先点击获取Forge版本,再点击自动下载最新会引起异常


V1.11 20130707 04:50
+ 详细的导出设置
+ 重命名功能
fix 增强导入功能


V1.10 20130707 02:10
+ 导出客户端到正版启动器或者zip


V1.9 20130707 00:15
+ 导入旧版Minecraft,支持Forge


V1.8 20130706 05:30
+ 一键下载最新Forge
+ 下载Forge可以选择版本
+ 可以删除已有的版本
- 进度条同步显示在任务栏
fix 检查资源窗口无法正常初始化



V1.7.2 20130705 23:20
fix 源码中的一处拼写错误


V1.7.1 20130705 22:30
fix 刷新和下载资源文件时任务栏进度条
fix 刷新资源文件时发生异常


V1.7 20130705 04:27
fix 启动时托盘区有两个图标,其中一个图标双击会显示新窗口,在自动开启模式下会再运行一个客户端。


V1.6 20130705 03:45
+ 一键下载forge
+ 下载资源文件时任务栏进度条(仅Win7和Win8)


V1.5 20130705 01:41
+ 下载和同步资源文件
+ 程序图标


V1.4 20130704 20:38
+ 下载客户端
+ 下载依赖


V1.3 20130704 15:44
+ 官方更新信息页面
fix 完成下次直接启动


V1.2 20130704 13:30
+ Forge依赖下载
+ 启动状态界面


V1.1.1 20130704 04:30
+ 支持启动带Forge的客户端


V1.1 20130704 02:59
fix 正版登录用户名不对
fix 调试信息没有删除