Fixed burning animations for fireproof entities

creative players are not technically fireproof; they just don't take any damage from fire
This commit is contained in:
Dylan K. Taylor 2023-07-19 12:32:00 +01:00
parent 8414c78969
commit 763241b11f
No known key found for this signature in database
GPG Key ID: 8927471A91CAFD3D
2 changed files with 13 additions and 10 deletions

View File

@ -691,9 +691,11 @@ abstract class Entity{
if($fireTicks < 0 || $fireTicks > 0x7fff){ if($fireTicks < 0 || $fireTicks > 0x7fff){
throw new \InvalidArgumentException("Fire ticks must be in range 0 ... " . 0x7fff . ", got $fireTicks"); throw new \InvalidArgumentException("Fire ticks must be in range 0 ... " . 0x7fff . ", got $fireTicks");
} }
if(!$this->isFireProof()){
$this->fireTicks = $fireTicks; $this->fireTicks = $fireTicks;
$this->networkPropertiesDirty = true; $this->networkPropertiesDirty = true;
} }
}
public function extinguish() : void{ public function extinguish() : void{
$this->fireTicks = 0; $this->fireTicks = 0;
@ -705,12 +707,13 @@ abstract class Entity{
} }
protected function doOnFireTick(int $tickDiff = 1) : bool{ protected function doOnFireTick(int $tickDiff = 1) : bool{
if($this->isFireProof() && $this->fireTicks > 1){ if($this->isFireProof() && $this->isOnFire()){
$this->fireTicks = 1; $this->extinguish();
}else{ return false;
$this->fireTicks -= $tickDiff;
} }
$this->fireTicks -= $tickDiff;
if(($this->fireTicks % 20 === 0) || $tickDiff > 20){ if(($this->fireTicks % 20 === 0) || $tickDiff > 20){
$this->dealFireDamage(); $this->dealFireDamage();
} }

View File

@ -1195,10 +1195,6 @@ class Player extends Human implements CommandSender, ChunkListener, IPlayer{
return !$this->gamemode->equals(GameMode::CREATIVE()); return !$this->gamemode->equals(GameMode::CREATIVE());
} }
public function isFireProof() : bool{
return $this->isCreative();
}
public function getDrops() : array{ public function getDrops() : array{
if($this->hasFiniteResources()){ if($this->hasFiniteResources()){
return parent::getDrops(); return parent::getDrops();
@ -1436,6 +1432,10 @@ class Player extends Human implements CommandSender, ChunkListener, IPlayer{
$this->entityBaseTick($tickDiff); $this->entityBaseTick($tickDiff);
Timings::$entityBaseTick->stopTiming(); Timings::$entityBaseTick->stopTiming();
if($this->isCreative() && $this->fireTicks > 1){
$this->fireTicks = 1;
}
if(!$this->isSpectator() && $this->isAlive()){ if(!$this->isSpectator() && $this->isAlive()){
Timings::$playerCheckNearEntities->startTiming(); Timings::$playerCheckNearEntities->startTiming();
$this->checkNearEntities(); $this->checkNearEntities();