190 lines
6.9 KiB
JavaScript
190 lines
6.9 KiB
JavaScript
/*
|
|
* CaelLab BY-SA Code License
|
|
* Copyright (c) 2026 Yunyun(云云) By 虚舟实验室(CaelLab) / CaelLabGameTS
|
|
|
|
* Source: https://github.com/yunyun-3782/GoodPlanCraftLauncher
|
|
*/
|
|
|
|
const { contextBridge, ipcRenderer } = require('electron');
|
|
|
|
contextBridge.exposeInMainWorld('gpcl', {
|
|
// 获取游戏目录路径
|
|
getGameDir: () => ipcRenderer.invoke('get-game-dir'),
|
|
|
|
// 扫描本地已安装版本
|
|
scanVersions: (gameDir, silent) => ipcRenderer.invoke('scan-versions', gameDir, silent),
|
|
|
|
// 启动游戏
|
|
launch: (options) => ipcRenderer.invoke('launch-minecraft', options),
|
|
|
|
// 获取远程版本列表
|
|
getVersionManifest: () => ipcRenderer.invoke('get-version-manifest'),
|
|
|
|
// 下载指定版本
|
|
downloadVersion: (versionId, maxConcurrent) => ipcRenderer.invoke('download-version', versionId, maxConcurrent),
|
|
|
|
// 监听游戏日志
|
|
onGameLog: (callback) => {
|
|
ipcRenderer.on('game-log', (event, text) => callback(text));
|
|
},
|
|
|
|
// 监听游戏关闭
|
|
onGameClosed: (callback) => {
|
|
ipcRenderer.on('game-closed', (event, code) => callback(code));
|
|
},
|
|
|
|
// 监听启动错误
|
|
onGameError: (callback) => {
|
|
ipcRenderer.on('game-error', (event, message) => callback(message));
|
|
},
|
|
|
|
// 监听下载进度
|
|
onDownloadProgress: (callback) => {
|
|
ipcRenderer.on('download-progress', (event, data) => callback(data));
|
|
},
|
|
|
|
// 监听关闭确认询问
|
|
onConfirmCloseWhileDownloading: (callback) => {
|
|
ipcRenderer.on('confirm-close-while-downloading', () => callback());
|
|
},
|
|
|
|
// 读取玩家名
|
|
getPlayerName: () => ipcRenderer.invoke('get-player-name'),
|
|
|
|
// 保存玩家名
|
|
savePlayerName: (name) => ipcRenderer.invoke('save-player-name', name),
|
|
|
|
// 显示消息对话框
|
|
showMessageDialog: (options) => ipcRenderer.invoke('show-message-dialog', options),
|
|
|
|
// 确认关闭并清理下载
|
|
confirmCloseDownload: () => ipcRenderer.invoke('confirm-close-download'),
|
|
|
|
// 取消下载(只清理,不关闭窗口)
|
|
cancelDownloadOnly: () => ipcRenderer.invoke('cancel-download-only'),
|
|
|
|
// 获取Java镜像源设置
|
|
getJavaMirrorSettings: () => ipcRenderer.invoke('get-java-mirror-settings'),
|
|
|
|
// 获取Java版本对应的下载URL
|
|
getJavaDownloadUrl: (javaVersion) => ipcRenderer.invoke('get-java-download-url', javaVersion),
|
|
|
|
// 取消关闭
|
|
cancelClose: () => ipcRenderer.invoke('cancel-close'),
|
|
|
|
// 检查Java是否已安装
|
|
checkJava: (versionId) => ipcRenderer.invoke('check-java', versionId),
|
|
|
|
// 显示Java安装对话框
|
|
showJavaInstallDialog: (callback) => {
|
|
ipcRenderer.on('show-java-install-dialog', (event, data) => callback(data));
|
|
},
|
|
|
|
// 选择Java版本
|
|
selectJavaVersion: (data) => ipcRenderer.invoke('select-java-version', data),
|
|
|
|
// 安装Java
|
|
installJava: (javaVersion) => ipcRenderer.invoke('install-java', javaVersion),
|
|
|
|
// 卸载Java
|
|
uninstallJava: (javaVersion) => ipcRenderer.invoke('uninstall-java', javaVersion),
|
|
|
|
// 监听Java安装对话框
|
|
onJavaInstallDialog: (callback) => {
|
|
ipcRenderer.on('show-java-install-dialog', (event, data) => callback(data));
|
|
},
|
|
|
|
// 监听Java下载完成
|
|
onJavaDownloadCompleted: (callback) => {
|
|
ipcRenderer.on('java-download-completed', (event, data) => callback(data));
|
|
},
|
|
|
|
// 监听Java下载失败
|
|
onJavaDownloadFailed: (callback) => {
|
|
ipcRenderer.on('java-download-failed', (event, data) => callback(data));
|
|
},
|
|
|
|
// 监听游戏窗口创建成功
|
|
onGameWindowCreated: (callback) => {
|
|
ipcRenderer.on('game-window-created', (event, data) => callback(data));
|
|
},
|
|
|
|
// 移除所有监听器(避免重复绑定)
|
|
minimizeWindow: () => ipcRenderer.invoke('window-minimize'),
|
|
focusWindow: () => ipcRenderer.invoke('window-focus'),
|
|
closeWindow: () => ipcRenderer.invoke('window-close'),
|
|
deleteVersion: (versionId) => ipcRenderer.invoke('delete-version', versionId),
|
|
getVersionSettings: (versionId) => ipcRenderer.invoke('get-version-settings', versionId),
|
|
saveVersionSettings: (versionId, settings) => ipcRenderer.invoke('save-version-settings', versionId, settings),
|
|
selectDirectory: () => ipcRenderer.invoke('select-directory'),
|
|
cancelLaunch: () => ipcRenderer.invoke('cancel-launch'),
|
|
checkForUpdates: () => ipcRenderer.invoke('check-for-updates'),
|
|
getAppVersion: () => ipcRenderer.invoke('get-app-version'),
|
|
openExternal: (url) => ipcRenderer.invoke('open-external', url),
|
|
|
|
// 获取设置
|
|
getSettings: () => ipcRenderer.invoke('get-settings'),
|
|
|
|
// 保存设置
|
|
saveSettings: (settings) => ipcRenderer.invoke('save-settings', settings),
|
|
|
|
// 重置设置
|
|
resetSettings: () => ipcRenderer.invoke('reset-settings'),
|
|
|
|
// 播放启动动画
|
|
playStartupAnimation: () => ipcRenderer.invoke('play-startup-animation'),
|
|
|
|
// 关闭启动动画
|
|
dismissStartupAnimation: () => ipcRenderer.invoke('dismiss-startup-animation'),
|
|
|
|
// 开发者模式
|
|
setDeveloperMode: (enabled) => ipcRenderer.invoke('set-developer-mode', enabled),
|
|
|
|
// 重启应用
|
|
restartApp: () => ipcRenderer.invoke('restart-app'),
|
|
|
|
// 文件读写
|
|
readJsonFile: (subPath, fileName) => ipcRenderer.invoke('read-json-file', subPath, fileName),
|
|
writeJsonFile: (subPath, fileName, data) => ipcRenderer.invoke('write-json-file', subPath, fileName, data),
|
|
|
|
// 模组加载器版本获取
|
|
getForgeVersions: (mcVersion) => ipcRenderer.invoke('get-forge-versions', mcVersion),
|
|
getFabricVersions: (mcVersion) => ipcRenderer.invoke('get-fabric-versions', mcVersion),
|
|
getOptiFineVersions: (mcVersion) => ipcRenderer.invoke('get-optifine-versions', mcVersion),
|
|
|
|
// 下载带模组加载器的版本
|
|
downloadWithModLoader: (versionId, loaderType, loaderVersion, maxConcurrent) =>
|
|
ipcRenderer.invoke('download-with-modloader', versionId, loaderType, loaderVersion, maxConcurrent),
|
|
|
|
// 读取版本配置
|
|
getVersionConfig: (versionId) => ipcRenderer.invoke('get-version-config', versionId),
|
|
getVersionDisplayName: (versionId) => ipcRenderer.invoke('get-version-display-name', versionId),
|
|
getLaunchDisplayName: (versionId) => ipcRenderer.invoke('get-launch-display-name', versionId),
|
|
|
|
removeAllListeners: () => {
|
|
ipcRenderer.removeAllListeners('game-log');
|
|
ipcRenderer.removeAllListeners('game-closed');
|
|
ipcRenderer.removeAllListeners('game-error');
|
|
ipcRenderer.removeAllListeners('download-progress');
|
|
ipcRenderer.removeAllListeners('confirm-close-while-downloading');
|
|
ipcRenderer.removeAllListeners('show-java-install-dialog');
|
|
ipcRenderer.removeAllListeners('java-download-completed');
|
|
ipcRenderer.removeAllListeners('java-download-failed');
|
|
ipcRenderer.removeAllListeners('game-window-created');
|
|
}
|
|
});
|
|
|
|
// 屏蔽开发者工具快捷键(生产环境)
|
|
window.addEventListener('keydown', e => {
|
|
const key = (e.key || '').toLowerCase();
|
|
if (key === 'f12' ||
|
|
(e.ctrlKey && e.shiftKey && key === 'i') ||
|
|
(e.metaKey && e.altKey && key === 'i')) {
|
|
e.preventDefault();
|
|
}
|
|
}, { capture: true });
|
|
|
|
window.addEventListener('contextmenu', e => {
|
|
e.preventDefault();
|
|
}, { capture: true });
|