From 01d93d6e107f8bb6455bc3ed38af71d49086e050 Mon Sep 17 00:00:00 2001 From: Shoghi Cervantes Date: Fri, 7 Aug 2015 22:13:52 +0200 Subject: [PATCH] Added CanPlaceOn tag --- src/pocketmine/item/Item.php | 2 +- src/pocketmine/level/Level.php | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/pocketmine/item/Item.php b/src/pocketmine/item/Item.php index 5bfff2c26..1cd7043ea 100644 --- a/src/pocketmine/item/Item.php +++ b/src/pocketmine/item/Item.php @@ -918,7 +918,7 @@ class Item{ return $blocks; }else{ - $b = explode(":", str_replace(" ", "_", trim($str))); + $b = explode(":", str_replace([" ", "minecraft:"], ["_", ""], trim($str))); if(!isset($b[1])){ $meta = 0; }else{ diff --git a/src/pocketmine/level/Level.php b/src/pocketmine/level/Level.php index 47fabbe15..0a99aab89 100644 --- a/src/pocketmine/level/Level.php +++ b/src/pocketmine/level/Level.php @@ -1706,6 +1706,24 @@ class Level implements ChunkManager, Metadatable{ } } + $tag = $item->getNamedTagEntry("CanPlaceOn"); + if($tag instanceof Enum){ + $canPlace = 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()){ + $canPlace = true; + break; + } + } + } + + if(!$canPlace){ + return false; + } + } + if($player !== null){ $ev = new BlockPlaceEvent($player, $hand, $block, $target, $item);