Improved EntityShootBowEvent

This commit is contained in:
Shoghi Cervantes 2014-10-08 16:36:43 +02:00
parent 7b09edf048
commit 64bf293c69
2 changed files with 31 additions and 9 deletions

View File

@ -1647,7 +1647,7 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
} }
} }
$f = 1.5;
$nbt = new Compound("", [ $nbt = new Compound("", [
"Pos" => new Enum("Pos", [ "Pos" => new Enum("Pos", [
new Double("", $this->x), new Double("", $this->x),
@ -1655,23 +1655,23 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
new Double("", $this->z) new Double("", $this->z)
]), ]),
"Motion" => new Enum("Motion", [ "Motion" => new Enum("Motion", [
new Double("", -sin($this->yaw / 180 * M_PI) * cos($this->pitch / 180 * M_PI) * $f), new Double("", -sin($this->yaw / 180 * M_PI) * cos($this->pitch / 180 * M_PI)),
new Double("", -sin($this->pitch / 180 * M_PI) * $f), new Double("", -sin($this->pitch / 180 * M_PI)),
new Double("", cos($this->yaw / 180 * M_PI) * cos($this->pitch / 180 * M_PI) * $f) new Double("", cos($this->yaw / 180 * M_PI) * cos($this->pitch / 180 * M_PI))
]), ]),
"Rotation" => new Enum("Rotation", [ "Rotation" => new Enum("Rotation", [
new Float("", $this->yaw), new Float("", $this->yaw),
new Float("", $this->pitch) new Float("", $this->pitch)
]), ]),
]); ]);
$arrow = new Arrow($this->chunk, $nbt, $this);
$ev = new EntityShootBowEvent($this, $bow, $arrow, $f); $f = 1.5;
$ev = new EntityShootBowEvent($this, $bow, new Arrow($this->chunk, $nbt, $this), $f);
$this->server->getPluginManager()->callEvent($ev); $this->server->getPluginManager()->callEvent($ev);
if($ev->isCancelled()){ if($ev->isCancelled()){
$arrow->kill(); $ev->getProjectile()->kill();
}else{ }else{
if($this->isSurvival()){ if($this->isSurvival()){
$this->inventory->removeItem(Item::get(Item::ARROW, 0, 1)); $this->inventory->removeItem(Item::get(Item::ARROW, 0, 1));
@ -1681,7 +1681,8 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
$this->inventory->setItemInHand(Item::get(Item::AIR, 0, 0), $this); $this->inventory->setItemInHand(Item::get(Item::AIR, 0, 0), $this);
} }
} }
$arrow->spawnToAll(); $ev->getProjectile()->setMotion($ev->getProjectile()->getMotion()->multiply($ev->getForce()));
$ev->getProjectile()->spawnToAll();
} }
} }
//} //}

View File

@ -21,6 +21,7 @@
namespace pocketmine\event\entity; namespace pocketmine\event\entity;
use pocketmine\entity\Entity;
use pocketmine\entity\Living; use pocketmine\entity\Living;
use pocketmine\entity\Projectile; use pocketmine\entity\Projectile;
use pocketmine\event\Cancellable; use pocketmine\event\Cancellable;
@ -64,12 +65,25 @@ class EntityShootBowEvent extends EntityEvent implements Cancellable{
} }
/** /**
* @return Projectile * @return Entity
*/ */
public function getProjectile(){ public function getProjectile(){
return $this->projectile; return $this->projectile;
} }
/**
* @param Entity $projectile
*/
public function setProjectile(Entity $projectile){
if($projectile !== $this->projectile){
if(count($this->projectile->getViewers()) === 0){
$this->projectile->kill();
$this->projectile->close();
}
$this->projectile = $projectile;
}
}
/** /**
* @return float * @return float
*/ */
@ -77,5 +91,12 @@ class EntityShootBowEvent extends EntityEvent implements Cancellable{
return $this->force; return $this->force;
} }
/**
* @param float $force
*/
public function setForce($force){
$this->force = $force;
}
} }