diff --git a/build/php b/build/php index fb297eb51..b2207cf70 160000 --- a/build/php +++ b/build/php @@ -1 +1 @@ -Subproject commit fb297eb511862ef3d4ca0aff5256a8caf5513cb4 +Subproject commit b2207cf70d3fc5b81f50a655aba4730fcf40a37c diff --git a/changelogs/4.15.md b/changelogs/4.15.md index b80115e88..c8543a0f1 100644 --- a/changelogs/4.15.md +++ b/changelogs/4.15.md @@ -12,3 +12,11 @@ Released 17th February 2023. ## General - Added support for Minecraft: Bedrock Edition 1.19.62. - Removed support for older versions. + +# 4.15.1 +Released 21st February 2023. + +## Fixes +- Fixed dropped items not despawning when in non-ticking chunks. +- Fixed dropped items not despawning if an infinite pickup delay is set. +- Fixed infinite despawn delay (never despawn) being ignored for dropped items. diff --git a/composer.json b/composer.json index 6c0641918..cef3836d0 100644 --- a/composer.json +++ b/composer.json @@ -56,7 +56,7 @@ "webmozart/path-util": "^2.3" }, "require-dev": { - "phpstan/phpstan": "1.9.17", + "phpstan/phpstan": "1.9.18", "phpstan/phpstan-phpunit": "^1.1.0", "phpstan/phpstan-strict-rules": "^1.2.0", "phpunit/phpunit": "^9.2" diff --git a/composer.lock b/composer.lock index b070d7fc0..55fe67b56 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "7e0991461c05ed03067e19ed52f4579b", + "content-hash": "402f78d672d4e0bd8f092272bf7d82d7", "packages": [ { "name": "adhocore/json-comment", @@ -1884,16 +1884,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.9.17", + "version": "1.9.18", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "204e459e7822f2c586463029f5ecec31bb45a1f2" + "reference": "f2d5cf71be91172a57c649770b73c20ebcffb0bf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/204e459e7822f2c586463029f5ecec31bb45a1f2", - "reference": "204e459e7822f2c586463029f5ecec31bb45a1f2", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/f2d5cf71be91172a57c649770b73c20ebcffb0bf", + "reference": "f2d5cf71be91172a57c649770b73c20ebcffb0bf", "shasum": "" }, "require": { @@ -1923,7 +1923,7 @@ ], "support": { "issues": "https://github.com/phpstan/phpstan/issues", - "source": "https://github.com/phpstan/phpstan/tree/1.9.17" + "source": "https://github.com/phpstan/phpstan/tree/1.9.18" }, "funding": [ { @@ -1939,7 +1939,7 @@ "type": "tidelift" } ], - "time": "2023-02-08T12:25:00+00:00" + "time": "2023-02-17T15:01:27+00:00" }, { "name": "phpstan/phpstan-phpunit", diff --git a/src/VersionInfo.php b/src/VersionInfo.php index a763bf070..8f62b9718 100644 --- a/src/VersionInfo.php +++ b/src/VersionInfo.php @@ -31,7 +31,7 @@ use function str_repeat; final class VersionInfo{ public const NAME = "PocketMine-MP"; - public const BASE_VERSION = "4.15.1"; + public const BASE_VERSION = "4.15.2"; public const IS_DEVELOPMENT_BUILD = true; public const BUILD_CHANNEL = "stable"; diff --git a/src/entity/object/ItemEntity.php b/src/entity/object/ItemEntity.php index 4a58620f7..08dea0659 100644 --- a/src/entity/object/ItemEntity.php +++ b/src/entity/object/ItemEntity.php @@ -113,33 +113,42 @@ class ItemEntity extends Entity{ $hasUpdate = parent::entityBaseTick($tickDiff); - if(!$this->isFlaggedForDespawn() && $this->pickupDelay !== self::NEVER_DESPAWN){ //Infinite delay + if($this->isFlaggedForDespawn()){ + return $hasUpdate; + } + + if($this->pickupDelay !== self::NEVER_DESPAWN && $this->pickupDelay > 0){ //Infinite delay + $hasUpdate = true; $this->pickupDelay -= $tickDiff; if($this->pickupDelay < 0){ $this->pickupDelay = 0; } - if($this->hasMovementUpdate() && $this->despawnDelay % self::MERGE_CHECK_PERIOD === 0){ - $mergeable = [$this]; //in case the merge target ends up not being this - $mergeTarget = $this; - foreach($this->getWorld()->getNearbyEntities($this->boundingBox->expandedCopy(0.5, 0.5, 0.5), $this) as $entity){ - if(!$entity instanceof ItemEntity || $entity->isFlaggedForDespawn()){ - continue; - } + } - if($entity->isMergeable($this)){ - $mergeable[] = $entity; - if($entity->item->getCount() > $mergeTarget->item->getCount()){ - $mergeTarget = $entity; - } - } + if($this->hasMovementUpdate() && $this->despawnDelay % self::MERGE_CHECK_PERIOD === 0){ + $mergeable = [$this]; //in case the merge target ends up not being this + $mergeTarget = $this; + foreach($this->getWorld()->getNearbyEntities($this->boundingBox->expandedCopy(0.5, 0.5, 0.5), $this) as $entity){ + if(!$entity instanceof ItemEntity || $entity->isFlaggedForDespawn()){ + continue; } - foreach($mergeable as $itemEntity){ - if($itemEntity !== $mergeTarget){ - $itemEntity->tryMergeInto($mergeTarget); + + if($entity->isMergeable($this)){ + $mergeable[] = $entity; + if($entity->item->getCount() > $mergeTarget->item->getCount()){ + $mergeTarget = $entity; } } } + foreach($mergeable as $itemEntity){ + if($itemEntity !== $mergeTarget){ + $itemEntity->tryMergeInto($mergeTarget); + } + } + } + if(!$this->isFlaggedForDespawn() && $this->despawnDelay !== self::NEVER_DESPAWN){ + $hasUpdate = true; $this->despawnDelay -= $tickDiff; if($this->despawnDelay <= 0){ $ev = new ItemDespawnEvent($this); @@ -148,7 +157,6 @@ class ItemEntity extends Entity{ $this->despawnDelay = self::DEFAULT_DESPAWN_DELAY; }else{ $this->flagForDespawn(); - $hasUpdate = true; } } }