Initial commit
This commit is contained in:
commit
6f3032122a
3
.idea/.gitignore
vendored
Normal file
3
.idea/.gitignore
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
# 默认忽略的文件
|
||||
/shelf/
|
||||
/workspace.xml
|
8
.idea/MinecraftJarDownload.iml
Normal file
8
.idea/MinecraftJarDownload.iml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="PYTHON_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="inheritedJdk" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
12
.idea/inspectionProfiles/Project_Default.xml
Normal file
12
.idea/inspectionProfiles/Project_Default.xml
Normal file
@ -0,0 +1,12 @@
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<profile version="1.0">
|
||||
<option name="myName" value="Project Default" />
|
||||
<inspection_tool class="PyPep8NamingInspection" enabled="true" level="WEAK WARNING" enabled_by_default="true">
|
||||
<option name="ignoredErrors">
|
||||
<list>
|
||||
<option value="N802" />
|
||||
</list>
|
||||
</option>
|
||||
</inspection_tool>
|
||||
</profile>
|
||||
</component>
|
6
.idea/inspectionProfiles/profiles_settings.xml
Normal file
6
.idea/inspectionProfiles/profiles_settings.xml
Normal file
@ -0,0 +1,6 @@
|
||||
<component name="InspectionProjectProfileManager">
|
||||
<settings>
|
||||
<option name="USE_PROJECT_PROFILE" value="false" />
|
||||
<version value="1.0" />
|
||||
</settings>
|
||||
</component>
|
4
.idea/misc.xml
Normal file
4
.idea/misc.xml
Normal file
@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10" project-jdk-type="Python SDK" />
|
||||
</project>
|
8
.idea/modules.xml
Normal file
8
.idea/modules.xml
Normal file
@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/MinecraftJarDownload.iml" filepath="$PROJECT_DIR$/.idea/MinecraftJarDownload.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
1456
23w14a.json
Normal file
1456
23w14a.json
Normal file
File diff suppressed because it is too large
Load Diff
64
download.py
Normal file
64
download.py
Normal file
@ -0,0 +1,64 @@
|
||||
import requests
|
||||
import hashlib
|
||||
import os
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
|
||||
folder = 'vanilla'
|
||||
|
||||
# source = 'https://launchermeta.mojang.com/mc/game/version_manifest.json'
|
||||
source = 'https://download.mcbbs.net/mc/game/version_manifest.json'
|
||||
|
||||
# 先获取 Minecraft 的版本
|
||||
versions = requests.get(source).json()
|
||||
|
||||
# 计算要下载多少
|
||||
print('Total ' + str(len(versions['versions'])) + ' versions')
|
||||
|
||||
# 多线程异步下载
|
||||
|
||||
executor = ThreadPoolExecutor(max_workers=5)
|
||||
|
||||
# 倒序
|
||||
versions['versions'].reverse()
|
||||
|
||||
# 下载所有版本的客户端 jar
|
||||
for version in versions['versions']:
|
||||
print('Downloading ' + version['id'])
|
||||
|
||||
# 检测文件哈希
|
||||
|
||||
version_id = folder + '/' + version['id']
|
||||
|
||||
version_data = requests.get(version['url']).json()
|
||||
|
||||
# 检测有没有 server
|
||||
if 'server' not in version_data['downloads']:
|
||||
print('Skip ' + version_id + ' (no server)')
|
||||
continue
|
||||
|
||||
downloads = version_data['downloads']['server']
|
||||
|
||||
if os.path.exists(version_id + '.jar'):
|
||||
with open(version_id + '.jar', 'rb') as f:
|
||||
if hashlib.sha1(f.read()).hexdigest() == downloads['sha1']:
|
||||
print('Skip ' + version_id)
|
||||
continue
|
||||
|
||||
# get file size
|
||||
# print(requests.head(downloads['url']).headers['Content-Length'])
|
||||
|
||||
file_size = int(requests.head(downloads['url']).headers['Content-Length'])
|
||||
|
||||
# print file size mb
|
||||
print('File size: ' + str(file_size / 1024 / 1024) + ' MB')
|
||||
|
||||
# 多线程下载
|
||||
# executor.submit(requests.get, downloads['url'], stream=True).add_done_callback(
|
||||
# lambda future: open(version_id + '.jar', 'wb').write(future.result().content)
|
||||
# )
|
||||
|
||||
# 单线程下载
|
||||
with open(version_id + '.jar', 'wb') as f:
|
||||
f.write(requests.get(downloads['url'], stream=True).content)
|
||||
|
||||
executor.shutdown()
|
62
forge.py
Normal file
62
forge.py
Normal file
@ -0,0 +1,62 @@
|
||||
import json
|
||||
|
||||
import requests, os
|
||||
|
||||
|
||||
folder = 'forge'
|
||||
|
||||
if not os.path.exists(folder):
|
||||
os.mkdir(folder)
|
||||
|
||||
# 获取 Forge 版本
|
||||
forge_versions = requests.get('https://files.minecraftforge.net/maven/net/minecraftforge/forge/promotions_slim.json')\
|
||||
.json()['promos']
|
||||
|
||||
new_versions = {}
|
||||
|
||||
|
||||
# 遍历所有,如果文件名不包含 -recommended,就跳过
|
||||
for version in forge_versions:
|
||||
# 如果不包含 -recommended,就跳过
|
||||
if '-recommended' not in version:
|
||||
continue
|
||||
|
||||
# print(version)
|
||||
|
||||
# version 是 value
|
||||
# version = forge_versions[version]
|
||||
|
||||
# 包含的话,就去除 -recommended
|
||||
new_versions[version.replace('-recommended', '')] = forge_versions[version]
|
||||
|
||||
|
||||
# pretty print
|
||||
|
||||
# 计算要下载多少
|
||||
print('Total ' + str(len(new_versions)) + ' versions')
|
||||
|
||||
# 遍历所有版本
|
||||
for version in new_versions:
|
||||
# https://maven.minecraftforge.net/net/minecraftforge/forge/1.19.3-44.1.0/forge-1.19.3-44.1.0-installer.jar
|
||||
|
||||
full_version = version + '-' + new_versions[version]
|
||||
|
||||
# 获取下载链接
|
||||
url = 'https://maven.minecraftforge.net/net/minecraftforge/forge/' + full_version + '/forge-' + full_version + \
|
||||
'-installer.jar'
|
||||
|
||||
head = requests.head(url)
|
||||
|
||||
if not head.ok:
|
||||
print('Skip ' + version + ' (not found)')
|
||||
continue
|
||||
# print file size mb
|
||||
print(str(int(head.headers['Content-Length']) / 1024 / 1024) + 'MB')
|
||||
|
||||
# 保存到文件
|
||||
with open(folder + '/' + version + '.jar', 'wb') as f:
|
||||
f.write(requests.get(url).content)
|
||||
|
||||
print('Downloaded ' + version)
|
||||
|
||||
|
4789
versions.json
Normal file
4789
versions.json
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user