diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index 10abe7587..9b1dd4244 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -1212,6 +1212,9 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{ if(($this->gamemode & 0x01) === 0x01){ $this->inventory->setHeldItemSlot(0); $this->inventory->setItemInHand(Item::get(Item::STONE, 0, 1)); + }else{ + $this->inventory->setHeldItemSlot(0); + $this->inventory->setItemInHand(Item::get(Item::AIR, 0, 1)); } $pk = new LoginStatusPacket; @@ -1516,8 +1519,11 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{ } break; } + + $this->inventory->sendContents($this); $target = $this->getLevel()->getBlock($vector); $tile = $this->getLevel()->getTile($vector); + $pk = new UpdateBlockPacket; $pk->x = $target->x; $pk->y = $target->y; @@ -1525,7 +1531,7 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{ $pk->block = $target->getID(); $pk->meta = $target->getDamage(); $this->dataPacket($pk); - //TODO: priority + if($tile instanceof Spawnable){ $tile->spawnTo($this); } @@ -1538,18 +1544,18 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{ for($i = 0; $i < 4; ++$i){ $s = $packet->slots[$i]; if($s === 0 or $s === 255){ - $s = Item::get(Item::AIR, 0, 0); + $s = Item::get(Item::AIR, 0, 1); }else{ $s = Item::get($s + 256, 0, 1); } $slot = $this->inventory->getArmorItem($i); if($slot->getID() !== Item::AIR and $s->getID() === Item::AIR){ - $this->inventory->setArmorItem($i, Item::get(Item::AIR, 0, 0)); + $this->inventory->setArmorItem($i, Item::get(Item::AIR, 0, 1)); }elseif($s->getID() !== Item::AIR and $slot->getID() === Item::AIR and ($sl = $this->inventory->first($s)) !== -1){ if($this->inventory->setArmorItem($i, $this->inventory->getItem($sl)) === false){ $this->inventory->sendContents($this); }else{ - $this->inventory->setItem($sl, Item::get(Item::AIR, 0, 0)); + $this->inventory->setItem($sl, Item::get(Item::AIR, 0, 1)); } }elseif($s->getID() !== Item::AIR and $slot->getID() !== Item::AIR and ($slot->getID() !== $s->getID() or $slot->getDamage() !== $s->getDamage()) and ($sl = $this->inventory->first($s)) !== -1){ if($this->inventory->setArmorItem($i, $this->inventory->getItem($sl)) === false){ @@ -1647,7 +1653,7 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{ $target->harm($damage, $this->id); if($slot->isTool() === true and ($this->gamemode & 0x01) === 0){ if($slot->useOn($target) and $slot->getDamage() >= $slot->getMaxDurability()){ - $this->setSlot($this->getCurrentEquipment(), new Item(AIR, 0, 0)); + $this->setSlot($this->getCurrentEquipment(), new Item(AIR, 0, 1)); } } } @@ -1765,7 +1771,7 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{ break; } - $this->inventory->setItemInHand(Item::get(Item::AIR, 0, 0)); + $this->inventory->setItemInHand(Item::get(Item::AIR, 0, 1)); $motion = $this->getDirectionVector()->multiply(10); $this->getLevel()->dropItem($this->add(0, 1, 0), $item, $motion); diff --git a/src/pocketmine/block/Block.php b/src/pocketmine/block/Block.php index 21549ee48..2e3172656 100644 --- a/src/pocketmine/block/Block.php +++ b/src/pocketmine/block/Block.php @@ -750,9 +750,9 @@ abstract class Block extends Position implements Metadatable{ if(!isset(self::$list[$this->id])){ //Unknown blocks return []; }else{ - return array( + return [ array($this->id, $this->meta, 1), - ); + ]; } } diff --git a/src/pocketmine/block/Grass.php b/src/pocketmine/block/Grass.php index b6e8ecf35..991a97dc9 100644 --- a/src/pocketmine/block/Grass.php +++ b/src/pocketmine/block/Grass.php @@ -36,9 +36,9 @@ class Grass extends Solid{ } public function getDrops(Item $item){ - return array( - array(Item::DIRT, 0, 1), - ); + return [ + [Item::DIRT, 0, 1], + ]; } public function onUpdate($type){ diff --git a/src/pocketmine/level/ChunkRequestTask.php b/src/pocketmine/level/ChunkRequestTask.php index 44f082e0c..f102949c3 100644 --- a/src/pocketmine/level/ChunkRequestTask.php +++ b/src/pocketmine/level/ChunkRequestTask.php @@ -100,8 +100,8 @@ class ChunkRequestTask extends AsyncTask{ $orderedSkyLight = ""; $orderedLight = ""; - for($z = 0; $z < 16; ++$z){ - for($x = 0; $x < 16; ++$x){ + for($x = 0; $x < 16; ++$x){ + for($z = 0; $z < 16; ++$z){ $orderedIds .= $this->getColumn($this->ids, $x, $z); $orderedData .= $this->getHalfColumn($this->meta, $x, $z); $orderedSkyLight .= $this->getHalfColumn($this->skyLight, $x, $z); diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index d95606c59..3a8430b58 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -767,12 +767,11 @@ class Level implements ChunkManager, Metadatable{ $ev = new BlockBreakEvent($player, $target, $item, ($player->getGamemode() & 0x01) === 1 ? true : false); $lastTime = $player->lastBreak - 0.1; //TODO: replace with true lag - if(($player->getGamemode() & 0x01)){ + if(($player->getGamemode() & 0x01) > 0){ $ev->setInstaBreak(true); }elseif(($lastTime + $target->getBreakTime($item)) >= microtime(true)){ - $ev->setCancelled(true); + $ev->setCancelled(); } - $player->lastBreak = microtime(true); if($item instanceof Item and !$target->isBreakable($item) and $ev->getInstaBreak() === false){ $ev->setCancelled(); @@ -788,6 +787,9 @@ class Level implements ChunkManager, Metadatable{ if($ev->isCancelled()){ return false; } + + $player->lastBreak = microtime(true); + }elseif($item instanceof Item and !$target->isBreakable($item)){ return false; }