Skip to main content

Server Management

The MCMP Java SDK provides comprehensive server management capabilities, allowing you to create, configure, start, stop, and monitor Minecraft servers programmatically.

Creating Servers

Basic Server Creation

import com.mcmp.sdk.McmpClient;
import com.mcmp.sdk.models.Server;
import com.mcmp.sdk.models.ServerType;
import com.mcmp.sdk.models.ServerVersion;

// Create a basic server
Server server = client.servers().create()
    .name("My Minecraft Server")
    .type(ServerType.PAPER)
    .version(ServerVersion.V1_21_1)
    .build();

System.out.println("Created server: " + server.getId());

Advanced Server Configuration

import com.mcmp.sdk.models.ServerConfiguration;
import com.mcmp.sdk.models.ResourceLimits;

Server server = client.servers().create()
    .name("Production Server")
    .type(ServerType.PAPER)
    .version(ServerVersion.V1_21_1)
    .configuration(ServerConfiguration.builder()
        .maxPlayers(100)
        .motd("Welcome to our server!")
        .difficulty(Difficulty.HARD)
        .gameMode(GameMode.SURVIVAL)
        .build())
    .resources(ResourceLimits.builder()
        .memory("4G")
        .cpu("2")
        .disk("20G")
        .build())
    .build();

Server Lifecycle Management

Starting Servers

// Start a server
client.servers().start(server.getId());

// Start with custom configuration
client.servers().start(server.getId(), StartOptions.builder()
    .jvmArgs("-Xmx4G -Xms2G")
    .serverProperties(serverProperties)
    .build());

Stopping Servers

// Graceful shutdown
client.servers().stop(server.getId());

// Force stop
client.servers().forceStop(server.getId());

// Stop with timeout
client.servers().stop(server.getId(), StopOptions.builder()
    .timeout(Duration.ofMinutes(5))
    .forceAfterTimeout(true)
    .build());

Restarting Servers

// Restart server
client.servers().restart(server.getId());

// Restart with new configuration
client.servers().restart(server.getId(), RestartOptions.builder()
    .updateConfiguration(true)
    .backupBeforeRestart(true)
    .build());

Server Configuration

Updating Server Properties

import com.mcmp.sdk.models.ServerProperties;

ServerProperties properties = ServerProperties.builder()
    .maxPlayers(50)
    .motd("Updated MOTD")
    .difficulty(Difficulty.NORMAL)
    .pvp(true)
    .allowFlight(false)
    .build();

client.servers().updateProperties(server.getId(), properties);

Managing Plugins

// Install a plugin
client.servers().plugins().install(server.getId(), "WorldEdit", "7.3.0");

// List installed plugins
List<Plugin> plugins = client.servers().plugins().list(server.getId());

// Update a plugin
client.servers().plugins().update(server.getId(), "WorldEdit", "7.3.1");

// Remove a plugin
client.servers().plugins().remove(server.getId(), "WorldEdit");

World Management

// Create a new world
World world = client.servers().worlds().create(server.getId(), "new-world");

// List worlds
List<World> worlds = client.servers().worlds().list(server.getId());

// Set default world
client.servers().worlds().setDefault(server.getId(), "new-world");

// Backup world
Backup backup = client.servers().worlds().backup(server.getId(), "world");

Monitoring and Status

Server Status

import com.mcmp.sdk.models.ServerStatus;

// Get server status
ServerStatus status = client.servers().getStatus(server.getId());
System.out.println("Server state: " + status.getState());
System.out.println("Players online: " + status.getPlayerCount());
System.out.println("Uptime: " + status.getUptime());

// Check if server is running
if (status.getState() == ServerState.RUNNING) {
    System.out.println("Server is running!");
}

Performance Metrics

import com.mcmp.sdk.models.PerformanceMetrics;

// Get performance metrics
PerformanceMetrics metrics = client.servers().getMetrics(server.getId());

System.out.println("CPU Usage: " + metrics.getCpuUsage() + "%");
System.out.println("Memory Usage: " + metrics.getMemoryUsage() + "MB");
System.out.println("Disk Usage: " + metrics.getDiskUsage() + "GB");
System.out.println("Network I/O: " + metrics.getNetworkIn() + " / " + metrics.getNetworkOut());

Player Information

import com.mcmp.sdk.models.Player;

// List online players
List<Player> players = client.servers().players().list(server.getId());

for (Player player : players) {
    System.out.println("Player: " + player.getName());
    System.out.println("UUID: " + player.getUuid());
    System.out.println("Join Time: " + player.getJoinTime());
}

// Get specific player info
Player player = client.servers().players().get(server.getId(), "player-name");

Server Operations

Console Commands

// Execute console command
CommandResult result = client.servers().executeCommand(server.getId(), "say Hello World!");

// Execute command and get output
String output = client.servers().executeCommand(server.getId(), "list")
    .getOutput();
System.out.println("Command output: " + output);

File Management

// List server files
List<ServerFile> files = client.servers().files().list(server.getId(), "/");

// Download server file
byte[] fileContent = client.servers().files().download(server.getId(), "server.properties");

// Upload file to server
client.servers().files().upload(server.getId(), "config.yml", fileContent);

// Delete server file
client.servers().files().delete(server.getId(), "old-config.yml");

Logs and Monitoring

// Get server logs
List<LogEntry> logs = client.servers().logs().get(server.getId(), 
    LogFilter.builder()
        .level(LogLevel.INFO)
        .since(Instant.now().minus(Duration.ofHours(1)))
        .build());

// Stream server logs in real-time
client.servers().logs().stream(server.getId(), logEntry -> {
    System.out.println("[" + logEntry.getTimestamp() + "] " + logEntry.getMessage());
});

Server Templates

Using Templates

// Create server from template
Server server = client.servers().createFromTemplate("vanilla-1.21.1")
    .name("My Server")
    .build();

// List available templates
List<ServerTemplate> templates = client.servers().templates().list();

// Create custom template
ServerTemplate template = client.servers().templates().create()
    .name("My Custom Template")
    .description("Custom server configuration")
    .serverType(ServerType.PAPER)
    .version(ServerVersion.V1_21_1)
    .plugins(Arrays.asList("WorldEdit", "Essentials"))
    .configuration(customConfig)
    .build();

Error Handling

import com.mcmp.sdk.exceptions.ServerException;
import com.mcmp.sdk.exceptions.OperationTimeoutException;

try {
    client.servers().start(server.getId());
} catch (ServerException e) {
    System.err.println("Server operation failed: " + e.getMessage());
} catch (OperationTimeoutException e) {
    System.err.println("Operation timed out: " + e.getMessage());
}

Best Practices

Resource Management

Monitor resource usage and set appropriate limits

Backup Strategy

Implement regular backups for important servers

Error Handling

Always handle exceptions gracefully

Monitoring

Set up monitoring and alerting for server health

Next Steps

1

Player Management

Learn to manage players and permissions
2

Plugin Development

Develop custom plugins with the SDK
3

Monitoring

Set up comprehensive server monitoring