mirror of
https://github.com/pmmp/PocketMine-MP.git
synced 2025-06-15 16:05:28 +00:00
Use VISIBLE_MOB_EFFECTS actor metadata property to send effect bubbles (#6414)
Close #6402
This commit is contained in:
parent
3ed9615180
commit
8c3cf7a687
@ -36,7 +36,7 @@
|
|||||||
"pocketmine/bedrock-block-upgrade-schema": "~4.2.0+bedrock-1.21.0",
|
"pocketmine/bedrock-block-upgrade-schema": "~4.2.0+bedrock-1.21.0",
|
||||||
"pocketmine/bedrock-data": "~2.11.0+bedrock-1.21.0",
|
"pocketmine/bedrock-data": "~2.11.0+bedrock-1.21.0",
|
||||||
"pocketmine/bedrock-item-upgrade-schema": "~1.10.0+bedrock-1.21.0",
|
"pocketmine/bedrock-item-upgrade-schema": "~1.10.0+bedrock-1.21.0",
|
||||||
"pocketmine/bedrock-protocol": "~32.1.0+bedrock-1.21.2",
|
"pocketmine/bedrock-protocol": "~32.2.0+bedrock-1.21.2",
|
||||||
"pocketmine/binaryutils": "^0.2.1",
|
"pocketmine/binaryutils": "^0.2.1",
|
||||||
"pocketmine/callback-validator": "^1.0.2",
|
"pocketmine/callback-validator": "^1.0.2",
|
||||||
"pocketmine/color": "^0.3.0",
|
"pocketmine/color": "^0.3.0",
|
||||||
|
12
composer.lock
generated
12
composer.lock
generated
@ -205,16 +205,16 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "pocketmine/bedrock-protocol",
|
"name": "pocketmine/bedrock-protocol",
|
||||||
"version": "32.1.0+bedrock-1.21.2",
|
"version": "32.2.0+bedrock-1.21.2",
|
||||||
"source": {
|
"source": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/pmmp/BedrockProtocol.git",
|
"url": "https://github.com/pmmp/BedrockProtocol.git",
|
||||||
"reference": "bb23db51365bdc91d3135c3885986a691ae1cb44"
|
"reference": "229e5f3ae676a8601c576b7a57e56060b611d68d"
|
||||||
},
|
},
|
||||||
"dist": {
|
"dist": {
|
||||||
"type": "zip",
|
"type": "zip",
|
||||||
"url": "https://api.github.com/repos/pmmp/BedrockProtocol/zipball/bb23db51365bdc91d3135c3885986a691ae1cb44",
|
"url": "https://api.github.com/repos/pmmp/BedrockProtocol/zipball/229e5f3ae676a8601c576b7a57e56060b611d68d",
|
||||||
"reference": "bb23db51365bdc91d3135c3885986a691ae1cb44",
|
"reference": "229e5f3ae676a8601c576b7a57e56060b611d68d",
|
||||||
"shasum": ""
|
"shasum": ""
|
||||||
},
|
},
|
||||||
"require": {
|
"require": {
|
||||||
@ -245,9 +245,9 @@
|
|||||||
"description": "An implementation of the Minecraft: Bedrock Edition protocol in PHP",
|
"description": "An implementation of the Minecraft: Bedrock Edition protocol in PHP",
|
||||||
"support": {
|
"support": {
|
||||||
"issues": "https://github.com/pmmp/BedrockProtocol/issues",
|
"issues": "https://github.com/pmmp/BedrockProtocol/issues",
|
||||||
"source": "https://github.com/pmmp/BedrockProtocol/tree/32.1.0+bedrock-1.21.2"
|
"source": "https://github.com/pmmp/BedrockProtocol/tree/32.2.0+bedrock-1.21.2"
|
||||||
},
|
},
|
||||||
"time": "2024-07-10T01:38:43+00:00"
|
"time": "2024-08-10T19:23:18+00:00"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "pocketmine/binaryutils",
|
"name": "pocketmine/binaryutils",
|
||||||
|
@ -68,6 +68,7 @@ use function atan2;
|
|||||||
use function ceil;
|
use function ceil;
|
||||||
use function count;
|
use function count;
|
||||||
use function floor;
|
use function floor;
|
||||||
|
use function ksort;
|
||||||
use function lcg_value;
|
use function lcg_value;
|
||||||
use function max;
|
use function max;
|
||||||
use function min;
|
use function min;
|
||||||
@ -76,6 +77,7 @@ use function mt_rand;
|
|||||||
use function round;
|
use function round;
|
||||||
use function sqrt;
|
use function sqrt;
|
||||||
use const M_PI;
|
use const M_PI;
|
||||||
|
use const SORT_NUMERIC;
|
||||||
|
|
||||||
abstract class Living extends Entity{
|
abstract class Living extends Entity{
|
||||||
protected const DEFAULT_BREATH_TICKS = 300;
|
protected const DEFAULT_BREATH_TICKS = 300;
|
||||||
@ -883,8 +885,30 @@ abstract class Living extends Entity{
|
|||||||
protected function syncNetworkData(EntityMetadataCollection $properties) : void{
|
protected function syncNetworkData(EntityMetadataCollection $properties) : void{
|
||||||
parent::syncNetworkData($properties);
|
parent::syncNetworkData($properties);
|
||||||
|
|
||||||
$properties->setByte(EntityMetadataProperties::POTION_AMBIENT, $this->effectManager->hasOnlyAmbientEffects() ? 1 : 0);
|
$visibleEffects = [];
|
||||||
$properties->setInt(EntityMetadataProperties::POTION_COLOR, Binary::signInt($this->effectManager->getBubbleColor()->toARGB()));
|
foreach ($this->effectManager->all() as $effect) {
|
||||||
|
if (!$effect->isVisible() || !$effect->getType()->hasBubbles()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$visibleEffects[EffectIdMap::getInstance()->toId($effect->getType())] = $effect->isAmbient();
|
||||||
|
}
|
||||||
|
|
||||||
|
//TODO: HACK! the client may not be able to identify effects if they are not sorted.
|
||||||
|
ksort($visibleEffects, SORT_NUMERIC);
|
||||||
|
|
||||||
|
$effectsData = 0;
|
||||||
|
$packedEffectsCount = 0;
|
||||||
|
foreach ($visibleEffects as $effectId => $isAmbient) {
|
||||||
|
$effectsData = ($effectsData << 7) |
|
||||||
|
(($effectId & 0x3f) << 1) | //Why not use 7 bits instead of only 6? mojang...
|
||||||
|
($isAmbient ? 1 : 0);
|
||||||
|
|
||||||
|
if (++$packedEffectsCount >= 8) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$properties->setLong(EntityMetadataProperties::VISIBLE_MOB_EFFECTS, $effectsData);
|
||||||
|
|
||||||
$properties->setShort(EntityMetadataProperties::AIR, $this->breathTicks);
|
$properties->setShort(EntityMetadataProperties::AIR, $this->breathTicks);
|
||||||
$properties->setShort(EntityMetadataProperties::MAX_AIR, $this->maxBreathTicks);
|
$properties->setShort(EntityMetadataProperties::MAX_AIR, $this->maxBreathTicks);
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user