Minestat
:chart_with_upwards_trend: A Minecraft server status checker
Install / Use
/learn @FragLand/MinestatREADME
MineStat :chart_with_upwards_trend:
MineStat is a Minecraft server status checker.
You can use these classes/modules in a monitoring script to poll multiple Minecraft servers, include similar functionality in a Discord bot, or to let visitors see the status of your server from their browser. MineStat has been ported to multiple languages for use with ASP.NET, FastCGI, mod_perl, mod_php, mod_python, Node.js, Rails, Tomcat, and more.
If you are planning to host MineStat on a shared webhost, make sure that the provider allows outbound sockets.
Protocol Support :telephone_receiver:
Note: The Go, JavaScript, and Perl implementations are currently under development.
|Protocol|C#|Go|Java|JavaScript|Perl|PHP|PowerShell|Python|Ruby| |-|--|--|----|----------|----|---|------|----|--| |1.8b/1.3 (beta)|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:x:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:| |1.4/1.5 (legacy)|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:| |1.6 (extended legacy)|:heavy_check_mark:|:x:|:heavy_check_mark:|:x:|:x:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:| |>=1.7 (JSON)|:heavy_check_mark:|:x:|:heavy_check_mark:|:x:|:x:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:| |Bedrock/PE/RakNet|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:x:|:x:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:| |UT3/GS4 Query|:x:|:x:|:x:|:x:|:x:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|:heavy_check_mark:|
Examples :memo:
C# example
using System;
using MineStatLib;
class Example
{
public static void Main()
{
MineStat ms = new MineStat("minecraft.frag.land", 25565);
Console.WriteLine("Minecraft server status of {0} on port {1}:", ms.Address, ms.Port);
if(ms.ServerUp)
{
Console.WriteLine("Server is online running version {0} with {1} out of {2} players.", ms.Version, ms.CurrentPlayers, ms.MaximumPlayers);
if(ms.Gamemode != null)
Console.WriteLine("Game mode: {0}", ms.Gamemode);
Console.WriteLine("Message of the day: {0}", ms.Stripped_Motd);
Console.WriteLine("Latency: {0}ms", ms.Latency);
Console.WriteLine("Connected using protocol: {0}", ms.Protocol);
}
else
Console.WriteLine("Server is offline!");
}
}
Go example
To use the Go package: go get github.com/FragLand/minestat/Go/minestat
package main
import "fmt"
import "github.com/FragLand/minestat/Go/minestat"
func main() {
minestat.Init("minecraft.frag.land")
fmt.Printf("Minecraft server status of %s on port %d:\n", minestat.Address, minestat.Port)
if minestat.Online {
fmt.Printf("Server is online running version %s with %d out of %d players.\n", minestat.Version, minestat.Current_players, minestat.Max_players)
fmt.Printf("Message of the day: %s\n", minestat.Motd)
fmt.Printf("Latency: %dms\n", minestat.Latency)
fmt.Printf("Connected using protocol: %s\n", minestat.Protocol)
} else {
fmt.Println("Server is offline!")
}
}
Java example
import land.Frag.MineStat;
class Example
{
public static void main(String[] args)
{
MineStat ms = new MineStat("minecraft.frag.land", 25565);
System.out.println("Minecraft server status of " + ms.getAddress() + " on port " + ms.getPort() + ":");
if(ms.isServerUp())
{
System.out.println("Server is online running version " + ms.getVersion() + " with " + ms.getCurrentPlayers() + " out of " + ms.getMaximumPlayers() + " players.");
System.out.println("Message of the day: " + ms.getMotd());
System.out.println("Message of the day without formatting: " + ms.getStrippedMotd());
System.out.println("Latency: " + ms.getLatency() + "ms");
System.out.println("Connected using protocol: " + ms.getRequestType());
}
else
System.out.println("Server is offline!");
}
}
JavaScript example
To use the npm package: npm install minestat
var ms = require('minestat');
ms.initSync({address: 'minecraft.frag.land', port: 25565}, function(error, result)
{
if(error)
{
console.log('Error encountered during connection attempt.');
throw error;
}
console.log("Minecraft server status of " + result.address + " on port " + result.port + ":");
if(result.online)
{
console.log("Server is online running version " + result.version + " with " + result.current_players + " out of " + result.max_players + " players.");
console.log("Message of the day: " + result.motd);
console.log("Latency: " + result.latency + "ms");
}
else
{
console.log("Server is offline!");
}
});
Perl example
To use the CPAN module: cpan Minecraft::ServerStatus
use Minecraft::ServerStatus;
$ms = Minecraft::ServerStatus::init("minecraft.frag.land", 25565);
print "Minecraft server status of $ms->{address} on port $ms->{port}:\n";
if($ms->{online})
{
print "Server is online running version $ms->{version} with $ms->{current_players} out of $ms->{max_players} players.\n";
print "Message of the day: $ms->{motd}\n";
print "Latency: $ms->{latency}ms\n";
}
else
{
print "Server is offline!\n";
}
PHP example
Note: MineStat for PHP requires multi-byte string support to handle character encoding conversion. Enabling mbstring support can be as simple as installing the php-mbstring package for your platform. If building PHP from source, see https://www.php.net/manual/en/mbstring.installation.php. To validate, phpinfo() output will reference mbstring if the feature is enabled.
<?php
require_once('minestat.php');
$ms = new MineStat("minecraft.frag.land", 25565);
printf("Minecraft server status of %s on port %s:<br>", $ms->get_address(), $ms->get_port());
if($ms->is_online())
{
printf("Server is online running version %s with %s out of %s players.<br>", $ms->get_version(), $ms->get_current_players(), $ms->get_max_players());
if($ms->get_request_type() == "Bedrock/Pocket Edition")
printf("Game mode: %s<br>", $ms->get_mode());
printf("Message of the day: %s<br>", $ms->get_motd());
printf("Message of the day without formatting: %s<br>", $ms->get_stripped_motd());
printf("Latency: %sms<br>", $ms->get_latency());
printf("Connected using protocol: %s<br>", $ms->get_request_type());
}
else
{
printf("Server is offline!<br>");
}
?>
PowerShell example
To install the module: Install-Module -Name MineStat
Import-Module MineStat
$ms = MineStat -Address "minecraft.frag.land" -port 25565
"Minecraft server status of '{0}' on port {1}:" -f $ms.Address, $ms.Port
if ($ms.Online) {
"Server is online running version {0} with {1} out of {2} players." -f $ms.Version, $ms.Current_Players, $ms.Max_Players
"Message of the day: {0}" -f $ms.Stripped_Motd
"Latency: {0}ms" -f $ms.Latency
"Connected using SLP protocol '{0}'" -f $ms.Slp_Protocol
}else {
"Server is offline!"
}
Python example
To use the PyPI package: pip install minestat
import minestat
ms = minestat.MineStat('minecraft.frag.land', 25565)
print('Minecraft server status of %s on port %d:' % (ms.address, ms.port))
if ms.online:
print('Server is online running version %s with %s out of %s players.' % (ms.version, ms.current_players, ms.max_players))
# Bedrock specific attribute:
if ms.gamemode:
print('Game mode: %s' % ms.gamemode)
print('Message of the day: %s' % ms.motd)
print('Message of the day without formatting: %s' % ms.stripped_motd)
print('Latency: %sms' % ms.latency)
print('Connected using protocol: %s' % ms.slp_protocol)
else:
print('Server is offline!')
See the Python specific readme (Python/README.md) for a full list of all supported attributes.
Ruby example
[](https://ru
