mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-04-22 16:51:42 +00:00
Implemented chorus fruit
This commit is contained in:
parent
082e3404c3
commit
3bbdc5ab5b
84
src/pocketmine/item/ChorusFruit.php
Normal file
84
src/pocketmine/item/ChorusFruit.php
Normal 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;
|
||||
}
|
||||
}
|
||||
}
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user