Compare commits

...

4 Commits

Author SHA1 Message Date
11123822e4 add javadoc addr to doc 2024-10-17 21:04:48 +08:00
3f6b7c8a92 add api as submodule 2024-10-17 21:01:21 +08:00
3b09e6c885 remove api to standalone repo 2024-10-17 20:58:24 +08:00
2d2fb9a233 Enforce some api capabilities. 2024-10-17 15:25:27 +08:00
16 changed files with 29 additions and 676 deletions

3
.gitmodules vendored Normal file
View File

@ -0,0 +1,3 @@
[submodule "api"]
path = api
url = https://github.com/ColdeZhang/DominionAPI.git

1
api Submodule

@ -0,0 +1 @@
Subproject commit 9a22a3e453ef0391741b6282a5b7f7219bfbbb0c

View File

@ -1,51 +0,0 @@
plugins {
id("java")
id("maven-publish")
}
java {
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
withJavadocJar()
withSourcesJar()
}
// utf-8
tasks.withType<JavaCompile> {
options.encoding = "UTF-8"
}
tasks.withType<Javadoc> {
options.encoding = "UTF-8"
}
dependencies {
compileOnly("io.papermc.paper:paper-api:1.20.1-R0.1-SNAPSHOT")
}
publishing {
publications {
create<MavenPublication>("mavenJava") {
groupId = "cn.lunadeer"
artifactId = "DominionAPI"
version = "2.1-SNAPSHOT"
// Add only the necessary artifacts manually to avoid conflicts
artifact(tasks.jar.get()) // The main JAR file without classifier
artifact(tasks.named<Jar>("sourcesJar").get()) {
classifier = "sources"
}
artifact(tasks.named<Jar>("javadocJar").get()) {
classifier = "javadoc"
}
}
}
repositories {
maven {
url = uri("https://ssl.lunadeer.cn:14454/repository/maven-snapshots/")
credentials {
// from m2 settings.xml
username = project.findProperty("nexusUsername")?.toString()
password = project.findProperty("nexusPassword")?.toString()
}
}
}
}

View File

@ -1,52 +0,0 @@
package cn.lunadeer.dominion.api;
import org.bukkit.Bukkit;
public class Dominion {
private final static int[] requiredDominionVersion = new int[]{2, 12, 0};
public static DominionAPI getInstance() throws ClassNotFoundException, NoSuchFieldException, IllegalAccessException {
if (!isDominionEnabled()) {
throw new IllegalStateException("Dominion is not installed.");
}
if (!isVersionCompatible(requiredDominionVersion)) {
throw new IllegalStateException("DominionAPI is not compatible with the current version of Dominion."
+ " Required Dominion version: " + requiredDominionVersion[0] + "." + requiredDominionVersion[1] + "." + requiredDominionVersion[2]);
}
// 通过反射获取 Cache 类中的 instance 字段
var instanceField = Class.forName("cn.lunadeer.dominion.DominionInterface").getDeclaredField("instance");
// 设置可访问
instanceField.setAccessible(true);
// 返回 Cache 的实例
return (DominionAPI) instanceField.get(null);
}
public static boolean isDominionEnabled() {
return Bukkit.getPluginManager().isPluginEnabled("Dominion");
}
private static int[] getDominionVersion() {
var plugin = Bukkit.getPluginManager().getPlugin("Dominion");
if (plugin == null) {
return new int[]{0, 0, 0};
}
var version = plugin.getDescription().getVersion().replaceAll("[^0-9.]", "");
var versionSplit = version.split("\\.");
var versionInt = new int[versionSplit.length];
for (int i = 0; i < versionSplit.length; i++) {
versionInt[i] = Integer.parseInt(versionSplit[i]);
}
return versionInt;
}
private static boolean isVersionCompatible(int[] requiredVersion) {
var version = getDominionVersion();
for (int i = 0; i < requiredVersion.length; i++) {
if (version[i] < requiredVersion[i]) {
return false;
}
}
return true;
}
}

View File

@ -1,103 +0,0 @@
package cn.lunadeer.dominion.api;
import cn.lunadeer.dominion.api.dtos.DominionDTO;
import cn.lunadeer.dominion.api.dtos.Flag;
import cn.lunadeer.dominion.api.dtos.GroupDTO;
import cn.lunadeer.dominion.api.dtos.MemberDTO;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.List;
import java.util.UUID;
public interface DominionAPI {
/**
* 从缓存获取所有领地信息
*
* @return 所有领地信息
*/
@NotNull List<DominionDTO> getAllDominions();
/**
* 从缓存获取玩家当前所在领地
*
* @param player 玩家
* @return 玩家当前所在领地 如果玩家不在任何领地内则返回null
*/
@Nullable DominionDTO getPlayerCurrentDominion(@NotNull Player player);
/**
* 从缓存获取指定位置的领地信息
*
* @param loc 位置
* @return 领地信息 如果位置不在任何领地内则返回null
*/
@Nullable DominionDTO getDominionByLoc(@NotNull Location loc);
/**
* 从缓存根据 ID 获取权限组对象
*
* @param id 权限组 ID
* @return 权限组对象 如果权限组不存在则返回null
*/
@Nullable GroupDTO getGroup(@NotNull Integer id);
/**
* 从缓存获取玩家在指定领地的成员信息
*
* @param player 玩家
* @param dominion 领地
* @return 玩家在指定领地的成员信息 如果玩家不属于领地成员则返回null
*/
@Nullable MemberDTO getMember(@NotNull Player player, @NotNull DominionDTO dominion);
/**
* 从缓存获取玩家在指定领地的成员信息
*
* @param player_uuid 玩家 UUID
* @param dominion 领地
* @return 玩家在指定领地的成员信息 如果玩家不属于领地成员则返回null
*/
@Nullable MemberDTO getMember(@NotNull UUID player_uuid, @NotNull DominionDTO dominion);
/**
* 从缓存获取指定 ID 的领地信息
*
* @param id 领地 ID
* @return 领地信息 如果领地不存在则返回null
*/
@Nullable DominionDTO getDominion(@NotNull Integer id);
/**
* 从缓存获取玩家当前正在使用的权限组称号
*
* @param uuid 玩家 UUID
* @return 权限组对象 如果玩家没有使用任何权限组则返回null
*/
@Nullable GroupDTO getPlayerUsingGroupTitle(@NotNull UUID uuid);
/**
* 获取 flags.yml 中启用的所有环境权限对象environment部分
*
* @return 环境权限列表
*/
@NotNull List<Flag> getEnvironmentFlagsEnabled();
/**
* 获取 flags.yml 中启用的所有玩家权限对象privilege部分
*
* @return 玩家权限列表
*/
@NotNull List<Flag> getPrivilegeFlagsEnabled();
/**
* 通过权限名称获取权限对象即使权限没有启用此方法也会返回权限对象
*
* @param flagName 权限名称 displayName
* @return 权限对象 如果权限不存在则返回null
*/
@Nullable Flag getFlagByName(@NotNull String flagName);
}

View File

@ -1,261 +0,0 @@
package cn.lunadeer.dominion.api.dtos;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.Map;
import java.util.UUID;
public interface DominionDTO {
/**
* 获取领地 ID
*
* @return 领地 ID
*/
@NotNull Integer getId();
/**
* 获取领地所有者 UUID
*
* @return 领地所有者 UUID
*/
@NotNull UUID getOwner();
/**
* 设置领地所有者设置成功后返回领地对象设置失败返回null
*
* @param owner 领地所有者 UUID
* @return 领地对象
*/
@Nullable DominionDTO setOwner(UUID owner);
/**
* 设置领地所有者设置成功后返回领地对象设置失败返回null
*
* @param owner 领地所有者
* @return 领地对象
*/
@Nullable DominionDTO setOwner(Player owner);
/**
* 获取领地名称
*
* @return 领地名称
*/
@NotNull String getName();
/**
* 设置领地名称设置成功后返回领地对象设置失败返回null
*
* @param name 领地名称
* @return 领地对象
*/
@Nullable DominionDTO setName(String name);
/**
* 获取领地所在世界如果世界不存在则返回null
*
* @return 领地所在世界
*/
@Nullable World getWorld();
/**
* 获取领地所在世界 UUID该接口返回的 UUID 一定不为 null但是不保证世界一定存在
* 如果需要判断世界是否存在请使用 {@link #getWorld()} 方法
*
* @return 领地所在世界 UUID
*/
@NotNull UUID getWorldUid();
/**
* 获取领地角点坐标1小角点的X坐标X1 &lt; X2
*
* @return 领地角点坐标1小角点的X坐标
*/
@NotNull Integer getX1();
/**
* 获取领地角点坐标1小角点的Y坐标Y1 &lt; Y2
*
* @return 领地角点坐标1小角点的Y坐标
*/
@NotNull Integer getY1();
/**
* 获取领地角点坐标1小角点的Z坐标Z1 &lt; Z2
*
* @return 领地角点坐标1小角点的Z坐标
*/
@NotNull Integer getZ1();
/**
* 获取领地角点坐标2大角点的X坐标X2 &gt; X1
*
* @return 领地角点坐标2大角点的X坐标
*/
@NotNull Integer getX2();
/**
* 获取领地角点坐标2大角点的Y坐标Y2 &gt; Y1
*
* @return 领地角点坐标2大角点的Y坐标
*/
@NotNull Integer getY2();
/**
* 获取领地角点坐标2大角点的Z坐标Z2 &gt; Z1
*
* @return 领地角点坐标2大角点的Z坐标
*/
@NotNull Integer getZ2();
/**
* 设置领地角点坐标设置成功后返回领地对象设置失败返回null
*
* @param x1 小角点X坐标
* @param y1 小角点Y坐标
* @param z1 小角点Z坐标
* @param x2 大角点X坐标
* @param y2 大角点Y坐标
* @param z2 大角点Z坐标
* @return 领地对象
*/
@Nullable DominionDTO setXYZ(Integer x1, Integer y1, Integer z1, Integer x2, Integer y2, Integer z2);
/**
* 设置领地角点坐标设置成功后返回领地对象设置失败返回null
*
* @param cords 领地角点坐标数组长度为6依次为 x1, y1, z1, x2, y2, z2
* @return 领地对象
*/
@Nullable DominionDTO setXYZ(int[] cords);
/**
* 获取领地面积
*
* @return 领地面积
*/
@NotNull Integer getSquare();
/**
* 获取领地体积
*
* @return 领地体积
*/
@NotNull Integer getVolume();
/**
* 获取领地X轴向东西向宽度
*
* @return 领地X轴向东西向宽度
*/
@NotNull Integer getWidthX();
/**
* 获取领地Y轴向上下向高度
*
* @return 领地Y轴向上下向高度
*/
@NotNull Integer getHeight();
/**
* 获取领地Z轴向南北向宽度
*
* @return 领地Z轴向南北向宽度
*/
@NotNull Integer getWidthZ();
/**
* 获取父领地 ID
*
* @return 父领地 ID 如果没有父领地则返回 -1
*/
@NotNull Integer getParentDomId();
/**
* 获取领地欢迎提示语
*
* @return 领地欢迎提示语
*/
@NotNull String getJoinMessage();
/**
* 设置领地欢迎提示语设置成功后返回领地对象设置失败返回null
*
* @param joinMessage 领地欢迎提示语
* @return 领地对象
*/
@Nullable DominionDTO setJoinMessage(String joinMessage);
/**
* 获取领地离开提示语
*
* @return 领地离开提示语
*/
@NotNull String getLeaveMessage();
/**
* 设置领地离开提示语设置成功后返回领地对象设置失败返回null
*
* @param leaveMessage 领地离开提示语
* @return 领地对象
*/
@Nullable DominionDTO setLeaveMessage(String leaveMessage);
/**
* 获取领地所有环境配置
*
* @return 领地环境权限配置
*/
@NotNull Map<Flag, Boolean> getEnvironmentFlagValue();
/**
* 获取领地访客所有权限配置
*
* @return 领地访客权限配置
*/
@NotNull Map<Flag, Boolean> getGuestPrivilegeFlagValue();
/**
* 设置领地某个环境配置或访客权限的值设置成功后返回领地对象设置失败返回null
*
* @param flag 权限
* @param value 权限值
* @return 领地对象
*/
@Nullable DominionDTO setFlagValue(Flag flag, Boolean value);
/**
* 获取领地传送点坐标
*
* @return 领地传送点坐标 如果没有设置传送点则返回null
*/
@Nullable Location getTpLocation();
/**
* 领地角点坐标1小角点小角点的xyz小于大角点的xyz
*
* @return 领地角点坐标1
*/
@NotNull Location getLocation1();
/**
* 领地角点坐标2大角点大角点的xyz大于小角点的xyz
*
* @return 领地角点坐标2
*/
@NotNull Location getLocation2();
int getColorR();
int getColorG();
int getColorB();
@NotNull String getColor();
int getColorHex();
}

View File

@ -1,49 +0,0 @@
package cn.lunadeer.dominion.api.dtos;
import org.jetbrains.annotations.NotNull;
public interface Flag {
/**
* 权限名称英文
*
* @return 权限名称
*/
@NotNull String getFlagName();
/**
* 权限显示名称中文
* 该名称从languages文件中加载
*
* @return 权限显示名称
*/
@NotNull String getDisplayName();
/**
* 权限描述
* 该描述从languages文件中加载
*
* @return 权限描述
*/
@NotNull String getDescription();
/**
* 获取权限默认值
*
* @return 权限默认值
*/
@NotNull Boolean getDefaultValue();
/**
* 获取权限是否启用
*
* @return 权限是否启用
*/
@NotNull Boolean getEnable();
/**
* 获取权限是否为环境设置
*
* @return 权限是否为环境设置
*/
@NotNull Boolean isEnvironmentFlag();
}

View File

@ -1,73 +0,0 @@
package cn.lunadeer.dominion.api.dtos;
import net.kyori.adventure.text.Component;
import org.jetbrains.annotations.NotNull;
import java.util.Map;
public interface GroupDTO {
/**
* 获取权限组 ID
*
* @return 权限组 ID
*/
@NotNull Integer getId();
/**
* 获取权限组所属领地 ID
*
* @return 权限组所属领地 ID
*/
@NotNull Integer getDomID();
/**
* 获取权限组名称普通字符不含颜色代码
* 绝大多数情况下应该使用该方法获取权限组名称
*
* @return 权限组名称
*/
@NotNull String getNamePlain();
/**
* 获取权限组名称原始字符包含颜色代码
*
* @return 权限组名称
*/
@NotNull String getNameRaw();
/**
* 获取权限组名称带颜色 kyori.adventure.text.Component 类型
*
* @return 权限组名称带颜色
*/
@NotNull Component getNameColoredComponent();
/**
* 获取权限组名称带颜色 Bukkit类型
*
* @return 权限组名称带颜色
*/
@NotNull String getNameColoredBukkit();
/**
* 获取权限组是否为管理员组
*
* @return 是否为管理员组
*/
@NotNull Boolean getAdmin();
/**
* 获取权限组某个权限配置
*
* @param flag 权限
* @return 权限配置值如果权限不存在则返回默认值
*/
@NotNull Boolean getFlagValue(@NotNull Flag flag);
/**
* 获取权限组所有权限配置
*
* @return 权限配置
*/
@NotNull Map<Flag, Boolean> getFlagsValue();
}

View File

@ -1,58 +0,0 @@
package cn.lunadeer.dominion.api.dtos;
import org.jetbrains.annotations.NotNull;
import java.util.Map;
import java.util.UUID;
public interface MemberDTO {
/**
* 获取成员 ID
*
* @return 成员 ID
*/
Integer getId();
/**
* 获取成员 UUID
*
* @return 成员 UUID
*/
UUID getPlayerUUID();
/**
* 成员是否为管理员
*
* @return 是否为管理员
*/
Boolean getAdmin();
/**
* 获取成员所属领地 ID
*
* @return 领地 ID
*/
Integer getDomID();
/**
* 获取成员所属权限组 ID
*
* @return 权限组 ID 如果成员不属于任何权限组则返回-1
*/
Integer getGroupId();
/**
* 获取成员某个权限配置
*
* @param flag 权限
* @return 权限配置值如果权限不存在则返回默认值
*/
@NotNull Boolean getFlagValue(Flag flag);
/**
* 获取成员所有权限配置
*
* @return 权限配置值
*/
@NotNull Map<Flag, Boolean> getFlagsValue();
}

View File

@ -1,23 +0,0 @@
package cn.lunadeer.dominion.events;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
public class DominionCreateEvent extends Event implements Cancellable {
@Override
public boolean isCancelled() {
return false;
}
@Override
public void setCancelled(boolean cancel) {
}
@Override
public @NotNull HandlerList getHandlers() {
return null;
}
}

View File

@ -410,7 +410,7 @@ public class DominionDTO implements cn.lunadeer.dominion.api.dtos.DominionDTO {
}
@Override
public DominionDTO setFlagValue(Flag flag, Boolean value) {
public DominionDTO setFlagValue(@NotNull Flag flag, @NotNull Boolean value) {
flags.put(flag, value);
Field flagField = new Field(flag.getFlagName(), value);
return doUpdate(new UpdateRow().field(flagField));

View File

@ -11,6 +11,7 @@ import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
import cn.lunadeer.minecraftpluginutils.databse.syntax.UpdateRow;
import net.kyori.adventure.text.Component;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.sql.ResultSet;
import java.util.ArrayList;
@ -84,20 +85,26 @@ public class GroupDTO implements cn.lunadeer.dominion.api.dtos.GroupDTO {
return flags;
}
public GroupDTO setName(String name) {
@Override
public @Nullable GroupDTO setName(@NotNull String name) {
this.name_color.value = name;
this.name_raw.value = ColorParser.getPlainText(name);
UpdateRow updateRow = new UpdateRow().field(this.name_raw).field(this.name_color);
return doUpdate(updateRow);
}
public GroupDTO setAdmin(Boolean admin) {
@Override
public @Nullable GroupDTO setAdmin(@NotNull Boolean admin) {
this.admin.value = admin;
UpdateRow updateRow = new UpdateRow().field(this.admin);
return doUpdate(updateRow);
}
public GroupDTO setFlagValue(Flag flag, Boolean value) {
@Override
public GroupDTO setFlagValue(@NotNull Flag flag, @NotNull Boolean value) {
if (flag.isEnvironmentFlag()) {
return null;
}
flags.put(flag, value);
Field f = new Field(flag.getFlagName(), value);
UpdateRow updateRow = new UpdateRow().field(f);

View File

@ -8,6 +8,7 @@ import cn.lunadeer.minecraftpluginutils.databse.FieldType;
import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
import cn.lunadeer.minecraftpluginutils.databse.syntax.UpdateRow;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.sql.ResultSet;
import java.util.*;
@ -166,14 +167,19 @@ public class MemberDTO implements cn.lunadeer.dominion.api.dtos.MemberDTO {
return flags;
}
public MemberDTO setFlagValue(Flag flag, Boolean value) {
@Override
public MemberDTO setFlagValue(@NotNull Flag flag, @NotNull Boolean value) {
if (flag.isEnvironmentFlag()) {
return null;
}
flags.put(flag, value);
Field f = new Field(flag.getFlagName(), value);
UpdateRow updateRow = new UpdateRow().field(f);
return doUpdate(updateRow);
}
public MemberDTO setAdmin(Boolean admin) {
@Override
public @Nullable MemberDTO setAdmin(@NotNull Boolean admin) {
this.admin.value = admin;
UpdateRow updateRow = new UpdateRow().field(this.admin);
return doUpdate(updateRow);

View File

@ -95,3 +95,5 @@ public void onEnable() {
```
[示例项目地址](https://github.com/ColdeZhang/DominionAddonExample)。
[Javadoc地址](https://coldezhang.github.io/DominionAPI/)。

View File

@ -95,3 +95,5 @@ public void onEnable() {
```
[示例项目地址](https://github.com/ColdeZhang/DominionAddonExample)。
[Javadoc地址](https://coldezhang.github.io/DominionAPI/)。

View File

@ -95,3 +95,5 @@ public void onEnable() {
```
[示例项目地址](https://github.com/ColdeZhang/DominionAddonExample)。
[Javadoc地址](https://coldezhang.github.io/DominionAPI/)。