import { api } from '../socket.js'; const PAGE_SIZE = 25; export function renderPlayers(root) { root.innerHTML = `
Abra este jogador uma vez enquanto ele está online para vincular os dados do save (o Bedrock não liga o nome ao arquivo até o primeiro acesso observado).
`; } if (d.empty || !d.position) { return `Sem dados salvos para este jogador ainda.
`; } const dimLabel = { overworld: 'Overworld', nether: 'Nether', end: 'End' }[d.dimension] || d.dimension; const p = d.position; const invGrid = inventoryHtml(d); return `Carregando dados do save...
'); document.addEventListener('keydown', onEsc); const wire = () => { host.querySelector('[data-close]').onclick = closeModal; host.querySelector('[data-backdrop]').onclick = (ev) => { if (ev.target === ev.currentTarget) closeModal(); }; const rb = host.querySelector('[data-refresh]'); if (rb) rb.onclick = () => load(); }; wire(); async function load() { const d = await api(`/api/players/detail?xuid=${encodeURIComponent(xuid)}`); if (!d) { host.innerHTML = shell('Falha ao ler os dados do jogador.
', footerHtml('')); wire(); return; } host.innerHTML = shell(renderModalBody(d, name), footerHtml(d)); wire(); } function footerHtml(d) { const online = d && d.online ? '● Online' : 'Offline'; const saved = d && d.savedAt ? `atualizado às ${new Date(d.savedAt).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}` : ''; return `${online}${saved}`; } await load(); } // --- Allowlist card (single home for toggle + add + members) --- function renderAllowlist(data) { currentWhitelistEnabled = data.whitelistEnabled; const toggle = root.querySelector('#allowlist-toggle'); const knob = root.querySelector('#allowlist-knob'); const hint = root.querySelector('#allowlist-hint'); toggle.classList.toggle('bg-emerald-600', currentWhitelistEnabled); toggle.classList.toggle('bg-slate-700', !currentWhitelistEnabled); knob.style.transform = currentWhitelistEnabled ? 'translateX(1.5rem)' : 'translateX(0.25rem)'; hint.textContent = currentWhitelistEnabled ? 'Ativa — apenas os membros abaixo podem entrar.' : 'Desativada — qualquer jogador pode entrar no servidor.'; toggle.onclick = () => action(currentWhitelistEnabled ? 'whitelistOff' : 'whitelistOn', {}); const addForm = root.querySelector('#allowlist-add'); addForm.classList.toggle('hidden', !capabilities.has('whitelistAdd')); addForm.classList.toggle('flex', capabilities.has('whitelistAdd')); addForm.onsubmit = (e) => { e.preventDefault(); const input = addForm.querySelector('input[name="name"]'); if (input.value.trim()) action('whitelistAdd', { name: input.value.trim() }); input.value = ''; }; const list = root.querySelector('#allowlist-list'); const members = data.whitelist || []; root.querySelector('#allowlist-count').textContent = members.length; list.innerHTML = members.length ? members.map((name) => `