Skip to content

ZXland C++ 接入指南

v1.0.0

本指南详细介绍如何在 C++ 插件中使用 ZXland 领地 API。

📥 下载头文件

快速开始

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 调用是线程安全的

Made with ❤️ by EVIL-ZIXIE