diff --git a/src/pocketmine/block/BurningFurnace.php b/src/pocketmine/block/BurningFurnace.php index ce7bc4d1d..18d028e73 100644 --- a/src/pocketmine/block/BurningFurnace.php +++ b/src/pocketmine/block/BurningFurnace.php @@ -117,6 +117,12 @@ class BurningFurnace extends Solid{ $furnace = Tile::createTile("Furnace", $this->getLevel()->getChunk($this->x >> 4, $this->z >> 4), $nbt); } + if(isset($furnace->namedtag->Lock) and $furnace->namedtag->Lock instanceof String){ + if($furnace->namedtag->Lock->getValue() !== $item->getCustomName()){ + return true; + } + } + if($player->isCreative()){ return true; } diff --git a/src/pocketmine/block/Chest.php b/src/pocketmine/block/Chest.php index d3fc5cd1c..1f7017abd 100644 --- a/src/pocketmine/block/Chest.php +++ b/src/pocketmine/block/Chest.php @@ -158,6 +158,11 @@ class Chest extends Transparent{ $chest = Tile::createTile("Chest", $this->getLevel()->getChunk($this->x >> 4, $this->z >> 4), $nbt); } + if(isset($chest->namedtag->Lock) and $chest->namedtag->Lock instanceof String){ + if($chest->namedtag->Lock->getValue() !== $item->getCustomName()){ + return true; + } + } if($player->isCreative()){ return true; diff --git a/src/pocketmine/block/EnchantingTable.php b/src/pocketmine/block/EnchantingTable.php index d7be3cbe8..f65c5f8bc 100644 --- a/src/pocketmine/block/EnchantingTable.php +++ b/src/pocketmine/block/EnchantingTable.php @@ -85,6 +85,7 @@ class EnchantingTable extends Transparent{ public function onActivate(Item $item, Player $player = null){ if($player instanceof Player){ + //TODO lock if($player->isCreative()){ return true; } diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index 0a99aab89..135530c5b 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -1562,6 +1562,24 @@ class Level implements ChunkManager, Metadatable{ } } + $tag = $item->getNamedTagEntry("CanDestroy"); + if($tag instanceof Enum){ + $canBreak = false; + foreach($tag as $v){ + if($v instanceof String){ + $entry = Item::fromString($v->getValue()); + if($entry->getId() > 0 and $entry->getBlock() !== null and $entry->getBlock()->getId() === $target->getId()){ + $canBreak = true; + break; + } + } + } + + if(!$canBreak){ + return false; + } + } + if($createParticles){ $players = $this->getChunkPlayers($target->x >> 4, $target->z >> 4); if($player !== null){