From 74ee38ab998e687ab77b0158b71073f93f9619b1 Mon Sep 17 00:00:00 2001 From: "Dylan K. Taylor" Date: Sun, 1 Dec 2024 15:34:00 +0000 Subject: [PATCH] Use permissions for more stuff --- src/entity/object/ExperienceOrb.php | 3 ++- src/entity/projectile/Arrow.php | 2 +- src/item/Bow.php | 3 ++- src/player/Player.php | 4 ++-- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/entity/object/ExperienceOrb.php b/src/entity/object/ExperienceOrb.php index 5120da3e1..1df2d5fba 100644 --- a/src/entity/object/ExperienceOrb.php +++ b/src/entity/object/ExperienceOrb.php @@ -31,6 +31,7 @@ use pocketmine\nbt\tag\CompoundTag; use pocketmine\network\mcpe\protocol\types\entity\EntityIds; use pocketmine\network\mcpe\protocol\types\entity\EntityMetadataCollection; use pocketmine\network\mcpe\protocol\types\entity\EntityMetadataProperties; +use pocketmine\permission\DefaultPermissionNames; use pocketmine\player\Player; use function max; use function sqrt; @@ -192,7 +193,7 @@ class ExperienceOrb extends Entity{ if($currentTarget === null){ $newTarget = $this->getWorld()->getNearestEntity($this->location, self::MAX_TARGET_DISTANCE, Human::class); - if($newTarget instanceof Human && !($newTarget instanceof Player && $newTarget->isSpectator()) && $newTarget->getXpManager()->canAttractXpOrbs()){ + if($newTarget instanceof Human && !($newTarget instanceof Player && !$newTarget->hasPermission(DefaultPermissionNames::GAME_ITEM_PICKUP)) && $newTarget->getXpManager()->canAttractXpOrbs()){ $currentTarget = $newTarget; } } diff --git a/src/entity/projectile/Arrow.php b/src/entity/projectile/Arrow.php index 1cc2b355b..480bc1769 100644 --- a/src/entity/projectile/Arrow.php +++ b/src/entity/projectile/Arrow.php @@ -182,7 +182,7 @@ class Arrow extends Projectile{ if(($player->hasFiniteResources() && $playerInventory === null) || !$player->hasPermission(DefaultPermissionNames::GAME_ITEM_PICKUP)){ $ev->cancel(); } - if($this->pickupMode === self::PICKUP_NONE || ($this->pickupMode === self::PICKUP_CREATIVE && !$player->isCreative())){ + if($this->pickupMode === self::PICKUP_NONE || ($this->pickupMode === self::PICKUP_CREATIVE && $player->hasFiniteResources())){ $ev->cancel(); } diff --git a/src/item/Bow.php b/src/item/Bow.php index 1b25312a8..9566cd620 100644 --- a/src/item/Bow.php +++ b/src/item/Bow.php @@ -29,6 +29,7 @@ use pocketmine\entity\projectile\Projectile; use pocketmine\event\entity\EntityShootBowEvent; use pocketmine\event\entity\ProjectileLaunchEvent; use pocketmine\item\enchantment\VanillaEnchantments; +use pocketmine\permission\DefaultPermissionNames; use pocketmine\player\Player; use pocketmine\world\sound\BowShootSound; use function intdiv; @@ -85,7 +86,7 @@ class Bow extends Tool implements Releasable{ } $ev = new EntityShootBowEvent($player, $this, $entity, $baseForce * 3); - if($baseForce < 0.1 || $diff < 5 || $player->isSpectator()){ + if($baseForce < 0.1 || $diff < 5 || !$player->hasPermission(DefaultPermissionNames::GAME_ITEM_USE)){ $ev->cancel(); } diff --git a/src/player/Player.php b/src/player/Player.php index fea9107d3..6ef2c4641 100644 --- a/src/player/Player.php +++ b/src/player/Player.php @@ -1458,7 +1458,7 @@ class Player extends Human implements CommandSender, ChunkListener, IPlayer{ $this->fireTicks = 1; } - if(!$this->isSpectator() && $this->isAlive()){ + if($this->isAlive()){ Timings::$playerCheckNearEntities->startTiming(); $this->checkNearEntities(); Timings::$playerCheckNearEntities->stopTiming(); @@ -1595,7 +1595,7 @@ class Player extends Human implements CommandSender, ChunkListener, IPlayer{ foreach($this->inventory->addItem(...$extraReturnedItems) as $drop){ //TODO: we can't generate a transaction for this since the items aren't coming from an inventory :( $ev = new PlayerDropItemEvent($this, $drop); - if($this->isSpectator()){ + if(!$this->hasPermission(DefaultPermissionNames::GAME_ITEM_DROP)){ $ev->cancel(); } $ev->call();