创建Minecraft下载源
这个文章是对创建Minecraft下载源的一个简单说明,目录结构参考bmclapi
由于bmclapi的maven目录已经被各大高校镜像站收录,可以自行使用rsync同步模组加载器。
Step1同步文件
mojang使用
launchermeta.mojang.com--->下载version_manifest.json(版本清单) piston-meta.mojang.com--->下载版本和版本JSON以及AssetsIndex(资源索引文件) resources.download.minecraft.net--->下载散列资源文件 libraries.minecraft.net--->下载依赖库文件
这些域名来提供文件下载
这些文件结构都没有重合,可以合并至一个目录,然而散列资源文件由于目录名称都是两位16进制数字,故移动到/assets文件夹下,
库文件由于结构复杂,遵循bmclapi,移到“/maven”
结构示例
https://libraries.minecraft.net/(bmclapi将以下目录移动至“/maven”) ├── com/ │ ├── google/ │ │ └── gson/ (JSON 库) │ └── mojang/ │ ├── authlib/ (认证库) │ └── brigadier/ (命令解析库) ├── commons-io/ (Apache 通⽤库) ├── io/ │ └── netty/ (⽹络库) ├── net/ │ └── java/ │ └── openjdk/ (可选的捆绑 Java 运⾏时) ├── org/ ├── lwjgl/ (Lightweight Java Game Library) ├── lwjgl/ (核⼼库) │ └── [版本号]/ │ ├── lwjgl-[版本号].jar (通⽤ Java 代码) │ ├── lwjgl-[版本号]-natives-windows.jar (Windows 原⽣库) │ └── lwjgl-[版本号]-natives-linux.jar (Linux 原⽣库) ├── lwjgl-glfw/ (窗⼝库) └── lwjgl-opengl/ (渲染库) https://resources.download.minecraft.net/ ├── 00/ (以及其他 00-ff 共 256 个哈希⽂件夹) ├── 01/ ├── ... └── [哈希⽂件夹,如 4d/] └── [⽂件哈希值] (例如: 4d/4d51b1d1e5f6d3a7...) https://piston-meta.mojang.com/ └── v1/ ├──assets/ │└── indexes/ │├── 30.json(资源索引文件) │├── 29.json(资源索引文件) │└── ... ├──objects/ (二进制文件) │├──哈希值/client.jar(客户端) │├──哈希值/server.jar(服务器) │├──哈希值/mojang_java文件(mojang提供的Java) │└──哈希值/... └──packages/ ├──哈希值/版本号.json(版本JSON) ├──哈希值/30.json(资源索引文件) └──哈希值/manifest.json.json(java文件清单) https://launchermeta.mojang.com/ └── v1/ ├──mc/ │└── game/ │├── version_manifest.json(版本清单) │├── version_manifest_v2.json(版本清单) │└── ... └──products/ (二进制文件) └──java-runtime └──哈希值/all.json(Java版本清单)
使用
sync_mojang.sh同步客户端,服务器以及依赖库
sync_mojang_res.sh同步散列资源文件
sync_mojang_java.sh同步Mojang Java
linker_mojang_indexes.sh创建资源索引文件在“/v1/packages/哈希值”目录下的硬连接
Step2网络镜像
需要一台web服务器用来分发文件,以nginx为例(配置文件并不完整)。
开放8194端口供下载文件,访问https://IP:8194,应该能看到同步目录下的文件
log_format log_970449f8-71da-4da6-9e46-6aea191fbbff '970449f8-71da-4da6-9e46-6aea191fbbff;$time_local;$remote_addr;$request;$status;$body_bytes_sent;$http_referer';
server {
listen 8194 ssl default_server;
listen [::]:8194 ssl default_server;
server_name _;
access_log /var/packages/WebStation/var/log/nginx_access_log log_970449f8-71da-4da6-9e46-6aea191fbbff;
error_log /var/packages/WebStation/var/log/nginx_error_log warn;
include /usr/syno/etc/www/certificate/WebStation_970449f8-71da-4da6-9e46-6aea191fbbff/cert.conf*;
include /usr/syno/etc/security-profile/tls-profile/config/WebStation_970449f8-71da-4da6-9e46-6aea191fbbff.conf*;
ssl_prefer_server_ciphers on;
include conf.d/.webstation.error_page.default.conf*;
include conf.d/.webstation.error_page.default.resource.conf*;
include conf.d/.service.970449f8-71da-4da6-9e46-6aea191fbbff.e4718dd3-cbb6-441d-a1d3-13cd0b7d57ec.conf*;
location ^~ / {
alias /volume2/空间1/SHARE/Software软件/Game/Minecraft/JavaEdition/BMCLAPISRC/; #文件路径(替换为你的同步目录,末尾加“/”)
autoindex on; # 开启索引功能
autoindex_exact_size off; # 关闭计算文件确切大小(单位bytes),只显示大概大小(单位kb、mb、gb)
autoindex_localtime on; # 显示本机时间而非 GMT 时间
charset utf-8; #避免中文乱码
}
}启用反向代理,使用mojang域名的请求转发到https://IP:8194(配置文件并不完整)
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name piston-meta.mojang.com ;
if ( $host !~ "(^piston-meta.mojang.com$)" ) { return 404; }#一共有四个域名,同样格式增加另外三个(重复本段落)
include /usr/syno/etc/www/certificate/ReverseProxy_6d183433-88d9-4e67-9357-5a6afc61035c/cert.conf*;
include /usr/syno/etc/security-profile/tls-profile/config/ReverseProxy_6d183433-88d9-4e67-9357-5a6afc61035c.conf*;
proxy_ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
location / {
proxy_connect_timeout 60;
proxy_read_timeout 60;
proxy_send_timeout 60;
proxy_intercept_errors off;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass https://localhost:8194;
#如果代理的是resources.download.minecraft.net,将“https://localhost:8194”替换为“https://localhost:8194/assets/”(末尾一定要加上斜杠!)
#如果代理的是libraries.minecraft.net,将“https://localhost:8194”替换为“https://localhost:8194/maven/”(末尾一定要加上斜杠!)
}
error_page 403 404 500 502 503 504 /dsm_error_page;
location /dsm_error_page {
internal;
root /usr/syno/share/nginx;
rewrite (.*) /error.html break;
allow all;
}
}编辑本机HOSTS文件,macOS:/etc/hosts
增加四条记录:(192.168.2.186应当替换为web服务器的IP地址)
192.168.2.186 piston-meta.mojang.com 192.168.2.186 launchermeta.mojang.com 192.168.2.186 resources.download.minecraft.net 192.168.2.186 libraries.minecraft.net
创建证书,由于并没有*.mojang.com的私钥,不能伪造一个和官方证书一样的证书
bash执行命令(需要keytool)
keytool -genkeypair -alias mojang -keyalg RSA -keysize 2048 -validity 365 -keystore mojang.jks -storepass changeit -keypass changeit -dname "CN=*.mojang.com, OU=Development, O=MyOrg, L=City, ST=State, C=US" -ext san=dns:mojang.com,dns:piston-meta.mojang.com,dns:launchermeta.mojang.com,dns:resources.download.minecraft.net,dns:libraries.minecraft.net”
参数说明:
-alias :给这个证书起个名字(这⾥是mojang )。
-keystore :⽣成的密钥库⽂件(这⾥是mojang.jks )。
-storepass & -keypass :密钥库和私钥的密码(默认 changeit ,建议修改)。
-ext "san=..." :核⼼参数,明确声明这个证书能认证哪些域名。
从 mojang.jks 密钥库中导出证书为 .crt ⽂件,可以使⽤ keytool 命令:
“keytool -exportcert -alias mojang -keystore mojang.jks -storepass changei
t -file mojang.crt”
参数说明:
-exportcert :导出证书操作。
-alias mojang :指定要导出的证书别名(与你⽣成时使⽤的别名⼀致)。
-keystore mojang.jks :指定密钥库⽂件。
格式转换 PJKS → PKCS12Q
执⾏以下命令进⾏格式转换:
keytool -importkeystore -srckeystore mojang.jks -srcstoretype JKS -destkeystore mojang.p12 -deststoretype PKCS12
-srckeystore mojang.jks :指定你的源 JKS ⽂件 。
-destkeystore mojang.p12 :指定要⽣成的 PKCS12 ⽂件名 。
-srcstoretype JKS :明确源⽂件格式为 JKS 。
-deststoretype PKCS12 :明确⽬标⽂件格式为 PKCS12 。
执⾏后,系统会提示你输⼊源 JKS 的密码,以及设置⽬标 PKCS12 ⽂件的存储密码 。
私钥提取 PPKCS12Q → PEMQ
使⽤ openssl 命令从新⽣成的 mojang.p12 中提取私钥:
openssl pkcs12 -in mojang.p12 -nocerts -nodes -out mojang.key
-in mojang.p12 :指定上⼀步⽣成的 PKCS12 ⽂件 。
-nocerts :指示只导出私钥,不包含证书 。
-nodes :指示不对输出的私钥进⾏加密,⽣成⼀个没有密码的明⽂私钥 。
执⾏后,系统会提示输⼊ PKCS12 ⽂件的密码,输⼊正确后便会⽣成 mojang.key
⽂件。这个⽂件的内容格式⼤致如下:
-----BEGIN PRIVATE KEY----- MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQC7Z... (... 省略 ...) -----END PRIVATE KEY-----
导⼊到 Java 信任库
sudo keytool -importcert -alias mojang -keystore $JAVA_HOME/lib/security/cacerts -storepass changeit -file mojang.crt
将mojang.crt和mojang.key导入web服务器,并设置为反向代理以及8194端口的ssl证书
ssl_certificate /usr/syno/etc/www/certificate/mojang.pem; ssl_certificate_key /usr/syno/etc/www/certificate/mojang.pem;(mojang.key)
重载配置文件
sudo nginx -s reload
启动HMCL,下载游戏。




