Player: add hasFiniteResources()

This commit is contained in:
Dylan K. Taylor 2019-03-31 16:40:54 +01:00
parent 42a263a9df
commit f8ce7797db
6 changed files with 23 additions and 16 deletions

View File

@ -1513,6 +1513,15 @@ class Player extends Human implements CommandSender, ChunkLoader, ChunkListener,
return $this->gamemode === GameMode::SPECTATOR();
}
/**
* TODO: make this a dynamic ability instead of being hardcoded
*
* @return bool
*/
public function hasFiniteResources() : bool{
return $this->gamemode === GameMode::SURVIVAL() or $this->gamemode === GameMode::ADVENTURE();
}
public function isFireProof() : bool{
return $this->isCreative();
}
@ -1937,7 +1946,7 @@ class Player extends Human implements CommandSender, ChunkLoader, ChunkListener,
$result = $item->onClickAir($this, $directionVector);
if($result === ItemUseResult::SUCCESS()){
$this->resetItemCooldown($item);
if($this->isSurvival()){
if($this->hasFiniteResources()){
$this->inventory->setItemInHand($item);
}
}elseif($result === ItemUseResult::FAIL()){
@ -1971,7 +1980,7 @@ class Player extends Human implements CommandSender, ChunkLoader, ChunkListener,
$this->resetItemCooldown($slot);
if($this->isSurvival()){
if($this->hasFiniteResources()){
$slot->pop();
$this->inventory->setItemInHand($slot);
$this->inventory->addItem($slot->getResidue());
@ -2132,12 +2141,10 @@ class Player extends Human implements CommandSender, ChunkLoader, ChunkListener,
$item = $this->inventory->getItemInHand();
$oldItem = clone $item;
if($this->level->useBreakOn($pos, $item, $this, true)){
if($this->isSurvival()){
if(!$item->equalsExact($oldItem)){
$this->inventory->setItemInHand($item);
}
$this->exhaust(0.025, PlayerExhaustEvent::CAUSE_MINING);
if($this->hasFiniteResources() and !$item->equalsExact($oldItem)){
$this->inventory->setItemInHand($item);
}
$this->exhaust(0.025, PlayerExhaustEvent::CAUSE_MINING);
return true;
}
}
@ -2171,7 +2178,7 @@ class Player extends Human implements CommandSender, ChunkLoader, ChunkListener,
$item = $this->inventory->getItemInHand(); //this is a copy of the real item
$oldItem = clone $item;
if($this->level->useItemOn($pos, $item, $face, $clickOffset, $this, true)){
if($this->isSurvival() and !$item->equalsExact($oldItem)){
if($this->hasFiniteResources() and !$item->equalsExact($oldItem)){
$this->inventory->setItemInHand($item);
}
return true;
@ -2239,7 +2246,7 @@ class Player extends Human implements CommandSender, ChunkLoader, ChunkListener,
$entity->attack($ev);
if($ev->isCancelled()){
if($heldItem instanceof Durable and $this->isSurvival()){
if($heldItem instanceof Durable and $this->hasFiniteResources()){
$this->inventory->sendContents($this);
}
return false;
@ -2258,7 +2265,7 @@ class Player extends Human implements CommandSender, ChunkLoader, ChunkListener,
if($this->isAlive()){
//reactive damage like thorns might cause us to be killed by attacking another mob, which
//would mean we'd already have dropped the inventory by the time we reached here
if($heldItem->onAttackEntity($entity) and $this->isSurvival()){ //always fire the hook, even if we are survival
if($heldItem->onAttackEntity($entity) and $this->hasFiniteResources()){ //always fire the hook, even if we are survival
$this->inventory->setItemInHand($heldItem);
}

View File

@ -252,7 +252,7 @@ class ItemEntity extends Entity{
$item = $this->getItem();
$playerInventory = $player->getInventory();
if($player->isSurvival() and !$playerInventory->canAddItem($item)){
if($player->hasFiniteResources() and !$playerInventory->canAddItem($item)){
return;
}

View File

@ -179,7 +179,7 @@ class Arrow extends Projectile{
$item = ItemFactory::get(Item::ARROW, 0, 1);
$playerInventory = $player->getInventory();
if($player->isSurvival() and !$playerInventory->canAddItem($item)){
if($player->hasFiniteResources() and !$playerInventory->canAddItem($item)){
return;
}

View File

@ -48,7 +48,7 @@ class Bow extends Tool{
}
public function onReleaseUsing(Player $player) : ItemUseResult{
if($player->isSurvival() and !$player->getInventory()->contains(ItemFactory::get(Item::ARROW, 0, 1))){
if($player->hasFiniteResources() and !$player->getInventory()->contains(ItemFactory::get(Item::ARROW, 0, 1))){
return ItemUseResult::FAIL();
}
@ -111,7 +111,7 @@ class Bow extends Tool{
$entity->spawnToAll();
}
if($player->isSurvival()){
if($player->hasFiniteResources()){
if(!$infinity){ //TODO: tipped arrows are still consumed when Infinity is applied
$player->getInventory()->removeItem(ItemFactory::get(Item::ARROW, 0, 1));
}

View File

@ -49,7 +49,7 @@ class Bucket extends Item{
if(!$ev->isCancelled()){
$player->getLevel()->setBlock($blockClicked, BlockFactory::get(BlockLegacyIds::AIR));
$player->getLevel()->addSound($blockClicked->add(0.5, 0.5, 0.5), $blockClicked->getBucketFillSound());
if($player->isSurvival()){
if($player->hasFiniteResources()){
if($stack->getCount() === 0){
$player->getInventory()->setItemInHand($ev->getItem());
}else{

View File

@ -66,7 +66,7 @@ class LiquidBucket extends Item{
$player->getLevel()->setBlock($blockReplace, $resultBlock->getFlowingForm());
$player->getLevel()->addSound($blockClicked->add(0.5, 0.5, 0.5), $resultBlock->getBucketEmptySound());
if($player->isSurvival()){
if($player->hasFiniteResources()){
$player->getInventory()->setItemInHand($ev->getItem());
}
return ItemUseResult::SUCCESS();