public function onHurt(EntityDamageEvent $event) { if ($event instanceof EntityDamageByEntityEvent) { $damager = $event->getDamager(); $player = $event->getEntity(); if ($damager instanceof Player) { if ($damager->getInventory()->getItemInHand()->getId() === 280) { $event->setKnockBack($this->getConfig()->get("KnockBack-Power")); $player->addEffect(Effect::getEffect(20)->setAmplifier(1)->setDuration(50)->setVisible(true)); $level = $damager->getLevel(); $level->addSound(new AnvilFallSound($damager->getLocation())); } } } }
public function onHurt(EntityDamageEvent $ev) { $p = $ev->getEntity(); if ($ev instanceof EntityDamageByEntityEvent) { $damager = $ev->getDamager(); if ($damager instanceof Player) { if ($damager->getInventory()->getItemInHand()->getId() === 369) { $ev->setKnockBack(0.5); $ev->setDamage($ev->getDamage() + 3); $x = $p->getX(); $y = $p->getY(); $z = $p->getZ(); $r = mt_rand(0, 255); $g = mt_rand(0, 255); $b = mt_rand(0, 255); $p->getLevel()->addParticle(new DustParticle(new Vector3($x, $y, $z), $r, $g, $b)); $p->addEffect(Effect::getEffect(9)->setAmplifier(1)->setDuration(20)->setVisible(true)); $level = $damager->getLevel(); $damager->getLevel()->addSound(new AnvilFallSound($damager->getLocation())); } } } }
public function AllDamage(EntityDamageEvent $event) { //僵尸击退修复 if ($event instanceof EntityDamageByEntityEvent) { $p = $event->getDamager(); $zo = $event->getEntity(); if (isset($this->animals[$zo->getId()]) and $zo instanceof Zombie or $zo instanceof Villager) { if ($p instanceof Player) { $weapon = $p->getInventory()->getItemInHand()->getID(); //得到玩家手中的武器 $high = 0; if ($weapon == 258 or $weapon == 271 or $weapon == 275) { //击退x5 $back = 0.7; } elseif ($weapon == 267 or $weapon == 272 or $weapon == 279 or $weapon == 283 or $weapon == 286) { //击退x1 $back = 1; } elseif ($weapon == 276) { //击退x2 $back = 2; } elseif ($weapon == 292) { //击退x10 $back = 10; $high = 5; } else { $back = 0.5; } $zom =& $this->animals[$zo->getId()]; if (isset($this->dogs[$zo->getId()])) { if ($weapon = 352) { $dog =& $this->dogs[$zo->getId()]; if ($dog['love'] != 9999) { if ($p->getinventory()->getItemInHand()->getID() == 352) { //var_dump("玩家".$p->getName()."喂养了ID为".$zo->getId()."的wolf"); $p->getinventory()->removeItem(new Item(352, $p->getInventory()->getItemInHand()->getDamage(), 1)); $pos3 = new Vector3($zom['x'], $zom['y'] + 1, $zom['z'], $zo->getLevel()); $pos4 = new Vector3($zom['x'], $zom['y'], $zom['z'], $zo->getLevel()); $w1 = new HeartParticle($pos3); $w2 = new HeartParticle($pos4); $zo->getLevel()->addParticle($w1); $zo->getLevel()->addParticle($w2); if ($dog['love'] == 10 or $dog['love'] == 9999) { $dog['love'] = 9999; $dog['owner'] = $p->getName(); $p->sendTip(TextFormat::GREEN . "驯养成功!"); } else { $dog['love'] = $dog['love'] + 1; $dog['owner'] = $p->getName(); } $event->setDamage(0); $event->setKnockBack(0); } } else { $zom['IsChasing'] = $p->getName(); } } } @$zo->knockBack($p, 0, -$zom['xxx'] * $back, -$zom['zzz'] * $back, 0.4); //var_dump("玩家".$p->getName()."攻击了ID为".$zo->getId()."的僵尸"); $zom['x'] = $zom['x'] - $zom['xxx'] * $back; $zom['y'] = $zo->getY() + $high; $zom['z'] = $zom['z'] - $zom['zzz'] * $back; $pos2 = new Vector3($zom['x'], $zom['y'], $zom['z']); //目标坐标 $zo->setPosition($pos2); if ($zo->getHealth() - $event->getDamage() <= 0) { //var_dump("玩家".$p->getName()."杀死了ID为".$zo->getId()."的僵尸"); unset($this->animals[$zo->getId()]); } } } } }
public function onDamage(EntityDamageEvent $event) { $player = $event->getEntity(); if ($player instanceof Player) { if ($this->status !== self::STAT_GAME_IN_PROGRESS) { $event->setCancelled(); return; } if (time() - $this->players[$player->getName()][3] < 3) { $event->setCancelled(); return; } if ($event instanceof EntityDamageByEntityEvent) { $damager = $event->getDamager(); $event->setKnockBack(0.2); if ($damager instanceof Player) { if (!$this->isEnemy($player->getName(), $damager->getName())) { $event->setCancelled(); } } } } }
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 onDamage(EntityDamageEvent $event) { $damaged = $event->getEntity(); if (!$damaged instanceof Player or !($session = $this->getMain()->getSessions()->getSession($damaged)) instanceof Session or !$session->inSession($this)) { return; } if ($event instanceof EntityDamageByChildEntityEvent) { $entity = $event->getDamager(); if ($entity instanceof Player) { $ses = $this->main->getSessions()->getSession($entity); if ($ses instanceof Session and $ses->inSession($this)) { $data = $this->getPlayerData($ses); if ($data->isPlaying() and $data->getArena()->isPlaying()) { $projectile = $event->getChild(); if ($projectile instanceof Snowball) { $event->setCancelled(false); $event->setKnockBack($event->getKnockBack() * 2); } } } } } }
public function i_onDamage(EntityDamageEvent $event, &$victimSession) { $victim = $event->getEntity(); if (!$victim instanceof Player) { return; } $victimSession = $this->getMain()->getSessions()->getSession($victim); if (!$victimSession->inSession($this)) { return; } $origCancelled = $event->isCancelled(); $event->setCancelled(false); if (!$event instanceof EntityDamageByEntityEvent) { if ($event->getCause() === EntityDamageEvent::CAUSE_SUFFOCATION) { $event->setCancelled(); $victimSession->teleport(Settings::kitpvp_spawn($this->getMain()->getServer())); return; } if ($event->getCause() === EntityDamageEvent::CAUSE_FALL) { $fallCause = $victim->getLastDamageCause(); if ($fallCause instanceof EntityDamageByEntityEvent) { if (isset($fallCause->_legionpeEta_timestamp) and microtime(true) - $fallCause->_legionpeEta_timestamp < 2) { /** @noinspection PhpUndefinedFieldInspection */ $event->_legionpeEta_fallCause = $fallCause; } } } return; } $victim = $event->getEntity(); $damager = $event->getDamager(); if (!$victim instanceof Player or !$damager instanceof Player) { return; } $attackerSession = $this->main->getSessions()->getSession($damager); if (!$attackerSession->inSession($this)) { $event->setCancelled($origCancelled); return; } $hitterData = $this->playerData[$attackerSession->getUID()]; $victimData = $this->playerData[$victimSession->getUID()]; if ($hitterData->invulnerable) { $attackerSession->tell("You are in invulnerability mode!"); $event->setCancelled(); return; } if ($victimData->invulnerable) { $attackerSession->tell("The vicitm is in invulnerability mode!"); $event->setCancelled(); return; } if (Settings::kitpvp_isSafeArea($victim) or Settings::kitpvp_isSafeArea($damager)) { $event->setCancelled(); $attackerSession->tell("You may not attack players at/from spawn!"); } elseif ($hitterData->areFriends($victimSession->getUID())) { $event->setCancelled(); } else { /** @noinspection PhpUndefinedFieldInspection */ $event->_legionpeEta_timestamp = microtime(true); /** @noinspection PhpUndefinedFieldInspection */ $event->_legionpeEta_isLadder = $victim->getLevel()->getBlockIdAt($victim->getFloorX(), $victim->getFloorY(), $victim->getFloorZ()) === Block::LADDER; if ($event instanceof EntityDamageByChildEntityEvent) { $child = $event->getChild(); if ($child instanceof Snowball) { $event->setKnockBack($event->getKnockBack() * 2.5); } elseif ($child instanceof Arrow) { $points = 0; if (!$event->isApplicable(EntityDamageEvent::MODIFIER_ARMOR)) { $armorValues = [Item::LEATHER_CAP => 1, Item::LEATHER_TUNIC => 3, Item::LEATHER_PANTS => 2, Item::LEATHER_BOOTS => 1, Item::CHAIN_HELMET => 1, Item::CHAIN_CHESTPLATE => 5, Item::CHAIN_LEGGINGS => 4, Item::CHAIN_BOOTS => 1, Item::GOLD_HELMET => 1, Item::GOLD_CHESTPLATE => 5, Item::GOLD_LEGGINGS => 3, Item::GOLD_BOOTS => 1, Item::IRON_HELMET => 2, Item::IRON_CHESTPLATE => 6, Item::IRON_LEGGINGS => 5, Item::IRON_BOOTS => 2, Item::DIAMOND_HELMET => 3, Item::DIAMOND_CHESTPLATE => 8, Item::DIAMOND_LEGGINGS => 6, Item::DIAMOND_BOOTS => 3]; foreach ($attackerSession->getPlayer()->getInventory()->getArmorContents() as $armor) { if (isset($armorValues[$armor->getId()])) { $points += $armorValues[$armor->getId()]; } } } list(, , , $damage, $fire, $knockPct) = Settings::kitpvp_getBowInfo($hitterData->getBowLevel()); $event->setDamage(max($damage - $points, 0)); if ($fire > 0) { $victim->setOnFire($fire / 20); $this->getMain()->getServer()->getScheduler()->scheduleDelayedTask(new CallbackPluginTask($this->getMain(), function () use($victim) { $victim->setOnFire(0); }), $fire); } if ($knockPct > 0) { $event->setKnockBack($event->getKnockBack() * (1 + $knockPct / 100)); // what the, I put / as *? } } } } }