public function onDamage(EntityDamageEvent $ev) { /*** * http://docs.pocketmine.net/d6/d5c/_entity_damage_by_entity_event_8php_source.html * public function getDamager(){ * return $this->damager; */ $e = $ev->getEntity(); if ($e instanceof Player && $ev->getFinalDamage() - $e->getHealth() <= 0) { $e->getPlayer()->getInventory()->addItem(Item::get(262, 0, 1)); } }
public function attack($damage, EntityDamageEvent $source) { $pk = new EntityEventPacket(); $pk->eid = $this->getId(); $pk->event = $this->getHealth() <= 0 ? EntityEventPacket::DEATH_ANIMATION : EntityEventPacket::HURT_ANIMATION; //Ouch! Server::broadcastPacket($this->hasSpawned, $pk); // $this->setLastDamageCause($source); $this->setHealth($this->getHealth() - $source->getFinalDamage()); parent::attack($damage, $source); if ($source instanceof EntityDamageByEntityEvent) { $attacker = $source->getDamager(); if ($source instanceof EntityDamageByChildEntityEvent) { $attacker = $source->getDamager(); } } if ($attacker instanceof Projectile) { Server::getInstance()->getLogger()->info(Main::PREFIX . $this->thisname . " attacked by Projectile"); $attacker = $attacker->shootingEntity; } if ($attacker instanceof Arrow) { Server::getInstance()->getLogger()->info(Main::PREFIX . $this->thisname . " attacked by Arrow"); $attacker = $attacker->shootingEntity; } if ($attacker instanceof Snowball) { Server::getInstance()->getLogger()->info(Main::PREFIX . $this->thisname . " attacked by Snowball"); $attacker = $attacker->shootingEntity; } if ($attacker instanceof Player || get_class($attacker) == "pocketmine\\Player") { Server::getInstance()->getLogger()->info(Main::PREFIX . $this->thisname . " attacked by " . $attacker->getName()); } }
public function onEntityDamage(EntityDamageEvent $event) { if ($event instanceof EntityDamageByEntityEvent) { if (($Victim = $event->getEntity()) && ($Player = $event->getDamager())) { if ($Player instanceof Human) { $Level = $Player->getLevel(); if ($Victim instanceof Villager) { $Type = $Level->getFolderName() == $this->plugin->lobby_name ? 1 : 0; $X = round($Victim->getX() - 0.5); $Z = round($Victim->getZ() - 0.5); if ($Level->getBlockIdAt($X, 0, $Z) != 54) { $Level->setBlock(new Vector3($X, 0, $Z), Block::get(54), true, true); $chest = new Chest($Level->getChunk($X >> 4, $Z >> 4, true), new Compound(false, array(new Int("x", $X), new Int("y", 0), new Int("z", $Z), new String("id", Tile::CHEST))), $this->plugin); $Level->addTile($chest); } else { $chest = $Level->getTile(new Vector3($X, 0, $Z)); } if ($Level->getBlockIdAt($X, 1, $Z) != 54) { $Level->setBlock(new Vector3($X, 1, $Z), Block::get(0), true, true); } $chest = new BuyingInventory($Level->getTile(new Vector3($X, 0, $Z)), $Player); $contents = []; switch ($Type) { case 0: foreach ($this->plugin->buys_Values as $Buy_Value) { $contents[] = Item::get($Buy_Value[0], 0, 1); } break; case 1: if ($this->plugin->status == 0) { foreach ($this->plugin->mapList as $Map) { $contents[] = Item::get(35, $Map[0], $Map[4] == 0 ? 99 : $Map[4]); } } else { $contents[] = Item::get(345, 0, 1); foreach ($this->plugin->game->Teams as $Name => $Team) { $contents[] = Item::get(35, $this->plugin->getTeamDataByName($Name), count($Team->Players) == 0 ? 99 : count($Team->Players)); } } break; } $chest->setContents($contents); $this->plugin->setState("buying_chest", $Player, $chest); $this->plugin->setState("buying_type", $Player, $Type); $this->plugin->setState("buying_menu", $Player, -1); $Player->addWindow($chest); $event->setCancelled(true); } elseif ($Victim instanceof Human) { if ($Level->getFolderName() == $this->plugin->lobby_name) { $event->setCancelled(true); return; } if (!$this->plugin->game || $this->plugin->game->level_name != $Level->getFolderName()) { return; } $event->setCancelled($this->plugin->game->getTeamByPlayer($Player) == $this->plugin->game->getTeamByPlayer($Victim)); $HandItem = $Player->getInventory()->getItemInHand(); switch ($HandItem->getId()) { case 259: $Victim->setOnFire(5); $event->setKnockBack(0); break; case 280: $event->setKnockBack(0.6); break; } if ($Victim->getHealth() - $event->getFinalDamage() <= 0) { $this->plugin->game->PopupInfo2->PlayersData[strtolower($Player->getName())][1] += $this->plugin->game->PopupInfo2->PlayersData[strtolower($Victim->getName())][1]; $this->plugin->game->PopupInfo2->PlayersData[strtolower($Victim->getName())][1] = 0; } } elseif ($Victim instanceof Villager) { $Level = $Victim->getLevel(); if ($Level->getFolderName() == $this->plugin->lobby_name) { $event->setCancelled(true); return; } if (!$this->plugin->game || $this->plugin->game->level_name != $Level->getFolderName()) { return; } $event->setCancelled(true); } } } } else { if (($Player = $event->getEntity()) instanceof Entity) { $Level = $Player->getLevel(); if (!$this->plugin->game || $this->plugin->game->level_name != $Level->getFolderName()) { return; } $X = $Player->getFloorX(); $Y = $Player->getFloorY() - 1; $Z = $Player->getFloorZ(); $Block = $Level->getBlock(new Vector3($X, $Y, $Z)); if ($Block->getId() == 133) { $event->setCancelled(true); } } } }
public function onEntityDamage(EntityDamageEvent $event) { if ($event->isCancelled()) { return; } $damagedEntity = $event->getEntity(); if ($event instanceof EntityDamageByEntityEvent && $event->getFinalDamage() > $damagedEntity->getHealth()) { $attacker = $event->getDamager(); if ($attacker instanceof Player) { if ($damagedEntity instanceof Player && !self::$pvpEnabled) { $event->setCancelled(); return; } $attackerPlayer = $this->getRPGPlayerByName($attacker->getName()); if ($attackerPlayer !== null) { $xp = 0; $xpPercentage = 0; foreach ($this->getConfiguration("kill-exp", ["default" => 10]) as $id => $amount) { if ($id === "default" || $id === $damagedEntity::NETWORK_ID) { $xp = $amount; } } foreach ($this->getConfiguration("kill-exp-percentage", ["default" => 0.01]) as $id => $amount) { if ($id === "default" || $id === $damagedEntity::NETWORK_ID) { $xpPercentage = $amount; } } $attackerPlayer->addXp($xp + $attackerPlayer->getNeededXP() * ($xpPercentage / 100)); } } } if (!$damagedEntity instanceof Player) { return; } if (!$this->isValidPlayer($damagedEntity)) { return; } $formerHealth = $this->players[$damagedEntity->getName()]->getHealth(); $this->getRPGPlayerByName($damagedEntity->getName())->setHealth($formerHealth - $event->getFinalDamage()); $event->setDamage(0); $event->setDamage(0, EntityDamageEvent::MODIFIER_STRENGTH); $event->setDamage(0, EntityDamageEvent::MODIFIER_WEAKNESS); $event->setDamage(0, EntityDamageEvent::MODIFIER_ARMOR); $event->setDamage(0, EntityDamageEvent::MODIFIER_RESISTANCE); }
public function onPlayerDamageByEntity(EntityDamageEvent $event) { if (!$event->getEntity() instanceof Player) { return true; } $entityGameId = $this->players[$event->getEntity()->getName()]; if ($entityGameId !== "NONE" && !$this->config["IS_DAMAGE_ENABLED"]) { $event->setCancelled(true); } elseif ($entityGameId === "NONE") { return true; } if (!$event instanceof EntityDamageByEntityEvent) { return true; } if (!$event->getDamager() instanceof Player) { return true; } $event->setCancelled(true); if (!GameGenius::$IS_KILL_TOUCH) { $this->touch($event->getDamager(), $event->getEntity()); } else { if ($this->players[$event->getDamager()->getName()] === $entityGameId && $entityGameId !== "NONE") { $touchTest = $this->games[$entityGameId]->canTouch($event->getDamager()->getName(), $event->getEntity()->getName()); if ($touchTest === GameManager::RETURNTYPE_TOUCH_SUCCEED) { $event->setCancelled(false); if ($event->getFinalDamage() >= $event->getEntity()->getHealth()) { $returnVal = $this->touch($event->getDamager(), $event->getEntity()); if ($returnVal !== GameManager::RETURNTYPE_TOUCH_SUCCEED || $returnVal === false) { $event->setCancelled(true); } } } else { switch ($touchTest) { case GameManager::RETURNTYPE_TOUCH_ALREADY_TOUCED_FAILED: $event->getDamager()->sendMessage(TextFormat::RED . $this->getTranslation("TOUCH_ALREADY_TOUCHED")); break; case GameManager::RETURNTYPE_TOUCH_IN_PREPARATION_OR_REST_FAILED: $event->getDamager()->sendMessage(TextFormat::RED . $this->getTranslation("PREPARATION_OR_REST")); break; } } } } return false; }