25 public const NETWORK_ID = ProtocolInfo::BOSS_EVENT_PACKET;
46 public int $bossActorUniqueId;
47 public int $eventType;
49 public int $playerActorUniqueId;
50 public float $healthPercent;
52 public string $filteredTitle;
53 public bool $darkenScreen;
57 private static function base(
int $bossActorUniqueId,
int $eventId) : self{
59 $result->bossActorUniqueId = $bossActorUniqueId;
60 $result->eventType = $eventId;
64 public static function show(
int $bossActorUniqueId,
string $title,
float $healthPercent,
bool $darkenScreen =
false,
int $color = BossBarColor::PURPLE,
int $overlay = 0) : self{
65 $result = self::base($bossActorUniqueId, self::TYPE_SHOW);
66 $result->title = $title;
67 $result->filteredTitle = $title;
68 $result->healthPercent = $healthPercent;
69 $result->darkenScreen = $darkenScreen;
70 $result->color = $color;
71 $result->overlay = $overlay;
75 public static function hide(
int $bossActorUniqueId) : self{
76 return self::base($bossActorUniqueId, self::TYPE_HIDE);
79 public static function registerPlayer(
int $bossActorUniqueId,
int $playerActorUniqueId) : self{
80 $result = self::base($bossActorUniqueId, self::TYPE_REGISTER_PLAYER);
81 $result->playerActorUniqueId = $playerActorUniqueId;
85 public static function unregisterPlayer(
int $bossActorUniqueId,
int $playerActorUniqueId) : self{
86 $result = self::base($bossActorUniqueId, self::TYPE_UNREGISTER_PLAYER);
87 $result->playerActorUniqueId = $playerActorUniqueId;
91 public static function healthPercent(
int $bossActorUniqueId,
float $healthPercent) : self{
92 $result = self::base($bossActorUniqueId, self::TYPE_HEALTH_PERCENT);
93 $result->healthPercent = $healthPercent;
97 public static function title(
int $bossActorUniqueId,
string $title) : self{
98 $result = self::base($bossActorUniqueId, self::TYPE_TITLE);
99 $result->title = $title;
100 $result->filteredTitle = $title;
104 public static function properties(
int $bossActorUniqueId,
bool $darkenScreen,
int $color = BossBarColor::PURPLE,
int $overlay = 0) : self{
105 $result = self::base($bossActorUniqueId, self::TYPE_PROPERTIES);
106 $result->darkenScreen = $darkenScreen;
107 $result->color = $color;
108 $result->overlay = $overlay;
112 public static function query(
int $bossActorUniqueId,
int $playerActorUniqueId) : self{
113 $result = self::base($bossActorUniqueId, self::TYPE_QUERY);
114 $result->playerActorUniqueId = $playerActorUniqueId;
119 $this->bossActorUniqueId =
CommonTypes::getActorUniqueId($in);
120 $this->eventType = VarInt::readUnsignedInt($in);
121 switch($this->eventType){
122 case self::TYPE_REGISTER_PLAYER:
123 case self::TYPE_UNREGISTER_PLAYER:
124 case self::TYPE_QUERY:
125 $this->playerActorUniqueId = CommonTypes::getActorUniqueId($in);
128 case self::TYPE_SHOW:
129 $this->title = CommonTypes::getString($in);
130 $this->filteredTitle = CommonTypes::getString($in);
131 $this->healthPercent = LE::readFloat($in);
133 case self::TYPE_PROPERTIES:
134 $this->darkenScreen = match($raw = LE::readUnsignedShort($in)){
139 case self::TYPE_TEXTURE:
140 $this->color = VarInt::readUnsignedInt($in);
141 $this->overlay = VarInt::readUnsignedInt($in);
143 case self::TYPE_HEALTH_PERCENT:
144 $this->healthPercent = LE::readFloat($in);
146 case self::TYPE_TITLE:
147 $this->title = CommonTypes::getString($in);
148 $this->filteredTitle = CommonTypes::getString($in);
156 CommonTypes::putActorUniqueId($out, $this->bossActorUniqueId);
157 VarInt::writeUnsignedInt($out, $this->eventType);
158 switch($this->eventType){
159 case self::TYPE_REGISTER_PLAYER:
160 case self::TYPE_UNREGISTER_PLAYER:
161 case self::TYPE_QUERY:
162 CommonTypes::putActorUniqueId($out, $this->playerActorUniqueId);
165 case self::TYPE_SHOW:
166 CommonTypes::putString($out, $this->title);
167 CommonTypes::putString($out, $this->filteredTitle);
168 LE::writeFloat($out, $this->healthPercent);
170 case self::TYPE_PROPERTIES:
171 LE::writeUnsignedShort($out, $this->darkenScreen ? 1 : 0);
172 case self::TYPE_TEXTURE:
173 VarInt::writeUnsignedInt($out, $this->color);
174 VarInt::writeUnsignedInt($out, $this->overlay);
176 case self::TYPE_HEALTH_PERCENT:
177 LE::writeFloat($out, $this->healthPercent);
179 case self::TYPE_TITLE:
180 CommonTypes::putString($out, $this->title);
181 CommonTypes::putString($out, $this->filteredTitle);
189 return $handler->handleBossEvent($this);