Add mc-status-js
This commit is contained in:
92
mc-status-js
Normal file
92
mc-status-js
Normal 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);
|
||||
Reference in New Issue
Block a user