Add mc-status-js

This commit is contained in:
2025-08-28 10:48:24 -04:00
commit d44f9fddff

92
mc-status-js Normal file
View File

@@ -0,0 +1,92 @@
<script>
//Minecraft Status Javescript code
const serverIP = "exampleserver.com"; // change this to your server's IP/hostname
const serverPort = 25565; // change if needed
// Map Minecraft formatting codes to CSS
const mcColors = {
"0": "color:#000000", // Black
"1": "color:#0000AA", // Dark Blue
"2": "color:#00AA00", // Dark Green
"3": "color:#00AAAA", // Dark Aqua
"4": "color:#AA0000", // Dark Red
"5": "color:#AA00AA", // Dark Purple
"6": "color:#FFAA00", // Gold
"7": "color:#AAAAAA", // Gray
"8": "color:#555555", // Dark Gray
"9": "color:#5555FF", // Blue
"a": "color:#55FF55", // Green
"b": "color:#55FFFF", // Aqua
"c": "color:#FF5555", // Red
"d": "color:#FF55FF", // Light Purple
"e": "color:#FFFF55", // Yellow
"f": "color:#FFFFFF", // White
"l": "font-weight:bold", // Bold
"m": "text-decoration:line-through", // Strikethrough
"n": "text-decoration:underline", // Underline
"o": "font-style:italic", // Italic
"r": "color:#FFFFFF;font-weight:normal;text-decoration:none;font-style:normal" // Reset
};
function parseMOTD(rawLines) {
if (!rawLines || rawLines.length === 0) return "No MOTD";
// Join lines with a special marker so we can replace with <br>
const joined = rawLines.join("\n");
const parsed = joined.replace(/§([0-9a-frlomn])/gi, (match, code) => {
const style = mcColors[code.toLowerCase()];
if (style) {
return `</span><span style="${style}">`;
}
return "";
});
// Replace \n with <br> for stacked display
return parsed.replace(/\n/g, "<br>") + "</span>";
}
async function checkMinecraftServer(ip, port = 25565) {
const statusBox = document.getElementById("mc-status");
try {
const res = await fetch(`https://api.mcsrvstat.us/2/${ip}:${port}`);
if (!res.ok) {
throw new Error(`API returned status ${res.status}`);
}
const data = await res.json();
if (!data.online) {
statusBox.innerHTML = `<span style="color:red;">Offline</span>`;
return;
}
const name = data.hostname || ip;
const version = data.version || "Unknown";
const motd = parseMOTD(data.motd?.raw || []);
const players = data.players
? `${data.players.online}/${data.players.max}`
: "N/A";
statusBox.innerHTML = `
<div>
<strong>Server:</strong> ${name}<br>
<strong>Status:</strong> <span style="color:green;">Online</span><br>
<strong>Version:</strong> ${version}<br>
<strong>MOTD:</strong><br><span>${motd}</span><br>
<strong>Players:</strong> ${players}<br>
<strong>IP:</strong> ${ip}:${port}
</div>
`;
} catch (err) {
console.error("Error fetching server status:", err);
statusBox.innerHTML = `<span style="color:red;">API unreachable</span>`;
}
}
// Run immediately once
checkMinecraftServer(serverIP, serverPort);
// Refresh every 5 minutes
setInterval(() => checkMinecraftServer(serverIP, serverPort), 300000);