lap('httpfx', 'HttpFx Created'); $loginUrl = $config['login_url']; $router->setDefaultErrorHandler(function($response, $request, $code, $text) use ($loginUrl, $userInfo) { $body = HTML::getHeader($userInfo, $loginUrl, sprintf('%03d %s', $code, $text)); $body .= '
'; $body .= sprintf('

HTTP %03d

', $code); $body .= sprintf('

%s

', $text); $body .= '
'; $body .= HTML::getFooter(); $response->setContent($body); }); $router->use('/', function($response) use ($timing) { $response->setPoweredBy('Mince+Index'); $response->setServerTiming($timing); }); $router->get('/index.php', function($response) { $response->redirect('/', true); }); $router->get('/map.php', function($response) { $response->redirect('/maps/survival', true); }); $router->get('/', function($response, $request) use ($db, $loginUrl, $userInfo, $sVerification) { $name = (string)$request->getParam('name'); $error = (string)$request->getParam('error'); if(!empty($error) && ctype_lower($error)) { $errors = [ 'request' => ['Invalid request type.', 'Try to reload the page and try again.'], 'verify' => ['Request verification failed.', 'Try to reload the page and try again.'], 'itainthappenin' => ['Haha', 'No'], 'short' => ['Invalid username', 'The provided name is too short.'], 'long' => ['Invalid username', 'The provided name is too long.'], 'invalid' => ['Invalid username', 'The provided name contains invalid characters.'], 'conflict' => ['Username conflict', 'This username is already whitelisted with someone, contact flashwave if this is unexpected.'], 'connect' => ['Failed to connect to the server', 'The server is probably offline, pope flashwave if this is not expected.'], 'not-listed' => ['You have not been whitelisted yet', 'Add yourself to the whitelist before trying to remove yourself from it.'], ]; if(array_key_exists($error, $errors)) { $mErrorTitle = $errors[$error][0]; $mErrorComment = $errors[$error][1]; } else { $mErrorTitle = 'Unexpected response from server'; $mErrorComment = $error; } } $body = HTML::getHeader($userInfo, $loginUrl); if(!empty($mErrorTitle)) { $body .= '
'; $body .= sprintf('

%s

', $mErrorTitle); $body .= sprintf('

%s

', $mErrorComment ?? 'No further details provided.'); $body .= '
'; } if($userInfo->success) { if($userInfo->mc_whitelisted < 1) { $body .= '
'; $body .= '

Add to Whitelist

'; $body .= '

This will give you access to the server.

'; $body .= '
'; $body .= sprintf(' ', $sVerification); $body .= ' '; $body .= ' '; $body .= '
'; $body .= '
'; } $body .= '
'; $body .= '

Server address

'; $body .= '

Down currently because I don\'t have the resources to run multiple games at once yet.

'; //$body .= '
mc.flashii.net
'; //$body .= '

An SRV record is used, so no port needs to be specified.

'; $body .= '

We recommend you use MultiMC/PolyMC for easy version and mod management and Adoptium Java 17 to actually be able to launch the game. Other launchers work completely fine though.

'; $body .= '
'; $body .= '
'; $body .= '

Bedrock versions

'; $body .= '

Through the black magic bestowed upon us by GeyserMC it\'s possible to play on the server through any of the updated Bedrock versions of Minecraft.

'; $body .= '

This should allow you to play on the server from a phone, a tablet or a console, provided you also have an account for the original version of the game.

'; $body .= '

You will need to link your Minecraft and Bedrock accounts, you can do this by connecting to link.geysermc.org in both versions of the game and following the on-screen instructions.

'; $body .= '

Unfortunately, the Bedrock versions of the game don\'t support SRV records, so you\'ll have to join with a different address:

'; //$body .= '
mcb.flashii.net:19132
'; $body .= '

Also down, lol!

'; $body .= '
'; if($userInfo->mc_whitelisted > 0) { $body .= '
'; $body .= '

Remove from Whitelist

'; $body .= '

This will revoke your access to the server.

'; $body .= sprintf('

You are currently whitelisted as %s on %s.

', $userInfo->mc_username, date('Y-m-d H:i:s T', $userInfo->mc_whitelisted)); $body .= '
'; $body .= sprintf(' ', $sVerification); $body .= ' '; $body .= '
'; $body .= '
'; } $body .= '
'; $body .= '

All Of Fabric 5 (1.3.0)

'; $body .= '
aof.flashii.net
'; $body .= '

An SRV record is used, so no port needs to be specified.

'; $body .= '

There\'s a pack for MultiMC/PolyMC somewhere and you\'ll probably need Adoptium Java 17 to actually be able to launch the game. Other launchers work completely fine though, probably.

'; $body .= '

This server doesn\'t currently use a whitelist, so you don\'t have to worry about that.

'; $body .= '
'; } else { $body .= '
'; $body .= '

You must be logged in to use this website!

'; $body .= '

This website allows you to whitelist yourself on our Minecraft server, for which you need to be logged in.

'; $body .= '

So it doesn\'t make sense to display the details either.

'; $body .= '
'; } $body .= '
'; $body .= '

Rules

'; $body .= '

1. Observe Global Rules.

'; $body .= '

2. Don\'t be an asshole.

'; $body .= '

3. Don\'t flood.

'; $body .= '
'; $body .= HTML::getFooter(); return $body; }); $router->get('/maps', function($response) { $response->redirect('/maps/survival'); }); $router->get('/maps/survival', function($response) use ($loginUrl, $userInfo) { $body = HTML::getHeader($userInfo, $loginUrl); $body .= '
'; $body .= ' '; $body .= '
'; $body .= HTML::getFooter(); return $body; }); $router->use('/whitelist', function($response, $request) use ($sVerification) { if(!$request->isFormContent()) { $response->redirect('/?error=request'); return true; } $body = $request->getContent(); if(!$body->hasParam('boob') || !hash_equals($sVerification, (string)$body->getParam('boob'))) { $response->redirect('/?error=verify'); return true; } }); $router->post('/whitelist/add', function($response, $request) use ($db, $userInfo) { if($userInfo->user_id == 45) { $response->redirect('/?error=itainthappenin'); return true; } $body = $request->getContent(); $name = (string)$body->getParam('name'); $resp = Whitelist::add($db, $userInfo, $name); if($resp === '') $response->redirect('/'); else { if($resp === 'invalid') $name = ''; $response->redirect("/?error={$resp}&name={$name}"); } }); $router->post('/whitelist/remove', function($response) use ($db, $userInfo) { $resp = Whitelist::remove($db, $userInfo); if($resp === '') $response->redirect('/'); else $response->redirect("/?error={$resp}"); }); $router->get('/status', function($response) { $response->redirect('/status/survival'); }); $router->get('/status/survival', function() { return 'todo: make something here'; }); $router->get('/status/survival.json', function() { return ServerQuery::create('mc.flashii.net')->stats(); }); $router->get('/status/survival.png', function($response) { $stats = ServerQuery::create('mc.flashii.net')->stats(); $image = new \Imagick; $image->newImage(100, 100, 'black', 'png'); $draw = new \ImagickDraw; $draw->setFillColor('white'); $image->annotateImage($draw, 10, 10, 0, $stats->motd); $response->setContentType('image/png'); $response->setContent((string)$image); $image->destroy(); }); $router->get('/errors/:code', function($res, $req, $code) { $code = intval($code); if($code < 100 || $code >= 600) $code = 400; return $code; }); $timing->lap('routes'); $router->dispatch();