创建Minecraft下载源

Andy_Liu2个月前 (05-01)现代软件专栏100

这个文章是对创建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,下载游戏。



相关文章

iOS VM虚拟机安装bash和TrollStore巨魔商店

iOS VM虚拟机安装bash和TrollStore巨魔商店

苹果公司开发的iOS操作系统是iPhone的灵魂,这么多年来一直有能人异士绕过iOS系统的限制,为iOS系统开发越狱环境下的软件,最近,QemuAppleSilicon项目终于取得了重大进步,已经通过…

使用Playcover在macOS(AppleSilicon)上玩Minecraft

使用Playcover在macOS(AppleSilicon)上玩Minecraft

作为一个MC爱好者,一年前入手了一台Mac,Mac强大的单核性能非常适合来架设Javamc服务器,然而基岩版在mac上缺失了,仅有教育版搭载在mac上,这篇文章是写给那些有在mac上运行mc国际基岩版…

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。