作者:steveritte
项目:EntityManage
public function attackEntity(Entity $player)
{
if ($this->attackDelay > 30 && mt_rand(1, 32) < 4 && $this->distanceSquared($player) <= 200) {
$this->attackDelay = 0;
$f = 2;
$yaw = $this->yaw + mt_rand(-220, 220) / 10;
$pitch = $this->pitch + mt_rand(-120, 120) / 10;
$nbt = new CompoundTag("", ["Pos" => new ListTag("Pos", [new DoubleTag("", $this->x + -sin($yaw / 180 * M_PI) * cos($pitch / 180 * M_PI) * 2), new DoubleTag("", $this->y + 2), new DoubleTag("", $this->z + cos($yaw / 180 * M_PI) * cos($pitch / 180 * M_PI) * 2)]), "Motion" => new ListTag("Motion", [new DoubleTag("", -sin($yaw / 180 * M_PI) * cos($pitch / 180 * M_PI)), new DoubleTag("", -sin($pitch / 180 * M_PI) * $f), new DoubleTag("", cos($yaw / 180 * M_PI) * cos($pitch / 180 * M_PI))]), "Rotation" => new ListTag("Rotation", [new FloatTag("", $yaw), new FloatTag("", $pitch)])]);
$fireball = Entity::createEntity("FireBall", $this->chunk, $nbt, $this);
if ($fireball instanceof FireBall) {
$fireball->setExplode(true);
}
$fireball->setMotion($fireball->getMotion()->multiply($f));
$ev = new EntityShootBowEvent($this, Item::get(Item::ARROW, 0, 1), $fireball, $f);
$this->server->getPluginManager()->callEvent($ev);
$projectile = $ev->getProjectile();
if ($ev->isCancelled()) {
$projectile->kill();
} elseif ($projectile instanceof Projectile) {
$this->server->getPluginManager()->callEvent($launch = new ProjectileLaunchEvent($projectile));
if ($launch->isCancelled()) {
$projectile->kill();
} else {
$projectile->spawnToAll();
$this->level->addSound(new LaunchSound($this), $this->getViewers());
}
}
}
}
作者:rilex0
项目:EntityManage
public function attackEntity(Entity $player)
{
if ($this->attackDelay > 25 && mt_rand(1, 12) < 3 && $this->distanceSquared($player) <= 40) {
$this->attackDelay = 0;
$f = 1.5;
$yaw = $this->yaw + mt_rand(-180, 180) / 10;
$pitch = $this->pitch + mt_rand(-90, 90) / 10;
$nbt = new Compound("", ["Pos" => new Enum("Pos", [new Double("", $this->x), new Double("", $this->y + 1.62), new Double("", $this->z)]), "Motion" => new Enum("Motion", [new Double("", -sin($yaw / 180 * M_PI) * cos($pitch / 180 * M_PI) * $f), new Double("", -sin($pitch / 180 * M_PI) * $f), new Double("", cos($yaw / 180 * M_PI) * cos($pitch / 180 * M_PI) * $f)]), "Rotation" => new Enum("Rotation", [new Float("", $yaw), new Float("", $pitch)])]);
/** @var Projectile $arrow */
$arrow = Entity::createEntity("Arrow", $this->chunk, $nbt, $this);
$ev = new EntityShootBowEvent($this, Item::get(Item::ARROW, 0, 1), $arrow, $f);
$this->server->getPluginManager()->callEvent($ev);
$projectile = $ev->getProjectile();
if ($ev->isCancelled()) {
$ev->getProjectile()->kill();
} elseif ($projectile instanceof Projectile) {
$this->server->getPluginManager()->callEvent($launch = new ProjectileLaunchEvent($projectile));
if ($launch->isCancelled()) {
$projectile->kill();
} else {
$projectile->spawnToAll();
$this->level->addSound(new LaunchSound($this), $this->getViewers());
}
}
}
}
作者:iTXTec
项目:Genisy
public function onEntityCollide(Entity $entity)
{
$ev = new EntityDamageByBlockEvent($this, $entity, EntityDamageEvent::CAUSE_CONTACT, 1);
if ($entity->attack($ev->getFinalDamage(), $ev) === true) {
$ev->useArmors();
}
}
作者:HelloWorld01
项目:ToAruArche
public function canCollideWith(Entity $entity)
{
if ($entity instanceof Player) {
return $entity instanceof Living && !$this->onGround && ($entity->getId() !== $this->getDataProperty(self::DATA_SHOOTER_ID) && ToAruPG::$pvpEnabled);
}
return $entity instanceof Living && !$this->onGround && $entity->getId() !== $this->getDataProperty(self::DATA_SHOOTER_ID);
}
作者:ClearSkyTea
项目:ClearSk
public function onEntityCollide(Entity $entity)
{
if (abs($entity->motionY) < 0.1 && !$entity->isSneaking()) {
(double) ($d0 = 0.4 + abs($entity->motionY) * 0.2);
$entity->motionX *= $d0;
$entity->motionZ *= $d0;
}
}
作者:xHF
项目:ImagicalMin
public function onEntityCollide(Entity $entity)
{
$entity->resetFallDistance();
if ($entity->fireTicks > 0) {
$entity->extinguish();
}
$entity->resetFallDistance();
}
作者:ClearSkyTea
项目:ClearSk
public function useOnEntity(Entity $entity, Entity $origin)
{
if ($entity instanceof Animal) {
if ($entity->isLeashableType()) {
$entity->setLeashHolder($origin);
}
}
}
作者:worlds
项目:NIGHTMAR
protected function addAttackerModifiers(Entity $damager)
{
if ($damager->hasEffect(Effect::STRENGTH)) {
$this->setDamage($this->getDamage(self::MODIFIER_BASE) * 0.3 * ($damager->getEffect(Effect::STRENGTH)->getAmplifier() + 1), self::MODIFIER_STRENGTH);
}
if ($damager->hasEffect(Effect::WEAKNESS)) {
$this->setDamage(-($this->getDamage(self::MODIFIER_BASE) * 0.2 * ($damager->getEffect(Effect::WEAKNESS)->getAmplifier() + 1)), self::MODIFIER_WEAKNESS);
}
}
作者:boyboo
项目:PocketMine-M
public function onEntityCollide(Entity $entity)
{
$entity->setOnFire(8);
$ev = new EntityDamageEvent($entity, EntityDamageEvent::CAUSE_FIRE, 1);
Server::getInstance()->getPluginManager()->callEvent($ev);
if (!$ev->isCancelled()) {
$entity->attack($ev->getFinalDamage(), $ev);
}
}
作者:rry
项目:PocketMine-M
public function onEntityCollide(Entity $entity)
{
$entity->fallDistance = 0;
if ($entity->fireTicks > 0) {
$entity->extinguish();
}
if ($entity instanceof Player) {
$entity->onGround = true;
}
}
作者:orlando09
项目:ImagicalMin
public function onEntityCollide(Entity $entity)
{
if (!$entity->hasEffect(Effect::FIRE_RESISTANCE)) {
$ev = new EntityDamageByBlockEvent($this, $entity, EntityDamageEvent::CAUSE_FIRE, 1);
$entity->attack($ev->getFinalDamage(), $ev);
}
$ev = new EntityCombustByBlockEvent($this, $entity, 8);
Server::getInstance()->getPluginManager()->callEvent($ev);
if (!$ev->isCancelled()) {
$entity->setOnFire($ev->getDuration());
}
}
作者:mattiasaxelsso
项目:PocketMine-M
/**
* TODO: Move this to each item
*
* @param Entity|Block $object
*
* @return bool
*/
public function useOn($object)
{
if ($this->isHoe()) {
if ($object instanceof Block and ($object->getId() === self::GRASS or $object->getId() === self::DIRT)) {
$this->meta++;
}
} elseif ($object instanceof Entity and !$this->isSword()) {
$this->meta += 2;
} else {
$this->meta++;
}
return true;
}
作者:iTXTec
项目:Genisy
protected function addAttackerModifiers(Entity $damager)
{
if ($damager->hasEffect(Effect::STRENGTH)) {
$this->setRateDamage(1 + 0.3 * ($damager->getEffect(Effect::STRENGTH)->getAmplifier() + 1), self::MODIFIER_STRENGTH);
}
if ($damager->hasEffect(Effect::WEAKNESS)) {
$eff_level = 1 - 0.2 * ($damager->getEffect(Effect::WEAKNESS)->getAmplifier() + 1);
if ($eff_level < 0) {
$eff_level = 0;
}
$this->setRateDamage($eff_level, self::MODIFIER_WEAKNESS);
}
}
作者:AnonymousProject
项目:PocketMine-MP-Origina
/**
* TODO: Move this to each item
*
* @param Entity|Block $object
* @param 1 for break|2 for Touch $type
*
* @return bool
*/
public function useOn($object, $type = 1)
{
if ($this->isUnbreakable()) {
return true;
}
$unbreakingl = $this->getEnchantmentLevel(Enchantment::TYPE_MINING_DURABILITY);
$unbreakingl = $unbreakingl > 3 ? 3 : $unbreakingl;
if (mt_rand(1, $unbreakingl + 1) !== 1) {
return true;
}
if ($type === 1) {
if ($object instanceof Entity) {
if ($this->isHoe() !== false or $this->isSword() !== false) {
//Hoe and Sword
$this->meta++;
return true;
} elseif ($this->isPickaxe() !== false or $this->isAxe() !== false or $this->isShovel() !== false) {
//Pickaxe Axe and Shovel
$this->meta += 2;
return true;
}
return true;
//Other tool do not lost durability white hitting
} elseif ($object instanceof Block) {
if ($this->isShears() !== false) {
if ($object->getToolType() === Tool::TYPE_SHEARS) {
//This should be checked in each block
$this->meta++;
}
return true;
} elseif ($object->getHardness() > 0) {
//Sword Pickaxe Axe and Shovel
if ($this->isSword() !== false) {
$this->meta += 2;
return true;
} elseif ($this->isPickaxe() !== false or $this->isAxe() !== false or $this->isShovel() !== false) {
$this->meta += 1;
return true;
}
}
}
} elseif ($type === 2) {
//For Touch. only trigger when OnActivate return true
if ($this->isHoe() !== false or $this->id === self::FLINT_STEEL or $this->isShovel() !== false) {
$this->meta++;
return true;
}
}
return true;
}
作者:rry
项目:PocketMine-M
public function onEntityCollide(Entity $entity)
{
$entity->fallDistance *= 0.5;
$ev = new EntityDamageByBlockEvent($this, $entity, EntityDamageEvent::CAUSE_LAVA, 4);
$entity->attack($ev->getFinalDamage(), $ev);
$ev = new EntityCombustByBlockEvent($this, $entity, 15);
Server::getInstance()->getPluginManager()->callEvent($ev);
if (!$ev->isCancelled()) {
$entity->setOnFire($ev->getDuration());
}
if ($entity instanceof Player) {
$entity->onGround = true;
}
}
作者:robske11
项目:ClearSk
public function spawnTo(Player $player)
{
$pk = $this->addEntityDataPacket($player);
$pk->type = self::NETWORK_ID;
$player->dataPacket($pk);
parent::spawnTo($player);
}
作者:PepbookPv
项目:Genisy
public function onActivate(Level $level, Player $player, Block $block, Block $target, $face, $fx, $fy, $fz)
{
if ($target->getId() == Block::MONSTER_SPAWNER) {
return true;
} else {
$entity = null;
$chunk = $level->getChunk($block->getX() >> 4, $block->getZ() >> 4);
if (!$chunk instanceof FullChunk) {
return false;
}
$nbt = new CompoundTag("", ["Pos" => new EnumTag("Pos", [new DoubleTag("", $block->getX() + 0.5), new DoubleTag("", $block->getY()), new DoubleTag("", $block->getZ() + 0.5)]), "Motion" => new EnumTag("Motion", [new DoubleTag("", 0), new DoubleTag("", 0), new DoubleTag("", 0)]), "Rotation" => new EnumTag("Rotation", [new FloatTag("", lcg_value() * 360), new FloatTag("", 0)])]);
if ($this->hasCustomName()) {
$nbt->CustomName = new StringTag("CustomName", $this->getCustomName());
}
$entity = Entity::createEntity($this->meta, $chunk, $nbt);
if ($entity instanceof Entity) {
if ($player->isSurvival()) {
--$this->count;
}
$entity->spawnToAll();
return true;
}
}
return false;
}
作者:EmreTr
项目:rt
public function burstArrow(Player $player)
{
if ($player->getInventory()->getItemInHand()->getId() === Item::BOW) {
$bow = $player->getInventory()->getItemInHand();
$nbt = new Compound("", ["Pos" => new Enum("Pos", [new Double("", $player->x), new Double("", $player->y + $player->getEyeHeight()), new Double("", $player->z)]), "Motion" => new Enum("Motion", [new Double("", -\sin($player->yaw / 180 * M_PI) * \cos($player->pitch / 180 * M_PI)), new Double("", -\sin($player->pitch / 180 * M_PI)), new Double("", \cos($player->yaw / 180 * M_PI) * \cos($player->pitch / 180 * M_PI))]), "Rotation" => new Enum("Rotation", [new Float("", $player->yaw), new Float("", $player->pitch)])]);
$ev = new EntityShootBowEvent($player, $bow, Entity::createEntity("Arrow", $player->chunk, $nbt, $player), 1.5);
$this->getServer()->getPluginManager()->callEvent($ev);
if ($ev->isCancelled()) {
$ev->getProjectile()->kill();
} else {
$ev->getProjectile()->setMotion($ev->getProjectile()->getMotion()->multiply($ev->getForce()));
if ($ev->getProjectile() instanceof Projectile) {
$this->getServer()->getPluginManager()->callEvent($projectileEv = new ProjectileLaunchEvent($ev->getProjectile()));
if ($projectileEv->isCancelled()) {
$ev->getProjectile()->kill();
} else {
$this->object_hash[spl_object_hash($ev->getProjectile())] = 1;
$ev->getProjectile()->spawnToAll();
}
} else {
$this->object_hash[spl_object_hash($ev->getProjectile())] = 1;
$ev->getProjectile()->spawnToAll();
}
}
}
}
作者:steveritte
项目:EntityManage
public function attackEntity(Entity $player)
{
if ($this->attackDelay > 23 && mt_rand(1, 32) < 4 && $this->distanceSquared($player) <= 55) {
$this->attackDelay = 0;
$f = 1.2;
$yaw = $this->yaw + mt_rand(-220, 220) / 10;
$pitch = $this->pitch + mt_rand(-120, 120) / 10;
$nbt = new CompoundTag("", ["Pos" => new ListTag("Pos", [new DoubleTag("", $this->x + -sin($yaw / 180 * M_PI) * cos($pitch / 180 * M_PI) * 0.5), new DoubleTag("", $this->y + 1), new DoubleTag("", $this->z + cos($yaw / 180 * M_PI) * cos($pitch / 180 * M_PI) * 0.5)]), "Motion" => new ListTag("Motion", [new DoubleTag("", -sin($yaw / 180 * M_PI) * cos($pitch / 180 * M_PI)), new DoubleTag("", -sin($pitch / 180 * M_PI)), new DoubleTag("", cos($yaw / 180 * M_PI) * cos($pitch / 180 * M_PI))]), "Rotation" => new ListTag("Rotation", [new FloatTag("", $yaw), new FloatTag("", $pitch)])]);
/** @var Projectile $snowball */
$snowball = Entity::createEntity("Snowball", $this->chunk, $nbt, $this);
$snowball->setMotion($snowball->getMotion()->multiply($f));
$property = (new \ReflectionClass($snowball))->getProperty("damage");
$property->setAccessible(true);
$property->setValue($snowball, 2);
$ev = new EntityShootBowEvent($this, Item::get(Item::ARROW, 0, 1), $snowball, $f);
$this->server->getPluginManager()->callEvent($ev);
$projectile = $ev->getProjectile();
if ($ev->isCancelled()) {
$projectile->kill();
} elseif ($projectile instanceof Projectile) {
$this->server->getPluginManager()->callEvent($launch = new ProjectileLaunchEvent($projectile));
if ($launch->isCancelled()) {
$projectile->kill();
} else {
$projectile->spawnToAll();
$this->level->addSound(new LaunchSound($this), $this->getViewers());
}
}
}
}
作者:robozer
项目:Yuriko-M
public function onBreak(Item $item)
{
if ($this->getRandomExperience($item) > 0) {
Entity::createEntity("ExperienceOrb", $this->level->getChunk($this->x >> 4, $this->z >> 4), new Compound("", ["Pos" => new Enum("Pos", [new Double("", $this->x), new Double("", $this->y), new Double("", $this->z)]), "Motion" => new Enum("Motion", [new Double("", 0), new Double("", 0), new Double("", 0)]), "Rotation" => new Enum("Rotation", [new Float("", 0), new Float("", 0)])]))->spawnToAll();
}
return parent::onBreak($item);
}