Skip to content

ZXland API 接口

v1.0.0

ZXland 领地系统提供完整的领地管理 API,支持 C++ 和 Python 两种语言接入。

Python 超简单

Python 插件只需 1 个文件 land_api.py 即可调用所有领地 API!

📋 接口列表

领地查询

方法参数返回值说明
isInLandx, y, z, dimbool检查坐标是否在领地内
getLandNameAtx, y, z, dimstring获取坐标所在领地名
getLandAtx, y, z, dimLandData*获取坐标所在领地详情
getLandByNamenameLandData*根据名称获取领地

权限查询

方法参数返回值说明
hasPermissionplayer, landName, permbool检查玩家在领地的权限
hasPermissionAtplayer, x, y, z, dim, permbool检查玩家在坐标的权限
getPlayerRolelandName, playerstring获取玩家在领地的角色
getFlaglandName, flag, rolebool获取领地权限标志

成员管理

方法参数返回值说明
getLandMemberslandNamevector获取领地成员列表

领地列表

方法参数返回值说明
getPlayerLandsplayervector获取玩家拥有的领地
getAllLands-vector获取所有领地

领地工具

方法参数返回值说明
getLandArealandNameint64获取领地面积(方块数)
isLandOwnerlandName, playerbool判断玩家是否为领地主人
getTeleportPoslandNameTeleportPos获取领地传送点

防护罩

方法参数返回值说明
isShieldEnabledlandNamebool检查防护罩是否启用
isShieldPurchasedlandNamebool检查防护罩是否已购买
setShieldEnabledlandName, enabledbool设置防护罩状态 (仅C++)

领地管理 (仅C++)

方法参数返回值说明
createLandLandDatabool创建领地
deleteLandnamebool删除领地
addMemberlandName, player, rolebool添加成员
removeMemberlandName, playerbool移除成员
setFlaglandName, flag, value, rolebool设置权限标志
transferLandlandName, newOwnerbool转让领地
renameLandoldName, newNamebool重命名领地
setLandWelcomeMsglandName, msgbool设置欢迎消息
setLandLeaveMsglandName, msgbool设置离开消息
setTeleportPoslandName, x, y, zbool设置传送点
expandLandlandName, ex1, ex2, ey1, ey2, ez1, ez2bool扩展领地范围

Python API 是只读的

Python API 只能查询数据,不能修改领地。如需修改领地,请使用 C++ API。


数据结构

LandData - 领地数据

字段类型说明
namestring领地名称
ownerstring领地主人
dimint维度 (0=主世界, 1=下界, 2=末地)
x1, y1, z1float起点坐标
x2, y2, z2float终点坐标
is3dbool是否3D领地
flyEnabledbool飞行是否启用
flyPurchasedbool飞行是否已购买
shieldEnabledbool防护罩是否启用
shieldPurchasedbool防护罩是否已购买
teleportPosTeleportPos传送点位置
welcomeMsgstring欢迎消息
leaveMsgstring离开消息

TeleportPos - 传送点

字段类型说明
xfloatX坐标
yfloatY坐标
zfloatZ坐标
isSetbool是否已设置

LandMember - 领地成员

字段类型说明
playerstring玩家名称
rolestring角色 (owner/member/guest)

领地查询接口

isInLand - 检查是否在领地内

检查指定坐标是否位于任何领地内。

参数类型说明
xfloatX坐标
yfloatY坐标
zfloatZ坐标
dimint维度
返回值类型说明
inLandbool是否在领地内
cpp
bool inLand = service->isInLand(100.0, 64.0, 100.0, 0);
if (inLand) {
    player->sendMessage("你在领地内!");
}
python
in_land = land.is_in_land(100.0, 64.0, 100.0, 0)
if in_land:
    player.send_message("你在领地内!")

getLandNameAt - 获取领地名称

获取指定坐标所在的领地名称。

参数类型说明
xfloatX坐标
yfloatY坐标
zfloatZ坐标
dimint维度
返回值类型说明
namestring领地名,不在领地则返回空字符串
cpp
std::string landName = service->getLandNameAt(x, y, z, dim);
if (!landName.empty()) {
    player->sendMessage("当前领地: " + landName);
}
python
land_name = land.get_land_name_at(x, y, z, dim)
if land_name:
    player.send_message(f"当前领地: {land_name}")

getLandAt - 获取领地详情

获取指定坐标所在的领地完整信息。

参数类型说明
xfloatX坐标
yfloatY坐标
zfloatZ坐标
dimint维度
返回值类型说明
landLandData*领地数据,不在领地则返回nullptr
cpp
LandData* land = service->getLandAt(x, y, z, dim);
if (land) {
    player->sendMessage("领地: " + land->name);
    player->sendMessage("主人: " + land->owner);
    player->sendMessage("范围: (" + std::to_string((int)land->x1) + "," + 
                        std::to_string((int)land->z1) + ") ~ (" +
                        std::to_string((int)land->x2) + "," + 
                        std::to_string((int)land->z2) + ")");
}
python
land_data = land.get_land_at(x, y, z, dim)
if land_data:
    player.send_message(f"领地: {land_data.name}")
    player.send_message(f"主人: {land_data.owner}")
    player.send_message(f"范围: ({int(land_data.x1)},{int(land_data.z1)}) ~ ({int(land_data.x2)},{int(land_data.z2)})")

权限查询接口

hasPermission - 检查领地权限

检查玩家在指定领地是否有特定权限。

参数类型说明
playerstring玩家名称
landNamestring领地名称
permstring权限名 (build/break/use/attack 等)
返回值类型说明
hasPermbool是否有权限
cpp
bool canBuild = service->hasPermission("Steve", "我的领地", "build");
if (canBuild) {
    // 允许建造
}
python
can_build = land.has_permission("Steve", "我的领地", "build")
if can_build:
    # 允许建造

hasPermissionAt - 检查坐标权限

检查玩家在指定坐标是否有特定权限(自动查找领地)。

参数类型说明
playerstring玩家名称
xfloatX坐标
yfloatY坐标
zfloatZ坐标
dimint维度
permstring权限名
返回值类型说明
hasPermbool是否有权限(不在领地内返回true)
cpp
bool canBuild = service->hasPermissionAt("Steve", x, y, z, dim, "build");
if (!canBuild) {
    player->sendMessage("§c你没有在这里建造的权限!");
    event.setCancelled(true);
}
python
can_build = land.has_permission_at("Steve", x, y, z, dim, "build")
if not can_build:
    player.send_message("§c你没有在这里建造的权限!")
    event.cancelled = True

getPlayerRole - 获取玩家角色

获取玩家在领地中的角色。

参数类型说明
landNamestring领地名称
playerstring玩家名称
返回值类型说明
rolestring角色:owner/member/guest,空字符串表示访客
cpp
std::string role = service->getPlayerRole("我的领地", "Steve");
if (role == "owner") {
    player->sendMessage("你是领地主人!");
} else if (role == "member") {
    player->sendMessage("你是领地成员");
} else {
    player->sendMessage("你是访客");
}
python
role = land.get_player_role("我的领地", "Steve")
if role == "owner":
    player.send_message("你是领地主人!")
elif role == "member":
    player.send_message("你是领地成员")
else:
    player.send_message("你是访客")

getFlag - 获取权限标志

获取领地的权限标志设置。

参数类型说明
landNamestring领地名称
flagstring标志名 (explosion/pvp/mob_spawn 等)
rolestring角色(可选)
返回值类型说明
valuebool标志值
cpp
bool allowExplosion = service->getFlag("我的领地", "explosion", "");
if (!allowExplosion) {
    // 阻止爆炸
}
python
allow_explosion = land.get_flag("我的领地", "explosion", "")
if not allow_explosion:
    # 阻止爆炸

成员管理接口

getLandMembers - 获取领地成员

获取领地的所有成员列表。

参数类型说明
landNamestring领地名称
返回值类型说明
membersvector<LandMember>成员列表
cpp
auto members = service->getLandMembers("我的领地");
for (auto &m : members) {
    player->sendMessage(m.player + " - " + m.role);
}
python
members = land.get_land_members("我的领地")
for m in members:
    player.send_message(f"{m.player} - {m.role}")

领地工具接口

getLandArea - 获取领地面积

获取领地的面积(方块数)。

参数类型说明
landNamestring领地名称
返回值类型说明
areaint64领地面积(方块数)
cpp
int64_t area = service->getLandArea("我的领地");
player->sendMessage("领地面积: " + std::to_string(area) + " 格");
python
area = land.get_land_area("我的领地")
player.send_message(f"领地面积: {area} 格")

isLandOwner - 判断是否为主人

判断玩家是否为领地主人。

参数类型说明
landNamestring领地名称
playerstring玩家名称
返回值类型说明
isOwnerbool是否为主人
cpp
bool isOwner = service->isLandOwner("我的领地", "Steve");
if (isOwner) {
    player->sendMessage("你是领地主人!");
}
python
is_owner = land.is_land_owner("我的领地", "Steve")
if is_owner:
    player.send_message("你是领地主人!")

getTeleportPos - 获取传送点

获取领地的传送点坐标。

参数类型说明
landNamestring领地名称
返回值类型说明
posTeleportPos传送点信息
cpp
auto tp = service->getTeleportPos("我的领地");
if (tp.isSet) {
    player->sendMessage("传送点: (" + std::to_string((int)tp.x) + "," + 
                        std::to_string((int)tp.y) + "," + 
                        std::to_string((int)tp.z) + ")");
}
python
tp = land.get_teleport_pos("我的领地")
if tp and tp.is_set:
    player.send_message(f"传送点: ({int(tp.x)},{int(tp.y)},{int(tp.z)})")

领地列表接口

getPlayerLands - 获取玩家领地

获取玩家拥有的所有领地。

参数类型说明
playerstring玩家名称
返回值类型说明
landsvector<LandData>领地列表
cpp
auto lands = service->getPlayerLands("Steve");
player->sendMessage("你拥有 " + std::to_string(lands.size()) + " 块领地");
for (auto &l : lands) {
    player->sendMessage(" - " + l.name);
}
python
lands = land.get_player_lands("Steve")
player.send_message(f"你拥有 {len(lands)} 块领地")
for l in lands:
    player.send_message(f" - {l.name}")

getAllLands - 获取所有领地

获取服务器上的所有领地。

返回值类型说明
landsvector<LandData>所有领地列表
cpp
auto allLands = service->getAllLands();
player->sendMessage("服务器共有 " + std::to_string(allLands.size()) + " 块领地");
python
all_lands = land.get_all_lands()
player.send_message(f"服务器共有 {len(all_lands)} 块领地")

防护罩接口

isShieldEnabled - 防护罩是否启用

检查领地防护罩是否启用。

参数类型说明
landNamestring领地名称
返回值类型说明
enabledbool是否启用
cpp
bool shieldOn = service->isShieldEnabled("我的领地");
if (shieldOn) {
    player->sendMessage("防护罩已启用!");
}
python
shield_on = land.is_shield_enabled("我的领地")
if shield_on:
    player.send_message("防护罩已启用!")

isShieldPurchased - 防护罩是否已购买

检查领地是否已购买防护罩。

参数类型说明
landNamestring领地名称
返回值类型说明
purchasedbool是否已购买
cpp
bool hasBought = service->isShieldPurchased("我的领地");
if (!hasBought) {
    player->sendMessage("你还没有购买防护罩!");
}
python
has_bought = land.is_shield_purchased("我的领地")
if not has_bought:
    player.send_message("你还没有购买防护罩!")

领地扩展接口 (仅C++)

expandLand - 扩展领地范围

向各方向扩展领地边界。

参数类型说明
landNamestring领地名称
ex1intX负方向扩展格数
ex2intX正方向扩展格数
ey1intY负方向扩展格数
ey2intY正方向扩展格数
ez1intZ负方向扩展格数
ez2intZ正方向扩展格数
返回值类型说明
successbool是否成功
cpp
// 向四周各扩展10格
bool success = service->expandLand("我的领地", 10, 10, 0, 0, 10, 10);
if (success) {
    player->sendMessage("领地扩展成功!");
}

完整示例:保护插件

cpp
#include "land_api.h"

void onBlockPlace(BlockPlaceEvent &event) {
    auto service = getServer().getServiceManager().load<ILandService>("LandService");
    if (!service) return;
    
    auto &player = event.getPlayer();
    auto &block = event.getBlock();
    float x = block.getX();
    float y = block.getY();
    float z = block.getZ();
    int dim = player.getDimension().getType();
    
    if (!service->hasPermissionAt(player.getName(), x, y, z, dim, "build")) {
        player.sendMessage("§c你没有在这个领地建造的权限!");
        event.setCancelled(true);
    }
}
python
from land_api import LandAPI

class ProtectionPlugin(Plugin):
    def on_enable(self):
        self.land = LandAPI(self)
        
    def on_block_place(self, event):
        player = event.player
        block = event.block
        x, y, z = block.x, block.y, block.z
        dim = player.location.dimension.type.value
        
        if not self.land.has_permission_at(player.name, x, y, z, dim, "build"):
            player.send_message("§c你没有在这个领地建造的权限!")
            event.cancelled = True

C++ 接入方式

方式一:ServiceManager(推荐)

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 加载成功!");
        }
    }
};

头文件

land_api.h 复制到你的项目 include 目录。


Python 接入方式

直接数据库连接(推荐)

Python API 直接连接 ZXland 的 SQLite 数据库,无需额外依赖。

python
from land_api import LandAPI

class MyPlugin(Plugin):
    def on_enable(self):
        self.land = LandAPI(self)
        
        if self.land.is_connected():
            self.logger.info("ZXland API 连接成功!")

工作原理

Python 插件 → LandAPI → SQLite数据库 (lands.db)

注意

Python API 是只读的,只能查询数据,不能修改领地。 如需修改领地,请使用游戏内命令或 C++ API。


📥 下载 API 文件

C++ 开发

Python 开发

  • land_api.py - Python API 文件(只需这 1 个!)

插件下载

超级简单

Python 开发者只需下载 land_api.py 一个文件,无需任何额外依赖!

Made with ❤️ by EVIL-ZIXIE