diff --git a/src/pocketmine/Player.php b/src/pocketmine/Player.php index 6588745e2..667f72c97 100644 --- a/src/pocketmine/Player.php +++ b/src/pocketmine/Player.php @@ -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); + $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); diff --git a/src/pocketmine/entity/Entity.php b/src/pocketmine/entity/Entity.php index bc3b95f30..1fc91c93a 100644 --- a/src/pocketmine/entity/Entity.php +++ b/src/pocketmine/entity/Entity.php @@ -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){ diff --git a/src/pocketmine/entity/Living.php b/src/pocketmine/entity/Living.php index 57c51e15c..50be6b59c 100644 --- a/src/pocketmine/entity/Living.php +++ b/src/pocketmine/entity/Living.php @@ -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);