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 .= '
';
}
$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 .= '
';
}
$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();