mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-04-20 16:00:20 +00:00
Introduce invulnerable permission
this eliminates all remaining usages of isCreative(), except for reach distance checks. Reach distance can't be migrated to a permission in an obvious way.
This commit is contained in:
parent
2c299e2b49
commit
e494460cfd
@ -1039,7 +1039,7 @@ class NetworkSession{
|
||||
AbilitiesLayer::ABILITY_NO_CLIP => !$for->hasBlockCollision(),
|
||||
AbilitiesLayer::ABILITY_OPERATOR => $isOp,
|
||||
AbilitiesLayer::ABILITY_TELEPORT => $for->hasPermission(DefaultPermissionNames::COMMAND_TELEPORT_SELF),
|
||||
AbilitiesLayer::ABILITY_INVULNERABLE => $for->isCreative(),
|
||||
AbilitiesLayer::ABILITY_INVULNERABLE => $for->hasPermission(DefaultPermissionNames::GAME_INVULNERABLE),
|
||||
AbilitiesLayer::ABILITY_MUTED => !$for->hasPermission(DefaultPermissionNames::GAME_CHAT),
|
||||
AbilitiesLayer::ABILITY_WORLD_BUILDER => false,
|
||||
AbilitiesLayer::ABILITY_INFINITE_RESOURCES => !$for->hasFiniteResources(),
|
||||
|
@ -97,6 +97,7 @@ final class DefaultPermissionNames{
|
||||
public const GAME_FLIGHT = "pocketmine.game.flight";
|
||||
public const GAME_ITEM_BYPASS_CANDESTROY = "pocketmine.game.item.bypass.candestroy";
|
||||
public const GAME_ITEM_BYPASS_CANPLACEON = "pocketmine.game.item.bypass.canplaceon";
|
||||
public const GAME_INVULNERABLE = "pocketmine.game.invulnerable";
|
||||
public const GAME_ITEM_CREATE = "pocketmine.game.item.create";
|
||||
public const GAME_ITEM_DROP = "pocketmine.game.item.drop";
|
||||
public const GAME_ITEM_PICKUP = "pocketmine.game.item.pickup";
|
||||
|
@ -144,5 +144,6 @@ abstract class DefaultPermissions{
|
||||
self::registerPermission(new Permission(Names::GAME_FLIGHT, "Allows the user to toggle flight mode"), [$creativeRoot]);
|
||||
|
||||
self::registerPermission(new Permission(Names::GAME_NOCOLLISION, "Allows the user to pass through blocks"), [$spectatorRoot]);
|
||||
self::registerPermission(new Permission(Names::GAME_INVULNERABLE, "Allows the user to ignore all incoming damage (except suicide)"), [$creativeRoot, $spectatorRoot]);
|
||||
}
|
||||
}
|
||||
|
@ -1454,7 +1454,7 @@ class Player extends Human implements CommandSender, ChunkListener, IPlayer{
|
||||
$this->entityBaseTick($tickDiff);
|
||||
Timings::$entityBaseTick->stopTiming();
|
||||
|
||||
if($this->isCreative() && $this->fireTicks > 1){
|
||||
if($this->hasPermission(DefaultPermissionNames::GAME_INVULNERABLE) && $this->fireTicks > 1){
|
||||
$this->fireTicks = 1;
|
||||
}
|
||||
|
||||
@ -1475,7 +1475,7 @@ class Player extends Human implements CommandSender, ChunkListener, IPlayer{
|
||||
}
|
||||
|
||||
public function canBreathe() : bool{
|
||||
return $this->isCreative() || parent::canBreathe();
|
||||
return $this->hasPermission(DefaultPermissionNames::GAME_INVULNERABLE) || parent::canBreathe();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -2518,7 +2518,7 @@ class Player extends Human implements CommandSender, ChunkListener, IPlayer{
|
||||
return;
|
||||
}
|
||||
|
||||
if($this->isCreative()
|
||||
if($this->hasPermission(DefaultPermissionNames::GAME_INVULNERABLE)
|
||||
&& $source->getCause() !== EntityDamageEvent::CAUSE_SUICIDE
|
||||
){
|
||||
$source->cancel();
|
||||
|
Loading…
x
Reference in New Issue
Block a user