File player.h¶
File List > endstone > player.h
Go to the documentation of this file
// Copyright (c) 2024, The Endstone Project. (https://endstone.dev) All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#pragma once
#include <chrono>
#include <optional>
#include <string>
#include <string_view>
#include <variant>
#include "endstone/ability.h"
#include "endstone/actor/mob.h"
#include "endstone/block/block_actor_state.h"
#include "endstone/block/block_data.h"
#include "endstone/block/sign.h"
#include "endstone/form/action_form.h"
#include "endstone/form/message_form.h"
#include "endstone/form/modal_form.h"
#include "endstone/game_mode.h"
#include "endstone/inventory/player_inventory.h"
#include "endstone/json.h"
#include "endstone/level/location.h"
#include "endstone/map/map_view.h"
#include "endstone/scoreboard/scoreboard.h"
#include "endstone/skin.h"
#include "endstone/util/socket_address.h"
#include "endstone/util/uuid.h"
namespace endstone {
class Plugin;
class Player : public Mob {
protected:
using FormVariant = std::variant<MessageForm, ActionForm, ModalForm>;
public:
[[nodiscard]] std::string getName() const override = 0;
[[nodiscard]] virtual UUID getUniqueId() const = 0;
[[nodiscard]] virtual bool isOp() const = 0;
virtual void setOp(bool value) = 0;
[[nodiscard]] virtual std::string getXuid() const = 0;
[[nodiscard]] virtual const SocketAddress &getAddress() const = 0;
virtual void transfer(std::string host, int port) const = 0;
virtual void kick(std::string message) const = 0;
// TODO: chat
virtual bool performCommand(std::string command) const = 0; // NOLINT(*-use-nodiscard)
[[nodiscard]] virtual std::optional<Location> getRespawnLocation() const = 0;
virtual void setRespawnLocation(std::optional<Location> location) = 0;
virtual void sendBlockUpdate(const Location &location, const BlockActorState &block_actor_state) = 0;
virtual void hideActor(Plugin &plugin, Actor &actor) = 0;
virtual void showActor(Plugin &plugin, Actor &actor) = 0;
[[nodiscard]] virtual bool canSee(const Actor &actor) const = 0;
[[nodiscard]] virtual bool canSee(const Player &player) const = 0;
virtual void sendBlockChange(const Location &location, const BlockData &block) = 0;
virtual void openSign(const Sign &sign, Sign::Side side) = 0;
virtual void openVirtualSign(const Location &location, Sign::Side side) = 0;
[[nodiscard]] virtual bool isSneaking() const = 0;
virtual void setSneaking(bool sneak) = 0;
[[nodiscard]] virtual bool isSprinting() const = 0;
virtual void setSprinting(bool sprinting) = 0;
[[nodiscard]] virtual bool isCrawling() const = 0;
// TODO: playNote
virtual void playSound(Location location, std::string sound, float volume, float pitch) = 0;
virtual void stopSound(std::string sound) = 0;
virtual void stopAllSounds() = 0;
// TODO: playEffect
virtual void giveExp(int amount) = 0;
virtual void giveExpLevels(int amount) = 0;
[[nodiscard]] virtual float getExpProgress() const = 0;
virtual void setExpProgress(float progress) = 0;
[[nodiscard]] virtual int getExpLevel() const = 0;
virtual void setExpLevel(int level) = 0;
[[nodiscard]] virtual int getTotalExp() const = 0;
[[nodiscard]] virtual bool getAllowFlight() const = 0;
virtual void setAllowFlight(bool flight) = 0;
[[nodiscard]] virtual bool isFlying() const = 0;
virtual void setFlying(bool value) = 0;
[[nodiscard]] virtual float getFlySpeed() const = 0;
virtual void setFlySpeed(float value) const = 0;
[[nodiscard]] virtual float getWalkSpeed() const = 0;
virtual void setWalkSpeed(float value) const = 0;
[[nodiscard]] virtual NotNull<Scoreboard> getScoreboard() const = 0;
void virtual setScoreboard(NotNull<Scoreboard> scoreboard) = 0;
virtual void sendActionBar(std::string message) const = 0;
virtual void sendPopup(std::string message) const = 0;
virtual void sendTip(std::string message) const = 0;
virtual void sendToast(std::string title, std::string content) const = 0;
virtual void sendTitle(std::string title, std::string subtitle) const = 0;
virtual void sendTitle(std::string title, std::string subtitle, int fade_in, int stay, int fade_out) const = 0;
virtual void resetTitle() const = 0;
virtual void spawnParticle(std::string name, Location location) const = 0;
virtual void spawnParticle(std::string name, float x, float y, float z) const = 0;
virtual void spawnParticle(std::string name, Location location,
std::optional<JsonObject> molang_variables) const = 0;
virtual void spawnParticle(std::string name, float x, float y, float z,
std::optional<JsonObject> molang_variables) const = 0;
// TODO: getClientViewDistance
[[nodiscard]] virtual std::chrono::milliseconds getPing() const = 0;
[[nodiscard]] virtual std::string getLocale() const = 0;
virtual void updateCommands() const = 0;
// === EntityHuman === //
[[nodiscard]] virtual PlayerInventory &getInventory() const = 0;
[[nodiscard]] virtual Inventory &getEnderChest() const = 0;
[[nodiscard]] virtual GameMode getGameMode() const = 0;
virtual void setGameMode(GameMode mode) = 0;
[[nodiscard]] virtual std::string getDeviceOS() const = 0;
[[nodiscard]] virtual std::string getDeviceId() const = 0;
[[nodiscard]] virtual std::string getGameVersion() const = 0;
[[nodiscard]] virtual Skin getSkin() const = 0;
virtual void sendForm(FormVariant form) = 0;
virtual void closeForm() = 0;
virtual void sendPacket(int packet_id, std::string_view payload) const = 0;
virtual void sendMap(MapView &map) = 0;
[[nodiscard]] virtual AbilityValue _getAbility(Identifier<Ability> ability) const = 0;
template <typename T>
[[nodiscard]] T getAbility(AbilityId<T> ability) const
{
return std::get<T>(_getAbility(ability));
}
virtual bool _setAbility(Identifier<Ability> ability, AbilityValue value) = 0;
template <typename T>
bool setAbility(AbilityId<T> ability, T value)
{
return _setAbility(ability, value);
}
};
} // namespace endstone