From 012d46dfd8244c964aa5230158ee93b8ba181954 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Gonz=C3=A1lez?= Date: Thu, 24 Dec 2015 00:09:36 -0600 Subject: [PATCH 1/2] Added Mob Heads Fixed duplicated items in JSON file --- src/pocketmine/Server.php | 2 + src/pocketmine/block/Block.php | 4 +- src/pocketmine/block/MobHead.php | 105 ++++++++++++++++++++ src/pocketmine/block/SignPost.php | 10 +- src/pocketmine/item/Item.php | 6 +- src/pocketmine/item/MobHead.php | 35 +++++++ src/pocketmine/resources/creativeitems.json | 2 +- src/pocketmine/tile/Skull.php | 75 ++++++++++++++ 8 files changed, 228 insertions(+), 11 deletions(-) create mode 100644 src/pocketmine/block/MobHead.php create mode 100644 src/pocketmine/item/MobHead.php create mode 100644 src/pocketmine/tile/Skull.php diff --git a/src/pocketmine/Server.php b/src/pocketmine/Server.php index 5744f5dab..af48452d6 100644 --- a/src/pocketmine/Server.php +++ b/src/pocketmine/Server.php @@ -106,6 +106,7 @@ use pocketmine\tile\Chest; use pocketmine\tile\EnchantTable; use pocketmine\tile\Furnace; use pocketmine\tile\Sign; +use pocketmine\tile\Skull; use pocketmine\tile\Tile; use pocketmine\updater\AutoUpdater; use pocketmine\utils\Binary; @@ -2504,6 +2505,7 @@ class Server{ Tile::registerTile(Chest::class); Tile::registerTile(Furnace::class); Tile::registerTile(Sign::class); + Tile::registerTile(Skull::class); Tile::registerTile(EnchantTable::class); } diff --git a/src/pocketmine/block/Block.php b/src/pocketmine/block/Block.php index ea53daada..011b28150 100644 --- a/src/pocketmine/block/Block.php +++ b/src/pocketmine/block/Block.php @@ -218,7 +218,8 @@ class Block extends Position implements Metadatable{ const CARROT_BLOCK = 141; const POTATO_BLOCK = 142; const WOODEN_BUTTON = 143; - const MOB_HEAD_BLOCK = 144; + const MOB_HEAD = 144; + const SKULL = 144; const ANVIL = 145; const TRAPPED_CHEST = 146; const WEIGHTED_PRESSURE_PLATE_LIGHT = 147; @@ -438,6 +439,7 @@ class Block extends Position implements Metadatable{ self::$list[self::CARROT_BLOCK] = Carrot::class; self::$list[self::POTATO_BLOCK] = Potato::class; self::$list[self::WOODEN_BUTTON] = WoodenButton::class; + self::$list[self::MOB_HEAD] = MobHead::class; self::$list[self::ANVIL] = Anvil::class; self::$list[self::TRAPPED_CHEST] = TrappedChest::class; self::$list[self::WEIGHTED_PRESSURE_PLATE_LIGHT] = WeightedPressurePlateLight::class; diff --git a/src/pocketmine/block/MobHead.php b/src/pocketmine/block/MobHead.php new file mode 100644 index 000000000..b2831e3ab --- /dev/null +++ b/src/pocketmine/block/MobHead.php @@ -0,0 +1,105 @@ +meta = $meta; + } + + public function getHardness(){ + return 1; + } + + public function getName(){ + return "Mob Head"; + } + + public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, Player $player = null){ + if($face !== 0){ + $this->meta = $face; + if($face === 1){ + $rot = floor(($player->yaw * 16 / 360) + 0.5) & 0x0F; + }else{ + $rot = $face; + } + $this->getLevel()->setBlock($block, $this, true); + $nbt = new CompoundTag("", [ + new StringTag("id", Tile::SKULL), + new ByteTag("SkullType", $item->getDamage()), + new ByteTag("Rot", $rot), + new IntTag("x", (int) $this->x), + new IntTag("y", (int) $this->y), + new IntTag("z", (int) $this->z) + ]); + if($item->hasCustomName()){ + $nbt->CustomName = new StringTag("CustomName", $item->getCustomName()); + } + /** @var Spawnable $tile */ + Tile::createTile("Skull", $this->getLevel()->getChunk($this->x >> 4, $this->z >> 4), $nbt); + return true; + } + return false; + } + + public function onUpdate($type){ + parent::onUpdate($type); + $faces = [ + 1 => 0, + 2 => 3, + 3 => 2, + 4 => 5, + 5 => 4, + ]; + if($type === Level::BLOCK_UPDATE_NORMAL){ + if($this->getSide($faces[$this->meta])->getId() === self::AIR){ + $this->getLevel()->useBreakOn($this); + + return Level::BLOCK_UPDATE_NORMAL; + } + } + + return false; + } + + public function getDrops(Item $item){ + if($this->meta === 3){ + return []; + } + return [ + [Item::MOB_HEAD, $this->type, 1] + ]; + } +} \ No newline at end of file diff --git a/src/pocketmine/block/SignPost.php b/src/pocketmine/block/SignPost.php index 5ae519979..7a8f03719 100644 --- a/src/pocketmine/block/SignPost.php +++ b/src/pocketmine/block/SignPost.php @@ -53,19 +53,13 @@ class SignPost extends Transparent{ public function place(Item $item, Block $block, Block $target, $face, $fx, $fy, $fz, Player $player = null){ if($face !== 0){ - $faces = [ - 2 => 2, - 3 => 3, - 4 => 4, - 5 => 5, - ]; - if(!isset($faces[$face])){ + if($face === 1){ $this->meta = floor((($player->yaw + 180) * 16 / 360) + 0.5) & 0x0F; $this->getLevel()->setBlock($block, Block::get(Item::SIGN_POST, $this->meta), true); return true; }else{ - $this->meta = $faces[$face]; + $this->meta = $face; $this->getLevel()->setBlock($block, Block::get(Item::WALL_SIGN, $this->meta), true); return true; diff --git a/src/pocketmine/item/Item.php b/src/pocketmine/item/Item.php index bb8b1e32f..4430bd3bb 100644 --- a/src/pocketmine/item/Item.php +++ b/src/pocketmine/item/Item.php @@ -241,6 +241,7 @@ class Item{ const WOODEN_BUTTON = 143; const MOB_HEAD_BLOCK = 144; const ANVIL = 145; + const SKULL_BLOCK = 144; const TRAPPED_CHEST = 146; const WEIGHTED_PRESSURE_PLATE_LIGHT = 147; const WEIGHTED_PRESSURE_PLATE_HEAVY = 148; @@ -449,6 +450,8 @@ class Item{ const POISONOUS_POTATO = 394; const GOLDEN_CARROT = 396; const MOB_HEAD = 397; + const SKULL = 397; + const PUMPKIN_PIE = 400; const ENCHANTED_BOOK = 403; @@ -608,6 +611,7 @@ class Item{ self::$list[self::POTATO] = Potato::class; self::$list[self::BAKED_POTATO] = BakedPotato::class; self::$list[self::GOLDEN_CARROT] = GoldenCarrot::class; + self::$list[self::MOB_HEAD] = MobHead::class; self::$list[self::PUMPKIN_PIE] = PumpkinPie::class; self::$list[self::NETHER_BRICK] = NetherBrick::class; self::$list[self::QUARTZ] = Quartz::class; @@ -634,7 +638,7 @@ class Item{ self::clearCreativeItems(); $creativeItems = new Config(Server::getInstance()->getFilePath() . "src/pocketmine/resources/creativeitems.json", Config::JSON, []); - + foreach($creativeItems->getAll() as $item){ self::addCreativeItem(Item::get($item["ID"], $item["Damage"])); } diff --git a/src/pocketmine/item/MobHead.php b/src/pocketmine/item/MobHead.php new file mode 100644 index 000000000..29df8248e --- /dev/null +++ b/src/pocketmine/item/MobHead.php @@ -0,0 +1,35 @@ +block = Block::get(Item::SKULL_BLOCK); + parent::__construct(self::MOB_HEAD, $meta, $count, "Mob Head"); + } + + public function getMaxStackSize(){ + return 1; + } +} \ No newline at end of file diff --git a/src/pocketmine/resources/creativeitems.json b/src/pocketmine/resources/creativeitems.json index d8f03caf0..5361c6649 100644 --- a/src/pocketmine/resources/creativeitems.json +++ b/src/pocketmine/resources/creativeitems.json @@ -1 +1 @@ -{ "Cobblestone":{"ID":4,"Damage":0}, "Stone Bricks":{"ID":98,"Damage":0}, "Mossy Stone Bricks":{"ID":98,"Damage":1}, "Cracked Stone Bricks":{"ID":98,"Damage":2}, "Chiseled Stone Bricks":{"ID":98,"Damage":3}, "Moss Stone":{"ID":48,"Damage":0}, "Oak Wood Planks":{"ID":5,"Damage":0}, "Spruce Wood Planks":{"ID":5,"Damage":1}, "Birch Wood Planks":{"ID":5,"Damage":2}, "Jungle Wood Planks":{"ID":5,"Damage":3}, "Acacia Wood Planks":{"ID":5,"Damage":4}, "Dark Oak Wood Planks":{"ID":5,"Damage":5}, "Bricks":{"ID":45,"Damage":0}, "Stone":{"ID":1,"Damage":0}, "Granite":{"ID":1,"Damage":1}, "Polished Granite":{"ID":1,"Damage":2}, "Diorite":{"ID":1,"Damage":3}, "Polished Diorite":{"ID":1,"Damage":4}, "Andesite":{"ID":1,"Damage":5}, "Polished Andesite":{"ID":1,"Damage":6}, "Dirt":{"ID":3,"Damage":0}, "Podzol":{"ID":243,"Damage":0}, "Grass":{"ID":2,"Damage":0}, "Mycelium":{"ID":110,"Damage":0}, "Clay Block":{"ID":82,"Damage":0}, "Hardened Clay":{"ID":172,"Damage":0}, "White Stained Clay":{"ID":159,"Damage":0}, "Orange Stained Clay":{"ID":159,"Damage":1}, "Magenta Stained Clay":{"ID":159,"Damage":2}, "Light Blue Stained Clay":{"ID":159,"Damage":3}, "Yellow Stained Clay":{"ID":159,"Damage":4}, "Lime Stained Clay":{"ID":159,"Damage":5}, "Pink Stained Clay":{"ID":159,"Damage":6}, "Gray Stained Clay":{"ID":159,"Damage":7}, "Light Gray Stained Clay":{"ID":159,"Damage":8}, "Cyan Stained Clay":{"ID":159,"Damage":9}, "Purple Stained Clay":{"ID":159,"Damage":10}, "Blue Stained Clay":{"ID":159,"Damage":11}, "Brown Stained Clay":{"ID":159,"Damage":12}, "Green Stained Clay":{"ID":159,"Damage":13}, "Red Stained Clay":{"ID":159,"Damage":14}, "Black Stained Clay":{"ID":159,"Damage":15}, "Sandstone":{"ID":24,"Damage":0}, "Chiseled Sandstone":{"ID":24,"Damage":1}, "Smooth Sandstone":{"ID":24,"Damage":2}, "Sand":{"ID":12,"Damage":0}, "Red Sand":{"ID":12,"Damage":1}, "Gravel":{"ID":13,"Damage":0}, "Oak Wood":{"ID":17,"Damage":0}, "Spruce Wood":{"ID":17,"Damage":1}, "Birch Wood":{"ID":17,"Damage":2}, "Jungle Wood":{"ID":17,"Damage":3}, "Acacia Wood":{"ID":162,"Damage":0}, "Dark Oak Wood":{"ID":162,"Damage":1}, "Nether Bricks":{"ID":112,"Damage":0}, "Netherrack":{"ID":87,"Damage":0}, "Soul Sand":{"ID":88,"Damage":0}, "Bedrock":{"ID":7,"Damage":0}, "Cobblestone Stairs":{"ID":67,"Damage":0}, "Wood Stairs":{"ID":53,"Damage":0}, "Spruce Wood Stairs":{"ID":134,"Damage":0}, "Birch Wood Stairs":{"ID":135,"Damage":0}, "Jungle Wood Stairs":{"ID":136,"Damage":0}, "Acacia Wood Stairs":{"ID":163,"Damage":0}, "Dark Oak Wood Stairs":{"ID":164,"Damage":0}, "Brick Stairs":{"ID":108,"Damage":0}, "Sandstone Stairs":{"ID":128,"Damage":0}, "Stone Brick Stairs":{"ID":109,"Damage":0}, "Nether Bricks Stairs":{"ID":114,"Damage":0}, "Quartz Stairs":{"ID":156,"Damage":0}, "Stone Slab":{"ID":44,"Damage":0}, "Sandstone Slab":{"ID":44,"Damage":1}, "Oak Wooden Slab":{"ID":158,"Damage":0}, "Spruce Wooden Slab":{"ID":158,"Damage":1}, "Birch Wooden Slab":{"ID":158,"Damage":2}, "Jungle Wooden Slab":{"ID":158,"Damage":3}, "Acacia Wooden Slab":{"ID":158,"Damage":4}, "Dark Oak Wooden Slab":{"ID":158,"Damage":5}, "Cobblestone Slab":{"ID":44,"Damage":3}, "Brick Slab":{"ID":44,"Damage":4}, "Stone Brick Slab":{"ID":44,"Damage":5}, "Quartz Slab":{"ID":44,"Damage":6}, "Nether Brick Slab":{"ID":44,"Damage":7}, "Quartz Block":{"ID":155,"Damage":0}, "Chiseled Quartz Block":{"ID":155,"Damage":1}, "Quartz Pillar":{"ID":155,"Damage":2}, "Coal Ore":{"ID":16,"Damage":0}, "Iron Ore":{"ID":15,"Damage":0}, "Gold Ore":{"ID":14,"Damage":0}, "Diamond Ore":{"ID":56,"Damage":0}, "Lapis Lazuli Ore":{"ID":21,"Damage":0}, "Redstone Ore":{"ID":73,"Damage":0}, "Emerald Ore":{"ID":129,"Damage":0}, "Obsidian":{"ID":49,"Damage":0}, "Ice":{"ID":79,"Damage":0}, "Packed Ice":{"ID":174,"Damage":0}, "Snow Block":{"ID":80,"Damage":0}, "EndTag Stone":{"ID":121,"Damage":0}, "Cobblestone Wall":{"ID":139,"Damage":0}, "Mossy Cobblestone Wall":{"ID":139,"Damage":1}, "Lily Pad":{"ID":111,"Damage":0}, "Gold Block":{"ID":41,"Damage":0}, "Iron Block":{"ID":42,"Damage":0}, "Diamond Block":{"ID":57,"Damage":0}, "Lapis Lazuli Block":{"ID":22,"Damage":0}, "Coal Block":{"ID":173,"Damage":0}, "Emerald Block":{"ID":133,"Damage":0}, "Redstone Block":{"ID":152,"Damage":0}, "Snow Layer":{"ID":78,"Damage":0}, "Glass":{"ID":20,"Damage":0}, "Glowstone":{"ID":89,"Damage":0}, "Vines":{"ID":106,"Damage":0}, "Ladder":{"ID":65,"Damage":0}, "Sponge":{"ID":19,"Damage":0}, "Glass Pane":{"ID":102,"Damage":0}, "Wooden Door":{"ID":324,"Damage":0}, "Wooden Door":{"ID":324,"Damage":0}, "Wooden Door":{"ID":324,"Damage":0}, "Wooden Door":{"ID":324,"Damage":0}, "Wooden Door":{"ID":324,"Damage":0}, "Wooden Door":{"ID":324,"Damage":0}, "Iron Door":{"ID":330,"Damage":0}, "Wooden Trapdoor":{"ID":96,"Damage":0}, "Iron Trapdoor":{"ID":167,"Damage":0}, "Oak Fence":{"ID":85,"Damage":0}, "Spruce Fence":{"ID":85,"Damage":1}, "Birch Fence":{"ID":85,"Damage":2}, "Jungle Fence":{"ID":85,"Damage":3}, "Acacia Fence":{"ID":85,"Damage":4}, "Dark Oak Fence":{"ID":85,"Damage":5}, "Nether Brick Fence":{"ID":113,"Damage":0}, "Oak Fence Gate":{"ID":107,"Damage":0}, "Spruce Fence Gate":{"ID":183,"Damage":0}, "Birch Fence Gate":{"ID":184,"Damage":0}, "Jungle Fence Gate":{"ID":185,"Damage":0}, "Acacia Fence Gate":{"ID":187,"Damage":0}, "Dark Oak Fence Gate":{"ID":186,"Damage":0}, "Iron Bars":{"ID":101,"Damage":0}, "Bed":{"ID":355,"Damage":0}, "Bookshelf":{"ID":47,"Damage":0}, "Painting":{"ID":321,"Damage":0}, "Crafting Table":{"ID":58,"Damage":0}, "Stonecutter":{"ID":245,"Damage":0}, "Chest":{"ID":54,"Damage":0}, "Chest":{"ID":54,"Damage":0}, "Furnace":{"ID":61,"Damage":0}, "Brewing Stand":{"ID":379,"Damage":0}, "EndTag Portal Frame":{"ID":120,"Damage":0}, "Anvil":{"ID":145,"Damage":0}, "Anvil":{"ID":145,"Damage":4}, "Anvil":{"ID":145,"Damage":8}, "Dandelion":{"ID":37,"Damage":0}, "Poppy":{"ID":38,"Damage":0}, "Blue Orchid":{"ID":38,"Damage":1}, "Allium":{"ID":38,"Damage":2}, "Azure Bluet":{"ID":38,"Damage":3}, "Red Tulip":{"ID":38,"Damage":4}, "Orange Tulip":{"ID":38,"Damage":5}, "White Tulip":{"ID":38,"Damage":6}, "Pink Tulip":{"ID":38,"Damage":7}, "Oxeye Daisy":{"ID":38,"Damage":8}, "Brown Mushroom":{"ID":39,"Damage":0}, "Red Mushroom":{"ID":40,"Damage":0}, "Cactus":{"ID":81,"Damage":0}, "Melon Block":{"ID":103,"Damage":0}, "Pumpkin":{"ID":86,"Damage":0}, "Jack o'Lantern":{"ID":91,"Damage":0}, "Cobweb":{"ID":30,"Damage":0}, "Hay Bale":{"ID":170,"Damage":0}, "Tall Grass":{"ID":31,"Damage":1}, "Fern":{"ID":31,"Damage":2}, "Dead Bush":{"ID":32,"Damage":0}, "Oak Sapling":{"ID":6,"Damage":0}, "Spruce Sapling":{"ID":6,"Damage":1}, "Birch Sapling":{"ID":6,"Damage":2}, "Jungle Sapling":{"ID":6,"Damage":3}, "Acacia Sapling":{"ID":6,"Damage":4}, "Dark Oak Sapling":{"ID":6,"Damage":5}, "Oak Leaves":{"ID":18,"Damage":0}, "Spruce Leaves":{"ID":18,"Damage":1}, "Birch Leaves":{"ID":18,"Damage":2}, "Jungle Leaves":{"ID":18,"Damage":3}, "Acacia Leaves":{"ID":161,"Damage":0}, "Dark Oak Leaves":{"ID":161,"Damage":1}, "Cake":{"ID":354,"Damage":0}, "Sign":{"ID":323,"Damage":0}, "Flower Pot":{"ID":390,"Damage":0}, "Monster Spawner":{"ID":52,"Damage":0}, "Enchanting Table":{"ID":116,"Damage":0}, "White Wool":{"ID":35,"Damage":0}, "Gray Wool":{"ID":35,"Damage":7}, "Pink Wool":{"ID":35,"Damage":6}, "Lime Wool":{"ID":35,"Damage":5}, "Yellow Wool":{"ID":35,"Damage":4}, "Light Blue Wool":{"ID":35,"Damage":3}, "Magenta Wool":{"ID":35,"Damage":2}, "Orange Wool":{"ID":35,"Damage":1}, "Black Wool":{"ID":35,"Damage":15}, "Red Wool":{"ID":35,"Damage":14}, "Green Wool":{"ID":35,"Damage":13}, "Brown Wool":{"ID":35,"Damage":12}, "Blue Wool":{"ID":35,"Damage":11}, "Purple Wool":{"ID":35,"Damage":10}, "Cyan Wool":{"ID":35,"Damage":9}, "Light Gray Wool":{"ID":35,"Damage":8}, "White Carpet":{"ID":171,"Damage":0}, "Gray Carpet":{"ID":171,"Damage":7}, "Pink Carpet":{"ID":171,"Damage":6}, "Lime Carpet":{"ID":171,"Damage":5}, "Yellow Carpet":{"ID":171,"Damage":4}, "Light Blue Carpet":{"ID":171,"Damage":3}, "Magenta Carpet":{"ID":171,"Damage":2}, "Orange Carpet":{"ID":171,"Damage":1}, "Black Carpet":{"ID":171,"Damage":15}, "Red Carpet":{"ID":171,"Damage":14}, "Green Carpet":{"ID":171,"Damage":13}, "Brown Carpet":{"ID":171,"Damage":12}, "Blue Carpet":{"ID":171,"Damage":11}, "Purple Carpet":{"ID":171,"Damage":10}, "Cyan Carpet":{"ID":171,"Damage":9}, "Light Gray Carpet":{"ID":171,"Damage":8}, "Cobblestone Wall":{"ID":139,"Damage":0}, "Mossy Cobblestone Wall":{"ID":139,"Damage":1}, "Lily Pad":{"ID":111,"Damage":0}, "Gold Block":{"ID":41,"Damage":0}, "Iron Block":{"ID":42,"Damage":0}, "Diamond Block":{"ID":57,"Damage":0}, "Lapis Lazuli Block":{"ID":22,"Damage":0}, "Coal Block":{"ID":173,"Damage":0}, "Emerald Block":{"ID":133,"Damage":0}, "Redstone Block":{"ID":152,"Damage":0}, "Snow Layer":{"ID":78,"Damage":0}, "Glass":{"ID":20,"Damage":0}, "Glowstone":{"ID":89,"Damage":0}, "Vines":{"ID":106,"Damage":0}, "Ladder":{"ID":65,"Damage":0}, "Sponge":{"ID":19,"Damage":0}, "Glass Pane":{"ID":102,"Damage":0}, "Wooden Door":{"ID":324,"Damage":0}, "Wooden Door":{"ID":324,"Damage":0}, "Wooden Door":{"ID":324,"Damage":0}, "Wooden Door":{"ID":324,"Damage":0}, "Wooden Door":{"ID":324,"Damage":0}, "Wooden Door":{"ID":324,"Damage":0}, "Iron Door":{"ID":330,"Damage":0}, "Wooden Trapdoor":{"ID":96,"Damage":0}, "Iron Trapdoor":{"ID":167,"Damage":0}, "Oak Fence":{"ID":85,"Damage":0}, "Spruce Fence":{"ID":85,"Damage":1}, "Birch Fence":{"ID":85,"Damage":2}, "Jungle Fence":{"ID":85,"Damage":3}, "Acacia Fence":{"ID":85,"Damage":4}, "Dark Oak Fence":{"ID":85,"Damage":5}, "Nether Brick Fence":{"ID":113,"Damage":0}, "Oak Fence Gate":{"ID":107,"Damage":0}, "Spruce Fence Gate":{"ID":183,"Damage":0}, "Birch Fence Gate":{"ID":184,"Damage":0}, "Jungle Fence Gate":{"ID":185,"Damage":0}, "Acacia Fence Gate":{"ID":187,"Damage":0}, "Dark Oak Fence Gate":{"ID":186,"Damage":0}, "Iron Bars":{"ID":101,"Damage":0}, "Bed":{"ID":355,"Damage":0}, "Bookshelf":{"ID":47,"Damage":0}, "Painting":{"ID":321,"Damage":0}, "Crafting Table":{"ID":58,"Damage":0}, "Stonecutter":{"ID":245,"Damage":0}, "Chest":{"ID":54,"Damage":0}, "Chest":{"ID":54,"Damage":0}, "Furnace":{"ID":61,"Damage":0}, "Brewing Stand":{"ID":379,"Damage":0}, "EndTag Portal Frame":{"ID":120,"Damage":0}, "Anvil":{"ID":145,"Damage":0}, "Anvil":{"ID":145,"Damage":4}, "Anvil":{"ID":145,"Damage":8}, "Dandelion":{"ID":37,"Damage":0}, "Poppy":{"ID":38,"Damage":0}, "Blue Orchid":{"ID":38,"Damage":1}, "Allium":{"ID":38,"Damage":2}, "Azure Bluet":{"ID":38,"Damage":3}, "Red Tulip":{"ID":38,"Damage":4}, "Orange Tulip":{"ID":38,"Damage":5}, "White Tulip":{"ID":38,"Damage":6}, "Pink Tulip":{"ID":38,"Damage":7}, "Oxeye Daisy":{"ID":38,"Damage":8}, "Brown Mushroom":{"ID":39,"Damage":0}, "Red Mushroom":{"ID":40,"Damage":0}, "Cactus":{"ID":81,"Damage":0}, "Melon Block":{"ID":103,"Damage":0}, "Pumpkin":{"ID":86,"Damage":0}, "Jack o'Lantern":{"ID":91,"Damage":0}, "Cobweb":{"ID":30,"Damage":0}, "Hay Bale":{"ID":170,"Damage":0}, "Tall Grass":{"ID":31,"Damage":1}, "Fern":{"ID":31,"Damage":2}, "Dead Bush":{"ID":32,"Damage":0}, "Oak Sapling":{"ID":6,"Damage":0}, "Spruce Sapling":{"ID":6,"Damage":1}, "Birch Sapling":{"ID":6,"Damage":2}, "Jungle Sapling":{"ID":6,"Damage":3}, "Acacia Sapling":{"ID":6,"Damage":4}, "Dark Oak Sapling":{"ID":6,"Damage":5}, "Oak Leaves":{"ID":18,"Damage":0}, "Spruce Leaves":{"ID":18,"Damage":1}, "Birch Leaves":{"ID":18,"Damage":2}, "Jungle Leaves":{"ID":18,"Damage":3}, "Acacia Leaves":{"ID":161,"Damage":0}, "Dark Oak Leaves":{"ID":161,"Damage":1}, "Cake":{"ID":354,"Damage":0}, "Sign":{"ID":323,"Damage":0}, "Flower Pot":{"ID":390,"Damage":0}, "Monster Spawner":{"ID":52,"Damage":0}, "Enchanting Table":{"ID":116,"Damage":0}, "White Wool":{"ID":35,"Damage":0}, "Gray Wool":{"ID":35,"Damage":7}, "Pink Wool":{"ID":35,"Damage":6}, "Lime Wool":{"ID":35,"Damage":5}, "Yellow Wool":{"ID":35,"Damage":4}, "Light Blue Wool":{"ID":35,"Damage":3}, "Magenta Wool":{"ID":35,"Damage":2}, "Orange Wool":{"ID":35,"Damage":1}, "Black Wool":{"ID":35,"Damage":15}, "Red Wool":{"ID":35,"Damage":14}, "Green Wool":{"ID":35,"Damage":13}, "Brown Wool":{"ID":35,"Damage":12}, "Blue Wool":{"ID":35,"Damage":11}, "Purple Wool":{"ID":35,"Damage":10}, "Cyan Wool":{"ID":35,"Damage":9}, "Light Gray Wool":{"ID":35,"Damage":8}, "White Carpet":{"ID":171,"Damage":0}, "Gray Carpet":{"ID":171,"Damage":7}, "Pink Carpet":{"ID":171,"Damage":6}, "Lime Carpet":{"ID":171,"Damage":5}, "Yellow Carpet":{"ID":171,"Damage":4}, "Light Blue Carpet":{"ID":171,"Damage":3}, "Magenta Carpet":{"ID":171,"Damage":2}, "Orange Carpet":{"ID":171,"Damage":1}, "Black Carpet":{"ID":171,"Damage":15}, "Red Carpet":{"ID":171,"Damage":14}, "Green Carpet":{"ID":171,"Damage":13}, "Brown Carpet":{"ID":171,"Damage":12}, "Blue Carpet":{"ID":171,"Damage":11}, "Purple Carpet":{"ID":171,"Damage":10}, "Cyan Carpet":{"ID":171,"Damage":9}, "Light Gray Carpet":{"ID":171,"Damage":8}, "Torch":{"ID":50,"Damage":0}, "Bucket":{"ID":325,"Damage":0}, "Bucket":{"ID":325,"Damage":1}, "Bucket":{"ID":325,"Damage":8}, "Bucket":{"ID":325,"Damage":10}, "TNT":{"ID":46,"Damage":0}, "Redstone":{"ID":331,"Damage":0}, "Bow":{"ID":261,"Damage":0}, "Fishing Rod":{"ID":346,"Damage":0}, "Flint and Steel":{"ID":259,"Damage":0}, "Shears":{"ID":359,"Damage":0}, "Clock":{"ID":347,"Damage":0}, "Compass":{"ID":345,"Damage":0}, "Minecart":{"ID":328,"Damage":0}, "Spawn Egg":{"ID":383,"Damage":15}, "Spawn Egg":{"ID":383,"Damage":32}, "Spawn Egg":{"ID":383,"Damage":17}, "Wooden Sword":{"ID":268,"Damage":0}, "Wooden Hoe":{"ID":290,"Damage":0}, "Wooden Shovel":{"ID":269,"Damage":0}, "Wooden Pickaxe":{"ID":270,"Damage":0}, "Wooden Axe":{"ID":271,"Damage":0}, "Stone Sword":{"ID":272,"Damage":0}, "Stone Hoe":{"ID":291,"Damage":0}, "Stone Shovel":{"ID":273,"Damage":0}, "Stone Pickaxe":{"ID":274,"Damage":0}, "Stone Axe":{"ID":275,"Damage":0}, "Iron Sword":{"ID":267,"Damage":0}, "Iron Hoe":{"ID":292,"Damage":0}, "Iron Shovel":{"ID":256,"Damage":0}, "Iron Pickaxe":{"ID":257,"Damage":0}, "Iron Axe":{"ID":258,"Damage":0}, "Diamond Sword":{"ID":276,"Damage":0}, "Diamond Hoe":{"ID":293,"Damage":0}, "Diamond Shovel":{"ID":277,"Damage":0}, "Diamond Pickaxe":{"ID":278,"Damage":0}, "Diamond Axe":{"ID":279,"Damage":0}, "Gold Sword":{"ID":283,"Damage":0}, "Gold Hoe":{"ID":294,"Damage":0}, "Gold Shovel":{"ID":284,"Damage":0}, "Gold Pickaxe":{"ID":285,"Damage":0}, "Gold Axe":{"ID":286,"Damage":0}, "Leather Cap":{"ID":298,"Damage":0}, "Leather Tunic":{"ID":299,"Damage":0}, "Leather Pants":{"ID":300,"Damage":0}, "Leather Boots":{"ID":301,"Damage":0}, "Chainmail Helmet":{"ID":302,"Damage":0}, "Chain Chestplate":{"ID":303,"Damage":0}, "Chain Leggings":{"ID":304,"Damage":0}, "Chainmail Boots":{"ID":305,"Damage":0}, "Iron Helmet":{"ID":306,"Damage":0}, "Iron Chestplate":{"ID":307,"Damage":0}, "Iron Leggings":{"ID":308,"Damage":0}, "Iron Boots":{"ID":309,"Damage":0}, "Diamond Helmet":{"ID":310,"Damage":0}, "Diamond Chestplate":{"ID":311,"Damage":0}, "Diamond Leggings":{"ID":312,"Damage":0}, "Diamond Boots":{"ID":313,"Damage":0}, "Gold Helmet":{"ID":314,"Damage":0}, "Gold Chestplate":{"ID":315,"Damage":0}, "Gold Leggings":{"ID":316,"Damage":0}, "Gold Boots":{"ID":317,"Damage":0}, "Snowball":{"ID":332,"Damage":0}, "Coal":{"ID":263,"Damage":0}, "Charcoal":{"ID":263,"Damage":1}, "Diamond":{"ID":264,"Damage":0}, "Iron Ingot":{"ID":265,"Damage":0}, "Gold Ingot":{"ID":266,"Damage":0}, "Emerald":{"ID":388,"Damage":0}, "Stick":{"ID":280,"Damage":0}, "Bowl":{"ID":281,"Damage":0}, "String":{"ID":287,"Damage":0}, "Feather":{"ID":288,"Damage":0}, "Flint":{"ID":318,"Damage":0}, "Leather":{"ID":334,"Damage":0}, "Clay":{"ID":337,"Damage":0}, "Sugar":{"ID":353,"Damage":0}, "Nether Quartz":{"ID":406,"Damage":0}, "Paper":{"ID":339,"Damage":0}, "Book":{"ID":340,"Damage":0}, "Arrow":{"ID":262,"Damage":0}, "Bone":{"ID":352,"Damage":0}, "Sugar Cane":{"ID":338,"Damage":0}, "Wheat":{"ID":296,"Damage":0}, "Wheat Seeds":{"ID":295,"Damage":0}, "Pumpkin Seeds":{"ID":361,"Damage":0}, "Melon Seeds":{"ID":362,"Damage":0}, "Beetroot Seeds":{"ID":458,"Damage":0}, "Egg":{"ID":344,"Damage":0}, "Apple":{"ID":260,"Damage":0}, "Golden Apple":{"ID":322,"Damage":0}, "Raw Fish":{"ID":349,"Damage":0}, "Raw Salmon":{"ID":349,"Damage":1}, "Clownfish":{"ID":349,"Damage":2}, "Pufferfish":{"ID":349,"Damage":3}, "Cooked Fish":{"ID":350,"Damage":0}, "Cooked Salmon":{"ID":350,"Damage":1}, "Bread":{"ID":297,"Damage":0}, "Raw Porkchop":{"ID":319,"Damage":0}, "Cooked Porkchop":{"ID":320,"Damage":0}, "Raw Chicken":{"ID":365,"Damage":0}, "Cooked Chicken":{"ID":366,"Damage":0}, "Raw Beef":{"ID":363,"Damage":0}, "Steak":{"ID":364,"Damage":0}, "Melon":{"ID":360,"Damage":0}, "Carrot":{"ID":391,"Damage":0}, "Potato":{"ID":392,"Damage":0}, "Baked Potato":{"ID":393,"Damage":0}, "Cookie":{"ID":357,"Damage":0}, "Pumpkin Pie":{"ID":400,"Damage":0}, "Gold Nugget":{"ID":371,"Damage":0}, "Slimeball":{"ID":341,"Damage":0}, "Gunpowder":{"ID":289,"Damage":0}, "Glowstone Dust":{"ID":348,"Damage":0}, "Dye":{"ID":351,"Damage":0}, "Dye":{"ID":351,"Damage":7}, "Dye":{"ID":351,"Damage":6}, "Dye":{"ID":351,"Damage":5}, "Dye":{"ID":351,"Damage":4}, "Dye":{"ID":351,"Damage":3}, "Dye":{"ID":351,"Damage":2}, "Dye":{"ID":351,"Damage":1}, "Dye":{"ID":351,"Damage":15}, "Dye":{"ID":351,"Damage":14}, "Dye":{"ID":351,"Damage":13}, "Dye":{"ID":351,"Damage":12}, "Dye":{"ID":351,"Damage":11}, "Dye":{"ID":351,"Damage":10}, "Dye":{"ID":351,"Damage":9}, "Dye":{"ID":351,"Damage":8} } \ No newline at end of file +{ "Cobblestone":{"ID":4,"Damage":0}, "Stone Bricks":{"ID":98,"Damage":0}, "Mossy Stone Bricks":{"ID":98,"Damage":1}, "Cracked Stone Bricks":{"ID":98,"Damage":2}, "Chiseled Stone Bricks":{"ID":98,"Damage":3}, "Moss Stone":{"ID":48,"Damage":0}, "Oak Wood Planks":{"ID":5,"Damage":0}, "Spruce Wood Planks":{"ID":5,"Damage":1}, "Birch Wood Planks":{"ID":5,"Damage":2}, "Jungle Wood Planks":{"ID":5,"Damage":3}, "Acacia Wood Planks":{"ID":5,"Damage":4}, "Dark Oak Wood Planks":{"ID":5,"Damage":5}, "Bricks":{"ID":45,"Damage":0}, "Stone":{"ID":1,"Damage":0}, "Granite":{"ID":1,"Damage":1}, "Polished Granite":{"ID":1,"Damage":2}, "Diorite":{"ID":1,"Damage":3}, "Polished Diorite":{"ID":1,"Damage":4}, "Andesite":{"ID":1,"Damage":5}, "Polished Andesite":{"ID":1,"Damage":6}, "Dirt":{"ID":3,"Damage":0}, "Podzol":{"ID":243,"Damage":0}, "Grass":{"ID":2,"Damage":0}, "Mycelium":{"ID":110,"Damage":0}, "Clay Block":{"ID":82,"Damage":0}, "Hardened Clay":{"ID":172,"Damage":0}, "White Stained Clay":{"ID":159,"Damage":0}, "Orange Stained Clay":{"ID":159,"Damage":1}, "Magenta Stained Clay":{"ID":159,"Damage":2}, "Light Blue Stained Clay":{"ID":159,"Damage":3}, "Yellow Stained Clay":{"ID":159,"Damage":4}, "Lime Stained Clay":{"ID":159,"Damage":5}, "Pink Stained Clay":{"ID":159,"Damage":6}, "Gray Stained Clay":{"ID":159,"Damage":7}, "Light Gray Stained Clay":{"ID":159,"Damage":8}, "Cyan Stained Clay":{"ID":159,"Damage":9}, "Purple Stained Clay":{"ID":159,"Damage":10}, "Blue Stained Clay":{"ID":159,"Damage":11}, "Brown Stained Clay":{"ID":159,"Damage":12}, "Green Stained Clay":{"ID":159,"Damage":13}, "Red Stained Clay":{"ID":159,"Damage":14}, "Black Stained Clay":{"ID":159,"Damage":15}, "Sandstone":{"ID":24,"Damage":0}, "Chiseled Sandstone":{"ID":24,"Damage":1}, "Smooth Sandstone":{"ID":24,"Damage":2}, "Sand":{"ID":12,"Damage":0}, "Red Sand":{"ID":12,"Damage":1}, "Gravel":{"ID":13,"Damage":0}, "Oak Wood":{"ID":17,"Damage":0}, "Spruce Wood":{"ID":17,"Damage":1}, "Birch Wood":{"ID":17,"Damage":2}, "Jungle Wood":{"ID":17,"Damage":3}, "Acacia Wood":{"ID":162,"Damage":0}, "Dark Oak Wood":{"ID":162,"Damage":1}, "Nether Bricks":{"ID":112,"Damage":0}, "Netherrack":{"ID":87,"Damage":0}, "Soul Sand":{"ID":88,"Damage":0}, "Bedrock":{"ID":7,"Damage":0}, "Cobblestone Stairs":{"ID":67,"Damage":0}, "Wood Stairs":{"ID":53,"Damage":0}, "Spruce Wood Stairs":{"ID":134,"Damage":0}, "Birch Wood Stairs":{"ID":135,"Damage":0}, "Jungle Wood Stairs":{"ID":136,"Damage":0}, "Acacia Wood Stairs":{"ID":163,"Damage":0}, "Dark Oak Wood Stairs":{"ID":164,"Damage":0}, "Brick Stairs":{"ID":108,"Damage":0}, "Sandstone Stairs":{"ID":128,"Damage":0}, "Stone Brick Stairs":{"ID":109,"Damage":0}, "Nether Bricks Stairs":{"ID":114,"Damage":0}, "Quartz Stairs":{"ID":156,"Damage":0}, "Stone Slab":{"ID":44,"Damage":0}, "Sandstone Slab":{"ID":44,"Damage":1}, "Oak Wooden Slab":{"ID":158,"Damage":0}, "Spruce Wooden Slab":{"ID":158,"Damage":1}, "Birch Wooden Slab":{"ID":158,"Damage":2}, "Jungle Wooden Slab":{"ID":158,"Damage":3}, "Acacia Wooden Slab":{"ID":158,"Damage":4}, "Dark Oak Wooden Slab":{"ID":158,"Damage":5}, "Cobblestone Slab":{"ID":44,"Damage":3}, "Brick Slab":{"ID":44,"Damage":4}, "Stone Brick Slab":{"ID":44,"Damage":5}, "Quartz Slab":{"ID":44,"Damage":6}, "Nether Brick Slab":{"ID":44,"Damage":7}, "Quartz Block":{"ID":155,"Damage":0}, "Chiseled Quartz Block":{"ID":155,"Damage":1}, "Quartz Pillar":{"ID":155,"Damage":2}, "Coal Ore":{"ID":16,"Damage":0}, "Iron Ore":{"ID":15,"Damage":0}, "Gold Ore":{"ID":14,"Damage":0}, "Diamond Ore":{"ID":56,"Damage":0}, "Lapis Lazuli Ore":{"ID":21,"Damage":0}, "Redstone Ore":{"ID":73,"Damage":0}, "Emerald Ore":{"ID":129,"Damage":0}, "Obsidian":{"ID":49,"Damage":0}, "Ice":{"ID":79,"Damage":0}, "Packed Ice":{"ID":174,"Damage":0}, "Snow Block":{"ID":80,"Damage":0}, "EndTag Stone":{"ID":121,"Damage":0}, "Cobblestone Wall":{"ID":139,"Damage":0}, "Mossy Cobblestone Wall":{"ID":139,"Damage":1}, "Lily Pad":{"ID":111,"Damage":0}, "Gold Block":{"ID":41,"Damage":0}, "Iron Block":{"ID":42,"Damage":0}, "Diamond Block":{"ID":57,"Damage":0}, "Lapis Lazuli Block":{"ID":22,"Damage":0}, "Coal Block":{"ID":173,"Damage":0}, "Emerald Block":{"ID":133,"Damage":0}, "Redstone Block":{"ID":152,"Damage":0}, "Snow Layer":{"ID":78,"Damage":0}, "Glass":{"ID":20,"Damage":0}, "Glowstone":{"ID":89,"Damage":0}, "Vines":{"ID":106,"Damage":0}, "Ladder":{"ID":65,"Damage":0}, "Sponge":{"ID":19,"Damage":0}, "Glass Pane":{"ID":102,"Damage":0}, "Wooden Door":{"ID":324,"Damage":0}, "Iron Door":{"ID":330,"Damage":0}, "Wooden Trapdoor":{"ID":96,"Damage":0}, "Iron Trapdoor":{"ID":167,"Damage":0}, "Oak Fence":{"ID":85,"Damage":0}, "Spruce Fence":{"ID":85,"Damage":1}, "Birch Fence":{"ID":85,"Damage":2}, "Jungle Fence":{"ID":85,"Damage":3}, "Acacia Fence":{"ID":85,"Damage":4}, "Dark Oak Fence":{"ID":85,"Damage":5}, "Nether Brick Fence":{"ID":113,"Damage":0}, "Oak Fence Gate":{"ID":107,"Damage":0}, "Spruce Fence Gate":{"ID":183,"Damage":0}, "Birch Fence Gate":{"ID":184,"Damage":0}, "Jungle Fence Gate":{"ID":185,"Damage":0}, "Acacia Fence Gate":{"ID":187,"Damage":0}, "Dark Oak Fence Gate":{"ID":186,"Damage":0}, "Iron Bars":{"ID":101,"Damage":0}, "Bed":{"ID":355,"Damage":0}, "Bookshelf":{"ID":47,"Damage":0}, "Painting":{"ID":321,"Damage":0}, "Crafting Table":{"ID":58,"Damage":0}, "Stonecutter":{"ID":245,"Damage":0}, "Chest":{"ID":54,"Damage":0}, "Furnace":{"ID":61,"Damage":0}, "Brewing Stand":{"ID":379,"Damage":0}, "EndTag Portal Frame":{"ID":120,"Damage":0}, "Anvil":{"ID":145,"Damage":0}, "Used Anvil":{"ID":145,"Damage":4}, "Damaged Anvil":{"ID":145,"Damage":8}, "Dandelion":{"ID":37,"Damage":0}, "Poppy":{"ID":38,"Damage":0}, "Blue Orchid":{"ID":38,"Damage":1}, "Allium":{"ID":38,"Damage":2}, "Azure Bluet":{"ID":38,"Damage":3}, "Red Tulip":{"ID":38,"Damage":4}, "Orange Tulip":{"ID":38,"Damage":5}, "White Tulip":{"ID":38,"Damage":6}, "Pink Tulip":{"ID":38,"Damage":7}, "Oxeye Daisy":{"ID":38,"Damage":8}, "Brown Mushroom":{"ID":39,"Damage":0}, "Red Mushroom":{"ID":40,"Damage":0}, "Cactus":{"ID":81,"Damage":0}, "Melon Block":{"ID":103,"Damage":0}, "Pumpkin":{"ID":86,"Damage":0}, "Jack o'Lantern":{"ID":91,"Damage":0}, "Cobweb":{"ID":30,"Damage":0}, "Hay Bale":{"ID":170,"Damage":0}, "Tall Grass":{"ID":31,"Damage":1}, "Fern":{"ID":31,"Damage":2}, "Dead Bush":{"ID":32,"Damage":0}, "Oak Sapling":{"ID":6,"Damage":0}, "Spruce Sapling":{"ID":6,"Damage":1}, "Birch Sapling":{"ID":6,"Damage":2}, "Jungle Sapling":{"ID":6,"Damage":3}, "Acacia Sapling":{"ID":6,"Damage":4}, "Dark Oak Sapling":{"ID":6,"Damage":5}, "Oak Leaves":{"ID":18,"Damage":0}, "Spruce Leaves":{"ID":18,"Damage":1}, "Birch Leaves":{"ID":18,"Damage":2}, "Jungle Leaves":{"ID":18,"Damage":3}, "Acacia Leaves":{"ID":161,"Damage":0}, "Dark Oak Leaves":{"ID":161,"Damage":1}, "Cake":{"ID":354,"Damage":0}, "Skeleton Skull":{"ID":144,"Damage":0}, "Wither Skeleton Skull":{"ID":144,"Damage":1}, "Zombie Skull":{"ID":144,"Damage":2}, "Head":{"ID":144,"Damage":3}, "Creeper Skull":{"ID":144,"Damage":4}, "Sign":{"ID":323,"Damage":0}, "Flower Pot":{"ID":390,"Damage":0}, "Monster Spawner":{"ID":52,"Damage":0}, "Enchanting Table":{"ID":116,"Damage":0}, "White Wool":{"ID":35,"Damage":0}, "Gray Wool":{"ID":35,"Damage":7}, "Pink Wool":{"ID":35,"Damage":6}, "Lime Wool":{"ID":35,"Damage":5}, "Yellow Wool":{"ID":35,"Damage":4}, "Light Blue Wool":{"ID":35,"Damage":3}, "Magenta Wool":{"ID":35,"Damage":2}, "Orange Wool":{"ID":35,"Damage":1}, "Black Wool":{"ID":35,"Damage":15}, "Red Wool":{"ID":35,"Damage":14}, "Green Wool":{"ID":35,"Damage":13}, "Brown Wool":{"ID":35,"Damage":12}, "Blue Wool":{"ID":35,"Damage":11}, "Purple Wool":{"ID":35,"Damage":10}, "Cyan Wool":{"ID":35,"Damage":9}, "Light Gray Wool":{"ID":35,"Damage":8}, "White Carpet":{"ID":171,"Damage":0}, "Gray Carpet":{"ID":171,"Damage":7}, "Pink Carpet":{"ID":171,"Damage":6}, "Lime Carpet":{"ID":171,"Damage":5}, "Yellow Carpet":{"ID":171,"Damage":4}, "Light Blue Carpet":{"ID":171,"Damage":3}, "Magenta Carpet":{"ID":171,"Damage":2}, "Orange Carpet":{"ID":171,"Damage":1}, "Black Carpet":{"ID":171,"Damage":15}, "Red Carpet":{"ID":171,"Damage":14}, "Green Carpet":{"ID":171,"Damage":13}, "Brown Carpet":{"ID":171,"Damage":12}, "Blue Carpet":{"ID":171,"Damage":11}, "Purple Carpet":{"ID":171,"Damage":10}, "Cyan Carpet":{"ID":171,"Damage":9}, "Light Gray Carpet":{"ID":171,"Damage":8}, "Torch":{"ID":50,"Damage":0}, "Bucket":{"ID":325,"Damage":0}, "Milk Bucket":{"ID":325,"Damage":1}, "Water Bucket":{"ID":325,"Damage":8}, "Lava Bucket":{"ID":325,"Damage":10}, "TNT":{"ID":46,"Damage":0}, "Redstone":{"ID":331,"Damage":0}, "Bow":{"ID":261,"Damage":0}, "Fishing Rod":{"ID":346,"Damage":0}, "Flint and Steel":{"ID":259,"Damage":0}, "Shears":{"ID":359,"Damage":0}, "Clock":{"ID":347,"Damage":0}, "Compass":{"ID":345,"Damage":0}, "Minecart":{"ID":328,"Damage":0}, "Villager Spawn Egg":{"ID":383,"Damage":15}, "Squid Spawn Egg":{"ID":383,"Damage":17}, "Zombie Spawn Egg":{"ID":383,"Damage":32}, "Wooden Sword":{"ID":268,"Damage":0}, "Wooden Hoe":{"ID":290,"Damage":0}, "Wooden Shovel":{"ID":269,"Damage":0}, "Wooden Pickaxe":{"ID":270,"Damage":0}, "Wooden Axe":{"ID":271,"Damage":0}, "Stone Sword":{"ID":272,"Damage":0}, "Stone Hoe":{"ID":291,"Damage":0}, "Stone Shovel":{"ID":273,"Damage":0}, "Stone Pickaxe":{"ID":274,"Damage":0}, "Stone Axe":{"ID":275,"Damage":0}, "Iron Sword":{"ID":267,"Damage":0}, "Iron Hoe":{"ID":292,"Damage":0}, "Iron Shovel":{"ID":256,"Damage":0}, "Iron Pickaxe":{"ID":257,"Damage":0}, "Iron Axe":{"ID":258,"Damage":0}, "Diamond Sword":{"ID":276,"Damage":0}, "Diamond Hoe":{"ID":293,"Damage":0}, "Diamond Shovel":{"ID":277,"Damage":0}, "Diamond Pickaxe":{"ID":278,"Damage":0}, "Diamond Axe":{"ID":279,"Damage":0}, "Gold Sword":{"ID":283,"Damage":0}, "Gold Hoe":{"ID":294,"Damage":0}, "Gold Shovel":{"ID":284,"Damage":0}, "Gold Pickaxe":{"ID":285,"Damage":0}, "Gold Axe":{"ID":286,"Damage":0}, "Leather Cap":{"ID":298,"Damage":0}, "Leather Tunic":{"ID":299,"Damage":0}, "Leather Pants":{"ID":300,"Damage":0}, "Leather Boots":{"ID":301,"Damage":0}, "Chainmail Helmet":{"ID":302,"Damage":0}, "Chain Chestplate":{"ID":303,"Damage":0}, "Chain Leggings":{"ID":304,"Damage":0}, "Chainmail Boots":{"ID":305,"Damage":0}, "Iron Helmet":{"ID":306,"Damage":0}, "Iron Chestplate":{"ID":307,"Damage":0}, "Iron Leggings":{"ID":308,"Damage":0}, "Iron Boots":{"ID":309,"Damage":0}, "Diamond Helmet":{"ID":310,"Damage":0}, "Diamond Chestplate":{"ID":311,"Damage":0}, "Diamond Leggings":{"ID":312,"Damage":0}, "Diamond Boots":{"ID":313,"Damage":0}, "Gold Helmet":{"ID":314,"Damage":0}, "Gold Chestplate":{"ID":315,"Damage":0}, "Gold Leggings":{"ID":316,"Damage":0}, "Gold Boots":{"ID":317,"Damage":0}, "Snowball":{"ID":332,"Damage":0}, "Coal":{"ID":263,"Damage":0}, "Charcoal":{"ID":263,"Damage":1}, "Diamond":{"ID":264,"Damage":0}, "Iron Ingot":{"ID":265,"Damage":0}, "Gold Ingot":{"ID":266,"Damage":0}, "Emerald":{"ID":388,"Damage":0}, "Stick":{"ID":280,"Damage":0}, "Bowl":{"ID":281,"Damage":0}, "String":{"ID":287,"Damage":0}, "Feather":{"ID":288,"Damage":0}, "Flint":{"ID":318,"Damage":0}, "Leather":{"ID":334,"Damage":0}, "Clay":{"ID":337,"Damage":0}, "Sugar":{"ID":353,"Damage":0}, "Nether Quartz":{"ID":406,"Damage":0}, "Paper":{"ID":339,"Damage":0}, "Book":{"ID":340,"Damage":0}, "Arrow":{"ID":262,"Damage":0}, "Bone":{"ID":352,"Damage":0}, "Sugar Cane":{"ID":338,"Damage":0}, "Wheat":{"ID":296,"Damage":0}, "Wheat Seeds":{"ID":295,"Damage":0}, "Pumpkin Seeds":{"ID":361,"Damage":0}, "Melon Seeds":{"ID":362,"Damage":0}, "Beetroot Seeds":{"ID":458,"Damage":0}, "Egg":{"ID":344,"Damage":0}, "Apple":{"ID":260,"Damage":0}, "Golden Apple":{"ID":322,"Damage":0}, "Raw Fish":{"ID":349,"Damage":0}, "Raw Salmon":{"ID":349,"Damage":1}, "Clownfish":{"ID":349,"Damage":2}, "Pufferfish":{"ID":349,"Damage":3}, "Cooked Fish":{"ID":350,"Damage":0}, "Cooked Salmon":{"ID":350,"Damage":1}, "Bread":{"ID":297,"Damage":0}, "Raw Porkchop":{"ID":319,"Damage":0}, "Cooked Porkchop":{"ID":320,"Damage":0}, "Raw Chicken":{"ID":365,"Damage":0}, "Cooked Chicken":{"ID":366,"Damage":0}, "Raw Beef":{"ID":363,"Damage":0}, "Steak":{"ID":364,"Damage":0}, "Melon":{"ID":360,"Damage":0}, "Carrot":{"ID":391,"Damage":0}, "Potato":{"ID":392,"Damage":0}, "Baked Potato":{"ID":393,"Damage":0}, "Cookie":{"ID":357,"Damage":0}, "Pumpkin Pie":{"ID":400,"Damage":0}, "Gold Nugget":{"ID":371,"Damage":0}, "Slimeball":{"ID":341,"Damage":0}, "Gunpowder":{"ID":289,"Damage":0}, "Glowstone Dust":{"ID":348,"Damage":0}, "Ink Sac":{"ID":351,"Damage":0}, "Light Gray Dye":{"ID":351,"Damage":7}, "Cyan Dye":{"ID":351,"Damage":6}, "Purpule Dye":{"ID":351,"Damage":5}, "Lapis Lazuli":{"ID":351,"Damage":4}, "Cocoa Beans":{"ID":351,"Damage":3}, "Cactus Green":{"ID":351,"Damage":2}, "Rose Red":{"ID":351,"Damage":1}, "Bone Meal":{"ID":351,"Damage":15}, "Orange Dye":{"ID":351,"Damage":14}, "Magenta Dye":{"ID":351,"Damage":13}, "Light Blue Dye":{"ID":351,"Damage":12}, "Dandelion Dye":{"ID":351,"Damage":11}, "Lime Dye":{"ID":351,"Damage":10}, "Pink Dye":{"ID":351,"Damage":9}, "Gray Dye":{"ID":351,"Damage":8} } \ No newline at end of file diff --git a/src/pocketmine/tile/Skull.php b/src/pocketmine/tile/Skull.php new file mode 100644 index 000000000..bd17209ee --- /dev/null +++ b/src/pocketmine/tile/Skull.php @@ -0,0 +1,75 @@ +SkullType)){ + $nbt->SkullType = new ByteTag("SkullType", 0); + } + if(!isset($nbt->Rot)){ + $nbt->Rot = new ByteTag("Rot", 0); + } + parent::__construct($chunk, $nbt); + } + + public function setType($type){ + if($type >= 0 && $type <= 4){ + $this->namedtag->SkullType = new ByteTag("SkullType", $type); + $this->spawnToAll(); + + if($this->chunk){ + $this->chunk->setChanged(); + $this->level->clearChunkCache($this->chunk->getX(), $this->chunk->getZ()); + } + return true; + } + return false; + } + + public function getType(){ + return $this->namedtag["SkullType"]; + } + + public function getSpawnCompound(){ + return new CompoundTag("", [ + new StringTag("id", Tile::SKULL), + $this->namedtag->SkullType, + $this->namedtag->Rot, + new IntTag("x", (int) $this->x), + new IntTag("y", (int) $this->y), + new IntTag("z", (int) $this->z) + ]); + } +} \ No newline at end of file From 292a212827eb8b2fef7c0a5b4db86bdf34f9f49b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jorge=20Gonz=C3=A1lez?= Date: Wed, 18 May 2016 10:07:57 -0500 Subject: [PATCH 2/2] Merge branch master --- .gitignore | 2 +- src/pocketmine/Player.php | 2 ++ src/pocketmine/PocketMine.php | 4 +-- src/pocketmine/block/GlowingRedstoneOre.php | 28 ++----------------- src/pocketmine/block/RedstoneOre.php | 6 ++-- src/pocketmine/lang/BaseLang.php | 8 +++++- .../protocol/AdventureSettingsPacket.php | 4 +++ src/pocketmine/network/protocol/Info.php | 2 +- .../network/protocol/StartGamePacket.php | 4 +++ src/pocketmine/plugin/PluginManager.php | 2 +- src/pocketmine/plugin/ScriptPluginLoader.php | 10 +++++-- 11 files changed, 33 insertions(+), 39 deletions(-) diff --git a/.gitignore b/.gitignore index 9949dd7fc..72fba447e 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,7 @@ timings/* *.txt *.phar server.properties -pocketmine.yml +/pocketmine.yml # Common IDEs .idea/* diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index 7cdf04eb5..076fb1363 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -1177,6 +1177,8 @@ class Player extends Human implements CommandSender, InventoryHolder, ChunkLoade $pk = new AdventureSettingsPacket(); $pk->flags = $flags; + $pk->userPermission = 2; + $pk->globalPermission = 2; $this->dataPacket($pk); } diff --git a/src/pocketmine/PocketMine.php b/src/pocketmine/PocketMine.php index 67040f078..766eda05d 100644 --- a/src/pocketmine/PocketMine.php +++ b/src/pocketmine/PocketMine.php @@ -75,8 +75,8 @@ namespace pocketmine { const VERSION = "1.6dev"; const API_VERSION = "2.0.0"; const CODENAME = "[REDACTED]"; - const MINECRAFT_VERSION = "v0.14.0.0 alpha"; - const MINECRAFT_VERSION_NETWORK = "0.14.0.0"; + const MINECRAFT_VERSION = "v0.14.2.0 alpha"; + const MINECRAFT_VERSION_NETWORK = "0.14.2.0"; /* * Startup code. Do not look at it, it may harm you. diff --git a/src/pocketmine/block/GlowingRedstoneOre.php b/src/pocketmine/block/GlowingRedstoneOre.php index 095241607..9565ebc47 100644 --- a/src/pocketmine/block/GlowingRedstoneOre.php +++ b/src/pocketmine/block/GlowingRedstoneOre.php @@ -22,51 +22,27 @@ namespace pocketmine\block; use pocketmine\item\Item; -use pocketmine\item\Tool; use pocketmine\level\Level; -class GlowingRedstoneOre extends Solid{ +class GlowingRedstoneOre extends RedstoneOre{ protected $id = self::GLOWING_REDSTONE_ORE; - public function __construct(){ - - } - - public function getHardness(){ - return 15; - } - public function getName(){ return "Glowing Redstone Ore"; } - public function getToolType(){ - return Tool::TYPE_PICKAXE; - } - public function getLightLevel(){ return 9; } public function onUpdate($type){ if($type === Level::BLOCK_UPDATE_SCHEDULED or $type === Level::BLOCK_UPDATE_RANDOM){ - $this->getLevel()->setBlock($this, Block::get(Item::REDSTONE_ORE, $this->meta), false, false, true); + $this->getLevel()->setBlock($this, Block::get(Item::REDSTONE_ORE, $this->meta), false, false); return Level::BLOCK_UPDATE_WEAK; } return false; } - - public function getDrops(Item $item){ - if($item->isPickaxe() >= Tool::TIER_IRON){ - return [ - [Item::REDSTONE_DUST, 0, mt_rand(4, 5)], - ]; - }else{ - return []; - } - } - } \ No newline at end of file diff --git a/src/pocketmine/block/RedstoneOre.php b/src/pocketmine/block/RedstoneOre.php index 2fb6df907..91d60a9ea 100644 --- a/src/pocketmine/block/RedstoneOre.php +++ b/src/pocketmine/block/RedstoneOre.php @@ -43,7 +43,7 @@ class RedstoneOre extends Solid{ public function onUpdate($type){ if($type === Level::BLOCK_UPDATE_NORMAL or $type === Level::BLOCK_UPDATE_TOUCH){ - $this->getLevel()->setBlock($this, Block::get(Item::GLOWING_REDSTONE_ORE, $this->meta), false, true); + $this->getLevel()->setBlock($this, Block::get(Item::GLOWING_REDSTONE_ORE, $this->meta)); return Level::BLOCK_UPDATE_WEAK; } @@ -51,14 +51,12 @@ class RedstoneOre extends Solid{ return false; } - - public function getToolType(){ return Tool::TYPE_PICKAXE; } public function getDrops(Item $item){ - if($item->isPickaxe() >= Tool::TIER_GOLD){ + if($item->isPickaxe() >= Tool::TIER_IRON){ return [ [Item::REDSTONE_DUST, 0, mt_rand(4, 5)], ]; diff --git a/src/pocketmine/lang/BaseLang.php b/src/pocketmine/lang/BaseLang.php index ccfb6d141..3c676d5ec 100644 --- a/src/pocketmine/lang/BaseLang.php +++ b/src/pocketmine/lang/BaseLang.php @@ -139,7 +139,13 @@ class BaseLang{ for($i = 0; $i < $len; ++$i){ $c = $text{$i}; if($replaceString !== null){ - if((ord($c) >= 0x30 and ord($c) <= 0x39) or (ord($c) >= 0x41 and ord($c) <= 0x5a) or (ord($c) >= 0x61 and ord($c) <= 0x7a) or $c === "."){ + $ord = ord($c); + if( + ($ord >= 0x30 and $ord <= 0x39) // 0-9 + or ($ord >= 0x41 and $ord <= 0x5a) // A-Z + or ($ord >= 0x61 and $ord <= 0x7a) or // a-z + $c === "." or $c === "-" + ){ $replaceString .= $c; }else{ if(($t = $this->internalGet(substr($replaceString, 1))) !== null and ($onlyPrefix === null or strpos($replaceString, $onlyPrefix) === 1)){ diff --git a/src/pocketmine/network/protocol/AdventureSettingsPacket.php b/src/pocketmine/network/protocol/AdventureSettingsPacket.php index b07d03ee3..410966a26 100644 --- a/src/pocketmine/network/protocol/AdventureSettingsPacket.php +++ b/src/pocketmine/network/protocol/AdventureSettingsPacket.php @@ -28,6 +28,8 @@ class AdventureSettingsPacket extends DataPacket{ const NETWORK_ID = Info::ADVENTURE_SETTINGS_PACKET; public $flags; + public $userPermission; + public $globalPermission; public function decode(){ @@ -36,6 +38,8 @@ class AdventureSettingsPacket extends DataPacket{ public function encode(){ $this->reset(); $this->putInt($this->flags); + $this->putInt($this->userPermission); + $this->putInt($this->globalPermission); } } \ No newline at end of file diff --git a/src/pocketmine/network/protocol/Info.php b/src/pocketmine/network/protocol/Info.php index 3dc2d68ce..7e7579848 100644 --- a/src/pocketmine/network/protocol/Info.php +++ b/src/pocketmine/network/protocol/Info.php @@ -30,7 +30,7 @@ interface Info{ /** * Actual Minecraft: PE protocol version */ - const CURRENT_PROTOCOL = 45; + const CURRENT_PROTOCOL = 60; const LOGIN_PACKET = 0x8f; const PLAY_STATUS_PACKET = 0x90; diff --git a/src/pocketmine/network/protocol/StartGamePacket.php b/src/pocketmine/network/protocol/StartGamePacket.php index 28df2ec1c..e38e4c3b2 100644 --- a/src/pocketmine/network/protocol/StartGamePacket.php +++ b/src/pocketmine/network/protocol/StartGamePacket.php @@ -38,6 +38,7 @@ class StartGamePacket extends DataPacket{ public $x; public $y; public $z; + public $unknown; public function decode(){ @@ -56,7 +57,10 @@ class StartGamePacket extends DataPacket{ $this->putFloat($this->x); $this->putFloat($this->y); $this->putFloat($this->z); + $this->putByte(1); + $this->putByte(1); $this->putByte(0); + $this->putString($this->unknown); } } diff --git a/src/pocketmine/plugin/PluginManager.php b/src/pocketmine/plugin/PluginManager.php index eb15baf54..340279bd5 100644 --- a/src/pocketmine/plugin/PluginManager.php +++ b/src/pocketmine/plugin/PluginManager.php @@ -68,7 +68,7 @@ class PluginManager{ protected $defaultPermsOp = []; /** - * @var Permissible[] + * @var Permissible[][] */ protected $permSubs = []; diff --git a/src/pocketmine/plugin/ScriptPluginLoader.php b/src/pocketmine/plugin/ScriptPluginLoader.php index 95a2e2f97..196b6c987 100644 --- a/src/pocketmine/plugin/ScriptPluginLoader.php +++ b/src/pocketmine/plugin/ScriptPluginLoader.php @@ -94,9 +94,13 @@ class ScriptPluginLoader implements PluginLoader{ $insideHeader = true; } - if(preg_match("/^[ \t]+\\*[ \t]+@([a-zA-Z]+)[ \t]+(.*)$/", $line, $matches) > 0){ + if(preg_match("/^[ \t]+\\*[ \t]+@([a-zA-Z]+)([ \t]+(.*))?$/", $line, $matches) > 0){ $key = $matches[1]; - $content = trim($matches[2]); + $content = trim($matches[3] ?? ""); + + if($key === "notscript"){ + return null; + } $data[$key] = $content; } @@ -157,4 +161,4 @@ class ScriptPluginLoader implements PluginLoader{ $plugin->setEnabled(false); } } -} \ No newline at end of file +}