From fbbe02a3bc08996fd3c50adcbae3aba91d66f020 Mon Sep 17 00:00:00 2001 From: Shoghi Cervantes Date: Sat, 16 May 2015 22:36:55 +0200 Subject: [PATCH] Fixed some issues related to new indexes --- src/pocketmine/block/Door.php | 8 ++++---- src/pocketmine/item/Tool.php | 10 +++++----- src/pocketmine/level/Level.php | 22 +++++++++++++++------- 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/src/pocketmine/block/Door.php b/src/pocketmine/block/Door.php index d1ef50ac8..68078aee4 100644 --- a/src/pocketmine/block/Door.php +++ b/src/pocketmine/block/Door.php @@ -272,9 +272,9 @@ abstract class Door extends Transparent{ if($down->getId() === $this->id){ $meta = $down->getDamage() ^ 0x04; $this->getLevel()->setBlock($down, Block::get($this->id, $meta), true); - $players = $this->getLevel()->getUsingChunk($this->x >> 4, $this->z >> 4); + $players = $this->getLevel()->getChunkPlayers($this->x >> 4, $this->z >> 4); if($player instanceof Player){ - unset($players[$player->getId()]); + unset($players[$player->getLoaderId()]); } $this->level->addSound(new DoorSound($this)); @@ -285,9 +285,9 @@ abstract class Door extends Transparent{ }else{ $this->meta ^= 0x04; $this->getLevel()->setBlock($this, $this, true); - $players = $this->getLevel()->getUsingChunk($this->x >> 4, $this->z >> 4); + $players = $this->getLevel()->getChunkPlayers($this->x >> 4, $this->z >> 4); if($player instanceof Player){ - unset($players[$player->getId()]); + unset($players[$player->getLoaderId()]); } $this->level->addSound(new DoorSound($this)); } diff --git a/src/pocketmine/item/Tool.php b/src/pocketmine/item/Tool.php index a67182e99..45d2787a7 100644 --- a/src/pocketmine/item/Tool.php +++ b/src/pocketmine/item/Tool.php @@ -69,11 +69,11 @@ abstract class Tool extends Item{ public function getMaxDurability(){ $levels = [ - 2 => 33, - 1 => 60, - 3 => 132, - 4 => 251, - 5 => 1562, + Tool::TIER_GOLD => 33, + Tool::TIER_WOODEN => 60, + Tool::TIER_STONE => 132, + Tool::TIER_IRON => 251, + Tool::TIER_DIAMOND => 1562, self::FLINT_STEEL => 65, self::SHEARS => 239, self::BOW => 385, diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index 01ff267bf..2862a0153 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -87,6 +87,7 @@ use pocketmine\nbt\tag\Int; use pocketmine\nbt\tag\Short; use pocketmine\nbt\tag\String; use pocketmine\network\Network; +use pocketmine\network\protocol\LevelEventPacket; use pocketmine\network\protocol\SetTimePacket; use pocketmine\network\protocol\UpdateBlockPacket; use pocketmine\Player; @@ -548,7 +549,7 @@ class Level implements ChunkManager, Metadatable{ } public function registerChunkLoader(ChunkLoader $loader, $chunkX, $chunkZ, $autoLoad = true){ - $hash = spl_object_hash($loader); + $hash = $loader->getLoaderId(); if(!isset($this->chunkLoaders[$index = Level::chunkHash($chunkX, $chunkZ)])){ $this->chunkLoaders[$index] = []; @@ -576,8 +577,8 @@ class Level implements ChunkManager, Metadatable{ } public function unregisterChunkLoader(ChunkLoader $loader, $chunkX, $chunkZ){ - if(isset($this->chunkLoaders[$index = Level::chunkHash($chunkX, $chunkZ)][$hash = spl_object_hash($loader)])){ - unset($this->chunkLoaders[$index][$hash = spl_object_hash($loader)]); + if(isset($this->chunkLoaders[$index = Level::chunkHash($chunkX, $chunkZ)][$hash = $loader->getLoaderId()])){ + unset($this->chunkLoaders[$index][$hash]); unset($this->playerLoaders[$index][$hash]); if(count($this->chunkLoaders[$index]) === 0){ unset($this->chunkLoaders[$index]); @@ -1445,11 +1446,18 @@ class Level implements ChunkManager, Metadatable{ } $drops = $target->getDrops($item); //Fixes tile entities being deleted before getting drops - $players = $this->getUsingChunk($target->x >> 4, $target->z >> 4); + $players = $this->getChunkPlayers($target->x >> 4, $target->z >> 4); if($player !== null){ - unset($players[$player->getId()]); - $this->addParticle(new DestroyBlockParticle($target->add(0.5, 0.5, 0.5), $target), $players); + unset($players[$player->getLoaderId()]); } + + $pk = new LevelEventPacket(); + $pk->evid = 2001; + $pk->x = $target->x + 0.5; + $pk->y = $target->y + 0.5; + $pk->z = $target->z + 0.5; + $pk->data = $target->getId() + ($target->getDamage() << 12); + Server::broadcastPacket($players, $pk->setChannel(Network::CHANNEL_WORLD_EVENTS)); $target->onBreak($item); @@ -2125,7 +2133,7 @@ class Level implements ChunkManager, Metadatable{ $this->chunkSendQueue[$index] = []; } - $this->chunkSendQueue[$index][spl_object_hash($player)] = $player; + $this->chunkSendQueue[$index][$player->getLoaderId()] = $player; } private function processChunkRequest(){