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