Sync
This commit is contained in:
parent
13c6f14886
commit
4b8d7f1679
@ -183,6 +183,12 @@ button.default:hover {
|
||||
background-color: #00000060;
|
||||
}
|
||||
|
||||
section.players {
|
||||
position: absolute;
|
||||
bottom: 54px;
|
||||
right: 70px;
|
||||
}
|
||||
|
||||
p.players {
|
||||
width: 185px;
|
||||
padding: 3px 3px 3px 3px;
|
||||
@ -235,6 +241,12 @@ main > footer > section.right {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
main > section.twitch {
|
||||
position: absolute;
|
||||
top: 60px;
|
||||
right: 60px;
|
||||
}
|
||||
|
||||
[hidden] {
|
||||
display: none;
|
||||
visibility: hidden;
|
||||
|
||||
@ -32,4 +32,12 @@ function hideNavBar() {
|
||||
for (const button of uiButton.children) {
|
||||
button.removeAttribute("hidden")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
window.onload = () => {
|
||||
system.call("server::ping")
|
||||
}
|
||||
|
||||
system.result("server::ping", (data) => {
|
||||
playersStatus.innerText = `${data.players.online}/${data.players.max}`
|
||||
})
|
||||
@ -92,15 +92,12 @@
|
||||
<label for="slim">Slim (Alex)</label>
|
||||
</div>
|
||||
</fieldset>
|
||||
<button class="classic" onclick="system.call('skin::set')">
|
||||
<button class="classic" onclick="system.call('skin::set', { variant: temp1.querySelector('input:checked').value })">
|
||||
Choisir le fichier
|
||||
</button>
|
||||
<button class="classic" onclick="system.call('skin::validate')">
|
||||
Valider
|
||||
</button>
|
||||
</article>
|
||||
</details>
|
||||
<button class="nav" onclick="system.openInBrowser('https://catboat.fr')">
|
||||
<button class="nav" onclick="system.openInBrowser('https://nyancraft.catboat.fr/support')">
|
||||
<i class="fas fa-siren-on"></i>
|
||||
<span>
|
||||
Police
|
||||
@ -119,6 +116,19 @@
|
||||
</span>
|
||||
</button>
|
||||
</nav>
|
||||
<section class="twitch">
|
||||
<webview src="https://player.twitch.tv/?channel=catboat&parent=localhost&muted=true" bo></webview>
|
||||
</section>
|
||||
<section class="players">
|
||||
<p class="players">
|
||||
<span>
|
||||
Joueurs :
|
||||
<span id="playersStatus">
|
||||
0/0
|
||||
</span>
|
||||
</span>
|
||||
</p>
|
||||
</section>
|
||||
<footer>
|
||||
<section class="left">
|
||||
<button class="default" onclick="showNavBar()">
|
||||
@ -137,14 +147,6 @@
|
||||
</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>
|
||||
|
||||
@ -4,6 +4,12 @@
|
||||
"endpoints": {
|
||||
"fileHash": "/api/v1/file/hash/",
|
||||
"checkBanStatus": "/api/v1/ban/iam"
|
||||
},
|
||||
"websockets": {
|
||||
"base": "wss://localhost:8535",
|
||||
"rooms": {
|
||||
"updateGameFiles": "/game/updates"
|
||||
}
|
||||
}
|
||||
},
|
||||
"minecraft": {
|
||||
|
||||
82
main.js
82
main.js
@ -1,9 +1,11 @@
|
||||
const { BrowserWindow, app, net, dialog, ipcMain, nativeImage } = require("electron")
|
||||
const { BrowserWindow, app, net, dialog, ipcMain, nativeImage, session, shell } = require("electron")
|
||||
const msmc = require("msmc")
|
||||
const os = require("os")
|
||||
const hwid = require("./modules/hwid")
|
||||
const path = require("node:path")
|
||||
const serverPing = require("./modules/serverPing")
|
||||
const config = require("./config.json")
|
||||
const { Authenticator } = require("minecraft-launcher-core")
|
||||
let launcherWindow, auth, skinPath
|
||||
|
||||
async function createLauncherWindow() {
|
||||
@ -24,11 +26,53 @@ async function createLauncherWindow() {
|
||||
webPreferences: {
|
||||
nodeIntegration: false,
|
||||
contextIsolation: true,
|
||||
preload: path.join(__dirname, "modules", "preload.html")
|
||||
preload: path.join(__dirname, "modules", "preload.js"),
|
||||
webviewTag: true
|
||||
}
|
||||
})
|
||||
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"))
|
||||
if (isLauncherNotBanned.success) {
|
||||
launcherWindow.loadFile(path.join(__dirname, "app", "logged.html"))
|
||||
session.defaultSession.webRequest.onBeforeRequest({
|
||||
urls: [
|
||||
"https://embed.twitch.tv/*channel=*"
|
||||
]
|
||||
}, (details, callback) => {
|
||||
const url = details.url
|
||||
const urlParams = new URLSearchParams(url.replace("https://embed.twitch.tv/", ""))
|
||||
if (urlParams.get("parent")) {
|
||||
callback({})
|
||||
return
|
||||
}
|
||||
|
||||
urlParams.set("parent", "localhost")
|
||||
urlParams.set("referrer", "https://localhost/")
|
||||
|
||||
const redirectUrl = `https://embed.twitch.tv/?${urlParams.toString()}`
|
||||
callback({
|
||||
cancel: false,
|
||||
redirectURL: redirectUrl
|
||||
})
|
||||
})
|
||||
|
||||
session.defaultSession.webRequest.onHeadersReceived({
|
||||
urls: [
|
||||
"https://www.twitch.tv/*",
|
||||
"https://player.twitch.tv/*",
|
||||
"https://embed.twitch.tv/*"
|
||||
]
|
||||
}, (details, callback) => {
|
||||
const responseHeaders = details.responseHeaders
|
||||
delete responseHeaders["Content-Security-Policy"]
|
||||
callback({
|
||||
cancel: false,
|
||||
responseHeaders
|
||||
})
|
||||
})
|
||||
launcherWindow.webContents.openDevTools()
|
||||
} else {
|
||||
launcherWindow.loadFile(path.join(__dirname, "app", "banned.html"))
|
||||
launcherWindow.webContents.executeJavaScript(`
|
||||
@ -37,10 +81,6 @@ 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("Connexion internet", "Le launcher requiert une connexion internet.")
|
||||
}
|
||||
@ -107,11 +147,35 @@ ipcMain.on("call", async (event, data) => {
|
||||
securityScopedBookmarks: true
|
||||
})
|
||||
if (!file.canceled) {
|
||||
skinPath = file.filePaths[0]
|
||||
const confirmDialog = await dialog.showMessageBox(launcherWindow, {
|
||||
type: "question",
|
||||
message: "Êtes-vous sûr de vouloir changer votre skin ?",
|
||||
buttons: [
|
||||
"Oui",
|
||||
"Annuler"
|
||||
],
|
||||
title: "Confirmer le changement de skin"
|
||||
})
|
||||
confirmDialog.response == 0 ? skinPath = file.filePaths[0] : skinPath = null
|
||||
}
|
||||
break
|
||||
case "skin::reset":
|
||||
skinPath = null
|
||||
case "auth::mojang":
|
||||
auth = Authenticator.getAuth(data.args.username, data.args.password)
|
||||
break
|
||||
case "auth::msmc":
|
||||
const authManager = new msmc.Auth("select_account")
|
||||
const xboxManager = await authManager.launch("raw")
|
||||
const token = await xboxManager.getMinecraft()
|
||||
auth = token.mclc()
|
||||
break
|
||||
case "shell::openExternal":
|
||||
shell.openExternal(data.args.url)
|
||||
break
|
||||
case "audio::mute":
|
||||
launcherWindow.webContents.setAudioMuted(true)
|
||||
break
|
||||
case "audio::unmute":
|
||||
launcherWindow.webContents.setAudioMuted(false)
|
||||
break
|
||||
}
|
||||
})
|
||||
@ -13,5 +13,6 @@ function getMojangAuth(username, password) {
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
getMicrosoftAuth
|
||||
getMicrosoftAuth,
|
||||
getMojangAuth
|
||||
}
|
||||
@ -1,6 +1,7 @@
|
||||
const { shell, contextBridge, ipcRenderer } = require("electron")
|
||||
const { contextBridge, ipcRenderer } = require("electron")
|
||||
|
||||
contextBridge.executeInMainWorld("system", {
|
||||
openInBrowser: (url) => shell.openExternal(url),
|
||||
call: (method, args) => ipcRenderer.send("call", { method, args })
|
||||
contextBridge.exposeInMainWorld("system", {
|
||||
openInBrowser: (url) => ipcRenderer.send("call", { method: "shell::openExternal", args: { url } }),
|
||||
call: (method, args) => ipcRenderer.send("call", { method, args }),
|
||||
result: (method, callback) => ipcRenderer.on(`Response<${method}>`, (event, data) => callback(data))
|
||||
})
|
||||
140
package-lock.json
generated
140
package-lock.json
generated
@ -11,7 +11,8 @@
|
||||
"dependencies": {
|
||||
"discord-rpc": "^4.0.1",
|
||||
"minecraft-launcher-core": "^3.18.2",
|
||||
"msmc": "^5.0.5"
|
||||
"msmc": "^5.0.5",
|
||||
"socket.io-client": "^4.8.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"electron": "^35.2.1",
|
||||
@ -827,6 +828,12 @@
|
||||
"url": "https://github.com/sindresorhus/is?sponsor=1"
|
||||
}
|
||||
},
|
||||
"node_modules/@socket.io/component-emitter": {
|
||||
"version": "3.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
|
||||
"integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@szmarczak/http-timer": {
|
||||
"version": "4.0.6",
|
||||
"resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz",
|
||||
@ -2527,6 +2534,66 @@
|
||||
"once": "^1.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/engine.io-client": {
|
||||
"version": "6.6.3",
|
||||
"resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.6.3.tgz",
|
||||
"integrity": "sha512-T0iLjnyNWahNyv/lcjS2y4oE358tVS/SYQNxYXGAJ9/GLgH4VCvOQ/mhTjqU88mLZCQgiG8RIegFHYCdVC+j5w==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@socket.io/component-emitter": "~3.1.0",
|
||||
"debug": "~4.3.1",
|
||||
"engine.io-parser": "~5.2.1",
|
||||
"ws": "~8.17.1",
|
||||
"xmlhttprequest-ssl": "~2.1.1"
|
||||
}
|
||||
},
|
||||
"node_modules/engine.io-client/node_modules/debug": {
|
||||
"version": "4.3.7",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
|
||||
"integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"ms": "^2.1.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"supports-color": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/engine.io-client/node_modules/ws": {
|
||||
"version": "8.17.1",
|
||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
|
||||
"integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"bufferutil": "^4.0.1",
|
||||
"utf-8-validate": ">=5.0.2"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"bufferutil": {
|
||||
"optional": true
|
||||
},
|
||||
"utf-8-validate": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/engine.io-parser": {
|
||||
"version": "5.2.3",
|
||||
"resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz",
|
||||
"integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/env-paths": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
|
||||
@ -4008,7 +4075,6 @@
|
||||
"version": "2.1.3",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
|
||||
"dev": true,
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/msmc": {
|
||||
@ -4922,6 +4988,68 @@
|
||||
"npm": ">= 3.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/socket.io-client": {
|
||||
"version": "4.8.1",
|
||||
"resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.8.1.tgz",
|
||||
"integrity": "sha512-hJVXfu3E28NmzGk8o1sHhN3om52tRvwYeidbj7xKy2eIIse5IoKX3USlS6Tqt3BHAtflLIkCQBkzVrEEfWUyYQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@socket.io/component-emitter": "~3.1.0",
|
||||
"debug": "~4.3.2",
|
||||
"engine.io-client": "~6.6.1",
|
||||
"socket.io-parser": "~4.2.4"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/socket.io-client/node_modules/debug": {
|
||||
"version": "4.3.7",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
|
||||
"integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"ms": "^2.1.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"supports-color": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/socket.io-parser": {
|
||||
"version": "4.2.4",
|
||||
"resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
|
||||
"integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@socket.io/component-emitter": "~3.1.0",
|
||||
"debug": "~4.3.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/socket.io-parser/node_modules/debug": {
|
||||
"version": "4.3.7",
|
||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz",
|
||||
"integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"ms": "^2.1.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.0"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"supports-color": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
"node_modules/socks": {
|
||||
"version": "2.8.4",
|
||||
"resolved": "https://registry.npmjs.org/socks/-/socks-2.8.4.tgz",
|
||||
@ -5642,6 +5770,14 @@
|
||||
"node": ">=8.0"
|
||||
}
|
||||
},
|
||||
"node_modules/xmlhttprequest-ssl": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.1.2.tgz",
|
||||
"integrity": "sha512-TEU+nJVUUnA4CYJFLvK5X9AOeH4KvDvhIfm0vV1GaQRtchnG0hgK5p8hw/xjv8cunWYCsiPCSDzObPyhEwq3KQ==",
|
||||
"engines": {
|
||||
"node": ">=0.4.0"
|
||||
}
|
||||
},
|
||||
"node_modules/y18n": {
|
||||
"version": "5.0.8",
|
||||
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
|
||||
|
||||
@ -25,6 +25,7 @@
|
||||
"dependencies": {
|
||||
"discord-rpc": "^4.0.1",
|
||||
"minecraft-launcher-core": "^3.18.2",
|
||||
"msmc": "^5.0.5"
|
||||
"msmc": "^5.0.5",
|
||||
"socket.io-client": "^4.8.1"
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user