Installation
composer require codingbyjerez/minecraft-bundle
Add to config/bundles.php:
return [
// ...
CodingByJerez\MinecraftBundle\MinecraftBundle::class => ['all' => true],
];
Configuration Publish the default config:
php artisan vendor:publish --provider="CodingByJerez\MinecraftBundle\MinecraftBundle" --tag="config"
Edit config/minecraft.php to include your server’s IP, port, and timeout (default: 5s).
First Use Case
Inject the MinecraftService into a controller or command:
use CodingByJerez\MinecraftBundle\Service\MinecraftService;
public function checkServerStatus(MinecraftService $minecraft)
{
$status = $minecraft->getServerStatus();
return response()->json($status);
}
Call the endpoint (e.g., /api/minecraft/status) to see server details like player count, version, and online status.
Real-Time Status Monitoring Use a Laravel Queue Job to periodically fetch server status and store it in the database:
use CodingByJerez\MinecraftBundle\Service\MinecraftService;
use Illuminate\Bus\Queueable;
class CheckMinecraftStatus implements ShouldQueue
{
use Queueable;
public function handle(MinecraftService $minecraft)
{
$status = $minecraft->getServerStatus();
ServerStatus::updateOrCreate(
['server_id' => 1],
['players_online' => $status['players']['online'], 'last_checked' => now()]
);
}
}
Schedule with Laravel’s scheduler:
$schedule->command('check:minecraft')->everyMinute();
API Endpoint for External Services Create a dedicated route and controller:
Route::get('/minecraft/status', [MinecraftController::class, 'status']);
public function status(MinecraftService $minecraft)
{
return response()->json($minecraft->getServerStatus());
}
Secure with middleware (e.g., auth:api) if needed.
Integration with Frontend Use Laravel Echo or Livewire to push real-time updates to users:
// Livewire example
<script>
window.addEventListener('minecraft-updated', event => {
console.log('Players online:', event.detail.players_online);
});
</script>
Dispatch events from your job/controller:
broadcast(new MinecraftStatusUpdated($status))->toOthers();
Customizing Status Data Extend the service to include additional logic:
$status = $minecraft->getServerStatus();
$customData = [
'is_popular' => $status['players']['online'] > 50,
'uptime' => now()->diffInHours($status['last_seen']),
];
Connection Timeouts
config/minecraft.php:
'timeout' => 10, // seconds
try {
$status = $minecraft->getServerStatus();
} catch (\RuntimeException $e) {
return response()->json(['error' => 'Server unreachable'], 503);
}
Firewall/Network Restrictions
telnet your_minecraft_server_ip 25565
Rate Limiting
$status = Cache::remember('minecraft_status', now()->addMinutes(1), function () use ($minecraft) {
return $minecraft->getServerStatus();
});
Enable Debug Mode
Set 'debug' => true in config/minecraft.php to log raw responses for troubleshooting.
Common Errors
Custom Status Fields Override the service to add proprietary data:
namespace App\Services;
use CodingByJerez\MinecraftBundle\Service\MinecraftService as BaseService;
class CustomMinecraftService extends BaseService
{
public function getServerStatus()
{
$status = parent::getServerStatus();
$status['custom_field'] = $this->fetchCustomData();
return $status;
}
}
Bind the custom service in AppServiceProvider:
$this->app->bind(MinecraftService::class, CustomMinecraftService::class);
Multiple Servers
Configure multiple servers in config/minecraft.php:
'servers' => [
'main' => ['ip' => '127.0.0.1', 'port' => 25565],
'backup' => ['ip' => '192.168.1.100', 'port' => 25566],
],
Access via:
$minecraft->getServerStatus('backup');
Testing Mock the service in PHPUnit:
$this->mock(MinecraftService::class)->shouldReceive('getServerStatus')
->once()
->andReturn(['players' => ['online' => 10]]);
How can I help you explore Laravel packages today?