i have array blueTeamPlayers [player->getName()] i try turn off PVP for this array but doesn´t work. PHP: //commentpublic function onHurt(EntityDamageEvent $event){ if($event instanceof EntityDamageByEntityEvent) { $attacker = $event->getDamager()->getPlayer(); $victim = $event->getEntity()->getPlayer(); if (isset ( $this->getPlugin()->blueTeamPlayers [$attacker->getName ()] ) && isset( $this->getPlugIn()->blueTeamPlayers [$victim->getName()])) { $event->setCancelled(true); } } }
Who told you to use getDamager()->getPlayer() ? That's wrong, and that doesn't check whether the damager is a player.
PHP: public function onHurt(EntityDamageEvent $e){ if($e instanceof EntityDamageByEntityEvent){ $damager = $e->getDamager(); $victim = $e->getEntity(); if($damager instanceof Player and $victim instanceof Player){ // execute logic here. NO NEED TO getPlayer()!!! YOU ALREADY GOT A PLAYER OBJECT! } }}
this is my code but doesn´t work :/ PHP: public function onHurt(EntityDamageEvent $event){ $blueTeamSpawnPos = $this->getSetup ()->getGamePos ( CTFSetup::CTF_GAME_ARENA_POSITION_ENTRY_BLUE_TEAM ); $redTeamSpawnPos = $this->getSetup ()->getGamePos ( CTFSetup::CTF_GAME_ARENA_POSITION_ENTRY_RED_TEAM ); $yellowTeamSpawnPos = $this->getSetup ()->getGamePos ( CTFSetup::CTF_GAME_ARENA_POSITION_ENTRY_YELLOW_TEAM ); $greenTeamSpawnPos = $this->getSetup ()->getGamePos ( CTFSetup::CTF_GAME_ARENA_POSITION_ENTRY_GREEN_TEAM ); if($event instanceof EntityDamageByEntityEvent) { $attacker = $event->getDamager(); $victim = $event->getEntity(); if ($event->getEntity() instanceof Player && $event->getDamager() instanceof Player) { if($this->getPlugIn()->ingame == false){ $event->setCancelled(true); } if ( isset($this->getPlugin()->redTeamPlayers[$event->getEntity()->getName()]) && isset($this->getPlugin()->redTeamPlayers[$event->getDamager()->getName()])) { $event->setCancelled(true); } elseif( isset($this->getPlugin()->blueTeamPlayers[$event->getEntity()->getName()]) && isset($this->getPlugin()->blueTeamPlayers[$event->getDamager()->getName()])) { $event->setCancelled(true); } elseif( isset($this->getPlugin()->yellowTeamPlayers[$event->getEntity()->getName()]) && isset($this->getPlugin()->yellowTeamPlayers[$event->getDamager()->getName()])) { $event->setCancelled(true); } elseif( isset($this->getPlugin()->greenTeamPlayers[$event->getEntity()->getName()]) && isset($this->getPlugin()->greenTeamPlayers[$event->getDamager()->getName()])) { $event->setCancelled(true); } elseif(isset($this->getPlugin()->lobbyPlayers[$event->getDamager()->getName()])) { $event->setCancelled(true); }}
Avoid hardcoding the 4 teams as fields. Put four arrays/objects representing teams inside one array field instead.
Have a look at LegionPE plugin source code (spleef part): Spoiler: code This is not about teams, but it explains how you handle multiple groups of players.