更新README和无法启动的问题
This commit is contained in:
parent
231dcf0a4f
commit
adddc3c725
|
|
@ -11,12 +11,12 @@
|
||||||
### 从源码构建
|
### 从源码构建
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://git.caellab.com/yunyun/GoodPlanCraftLauncher.git
|
git clone https://github.com/yunyun-3782/GoodPlanCraftLaunCher.git
|
||||||
```
|
```
|
||||||
|
|
||||||
### 预编译版本
|
### 预编译版本
|
||||||
|
|
||||||
前往 [Releases](https://git.caellab.com/yunyun/GoodPlanCraftLauncher/releases) 下载对可执行文件。
|
前往 [Releases](https://github.com/yunyun-3782/GoodPlanCraftLaunCher/releases/) 下载可执行文件。
|
||||||
|
|
||||||
## 使用
|
## 使用
|
||||||
|
|
||||||
|
|
@ -42,13 +42,13 @@ npm run build
|
||||||
|
|
||||||
## 贡献
|
## 贡献
|
||||||
|
|
||||||
欢迎提交 [不同意见](https://f.caellab.com/t/problem) 或 [Issue](https://git.caellab.com/yunyun/GoodPlanCraftLauncher/issues) ,同时欢迎开发 衍生 版本。
|
欢迎提交 [不同意见](https://f.caellab.com/t/problem) ,同时欢迎开发 衍生 版本。
|
||||||
|
|
||||||
## 许可证
|
## 许可证
|
||||||
|
|
||||||
本项目采用 [CaelLab BY-SA Code License](https://www.caellab.com/license/bysa-code) 授权。
|
本项目采用 [CaelLab BY-SA Code License](https://www.caellab.com/license/bysa-code) 授权。
|
||||||
|
|
||||||
具体可查看 [LICENSE](https://git.caellab.com/yunyun/GoodPlanCraftLauncher/src/branch/main/LICENSE) 。
|
具体可查看 [LICENSE](https://github.com/yunyun-3782/GoodPlanCraftLaunCher/blob/main/LICENSE) 。
|
||||||
|
|
||||||
---
|
---
|
||||||
很高兴能帮助到你!祝你在MC中玩的愉快!
|
很高兴能帮助到你!祝你在MC中玩的愉快!
|
||||||
|
|
|
||||||
98
main.js
98
main.js
|
|
@ -2546,41 +2546,6 @@ async function detectGameWindow(pid) {
|
||||||
writeLog(`[启动] 开始检测游戏窗口,PID: ${pid}`);
|
writeLog(`[启动] 开始检测游戏窗口,PID: ${pid}`);
|
||||||
|
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
<<<<<<< Updated upstream
|
|
||||||
// 设置超时(最多等待5秒,比原来快3秒)
|
|
||||||
const timeout = setTimeout(() => {
|
|
||||||
writeLog(`[启动] 游戏窗口检测超时,继续启动流程`);
|
|
||||||
if (mainWindow) {
|
|
||||||
mainWindow.webContents.send('game-window-created', { pid: pid, timeout: true });
|
|
||||||
}
|
|
||||||
resolve();
|
|
||||||
}, 5000);
|
|
||||||
|
|
||||||
// 使用更快速的检测方式
|
|
||||||
let checkCount = 0;
|
|
||||||
const maxChecks = 50; // 最多检查50次(5秒)
|
|
||||||
let detected = false;
|
|
||||||
|
|
||||||
// 首先立即发送一次,不等待检测完成
|
|
||||||
writeLog(`[启动] 快速发送创建事件(立即检测)`);
|
|
||||||
setTimeout(() => {
|
|
||||||
if (!detected) {
|
|
||||||
detected = true;
|
|
||||||
if (mainWindow) {
|
|
||||||
mainWindow.webContents.send('game-window-created', { pid: pid, fast: true });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, 1500); // 1.5秒后直接认为启动成功
|
|
||||||
|
|
||||||
const checkInterval = setInterval(() => {
|
|
||||||
checkCount++;
|
|
||||||
|
|
||||||
if (detected) {
|
|
||||||
clearInterval(checkInterval);
|
|
||||||
clearTimeout(timeout);
|
|
||||||
resolve();
|
|
||||||
return;
|
|
||||||
=======
|
|
||||||
let resolved = false;
|
let resolved = false;
|
||||||
const done = () => {
|
const done = () => {
|
||||||
if (resolved) return;
|
if (resolved) return;
|
||||||
|
|
@ -2603,7 +2568,6 @@ async function detectGameWindow(pid) {
|
||||||
try { detector.kill(); } catch {}
|
try { detector.kill(); } catch {}
|
||||||
if (mainWindow && !launchCancelFlag) {
|
if (mainWindow && !launchCancelFlag) {
|
||||||
mainWindow.webContents.send('game-window-created', { pid, timeout: true });
|
mainWindow.webContents.send('game-window-created', { pid, timeout: true });
|
||||||
>>>>>>> Stashed changes
|
|
||||||
}
|
}
|
||||||
done();
|
done();
|
||||||
}, 8000);
|
}, 8000);
|
||||||
|
|
@ -3345,64 +3309,4 @@ function generateLaunchDisplayName(versionId) {
|
||||||
return parts.join(' ');
|
return parts.join(' ');
|
||||||
}
|
}
|
||||||
|
|
||||||
// 安装 Forge
|
|
||||||
async function installForge(mcVersion, forgeVersionId) {
|
|
||||||
writeLog(`[Forge] 安装: ${forgeVersionId}`);
|
|
||||||
|
|
||||||
const versionDir = path.join(GAME_DIR, 'versions', mcVersion);
|
|
||||||
if (!fs.existsSync(versionDir)) {
|
|
||||||
throw new Error(`原版版本 ${mcVersion} 不存在`);
|
|
||||||
}
|
|
||||||
|
|
||||||
// 创建 gpcl 目录
|
|
||||||
const gpclDir = path.join(versionDir, 'gpcl');
|
|
||||||
if (!fs.existsSync(gpclDir)) fs.mkdirSync(gpclDir, { recursive: true });
|
|
||||||
|
|
||||||
// 读取或创建 config.ini
|
|
||||||
const configPath = path.join(gpclDir, 'config.ini');
|
|
||||||
let config = readVersionConfig(mcVersion) || {
|
|
||||||
Minecraft: mcVersion,
|
|
||||||
Forge: '',
|
|
||||||
Fabric: '',
|
|
||||||
OptiFine: ''
|
|
||||||
};
|
|
||||||
config.Minecraft = mcVersion;
|
|
||||||
config.Forge = forgeVersionId;
|
|
||||||
|
|
||||||
// 写入 config.ini
|
|
||||||
const configContent = `[Version]
|
|
||||||
Minecraft=${config.Minecraft}
|
|
||||||
Forge=${config.Forge}
|
|
||||||
Fabric=${config.Fabric || ''}
|
|
||||||
OptiFine=${config.OptiFine || ''}
|
|
||||||
`;
|
|
||||||
fs.writeFileSync(configPath, configContent, 'utf8');
|
|
||||||
|
|
||||||
// 更新 version.json
|
|
||||||
const jsonPath = path.join(versionDir, `${mcVersion}.json`);
|
|
||||||
const versionData = JSON.parse(fs.readFileSync(jsonPath, 'utf8'));
|
|
||||||
versionData.mainClass = 'net.minecraftforge.userdev.LaunchTesting';
|
|
||||||
|
|
||||||
versionData.libraries = versionData.libraries || [];
|
|
||||||
const hasForgeLib = versionData.libraries.some(lib =>
|
|
||||||
lib.name && lib.name.startsWith('net.minecraftforge:forge:')
|
|
||||||
);
|
|
||||||
if (!hasForgeLib) {
|
|
||||||
versionData.libraries.push({
|
|
||||||
name: `net.minecraftforge:forge:${forgeVersionId}`,
|
|
||||||
downloads: {
|
|
||||||
artifact: {
|
|
||||||
url: `https://maven.minecraftforge.net/net/minecraftforge/forge/${forgeVersionId}/forge-${forgeVersionId}.jar`,
|
|
||||||
path: `net/minecraftforge/forge/${forgeVersionId}/forge-${forgeVersionId}.jar`,
|
|
||||||
sha1: '',
|
|
||||||
size: 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
fs.writeFileSync(jsonPath, JSON.stringify(versionData, null, 2));
|
|
||||||
|
|
||||||
writeLog(`[Forge] 安装完成: ${mcVersion} + Forge ${forgeVersionId}`);
|
|
||||||
return mcVersion;
|
|
||||||
}
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue