From ba7137a64eee69783b03c04bd2aa109e4a956e70 Mon Sep 17 00:00:00 2001 From: zhangyuheng Date: Tue, 10 Feb 2026 13:01:46 +0800 Subject: [PATCH] init --- .gitignore | 1 + favicon.ico | Bin 0 -> 76981 bytes fund_progress.txt | 1 + index.html | 214 ++++++++++++++ pigwei.html | 717 ++++++++++++++++++++++++++++++++++++++++++++++ script.js | 258 +++++++++++++++++ sponsors.txt | 36 +++ stats.html | 376 ++++++++++++++++++++++++ stats_script.js | 188 ++++++++++++ statsprocess.py | 180 ++++++++++++ style.css | 707 +++++++++++++++++++++++++++++++++++++++++++++ 11 files changed, 2678 insertions(+) create mode 100644 .gitignore create mode 100644 favicon.ico create mode 100644 fund_progress.txt create mode 100644 index.html create mode 100644 pigwei.html create mode 100644 script.js create mode 100644 sponsors.txt create mode 100644 stats.html create mode 100644 stats_script.js create mode 100644 statsprocess.py create mode 100644 style.css diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..46e0b8e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/stats \ No newline at end of file diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..75e42bb624392c0a066861502a868f53f6225072 GIT binary patch literal 76981 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 IM6N<$g0iZTdH?_b literal 0 HcmV?d00001 diff --git a/fund_progress.txt b/fund_progress.txt new file mode 100644 index 0000000..b00166d --- /dev/null +++ b/fund_progress.txt @@ -0,0 +1 @@ +服务器升级M4 Mac Mini 32G,2620,5000 diff --git a/index.html b/index.html new file mode 100644 index 0000000..b638d19 --- /dev/null +++ b/index.html @@ -0,0 +1,214 @@ + + + + + + 白鹿原 Minecraft 服务器 + + + + + + + + + + + + + +
+
+
+

白鹿原 Minecraft

+

永不换档的纯净原版服务器

+ +
+ 已稳定运行 00 小时 00 秒 +
+ +
+
+ mcpure.lunadeer.cn + + 已复制 +
+

点击复制服务器地址

+ + +
+
+ + 正在获取状态... +
+
+
加载中...
+
+
+
+
+
+ + +
+
+ + +
+ +
+
+
+ +

纯净原版

+

无纷繁复杂的 Mod,无破坏平衡的插件。一切简单的就像是单机模式的共享一般。

+
+
+ + +
+
+
+ +

深度自研

+

全栈自研核心,拒绝卡脖子,保证可持续发展。

+
+
+ + +
+
+
+ +

原汁原味

+

生物生成、红石参数与单机完全一致。

+
+
+ + +
+
+
+ +

免费圈地

+

2048*2048 超大领地

+
+
+
+
+
+ +

基岩互通

+

手机电脑随时畅玩

+
+
+
+
+
+ +

自有硬件

+

物理工作站,永不跑路

+
+
+
+
+
+ +

娱乐玩法

+

空岛、跑酷、小游戏

+
+
+ + +
+
+ +

紧跟新版

+

紧跟 Paper 核心版本更新,始终保持在版本前列。第一时间体验 Minecraft 的最新内容。

+
+
+ + +
+
+ +

新手指南

+

完善的服务器文档与活跃的社区,帮助你快速上手,加入白鹿原大家庭。

+
+
+
+
+
+ + +
+
+

特别鸣谢

+
+ +
+
+ +
+
+
+ + + + + + + +
+
+ +
+
+ + + + diff --git a/pigwei.html b/pigwei.html new file mode 100644 index 0000000..6aab5e7 --- /dev/null +++ b/pigwei.html @@ -0,0 +1,717 @@ + + + + + + 薇薇变小猪倒计时 + + + + + + +
🍬
+
🧋
+
💖
+
🧁
+ +
+
+ + + + + + + + + + + + + + + + +
哼哼~
+
+ +

薇薇变小猪倒计时

+ +
距离变小猪还有...
+ +
+
+ 00 + Days +
+
+ 00 + Hours +
+
+ 00 + Mins +
+
+ 00 + Secs +
+
+ +
+ Loading Happiness... + 0.000% +
+
+
+
+ +
+ + + +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Zzz... +
+
+
+ + + + + + + diff --git a/script.js b/script.js new file mode 100644 index 0000000..5bceac2 --- /dev/null +++ b/script.js @@ -0,0 +1,258 @@ +function copyIp() { + const ipText = document.getElementById('server-ip').innerText; + const tooltip = document.getElementById('copy-tooltip'); + + navigator.clipboard.writeText(ipText).then(() => { + tooltip.innerText = "已复制!"; + tooltip.classList.add('show'); + + setTimeout(() => { + tooltip.classList.remove('show'); + setTimeout(() => { + tooltip.innerText = "点击复制 IP"; + }, 200); // Wait for fade out + }, 2000); + }).catch(err => { + console.error('无法复制文本: ', err); + tooltip.innerText = "复制失败"; + tooltip.classList.add('show'); + setTimeout(() => { + tooltip.classList.remove('show'); + }, 2000); + }); +} + +// Sponsors Logic +document.addEventListener('DOMContentLoaded', () => { + fetchSponsors(); + fetchCrowdfunding(); + setupModal(); + fetchServerStatus(); + startRuntimeTimer(); +}); + +function startRuntimeTimer() { + const startTime = new Date("2021-09-14T09:57:59").getTime(); + + function update() { + const now = new Date().getTime(); + const diff = now - startTime; + + const days = Math.floor(diff / (1000 * 60 * 60 * 24)); + const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); + const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60)); + const seconds = Math.floor((diff % (1000 * 60)) / 1000); + + const daysEl = document.getElementById("runtime-days"); + const hoursEl = document.getElementById("runtime-hours"); + const minutesEl = document.getElementById("runtime-minutes"); + const secondsEl = document.getElementById("runtime-seconds"); + + if (daysEl) daysEl.innerText = days; + if (hoursEl) hoursEl.innerText = hours; + if (minutesEl) minutesEl.innerText = minutes; + if (secondsEl) secondsEl.innerText = seconds; + } + + update(); + setInterval(update, 1000); +} + +async function fetchServerStatus() { + const countElement = document.getElementById('online-count'); + const listElement = document.getElementById('players-list'); + const dotElement = document.querySelector('.status-dot'); + + try { + const response = await fetch('https://api.mcstatus.io/v2/status/java/mcpure.lunadeer.cn'); + const data = await response.json(); + + if (data.online) { + countElement.innerText = `在线人数: ${data.players.online} / ${data.players.max}`; + dotElement.classList.remove('offline'); + + if (data.players.list && data.players.list.length > 0) { + listElement.innerHTML = data.players.list.map(player => ` +
+ + ${player.name_raw} +
+ `).join(''); + } else { + listElement.innerHTML = '
暂无玩家在线
'; + } + } else { + countElement.innerText = '服务器离线'; + dotElement.classList.add('offline'); + listElement.innerHTML = '
服务器离线
'; + } + } catch (error) { + console.error('Error fetching server status:', error); + countElement.innerText = '无法获取状态'; + dotElement.classList.add('offline'); + listElement.innerHTML = '
获取失败
'; + } +} + +async function fetchCrowdfunding() { + try { + console.log('Fetching crowdfunding data...'); + const response = await fetch('fund_progress.txt'); + if (!response.ok) { + console.error('Failed to fetch fund_progress.txt:', response.status, response.statusText); + return; + } + + const text = await response.text(); + console.log('Crowdfunding data received:', text); + const lines = text.trim().split('\n'); + + const funds = []; + lines.forEach(line => { + // Replace Chinese comma with English comma just in case + const normalizedLine = line.replace(/,/g, ','); + const parts = normalizedLine.split(','); + if (parts.length >= 3) { + const name = parts[0].trim(); + const current = parseFloat(parts[1].trim()); + const target = parseFloat(parts[2].trim()); + + if (name && !isNaN(current) && !isNaN(target)) { + funds.push({ name, current, target }); + } + } + }); + console.log('Parsed funds:', funds); + + if (funds.length > 0) { + renderCrowdfunding(funds); + const section = document.getElementById('crowdfunding-section'); + if (section) { + section.style.display = 'block'; + console.log('Crowdfunding section displayed'); + } else { + console.error('Crowdfunding section element not found'); + } + } else { + console.warn('No valid crowdfunding data found'); + } + + } catch (error) { + console.error('Error loading crowdfunding data:', error); + } +} + +function renderCrowdfunding(funds) { + const container = document.getElementById('crowdfunding-grid'); + + container.innerHTML = funds.map(fund => { + const percentage = Math.min(100, Math.max(0, (fund.current / fund.target) * 100)); + return ` +
+
+
${fund.name}
+
+ ¥${fund.current} / ¥${fund.target} +
+
+
+
+
+
${percentage.toFixed(1)}%
+
+ `; + }).join(''); +} + +async function fetchSponsors() { + try { + const response = await fetch('sponsors.txt'); + const text = await response.text(); + const lines = text.trim().split('\n'); + + const sponsors = []; + const userTotals = {}; + + lines.forEach(line => { + const parts = line.split(','); + if (parts.length >= 3) { + const name = parts[0].trim(); + const project = parts[1].trim(); + const amountStr = parts[2].trim().replace('¥', ''); + const amount = parseFloat(amountStr); + const date = parts[3] ? parts[3].trim() : ''; + + if (!isNaN(amount)) { + sponsors.push({ name, project, amount, date }); + + if (userTotals[name]) { + userTotals[name] += amount; + } else { + userTotals[name] = amount; + } + } + } + }); + + // Sort users by total amount for Top 3 + const sortedUsers = Object.keys(userTotals).map(name => ({ + name, + total: userTotals[name] + })).sort((a, b) => b.total - a.total); + + renderTopSponsors(sortedUsers.slice(0, 3)); + renderSponsorsTable(sponsors); + + } catch (error) { + console.error('Error loading sponsors:', error); + } +} + +function renderTopSponsors(topUsers) { + const container = document.getElementById('top-sponsors'); + const medals = ['🥇', '🥈', '🥉']; + + container.innerHTML = topUsers.map((user, index) => ` + + `).join(''); +} + +function renderSponsorsTable(sponsors) { + const tbody = document.querySelector('#sponsors-table tbody'); + // Sort by date descending (newest first) or keep original order? + // Usually original order in file is chronological. Let's reverse it to show newest first. + const reversedSponsors = [...sponsors].reverse(); + + tbody.innerHTML = reversedSponsors.map(s => ` + + ${s.name} + ${s.project} + ¥${s.amount.toFixed(2)} + ${s.date} + + `).join(''); +} + +function setupModal() { + const modal = document.getElementById('sponsors-modal'); + const btn = document.getElementById('view-sponsors-btn'); + const span = document.getElementsByClassName('close-modal')[0]; + + btn.onclick = function() { + modal.style.display = "flex"; + } + + span.onclick = function() { + modal.style.display = "none"; + } + + window.onclick = function(event) { + if (event.target == modal) { + modal.style.display = "none"; + } + } +} diff --git a/sponsors.txt b/sponsors.txt new file mode 100644 index 0000000..a206f68 --- /dev/null +++ b/sponsors.txt @@ -0,0 +1,36 @@ +TowardsCommunism,服务器硬件升级,20¥,2024-11-22 +Kun_Wu,服务器硬件升级,50¥,2024-11-22 +ZhuTiZi_y,服务器硬件升级,20¥,2024-11-22 +Moon_Bridge,服务器硬件升级,50¥,2024-11-22 +Clincded_Xsa,服务器硬件升级,50¥,2024-11-22 +Genera1314,服务器硬件升级,20¥,2024-11-22 +Huakou,服务器硬件升级,50¥,2024-11-22 +Director_HOU,服务器硬件升级,20¥,2024-11-23 +Cinetank,服务器硬件升级,50¥,2024-11-23 +33zi,服务器硬件升级,70¥,2024-11-23 +obligationi,服务器硬件升级,100¥,2024-11-23 +himscars,服务器硬件升级,50¥,2024-11-23 +TowardsCommunism,服务器硬件升级,50¥,2024-11-23 +dghyuiok,服务器硬件升级,20¥,2024-11-23 +rainy_daily,服务器硬件升级,50¥,2024-11-23 +OG Trouble,电费,5¥,2024-11-25 +33zi,服务器硬件升级,20¥,2024-12-7 +Kim,服务器硬件升级,100¥,2024-12-9 +Su_,服务器硬件升级,50¥,2024-12-9 +ZhuTiZi_y,服务器硬件升级,100¥,2024-12-17 +M1AOYIN,服务器硬件升级,1000¥,2024-12-25 +TowardsCommunism,服务器硬件升级,20¥,2024-12-25 +流明,服务器硬件升级,50¥,2024-12-25 +MISS_U,服务器硬件升级,100¥,2025-1-18 +Treasure_yu,服务器硬件升级,30¥,2025-1-28 +Huakou,服务器硬件升级,100¥,2025-1-31 +Forever_Qi,服务器硬件升级,20¥,2025-2-21 +C0ldWood,服务器硬件升级,20¥,2025-3-1 +天气,服务器硬件升级,50¥,2025-3-23 +天气,服务器硬件升级,20¥,2025-3-26 +Bear_Brother,电费赞助,30¥,2025-4-20 +Kun_Wu,服务器硬件升级,220¥,2025-4-21 +CN_snowman,电费赞助,900¥,2025-5-2 +BE.BackedKey9120,电费赞助,20¥,2025-5-19 +wait_running,服务器硬件升级,100¥,2025-11-26 +NthM7,服务器硬件升级,20¥,2025-12-2 diff --git a/stats.html b/stats.html new file mode 100644 index 0000000..f35aea0 --- /dev/null +++ b/stats.html @@ -0,0 +1,376 @@ + + + + + + 玩家数据 - 白鹿原 Minecraft 服务器 + + + + + + + + + + + + + + +
+
+
+

数据中心

+

记录每一位冒险者的足迹

+
+
+ + +
+
+ + +

排行榜

+
+ +
+
+
+
旅行者
+
+
+
加载中...
+
+
+ + +
+
+
+
搬石大师
+
+
+
加载中...
+
+
+ + +
+
+
+
挖挖机
+
+
+
加载中...
+
+
+ + +
+
+
+
亡灵
+
+
+
加载中...
+
+
+
+ + +

玩家档案

+ +
+ + +
+ +
+ +
+ +
+ +
+ +
正在从服务器获取数据...
+
+
+ + + + +
+
+ +
+
+ + + + diff --git a/stats_script.js b/stats_script.js new file mode 100644 index 0000000..4c8ac51 --- /dev/null +++ b/stats_script.js @@ -0,0 +1,188 @@ +document.addEventListener('DOMContentLoaded', () => { + fetchStats(); + setupModal(); + setupSearch(); + setupLoadMore(); +}); + +let allPlayers = []; +let displayedPlayers = []; +let currentPage = 1; +const pageSize = 24; + +async function fetchStats() { + try { + const response = await fetch('stats/summary.json'); + if (!response.ok) throw new Error('Failed to load stats'); + + const data = await response.json(); + allPlayers = data.players; + + // Hide loading + document.getElementById('loading-indicator').style.display = 'none'; + + // Render things + renderLeaderboards(); + + // Initial Grid Render + displayedPlayers = allPlayers; // Start with all + renderPlayerGrid(true); // reset + + } catch (error) { + console.error('Error:', error); + document.getElementById('loading-indicator').innerText = "加载数据失败,请稍后重试。"; + } +} + +function renderLeaderboards() { + // Helper to sort and slice + const getTop = (key, subKey) => { + return [...allPlayers] + .sort((a, b) => { + let valA = subKey ? a.stats[key] : a.stats[key]; // if structure allows direct access + let valB = subKey ? b.stats[key] : b.stats[key]; + + // Special case for walk which has raw sorting value + if (key === 'walk_fmt') valA = a.stats.walk_raw; + if (key === 'walk_fmt') valB = b.stats.walk_raw; + + return valB - valA; + }) + .slice(0, 4); // Top 4 + }; + + const renderCard = (elementId, players, valueFormatter) => { + const container = document.getElementById(elementId); + if (!players || players.length === 0) { + container.innerHTML = '
暂无数据
'; + return; + } + + const top1 = players[0]; + let html = ` +
+ +
${top1.name}
+
${valueFormatter(top1)}
+
+
+ `; + + for (let i = 1; i < players.length; i++) { + const p = players[i]; + html += ` +
+
+ ${i+1} + ${p.name} +
+ ${valueFormatter(p)} +
+ `; + } + html += '
'; + container.innerHTML = html; + }; + + // 1. Walk (stats.walk_raw) + const topWalkers = getTop('walk_fmt'); // uses walk_raw internally + renderCard('lb-walk', topWalkers, p => p.stats.walk_fmt); + + // 2. Placed (stats.placed) + const topPlacers = getTop('placed'); + renderCard('lb-placed', topPlacers, p => p.stats.placed.toLocaleString()); + + // 3. Mined (stats.mined) + const topMiners = getTop('mined'); + renderCard('lb-mined', topMiners, p => p.stats.mined.toLocaleString()); + + // 4. Deaths (stats.deaths) + const topDeaths = getTop('deaths'); + renderCard('lb-deaths', topDeaths, p => p.stats.deaths); +} + +function renderPlayerGrid(reset = false) { + const grid = document.getElementById('players-grid'); + const loadMoreBtn = document.getElementById('load-more-btn'); + + if (reset) { + grid.innerHTML = ''; + currentPage = 1; + } + + const start = (currentPage - 1) * pageSize; + const end = start + pageSize; + const items = displayedPlayers.slice(start, end); + + items.forEach(p => { + const card = document.createElement('div'); + card.className = 'player-card'; + card.onclick = () => openModal(p); + + card.innerHTML = ` + +

${p.name}

+ + `; + grid.appendChild(card); + }); + + if (end >= displayedPlayers.length) { + loadMoreBtn.style.display = 'none'; + } else { + loadMoreBtn.style.display = 'inline-block'; + } +} + +function setupLoadMore() { + document.getElementById('load-more-btn').addEventListener('click', () => { + currentPage++; + renderPlayerGrid(false); + }); +} + +function setupSearch() { + const input = document.getElementById('player-search'); + input.addEventListener('input', (e) => { + const term = e.target.value.toLowerCase().trim(); + if (!term) { + displayedPlayers = allPlayers; + } else { + displayedPlayers = allPlayers.filter(p => + p.name.toLowerCase().includes(term) || + p.uuid.toLowerCase().includes(term) + ); + } + renderPlayerGrid(true); + }); +} + +// Modal Logic +const modal = document.getElementById("player-modal"); +const span = document.getElementsByClassName("close-modal")[0]; + +function setupModal() { + span.onclick = function() { + modal.style.display = "none"; + } + window.onclick = function(event) { + if (event.target == modal) { + modal.style.display = "none"; + } + } +} + +function openModal(player) { + document.getElementById('modal-name').innerText = player.name; + document.getElementById('modal-uuid').innerText = player.uuid; + const avatar = document.getElementById('modal-avatar'); + avatar.src = player.avatar; + avatar.onerror = () => { avatar.src = `https://crafatar.com/avatars/${player.uuid}?size=64&overlay`; }; + + document.getElementById('modal-walk').innerText = player.stats.walk_fmt; + document.getElementById('modal-placed').innerText = player.stats.placed.toLocaleString(); + document.getElementById('modal-mined').innerText = player.stats.mined.toLocaleString(); + document.getElementById('modal-deaths').innerText = player.stats.deaths; + + modal.style.display = "block"; +} diff --git a/statsprocess.py b/statsprocess.py new file mode 100644 index 0000000..4cce493 --- /dev/null +++ b/statsprocess.py @@ -0,0 +1,180 @@ +import os +import json +import requests +import re +import time +from concurrent.futures import ThreadPoolExecutor +from datetime import datetime + +BASE_URL = "http://x2.sjcmc.cn:15960/stats/" +STATS_DIR = "stats" +IMAGE_DIR = os.path.join(STATS_DIR, "images") + +# Ensure directories exist +os.makedirs(STATS_DIR, exist_ok=True) +os.makedirs(IMAGE_DIR, exist_ok=True) + +print("Fetching file list...") +try: + response = requests.get(BASE_URL, timeout=10) + response.raise_for_status() + content = response.text + # Regex for UUID.json + files = re.findall(r'href="([0-9a-f-]{36}\.json)"', content) + files = list(set(files)) + print(f"Found {len(files)} player stats files.") +except Exception as e: + print(f"Error fetching file list: {e}") + files = [] + +def get_player_name(uuid): + # Try Ashcon first + try: + r = requests.get(f"https://api.ashcon.app/mojang/v2/user/{uuid}", timeout=5) + if r.status_code == 200: + return r.json().get('username') + except: + pass + + # Try Mojang Session + try: + r = requests.get(f"https://sessionserver.mojang.com/session/minecraft/profile/{uuid}", timeout=5) + if r.status_code == 200: + return r.json().get('name') + except: + pass + + return "Unknown" + +def process_player(filename): + uuid = filename.replace(".json", "") + json_path = os.path.join(STATS_DIR, filename) + # img_path = os.path.join(IMAGE_DIR, f"{uuid}.png") # No longer used + + print(f"Processing {uuid}...") + + # 1. Download/Load JSON + data = None + try: + # Check if we already have it locally and it's valid, maybe skip download? + # User implies fetching updates, so we download. + r = requests.get(BASE_URL + filename, timeout=10) + if r.status_code == 200: + data = r.json() + else: + print(f"Failed to download {filename}") + return None + except Exception as e: + print(f"Error downloading {filename}: {e}") + return None + + if not data: + return None + + # 2. Get Name + # We can check if name is already in the processing file to avoid API calls if scraping repeatedly? + # For this task, we assume we need to fetch it. + # To save API calls, we could check if we have a saved version with a name. + player_name = "Unknown" + + # Check if 'extra' exists in downloaded data (unlikely if strictly from server) + # But checking if we have a local cache of this file with a name is smart + if os.path.exists(json_path): + try: + with open(json_path, 'r', encoding='utf-8') as f: + local_data = json.load(f) + if 'extra' in local_data and local_data['extra'].get('player_name') != "Unknown": + player_name = local_data['extra']['player_name'] + except: + pass + + if player_name == "Unknown": + player_name = get_player_name(uuid) + # Sleep slightly to be nice to APIs if meaningful massive parallel + time.sleep(0.1) + + # 3. Download Avatar - SKIPPED to avoid rate limits + # The frontend will handle dynamic loading of avatars using Minotar/Crafatar URLs. + + # 4. Calculate Stats + stats = data.get('stats', {}) + + # Walk + # Handle both modern ':' and potentially flattened or different versions if necessary, + # but usually proper JSON has "minecraft:custom" + # "minecraft:walk_one_cm" + + custom = stats.get('minecraft:custom', {}) + walk_cm = custom.get('minecraft:walk_one_cm', 0) + + def format_dist(cm): + m = cm / 100 + if m < 1000: + return f"{m:.1f} m" + else: + return f"{m/1000:.2f} km" + + walk_fmt = format_dist(walk_cm) + + # Mined + mined = stats.get('minecraft:mined', {}) + total_mined = sum(mined.values()) + + # Placed (Used) + used = stats.get('minecraft:used', {}) + total_placed = sum(used.values()) + + # Deaths (Killed By) + killed_by = stats.get('minecraft:killed_by', {}) + total_deaths = sum(killed_by.values()) + + # Inject into JSON + data['extra'] = { + 'player_name': player_name, + 'formatted_walk': walk_fmt, + 'walk_cm': walk_cm, + 'total_mined': total_mined, + 'total_placed': total_placed, + 'total_deaths': total_deaths + } + + # Save + with open(json_path, 'w', encoding='utf-8') as f: + json.dump(data, f, ensure_ascii=False, indent=4) + + return { + 'uuid': uuid, + 'name': player_name, + 'avatar': f"https://minotar.net/avatar/{player_name}/64" if player_name != "Unknown" else f"https://minotar.net/avatar/{uuid}/64", + 'stats': { + 'walk_fmt': walk_fmt, + 'walk_raw': walk_cm, + 'mined': total_mined, + 'placed': total_placed, + 'deaths': total_deaths + } + } + +# Process in parallel +# Reduce max_workers to avoid hitting API limits too hard locally +results = [] +with ThreadPoolExecutor(max_workers=4) as executor: + # Process only first 50 for testing? No, user wants all. + # But for a script I am writing for them, I should let them run it. + # I will process ALL found files. + results = list(executor.map(process_player, files)) + +results = [r for r in results if r is not None] + +# Sort by name perhaps? Or just raw list. +results.sort(key=lambda x: x['name']) + +summary = { + 'updated_at': datetime.now().strftime("%Y-%m-%d %H:%M:%S"), + 'players': results +} + +with open(os.path.join(STATS_DIR, 'summary.json'), 'w', encoding='utf-8') as f: + json.dump(summary, f, ensure_ascii=False, indent=4) + +print("Processing complete. Summary saved to stats/summary.json") diff --git a/style.css b/style.css new file mode 100644 index 0000000..3f753b4 --- /dev/null +++ b/style.css @@ -0,0 +1,707 @@ +:root { + --bg-color: #f5f5f7; + --card-bg: #ffffff; + --text-primary: #1d1d1f; + --text-secondary: #86868b; + --accent-color: #0071e3; /* Apple Blue, but we might want Green */ + --brand-green: #34c759; /* Apple Green */ + --radius-large: 30px; + --radius-medium: 20px; + --transition: all 0.4s cubic-bezier(0.25, 1, 0.5, 1); +} + +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: "Inter", "Noto Sans SC", -apple-system, BlinkMacSystemFont, sans-serif; + background-color: var(--bg-color); + color: var(--text-primary); + -webkit-font-smoothing: antialiased; +} + +/* Navbar */ +.navbar { + position: fixed; + top: 0; + width: 100%; + height: 44px; + background: rgba(255, 255, 255, 0.8); + backdrop-filter: blur(20px); + -webkit-backdrop-filter: blur(20px); + z-index: 1000; + border-bottom: 1px solid rgba(0,0,0,0.05); + display: flex; + justify-content: center; +} + +.nav-content { + width: 100%; + max-width: 1000px; + display: flex; + justify-content: space-between; + align-items: center; + padding: 0 20px; + font-size: 12px; +} + +.logo img { + height: 32px; + width: auto; + display: block; +} + +.nav-links a { + text-decoration: none; + color: var(--text-primary); + margin-left: 24px; + opacity: 0.8; + transition: opacity 0.2s; +} + +.nav-links a:hover { + opacity: 1; +} + +.nav-cta { + background: #0071e3; + color: white !important; + padding: 6px 14px; + border-radius: 980px; + font-size: 12px; + font-weight: 500; + opacity: 1 !important; + transition: all 0.2s; +} + +.nav-cta:hover { + background: #0077ed; + transform: scale(1.05); +} + +/* Hero */ +.hero { + height: 80vh; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + text-align: center; + padding-top: 44px; /* Navbar height */ + background-color: #000; /* Fallback */ + background-size: cover; + background-position: center; + position: relative; + color: white; +} + +.hero-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0, 0, 0.4); /* Dark overlay for text readability */ + z-index: 1; +} + +.hero-content { + position: relative; + z-index: 2; +} + +.hero-title { + font-size: 56px; + line-height: 1.07143; + font-weight: 700; + letter-spacing: -0.005em; + margin-bottom: 10px; + color: white; + text-shadow: 0 2px 10px rgba(0,0,0,0.3); + /* Remove gradient text for image background */ + background: none; + -webkit-text-fill-color: white; +} + +.hero-subtitle { + font-size: 28px; + line-height: 1.10722; + font-weight: 400; + letter-spacing: .004em; + color: rgba(255, 255, 255, 0.9); + margin-bottom: 15px; + text-shadow: 0 2px 5px rgba(0,0,0,0.3); +} + +.server-runtime { + font-size: 18px; + color: rgba(255, 255, 255, 0.85); + margin-bottom: 40px; + font-weight: 500; + text-shadow: 0 1px 3px rgba(0,0,0,0.3); +} + +.hero-actions { + display: flex; + flex-direction: column; + align-items: center; + gap: 10px; +} + +.server-ip-box { + background: rgba(255, 255, 255, 0.2); + backdrop-filter: blur(10px); + border: 1px solid rgba(255, 255, 255, 0.3); + color: white; + padding: 12px 24px; + border-radius: 980px; + font-size: 17px; + font-weight: 400; + cursor: pointer; + transition: var(--transition); + display: flex; + align-items: center; + gap: 8px; + position: relative; +} + +.server-ip-box:hover { + background: rgba(255, 255, 255, 0.3); + transform: scale(1.02); +} + +.ip-hint { + font-size: 12px; + color: rgba(255, 255, 255, 0.7); +} + +.tooltip { + position: absolute; + top: -30px; + background: #333; + color: #fff; + padding: 4px 8px; + border-radius: 4px; + font-size: 12px; + opacity: 0; + transition: opacity 0.2s; +} +.tooltip.show { opacity: 1; } + +/* Online Status */ +.online-status-box { + margin-top: 15px; + position: relative; + cursor: default; +} + +.status-indicator { + background: rgba(0, 0, 0, 0.4); + backdrop-filter: blur(10px); + padding: 8px 16px; + border-radius: 20px; + color: rgba(255, 255, 255, 0.9); + font-size: 14px; + display: flex; + align-items: center; + gap: 8px; + transition: var(--transition); +} + +.status-dot { + width: 8px; + height: 8px; + background-color: #34c759; /* Green */ + border-radius: 50%; + box-shadow: 0 0 8px rgba(52, 199, 89, 0.6); +} + +.status-dot.offline { + background-color: #ff3b30; /* Red */ + box-shadow: 0 0 8px rgba(255, 59, 48, 0.6); +} + +.players-tooltip { + position: absolute; + top: 100%; + left: 50%; + transform: translateX(-50%); + margin-top: 10px; + background: rgba(255, 255, 255, 0.95); + color: #1d1d1f; + padding: 10px; + border-radius: 12px; + width: 200px; + max-height: 300px; + overflow-y: auto; + box-shadow: 0 4px 20px rgba(0,0,0,0.15); + opacity: 0; + visibility: hidden; + transition: all 0.2s ease; + z-index: 10; + text-align: left; +} + +.online-status-box:hover .players-tooltip { + opacity: 1; + visibility: visible; + margin-top: 15px; +} + +.players-tooltip::before { + content: ''; + position: absolute; + top: -6px; + left: 50%; + transform: translateX(-50%); + border-width: 0 6px 6px 6px; + border-style: solid; + border-color: transparent transparent rgba(255, 255, 255, 0.95) transparent; +} + +.player-item { + padding: 6px 8px; + font-size: 13px; + border-bottom: 1px solid rgba(0,0,0,0.05); + display: flex; + align-items: center; + gap: 8px; +} + +.player-item:last-child { + border-bottom: none; +} + +.player-avatar { + width: 16px; + height: 16px; + border-radius: 2px; +} + +/* Features Section */ +.features-section { + padding: 100px 0; + background: var(--bg-color); +} + +.container { + max-width: 1000px; + margin: 0 auto; + padding: 0 20px; +} + +.section-header { + font-size: 40px; + font-weight: 700; + text-align: center; + margin-bottom: 60px; +} + +/* Bento Grid */ +.bento-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + grid-auto-rows: 180px; + gap: 20px; +} + +.bento-item { + background: var(--card-bg); + border-radius: var(--radius-large); + padding: 30px; + display: flex; + flex-direction: column; + justify-content: flex-end; /* Align content to bottom for image cards */ + align-items: flex-start; /* Align left */ + text-align: left; + transition: var(--transition); + box-shadow: 2px 4px 12px rgba(0,0,0,0.02); + overflow: hidden; + position: relative; + background-size: cover; + background-position: center; +} + +.bento-item:hover { + transform: scale(1.02); + box-shadow: 2px 8px 24px rgba(0,0,0,0.06); +} + +/* Overlay for Bento Items with Images */ +.bento-overlay { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: linear-gradient(to bottom, rgba(0,0,0,0) 0%, rgba(0,0,0,0.6) 100%); + z-index: 1; +} + +.bento-content { + position: relative; + z-index: 2; + width: 100%; +} + +/* Grid Spans */ +.large-item { + grid-column: span 2; + grid-row: span 2; +} + +.medium-item { + grid-column: span 2; + grid-row: span 1; +} + +.small-item { + grid-column: span 1; + grid-row: span 1; +} + +/* Hardware Card (No Image) */ +.hardware-card { + background: linear-gradient(135deg, #2c3e50 0%, #000000 100%); + justify-content: center; + align-items: center; + text-align: center; + position: relative; +} + +/* Add a subtle tech grid pattern overlay */ +.hardware-card::before { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-image: + linear-gradient(rgba(255, 255, 255, 0.05) 1px, transparent 1px), + linear-gradient(90deg, rgba(255, 255, 255, 0.05) 1px, transparent 1px); + background-size: 20px 20px; + z-index: 1; +} + +.hardware-card .bento-content { + color: white; + z-index: 2; +} + +.hardware-card .icon { + color: white; + font-size: 32px; + margin-bottom: 10px; +} + +.hardware-card h4 { + color: white; + font-size: 17px; + margin: 10px 0 5px; +} + +.hardware-card p { + color: rgba(255, 255, 255, 0.8); + font-size: 13px; +} + +/* Content Styling for Image Cards */ +.bento-item:not(.hardware-card) .icon { + color: white; + font-size: 32px; + margin-bottom: 10px; +} + +.bento-item:not(.hardware-card) h3, +.bento-item:not(.hardware-card) h4 { + color: white; + text-shadow: 0 2px 4px rgba(0,0,0,0.3); +} + +.bento-item:not(.hardware-card) p { + color: rgba(255, 255, 255, 0.9); + font-size: 14px; + text-shadow: 0 1px 2px rgba(0,0,0,0.3); +} + +.bento-item h3 { + font-size: 24px; + margin-bottom: 10px; +} + +.small-item h4 { + font-size: 17px; + margin: 10px 0 5px; +} + +.small-item p { + font-size: 13px; +} + +/* Details Section */ +.details-section { + padding: 100px 0; + background: #fff; +} + +.detail-row { + margin-bottom: 80px; + text-align: center; +} + +.detail-text h3 { + font-size: 32px; + margin-bottom: 15px; +} + +.detail-text p { + font-size: 19px; + color: var(--text-secondary); + max-width: 600px; + margin: 0 auto; +} + +/* Footer */ +footer { + background: var(--bg-color); + padding: 40px 0; + border-top: 1px solid #e5e5e5; + font-size: 12px; + color: var(--text-secondary); +} + +/* Responsive */ +@media (max-width: 900px) { + .bento-grid { + grid-template-columns: 1fr; + grid-auto-rows: auto; + } + + .large-item, .medium-item, .small-item { + grid-column: span 1; + grid-row: auto; + min-height: 250px; + } + + .hero-title { + font-size: 40px; + } +} + +/* Sponsors Section */ +.sponsors-section { + padding: 80px 0; + background: #fff; + text-align: center; +} + +.top-sponsors-grid { + display: flex; + justify-content: center; + gap: 30px; + margin-bottom: 40px; + flex-wrap: wrap; +} + +.sponsor-card { + background: var(--bg-color); + border-radius: var(--radius-medium); + padding: 30px; + width: 250px; + box-shadow: 0 4px 12px rgba(0,0,0,0.05); + transition: var(--transition); + display: flex; + flex-direction: column; + align-items: center; +} + +.sponsor-card:hover { + transform: translateY(-5px); + box-shadow: 0 8px 24px rgba(0,0,0,0.1); +} + +.sponsor-rank { + font-size: 48px; + margin-bottom: 10px; +} + +.sponsor-name { + font-size: 20px; + font-weight: 600; + margin-bottom: 5px; + color: var(--text-primary); +} + +.sponsor-amount { + font-size: 16px; + color: var(--accent-color); + font-weight: 500; +} + +.view-sponsors-btn { + background: var(--text-primary); + color: white; + border: none; + padding: 12px 30px; + border-radius: 980px; + font-size: 16px; + cursor: pointer; + transition: var(--transition); +} + +.view-sponsors-btn:hover { + background: #000; + transform: scale(1.05); +} + +/* Crowdfunding Section */ +.crowdfunding-section { + padding: 80px 0; + background: var(--bg-color); /* Or white, depending on contrast preference */ +} + +.crowdfunding-grid { + display: flex; + flex-direction: column; + gap: 30px; + max-width: 800px; + margin: 0 auto; +} + +.fund-card { + background: #fff; + border-radius: var(--radius-medium); + padding: 30px; + box-shadow: 0 4px 12px rgba(0,0,0,0.05); + transition: var(--transition); +} + +.fund-card:hover { + transform: translateY(-5px); + box-shadow: 0 8px 24px rgba(0,0,0,0.1); +} + +.fund-header { + display: flex; + justify-content: space-between; + align-items: flex-end; + margin-bottom: 15px; +} + +.fund-title { + font-size: 20px; + font-weight: 600; + color: var(--text-primary); +} + +.fund-stats { + font-size: 14px; + color: var(--text-secondary); +} + +.fund-stats span { + font-weight: 600; + color: var(--text-primary); +} + +.progress-bar-bg { + width: 100%; + height: 12px; + background-color: #f0f0f0; + border-radius: 6px; + overflow: hidden; +} + +.progress-bar-fill { + height: 100%; + background: linear-gradient(90deg, #0071e3, #34c759); + border-radius: 6px; + width: 0%; /* Will be set by JS */ + transition: width 1s ease-out; +} + +.fund-percentage { + text-align: right; + font-size: 12px; + color: var(--text-secondary); + margin-top: 8px; +} + +/* Modal */ +.modal { + display: none; + position: fixed; + z-index: 2000; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-color: rgba(0,0,0,0.5); + backdrop-filter: blur(5px); + justify-content: center; + align-items: center; +} + +.modal-content { + background-color: #fff; + padding: 40px; + border-radius: var(--radius-large); + width: 90%; + max-width: 800px; + max-height: 80vh; + position: relative; + display: flex; + flex-direction: column; +} + +.close-modal { + position: absolute; + top: 20px; + right: 30px; + color: #aaa; + font-size: 28px; + font-weight: bold; + cursor: pointer; + transition: 0.2s; +} + +.close-modal:hover { + color: #000; +} + +.modal-content h2 { + margin-bottom: 20px; + text-align: center; +} + +.sponsors-list-container { + overflow-y: auto; + flex-grow: 1; +} + +#sponsors-table { + width: 100%; + border-collapse: collapse; + font-size: 14px; +} + +#sponsors-table th, #sponsors-table td { + padding: 12px 15px; + text-align: left; + border-bottom: 1px solid #eee; +} + +#sponsors-table th { + background-color: #f9f9f9; + font-weight: 600; + position: sticky; + top: 0; +} + +#sponsors-table tr:hover { + background-color: #f5f5f7; +}