Server Info API - Advanced HTTP API for Your Minecraft Server
Add a fully functional HTTP API to your Minecraft server for accessing server statistics and data in real-time.
🌟 What This Mod Does
Create custom tools for monitoring and managing your server! With Server Info API you can:
- Display online player count on your website
- Create Discord bots for automation
- Collect performance statistics
- Develop custom applications for server management
🔧 Quick Start
The API automatically starts on port 8080. To change the port, edit the apiPort setting in the config/Server Info API/settings.json file.
📡 Available Endpoints
Server Status (/status)
Complete server status overview with disk, CPU, RAM, and player information.
{
"disk": {
"totalGB": 1606,
"freeGB": 343,
"usedMB": 25
},
"players": {
"online": 0,
"max": 20
},
"cpu": {
"usagePercent": 9.865470852017937
},
"ram": {
"totalMB": 63033,
"usedMB": 31469
}
}
Players List (/players)
Information about all server players: total count and currently online players.
{
"totalPlayers": 1,
"onlinePlayers": []
}
Player Information (/player/:criteria)
Detailed information about specific players by name or UUID.
{
"name": "PLAYER_NAME",
"online": true,
"uuid": "PLAYER_UUID",
"info": {
"currentChunkPos": {
"z": 1,
"x": 0
},
"currentPos": {
"z": 23.423937096484163,
"x": 7.907748838070694,
"y": 100.12983446114534
},
"dimension": "minecraft:the_nether"
}
}
🛠️ For Mod Developers
Creating Custom Routes
Develop extensions for your mods! Implement the APIRoute interface and configure the path using the @RouteSettings annotation.
import xyz.yoinky3000.server_info_api.annotations.RouteSettings;
import xyz.yoinky3000.server_info_api.api.APIRequest;
import xyz.yoinky3000.server_info_api.api.APIResponse;
import xyz.yoinky3000.server_info_api.api.APIRoute;
import net.minecraft.server.MinecraftServer;
// Simple route without server access
@RouteSettings(path = "/my-simple-test-route") // By default requireMinecraftServer = false
public class MySimpleTestRoute implements APIRoute {
@Override
public APIResponse handle(APIRequest apiRequest) {
return new APIResponse(APIResponse.HttpStatus.OK, APIResponse.MimeType.TEXT_PLAIN, "Hello from my route!");
}
}
// Route with server access
@RouteSettings(path = "/my-server-data-route", requireMinecraftServer = true)
public class MyServerDataRoute implements APIRoute {
@Override
public APIResponse handle(APIRequest request, MinecraftServer server) {
int onlinePlayers = server.getCurrentPlayerCount();
return new APIResponse(APIResponse.HttpStatus.OK, APIResponse.MimeType.TEXT_PLAIN,
"Currently online players: " + onlinePlayers);
}
}
Route Parameter Configuration
path: API endpoint path (for example,/my-custom-data)requireMinecraftServer: Iftrue, route activates only after full server loading
Route Registration
import xyz.yoinky3000.server_info_api.ServerInfoAPI;
import net.fabricmc.api.ModInitializer;
public class CustomMod implements ModInitializer {
@Override
public void onInitialize() {
// Route registration using annotation
ServerInfoAPI.registerRoute(new MyServerDataRoute());
System.out.println("Custom API routes registered!");
}
}
Available registration methods:
registerRoute(APIRoute route)- registration with annotation, no overrideregisterRoute(String path, APIRoute route)- explicit path specificationregisterRoute(String path, APIRoute route, boolean requireMinecraftServer, boolean override)- full control
Dynamic Parameters
Create routes with variable segments:
@RouteSettings(path = "/my-data/:item_id")
public class ItemDataRoute implements APIRoute {
@Override
public APIResponse handle(APIRequest request, MinecraftServer server) {
String itemId = request.routeParams().get("item_id");
if (itemId != null) {
return new APIResponse(APIResponse.HttpStatus.OK, APIResponse.MimeType.TEXT_PLAIN, "Requested object ID: " + itemId);
} else {
return new APIResponse(APIResponse.HttpStatus.BAD_REQUEST, APIResponse.MimeType.TEXT_PLAIN, "Object ID not specified.");
}
}
}