diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index 2b3195003..ae20ed50f 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -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); } diff --git a/src/pocketmine/entity/object/ItemEntity.php b/src/pocketmine/entity/object/ItemEntity.php index c01a49618..0dadfdd23 100644 --- a/src/pocketmine/entity/object/ItemEntity.php +++ b/src/pocketmine/entity/object/ItemEntity.php @@ -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; } diff --git a/src/pocketmine/entity/projectile/Arrow.php b/src/pocketmine/entity/projectile/Arrow.php index 6f79c3ed8..dda7b9217 100644 --- a/src/pocketmine/entity/projectile/Arrow.php +++ b/src/pocketmine/entity/projectile/Arrow.php @@ -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; } diff --git a/src/pocketmine/item/Bow.php b/src/pocketmine/item/Bow.php index d3e9a9ba5..74d3f41bd 100644 --- a/src/pocketmine/item/Bow.php +++ b/src/pocketmine/item/Bow.php @@ -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)); } diff --git a/src/pocketmine/item/Bucket.php b/src/pocketmine/item/Bucket.php index b1f0ff6cd..4af42b9ac 100644 --- a/src/pocketmine/item/Bucket.php +++ b/src/pocketmine/item/Bucket.php @@ -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{ diff --git a/src/pocketmine/item/LiquidBucket.php b/src/pocketmine/item/LiquidBucket.php index 3c4c8e4e7..4ef4cdcd1 100644 --- a/src/pocketmine/item/LiquidBucket.php +++ b/src/pocketmine/item/LiquidBucket.php @@ -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();