# JMCCC
**Repository Path**: Jamesmc/JMCCC
## Basic Information
- **Project Name**: JMCCC
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2020-03-14
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# JMCCC
[](https://gitter.im/Southern-InfinityStudio/JMCCC?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [](https://travis-ci.org/to2mbn/JMCCC)
一个用来下载并启动Minecraft的强大的开源类库。
## 许可证
JMCCC使用[MIT许可证](https://to2mbn.github.io/jmccc/LICENSE.txt)。
## 功能
* 启动各个版本的Minecraft
* 可拓展的登录系统
* 默认支持Yggdrasil/离线
* 下载各个版本的Minecraft
* 支持Forge/Liteloader下载
* 支持Liteloader的快照版本
* 可自定义下载源
* 异步的任务系统
* 支持阻塞式IO(BIO)和非阻塞式IO(NIO)
* 可以使用[Apache HttpAsyncClient](http://hc.apache.org/httpcomponents-asyncclient-dev/)或JDK作为底层
* 支持缓存
* 可以使用Ehcache或者javax.cache作为底层
* 对于不同文件可以指定不同缓存策略
* 支持Mojang API
* 查询玩家信息
* 获取/上传皮肤(及披风、Elytra)
* 查询账号信息
* 查询改名历史
* 检查服务器是否被封禁(Mojang封禁不遵守EULA的服务器)
## 快速开始
### 依赖库
|依赖 |说明 |
|------------------------------------------|------------------------|
|`org.to2mbn:jmccc` |提供启动Minecraft的功能 |
|`org.to2mbn:jmccc-yggdrasil-authenticator`|提供Yggdrasil验证功能 |
|`org.to2mbn:jmccc-mcdownloader` |提供下载Minecraft的功能 |
|`org.to2mbn:jmccc-mojang-api` |Mojang API客户端 |
快照版本(snapshot)的Maven仓库:
```xml
ossrh
https://oss.sonatype.org/content/groups/public/
true
```
### 启动Minecraft
```java
MinecraftDirectory dir = new MinecraftDirectory("/home/user/.minecraft");
Launcher launcher = LauncherBuilder.buildDefault();
launcher.launch(new LaunchOption("1.10", YggdrasilAuthenticator.password("", ""), dir));
```
如果需要离线验证的话,可以将`YggdrasilAuthenticator.password("", "")`换成`new OfflineAuthenticator("")`。
### 下载Minecraft
```java
MinecraftDirectory dir = new MinecraftDirectory("/home/user/.minecraft");
MinecraftDownloader downloader = MinecraftDownloaderBuilder.buildDefault();
downloader.downloadIncrementally(dir, "1.10", new CallbackAdapter() {
@Override
public void failed(Throwable e) {
// 任务失败时
}
@Override
public void done(Version result) {
// 任务成功完成时
}
@Override
public void cancelled() {
// 任务取消时
}
@Override
public DownloadCallback taskStart(DownloadTask task) {
// 派生出一个子任务时
// 在这里返回一个Callback便可以监视该子任务的状态
return new CallbackAdapter() {
@Override
public void done(R result) {
// 子任务完成时
}
@Override
public void failed(Throwable e) {
// 子任务失败时
}
@Override
public void cancelled() {
// 子任务取消时
}
@Override
public void updateProgress(long done, long total) {
// 子任务的下载进度更新时
}
@Override
public void retry(Throwable e, int current, int max) {
// 子任务下载出错,并且将要重试时
// 注:下载出错不代表任务失败,只有多次重试都出错后才算失败
}
};
}
});
```
如果说不需要跟踪任务进度,那么传入一个`null` callback即可。
如果说不需要跟踪子任务的进度,那么在`taskStart()`里返回`null`即可。
当不再使用downloader时,需要关闭它:
```java
downloader.shutdown();
```
### 下载Forge/Liteloader
```java
MinecraftDirectory dir = new MinecraftDirectory("/home/user/.minecraft");
ForgeDownloadProvider forgeProvider = new ForgeDownloadProvider();
LiteloaderDownloadProvider liteloaderProvider = new LiteloaderDownloadProvider();
MinecraftDownloader downloader = MinecraftDownloaderBuilder.create()
.providerChain(DownloadProviderChain.create()
.addProvider(forgeProvider)
.addProvider(liteloaderProvider))
.build();
downloader.downloadIncrementally(dir, "1.8-forge1.8-11.14.3.1514", new CallbackAdapter() {...});
downloader.downloadIncrementally(dir, "1.7.10-LiteLoader1.7.10", new CallbackAdapter() {...});
downloader.download(forgeProvider.forgeVersionList(), new CallbackAdapter() {...});
downloader.download(liteloaderProvider.liteloaderVersionList(), new CallbackAdapter() {...});
```
### FML参数
JMCCC不像其它一些启动器,JMCCC不会自动添加类似于`-Dfml.ignoreInvalidMinecraftCertificates=true`或`-Dfml.ignorePatchDiscrepancies=true`之类的FML参数。
所以可能会无法启动一些Forge版本,您可能需要手动添加这些参数。
这些参数都已经在`ExtraArgumentsTemplates`中被预先定义好了,您只需要引用一下即可。
```java
option.extraJvmArguments().add(ExtraArgumentsTemplates.FML_IGNORE_INVALID_MINECRAFT_CERTIFICATES);
option.extraJvmArguments().add(ExtraArgumentsTemplates.FML_IGNORE_PATCH_DISCREPANCISE);
```