cleanup eating clusterfuck

This commit is contained in:
Dylan K. Taylor 2019-11-08 11:08:22 +00:00
parent d2e4eb40b3
commit 73b923e3a1
5 changed files with 22 additions and 88 deletions

View File

@ -2504,6 +2504,27 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{
return true;
case InventoryTransactionPacket::USE_ITEM_ACTION_CLICK_AIR:
if($this->isUsingItem()){
$slot = $this->inventory->getItemInHand();
if($slot instanceof Consumable){
$ev = new PlayerItemConsumeEvent($this, $slot);
if($this->hasItemCooldown($slot)){
$ev->setCancelled();
}
$ev->call();
if($ev->isCancelled() or !$this->consumeObject($slot)){
$this->inventory->sendContents($this);
return true;
}
$this->resetItemCooldown($slot);
if($this->isSurvival()){
$slot->pop();
$this->inventory->setItemInHand($slot);
$this->inventory->addItem($slot->getResidue());
}
$this->setUsingItem(false);
}
}
$directionVector = $this->getDirectionVector();
if($this->isCreative()){
@ -2533,13 +2554,7 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{
}
}
if(!$this->isUsingItem()){
$this->setUsingItem(true);
return true;
}
$this->setUsingItem(false);
$item->onUse($this);
$this->setUsingItem(true);
return true;
default:
@ -2663,8 +2678,6 @@ class Player extends Human implements CommandSender, ChunkLoader, IPlayer{
}
return true;
case InventoryTransactionPacket::RELEASE_ITEM_ACTION_CONSUME:
break;
default:
break;
}

View File

@ -115,28 +115,4 @@ class Bucket extends Item implements Consumable{
public function onConsume(Living $consumer){
$consumer->removeAllEffects();
}
public function onUse(Player $player) : bool{
if($this->canBeConsumed()){
$slot = $player->getInventory()->getItemInHand();
$ev = new PlayerItemConsumeEvent($player, $slot);
$ev->call();
/** @var $slot Consumable */
if($ev->isCancelled() or !$player->consumeObject($slot)){
$player->getInventory()->sendContents($player);
return true;
}
if($player->isSurvival()){
$slot->pop();
$player->getInventory()->setItemInHand($slot);
$player->getInventory()->addItem($slot->getResidue());
}
return true;
}
return false;
}
}

View File

@ -24,9 +24,6 @@ declare(strict_types=1);
namespace pocketmine\item;
use pocketmine\entity\Living;
use pocketmine\event\player\PlayerItemConsumeEvent;
use pocketmine\math\Vector3;
use pocketmine\Player;
abstract class Food extends Item implements FoodSource{
public function requiresHunger() : bool{
@ -44,32 +41,7 @@ abstract class Food extends Item implements FoodSource{
return [];
}
public function onUse(Player $player) : bool{
$slot = $player->getInventory()->getItemInHand();
$ev = new PlayerItemConsumeEvent($player, $slot);
$ev->call();
/** @var $slot Consumable */
if($ev->isCancelled() or !$player->consumeObject($slot)){
$player->getInventory()->sendContents($player);
return true;
}
if($player->isSurvival()){
$slot->pop();
$player->getInventory()->setItemInHand($slot);
$player->getInventory()->addItem($slot->getResidue());
}
return true;
}
public function onConsume(Living $consumer){
}
public function onClickAir(Player $player, Vector3 $directionVector) : bool{
return true;
}
}

View File

@ -848,10 +848,6 @@ class Item implements ItemIds, \JsonSerializable{
return 0;
}
public function onUse(Player $player) : bool{
return false;
}
/**
* Compares an Item to this Item and check if they match.
*

View File

@ -26,8 +26,6 @@ namespace pocketmine\item;
use pocketmine\entity\Effect;
use pocketmine\entity\EffectInstance;
use pocketmine\entity\Living;
use pocketmine\event\player\PlayerItemConsumeEvent;
use pocketmine\Player;
class Potion extends Item implements Consumable{
@ -237,25 +235,4 @@ class Potion extends Item implements Consumable{
public function getResidue(){
return ItemFactory::get(Item::GLASS_BOTTLE);
}
public function onUse(Player $player) : bool{
$slot = $player->getInventory()->getItemInHand();
$ev = new PlayerItemConsumeEvent($player, $slot);
$ev->call();
/** @var $slot Consumable */
if($ev->isCancelled() or !$player->consumeObject($slot)){
$player->getInventory()->sendContents($player);
return true;
}
if($player->isSurvival()){
$slot->pop();
$player->getInventory()->setItemInHand($slot);
$player->getInventory()->addItem($slot->getResidue());
}
return true;
}
}