1
0
mirror of https://github.com/zumbiepig/MineXLauncher.git synced 2025-06-08 09:24:48 +00:00
This commit is contained in:
zumbiepig 2024-09-04 07:18:09 -07:00
parent de0d48539c
commit 3120fe4809
No known key found for this signature in database
GPG Key ID: 17C891BE28B953DE
12 changed files with 37 additions and 87219 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1,718 +0,0 @@
@font-face {
font-family: Minecraftia-Regular;
src: url(/resources/fonts/Minecraftia-Regular.ttf);
}
body {
display: flex;
flex-direction: row;
align-items: center;
justify-content: center;
margin: 0;
font-family: sans-serif;
background-color: #1e1e1e;
color: #fff;
overflow: hidden;
background-image: none;
background-size: cover;
}
.ads-container {
display: none;
flex: 1;
align-items: center;
justify-content: center;
}
.launcher {
width: 65vw;
height: 95vh;
margin: 15px auto 0 auto;
background-color: #333;
border-radius: 8px;
overflow: hidden;
box-shadow: 0 0 20px rgba(0, 0, 0, 0.5);
display: flex;
flex-direction: column;
}
.title-bar {
background-color: #2c2c2c;
padding: 10px;
text-align: center;
color: #ddd;
font-size: 14px;
font-weight: 600;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
}
.content {
display: flex;
flex: 1;
overflow: hidden;
}
.sidebar {
background-color: #242424;
width: 200px;
display: flex;
flex-direction: column;
flex-shrink: 0;
border-right: 1px solid #333;
}
.profile {
padding: 20px 10px;
border-bottom: 1px solid #333;
text-align: center;
}
.profile-name {
font-weight: bold;
display: block;
font-size: 16px;
}
nav {
list-style-type: none;
padding: 0;
margin: 0;
flex-grow: 1;
}
.nav-item {
display: flex;
align-items: center;
padding: 15px 20px;
cursor: pointer;
transition: background-color 0.2s;
}
.nav-item:hover,
.nav-item.selected {
background-color: #444;
}
.nav-icon {
width: 24px;
height: 24px;
margin-right: 15px;
}
.nav-text {
font-size: 14px;
}
.main-panel {
flex: 1;
display: flex;
flex-direction: column;
background-color: #202020;
}
.top-bar {
background-color: #2c2c2c;
padding: 15px 20px;
display: flex;
justify-content: space-between;
align-items: center;
color: #ddd;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
flex-shrink: 0;
}
.top-menu {
background-color: #2c2c2c;
padding: 10px 20px;
display: flex;
justify-content: space-around;
align-items: center;
color: #ddd;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
flex-shrink: 0;
}
.top-menu ul {
list-style-type: none;
margin: 0;
padding: 0;
display: flex;
}
.top-menu ul li {
margin-right: 20px;
cursor: pointer;
font-size: 16px;
color: #ccc;
transition: color 0.2s;
}
.top-menu ul li.selected {
color: #fff;
font-weight: bold;
}
.top-menu ul li:hover {
color: #fff;
}
.game-title {
font-size: 18px;
font-weight: bold;
}
.tabs {
display: flex;
}
.tab {
margin-left: 20px;
cursor: pointer;
color: #888;
text-transform: uppercase;
font-size: 14px;
transition: color 0.2s;
}
.tab:hover,
.tab.selected {
color: #00cc00;
}
.main-content {
display: flex;
flex: 1;
flex-direction: column;
background-color: #202020;
box-sizing: border-box;
overflow-y: auto;
scrollbar-width: thin;
scrollbar-color: #555 #333;
}
.cover-image {
display: flex;
flex: 1;
width: 100%;
height: 100%;
}
.cover-image img {
flex: 1;
width: 100%;
height: 100%;
object-fit: cover;
}
.installations {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
background-color: #292929;
box-sizing: border-box;
position: sticky;
bottom: 0;
left: 0;
padding: 10px 20px;
border-top: 1px solid #333;
}
.custom-select-wrapper {
position: relative;
display: inline-block;
width: 250px;
}
.custom-select {
display: flex;
align-items: center;
justify-content: center;
font-family: sans-serif;
font-size: 1em;
padding: 7px;
border: 2px solid #000;
background-color: #048239;
color: #fff;
cursor: pointer;
box-shadow: 4px 4px #4e4e50;
user-select: none;
transition: box-shadow 0.3s;
}
.custom-select:hover {
box-shadow: 6px 6px #4e4e50;
}
.custom-select.open {
border-radius: 0 0 5px 5px;
}
.custom-options {
position: absolute;
bottom: calc(100% + 2px);
left: 0;
right: 0;
border: 2px solid #000;
border-bottom: none;
background-color: #035525;
box-shadow: 4px 4px #4e4e50;
display: none;
border-radius: 5px 5px 0 0;
color: #fff;
scrollbar-width: thin;
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;
}
.custom-options.open {
display: block;
max-height: 200px;
padding: 10px 0;
opacity: 1;
}
.custom-option {
display: flex;
align-items: center;
padding: 10px;
cursor: pointer;
border-bottom: 1px solid #000;
transition: background-color 0.3s;
}
.custom-option:last-child {
border-bottom: none;
}
.custom-option:hover {
background-color: #127e3f;
}
.custom-option img {
width: 32px;
height: 32px;
margin-right: 10px;
}
.play-button {
background-color: #0f990f;
border: 2px solid #007700;
padding: 10px 40px;
border-radius: 5px;
cursor: pointer;
color: #fff;
font-size: 16px;
font-weight: bold;
text-transform: uppercase;
transition: background-color 0.2s, border-color 0.2s, transform 0.2s;
overflow: hidden;
position: relative;
}
.play-button::before {
content: '';
position: absolute;
top: 50%;
left: 50%;
width: 300%;
height: 300%;
background-color: rgba(255, 255, 255, 0.1);
transition: all 0.4s ease-out;
border-radius: 50%;
transform: translate(-50%, -50%);
z-index: 0;
}
.play-button:hover::before {
width: 0;
height: 0;
}
.play-button:hover {
background-color: #17b117;
border-color: #005500;
transform: scale(1.05);
}
.play-button span {
position: relative;
z-index: 1;
}
.play-button:hover span {
animation: play-button 1.5s infinite alternate;
}
@keyframes play-button {
0% {
transform: scale(1);
}
100% {
transform: scale(1.1);
}
}
.bottom-bar {
background-color: #2c2c2c;
padding: 10px 20px;
display: flex;
flex-direction: row;
justify-content: space-between;
font-size: 14px;
text-decoration: none;
border-top: 1px solid #333;
box-shadow: 0 -2px 4px rgba(0, 0, 0, 0.2);
}
.bottom-bar .bottom-bar-links {
display: flex;
}
.bottom-bar .bottom-bar-left {
color: #ddd;
margin-right: 10px;
text-decoration: none;
}
.bottom-bar .bottom-bar-right {
color: #ddd;
margin-left: 10px;
text-decoration: none;
}
.bottom-bar .bottom-bar-left.link:hover,
.bottom-bar .bottom-bar-right.link:hover {
text-decoration: underline;
cursor: pointer;
}
.updates-container {
margin: 20px;
text-align: left;
}
.updates-container strong {
padding-top: 20px;
}
.updates-container ul {
margin: 0px;
padding: 5px 0 20px 30px;
}
.minecraft-button {
background-color: #a9a9a9;
border: 1px solid #333;
border-radius: 5px;
padding: 10px 20px;
font-size: 16px;
font-weight: bold;
text-transform: uppercase;
cursor: pointer;
outline: none;
}
.minecraft-button:hover {
background-color: #bdbdbd;
}
.minecraft-button:active {
background-color: #8a8a8a;
}
.version-label {
margin-right: 10px;
}
.downloads {
padding: 25px;
padding-top: 5px;
justify-content: center;
align-items: center;
}
.download-link {
display: inline-block;
background-color: #048239;
color: #fff;
text-decoration: none;
padding: 10px 20px;
border-radius: 5px;
margin-bottom: 10px;
transition: background-color 0.3s;
}
.download-link:hover {
background-color: #00cc00;
}
.mod-list {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
padding: 10px;
text-align: center;
scrollbar-width: thin;
scrollbar-color: #555 #333;
}
.mod-item {
background-color: #333;
border-radius: 8px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.3);
padding: 10px;
text-align: center;
position: relative;
padding-bottom: 35px;
}
.mod-item .mod-icon {
width: 80px;
height: 80px;
margin: 0 auto 10px;
}
.mod-item .mod-icon img {
width: 100%;
height: 100%;
border-radius: 5px;
object-fit: cover;
}
.mod-item .mod-details {
padding: 10px 0;
}
.mod-item .mod-name {
font-size: 16px;
font-weight: bold;
margin-bottom: 5px;
color: #fff;
}
.mod-item .mod-author {
font-size: 12px;
color: #ccc;
margin-bottom: 5px;
}
.mod-item .mod-author a {
color: #0000ff
}
.mod-item .mod-description {
font-size: 14px;
color: #bbb;
margin-bottom: 10px;
}
.mod-item .mod-links {
display: flex;
justify-content: space-around;
width: calc(100% - 20px);
position: absolute;
bottom: 10px;
left: 10px;
}
.mod-item .mod-links .mod-download,
.mod-item .mod-links .mod-install {
flex: 1;
}
.mod-item .mod-links .mod-download {
padding: 5px 15px;
background-color: #555;
color: #fff;
text-decoration: none;
border-radius: 7px;
transition: background-color 0.3s;
}
.mod-item .mod-links .mod-download:hover {
cursor: pointer;
background-color: #777;
}
.mod-item .mod-links .mod-install {
padding: 5px 15px;
background-color: #4c4;
color: #fff;
text-decoration: none;
border-radius: 7px;
transition: background-color 0.3s;
}
.mod-item .mod-links .mod-install:hover {
cursor: pointer;
background-color: #00b300;
}
.mod-item .mod-links .mod-install.installed {
background-color: #ff0000;
}
.mod-item .mod-links .mod-install.installed:hover {
background-color: #cc0000;
}
.server-list {
display: flex;
flex: 1;
overflow: hidden;
}
.server-list iframe {
width: 100%;
height: 100%;
border: none;
}
.version-select {
width: 100%;
padding: 0.5rem;
border: 2px solid #4a4a4a;
border-radius: 5px;
background-color: #1e1e1e;
color: #ffffff;
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-repeat: no-repeat;
background-size: 0.65rem auto, 0.65rem auto;
transition: border-color 0.3s, background-color 0.3s;
}
.version-select:focus {
border-color: #4a90e2;
outline: none;
background-color: #2e2e2e;
}
.version-select option {
background-color: #1e1e1e;
color: #ffffff;
}
.version-label {
font-size: 1rem;
color: #ffffff;
margin-bottom: 0.5rem;
}
.archive-section {
margin: 1rem;
padding: 1rem;
border: 2px solid #3c3c3c;
border-radius: 8px;
background-color: #2e2e2e;
display: flex;
flex-direction: column;
align-items: flex-start;
}
.archive-button {
padding: 0.5rem 1rem;
margin-top: 0.5rem;
border: none;
border-radius: 5px;
background-color: #4a90e2;
color: #ffffff;
font-size: 1rem;
cursor: pointer;
transition: background-color 0.3s;
}
.archive-link {
padding: 0.5rem 1rem;
margin: 0.5rem 1rem;
border: none;
border-radius: 5px;
background-color: #4a90e2;
color: #ffffff;
font-size: 1rem;
cursor: pointer;
transition: background-color 0.3s;
}
.archive-button:hover,
.archive-link:hover {
background-color: #357abd;
}
.archive-button:focus,
.archive-link:focus {
outline: none;
box-shadow: 0 0 0 2px #357abd;
}
.archive-button:active,
.archive-link:active {
transform: scale(0.95);
}
.settings {
display: flex;
flex: 1;
flex-direction: column;
align-items: center;
justify-content: center;
}
.settings-section {
margin: 5px;
}
#username-input,
#theme-select {
width: calc(100% - 22px);
padding: 10px;
margin-bottom: 10px;
border: none;
border-radius: 3px;
background-color: #333;
color: #fff;
appearance: none;
}
#offline-checkbox {
padding: 10px;
margin-bottom: 15px;
}
#username-input:focus,
#theme-select:focus {
outline: none;
}
.setup-submit {
width: 100%;
padding: 10px;
border: none;
border-radius: 3px;
background-color: #00cc00;
color: #fff;
cursor: pointer;
transition: background-color 0.2s;
}
.setup-submit:hover {
background-color: #00ff00;
}
.setup-page,
.error-page {
display: flex;
flex: 1;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 20px;
padding-bottom: 7%;
}

View File

@ -4,11 +4,14 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>MineXLauncher</title>
<link rel="stylesheet" href="styles.css" />
<script src="main.js"></script>
<link rel="icon" type="image/webp" href="/resources/images/icons/favicon.webp" />
<link rel="stylesheet" href="/resources/styles/themes/default.css" />
<link rel="stylesheet" id="theme" onload="document.body.style.display = ''" />
<meta name="theme-color" content="#333" />
<script src="/resources/scripts/google-tag.js"></script>
<script src="/resources/scripts/main.js"></script>
</head>
<body style="display: none">
<div class="launcher">
<div class="title-bar">
<span id="title-bar-text">MineXLauncher</span>
@ -19,19 +22,16 @@
<span class="profile-name" id="profile-name"></span>
</div>
<nav>
<li class="nav-item selected" onclick="navigate.home.game()">
<li class="nav-item selected" href="/offline/">
<img src="/resources/images/icons/nav/game.webp" class="nav-icon" />
<span class="nav-text">Offline Game</span>
<span class="nav-text">Offline</span>
</li>
</nav>
</div>
<div class="main-panel">
<div class="top-menu">
<ul>
<li class="menu-item selected" onclick="navigate.home.game()">Game</li>
<li class="menu-item selected" href="/offline/">Game</li>
</ul>
</div>
<div class="main-content">
@ -45,40 +45,39 @@
<span class="custom-select-trigger">Select a version</span>
</div>
<div class="custom-options">
<div class="custom-option" onclick="game.select('game/EaglercraftL_1.9', '1.9.4')">
<div class="custom-option" onclick="game.select('/game/offline/main/EaglercraftL_1.9.html', '1.9.4')">
<img src="/resources/images/icons/clients/all.webp" />
<span>1.9.4</span>
</div>
<div class="custom-option" onclick="game.select('game/EaglercraftX_1/8', '1.8.8')">
<div class="custom-option" onclick="game.select('/game/offline/main/EaglercraftX_1.8.html', '1.8.8')">
<img src="/resources/images/icons/clients/all.webp" />
<span>1.8.8</span>
</div>
<div class="custom-option" onclick="game.select('game/Eaglercraft_1.5', '1.5.2')">
<div class="custom-option" onclick="game.select('/game/offline/main/Eaglercraft_1.5.html', '1.5.2')">
<img src="/resources/images/icons/clients/all.webp" />
<span>1.5.2</span>
</div>
<div class="custom-option" onclick="game.select('/game/Eaglercraft_a1.2.5', '1.2.5')">
<div class="custom-option" onclick="game.select('/game/offline/main/Eaglercraft_1.2.5.html', '1.2.5')">
<img src="/resources/images/icons/clients/all.webp" />
<span>1.2.5</span>
</div>
<div class="custom-option" onclick="game.select('/game/Eag;ercraft_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/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>
<div class="custom-option" onclick="game.select('/game/Eaglercraft_a1.2.6/', 'Alpha')">
<div class="custom-option" onclick="game.select('/game/offline/main/Eaglercraft_a1.2.6.html', 'Alpha')">
<img src="/resources/images/icons/clients/all.webp" />
<span>Alpha 1.2.6</span>
</div>
<div class="custom-option" onclick="game.select('/game/Eaglercraft_Indev', 'Indev')">
<div class="custom-option" onclick="game.select('/game/offline/main/Eaglercraft_Indev.html', 'Indev')">
<img src="/resources/images/icons/clients/all.webp" />
<span>Indev</span>
</div>
</div>
</div>
<button class="play-button" onclick="game.play()">Play</button>

View File

@ -1,8 +1,7 @@
// @ts-nocheck
const cacheVersion = '1.6';
const cacheName = `minexlauncher-v${cacheVersion}`;
const offlineUrl = '/lite/index.html';
const cacheAssets: string[] = [
const CACHE_VERSION = '1.6';
const OFFLINE_URL = '/offline/';
const CACHE_ASSETS = [
offlineUrl,
'/resources/images/icons/favicon.webp',
'/resources/scripts/google-tag.js',
@ -26,26 +25,28 @@ const cacheAssets: string[] = [
'/resources/images/backgrounds/themes/retro.webp',
'/resources/images/backgrounds/themes/starfall.webp',
'/resources/images/backgrounds/themes/campfire.webp',
'/lite/index.html',
'/lite/main.js',
'/lite/styles.css',
'/lite/game/Eaglercraft_1.2.5.html',
'/lite/game/Eaglercraft_1.5.html',
'/lite/game/Eaglercraft_a1.2.6.html',
'/lite/game/Eaglercraft_b1.3.html',
'/lite/game/Eaglercraft_b1.7.3.html',
'/lite/game/Eaglercraft_Indev.html',
'/lite/game/EaglercraftL_1.9.html',
'/lite/game/EaglercraftX_1.8.html'
'/resources/images/icons/nav/game.webp',
'/resources/images/covers/minecraft.webp',
'/resources/images/icons/clients/all.webp',
'/game/offline/main/EaglercraftL_1.9.html',
'/game/offline/main/EaglercraftX_1.8.html',
'/game/offline/main/Eaglercraft_1.5.html',
'/game/offline/main/Eaglercraft_1.2.5.html',
'/game/offline/main/Eaglercraft_b1.7.3.html',
'/game/offline/main/Eaglercraft_b1.3.html',
'/game/offline/main/Eaglercraft_a1.2.6.html',
'/game/offline/main/Eaglercraft_Indev.html',
];
const cacheName = `minexlauncher-v${CACHE_VERSION}`;
self.addEventListener('install', (event) => {
event.waitUntil(
caches.open(cacheName).then(async (cache) => {
const totalAssets = cacheAssets.length;
const totalAssets = CACHE_ASSETS.length;
let cachedAssets = 0;
for (const asset of cacheAssets) {
for (const asset of CACHE_ASSETS) {
await cache.add(asset);
++cachedAssets;
const progress = `${cachedAssets.toString()}/${totalAssets.toString()}`;
@ -76,7 +77,7 @@ self.addEventListener('fetch', (event) => {
if (event.request.mode === 'navigate') {
event.respondWith(
fetch(event.request).catch(() => {
return caches.match(offlineUrl);
return caches.match(OFFLINE_URL);
})
);
} else {