Skip to content

Commit

Permalink
feat: add functions for name tag and score tag manipulation to Actor …
Browse files Browse the repository at this point in the history
…class
  • Loading branch information
wu-vincent committed Dec 23, 2024
1 parent fab6d4b commit d3979e1
Show file tree
Hide file tree
Showing 8 changed files with 152 additions and 2 deletions.
42 changes: 42 additions & 0 deletions include/endstone/actor/actor.h
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,48 @@ class Actor : public CommandSender {
* @return true if the tag was successfully removed, false if the tag does not exist.
*/
[[nodiscard]] virtual bool removeScoreboardTag(std::string tag) const = 0;

/**
* @brief Checks if the name tag is currently visible.
*
* @return True if the name tag is visible, false otherwise.
*/
[[nodiscard]] virtual bool isNameTagVisible() const = 0;

/**
* @brief Sets whether the name tag is visible or not.
*
* @param visible True to make the name tag visible, false to hide it.
*/
virtual void setNameTagVisible(bool visible) = 0;

/**
* @brief Gets the current name tag of the actor.
*
* @return The name tag.
*/
[[nodiscard]] virtual std::string getNameTag() const = 0;

/**
* @brief Sets the name tag for the actor.
*
* @param name The new name tag to set.
*/
virtual void setNameTag(std::string name) = 0;

/**
* @brief Gets the current score tag of the actor.
*
* @return The score tag.
*/
[[nodiscard]] virtual std::string getScoreTag() const = 0;

/**
* @brief Sets the score tag for the actor.
*
* @param score The new score tag to set.
*/
virtual void setScoreTag(std::string score) = 0;
};

} // namespace endstone
6 changes: 6 additions & 0 deletions include/endstone/detail/actor/actor.h
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,12 @@ class EndstoneActor : public Actor, public std::enable_shared_from_this<Endstone
[[nodiscard]] std::vector<std::string> getScoreboardTags() const override;
[[nodiscard]] bool addScoreboardTag(std::string tag) const override;
[[nodiscard]] bool removeScoreboardTag(std::string tag) const override;
[[nodiscard]] bool isNameTagVisible() const override;
void setNameTagVisible(bool visible) override;
[[nodiscard]] std::string getNameTag() const override;
void setNameTag(std::string name) override;
[[nodiscard]] std::string getScoreTag() const override;
void setScoreTag(std::string score) override;

// Internal use only
[[nodiscard]] ::Actor &getActor() const;
Expand Down
6 changes: 6 additions & 0 deletions include/endstone/detail/actor/mob.h
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,12 @@ class EndstoneMob : public EndstoneActor, public Mob {
[[nodiscard]] std::vector<std::string> getScoreboardTags() const override;
[[nodiscard]] bool addScoreboardTag(std::string tag) const override;
[[nodiscard]] bool removeScoreboardTag(std::string tag) const override;
[[nodiscard]] bool isNameTagVisible() const override;
void setNameTagVisible(bool visible) override;
[[nodiscard]] std::string getNameTag() const override;
void setNameTag(std::string name) override;
[[nodiscard]] std::string getScoreTag() const override;
void setScoreTag(std::string score) override;

// Mob
[[nodiscard]] bool isGliding() const override;
Expand Down
6 changes: 6 additions & 0 deletions include/endstone/detail/player.h
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,12 @@ class EndstonePlayer : public EndstoneMob, public Player {
[[nodiscard]] std::vector<std::string> getScoreboardTags() const override;
[[nodiscard]] bool addScoreboardTag(std::string tag) const override;
[[nodiscard]] bool removeScoreboardTag(std::string tag) const override;
[[nodiscard]] bool isNameTagVisible() const override;
void setNameTagVisible(bool visible) override;
[[nodiscard]] std::string getNameTag() const override;
void setNameTag(std::string name) override;
[[nodiscard]] std::string getScoreTag() const override;
void setScoreTag(std::string score) override;

// Mob
[[nodiscard]] bool isGliding() const override;
Expand Down
30 changes: 30 additions & 0 deletions src/endstone_core/actor/actor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,36 @@ bool EndstoneActor::removeScoreboardTag(std::string tag) const
return actor_.removeTag(tag);
}

bool EndstoneActor::isNameTagVisible() const
{
return actor_.canShowNameTag();
}

void EndstoneActor::setNameTagVisible(bool visible)
{
actor_.setNameTagVisible(visible);
}

std::string EndstoneActor::getNameTag() const
{
return actor_.getNameTag();
}

void EndstoneActor::setNameTag(std::string name)
{
actor_.setNameTag(name);
}

std::string EndstoneActor::getScoreTag() const
{
return actor_.getScoreTag();
}

void EndstoneActor::setScoreTag(std::string score)
{
actor_.setScoreTag(score);
}

PermissibleBase &EndstoneActor::getPermissibleBase()
{
static std::shared_ptr<PermissibleBase> perm = PermissibleBase::create(nullptr);
Expand Down
30 changes: 30 additions & 0 deletions src/endstone_core/actor/mob.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -192,6 +192,36 @@ bool EndstoneMob::removeScoreboardTag(std::string tag) const
return EndstoneActor::removeScoreboardTag(tag);
}

bool EndstoneMob::isNameTagVisible() const
{
return EndstoneActor::isNameTagVisible();
}

void EndstoneMob::setNameTagVisible(bool visible)
{
EndstoneActor::setNameTagVisible(visible);
}

std::string EndstoneMob::getNameTag() const
{
return EndstoneActor::getNameTag();
}

void EndstoneMob::setNameTag(std::string name)
{
EndstoneActor::setNameTag(name);
}

std::string EndstoneMob::getScoreTag() const
{
return EndstoneActor::getScoreTag();
}

void EndstoneMob::setScoreTag(std::string score)
{
EndstoneActor::setScoreTag(score);
}

bool EndstoneMob::isGliding() const
{
return mob_.isGliding();
Expand Down
30 changes: 30 additions & 0 deletions src/endstone_core/player.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,36 @@ bool EndstonePlayer::removeScoreboardTag(std::string tag) const
return EndstoneMob::removeScoreboardTag(tag);
}

bool EndstonePlayer::isNameTagVisible() const
{
return EndstoneMob::isNameTagVisible();
}

void EndstonePlayer::setNameTagVisible(bool visible)
{
EndstoneMob::setNameTagVisible(visible);
}

std::string EndstonePlayer::getNameTag() const
{
return EndstoneMob::getNameTag();
}

void EndstonePlayer::setNameTag(std::string name)
{
EndstoneMob::setNameTag(name);
}

std::string EndstonePlayer::getScoreTag() const
{
return EndstoneMob::getScoreTag();
}

void EndstonePlayer::setScoreTag(std::string score)
{
EndstoneMob::setScoreTag(score);
}

bool EndstonePlayer::isGliding() const
{
return EndstoneMob::isGliding();
Expand Down
4 changes: 2 additions & 2 deletions src/endstone_runtime/bedrock/world/actor/actor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ int Actor::getMaxHealth() const

void Actor::setNameTagVisible(bool visible)
{
SynchedActorDataAccess::setActorFlag(entity_context_, ActorFlags::ALWAYS_SHOW_NAME, visible);
SynchedActorDataAccess::setActorFlag(entity_context_, ActorFlags::CAN_SHOW_NAME, visible);
}

const std::string &Actor::getNameTag() const
Expand All @@ -326,7 +326,7 @@ const std::string &Actor::getScoreTag() const
return entity_data.getString(static_cast<SynchedActorData::ID>(ActorDataIDs::SCORE));
}

void Actor::setScoreTag(const std::string & score)
void Actor::setScoreTag(const std::string &score)
{
entity_data.set(static_cast<SynchedActorData::ID>(ActorDataIDs::SCORE), score);
}
Expand Down

0 comments on commit d3979e1

Please sign in to comment.