Skip to content

Instantly share code, notes, and snippets.

@Ribesg
Created February 23, 2013 13:08
Show Gist options
  • Save Ribesg/5019667 to your computer and use it in GitHub Desktop.
Save Ribesg/5019667 to your computer and use it in GitHub Desktop.
<?php
/*
* @product: Minecraft Class
* @description: Intergrate Minecraft within your own projects.
* @author: Nathaniel Blackburn
* @version: 1.9.2
* @license: http://creativecommons.org/licenses/by/3.0/legalcode
* @support: support@nblackburn.co.uk
* @website: http://www.nblackburn.co.uk
*/
class minecraft {
public $account;
private function request($website, $parameters=null) {
$request = curl_init();
curl_setopt($request, CURLOPT_HEADER, 0);
curl_setopt($request, CURLOPT_RETURNTRANSFER, 1);
if ($parameters != null) {
curl_setopt($request, CURLOPT_URL, $website.'?'.http_build_query($parameters, null, '&'));
} else {
curl_setopt($request, CURLOPT_URL, $website);
}
return curl_exec($request);
curl_close($request);
}
public function signin($username, $password, $version=12) {
$parameters = array('user' => $username, 'password' => $password, 'version' => $version);
$request = $this->request('https://login.minecraft.net/', $parameters);
$response = explode(':', $request);
if ($request != 'Old version' && $request != 'Bad login') {
$this->account = array(
'current_version' => $response[0],
'correct_username' => $response[2],
'session_token' => $response[3],
'premium_account' => $this->is_premium($username),
'player_skin' => $this->get_skin($username),
'request_timestamp' => date("dmYhms", mktime(date(h), date(m), date(s), date(m), date(d), date(y)))
);
return true;
} else {
return false;
}
}
public function is_premium($username) {
$parameters = array('user' => $username);
return $this->request('https://www.minecraft.net/haspaid.jsp', $parameters);
}
public function get_skin($username) {
if ($this->is_premium($username)) {
$headers = get_headers('http://s3.amazonaws.com/MinecraftSkins/'.$username.'.png');
if ($headers[7] == 'Content-Type: image/png' || $headers[7] == 'Content-Type: application/octet-stream') {
return 'https://s3.amazonaws.com/MinecraftSkins/'.$username.'.png';
} else {
return 'https://s3.amazonaws.com/MinecraftSkins/char.png';
}
} else {
return false;
}
}
public function keep_alive($username, $session) {
$parameters = array('name' => $username, 'session' => $session);
$request = $this->request('https://login.minecraft.net/session', $parameters);
return null;
}
public function join_server($username, $session, $server) {
$parameters = array('user' => $username, 'sessionId' => $session, 'serverId' => $server);
$request = $this->request('http://session.minecraft.net/game/joinserver.jsp', $parameters);
if ($request != 'Bad login') {
return true;
} else {
return false;
}
}
public function check_server($username, $server) {
$parameters = array('user' => $username, 'serverId' => $server);
$request = $this->request('http://session.minecraft.net/game/checkserver.jsp', $parameters);
if ($request == 'YES') {
return true;
} else {
return false;
}
}
public function render_skin($username, $render_type, $size) {
if (in_array($render_type, array('head', 'body'))) {
if ($render_type == 'head') {
header('Content-Type: image/png');
$canvas = imagecreatetruecolor($size, $size);
$image = imagecreatefromstring($this->request($this->get_skin($username)));
imagecopyresampled($canvas, $image, 0, 0, 8, 8, $size, $size, 8, 8);
return imagepng($canvas);
} else if($render_type == 'body') {
header('Content-Type: image/png');
$scale = $size / 16;
$canvas = imagecreatetruecolor(16*$scale, 32*$scale);
$image = imagecreatefrompng($this->get_skin($username));
imagealphablending($canvas, false);
imagesavealpha($canvas,true);
$transparent = imagecolorallocatealpha($canvas, 255, 255, 255, 127);
imagefilledrectangle($canvas, 0, 0, 16*$scale, 32*$scale, $transparent);
imagecopyresized ($canvas, $image, 4*$scale, 0*$scale, 8, 8, 8*$scale, 8*$scale, 8, 8);
imagecopyresized ($canvas, $image, 4*$scale, 8*$scale, 20, 20, 8*$scale, 12*$scale, 8, 12);
imagecopyresized ($canvas, $image, 0*$scale, 8*$scale, 44, 20, 4*$scale, 12*$scale, 4, 12);
imagecopyresampled($canvas, $image, 12*$scale, 8*$scale, 47, 20, 4*$scale, 12*$scale, -4, 12);
imagecopyresized ($canvas, $image, 4*$scale, 20*$scale, 4, 20, 4*$scale, 12*$scale, 4, 12);
imagecopyresampled($canvas, $image, 8*$scale, 20*$scale, 7, 20, 4*$scale, 12*$scale, -4, 12);
return imagepng($canvas);
}
} else {
return false;
}
}
}
$minecraft = new minecraft();
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment