Merge branch 'release/3.3'

This commit is contained in:
Dylan K. Taylor 2018-09-08 14:30:16 +01:00
commit 0d152a2139
10 changed files with 50 additions and 61 deletions

View File

@ -2398,7 +2398,7 @@ class Server{
if($level->getTickRate() > $this->baseTickRate and --$level->tickRateCounter > 0){ if($level->getTickRate() > $this->baseTickRate and --$level->tickRateCounter > 0){
continue; continue;
} }
try{
$levelTime = microtime(true); $levelTime = microtime(true);
$level->doTick($currentTick); $level->doTick($currentTick);
$tickMs = (microtime(true) - $levelTime) * 1000; $tickMs = (microtime(true) - $levelTime) * 1000;
@ -2422,14 +2422,6 @@ class Server{
$level->tickRateCounter = $level->getTickRate(); $level->tickRateCounter = $level->getTickRate();
} }
} }
}catch(\Throwable $e){
if(!$level->isClosed()){
$this->logger->critical($this->getLanguage()->translateString("pocketmine.level.tickError", [$level->getName(), $e->getMessage()]));
}else{
$this->logger->critical($this->getLanguage()->translateString("pocketmine.level.tickUnloadError", [$level->getName()]));
}
$this->logger->logException($e);
}
} }
} }

View File

@ -395,8 +395,6 @@ abstract class Entity extends Location implements Metadatable, EntityIds{
public $boundingBox; public $boundingBox;
/** @var bool */ /** @var bool */
public $onGround; public $onGround;
/** @var int */
protected $age = 0;
/** @var float */ /** @var float */
public $eyeHeight = null; public $eyeHeight = null;
@ -1023,7 +1021,6 @@ abstract class Entity extends Location implements Metadatable, EntityIds{
} }
} }
$this->age += $tickDiff;
$this->ticksLived += $tickDiff; $this->ticksLived += $tickDiff;
return $hasUpdate; return $hasUpdate;

View File

@ -89,6 +89,9 @@ class ExperienceOrb extends Entity{
public $gravity = 0.04; public $gravity = 0.04;
public $drag = 0.02; public $drag = 0.02;
/** @var int */
protected $age = 0;
/** /**
* @var int * @var int
* Ticker used for determining interval in which to look for new target players. * Ticker used for determining interval in which to look for new target players.
@ -162,6 +165,7 @@ class ExperienceOrb extends Entity{
public function entityBaseTick(int $tickDiff = 1) : bool{ public function entityBaseTick(int $tickDiff = 1) : bool{
$hasUpdate = parent::entityBaseTick($tickDiff); $hasUpdate = parent::entityBaseTick($tickDiff);
$this->age += $tickDiff;
if($this->age > 6000){ if($this->age > 6000){
$this->flagForDespawn(); $this->flagForDespawn();
return true; return true;

View File

@ -54,6 +54,9 @@ class ItemEntity extends Entity{
public $canCollide = false; public $canCollide = false;
/** @var int */
protected $age = 0;
protected function initEntity(CompoundTag $nbt) : void{ protected function initEntity(CompoundTag $nbt) : void{
parent::initEntity($nbt); parent::initEntity($nbt);
@ -83,14 +86,13 @@ class ItemEntity extends Entity{
$hasUpdate = parent::entityBaseTick($tickDiff); $hasUpdate = parent::entityBaseTick($tickDiff);
if(!$this->isFlaggedForDespawn()){ if(!$this->isFlaggedForDespawn() and $this->pickupDelay > -1 and $this->pickupDelay < 32767){ //Infinite delay
if($this->pickupDelay > 0 and $this->pickupDelay < 32767){ //Infinite delay
$this->pickupDelay -= $tickDiff; $this->pickupDelay -= $tickDiff;
if($this->pickupDelay < 0){ if($this->pickupDelay < 0){
$this->pickupDelay = 0; $this->pickupDelay = 0;
} }
}
$this->age += $tickDiff;
if($this->age > 6000){ if($this->age > 6000){
$this->server->getPluginManager()->callEvent($ev = new ItemDespawnEvent($this)); $this->server->getPluginManager()->callEvent($ev = new ItemDespawnEvent($this));
if($ev->isCancelled()){ if($ev->isCancelled()){
@ -100,7 +102,6 @@ class ItemEntity extends Entity{
$hasUpdate = true; $hasUpdate = true;
} }
} }
} }
return $hasUpdate; return $hasUpdate;

View File

@ -61,6 +61,9 @@ class Arrow extends Projectile{
/** @var float */ /** @var float */
protected $punchKnockback = 0.0; protected $punchKnockback = 0.0;
/** @var int */
protected $collideTicks = 0;
public function __construct(Level $level, CompoundTag $nbt, ?Entity $shootingEntity = null, bool $critical = false){ public function __construct(Level $level, CompoundTag $nbt, ?Entity $shootingEntity = null, bool $critical = false){
parent::__construct($level, $nbt, $shootingEntity); parent::__construct($level, $nbt, $shootingEntity);
$this->setCritical($critical); $this->setCritical($critical);
@ -70,11 +73,13 @@ class Arrow extends Projectile{
parent::initEntity($nbt); parent::initEntity($nbt);
$this->pickupMode = $nbt->getByte(self::TAG_PICKUP, self::PICKUP_ANY, true); $this->pickupMode = $nbt->getByte(self::TAG_PICKUP, self::PICKUP_ANY, true);
$this->collideTicks = $nbt->getShort("life", $this->collideTicks);
} }
public function saveNBT() : CompoundTag{ public function saveNBT() : CompoundTag{
$nbt = parent::saveNBT(); $nbt = parent::saveNBT();
$nbt->setByte(self::TAG_PICKUP, $this->pickupMode); $nbt->setByte(self::TAG_PICKUP, $this->pickupMode);
$nbt->setShort("life", $this->collideTicks);
return $nbt; return $nbt;
} }
@ -116,10 +121,15 @@ class Arrow extends Projectile{
$hasUpdate = parent::entityBaseTick($tickDiff); $hasUpdate = parent::entityBaseTick($tickDiff);
if($this->age > 1200){ if($this->isCollided){
$this->collideTicks += $tickDiff;
if($this->collideTicks > 1200){
$this->flagForDespawn(); $this->flagForDespawn();
$hasUpdate = true; $hasUpdate = true;
} }
}else{
$this->collideTicks = 0;
}
return $hasUpdate; return $hasUpdate;
} }

View File

@ -66,7 +66,5 @@ class EnderPearl extends Throwable{
$owner->attack(new EntityDamageEvent($owner, EntityDamageEvent::CAUSE_FALL, 5)); $owner->attack(new EntityDamageEvent($owner, EntityDamageEvent::CAUSE_FALL, 5));
} }
$this->flagForDespawn();
} }
} }

View File

@ -42,7 +42,5 @@ class ExperienceBottle extends Throwable{
$this->level->broadcastLevelSoundEvent($this, LevelSoundEventPacket::SOUND_GLASS); $this->level->broadcastLevelSoundEvent($this, LevelSoundEventPacket::SOUND_GLASS);
$this->level->dropExperience($this, mt_rand(3, 11)); $this->level->dropExperience($this, mt_rand(3, 11));
$this->flagForDespawn();
} }
} }

View File

@ -74,7 +74,6 @@ abstract class Projectile extends Entity{
$this->setMaxHealth(1); $this->setMaxHealth(1);
$this->setHealth(1); $this->setHealth(1);
$this->age = $nbt->getShort("Age", $this->age);
$this->damage = $nbt->getDouble("damage", $this->damage); $this->damage = $nbt->getDouble("damage", $this->damage);
do{ do{
@ -144,7 +143,6 @@ abstract class Projectile extends Entity{
public function saveNBT() : CompoundTag{ public function saveNBT() : CompoundTag{
$nbt = parent::saveNBT(); $nbt = parent::saveNBT();
$nbt->setShort("Age", $this->age);
$nbt->setDouble("damage", $this->damage); $nbt->setDouble("damage", $this->damage);
if($this->blockHit !== null){ if($this->blockHit !== null){

View File

@ -127,8 +127,6 @@ class SplashPotion extends Throwable{
} }
} }
} }
$this->flagForDespawn();
} }
/** /**

View File

@ -23,6 +23,9 @@ declare(strict_types=1);
namespace pocketmine\entity\projectile; namespace pocketmine\entity\projectile;
use pocketmine\block\Block;
use pocketmine\math\RayTraceResult;
abstract class Throwable extends Projectile{ abstract class Throwable extends Projectile{
public $width = 0.25; public $width = 0.25;
@ -31,18 +34,8 @@ abstract class Throwable extends Projectile{
protected $gravity = 0.03; protected $gravity = 0.03;
protected $drag = 0.01; protected $drag = 0.01;
public function entityBaseTick(int $tickDiff = 1) : bool{ protected function onHitBlock(Block $blockHit, RayTraceResult $hitResult) : void{
if($this->closed){ parent::onHitBlock($blockHit, $hitResult);
return false;
}
$hasUpdate = parent::entityBaseTick($tickDiff);
if($this->age > 1200 or $this->isCollided){
$this->flagForDespawn(); $this->flagForDespawn();
$hasUpdate = true;
}
return $hasUpdate;
} }
} }