- new commit

This commit is contained in:
Gilles Lazures 2025-04-28 04:54:16 +02:00
parent affae5b975
commit 5c8be610f1
10 changed files with 456 additions and 54 deletions

View File

@ -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;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 389 KiB

View File

Before

Width:  |  Height:  |  Size: 420 KiB

After

Width:  |  Height:  |  Size: 420 KiB

View File

Before

Width:  |  Height:  |  Size: 1.8 MiB

After

Width:  |  Height:  |  Size: 1.8 MiB

35
app/assets/js/index.js Normal file
View File

@ -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")
}
}

View File

@ -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
}

View File

@ -4,13 +4,19 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="./assets/css/index.css">
<title>Document</title>
<title>NyanLauncher</title>
</head>
<body>
<main>
<nav>
<img src="./assets/img/logo_no_blanc.png" alt="">
<button class="close" onclick="sys.call('window::close')">
<i class="fas fa-times"></i>
</button>
<nav hidden>
<button class="close" onclick="hideNavBar()">
<i class="fas fa-times"></i>
</button>
<br>
<img src="./assets/img/logo.png" alt="">
<details>
<summary>
<button class="nav" onclick="this.parentNode.click()">
@ -113,9 +119,37 @@
</span>
</button>
</nav>
<footer>
<section class="left">
<button class="default" onclick="showNavBar()">
<i class="fas fa-cog"></i>
</button>
<button class="default">
<i class="far fa-music"></i>
</button>
</section>
<section class="center">
<img class="logo" src="./assets/img/logo.png" alt="">
<br>
<button class="play">
Jouer
</button>
</section>
<section class="right">
<img class="mascot" src="./assets/img/alcaz_mascote.png" alt="">
<p class="players">
<span>
Joueurs :
<span>
0/0
</span>
</span>
</p>
</section>
</footer>
</main>
<script src="./assets/js/inex.js"></script>
<script src="./assets/js/index.js"></script>
</body>
</html>

58
main.js
View File

@ -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
}
}

211
package-lock.json generated
View File

@ -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",

View File

@ -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",