*/ public function getListeners(): array { return [ 'java.lang.UnsupportedClassVersionError', 'minecraft 1.17 requires running the server with java 16 or above', 'minecraft 1.18 requires running the server with java 17 or above', 'unsupported major.minor version', 'has been compiled by a more recent version of the java runtime', ]; } public function getId(): string { return 'java_version'; } public function getAction(): Action { /** @var Server $server */ $server = Filament::getTenant(); return Action::make($this->getId()) ->requiresConfirmation() ->modalHeading('Unsupported Java Version') ->modalDescription('This server is currently running an unsupported version of Java and cannot be started.') ->modalSubmitActionLabel('Update Docker Image') ->disabledForm(fn () => !auth()->user()->can(Permission::ACTION_STARTUP_DOCKER_IMAGE, $server)) ->form([ Placeholder::make('java') ->label('Please select a supported version from the list below to continue starting the server.'), Select::make('image') ->label('Docker Image') ->disabled(fn () => !in_array($server->image, $server->egg->docker_images)) ->options(fn () => collect($server->egg->docker_images)->mapWithKeys(fn ($key, $value) => [$key => $value])) ->selectablePlaceholder(false) ->default(fn () => $server->image) ->notIn(fn () => $server->image) ->required() ->preload() ->native(false), ]) ->action(function (array $data, DaemonPowerRepository $powerRepository) use ($server) { try { $new = $data['image']; $original = $server->image; $server->forceFill(['image' => $new])->saveOrFail(); if ($original !== $server->image) { Activity::event('server:startup.image') ->property(['old' => $original, 'new' => $new]) ->log(); } $powerRepository->setServer($server)->send('restart'); Notification::make() ->title('Docker image updated') ->body('Restart the server to use the new image.') ->success() ->send(); } catch (\Exception $e) { Notification::make() ->title('Error') ->body($e->getMessage()) ->danger() ->send(); } }); } public static function register(Application $app): self { return new self($app); } }