From aa8dc63cc50a55c761b541fc9541c14c215020f8 Mon Sep 17 00:00:00 2001 From: Shoghi Cervantes Pueyo Date: Thu, 20 Dec 2012 19:35:31 +0100 Subject: [PATCH] Signs --- classes/API/LevelAPI.php | 20 ----------------- classes/CustomPacketHandler.class.php | 21 +++++++++++++++-- classes/PocketMinecraftServer.class.php | 30 +++++++++++++++++-------- classes/Session.class.php | 30 +++++++++++++++++++++++++ 4 files changed, 70 insertions(+), 31 deletions(-) diff --git a/classes/API/LevelAPI.php b/classes/API/LevelAPI.php index 14db516e8..8fb828836 100644 --- a/classes/API/LevelAPI.php +++ b/classes/API/LevelAPI.php @@ -43,26 +43,6 @@ class LevelAPI{ public function handle($data, $event){ switch($event){ case "onBlockPlace": - switch($data["face"]){ - case 0: - --$data["y"]; - break; - case 1: - ++$data["y"]; - break; - case 2: - --$data["z"]; - break; - case 3: - ++$data["z"]; - break; - case 4: - --$data["x"]; - break; - case 5: - ++$data["x"]; - break; - } $block = $this->getBlock($data["x"], $data["y"], $data["z"]); console("[DEBUG] EID ".$data["eid"]." placed ".$data["block"].":".$data["meta"]." into ".$block[0].":".$block[1]." at X ".$data["x"]." Y ".$data["y"]." Z ".$data["z"], true, true, 2); $this->setBlock($data["x"], $data["y"], $data["z"], $data["block"], $data["meta"]); diff --git a/classes/CustomPacketHandler.class.php b/classes/CustomPacketHandler.class.php index ac9cfb8d8..e116b35ac 100644 --- a/classes/CustomPacketHandler.class.php +++ b/classes/CustomPacketHandler.class.php @@ -428,9 +428,9 @@ class CustomPacketHandler{ $this->data["unknown3"] = Utils::readFloat($this->get(4)); $this->data["unknown4"] = Utils::readFloat($this->get(4)); }else{ - $this->raw .= Utils::writeByte($this->data["action"]); + /*$this->raw .= Utils::writeByte($this->data["action"]); $this->raw .= Utils::writeInt($this->data["eid"]); - $this->raw .= Utils::writeInt($this->data["target"]); + $this->raw .= Utils::writeInt($this->data["target"]);*/ } break; case MC_SET_ENTITY_DATA: @@ -479,6 +479,23 @@ class CustomPacketHandler{ $this->raw .= Utils::writeShort(strlen($this->data["message"])).$this->data["message"]; } break; + case MC_SIGN_UPDATE: + if($this->c === false){ + $this->data["x"] = Utils::readShort($this->get(2)); + $this->data["y"] = ord($this->get(1)); + $this->data["z"] = Utils::readShort($this->get(2)); + for($i = 0; $i < 4; ++$i){ + $this->data["line$i"] = $this->get(Utils::readLShort($this->get(2), false)); + } + }else{ + $this->raw .= Utils::writeShort($this->data["x"]); + $this->raw .= chr($this->data["y"]); + $this->raw .= Utils::writeShort($this->data["z"]); + for($i = 0; $i < 4; ++$i){ + $this->raw .= Utils::writeLShort(strlen($this->data["line$i"])).$this->data["line$i"]; + } + } + break; } } diff --git a/classes/PocketMinecraftServer.class.php b/classes/PocketMinecraftServer.class.php index 3f129c51e..85d635f64 100644 --- a/classes/PocketMinecraftServer.class.php +++ b/classes/PocketMinecraftServer.class.php @@ -254,15 +254,23 @@ class PocketMinecraftServer extends stdClass{ if(!isset($entity["id"])){ break; } - if(!isset($this->api) or $this->api === false){ - $this->entities[$this->eidCnt] = new Entity($his, $this->eidCnt, ENTITY_MOB, $entity["id"]); - $this->entities[$this->eidCnt]->setPosition($entity["Pos"][0], $entity["Pos"][1], $entity["Pos"][2], $entity["Rotation"][0], $entity["Rotation"][1]); - $this->entities[$this->eidCnt]->setHealth($entity["Health"]); - ++$this->eidCnt; - }else{ - $e = $this->api->entity->add(ENTITY_MOB, $entity["id"]); - $e->setPosition($entity["Pos"][0], $entity["Pos"][1], $entity["Pos"][2], $entity["Rotation"][0], $entity["Rotation"][1]); - $e->setHealth($entity["Health"]); + if(isset($this->api) and $this->api !== false){ + if($entity["id"] === 64){ //Item Drop + $e = $this->api->entity->add(ENTITY_ITEM, $entity["Item"]["id"], array( + "meta" => $entity["Item"]["Damage"], + "stack" => $entity["Item"]["Count"], + "x" => $entity["Pos"][0], + "y" => $entity["Pos"][1], + "z" => $entity["Pos"][2], + "yaw" => $entity["Rotation"][0], + "pitch" => $entity["Rotation"][1], + )); + }else{ + $e = $this->api->entity->add(ENTITY_MOB, $entity["id"]); + $e->setPosition($entity["Pos"][0], $entity["Pos"][1], $entity["Pos"][2], $entity["Rotation"][0], $entity["Rotation"][1]); + $e->setHealth($entity["Health"]); + + } } } console("[DEBUG] Loaded ".count($this->entities)." Entities", true, true, 2); @@ -274,6 +282,10 @@ class PocketMinecraftServer extends stdClass{ if($this->mapName !== false){ file_put_contents($this->mapDir."level.dat", serialize($this->level)); $this->map->saveMap(); + console("[INFO] Saving entities..."); + foreach($this->entities as $entity){ + + } } } diff --git a/classes/Session.class.php b/classes/Session.class.php index 99e70c5d1..3ea0103b4 100644 --- a/classes/Session.class.php +++ b/classes/Session.class.php @@ -315,8 +315,38 @@ class Session{ break; case MC_USE_ITEM: if($data["face"] >= 0 and $data["face"] <= 5 and $data["block"] !== 0){ + switch($data["face"]){ + case 0: + --$data["y"]; + break; + case 1: + ++$data["y"]; + break; + case 2: + --$data["z"]; + break; + case 3: + ++$data["z"]; + break; + case 4: + --$data["x"]; + break; + case 5: + ++$data["x"]; + break; + } + if($data["block"] === 65){ + $data["block"] = 63; + } $data["eid"] = $this->eid; $this->server->handle("onBlockPlace", $data); + if($data["block"] === 63){ + $data["line0"] = "WHOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"; + $data["line1"] = "this is a test"; + $data["line2"] = "I'm @shoghicp"; + $data["line3"] = "TPS: ".$this->server->getTPS(); + $this->dataPacket(MC_SIGN_UPDATE, $data); + } } break; case MC_PLACE_BLOCK: