diff --git a/app/assets/css/index.css b/app/assets/css/index.css index a503251..c8b99b9 100644 --- a/app/assets/css/index.css +++ b/app/assets/css/index.css @@ -1,4 +1,4 @@ -@import url("https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100..900;1,100..900&display=swap"); +@import url('https://fonts.googleapis.com/css2?family=Raleway:ital,wght@0,100..900;1,100..900&family=Roboto:ital,wght@0,100..900;1,100..900&display=swap'); @import url("https://cdn.jsdelivr.net/gh/hung1001/font-awesome-pro@4cac1a6/css/all.css"); * { @@ -60,6 +60,7 @@ button.nav { width: 100%; height: 40px; border: none; + cursor: pointer; font-size: large; text-align: left; padding: 13px 13px 13px 13px; @@ -84,6 +85,16 @@ button.nav > span { color: #ffffff; } +img.logo { + width: 60%; +} + +img.mascot { + width: 50%; + float: right; + margin-top: calc(300px - (50% + 12px)); +} + fieldset { font-size: small; border: none; @@ -99,12 +110,132 @@ input[type=radio] { } button.classic { + color: #ffffff; width: 96%; height: 30px; + border: none; + cursor: pointer; + outline: none; margin-left: 2%; margin-top: 5px; - border: none; - color: #ffffff; + transition: .3s; border-radius: 5px; background-color: #39aa6d; +} + +button.classic:hover { + background-color: #359e66; +} + +button.close { + float: right; + color: #ffffff; + width: 30px; + height: 30px; + border: none; + cursor: pointer; + outline: none; + transition: .5s; + margin-top: 15px; + margin-right: 15px; + border-radius: 5px; + background-color: #0000001c; +} + +button.close:hover { + background-color: #4e4e4e25; +} + +button.play { + background-color: #39AA6D; + color: #FFFFFF; + border: none; + width: 300px; + height: 65px; + font-size: 28px; + font-weight: normal; + cursor: pointer; + margin: auto; + outline: none; + border-radius: 30px 15px 30px 15px; + transition: background-color 0.3s; + text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.8); +} + +button.play:hover { + background-color: #2E8B57; +} + +button.default { + width: 40px; + color: #ffffff; + height: 40px; + cursor: pointer; + border: 0px; + outline: none; + font-size: 16px; + transition: .3s all; + border-radius: 10px; + background-color: #00000036; +} + +button.default:hover { + background-color: #00000060; +} + +p.players { + width: 185px; + padding: 3px 3px 3px 3px; + font-size: larger; + font-style: italic; + background: #f0f0f033; + font-weight: bolder; + border-radius: 15px; + text-align: center; + font-family: "Raleway", sans-serif; + margin-top: calc(300px - 40px); +} + +p.players > span { + width: 100%; +} + +p.players > span > span { + font-family: "Roboto", sans-serif; + text-align: center; +} + +main > footer { + position: absolute; + display: flex; + flex-wrap: wrap; + left: 60px; + right: 60px; + bottom: 70px; + height: 300px; +} + +main > footer > section.left { + width: 20%; + height: 100%; +} + +main > footer > section.left > button.default { + margin-top: calc(300px - (40px + 12px)); +} + +main > footer > section.center { + width: 60%; + height: 100%; + text-align: center; +} + +main > footer > section.right { + width: 20%; + height: 100%; +} + +[hidden] { + display: none; + visibility: hidden; } \ No newline at end of file diff --git a/app/assets/img/alcaz_mascote.png b/app/assets/img/alcaz_mascote.png new file mode 100644 index 0000000..f8cb6c9 Binary files /dev/null and b/app/assets/img/alcaz_mascote.png differ diff --git a/app/assets/img/Catboat_Logo-04.png b/app/assets/img/icon.png similarity index 100% rename from app/assets/img/Catboat_Logo-04.png rename to app/assets/img/icon.png diff --git a/app/assets/img/logo_no_blanc.png b/app/assets/img/logo.png similarity index 100% rename from app/assets/img/logo_no_blanc.png rename to app/assets/img/logo.png diff --git a/app/assets/js/index.js b/app/assets/js/index.js new file mode 100644 index 0000000..88690af --- /dev/null +++ b/app/assets/js/index.js @@ -0,0 +1,35 @@ +const navBar = document.querySelector("nav") +const uiButton = document.querySelector("footer>section.left") +const audio = new Audio() + +function startAudio() { + audio.src = "/app/assets/audio/Golden Hill (Radio Edit).mp3" + audio.loop = true + audio.onended = () => { + if (!audio.paused) { + audio.play() + } + } +} + +function muteAudio() { + audio.muted = true +} + +function unmuteAudio() { + audio.muted = false +} + +function showNavBar() { + navBar.removeAttribute("hidden") + for (const button of uiButton.children) { + button.setAttribute("hidden", "") + } +} + +function hideNavBar() { + navBar.setAttribute("hidden", "") + for (const button of uiButton.children) { + button.removeAttribute("hidden") + } +} \ No newline at end of file diff --git a/app/assets/js/inex.js b/app/assets/js/inex.js deleted file mode 100644 index 10eb378..0000000 --- a/app/assets/js/inex.js +++ /dev/null @@ -1,19 +0,0 @@ -const audio = new Audio() - -function startAudio() { - audio.src = "/app/assets/audio/Golden Hill (Radio Edit).mp3" - audio.loop = true - audio.onended = () => { - if (!audio.paused) { - audio.play() - } - } -} - -function muteAudio() { - audio.muted = true -} - -function unmuteAudio() { - audio.muted = false -} diff --git a/app/logged.html b/app/logged.html index 97f74a0..3b57988 100644 --- a/app/logged.html +++ b/app/logged.html @@ -4,13 +4,19 @@ - Document + NyanLauncher -
-
- + \ No newline at end of file diff --git a/main.js b/main.js index de3936d..d05d711 100644 --- a/main.js +++ b/main.js @@ -1,4 +1,4 @@ -const { BrowserWindow, app, net, dialog, ipcMain } = require("electron") +const { BrowserWindow, app, net, dialog, ipcMain, nativeImage } = require("electron") const os = require("os") const hwid = require("./modules/hwid") const path = require("node:path") @@ -7,13 +7,15 @@ let launcherWindow async function createLauncherWindow() { if (net.isOnline()) { + let win_width = 1550 + let win_height = parseInt(win_width / (16/9)) const isLauncherNotBanned = await checkIfIAmBanned() launcherWindow = new BrowserWindow({ frame: false, - width: 900, - height: 600, - minWidth: 900, - minHeight: 600, + width: win_width, + height: win_height, + minWidth: win_width, + minHeight: win_height, titleBarStyle: "hidden", autoHideMenuBar: true, roundedCorners: false, @@ -21,11 +23,11 @@ async function createLauncherWindow() { webPreferences: { nodeIntegration: false, contextIsolation: true, - preload: path.join(__dirname, "app", "index.html") + preload: path.join(__dirname, "modules", "preload.html") } }) if (isLauncherNotBanned.success) { - launcherWindow.loadFile(path.join(__dirname, "app", "index.html")) + launcherWindow.loadFile(path.join(__dirname, "app", "logged.html")) } else { launcherWindow.loadFile(path.join(__dirname, "app", "banned.html")) launcherWindow.webContents.executeJavaScript(` @@ -34,28 +36,36 @@ async function createLauncherWindow() { setBannedBecause("${isLauncherNotBanned.reason}") `) } + if (os.platform() == "darwin") { + app.dock.setIcon(nativeImage.createFromPath(path.join(__dirname, "app", "assets", "img", "icon.png"))) + } + launcherWindow.setIcon(path.join(__dirname, "app", "assets", "img", "icon.png")) } else { - dialog.showErrorBox("Le launcher requiert une connexion internet.") + dialog.showErrorBox("Connexion internet", "Le launcher requiert une connexion internet.") } } async function checkIfIAmBanned() { - if (net.isOnline()) { - try { - const reponse = await fetch(config, { - body: JSON.stringify({ - hwid: hwid.getHWID() - }) - }) - const json = await reponse.json() - return json - } catch (error) { - dialog.showErrorBox("Impossible de contacter l'API, fermeture du launcher.") - console.error(error) - app.exit() - } - } else { - dialog.showErrorBox("Le launcher requiert une connexion internet.") + // if (net.isOnline()) { + // try { + // const reponse = await fetch(`${config.api.base}${config.api.endpoints.checkBanStatus}`, { + // method: "post", + // body: JSON.stringify({ + // hwid: hwid.getHWID() + // }) + // }) + // const json = await reponse.json() + // return json + // } catch (error) { + // dialog.showErrorBox("Connexion à l'API", "Impossible de contacter l'API, fermeture du launcher.") + // console.error(error) + // app.exit() + // } + // } else { + // dialog.showErrorBox("Connexion internet", "Le launcher requiert une connexion internet.") + // } + return { + success: true } } diff --git a/package-lock.json b/package-lock.json index 6241054..1d4be89 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,7 +15,8 @@ }, "devDependencies": { "electron": "^35.2.1", - "electron-builder": "^26.0.12" + "electron-builder": "^26.0.12", + "electronmon": "^2.0.3" } }, "node_modules/@develar/schema-utils": { @@ -1348,6 +1349,19 @@ "balanced-match": "^1.0.0" } }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/buffer": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", @@ -2453,6 +2467,39 @@ "node": ">=6 <7 || >=8" } }, + "node_modules/electronmon": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/electronmon/-/electronmon-2.0.3.tgz", + "integrity": "sha512-vpsNupi9sCzOCvx8GACbSHKEImkNF2a6pU5Io2yabARbJeQ/8ZuY7t/43LilF6Qw0nZ0MbKQt4sO3x0F3drpQQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "chalk": "^3.0.0", + "import-from": "^3.0.0", + "runtime-required": "^1.1.0", + "watchboy": "^0.4.3" + }, + "bin": { + "electronmon": "bin/cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/electronmon/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -2675,6 +2722,19 @@ "node": ">=10" } }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/foreground-child": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", @@ -3220,6 +3280,19 @@ ], "license": "BSD-3-Clause" }, + "node_modules/import-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", + "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -3320,6 +3393,16 @@ "dev": true, "license": "MIT" }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -3554,6 +3637,13 @@ "dev": true, "license": "MIT" }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "dev": true, + "license": "MIT" + }, "node_modules/log-symbols": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", @@ -3698,6 +3788,20 @@ "node": ">= 0.4" } }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/mime": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", @@ -4028,6 +4132,19 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/normalize-url": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", @@ -4251,6 +4368,29 @@ "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", "license": "MIT" }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/plist": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", @@ -4430,6 +4570,13 @@ "node-addon-api": "^1.3.0" } }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "dev": true, + "license": "ISC" + }, "node_modules/request": { "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", @@ -4521,6 +4668,16 @@ "dev": true, "license": "MIT" }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/responselike": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", @@ -4594,6 +4751,16 @@ "node": ">=8.0" } }, + "node_modules/runtime-required": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/runtime-required/-/runtime-required-1.1.0.tgz", + "integrity": "sha512-yX97f5E0WfNpcQnfVjap6vzQcvErkYYCx6eTK4siqGEdC8lglwypUFgZVTX7ShvIlgfkC4XGFl9O1KTYcff0pw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=4.0.0" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -5135,6 +5302,19 @@ "tmp": "^0.2.0" } }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, "node_modules/tough-cookie": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", @@ -5259,6 +5439,19 @@ "node": ">= 4.0.0" } }, + "node_modules/unixify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz", + "integrity": "sha512-6bc58dPYhCMHHuwxldQxO3RRNZ4eCogZ/st++0+fcC1nr0jiGUtAdBJ2qzmLQWSxbtz42pWt4QQMiZ9HvZf5cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "normalize-path": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -5307,6 +5500,22 @@ "node": ">=0.6.0" } }, + "node_modules/watchboy": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/watchboy/-/watchboy-0.4.3.tgz", + "integrity": "sha512-GHs1HxwvxSMBsqd/WfTOZhj5gBdMqf5HQpfgtKxDfZRxrlYPDdVLRB61LCeRzJaWANmvSIMlfmRVDwVmJFgAKA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lodash.difference": "^4.5.0", + "micromatch": "^4.0.2", + "pify": "^4.0.1", + "unixify": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", diff --git a/package.json b/package.json index a8f7133..11b6c2c 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "description": "a simple minecraft launcher for catboat", "main": "main.js", "scripts": { - "test": "echo \"Error: no test specified\" && exit 1" + "start": "electron .", + "start:dev": "electronmon ." }, "repository": { "type": "git", @@ -18,7 +19,8 @@ "license": "AGPL-3.0-or-later", "devDependencies": { "electron": "^35.2.1", - "electron-builder": "^26.0.12" + "electron-builder": "^26.0.12", + "electronmon": "^2.0.3" }, "dependencies": { "discord-rpc": "^4.0.1",