Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Branch version synchronization #8

Merged
merged 6 commits into from
Jun 20, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
name: Deploy to GitHub Pages

on:
push:
branches:
- main
# Review gh actions docs if you want to further define triggers, paths, etc
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#on

jobs:
build:
name: Build Docusaurus
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: actions/setup-node@v4
with:
node-version: 18
cache: npm

- name: Install dependencies
run: npm install --frozen-lockfile
- name: Build website
run: npm run build

- name: Upload Build Artifact
uses: actions/upload-pages-artifact@v3
with:
path: build

deploy:
name: Deploy to GitHub Pages
needs: build

# Grant GITHUB_TOKEN the permissions required to make a Pages deployment
permissions:
pages: write # to deploy to Pages
id-token: write # to verify the deployment originates from an appropriate source

# Deploy to the github-pages environment
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}

runs-on: ubuntu-latest
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
27 changes: 12 additions & 15 deletions docs/guide.md → docs/installation/guide.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
---
sidebar_position: 12
id: guide
sidebar_position: 10
title: 安装教程
---

Expand Down Expand Up @@ -37,13 +36,15 @@ title: 安装教程
+ 到`mp/workspace/.minecraft/versions/your-version/mods`
+ 其它文件也是同理,需要复制到versions目录下

::: tip
若开启版本隔离,那么要更新的实际上是versions目录下的mods文件夹,把文件放到`.minecraft/mods`目录下,游戏是读取不到的。
:::tip

若开启版本隔离,那么要更新的实际上是versions目录下的mods文件夹。如果直接把文件放到`.minecraft/mods`目录下,游戏是读取不到的。

:::

## 四、开始打包

在终端里输入`mcpatch-manager.exe pack <version>`即可开始打包,`<version>`是要打包的版本号,不能和现有的冲突
在终端里输入`mcpatch-manager.exe pack <version>`即可开始打包,`<version>`是要打包的版本号,不能和现有的重复

版本号只能包括大小写字母,数字,以及`!@#$()_+-=;',.`这几个符号,不要使用中文,空格,或其它字符,会出问题。

Expand All @@ -53,7 +54,7 @@ title: 安装教程

如果对打包结果不放心,可以使用`mcpatch-manager.exe test`对更新包进行校验,这会模拟客户端的解压过程,检查文件是否损坏。

::: danger[注意]
:::danger[万分小心!!!]

已经打好的更新包文件不能手动删除也不能修改里面的文件,这会导致数据损坏,应该再打一个新的包来替代删除旧的包。

Expand All @@ -65,13 +66,9 @@ title: 安装教程

管理端会自动识别到你所做的更改,并记录到更新包里。

即使新旧文件同名,只修改了文件里的数据,也能检测到。目录也是一样,该新增新增,该删除删除,就像对自己电脑上的文件一样操作就好。

::: tip[提示]
即使新旧文件同名,只修改了文件里的数据,也能检测到(包括加密压缩包)。目录也是一样,该新增新增,该删除删除,就像对自己电脑上的文件一样操作就好。

管理端目前还没有提供复原工作空间目录的指令,如果有这个需求,需要手动从更新包中把文件解压出来。后面会把这个功能加上。

:::
如果对工作空间目录下的文件进行了修改,但又发现改的不对。可以使用管理端的revert命令来丢弃刚刚的修改,将文件状态退回上一次打包的时候。

## 六、启动服务端

Expand All @@ -89,7 +86,7 @@ title: 安装教程

唯一需要修改的是`urls`选项,这个参数控制更新服务器的地址,将127.0.0.1:6700修改成自己服务器的ip和端口即可。

其它选项可以按需修改,但不是必须的,完成后保存关闭
其它选项可以按需修改。

## 八、一键启动

Expand All @@ -101,9 +98,9 @@ title: 安装教程

打开Minecraft启动器(任意启动器均可,官方启动器除外),调整游戏版本设置,找到Java虚拟机参数(或者JVM 参数)。

在参数的开头插入这串代码`-javaagent:mp/loader-1.jar`,然后回到启动器主界面。
在参数的开头插入这串代码`-javaagent:mp/loader-1.jar`,然后回到启动器主界面。(此时先不要启动游戏)

接着创建“启动列表”文件`.minecraft/mp/startlist.txt`,将客户端程序的文件名写进去,比如`mcpatch-client-0.0.0.exe`,然后保存关闭。
接着创建“启动列表”文件`.minecraft/mp/startlist.txt`,将客户端程序的文件名写到这个文件的第一行,比如`mcpatch-client-0.0.0.exe`,然后保存关闭。

点击Minecraft启动器的“启动游戏”按钮,一切顺利的话就会自动启动更新了。

Expand Down
7 changes: 7 additions & 0 deletions docs/installation/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
sidebar_position: 10
title: 首次安装
---
import DocCardList from '@theme/DocCardList';

<DocCardList/>
5 changes: 2 additions & 3 deletions docs/script-template.md → docs/installation/upload-dxcc.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
---
sidebar_position: 13
id: script-template
title: 上传脚本模板
sidebar_position: 20
title: 上传对象存储
---

管理端打包后,可能要把更新包上传到自己的服务器,或者对象存储上供大家下载。
Expand Down
67 changes: 67 additions & 0 deletions docs/maintain/client-self-upgrade.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
---
sidebar_position: 30
title: 客户端热升级
---

Mcpatch客户端会不定时发布新版本,新版本一般都会包含新的特性和改进修复,需要尽可能升级到新版本。

但客户端升级不像管理端那么容易:因为客户端在玩家电脑上,升级需要重新发包,比较麻烦。

因此Mcpatch特别支持了客户端热升级功能,用来远程下发新的客户端版本,无需重新发包。

客户端热升级的原理,是通过修改loader.jar的配置文件startlist.txt,来实现启动新版的客户端exe文件来做到热升级的。

## 首次配置

这部分步骤只需要进行一次即可,后续不用再做:

将下面的文件放入工作空间目录,以加入更新。并且文件位置要和客户端那边一一对应

1. startlist.txt文件
2. 当前版本的客户端程序文件

## 升级过程

1. 下载好新版本的客户端程序文件
2. 删除工作空间目录下的旧版客户端程序文件
3. 将新版的客户端程序文件放入旧版文件的旁边(工作空间目录里)
4. 编辑startlist.txt文件
5. 将新版的文件名,插入到第一行。使旧版的文件名从第一行变成第二行。以此类推,不要删除这些旧文件名
6. 将刚刚的修改正常打包,客户端程序会自动下载。等到下一次运行时,启动的就会是新版的客户端程序了

## startlist.txt文件的格式(可选阅读)

startlist.txt文件也叫启动列表文件,是加载器jar的配置文件。

加载器会读取这个文件内容,并将第一行的文件名,作为客户端程序的启动文件名,去运行这个文件,从而启动客户端程序。

而从第二行开始往后,记录的则是旧版的文件名,只有第一行是最新的版本。这些旧版文件名要保留,不能删除,否则玩家那边的旧版客户端程序文件会有残留,多占一些存储空间。(只是多占用一些空间,但不会对程序功能有干扰)

一个栗子:

```txt
mcpatch-1.4.exe # 第一行是新版本
mcpatch-1.3.exe # 第二行开始后面全是旧版本
mcpatch-1.2.exe # 也是旧版本
mcpatch-1.1.exe # 也是旧版本
```

为什么要这样做,是因为按照正常打包更新流程,更新包中有2个请求。

一个记录是下载新版的文件。

另一个记录是删除旧版文件。

下载新版文件没有任何问题,会直接下载。但是删除旧版文件时就会有些不同,此时客户端程序自己就是那个旧版文件。

按照Windows操作系统的规则,正在运行的文件是不能删除的,所以客户端无奈只能将删除“自己文件”这个请求给忽略掉,或者说跳过了。

那么就会造成旧版客户端文件一直残留,随着版本更新文件会越来越多。

既然客户端程序无法自己删除自己,那么就可以将这个删除请求委托给加载器来做。

加载器会将启动列表文件的第二行开始到末尾的所有文件名当成旧文件来处理,即删除掉。

这也是为什么需要保留这些旧版本文件列表的原因了。

就算将这些旧版文件名不小心删掉了,也不会有特别严重的后果。顶多就是占点空间,不会对功能有干扰。
11 changes: 11 additions & 0 deletions docs/maintain/combine-versions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
sidebar_position: 20
title: 合并更新包
---

当管理端用久了以后,会积累非常多的更新包,会占用大量的存储空间。

管理端提供了一个功能,可以将多个更新包合并成一个,每个文件只保留一份最新版本,可以释放出大量存储空间,同时不影响玩家的正常更新。

使用管理端的combine命令即可开始自动合并更新包,会将所有更新包合并成一个。v2的合并更新包功能不会丢失版本信息,因此相较v1版本,无需再输入新的版本号就能完成合并。

7 changes: 7 additions & 0 deletions docs/maintain/index.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
sidebar_position: 10
title: 日常维护
---
import DocCardList from '@theme/DocCardList';

<DocCardList/>
63 changes: 38 additions & 25 deletions docs/start.md
Original file line number Diff line number Diff line change
@@ -1,45 +1,58 @@
---
sidebar_position: 1
id: start
title: McPatch2 介绍
title: McPatch 介绍
---

## McPatch 2
McPatch 是一个给 Minecraft 客户端做文件更新的独立应用程序。客户端仅支持Windows,管理端支持全平台。

McPatch是一个给Minecraft客户端做文件更新的独立应用程序,这里是McPatch第二版的文档。
只要你想,你可以通过这个程序向你服务器的玩家提供一切内容,包括模组、资源包、以及~~不可言说的视频~~

客户端仅支持Windows,管理端支持全平台
这里是McPatch v2版本的文档,如果你是v1版本的老用户,请看下面的升级说明

官方企鹅群[【更新助手官方群】](https://jq.qq.com/?_wv=1027&k=PqAEtn39) 925057600
<details>
<summary>从v1升级说明</summary>

## 升级说明
首先,v1和v2不兼容,无法用v1的热升级功能来更新版本。安装v2前需要先删掉v1版本的全部文件再从头安装。

2.0版本无法从1.0版本用热更新的方式升级上来,需要先把1.0版本的文件全部删掉,再重头开始安装2.0版本
如果你是第一次使用这个软件,请忽略这个升级说明

如果你是第一次使用这个软件,请忽略这个升级说明
下面是v2版本相较v1版本的一些改动,请先看过之后,再决定要不要升级

## 大版本更新变动
### 新功能(相较v1)

以下是2.0版本相较1.0版本的改动。如果你是1.0版本的老用户,请在使用之前仔细阅读下面的改动列表。
1. 客户端支持按需下载,通过其它方式提前更新的文件,在下载时会被跳过,不会重复下载
2. 管理端现在自带一个内置的小服务端,使用tcp协议和客户端通信,无需再担心备案的问题
3. 管理端支持上传脚本模板,每次打包后都会按模板生成一个脚本,用来一键上传更新包文件

### 新功能
### 改进(相较v1)

1. 客户端支持按需下载,通过其它方式提前更新的文件,在下载时会被跳过,不会重复下载
2. 管理端现在自带一个内置的小服务端,使用tcp协议和客户端通信,无需再担心备案的问题
3. 管理端支持上传脚本模板,每次打包后都会按模板生成一个脚本,用来一键上传更新包文件
1. 优化管理端文件结构,省去了history目录的设计,硬盘占用减少三分之一
2. 更新包每次都记录完整文件,避免客户端文件因玩家被修改导致无法更新
3. 客户端修复窗口无响应和下载限速的问题,现在可以跑到更快的下载速度

### 改进
### 取舍(相较v1)

1. 优化管理端文件结构,省去了history目录的设计,硬盘占用减少三分之一
2. 更新包每次都记录完整文件,避免客户端文件因玩家被修改导致无法更新
3. 客户端修复窗口无响应和下载限速的问题,现在可以跑到更快的下载速度
2.0版本相比1.0做出了一些功能上的取舍,以下是1.0支持,2.0不支持的功能列表:

### 取舍
1. 客户端仅支持Windows(不支持Android手机端和其他操作系统)
2. 客户端不再支持sftp(使用管理端内置的tcp协议替代了)
3. 管理端目前提供Windows x86和Linux x86打包,其它平台需要自己构建打包
4. 管理端现在使用纯命令行启动,而不是1.0版本的交互式命令行(方便其它脚本调用)

2.0版本相比1.0做出了一些功能上的取舍,以下是1.0支持,2.0不支持的功能列表:
</details>

1. 客户端仅支持Windows(不支持Android手机端和其他操作系统)
2. 客户端不再支持sftp(使用管理端内置的tcp协议替代了)
3. 管理端目前提供Windows x86和Linux x86打包,其它平台需要自己构建打包
4. 管理端现在使用纯命令行启动,而不是1.0版本的交互式命令行(方便其它脚本调用)
## 为什么需要这样一款软件

你在游戏中出现的每一个 Bug,开发者都在修复,自然,模组也是如此,对于替换掉玩家手里旧的 Mod 这件事,相信你和我们一样被困扰着

当玩家找到你,问你“这是什么错误”、“我又缺了什么模组”,你也心烦吧。

所以,McPatch 诞生了!

McPatch 是一个提供给 Minecraft 服主的工具,它提供更新这个服务来减少发布新整合包的各种麻烦,玩家只需要点击“更新”,或者完全不需要点击更新,在启动游戏的瞬间,客户端就在自己更新了,而各位服主只需要在服务器上打包好各类资源,剩下的就交给程序吧。不管是新增文件、修改文件、删除文件,一步到位。

McPatch 通过这种方式优化了 Minecraft 的更新过程,使得更新更加高效和可靠。

## 还有更多?
我们欢迎各位使用者提交 Bug(可以通过[QQ群](https://jq.qq.com/?_wv=1027&k=PqAEtn39)、[Github](https://github.com/BalloonUpdate)),或是在[爱发电](https://afdian.net/a/aprilforest)赞助我们,以便我们开发出更有用的功能。

11 changes: 9 additions & 2 deletions docusaurus.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,13 @@ const config = {
tagline: 'Minecraft客户端文件更新解决方案', //网站简介
favicon: 'img/logo.png', //网站 Icon
url: 'https://docs.mcpatch.akio.top', //网站地址
baseUrl: '/', //路由
baseUrl: '/McPatchDocs/', //路由

// GitHub 编辑引用
organizationName: 'BalloonUpdate', // 用户 & 组织名
projectName: 'McPatchDocs', // 仓库名
onBrokenLinks: 'throw',
onBrokenMarkdownLinks: 'warn',
onBrokenMarkdownLinks: 'throw',

// 国际化
i18n: {
Expand All @@ -34,6 +34,13 @@ const config = {
/** @type {import('@docusaurus/preset-classic').Options} */
({
docs: {
lastVersion: 'v1-old',
versions: {
current: {
label: 'v2',
path: 'v2',
},
},
sidebarPath: './sidebars.js',
editUrl:
'https://github.com/BalloonUpdate/McPatchDocs/tree/V2.0',
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
25 changes: 25 additions & 0 deletions versioned_docs/version-v1-old/advance/cli-interface.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
---
sidebar_position: 6
---

# 命令行直接打包

> 此功能需要管理端 1.1.4 或者更高版本

有时候,你可能需要一个命令行就能启动管理端并且直接进入打包过程,而不是手动输入c然后输入版本号,这样显然对脚本调用管理端不友好

从管理端 1.1.4 开始,新增了一个叫“预输入”的特性,这个特性可以让程序的启动参数直接变成后续的输入

举个栗子,创建一个新版本,通常要先输入c进入创建模式,然后输入2.0这么一个版本号,最后还要在输入y来确认

现在有了预输入这个特性之后,在启动管理端的时候,直接使用`java -jar manager.jar c 2.0 y n q`就能一键创建好一个新版本,无需任何键盘输入

后面的运行参数`c 2.0 y n q`表示这四个参数会依次被模拟成你的手动输入,这对使用脚本调用管理端打包的场景来说非常有用(参数分隔是空格,因此版本号如果包含空格会导致解析失败)

脚本在打包完成之后,可以通过检查管理端的进程退出代码(exit code)来判断打包是否成功,成功会返回0,其它非0值均代表打包失败。打包失败通常是版本号冲突

### 小细节

1. 预输入参数的最后面一定要跟上一个`q`,否则程序在打包完成后,仍会停留在交互式模式下,无法正常退出!
2. 使用预输入参数进行打包之前,脚本可以先把更新记录写入`changelogs.txt`文件,再进行打包。因为使用预输入参数进行打包时,没法手动输入更新记录,更新记录只能提前准备好
3. 脚本可以在打包之前,使用`java -jar manage.jar s q`来输出一下文件修改列表。而不必进入真正的打包过程,这对想要先审阅文件修改列表,再进行打包的脚本来说非常有用
Loading