Example #1
0
 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()));
             }
         }
     }
 }
Example #2
0
 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()));
             }
         }
     }
 }
Example #3
0
 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()]);
                 }
             }
         }
     }
 }
Example #4
0
 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);
             }
         }
     }
 }
Example #6
0
 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);
                     }
                 }
             }
         }
     }
 }
Example #7
0
 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 *?
                 }
             }
         }
     }
 }