Implemented chorus fruit

This commit is contained in:
Dylan K. Taylor 2017-12-23 15:11:48 +00:00
parent 082e3404c3
commit 3bbdc5ab5b
2 changed files with 85 additions and 1 deletions

View File

@ -0,0 +1,84 @@
<?php
/*
*
* ____ _ _ __ __ _ __ __ ____
* | _ \ ___ ___| | _____| |_| \/ (_)_ __ ___ | \/ | _ \
* | |_) / _ \ / __| |/ / _ \ __| |\/| | | '_ \ / _ \_____| |\/| | |_) |
* | __/ (_) | (__| < __/ |_| | | | | | | | __/_____| | | | __/
* |_| \___/ \___|_|\_\___|\__|_| |_|_|_| |_|\___| |_| |_|_|
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* @author PocketMine Team
* @link http://www.pocketmine.net/
*
*
*/
declare(strict_types=1);
namespace pocketmine\item;
use pocketmine\block\Liquid;
use pocketmine\entity\Living;
use pocketmine\level\sound\EndermanTeleportSound;
use pocketmine\math\Vector3;
class ChorusFruit extends Food{
public function __construct(int $meta = 0){
parent::__construct(self::CHORUS_FRUIT, $meta, "Chorus Fruit");
}
public function getFoodRestore() : int{
return 4;
}
public function getSaturationRestore() : float{
return 2.4;
}
public function requiresHunger() : bool{
return false;
}
public function onConsume(Living $consumer){
$minX = $consumer->getFloorX() - 8;
$minY = $consumer->getFloorY() - 8;
$minZ = $consumer->getFloorZ() - 8;
$maxX = $minX + 16;
$maxY = $minY + 16;
$maxZ = $minZ + 16;
$level = $consumer->getLevel();
assert($level !== null);
for($attempts = 0; $attempts < 16; ++$attempts){
$x = mt_rand($minX, $maxX);
$y = mt_rand($minY, $maxY);
$z = mt_rand($minZ, $maxZ);
while($y > 0 and !$level->getBlockAt($x, $y, $z)->isSolid()){
$y--;
}
$blockUp = $level->getBlockAt($x, $y + 1, $z);
$blockUp2 = $level->getBlockAt($x, $y + 2, $z);
if($blockUp->isSolid() or $blockUp instanceof Liquid or $blockUp2->isSolid() or $blockUp2 instanceof Liquid){
continue;
}
//Sounds are broadcasted at both source and destination
$level->addSound(new EndermanTeleportSound($consumer->asVector3()));
$consumer->teleport(new Vector3($x + 0.5, $y + 1, $z + 0.5));
$level->addSound(new EndermanTeleportSound($consumer->asVector3()));
break;
}
}
}

View File

@ -214,7 +214,7 @@ class ItemFactory{
self::registerItem(new ItemBlock(Block::JUNGLE_DOOR_BLOCK, 0, Item::JUNGLE_DOOR));
self::registerItem(new ItemBlock(Block::ACACIA_DOOR_BLOCK, 0, Item::ACACIA_DOOR));
self::registerItem(new ItemBlock(Block::DARK_OAK_DOOR_BLOCK, 0, Item::DARK_OAK_DOOR));
//TODO: CHORUS_FRUIT
self::registerItem(new ChorusFruit());
self::registerItem(new Item(Item::CHORUS_FRUIT_POPPED, 0, "Popped Chorus Fruit"));
//TODO: DRAGON_BREATH