From 518afeae48bc80b1095f4f4e2dddb48e5642ad6e Mon Sep 17 00:00:00 2001 From: Shoghi Cervantes Pueyo Date: Sat, 5 Jan 2013 03:16:11 +0100 Subject: [PATCH] Item pickup --- src/classes/Entity.class.php | 3 ++ src/classes/Player.class.php | 63 ++++++++++++++++++++---------------- 2 files changed, 39 insertions(+), 27 deletions(-) diff --git a/src/classes/Entity.class.php b/src/classes/Entity.class.php index 228239cd4..5a7310b45 100644 --- a/src/classes/Entity.class.php +++ b/src/classes/Entity.class.php @@ -81,6 +81,8 @@ class Entity extends stdClass{ if($player !== true and $player !== false){ if($this->server->api->dhandle("player.item.pick", array( "eid" => $player["EID"], + "block" => $this->type, + "meta" => $this->meta, "target" => $this->eid )) !== false){ $this->close(); @@ -163,6 +165,7 @@ class Entity extends stdClass{ $this->server->query("DELETE FROM entities WHERE EID = ".$this->eid.";"); $this->server->api->dhandle("entity.remove", $this->eid); $this->closed = true; + unset($this); } } diff --git a/src/classes/Player.class.php b/src/classes/Player.class.php index b68a5f98c..e3103b6c7 100644 --- a/src/classes/Player.class.php +++ b/src/classes/Player.class.php @@ -114,7 +114,10 @@ class Player{ public function eventHandler($data, $event){ switch($event){ case "player.item.pick": - $this->dataPacket(MC_TAKE_ITEM_ENTITY, $data); + if($data["eid"] === $this->eid){ + $data["eid"] = 0; + } + $this->dataPacket(MC_TAKE_ITEM_ENTITY, $data); break; case "player.equipment.change": if($data["eid"] === $this->eid){ @@ -277,31 +280,37 @@ class Player{ "eid" => 0, )); break; - case MC_READY: - if($this->spawned !== false){ - break; - } - $this->spawned = true; - $this->entity = $this->server->api->entity->add(ENTITY_PLAYER, 0, array("player" => $this)); - $this->eid = $this->entity->eid; - $this->server->query("UPDATE players SET EID = ".$this->eid." WHERE clientID = ".$this->clientID.";"); - $this->entity->setName($this->username); - $this->entity->data["clientID"] = $this->clientID; - $this->server->api->entity->spawnAll($this); - $this->server->api->entity->spawnToAll($this->eid); - $this->evid[] = $this->server->event("server.time.change", array($this, "eventHandler")); - $this->evid[] = $this->server->event("server.chat", array($this, "eventHandler")); - $this->evid[] = $this->server->event("entity.remove", array($this, "eventHandler")); - $this->evid[] = $this->server->event("entity.move", array($this, "eventHandler")); - $this->evid[] = $this->server->event("entity.animate", array($this, "eventHandler")); - $this->evid[] = $this->server->event("player.equipment.change", array($this, "eventHandler")); - $this->evid[] = $this->server->event("player.item.pick", array($this, "eventHandler")); - $this->evid[] = $this->server->event("world.block.change", array($this, "eventHandler")); - console("[DEBUG] Player with EID ".$this->eid." \"".$this->username."\" spawned!", true, true, 2); - - $this->eventHandler($this->server->motd, "server.chat"); - if($this->MTU <= 548){ - $this->eventHandler("Your connection is bad, you may experience lag and slow map loading.", "server.chat"); + case MC_READY: + switch($data["status"]){ + case 1: + if($this->spawned !== false){ + break; + } + $this->spawned = true; + $this->entity = $this->server->api->entity->add(ENTITY_PLAYER, 0, array("player" => $this)); + $this->eid = $this->entity->eid; + $this->server->query("UPDATE players SET EID = ".$this->eid." WHERE clientID = ".$this->clientID.";"); + $this->entity->setName($this->username); + $this->entity->data["clientID"] = $this->clientID; + $this->server->api->entity->spawnAll($this); + $this->server->api->entity->spawnToAll($this->eid); + $this->evid[] = $this->server->event("server.time.change", array($this, "eventHandler")); + $this->evid[] = $this->server->event("server.chat", array($this, "eventHandler")); + $this->evid[] = $this->server->event("entity.remove", array($this, "eventHandler")); + $this->evid[] = $this->server->event("entity.move", array($this, "eventHandler")); + $this->evid[] = $this->server->event("entity.animate", array($this, "eventHandler")); + $this->evid[] = $this->server->event("player.equipment.change", array($this, "eventHandler")); + $this->evid[] = $this->server->event("player.item.pick", array($this, "eventHandler")); + $this->evid[] = $this->server->event("world.block.change", array($this, "eventHandler")); + console("[DEBUG] Player with EID ".$this->eid." \"".$this->username."\" spawned!", true, true, 2); + + $this->eventHandler($this->server->motd, "server.chat"); + if($this->MTU <= 548){ + $this->eventHandler("Your connection is bad, you may experience lag and slow map loading.", "server.chat"); + } + break; + case 2://Chunk loaded? + break; } break; case MC_MOVE_PLAYER: @@ -334,7 +343,7 @@ class Player{ break; case MC_USE_ITEM: $data["eid"] = $this->eid; - if(Utils::distance($this->entity->position, $data) > 8){ + if(Utils::distance($this->entity->position, $data) > 10){ break; } $this->server->handle("player.block.action", $data);