mirror of
https://github.com/zumbiepig/MineXLauncher.git
synced 2025-06-08 03:34:47 +00:00
format with prettier
This commit is contained in:
parent
9c68039064
commit
42f97d6f35
2
.github/workflows/build.yml
vendored
2
.github/workflows/build.yml
vendored
@ -12,6 +12,8 @@ jobs:
|
||||
uses: oven-sh/setup-bun@v2
|
||||
- name: Install dependencies
|
||||
run: bun install --frozen-lockfile
|
||||
- name: Check formatting
|
||||
run: bun run format:check
|
||||
- name: Lint
|
||||
run: bun run lint
|
||||
- name: Build
|
||||
|
3
.prettierignore
Normal file
3
.prettierignore
Normal file
@ -0,0 +1,3 @@
|
||||
src/game/
|
||||
!src/game/web/*.html
|
||||
src/resources/mods/downloads/
|
@ -1,5 +1,5 @@
|
||||
{
|
||||
"printWidth": 200,
|
||||
"printWidth": 120,
|
||||
"useTabs": true,
|
||||
"singleQuote": true
|
||||
}
|
||||
|
6
.vscode/extensions.json
vendored
6
.vscode/extensions.json
vendored
@ -1,7 +1,3 @@
|
||||
{
|
||||
"recommendations": [
|
||||
"oven.bun-vscode",
|
||||
"dbaeumer.vscode-eslint",
|
||||
"esbenp.prettier-vscode"
|
||||
]
|
||||
"recommendations": ["oven.bun-vscode", "dbaeumer.vscode-eslint", "esbenp.prettier-vscode"]
|
||||
}
|
||||
|
2
.vscode/settings.json
vendored
2
.vscode/settings.json
vendored
@ -1,5 +1,5 @@
|
||||
{
|
||||
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||
"editor.formatOnPaste": true,
|
||||
"livePreview.serverRoot": "public",
|
||||
"livePreview.serverRoot": "public"
|
||||
}
|
||||
|
8
build.ts
8
build.ts
@ -70,7 +70,7 @@ if (!isDev) {
|
||||
minifyCSS: true,
|
||||
minifyJS: true,
|
||||
continueOnParseError: true,
|
||||
})
|
||||
}),
|
||||
);
|
||||
});
|
||||
|
||||
@ -84,7 +84,7 @@ if (!isDev) {
|
||||
//optionsPreset: 'medium-obfuscation',
|
||||
target: 'browser',
|
||||
})
|
||||
.getObfuscatedCode()
|
||||
.getObfuscatedCode(),
|
||||
);
|
||||
});
|
||||
}
|
||||
@ -104,8 +104,8 @@ writeFileSync(
|
||||
JSON.stringify(
|
||||
getFiles(publicDir).map((asset) => {
|
||||
return asset.replace(new RegExp(`^${publicDir}`), '').replace(/\/index\.html$/, '/');
|
||||
})
|
||||
)
|
||||
}),
|
||||
),
|
||||
);
|
||||
|
||||
console.log(chalk.green('Build complete!\n'));
|
||||
|
@ -8,7 +8,9 @@
|
||||
"lint": "eslint ./src/resources/scripts/ && tsc",
|
||||
"lint:fix": "eslint --fix ./src/resources/scripts/ && tsc",
|
||||
"build": "NODE_ENV=production bun run ./build.ts",
|
||||
"build:dev": "NODE_ENV=development bun run ./build.ts"
|
||||
"build:dev": "NODE_ENV=development bun run ./build.ts",
|
||||
"format": "prettier --write .",
|
||||
"format:check": "prettier --check ."
|
||||
},
|
||||
"dependencies": {
|
||||
"chalk": "^5.3.0",
|
||||
@ -39,6 +41,7 @@
|
||||
"eslint": "^9.9.1",
|
||||
"html-minifier": "^4.0.0",
|
||||
"javascript-obfuscator": "^4.1.1",
|
||||
"prettier": "^3.3.3",
|
||||
"typescript-eslint": "^8.4.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
|
@ -28,7 +28,7 @@ debugLogger('Booting server.');
|
||||
app.use(
|
||||
helmet({
|
||||
contentSecurityPolicy: false,
|
||||
})
|
||||
}),
|
||||
);
|
||||
|
||||
app.use(morgan(isDev ? 'dev' : 'combined'));
|
||||
@ -64,7 +64,9 @@ app
|
||||
})
|
||||
.on('error', (error) => {
|
||||
if (error.code === 'EADDRINUSE') {
|
||||
console.error(chalk.red('EADDRINUSE') + chalk.gray(': ') + chalk.bold(`Failed to start server. Is port ${PORT} in use?`));
|
||||
console.error(
|
||||
chalk.red('EADDRINUSE') + chalk.gray(': ') + chalk.bold(`Failed to start server. Is port ${PORT} in use?`),
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
});
|
||||
|
24
src/404.html
24
src/404.html
@ -1,4 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
<!doctype html>
|
||||
<html lang="en" style="display: none">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
@ -13,7 +13,14 @@
|
||||
</head>
|
||||
<body>
|
||||
<div class="ads-container">
|
||||
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins>
|
||||
<ins
|
||||
class="adsbygoogle"
|
||||
style="display: block"
|
||||
data-ad-client="ca-pub-1132419379737567"
|
||||
data-ad-slot="3280170072"
|
||||
data-ad-format="auto"
|
||||
data-full-width-responsive="true"
|
||||
></ins>
|
||||
</div>
|
||||
<div class="launcher">
|
||||
<div class="title-bar">
|
||||
@ -31,7 +38,9 @@
|
||||
</div>
|
||||
<div class="bottom-bar">
|
||||
<div class="bottom-bar-links">
|
||||
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank">Join the MineXLauncher Discord</a>
|
||||
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank"
|
||||
>Join the MineXLauncher Discord</a
|
||||
>
|
||||
</div>
|
||||
<div class="bottom-bar-links">
|
||||
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
|
||||
@ -39,7 +48,14 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="ads-container">
|
||||
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins>
|
||||
<ins
|
||||
class="adsbygoogle"
|
||||
style="display: block"
|
||||
data-ad-client="ca-pub-1132419379737567"
|
||||
data-ad-slot="3280170072"
|
||||
data-ad-format="auto"
|
||||
data-full-width-responsive="true"
|
||||
></ins>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
<!doctype html>
|
||||
<html lang="en" style="display: none">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
@ -12,7 +12,14 @@
|
||||
</head>
|
||||
<body>
|
||||
<div class="ads-container">
|
||||
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins>
|
||||
<ins
|
||||
class="adsbygoogle"
|
||||
style="display: block"
|
||||
data-ad-client="ca-pub-1132419379737567"
|
||||
data-ad-slot="3280170072"
|
||||
data-ad-format="auto"
|
||||
data-full-width-responsive="true"
|
||||
></ins>
|
||||
</div>
|
||||
<div class="launcher">
|
||||
<div class="title-bar">
|
||||
@ -21,32 +28,32 @@
|
||||
<div class="content">
|
||||
<div class="sidebar">
|
||||
<div class="profile">
|
||||
<span class="profile-name"></span>
|
||||
<span></span>
|
||||
</div>
|
||||
<nav class="nav-bar">
|
||||
<li class="nav-item" onclick="navigate.updates()">
|
||||
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" />
|
||||
<span class="nav-text">Updates</span>
|
||||
<li onclick="navigate.updates()">
|
||||
<img src="/resources/images/icons/nav/updates.webp" />
|
||||
<span>Updates</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.home.game()">
|
||||
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" />
|
||||
<span class="nav-text">Game</span>
|
||||
<li onclick="navigate.home.game()">
|
||||
<img src="/resources/images/icons/nav/game.webp" />
|
||||
<span>Game</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.servers()">
|
||||
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" />
|
||||
<span class="nav-text">Server List</span>
|
||||
<li onclick="navigate.servers()">
|
||||
<img src="/resources/images/icons/nav/servers.webp" />
|
||||
<span>Server List</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.mods.mods()">
|
||||
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" />
|
||||
<span class="nav-text">Mods</span>
|
||||
<li onclick="navigate.mods.mods()">
|
||||
<img src="/resources/images/icons/nav/mods.webp" />
|
||||
<span>Mods</span>
|
||||
</li>
|
||||
<li class="nav-item selected" onclick="navigate.articles()">
|
||||
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" />
|
||||
<span class="nav-text">Tutorials</span>
|
||||
<li class="selected" onclick="navigate.articles()">
|
||||
<img src="/resources/images/icons/nav/articles.webp" />
|
||||
<span>Tutorials</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.settings()">
|
||||
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" />
|
||||
<span class="nav-text">Settings</span>
|
||||
<li onclick="navigate.settings()">
|
||||
<img src="/resources/images/icons/nav/settings.webp" />
|
||||
<span>Settings</span>
|
||||
</li>
|
||||
</nav>
|
||||
</div>
|
||||
@ -60,14 +67,22 @@
|
||||
<img class="article-icon" loading="lazy" src="/resources/images/icons/articles/mc-server.webp" />
|
||||
<div class="article-details">
|
||||
<strong class="article-name">How To Make An Eaglercraft Server</strong>
|
||||
<p class="article-description">Have you ever wondered how to make an Eaglercraft Server? Read this article to find out how!</p>
|
||||
<p class="article-description">
|
||||
Have you ever wondered how to make an Eaglercraft Server? Read this article to find out how!
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="article-item" onclick="article.open('cloudflare-tunnel')">
|
||||
<img class="article-icon" loading="lazy" src="/resources/images/icons/articles/cloudflare-tunnel.webp" />
|
||||
<img
|
||||
class="article-icon"
|
||||
loading="lazy"
|
||||
src="/resources/images/icons/articles/cloudflare-tunnel.webp"
|
||||
/>
|
||||
<div class="article-details">
|
||||
<strong class="article-name">Setting Up a Cloudflare Tunnel for an Eaglercraft Server</strong>
|
||||
<p class="article-description">This brief guide walks you through configuring a Cloudflare Tunnel for your Eaglercraft server.</p>
|
||||
<p class="article-description">
|
||||
This brief guide walks you through configuring a Cloudflare Tunnel for your Eaglercraft server.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@ -76,7 +91,9 @@
|
||||
</div>
|
||||
<div class="bottom-bar">
|
||||
<div class="bottom-bar-links">
|
||||
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank">Join the MineXLauncher Discord</a>
|
||||
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank"
|
||||
>Join the MineXLauncher Discord</a
|
||||
>
|
||||
</div>
|
||||
<div class="bottom-bar-links">
|
||||
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
|
||||
@ -84,7 +101,14 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="ads-container">
|
||||
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins>
|
||||
<ins
|
||||
class="adsbygoogle"
|
||||
style="display: block"
|
||||
data-ad-client="ca-pub-1132419379737567"
|
||||
data-ad-slot="3280170072"
|
||||
data-ad-format="auto"
|
||||
data-full-width-responsive="true"
|
||||
></ins>
|
||||
</div>
|
||||
<div id="article-mc-server" class="article">
|
||||
<div class="article-content">
|
||||
@ -96,16 +120,27 @@
|
||||
<h3>Prerequisites</h3>
|
||||
<ul>
|
||||
<li>A server/computer with stable internet access and decent bandwidth</li>
|
||||
<li>Java 17 installed (Get it from <a href="https://adoptium.net/temurin/releases/?version=17" target="_blank">here</a>)</li>
|
||||
<li>
|
||||
Java 17 installed (Get it from
|
||||
<a href="https://adoptium.net/temurin/releases/?version=17" target="_blank">here</a>)
|
||||
</li>
|
||||
<li>Basic knowledge of your OS's command-line/terminal</li>
|
||||
<li>Access to your network router (for port forwarding)</li>
|
||||
</ul>
|
||||
<h3>Step 1: Set Up Bungee</h3>
|
||||
<ol>
|
||||
<li>Download the latest version of Bungee from <a href="https://ci.md-5.net/job/BungeeCord/lastSuccessfulBuild/artifact/bootstrap/target/BungeeCord.jar" target="_blank">here</a>.</li>
|
||||
<li>
|
||||
Download the latest version of Bungee from
|
||||
<a
|
||||
href="https://ci.md-5.net/job/BungeeCord/lastSuccessfulBuild/artifact/bootstrap/target/BungeeCord.jar"
|
||||
target="_blank"
|
||||
>here</a
|
||||
>.
|
||||
</li>
|
||||
<li>Create a new directory for your server and place the Bungee JAR file in it</li>
|
||||
<li>
|
||||
Create a start script (e.g., <code>start.bat</code> for Windows or <code>start.sh</code> for Linux) with the following content:
|
||||
Create a start script (e.g., <code>start.bat</code> for Windows or <code>start.sh</code> for Linux) with the
|
||||
following content:
|
||||
<pre><code>java -Xms512M -Xmx512M -jar bungee.jar</code></pre>
|
||||
</li>
|
||||
<li>Run the start script to generate configuration files, then stop the server</li>
|
||||
@ -116,18 +151,30 @@
|
||||
<li>Download a compatible Minecraft server JAR (e.g., Paper)</li>
|
||||
<li>Set up the backend server in a separate directory</li>
|
||||
<li>
|
||||
Create a start script (e.g., <code>start.bat</code> for Windows or <code>start.sh</code> for Linux) with the following content:
|
||||
Create a start script (e.g., <code>start.bat</code> for Windows or <code>start.sh</code> for Linux) with the
|
||||
following content:
|
||||
<pre><code>java -Xms1024M -Xmx1024M -jar server.jar</code></pre>
|
||||
</li>
|
||||
<li>Configure <code>server.properties</code> (Disable online mode, change the port, etc.)</li>
|
||||
<li>Configure <code>spigot.yml</code> to have this: <code>bungeecord: true</code></li>
|
||||
<li>If your server is on a different version than 1.8.8, you need to download the <a href="https://viaversion.com/setup" target="_blank">ViaVersion plugins</a>.</li>
|
||||
<li>Add the backend server to your Bungee <code>config.yml</code> by scrolling to the servers section and editing/adding an entry for your server, such as <code>localhost:port</code>.</li>
|
||||
<li>
|
||||
If your server is on a different version than 1.8.8, you need to download the
|
||||
<a href="https://viaversion.com/setup" target="_blank">ViaVersion plugins</a>.
|
||||
</li>
|
||||
<li>
|
||||
Add the backend server to your Bungee <code>config.yml</code> by scrolling to the servers section and
|
||||
editing/adding an entry for your server, such as <code>localhost:port</code>.
|
||||
</li>
|
||||
</ol>
|
||||
<h3>Step 3: Install EaglerXBungee Plugin</h3>
|
||||
<ol>
|
||||
<li>
|
||||
Download the EaglerXBungee plugin from <a href="https://git.eaglercraft.rip/eaglercraft/eaglercraft-builds/raw/branch/main/EaglercraftX_1.8_EaglerXBungee.jar" target="_blank">here</a>.
|
||||
Download the EaglerXBungee plugin from
|
||||
<a
|
||||
href="https://git.eaglercraft.rip/eaglercraft/eaglercraft-builds/raw/branch/main/EaglercraftX_1.8_EaglerXBungee.jar"
|
||||
target="_blank"
|
||||
>here</a
|
||||
>.
|
||||
</li>
|
||||
<li>Place the downloaded JAR file in the Bungee server's <code>plugins</code> folder</li>
|
||||
<li>Restart the Bungee server to generate the plugin's configuration files</li>
|
||||
@ -144,7 +191,10 @@
|
||||
<h3>Step 5: Port Forwarding</h3>
|
||||
<ol>
|
||||
<li>Access your router's admin panel</li>
|
||||
<li>Set up port forwarding for port <code>8081</code> (or whichever port you configured for EaglerXBungee) to your server's local IP address</li>
|
||||
<li>
|
||||
Set up port forwarding for port <code>8081</code> (or whichever port you configured for EaglerXBungee) to
|
||||
your server's local IP address
|
||||
</li>
|
||||
</ol>
|
||||
<h3>Step 6: Domain Configuration (Optional)</h3>
|
||||
<p>If you want to use a custom domain:</p>
|
||||
@ -158,12 +208,18 @@
|
||||
<li>Restart Caddy to apply these changes, using <code>caddy stop</code> and <code>caddy start</code>.</li>
|
||||
</ol>
|
||||
<h3>Step 7: Connecting to Your Server</h3>
|
||||
<p>Players can connect to your server using an Eaglercraft client such as MineXLauncher, and entering your server's IP address or domain and port.</p>
|
||||
<p>
|
||||
Players can connect to your server using an Eaglercraft client such as MineXLauncher, and entering your
|
||||
server's IP address or domain and port.
|
||||
</p>
|
||||
<p>Examples:</p>
|
||||
<li><code>wss://localhost</code></li>
|
||||
<li><code>wss://example.com</code></li>
|
||||
<h3>Security Considerations</h3>
|
||||
<p>Ensure you keep all software (especially the EaglerXBungee plugin) up to date and properly secure your server to protect against potential vulnerabilities.</p>
|
||||
<p>
|
||||
Ensure you keep all software (especially the EaglerXBungee plugin) up to date and properly secure your server
|
||||
to protect against potential vulnerabilities.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="article-cloudflare-tunnel" class="article">
|
||||
@ -171,7 +227,10 @@
|
||||
<span class="close-button" onclick="article.close('cloudflare-tunnel')">×</span>
|
||||
<h1>Setting Up a Cloudflare Tunnel for an Eaglercraft Server</h1>
|
||||
<h5>Written by zumbiepig and SpeedSlicer</h5>
|
||||
<p>In this guide, we'll walk you through the steps to set up a Cloudflare Tunnel for your Eaglercraft server, which is running on <code>ws://localhost:8081</code>.</p>
|
||||
<p>
|
||||
In this guide, we'll walk you through the steps to set up a Cloudflare Tunnel for your Eaglercraft server,
|
||||
which is running on <code>ws://localhost:8081</code>.
|
||||
</p>
|
||||
<h3>Prerequisites</h3>
|
||||
<ul>
|
||||
<li>An Eaglercraft server running on <code>ws://localhost:8081</code></li>
|
||||
@ -180,7 +239,10 @@
|
||||
</ul>
|
||||
<h3>Step 1: Access Cloudflare Tunnels</h3>
|
||||
<ol>
|
||||
<li>Go to the <a href="https://dash.cloudflare.com/" target="_blank">Dashboard</a> and log in to your Cloudflare account.</li>
|
||||
<li>
|
||||
Go to the <a href="https://dash.cloudflare.com/" target="_blank">Dashboard</a> and log in to your Cloudflare
|
||||
account.
|
||||
</li>
|
||||
<li>Navigate to the <strong>Zero Trust</strong> page using the navigation bar on the left.</li>
|
||||
<li>Sign up for Cloudflare Zero Trust with the Free Plan if you have not already.</li>
|
||||
<li>Once you are in the dashboard, navigate to <strong>Networks</strong> > <strong>Tunnels</strong>.</li>
|
||||
@ -190,7 +252,10 @@
|
||||
<li>Click on <strong>Create a tunnel</strong>, and select <strong>Cloudflared</strong>.</li>
|
||||
<li>Click <strong>Next</strong>.</li>
|
||||
<li>Enter a name for the tunnel.</li>
|
||||
<li>Follow the instructions provided on the site to install the tunnel.<br />You should do these instructions on the computer that your Eaglercraft server is running on.</li>
|
||||
<li>
|
||||
Follow the instructions provided on the site to install the tunnel.<br />You should do these instructions on
|
||||
the computer that your Eaglercraft server is running on.
|
||||
</li>
|
||||
</ol>
|
||||
<h3>Step 3: Configure Domain/Subdomain</h3>
|
||||
<ol>
|
||||
@ -202,7 +267,10 @@
|
||||
<ol>
|
||||
<li>Start your Eaglercraft server.</li>
|
||||
<li>In Eaglercraft, connect to the domain or subdomain you set up.</li>
|
||||
<li>You're all set! Players can now join your server using the domain that you linked your tunnel to.<br />Example: <code>wss://example.com</code></li>
|
||||
<li>
|
||||
You're all set! Players can now join your server using the domain that you linked your tunnel to.<br />Example:
|
||||
<code>wss://example.com</code>
|
||||
</li>
|
||||
</ol>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
<!doctype html>
|
||||
<html lang="en" style="display: none">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
@ -12,7 +12,14 @@
|
||||
</head>
|
||||
<body>
|
||||
<div class="ads-container">
|
||||
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins>
|
||||
<ins
|
||||
class="adsbygoogle"
|
||||
style="display: block"
|
||||
data-ad-client="ca-pub-1132419379737567"
|
||||
data-ad-slot="3280170072"
|
||||
data-ad-format="auto"
|
||||
data-full-width-responsive="true"
|
||||
></ins>
|
||||
</div>
|
||||
<div class="launcher">
|
||||
<div class="title-bar">
|
||||
@ -21,32 +28,32 @@
|
||||
<div class="content">
|
||||
<div class="sidebar">
|
||||
<div class="profile">
|
||||
<span class="profile-name"></span>
|
||||
<span></span>
|
||||
</div>
|
||||
<nav class="nav-bar">
|
||||
<li class="nav-item" onclick="navigate.updates()">
|
||||
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" />
|
||||
<span class="nav-text">Updates</span>
|
||||
<li onclick="navigate.updates()">
|
||||
<img src="/resources/images/icons/nav/updates.webp" />
|
||||
<span>Updates</span>
|
||||
</li>
|
||||
<li class="nav-item selected" onclick="navigate.home.game()">
|
||||
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" />
|
||||
<span class="nav-text">Game</span>
|
||||
<li class="selected" onclick="navigate.home.game()">
|
||||
<img src="/resources/images/icons/nav/game.webp" />
|
||||
<span>Game</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.servers()">
|
||||
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" />
|
||||
<span class="nav-text">Server List</span>
|
||||
<li onclick="navigate.servers()">
|
||||
<img src="/resources/images/icons/nav/servers.webp" />
|
||||
<span>Server List</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.mods.mods()">
|
||||
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" />
|
||||
<span class="nav-text">Mods</span>
|
||||
<li onclick="navigate.mods.mods()">
|
||||
<img src="/resources/images/icons/nav/mods.webp" />
|
||||
<span>Mods</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.articles()">
|
||||
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" />
|
||||
<span class="nav-text">Tutorials</span>
|
||||
<li onclick="navigate.articles()">
|
||||
<img src="/resources/images/icons/nav/articles.webp" />
|
||||
<span>Tutorials</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.settings()">
|
||||
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" />
|
||||
<span class="nav-text">Settings</span>
|
||||
<li onclick="navigate.settings()">
|
||||
<img src="/resources/images/icons/nav/settings.webp" />
|
||||
<span>Settings</span>
|
||||
</li>
|
||||
</nav>
|
||||
</div>
|
||||
@ -183,7 +190,6 @@
|
||||
<option value="22m02a">22m02a</option>
|
||||
<option value="22m01a">22m01a</option>
|
||||
</optgroup>
|
||||
</optgroup>
|
||||
<optgroup label="Pre-Releases">
|
||||
<option value="21m12-24">21m12-24</option>
|
||||
<option value="21m12-17">21m12-17</option>
|
||||
@ -205,15 +211,32 @@
|
||||
</select>
|
||||
<button class="archive-button" onclick="game.archive('b1.3')">Open</button>
|
||||
</div>
|
||||
<button class="archive-link" onclick="window.open('https://archive.eaglercraft.rip/EaglercraftX_1.8/server/')">1.8 EaglerXBungee Jar</button>
|
||||
<button class="archive-link" onclick="window.open('https://archive.eaglercraft.rip/Eaglercraft_1.5/server/')">Eaglercraft 1.5 Server</button>
|
||||
<button class="archive-link" onclick="window.open('https://archive.eaglercraft.rip/Eaglercraft_b1.3/server/')">Eaglercraft Beta 1.3 Server</button>
|
||||
<button
|
||||
class="archive-link"
|
||||
onclick="window.open('https://archive.eaglercraft.rip/EaglercraftX_1.8/server/')"
|
||||
>
|
||||
1.8 EaglerXBungee Jar
|
||||
</button>
|
||||
<button
|
||||
class="archive-link"
|
||||
onclick="window.open('https://archive.eaglercraft.rip/Eaglercraft_1.5/server/')"
|
||||
>
|
||||
Eaglercraft 1.5 Server
|
||||
</button>
|
||||
<button
|
||||
class="archive-link"
|
||||
onclick="window.open('https://archive.eaglercraft.rip/Eaglercraft_b1.3/server/')"
|
||||
>
|
||||
Eaglercraft Beta 1.3 Server
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bottom-bar">
|
||||
<div class="bottom-bar-links">
|
||||
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank">Join the MineXLauncher Discord</a>
|
||||
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank"
|
||||
>Join the MineXLauncher Discord</a
|
||||
>
|
||||
</div>
|
||||
<div class="bottom-bar-links">
|
||||
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
|
||||
@ -221,7 +244,14 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="ads-container">
|
||||
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins>
|
||||
<ins
|
||||
class="adsbygoogle"
|
||||
style="display: block"
|
||||
data-ad-client="ca-pub-1132419379737567"
|
||||
data-ad-slot="3280170072"
|
||||
data-ad-format="auto"
|
||||
data-full-width-responsive="true"
|
||||
></ins>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
<!doctype html>
|
||||
<html lang="en" style="display: none">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
@ -12,7 +12,14 @@
|
||||
</head>
|
||||
<body>
|
||||
<div class="ads-container">
|
||||
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins>
|
||||
<ins
|
||||
class="adsbygoogle"
|
||||
style="display: block"
|
||||
data-ad-client="ca-pub-1132419379737567"
|
||||
data-ad-slot="3280170072"
|
||||
data-ad-format="auto"
|
||||
data-full-width-responsive="true"
|
||||
></ins>
|
||||
</div>
|
||||
<div class="launcher">
|
||||
<div class="title-bar">
|
||||
@ -21,32 +28,32 @@
|
||||
<div class="content">
|
||||
<div class="sidebar">
|
||||
<div class="profile">
|
||||
<span class="profile-name"></span>
|
||||
<span></span>
|
||||
</div>
|
||||
<nav class="nav-bar">
|
||||
<li class="nav-item" onclick="navigate.updates()">
|
||||
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" />
|
||||
<span class="nav-text">Updates</span>
|
||||
<li onclick="navigate.updates()">
|
||||
<img src="/resources/images/icons/nav/updates.webp" />
|
||||
<span>Updates</span>
|
||||
</li>
|
||||
<li class="nav-item selected" onclick="navigate.home.game()">
|
||||
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" />
|
||||
<span class="nav-text">Game</span>
|
||||
<li class="selected" onclick="navigate.home.game()">
|
||||
<img src="/resources/images/icons/nav/game.webp" />
|
||||
<span>Game</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.servers()">
|
||||
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" />
|
||||
<span class="nav-text">Server List</span>
|
||||
<li onclick="navigate.servers()">
|
||||
<img src="/resources/images/icons/nav/servers.webp" />
|
||||
<span>Server List</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.mods.mods()">
|
||||
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" />
|
||||
<span class="nav-text">Mods</span>
|
||||
<li onclick="navigate.mods.mods()">
|
||||
<img src="/resources/images/icons/nav/mods.webp" />
|
||||
<span>Mods</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.articles()">
|
||||
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" />
|
||||
<span class="nav-text">Tutorials</span>
|
||||
<li onclick="navigate.articles()">
|
||||
<img src="/resources/images/icons/nav/articles.webp" />
|
||||
<span>Tutorials</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.settings()">
|
||||
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" />
|
||||
<span class="nav-text">Settings</span>
|
||||
<li onclick="navigate.settings()">
|
||||
<img src="/resources/images/icons/nav/settings.webp" />
|
||||
<span>Settings</span>
|
||||
</li>
|
||||
</nav>
|
||||
</div>
|
||||
@ -98,7 +105,9 @@
|
||||
</div>
|
||||
<div class="bottom-bar">
|
||||
<div class="bottom-bar-links">
|
||||
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank">Join the MineXLauncher Discord</a>
|
||||
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank"
|
||||
>Join the MineXLauncher Discord</a
|
||||
>
|
||||
</div>
|
||||
<div class="bottom-bar-links">
|
||||
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
|
||||
@ -106,7 +115,14 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="ads-container">
|
||||
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins>
|
||||
<ins
|
||||
class="adsbygoogle"
|
||||
style="display: block"
|
||||
data-ad-client="ca-pub-1132419379737567"
|
||||
data-ad-slot="3280170072"
|
||||
data-ad-format="auto"
|
||||
data-full-width-responsive="true"
|
||||
></ins>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
<!doctype html>
|
||||
<html lang="en" style="display: none">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
@ -12,7 +12,14 @@
|
||||
</head>
|
||||
<body>
|
||||
<div class="ads-container">
|
||||
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins>
|
||||
<ins
|
||||
class="adsbygoogle"
|
||||
style="display: block"
|
||||
data-ad-client="ca-pub-1132419379737567"
|
||||
data-ad-slot="3280170072"
|
||||
data-ad-format="auto"
|
||||
data-full-width-responsive="true"
|
||||
></ins>
|
||||
</div>
|
||||
<div class="launcher">
|
||||
<div class="title-bar">
|
||||
@ -21,32 +28,32 @@
|
||||
<div class="content">
|
||||
<div class="sidebar">
|
||||
<div class="profile">
|
||||
<span class="profile-name"></span>
|
||||
<span></span>
|
||||
</div>
|
||||
<nav class="nav-bar">
|
||||
<li class="nav-item" onclick="navigate.updates()">
|
||||
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" />
|
||||
<span class="nav-text">Updates</span>
|
||||
<li onclick="navigate.updates()">
|
||||
<img src="/resources/images/icons/nav/updates.webp" />
|
||||
<span>Updates</span>
|
||||
</li>
|
||||
<li class="nav-item selected" onclick="navigate.home.game()">
|
||||
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" />
|
||||
<span class="nav-text">Game</span>
|
||||
<li class="selected" onclick="navigate.home.game()">
|
||||
<img src="/resources/images/icons/nav/game.webp" />
|
||||
<span>Game</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.servers()">
|
||||
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" />
|
||||
<span class="nav-text">Server List</span>
|
||||
<li onclick="navigate.servers()">
|
||||
<img src="/resources/images/icons/nav/servers.webp" />
|
||||
<span>Server List</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.mods.mods()">
|
||||
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" />
|
||||
<span class="nav-text">Mods</span>
|
||||
<li onclick="navigate.mods.mods()">
|
||||
<img src="/resources/images/icons/nav/mods.webp" />
|
||||
<span>Mods</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.articles()">
|
||||
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" />
|
||||
<span class="nav-text">Tutorials</span>
|
||||
<li onclick="navigate.articles()">
|
||||
<img src="/resources/images/icons/nav/articles.webp" />
|
||||
<span>Tutorials</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.settings()">
|
||||
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" />
|
||||
<span class="nav-text">Settings</span>
|
||||
<li onclick="navigate.settings()">
|
||||
<img src="/resources/images/icons/nav/settings.webp" />
|
||||
<span>Settings</span>
|
||||
</li>
|
||||
</nav>
|
||||
</div>
|
||||
@ -90,7 +97,14 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="ads-container">
|
||||
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins>
|
||||
<ins
|
||||
class="adsbygoogle"
|
||||
style="display: block"
|
||||
data-ad-client="ca-pub-1132419379737567"
|
||||
data-ad-slot="3280170072"
|
||||
data-ad-format="auto"
|
||||
data-full-width-responsive="true"
|
||||
></ins>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
<!doctype html>
|
||||
<html lang="en" style="display: none">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
@ -12,7 +12,14 @@
|
||||
</head>
|
||||
<body>
|
||||
<div class="ads-container">
|
||||
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins>
|
||||
<ins
|
||||
class="adsbygoogle"
|
||||
style="display: block"
|
||||
data-ad-client="ca-pub-1132419379737567"
|
||||
data-ad-slot="3280170072"
|
||||
data-ad-format="auto"
|
||||
data-full-width-responsive="true"
|
||||
></ins>
|
||||
</div>
|
||||
<div class="launcher">
|
||||
<div class="title-bar">
|
||||
@ -21,32 +28,32 @@
|
||||
<div class="content">
|
||||
<div class="sidebar">
|
||||
<div class="profile">
|
||||
<span class="profile-name"></span>
|
||||
<span></span>
|
||||
</div>
|
||||
<nav class="nav-bar">
|
||||
<li class="nav-item" onclick="navigate.updates()">
|
||||
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" />
|
||||
<span class="nav-text">Updates</span>
|
||||
<li onclick="navigate.updates()">
|
||||
<img src="/resources/images/icons/nav/updates.webp" />
|
||||
<span>Updates</span>
|
||||
</li>
|
||||
<li class="nav-item selected" onclick="navigate.home.game()">
|
||||
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" />
|
||||
<span class="nav-text">Game</span>
|
||||
<li class="selected" onclick="navigate.home.game()">
|
||||
<img src="/resources/images/icons/nav/game.webp" />
|
||||
<span>Game</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.servers()">
|
||||
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" />
|
||||
<span class="nav-text">Server List</span>
|
||||
<li onclick="navigate.servers()">
|
||||
<img src="/resources/images/icons/nav/servers.webp" />
|
||||
<span>Server List</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.mods.mods()">
|
||||
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" />
|
||||
<span class="nav-text">Mods</span>
|
||||
<li onclick="navigate.mods.mods()">
|
||||
<img src="/resources/images/icons/nav/mods.webp" />
|
||||
<span>Mods</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.articles()">
|
||||
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" />
|
||||
<span class="nav-text">Tutorials</span>
|
||||
<li onclick="navigate.articles()">
|
||||
<img src="/resources/images/icons/nav/articles.webp" />
|
||||
<span>Tutorials</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.settings()">
|
||||
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" />
|
||||
<span class="nav-text">Settings</span>
|
||||
<li onclick="navigate.settings()">
|
||||
<img src="/resources/images/icons/nav/settings.webp" />
|
||||
<span>Settings</span>
|
||||
</li>
|
||||
</nav>
|
||||
</div>
|
||||
@ -118,7 +125,9 @@
|
||||
</div>
|
||||
<div class="bottom-bar">
|
||||
<div class="bottom-bar-links">
|
||||
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank">Join the MineXLauncher Discord</a>
|
||||
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank"
|
||||
>Join the MineXLauncher Discord</a
|
||||
>
|
||||
</div>
|
||||
<div class="bottom-bar-links">
|
||||
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
|
||||
@ -126,7 +135,14 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="ads-container">
|
||||
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins>
|
||||
<ins
|
||||
class="adsbygoogle"
|
||||
style="display: block"
|
||||
data-ad-client="ca-pub-1132419379737567"
|
||||
data-ad-slot="3280170072"
|
||||
data-ad-format="auto"
|
||||
data-full-width-responsive="true"
|
||||
></ins>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
@ -9,7 +9,10 @@
|
||||
<link rel="manifest" href="/manifest.json" />
|
||||
<link rel="canonical" href="https://launcher.orionzleon.me/" />
|
||||
<meta name="theme-color" content="#333" />
|
||||
<meta name="description" content="MineXLauncher is a custom launcher for Eaglercraft that has many versions and clients." />
|
||||
<meta
|
||||
name="description"
|
||||
content="MineXLauncher is a custom launcher for Eaglercraft that has many versions and clients."
|
||||
/>
|
||||
<meta
|
||||
name="keywords"
|
||||
content="minex, minexlauncher, launcher, custom launcher, modded minecraft, modded, minecraft, minecraft eaglercraft, eaglercraft, eaglercraftx, eaglercraftl, eagler, eaglerx, eaglerl, download, unblocked, minecraft versions, 1.2.5, 1.5.2, 1.5, 1.8, 1.8.8, 1.9, 1.9.4, 1.12, 1.3, 1.7.3, b1.3, b1.7.3, alpha, alpha 1.2.6, beta, beta 1.3, beta 1.7.3, a1.2.6, resent, shadow, client, resent client, shadow client, cracked, crack, cracked minecraft, hack, hacked, hacks, hacked client, hack client, free minecraft, pvp, minecraft download, offline, online, web, host, hosted, servers, multiplayer, custom launcher, skins, packs, textures, resource, mods, mod, mod download, pack download, texture download, texture pack download, fps, high fps, better fps, high fps, speed, fast, faster, lag, laggy, no lag, eaglerforge, forge, javascript, hack launcher, exploits, cheats, grief, griefing, mine"
|
||||
@ -18,7 +21,10 @@
|
||||
<meta property="og:type" content="website" />
|
||||
<meta property="og:image" content="/resources/images/icons/minexlauncher.webp" />
|
||||
<meta property="og:url" content="https://launcher.orionzleon.me/" />
|
||||
<meta property="og:description" content="MineXLauncher is a custom launcher for Eaglercraft that has many versions and clients." />
|
||||
<meta
|
||||
property="og:description"
|
||||
content="MineXLauncher is a custom launcher for Eaglercraft that has many versions and clients."
|
||||
/>
|
||||
<meta property="og:locale" content="en-US" />
|
||||
<script src="/resources/scripts/google-tag.js"></script>
|
||||
<script src="/resources/scripts/main.js"></script>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
<!doctype html>
|
||||
<html lang="en" style="display: none">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
@ -18,12 +18,12 @@
|
||||
<div class="content">
|
||||
<div class="sidebar">
|
||||
<div class="profile">
|
||||
<span class="profile-name"></span>
|
||||
<span></span>
|
||||
</div>
|
||||
<nav class="nav-bar">
|
||||
<li class="nav-item selected" onclick="navigate.mobile()">
|
||||
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" />
|
||||
<span class="nav-text">Mobile Site</span>
|
||||
<li class="selected" onclick="navigate.mobile()">
|
||||
<img src="/resources/images/icons/nav/game.webp" />
|
||||
<span>Mobile Site</span>
|
||||
</li>
|
||||
</nav>
|
||||
</div>
|
||||
@ -37,14 +37,22 @@
|
||||
</div>
|
||||
<div class="installations">
|
||||
<button class="play-button" onclick="game.play('/game/web/main/1.8.8/?mobile=true')">Play</button>
|
||||
<a class="play-button" style="text-decoration: none" href="/game/offline/mobile/EaglerPocketMobile_1.8.8.html" download>Download Offline</a>
|
||||
<a
|
||||
class="play-button"
|
||||
style="text-decoration: none"
|
||||
href="/game/offline/mobile/EaglerPocketMobile_1.8.8.html"
|
||||
download
|
||||
>Download Offline</a
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bottom-bar">
|
||||
<div class="bottom-bar-links">
|
||||
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank">Join the MineXLauncher Discord</a>
|
||||
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank"
|
||||
>Join the MineXLauncher Discord</a
|
||||
>
|
||||
</div>
|
||||
<div class="bottom-bar-links">
|
||||
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
<!doctype html>
|
||||
<html lang="en" style="display: none">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
@ -12,7 +12,14 @@
|
||||
</head>
|
||||
<body>
|
||||
<div class="ads-container">
|
||||
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins>
|
||||
<ins
|
||||
class="adsbygoogle"
|
||||
style="display: block"
|
||||
data-ad-client="ca-pub-1132419379737567"
|
||||
data-ad-slot="3280170072"
|
||||
data-ad-format="auto"
|
||||
data-full-width-responsive="true"
|
||||
></ins>
|
||||
</div>
|
||||
<div class="launcher">
|
||||
<div class="title-bar">
|
||||
@ -21,32 +28,32 @@
|
||||
<div class="content">
|
||||
<div class="sidebar">
|
||||
<div class="profile">
|
||||
<span class="profile-name"></span>
|
||||
<span></span>
|
||||
</div>
|
||||
<nav class="nav-bar">
|
||||
<li class="nav-item" onclick="navigate.updates()">
|
||||
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" />
|
||||
<span class="nav-text">Updates</span>
|
||||
<li onclick="navigate.updates()">
|
||||
<img src="/resources/images/icons/nav/updates.webp" />
|
||||
<span>Updates</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.home.game()">
|
||||
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" />
|
||||
<span class="nav-text">Game</span>
|
||||
<li onclick="navigate.home.game()">
|
||||
<img src="/resources/images/icons/nav/game.webp" />
|
||||
<span>Game</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.servers()">
|
||||
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" />
|
||||
<span class="nav-text">Server List</span>
|
||||
<li onclick="navigate.servers()">
|
||||
<img src="/resources/images/icons/nav/servers.webp" />
|
||||
<span>Server List</span>
|
||||
</li>
|
||||
<li class="nav-item selected" onclick="navigate.mods.mods()">
|
||||
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" />
|
||||
<span class="nav-text">Mods</span>
|
||||
<li class="selected" onclick="navigate.mods.mods()">
|
||||
<img src="/resources/images/icons/nav/mods.webp" />
|
||||
<span>Mods</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.articles()">
|
||||
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" />
|
||||
<span class="nav-text">Tutorials</span>
|
||||
<li onclick="navigate.articles()">
|
||||
<img src="/resources/images/icons/nav/articles.webp" />
|
||||
<span>Tutorials</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.settings()">
|
||||
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" />
|
||||
<span class="nav-text">Settings</span>
|
||||
<li onclick="navigate.settings()">
|
||||
<img src="/resources/images/icons/nav/settings.webp" />
|
||||
<span>Settings</span>
|
||||
</li>
|
||||
</nav>
|
||||
</div>
|
||||
@ -67,7 +74,9 @@
|
||||
</div>
|
||||
<div class="bottom-bar">
|
||||
<div class="bottom-bar-links">
|
||||
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank">Join the MineXLauncher Discord</a>
|
||||
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank"
|
||||
>Join the MineXLauncher Discord</a
|
||||
>
|
||||
</div>
|
||||
<div class="bottom-bar-links">
|
||||
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
|
||||
@ -75,7 +84,14 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="ads-container">
|
||||
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins>
|
||||
<ins
|
||||
class="adsbygoogle"
|
||||
style="display: block"
|
||||
data-ad-client="ca-pub-1132419379737567"
|
||||
data-ad-slot="3280170072"
|
||||
data-ad-format="auto"
|
||||
data-full-width-responsive="true"
|
||||
></ins>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
<!doctype html>
|
||||
<html lang="en" style="display: none">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
@ -12,7 +12,14 @@
|
||||
</head>
|
||||
<body>
|
||||
<div class="ads-container">
|
||||
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins>
|
||||
<ins
|
||||
class="adsbygoogle"
|
||||
style="display: block"
|
||||
data-ad-client="ca-pub-1132419379737567"
|
||||
data-ad-slot="3280170072"
|
||||
data-ad-format="auto"
|
||||
data-full-width-responsive="true"
|
||||
></ins>
|
||||
</div>
|
||||
<div class="launcher">
|
||||
<div class="title-bar">
|
||||
@ -21,32 +28,32 @@
|
||||
<div class="content">
|
||||
<div class="sidebar">
|
||||
<div class="profile">
|
||||
<span class="profile-name"></span>
|
||||
<span></span>
|
||||
</div>
|
||||
<nav class="nav-bar">
|
||||
<li class="nav-item" onclick="navigate.updates()">
|
||||
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" />
|
||||
<span class="nav-text">Updates</span>
|
||||
<li onclick="navigate.updates()">
|
||||
<img src="/resources/images/icons/nav/updates.webp" />
|
||||
<span>Updates</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.home.game()">
|
||||
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" />
|
||||
<span class="nav-text">Game</span>
|
||||
<li onclick="navigate.home.game()">
|
||||
<img src="/resources/images/icons/nav/game.webp" />
|
||||
<span>Game</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.servers()">
|
||||
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" />
|
||||
<span class="nav-text">Server List</span>
|
||||
<li onclick="navigate.servers()">
|
||||
<img src="/resources/images/icons/nav/servers.webp" />
|
||||
<span>Server List</span>
|
||||
</li>
|
||||
<li class="nav-item selected" onclick="navigate.mods.mods()">
|
||||
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" />
|
||||
<span class="nav-text">Mods</span>
|
||||
<li class="selected" onclick="navigate.mods.mods()">
|
||||
<img src="/resources/images/icons/nav/mods.webp" />
|
||||
<span>Mods</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.articles()">
|
||||
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" />
|
||||
<span class="nav-text">Tutorials</span>
|
||||
<li onclick="navigate.articles()">
|
||||
<img src="/resources/images/icons/nav/articles.webp" />
|
||||
<span>Tutorials</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.settings()">
|
||||
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" />
|
||||
<span class="nav-text">Settings</span>
|
||||
<li onclick="navigate.settings()">
|
||||
<img src="/resources/images/icons/nav/settings.webp" />
|
||||
<span>Settings</span>
|
||||
</li>
|
||||
</nav>
|
||||
</div>
|
||||
@ -64,7 +71,9 @@
|
||||
</div>
|
||||
<div class="bottom-bar">
|
||||
<div class="bottom-bar-links">
|
||||
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank">Join the MineXLauncher Discord</a>
|
||||
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank"
|
||||
>Join the MineXLauncher Discord</a
|
||||
>
|
||||
</div>
|
||||
<div class="bottom-bar-links">
|
||||
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
|
||||
@ -72,7 +81,14 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="ads-container">
|
||||
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins>
|
||||
<ins
|
||||
class="adsbygoogle"
|
||||
style="display: block"
|
||||
data-ad-client="ca-pub-1132419379737567"
|
||||
data-ad-slot="3280170072"
|
||||
data-ad-format="auto"
|
||||
data-full-width-responsive="true"
|
||||
></ins>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
<!doctype html>
|
||||
<html lang="en" style="display: none">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
@ -13,7 +13,14 @@
|
||||
</head>
|
||||
<body>
|
||||
<div class="ads-container">
|
||||
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins>
|
||||
<ins
|
||||
class="adsbygoogle"
|
||||
style="display: block"
|
||||
data-ad-client="ca-pub-1132419379737567"
|
||||
data-ad-slot="3280170072"
|
||||
data-ad-format="auto"
|
||||
data-full-width-responsive="true"
|
||||
></ins>
|
||||
</div>
|
||||
<div class="launcher">
|
||||
<div class="title-bar">
|
||||
@ -31,7 +38,9 @@
|
||||
</div>
|
||||
<div class="bottom-bar">
|
||||
<div class="bottom-bar-links">
|
||||
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank">Join the MineXLauncher Discord</a>
|
||||
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank"
|
||||
>Join the MineXLauncher Discord</a
|
||||
>
|
||||
</div>
|
||||
<div class="bottom-bar-links">
|
||||
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
|
||||
@ -39,7 +48,14 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="ads-container">
|
||||
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins>
|
||||
<ins
|
||||
class="adsbygoogle"
|
||||
style="display: block"
|
||||
data-ad-client="ca-pub-1132419379737567"
|
||||
data-ad-slot="3280170072"
|
||||
data-ad-format="auto"
|
||||
data-full-width-responsive="true"
|
||||
></ins>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
<!doctype html>
|
||||
<html lang="en" style="display: none">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
@ -19,12 +19,12 @@
|
||||
<div class="content">
|
||||
<div class="sidebar">
|
||||
<div class="profile">
|
||||
<span class="profile-name"></span>
|
||||
<span></span>
|
||||
</div>
|
||||
<nav class="nav-bar">
|
||||
<li class="nav-item selected" href="/offline/">
|
||||
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" />
|
||||
<span class="nav-text">Offline</span>
|
||||
<li class="selected" href="/offline/">
|
||||
<img src="/resources/images/icons/nav/game.webp" />
|
||||
<span>Offline</span>
|
||||
</li>
|
||||
</nav>
|
||||
</div>
|
||||
@ -61,11 +61,17 @@
|
||||
<img src="/resources/images/icons/clients/all.webp" />
|
||||
<span>1.2.5</span>
|
||||
</div>
|
||||
<div class="custom-option" onclick="game.select('/game/offline/main/Eaglercraft_b1.7.3.html', 'Beta 1.7.3')">
|
||||
<div
|
||||
class="custom-option"
|
||||
onclick="game.select('/game/offline/main/Eaglercraft_b1.7.3.html', 'Beta 1.7.3')"
|
||||
>
|
||||
<img src="/resources/images/icons/clients/all.webp" />
|
||||
<span>Beta 1.7.3</span>
|
||||
</div>
|
||||
<div class="custom-option" onclick="game.select('/game/offline/main/Eaglercraft_b1.3.html', 'Beta 1.3')">
|
||||
<div
|
||||
class="custom-option"
|
||||
onclick="game.select('/game/offline/main/Eaglercraft_b1.3.html', 'Beta 1.3')"
|
||||
>
|
||||
<img src="/resources/images/icons/clients/all.webp" />
|
||||
<span>Beta 1.3</span>
|
||||
</div>
|
||||
@ -86,7 +92,9 @@
|
||||
</div>
|
||||
<div class="bottom-bar">
|
||||
<div class="bottom-bar-links">
|
||||
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank">Join the MineXLauncher Discord</a>
|
||||
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank"
|
||||
>Join the MineXLauncher Discord</a
|
||||
>
|
||||
</div>
|
||||
<div class="bottom-bar-links">
|
||||
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
|
||||
@ -94,7 +102,14 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="ads-container">
|
||||
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins>
|
||||
<ins
|
||||
class="adsbygoogle"
|
||||
style="display: block"
|
||||
data-ad-client="ca-pub-1132419379737567"
|
||||
data-ad-slot="3280170072"
|
||||
data-ad-format="auto"
|
||||
data-full-width-responsive="true"
|
||||
></ins>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -44,11 +44,17 @@
|
||||
"updates": [
|
||||
{
|
||||
"version": "1.6.1",
|
||||
"changelog": ["Eaglercraft 1.9 has been updated to v0.7.0", "Tutorials have been added to the launcher, go check them out!"]
|
||||
"changelog": [
|
||||
"Eaglercraft 1.9 has been updated to v0.7.0",
|
||||
"Tutorials have been added to the launcher, go check them out!"
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "1.6",
|
||||
"changelog": ["You can now install mods directly from the mods list", "Bugfix: Themes no longer flicker when navigating"]
|
||||
"changelog": [
|
||||
"You can now install mods directly from the mods list",
|
||||
"Bugfix: Themes no longer flicker when navigating"
|
||||
]
|
||||
},
|
||||
{
|
||||
"version": "1.5",
|
||||
|
@ -14,7 +14,19 @@ window.addEventListener('load', function () {
|
||||
{ addr: 'wss://relay.shhnowisnottheti.me/', name: 'ayunami relay #1', primary: relayId === 2 },
|
||||
],
|
||||
mainMenu: {
|
||||
splashes: ['Darviglet!', 'eaglerenophile!', 'You Eagler!', 'Yeeeeeee!', 'yeee', 'EEEEEEEEE!', 'You Darvig!', 'You Vigg!', ':>', '|>', 'You Yumpster!'],
|
||||
splashes: [
|
||||
'Darviglet!',
|
||||
'eaglerenophile!',
|
||||
'You Eagler!',
|
||||
'Yeeeeeee!',
|
||||
'yeee',
|
||||
'EEEEEEEEE!',
|
||||
'You Darvig!',
|
||||
'You Vigg!',
|
||||
':>',
|
||||
'|>',
|
||||
'You Yumpster!',
|
||||
],
|
||||
eaglerLogo: false,
|
||||
},
|
||||
};
|
||||
|
@ -2,7 +2,10 @@
|
||||
// @ts-nocheck
|
||||
if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
try {
|
||||
unsafeWindow.console.warn("DANGER: This userscript is using unsafeWindow. Unsafe websites could potentially use this to gain access to data and other content that the browser normally wouldn't allow!"), Object.defineProperty(window, 'clientWindow', { value: unsafeWindow });
|
||||
unsafeWindow.console.warn(
|
||||
"DANGER: This userscript is using unsafeWindow. Unsafe websites could potentially use this to gain access to data and other content that the browser normally wouldn't allow!",
|
||||
),
|
||||
Object.defineProperty(window, 'clientWindow', { value: unsafeWindow });
|
||||
} catch {
|
||||
Object.defineProperty(window, 'clientWindow', { value: window });
|
||||
}
|
||||
@ -135,8 +138,8 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (...A) {
|
||||
if (A[0].isValid || !clientWindow.keyboardFix) return I.apply(this, A);
|
||||
},
|
||||
...g
|
||||
)
|
||||
...g,
|
||||
)
|
||||
: i.call(this, A, I, ...g);
|
||||
},
|
||||
});
|
||||
@ -206,7 +209,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (A) {
|
||||
(g.hidden = !0), (g.style.display = 'none');
|
||||
},
|
||||
{ passive: !1, once: !0 }
|
||||
{ passive: !1, once: !0 },
|
||||
),
|
||||
clientWindow.addEventListener(
|
||||
'focus',
|
||||
@ -215,7 +218,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
(g.hidden = !0), (g.style.display = 'none');
|
||||
}, 300);
|
||||
},
|
||||
{ once: !0 }
|
||||
{ once: !0 },
|
||||
),
|
||||
document.body.appendChild(g)),
|
||||
g
|
||||
@ -235,7 +238,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (A) {
|
||||
A.preventDefault();
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
i.addEventListener('contextmenu', function (A) {
|
||||
A.preventDefault();
|
||||
@ -263,17 +266,19 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
g.preventDefault();
|
||||
const e = g.targetTouches[0];
|
||||
A || ((A = e.pageX), (I = e.pageY)), (g.movementX = e.pageX - A), (g.movementY = e.pageY - I);
|
||||
var C = clientWindow.fakelock ? new MouseEvent('mousemove', { movementX: g.movementX, movementY: g.movementY }) : new WheelEvent('wheel', { wheelDeltaY: g.movementY });
|
||||
var C = clientWindow.fakelock
|
||||
? new MouseEvent('mousemove', { movementX: g.movementX, movementY: g.movementY })
|
||||
: new WheelEvent('wheel', { wheelDeltaY: g.movementY });
|
||||
i.dispatchEvent(C), (A = e.pageX), (I = e.pageY);
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
i.addEventListener(
|
||||
'touchend',
|
||||
function (g) {
|
||||
(A = null), (I = null);
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
d(null != clientWindow.fakelock);
|
||||
let e = Z('strafeRightButton', 'inGame', 'div');
|
||||
@ -287,7 +292,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (A) {
|
||||
C('w', 'keydown'), e.classList.remove('hide'), c.classList.remove('hide'), n.classList.add('active');
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
n.addEventListener(
|
||||
'touchmove',
|
||||
@ -296,16 +301,28 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
const I = A.targetTouches[0];
|
||||
g || (g = I.pageX);
|
||||
let i = I.pageX - g;
|
||||
10 * i > clientWindow.innerHeight ? (e.classList.add('active'), c.classList.remove('active'), C('d', 'keydown'), C('a', 'keyup')) : 10 * i < 0 - clientWindow.innerHeight ? (c.classList.add('active'), e.classList.remove('active'), C('a', 'keydown'), C('d', 'keyup')) : (e.classList.remove('active'), c.classList.remove('active'));
|
||||
10 * i > clientWindow.innerHeight
|
||||
? (e.classList.add('active'), c.classList.remove('active'), C('d', 'keydown'), C('a', 'keyup'))
|
||||
: 10 * i < 0 - clientWindow.innerHeight
|
||||
? (c.classList.add('active'), e.classList.remove('active'), C('a', 'keydown'), C('d', 'keyup'))
|
||||
: (e.classList.remove('active'), c.classList.remove('active'));
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
n.addEventListener(
|
||||
'touchend',
|
||||
function (A) {
|
||||
C('w', 'keyup'), C('d', 'keyup'), C('a', 'keyup'), e.classList.remove('active'), c.classList.remove('active'), e.classList.add('hide'), c.classList.add('hide'), n.classList.remove('active'), (g = null);
|
||||
C('w', 'keyup'),
|
||||
C('d', 'keyup'),
|
||||
C('a', 'keyup'),
|
||||
e.classList.remove('active'),
|
||||
c.classList.remove('active'),
|
||||
e.classList.add('hide'),
|
||||
c.classList.add('hide'),
|
||||
n.classList.remove('active'),
|
||||
(g = null);
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
e.classList.add('hide'),
|
||||
c.classList.add('hide'),
|
||||
@ -317,14 +334,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (A) {
|
||||
C('d', 'keydown');
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
o.addEventListener(
|
||||
'touchend',
|
||||
function (A) {
|
||||
C('d', 'keyup');
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
document.body.appendChild(o);
|
||||
let l = Z('leftButton', 'inGame');
|
||||
@ -334,14 +351,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (A) {
|
||||
C('a', 'keydown');
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
l.addEventListener(
|
||||
'touchend',
|
||||
function (A) {
|
||||
C('a', 'keyup');
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
document.body.appendChild(l);
|
||||
let b = Z('backButton', 'inGame');
|
||||
@ -351,14 +368,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (A) {
|
||||
C('s', 'keydown');
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
b.addEventListener(
|
||||
'touchend',
|
||||
function (A) {
|
||||
C('s', 'keyup');
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
document.body.appendChild(b);
|
||||
let w = Z('jumpButton', 'inGame');
|
||||
@ -368,14 +385,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (A) {
|
||||
C(' ', 'keydown');
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
w.addEventListener(
|
||||
'touchend',
|
||||
function (A) {
|
||||
C(' ', 'keyup');
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
document.body.appendChild(w);
|
||||
let M = Z('crouchButton', 'inGame');
|
||||
@ -389,14 +406,16 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
(clientWindow.crouchLock = null != clientWindow.crouchLock), M.classList.toggle('active');
|
||||
}, 1e3));
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
M.addEventListener(
|
||||
'touchend',
|
||||
function (A) {
|
||||
clientWindow.crouchLock || (C('shift', 'keyup'), M.classList.remove('active'), (clientWindow.crouchLock = !1)), clearTimeout(clientWindow.crouchTimer);
|
||||
clientWindow.crouchLock ||
|
||||
(C('shift', 'keyup'), M.classList.remove('active'), (clientWindow.crouchLock = !1)),
|
||||
clearTimeout(clientWindow.crouchTimer);
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
document.body.appendChild(M);
|
||||
let v = Z('inventoryButton', 'inGame');
|
||||
@ -406,14 +425,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (A) {
|
||||
C('e', 'keydown');
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
v.addEventListener(
|
||||
'touchend',
|
||||
function (A) {
|
||||
C('e', 'keyup');
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
document.body.appendChild(v);
|
||||
let m = Z('exitButton', 'inMenu');
|
||||
@ -423,53 +442,71 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (A) {
|
||||
C('`', 'keydown');
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
m.addEventListener(
|
||||
'touchend',
|
||||
function (A) {
|
||||
C('`', 'keyup');
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
document.body.appendChild(m);
|
||||
let h = document.createElement('input', !0);
|
||||
(h.id = 'hiddenInput'),
|
||||
h.classList.add('inMenu'),
|
||||
(h.style.cssText = 'position:absolute;top: 0vh; margin: auto; left: 8vh; right:0vh; width: 8vh; height: 8vh;font-size:20px;z-index: -10;color: transparent;text-shadow: 0 0 0 black;'),
|
||||
(h.style.cssText =
|
||||
'position:absolute;top: 0vh; margin: auto; left: 8vh; right:0vh; width: 8vh; height: 8vh;font-size:20px;z-index: -10;color: transparent;text-shadow: 0 0 0 black;'),
|
||||
h.addEventListener(
|
||||
'beforeinput',
|
||||
function (A) {
|
||||
A.stopImmediatePropagation(), A.preventDefault(!0);
|
||||
let I = 'insertLineBreak' == A.inputType ? 'return' : null == A.data ? 'delete' : A.data.slice(-1);
|
||||
if ((clientWindow.lastKey || (clientWindow.console.warn('Enabling blocking duplicate key events. Some functionality may be lost.'), (clientWindow.inputFix = !0)), clientWindow.keyboardFix))
|
||||
if (
|
||||
(clientWindow.lastKey ||
|
||||
(clientWindow.console.warn('Enabling blocking duplicate key events. Some functionality may be lost.'),
|
||||
(clientWindow.inputFix = !0)),
|
||||
clientWindow.keyboardFix)
|
||||
)
|
||||
if ('insertLineBreak' == A.inputType) C('enter', 'keydown'), C('enter', 'keyup');
|
||||
else {
|
||||
const g = A.inputType.slice(0, 1);
|
||||
if ('i' == g && A.data) {
|
||||
if (clientWindow.lastKey == I && clientWindow.blockNextInput && clientWindow.inputFix) clientWindow.blockNextInput = !1;
|
||||
if (clientWindow.lastKey == I && clientWindow.blockNextInput && clientWindow.inputFix)
|
||||
clientWindow.blockNextInput = !1;
|
||||
else {
|
||||
I.toLowerCase() != I ? (C('shift', 'keydown'), C(I, 'keydown'), C(I, 'keyup'), C('shift', 'keyup')) : (C(I, 'keydown'), C(I, 'keyup')), (clientWindow.blockNextInput = !0);
|
||||
I.toLowerCase() != I
|
||||
? (C('shift', 'keydown'), C(I, 'keydown'), C(I, 'keyup'), C('shift', 'keyup'))
|
||||
: (C(I, 'keydown'), C(I, 'keyup')),
|
||||
(clientWindow.blockNextInput = !0);
|
||||
}
|
||||
} else ('d' != g && A.data) || (C('backspace', 'keydown'), C('backspace', 'keyup'), (clientWindow.blockNextInput = !1));
|
||||
} else
|
||||
('d' != g && A.data) ||
|
||||
(C('backspace', 'keydown'), C('backspace', 'keyup'), (clientWindow.blockNextInput = !1));
|
||||
}
|
||||
(clientWindow.lastKey = I), (h.value = ' ');
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
h.addEventListener(
|
||||
'input',
|
||||
function (A) {
|
||||
' ' != h.value && (h.value = ' ');
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
h.addEventListener(
|
||||
'keydown',
|
||||
function (A) {
|
||||
(229 != A.keyCode && 229 != A.which) || clientWindow.keyboardFix || (clientWindow.console.warn('Switching from keydown to input events due to invalid KeyboardEvent. Some functionality will be lost.'), (clientWindow.keyboardFix = !0), clientWindow.lastKey && (C(clientWindow.lastKey, 'keydown'), C(clientWindow.lastKey, 'keyup')));
|
||||
(229 != A.keyCode && 229 != A.which) ||
|
||||
clientWindow.keyboardFix ||
|
||||
(clientWindow.console.warn(
|
||||
'Switching from keydown to input events due to invalid KeyboardEvent. Some functionality will be lost.',
|
||||
),
|
||||
(clientWindow.keyboardFix = !0),
|
||||
clientWindow.lastKey && (C(clientWindow.lastKey, 'keydown'), C(clientWindow.lastKey, 'keyup')));
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
h.addEventListener('blur', function (A) {
|
||||
clientWindow.hiddenInputFocused = !1;
|
||||
@ -482,14 +519,15 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (A) {
|
||||
A.preventDefault();
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
a.addEventListener(
|
||||
'touchend',
|
||||
function (A) {
|
||||
A.preventDefault(), clientWindow.hiddenInputFocused ? h.blur() : (h.select(), (clientWindow.hiddenInputFocused = !0));
|
||||
A.preventDefault(),
|
||||
clientWindow.hiddenInputFocused ? h.blur() : (h.select(), (clientWindow.hiddenInputFocused = !0));
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
document.body.appendChild(a);
|
||||
let p = Z('placeButton', 'inGame');
|
||||
@ -499,14 +537,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (A) {
|
||||
t(2, 'mousedown', i);
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
p.addEventListener(
|
||||
'touchend',
|
||||
function (A) {
|
||||
t(2, 'mouseup', i);
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
document.body.appendChild(p);
|
||||
let R = Z('breakButton', 'inGame');
|
||||
@ -516,14 +554,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (A) {
|
||||
t(0, 'mousedown', i);
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
R.addEventListener(
|
||||
'touchend',
|
||||
function (A) {
|
||||
t(0, 'mouseup', i);
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
document.body.appendChild(R);
|
||||
let W = Z('selectButton', 'inGame');
|
||||
@ -533,14 +571,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (A) {
|
||||
t(1, 'mousedown', i);
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
W.addEventListener(
|
||||
'touchend',
|
||||
function (A) {
|
||||
t(1, 'mouseup', i);
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
document.body.appendChild(W);
|
||||
let u = Z('scrollUpButton', 'inGame');
|
||||
@ -550,7 +588,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (A) {
|
||||
G(i, -10);
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
document.body.appendChild(u);
|
||||
let Y = Z('scrollDownButton', 'inGame');
|
||||
@ -560,7 +598,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (A) {
|
||||
G(i, 10);
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
document.body.appendChild(Y);
|
||||
let S = Z('throwButton', 'inGame');
|
||||
@ -570,14 +608,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (A) {
|
||||
C('q', 'keydown');
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
S.addEventListener(
|
||||
'touchend',
|
||||
function (A) {
|
||||
C('q', 'keyup');
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
document.body.appendChild(S);
|
||||
let j = Z('sprintButton', 'inGame');
|
||||
@ -591,14 +629,16 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
(clientWindow.sprintLock = null != clientWindow.sprintLock), j.classList.toggle('active');
|
||||
}, 1e3));
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
j.addEventListener(
|
||||
'touchend',
|
||||
function (A) {
|
||||
clientWindow.sprintLock || (C('r', 'keyup'), j.classList.remove('active'), (clientWindow.sprintLock = !1)), clearTimeout(clientWindow.sprintTimer);
|
||||
clientWindow.sprintLock ||
|
||||
(C('r', 'keyup'), j.classList.remove('active'), (clientWindow.sprintLock = !1)),
|
||||
clearTimeout(clientWindow.sprintTimer);
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
document.body.appendChild(j);
|
||||
let y = Z('pauseButton', 'inGame');
|
||||
@ -608,14 +648,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (A) {
|
||||
C('`', 'keydown');
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
y.addEventListener(
|
||||
'touchend',
|
||||
function (A) {
|
||||
C('`', 'keyup');
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
document.body.appendChild(y);
|
||||
let L = Z('chatButton', 'inGame');
|
||||
@ -625,7 +665,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (A) {
|
||||
C('t', 'keydown');
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
document.body.appendChild(L);
|
||||
let N = Z('perspectiveButton', 'inGame');
|
||||
@ -635,14 +675,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (A) {
|
||||
C('f', 'keydown'), C('5', 'keydown');
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
N.addEventListener(
|
||||
'touchend',
|
||||
function (A) {
|
||||
C('f', 'keyup'), C('5', 'keyup');
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
document.body.appendChild(N);
|
||||
let U = Z('screenshotButton', 'inGame');
|
||||
@ -652,14 +692,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (A) {
|
||||
C('f', 'keydown'), C('2', 'keydown');
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
U.addEventListener(
|
||||
'touchend',
|
||||
function (A) {
|
||||
C('f', 'keyup'), C('2', 'keyup');
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
document.body.appendChild(U);
|
||||
let z = Z('coordinatesButton', 'inGame');
|
||||
@ -669,14 +709,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (A) {
|
||||
C('f', 'keydown'), C('3', 'keydown');
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
z.addEventListener(
|
||||
'touchend',
|
||||
function (A) {
|
||||
C('f', 'keyup'), C('3', 'keyup');
|
||||
},
|
||||
!1
|
||||
!1,
|
||||
),
|
||||
document.body.appendChild(z);
|
||||
})();
|
||||
|
@ -160,7 +160,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
}
|
||||
return fn.apply(this, args); // Appends the rest of the function specified by addEventListener
|
||||
},
|
||||
...rest
|
||||
...rest,
|
||||
);
|
||||
} else {
|
||||
// If it's not a keydown event, behave like normal (hopefully)
|
||||
@ -200,14 +200,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
clientY: event.clientY,
|
||||
screenX: event.screenX,
|
||||
screenY: event.screenY,
|
||||
})
|
||||
}),
|
||||
);
|
||||
}
|
||||
function wheelEvent(element, delta) {
|
||||
element.dispatchEvent(
|
||||
new WheelEvent('wheel', {
|
||||
wheelDeltaY: delta,
|
||||
})
|
||||
}),
|
||||
);
|
||||
}
|
||||
function setButtonVisibility(pointerLocked) {
|
||||
@ -285,7 +285,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
element.hidden = true;
|
||||
element.style.display = 'none';
|
||||
},
|
||||
{ passive: false, once: true }
|
||||
{ passive: false, once: true },
|
||||
);
|
||||
window.addEventListener(
|
||||
'focus',
|
||||
@ -295,7 +295,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
element.style.display = 'none';
|
||||
}, 300);
|
||||
},
|
||||
{ once: true }
|
||||
{ once: true },
|
||||
);
|
||||
document.body.appendChild(element);
|
||||
}
|
||||
@ -347,7 +347,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (e) {
|
||||
e.preventDefault();
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
touchButton.addEventListener('contextmenu', function (e) {
|
||||
e.preventDefault();
|
||||
@ -393,7 +393,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
}
|
||||
}
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
|
||||
canvas.addEventListener(
|
||||
@ -411,7 +411,8 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
if (primaryTouch) {
|
||||
primaryTouch.distanceX = primaryTouch.clientX - canvasTouchStartX;
|
||||
primaryTouch.distanceY = primaryTouch.clientY - canvasTouchStartY;
|
||||
primaryTouch.squaredNorm = primaryTouch.distanceX * primaryTouch.distanceX + primaryTouch.distanceY * primaryTouch.distanceY;
|
||||
primaryTouch.squaredNorm =
|
||||
primaryTouch.distanceX * primaryTouch.distanceX + primaryTouch.distanceY * primaryTouch.distanceY;
|
||||
primaryTouch.movementX = primaryTouch.clientX - canvasTouchPreviousX;
|
||||
primaryTouch.movementY = primaryTouch.clientY - canvasTouchPreviousY;
|
||||
if (window.canvasTouchMode == 1) {
|
||||
@ -439,7 +440,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
screenY: primaryTouch.screenY, // The top four are used for item position when in GUI's, the bottom two are for moving the camera inGame
|
||||
movementX: primaryTouch.movementX,
|
||||
movementY: primaryTouch.movementY,
|
||||
})
|
||||
}),
|
||||
);
|
||||
}
|
||||
}
|
||||
@ -447,7 +448,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
canvasTouchPreviousY = primaryTouch.clientY;
|
||||
}
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
|
||||
function canvasTouchEnd(e) {
|
||||
@ -495,7 +496,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
strafeLeftButton.classList.remove('hide');
|
||||
forwardButton.classList.add('active');
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
forwardButton.addEventListener(
|
||||
'touchmove',
|
||||
@ -523,7 +524,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
strafeLeftButton.classList.remove('active');
|
||||
}
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
forwardButton.addEventListener(
|
||||
'touchend',
|
||||
@ -539,7 +540,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
|
||||
buttonTouchStartX = null;
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
strafeRightButton.classList.add('hide');
|
||||
strafeLeftButton.classList.add('hide');
|
||||
@ -552,14 +553,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (e) {
|
||||
keyEvent('d', 'keydown');
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
rightButton.addEventListener(
|
||||
'touchend',
|
||||
function (e) {
|
||||
keyEvent('d', 'keyup');
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
document.body.appendChild(rightButton);
|
||||
const leftButton = createTouchButton('leftButton', 'inGame');
|
||||
@ -569,14 +570,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (e) {
|
||||
keyEvent('a', 'keydown');
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
leftButton.addEventListener(
|
||||
'touchend',
|
||||
function (e) {
|
||||
keyEvent('a', 'keyup');
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
document.body.appendChild(leftButton);
|
||||
const backButton = createTouchButton('backButton', 'inGame');
|
||||
@ -586,14 +587,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (e) {
|
||||
keyEvent('s', 'keydown');
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
backButton.addEventListener(
|
||||
'touchend',
|
||||
function (e) {
|
||||
keyEvent('s', 'keyup');
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
document.body.appendChild(backButton);
|
||||
const jumpButton = createTouchButton('jumpButton', 'inGame');
|
||||
@ -603,14 +604,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (e) {
|
||||
keyEvent(' ', 'keydown');
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
jumpButton.addEventListener(
|
||||
'touchend',
|
||||
function (e) {
|
||||
keyEvent(' ', 'keyup');
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
document.body.appendChild(jumpButton);
|
||||
|
||||
@ -627,7 +628,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
crouchButton.classList.toggle('active');
|
||||
}, 1000);
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
|
||||
crouchButton.addEventListener(
|
||||
@ -640,7 +641,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
}
|
||||
clearTimeout(window.crouchTimer);
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
document.body.appendChild(crouchButton);
|
||||
const inventoryButton = createTouchButton('inventoryButton', 'inGame');
|
||||
@ -651,7 +652,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (e) {
|
||||
keyEvent('e', 'keydown');
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
inventoryButton.addEventListener(
|
||||
'touchend',
|
||||
@ -660,7 +661,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
keyEvent('shift', 'keyup'); // Sometimes shift gets stuck on, which interferes with item manipulation in GUI's
|
||||
keyEvent('e', 'keyup');
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
document.body.appendChild(inventoryButton);
|
||||
const exitButton = createTouchButton('exitButton', 'inMenu');
|
||||
@ -671,14 +672,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (e) {
|
||||
keyEvent('`', 'keydown');
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
exitButton.addEventListener(
|
||||
'touchend',
|
||||
function (e) {
|
||||
keyEvent('`', 'keyup');
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
document.body.appendChild(exitButton);
|
||||
// ---Input Handling---
|
||||
@ -703,7 +704,8 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
const hiddenInput = document.createElement('input', true);
|
||||
hiddenInput.id = 'hiddenInput';
|
||||
hiddenInput.classList.add('inMenu');
|
||||
hiddenInput.style.cssText = 'position:absolute;top: 0vh; margin: auto; left: 8vh; right:0vh; width: 8vh; height: 8vh;font-size:20px;z-index: -10;color: transparent;text-shadow: 0 0 0 black;'; // We hide the input behind a key because display: none and opacity:0 causes issues
|
||||
hiddenInput.style.cssText =
|
||||
'position:absolute;top: 0vh; margin: auto; left: 8vh; right:0vh; width: 8vh; height: 8vh;font-size:20px;z-index: -10;color: transparent;text-shadow: 0 0 0 black;'; // We hide the input behind a key because display: none and opacity:0 causes issues
|
||||
hiddenInput.addEventListener(
|
||||
'beforeinput',
|
||||
function (e) {
|
||||
@ -753,7 +755,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
window.lastKey = inputData; // Saves the last key pressed
|
||||
hiddenInput.value = ' '; //This previously allowed us to have a character to delete, but beforeinput doesn't require this. This does allow us to check wether Duplicate Mode is necessary though
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
hiddenInput.addEventListener(
|
||||
'input',
|
||||
@ -764,14 +766,16 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
hiddenInput.value = ' ';
|
||||
}
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
hiddenInput.addEventListener(
|
||||
'keydown',
|
||||
function (e) {
|
||||
// Enables Compatibility Mode if we receive an invalid key press event
|
||||
if ((e.keyCode == 229 || e.which == 229) && !window.keyboardFix) {
|
||||
window.console.warn('Switching from keydown to input events due to invalid KeyboardEvent. Some functionality will be lost.');
|
||||
window.console.warn(
|
||||
'Switching from keydown to input events due to invalid KeyboardEvent. Some functionality will be lost.',
|
||||
);
|
||||
window.keyboardFix = true;
|
||||
if (window.lastKey) {
|
||||
// Resend the last saved key press (which is being tracked by the beforeinput event listener) so the transition to Compatibility Mode isn't noticeable
|
||||
@ -780,7 +784,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
}
|
||||
}
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
hiddenInput.addEventListener('blur', function (e) {
|
||||
// Updates window.hiddenInputFocused to reflect the actual state of the focus
|
||||
@ -795,7 +799,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (e) {
|
||||
e.preventDefault();
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
keyboardButton.addEventListener(
|
||||
'touchend',
|
||||
@ -808,7 +812,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
window.hiddenInputFocused = true;
|
||||
}
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
document.body.appendChild(keyboardButton);
|
||||
const placeButton = createTouchButton('placeButton', 'inGame');
|
||||
@ -818,14 +822,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (e) {
|
||||
mouseEvent(2, 'mousedown', canvas);
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
placeButton.addEventListener(
|
||||
'touchend',
|
||||
function (e) {
|
||||
mouseEvent(2, 'mouseup', canvas);
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
document.body.appendChild(placeButton);
|
||||
const breakButton = createTouchButton('breakButton', 'inGame');
|
||||
@ -835,14 +839,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (e) {
|
||||
mouseEvent(0, 'mousedown', canvas);
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
breakButton.addEventListener(
|
||||
'touchend',
|
||||
function (e) {
|
||||
mouseEvent(0, 'mouseup', canvas);
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
document.body.appendChild(breakButton);
|
||||
const selectButton = createTouchButton('selectButton', 'inGame');
|
||||
@ -852,14 +856,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (e) {
|
||||
mouseEvent(1, 'mousedown', canvas);
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
selectButton.addEventListener(
|
||||
'touchend',
|
||||
function (e) {
|
||||
mouseEvent(1, 'mouseup', canvas);
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
document.body.appendChild(selectButton);
|
||||
const scrollUpButton = createTouchButton('scrollUpButton', 'inGame');
|
||||
@ -870,7 +874,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (e) {
|
||||
wheelEvent(canvas, -10);
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
document.body.appendChild(scrollUpButton);
|
||||
const scrollDownButton = createTouchButton('scrollDownButton', 'inGame');
|
||||
@ -881,7 +885,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (e) {
|
||||
wheelEvent(canvas, 10);
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
document.body.appendChild(scrollDownButton);
|
||||
const throwButton = createTouchButton('throwButton', 'inGame');
|
||||
@ -892,14 +896,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (e) {
|
||||
keyEvent('q', 'keydown');
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
throwButton.addEventListener(
|
||||
'touchend',
|
||||
function (e) {
|
||||
keyEvent('q', 'keyup');
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
document.body.appendChild(throwButton);
|
||||
const sprintButton = createTouchButton('sprintButton', 'inGame');
|
||||
@ -914,7 +918,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
sprintButton.classList.toggle('active');
|
||||
}, 1000);
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
|
||||
sprintButton.addEventListener(
|
||||
@ -927,7 +931,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
}
|
||||
clearTimeout(window.sprintTimer);
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
document.body.appendChild(sprintButton);
|
||||
const pauseButton = createTouchButton('pauseButton', 'inGame');
|
||||
@ -938,14 +942,14 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (e) {
|
||||
keyEvent('`', 'keydown');
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
pauseButton.addEventListener(
|
||||
'touchend',
|
||||
function (e) {
|
||||
keyEvent('`', 'keyup');
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
document.body.appendChild(pauseButton);
|
||||
const chatButton = createTouchButton('chatButton', 'inGame');
|
||||
@ -956,7 +960,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
function (e) {
|
||||
keyEvent('t', 'keydown');
|
||||
},
|
||||
false
|
||||
false,
|
||||
); // For some reason dispatching a keyup event for this closes the chat, which is really weird
|
||||
document.body.appendChild(chatButton);
|
||||
const perspectiveButton = createTouchButton('perspectiveButton', 'inGame');
|
||||
@ -968,7 +972,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
keyEvent('f', 'keydown');
|
||||
keyEvent('5', 'keydown');
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
perspectiveButton.addEventListener(
|
||||
'touchend',
|
||||
@ -976,7 +980,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
keyEvent('f', 'keyup');
|
||||
keyEvent('5', 'keyup');
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
document.body.appendChild(perspectiveButton);
|
||||
const screenshotButton = createTouchButton('screenshotButton', 'inGame');
|
||||
@ -988,7 +992,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
keyEvent('f', 'keydown');
|
||||
keyEvent('2', 'keydown');
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
screenshotButton.addEventListener(
|
||||
'touchend',
|
||||
@ -996,7 +1000,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
keyEvent('f', 'keyup');
|
||||
keyEvent('2', 'keyup');
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
document.body.appendChild(screenshotButton);
|
||||
const coordinatesButton = createTouchButton('coordinatesButton', 'inGame');
|
||||
@ -1008,7 +1012,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
keyEvent('f', 'keydown');
|
||||
keyEvent('3', 'keydown');
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
coordinatesButton.addEventListener(
|
||||
'touchend',
|
||||
@ -1016,7 +1020,7 @@ if (new URLSearchParams(window.location.search).get('mobile') === 'true') {
|
||||
keyEvent('f', 'keyup');
|
||||
keyEvent('3', 'keyup');
|
||||
},
|
||||
false
|
||||
false,
|
||||
);
|
||||
document.body.appendChild(coordinatesButton);
|
||||
}
|
||||
|
@ -7,7 +7,10 @@ let articleAnimationLock = false;
|
||||
const theme = {
|
||||
load: function (themeToLoad?: string) {
|
||||
const themeElement = document.querySelector('#theme') as HTMLLinkElement | null;
|
||||
if (themeElement) themeElement.href = themeToLoad ? `/resources/styles/themes/${themeToLoad}.css` : `/resources/styles/themes/${storage.local.get('theme') ?? 'default'}.css`;
|
||||
if (themeElement)
|
||||
themeElement.href = themeToLoad
|
||||
? `/resources/styles/themes/${themeToLoad}.css`
|
||||
: `/resources/styles/themes/${storage.local.get('theme') ?? 'default'}.css`;
|
||||
},
|
||||
set: function (newTheme: string) {
|
||||
storage.local.set('theme', newTheme);
|
||||
@ -77,7 +80,9 @@ const game = {
|
||||
'1.5': '15-client-version',
|
||||
'b1.3': 'b13-client-version',
|
||||
};
|
||||
const dropdown = clients[client] ? (document.querySelector(`#${clients[client]}`) as HTMLSelectElement | null) : null;
|
||||
const dropdown = clients[client]
|
||||
? (document.querySelector(`#${clients[client]}`) as HTMLSelectElement | null)
|
||||
: null;
|
||||
if (dropdown?.value) {
|
||||
selectedVersion = `https://archive.eaglercraft.rip/Eaglercraft${client === '1.8' ? 'X_1.8' : `_${client}`}/client/${dropdown.value}/index.html`;
|
||||
game.play();
|
||||
@ -174,7 +179,7 @@ const article = {
|
||||
modal.addEventListener('click', closeArticleHandler);
|
||||
articleAnimationLock = false;
|
||||
},
|
||||
{ once: true }
|
||||
{ once: true },
|
||||
);
|
||||
}
|
||||
},
|
||||
@ -189,7 +194,7 @@ const article = {
|
||||
modal.style.display = 'none';
|
||||
articleAnimationLock = false;
|
||||
},
|
||||
{ once: true }
|
||||
{ once: true },
|
||||
);
|
||||
}
|
||||
},
|
||||
@ -408,7 +413,13 @@ if (window.location.pathname === '/') {
|
||||
const lastPage = storage.session.get('lastPage');
|
||||
const isMobile = detect.mobile();
|
||||
const iframe = document.createElement('iframe');
|
||||
iframe.src = !storage.local.get('lastVersion') ? '/welcome/' : lastPage ? lastPage : isMobile ? '/mobile/' : '/home/game/';
|
||||
iframe.src = !storage.local.get('lastVersion')
|
||||
? '/welcome/'
|
||||
: lastPage
|
||||
? lastPage
|
||||
: isMobile
|
||||
? '/mobile/'
|
||||
: '/home/game/';
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => document.body.appendChild(iframe));
|
||||
|
||||
@ -429,7 +440,7 @@ if (window.location.pathname === '/') {
|
||||
theme.load();
|
||||
|
||||
document.addEventListener('DOMContentLoaded', async () => {
|
||||
const profileName = document.querySelector('.profile-name');
|
||||
const profileName = document.querySelector('.profile span');
|
||||
const titleBarText = document.querySelector('.title-bar span');
|
||||
|
||||
const lastVersion = storage.local.get('lastVersion');
|
||||
@ -440,8 +451,11 @@ if (window.location.pathname === '/') {
|
||||
if (profileName) profileName.textContent = storage.local.get('username');
|
||||
if (titleBarText) titleBarText.textContent += ` ${currentVersion}`;
|
||||
|
||||
// @ts-expect-error
|
||||
if (lastVersion && gt(coerce(currentVersion, { includePrerelease: true }), coerce(lastVersion, { includePrerelease: true }))) {
|
||||
if (
|
||||
lastVersion &&
|
||||
// @ts-expect-error
|
||||
gt(coerce(currentVersion, { includePrerelease: true }), coerce(lastVersion, { includePrerelease: true }))
|
||||
) {
|
||||
alert(`MineXLauncher has been updated to v${currentVersion}!\n\nChanges in v${currentVersion}:\n${changelog}`);
|
||||
storage.local.set('lastVersion', currentVersion);
|
||||
}
|
||||
@ -469,7 +483,7 @@ if (window.location.pathname === '/') {
|
||||
|
||||
if (window.location.pathname === '/settings/') {
|
||||
document.addEventListener('DOMContentLoaded', async () => {
|
||||
const profileName = document.querySelector('.profile-name');
|
||||
const profileName = document.querySelector('.profile span');
|
||||
const usernameInput = document.querySelector('#username-input') as HTMLInputElement | null;
|
||||
const themeSelect = document.querySelector('#theme-select') as HTMLSelectElement | null;
|
||||
const offlineCheckbox = document.querySelector('#offline-checkbox') as HTMLInputElement | null;
|
||||
@ -506,7 +520,7 @@ if (window.location.pathname === '/settings/') {
|
||||
if (offlineCheckbox.checked) {
|
||||
sw.register('/sw-full.js');
|
||||
alert(
|
||||
'Offline cache is now downloading.\nThe download size is about 1GB, so it may take a while.\n\nPlease do not leave this page while the download is in progress.\nYou will be notified when the download is complete.'
|
||||
'Offline cache is now downloading.\nThe download size is about 1GB, so it may take a while.\n\nPlease do not leave this page while the download is in progress.\nYou will be notified when the download is complete.',
|
||||
);
|
||||
} else {
|
||||
sw.register('/sw.js');
|
||||
@ -567,12 +581,15 @@ if (window.location.pathname === '/settings/') {
|
||||
// storage.local.set('offlineCache', offlineCheckbox?.checked ?? false);
|
||||
// storage.local.set('showAds', true);
|
||||
storage.local.set('mods', []);
|
||||
storage.local.set('lastVersion', (await (await fetch('/resources/data/main.json')).json()).updates[0].version);
|
||||
storage.local.set(
|
||||
'lastVersion',
|
||||
(await (await fetch('/resources/data/main.json')).json()).updates[0].version,
|
||||
);
|
||||
|
||||
if (offlineCheckbox?.checked) {
|
||||
sw.register('/sw-full.js');
|
||||
alert(
|
||||
'Offline cache is now downloading.\nThe download size is about 1GB, so it may take a while.\n\nPlease do not leave this page while the download is in progress.\nYou will be notified when the download is complete.'
|
||||
'Offline cache is now downloading.\nThe download size is about 1GB, so it may take a while.\n\nPlease do not leave this page while the download is in progress.\nYou will be notified when the download is complete.',
|
||||
);
|
||||
} else sw.register('/sw.js');
|
||||
|
||||
@ -585,7 +602,14 @@ if (window.location.pathname === '/settings/') {
|
||||
} else if (window.location.pathname === '/mods/mods/' || window.location.pathname === '/mods/resourcepacks/') {
|
||||
document.addEventListener('DOMContentLoaded', async () => {
|
||||
const addonType: 'mods' | 'resourcepacks' = window.location.pathname === '/mods/mods/' ? 'mods' : 'resourcepacks';
|
||||
const addonData: { id: string; name: string; description: string; author: string; authorLink: string; source: string }[] = (await (await fetch('/resources/data/main.json')).json()).addons;
|
||||
const addonData: {
|
||||
id: string;
|
||||
name: string;
|
||||
description: string;
|
||||
author: string;
|
||||
authorLink: string;
|
||||
source: string;
|
||||
}[] = (await (await fetch('/resources/data/main.json')).json()).addons;
|
||||
const modList = document.querySelector('.mod-list');
|
||||
// @ts-expect-error
|
||||
addonData[addonType].forEach((addon) => {
|
||||
@ -616,7 +640,9 @@ if (window.location.pathname === '/settings/') {
|
||||
} else if (window.location.pathname === '/updates/') {
|
||||
document.addEventListener('DOMContentLoaded', async () => {
|
||||
const updatesContainer = document.querySelector('.updates-container');
|
||||
const updateData: { version: string; changelog: string[] }[] = (await (await fetch('/resources/data/main.json')).json()).updates;
|
||||
const updateData: { version: string; changelog: string[] }[] = (
|
||||
await (await fetch('/resources/data/main.json')).json()
|
||||
).updates;
|
||||
updateData.forEach((update) => {
|
||||
const versionHeader = document.createElement('strong');
|
||||
versionHeader.textContent = `MineXLauncher ${update.version}`;
|
||||
|
@ -26,8 +26,8 @@ body {
|
||||
border-bottom: 1px solid #4a2f1b;
|
||||
}
|
||||
|
||||
.nav-bar .nav-item:hover,
|
||||
.nav-bar .nav-item.selected {
|
||||
.nav-bar li:hover,
|
||||
.nav-bar li.selected {
|
||||
background-color: #5a3a2a;
|
||||
}
|
||||
|
||||
|
@ -22,8 +22,8 @@ body {
|
||||
border-bottom: 1px solid #e0d1e3;
|
||||
}
|
||||
|
||||
.nav-bar .nav-item:hover,
|
||||
.nav-bar .nav-item.selected {
|
||||
.nav-bar li:hover,
|
||||
.nav-bar li.selected {
|
||||
background-color: #f4c6d0;
|
||||
}
|
||||
|
||||
|
@ -67,7 +67,7 @@ body {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.profile-name {
|
||||
.profile span {
|
||||
font-weight: bold;
|
||||
display: block;
|
||||
font-size: 16px;
|
||||
@ -83,7 +83,7 @@ body {
|
||||
scrollbar-color: #555 #333;
|
||||
}
|
||||
|
||||
.nav-bar .nav-item {
|
||||
.nav-bar li {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 15px 20px;
|
||||
@ -91,18 +91,18 @@ body {
|
||||
transition: background-color 0.2s;
|
||||
}
|
||||
|
||||
.nav-bar .nav-item:hover,
|
||||
.nav-bar .nav-item.selected {
|
||||
.nav-bar li:hover,
|
||||
.nav-bar li.selected {
|
||||
background-color: #444;
|
||||
}
|
||||
|
||||
.nav-bar .nav-item .nav-icon {
|
||||
.nav-bar li img {
|
||||
width: 24px;
|
||||
height: 24px;
|
||||
margin-right: 15px;
|
||||
}
|
||||
|
||||
.nav-bar .nav-item .nav-text {
|
||||
.nav-bar li span {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
@ -249,7 +249,10 @@ body {
|
||||
scrollbar-color: #048239 #035525;
|
||||
max-height: 0;
|
||||
overflow: auto;
|
||||
transition: max-height 0.3s ease-out, padding 0.3s ease-out, opacity 0.3s ease-out;
|
||||
transition:
|
||||
max-height 0.3s ease-out,
|
||||
padding 0.3s ease-out,
|
||||
opacity 0.3s ease-out;
|
||||
}
|
||||
|
||||
.custom-options.open {
|
||||
@ -292,7 +295,10 @@ body {
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
text-transform: uppercase;
|
||||
transition: background-color 0.2s, border-color 0.2s, transform 0.2s;
|
||||
transition:
|
||||
background-color 0.2s,
|
||||
border-color 0.2s,
|
||||
transform 0.2s;
|
||||
overflow: hidden;
|
||||
position: relative;
|
||||
}
|
||||
@ -539,11 +545,18 @@ body {
|
||||
font-size: 1rem;
|
||||
cursor: pointer;
|
||||
appearance: none;
|
||||
background-image: linear-gradient(45deg, transparent 50%, #ffffff 50%), linear-gradient(135deg, #1e1e1e 50%, transparent 50%);
|
||||
background-position: right 0.7rem center, right 0.7rem center;
|
||||
background-image: linear-gradient(45deg, transparent 50%, #ffffff 50%),
|
||||
linear-gradient(135deg, #1e1e1e 50%, transparent 50%);
|
||||
background-position:
|
||||
right 0.7rem center,
|
||||
right 0.7rem center;
|
||||
background-repeat: no-repeat;
|
||||
background-size: 0.65rem auto, 0.65rem auto;
|
||||
transition: border-color 0.3s, background-color 0.3s;
|
||||
background-size:
|
||||
0.65rem auto,
|
||||
0.65rem auto;
|
||||
transition:
|
||||
border-color 0.3s,
|
||||
background-color 0.3s;
|
||||
}
|
||||
|
||||
.version-select:focus {
|
||||
|
@ -18,8 +18,8 @@ body {
|
||||
background-color: #262626;
|
||||
}
|
||||
|
||||
.nav-bar .nav-item:hover,
|
||||
.nav-bar .nav-item.selected {
|
||||
.nav-bar li:hover,
|
||||
.nav-bar li.selected {
|
||||
background-color: #333;
|
||||
}
|
||||
|
||||
|
@ -1,111 +1,117 @@
|
||||
body {
|
||||
background-color: #f5f5f5;
|
||||
color: #333;
|
||||
background-color: #f5f5f5;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.launcher {
|
||||
background-color: #fff;
|
||||
box-shadow: 0 0 20px rgba(0, 0, 0, 0.1);
|
||||
background-color: #fff;
|
||||
box-shadow: 0 0 20px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.title-bar, .top-title, .top-nav, .bottom-bar {
|
||||
background-color: #e0e0e0;
|
||||
color: #333;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
||||
.title-bar,
|
||||
.top-title,
|
||||
.top-nav,
|
||||
.bottom-bar {
|
||||
background-color: #e0e0e0;
|
||||
color: #333;
|
||||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
||||
}
|
||||
|
||||
.sidebar {
|
||||
background-color: #f0f0f0;
|
||||
border-right: 1px solid #ddd;
|
||||
background-color: #f0f0f0;
|
||||
border-right: 1px solid #ddd;
|
||||
}
|
||||
|
||||
.profile {
|
||||
border-bottom: 1px solid #ddd;
|
||||
border-bottom: 1px solid #ddd;
|
||||
}
|
||||
|
||||
.nav-bar .nav-item {
|
||||
color: #333;
|
||||
.nav-bar li {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.nav-bar .nav-item:hover, .nav-bar .nav-item.selected {
|
||||
background-color: #ddd;
|
||||
.nav-bar li:hover,
|
||||
.nav-bar li.selected {
|
||||
background-color: #ddd;
|
||||
}
|
||||
|
||||
.main-panel, .main-content {
|
||||
background-color: #fafafa;
|
||||
.main-panel,
|
||||
.main-content {
|
||||
background-color: #fafafa;
|
||||
}
|
||||
|
||||
.installations {
|
||||
background-color: #e0e0e0;
|
||||
border-top: 1px solid #ddd;
|
||||
background-color: #e0e0e0;
|
||||
border-top: 1px solid #ddd;
|
||||
}
|
||||
|
||||
.custom-select {
|
||||
border: 2px solid #ccc;
|
||||
background-color: #fff;
|
||||
color: #333;
|
||||
box-shadow: 4px 4px #ddd;
|
||||
border: 2px solid #ccc;
|
||||
background-color: #fff;
|
||||
color: #333;
|
||||
box-shadow: 4px 4px #ddd;
|
||||
}
|
||||
|
||||
.custom-select:hover {
|
||||
box-shadow: 6px 6px #ddd;
|
||||
box-shadow: 6px 6px #ddd;
|
||||
}
|
||||
|
||||
.custom-options {
|
||||
border: 2px solid #ccc;
|
||||
background-color: #fff;
|
||||
box-shadow: 4px 4px #ddd;
|
||||
border: 2px solid #ccc;
|
||||
background-color: #fff;
|
||||
box-shadow: 4px 4px #ddd;
|
||||
}
|
||||
|
||||
.custom-option {
|
||||
border-bottom: 1px solid #ccc;
|
||||
color: #333;
|
||||
border-bottom: 1px solid #ccc;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.custom-option:hover {
|
||||
background-color: #f0f0f0;
|
||||
background-color: #f0f0f0;
|
||||
}
|
||||
|
||||
.play-button {
|
||||
background-color: #4caf50;
|
||||
border: 2px solid #388e3c;
|
||||
color: #fff;
|
||||
background-color: #4caf50;
|
||||
border: 2px solid #388e3c;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.play-button:hover {
|
||||
background-color: #66bb6a;
|
||||
border-color: #2e7d32;
|
||||
background-color: #66bb6a;
|
||||
border-color: #2e7d32;
|
||||
}
|
||||
|
||||
.bottom-bar .bottom-bar-left, .bottom-bar .bottom-bar-right {
|
||||
color: #333;
|
||||
.bottom-bar .bottom-bar-left,
|
||||
.bottom-bar .bottom-bar-right {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.minecraft-button {
|
||||
background-color: #e0e0e0;
|
||||
border: 1px solid #ccc;
|
||||
background-color: #e0e0e0;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
|
||||
.minecraft-button:hover {
|
||||
background-color: #d5d5d5;
|
||||
background-color: #d5d5d5;
|
||||
}
|
||||
|
||||
.minecraft-button:active {
|
||||
background-color: #bdbdbd;
|
||||
background-color: #bdbdbd;
|
||||
}
|
||||
|
||||
.download-link {
|
||||
background-color: #4caf50;
|
||||
background-color: #4caf50;
|
||||
}
|
||||
|
||||
.download-link:hover {
|
||||
background-color: #66bb6a;
|
||||
background-color: #66bb6a;
|
||||
}
|
||||
|
||||
.top-nav ul li {
|
||||
color: #666;
|
||||
color: #666;
|
||||
}
|
||||
|
||||
.top-nav ul li.selected {
|
||||
color: #333;
|
||||
}
|
||||
color: #333;
|
||||
}
|
||||
|
@ -25,8 +25,8 @@ body {
|
||||
color: #ff4500;
|
||||
}
|
||||
|
||||
.nav-bar .nav-item:hover,
|
||||
.nav-bar .nav-item.selected {
|
||||
.nav-bar li:hover,
|
||||
.nav-bar li.selected {
|
||||
background-color: #5c3c3c;
|
||||
}
|
||||
|
||||
|
@ -25,8 +25,8 @@ body {
|
||||
color: #00ff00;
|
||||
}
|
||||
|
||||
.nav-bar .nav-item:hover,
|
||||
.nav-bar .nav-item.selected {
|
||||
.nav-bar li:hover,
|
||||
.nav-bar li.selected {
|
||||
background-color: #5c7c5c;
|
||||
}
|
||||
|
||||
|
@ -26,7 +26,7 @@ body {
|
||||
}
|
||||
|
||||
.profile,
|
||||
.nav-bar .nav-item,
|
||||
.nav-bar li,
|
||||
.installations,
|
||||
.custom-select,
|
||||
.custom-options,
|
||||
@ -38,8 +38,8 @@ body {
|
||||
color: #00ff00;
|
||||
}
|
||||
|
||||
.nav-bar .nav-item:hover,
|
||||
.nav-bar .nav-item.selected,
|
||||
.nav-bar li:hover,
|
||||
.nav-bar li.selected,
|
||||
.custom-option:hover,
|
||||
.play-button:hover,
|
||||
.minecraft-button:hover,
|
||||
|
@ -18,8 +18,8 @@ body {
|
||||
box-shadow: 0 2px 4px rgba(255, 255, 255, 0.2);
|
||||
}
|
||||
|
||||
.nav-bar .nav-item:hover,
|
||||
.nav-bar .nav-item.selected {
|
||||
.nav-bar li:hover,
|
||||
.nav-bar li.selected {
|
||||
background-color: rgba(255, 255, 255, 0.1);
|
||||
color: #00ccff;
|
||||
}
|
||||
|
@ -27,8 +27,8 @@ body {
|
||||
border-bottom: 1px solid #330066;
|
||||
}
|
||||
|
||||
.nav-bar .nav-item:hover,
|
||||
.nav-bar .nav-item.selected {
|
||||
.nav-bar li:hover,
|
||||
.nav-bar li.selected {
|
||||
background-color: #330066;
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
<!doctype html>
|
||||
<html lang="en" style="display: none">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
@ -12,7 +12,14 @@
|
||||
</head>
|
||||
<body>
|
||||
<div class="ads-container">
|
||||
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins>
|
||||
<ins
|
||||
class="adsbygoogle"
|
||||
style="display: block"
|
||||
data-ad-client="ca-pub-1132419379737567"
|
||||
data-ad-slot="3280170072"
|
||||
data-ad-format="auto"
|
||||
data-full-width-responsive="true"
|
||||
></ins>
|
||||
</div>
|
||||
<div class="launcher">
|
||||
<div class="title-bar">
|
||||
@ -21,32 +28,32 @@
|
||||
<div class="content">
|
||||
<div class="sidebar">
|
||||
<div class="profile">
|
||||
<span class="profile-name"></span>
|
||||
<span></span>
|
||||
</div>
|
||||
<nav class="nav-bar">
|
||||
<li class="nav-item" onclick="navigate.updates()">
|
||||
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" />
|
||||
<span class="nav-text">Updates</span>
|
||||
<li onclick="navigate.updates()">
|
||||
<img src="/resources/images/icons/nav/updates.webp" />
|
||||
<span>Updates</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.home.game()">
|
||||
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" />
|
||||
<span class="nav-text">Game</span>
|
||||
<li onclick="navigate.home.game()">
|
||||
<img src="/resources/images/icons/nav/game.webp" />
|
||||
<span>Game</span>
|
||||
</li>
|
||||
<li class="nav-item selected" onclick="navigate.servers()">
|
||||
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" />
|
||||
<span class="nav-text">Server List</span>
|
||||
<li class="selected" onclick="navigate.servers()">
|
||||
<img src="/resources/images/icons/nav/servers.webp" />
|
||||
<span>Server List</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.mods.mods()">
|
||||
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" />
|
||||
<span class="nav-text">Mods</span>
|
||||
<li onclick="navigate.mods.mods()">
|
||||
<img src="/resources/images/icons/nav/mods.webp" />
|
||||
<span>Mods</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.articles()">
|
||||
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" />
|
||||
<span class="nav-text">Tutorials</span>
|
||||
<li onclick="navigate.articles()">
|
||||
<img src="/resources/images/icons/nav/articles.webp" />
|
||||
<span>Tutorials</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.settings()">
|
||||
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" />
|
||||
<span class="nav-text">Settings</span>
|
||||
<li onclick="navigate.settings()">
|
||||
<img src="/resources/images/icons/nav/settings.webp" />
|
||||
<span>Settings</span>
|
||||
</li>
|
||||
</nav>
|
||||
</div>
|
||||
@ -60,7 +67,9 @@
|
||||
</div>
|
||||
<div class="bottom-bar">
|
||||
<div class="bottom-bar-links">
|
||||
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank">Join the MineXLauncher Discord</a>
|
||||
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank"
|
||||
>Join the MineXLauncher Discord</a
|
||||
>
|
||||
</div>
|
||||
<div class="bottom-bar-links">
|
||||
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
|
||||
@ -68,7 +77,14 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="ads-container">
|
||||
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins>
|
||||
<ins
|
||||
class="adsbygoogle"
|
||||
style="display: block"
|
||||
data-ad-client="ca-pub-1132419379737567"
|
||||
data-ad-slot="3280170072"
|
||||
data-ad-format="auto"
|
||||
data-full-width-responsive="true"
|
||||
></ins>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
<!doctype html>
|
||||
<html lang="en" style="display: none">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
@ -12,7 +12,14 @@
|
||||
</head>
|
||||
<body>
|
||||
<div class="ads-container">
|
||||
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins>
|
||||
<ins
|
||||
class="adsbygoogle"
|
||||
style="display: block"
|
||||
data-ad-client="ca-pub-1132419379737567"
|
||||
data-ad-slot="3280170072"
|
||||
data-ad-format="auto"
|
||||
data-full-width-responsive="true"
|
||||
></ins>
|
||||
</div>
|
||||
<div class="launcher">
|
||||
<div class="title-bar">
|
||||
@ -21,32 +28,32 @@
|
||||
<div class="content">
|
||||
<div class="sidebar">
|
||||
<div class="profile">
|
||||
<span class="profile-name"></span>
|
||||
<span></span>
|
||||
</div>
|
||||
<nav class="nav-bar">
|
||||
<li class="nav-item" onclick="navigate.updates()">
|
||||
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" />
|
||||
<span class="nav-text">Updates</span>
|
||||
<li onclick="navigate.updates()">
|
||||
<img src="/resources/images/icons/nav/updates.webp" />
|
||||
<span>Updates</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.home.game()">
|
||||
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" />
|
||||
<span class="nav-text">Game</span>
|
||||
<li onclick="navigate.home.game()">
|
||||
<img src="/resources/images/icons/nav/game.webp" />
|
||||
<span>Game</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.servers()">
|
||||
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" />
|
||||
<span class="nav-text">Server List</span>
|
||||
<li onclick="navigate.servers()">
|
||||
<img src="/resources/images/icons/nav/servers.webp" />
|
||||
<span>Server List</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.mods.mods()">
|
||||
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" />
|
||||
<span class="nav-text">Mods</span>
|
||||
<li onclick="navigate.mods.mods()">
|
||||
<img src="/resources/images/icons/nav/mods.webp" />
|
||||
<span>Mods</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.articles()">
|
||||
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" />
|
||||
<span class="nav-text">Tutorials</span>
|
||||
<li onclick="navigate.articles()">
|
||||
<img src="/resources/images/icons/nav/articles.webp" />
|
||||
<span>Tutorials</span>
|
||||
</li>
|
||||
<li class="nav-item selected" onclick="navigate.settings()">
|
||||
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" />
|
||||
<span class="nav-text">Settings</span>
|
||||
<li class="selected" onclick="navigate.settings()">
|
||||
<img src="/resources/images/icons/nav/settings.webp" />
|
||||
<span>Settings</span>
|
||||
</li>
|
||||
</nav>
|
||||
</div>
|
||||
@ -80,7 +87,9 @@
|
||||
</div>
|
||||
<div class="bottom-bar">
|
||||
<div class="bottom-bar-links">
|
||||
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank">Join the MineXLauncher Discord</a>
|
||||
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank"
|
||||
>Join the MineXLauncher Discord</a
|
||||
>
|
||||
</div>
|
||||
<div class="bottom-bar-links">
|
||||
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
|
||||
@ -88,7 +97,14 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="ads-container">
|
||||
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins>
|
||||
<ins
|
||||
class="adsbygoogle"
|
||||
style="display: block"
|
||||
data-ad-client="ca-pub-1132419379737567"
|
||||
data-ad-slot="3280170072"
|
||||
data-ad-format="auto"
|
||||
data-full-width-responsive="true"
|
||||
></ins>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -16,7 +16,7 @@ self.addEventListener('install', (event) => {
|
||||
|
||||
console.log(`Cached: ${asset} (${progress})`);
|
||||
}
|
||||
})
|
||||
}),
|
||||
);
|
||||
});
|
||||
|
||||
@ -32,7 +32,7 @@ self.addEventListener('activate', (event) => {
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
})
|
||||
}),
|
||||
);
|
||||
})
|
||||
.then(() => {
|
||||
@ -46,7 +46,7 @@ self.addEventListener('activate', (event) => {
|
||||
});
|
||||
});
|
||||
});
|
||||
})
|
||||
}),
|
||||
);
|
||||
});
|
||||
|
||||
@ -54,6 +54,6 @@ self.addEventListener('fetch', (event) => {
|
||||
event.respondWith(
|
||||
caches.match(event.request).then((response) => {
|
||||
return response ?? fetch(event.request);
|
||||
})
|
||||
}),
|
||||
);
|
||||
});
|
||||
|
10
src/sw.ts
10
src/sw.ts
@ -55,7 +55,7 @@ self.addEventListener('install', (event) => {
|
||||
|
||||
console.log(`Cached: ${asset} (${progress})`);
|
||||
}
|
||||
})
|
||||
}),
|
||||
);
|
||||
});
|
||||
|
||||
@ -69,9 +69,9 @@ self.addEventListener('activate', (event) => {
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
})
|
||||
}),
|
||||
);
|
||||
})
|
||||
}),
|
||||
);
|
||||
});
|
||||
|
||||
@ -80,13 +80,13 @@ self.addEventListener('fetch', (event) => {
|
||||
event.respondWith(
|
||||
fetch(event.request).catch(() => {
|
||||
return caches.match(OFFLINE_URL);
|
||||
})
|
||||
}),
|
||||
);
|
||||
} else {
|
||||
event.respondWith(
|
||||
fetch(event.request).catch(() => {
|
||||
return caches.match(event.request);
|
||||
})
|
||||
}),
|
||||
);
|
||||
}
|
||||
});
|
||||
|
@ -1,4 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
<!doctype html>
|
||||
<html lang="en" style="display: none">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
@ -12,7 +12,14 @@
|
||||
</head>
|
||||
<body>
|
||||
<div class="ads-container">
|
||||
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins>
|
||||
<ins
|
||||
class="adsbygoogle"
|
||||
style="display: block"
|
||||
data-ad-client="ca-pub-1132419379737567"
|
||||
data-ad-slot="3280170072"
|
||||
data-ad-format="auto"
|
||||
data-full-width-responsive="true"
|
||||
></ins>
|
||||
</div>
|
||||
<div class="launcher">
|
||||
<div class="title-bar">
|
||||
@ -21,32 +28,32 @@
|
||||
<div class="content">
|
||||
<div class="sidebar">
|
||||
<div class="profile">
|
||||
<span class="profile-name"></span>
|
||||
<span></span>
|
||||
</div>
|
||||
<nav class="nav-bar">
|
||||
<li class="nav-item selected" onclick="navigate.updates()">
|
||||
<img src="/resources/images/icons/nav/updates.webp" class="nav-icon" />
|
||||
<span class="nav-text">Updates</span>
|
||||
<li class="selected" onclick="navigate.updates()">
|
||||
<img src="/resources/images/icons/nav/updates.webp" />
|
||||
<span>Updates</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.home.game()">
|
||||
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" />
|
||||
<span class="nav-text">Game</span>
|
||||
<li onclick="navigate.home.game()">
|
||||
<img src="/resources/images/icons/nav/game.webp" />
|
||||
<span>Game</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.servers()">
|
||||
<img src="/resources/images/icons/nav/servers.webp" class="nav-icon" />
|
||||
<span class="nav-text">Server List</span>
|
||||
<li onclick="navigate.servers()">
|
||||
<img src="/resources/images/icons/nav/servers.webp" />
|
||||
<span>Server List</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.mods.mods()">
|
||||
<img src="/resources/images/icons/nav/mods.webp" class="nav-icon" />
|
||||
<span class="nav-text">Mods</span>
|
||||
<li onclick="navigate.mods.mods()">
|
||||
<img src="/resources/images/icons/nav/mods.webp" />
|
||||
<span>Mods</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.articles()">
|
||||
<img src="/resources/images/icons/nav/articles.webp" class="nav-icon" />
|
||||
<span class="nav-text">Tutorials</span>
|
||||
<li onclick="navigate.articles()">
|
||||
<img src="/resources/images/icons/nav/articles.webp" />
|
||||
<span>Tutorials</span>
|
||||
</li>
|
||||
<li class="nav-item" onclick="navigate.settings()">
|
||||
<img src="/resources/images/icons/nav/settings.webp" class="nav-icon" />
|
||||
<span class="nav-text">Settings</span>
|
||||
<li onclick="navigate.settings()">
|
||||
<img src="/resources/images/icons/nav/settings.webp" />
|
||||
<span>Settings</span>
|
||||
</li>
|
||||
</nav>
|
||||
</div>
|
||||
@ -61,7 +68,9 @@
|
||||
</div>
|
||||
<div class="bottom-bar">
|
||||
<div class="bottom-bar-links">
|
||||
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank">Join the MineXLauncher Discord</a>
|
||||
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank"
|
||||
>Join the MineXLauncher Discord</a
|
||||
>
|
||||
</div>
|
||||
<div class="bottom-bar-links">
|
||||
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
|
||||
@ -69,7 +78,14 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="ads-container">
|
||||
<ins class="adsbygoogle" style="display: block" data-ad-client="ca-pub-1132419379737567" data-ad-slot="3280170072" data-ad-format="auto" data-full-width-responsive="true"></ins>
|
||||
<ins
|
||||
class="adsbygoogle"
|
||||
style="display: block"
|
||||
data-ad-client="ca-pub-1132419379737567"
|
||||
data-ad-slot="3280170072"
|
||||
data-ad-format="auto"
|
||||
data-full-width-responsive="true"
|
||||
></ins>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
@ -1,4 +1,4 @@
|
||||
<!DOCTYPE html>
|
||||
<!doctype html>
|
||||
<html lang="en" style="display: none">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
@ -39,7 +39,9 @@
|
||||
</div>
|
||||
<div class="bottom-bar">
|
||||
<div class="bottom-bar-links">
|
||||
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank">Join the MineXLauncher Discord</a>
|
||||
<a href="https://discord.gg/VRwbRJjXzt" class="bottom-bar-left link" target="_blank"
|
||||
>Join the MineXLauncher Discord</a
|
||||
>
|
||||
</div>
|
||||
<div class="bottom-bar-links">
|
||||
<span class="bottom-bar-right">© 2024 MineXLauncher. All rights reserved.</span>
|
||||
|
Loading…
x
Reference in New Issue
Block a user