主题
ZXland C++ 接入指南
v1.0.0本指南详细介绍如何在 C++ 插件中使用 ZXland 领地 API。
📥 下载头文件
- land_api.h - C++ 接口头文件
快速开始
1. 添加头文件
将 land_api.h 复制到你的项目 include/ 目录。
2. 获取服务
cpp
#include <endstone/plugin/plugin.h>
#include "land_api.h"
class MyPlugin : public endstone::Plugin {
public:
void onEnable() override {
auto service = getServer().getServiceManager().load<ILandService>("LandService");
if (service) {
getLogger().info("ZXland API 加载成功!");
} else {
getLogger().error("ZXland 插件未安装!");
}
}
};完整示例:建造保护
cpp
#include "land_api.h"
class ProtectionPlugin : public endstone::Plugin {
ILandService* landService_ = nullptr;
public:
void onEnable() override {
landService_ = getServer().getServiceManager().load<ILandService>("LandService");
if (!landService_) {
getLogger().error("ZXland 未安装,保护功能禁用");
}
}
void onBlockPlace(BlockPlaceEvent &event) {
if (!landService_) return;
auto &player = event.getPlayer();
auto &block = event.getBlock();
float x = block.getX();
float y = block.getY();
float z = block.getZ();
int dim = static_cast<int>(player.getDimension().getType());
if (!landService_->hasPermissionAt(player.getName(), x, y, z, dim, "build")) {
player.sendMessage("§c你没有在这个领地建造的权限!");
event.setCancelled(true);
}
}
void onBlockBreak(BlockBreakEvent &event) {
if (!landService_) return;
auto &player = event.getPlayer();
auto &block = event.getBlock();
float x = block.getX();
float y = block.getY();
float z = block.getZ();
int dim = static_cast<int>(player.getDimension().getType());
if (!landService_->hasPermissionAt(player.getName(), x, y, z, dim, "break")) {
player.sendMessage("§c你没有在这个领地破坏的权限!");
event.setCancelled(true);
}
}
};常用 API 示例
检查玩家是否在领地内
cpp
auto service = getServer().getServiceManager().load<ILandService>("LandService");
bool inLand = service->isInLand(x, y, z, dim);
if (inLand) {
std::string landName = service->getLandNameAt(x, y, z, dim);
player->sendMessage("你在领地 " + landName + " 内");
}获取领地详情
cpp
LandData* land = service->getLandAt(x, y, z, dim);
if (land) {
player->sendMessage("领地: " + land->name);
player->sendMessage("主人: " + land->owner);
player->sendMessage("面积: " + std::to_string(service->getLandArea(land->name)) + " 格");
}检查玩家权限
cpp
bool canBuild = service->hasPermission("Steve", "我的领地", "build");
bool canBreak = service->hasPermission("Steve", "我的领地", "break");
bool canUse = service->hasPermission("Steve", "我的领地", "use");获取玩家角色
cpp
std::string role = service->getPlayerRole("我的领地", "Steve");
if (role == "owner") {
// 是领地主人
} else if (role == "member") {
// 是领地成员
} else {
// 是访客
}获取领地传送点
cpp
auto tp = service->getTeleportPos("我的领地");
if (tp.isSet) {
player->teleport(Location(tp.x, tp.y, tp.z, dim));
}判断是否为领地主人
cpp
bool isOwner = service->isLandOwner("我的领地", "Steve");
if (isOwner) {
// 允许管理操作
}CMakeLists.txt 配置
确保你的 CMakeLists.txt 包含 include 目录:
cmake
target_include_directories(${PROJECT_NAME} PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/include
)注意事项
注意
- 确保 ZXland 插件已安装并启用
- 每次使用前检查 service 是否为空
- API 调用是线程安全的