Added Armor

This commit is contained in:
Shoghi Cervantes Pueyo 2013-01-30 18:46:06 +01:00
parent 1e8b012a6e
commit fe8b4b7aa7
5 changed files with 35 additions and 2 deletions

View File

@ -261,6 +261,7 @@ class PlayerAPI{
"z" => $this->server->spawn["z"],
),
"inventory" => array_fill(0, 36, array(0, 0, 0)),
"armor" => array(0, 0, 0, 0),
"health" => 20,
"lastIP" => "",
"lastID" => 0,

View File

@ -47,6 +47,7 @@ class Player{
var $spawned = false;
var $inventory;
var $equipment = array(1, 0);
var $armor = array(0, 0, 0, 0);
var $loggedIn = false;
function __construct(PocketMinecraftServer $server, $clientID, $ip, $port, $MTU){
$this->MTU = $MTU;
@ -187,6 +188,15 @@ class Player{
public function eventHandler($data, $event){
switch($event){
case "player.armor":
if($data["eid"] === $this->eid){
$data["eid"] = 0;
$this->armor = array($data["slot0"], $data["slot1"], $data["slot2"], $data["slot3"]);
$this->dataPacket(MC_SET_ARMOR, $data);
}else{
$this->dataPacket(MC_SET_ARMOR, $data);
}
break;
case "player.block.place":
if($data["eid"] === $this->eid and $this->server->gamemode === 0){
$this->removeItem($data["original"][0], $data["original"][1], 1);
@ -437,6 +447,7 @@ class Player{
$this->data["inventory"] = $this->inventory;
}
$this->inventory = &$this->data["inventory"];
$this->armor = &$this->data["armor"];
$this->data["lastIP"] = $this->ip;
$this->data["lastID"] = $this->clientID;
@ -480,9 +491,11 @@ class Player{
$this->evid[] = $this->server->event("entity.event", array($this, "eventHandler"));
$this->evid[] = $this->server->event("entity.metadata", array($this, "eventHandler"));
$this->evid[] = $this->server->event("player.equipment.change", array($this, "eventHandler"));
$this->evid[] = $this->server->event("player.armor", array($this, "eventHandler"));
$this->evid[] = $this->server->event("player.pickup", array($this, "eventHandler"));
$this->evid[] = $this->server->event("block.change", array($this, "eventHandler"));
$this->evid[] = $this->server->event("player.block.place", array($this, "eventHandler"));
$this->handle("player.armor", array("eid" => $this->eid, "slot0" => $this->armor[0], "slot1" => $this->armor[1], "slot2" => $this->armor[2], "slot3" => $this->armor[3]));
console("[DEBUG] Player \"".$this->username."\" EID ".$this->eid." spawned at X ".$this->entity->x." Y ".$this->entity->y." Z ".$this->entity->z, true, true, 2);
$this->eventHandler(new Container($this->server->motd), "server.chat");
if($this->MTU <= 548){
@ -561,6 +574,10 @@ class Player{
}
$this->server->handle("player.block.break", $data);
break;
case MC_SET_ARMOR:
$data["eid"] = $this->eid;
$this->handle("player.armor", $data);
break;
case MC_INTERACT:
if(isset($this->server->entities[$data["target"]]) and Utils::distance($this->entity->position, $this->server->entities[$data["target"]]->position) <= 8){
if($this->handle("player.interact", $data) !== false){

View File

@ -445,6 +445,21 @@ class CustomPacketHandler{
$this->raw .= Utils::writeShort($this->data["meta"]);
}
break;
case MC_SET_ARMOR:
if($this->c === false){
$this->data["eid"] = Utils::readInt($this->get(4));
$this->data["slot0"] = ord($this->get(1));
$this->data["slot1"] = ord($this->get(1));
$this->data["slot2"] = ord($this->get(1));
$this->data["slot3"] = ord($this->get(1));
}else{
$this->raw .= Utils::writeInt($this->data["eid"]);
$this->raw .= chr($this->data["slot0"]);
$this->raw .= chr($this->data["slot1"]);
$this->raw .= chr($this->data["slot2"]);
$this->raw .= chr($this->data["slot3"]);
}
break;
case MC_INTERACT:
if($this->c === false){
$this->data["action"] = Utils::readByte($this->get(1));

View File

@ -64,7 +64,7 @@ define("MC_ENTITY_EVENT", 0x9c);
define("MC_REQUEST_CHUNK", 0x9d);
define("MC_CHUNK_DATA", 0x9e);
define("MC_PLAYER_EQUIPMENT", 0x9f);
//define("MC_SET_ARMOR_SLOT", 0xa0);
define("MC_SET_ARMOR", 0xa0);
define("MC_INTERACT", 0xa1);
define("MC_USE_ITEM", 0xa2);
define("MC_PLAYER_ACTION", 0xa3);

View File

@ -69,7 +69,7 @@ $dataName = array(
MC_CHUNK_DATA => "ChunkData",
MC_PLAYER_EQUIPMENT => "PlayerEquipment",
MC_SET_ARMOR => "SetArmorSlot",
MC_INTERACT => "Interact",
MC_USE_ITEM => "UseItem",
MC_PLAYER_ACTION => "PlayerAction",