Set entities on fire if hit by an entity on fire

This commit is contained in:
Shoghi Cervantes 2015-04-30 11:40:22 +02:00
parent b33706d427
commit fb257c16f1
3 changed files with 21 additions and 4 deletions

View File

@ -89,6 +89,7 @@ use pocketmine\nbt\tag\Double;
use pocketmine\nbt\tag\Enum;
use pocketmine\nbt\tag\Float;
use pocketmine\nbt\tag\Int;
use pocketmine\nbt\tag\Short;
use pocketmine\nbt\tag\String;
use pocketmine\network\Network;
use pocketmine\network\protocol\AdventureSettingsPacket;
@ -1356,9 +1357,10 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
$this->processMovement($tickDiff);
if(!$this->isSpectator()){
$this->entityBaseTick($tickDiff);
if(!$this->isSpectator()){
if($this->onGround){
$this->inAirTicks = 0;
}else{
@ -1388,8 +1390,6 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
$this->sendNextChunk();
}
$this->checkTeleportPosition();
if(count($this->moveToSend) > 0){
$pk = new MoveEntityPacket();
$pk->entities = $this->moveToSend;
@ -1412,6 +1412,8 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
$this->batchedPackets = [];
}
$this->checkTeleportPosition();
$this->lastUpdate = $currentTick;
$this->timings->stopTiming();
@ -1913,6 +1915,7 @@ class Player extends Human implements CommandSender, InventoryHolder, IPlayer{
new Float("", $this->yaw),
new Float("", $this->pitch)
]),
"Fire" => new Short("Fire", $this->isOnFire() ? 45 * 60 : 0)
]);
$diff = ($this->server->getTick() - $this->startAction);

View File

@ -869,6 +869,10 @@ abstract class Entity extends Location implements Metadatable{
$this->level->updateEntities[$this->id] = $this;
}
public function isOnFire(){
return $this->fireTicks > 0;
}
public function setOnFire($seconds){
$ticks = $seconds * 20;
if($ticks > $this->fireTicks){

View File

@ -23,6 +23,7 @@ namespace pocketmine\entity;
use pocketmine\block\Block;
use pocketmine\event\entity\EntityDamageByChildEntityEvent;
use pocketmine\event\entity\EntityDamageByEntityEvent;
use pocketmine\event\entity\EntityDamageEvent;
use pocketmine\event\entity\EntityDeathEvent;
@ -99,6 +100,15 @@ abstract class Living extends Entity implements Damageable{
if($source instanceof EntityDamageByEntityEvent){
$e = $source->getDamager();
$t = null;
if($source instanceof EntityDamageByChildEntityEvent){
$t = $source->getChild();
}
if($e->isOnFire() > 0 or ($t !== null and $t->isOnFire() > 0)){
$this->setOnFire(2 * $this->server->getDifficulty());
}
$deltaX = $this->x - $e->x;
$deltaZ = $this->z - $e->z;
$yaw = atan2($deltaX, $deltaZ);