Compare commits
15 Commits
master
...
global-tel
Author | SHA1 | Date | |
---|---|---|---|
cf41e40596 | |||
4213d14fd6 | |||
59ccbbdd5c | |||
a1a1ef7990 | |||
929b91fc2b | |||
3f8309e127 | |||
4184816569 | |||
5f95067637 | |||
bce9c700a0 | |||
53cf8f351d | |||
485edbc4fa | |||
d514984e56 | |||
b1d76a8cff | |||
3da1e60e6a | |||
8675d15e25 |
@ -1,4 +1,4 @@
|
|||||||
name: Java CI-CD with Gradle
|
name: Java CI-CD with Maven
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
@ -13,17 +13,18 @@ jobs:
|
|||||||
uses: https://ssl.lunadeer.cn:14446/actions/checkout@v3
|
uses: https://ssl.lunadeer.cn:14446/actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
- name: "Set up JDK 21"
|
- name: "Set up Maven"
|
||||||
|
uses: https://ssl.lunadeer.cn:14446/actions/setup-maven@v4
|
||||||
|
- name: "Set up JDK 17"
|
||||||
uses: https://ssl.lunadeer.cn:14446/actions/setup-java@v3
|
uses: https://ssl.lunadeer.cn:14446/actions/setup-java@v3
|
||||||
with:
|
with:
|
||||||
java-version: '21'
|
java-version: '17'
|
||||||
distribution: 'zulu'
|
distribution: 'zulu'
|
||||||
cache: gradle
|
cache: maven
|
||||||
- name: "Build with Gradle"
|
- name: "Build with Maven"
|
||||||
run: |
|
run: mvn -B package --file pom.xml
|
||||||
./gradlew buildPlugin
|
|
||||||
- name: "Copy jar to staging"
|
- name: "Copy jar to staging"
|
||||||
run: mkdir staging && cp build/libs/*.jar staging/
|
run: mkdir staging && cp target/*.jar staging
|
||||||
- name: "Build & test"
|
- name: "Build & test"
|
||||||
run: |
|
run: |
|
||||||
echo "done!"
|
echo "done!"
|
||||||
|
27
.github/workflows/main.yml
vendored
27
.github/workflows/main.yml
vendored
@ -1,4 +1,4 @@
|
|||||||
name: Java CI-CD with Gradle
|
name: Java CI-CD with Maven
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
@ -11,24 +11,33 @@ jobs:
|
|||||||
permissions: write-all
|
permissions: write-all
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
|
# 下载代码
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
- name: Set up JDK 21
|
- name: Set up JDK 17
|
||||||
|
# 安装 JDK
|
||||||
uses: actions/setup-java@v3
|
uses: actions/setup-java@v3
|
||||||
with:
|
with:
|
||||||
java-version: '21'
|
java-version: '17'
|
||||||
distribution: 'zulu'
|
distribution: 'temurin'
|
||||||
cache: gradle
|
cache: maven
|
||||||
- name: "Build with Gradle"
|
# Maven 打包
|
||||||
run: ./gradlew buildPlugin
|
- name: Build with Maven
|
||||||
- name: "Copy jar to staging"
|
run: mvn -B package --file pom.xml
|
||||||
run: mkdir staging && cp build/libs/*.jar staging/
|
# 将打包好的 Jar 包 放到 staging 文件夹
|
||||||
|
- run: mkdir staging && cp target/*.jar staging
|
||||||
|
# 设置 jobs Maven pom 版本环境变量
|
||||||
|
- name: Set Release version env variable
|
||||||
|
run: |
|
||||||
|
echo "RELEASE_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV
|
||||||
- name: "Build & test"
|
- name: "Build & test"
|
||||||
run: |
|
run: |
|
||||||
echo "done!"
|
echo "done!"
|
||||||
|
# 上传文件并发布 Release
|
||||||
- uses: "marvinpinto/action-automatic-releases@latest"
|
- uses: "marvinpinto/action-automatic-releases@latest"
|
||||||
with:
|
with:
|
||||||
repo_token: "${{ secrets.GITHUB_TOKEN }}"
|
repo_token: "${{ secrets.GITHUB_TOKEN }}"
|
||||||
automatic_release_tag: "latest"
|
automatic_release_tag: "latest"
|
||||||
prerelease: false
|
prerelease: false
|
||||||
|
title: "Release ${{ env.RELEASE_VERSION }}"
|
||||||
files: |
|
files: |
|
||||||
staging/*.jar
|
staging/*.jar
|
||||||
|
9
LICENSE
9
LICENSE
@ -1,9 +0,0 @@
|
|||||||
MIT License
|
|
||||||
|
|
||||||
Copyright (c) 2024 ZhangYuheng
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
26
README.md
26
README.md
@ -1,20 +1,22 @@
|
|||||||
<div align="center">
|
<div style="text-align: center;">
|
||||||
|
|
||||||
<img src="https://ssl.lunadeer.cn:14437/i/2024/03/28/6604f0cec0f0e.png" alt="" width="70%">
|
<img src="https://ssl.lunadeer.cn:14437/i/2024/03/28/6604f0cec0f0e.png" alt="" width="70%">
|
||||||
|
|
||||||
### [开源地址](https://github.com/DeerGiteaMirror/Dominion) | [文档地址](https://ssl.lunadeer.cn:14448/doc/23/)
|
### [开源地址](https://ssl.lunadeer.cn:14446/zhangyuheng/Dominion) | [文档地址](https://ssl.lunadeer.cn:14448/doc/23/)
|
||||||
|
|
||||||
### [下载页面](https://ssl.lunadeer.cn:14446/zhangyuheng/Dominion/releases)
|
### [下载页面](https://ssl.lunadeer.cn:14446/zhangyuheng/Dominion/releases)
|
||||||
|
|
||||||
### [统计页面](https://bstats.org/plugin/bukkit/Dominion/21445) | [Hangar](https://hangar.papermc.io/zhangyuheng/Dominion)
|
### [统计页面](https://bstats.org/plugin/bukkit/Dominion/21445) | [Hangar](https://hangar.papermc.io/zhangyuheng/Dominion)
|
||||||
|
|
||||||
|
[![CodeFactor](https://www.codefactor.io/repository/github/deergiteamirror/dominion/badge/master)](https://www.codefactor.io/repository/github/deergiteamirror/dominion/overview/master)
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
## 简介
|
## 简介
|
||||||
|
|
||||||
鉴于 Residence 插件的作者项目较多,维护压力大,无法及时跟进新版本以及适配Folia核心。故开发此插件,旨在平替纯净版生存服Residence的使用(支持从 Res 迁移数据)。
|
鉴于 Residence 插件的作者项目较多,维护压力大,无法及时跟进新版本以及适配Folia核心。故开发此插件,旨在平替纯净版生存服Residence的使用。
|
||||||
|
|
||||||
**请注意,本插件目前处于中期测试稳定阶段,绝大多数bug或漏洞已被修复,目前已具备完全可用性。但不排除仍然存在某些问题,如果遇到任何 BUG 欢迎及时发送邮件或添加QQ群告知,感激不尽。**
|
请注意,本插件仍然处于测试阶段,因此可能存在一定的行为控制漏洞。如果遇到此类遗漏的行为控制欢迎即使发送邮件或添加QQ告知,感激不尽。
|
||||||
|
|
||||||
## 说明
|
## 说明
|
||||||
|
|
||||||
@ -29,7 +31,7 @@
|
|||||||
## 功能介绍
|
## 功能介绍
|
||||||
|
|
||||||
- 支持 Postgresql、Mysql、Sqlite3 存储数据;
|
- 支持 Postgresql、Mysql、Sqlite3 存储数据;
|
||||||
- 支持 BlueMap、Dynmap 卫星地图渲染;
|
- 支持BlueMap卫星地图渲染;
|
||||||
- 支持为玩家单独设置特权;
|
- 支持为玩家单独设置特权;
|
||||||
- 支持设置领地管理员;
|
- 支持设置领地管理员;
|
||||||
- 支持子领地;
|
- 支持子领地;
|
||||||
@ -38,25 +40,21 @@
|
|||||||
- 领地区域可视化;
|
- 领地区域可视化;
|
||||||
- 管理员可在游戏内使用TUI配置领地系统;
|
- 管理员可在游戏内使用TUI配置领地系统;
|
||||||
- 支持[从 Residence 迁移](https://ssl.lunadeer.cn:14448/doc/73/)领地数据(1.33.7+);
|
- 支持[从 Residence 迁移](https://ssl.lunadeer.cn:14448/doc/73/)领地数据(1.33.7+);
|
||||||
- 超高性能(一个坐标在10127个领地内的搜索平均耗时不超过0.2ms,仅占用1tick的不到0.4%时间)
|
|
||||||
|
|
||||||
<div align="center">
|
<div style="text-align: center;">
|
||||||
|
|
||||||
### 创建领地
|
创建领地
|
||||||
|
|
||||||
<img src="https://ssl.lunadeer.cn:14437/i/2024/05/10/663debf78eca4.gif" alt="" width="60%">
|
<img src="https://ssl.lunadeer.cn:14437/i/2024/05/10/663debf78eca4.gif" alt="" width="60%">
|
||||||
|
|
||||||
### 权限管理
|
权限管理
|
||||||
|
|
||||||
<img src="https://ssl.lunadeer.cn:14437/i/2024/05/10/663debe052786.gif" alt="" width="60%">
|
<img src="https://ssl.lunadeer.cn:14437/i/2024/05/10/663debe052786.gif" alt="" width="60%">
|
||||||
|
|
||||||
### 配置
|
配置
|
||||||
|
|
||||||
<img src="https://ssl.lunadeer.cn:14437/i/2024/05/10/663debec11dad.gif" alt="" width="60%">
|
<img src="https://ssl.lunadeer.cn:14437/i/2024/05/10/663debec11dad.gif" alt="" width="60%">
|
||||||
|
|
||||||
### 高性能
|
|
||||||
|
|
||||||
<img src="https://ssl.lunadeer.cn:14437/i/2024/08/13/66bad56cc9fac.png" alt="" width="60%">
|
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -64,8 +62,6 @@
|
|||||||
|
|
||||||
- 1.20.1+ (Bukkit、Spigot、Paper、Folia)
|
- 1.20.1+ (Bukkit、Spigot、Paper、Folia)
|
||||||
|
|
||||||
> 需要使用 Java21 运行你的服务端,如果你还在使用 Java17 可以放心替换为 Java21,理论上 1.20.1+ 版本的服务端核心可以直接升级到 Java21 启动。
|
|
||||||
|
|
||||||
## TODO
|
## TODO
|
||||||
|
|
||||||
- WebUI
|
- WebUI
|
||||||
|
@ -1,73 +0,0 @@
|
|||||||
plugins {
|
|
||||||
id("java")
|
|
||||||
id("com.github.johnrengelman.shadow") version "8.1.1"
|
|
||||||
}
|
|
||||||
|
|
||||||
group = "cn.lunadeer"
|
|
||||||
version = "2.3.0-beta"
|
|
||||||
|
|
||||||
java {
|
|
||||||
toolchain.languageVersion.set(JavaLanguageVersion.of(21))
|
|
||||||
}
|
|
||||||
|
|
||||||
// utf-8
|
|
||||||
tasks.withType<JavaCompile> {
|
|
||||||
options.encoding = "UTF-8"
|
|
||||||
}
|
|
||||||
|
|
||||||
allprojects {
|
|
||||||
apply(plugin = "java")
|
|
||||||
apply(plugin = "com.github.johnrengelman.shadow")
|
|
||||||
|
|
||||||
repositories {
|
|
||||||
mavenLocal()
|
|
||||||
mavenCentral()
|
|
||||||
maven("https://oss.sonatype.org/content/groups/public")
|
|
||||||
maven("https://repo.papermc.io/repository/maven-public/")
|
|
||||||
maven("https://jitpack.io")
|
|
||||||
maven("https://repo.mikeprimm.com/")
|
|
||||||
maven("https://ssl.lunadeer.cn:14454/repository/maven-snapshots/")
|
|
||||||
maven("https://repo.extendedclip.com/content/repositories/placeholderapi/")
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
compileOnly("com.github.BlueMap-Minecraft:BlueMapAPI:v2.6.2")
|
|
||||||
compileOnly("us.dynmap:DynmapCoreAPI:3.4")
|
|
||||||
compileOnly("me.clip:placeholderapi:2.11.6")
|
|
||||||
|
|
||||||
implementation("cn.lunadeer:MinecraftPluginUtils:1.3.7-SNAPSHOT")
|
|
||||||
implementation("org.yaml:snakeyaml:2.0")
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.processResources {
|
|
||||||
outputs.upToDateWhen { false }
|
|
||||||
// replace @version@ in plugin.yml with project version
|
|
||||||
filesMatching("**/plugin.yml") {
|
|
||||||
filter {
|
|
||||||
it.replace("@version@", rootProject.version.toString())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.shadowJar {
|
|
||||||
archiveClassifier.set("")
|
|
||||||
archiveVersion.set(project.version.toString())
|
|
||||||
dependsOn(tasks.withType<ProcessResources>())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
implementation(project(":core"))
|
|
||||||
implementation(project(":v1_20_1"))
|
|
||||||
implementation(project(":v1_21"))
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.shadowJar {
|
|
||||||
archiveClassifier.set("")
|
|
||||||
archiveVersion.set(project.version.toString())
|
|
||||||
}
|
|
||||||
|
|
||||||
tasks.register("buildPlugin") { // <<<< RUN THIS TASK TO BUILD PLUGIN
|
|
||||||
dependsOn(tasks.clean)
|
|
||||||
dependsOn(tasks.shadowJar)
|
|
||||||
}
|
|
@ -1,16 +0,0 @@
|
|||||||
plugins {
|
|
||||||
id("java")
|
|
||||||
}
|
|
||||||
|
|
||||||
java {
|
|
||||||
toolchain.languageVersion.set(JavaLanguageVersion.of(21))
|
|
||||||
}
|
|
||||||
|
|
||||||
// utf-8
|
|
||||||
tasks.withType<JavaCompile> {
|
|
||||||
options.encoding = "UTF-8"
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
compileOnly("io.papermc.paper:paper-api:1.20.1-R0.1-SNAPSHOT")
|
|
||||||
}
|
|
@ -1,64 +0,0 @@
|
|||||||
package cn.lunadeer.dominion;
|
|
||||||
|
|
||||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
|
||||||
|
|
||||||
public class EventsRegister {
|
|
||||||
|
|
||||||
private JavaPlugin plugin;
|
|
||||||
|
|
||||||
public EventsRegister(JavaPlugin plugin) {
|
|
||||||
APIVersion version = GetAPIVersion(plugin);
|
|
||||||
this.plugin = plugin;
|
|
||||||
if (version == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
switch (version) {
|
|
||||||
case v1_21:
|
|
||||||
XLogger.debug("Load API version: 1.21");
|
|
||||||
registerEvents("cn.lunadeer.dominion.events_v1_21.PlayerEvents");
|
|
||||||
registerEvents("cn.lunadeer.dominion.events_v1_21.EnvironmentEvents");
|
|
||||||
registerEvents("cn.lunadeer.dominion.events_v1_21.SelectPointEvents");
|
|
||||||
break;
|
|
||||||
case v1_20_1:
|
|
||||||
XLogger.debug("Load API version: 1.20.1");
|
|
||||||
registerEvents("cn.lunadeer.dominion.events_v1_20_1.PlayerEvents");
|
|
||||||
registerEvents("cn.lunadeer.dominion.events_v1_20_1.EnvironmentEvents");
|
|
||||||
registerEvents("cn.lunadeer.dominion.events_v1_20_1.SelectPointEvents");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) {
|
|
||||||
XLogger.err("Failed to register events: %s", e.getMessage());
|
|
||||||
plugin.getServer().getPluginManager().disablePlugin(plugin);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
enum APIVersion {
|
|
||||||
v1_21,
|
|
||||||
v1_20_1
|
|
||||||
}
|
|
||||||
|
|
||||||
private static APIVersion GetAPIVersion(JavaPlugin plugin) {
|
|
||||||
String version = plugin.getServer().getBukkitVersion();
|
|
||||||
if (version.contains("1.21")) {
|
|
||||||
return APIVersion.v1_21;
|
|
||||||
} else if (version.contains("1.20.1")
|
|
||||||
|| version.contains("1.20.4")
|
|
||||||
|| version.contains("1.20.6")) {
|
|
||||||
return APIVersion.v1_20_1;
|
|
||||||
}
|
|
||||||
XLogger.err("Unsupported API version: %s", version);
|
|
||||||
plugin.getServer().getPluginManager().disablePlugin(plugin);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void registerEvents(String className) throws ClassNotFoundException, IllegalAccessException, InstantiationException {
|
|
||||||
Class<?> clazz = Class.forName(className);
|
|
||||||
Listener listener = (Listener) clazz.newInstance();
|
|
||||||
Bukkit.getPluginManager().registerEvents(listener, plugin);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,69 +0,0 @@
|
|||||||
package cn.lunadeer.dominion.commands;
|
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Cache;
|
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
|
||||||
import cn.lunadeer.dominion.dtos.GroupDTO;
|
|
||||||
import cn.lunadeer.dominion.dtos.MemberDTO;
|
|
||||||
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
|
||||||
import cn.lunadeer.dominion.tuis.TitleList;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.hasPermission;
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.getPage;
|
|
||||||
|
|
||||||
public class Title {
|
|
||||||
|
|
||||||
public static void use_title(CommandSender sender, String[] args) {
|
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Player bukkit_player = playerOnly(sender);
|
|
||||||
if (bukkit_player == null) return;
|
|
||||||
if (args.length < 2) {
|
|
||||||
Notification.error(sender, "用法: /dominion use_title <权限组ID>");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
int id = Integer.parseInt(args[1]);
|
|
||||||
PlayerDTO player = PlayerDTO.get(bukkit_player);
|
|
||||||
if (id == -1) {
|
|
||||||
player.setUsingGroupTitleID(id);
|
|
||||||
Notification.info(sender, "成功卸下权限组称号");
|
|
||||||
} else {
|
|
||||||
GroupDTO group = Cache.instance.getGroup(id);
|
|
||||||
if (group == null) {
|
|
||||||
Notification.error(sender, "权限组不存在");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
DominionDTO dominion = Cache.instance.getDominion(group.getDomID());
|
|
||||||
if (dominion == null) {
|
|
||||||
Notification.error(sender, "权限组 %s 所属领地不存在", group.getName());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!dominion.getOwner().equals(bukkit_player.getUniqueId())) {
|
|
||||||
MemberDTO member = Cache.instance.getMember(bukkit_player, dominion);
|
|
||||||
if (member == null) {
|
|
||||||
Notification.error(sender, "你不是 %s 的成员,无法使用其称号", dominion.getName());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!Objects.equals(member.getGroupId(), group.getId())) {
|
|
||||||
Notification.error(sender, "你不属于权限组 %s,无法使用其称号", group.getName());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
player.setUsingGroupTitleID(group.getId());
|
|
||||||
Notification.info(sender, "成功使用权限组 %s 称号", group.getName());
|
|
||||||
}
|
|
||||||
int page = getPage(args, 2);
|
|
||||||
TitleList.show(sender, page);
|
|
||||||
} catch (Exception e) {
|
|
||||||
Notification.error(sender, "使用称号失败: " + e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,241 +0,0 @@
|
|||||||
package cn.lunadeer.dominion.managers;
|
|
||||||
|
|
||||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class GroupLimit {
|
|
||||||
private final YamlConfiguration config;
|
|
||||||
private final File file_path;
|
|
||||||
private Integer min_y;
|
|
||||||
private Integer max_y;
|
|
||||||
private Integer size_x;
|
|
||||||
private Integer size_y;
|
|
||||||
private Integer size_z;
|
|
||||||
private Integer amount;
|
|
||||||
private Integer depth;
|
|
||||||
private Boolean vert;
|
|
||||||
private List<String> world_black_list;
|
|
||||||
private Double price;
|
|
||||||
private Boolean only_xz;
|
|
||||||
private Double refund;
|
|
||||||
|
|
||||||
public GroupLimit() {
|
|
||||||
this.file_path = null;
|
|
||||||
this.config = new YamlConfiguration();
|
|
||||||
}
|
|
||||||
|
|
||||||
public GroupLimit(File filePath) {
|
|
||||||
this.file_path = filePath;
|
|
||||||
config = YamlConfiguration.loadConfiguration(this.file_path);
|
|
||||||
setLimitMinY(config.getInt("MinY", -64));
|
|
||||||
setLimitMaxY(config.getInt("MaxY", 320));
|
|
||||||
if (getLimitMinY() >= getLimitMaxY()) {
|
|
||||||
XLogger.err("权限组 %s 的 MinY 不能大于等于 MaxY,已重置为 -64 和 320", this.file_path.getName());
|
|
||||||
setLimitMinY(-64);
|
|
||||||
setLimitMaxY(320);
|
|
||||||
}
|
|
||||||
setLimitSizeX(config.getInt("SizeX", 128));
|
|
||||||
if (getLimitSizeX() <= 4 && getLimitSizeX() != -1) {
|
|
||||||
XLogger.err("权限组 %s 的 SizeX 设置过小,已重置为 128", this.file_path.getName());
|
|
||||||
setLimitSizeX(128);
|
|
||||||
}
|
|
||||||
setLimitSizeY(config.getInt("SizeY", 64));
|
|
||||||
if (getLimitSizeY() <= 4 && getLimitSizeY() != -1) {
|
|
||||||
XLogger.err("权限组 %s 的 SizeY 设置过小,已重置为 64", this.file_path.getName());
|
|
||||||
setLimitSizeY(64);
|
|
||||||
}
|
|
||||||
setLimitSizeZ(config.getInt("SizeZ", 128));
|
|
||||||
if (getLimitSizeZ() <= 4 && getLimitSizeZ() != -1) {
|
|
||||||
XLogger.err("权限组 %s 的 SizeZ 设置过小,已重置为 128", this.file_path.getName());
|
|
||||||
setLimitSizeZ(128);
|
|
||||||
}
|
|
||||||
setLimitAmount(config.getInt("Amount", 10));
|
|
||||||
if (getLimitAmount() <= 0 && getLimitAmount() != -1) {
|
|
||||||
XLogger.err("权限组 %s 的 Amount 设置不合法,已重置为 10", this.file_path.getName());
|
|
||||||
setLimitAmount(10);
|
|
||||||
}
|
|
||||||
setLimitDepth(config.getInt("Depth", 3));
|
|
||||||
if (getLimitDepth() <= 0 && getLimitDepth() != -1) {
|
|
||||||
XLogger.err("权限组 %s 的 Depth 设置不合法,已重置为 3", this.file_path.getName());
|
|
||||||
setLimitDepth(3);
|
|
||||||
}
|
|
||||||
setLimitVert(config.getBoolean("Vert", false));
|
|
||||||
setWorldBlackList(config.getStringList("WorldBlackList"));
|
|
||||||
setPrice(config.getDouble("Price", 10.0));
|
|
||||||
if (getPrice() < 0.0) {
|
|
||||||
XLogger.err("权限组 %s 的 Price 设置不合法,已重置为 10.0", this.file_path.getName());
|
|
||||||
setPrice(10.0);
|
|
||||||
}
|
|
||||||
setPriceOnlyXZ(config.getBoolean("OnlyXZ", false));
|
|
||||||
setRefundRatio(config.getDouble("Refund", 0.85));
|
|
||||||
if (getRefundRatio() < 0.0 || getRefundRatio() > 1.0) {
|
|
||||||
XLogger.err("权限组 %s 的 Refund 设置不合法,已重置为 0.85", this.file_path.getName());
|
|
||||||
setRefundRatio(0.85);
|
|
||||||
}
|
|
||||||
save(); // 保存一次,确保文件中的数据是合法的
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getLimitMinY() {
|
|
||||||
return min_y;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getLimitMaxY() {
|
|
||||||
return max_y;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getLimitSizeX() {
|
|
||||||
return size_x;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getLimitSizeY() {
|
|
||||||
return size_y;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getLimitSizeZ() {
|
|
||||||
return size_z;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getLimitAmount() {
|
|
||||||
return amount;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getLimitDepth() {
|
|
||||||
return depth;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Boolean getLimitVert() {
|
|
||||||
return vert;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<String> getWorldBlackList() {
|
|
||||||
return world_black_list;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Double getPrice() {
|
|
||||||
return price;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Boolean getPriceOnlyXZ() {
|
|
||||||
return only_xz;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Double getRefundRatio() {
|
|
||||||
return refund;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public void setLimitMinY(Integer min_y) {
|
|
||||||
this.min_y = min_y;
|
|
||||||
this.config.set("MinY", min_y);
|
|
||||||
this.save();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLimitMaxY(Integer max_y) {
|
|
||||||
this.max_y = max_y;
|
|
||||||
this.config.set("MaxY", max_y);
|
|
||||||
this.save();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLimitSizeX(Integer size_x) {
|
|
||||||
this.size_x = size_x;
|
|
||||||
this.config.set("SizeX", size_x);
|
|
||||||
this.save();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLimitSizeY(Integer size_y) {
|
|
||||||
this.size_y = size_y;
|
|
||||||
this.config.set("SizeY", size_y);
|
|
||||||
this.save();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLimitSizeZ(Integer size_z) {
|
|
||||||
this.size_z = size_z;
|
|
||||||
this.config.set("SizeZ", size_z);
|
|
||||||
this.save();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLimitAmount(Integer amount) {
|
|
||||||
this.amount = amount;
|
|
||||||
this.config.set("Amount", amount);
|
|
||||||
this.save();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLimitDepth(Integer depth) {
|
|
||||||
this.depth = depth;
|
|
||||||
this.config.set("Depth", depth);
|
|
||||||
this.save();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLimitVert(Boolean vert) {
|
|
||||||
this.vert = vert;
|
|
||||||
this.config.set("Vert", vert);
|
|
||||||
this.save();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setWorldBlackList(List<String> world_black_list) {
|
|
||||||
this.world_black_list = world_black_list;
|
|
||||||
this.config.set("WorldBlackList", world_black_list);
|
|
||||||
this.save();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPrice(Double price) {
|
|
||||||
this.price = price;
|
|
||||||
this.config.set("Price", price);
|
|
||||||
this.save();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPriceOnlyXZ(Boolean only_xz) {
|
|
||||||
this.only_xz = only_xz;
|
|
||||||
this.config.set("OnlyXZ", only_xz);
|
|
||||||
this.save();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setRefundRatio(Double refund) {
|
|
||||||
this.refund = refund;
|
|
||||||
this.config.set("Refund", refund);
|
|
||||||
this.save();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void save() {
|
|
||||||
if (file_path == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
config.save(file_path);
|
|
||||||
} catch (Exception e) {
|
|
||||||
XLogger.err("Failed to save group limit file: " + file_path.getName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static Map<String, GroupLimit> loadGroups(JavaPlugin plugin) {
|
|
||||||
Map<String, GroupLimit> groups = new HashMap<>();
|
|
||||||
File root = plugin.getDataFolder();
|
|
||||||
File groupsDir = new File(root, "groups");
|
|
||||||
if (!groupsDir.exists()) {
|
|
||||||
// 创建文件夹 并且从jar中复制文件
|
|
||||||
plugin.saveResource("groups/sponsor.yml", true);
|
|
||||||
}
|
|
||||||
File[] files = groupsDir.listFiles();
|
|
||||||
if (files == null) {
|
|
||||||
return groups;
|
|
||||||
}
|
|
||||||
for (File file : files) {
|
|
||||||
String name = file.getName();
|
|
||||||
if (!name.endsWith(".yml")) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
String groupName = name.substring(0, name.length() - 4);
|
|
||||||
GroupLimit group = new GroupLimit(file);
|
|
||||||
groups.put(groupName, group);
|
|
||||||
}
|
|
||||||
XLogger.info("共加载了 %d 个领地组。", groups.size());
|
|
||||||
return groups;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,51 +0,0 @@
|
|||||||
package cn.lunadeer.dominion.managers;
|
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Cache;
|
|
||||||
import cn.lunadeer.dominion.dtos.GroupDTO;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
|
||||||
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
public class PlaceHolderApi extends PlaceholderExpansion {
|
|
||||||
|
|
||||||
private final JavaPlugin plugin;
|
|
||||||
|
|
||||||
public static PlaceHolderApi instance;
|
|
||||||
|
|
||||||
public PlaceHolderApi(JavaPlugin plugin) {
|
|
||||||
this.plugin = plugin;
|
|
||||||
this.register();
|
|
||||||
instance = this;
|
|
||||||
XLogger.info("成功注册 PlaceholderAPI 扩展");
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String onPlaceholderRequest(Player bukkitPlayer, @NotNull String params) {
|
|
||||||
if (params.equalsIgnoreCase("group_title")) {
|
|
||||||
GroupDTO group = Cache.instance.getPlayerUsingGroupTitle(bukkitPlayer.getUniqueId());
|
|
||||||
if (group == null) {
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
return group.getNameColoredBukkit();
|
|
||||||
}
|
|
||||||
return null; //
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull String getIdentifier() {
|
|
||||||
return "dominion";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull String getAuthor() {
|
|
||||||
return "zhangyuheng";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull String getVersion() {
|
|
||||||
return plugin.getPluginMeta().getVersion();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,57 +0,0 @@
|
|||||||
package cn.lunadeer.dominion.tuis;
|
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Cache;
|
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
|
||||||
import cn.lunadeer.dominion.dtos.GroupDTO;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.getPage;
|
|
||||||
|
|
||||||
public class TitleList {
|
|
||||||
|
|
||||||
public static void show(CommandSender sender, int page) {
|
|
||||||
show(sender, new String[]{String.valueOf(page)});
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void show(CommandSender sender, String[] args) {
|
|
||||||
Player player = playerOnly(sender);
|
|
||||||
if (player == null) return;
|
|
||||||
int page = getPage(args, 1);
|
|
||||||
ListView view = ListView.create(10, "/dominion title_list");
|
|
||||||
|
|
||||||
view.title("我可使用的权限组称号");
|
|
||||||
view.navigator(Line.create().append(Button.create("主菜单").setExecuteCommand("/dominion menu").build()).append("权限组称号列表"));
|
|
||||||
|
|
||||||
List<GroupDTO> groups = Cache.instance.getBelongGroupsOf(player.getUniqueId());
|
|
||||||
GroupDTO using = Cache.instance.getPlayerUsingGroupTitle(player.getUniqueId());
|
|
||||||
|
|
||||||
// 将其拥有的所有领地的权限组称号都加入列表 - 领地所有者可以使用其领地的任意权限组称号
|
|
||||||
List<DominionDTO> dominions = DominionDTO.selectByOwner(player.getUniqueId());
|
|
||||||
for (DominionDTO dominion : dominions) {
|
|
||||||
List<GroupDTO> groupsOfDom = GroupDTO.selectByDominionId(dominion.getId());
|
|
||||||
groups.addAll(groupsOfDom);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (GroupDTO group : groups) {
|
|
||||||
DominionDTO dominion = Cache.instance.getDominion(group.getDomID());
|
|
||||||
Line line = Line.create();
|
|
||||||
if (using != null && using.getId().equals(group.getId())) {
|
|
||||||
line.append(Button.createRed("卸下").setExecuteCommand("/dominion use_title -1").build());
|
|
||||||
} else {
|
|
||||||
line.append(Button.createGreen("使用").setExecuteCommand("/dominion use_title " + group.getId()).build());
|
|
||||||
}
|
|
||||||
line.append(group.getNameColoredComponent()).append("来自领地:" + dominion.getName());
|
|
||||||
view.add(line);
|
|
||||||
}
|
|
||||||
|
|
||||||
view.showOn(player, page);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,49 +0,0 @@
|
|||||||
package cn.lunadeer.dominion.utils;
|
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Dominion;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class CommandUtils {
|
|
||||||
public static Player playerOnly(CommandSender sender) {
|
|
||||||
if (!(sender instanceof Player)) {
|
|
||||||
Notification.error(sender, "该命令只能由玩家执行");
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return (Player) sender;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean hasPermission(CommandSender sender, String permission) {
|
|
||||||
if (!sender.hasPermission(permission)) {
|
|
||||||
Notification.error(sender, "你没有 %s 权限执行此命令", permission);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Map<Integer, Location> autoPoints(Player player) {
|
|
||||||
Integer size = Dominion.config.getAutoCreateRadius();
|
|
||||||
Location location = player.getLocation();
|
|
||||||
Location location1 = new Location(location.getWorld(), location.getX() - size, location.getY() - size, location.getZ() - size);
|
|
||||||
Location location2 = new Location(location.getWorld(), location.getX() + size, location.getY() + size, location.getZ() + size);
|
|
||||||
if (Dominion.config.getLimitVert(player)) {
|
|
||||||
location1.setY(Dominion.config.getLimitMinY(player));
|
|
||||||
location2.setY(Dominion.config.getLimitMaxY(player) - 1);
|
|
||||||
}
|
|
||||||
Map<Integer, Location> points = new HashMap<>();
|
|
||||||
points.put(0, location1);
|
|
||||||
points.put(1, location2);
|
|
||||||
Dominion.pointsSelect.put(player.getUniqueId(), points);
|
|
||||||
return points;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String CommandParser(String command, Object... args) {
|
|
||||||
return String.format(command, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,108 +0,0 @@
|
|||||||
package cn.lunadeer.dominion.utils;
|
|
||||||
|
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.Scheduler;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
|
||||||
import org.dynmap.DynmapCommonAPI;
|
|
||||||
import org.dynmap.DynmapCommonAPIListener;
|
|
||||||
import org.dynmap.markers.AreaMarker;
|
|
||||||
import org.dynmap.markers.MarkerAPI;
|
|
||||||
import org.dynmap.markers.MarkerSet;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class DynmapConnect extends DynmapCommonAPIListener {
|
|
||||||
|
|
||||||
public static DynmapConnect instance;
|
|
||||||
|
|
||||||
private MarkerSet markerSet_dominion = null;
|
|
||||||
private MarkerSet markerSet_mca = null;
|
|
||||||
|
|
||||||
public DynmapConnect() {
|
|
||||||
DynmapCommonAPIListener.register(this);
|
|
||||||
instance = this;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void apiEnabled(DynmapCommonAPI dynmapCommonAPI) {
|
|
||||||
MarkerAPI markerAPI = dynmapCommonAPI.getMarkerAPI();
|
|
||||||
this.markerSet_dominion = markerAPI.getMarkerSet("dominion");
|
|
||||||
if (this.markerSet_dominion == null) {
|
|
||||||
this.markerSet_dominion = markerAPI.createMarkerSet("dominion", "Dominion领地", null, false);
|
|
||||||
}
|
|
||||||
this.markerSet_mca = markerAPI.getMarkerSet("mca");
|
|
||||||
if (this.markerSet_mca == null) {
|
|
||||||
this.markerSet_mca = markerAPI.createMarkerSet("mca", "MCA文件", null, false);
|
|
||||||
}
|
|
||||||
XLogger.info("Dynmap 成功注册");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setDominionMarker(DominionDTO dominion) {
|
|
||||||
String nameLabel = "<div>" + dominion.getName() + "</div>";
|
|
||||||
double[] xx = {dominion.getX1(), dominion.getX2()};
|
|
||||||
double[] zz = {dominion.getZ1(), dominion.getZ2()};
|
|
||||||
if (dominion.getWorld() == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
AreaMarker marker = this.markerSet_dominion.createAreaMarker(
|
|
||||||
dominion.getId().toString(),
|
|
||||||
nameLabel,
|
|
||||||
true,
|
|
||||||
dominion.getWorld().getName(),
|
|
||||||
xx,
|
|
||||||
zz,
|
|
||||||
false
|
|
||||||
);
|
|
||||||
marker.setFillStyle(0.2, dominion.getColorHex());
|
|
||||||
marker.setLineStyle(1, 0.8, dominion.getColorHex());
|
|
||||||
XLogger.debug("Add dominion marker: " + dominion.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setDominionMarkers(List<DominionDTO> dominions) {
|
|
||||||
Scheduler.runTaskAsync(() -> {
|
|
||||||
if (this.markerSet_dominion == null) {
|
|
||||||
XLogger.warn("无法连接到 Dynmap,如果你不打算使用卫星地图渲染建议前往配置文件关闭此功能。");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.markerSet_dominion.getAreaMarkers().forEach(AreaMarker::deleteMarker);
|
|
||||||
for (DominionDTO dominion : dominions) {
|
|
||||||
this.setDominionMarker(dominion);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setMCAMarkers(Map<String, List<String>> mca_files) {
|
|
||||||
Scheduler.runTaskAsync(() -> {
|
|
||||||
if (this.markerSet_mca == null) {
|
|
||||||
XLogger.warn("无法连接到 Dynmap,如果你不打算使用卫星地图渲染建议前往配置文件关闭此功能。");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
this.markerSet_mca.getAreaMarkers().forEach(AreaMarker::deleteMarker);
|
|
||||||
for (Map.Entry<String, List<String>> entry : mca_files.entrySet()) {
|
|
||||||
for (String file : entry.getValue()) {
|
|
||||||
String[] cords = file.split("\\.");
|
|
||||||
int world_x1 = Integer.parseInt(cords[1]) * 512;
|
|
||||||
int world_x2 = (Integer.parseInt(cords[1]) + 1) * 512;
|
|
||||||
int world_z1 = Integer.parseInt(cords[2]) * 512;
|
|
||||||
int world_z2 = (Integer.parseInt(cords[2]) + 1) * 512;
|
|
||||||
String nameLabel = "<div>" + file + "</div>";
|
|
||||||
double[] xx = {world_x1, world_x2};
|
|
||||||
double[] zz = {world_z1, world_z2};
|
|
||||||
AreaMarker marker = this.markerSet_mca.createAreaMarker(
|
|
||||||
file,
|
|
||||||
nameLabel,
|
|
||||||
true,
|
|
||||||
entry.getKey(),
|
|
||||||
xx,
|
|
||||||
zz,
|
|
||||||
false
|
|
||||||
);
|
|
||||||
marker.setFillStyle(0.2, 0x00CC00);
|
|
||||||
marker.setLineStyle(1, 0.8, 0x00CC00);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,31 +0,0 @@
|
|||||||
package cn.lunadeer.dominion.utils;
|
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Cache;
|
|
||||||
import cn.lunadeer.dominion.Dominion;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class MapRender {
|
|
||||||
|
|
||||||
public static void render() {
|
|
||||||
if (Dominion.config.getBlueMap()) {
|
|
||||||
BlueMapConnect.render();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Dominion.config.getDynmap()) {
|
|
||||||
DynmapConnect.instance.setDominionMarkers(Cache.instance.getDominions());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void renderMCA(Map<String, List<String>> mca_files) {
|
|
||||||
if (Dominion.config.getBlueMap()) {
|
|
||||||
BlueMapConnect.renderMCA(mca_files);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Dominion.config.getDynmap()) {
|
|
||||||
DynmapConnect.instance.setMCAMarkers(mca_files);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,21 +0,0 @@
|
|||||||
package cn.lunadeer.dominion.utils;
|
|
||||||
|
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.ParticleRender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
public class Particle {
|
|
||||||
|
|
||||||
public static void showBorder(Player player, DominionDTO dominion) {
|
|
||||||
ParticleRender.showBoxFace(player,
|
|
||||||
dominion.getLocation1().getWorld(),
|
|
||||||
dominion.getLocation1().getBlockX(),
|
|
||||||
dominion.getLocation1().getBlockY(),
|
|
||||||
dominion.getLocation1().getBlockZ(),
|
|
||||||
dominion.getLocation2().getBlockX(),
|
|
||||||
dominion.getLocation2().getBlockY(),
|
|
||||||
dominion.getLocation2().getBlockZ()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,20 +0,0 @@
|
|||||||
# >---------------------------------<
|
|
||||||
# | 圈地限制特殊权限组配置 |
|
|
||||||
# >---------------------------------<
|
|
||||||
# 此文件可以作为模板,你可以将此文件复制后重命名为你想要的权限组名,然后修改里面的配置
|
|
||||||
# 如果你想给赞助玩家(或者VIP)一些特殊优惠,例如更少的圈地价格、更大的领地等,你可以在这里配置
|
|
||||||
# 详细说明参阅 > https://ssl.lunadeer.cn:14448/doc/82/
|
|
||||||
|
|
||||||
|
|
||||||
MinY: -64 # 最小Y坐标
|
|
||||||
MaxY: 320 # 最大Y坐标
|
|
||||||
SizeX: 128 # X方向最大长度 -1:表示不限制
|
|
||||||
SizeY: 64 # Y方向最大长度 -1:表示不限制
|
|
||||||
SizeZ: 128 # Z方向最大长度 -1:表示不限制
|
|
||||||
Amount: 10 # 最大领地数量 -1:表示不限制
|
|
||||||
Depth: 3 # 子领地深度 0:不允许子领地 -1:不限制
|
|
||||||
Vert: false # 是否自动延伸到 MaxY 和 MinY
|
|
||||||
WorldBlackList: [ ] # 不允许领地的世界
|
|
||||||
Price: 10.0 # 方块单价
|
|
||||||
OnlyXZ: false # 是否只计算xz平面积
|
|
||||||
Refund: 0.85 # 删除领地退还比例
|
|
@ -1,21 +0,0 @@
|
|||||||
name: Dominion
|
|
||||||
version: @version@
|
|
||||||
main: cn.lunadeer.dominion.Dominion
|
|
||||||
api-version: '1.20'
|
|
||||||
folia-supported: true
|
|
||||||
softdepend:
|
|
||||||
- Vault
|
|
||||||
- dynmap
|
|
||||||
- PlaceholderAPI
|
|
||||||
commands:
|
|
||||||
Dominion:
|
|
||||||
description: 领地插件命令
|
|
||||||
usage: /dominion <cmd>
|
|
||||||
aliases: [ dominion, dom ]
|
|
||||||
permissions:
|
|
||||||
dominion.admin:
|
|
||||||
description: 领地插件管理员权限
|
|
||||||
default: op
|
|
||||||
dominion.default:
|
|
||||||
description: 领地插件用户权限
|
|
||||||
default: true
|
|
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
Binary file not shown.
1
gradle/wrapper/gradle-wrapper.properties
vendored
1
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1 +0,0 @@
|
|||||||
distributionUrl=https://mirrors.cloud.tencent.com/gradle/gradle-8.8-bin.zip
|
|
234
gradlew
vendored
234
gradlew
vendored
@ -1,234 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
|
|
||||||
#
|
|
||||||
# Copyright © 2015-2021 the original authors.
|
|
||||||
#
|
|
||||||
# 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
|
|
||||||
#
|
|
||||||
# https://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.
|
|
||||||
#
|
|
||||||
|
|
||||||
##############################################################################
|
|
||||||
#
|
|
||||||
# Gradle start up script for POSIX generated by Gradle.
|
|
||||||
#
|
|
||||||
# Important for running:
|
|
||||||
#
|
|
||||||
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
|
|
||||||
# noncompliant, but you have some other compliant shell such as ksh or
|
|
||||||
# bash, then to run this script, type that shell name before the whole
|
|
||||||
# command line, like:
|
|
||||||
#
|
|
||||||
# ksh Gradle
|
|
||||||
#
|
|
||||||
# Busybox and similar reduced shells will NOT work, because this script
|
|
||||||
# requires all of these POSIX shell features:
|
|
||||||
# * functions;
|
|
||||||
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
|
|
||||||
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
|
|
||||||
# * compound commands having a testable exit status, especially «case»;
|
|
||||||
# * various built-in commands including «command», «set», and «ulimit».
|
|
||||||
#
|
|
||||||
# Important for patching:
|
|
||||||
#
|
|
||||||
# (2) This script targets any POSIX shell, so it avoids extensions provided
|
|
||||||
# by Bash, Ksh, etc; in particular arrays are avoided.
|
|
||||||
#
|
|
||||||
# The "traditional" practice of packing multiple parameters into a
|
|
||||||
# space-separated string is a well documented source of bugs and security
|
|
||||||
# problems, so this is (mostly) avoided, by progressively accumulating
|
|
||||||
# options in "$@", and eventually passing that to Java.
|
|
||||||
#
|
|
||||||
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
|
|
||||||
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
|
|
||||||
# see the in-line comments for details.
|
|
||||||
#
|
|
||||||
# There are tweaks for specific operating systems such as AIX, CygWin,
|
|
||||||
# Darwin, MinGW, and NonStop.
|
|
||||||
#
|
|
||||||
# (3) This script is generated from the Groovy template
|
|
||||||
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
|
|
||||||
# within the Gradle project.
|
|
||||||
#
|
|
||||||
# You can find Gradle at https://github.com/gradle/gradle/.
|
|
||||||
#
|
|
||||||
##############################################################################
|
|
||||||
|
|
||||||
# Attempt to set APP_HOME
|
|
||||||
|
|
||||||
# Resolve links: $0 may be a link
|
|
||||||
app_path=$0
|
|
||||||
|
|
||||||
# Need this for daisy-chained symlinks.
|
|
||||||
while
|
|
||||||
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
|
|
||||||
[ -h "$app_path" ]
|
|
||||||
do
|
|
||||||
ls=$( ls -ld "$app_path" )
|
|
||||||
link=${ls#*' -> '}
|
|
||||||
case $link in #(
|
|
||||||
/*) app_path=$link ;; #(
|
|
||||||
*) app_path=$APP_HOME$link ;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
|
|
||||||
|
|
||||||
APP_NAME="Gradle"
|
|
||||||
APP_BASE_NAME=${0##*/}
|
|
||||||
|
|
||||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
|
||||||
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
|
||||||
|
|
||||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
|
||||||
MAX_FD=maximum
|
|
||||||
|
|
||||||
warn () {
|
|
||||||
echo "$*"
|
|
||||||
} >&2
|
|
||||||
|
|
||||||
die () {
|
|
||||||
echo
|
|
||||||
echo "$*"
|
|
||||||
echo
|
|
||||||
exit 1
|
|
||||||
} >&2
|
|
||||||
|
|
||||||
# OS specific support (must be 'true' or 'false').
|
|
||||||
cygwin=false
|
|
||||||
msys=false
|
|
||||||
darwin=false
|
|
||||||
nonstop=false
|
|
||||||
case "$( uname )" in #(
|
|
||||||
CYGWIN* ) cygwin=true ;; #(
|
|
||||||
Darwin* ) darwin=true ;; #(
|
|
||||||
MSYS* | MINGW* ) msys=true ;; #(
|
|
||||||
NONSTOP* ) nonstop=true ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
|
|
||||||
|
|
||||||
|
|
||||||
# Determine the Java command to use to start the JVM.
|
|
||||||
if [ -n "$JAVA_HOME" ] ; then
|
|
||||||
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
|
|
||||||
# IBM's JDK on AIX uses strange locations for the executables
|
|
||||||
JAVACMD=$JAVA_HOME/jre/sh/java
|
|
||||||
else
|
|
||||||
JAVACMD=$JAVA_HOME/bin/java
|
|
||||||
fi
|
|
||||||
if [ ! -x "$JAVACMD" ] ; then
|
|
||||||
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
|
|
||||||
|
|
||||||
Please set the JAVA_HOME variable in your environment to match the
|
|
||||||
location of your Java installation."
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
JAVACMD=java
|
|
||||||
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
|
||||||
|
|
||||||
Please set the JAVA_HOME variable in your environment to match the
|
|
||||||
location of your Java installation."
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Increase the maximum file descriptors if we can.
|
|
||||||
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
|
|
||||||
case $MAX_FD in #(
|
|
||||||
max*)
|
|
||||||
MAX_FD=$( ulimit -H -n ) ||
|
|
||||||
warn "Could not query maximum file descriptor limit"
|
|
||||||
esac
|
|
||||||
case $MAX_FD in #(
|
|
||||||
'' | soft) :;; #(
|
|
||||||
*)
|
|
||||||
ulimit -n "$MAX_FD" ||
|
|
||||||
warn "Could not set maximum file descriptor limit to $MAX_FD"
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Collect all arguments for the java command, stacking in reverse order:
|
|
||||||
# * args from the command line
|
|
||||||
# * the main class name
|
|
||||||
# * -classpath
|
|
||||||
# * -D...appname settings
|
|
||||||
# * --module-path (only if needed)
|
|
||||||
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
|
|
||||||
|
|
||||||
# For Cygwin or MSYS, switch paths to Windows format before running java
|
|
||||||
if "$cygwin" || "$msys" ; then
|
|
||||||
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
|
|
||||||
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
|
|
||||||
|
|
||||||
JAVACMD=$( cygpath --unix "$JAVACMD" )
|
|
||||||
|
|
||||||
# Now convert the arguments - kludge to limit ourselves to /bin/sh
|
|
||||||
for arg do
|
|
||||||
if
|
|
||||||
case $arg in #(
|
|
||||||
-*) false ;; # don't mess with options #(
|
|
||||||
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
|
|
||||||
[ -e "$t" ] ;; #(
|
|
||||||
*) false ;;
|
|
||||||
esac
|
|
||||||
then
|
|
||||||
arg=$( cygpath --path --ignore --mixed "$arg" )
|
|
||||||
fi
|
|
||||||
# Roll the args list around exactly as many times as the number of
|
|
||||||
# args, so each arg winds up back in the position where it started, but
|
|
||||||
# possibly modified.
|
|
||||||
#
|
|
||||||
# NB: a `for` loop captures its iteration list before it begins, so
|
|
||||||
# changing the positional parameters here affects neither the number of
|
|
||||||
# iterations, nor the values presented in `arg`.
|
|
||||||
shift # remove old arg
|
|
||||||
set -- "$@" "$arg" # push replacement arg
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Collect all arguments for the java command;
|
|
||||||
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
|
|
||||||
# shell script including quotes and variable substitutions, so put them in
|
|
||||||
# double quotes to make sure that they get re-expanded; and
|
|
||||||
# * put everything else in single quotes, so that it's not re-expanded.
|
|
||||||
|
|
||||||
set -- \
|
|
||||||
"-Dorg.gradle.appname=$APP_BASE_NAME" \
|
|
||||||
-classpath "$CLASSPATH" \
|
|
||||||
org.gradle.wrapper.GradleWrapperMain \
|
|
||||||
"$@"
|
|
||||||
|
|
||||||
# Use "xargs" to parse quoted args.
|
|
||||||
#
|
|
||||||
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
|
|
||||||
#
|
|
||||||
# In Bash we could simply go:
|
|
||||||
#
|
|
||||||
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
|
|
||||||
# set -- "${ARGS[@]}" "$@"
|
|
||||||
#
|
|
||||||
# but POSIX shell has neither arrays nor command substitution, so instead we
|
|
||||||
# post-process each arg (as a line of input to sed) to backslash-escape any
|
|
||||||
# character that might be a shell metacharacter, then use eval to reverse
|
|
||||||
# that process (while maintaining the separation between arguments), and wrap
|
|
||||||
# the whole thing up as a single "set" statement.
|
|
||||||
#
|
|
||||||
# This will of course break if any of these variables contains a newline or
|
|
||||||
# an unmatched quote.
|
|
||||||
#
|
|
||||||
|
|
||||||
eval "set -- $(
|
|
||||||
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
|
|
||||||
xargs -n1 |
|
|
||||||
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
|
|
||||||
tr '\n' ' '
|
|
||||||
)" '"$@"'
|
|
||||||
|
|
||||||
exec "$JAVACMD" "$@"
|
|
89
gradlew.bat
vendored
89
gradlew.bat
vendored
@ -1,89 +0,0 @@
|
|||||||
@rem
|
|
||||||
@rem Copyright 2015 the original author or authors.
|
|
||||||
@rem
|
|
||||||
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
@rem you may not use this file except in compliance with the License.
|
|
||||||
@rem You may obtain a copy of the License at
|
|
||||||
@rem
|
|
||||||
@rem https://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
@rem
|
|
||||||
@rem Unless required by applicable law or agreed to in writing, software
|
|
||||||
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
@rem See the License for the specific language governing permissions and
|
|
||||||
@rem limitations under the License.
|
|
||||||
@rem
|
|
||||||
|
|
||||||
@if "%DEBUG%" == "" @echo off
|
|
||||||
@rem ##########################################################################
|
|
||||||
@rem
|
|
||||||
@rem Gradle startup script for Windows
|
|
||||||
@rem
|
|
||||||
@rem ##########################################################################
|
|
||||||
|
|
||||||
@rem Set local scope for the variables with windows NT shell
|
|
||||||
if "%OS%"=="Windows_NT" setlocal
|
|
||||||
|
|
||||||
set DIRNAME=%~dp0
|
|
||||||
if "%DIRNAME%" == "" set DIRNAME=.
|
|
||||||
set APP_BASE_NAME=%~n0
|
|
||||||
set APP_HOME=%DIRNAME%
|
|
||||||
|
|
||||||
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
|
|
||||||
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
|
|
||||||
|
|
||||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
|
||||||
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
|
||||||
|
|
||||||
@rem Find java.exe
|
|
||||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
|
||||||
|
|
||||||
set JAVA_EXE=java.exe
|
|
||||||
%JAVA_EXE% -version >NUL 2>&1
|
|
||||||
if "%ERRORLEVEL%" == "0" goto execute
|
|
||||||
|
|
||||||
echo.
|
|
||||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
|
||||||
echo.
|
|
||||||
echo Please set the JAVA_HOME variable in your environment to match the
|
|
||||||
echo location of your Java installation.
|
|
||||||
|
|
||||||
goto fail
|
|
||||||
|
|
||||||
:findJavaFromJavaHome
|
|
||||||
set JAVA_HOME=%JAVA_HOME:"=%
|
|
||||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
|
||||||
|
|
||||||
if exist "%JAVA_EXE%" goto execute
|
|
||||||
|
|
||||||
echo.
|
|
||||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
|
||||||
echo.
|
|
||||||
echo Please set the JAVA_HOME variable in your environment to match the
|
|
||||||
echo location of your Java installation.
|
|
||||||
|
|
||||||
goto fail
|
|
||||||
|
|
||||||
:execute
|
|
||||||
@rem Setup the command line
|
|
||||||
|
|
||||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
|
||||||
|
|
||||||
|
|
||||||
@rem Execute Gradle
|
|
||||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
|
|
||||||
|
|
||||||
:end
|
|
||||||
@rem End local scope for the variables with windows NT shell
|
|
||||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
|
||||||
|
|
||||||
:fail
|
|
||||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
|
||||||
rem the _cmd.exe /c_ return code!
|
|
||||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
|
||||||
exit /b 1
|
|
||||||
|
|
||||||
:mainEnd
|
|
||||||
if "%OS%"=="Windows_NT" endlocal
|
|
||||||
|
|
||||||
:omega
|
|
99
pom.xml
Normal file
99
pom.xml
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
|
<groupId>cn.lunadeer</groupId>
|
||||||
|
<artifactId>Dominion</artifactId>
|
||||||
|
<version>1.36.1-global-tp-beta</version>
|
||||||
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
|
<name>Dominion</name>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<java.version>1.8</java.version>
|
||||||
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
|
<version>3.8.1</version>
|
||||||
|
<configuration>
|
||||||
|
<source>${java.version}</source>
|
||||||
|
<target>${java.version}</target>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-shade-plugin</artifactId>
|
||||||
|
<version>3.2.4</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>shade</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
<resources>
|
||||||
|
<resource>
|
||||||
|
<directory>src/main/resources</directory>
|
||||||
|
<filtering>true</filtering>
|
||||||
|
</resource>
|
||||||
|
</resources>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<id>spigotmc-repo</id>
|
||||||
|
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
|
||||||
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>sonatype</id>
|
||||||
|
<url>https://oss.sonatype.org/content/groups/public/</url>
|
||||||
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>papermc</id>
|
||||||
|
<url>https://repo.papermc.io/repository/maven-public/</url>
|
||||||
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>jitpack.io</id>
|
||||||
|
<url>https://jitpack.io</url>
|
||||||
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>lunadeer-repo</id>
|
||||||
|
<url>https://ssl.lunadeer.cn:14454/repository/maven-snapshots/</url>
|
||||||
|
</repository>
|
||||||
|
</repositories>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>dev.folia</groupId>
|
||||||
|
<artifactId>folia-api</artifactId>
|
||||||
|
<version>1.20.1-R0.1-SNAPSHOT</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>cn.lunadeer</groupId>
|
||||||
|
<artifactId>MinecraftPluginUtils</artifactId>
|
||||||
|
<version>1.3.4-SNAPSHOT</version>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.github.BlueMap-Minecraft</groupId>
|
||||||
|
<artifactId>BlueMapAPI</artifactId>
|
||||||
|
<version>v2.6.2</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.yaml</groupId>
|
||||||
|
<artifactId>snakeyaml</artifactId>
|
||||||
|
<version>2.0</version>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
</project>
|
@ -1,7 +0,0 @@
|
|||||||
rootProject.name = "Dominion"
|
|
||||||
|
|
||||||
include(
|
|
||||||
"core",
|
|
||||||
"v1_20_1",
|
|
||||||
"v1_21"
|
|
||||||
)
|
|
@ -1,6 +1,5 @@
|
|||||||
package cn.lunadeer.dominion.utils;
|
package cn.lunadeer.dominion;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Cache;
|
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
import cn.lunadeer.minecraftpluginutils.Scheduler;
|
import cn.lunadeer.minecraftpluginutils.Scheduler;
|
||||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||||
@ -16,18 +15,18 @@ import java.util.*;
|
|||||||
|
|
||||||
public class BlueMapConnect {
|
public class BlueMapConnect {
|
||||||
public static void render() {
|
public static void render() {
|
||||||
|
if (!Dominion.config.getBlueMap()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
Scheduler.runTaskAsync(() -> {
|
Scheduler.runTaskAsync(() -> {
|
||||||
try {
|
try {
|
||||||
BlueMapAPI.getInstance().ifPresent(api -> {
|
BlueMapAPI.getInstance().ifPresent(api -> {
|
||||||
Map<String, List<DominionDTO>> world_dominions = new HashMap<>();
|
Map<String, List<DominionDTO>> world_dominions = new HashMap<>();
|
||||||
for (DominionDTO dominion : Cache.instance.getDominions()) {
|
for (DominionDTO dominion : Cache.instance.getDominions()) {
|
||||||
if (dominion.getWorld() == null) {
|
if (!world_dominions.containsKey(dominion.getWorld())) {
|
||||||
continue;
|
world_dominions.put(dominion.getWorld(), new ArrayList<>());
|
||||||
}
|
}
|
||||||
if (!world_dominions.containsKey(dominion.getWorld().getName())) {
|
world_dominions.get(dominion.getWorld()).add(dominion);
|
||||||
world_dominions.put(dominion.getWorld().getName(), new ArrayList<>());
|
|
||||||
}
|
|
||||||
world_dominions.get(dominion.getWorld().getName()).add(dominion);
|
|
||||||
}
|
}
|
||||||
for (Map.Entry<String, List<DominionDTO>> d : world_dominions.entrySet()) {
|
for (Map.Entry<String, List<DominionDTO>> d : world_dominions.entrySet()) {
|
||||||
api.getWorld(d.getKey()).ifPresent(world -> {
|
api.getWorld(d.getKey()).ifPresent(world -> {
|
||||||
@ -77,6 +76,9 @@ public class BlueMapConnect {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void renderMCA(Map<String, List<String>> mca_files) {
|
public static void renderMCA(Map<String, List<String>> mca_files) {
|
||||||
|
if (!Dominion.config.getBlueMap()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
Scheduler.runTaskAsync(() -> {
|
Scheduler.runTaskAsync(() -> {
|
||||||
try {
|
try {
|
||||||
BlueMapAPI.getInstance().ifPresent(api -> {
|
BlueMapAPI.getInstance().ifPresent(api -> {
|
@ -1,29 +1,24 @@
|
|||||||
package cn.lunadeer.dominion;
|
package cn.lunadeer.dominion;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.dtos.*;
|
import cn.lunadeer.dominion.dtos.*;
|
||||||
import cn.lunadeer.dominion.utils.MapRender;
|
import cn.lunadeer.dominion.managers.GlobalTeleport;
|
||||||
import cn.lunadeer.dominion.utils.Particle;
|
|
||||||
import cn.lunadeer.dominion.utils.ResMigration;
|
import cn.lunadeer.dominion.utils.ResMigration;
|
||||||
import cn.lunadeer.minecraftpluginutils.AutoTimer;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.ParticleRender;
|
||||||
import cn.lunadeer.minecraftpluginutils.Scheduler;
|
import cn.lunadeer.minecraftpluginutils.Scheduler;
|
||||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.World;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
|
import javax.annotation.Nullable;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.concurrent.CompletableFuture;
|
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.DominionNode.getLocInDominionNode;
|
import static cn.lunadeer.dominion.DominionNode.getLocInDominionDTO;
|
||||||
import static cn.lunadeer.dominion.DominionNode.isInDominion;
|
|
||||||
|
|
||||||
public class Cache {
|
public class Cache {
|
||||||
|
|
||||||
@ -68,21 +63,25 @@ public class Cache {
|
|||||||
int count = 0;
|
int count = 0;
|
||||||
if (idToLoad == null) {
|
if (idToLoad == null) {
|
||||||
id_dominions = new ConcurrentHashMap<>();
|
id_dominions = new ConcurrentHashMap<>();
|
||||||
|
world_dominion_tree = new ConcurrentHashMap<>();
|
||||||
dominion_children = new ConcurrentHashMap<>();
|
dominion_children = new ConcurrentHashMap<>();
|
||||||
|
List<DominionDTO> dominions = DominionDTO.selectAllOfServer(GlobalTeleport.instance.getThisServerId());
|
||||||
List<DominionDTO> dominions = DominionDTO.selectAll();
|
|
||||||
CompletableFuture<Void> res = dominion_trees.initAsync(dominions);
|
|
||||||
count = dominions.size();
|
count = dominions.size();
|
||||||
|
Map<String, List<DominionDTO>> world_dominions = new HashMap<>();
|
||||||
for (DominionDTO d : dominions) {
|
for (DominionDTO d : dominions) {
|
||||||
|
if (!world_dominions.containsKey(d.getWorld())) {
|
||||||
|
world_dominions.put(d.getWorld(), new ArrayList<>());
|
||||||
|
}
|
||||||
|
world_dominions.get(d.getWorld()).add(d);
|
||||||
id_dominions.put(d.getId(), d);
|
id_dominions.put(d.getId(), d);
|
||||||
if (!dominion_children.containsKey(d.getParentDomId())) {
|
if (!dominion_children.containsKey(d.getParentDomId())) {
|
||||||
dominion_children.put(d.getParentDomId(), new ArrayList<>());
|
dominion_children.put(d.getParentDomId(), new ArrayList<>());
|
||||||
}
|
}
|
||||||
dominion_children.get(d.getParentDomId()).add(d.getId());
|
dominion_children.get(d.getParentDomId()).add(d.getId());
|
||||||
}
|
}
|
||||||
|
for (Map.Entry<String, List<DominionDTO>> entry : world_dominions.entrySet()) {
|
||||||
res.join(); // 等待树的构建完成
|
world_dominion_tree.put(entry.getKey(), DominionNode.BuildNodeTree(-1, entry.getValue()));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
DominionDTO dominion = DominionDTO.select(idToLoad);
|
DominionDTO dominion = DominionDTO.select(idToLoad);
|
||||||
if (dominion == null && id_dominions.containsKey(idToLoad)) {
|
if (dominion == null && id_dominions.containsKey(idToLoad)) {
|
||||||
@ -92,7 +91,7 @@ public class Cache {
|
|||||||
count = 1;
|
count = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
MapRender.render();
|
BlueMapConnect.render();
|
||||||
recheckPlayerState = true;
|
recheckPlayerState = true;
|
||||||
_last_update_dominion.set(System.currentTimeMillis());
|
_last_update_dominion.set(System.currentTimeMillis());
|
||||||
XLogger.debug("loadDominionsExecution cost: %d ms for %d dominions"
|
XLogger.debug("loadDominionsExecution cost: %d ms for %d dominions"
|
||||||
@ -184,13 +183,9 @@ public class Cache {
|
|||||||
if (groupId == null) {
|
if (groupId == null) {
|
||||||
id_groups = new ConcurrentHashMap<>();
|
id_groups = new ConcurrentHashMap<>();
|
||||||
List<GroupDTO> groups = GroupDTO.selectAll();
|
List<GroupDTO> groups = GroupDTO.selectAll();
|
||||||
List<PlayerDTO> players = PlayerDTO.all();
|
|
||||||
for (GroupDTO group : groups) {
|
for (GroupDTO group : groups) {
|
||||||
id_groups.put(group.getId(), group);
|
id_groups.put(group.getId(), group);
|
||||||
}
|
}
|
||||||
for (PlayerDTO player : players) {
|
|
||||||
map_player_using_group_title_id.put(player.getUuid(), player.getUsingGroupTitleID());
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
GroupDTO group = GroupDTO.select(groupId);
|
GroupDTO group = GroupDTO.select(groupId);
|
||||||
if (group == null && id_groups.containsKey(groupId)) {
|
if (group == null && id_groups.containsKey(groupId)) {
|
||||||
@ -215,14 +210,13 @@ public class Cache {
|
|||||||
* @return 玩家当前所在领地
|
* @return 玩家当前所在领地
|
||||||
*/
|
*/
|
||||||
public DominionDTO getPlayerCurrentDominion(Player player) {
|
public DominionDTO getPlayerCurrentDominion(Player player) {
|
||||||
try (AutoTimer ignored = new AutoTimer(Dominion.config.TimerEnabled())) {
|
|
||||||
Integer last_in_dom_id = player_current_dominion_id.get(player.getUniqueId());
|
Integer last_in_dom_id = player_current_dominion_id.get(player.getUniqueId());
|
||||||
DominionDTO last_dominion = null;
|
DominionDTO last_dominion = null;
|
||||||
if (last_in_dom_id != null) {
|
if (last_in_dom_id != null) {
|
||||||
last_dominion = id_dominions.get(last_in_dom_id);
|
last_dominion = id_dominions.get(last_in_dom_id);
|
||||||
}
|
}
|
||||||
if (isInDominion(last_dominion, player.getLocation())) {
|
if (isInDominion(last_dominion, player)) {
|
||||||
if (dominion_children.get(last_in_dom_id) == null || dominion_children.get(last_in_dom_id).isEmpty()) {
|
if (dominion_children.get(last_in_dom_id) == null || dominion_children.get(last_in_dom_id).size() == 0) {
|
||||||
// 如果玩家仍在领地内,且领地没有子领地,则直接返回
|
// 如果玩家仍在领地内,且领地没有子领地,则直接返回
|
||||||
if (recheckPlayerState) {
|
if (recheckPlayerState) {
|
||||||
lightOrNot(player, last_dominion);
|
lightOrNot(player, last_dominion);
|
||||||
@ -232,7 +226,7 @@ public class Cache {
|
|||||||
return last_dominion;
|
return last_dominion;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DominionDTO current_dominion = dominion_trees.getLocInDominionDTO(player.getLocation());
|
DominionDTO current_dominion = getLocInDominionDTO(world_dominion_tree.get(player.getWorld().getName()), player.getLocation());
|
||||||
int last_dom_id = last_dominion == null ? -1 : last_dominion.getId();
|
int last_dom_id = last_dominion == null ? -1 : last_dominion.getId();
|
||||||
int current_dom_id = current_dominion == null ? -1 : current_dominion.getId();
|
int current_dom_id = current_dominion == null ? -1 : current_dominion.getId();
|
||||||
if (last_dom_id == current_dom_id) {
|
if (last_dom_id == current_dom_id) {
|
||||||
@ -258,11 +252,12 @@ public class Cache {
|
|||||||
player_current_dominion_id.put(player.getUniqueId(), current_dominion.getId());
|
player_current_dominion_id.put(player.getUniqueId(), current_dominion.getId());
|
||||||
// show border
|
// show border
|
||||||
if (current_dominion.getFlagValue(Flag.SHOW_BORDER)) {
|
if (current_dominion.getFlagValue(Flag.SHOW_BORDER)) {
|
||||||
Particle.showBorder(player, current_dominion);
|
ParticleRender.showBoxFace(player,
|
||||||
|
current_dominion.getLocation1(),
|
||||||
|
current_dominion.getLocation2());
|
||||||
}
|
}
|
||||||
return current_dominion;
|
return current_dominion;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 玩家退出时调用 用于清除玩家当前所在领地
|
* 玩家退出时调用 用于清除玩家当前所在领地
|
||||||
@ -343,8 +338,30 @@ public class Cache {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public DominionDTO getDominionByLoc(Location loc) {
|
public DominionDTO getDominion(Location loc) {
|
||||||
return dominion_trees.getLocInDominionDTO(loc);
|
return getLocInDominionDTO(world_dominion_tree.get(loc.getWorld().getName()), loc);
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<DominionNode> getDominionTreeByPlayer(String player_name) {
|
||||||
|
List<DominionNode> dominionTree = new ArrayList<>();
|
||||||
|
PlayerDTO player = PlayerDTO.select(player_name);
|
||||||
|
if (player == null) return dominionTree;
|
||||||
|
for (List<DominionNode> tree : world_dominion_tree.values()) {
|
||||||
|
for (DominionNode node : tree) {
|
||||||
|
if (node.getDominion().getOwner().equals(player.getUuid())) {
|
||||||
|
dominionTree.add(node);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return dominionTree;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<DominionNode> getAllDominionTree() {
|
||||||
|
List<DominionNode> dominionTree = new ArrayList<>();
|
||||||
|
for (List<DominionNode> tree : world_dominion_tree.values()) {
|
||||||
|
dominionTree.addAll(tree);
|
||||||
|
}
|
||||||
|
return dominionTree;
|
||||||
}
|
}
|
||||||
|
|
||||||
public GroupDTO getGroup(Integer id) {
|
public GroupDTO getGroup(Integer id) {
|
||||||
@ -369,18 +386,15 @@ public class Cache {
|
|||||||
return player_uuid_to_member.get(player_uuid).get(dominion.getId());
|
return player_uuid_to_member.get(player_uuid).get(dominion.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<GroupDTO> getBelongGroupsOf(UUID plauer_uuid) {
|
private static boolean isInDominion(@Nullable DominionDTO dominion, Player player) {
|
||||||
List<GroupDTO> groups = new ArrayList<>();
|
if (dominion == null) return false;
|
||||||
if (!player_uuid_to_member.containsKey(plauer_uuid)) return groups;
|
if (!Objects.equals(dominion.getWorld(), player.getWorld().getName())) return false;
|
||||||
for (MemberDTO member : player_uuid_to_member.get(plauer_uuid).values()) {
|
double x = player.getLocation().getX();
|
||||||
if (member.getGroupId() != -1) {
|
double y = player.getLocation().getY();
|
||||||
GroupDTO group = getGroup(member.getGroupId());
|
double z = player.getLocation().getZ();
|
||||||
if (group != null) {
|
return x >= dominion.getX1() && x <= dominion.getX2() &&
|
||||||
groups.add(group);
|
y >= dominion.getY1() && y <= dominion.getY2() &&
|
||||||
}
|
z >= dominion.getZ1() && z <= dominion.getZ2();
|
||||||
}
|
|
||||||
}
|
|
||||||
return groups;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public DominionDTO getDominion(Integer id) {
|
public DominionDTO getDominion(Integer id) {
|
||||||
@ -438,8 +452,8 @@ public class Cache {
|
|||||||
|
|
||||||
public static Cache instance;
|
public static Cache instance;
|
||||||
private ConcurrentHashMap<Integer, DominionDTO> id_dominions;
|
private ConcurrentHashMap<Integer, DominionDTO> id_dominions;
|
||||||
|
private ConcurrentHashMap<String, List<DominionNode>> world_dominion_tree;
|
||||||
private ConcurrentHashMap<Integer, GroupDTO> id_groups;
|
private ConcurrentHashMap<Integer, GroupDTO> id_groups;
|
||||||
private final WorldDominionTreeSectored dominion_trees = new WorldDominionTreeSectored();
|
|
||||||
private ConcurrentHashMap<UUID, ConcurrentHashMap<Integer, MemberDTO>> player_uuid_to_member; // 玩家所有的特权
|
private ConcurrentHashMap<UUID, ConcurrentHashMap<Integer, MemberDTO>> player_uuid_to_member; // 玩家所有的特权
|
||||||
private final Map<UUID, Integer> player_current_dominion_id; // 玩家当前所在领地
|
private final Map<UUID, Integer> player_current_dominion_id; // 玩家当前所在领地
|
||||||
private ConcurrentHashMap<Integer, List<Integer>> dominion_children;
|
private ConcurrentHashMap<Integer, List<Integer>> dominion_children;
|
||||||
@ -454,138 +468,4 @@ public class Cache {
|
|||||||
public final Map<UUID, LocalDateTime> NextTimeAllowTeleport = new java.util.HashMap<>();
|
public final Map<UUID, LocalDateTime> NextTimeAllowTeleport = new java.util.HashMap<>();
|
||||||
|
|
||||||
private Map<UUID, List<ResMigration.ResidenceNode>> residence_data = null;
|
private Map<UUID, List<ResMigration.ResidenceNode>> residence_data = null;
|
||||||
|
|
||||||
private final Map<UUID, Integer> map_player_using_group_title_id = new HashMap<>();
|
|
||||||
|
|
||||||
private static class WorldDominionTreeSectored {
|
|
||||||
/*
|
|
||||||
D | C
|
|
||||||
--+--
|
|
||||||
B | A
|
|
||||||
*/
|
|
||||||
|
|
||||||
private ConcurrentHashMap<UUID, List<DominionNode>> world_dominion_tree_sector_a; // x >= 0, z >= 0
|
|
||||||
private ConcurrentHashMap<UUID, List<DominionNode>> world_dominion_tree_sector_b; // x <= 0, z >= 0
|
|
||||||
private ConcurrentHashMap<UUID, List<DominionNode>> world_dominion_tree_sector_c; // x >= 0, z <= 0
|
|
||||||
private ConcurrentHashMap<UUID, List<DominionNode>> world_dominion_tree_sector_d; // x <= 0, z <= 0
|
|
||||||
|
|
||||||
public DominionDTO getLocInDominionDTO(@NotNull Location loc) {
|
|
||||||
try (AutoTimer ignored = new AutoTimer(Dominion.config.TimerEnabled())) {
|
|
||||||
List<DominionNode> nodes = getNodes(loc);
|
|
||||||
if (nodes == null) return null;
|
|
||||||
if (nodes.isEmpty()) return null;
|
|
||||||
DominionNode dominionNode = getLocInDominionNode(nodes, loc);
|
|
||||||
return dominionNode == null ? null : dominionNode.getDominion();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public List<DominionNode> getNodes(@NotNull Location loc) {
|
|
||||||
return getNodes(loc.getWorld().getUID(), loc.getBlockX(), loc.getBlockZ());
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<DominionNode> getNodes(World world, int x, int z) {
|
|
||||||
return getNodes(world.getUID(), x, z);
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<DominionNode> getNodes(UUID world, int x, int z) {
|
|
||||||
if (x >= 0 && z >= 0) {
|
|
||||||
return world_dominion_tree_sector_a.get(world);
|
|
||||||
}
|
|
||||||
if (x <= 0 && z >= 0) {
|
|
||||||
return world_dominion_tree_sector_b.get(world);
|
|
||||||
}
|
|
||||||
if (x >= 0) {
|
|
||||||
return world_dominion_tree_sector_c.get(world);
|
|
||||||
}
|
|
||||||
return world_dominion_tree_sector_d.get(world);
|
|
||||||
}
|
|
||||||
|
|
||||||
public CompletableFuture<Void> initAsync(List<DominionDTO> dominions) {
|
|
||||||
return CompletableFuture.runAsync(() -> init(dominions));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private void init(List<DominionDTO> dominions) {
|
|
||||||
world_dominion_tree_sector_a = new ConcurrentHashMap<>();
|
|
||||||
world_dominion_tree_sector_b = new ConcurrentHashMap<>();
|
|
||||||
world_dominion_tree_sector_c = new ConcurrentHashMap<>();
|
|
||||||
world_dominion_tree_sector_d = new ConcurrentHashMap<>();
|
|
||||||
|
|
||||||
Map<UUID, List<DominionDTO>> world_dominions_sector_a = new HashMap<>();
|
|
||||||
Map<UUID, List<DominionDTO>> world_dominions_sector_b = new HashMap<>();
|
|
||||||
Map<UUID, List<DominionDTO>> world_dominions_sector_c = new HashMap<>();
|
|
||||||
Map<UUID, List<DominionDTO>> world_dominions_sector_d = new HashMap<>();
|
|
||||||
for (DominionDTO d : dominions) {
|
|
||||||
// 对每个世界的领地进行四个象限的划分
|
|
||||||
if (!world_dominions_sector_a.containsKey(d.getWorldUid()) ||
|
|
||||||
!world_dominions_sector_b.containsKey(d.getWorldUid()) ||
|
|
||||||
!world_dominions_sector_c.containsKey(d.getWorldUid()) ||
|
|
||||||
!world_dominions_sector_d.containsKey(d.getWorldUid())) {
|
|
||||||
world_dominions_sector_a.put(d.getWorldUid(), new ArrayList<>());
|
|
||||||
world_dominions_sector_b.put(d.getWorldUid(), new ArrayList<>());
|
|
||||||
world_dominions_sector_c.put(d.getWorldUid(), new ArrayList<>());
|
|
||||||
world_dominions_sector_d.put(d.getWorldUid(), new ArrayList<>());
|
|
||||||
}
|
|
||||||
if (d.getX1() >= 0 && d.getZ1() >= 0) {
|
|
||||||
world_dominions_sector_a.get(d.getWorldUid()).add(d);
|
|
||||||
} else if (d.getX1() <= 0 && d.getZ1() >= 0) {
|
|
||||||
if (d.getX2() >= 0) {
|
|
||||||
world_dominions_sector_a.get(d.getWorldUid()).add(d);
|
|
||||||
world_dominions_sector_b.get(d.getWorldUid()).add(d);
|
|
||||||
} else {
|
|
||||||
world_dominions_sector_b.get(d.getWorldUid()).add(d);
|
|
||||||
}
|
|
||||||
} else if (d.getX1() >= 0 && d.getZ1() <= 0) {
|
|
||||||
if (d.getZ2() >= 0) {
|
|
||||||
world_dominions_sector_a.get(d.getWorldUid()).add(d);
|
|
||||||
world_dominions_sector_c.get(d.getWorldUid()).add(d);
|
|
||||||
} else {
|
|
||||||
world_dominions_sector_c.get(d.getWorldUid()).add(d);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (d.getX2() >= 0 && d.getZ2() >= 0) {
|
|
||||||
world_dominions_sector_a.get(d.getWorldUid()).add(d);
|
|
||||||
world_dominions_sector_b.get(d.getWorldUid()).add(d);
|
|
||||||
world_dominions_sector_c.get(d.getWorldUid()).add(d);
|
|
||||||
world_dominions_sector_d.get(d.getWorldUid()).add(d);
|
|
||||||
} else if (d.getX2() >= 0 && d.getZ2() <= 0) {
|
|
||||||
world_dominions_sector_c.get(d.getWorldUid()).add(d);
|
|
||||||
world_dominions_sector_d.get(d.getWorldUid()).add(d);
|
|
||||||
} else if (d.getZ2() >= 0 && d.getX2() <= 0) {
|
|
||||||
world_dominions_sector_b.get(d.getWorldUid()).add(d);
|
|
||||||
world_dominions_sector_d.get(d.getWorldUid()).add(d);
|
|
||||||
} else {
|
|
||||||
world_dominions_sector_d.get(d.getWorldUid()).add(d);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (Map.Entry<UUID, List<DominionDTO>> entry : world_dominions_sector_a.entrySet()) {
|
|
||||||
world_dominion_tree_sector_a.put(entry.getKey(), DominionNode.BuildNodeTree(-1, entry.getValue()));
|
|
||||||
}
|
|
||||||
for (Map.Entry<UUID, List<DominionDTO>> entry : world_dominions_sector_b.entrySet()) {
|
|
||||||
world_dominion_tree_sector_b.put(entry.getKey(), DominionNode.BuildNodeTree(-1, entry.getValue()));
|
|
||||||
}
|
|
||||||
for (Map.Entry<UUID, List<DominionDTO>> entry : world_dominions_sector_c.entrySet()) {
|
|
||||||
world_dominion_tree_sector_c.put(entry.getKey(), DominionNode.BuildNodeTree(-1, entry.getValue()));
|
|
||||||
}
|
|
||||||
for (Map.Entry<UUID, List<DominionDTO>> entry : world_dominions_sector_d.entrySet()) {
|
|
||||||
world_dominion_tree_sector_d.put(entry.getKey(), DominionNode.BuildNodeTree(-1, entry.getValue()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public @Nullable GroupDTO getPlayerUsingGroupTitle(UUID uuid) {
|
|
||||||
if (!Dominion.config.getGroupTitleEnable()) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
if (map_player_using_group_title_id.containsKey(uuid)) {
|
|
||||||
return getGroup(map_player_using_group_title_id.get(uuid));
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updatePlayerUsingGroupTitle(UUID uuid, Integer groupId) {
|
|
||||||
map_player_using_group_title_id.put(uuid, groupId);
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -3,14 +3,17 @@ package cn.lunadeer.dominion;
|
|||||||
import cn.lunadeer.dominion.commands.*;
|
import cn.lunadeer.dominion.commands.*;
|
||||||
import cn.lunadeer.dominion.controllers.PlayerController;
|
import cn.lunadeer.dominion.controllers.PlayerController;
|
||||||
import cn.lunadeer.dominion.cuis.*;
|
import cn.lunadeer.dominion.cuis.*;
|
||||||
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||||
import cn.lunadeer.dominion.tuis.*;
|
import cn.lunadeer.dominion.tuis.AllDominion;
|
||||||
|
import cn.lunadeer.dominion.tuis.Menu;
|
||||||
|
import cn.lunadeer.dominion.tuis.MigrateList;
|
||||||
|
import cn.lunadeer.dominion.tuis.SysConfig;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.DominionList;
|
import cn.lunadeer.dominion.tuis.dominion.DominionList;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.DominionManage;
|
import cn.lunadeer.dominion.tuis.dominion.DominionManage;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.manage.EnvSetting;
|
import cn.lunadeer.dominion.tuis.dominion.manage.EnvSetting;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.manage.GuestSetting;
|
import cn.lunadeer.dominion.tuis.dominion.manage.GuestSetting;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.manage.SizeInfo;
|
import cn.lunadeer.dominion.tuis.dominion.manage.SizeInfo;
|
||||||
import cn.lunadeer.dominion.utils.TuiUtils;
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.command.TabExecutor;
|
import org.bukkit.command.TabExecutor;
|
||||||
@ -52,7 +55,7 @@ public class Commands implements TabExecutor {
|
|||||||
DominionList.show(sender, args);
|
DominionList.show(sender, args);
|
||||||
break;
|
break;
|
||||||
case "help":
|
case "help":
|
||||||
TuiUtils.printHelp(sender, args);
|
cn.lunadeer.dominion.tuis.Apis.printHelp(sender, args);
|
||||||
break;
|
break;
|
||||||
case "info":
|
case "info":
|
||||||
SizeInfo.show(sender, args);
|
SizeInfo.show(sender, args);
|
||||||
@ -135,12 +138,6 @@ public class Commands implements TabExecutor {
|
|||||||
case "env_setting":
|
case "env_setting":
|
||||||
EnvSetting.show(sender, args);
|
EnvSetting.show(sender, args);
|
||||||
break;
|
break;
|
||||||
case "use_title":
|
|
||||||
Title.use_title(sender, args);
|
|
||||||
break;
|
|
||||||
case "title_list":
|
|
||||||
TitleList.show(sender, args);
|
|
||||||
break;
|
|
||||||
// ---=== Sub Command ===---
|
// ---=== Sub Command ===---
|
||||||
case "member":
|
case "member":
|
||||||
Member.handle(sender, args);
|
Member.handle(sender, args);
|
||||||
@ -246,7 +243,7 @@ public class Commands implements TabExecutor {
|
|||||||
case "set_tp_location":
|
case "set_tp_location":
|
||||||
return playerDominions(sender);
|
return playerDominions(sender);
|
||||||
case "tp":
|
case "tp":
|
||||||
return allDominions();
|
return DominionDTO.selectAllNames();
|
||||||
case "set":
|
case "set":
|
||||||
return dominionFlags();
|
return dominionFlags();
|
||||||
case "expand":
|
case "expand":
|
@ -1,10 +1,11 @@
|
|||||||
package cn.lunadeer.dominion;
|
package cn.lunadeer.dominion;
|
||||||
|
|
||||||
|
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
|
||||||
|
import cn.lunadeer.dominion.events.EnvironmentEvents;
|
||||||
|
import cn.lunadeer.dominion.events.PlayerEvents;
|
||||||
|
import cn.lunadeer.dominion.events.SelectPointEvents;
|
||||||
import cn.lunadeer.dominion.managers.ConfigManager;
|
import cn.lunadeer.dominion.managers.ConfigManager;
|
||||||
import cn.lunadeer.dominion.managers.DatabaseTables;
|
import cn.lunadeer.dominion.managers.DatabaseTables;
|
||||||
import cn.lunadeer.dominion.managers.PlaceHolderApi;
|
|
||||||
import cn.lunadeer.dominion.utils.DynmapConnect;
|
|
||||||
import cn.lunadeer.dominion.utils.MapRender;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.*;
|
import cn.lunadeer.minecraftpluginutils.*;
|
||||||
import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
|
import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
|
||||||
import cn.lunadeer.minecraftpluginutils.databse.DatabaseType;
|
import cn.lunadeer.minecraftpluginutils.databse.DatabaseType;
|
||||||
@ -39,16 +40,9 @@ public final class Dominion extends JavaPlugin {
|
|||||||
AutoClean.run();
|
AutoClean.run();
|
||||||
Cache.instance = new Cache();
|
Cache.instance = new Cache();
|
||||||
|
|
||||||
if (config.getGroupTitleEnable()) {
|
Bukkit.getPluginManager().registerEvents(new PlayerEvents(), this);
|
||||||
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
|
Bukkit.getPluginManager().registerEvents(new EnvironmentEvents(), this);
|
||||||
new PlaceHolderApi(this);
|
Bukkit.getPluginManager().registerEvents(new SelectPointEvents(), this);
|
||||||
} else {
|
|
||||||
XLogger.warn("未找到 PlaceholderAPI 插件,无法使用权限组组称号功能,已自动关闭");
|
|
||||||
config.setGroupTitleEnable(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
new EventsRegister(this);
|
|
||||||
Objects.requireNonNull(Bukkit.getPluginCommand("dominion")).setExecutor(new Commands());
|
Objects.requireNonNull(Bukkit.getPluginCommand("dominion")).setExecutor(new Commands());
|
||||||
|
|
||||||
bStatsMetrics metrics = new bStatsMetrics(this, 21445);
|
bStatsMetrics metrics = new bStatsMetrics(this, 21445);
|
||||||
@ -78,8 +72,7 @@ public final class Dominion extends JavaPlugin {
|
|||||||
XLogger.info(" |_____/ \\___/|_| |_| |_|_|_| |_|_|\\___/|_| |_|");
|
XLogger.info(" |_____/ \\___/|_| |_| |_|_|_| |_|_|\\___/|_| |_|");
|
||||||
XLogger.info(" ");
|
XLogger.info(" ");
|
||||||
|
|
||||||
if (config.getDynmap()) new DynmapConnect(); // 注册 Dynmap API
|
Scheduler.runTaskLaterAsync(BlueMapConnect::render, 40 * 20);
|
||||||
Scheduler.runTaskLaterAsync(MapRender::render, 40 * 20);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
@ -55,21 +55,32 @@ public class DominionNode {
|
|||||||
return node;
|
return node;
|
||||||
} else {
|
} else {
|
||||||
DominionNode childDominion = getLocInDominionNode(node.children, loc);
|
DominionNode childDominion = getLocInDominionNode(node.children, loc);
|
||||||
return Objects.requireNonNullElse(childDominion, node);
|
if (childDominion == null) {
|
||||||
|
return node;
|
||||||
|
} else {
|
||||||
|
return childDominion;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isInDominion(@Nullable DominionDTO dominion, @NotNull Location location) {
|
public static DominionDTO getLocInDominionDTO(@Nullable List<DominionNode> nodes, @NotNull Location loc) {
|
||||||
|
if (nodes == null) return null;
|
||||||
|
if (nodes.isEmpty()) return null;
|
||||||
|
DominionNode dominionNode = getLocInDominionNode(nodes, loc);
|
||||||
|
return dominionNode == null ? null : dominionNode.getDominion();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isInDominion(@Nullable DominionDTO dominion, Location location) {
|
||||||
if (dominion == null) return false;
|
if (dominion == null) return false;
|
||||||
if (!Objects.equals(dominion.getWorldUid(), location.getWorld().getUID())) return false;
|
if (!Objects.equals(dominion.getWorld(), location.getWorld().getName())) return false;
|
||||||
double x = location.getX();
|
double x = location.getX();
|
||||||
double y = location.getY();
|
double y = location.getY();
|
||||||
double z = location.getZ();
|
double z = location.getZ();
|
||||||
return x >= dominion.getX1() && x < dominion.getX2() &&
|
return x >= dominion.getX1() && x <= dominion.getX2() &&
|
||||||
y >= dominion.getY1() && y < dominion.getY2() &&
|
y >= dominion.getY1() && y <= dominion.getY2() &&
|
||||||
z >= dominion.getZ1() && z < dominion.getZ2();
|
z >= dominion.getZ1() && z <= dominion.getZ2();
|
||||||
}
|
}
|
||||||
}
|
}
|
70
src/main/java/cn/lunadeer/dominion/commands/Apis.java
Normal file
70
src/main/java/cn/lunadeer/dominion/commands/Apis.java
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
package cn.lunadeer.dominion.commands;
|
||||||
|
|
||||||
|
import cn.lunadeer.dominion.Dominion;
|
||||||
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class Apis {
|
||||||
|
public static Player playerOnly(CommandSender sender) {
|
||||||
|
if (!(sender instanceof Player)) {
|
||||||
|
Notification.error(sender, "该命令只能由玩家执行");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return (Player) sender;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void sizeInfo(CommandSender sender, DominionDTO dominionDTO) {
|
||||||
|
Integer x1 = dominionDTO.getX1();
|
||||||
|
Integer y1 = dominionDTO.getY1();
|
||||||
|
Integer z1 = dominionDTO.getZ1();
|
||||||
|
Integer x2 = dominionDTO.getX2();
|
||||||
|
Integer y2 = dominionDTO.getY2();
|
||||||
|
Integer z2 = dominionDTO.getZ2();
|
||||||
|
Notification.info(sender, "领地 %s 的尺寸信息:", dominionDTO.getName());
|
||||||
|
Notification.info(sender, " 大小: %d x %d x %d", x2 - x1, y2 - y1, z2 - z1);
|
||||||
|
Notification.info(sender, " 中心坐标: %d %d %d", x1 + (x2 - x1) / 2, y1 + (y2 - y1) / 2, z1 + (z2 - z1) / 2);
|
||||||
|
Notification.info(sender, " 高度: %d", y2 - y1);
|
||||||
|
Notification.info(sender, " Y坐标范围: %d ~ %d", y1, y2);
|
||||||
|
Notification.info(sender, " 体积: %d", (x2 - x1) * (y2 - y1) * (z2 - z1));
|
||||||
|
Notification.info(sender, " 领地所在世界: %s", dominionDTO.getWorld());
|
||||||
|
Notification.info(sender, " 领地的对角点坐标: x1=%d y1=%d z1=%d, x2=%d y2=%d z2=%d", x1, y1, z1, x2, y2, z2);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Map<Integer, Location> autoPoints(Player player) {
|
||||||
|
Integer size = Dominion.config.getAutoCreateRadius();
|
||||||
|
Location location = player.getLocation();
|
||||||
|
Location location1 = new Location(location.getWorld(), location.getX() - size, location.getY() - size, location.getZ() - size);
|
||||||
|
Location location2 = new Location(location.getWorld(), location.getX() + size, location.getY() + size, location.getZ() + size);
|
||||||
|
if (Dominion.config.getLimitVert()) {
|
||||||
|
location1.setY(Dominion.config.getLimitMinY());
|
||||||
|
location2.setY(Dominion.config.getLimitMaxY());
|
||||||
|
}
|
||||||
|
Map<Integer, Location> points = new HashMap<>();
|
||||||
|
points.put(0, location1);
|
||||||
|
points.put(1, location2);
|
||||||
|
Dominion.pointsSelect.put(player.getUniqueId(), points);
|
||||||
|
return points;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean notOpOrConsole(CommandSender sender) {
|
||||||
|
if (sender instanceof Player) {
|
||||||
|
Player player = (Player) sender;
|
||||||
|
if (!player.isOp()) {
|
||||||
|
Notification.warn(player, "你没有权限使用此命令");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String CommandParser(String command, Object... args) {
|
||||||
|
return String.format(command, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -7,8 +7,9 @@ import cn.lunadeer.dominion.tuis.dominion.manage.EnvSetting;
|
|||||||
import cn.lunadeer.dominion.tuis.dominion.manage.GuestSetting;
|
import cn.lunadeer.dominion.tuis.dominion.manage.GuestSetting;
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.hasPermission;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
|
|
||||||
public class DominionFlag {
|
public class DominionFlag {
|
||||||
|
|
||||||
@ -20,10 +21,9 @@ public class DominionFlag {
|
|||||||
* @param args 命令参数
|
* @param args 命令参数
|
||||||
*/
|
*/
|
||||||
public static void setDominionFlag(CommandSender sender, String[] args) {
|
public static void setDominionFlag(CommandSender sender, String[] args) {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
Player player = playerOnly(sender);
|
||||||
return;
|
if (player == null) return;
|
||||||
}
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
|
||||||
if (args.length == 3) {
|
if (args.length == 3) {
|
||||||
FlagsController.setFlag(operator, args[1], Boolean.parseBoolean(args[2]));
|
FlagsController.setFlag(operator, args[1], Boolean.parseBoolean(args[2]));
|
||||||
} else if (args.length == 4) {
|
} else if (args.length == 4) {
|
@ -10,19 +10,17 @@ import cn.lunadeer.dominion.dtos.GroupDTO;
|
|||||||
import cn.lunadeer.dominion.dtos.MemberDTO;
|
import cn.lunadeer.dominion.dtos.MemberDTO;
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
import cn.lunadeer.minecraftpluginutils.Scheduler;
|
import cn.lunadeer.minecraftpluginutils.Scheduler;
|
||||||
import cn.lunadeer.minecraftpluginutils.Teleport;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.World;
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.DominionNode.isInDominion;
|
import static cn.lunadeer.dominion.commands.Apis.autoPoints;
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.*;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
import static cn.lunadeer.dominion.utils.EventUtils.canByPass;
|
import static cn.lunadeer.dominion.managers.GlobalTeleport.doTp;
|
||||||
|
|
||||||
public class DominionOperate {
|
public class DominionOperate {
|
||||||
/**
|
/**
|
||||||
@ -33,9 +31,6 @@ public class DominionOperate {
|
|||||||
* @param args 命令参数
|
* @param args 命令参数
|
||||||
*/
|
*/
|
||||||
public static void createDominion(CommandSender sender, String[] args) {
|
public static void createDominion(CommandSender sender, String[] args) {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Player player = playerOnly(sender);
|
Player player = playerOnly(sender);
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
if (args.length != 2) {
|
if (args.length != 2) {
|
||||||
@ -60,9 +55,6 @@ public class DominionOperate {
|
|||||||
* @param args 命令参数
|
* @param args 命令参数
|
||||||
*/
|
*/
|
||||||
public static void createSubDominion(CommandSender sender, String[] args) {
|
public static void createSubDominion(CommandSender sender, String[] args) {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Player player = playerOnly(sender);
|
Player player = playerOnly(sender);
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
if (args.length != 2 && args.length != 3) {
|
if (args.length != 2 && args.length != 3) {
|
||||||
@ -91,9 +83,6 @@ public class DominionOperate {
|
|||||||
* @param args 命令参数
|
* @param args 命令参数
|
||||||
*/
|
*/
|
||||||
public static void autoCreateDominion(CommandSender sender, String[] args) {
|
public static void autoCreateDominion(CommandSender sender, String[] args) {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Player player = playerOnly(sender);
|
Player player = playerOnly(sender);
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
if (args.length != 2) {
|
if (args.length != 2) {
|
||||||
@ -117,9 +106,6 @@ public class DominionOperate {
|
|||||||
* @param args 命令参数
|
* @param args 命令参数
|
||||||
*/
|
*/
|
||||||
public static void autoCreateSubDominion(CommandSender sender, String[] args) {
|
public static void autoCreateSubDominion(CommandSender sender, String[] args) {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Player player = playerOnly(sender);
|
Player player = playerOnly(sender);
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
if (args.length != 2 && args.length != 3) {
|
if (args.length != 2 && args.length != 3) {
|
||||||
@ -142,9 +128,6 @@ public class DominionOperate {
|
|||||||
* @param args 命令参数
|
* @param args 命令参数
|
||||||
*/
|
*/
|
||||||
public static void expandDominion(CommandSender sender, String[] args) {
|
public static void expandDominion(CommandSender sender, String[] args) {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Player player = playerOnly(sender);
|
Player player = playerOnly(sender);
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
if (args.length != 2 && args.length != 3) {
|
if (args.length != 2 && args.length != 3) {
|
||||||
@ -182,9 +165,6 @@ public class DominionOperate {
|
|||||||
* @param args 命令参数
|
* @param args 命令参数
|
||||||
*/
|
*/
|
||||||
public static void contractDominion(CommandSender sender, String[] args) {
|
public static void contractDominion(CommandSender sender, String[] args) {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Player player = playerOnly(sender);
|
Player player = playerOnly(sender);
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
if (args.length != 2 && args.length != 3) {
|
if (args.length != 2 && args.length != 3) {
|
||||||
@ -222,10 +202,9 @@ public class DominionOperate {
|
|||||||
* @param args 命令参数
|
* @param args 命令参数
|
||||||
*/
|
*/
|
||||||
public static void deleteDominion(CommandSender sender, String[] args) {
|
public static void deleteDominion(CommandSender sender, String[] args) {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
Player player = playerOnly(sender);
|
||||||
return;
|
if (player == null) return;
|
||||||
}
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
|
||||||
if (args.length == 2) {
|
if (args.length == 2) {
|
||||||
String name = args[1];
|
String name = args[1];
|
||||||
DominionController.delete(operator, name, false);
|
DominionController.delete(operator, name, false);
|
||||||
@ -249,10 +228,9 @@ public class DominionOperate {
|
|||||||
* @param args 命令参数
|
* @param args 命令参数
|
||||||
*/
|
*/
|
||||||
public static void setEnterMessage(CommandSender sender, String[] args) {
|
public static void setEnterMessage(CommandSender sender, String[] args) {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
Player player = playerOnly(sender);
|
||||||
return;
|
if (player == null) return;
|
||||||
}
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
|
||||||
if (args.length == 2) {
|
if (args.length == 2) {
|
||||||
DominionController.setJoinMessage(operator, args[1]);
|
DominionController.setJoinMessage(operator, args[1]);
|
||||||
return;
|
return;
|
||||||
@ -272,10 +250,9 @@ public class DominionOperate {
|
|||||||
* @param args 命令参数
|
* @param args 命令参数
|
||||||
*/
|
*/
|
||||||
public static void setLeaveMessage(CommandSender sender, String[] args) {
|
public static void setLeaveMessage(CommandSender sender, String[] args) {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
Player player = playerOnly(sender);
|
||||||
return;
|
if (player == null) return;
|
||||||
}
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
|
||||||
if (args.length == 2) {
|
if (args.length == 2) {
|
||||||
DominionController.setLeaveMessage(operator, args[1]);
|
DominionController.setLeaveMessage(operator, args[1]);
|
||||||
return;
|
return;
|
||||||
@ -295,9 +272,6 @@ public class DominionOperate {
|
|||||||
* @param args 命令参数
|
* @param args 命令参数
|
||||||
*/
|
*/
|
||||||
public static void setTpLocation(CommandSender sender, String[] args) {
|
public static void setTpLocation(CommandSender sender, String[] args) {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Player player = playerOnly(sender);
|
Player player = playerOnly(sender);
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||||
@ -323,10 +297,9 @@ public class DominionOperate {
|
|||||||
* @param args 命令参数
|
* @param args 命令参数
|
||||||
*/
|
*/
|
||||||
public static void renameDominion(CommandSender sender, String[] args) {
|
public static void renameDominion(CommandSender sender, String[] args) {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
Player player = playerOnly(sender);
|
||||||
return;
|
if (player == null) return;
|
||||||
}
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
|
||||||
if (args.length != 3) {
|
if (args.length != 3) {
|
||||||
Notification.error(sender, "用法: /dominion rename <原领地名称> <新领地名称>");
|
Notification.error(sender, "用法: /dominion rename <原领地名称> <新领地名称>");
|
||||||
return;
|
return;
|
||||||
@ -342,10 +315,9 @@ public class DominionOperate {
|
|||||||
* @param args 命令参数
|
* @param args 命令参数
|
||||||
*/
|
*/
|
||||||
public static void giveDominion(CommandSender sender, String[] args) {
|
public static void giveDominion(CommandSender sender, String[] args) {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
Player player = playerOnly(sender);
|
||||||
return;
|
if (player == null) return;
|
||||||
}
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
|
||||||
if (args.length == 3) {
|
if (args.length == 3) {
|
||||||
String dom_name = args[1];
|
String dom_name = args[1];
|
||||||
String player_name = args[2];
|
String player_name = args[2];
|
||||||
@ -371,36 +343,24 @@ public class DominionOperate {
|
|||||||
* @param args 命令参数
|
* @param args 命令参数
|
||||||
*/
|
*/
|
||||||
public static void teleportToDominion(CommandSender sender, String[] args) {
|
public static void teleportToDominion(CommandSender sender, String[] args) {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Player player = playerOnly(sender);
|
Player player = playerOnly(sender);
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
if (args.length != 2) {
|
if (args.length != 2) {
|
||||||
Notification.error(sender, "用法: /dominion tp <领地名称>");
|
Notification.error(sender, "用法: /dominion tp <领地名称>");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
DominionDTO dominionDTO = DominionDTO.select(args[1]);
|
String name = args[1];
|
||||||
|
if (name.contains(".")) {
|
||||||
|
name = name.split("\\.")[1];
|
||||||
|
}
|
||||||
|
DominionDTO dominionDTO = DominionDTO.select(name);
|
||||||
if (dominionDTO == null) {
|
if (dominionDTO == null) {
|
||||||
Notification.error(sender, "领地不存在");
|
Notification.error(sender, "领地不存在");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (player.isOp() && Dominion.config.getLimitOpBypass()) {
|
if (player.isOp() && Dominion.config.getLimitOpBypass()) {
|
||||||
Notification.warn(sender, "你是OP,将忽略领地传送限制");
|
Notification.warn(sender, "你是OP,将忽略领地传送限制");
|
||||||
Location location = dominionDTO.getTpLocation();
|
doTp(player, dominionDTO);
|
||||||
if (location == null) {
|
|
||||||
int x = (dominionDTO.getX1() + dominionDTO.getX2()) / 2;
|
|
||||||
int z = (dominionDTO.getZ1() + dominionDTO.getZ2()) / 2;
|
|
||||||
World world = dominionDTO.getWorld();
|
|
||||||
if (world == null) {
|
|
||||||
Notification.error(sender, "领地所在世界不存在");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
location = new Location(world, x, player.getLocation().getY(), z);
|
|
||||||
XLogger.warn("领地 %s 没有设置传送点,将尝试传送到中心点", dominionDTO.getName());
|
|
||||||
}
|
|
||||||
Teleport.doTeleportSafely(player, location);
|
|
||||||
Notification.info(player, "已将你传送到 " + dominionDTO.getName());
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!Dominion.config.getTpEnable()) {
|
if (!Dominion.config.getTpEnable()) {
|
||||||
@ -409,22 +369,22 @@ public class DominionOperate {
|
|||||||
}
|
}
|
||||||
|
|
||||||
MemberDTO privilegeDTO = MemberDTO.select(player.getUniqueId(), dominionDTO.getId());
|
MemberDTO privilegeDTO = MemberDTO.select(player.getUniqueId(), dominionDTO.getId());
|
||||||
if (!canByPass(player, dominionDTO, privilegeDTO)) {
|
if (!player.getUniqueId().equals(dominionDTO.getOwner())) { // 领地所有人可以传送到自己的领地
|
||||||
if (privilegeDTO == null) {
|
if (privilegeDTO == null) {
|
||||||
if (!dominionDTO.getFlagValue(Flag.TELEPORT)) {
|
if (!dominionDTO.getFlagValue(Flag.TELEPORT)) {
|
||||||
Notification.error(sender, "此领地禁止传送");
|
Notification.error(sender, "此领地禁止传送");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
GroupDTO groupDTO = Cache.instance.getGroup(privilegeDTO.getGroupId());
|
if (privilegeDTO.getGroupId() == -1) {
|
||||||
if (privilegeDTO.getGroupId() != -1 && groupDTO != null) {
|
if (!privilegeDTO.getFlagValue(Flag.TELEPORT)) {
|
||||||
if (!groupDTO.getFlagValue(Flag.TELEPORT)) {
|
Notification.error(sender, "你不被允许传送到这个领地");
|
||||||
Notification.error(sender, "你所在的权限组组不被允许传送到这个领地");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!privilegeDTO.getFlagValue(Flag.TELEPORT)) {
|
GroupDTO groupDTO = Cache.instance.getGroup(privilegeDTO.getGroupId());
|
||||||
Notification.error(sender, "你不被允许传送到这个领地");
|
if (!groupDTO.getFlagValue(Flag.TELEPORT)) {
|
||||||
|
Notification.error(sender, "你所在的权限组组不被允许传送到这个领地");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -460,30 +420,7 @@ public class DominionOperate {
|
|||||||
}
|
}
|
||||||
Cache.instance.NextTimeAllowTeleport.put(player.getUniqueId(), now.plusSeconds(Dominion.config.getTpCoolDown()));
|
Cache.instance.NextTimeAllowTeleport.put(player.getUniqueId(), now.plusSeconds(Dominion.config.getTpCoolDown()));
|
||||||
Scheduler.runTaskLater(() -> {
|
Scheduler.runTaskLater(() -> {
|
||||||
Location location = dominionDTO.getTpLocation();
|
doTp(player, dominionDTO);
|
||||||
int center_x = (dominionDTO.getX1() + dominionDTO.getX2()) / 2;
|
|
||||||
int center_z = (dominionDTO.getZ1() + dominionDTO.getZ2()) / 2;
|
|
||||||
World world = dominionDTO.getWorld();
|
|
||||||
if (world == null) {
|
|
||||||
Notification.error(player, "领地所在世界不存在");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (location == null) {
|
|
||||||
location = new Location(world, center_x, player.getLocation().getY(), center_z);
|
|
||||||
Notification.warn(player, "领地 %s 没有设置传送点,将尝试传送到中心点", dominionDTO.getName());
|
|
||||||
} else if (!isInDominion(dominionDTO, location)) {
|
|
||||||
location = new Location(world, center_x, player.getLocation().getY(), center_z);
|
|
||||||
Notification.warn(player, "领地 %s 传送点不在领地内,将尝试传送到中心点", dominionDTO.getName());
|
|
||||||
}
|
|
||||||
if (player.isOnline()) {
|
|
||||||
Teleport.doTeleportSafely(player, location).thenAccept(b -> {
|
|
||||||
if (b) {
|
|
||||||
Notification.info(player, "已将你传送到 " + dominionDTO.getName());
|
|
||||||
} else {
|
|
||||||
Notification.error(player, "传送失败,请重试");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}, 20L * Dominion.config.getTpDelay());
|
}, 20L * Dominion.config.getTpDelay());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -494,14 +431,13 @@ public class DominionOperate {
|
|||||||
* @param args 命令参数
|
* @param args 命令参数
|
||||||
*/
|
*/
|
||||||
public static void setMapColor(CommandSender sender, String[] args) {
|
public static void setMapColor(CommandSender sender, String[] args) {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
Player player = playerOnly(sender);
|
||||||
return;
|
if (player == null) return;
|
||||||
}
|
|
||||||
if (args.length < 2) {
|
if (args.length < 2) {
|
||||||
Notification.error(sender, "用法: /dominion set_map_color <颜色> [领地名称]");
|
Notification.error(sender, "用法: /dominion set_map_color <颜色> [领地名称]");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||||
if (args.length == 2) {
|
if (args.length == 2) {
|
||||||
DominionController.setMapColor(operator, args[1]);
|
DominionController.setMapColor(operator, args[1]);
|
||||||
} else {
|
} else {
|
@ -5,9 +5,9 @@ import cn.lunadeer.dominion.controllers.GroupController;
|
|||||||
import cn.lunadeer.dominion.tuis.dominion.manage.group.GroupList;
|
import cn.lunadeer.dominion.tuis.dominion.manage.group.GroupList;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.manage.group.GroupSetting;
|
import cn.lunadeer.dominion.tuis.dominion.manage.group.GroupSetting;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.manage.group.SelectMember;
|
import cn.lunadeer.dominion.tuis.dominion.manage.group.SelectMember;
|
||||||
import cn.lunadeer.minecraftpluginutils.ColorParser;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@ -16,9 +16,9 @@ import java.util.Collections;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.Commands.boolOptions;
|
import static cn.lunadeer.dominion.Commands.boolOptions;
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.hasPermission;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
import static cn.lunadeer.dominion.commands.Helper.*;
|
import static cn.lunadeer.dominion.commands.Helper.*;
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.getPage;
|
import static cn.lunadeer.dominion.tuis.Apis.getPage;
|
||||||
|
|
||||||
public class Group {
|
public class Group {
|
||||||
|
|
||||||
@ -30,17 +30,16 @@ public class Group {
|
|||||||
*/
|
*/
|
||||||
public static void createGroup(CommandSender sender, String[] args) {
|
public static void createGroup(CommandSender sender, String[] args) {
|
||||||
try {
|
try {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (args.length < 4) {
|
if (args.length < 4) {
|
||||||
Notification.error(sender, "用法: /dominion group create <领地名称> <权限组名称>");
|
Notification.error(sender, "用法: /dominion group create <领地名称> <权限组名称>");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
Player player = playerOnly(sender);
|
||||||
|
if (player == null) return;
|
||||||
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||||
String dominionName = args[2];
|
String dominionName = args[2];
|
||||||
String groupName = args[3];
|
String groupName = args[3];
|
||||||
GroupController.createGroup(operator, dominionName, ColorParser.getPlainText(groupName), groupName);
|
GroupController.createGroup(operator, dominionName, groupName);
|
||||||
GroupList.show(sender, dominionName);
|
GroupList.show(sender, dominionName);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Notification.error(sender, e.getMessage());
|
Notification.error(sender, e.getMessage());
|
||||||
@ -55,14 +54,13 @@ public class Group {
|
|||||||
*/
|
*/
|
||||||
public static void deleteGroup(CommandSender sender, String[] args) {
|
public static void deleteGroup(CommandSender sender, String[] args) {
|
||||||
try {
|
try {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (args.length < 4) {
|
if (args.length < 4) {
|
||||||
Notification.error(sender, "用法: /dominion group delete <领地名称> <权限组名称>");
|
Notification.error(sender, "用法: /dominion group delete <领地名称> <权限组名称>");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
Player player = playerOnly(sender);
|
||||||
|
if (player == null) return;
|
||||||
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||||
String dominionName = args[2];
|
String dominionName = args[2];
|
||||||
String groupName = args[3];
|
String groupName = args[3];
|
||||||
GroupController.deleteGroup(operator, dominionName, groupName);
|
GroupController.deleteGroup(operator, dominionName, groupName);
|
||||||
@ -80,18 +78,17 @@ public class Group {
|
|||||||
*/
|
*/
|
||||||
public static void renameGroup(CommandSender sender, String[] args) {
|
public static void renameGroup(CommandSender sender, String[] args) {
|
||||||
try {
|
try {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (args.length < 5) {
|
if (args.length < 5) {
|
||||||
Notification.error(sender, "用法: /dominion group rename <领地名称> <权限组旧名称> <新名称>");
|
Notification.error(sender, "用法: /dominion group rename <领地名称> <权限组旧名称> <新名称>");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
Player player = playerOnly(sender);
|
||||||
|
if (player == null) return;
|
||||||
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||||
String dominionName = args[2];
|
String dominionName = args[2];
|
||||||
String oldGroupName = args[3];
|
String oldGroupName = args[3];
|
||||||
String newGroupName = args[4];
|
String newGroupName = args[4];
|
||||||
GroupController.renameGroup(operator, dominionName, oldGroupName, ColorParser.getPlainText(newGroupName), newGroupName);
|
GroupController.renameGroup(operator, dominionName, oldGroupName, newGroupName);
|
||||||
GroupSetting.show(sender, dominionName, newGroupName);
|
GroupSetting.show(sender, dominionName, newGroupName);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Notification.error(sender, e.getMessage());
|
Notification.error(sender, e.getMessage());
|
||||||
@ -106,14 +103,13 @@ public class Group {
|
|||||||
*/
|
*/
|
||||||
public static void setGroupFlag(CommandSender sender, String[] args) {
|
public static void setGroupFlag(CommandSender sender, String[] args) {
|
||||||
try {
|
try {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (args.length < 6) {
|
if (args.length < 6) {
|
||||||
Notification.error(sender, "用法: /dominion group set_flag <领地名称> <权限组名称> <权限名称> <true|false>");
|
Notification.error(sender, "用法: /dominion group set_flag <领地名称> <权限组名称> <权限名称> <true|false>");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
Player player = playerOnly(sender);
|
||||||
|
if (player == null) return;
|
||||||
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||||
String dominionName = args[2];
|
String dominionName = args[2];
|
||||||
String groupName = args[3];
|
String groupName = args[3];
|
||||||
String flag = args[4];
|
String flag = args[4];
|
||||||
@ -134,14 +130,13 @@ public class Group {
|
|||||||
*/
|
*/
|
||||||
public static void addMember(CommandSender sender, String[] args) {
|
public static void addMember(CommandSender sender, String[] args) {
|
||||||
try {
|
try {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (args.length < 5) {
|
if (args.length < 5) {
|
||||||
Notification.error(sender, "用法: /dominion group add_member <领地名称> <权限组名称> <玩家名称>");
|
Notification.error(sender, "用法: /dominion group add_member <领地名称> <权限组名称> <玩家名称>");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
Player player = playerOnly(sender);
|
||||||
|
if (player == null) return;
|
||||||
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||||
String dominionName = args[2];
|
String dominionName = args[2];
|
||||||
String groupName = args[3];
|
String groupName = args[3];
|
||||||
String playerName = args[4];
|
String playerName = args[4];
|
||||||
@ -161,14 +156,13 @@ public class Group {
|
|||||||
*/
|
*/
|
||||||
public static void removeMember(CommandSender sender, String[] args) {
|
public static void removeMember(CommandSender sender, String[] args) {
|
||||||
try {
|
try {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (args.length < 5) {
|
if (args.length < 5) {
|
||||||
Notification.error(sender, "用法: /dominion group remove_member <领地名称> <权限组名称> <玩家名称>");
|
Notification.error(sender, "用法: /dominion group remove_member <领地名称> <权限组名称> <玩家名称>");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
Player player = playerOnly(sender);
|
||||||
|
if (player == null) return;
|
||||||
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||||
String dominionName = args[2];
|
String dominionName = args[2];
|
||||||
String groupName = args[3];
|
String groupName = args[3];
|
||||||
String playerName = args[4];
|
String playerName = args[4];
|
||||||
@ -181,10 +175,6 @@ public class Group {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void handle(@NotNull CommandSender sender, @NotNull String[] args) {
|
public static void handle(@NotNull CommandSender sender, @NotNull String[] args) {
|
||||||
if (args.length < 2) {
|
|
||||||
Notification.error(sender, "用法: /dominion group <create|delete|rename|set_flag|add_member|remove_member|select_member|setting|list>");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
switch (args[1]) {
|
switch (args[1]) {
|
||||||
case "create":
|
case "create":
|
||||||
createGroup(sender, args);
|
createGroup(sender, args);
|
@ -9,7 +9,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
|
|
||||||
public class Helper {
|
public class Helper {
|
||||||
|
|
||||||
@ -90,15 +90,6 @@ public class Helper {
|
|||||||
return dominions_name;
|
return dominions_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<String> allDominions() {
|
|
||||||
List<String> dominions_name = new ArrayList<>();
|
|
||||||
List<DominionDTO> dominions = DominionController.all();
|
|
||||||
for (DominionDTO dominion : dominions) {
|
|
||||||
dominions_name.add(dominion.getName());
|
|
||||||
}
|
|
||||||
return dominions_name;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<String> allTemplates(CommandSender sender) {
|
public static List<String> allTemplates(CommandSender sender) {
|
||||||
List<String> templates_name = new ArrayList<>();
|
List<String> templates_name = new ArrayList<>();
|
||||||
Player player = playerOnly(sender);
|
Player player = playerOnly(sender);
|
@ -8,6 +8,7 @@ import cn.lunadeer.dominion.tuis.dominion.manage.member.SelectPlayer;
|
|||||||
import cn.lunadeer.dominion.tuis.dominion.manage.member.SelectTemplate;
|
import cn.lunadeer.dominion.tuis.dominion.manage.member.SelectTemplate;
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@ -17,7 +18,7 @@ import java.util.List;
|
|||||||
|
|
||||||
import static cn.lunadeer.dominion.Commands.boolOptions;
|
import static cn.lunadeer.dominion.Commands.boolOptions;
|
||||||
import static cn.lunadeer.dominion.Commands.playerNames;
|
import static cn.lunadeer.dominion.Commands.playerNames;
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.hasPermission;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
import static cn.lunadeer.dominion.commands.Helper.*;
|
import static cn.lunadeer.dominion.commands.Helper.*;
|
||||||
|
|
||||||
public class Member {
|
public class Member {
|
||||||
@ -31,14 +32,13 @@ public class Member {
|
|||||||
*/
|
*/
|
||||||
public static void member_add(CommandSender sender, String[] args) {
|
public static void member_add(CommandSender sender, String[] args) {
|
||||||
try {
|
try {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (args.length < 4) {
|
if (args.length < 4) {
|
||||||
Notification.error(sender, "用法: /dominion member add <领地名称> <玩家名称>");
|
Notification.error(sender, "用法: /dominion member add <领地名称> <玩家名称>");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
Player player = playerOnly(sender);
|
||||||
|
if (player == null) return;
|
||||||
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||||
String dominionName = args[2];
|
String dominionName = args[2];
|
||||||
String playerName = args[3];
|
String playerName = args[3];
|
||||||
MemberController.memberAdd(operator, dominionName, playerName);
|
MemberController.memberAdd(operator, dominionName, playerName);
|
||||||
@ -57,14 +57,13 @@ public class Member {
|
|||||||
*/
|
*/
|
||||||
public static void member_set_flag(CommandSender sender, String[] args) {
|
public static void member_set_flag(CommandSender sender, String[] args) {
|
||||||
try {
|
try {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (args.length < 6) {
|
if (args.length < 6) {
|
||||||
Notification.error(sender, "用法: /dominion member set_flag <领地名称> <玩家名称> <权限名称> <true/false>");
|
Notification.error(sender, "用法: /dominion member set_flag <领地名称> <玩家名称> <权限名称> <true/false>");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
Player player = playerOnly(sender);
|
||||||
|
if (player == null) return;
|
||||||
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||||
String dominionName = args[2];
|
String dominionName = args[2];
|
||||||
String playerName = args[3];
|
String playerName = args[3];
|
||||||
String flagName = args[4];
|
String flagName = args[4];
|
||||||
@ -86,14 +85,13 @@ public class Member {
|
|||||||
*/
|
*/
|
||||||
public static void member_remove(CommandSender sender, String[] args) {
|
public static void member_remove(CommandSender sender, String[] args) {
|
||||||
try {
|
try {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (args.length < 4) {
|
if (args.length < 4) {
|
||||||
Notification.error(sender, "用法: /dominion member remove <领地名称> <玩家名称>");
|
Notification.error(sender, "用法: /dominion member remove <领地名称> <玩家名称>");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
Player player = playerOnly(sender);
|
||||||
|
if (player == null) return;
|
||||||
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||||
String dominionName = args[2];
|
String dominionName = args[2];
|
||||||
String playerName = args[3];
|
String playerName = args[3];
|
||||||
MemberController.memberRemove(operator, dominionName, playerName);
|
MemberController.memberRemove(operator, dominionName, playerName);
|
||||||
@ -112,14 +110,13 @@ public class Member {
|
|||||||
*/
|
*/
|
||||||
public static void member_apply_template(CommandSender sender, String[] args) {
|
public static void member_apply_template(CommandSender sender, String[] args) {
|
||||||
try {
|
try {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (args.length < 5) {
|
if (args.length < 5) {
|
||||||
Notification.error(sender, "用法: /dominion member apply_template <领地名称> <玩家名称> <模板名称>");
|
Notification.error(sender, "用法: /dominion member apply_template <领地名称> <玩家名称> <模板名称>");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
Player player = playerOnly(sender);
|
||||||
|
if (player == null) return;
|
||||||
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||||
String dominionName = args[2];
|
String dominionName = args[2];
|
||||||
String playerName = args[3];
|
String playerName = args[3];
|
||||||
String templateName = args[4];
|
String templateName = args[4];
|
||||||
@ -131,10 +128,6 @@ public class Member {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void handle(@NotNull CommandSender sender, @NotNull String[] args) {
|
public static void handle(@NotNull CommandSender sender, @NotNull String[] args) {
|
||||||
if (args.length < 2) {
|
|
||||||
Notification.error(sender, "用法: /dominion member <add/set_flag/remove/apply_template/list/setting/select_player/select_template>");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
switch (args[1]) {
|
switch (args[1]) {
|
||||||
case "add":
|
case "add":
|
||||||
Member.member_add(sender, args);
|
Member.member_add(sender, args);
|
@ -14,16 +14,12 @@ import org.bukkit.entity.Player;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.hasPermission;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
|
||||||
|
|
||||||
public class Migration {
|
public class Migration {
|
||||||
|
|
||||||
public static void migrate(CommandSender sender, String[] args) {
|
public static void migrate(CommandSender sender, String[] args) {
|
||||||
try {
|
try {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Player player = playerOnly(sender);
|
Player player = playerOnly(sender);
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
|
|
@ -1,14 +1,12 @@
|
|||||||
package cn.lunadeer.dominion.commands;
|
package cn.lunadeer.dominion.commands;
|
||||||
|
|
||||||
|
import cn.lunadeer.dominion.BlueMapConnect;
|
||||||
import cn.lunadeer.dominion.Cache;
|
import cn.lunadeer.dominion.Cache;
|
||||||
import cn.lunadeer.dominion.Dominion;
|
import cn.lunadeer.dominion.Dominion;
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
import cn.lunadeer.dominion.utils.MapRender;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
import cn.lunadeer.minecraftpluginutils.Scheduler;
|
import cn.lunadeer.minecraftpluginutils.Scheduler;
|
||||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||||
import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.databse.DatabaseType;
|
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
@ -17,15 +15,12 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.hasPermission;
|
import static cn.lunadeer.dominion.commands.Apis.notOpOrConsole;
|
||||||
|
|
||||||
|
|
||||||
public class Operator {
|
public class Operator {
|
||||||
|
|
||||||
public static void reloadCache(CommandSender sender, String[] args) {
|
public static void reloadCache(CommandSender sender, String[] args) {
|
||||||
if (!hasPermission(sender, "dominion.admin")) {
|
if (notOpOrConsole(sender)) return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
Scheduler.runTaskAsync(() -> {
|
Scheduler.runTaskAsync(() -> {
|
||||||
Notification.info(sender, "正在从数据库重新加载领地缓存...");
|
Notification.info(sender, "正在从数据库重新加载领地缓存...");
|
||||||
Cache.instance.loadDominions();
|
Cache.instance.loadDominions();
|
||||||
@ -44,19 +39,14 @@ public class Operator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void exportMca(CommandSender sender, String[] args) {
|
public static void exportMca(CommandSender sender, String[] args) {
|
||||||
if (!hasPermission(sender, "dominion.admin")) {
|
if (notOpOrConsole(sender)) return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
Scheduler.runTaskAsync(() -> {
|
Scheduler.runTaskAsync(() -> {
|
||||||
Notification.info(sender, "正在导出拥有领地的MCA文件列表...");
|
Notification.info(sender, "正在导出拥有领地的MCA文件列表...");
|
||||||
Map<String, List<String>> mca_cords = new HashMap<>();
|
Map<String, List<String>> mca_cords = new HashMap<>();
|
||||||
List<DominionDTO> doms = Cache.instance.getDominions();
|
List<DominionDTO> doms = Cache.instance.getDominions();
|
||||||
for (DominionDTO dom : doms) {
|
for (DominionDTO dom : doms) {
|
||||||
if (dom.getWorld() == null) {
|
if (!mca_cords.containsKey(dom.getWorld())) {
|
||||||
continue;
|
mca_cords.put(dom.getWorld(), new ArrayList<>());
|
||||||
}
|
|
||||||
if (!mca_cords.containsKey(dom.getWorld().getName())) {
|
|
||||||
mca_cords.put(dom.getWorld().getName(), new ArrayList<>());
|
|
||||||
}
|
}
|
||||||
Integer world_x1 = dom.getX1();
|
Integer world_x1 = dom.getX1();
|
||||||
Integer world_x2 = dom.getX2();
|
Integer world_x2 = dom.getX2();
|
||||||
@ -69,10 +59,10 @@ public class Operator {
|
|||||||
for (int x = mca_x1; x <= mca_x2; x++) {
|
for (int x = mca_x1; x <= mca_x2; x++) {
|
||||||
for (int z = mca_z1; z <= mca_z2; z++) {
|
for (int z = mca_z1; z <= mca_z2; z++) {
|
||||||
String file_name = "r." + x + "." + z + ".mca";
|
String file_name = "r." + x + "." + z + ".mca";
|
||||||
if (mca_cords.get(dom.getWorld().getName()).contains(file_name)) {
|
if (mca_cords.get(dom.getWorld()).contains(file_name)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
mca_cords.get(dom.getWorld().getName()).add(file_name);
|
mca_cords.get(dom.getWorld()).add(file_name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -114,26 +104,16 @@ public class Operator {
|
|||||||
Notification.error(sender, e.getMessage());
|
Notification.error(sender, e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
MapRender.renderMCA(mca_cords);
|
BlueMapConnect.renderMCA(mca_cords);
|
||||||
Notification.info(sender, "MCA文件列表已导出到 %s", folder.getAbsolutePath());
|
Notification.info(sender, "MCA文件列表已导出到 %s", folder.getAbsolutePath());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void reloadConfig(CommandSender sender, String[] args) {
|
public static void reloadConfig(CommandSender sender, String[] args) {
|
||||||
if (!hasPermission(sender, "dominion.admin")) {
|
if (notOpOrConsole(sender)) return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
Scheduler.runTaskAsync(() -> {
|
Scheduler.runTaskAsync(() -> {
|
||||||
Notification.info(sender, "正在重新加载配置文件...");
|
Notification.info(sender, "正在重新加载配置文件...");
|
||||||
Dominion.config.reload();
|
Dominion.config.reload();
|
||||||
DatabaseManager.instance.reConnection(
|
|
||||||
DatabaseType.valueOf(Dominion.config.getDbType().toUpperCase()),
|
|
||||||
Dominion.config.getDbHost(),
|
|
||||||
Dominion.config.getDbPort(),
|
|
||||||
Dominion.config.getDbName(),
|
|
||||||
Dominion.config.getDbUser(),
|
|
||||||
Dominion.config.getDbPass()
|
|
||||||
);
|
|
||||||
Notification.info(sender, "配置文件已重新加载");
|
Notification.info(sender, "配置文件已重新加载");
|
||||||
});
|
});
|
||||||
}
|
}
|
@ -5,14 +5,12 @@ import cn.lunadeer.dominion.tuis.SysConfig;
|
|||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.hasPermission;
|
import static cn.lunadeer.dominion.commands.Apis.notOpOrConsole;
|
||||||
|
|
||||||
public class SetConfig {
|
public class SetConfig {
|
||||||
|
|
||||||
public static void handler(CommandSender sender, String[] args) {
|
public static void handler(CommandSender sender, String[] args) {
|
||||||
if (!hasPermission(sender, "dominion.admin")) {
|
if (notOpOrConsole(sender)) return;
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (args.length < 2) {
|
if (args.length < 2) {
|
||||||
Notification.error(sender, "参数错误");
|
Notification.error(sender, "参数错误");
|
||||||
return;
|
return;
|
||||||
@ -72,9 +70,6 @@ public class SetConfig {
|
|||||||
case "residence_migration":
|
case "residence_migration":
|
||||||
setResidenceMigration(sender, args);
|
setResidenceMigration(sender, args);
|
||||||
break;
|
break;
|
||||||
case "spawn_protection":
|
|
||||||
setSpawnProtection(sender, args);
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
Notification.error(sender, "未知参数");
|
Notification.error(sender, "未知参数");
|
||||||
}
|
}
|
||||||
@ -102,14 +97,14 @@ public class SetConfig {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void adjustSizeY() {
|
private static void adjustSizeY() {
|
||||||
if (Dominion.config.getLimitVert(null)) {
|
if (Dominion.config.getLimitVert()) {
|
||||||
Dominion.config.setLimitSizeY(Dominion.config.getLimitMaxY(null) - Dominion.config.getLimitMinY(null) + 1);
|
Dominion.config.setLimitSizeY(Dominion.config.getLimitMaxY() - Dominion.config.getLimitMinY() + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void setLimitMaxY(CommandSender sender, String[] args) {
|
private static void setLimitMaxY(CommandSender sender, String[] args) {
|
||||||
int maxY = Integer.parseInt(args[2]);
|
int maxY = Integer.parseInt(args[2]);
|
||||||
if (maxY <= Dominion.config.getLimitMinY(null)) {
|
if (maxY <= Dominion.config.getLimitMinY()) {
|
||||||
Notification.error(sender, "最高Y坐标限制不能小于最低Y坐标限制");
|
Notification.error(sender, "最高Y坐标限制不能小于最低Y坐标限制");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -120,7 +115,7 @@ public class SetConfig {
|
|||||||
|
|
||||||
private static void setLimitMinY(CommandSender sender, String[] args) {
|
private static void setLimitMinY(CommandSender sender, String[] args) {
|
||||||
int minY = Integer.parseInt(args[2]);
|
int minY = Integer.parseInt(args[2]);
|
||||||
if (minY >= Dominion.config.getLimitMaxY(null)) {
|
if (minY >= Dominion.config.getLimitMaxY()) {
|
||||||
Notification.error(sender, "最低Y坐标限制不能大于最高Y坐标限制");
|
Notification.error(sender, "最低Y坐标限制不能大于最高Y坐标限制");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -257,7 +252,6 @@ public class SetConfig {
|
|||||||
} else {
|
} else {
|
||||||
Dominion.config.setEconomyRefund(economyRefund);
|
Dominion.config.setEconomyRefund(economyRefund);
|
||||||
}
|
}
|
||||||
refreshPageOrNot(sender, args);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void setResidenceMigration(CommandSender sender, String[] args) {
|
private static void setResidenceMigration(CommandSender sender, String[] args) {
|
||||||
@ -265,15 +259,4 @@ public class SetConfig {
|
|||||||
Dominion.config.setResidenceMigration(residenceMigration);
|
Dominion.config.setResidenceMigration(residenceMigration);
|
||||||
refreshPageOrNot(sender, args);
|
refreshPageOrNot(sender, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void setSpawnProtection(CommandSender sender, String[] args) {
|
|
||||||
int spawnProtection = Integer.parseInt(args[2]);
|
|
||||||
if (spawnProtection != -1 && spawnProtection <= 0) {
|
|
||||||
Dominion.config.setSpawnProtection(1);
|
|
||||||
Notification.error(sender, "出生点保护半径不能小于或等于0");
|
|
||||||
} else {
|
|
||||||
Dominion.config.setSpawnProtection(spawnProtection);
|
|
||||||
}
|
|
||||||
refreshPageOrNot(sender, args);
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -15,11 +15,10 @@ import java.util.Collections;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.Commands.boolOptions;
|
import static cn.lunadeer.dominion.Commands.boolOptions;
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.hasPermission;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
|
||||||
import static cn.lunadeer.dominion.commands.Helper.allTemplates;
|
import static cn.lunadeer.dominion.commands.Helper.allTemplates;
|
||||||
import static cn.lunadeer.dominion.commands.Helper.playerPrivileges;
|
import static cn.lunadeer.dominion.commands.Helper.playerPrivileges;
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.getPage;
|
import static cn.lunadeer.dominion.tuis.Apis.getPage;
|
||||||
|
|
||||||
public class Template {
|
public class Template {
|
||||||
|
|
||||||
@ -32,9 +31,6 @@ public class Template {
|
|||||||
*/
|
*/
|
||||||
public static void createTemplate(CommandSender sender, String[] args) {
|
public static void createTemplate(CommandSender sender, String[] args) {
|
||||||
try {
|
try {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (args.length < 3) {
|
if (args.length < 3) {
|
||||||
Notification.error(sender, "用法: /dominion template create <模板名称>");
|
Notification.error(sender, "用法: /dominion template create <模板名称>");
|
||||||
return;
|
return;
|
||||||
@ -58,9 +54,6 @@ public class Template {
|
|||||||
*/
|
*/
|
||||||
public static void deleteTemplate(CommandSender sender, String[] args) {
|
public static void deleteTemplate(CommandSender sender, String[] args) {
|
||||||
try {
|
try {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (args.length < 3) {
|
if (args.length < 3) {
|
||||||
Notification.error(sender, "用法: /dominion template delete <模板名称>");
|
Notification.error(sender, "用法: /dominion template delete <模板名称>");
|
||||||
return;
|
return;
|
||||||
@ -84,9 +77,6 @@ public class Template {
|
|||||||
*/
|
*/
|
||||||
public static void setTemplateFlag(CommandSender sender, String[] args) {
|
public static void setTemplateFlag(CommandSender sender, String[] args) {
|
||||||
try {
|
try {
|
||||||
if (!hasPermission(sender, "dominion.default")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (args.length < 5) {
|
if (args.length < 5) {
|
||||||
Notification.error(sender, "用法: /dominion template set_flag <模板名称> <权限名称> <true/false>");
|
Notification.error(sender, "用法: /dominion template set_flag <模板名称> <权限名称> <true/false>");
|
||||||
return;
|
return;
|
||||||
@ -106,10 +96,6 @@ public class Template {
|
|||||||
|
|
||||||
|
|
||||||
public static void handle(@NotNull CommandSender sender, @NotNull String[] args) {
|
public static void handle(@NotNull CommandSender sender, @NotNull String[] args) {
|
||||||
if (args.length < 2) {
|
|
||||||
Notification.error(sender, "用法: /dominion template <list|setting|delete|create|set_flag>");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
switch (args[1]) {
|
switch (args[1]) {
|
||||||
case "list":
|
case "list":
|
||||||
TemplateList.show(sender, args);
|
TemplateList.show(sender, args);
|
@ -48,9 +48,9 @@ public interface AbstractOperator {
|
|||||||
|
|
||||||
public @Nullable Location getLocation();
|
public @Nullable Location getLocation();
|
||||||
|
|
||||||
public @Nullable Player getPlayer();
|
public Player getPlayer();
|
||||||
|
|
||||||
public @Nullable BlockFace getDirection();
|
public BlockFace getDirection();
|
||||||
|
|
||||||
public CompletableFuture<Result> getResponse();
|
public CompletableFuture<Result> getResponse();
|
||||||
}
|
}
|
@ -1,23 +1,19 @@
|
|||||||
package cn.lunadeer.dominion.utils;
|
package cn.lunadeer.dominion.controllers;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Cache;
|
import cn.lunadeer.dominion.Cache;
|
||||||
import cn.lunadeer.dominion.Dominion;
|
|
||||||
import cn.lunadeer.dominion.controllers.AbstractOperator;
|
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
import cn.lunadeer.dominion.dtos.GroupDTO;
|
|
||||||
import cn.lunadeer.dominion.dtos.MemberDTO;
|
import cn.lunadeer.dominion.dtos.MemberDTO;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
public class ControllerUtils {
|
public class Apis {
|
||||||
|
|
||||||
public static boolean notOwner(AbstractOperator player, DominionDTO dominion) {
|
public static boolean notOwner(AbstractOperator player, DominionDTO dominion) {
|
||||||
if (player.isOp() && Dominion.config.getLimitOpBypass()) return false;
|
if (player.isOp()) return false;
|
||||||
return !dominion.getOwner().equals(player.getUniqueId());
|
return !dominion.getOwner().equals(player.getUniqueId());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean noAuthToChangeFlags(AbstractOperator player, DominionDTO dominion) {
|
public static boolean noAuthToChangeFlags(AbstractOperator player, DominionDTO dominion) {
|
||||||
if (player.isOp() && Dominion.config.getLimitOpBypass()) return false;
|
if (player.isOp()) return false;
|
||||||
if (!dominion.getOwner().equals(player.getUniqueId())) {
|
if (!dominion.getOwner().equals(player.getUniqueId())) {
|
||||||
MemberDTO privileges = MemberDTO.select(player.getUniqueId(), dominion.getId());
|
MemberDTO privileges = MemberDTO.select(player.getUniqueId(), dominion.getId());
|
||||||
if (privileges == null || !privileges.getAdmin()) {
|
if (privileges == null || !privileges.getAdmin()) {
|
||||||
@ -41,7 +37,7 @@ public class ControllerUtils {
|
|||||||
player.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "无法获取你的位置信息"));
|
player.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "无法获取你的位置信息"));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
DominionDTO dominion = Cache.instance.getDominionByLoc(location);
|
DominionDTO dominion = Cache.instance.getDominion(location);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -53,20 +49,4 @@ public class ControllerUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 检查一个成员是否是管理员
|
|
||||||
* 此方法会同时尝试搜索玩家所在的权限组是否是管理员
|
|
||||||
*
|
|
||||||
* @param member 成员权限
|
|
||||||
* @return 是否是管理员
|
|
||||||
*/
|
|
||||||
public static boolean isAdmin(@NotNull MemberDTO member) {
|
|
||||||
GroupDTO group = GroupDTO.select(member.getGroupId());
|
|
||||||
if (group == null) {
|
|
||||||
return member.getAdmin();
|
|
||||||
} else {
|
|
||||||
return group.getAdmin();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
@ -3,43 +3,29 @@ package cn.lunadeer.dominion.controllers;
|
|||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
|
||||||
public class BukkitPlayerOperator implements AbstractOperator {
|
public class BukkitPlayerOperator implements AbstractOperator {
|
||||||
|
|
||||||
private final CommandSender player;
|
private final org.bukkit.entity.Player player;
|
||||||
private final CompletableFuture<Result> response = new CompletableFuture<>();
|
private final CompletableFuture<Result> response = new CompletableFuture<>();
|
||||||
|
|
||||||
public BukkitPlayerOperator(CommandSender player) {
|
public BukkitPlayerOperator(org.bukkit.entity.Player player) {
|
||||||
this.player = player;
|
this.player = player;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isConsole() {
|
|
||||||
return !(player instanceof Player);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public UUID getUniqueId() {
|
public UUID getUniqueId() {
|
||||||
if (isConsole()) {
|
return player.getUniqueId();
|
||||||
return UUID.randomUUID();
|
|
||||||
} else {
|
|
||||||
return ((Player) player).getUniqueId();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isOp() {
|
public boolean isOp() {
|
||||||
if (isConsole()) {
|
return player.isOp();
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return ((Player) player).isOp() || player.hasPermission("dominion.admin");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -48,30 +34,19 @@ public class BukkitPlayerOperator implements AbstractOperator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable Location getLocation() {
|
public Location getLocation() {
|
||||||
if (isConsole()) {
|
return player.getLocation();
|
||||||
return null;
|
|
||||||
} else {
|
|
||||||
return ((Player) player).getLocation();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable Player getPlayer() {
|
public Player getPlayer() {
|
||||||
if (isConsole()) {
|
return player;
|
||||||
return null;
|
|
||||||
} else {
|
|
||||||
return (Player) player;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable BlockFace getDirection() {
|
public BlockFace getDirection() {
|
||||||
if (isConsole() || getLocation() == null) {
|
float yaw = player.getLocation().getYaw();
|
||||||
return null;
|
float pitch = player.getLocation().getPitch();
|
||||||
}
|
|
||||||
float yaw = getLocation().getYaw();
|
|
||||||
float pitch = getLocation().getPitch();
|
|
||||||
if (pitch > -45 && pitch < 45) {
|
if (pitch > -45 && pitch < 45) {
|
||||||
if (yaw > -45 && yaw < 45) {
|
if (yaw > -45 && yaw < 45) {
|
||||||
return BlockFace.SOUTH;
|
return BlockFace.SOUTH;
|
||||||
@ -94,7 +69,7 @@ public class BukkitPlayerOperator implements AbstractOperator {
|
|||||||
return response;
|
return response;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static BukkitPlayerOperator create(CommandSender player) {
|
public static BukkitPlayerOperator create(org.bukkit.entity.Player player) {
|
||||||
BukkitPlayerOperator operator = new BukkitPlayerOperator(player);
|
BukkitPlayerOperator operator = new BukkitPlayerOperator(player);
|
||||||
operator.getResponse().thenAccept(result -> {
|
operator.getResponse().thenAccept(result -> {
|
||||||
if (Objects.equals(result.getStatus(), BukkitPlayerOperator.Result.SUCCESS)) {
|
if (Objects.equals(result.getStatus(), BukkitPlayerOperator.Result.SUCCESS)) {
|
@ -4,9 +4,10 @@ import cn.lunadeer.dominion.Cache;
|
|||||||
import cn.lunadeer.dominion.Dominion;
|
import cn.lunadeer.dominion.Dominion;
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||||
import cn.lunadeer.dominion.utils.Particle;
|
import cn.lunadeer.dominion.managers.GlobalTeleport;
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
import cn.lunadeer.minecraftpluginutils.VaultConnect.VaultConnect;
|
import cn.lunadeer.minecraftpluginutils.ParticleRender;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.VaultConnect;
|
||||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
@ -20,17 +21,13 @@ import java.util.List;
|
|||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.DominionNode.isInDominion;
|
import static cn.lunadeer.dominion.DominionNode.isInDominion;
|
||||||
import static cn.lunadeer.dominion.utils.ControllerUtils.getPlayerCurrentDominion;
|
import static cn.lunadeer.dominion.controllers.Apis.getPlayerCurrentDominion;
|
||||||
import static cn.lunadeer.dominion.utils.ControllerUtils.notOwner;
|
import static cn.lunadeer.dominion.controllers.Apis.notOwner;
|
||||||
|
|
||||||
public class DominionController {
|
public class DominionController {
|
||||||
|
|
||||||
public static List<DominionDTO> all(Player owner) {
|
public static List<DominionDTO> all(Player owner) {
|
||||||
return DominionDTO.selectByOwner(owner.getUniqueId());
|
return DominionDTO.selectAll(owner.getUniqueId());
|
||||||
}
|
|
||||||
|
|
||||||
public static List<DominionDTO> all() {
|
|
||||||
return DominionDTO.selectAll();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -92,7 +89,7 @@ public class DominionController {
|
|||||||
operator.setResponse(FAIL.addMessage("已经存在名称为 %s 的领地", name));
|
operator.setResponse(FAIL.addMessage("已经存在名称为 %s 的领地", name));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!loc1.getWorld().getUID().equals(loc2.getWorld().getUID())) {
|
if (!loc1.getWorld().equals(loc2.getWorld())) {
|
||||||
operator.setResponse(FAIL.addMessage("选点世界不一致"));
|
operator.setResponse(FAIL.addMessage("选点世界不一致"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -103,7 +100,7 @@ public class DominionController {
|
|||||||
}
|
}
|
||||||
// 检查领地数量是否达到上限
|
// 检查领地数量是否达到上限
|
||||||
if (amountNotValid(operator)) {
|
if (amountNotValid(operator)) {
|
||||||
operator.setResponse(FAIL.addMessage("你的领地数量已达上限(%d个)", Dominion.config.getLimitAmount(operator.getPlayer())));
|
operator.setResponse(FAIL.addMessage("你的领地数量已达上限(%d个)", Dominion.config.getLimitAmount()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int minX = Math.min(loc1.getBlockX(), loc2.getBlockX());
|
int minX = Math.min(loc1.getBlockX(), loc2.getBlockX());
|
||||||
@ -137,10 +134,10 @@ public class DominionController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 创建 dominion (此步骤不会写入数据)
|
// 创建 dominion (此步骤不会写入数据)
|
||||||
DominionDTO dominion = DominionDTO.create(parent_dominion.getId() == -1 ? operator.getUniqueId() : parent_dominion.getOwner(), name, loc1.getWorld(),
|
DominionDTO dominion = DominionDTO.create(operator.getUniqueId(), name, loc1.getWorld().getName(),
|
||||||
minX, minY, minZ, maxX, maxY, maxZ, parent_dominion);
|
minX, minY, minZ, maxX, maxY, maxZ, parent_dominion);
|
||||||
// 如果parent_dominion不为-1 检查是否在同一世界
|
// 如果parent_dominion不为-1 检查是否在同一世界
|
||||||
if (parent_dominion.getId() != -1 && !parent_dominion.getWorldUid().equals(dominion.getWorldUid())) {
|
if (parent_dominion.getId() != -1 && !parent_dominion.getWorld().equals(dominion.getWorld())) {
|
||||||
operator.setResponse(FAIL.addMessage("父领地与子领地不在同一世界。"));
|
operator.setResponse(FAIL.addMessage("父领地与子领地不在同一世界。"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -154,12 +151,7 @@ public class DominionController {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 获取此领地的所有同级领地
|
// 获取此领地的所有同级领地
|
||||||
List<DominionDTO> sub_dominions = DominionDTO.selectByParentId(dominion.getWorldUid(), parent_dominion.getId());
|
List<DominionDTO> sub_dominions = DominionDTO.selectByParentId(dominion.getWorld(), parent_dominion.getId());
|
||||||
// 检查是否与出生点保护冲突
|
|
||||||
if (isIntersectSpawn(operator, dominion)) {
|
|
||||||
operator.setResponse(FAIL.addMessage("与出生点保护冲突"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// 检查是否与其他子领地冲突
|
// 检查是否与其他子领地冲突
|
||||||
for (DominionDTO sub_dominion : sub_dominions) {
|
for (DominionDTO sub_dominion : sub_dominions) {
|
||||||
if (isIntersect(sub_dominion, dominion)) {
|
if (isIntersect(sub_dominion, dominion)) {
|
||||||
@ -168,11 +160,8 @@ public class DominionController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// 检查经济
|
// 检查经济
|
||||||
if (!skipEco) {
|
if (!skipEco)
|
||||||
if (handleEconomyFailed(operator, Dominion.config.getEconomyOnlyXZ(operator.getPlayer()) ? dominion.getSquare() : dominion.getVolume(), true, FAIL, SUCCESS)) {
|
handleEconomy(operator, Dominion.config.getEconomyOnlyXZ() ? dominion.getSquare() : dominion.getVolume(), true, FAIL, SUCCESS);
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dominion = DominionDTO.insert(dominion);
|
dominion = DominionDTO.insert(dominion);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
operator.setResponse(FAIL.addMessage("创建领地失败,数据库错误,请联系管理员"));
|
operator.setResponse(FAIL.addMessage("创建领地失败,数据库错误,请联系管理员"));
|
||||||
@ -183,36 +172,6 @@ public class DominionController {
|
|||||||
operator.setResponse(SUCCESS);
|
operator.setResponse(SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isIntersectSpawn(AbstractOperator operator, DominionDTO dominion) {
|
|
||||||
if (operator.isOp() && Dominion.config.getLimitOpBypass()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
int radius = Dominion.config.getSpawnProtection();
|
|
||||||
if (radius == -1) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
World world = dominion.getWorld();
|
|
||||||
if (world == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
Location spawn = world.getSpawnLocation();
|
|
||||||
return isIntersect(dominion, spawn.getBlockX() - radius, spawn.getBlockY() - radius, spawn.getBlockZ() - radius
|
|
||||||
, spawn.getBlockX() + radius, spawn.getBlockY() + radius, spawn.getBlockZ() + radius);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean isIntersectSpawn(AbstractOperator operator, @NotNull World world, int[] cords) {
|
|
||||||
if (operator.isOp() && Dominion.config.getLimitOpBypass()) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
int radius = Dominion.config.getSpawnProtection();
|
|
||||||
if (radius == -1) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
Location spawn = world.getSpawnLocation();
|
|
||||||
return isIntersect(cords, spawn.getBlockX() - radius, spawn.getBlockY() - radius, spawn.getBlockZ() - radius
|
|
||||||
, spawn.getBlockX() + radius, spawn.getBlockY() + radius, spawn.getBlockZ() + radius);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 向一个方向扩展领地
|
* 向一个方向扩展领地
|
||||||
* 会尝试对操作者当前所在的领地进行操作,当操作者不在一个领地内或者在子领地内时
|
* 会尝试对操作者当前所在的领地进行操作,当操作者不在一个领地内或者在子领地内时
|
||||||
@ -247,11 +206,6 @@ public class DominionController {
|
|||||||
if (newCords == null) {
|
if (newCords == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 检查是否与出生点保护冲突
|
|
||||||
if (isIntersectSpawn(operator, dominion.getWorld(), newCords)) {
|
|
||||||
operator.setResponse(FAIL.addMessage("与出生点保护冲突"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
// 校验是否超出父领地范围
|
// 校验是否超出父领地范围
|
||||||
DominionDTO parent_dominion = DominionDTO.select(dominion.getParentDomId());
|
DominionDTO parent_dominion = DominionDTO.select(dominion.getParentDomId());
|
||||||
if (parent_dominion == null) {
|
if (parent_dominion == null) {
|
||||||
@ -263,7 +217,7 @@ public class DominionController {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 获取同世界下的所有同级领地
|
// 获取同世界下的所有同级领地
|
||||||
List<DominionDTO> exist_dominions = DominionDTO.selectByParentId(dominion.getWorldUid(), dominion.getParentDomId());
|
List<DominionDTO> exist_dominions = DominionDTO.selectByParentId(dominion.getWorld(), dominion.getParentDomId());
|
||||||
for (DominionDTO exist_dominion : exist_dominions) {
|
for (DominionDTO exist_dominion : exist_dominions) {
|
||||||
if (isIntersect(exist_dominion, newCords)) {
|
if (isIntersect(exist_dominion, newCords)) {
|
||||||
// 如果是自己,跳过
|
// 如果是自己,跳过
|
||||||
@ -274,8 +228,8 @@ public class DominionController {
|
|||||||
}
|
}
|
||||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功扩展领地 %s %d格", dominion_name, size);
|
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功扩展领地 %s %d格", dominion_name, size);
|
||||||
// 检查经济
|
// 检查经济
|
||||||
if (handleEconomyFailed(operator, Dominion.config.getEconomyOnlyXZ(operator.getPlayer()) ? sqr(newCords) - dominion.getSquare() : vol(newCords) - dominion.getVolume()
|
handleEconomy(operator, Dominion.config.getEconomyOnlyXZ() ? sqr(newCords) - dominion.getSquare() : vol(newCords) - dominion.getVolume()
|
||||||
, true, FAIL, SUCCESS)) return;
|
, true, FAIL, SUCCESS);
|
||||||
// 显示粒子效果
|
// 显示粒子效果
|
||||||
dominion = dominion.setXYZ(newCords);
|
dominion = dominion.setXYZ(newCords);
|
||||||
handleParticle(operator, dominion);
|
handleParticle(operator, dominion);
|
||||||
@ -317,7 +271,7 @@ public class DominionController {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 获取所有的子领地
|
// 获取所有的子领地
|
||||||
List<DominionDTO> sub_dominions = DominionDTO.selectByParentId(dominion.getWorldUid(), dominion.getId());
|
List<DominionDTO> sub_dominions = DominionDTO.selectByParentId(dominion.getWorld(), dominion.getId());
|
||||||
for (DominionDTO sub_dominion : sub_dominions) {
|
for (DominionDTO sub_dominion : sub_dominions) {
|
||||||
if (!isContained(sub_dominion, newCords)) {
|
if (!isContained(sub_dominion, newCords)) {
|
||||||
operator.setResponse(FAIL.addMessage("缩小后的领地无法包含子领地 %s", sub_dominion.getName()));
|
operator.setResponse(FAIL.addMessage("缩小后的领地无法包含子领地 %s", sub_dominion.getName()));
|
||||||
@ -326,8 +280,8 @@ public class DominionController {
|
|||||||
}
|
}
|
||||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功缩小领地 %s %d格", dominion_name, size);
|
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功缩小领地 %s %d格", dominion_name, size);
|
||||||
// 退还经济
|
// 退还经济
|
||||||
if (handleEconomyFailed(operator, Dominion.config.getEconomyOnlyXZ(operator.getPlayer()) ? dominion.getSquare() - sqr(newCords) : dominion.getVolume() - vol(newCords)
|
handleEconomy(operator, Dominion.config.getEconomyOnlyXZ() ? dominion.getSquare() - sqr(newCords) : dominion.getVolume() - vol(newCords)
|
||||||
, false, FAIL, SUCCESS)) return;
|
, false, FAIL, SUCCESS);
|
||||||
// 显示粒子效果
|
// 显示粒子效果
|
||||||
dominion = dominion.setXYZ(newCords);
|
dominion = dominion.setXYZ(newCords);
|
||||||
handleParticle(operator, dominion);
|
handleParticle(operator, dominion);
|
||||||
@ -335,7 +289,7 @@ public class DominionController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static int vol(int x1, int y1, int z1, int x2, int y2, int z2) {
|
private static int vol(int x1, int y1, int z1, int x2, int y2, int z2) {
|
||||||
return (x2 - x1) * (y2 - y1) * (z2 - z1);
|
return (x2 - x1 + 1) * (y2 - y1 + 1) * (z2 - z1 + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int vol(int[] cords) {
|
private static int vol(int[] cords) {
|
||||||
@ -343,7 +297,7 @@ public class DominionController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static int sqr(int x1, int z1, int x2, int z2) {
|
private static int sqr(int x1, int z1, int x2, int z2) {
|
||||||
return (x2 - x1) * (z2 - z1);
|
return (x2 - x1 + 1) * (z2 - z1 + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static int sqr(int[] cords) {
|
private static int sqr(int[] cords) {
|
||||||
@ -364,6 +318,10 @@ public class DominionController {
|
|||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (dominion.getServerId() != GlobalTeleport.instance.getThisServerId()) {
|
||||||
|
operator.setResponse(FAIL.addMessage("禁止跨服务器操作"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
List<DominionDTO> sub_dominions = getSubDominionsRecursive(dominion);
|
List<DominionDTO> sub_dominions = getSubDominionsRecursive(dominion);
|
||||||
if (!force) {
|
if (!force) {
|
||||||
AbstractOperator.Result WARNING = new AbstractOperator.Result(AbstractOperator.Result.WARNING, "删除领地 %s 会同时删除其所有子领地,是否继续?", dominion_name);
|
AbstractOperator.Result WARNING = new AbstractOperator.Result(AbstractOperator.Result.WARNING, "删除领地 %s 会同时删除其所有子领地,是否继续?", dominion_name);
|
||||||
@ -376,19 +334,17 @@ public class DominionController {
|
|||||||
}
|
}
|
||||||
DominionDTO.delete(dominion);
|
DominionDTO.delete(dominion);
|
||||||
// 退还经济
|
// 退还经济
|
||||||
int count;
|
int count = 0;
|
||||||
if (Dominion.config.getEconomyOnlyXZ(operator.getPlayer())) {
|
if (Dominion.config.getEconomyOnlyXZ()) {
|
||||||
count = dominion.getSquare();
|
|
||||||
for (DominionDTO sub_dominion : sub_dominions) {
|
for (DominionDTO sub_dominion : sub_dominions) {
|
||||||
count += sub_dominion.getSquare();
|
count += sub_dominion.getSquare();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
count = dominion.getVolume();
|
|
||||||
for (DominionDTO sub_dominion : sub_dominions) {
|
for (DominionDTO sub_dominion : sub_dominions) {
|
||||||
count += sub_dominion.getVolume();
|
count += sub_dominion.getVolume();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (handleEconomyFailed(operator, count, false, FAIL, SUCCESS)) return;
|
handleEconomy(operator, count, false, FAIL, SUCCESS);
|
||||||
operator.setResponse(SUCCESS);
|
operator.setResponse(SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -478,9 +434,13 @@ public class DominionController {
|
|||||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "领地 %s 不存在", dominion_name));
|
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "领地 %s 不存在", dominion_name));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
World world = dominion.getWorld();
|
if (dominion.getServerId() != GlobalTeleport.instance.getThisServerId()) {
|
||||||
|
operator.setResponse(FAIL.addMessage("禁止跨服务器操作"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
World world = Dominion.instance.getServer().getWorld(dominion.getWorld());
|
||||||
if (world == null) {
|
if (world == null) {
|
||||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "领地所在世界不存在"));
|
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "世界 %s 不存在", dominion.getWorld()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Location loc = new Location(world, x, y, z);
|
Location loc = new Location(world, x, y, z);
|
||||||
@ -544,6 +504,10 @@ public class DominionController {
|
|||||||
operator.setResponse(FAIL.addMessage("操作者信息丢失,请联系管理员"));
|
operator.setResponse(FAIL.addMessage("操作者信息丢失,请联系管理员"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (Objects.equals(player_name, operatorDTO.getLastKnownName())) {
|
||||||
|
operator.setResponse(FAIL.addMessage("不能将领地转让给自己"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
DominionDTO dominion = getExistDomAndIsOwner(operator, dom_name);
|
DominionDTO dominion = getExistDomAndIsOwner(operator, dom_name);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
return;
|
return;
|
||||||
@ -553,10 +517,6 @@ public class DominionController {
|
|||||||
operator.setResponse(FAIL.addMessage("玩家 %s 不存在", player_name));
|
operator.setResponse(FAIL.addMessage("玩家 %s 不存在", player_name));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (Objects.equals(dominion.getOwner(), player.getUuid())) {
|
|
||||||
operator.setResponse(FAIL.addMessage("领地 %s 已经属于 %s,无需转移", dom_name, player_name));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (dominion.getParentDomId() != -1) {
|
if (dominion.getParentDomId() != -1) {
|
||||||
operator.setResponse(FAIL.addMessage("子领地无法转让,你可以通过将 %s 设置为管理员来让其管理领地 %s ", player_name, dom_name));
|
operator.setResponse(FAIL.addMessage("子领地无法转让,你可以通过将 %s 设置为管理员来让其管理领地 %s ", player_name, dom_name));
|
||||||
return;
|
return;
|
||||||
@ -637,12 +597,6 @@ public class DominionController {
|
|||||||
return isIntersect(a, cord[0], cord[1], cord[2], cord[3], cord[4], cord[5]);
|
return isIntersect(a, cord[0], cord[1], cord[2], cord[3], cord[4], cord[5]);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isIntersect(int[] cord, Integer x1, Integer y1, Integer z1, Integer x2, Integer y2, Integer z2) {
|
|
||||||
return cord[0] < x2 && cord[3] > x1 &&
|
|
||||||
cord[1] < y2 && cord[4] > y1 &&
|
|
||||||
cord[2] < z2 && cord[5] > z1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 判断 sub 是否完全被 parent 包裹
|
* 判断 sub 是否完全被 parent 包裹
|
||||||
*/
|
*/
|
||||||
@ -679,7 +633,7 @@ public class DominionController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static List<DominionDTO> getSubDominionsRecursive(DominionDTO dominion) {
|
private static List<DominionDTO> getSubDominionsRecursive(DominionDTO dominion) {
|
||||||
List<DominionDTO> sub_dominions = DominionDTO.selectByParentId(dominion.getWorldUid(), dominion.getId());
|
List<DominionDTO> sub_dominions = DominionDTO.selectByParentId(dominion.getWorld(), dominion.getId());
|
||||||
List<DominionDTO> sub_sub_dominions = new ArrayList<>();
|
List<DominionDTO> sub_sub_dominions = new ArrayList<>();
|
||||||
for (DominionDTO sub_dominion : sub_dominions) {
|
for (DominionDTO sub_dominion : sub_dominions) {
|
||||||
sub_sub_dominions.addAll(getSubDominionsRecursive(sub_dominion));
|
sub_sub_dominions.addAll(getSubDominionsRecursive(sub_dominion));
|
||||||
@ -720,24 +674,24 @@ public class DominionController {
|
|||||||
operator.setResponse(FAIL.addMessage("领地的任意一边长度不得小于4"));
|
operator.setResponse(FAIL.addMessage("领地的任意一边长度不得小于4"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (x_length > Dominion.config.getLimitSizeX(operator.getPlayer()) && Dominion.config.getLimitSizeX(operator.getPlayer()) > 0) {
|
if (x_length > Dominion.config.getLimitSizeX() && Dominion.config.getLimitSizeX() > 0) {
|
||||||
operator.setResponse(FAIL.addMessage("领地X方向长度不能超过 %d", Dominion.config.getLimitSizeX(operator.getPlayer())));
|
operator.setResponse(FAIL.addMessage("领地X方向长度不能超过 %d", Dominion.config.getLimitSizeX()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (y_length > Dominion.config.getLimitSizeY(operator.getPlayer()) && Dominion.config.getLimitSizeY(operator.getPlayer()) > 0) {
|
if (y_length > Dominion.config.getLimitSizeY() && Dominion.config.getLimitSizeY() > 0) {
|
||||||
operator.setResponse(FAIL.addMessage("领地Y方向高度不能超过 %d", Dominion.config.getLimitSizeY(operator.getPlayer())));
|
operator.setResponse(FAIL.addMessage("领地Y方向高度不能超过 %d", Dominion.config.getLimitSizeY()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (z_length > Dominion.config.getLimitSizeZ(operator.getPlayer()) && Dominion.config.getLimitSizeZ(operator.getPlayer()) > 0) {
|
if (z_length > Dominion.config.getLimitSizeZ() && Dominion.config.getLimitSizeZ() > 0) {
|
||||||
operator.setResponse(FAIL.addMessage("领地Z方向长度不能超过 %d", Dominion.config.getLimitSizeZ(operator.getPlayer())));
|
operator.setResponse(FAIL.addMessage("领地Z方向长度不能超过 %d", Dominion.config.getLimitSizeZ()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (y2 > Dominion.config.getLimitMaxY(operator.getPlayer())) {
|
if (y2 > Dominion.config.getLimitMaxY()) {
|
||||||
operator.setResponse(FAIL.addMessage("领地Y坐标不能超过 %d", Dominion.config.getLimitMaxY(operator.getPlayer())));
|
operator.setResponse(FAIL.addMessage("领地Y坐标不能超过 %d", Dominion.config.getLimitMaxY()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (y1 < Dominion.config.getLimitMinY(operator.getPlayer())) {
|
if (y1 < Dominion.config.getLimitMinY()) {
|
||||||
operator.setResponse(FAIL.addMessage("领地Y坐标不能低于 %d", Dominion.config.getLimitMinY(operator.getPlayer())));
|
operator.setResponse(FAIL.addMessage("领地Y坐标不能低于 %d", Dominion.config.getLimitMinY()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -748,10 +702,10 @@ public class DominionController {
|
|||||||
if (operator.isOp() && Dominion.config.getLimitOpBypass()) {
|
if (operator.isOp() && Dominion.config.getLimitOpBypass()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (Dominion.config.getLimitDepth(operator.getPlayer()) == -1) {
|
if (Dominion.config.getLimitDepth() == -1) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (parent_dom.getId() != -1 && Dominion.config.getLimitDepth(operator.getPlayer()) == 0) {
|
if (parent_dom.getId() != -1 && Dominion.config.getLimitDepth() == 0) {
|
||||||
operator.setResponse(FAIL.addMessage("不允许创建子领地"));
|
operator.setResponse(FAIL.addMessage("不允许创建子领地"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -763,8 +717,8 @@ public class DominionController {
|
|||||||
parent_dom = Cache.instance.getDominion(parent_dom.getParentDomId());
|
parent_dom = Cache.instance.getDominion(parent_dom.getParentDomId());
|
||||||
level++;
|
level++;
|
||||||
}
|
}
|
||||||
if (level >= Dominion.config.getLimitDepth(operator.getPlayer())) {
|
if (level >= Dominion.config.getLimitDepth()) {
|
||||||
operator.setResponse(FAIL.addMessage("子领地嵌套深度不能超过 %d", Dominion.config.getLimitDepth(operator.getPlayer())));
|
operator.setResponse(FAIL.addMessage("子领地嵌套深度不能超过 %d", Dominion.config.getLimitDepth()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -774,14 +728,14 @@ public class DominionController {
|
|||||||
if (operator.isOp() && Dominion.config.getLimitOpBypass()) {
|
if (operator.isOp() && Dominion.config.getLimitOpBypass()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return Cache.instance.getPlayerDominionCount(operator.getUniqueId()) >= Dominion.config.getLimitAmount(operator.getPlayer()) && Dominion.config.getLimitAmount(operator.getPlayer()) != -1;
|
return Cache.instance.getPlayerDominionCount(operator.getUniqueId()) >= Dominion.config.getLimitAmount() && Dominion.config.getLimitAmount() != -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean worldNotValid(AbstractOperator operator, String worldName) {
|
private static boolean worldNotValid(AbstractOperator operator, String world) {
|
||||||
if (operator.isOp() && Dominion.config.getLimitOpBypass()) {
|
if (operator.isOp() && Dominion.config.getLimitOpBypass()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return Dominion.config.getWorldBlackList(operator.getPlayer()).contains(worldName);
|
return Dominion.config.getWorldBlackList().contains(world);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static DominionDTO getExistDomAndIsOwner(AbstractOperator operator, String dominion_name) {
|
private static DominionDTO getExistDomAndIsOwner(AbstractOperator operator, String dominion_name) {
|
||||||
@ -807,31 +761,26 @@ public class DominionController {
|
|||||||
* @param FAIL 失败消息
|
* @param FAIL 失败消息
|
||||||
* @param SUCCESS 成功消息
|
* @param SUCCESS 成功消息
|
||||||
*/
|
*/
|
||||||
private static boolean handleEconomyFailed(AbstractOperator operator, Integer count, boolean paid, AbstractOperator.Result FAIL, AbstractOperator.Result SUCCESS) {
|
private static void handleEconomy(AbstractOperator operator, Integer count, boolean paid, AbstractOperator.Result FAIL, AbstractOperator.Result SUCCESS) {
|
||||||
if (Dominion.config.getEconomyEnable()) {
|
if (Dominion.config.getEconomyEnable()) {
|
||||||
if (!VaultConnect.instance.economyAvailable()) {
|
if (!VaultConnect.instance.economyAvailable()) {
|
||||||
operator.setResponse(FAIL.addMessage("没有可用的经济插件系统,请联系服主。"));
|
operator.setResponse(FAIL.addMessage("没有可用的经济插件系统,请联系服主。"));
|
||||||
return true;
|
return;
|
||||||
}
|
}
|
||||||
if (operator.isOp() && Dominion.config.getLimitOpBypass()) {
|
float priceOrRefund = count * Dominion.config.getEconomyPrice();
|
||||||
SUCCESS.addMessage("你是OP,已跳过经济检查。");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
float priceOrRefund = count * Dominion.config.getEconomyPrice(operator.getPlayer());
|
|
||||||
if (paid) {
|
if (paid) {
|
||||||
if (VaultConnect.instance.getBalance(operator.getPlayer()) < priceOrRefund) {
|
if (VaultConnect.instance.getBalance(operator.getPlayer()) < priceOrRefund) {
|
||||||
operator.setResponse(FAIL.addMessage("你的余额不足,需要 %.2f %s", priceOrRefund, VaultConnect.instance.currencyNamePlural()));
|
operator.setResponse(FAIL.addMessage("你的余额不足,需要 %.2f %s", priceOrRefund, VaultConnect.instance.currencyNamePlural()));
|
||||||
return true;
|
return;
|
||||||
}
|
}
|
||||||
SUCCESS.addMessage("已扣除 %.2f %s", priceOrRefund, VaultConnect.instance.currencyNamePlural());
|
SUCCESS.addMessage("已扣除 %.2f %s", priceOrRefund, VaultConnect.instance.currencyNamePlural());
|
||||||
VaultConnect.instance.withdrawPlayer(operator.getPlayer(), priceOrRefund);
|
VaultConnect.instance.withdrawPlayer(operator.getPlayer(), priceOrRefund);
|
||||||
} else {
|
} else {
|
||||||
float refund = priceOrRefund * Dominion.config.getEconomyRefund(operator.getPlayer());
|
float refund = priceOrRefund * Dominion.config.getEconomyRefund();
|
||||||
VaultConnect.instance.depositPlayer(operator.getPlayer(), refund);
|
VaultConnect.instance.depositPlayer(operator.getPlayer(), refund);
|
||||||
SUCCESS.addMessage("已退还 %.2f %s", refund, VaultConnect.instance.currencyNamePlural());
|
SUCCESS.addMessage("已退还 %.2f %s", refund, VaultConnect.instance.currencyNamePlural());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -842,7 +791,9 @@ public class DominionController {
|
|||||||
*/
|
*/
|
||||||
private static void handleParticle(AbstractOperator operator, DominionDTO dominion) {
|
private static void handleParticle(AbstractOperator operator, DominionDTO dominion) {
|
||||||
if (operator instanceof BukkitPlayerOperator) {
|
if (operator instanceof BukkitPlayerOperator) {
|
||||||
Particle.showBorder(operator.getPlayer(), dominion);
|
ParticleRender.showBoxFace(operator.getPlayer(),
|
||||||
|
dominion.getLocation1(),
|
||||||
|
dominion.getLocation2());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -854,7 +805,7 @@ public class DominionController {
|
|||||||
operator.setResponse(FAIL.addMessage("无法获取你的位置"));
|
operator.setResponse(FAIL.addMessage("无法获取你的位置"));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (!operator.getLocation().getWorld().getUID().equals(dominion.getWorldUid())) {
|
if (!operator.getLocation().getWorld().getName().equals(dominion.getWorld())) {
|
||||||
operator.setResponse(FAIL.addMessage("禁止跨世界操作"));
|
operator.setResponse(FAIL.addMessage("禁止跨世界操作"));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -867,10 +818,6 @@ public class DominionController {
|
|||||||
|
|
||||||
private static int[] expandContractSizeChange(AbstractOperator operator, @NotNull DominionDTO dominion, boolean expand, int size, AbstractOperator.Result FAIL) {
|
private static int[] expandContractSizeChange(AbstractOperator operator, @NotNull DominionDTO dominion, boolean expand, int size, AbstractOperator.Result FAIL) {
|
||||||
BlockFace face = operator.getDirection();
|
BlockFace face = operator.getDirection();
|
||||||
if (face == null) {
|
|
||||||
operator.setResponse(FAIL.addMessage("无法获取你的方向"));
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
int[] result = new int[6];
|
int[] result = new int[6];
|
||||||
result[0] = dominion.getX1();
|
result[0] = dominion.getX1();
|
||||||
result[1] = dominion.getY1();
|
result[1] = dominion.getY1();
|
||||||
@ -929,7 +876,7 @@ public class DominionController {
|
|||||||
for (DominionDTO sub_dominion : sub_dominions) {
|
for (DominionDTO sub_dominion : sub_dominions) {
|
||||||
sub_names = sub_dominion.getName() + ", ";
|
sub_names = sub_dominion.getName() + ", ";
|
||||||
}
|
}
|
||||||
if (!sub_dominions.isEmpty()) {
|
if (sub_dominions.size() > 0) {
|
||||||
sub_names = sub_names.substring(0, sub_names.length() - 2);
|
sub_names = sub_names.substring(0, sub_names.length() - 2);
|
||||||
WARNING.addMessage("(子领地:%s)", sub_names);
|
WARNING.addMessage("(子领地:%s)", sub_names);
|
||||||
}
|
}
|
@ -2,9 +2,8 @@ package cn.lunadeer.dominion.controllers;
|
|||||||
|
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
import cn.lunadeer.dominion.dtos.Flag;
|
import cn.lunadeer.dominion.dtos.Flag;
|
||||||
import cn.lunadeer.dominion.utils.ControllerUtils;
|
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.ControllerUtils.noAuthToChangeFlags;
|
import static cn.lunadeer.dominion.controllers.Apis.noAuthToChangeFlags;
|
||||||
|
|
||||||
public class FlagsController {
|
public class FlagsController {
|
||||||
|
|
||||||
@ -14,9 +13,10 @@ public class FlagsController {
|
|||||||
* @param operator 操作者
|
* @param operator 操作者
|
||||||
* @param flag 权限名称
|
* @param flag 权限名称
|
||||||
* @param value 权限值
|
* @param value 权限值
|
||||||
|
* @return 设置后的领地信息
|
||||||
*/
|
*/
|
||||||
public static void setFlag(AbstractOperator operator, String flag, boolean value) {
|
public static void setFlag(AbstractOperator operator, String flag, boolean value) {
|
||||||
DominionDTO dominion = ControllerUtils.getPlayerCurrentDominion(operator);
|
DominionDTO dominion = Apis.getPlayerCurrentDominion(operator);
|
||||||
if (dominion == null) return;
|
if (dominion == null) return;
|
||||||
setFlag(operator, flag, value, dominion.getName());
|
setFlag(operator, flag, value, dominion.getName());
|
||||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "设置领地权限 %s 为 %s", flag, value));
|
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "设置领地权限 %s 为 %s", flag, value));
|
||||||
@ -29,6 +29,7 @@ public class FlagsController {
|
|||||||
* @param flag 权限名称
|
* @param flag 权限名称
|
||||||
* @param value 权限值
|
* @param value 权限值
|
||||||
* @param dominionName 领地名称
|
* @param dominionName 领地名称
|
||||||
|
* @return 设置后的领地信息
|
||||||
*/
|
*/
|
||||||
public static void setFlag(AbstractOperator operator, String flag, boolean value, String dominionName) {
|
public static void setFlag(AbstractOperator operator, String flag, boolean value, String dominionName) {
|
||||||
DominionDTO dominion = DominionDTO.select(dominionName);
|
DominionDTO dominion = DominionDTO.select(dominionName);
|
@ -4,12 +4,12 @@ import cn.lunadeer.dominion.dtos.*;
|
|||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.ControllerUtils.noAuthToChangeFlags;
|
import static cn.lunadeer.dominion.controllers.Apis.noAuthToChangeFlags;
|
||||||
import static cn.lunadeer.dominion.utils.ControllerUtils.notOwner;
|
import static cn.lunadeer.dominion.controllers.Apis.notOwner;
|
||||||
|
|
||||||
public class GroupController {
|
public class GroupController {
|
||||||
|
|
||||||
public static void createGroup(AbstractOperator operator, String domName, String groupName, String nameColored) {
|
public static void createGroup(AbstractOperator operator, String domName, String groupName) {
|
||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "创建权限组 %s 失败", groupName);
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "创建权限组 %s 失败", groupName);
|
||||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "创建权限组 %s 成功", groupName);
|
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "创建权限组 %s 成功", groupName);
|
||||||
if (groupName.contains(" ")) {
|
if (groupName.contains(" ")) {
|
||||||
@ -30,7 +30,7 @@ public class GroupController {
|
|||||||
operator.setResponse(FAIL.addMessage("领地 %s 已存在名为 %s 的权限组", domName, groupName));
|
operator.setResponse(FAIL.addMessage("领地 %s 已存在名为 %s 的权限组", domName, groupName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
group = GroupDTO.create(nameColored, dominion);
|
group = GroupDTO.create(groupName, dominion);
|
||||||
if (group == null) {
|
if (group == null) {
|
||||||
operator.setResponse(FAIL.addMessage("请联系服务器管理员"));
|
operator.setResponse(FAIL.addMessage("请联系服务器管理员"));
|
||||||
return;
|
return;
|
||||||
@ -96,7 +96,7 @@ public class GroupController {
|
|||||||
operator.setResponse(SUCCESS);
|
operator.setResponse(SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void renameGroup(AbstractOperator operator, String domName, String oldName, String newName, String nameColored) {
|
public static void renameGroup(AbstractOperator operator, String domName, String oldName, String newName) {
|
||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "重命名权限组 %s 为 %s 失败", oldName, newName);
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "重命名权限组 %s 为 %s 失败", oldName, newName);
|
||||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "重命名权限组 %s 为 %s 成功", oldName, newName);
|
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "重命名权限组 %s 为 %s 成功", oldName, newName);
|
||||||
if (newName.contains(" ")) {
|
if (newName.contains(" ")) {
|
||||||
@ -117,7 +117,7 @@ public class GroupController {
|
|||||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在名为 %s 的权限组", domName, oldName));
|
operator.setResponse(FAIL.addMessage("领地 %s 不存在名为 %s 的权限组", domName, oldName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
group = group.setName(nameColored);
|
group = group.setName(newName);
|
||||||
if (group == null) {
|
if (group == null) {
|
||||||
operator.setResponse(FAIL.addMessage("请联系服务器管理员"));
|
operator.setResponse(FAIL.addMessage("请联系服务器管理员"));
|
||||||
return;
|
return;
|
@ -2,7 +2,8 @@ package cn.lunadeer.dominion.controllers;
|
|||||||
|
|
||||||
import cn.lunadeer.dominion.dtos.*;
|
import cn.lunadeer.dominion.dtos.*;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.ControllerUtils.*;
|
import static cn.lunadeer.dominion.controllers.Apis.noAuthToChangeFlags;
|
||||||
|
import static cn.lunadeer.dominion.controllers.Apis.notOwner;
|
||||||
|
|
||||||
public class MemberController {
|
public class MemberController {
|
||||||
|
|
||||||
@ -32,7 +33,7 @@ public class MemberController {
|
|||||||
operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员", player_name, dominionName));
|
operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员", player_name, dominionName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (isAdmin(privilege) && notOwner(operator, dominion)) {
|
if (privilege.getAdmin() && notOwner(operator, dominion)) {
|
||||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法移除一个领地管理员", dominionName));
|
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法移除一个领地管理员", dominionName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -68,12 +69,7 @@ public class MemberController {
|
|||||||
operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员", player_name, dominionName));
|
operator.setResponse(FAIL.addMessage("玩家 %s 不是领地 %s 的成员", player_name, dominionName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
GroupDTO group = GroupDTO.select(privilege.getGroupId());
|
if ((flag.equals("admin") || privilege.getAdmin()) && notOwner(operator, dominion)) {
|
||||||
if (group != null) {
|
|
||||||
operator.setResponse(FAIL.addMessage("玩家 %s 属于 %s 权限组,无法单独设置权限", player_name, group.getName()));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if ((flag.equals("admin") || isAdmin(privilege)) && notOwner(operator, dominion)) {
|
|
||||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法修改其他玩家管理员的权限", dominionName));
|
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法修改其他玩家管理员的权限", dominionName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -104,10 +100,6 @@ public class MemberController {
|
|||||||
operator.setResponse(FAIL.addMessage("玩家 %s 不存在或没有登录过", player_name));
|
operator.setResponse(FAIL.addMessage("玩家 %s 不存在或没有登录过", player_name));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (dominion.getOwner().equals(player.getUuid())) {
|
|
||||||
operator.setResponse(FAIL.addMessage("玩家 %s 是领地 %s 的拥有者,不可以被添加为成员", player_name, dominionName));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
MemberDTO privilege = MemberDTO.select(player.getUuid(), dominion.getId());
|
MemberDTO privilege = MemberDTO.select(player.getUuid(), dominion.getId());
|
||||||
if (privilege != null) {
|
if (privilege != null) {
|
||||||
operator.setResponse(FAIL.addMessage("玩家 %s 已经是领地 %s 的成员", player_name, dominionName));
|
operator.setResponse(FAIL.addMessage("玩家 %s 已经是领地 %s 的成员", player_name, dominionName));
|
||||||
@ -145,7 +137,7 @@ public class MemberController {
|
|||||||
operator.setResponse(FAIL.addMessage("模板 %s 不存在", templateName));
|
operator.setResponse(FAIL.addMessage("模板 %s 不存在", templateName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (notOwner(operator, dominion) && (isAdmin(privilege) || template.getAdmin())) {
|
if (notOwner(operator, dominion) && privilege.getAdmin()) {
|
||||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法修改其他管理员的权限", dominionName));
|
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法修改其他管理员的权限", dominionName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
@ -13,8 +13,8 @@ import org.bukkit.entity.Player;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.autoPoints;
|
import static cn.lunadeer.dominion.commands.Apis.autoPoints;
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
|
|
||||||
public class CreateDominion {
|
public class CreateDominion {
|
||||||
|
|
@ -4,14 +4,13 @@ import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
|||||||
import cn.lunadeer.dominion.controllers.GroupController;
|
import cn.lunadeer.dominion.controllers.GroupController;
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.manage.group.GroupList;
|
import cn.lunadeer.dominion.tuis.dominion.manage.group.GroupList;
|
||||||
import cn.lunadeer.minecraftpluginutils.ColorParser;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||||
import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;
|
import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
|
|
||||||
public class CreateGroup {
|
public class CreateGroup {
|
||||||
|
|
||||||
@ -29,7 +28,7 @@ public class CreateGroup {
|
|||||||
public void handleData(String input) {
|
public void handleData(String input) {
|
||||||
XLogger.debug("createGroupCB.run: %s", input);
|
XLogger.debug("createGroupCB.run: %s", input);
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
||||||
GroupController.createGroup(operator, dominionName, ColorParser.getPlainText(input), input);
|
GroupController.createGroup(operator, dominionName, input);
|
||||||
GroupList.show(sender, dominionName);
|
GroupList.show(sender, dominionName);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -8,7 +8,7 @@ import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
|
|
||||||
public class CreateTemplate {
|
public class CreateTemplate {
|
||||||
|
|
@ -10,7 +10,7 @@ import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
|
|
||||||
public class EditJoinMessage {
|
public class EditJoinMessage {
|
||||||
|
|
@ -10,7 +10,7 @@ import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
|
|
||||||
public class EditLeaveMessage {
|
public class EditLeaveMessage {
|
||||||
|
|
@ -14,7 +14,7 @@ import org.bukkit.entity.Player;
|
|||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
|
|
||||||
public class MemberAdd {
|
public class MemberAdd {
|
||||||
|
|
@ -8,7 +8,7 @@ import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
|
|
||||||
public class RenameDominion {
|
public class RenameDominion {
|
||||||
|
|
@ -4,14 +4,13 @@ import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
|||||||
import cn.lunadeer.dominion.controllers.GroupController;
|
import cn.lunadeer.dominion.controllers.GroupController;
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.manage.group.GroupSetting;
|
import cn.lunadeer.dominion.tuis.dominion.manage.group.GroupSetting;
|
||||||
import cn.lunadeer.minecraftpluginutils.ColorParser;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||||
import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;
|
import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
|
|
||||||
public class RenameGroup {
|
public class RenameGroup {
|
||||||
|
|
||||||
@ -31,8 +30,8 @@ public class RenameGroup {
|
|||||||
public void handleData(String input) {
|
public void handleData(String input) {
|
||||||
XLogger.debug("renameGroupCB.run: %s", input);
|
XLogger.debug("renameGroupCB.run: %s", input);
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
||||||
GroupController.renameGroup(operator, dominionName, oldName, ColorParser.getPlainText(input), input);
|
GroupController.renameGroup(operator, dominionName, oldName, input);
|
||||||
GroupSetting.show(sender, dominionName, ColorParser.getPlainText(input));
|
GroupSetting.show(sender, dominionName, input);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -10,7 +10,7 @@ import cn.lunadeer.minecraftpluginutils.scui.CuiTextInput;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
|
|
||||||
public class SetMapColor {
|
public class SetMapColor {
|
||||||
|
|
@ -2,6 +2,7 @@ package cn.lunadeer.dominion.dtos;
|
|||||||
|
|
||||||
import cn.lunadeer.dominion.Cache;
|
import cn.lunadeer.dominion.Cache;
|
||||||
import cn.lunadeer.dominion.Dominion;
|
import cn.lunadeer.dominion.Dominion;
|
||||||
|
import cn.lunadeer.dominion.managers.GlobalTeleport;
|
||||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||||
import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
|
import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
|
||||||
import cn.lunadeer.minecraftpluginutils.databse.Field;
|
import cn.lunadeer.minecraftpluginutils.databse.Field;
|
||||||
@ -10,8 +11,6 @@ import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
|
|||||||
import cn.lunadeer.minecraftpluginutils.databse.syntax.UpdateRow;
|
import cn.lunadeer.minecraftpluginutils.databse.syntax.UpdateRow;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
@ -35,7 +34,7 @@ public class DominionDTO {
|
|||||||
Integer id = rs.getInt("id");
|
Integer id = rs.getInt("id");
|
||||||
UUID owner = UUID.fromString(rs.getString("owner"));
|
UUID owner = UUID.fromString(rs.getString("owner"));
|
||||||
String name = rs.getString("name");
|
String name = rs.getString("name");
|
||||||
UUID world_uid = UUID.fromString(rs.getString("world_uid"));
|
String world = rs.getString("world");
|
||||||
Integer x1 = rs.getInt("x1");
|
Integer x1 = rs.getInt("x1");
|
||||||
Integer y1 = rs.getInt("y1");
|
Integer y1 = rs.getInt("y1");
|
||||||
Integer z1 = rs.getInt("z1");
|
Integer z1 = rs.getInt("z1");
|
||||||
@ -49,13 +48,15 @@ public class DominionDTO {
|
|||||||
flags.put(f, rs.getBoolean(f.getFlagName()));
|
flags.put(f, rs.getBoolean(f.getFlagName()));
|
||||||
}
|
}
|
||||||
String color = rs.getString("color");
|
String color = rs.getString("color");
|
||||||
|
Integer serverId = rs.getInt("server_id");
|
||||||
|
|
||||||
DominionDTO dominion = new DominionDTO(id, owner, name, world_uid, x1, y1, z1, x2, y2, z2, parentDomId,
|
DominionDTO dominion = new DominionDTO(id, owner, name, world, x1, y1, z1, x2, y2, z2, parentDomId,
|
||||||
rs.getString("join_message"),
|
rs.getString("join_message"),
|
||||||
rs.getString("leave_message"),
|
rs.getString("leave_message"),
|
||||||
flags,
|
flags,
|
||||||
tp_location,
|
tp_location,
|
||||||
color
|
color,
|
||||||
|
serverId
|
||||||
);
|
);
|
||||||
dominions.add(dominion);
|
dominions.add(dominion);
|
||||||
}
|
}
|
||||||
@ -67,13 +68,56 @@ public class DominionDTO {
|
|||||||
return query(sql);
|
return query(sql);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static List<String> selectAllNamesOfServer(Integer serverId, UUID owner) {
|
||||||
|
String sql = "SELECT name FROM dominion WHERE server_id = ? AND id > 0 AND owner = ?;";
|
||||||
|
List<String> names = new ArrayList<>();
|
||||||
|
try (ResultSet rs = DatabaseManager.instance.query(sql, serverId, owner.toString())) {
|
||||||
|
if (rs == null) return names;
|
||||||
|
while (rs.next()) {
|
||||||
|
names.add(rs.getString("name"));
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
DatabaseManager.handleDatabaseError("数据库操作失败: ", e, sql);
|
||||||
|
}
|
||||||
|
return names;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<String> selectAllNames() {
|
||||||
|
String sql = "SELECT name, server_id FROM dominion WHERE id > 0;";
|
||||||
|
List<String> names = new ArrayList<>();
|
||||||
|
try (ResultSet rs = DatabaseManager.instance.query(sql)) {
|
||||||
|
if (rs == null) return names;
|
||||||
|
while (rs.next()) {
|
||||||
|
int serverId = rs.getInt("server_id");
|
||||||
|
String name = rs.getString("name");
|
||||||
|
if (serverId != GlobalTeleport.instance.getThisServerId()) {
|
||||||
|
name = GlobalTeleport.instance.getServerName(serverId) + "." + name;
|
||||||
|
}
|
||||||
|
names.add(name);
|
||||||
|
}
|
||||||
|
} catch (SQLException e) {
|
||||||
|
DatabaseManager.handleDatabaseError("数据库操作失败: ", e, sql);
|
||||||
|
}
|
||||||
|
return names;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<DominionDTO> selectAllOfServer(Integer id) {
|
||||||
|
String sql = "SELECT * FROM dominion WHERE id > 0 AND server_id = ?;";
|
||||||
|
return query(sql, id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<DominionDTO> selectAll(String world) {
|
||||||
|
String sql = "SELECT * FROM dominion WHERE world = ? AND id > 0;";
|
||||||
|
return query(sql, world);
|
||||||
|
}
|
||||||
|
|
||||||
public static List<DominionDTO> search(String name) {
|
public static List<DominionDTO> search(String name) {
|
||||||
String sql = "SELECT * FROM dominion WHERE name LIKE ? AND id > 0;";
|
String sql = "SELECT * FROM dominion WHERE name LIKE ? AND id > 0;";
|
||||||
return query(sql, "%" + name + "%");
|
return query(sql, "%" + name + "%");
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<DominionDTO> selectByOwner(UUID owner) {
|
public static List<DominionDTO> selectAll(UUID owner) {
|
||||||
String sql = "SELECT * FROM dominion WHERE owner = ? AND id > 0 ORDER BY id DESC;";
|
String sql = "SELECT * FROM dominion WHERE owner = ? AND id > 0;";
|
||||||
return query(sql, owner.toString());
|
return query(sql, owner.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,58 +125,54 @@ public class DominionDTO {
|
|||||||
if (id == -1) {
|
if (id == -1) {
|
||||||
return new DominionDTO(-1,
|
return new DominionDTO(-1,
|
||||||
UUID.fromString("00000000-0000-0000-0000-000000000000"),
|
UUID.fromString("00000000-0000-0000-0000-000000000000"),
|
||||||
"根领地", UUID.fromString("00000000-0000-0000-0000-000000000000"),
|
"根领地", "all",
|
||||||
-2147483648, -2147483648, -2147483648,
|
-2147483648, -2147483648, -2147483648,
|
||||||
2147483647, 2147483647, 2147483647, -1);
|
2147483647, 2147483647, 2147483647, -1);
|
||||||
}
|
}
|
||||||
String sql = "SELECT * FROM dominion WHERE id = ? AND id > 0;";
|
String sql = "SELECT * FROM dominion WHERE id = ? AND id > 0;";
|
||||||
List<DominionDTO> dominions = query(sql, id);
|
List<DominionDTO> dominions = query(sql, id);
|
||||||
if (dominions.isEmpty()) return null;
|
if (dominions.size() == 0) return null;
|
||||||
return dominions.getFirst();
|
return dominions.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<DominionDTO> selectByParentId(World world, Integer parentId){
|
public static List<DominionDTO> selectByParentId(String world, Integer parentId) {
|
||||||
return selectByParentId(world.getUID(), parentId);
|
String sql = "SELECT * FROM dominion WHERE world = ? AND parent_dom_id = ? AND id > 0;";
|
||||||
|
return query(sql, world, parentId);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<DominionDTO> selectByParentId(UUID world_uid, Integer parentId) {
|
public static List<DominionDTO> selectByLocation(String world, Integer x, Integer y, Integer z) {
|
||||||
String sql = "SELECT * FROM dominion WHERE world_uid = ? AND parent_dom_id = ? AND id > 0;";
|
String sql = "SELECT * FROM dominion WHERE world = ? AND " +
|
||||||
return query(sql, world_uid.toString(), parentId);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<DominionDTO> selectByLocation(UUID world_uid, Integer x, Integer y, Integer z) {
|
|
||||||
String sql = "SELECT * FROM dominion WHERE world_uid = ? AND " +
|
|
||||||
"x1 <= ? AND x2 >= ? AND " +
|
"x1 <= ? AND x2 >= ? AND " +
|
||||||
"y1 <= ? AND y2 >= ? AND " +
|
"y1 <= ? AND y2 >= ? AND " +
|
||||||
"z1 <= ? AND z2 >= ? AND " + "id > 0;";
|
"z1 <= ? AND z2 >= ? AND " + "id > 0;";
|
||||||
return query(sql, world_uid.toString(), x, x, y, y, z, z);
|
return query(sql, world, x, x, y, y, z, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static DominionDTO select(String name) {
|
public static DominionDTO select(String name) {
|
||||||
String sql = "SELECT * FROM dominion WHERE name = ? AND id > 0;";
|
String sql = "SELECT * FROM dominion WHERE name = ? AND id > 0;";
|
||||||
List<DominionDTO> dominions = query(sql, name);
|
List<DominionDTO> dominions = query(sql, name);
|
||||||
if (dominions.isEmpty()) return null;
|
if (dominions.size() == 0) return null;
|
||||||
return dominions.getFirst();
|
return dominions.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static DominionDTO insert(DominionDTO dominion) {
|
public static DominionDTO insert(DominionDTO dominion) {
|
||||||
InsertRow insert = new InsertRow().returningAll().table("dominion").onConflictDoNothing(new Field("id", null));
|
InsertRow insert = new InsertRow().returningAll().table("dominion").onConflictDoNothing(new Field("id", null));
|
||||||
insert.field(dominion.owner)
|
insert.field(dominion.owner)
|
||||||
.field(dominion.name)
|
.field(dominion.name)
|
||||||
.field(dominion.world_uid)
|
.field(dominion.world)
|
||||||
.field(dominion.x1).field(dominion.y1).field(dominion.z1)
|
.field(dominion.x1).field(dominion.y1).field(dominion.z1)
|
||||||
.field(dominion.x2).field(dominion.y2).field(dominion.z2)
|
.field(dominion.x2).field(dominion.y2).field(dominion.z2)
|
||||||
.field(dominion.parentDomId)
|
.field(dominion.parentDomId)
|
||||||
.field(dominion.joinMessage).field(dominion.leaveMessage)
|
.field(dominion.joinMessage).field(dominion.leaveMessage)
|
||||||
.field(dominion.tp_location);
|
.field(dominion.tp_location).field(dominion.serverId);
|
||||||
for (Flag f : Flag.getDominionFlagsEnabled()) {
|
for (Flag f : Flag.getDominionFlagsEnabled()) {
|
||||||
insert.field(new Field(f.getFlagName(), f.getDefaultValue()));
|
insert.field(new Field(f.getFlagName(), f.getDefaultValue()));
|
||||||
}
|
}
|
||||||
try (ResultSet rs = insert.execute()) {
|
try (ResultSet rs = insert.execute()) {
|
||||||
Cache.instance.loadDominions();
|
Cache.instance.loadDominions();
|
||||||
List<DominionDTO> dominions = getDTOFromRS(rs);
|
List<DominionDTO> dominions = getDTOFromRS(rs);
|
||||||
if (dominions.isEmpty()) return null;
|
if (dominions.size() == 0) return null;
|
||||||
return dominions.getFirst();
|
return dominions.get(0);
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
DatabaseManager.handleDatabaseError("数据库操作失败: ", e, insert.toString());
|
DatabaseManager.handleDatabaseError("数据库操作失败: ", e, insert.toString());
|
||||||
return null;
|
return null;
|
||||||
@ -145,17 +185,17 @@ public class DominionDTO {
|
|||||||
Cache.instance.loadDominions();
|
Cache.instance.loadDominions();
|
||||||
}
|
}
|
||||||
|
|
||||||
private DominionDTO(Integer id, UUID owner, String name, UUID world_uid,
|
private DominionDTO(Integer id, UUID owner, String name, String world,
|
||||||
Integer x1, Integer y1, Integer z1, Integer x2, Integer y2, Integer z2,
|
Integer x1, Integer y1, Integer z1, Integer x2, Integer y2, Integer z2,
|
||||||
Integer parentDomId,
|
Integer parentDomId,
|
||||||
String joinMessage, String leaveMessage,
|
String joinMessage, String leaveMessage,
|
||||||
Map<Flag, Boolean> flags,
|
Map<Flag, Boolean> flags,
|
||||||
String tp_location,
|
String tp_location,
|
||||||
String color) {
|
String color, Integer serverId) {
|
||||||
this.id.value = id;
|
this.id.value = id;
|
||||||
this.owner.value = owner.toString();
|
this.owner.value = owner.toString();
|
||||||
this.name.value = name;
|
this.name.value = name;
|
||||||
this.world_uid.value = world_uid.toString();
|
this.world.value = world;
|
||||||
this.x1.value = x1;
|
this.x1.value = x1;
|
||||||
this.y1.value = y1;
|
this.y1.value = y1;
|
||||||
this.z1.value = z1;
|
this.z1.value = z1;
|
||||||
@ -168,16 +208,17 @@ public class DominionDTO {
|
|||||||
this.flags.putAll(flags);
|
this.flags.putAll(flags);
|
||||||
this.tp_location.value = tp_location;
|
this.tp_location.value = tp_location;
|
||||||
this.color.value = color;
|
this.color.value = color;
|
||||||
|
this.serverId.value = serverId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private DominionDTO(Integer id, UUID owner, String name, UUID world_uid,
|
private DominionDTO(Integer id, UUID owner, String name, String world,
|
||||||
Integer x1, Integer y1, Integer z1, Integer x2, Integer y2, Integer z2,
|
Integer x1, Integer y1, Integer z1, Integer x2, Integer y2, Integer z2,
|
||||||
Integer parentDomId) {
|
Integer parentDomId) {
|
||||||
this.id.value = id;
|
this.id.value = id;
|
||||||
this.owner.value = owner.toString();
|
this.owner.value = owner.toString();
|
||||||
this.name.value = name;
|
this.name.value = name;
|
||||||
this.world_uid.value = world_uid.toString();
|
this.world.value = world;
|
||||||
this.x1.value = x1;
|
this.x1.value = x1;
|
||||||
this.y1.value = y1;
|
this.y1.value = y1;
|
||||||
this.z1.value = z1;
|
this.z1.value = z1;
|
||||||
@ -187,19 +228,20 @@ public class DominionDTO {
|
|||||||
this.parentDomId.value = parentDomId;
|
this.parentDomId.value = parentDomId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DominionDTO(UUID owner, String name, @NotNull World world,
|
public DominionDTO(UUID owner, String name, String world,
|
||||||
Integer x1, Integer y1, Integer z1, Integer x2, Integer y2, Integer z2) {
|
Integer x1, Integer y1, Integer z1, Integer x2, Integer y2, Integer z2) {
|
||||||
this(null, owner, name, world.getUID(), x1, y1, z1, x2, y2, z2, -1);
|
this(null, owner, name, world, x1, y1, z1, x2, y2, z2, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static DominionDTO create(UUID owner, String name, @NotNull World world,
|
public static DominionDTO create(UUID owner, String name, String world,
|
||||||
Integer x1, Integer y1, Integer z1, Integer x2, Integer y2, Integer z2, DominionDTO parent) {
|
Integer x1, Integer y1, Integer z1, Integer x2, Integer y2, Integer z2, DominionDTO parent) {
|
||||||
return new DominionDTO(null, owner, name, world.getUID(), x1, y1, z1, x2, y2, z2, parent == null ? -1 : parent.getId());
|
return new DominionDTO(null, owner, name, world, x1, y1, z1, x2, y2, z2, parent == null ? -1 : parent.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
private final Field id = new Field("id", FieldType.INT);
|
private final Field id = new Field("id", FieldType.INT);
|
||||||
private final Field owner = new Field("owner", FieldType.STRING);
|
private final Field owner = new Field("owner", FieldType.STRING);
|
||||||
private final Field name = new Field("name", FieldType.STRING);
|
private final Field name = new Field("name", FieldType.STRING);
|
||||||
|
private final Field world = new Field("world", FieldType.STRING);
|
||||||
private final Field x1 = new Field("x1", FieldType.INT);
|
private final Field x1 = new Field("x1", FieldType.INT);
|
||||||
private final Field y1 = new Field("y1", FieldType.INT);
|
private final Field y1 = new Field("y1", FieldType.INT);
|
||||||
private final Field z1 = new Field("z1", FieldType.INT);
|
private final Field z1 = new Field("z1", FieldType.INT);
|
||||||
@ -212,8 +254,7 @@ public class DominionDTO {
|
|||||||
private final Map<Flag, Boolean> flags = new HashMap<>();
|
private final Map<Flag, Boolean> flags = new HashMap<>();
|
||||||
private final Field tp_location = new Field("tp_location", "default");
|
private final Field tp_location = new Field("tp_location", "default");
|
||||||
private final Field color = new Field("color", "#00BFFF");
|
private final Field color = new Field("color", "#00BFFF");
|
||||||
private final Field world_uid = new Field("world_uid", FieldType.STRING);
|
private final Field serverId = new Field("server_id", GlobalTeleport.instance.getThisServerId());
|
||||||
|
|
||||||
|
|
||||||
// getters and setters
|
// getters and setters
|
||||||
public Integer getId() {
|
public Integer getId() {
|
||||||
@ -230,9 +271,9 @@ public class DominionDTO {
|
|||||||
.where("id = ?", id.value);
|
.where("id = ?", id.value);
|
||||||
try (ResultSet rs = updateRow.execute()) {
|
try (ResultSet rs = updateRow.execute()) {
|
||||||
List<DominionDTO> dominions = getDTOFromRS(rs);
|
List<DominionDTO> dominions = getDTOFromRS(rs);
|
||||||
if (dominions.isEmpty()) return null;
|
if (dominions.size() == 0) return null;
|
||||||
Cache.instance.loadDominions((Integer) id.value);
|
Cache.instance.loadDominions((Integer) id.value);
|
||||||
return dominions.getFirst();
|
return dominions.get(0);
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
DatabaseManager.handleDatabaseError("更新领地信息失败: ", e, updateRow.toString());
|
DatabaseManager.handleDatabaseError("更新领地信息失败: ", e, updateRow.toString());
|
||||||
return null;
|
return null;
|
||||||
@ -253,12 +294,8 @@ public class DominionDTO {
|
|||||||
return doUpdate(new UpdateRow().field(this.name));
|
return doUpdate(new UpdateRow().field(this.name));
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable World getWorld() {
|
public String getWorld() {
|
||||||
return Dominion.instance.getServer().getWorld(getWorldUid());
|
return (String) world.value;
|
||||||
}
|
|
||||||
|
|
||||||
public UUID getWorldUid() {
|
|
||||||
return UUID.fromString((String) world_uid.value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getX1() {
|
public Integer getX1() {
|
||||||
@ -387,19 +424,18 @@ public class DominionDTO {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public Location getTpLocation() {
|
public Location getTpLocation() {
|
||||||
if (Objects.equals(tp_location.value, "default")) {
|
if (Objects.equals(tp_location.value, "default")) {
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
// 0:0:0
|
// 0:0:0
|
||||||
String[] loc = ((String) tp_location.value).split(":");
|
String[] loc = ((String) tp_location.value).split(":");
|
||||||
World w = getWorld();
|
World w = Dominion.instance.getServer().getWorld(getWorld());
|
||||||
if (loc.length == 3 && w != null) {
|
if (loc.length == 3 && w != null) {
|
||||||
return new Location(w, Integer.parseInt(loc[0]), Integer.parseInt(loc[1]), Integer.parseInt(loc[2]));
|
return new Location(w, Integer.parseInt(loc[0]), Integer.parseInt(loc[1]), Integer.parseInt(loc[2]));
|
||||||
} else {
|
} else {
|
||||||
XLogger.warn("领地传送点数据异常: %s", tp_location);
|
XLogger.warn("领地传送点数据异常: %s", tp_location);
|
||||||
XLogger.debug("world: %s, loc.length: %d", getWorld(), loc.length);
|
XLogger.debug("world: %s, loc.length: %d", world, loc.length);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -411,11 +447,11 @@ public class DominionDTO {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Location getLocation1() {
|
public Location getLocation1() {
|
||||||
return new Location(getWorld(), getX1(), getY1(), getZ1());
|
return new Location(Dominion.instance.getServer().getWorld(getWorld()), getX1(), getY1(), getZ1());
|
||||||
}
|
}
|
||||||
|
|
||||||
public Location getLocation2() {
|
public Location getLocation2() {
|
||||||
return new Location(getWorld(), getX2(), getY2(), getZ2());
|
return new Location(Dominion.instance.getServer().getWorld(getWorld()), getX2(), getY2(), getZ2());
|
||||||
}
|
}
|
||||||
|
|
||||||
public DominionDTO setColor(String color) {
|
public DominionDTO setColor(String color) {
|
||||||
@ -439,7 +475,11 @@ public class DominionDTO {
|
|||||||
return (String) color.value;
|
return (String) color.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getColorHex() {
|
public Integer getServerId() {
|
||||||
return (getColorR() << 16) + (getColorG() << 8) + getColorB();
|
return (Integer) serverId.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getServerName() {
|
||||||
|
return GlobalTeleport.instance.getServerName(getServerId());
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -20,13 +20,12 @@ public enum Flag {
|
|||||||
BEACON("beacon", "信标交互", "是否允许与信标交互", false, false, true),
|
BEACON("beacon", "信标交互", "是否允许与信标交互", false, false, true),
|
||||||
BED("bed", "床交互", "是否允许使用床睡觉或设置重生点", false, false, true),
|
BED("bed", "床交互", "是否允许使用床睡觉或设置重生点", false, false, true),
|
||||||
BREW("brew", "使用酿造台", "是否可以使用酿造台", false, false, true),
|
BREW("brew", "使用酿造台", "是否可以使用酿造台", false, false, true),
|
||||||
BREAK_BLOCK("break", "破坏方块", "是否可以破坏方块(包括:一般方块、展示框、盔甲架)", false, false, true),
|
BREAK_BLOCK("break", "破坏方块", "是否可以破坏方块(包括:一般方块、展示框)", false, false, true),
|
||||||
BUTTON("button", "使用按钮", "是否可以使用各种材质的按钮", false, false, true),
|
BUTTON("button", "使用按钮", "是否可以使用各种材质的按钮", false, false, true),
|
||||||
CAKE("cake", "吃蛋糕", "是否可以吃蛋糕", false, false, true),
|
CAKE("cake", "吃蛋糕", "是否可以吃蛋糕", false, false, true),
|
||||||
CONTAINER("container", "一般容器", "包含:箱子/木桶/潜影盒/盔甲架/展示框", false, false, true),
|
CONTAINER("container", "一般容器", "包含:箱子/木桶/潜影盒/盔甲架/展示框", false, false, true),
|
||||||
CRAFT("craft", "使用工作台", "是否可以使用工作台", false, false, true),
|
CRAFT("craft", "使用工作台", "是否可以使用工作台", false, false, true),
|
||||||
CRAFTER("crafter", "合成器", "是否可以修改自动合成器", false, false, true),
|
CREEPER_EXPLODE("creeper_explode", "实体爆炸", "包含:苦力怕/凋零头颅/末影水晶/火球", false, true, true),
|
||||||
CREEPER_EXPLODE("creeper_explode", "生物破坏", "包含:苦力怕/凋零头颅/末影水晶/火球爆炸等", false, true, true),
|
|
||||||
COMPARER("comparer", "比较器交互", "是否可以修改比较器状态", false, false, true),
|
COMPARER("comparer", "比较器交互", "是否可以修改比较器状态", false, false, true),
|
||||||
DOOR("door", "门交互", "是否可以使用各种材质的门(包括活板门)", false, false, true),
|
DOOR("door", "门交互", "是否可以使用各种材质的门(包括活板门)", false, false, true),
|
||||||
DRAGON_BREAK_BLOCK("dragon_break_block", "末影龙破坏方块", "末影龙冲撞是否可以破坏方块", false, true, true),
|
DRAGON_BREAK_BLOCK("dragon_break_block", "末影龙破坏方块", "末影龙冲撞是否可以破坏方块", false, true, true),
|
||||||
@ -46,35 +45,27 @@ public enum Flag {
|
|||||||
HONEY("honey", "蜂巢交互", "是否可以采蜂蜜", false, false, true),
|
HONEY("honey", "蜂巢交互", "是否可以采蜂蜜", false, false, true),
|
||||||
HOOK("hook", "使用钓钩", "是否可以使用钓钩", false, false, true),
|
HOOK("hook", "使用钓钩", "是否可以使用钓钩", false, false, true),
|
||||||
HOPPER("hopper", "特殊容器", "包含:漏斗/熔炉/发射器/投掷器/高炉/烟熏炉", false, false, true),
|
HOPPER("hopper", "特殊容器", "包含:漏斗/熔炉/发射器/投掷器/高炉/烟熏炉", false, false, true),
|
||||||
HOPPER_OUTSIDE("hopper_outside", "领地外漏斗对领地内箱子是否生效", "领地外的漏斗是否可以对领地内的箱子生效", false, true, true),
|
|
||||||
IGNITE("ignite", "点燃", "是否可以使用打火石点火", false, false, true),
|
IGNITE("ignite", "点燃", "是否可以使用打火石点火", false, false, true),
|
||||||
ITEM_FRAME_INTERACTIVE("item_frame_interactive", "展示框交互", "是否可以与物品展示框交互(旋转展示框的东西)", false, false, true),
|
|
||||||
ITEM_FRAME_PROJ_DAMAGE("item_frame_proj_damage", "投掷物是否可以破坏展示框/画", "非玩家发出的投掷物是否可以破坏展示框/画等悬挂物", false, true, true),
|
|
||||||
LEVER("lever", "使用拉杆", "是否可以使用拉杆", false, false, true),
|
LEVER("lever", "使用拉杆", "是否可以使用拉杆", false, false, true),
|
||||||
MOB_DROP_ITEM("mob_drop_item", "生物战利品掉落", "生物死亡时是否产生掉落物", true, true, true),
|
MOB_DROP_ITEM("mob_drop_item", "生物战利品掉落", "生物死亡时是否产生凋落物", true, true, true),
|
||||||
MONSTER_KILLING("monster_killing", "对怪物造成伤害", "玩家是否可以对怪物造成伤害", false, false, true),
|
MONSTER_KILLING("monster_killing", "对怪物造成伤害", "玩家是否可以对怪物造成伤害", false, false, true),
|
||||||
MONSTER_SPAWN("monster_spawn", "怪物生成", "是否可以生成怪物", false, true, false),
|
MONSTER_SPAWN("monster_spawn", "怪物生成", "是否可以生成怪物", false, true, false),
|
||||||
MOVE("move", "移动", "是否可以移动", true, false, true),
|
MOVE("move", "移动", "是否可以移动", true, false, true),
|
||||||
NOTE_BLOCK("note_block", "点击音符盒", "红石音乐或者某些红石机器会用到...", false, false, true),
|
|
||||||
PLACE("place", "放置方块", "是否可以放置方块(包括:一般方块、展示框、岩浆、水)", false, false, true),
|
PLACE("place", "放置方块", "是否可以放置方块(包括:一般方块、展示框、岩浆、水)", false, false, true),
|
||||||
PISTON_OUTSIDE("piston_outside", "活塞是否可以跨领地推动方块", "活塞是否可以往领地内推东西或推东西到领地外", false, true, true),
|
|
||||||
PRESSURE("pressure", "压力板交互", "是否可以触发各种材质的压力板", false, false, true),
|
PRESSURE("pressure", "压力板交互", "是否可以触发各种材质的压力板", false, false, true),
|
||||||
RIDING("riding", "骑乘载具", "是否可以骑乘各种载具", false, false, true),
|
RIDING("riding", "骑乘载具", "是否可以骑乘各种载具", false, false, true),
|
||||||
REPEATER("repeater", "中继器交互", "是否可以与中继器交互", false, false, true),
|
REPEATER("repeater", "中继器交互", "是否可以与中继器交互", false, false, true),
|
||||||
SHEAR("shear", "剪羊毛", "是否可以剪羊毛", false, false, true),
|
SHEAR("shear", "剪羊毛", "是否可以剪羊毛", false, false, true),
|
||||||
SHOOT("shoot", "投掷型武器", "包括:射箭/雪球/三叉戟/风弹", false, false, true),
|
SHOOT("shoot", "发射类型武器", "包括:射箭/雪球/三叉戟", false, false, true),
|
||||||
SHOW_BORDER("show_border", "显示领地边界", "是否显示领地边界", true, true, true),
|
SHOW_BORDER("show_border", "显示领地边界", "是否显示领地边界", true, true, true),
|
||||||
TELEPORT("teleport", "领地传送", "是否开启领地传送", false, false, true),
|
TELEPORT("teleport", "领地传送", "是否开启领地传送", false, false, true),
|
||||||
TNT_EXPLODE("tnt_explode", "TNT爆炸", "TNT是否可以爆炸", false, true, true),
|
TNT_EXPLODE("tnt_explode", "TNT爆炸", "TNT是否可以爆炸", false, true, true),
|
||||||
TRADE("trade", "村民交易", "是否可以与村民交易", false, false, true),
|
TRADE("trade", "村民交易", "是否可以与村民交易", false, false, true),
|
||||||
TRAMPLE("trample", "作物践踏", "是否可以践踏作物(关闭意味着保护耕地)", false, true, true),
|
TRAMPLE("trample", "作物践踏", "是否可以践踏作物(关闭意味着保护耕地)", false, true, true),
|
||||||
TRIG_PRESSURE_PROJ("trig_pressure_proj", "投掷物触发压力板", "投掷物(箭/风弹/雪球)是否可以触发压力板", false, true, true),
|
|
||||||
TRIG_PRESSURE_MOB("trig_pressure_mob", "生物触发压力板", "生物(不包含玩家)是否可以触发压力板", false, true, true),
|
|
||||||
TRIG_PRESSURE_DROP("trig_pressure_drop", "掉落物触发压力板", "掉落物是否可以触发压力板", false, true, true),
|
|
||||||
VEHICLE_DESTROY("vehicle_destroy", "破坏载具", "是否可以破坏载具(主要是矿车)", false, false, true),
|
VEHICLE_DESTROY("vehicle_destroy", "破坏载具", "是否可以破坏载具(主要是矿车)", false, false, true),
|
||||||
VEHICLE_SPAWN("vehicle_spawn", "生成载具", "是否可以生成载具(主要是矿车)", false, false, true),
|
VEHICLE_SPAWN("vehicle_spawn", "生成载具", "是否可以生成载具(主要是矿车)", false, false, true),
|
||||||
VILLAGER_KILLING("villager_killing", "对村民造成伤害", "是否可以对村民造成伤害", false, false, true),
|
VILLAGER_KILLING("villager_killing", "对村民造成伤害", "是否可以对村民造成伤害", false, false, true),
|
||||||
VILLAGER_SPAWN("villager_spawn", "村民繁殖", "是否允许村民繁殖(包括村民蛋)", true, true, true),
|
VILLAGER_SPAWN("villager_spawn", "村民繁殖", "是否允许村民繁殖", true, true, true),
|
||||||
WITHER_SPAWN("wither_spawn", "凋零生成", "凋零生成", false, true, true),
|
WITHER_SPAWN("wither_spawn", "凋零生成", "凋零生成", false, true, true),
|
||||||
;
|
;
|
||||||
private final String flag_name;
|
private final String flag_name;
|
@ -1,14 +1,11 @@
|
|||||||
package cn.lunadeer.dominion.dtos;
|
package cn.lunadeer.dominion.dtos;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Cache;
|
import cn.lunadeer.dominion.Cache;
|
||||||
import cn.lunadeer.dominion.Dominion;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.ColorParser;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
|
import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
|
||||||
import cn.lunadeer.minecraftpluginutils.databse.Field;
|
import cn.lunadeer.minecraftpluginutils.databse.Field;
|
||||||
import cn.lunadeer.minecraftpluginutils.databse.FieldType;
|
import cn.lunadeer.minecraftpluginutils.databse.FieldType;
|
||||||
import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
|
import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
|
||||||
import cn.lunadeer.minecraftpluginutils.databse.syntax.UpdateRow;
|
import cn.lunadeer.minecraftpluginutils.databse.syntax.UpdateRow;
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -22,8 +19,6 @@ public class GroupDTO {
|
|||||||
Field domID = new Field("dom_id", FieldType.INT);
|
Field domID = new Field("dom_id", FieldType.INT);
|
||||||
Field name = new Field("name", FieldType.STRING);
|
Field name = new Field("name", FieldType.STRING);
|
||||||
Field admin = new Field("admin", FieldType.BOOLEAN);
|
Field admin = new Field("admin", FieldType.BOOLEAN);
|
||||||
Field name_colored = new Field("name_colored", FieldType.STRING);
|
|
||||||
|
|
||||||
private final Map<Flag, Boolean> flags = new HashMap<>();
|
private final Map<Flag, Boolean> flags = new HashMap<>();
|
||||||
|
|
||||||
public Integer getId() {
|
public Integer getId() {
|
||||||
@ -38,24 +33,6 @@ public class GroupDTO {
|
|||||||
return (String) name.value;
|
return (String) name.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Component getNameColoredComponent() {
|
|
||||||
String with_pre_suf = "&#ffffff" +
|
|
||||||
Dominion.config.getGroupTitlePrefix() +
|
|
||||||
(String) name_colored.value +
|
|
||||||
"&#ffffff" +
|
|
||||||
Dominion.config.getGroupTitleSuffix();
|
|
||||||
return ColorParser.getComponentType(with_pre_suf);
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getNameColoredBukkit() {
|
|
||||||
String with_pre_suf = "&#ffffff" +
|
|
||||||
Dominion.config.getGroupTitlePrefix() +
|
|
||||||
(String) name_colored.value +
|
|
||||||
"&#ffffff" +
|
|
||||||
Dominion.config.getGroupTitleSuffix();
|
|
||||||
return ColorParser.getBukkitType(with_pre_suf);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Boolean getAdmin() {
|
public Boolean getAdmin() {
|
||||||
return (Boolean) admin.value;
|
return (Boolean) admin.value;
|
||||||
}
|
}
|
||||||
@ -66,9 +43,8 @@ public class GroupDTO {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public GroupDTO setName(String name) {
|
public GroupDTO setName(String name) {
|
||||||
this.name_colored.value = name;
|
this.name.value = name;
|
||||||
this.name.value = ColorParser.getPlainText(name);
|
UpdateRow updateRow = new UpdateRow().field(this.name);
|
||||||
UpdateRow updateRow = new UpdateRow().field(this.name).field(this.name_colored);
|
|
||||||
return doUpdate(updateRow);
|
return doUpdate(updateRow);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,16 +67,15 @@ public class GroupDTO {
|
|||||||
insertRow.table("dominion_group")
|
insertRow.table("dominion_group")
|
||||||
.field(group.domID)
|
.field(group.domID)
|
||||||
.field(group.name)
|
.field(group.name)
|
||||||
.field(group.admin)
|
.field(group.admin);
|
||||||
.field(group.name_colored);
|
|
||||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
||||||
insertRow.field(new Field(f.getFlagName(), dominionDTO.getFlagValue(f)));
|
insertRow.field(new Field(f.getFlagName(), dominionDTO.getFlagValue(f)));
|
||||||
}
|
}
|
||||||
try (ResultSet rs = insertRow.execute()) {
|
try (ResultSet rs = insertRow.execute()) {
|
||||||
List<GroupDTO> groups = getDTOFromRS(rs);
|
List<GroupDTO> groups = getDTOFromRS(rs);
|
||||||
if (groups.isEmpty()) return null;
|
if (groups.size() == 0) return null;
|
||||||
Cache.instance.loadGroups(groups.getFirst().getId());
|
Cache.instance.loadGroups(groups.get(0).getId());
|
||||||
return groups.getFirst();
|
return groups.get(0);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
DatabaseManager.handleDatabaseError("创建权限组失败: ", e, "");
|
DatabaseManager.handleDatabaseError("创建权限组失败: ", e, "");
|
||||||
return null;
|
return null;
|
||||||
@ -124,15 +99,15 @@ public class GroupDTO {
|
|||||||
public static GroupDTO select(Integer id) {
|
public static GroupDTO select(Integer id) {
|
||||||
String sql = "SELECT * FROM dominion_group WHERE id = ?;";
|
String sql = "SELECT * FROM dominion_group WHERE id = ?;";
|
||||||
List<GroupDTO> groups = getDTOFromRS(DatabaseManager.instance.query(sql, id));
|
List<GroupDTO> groups = getDTOFromRS(DatabaseManager.instance.query(sql, id));
|
||||||
if (groups.isEmpty()) return null;
|
if (groups.size() == 0) return null;
|
||||||
return groups.getFirst();
|
return groups.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static GroupDTO select(Integer domID, String name) {
|
public static GroupDTO select(Integer domID, String name) {
|
||||||
String sql = "SELECT * FROM dominion_group WHERE dom_id = ? AND name = ?;";
|
String sql = "SELECT * FROM dominion_group WHERE dom_id = ? AND name = ?;";
|
||||||
List<GroupDTO> groups = getDTOFromRS(DatabaseManager.instance.query(sql, domID, name));
|
List<GroupDTO> groups = getDTOFromRS(DatabaseManager.instance.query(sql, domID, name));
|
||||||
if (groups.isEmpty()) return null;
|
if (groups.size() == 0) return null;
|
||||||
return groups.getFirst();
|
return groups.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<GroupDTO> selectAll() {
|
public static List<GroupDTO> selectAll() {
|
||||||
@ -147,21 +122,19 @@ public class GroupDTO {
|
|||||||
|
|
||||||
private GroupDTO(String name, Integer domID) {
|
private GroupDTO(String name, Integer domID) {
|
||||||
this.domID.value = domID;
|
this.domID.value = domID;
|
||||||
this.name.value = ColorParser.getPlainText(name);
|
this.name.value = name;
|
||||||
this.name_colored.value = name;
|
|
||||||
this.admin.value = false;
|
this.admin.value = false;
|
||||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
||||||
flags.put(f, f.getDefaultValue());
|
flags.put(f, f.getDefaultValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private GroupDTO(Integer id, Integer domID, String name, Boolean admin, Map<Flag, Boolean> flags, String nameColored) {
|
private GroupDTO(Integer id, Integer domID, String name, Boolean admin, Map<Flag, Boolean> flags) {
|
||||||
this.id.value = id;
|
this.id.value = id;
|
||||||
this.domID.value = domID;
|
this.domID.value = domID;
|
||||||
this.name.value = name;
|
this.name.value = name;
|
||||||
this.admin.value = admin;
|
this.admin.value = admin;
|
||||||
this.flags.putAll(flags);
|
this.flags.putAll(flags);
|
||||||
this.name_colored.value = nameColored;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<GroupDTO> getDTOFromRS(ResultSet rs) {
|
private static List<GroupDTO> getDTOFromRS(ResultSet rs) {
|
||||||
@ -178,8 +151,7 @@ public class GroupDTO {
|
|||||||
rs.getInt("dom_id"),
|
rs.getInt("dom_id"),
|
||||||
rs.getString("name"),
|
rs.getString("name"),
|
||||||
rs.getBoolean("admin"),
|
rs.getBoolean("admin"),
|
||||||
flags,
|
flags
|
||||||
rs.getString("name_colored")
|
|
||||||
);
|
);
|
||||||
list.add(group);
|
list.add(group);
|
||||||
}
|
}
|
||||||
@ -195,9 +167,9 @@ public class GroupDTO {
|
|||||||
.where("id = ?", id.value);
|
.where("id = ?", id.value);
|
||||||
try (ResultSet rs = updateRow.execute()) {
|
try (ResultSet rs = updateRow.execute()) {
|
||||||
List<GroupDTO> groups = getDTOFromRS(rs);
|
List<GroupDTO> groups = getDTOFromRS(rs);
|
||||||
if (groups.isEmpty()) return null;
|
if (groups.size() == 0) return null;
|
||||||
Cache.instance.loadGroups((Integer) id.value);
|
Cache.instance.loadGroups((Integer) id.value);
|
||||||
return groups.getFirst();
|
return groups.get(0);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
DatabaseManager.handleDatabaseError("更新权限组失败: ", e, "");
|
DatabaseManager.handleDatabaseError("更新权限组失败: ", e, "");
|
||||||
return null;
|
return null;
|
@ -1,6 +1,5 @@
|
|||||||
package cn.lunadeer.dominion.dtos;
|
package cn.lunadeer.dominion.dtos;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Cache;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
|
import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
|
||||||
import cn.lunadeer.minecraftpluginutils.databse.Field;
|
import cn.lunadeer.minecraftpluginutils.databse.Field;
|
||||||
import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
|
import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
|
||||||
@ -66,8 +65,7 @@ public class PlayerDTO {
|
|||||||
UUID uuid = UUID.fromString(rs.getString("uuid"));
|
UUID uuid = UUID.fromString(rs.getString("uuid"));
|
||||||
String lastKnownName = rs.getString("last_known_name");
|
String lastKnownName = rs.getString("last_known_name");
|
||||||
Long lastJoinAt = rs.getTimestamp("last_join_at").getTime();
|
Long lastJoinAt = rs.getTimestamp("last_join_at").getTime();
|
||||||
Integer usingGroupTitleID = rs.getInt("using_group_title_id");
|
PlayerDTO player = new PlayerDTO(id, uuid, lastKnownName, lastJoinAt);
|
||||||
PlayerDTO player = new PlayerDTO(id, uuid, lastKnownName, lastJoinAt, usingGroupTitleID);
|
|
||||||
players.add(player);
|
players.add(player);
|
||||||
}
|
}
|
||||||
return players;
|
return players;
|
||||||
@ -76,15 +74,15 @@ public class PlayerDTO {
|
|||||||
public static PlayerDTO select(UUID uuid) {
|
public static PlayerDTO select(UUID uuid) {
|
||||||
String sql = "SELECT * FROM player_name WHERE uuid = ?;";
|
String sql = "SELECT * FROM player_name WHERE uuid = ?;";
|
||||||
List<PlayerDTO> players = query(sql, uuid.toString());
|
List<PlayerDTO> players = query(sql, uuid.toString());
|
||||||
if (players.isEmpty()) return null;
|
if (players.size() == 0) return null;
|
||||||
return players.getFirst();
|
return players.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PlayerDTO select(String name) {
|
public static PlayerDTO select(String name) {
|
||||||
String sql = "SELECT * FROM player_name WHERE last_known_name = ?;";
|
String sql = "SELECT * FROM player_name WHERE last_known_name = ?;";
|
||||||
List<PlayerDTO> players = query(sql, name);
|
List<PlayerDTO> players = query(sql, name);
|
||||||
if (players.isEmpty()) return null;
|
if (players.size() == 0) return null;
|
||||||
return players.getFirst();
|
return players.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<PlayerDTO> search(String name) {
|
public static List<PlayerDTO> search(String name) {
|
||||||
@ -102,19 +100,17 @@ public class PlayerDTO {
|
|||||||
Field uuid = new Field("uuid", player.getUuid().toString());
|
Field uuid = new Field("uuid", player.getUuid().toString());
|
||||||
Field lastKnownName = new Field("last_known_name", player.getLastKnownName());
|
Field lastKnownName = new Field("last_known_name", player.getLastKnownName());
|
||||||
Field lastJoinAt = new Field("last_join_at", Timestamp.valueOf(LocalDateTime.now()));
|
Field lastJoinAt = new Field("last_join_at", Timestamp.valueOf(LocalDateTime.now()));
|
||||||
Field usingGroupTitleID = new Field("using_group_title_id", player.getUsingGroupTitleID());
|
|
||||||
InsertRow insertRow = new InsertRow()
|
InsertRow insertRow = new InsertRow()
|
||||||
.table("player_name")
|
.table("player_name")
|
||||||
.field(uuid)
|
.field(uuid)
|
||||||
.field(lastKnownName)
|
.field(lastKnownName)
|
||||||
.field(lastJoinAt)
|
.field(lastJoinAt)
|
||||||
.field(usingGroupTitleID)
|
|
||||||
.returningAll()
|
.returningAll()
|
||||||
.onConflictOverwrite(new Field("id", null));
|
.onConflictOverwrite(new Field("id", null));
|
||||||
try (ResultSet rs = insertRow.execute()) {
|
try (ResultSet rs = insertRow.execute()) {
|
||||||
List<PlayerDTO> players = getDTOFromRS(rs);
|
List<PlayerDTO> players = getDTOFromRS(rs);
|
||||||
if (players.isEmpty()) return null;
|
if (players.size() == 0) return null;
|
||||||
return players.getFirst();
|
return players.get(0);
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
DatabaseManager.handleDatabaseError("插入玩家信息失败: ", e, insertRow.toString());
|
DatabaseManager.handleDatabaseError("插入玩家信息失败: ", e, insertRow.toString());
|
||||||
return null;
|
return null;
|
||||||
@ -125,34 +121,31 @@ public class PlayerDTO {
|
|||||||
Field lastKnownName = new Field("last_known_name", player.getLastKnownName());
|
Field lastKnownName = new Field("last_known_name", player.getLastKnownName());
|
||||||
Field uuid = new Field("uuid", player.getUuid().toString());
|
Field uuid = new Field("uuid", player.getUuid().toString());
|
||||||
Field lastJoinAt = new Field("last_join_at", Timestamp.valueOf(LocalDateTime.now()));
|
Field lastJoinAt = new Field("last_join_at", Timestamp.valueOf(LocalDateTime.now()));
|
||||||
Field usingGroupTitleID = new Field("using_group_title_id", player.getUsingGroupTitleID());
|
|
||||||
UpdateRow updateRow = new UpdateRow()
|
UpdateRow updateRow = new UpdateRow()
|
||||||
.table("player_name")
|
.table("player_name")
|
||||||
.field(lastKnownName)
|
.field(lastKnownName)
|
||||||
.field(lastJoinAt)
|
.field(lastJoinAt)
|
||||||
.field(usingGroupTitleID)
|
|
||||||
.where("uuid = ?", uuid.value)
|
.where("uuid = ?", uuid.value)
|
||||||
.returningAll(uuid);
|
.returningAll(uuid);
|
||||||
try (ResultSet rs = updateRow.execute()) {
|
try (ResultSet rs = updateRow.execute()) {
|
||||||
List<PlayerDTO> players = getDTOFromRS(rs);
|
List<PlayerDTO> players = getDTOFromRS(rs);
|
||||||
if (players.isEmpty()) return null;
|
if (players.size() == 0) return null;
|
||||||
return players.getFirst();
|
return players.get(0);
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
DatabaseManager.handleDatabaseError("更新玩家信息失败: ", e, updateRow.toString());
|
DatabaseManager.handleDatabaseError("更新玩家信息失败: ", e, updateRow.toString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private PlayerDTO(Integer id, UUID uuid, String lastKnownName, Long lastJoinAt, Integer using_group_title_id) {
|
private PlayerDTO(Integer id, UUID uuid, String lastKnownName, Long lastJoinAt) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.uuid = uuid;
|
this.uuid = uuid;
|
||||||
this.lastKnownName = lastKnownName;
|
this.lastKnownName = lastKnownName;
|
||||||
this.lastJoinAt = lastJoinAt;
|
this.lastJoinAt = lastJoinAt;
|
||||||
this.using_group_title_id = using_group_title_id;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private PlayerDTO(UUID uuid, String lastKnownName, Long lastJoinAt) {
|
private PlayerDTO(UUID uuid, String lastKnownName, Long lastJoinAt) {
|
||||||
this(null, uuid, lastKnownName, lastJoinAt, -1);
|
this(null, uuid, lastKnownName, lastJoinAt);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getId() {
|
public Integer getId() {
|
||||||
@ -187,19 +180,8 @@ public class PlayerDTO {
|
|||||||
this.lastJoinAt = lastJoinAt;
|
this.lastJoinAt = lastJoinAt;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getUsingGroupTitleID() {
|
|
||||||
return using_group_title_id;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUsingGroupTitleID(Integer usingGroupTitleID) {
|
|
||||||
this.using_group_title_id = usingGroupTitleID;
|
|
||||||
update(this);
|
|
||||||
Cache.instance.updatePlayerUsingGroupTitle(uuid, usingGroupTitleID);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Integer id;
|
private Integer id;
|
||||||
private UUID uuid;
|
private UUID uuid;
|
||||||
private String lastKnownName;
|
private String lastKnownName;
|
||||||
private Long lastJoinAt;
|
private Long lastJoinAt;
|
||||||
private Integer using_group_title_id;
|
|
||||||
}
|
}
|
90
src/main/java/cn/lunadeer/dominion/dtos/ServerInfoDTO.java
Normal file
90
src/main/java/cn/lunadeer/dominion/dtos/ServerInfoDTO.java
Normal file
@ -0,0 +1,90 @@
|
|||||||
|
package cn.lunadeer.dominion.dtos;
|
||||||
|
|
||||||
|
import cn.lunadeer.minecraftpluginutils.JsonFile;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.databse.Field;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.databse.FieldType;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
|
||||||
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class ServerInfoDTO {
|
||||||
|
|
||||||
|
private final Field id = new Field("id", FieldType.INT);
|
||||||
|
private final Field name = new Field("name", FieldType.STRING);
|
||||||
|
|
||||||
|
public Integer getId() {
|
||||||
|
return (Integer) id.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return (String) name.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static ServerInfoDTO initServerInfo(JavaPlugin plugin, File se) {
|
||||||
|
ServerInfoDTO serverInfoDTO = new ServerInfoDTO();
|
||||||
|
serverInfoDTO.name.value = plugin.getServer().getName();
|
||||||
|
InsertRow insertRow = new InsertRow();
|
||||||
|
insertRow.returningAll()
|
||||||
|
.onConflictDoNothing(new Field("id", null))
|
||||||
|
.field(serverInfoDTO.name)
|
||||||
|
.table("server_info");
|
||||||
|
try (ResultSet res = insertRow.execute()) {
|
||||||
|
if (res.next()) {
|
||||||
|
serverInfoDTO.id.value = res.getInt("id");
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
DatabaseManager.handleDatabaseError("创建服务器信息失败", e, "");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
JSONObject json = new JSONObject();
|
||||||
|
json.put("name", serverInfoDTO.name.value);
|
||||||
|
json.put("id", serverInfoDTO.id.value);
|
||||||
|
try {
|
||||||
|
JsonFile.saveToFile(json, se);
|
||||||
|
} catch (Exception e) {
|
||||||
|
XLogger.err("保存服务器信息失败: %s", e.getMessage());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return serverInfoDTO;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ServerInfoDTO updateServerInfo(JavaPlugin plugin, File se) {
|
||||||
|
try {
|
||||||
|
JSONObject json = JsonFile.loadFromFile(se);
|
||||||
|
ServerInfoDTO serverInfoDTO = new ServerInfoDTO();
|
||||||
|
serverInfoDTO.id.value = json.getInteger("id");
|
||||||
|
serverInfoDTO.name.value = json.getString("name");
|
||||||
|
String sql = "UPDATE server_info SET name = ? WHERE id = ?";
|
||||||
|
DatabaseManager.instance.query(sql, serverInfoDTO.name.value, serverInfoDTO.id.value);
|
||||||
|
return serverInfoDTO;
|
||||||
|
} catch (Exception e) {
|
||||||
|
XLogger.err("加载服务器信息失败: %s", e.getMessage());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Map<Integer, String> getAllServerInfo() {
|
||||||
|
Map<Integer, String> allServerInfo = new java.util.HashMap<>();
|
||||||
|
String sql = "SELECT * FROM server_info";
|
||||||
|
try (ResultSet res = DatabaseManager.instance.query(sql)) {
|
||||||
|
while (res.next()) {
|
||||||
|
ServerInfoDTO serverInfoDTO = new ServerInfoDTO();
|
||||||
|
serverInfoDTO.id.value = res.getInt("id");
|
||||||
|
serverInfoDTO.name.value = res.getString("name");
|
||||||
|
allServerInfo.put(serverInfoDTO.getId(), serverInfoDTO.getName());
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
DatabaseManager.handleDatabaseError("获取服务器信息失败", e, "");
|
||||||
|
}
|
||||||
|
return allServerInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package cn.lunadeer.dominion.utils;
|
package cn.lunadeer.dominion.events;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Cache;
|
import cn.lunadeer.dominion.Cache;
|
||||||
import cn.lunadeer.dominion.Dominion;
|
import cn.lunadeer.dominion.Dominion;
|
||||||
@ -15,11 +15,8 @@ import net.kyori.adventure.text.format.TextDecoration;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.Cancellable;
|
import org.bukkit.event.Cancellable;
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
public class Apis {
|
||||||
|
|
||||||
public class EventUtils {
|
|
||||||
public static boolean canByPass(Player player, DominionDTO dom, MemberDTO prev) {
|
public static boolean canByPass(Player player, DominionDTO dom, MemberDTO prev) {
|
||||||
if (player.isOp() && Dominion.config.getLimitOpBypass()) {
|
if (player.isOp() && Dominion.config.getLimitOpBypass()) {
|
||||||
return true;
|
return true;
|
||||||
@ -31,12 +28,7 @@ public class EventUtils {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (prev != null) {
|
if (prev != null) {
|
||||||
if (prev.getGroupId() == -1) {
|
|
||||||
return prev.getAdmin();
|
return prev.getAdmin();
|
||||||
} else {
|
|
||||||
GroupDTO group = Cache.instance.getGroup(prev.getGroupId());
|
|
||||||
return group != null && group.getAdmin();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -45,7 +37,7 @@ public class EventUtils {
|
|||||||
if (inv.getLocation() == null) {
|
if (inv.getLocation() == null) {
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
return Cache.instance.getDominionByLoc(inv.getLocation());
|
return Cache.instance.getDominion(inv.getLocation());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -61,13 +53,16 @@ public class EventUtils {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (prev != null) {
|
if (prev != null) {
|
||||||
GroupDTO group = Cache.instance.getGroup(prev.getGroupId());
|
if (prev.getGroupId() == -1) {
|
||||||
if (prev.getGroupId() != -1 && group != null) {
|
if (prev.getFlagValue(flag)) {
|
||||||
if (group.getFlagValue(flag)) {
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (prev.getFlagValue(flag)) {
|
GroupDTO group = Cache.instance.getGroup(prev.getGroupId());
|
||||||
|
if (group == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (group.getFlagValue(flag)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -87,7 +82,7 @@ public class EventUtils {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean checkFlag(@Nullable DominionDTO dom, @NotNull Flag flag, @Nullable Cancellable event) {
|
public static boolean checkFlag(DominionDTO dom, Flag flag, Cancellable event) {
|
||||||
if (!flag.getEnable()) {
|
if (!flag.getEnable()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -97,9 +92,7 @@ public class EventUtils {
|
|||||||
if (dom.getFlagValue(flag)) {
|
if (dom.getFlagValue(flag)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (event != null) {
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
183
src/main/java/cn/lunadeer/dominion/events/EnvironmentEvents.java
Normal file
183
src/main/java/cn/lunadeer/dominion/events/EnvironmentEvents.java
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
package cn.lunadeer.dominion.events;
|
||||||
|
|
||||||
|
import cn.lunadeer.dominion.Cache;
|
||||||
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
|
import cn.lunadeer.dominion.dtos.Flag;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.entity.*;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.block.Action;
|
||||||
|
import org.bukkit.event.block.BlockFromToEvent;
|
||||||
|
import org.bukkit.event.block.BlockIgniteEvent;
|
||||||
|
import org.bukkit.event.entity.CreatureSpawnEvent;
|
||||||
|
import org.bukkit.event.entity.EntityDeathEvent;
|
||||||
|
import org.bukkit.event.entity.EntityExplodeEvent;
|
||||||
|
import org.bukkit.event.entity.EntityTeleportEvent;
|
||||||
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import static cn.lunadeer.dominion.events.Apis.checkFlag;
|
||||||
|
import static org.bukkit.Material.FARMLAND;
|
||||||
|
|
||||||
|
public class EnvironmentEvents implements Listener {
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST) // creeper_explode
|
||||||
|
public void onEntityExplode(EntityExplodeEvent event) {
|
||||||
|
Entity entity = event.getEntity();
|
||||||
|
if (entity.getType() != EntityType.CREEPER
|
||||||
|
&& entity.getType() != EntityType.WITHER_SKULL
|
||||||
|
&& entity.getType() != EntityType.FIREBALL
|
||||||
|
&& entity.getType() != EntityType.ENDER_CRYSTAL
|
||||||
|
) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
DominionDTO dom = Cache.instance.getDominion(event.getLocation());
|
||||||
|
checkFlag(dom, Flag.CREEPER_EXPLODE, event);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST) // dragon_break_block
|
||||||
|
public void onDragonBreakBlock(EntityExplodeEvent event) {
|
||||||
|
Entity entity = event.getEntity();
|
||||||
|
if (entity.getType() != EntityType.ENDER_DRAGON) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
DominionDTO dom = Cache.instance.getDominion(event.getLocation());
|
||||||
|
checkFlag(dom, Flag.DRAGON_BREAK_BLOCK, event);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST) // fire_spread
|
||||||
|
public void onFireSpread(BlockIgniteEvent event) {
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
if (player != null) {
|
||||||
|
// 如果点燃事件没有玩家触发,那么就是火焰蔓延
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
DominionDTO dom = Cache.instance.getDominion(event.getBlock().getLocation());
|
||||||
|
checkFlag(dom, Flag.FIRE_SPREAD, event);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST) // flow_in_protection
|
||||||
|
public void onLiquidFlowIn(BlockFromToEvent event) {
|
||||||
|
Location from = event.getBlock().getLocation();
|
||||||
|
Location to = event.getToBlock().getLocation();
|
||||||
|
DominionDTO dom_to = Cache.instance.getDominion(to);
|
||||||
|
if (dom_to == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
DominionDTO dom_from = Cache.instance.getDominion(from);
|
||||||
|
if (dom_from != null) {
|
||||||
|
if (Objects.equals(dom_from.getId(), dom_to.getId())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
checkFlag(dom_to, Flag.FLOW_IN_PROTECTION, event);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST) // mob_drop_item
|
||||||
|
public void onMobDropItem(EntityDeathEvent event) {
|
||||||
|
Entity entity = event.getEntity();
|
||||||
|
if (entity instanceof Player) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
DominionDTO dom = Cache.instance.getDominion(entity.getLocation());
|
||||||
|
if (dom == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!Flag.MOB_DROP_ITEM.getEnable()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (dom.getFlagValue(Flag.MOB_DROP_ITEM)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
event.getDrops().clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST) // tnt_explode
|
||||||
|
public void onTntExplode(EntityExplodeEvent event) {
|
||||||
|
Entity entity = event.getEntity();
|
||||||
|
if (entity.getType() != EntityType.MINECART_TNT && entity.getType() != EntityType.PRIMED_TNT) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
DominionDTO dom = Cache.instance.getDominion(event.getLocation());
|
||||||
|
checkFlag(dom, Flag.TNT_EXPLODE, event);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST) // trample
|
||||||
|
public void onFarmlandTrample(PlayerInteractEvent event) {
|
||||||
|
if (event.getAction() != Action.PHYSICAL) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Block block = event.getClickedBlock();
|
||||||
|
if (block == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (block.getType() != FARMLAND) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
|
||||||
|
checkFlag(dom, Flag.TRAMPLE, event);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST) // wither_spawn
|
||||||
|
public void onWitherSpawn(CreatureSpawnEvent event) {
|
||||||
|
Entity entity = event.getEntity();
|
||||||
|
if (entity.getType() != EntityType.WITHER) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
DominionDTO dom = Cache.instance.getDominion(entity.getLocation());
|
||||||
|
checkFlag(dom, Flag.WITHER_SPAWN, event);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST) // ender_man spawn
|
||||||
|
public void onEnderManSpawn(CreatureSpawnEvent event) {
|
||||||
|
Entity entity = event.getEntity();
|
||||||
|
if (entity.getType() != EntityType.ENDERMAN) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
DominionDTO dom = Cache.instance.getDominion(entity.getLocation());
|
||||||
|
checkFlag(dom, Flag.ENDER_MAN, event);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST) // ender_man escape
|
||||||
|
public void onEnderManEscape(EntityTeleportEvent event) {
|
||||||
|
Entity entity = event.getEntity();
|
||||||
|
if (entity.getType() != EntityType.ENDERMAN) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
DominionDTO dom = Cache.instance.getDominion(entity.getLocation());
|
||||||
|
checkFlag(dom, Flag.ENDER_MAN, event);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST) // monster_spawn
|
||||||
|
public void onMonsterSpawn(CreatureSpawnEvent event) {
|
||||||
|
Entity entity = event.getEntity();
|
||||||
|
if (!(entity instanceof Monster)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
DominionDTO dom = Cache.instance.getDominion(entity.getLocation());
|
||||||
|
checkFlag(dom, Flag.MONSTER_SPAWN, event);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST) // animal_spawn
|
||||||
|
public void onAnimalSpawn(CreatureSpawnEvent event) {
|
||||||
|
Entity entity = event.getEntity();
|
||||||
|
if (!(entity instanceof Animals)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
DominionDTO dom = Cache.instance.getDominion(entity.getLocation());
|
||||||
|
checkFlag(dom, Flag.ANIMAL_SPAWN, event);
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST) // villager_spawn
|
||||||
|
public void onVillagerSpawn(CreatureSpawnEvent event) {
|
||||||
|
Entity entity = event.getEntity();
|
||||||
|
if (entity.getType() != EntityType.VILLAGER) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
DominionDTO dom = Cache.instance.getDominion(entity.getLocation());
|
||||||
|
checkFlag(dom, Flag.VILLAGER_SPAWN, event);
|
||||||
|
}
|
||||||
|
}
|
@ -1,10 +1,9 @@
|
|||||||
package cn.lunadeer.dominion.events_v1_20_1;
|
package cn.lunadeer.dominion.events;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Cache;
|
import cn.lunadeer.dominion.Cache;
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
import cn.lunadeer.dominion.dtos.Flag;
|
import cn.lunadeer.dominion.dtos.Flag;
|
||||||
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||||
import cn.lunadeer.minecraftpluginutils.Common;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
import cn.lunadeer.minecraftpluginutils.Teleport;
|
import cn.lunadeer.minecraftpluginutils.Teleport;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@ -18,10 +17,8 @@ import org.bukkit.event.Listener;
|
|||||||
import org.bukkit.event.block.*;
|
import org.bukkit.event.block.*;
|
||||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
import org.bukkit.event.entity.EntityPlaceEvent;
|
import org.bukkit.event.entity.EntityPlaceEvent;
|
||||||
import org.bukkit.event.entity.ProjectileHitEvent;
|
|
||||||
import org.bukkit.event.entity.ProjectileLaunchEvent;
|
import org.bukkit.event.entity.ProjectileLaunchEvent;
|
||||||
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
|
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
|
||||||
import org.bukkit.event.hanging.HangingBreakEvent;
|
|
||||||
import org.bukkit.event.hanging.HangingPlaceEvent;
|
import org.bukkit.event.hanging.HangingPlaceEvent;
|
||||||
import org.bukkit.event.inventory.InventoryOpenEvent;
|
import org.bukkit.event.inventory.InventoryOpenEvent;
|
||||||
import org.bukkit.event.inventory.InventoryType;
|
import org.bukkit.event.inventory.InventoryType;
|
||||||
@ -31,8 +28,8 @@ import org.bukkit.inventory.Inventory;
|
|||||||
import org.bukkit.material.Colorable;
|
import org.bukkit.material.Colorable;
|
||||||
import org.spigotmc.event.entity.EntityMountEvent;
|
import org.spigotmc.event.entity.EntityMountEvent;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.EventUtils.checkFlag;
|
import static cn.lunadeer.dominion.events.Apis.checkFlag;
|
||||||
import static cn.lunadeer.dominion.utils.EventUtils.getInvDominion;
|
import static cn.lunadeer.dominion.events.Apis.getInvDominion;
|
||||||
|
|
||||||
public class PlayerEvents implements Listener {
|
public class PlayerEvents implements Listener {
|
||||||
@EventHandler
|
@EventHandler
|
||||||
@ -66,14 +63,15 @@ public class PlayerEvents implements Listener {
|
|||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // animal_killing
|
@EventHandler(priority = EventPriority.HIGHEST) // animal_killing
|
||||||
public void onAnimalKilling(EntityDamageByEntityEvent event) {
|
public void onAnimalKilling(EntityDamageByEntityEvent event) {
|
||||||
if (!(event.getDamager() instanceof Player bukkitPlayer)) {
|
if (!(event.getDamager() instanceof Player)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 如果不是动物 则不处理
|
// 如果不是动物 则不处理
|
||||||
if (!(event.getEntity() instanceof Animals)) {
|
if (!(event.getEntity() instanceof Animals)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(event.getEntity().getLocation());
|
Player bukkitPlayer = (Player) event.getDamager();
|
||||||
|
DominionDTO dom = Cache.instance.getDominion(event.getEntity().getLocation());
|
||||||
checkFlag(dom, Flag.ANIMAL_KILLING, bukkitPlayer, event);
|
checkFlag(dom, Flag.ANIMAL_KILLING, bukkitPlayer, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,9 +80,10 @@ public class PlayerEvents implements Listener {
|
|||||||
if (event.getInventory().getType() != InventoryType.ANVIL) {
|
if (event.getInventory().getType() != InventoryType.ANVIL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!(event.getPlayer() instanceof Player bukkitPlayer)) {
|
if (!(event.getPlayer() instanceof Player)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Player bukkitPlayer = (Player) event.getPlayer();
|
||||||
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(bukkitPlayer);
|
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(bukkitPlayer);
|
||||||
checkFlag(dom, Flag.ANVIL, bukkitPlayer, event);
|
checkFlag(dom, Flag.ANVIL, bukkitPlayer, event);
|
||||||
}
|
}
|
||||||
@ -94,9 +93,10 @@ public class PlayerEvents implements Listener {
|
|||||||
if (event.getInventory().getType() != InventoryType.BEACON) {
|
if (event.getInventory().getType() != InventoryType.BEACON) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!(event.getPlayer() instanceof Player bukkitPlayer)) {
|
if (!(event.getPlayer() instanceof Player)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Player bukkitPlayer = (Player) event.getPlayer();
|
||||||
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(bukkitPlayer);
|
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(bukkitPlayer);
|
||||||
checkFlag(dom, Flag.BEACON, bukkitPlayer, event);
|
checkFlag(dom, Flag.BEACON, bukkitPlayer, event);
|
||||||
}
|
}
|
||||||
@ -114,7 +114,7 @@ public class PlayerEvents implements Listener {
|
|||||||
if (!(Tag.BEDS.isTagged(block.getType()))) {
|
if (!(Tag.BEDS.isTagged(block.getType()))) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
|
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
|
||||||
checkFlag(dom, Flag.BED, bukkitPlayer, event);
|
checkFlag(dom, Flag.BED, bukkitPlayer, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,9 +123,10 @@ public class PlayerEvents implements Listener {
|
|||||||
if (event.getInventory().getType() != InventoryType.BREWING) {
|
if (event.getInventory().getType() != InventoryType.BREWING) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!(event.getPlayer() instanceof Player bukkitPlayer)) {
|
if (!(event.getPlayer() instanceof Player)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Player bukkitPlayer = (Player) event.getPlayer();
|
||||||
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(bukkitPlayer);
|
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(bukkitPlayer);
|
||||||
checkFlag(dom, Flag.BREW, bukkitPlayer, event);
|
checkFlag(dom, Flag.BREW, bukkitPlayer, event);
|
||||||
}
|
}
|
||||||
@ -142,40 +143,23 @@ public class PlayerEvents implements Listener {
|
|||||||
@EventHandler(priority = EventPriority.HIGHEST) // break - item frame
|
@EventHandler(priority = EventPriority.HIGHEST) // break - item frame
|
||||||
public void onItemFrameBreak(HangingBreakByEntityEvent event) {
|
public void onItemFrameBreak(HangingBreakByEntityEvent event) {
|
||||||
Entity entity = event.getEntity();
|
Entity entity = event.getEntity();
|
||||||
if (event.getCause() != HangingBreakEvent.RemoveCause.ENTITY) {
|
if (!(entity instanceof ItemFrame)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (entity instanceof ItemFrame) {
|
ItemFrame itemFrame = (ItemFrame) entity;
|
||||||
if (((ItemFrame) entity).getItem().getType() != Material.AIR) {
|
Entity remover = event.getRemover();
|
||||||
if (!hasContainerPermission((Player) event.getRemover(), entity.getLocation())) {
|
if (!(remover instanceof Player)) {
|
||||||
event.setCancelled(true);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
if (onBreak((Player) event.getRemover(), itemFrame.getLocation())) {
|
||||||
}
|
|
||||||
if (onBreak((Player) event.getRemover(), entity.getLocation())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // break - armor stand
|
|
||||||
public void onArmorStandBreak(EntityDamageByEntityEvent event) {
|
|
||||||
Entity entity = event.getEntity();
|
|
||||||
if (!(entity instanceof ArmorStand)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!(event.getDamager() instanceof Player)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (onBreak((Player) event.getDamager(), entity.getLocation())) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
itemFrame.remove();
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean onBreak(Player player, Location location) {
|
public static boolean onBreak(Player player, Location location) {
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(location);
|
DominionDTO dom = Cache.instance.getDominion(location);
|
||||||
return checkFlag(dom, Flag.BREAK_BLOCK, player, null);
|
return checkFlag(dom, Flag.BREAK_BLOCK, player, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -192,7 +176,7 @@ public class PlayerEvents implements Listener {
|
|||||||
if (!Tag.BUTTONS.isTagged(block.getType())) {
|
if (!Tag.BUTTONS.isTagged(block.getType())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
|
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
|
||||||
checkFlag(dom, Flag.BUTTON, player, event);
|
checkFlag(dom, Flag.BUTTON, player, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -210,7 +194,7 @@ public class PlayerEvents implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
|
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
|
||||||
checkFlag(dom, Flag.CAKE, player, event);
|
checkFlag(dom, Flag.CAKE, player, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -220,7 +204,7 @@ public class PlayerEvents implements Listener {
|
|||||||
if (loc == null) {
|
if (loc == null) {
|
||||||
dom = null;
|
dom = null;
|
||||||
} else {
|
} else {
|
||||||
dom = Cache.instance.getDominionByLoc(loc);
|
dom = Cache.instance.getDominion(loc);
|
||||||
}
|
}
|
||||||
return checkFlag(dom, Flag.CONTAINER, player, null);
|
return checkFlag(dom, Flag.CONTAINER, player, null);
|
||||||
}
|
}
|
||||||
@ -232,9 +216,10 @@ public class PlayerEvents implements Listener {
|
|||||||
event.getInventory().getType() != InventoryType.SHULKER_BOX) {
|
event.getInventory().getType() != InventoryType.SHULKER_BOX) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!(event.getPlayer() instanceof Player bukkitPlayer)) {
|
if (!(event.getPlayer() instanceof Player)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Player bukkitPlayer = (Player) event.getPlayer();
|
||||||
if (hasContainerPermission(bukkitPlayer, event.getInventory().getLocation())) {
|
if (hasContainerPermission(bukkitPlayer, event.getInventory().getLocation())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -250,56 +235,30 @@ public class PlayerEvents implements Listener {
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // container (item frame put)
|
@EventHandler(priority = EventPriority.HIGHEST) // container (item frame)
|
||||||
public void putSomeOnItemFrame(PlayerInteractEntityEvent event) {
|
public void putSomeOnItemFrame(PlayerInteractEntityEvent event) {
|
||||||
Entity entity = event.getRightClicked();
|
Entity entity = event.getRightClicked();
|
||||||
if (!(entity instanceof ItemFrame itemFrame)) {
|
if (!(entity instanceof ItemFrame)) {
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (itemFrame.getItem().getType() != Material.AIR) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player bukkitPlayer = event.getPlayer();
|
Player bukkitPlayer = event.getPlayer();
|
||||||
if (hasContainerPermission(bukkitPlayer, entity.getLocation())) {
|
if (hasContainerPermission(bukkitPlayer, event.getRightClicked().getLocation())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // container (item frame get)
|
@EventHandler(priority = EventPriority.HIGHEST) // container (item frame)
|
||||||
public void removeSomeOnItemFrame(EntityDamageByEntityEvent event) {
|
public void removeSomeOnItemFrame(EntityDamageByEntityEvent event) {
|
||||||
Entity entity = event.getEntity();
|
Entity entity = event.getEntity();
|
||||||
if (!(entity instanceof ItemFrame itemFrame)) {
|
if (!(entity instanceof ItemFrame)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (itemFrame.getItem().getType() == Material.AIR) {
|
if (!(event.getDamager() instanceof Player)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!(event.getDamager() instanceof Player bukkitPlayer)) {
|
Player bukkitPlayer = (Player) event.getDamager();
|
||||||
return;
|
if (hasContainerPermission(bukkitPlayer, event.getEntity().getLocation())) {
|
||||||
}
|
|
||||||
if (hasContainerPermission(bukkitPlayer, entity.getLocation())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // container (item frame get)
|
|
||||||
public void removeSomeOnItemFrameByArrow(EntityDamageByEntityEvent event) {
|
|
||||||
Entity entity = event.getEntity();
|
|
||||||
if (!(entity instanceof ItemFrame itemFrame)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (itemFrame.getItem().getType() == Material.AIR) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!(event.getDamager() instanceof Arrow arrow)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!(arrow.getShooter() instanceof Player bukkitPlayer)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (hasContainerPermission(bukkitPlayer, itemFrame.getLocation())) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
@ -311,27 +270,14 @@ public class PlayerEvents implements Listener {
|
|||||||
if (inv.getType() != InventoryType.WORKBENCH) {
|
if (inv.getType() != InventoryType.WORKBENCH) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!(event.getPlayer() instanceof Player bukkitPlayer)) {
|
if (!(event.getPlayer() instanceof Player)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Player bukkitPlayer = (Player) event.getPlayer();
|
||||||
DominionDTO dom = getInvDominion(bukkitPlayer, inv);
|
DominionDTO dom = getInvDominion(bukkitPlayer, inv);
|
||||||
checkFlag(dom, Flag.CRAFT, bukkitPlayer, event);
|
checkFlag(dom, Flag.CRAFT, bukkitPlayer, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // crafter
|
|
||||||
public void onCrafterOpen(InventoryOpenEvent event) {
|
|
||||||
Inventory inv = event.getInventory();
|
|
||||||
// InventoryType.CRAFTER;
|
|
||||||
if (!inv.getType().name().contains("CRAFTER")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!(event.getPlayer() instanceof Player bukkitPlayer)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
DominionDTO dom = getInvDominion(bukkitPlayer, inv);
|
|
||||||
checkFlag(dom, Flag.CRAFTER, bukkitPlayer, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // comparer
|
@EventHandler(priority = EventPriority.HIGHEST) // comparer
|
||||||
public void comparerChange(PlayerInteractEvent event) {
|
public void comparerChange(PlayerInteractEvent event) {
|
||||||
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) {
|
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) {
|
||||||
@ -346,7 +292,7 @@ public class PlayerEvents implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(event.getClickedBlock().getLocation());
|
DominionDTO dom = Cache.instance.getDominion(event.getClickedBlock().getLocation());
|
||||||
checkFlag(dom, Flag.COMPARER, player, event);
|
checkFlag(dom, Flag.COMPARER, player, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -359,11 +305,11 @@ public class PlayerEvents implements Listener {
|
|||||||
if (block == null) {
|
if (block == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!Tag.DOORS.isTagged(block.getType()) && !Tag.TRAPDOORS.isTagged(block.getType())) {
|
if (!Tag.DOORS.isTagged(block.getType())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(event.getClickedBlock().getLocation());
|
DominionDTO dom = Cache.instance.getDominion(event.getClickedBlock().getLocation());
|
||||||
checkFlag(dom, Flag.DOOR, player, event);
|
checkFlag(dom, Flag.DOOR, player, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -377,7 +323,7 @@ public class PlayerEvents implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
|
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
|
||||||
checkFlag(dom, Flag.DRAGON_EGG, player, event);
|
checkFlag(dom, Flag.DRAGON_EGG, player, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -388,7 +334,7 @@ public class PlayerEvents implements Listener {
|
|||||||
if (!(entity instanceof Colorable)) {
|
if (!(entity instanceof Colorable)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
|
DominionDTO dom = Cache.instance.getDominion(entity.getLocation());
|
||||||
checkFlag(dom, Flag.DYE, player, event);
|
checkFlag(dom, Flag.DYE, player, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -405,7 +351,7 @@ public class PlayerEvents implements Listener {
|
|||||||
if (!(Tag.SIGNS.isTagged(block.getType()))) {
|
if (!(Tag.SIGNS.isTagged(block.getType()))) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
|
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
|
||||||
checkFlag(dom, Flag.EDIT_SIGN, player, event);
|
checkFlag(dom, Flag.EDIT_SIGN, player, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -413,18 +359,19 @@ public class PlayerEvents implements Listener {
|
|||||||
public void onSignEdit(SignChangeEvent event) {
|
public void onSignEdit(SignChangeEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
Block block = event.getBlock();
|
Block block = event.getBlock();
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
|
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
|
||||||
checkFlag(dom, Flag.EDIT_SIGN, player, event);
|
checkFlag(dom, Flag.EDIT_SIGN, player, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // egg
|
@EventHandler(priority = EventPriority.HIGHEST) // egg
|
||||||
public void onThrowingEgg(ProjectileLaunchEvent event) {
|
public void onThrowingEgg(ProjectileLaunchEvent event) {
|
||||||
if (!(event.getEntity().getShooter() instanceof Player player)) {
|
if (!(event.getEntity().getShooter() instanceof Player)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (event.getEntity().getType() != EntityType.EGG) {
|
if (event.getEntity().getType() != EntityType.EGG) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Player player = (Player) event.getEntity().getShooter();
|
||||||
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
|
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
|
||||||
checkFlag(dom, Flag.EGG, player, event);
|
checkFlag(dom, Flag.EGG, player, event);
|
||||||
}
|
}
|
||||||
@ -434,21 +381,23 @@ public class PlayerEvents implements Listener {
|
|||||||
if (event.getInventory().getType() != InventoryType.ENCHANTING) {
|
if (event.getInventory().getType() != InventoryType.ENCHANTING) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!(event.getPlayer() instanceof Player bukkitPlayer)) {
|
if (!(event.getPlayer() instanceof Player)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Player bukkitPlayer = (Player) event.getPlayer();
|
||||||
DominionDTO dom = getInvDominion(bukkitPlayer, event.getInventory());
|
DominionDTO dom = getInvDominion(bukkitPlayer, event.getInventory());
|
||||||
checkFlag(dom, Flag.ENCHANT, bukkitPlayer, event);
|
checkFlag(dom, Flag.ENCHANT, bukkitPlayer, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // ender_pearl
|
@EventHandler(priority = EventPriority.HIGHEST) // ender_pearl
|
||||||
public void onThrowingEndPearl(ProjectileLaunchEvent event) {
|
public void onThrowingEndPearl(ProjectileLaunchEvent event) {
|
||||||
if (!(event.getEntity().getShooter() instanceof Player player)) {
|
if (!(event.getEntity().getShooter() instanceof Player)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (event.getEntity().getType() != EntityType.ENDER_PEARL) {
|
if (event.getEntity().getType() != EntityType.ENDER_PEARL) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Player player = (Player) event.getEntity().getShooter();
|
||||||
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
|
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
|
||||||
checkFlag(dom, Flag.ENDER_PEARL, player, event);
|
checkFlag(dom, Flag.ENDER_PEARL, player, event);
|
||||||
}
|
}
|
||||||
@ -463,7 +412,7 @@ public class PlayerEvents implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(event.getRightClicked().getLocation());
|
DominionDTO dom = Cache.instance.getDominion(event.getRightClicked().getLocation());
|
||||||
checkFlag(dom, Flag.FEED, player, event);
|
checkFlag(dom, Flag.FEED, player, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -489,7 +438,7 @@ public class PlayerEvents implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
|
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
|
||||||
checkFlag(dom, Flag.HARVEST, player, event);
|
checkFlag(dom, Flag.HARVEST, player, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -507,7 +456,7 @@ public class PlayerEvents implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
|
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
|
||||||
checkFlag(dom, Flag.HONEY, player, event);
|
checkFlag(dom, Flag.HONEY, player, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -518,7 +467,7 @@ public class PlayerEvents implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(caught.getLocation());
|
DominionDTO dom = Cache.instance.getDominion(caught.getLocation());
|
||||||
checkFlag(dom, Flag.HOOK, player, event);
|
checkFlag(dom, Flag.HOOK, player, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -533,9 +482,10 @@ public class PlayerEvents implements Listener {
|
|||||||
) {
|
) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!(event.getPlayer() instanceof Player bukkitPlayer)) {
|
if (!(event.getPlayer() instanceof Player)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Player bukkitPlayer = (Player) event.getPlayer();
|
||||||
DominionDTO dom = getInvDominion(bukkitPlayer, event.getInventory());
|
DominionDTO dom = getInvDominion(bukkitPlayer, event.getInventory());
|
||||||
checkFlag(dom, Flag.HOPPER, bukkitPlayer, event);
|
checkFlag(dom, Flag.HOPPER, bukkitPlayer, event);
|
||||||
}
|
}
|
||||||
@ -546,25 +496,10 @@ public class PlayerEvents implements Listener {
|
|||||||
if (player == null) {
|
if (player == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(event.getBlock().getLocation());
|
DominionDTO dom = Cache.instance.getDominion(event.getBlock().getLocation());
|
||||||
checkFlag(dom, Flag.IGNITE, player, event);
|
checkFlag(dom, Flag.IGNITE, player, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // item_frame_interactive
|
|
||||||
public void onItemFrameInteractive(PlayerInteractEntityEvent event) {
|
|
||||||
Entity entity = event.getRightClicked();
|
|
||||||
if (!(entity instanceof ItemFrame itemFrame)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (itemFrame.getItem().getType() == Material.AIR) {
|
|
||||||
// 为空则当作容器处理见 putSomeOnItemFrame
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Player player = event.getPlayer();
|
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
|
|
||||||
checkFlag(dom, Flag.ITEM_FRAME_INTERACTIVE, player, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // lever
|
@EventHandler(priority = EventPriority.HIGHEST) // lever
|
||||||
public void onLever(PlayerInteractEvent event) {
|
public void onLever(PlayerInteractEvent event) {
|
||||||
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) {
|
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) {
|
||||||
@ -579,13 +514,13 @@ public class PlayerEvents implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
|
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
|
||||||
checkFlag(dom, Flag.LEVER, player, event);
|
checkFlag(dom, Flag.LEVER, player, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // monster_killing
|
@EventHandler(priority = EventPriority.HIGHEST) // monster_killing
|
||||||
public void onMonsterKilling(EntityDamageByEntityEvent event) {
|
public void onMonsterKilling(EntityDamageByEntityEvent event) {
|
||||||
if (!(event.getDamager() instanceof Player bukkitPlayer)) {
|
if (!(event.getDamager() instanceof Player)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 如果不是怪物 则不处理
|
// 如果不是怪物 则不处理
|
||||||
@ -593,7 +528,8 @@ public class PlayerEvents implements Listener {
|
|||||||
if (!(entity instanceof Monster)) {
|
if (!(entity instanceof Monster)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
|
Player bukkitPlayer = (Player) event.getDamager();
|
||||||
|
DominionDTO dom = Cache.instance.getDominion(entity.getLocation());
|
||||||
checkFlag(dom, Flag.MONSTER_KILLING, bukkitPlayer, event);
|
checkFlag(dom, Flag.MONSTER_KILLING, bukkitPlayer, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -621,39 +557,15 @@ public class PlayerEvents implements Listener {
|
|||||||
Teleport.doTeleportSafely(player, to).thenAccept((success) -> {
|
Teleport.doTeleportSafely(player, to).thenAccept((success) -> {
|
||||||
if (!success) {
|
if (!success) {
|
||||||
Notification.warn(player, "传送失败,你将被传送到复活点");
|
Notification.warn(player, "传送失败,你将被传送到复活点");
|
||||||
Location bed = player.getBedSpawnLocation();
|
player.teleportAsync(player.getBedSpawnLocation() == null ?
|
||||||
if (bed == null) {
|
player.getWorld().getSpawnLocation() :
|
||||||
bed = player.getWorld().getSpawnLocation();
|
player.getBedSpawnLocation()
|
||||||
}
|
, PlayerTeleportEvent.TeleportCause.PLUGIN);
|
||||||
if (Common.isPaper()) {
|
|
||||||
player.teleportAsync(bed, PlayerTeleportEvent.TeleportCause.PLUGIN);
|
|
||||||
} else {
|
|
||||||
player.teleport(bed, PlayerTeleportEvent.TeleportCause.PLUGIN);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // note_block
|
|
||||||
public void onNoteBlockClicked(PlayerInteractEvent event) {
|
|
||||||
if (event.getAction() != Action.RIGHT_CLICK_BLOCK) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Block block = event.getClickedBlock();
|
|
||||||
if (block == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Material clicked = block.getType();
|
|
||||||
if (clicked != Material.NOTE_BLOCK) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Player player = event.getPlayer();
|
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
|
|
||||||
checkFlag(dom, Flag.NOTE_BLOCK, player, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // place
|
@EventHandler(priority = EventPriority.HIGHEST) // place
|
||||||
public void onPlaceBlock(BlockPlaceEvent event) {
|
public void onPlaceBlock(BlockPlaceEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
@ -675,6 +587,9 @@ public class PlayerEvents implements Listener {
|
|||||||
@EventHandler(priority = EventPriority.HIGHEST) // place - item frame
|
@EventHandler(priority = EventPriority.HIGHEST) // place - item frame
|
||||||
public void placeItemFrame(HangingPlaceEvent event) {
|
public void placeItemFrame(HangingPlaceEvent event) {
|
||||||
Entity entity = event.getEntity();
|
Entity entity = event.getEntity();
|
||||||
|
if (entity.getType() != EntityType.ITEM_FRAME && entity.getType() != EntityType.GLOW_ITEM_FRAME) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
if (player == null) {
|
if (player == null) {
|
||||||
return;
|
return;
|
||||||
@ -686,7 +601,7 @@ public class PlayerEvents implements Listener {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean onPlace(Player player, Location location) {
|
public static boolean onPlace(Player player, Location location) {
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(location);
|
DominionDTO dom = Cache.instance.getDominion(location);
|
||||||
return checkFlag(dom, Flag.PLACE, player, null);
|
return checkFlag(dom, Flag.PLACE, player, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -703,16 +618,17 @@ public class PlayerEvents implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
|
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
|
||||||
checkFlag(dom, Flag.PRESSURE, player, event);
|
checkFlag(dom, Flag.PRESSURE, player, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // riding
|
@EventHandler(priority = EventPriority.HIGHEST) // riding
|
||||||
public void onRiding(EntityMountEvent event) {
|
public void onRiding(EntityMountEvent event) {
|
||||||
if (!(event.getEntity() instanceof Player player)) {
|
if (!(event.getEntity() instanceof Player)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(event.getMount().getLocation());
|
Player player = (Player) event.getEntity();
|
||||||
|
DominionDTO dom = Cache.instance.getDominion(event.getMount().getLocation());
|
||||||
checkFlag(dom, Flag.RIDING, player, event);
|
checkFlag(dom, Flag.RIDING, player, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -727,22 +643,28 @@ public class PlayerEvents implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
|
DominionDTO dom = Cache.instance.getDominion(block.getLocation());
|
||||||
checkFlag(dom, Flag.REPEATER, player, event);
|
checkFlag(dom, Flag.REPEATER, player, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // shear
|
@EventHandler(priority = EventPriority.HIGHEST) // shear
|
||||||
public void onShear(PlayerShearEntityEvent event) {
|
public void onShear(PlayerShearEntityEvent event) {
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(event.getEntity().getLocation());
|
DominionDTO dom = Cache.instance.getDominion(event.getEntity().getLocation());
|
||||||
checkFlag(dom, Flag.SHEAR, player, event);
|
checkFlag(dom, Flag.SHEAR, player, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // shoot
|
@EventHandler(priority = EventPriority.HIGHEST) // shoot
|
||||||
public void onShootArrowSnowball(ProjectileHitEvent event) {
|
public void onShootArrowSnowball(ProjectileLaunchEvent event) {
|
||||||
if (!(event.getEntity().getShooter() instanceof Player player)) {
|
if (!(event.getEntity().getShooter() instanceof Player)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (event.getEntity().getType() != EntityType.ARROW &&
|
||||||
|
event.getEntity().getType() != EntityType.SNOWBALL &&
|
||||||
|
event.getEntity().getType() != EntityType.TRIDENT) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Player player = (Player) event.getEntity().getShooter();
|
||||||
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
|
DominionDTO dom = Cache.instance.getPlayerCurrentDominion(player);
|
||||||
checkFlag(dom, Flag.SHOOT, player, event);
|
checkFlag(dom, Flag.SHOOT, player, event);
|
||||||
}
|
}
|
||||||
@ -752,19 +674,21 @@ public class PlayerEvents implements Listener {
|
|||||||
if (event.getInventory().getType() != InventoryType.MERCHANT) {
|
if (event.getInventory().getType() != InventoryType.MERCHANT) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!(event.getPlayer() instanceof Player bukkitPlayer)) {
|
if (!(event.getPlayer() instanceof Player)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Player bukkitPlayer = (Player) event.getPlayer();
|
||||||
DominionDTO dom = getInvDominion(bukkitPlayer, event.getInventory());
|
DominionDTO dom = getInvDominion(bukkitPlayer, event.getInventory());
|
||||||
checkFlag(dom, Flag.TRADE, bukkitPlayer, event);
|
checkFlag(dom, Flag.TRADE, bukkitPlayer, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // vehicle_destroy
|
@EventHandler(priority = EventPriority.HIGHEST) // vehicle_destroy
|
||||||
public void onVehicleDestroy(VehicleDestroyEvent event) {
|
public void onVehicleDestroy(VehicleDestroyEvent event) {
|
||||||
if (!(event.getAttacker() instanceof Player player)) {
|
if (!(event.getAttacker() instanceof Player)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(event.getVehicle().getLocation());
|
Player player = (Player) event.getAttacker();
|
||||||
|
DominionDTO dom = Cache.instance.getDominion(event.getVehicle().getLocation());
|
||||||
checkFlag(dom, Flag.VEHICLE_DESTROY, player, event);
|
checkFlag(dom, Flag.VEHICLE_DESTROY, player, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -778,19 +702,20 @@ public class PlayerEvents implements Listener {
|
|||||||
if (!(entity instanceof Vehicle)) {
|
if (!(entity instanceof Vehicle)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
|
DominionDTO dom = Cache.instance.getDominion(entity.getLocation());
|
||||||
checkFlag(dom, Flag.VEHICLE_SPAWN, player, event);
|
checkFlag(dom, Flag.VEHICLE_SPAWN, player, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // villager_killing
|
@EventHandler(priority = EventPriority.HIGHEST) // villager_killing
|
||||||
public void onVillagerKilling(EntityDamageByEntityEvent event) {
|
public void onVillagerKilling(EntityDamageByEntityEvent event) {
|
||||||
if (!(event.getDamager() instanceof Player player)) {
|
if (!(event.getDamager() instanceof Player)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!(event.getEntity() instanceof Villager)) {
|
if (!(event.getEntity() instanceof Villager)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(event.getEntity().getLocation());
|
Player player = (Player) event.getDamager();
|
||||||
|
DominionDTO dom = Cache.instance.getDominion(event.getEntity().getLocation());
|
||||||
checkFlag(dom, Flag.VILLAGER_KILLING, player, event);
|
checkFlag(dom, Flag.VILLAGER_KILLING, player, event);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,10 +1,11 @@
|
|||||||
package cn.lunadeer.dominion.events_v1_20_1;
|
package cn.lunadeer.dominion.events;
|
||||||
|
|
||||||
|
import cn.lunadeer.dominion.Cache;
|
||||||
import cn.lunadeer.dominion.Dominion;
|
import cn.lunadeer.dominion.Dominion;
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
import cn.lunadeer.dominion.utils.Particle;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
import cn.lunadeer.minecraftpluginutils.VaultConnect.VaultConnect;
|
import cn.lunadeer.minecraftpluginutils.ParticleRender;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.VaultConnect;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
@ -43,16 +44,16 @@ public class SelectPointEvents implements Listener {
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
Notification.info(player, "已选择第一个点: %d %d %d", block.getX(), block.getY(), block.getZ());
|
Notification.info(player, "已选择第一个点: %d %d %d", block.getX(), block.getY(), block.getZ());
|
||||||
Location loc = block.getLocation();
|
Location loc = block.getLocation();
|
||||||
if (Dominion.config.getLimitVert(player)) {
|
if (Dominion.config.getLimitVert()) {
|
||||||
loc.setY(Dominion.config.getLimitMinY(player));
|
loc.setY(Dominion.config.getLimitMinY());
|
||||||
}
|
}
|
||||||
points.put(0, loc);
|
points.put(0, loc);
|
||||||
} else if (action == Action.RIGHT_CLICK_BLOCK) {
|
} else if (action == Action.RIGHT_CLICK_BLOCK) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
Notification.info(player, "已选择第二个点: %d %d %d", block.getX(), block.getY(), block.getZ());
|
Notification.info(player, "已选择第二个点: %d %d %d", block.getX(), block.getY(), block.getZ());
|
||||||
Location loc = block.getLocation();
|
Location loc = block.getLocation();
|
||||||
if (Dominion.config.getLimitVert(player)) {
|
if (Dominion.config.getLimitVert()) {
|
||||||
loc.setY(Dominion.config.getLimitMaxY(player) - 1);
|
loc.setY(Dominion.config.getLimitMaxY());
|
||||||
}
|
}
|
||||||
points.put(1, loc);
|
points.put(1, loc);
|
||||||
} else {
|
} else {
|
||||||
@ -78,7 +79,7 @@ public class SelectPointEvents implements Listener {
|
|||||||
int maxX = Math.max(loc1.getBlockX(), loc2.getBlockX()) + 1;
|
int maxX = Math.max(loc1.getBlockX(), loc2.getBlockX()) + 1;
|
||||||
int maxY = Math.max(loc1.getBlockY(), loc2.getBlockY()) + 1;
|
int maxY = Math.max(loc1.getBlockY(), loc2.getBlockY()) + 1;
|
||||||
int maxZ = Math.max(loc1.getBlockZ(), loc2.getBlockZ()) + 1;
|
int maxZ = Math.max(loc1.getBlockZ(), loc2.getBlockZ()) + 1;
|
||||||
DominionDTO dominion = new DominionDTO(player.getUniqueId(), "", loc1.getWorld(),
|
DominionDTO dominion = new DominionDTO(player.getUniqueId(), "", loc1.getWorld().getName(),
|
||||||
minX, minY, minZ, maxX, maxY, maxZ);
|
minX, minY, minZ, maxX, maxY, maxZ);
|
||||||
if (Dominion.config.getEconomyEnable()) {
|
if (Dominion.config.getEconomyEnable()) {
|
||||||
if (!VaultConnect.instance.economyAvailable()) {
|
if (!VaultConnect.instance.economyAvailable()) {
|
||||||
@ -86,15 +87,15 @@ public class SelectPointEvents implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int count;
|
int count;
|
||||||
if (Dominion.config.getEconomyOnlyXZ(player)) {
|
if (Dominion.config.getEconomyOnlyXZ()) {
|
||||||
count = dominion.getSquare();
|
count = dominion.getSquare();
|
||||||
} else {
|
} else {
|
||||||
count = dominion.getVolume();
|
count = dominion.getVolume();
|
||||||
}
|
}
|
||||||
float price = count * Dominion.config.getEconomyPrice(player);
|
float price = count * Dominion.config.getEconomyPrice();
|
||||||
Notification.info(player, "预计领地创建价格为 %.2f %s", price, VaultConnect.instance.currencyNamePlural());
|
Notification.info(player, "预计领地创建价格为 %.2f %s", price, VaultConnect.instance.currencyNamePlural());
|
||||||
}
|
}
|
||||||
Particle.showBorder(player, dominion);
|
ParticleRender.showBoxFace(player, dominion.getLocation1(), dominion.getLocation2());
|
||||||
Notification.info(player, "尺寸: %d x %d x %d", dominion.getWidthX(), dominion.getHeight(), dominion.getWidthZ());
|
Notification.info(player, "尺寸: %d x %d x %d", dominion.getWidthX(), dominion.getHeight(), dominion.getWidthZ());
|
||||||
Notification.info(player, "面积: %d", dominion.getSquare());
|
Notification.info(player, "面积: %d", dominion.getSquare());
|
||||||
Notification.info(player, "高度: %d", dominion.getHeight());
|
Notification.info(player, "高度: %d", dominion.getHeight());
|
@ -2,17 +2,12 @@ package cn.lunadeer.dominion.managers;
|
|||||||
|
|
||||||
import cn.lunadeer.dominion.Dominion;
|
import cn.lunadeer.dominion.Dominion;
|
||||||
import cn.lunadeer.dominion.dtos.Flag;
|
import cn.lunadeer.dominion.dtos.Flag;
|
||||||
import cn.lunadeer.minecraftpluginutils.VaultConnect.VaultConnect;
|
import cn.lunadeer.minecraftpluginutils.VaultConnect;
|
||||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class ConfigManager {
|
public class ConfigManager {
|
||||||
public ConfigManager(Dominion plugin) {
|
public ConfigManager(Dominion plugin) {
|
||||||
@ -26,7 +21,6 @@ public class ConfigManager {
|
|||||||
_plugin.reloadConfig();
|
_plugin.reloadConfig();
|
||||||
_file = _plugin.getConfig();
|
_file = _plugin.getConfig();
|
||||||
_debug = _file.getBoolean("Debug", false);
|
_debug = _file.getBoolean("Debug", false);
|
||||||
_timer = _file.getBoolean("Timer", false);
|
|
||||||
XLogger.setDebug(_debug);
|
XLogger.setDebug(_debug);
|
||||||
_db_type = _file.getString("Database.Type", "sqlite");
|
_db_type = _file.getString("Database.Type", "sqlite");
|
||||||
_db_host = _file.getString("Database.Host", "localhost");
|
_db_host = _file.getString("Database.Host", "localhost");
|
||||||
@ -39,15 +33,43 @@ public class ConfigManager {
|
|||||||
XLogger.err("AutoCreateRadius 不能等于 0,已重置为 10");
|
XLogger.err("AutoCreateRadius 不能等于 0,已重置为 10");
|
||||||
setAutoCreateRadius(10);
|
setAutoCreateRadius(10);
|
||||||
}
|
}
|
||||||
_spawn_protection = _file.getInt("Limit.SpawnProtection", 10);
|
_limit_size_x = _file.getInt("Limit.SizeX", 128);
|
||||||
_blue_map = _file.getBoolean("BlueMap", false);
|
if (_limit_size_x <= 4 && _limit_size_x != -1) {
|
||||||
_dynmap = _file.getBoolean("Dynmap", false);
|
XLogger.err("Limit.SizeX 尺寸不能小于 4,已重置为 128");
|
||||||
|
setLimitSizeX(128);
|
||||||
|
}
|
||||||
|
_limit_size_y = _file.getInt("Limit.SizeY", 64);
|
||||||
|
if (_limit_size_y <= 4 && _limit_size_y != -1) {
|
||||||
|
XLogger.err("Limit.SizeY 尺寸不能小于 4,已重置为 64");
|
||||||
|
setLimitSizeY(64);
|
||||||
|
}
|
||||||
|
_limit_size_z = _file.getInt("Limit.SizeZ", 128);
|
||||||
|
if (_limit_size_z <= 4 && _limit_size_z != -1) {
|
||||||
|
XLogger.err("Limit.SizeZ 尺寸不能小于 4,已重置为 128");
|
||||||
|
setLimitSizeZ(128);
|
||||||
|
}
|
||||||
|
_blue_map = _file.getBoolean("BlueMap", true);
|
||||||
_auto_clean_after_days = _file.getInt("AutoCleanAfterDays", 180);
|
_auto_clean_after_days = _file.getInt("AutoCleanAfterDays", 180);
|
||||||
if (_auto_clean_after_days == 0) {
|
if (_auto_clean_after_days == 0) {
|
||||||
XLogger.err("AutoCleanAfterDays 不能等于 0,已重置为 180");
|
XLogger.err("AutoCleanAfterDays 不能等于 0,已重置为 180");
|
||||||
setAutoCleanAfterDays(180);
|
setAutoCleanAfterDays(180);
|
||||||
}
|
}
|
||||||
|
_limit_min_y = _file.getInt("Limit.MinY", -64);
|
||||||
|
_limit_max_y = _file.getInt("Limit.MaxY", 320);
|
||||||
|
if (_limit_min_y >= _limit_max_y) {
|
||||||
|
XLogger.err("Limit.MinY 不能大于或等于 Limit.MaxY,已重置为 -64 320");
|
||||||
|
setLimitMinY(-64);
|
||||||
|
setLimitMaxY(320);
|
||||||
|
}
|
||||||
|
_limit_amount = _file.getInt("Limit.Amount", 10);
|
||||||
|
_limit_depth = _file.getInt("Limit.Depth", 10);
|
||||||
|
_limit_vert = _file.getBoolean("Limit.Vert", false);
|
||||||
|
if (_limit_vert && _limit_size_y <= _limit_max_y - _limit_min_y) {
|
||||||
|
setLimitSizeY(_limit_max_y - _limit_min_y + 1);
|
||||||
|
XLogger.warn("启用 Limit.Vert 时 Limit.SizeY 不能小于 Limit.MaxY - Limit.MinY,已自动调整为 " + (_limit_max_y - _limit_min_y + 1));
|
||||||
|
}
|
||||||
_limit_op_bypass = _file.getBoolean("Limit.OpByPass", true);
|
_limit_op_bypass = _file.getBoolean("Limit.OpByPass", true);
|
||||||
|
_world_black_list = _file.getStringList("Limit.WorldBlackList");
|
||||||
_check_update = _file.getBoolean("CheckUpdate", true);
|
_check_update = _file.getBoolean("CheckUpdate", true);
|
||||||
_tp_enable = _file.getBoolean("Teleport.Enable", false);
|
_tp_enable = _file.getBoolean("Teleport.Enable", false);
|
||||||
_tp_delay = _file.getInt("Teleport.Delay", 0);
|
_tp_delay = _file.getInt("Teleport.Delay", 0);
|
||||||
@ -58,133 +80,43 @@ public class ConfigManager {
|
|||||||
setTool("ARROW");
|
setTool("ARROW");
|
||||||
}
|
}
|
||||||
_economy_enable = _file.getBoolean("Economy.Enable", false);
|
_economy_enable = _file.getBoolean("Economy.Enable", false);
|
||||||
|
_economy_price = (float) _file.getDouble("Economy.Price", 10.0);
|
||||||
|
_economy_only_xz = _file.getBoolean("Economy.OnlyXZ", false);
|
||||||
|
_economy_refund = (float) _file.getDouble("Economy.Refund", 0.85);
|
||||||
if (getEconomyEnable()) {
|
if (getEconomyEnable()) {
|
||||||
new VaultConnect(this._plugin);
|
new VaultConnect(this._plugin);
|
||||||
}
|
}
|
||||||
_fly_permission_nodes = _file.getStringList("FlyPermissionNodes");
|
_fly_permission_nodes = _file.getStringList("FlyPermissionNodes");
|
||||||
_residence_migration = _file.getBoolean("ResidenceMigration", false);
|
_residence_migration = _file.getBoolean("ResidenceMigration", false);
|
||||||
_group_title_enable = _file.getBoolean("GroupTitle.Enable", false);
|
|
||||||
_group_title_prefix = _file.getString("GroupTitle.Prefix", "&#ffffff[");
|
|
||||||
_group_title_suffix = _file.getString("GroupTitle.Suffix", "&#ffffff]");
|
|
||||||
|
|
||||||
GroupLimit defaultGroup = new GroupLimit();
|
|
||||||
defaultGroup.setLimitSizeX(_file.getInt("Limit.SizeX", 128));
|
|
||||||
defaultGroup.setLimitSizeY(_file.getInt("Limit.SizeY", 64));
|
|
||||||
defaultGroup.setLimitSizeZ(_file.getInt("Limit.SizeZ", 128));
|
|
||||||
defaultGroup.setLimitMinY(_file.getInt("Limit.MinY", -64));
|
|
||||||
defaultGroup.setLimitMaxY(_file.getInt("Limit.MaxY", 320));
|
|
||||||
defaultGroup.setLimitAmount(_file.getInt("Limit.Amount", 10));
|
|
||||||
defaultGroup.setLimitDepth(_file.getInt("Limit.Depth", 3));
|
|
||||||
defaultGroup.setLimitVert(_file.getBoolean("Limit.Vert", false));
|
|
||||||
defaultGroup.setWorldBlackList(_file.getStringList("Limit.WorldBlackList"));
|
|
||||||
defaultGroup.setPrice(_file.getDouble("Economy.Price", 10.0));
|
|
||||||
defaultGroup.setPriceOnlyXZ(_file.getBoolean("Economy.OnlyXZ", false));
|
|
||||||
defaultGroup.setRefundRatio(_file.getDouble("Economy.Refund", 0.85));
|
|
||||||
limits.put("default", defaultGroup);
|
|
||||||
if (defaultGroup.getLimitSizeX() <= 4 && defaultGroup.getLimitSizeX() != -1) {
|
|
||||||
XLogger.err("Limit.SizeX 尺寸不能小于 4,已重置为 128");
|
|
||||||
setLimitSizeX(128);
|
|
||||||
}
|
|
||||||
if (defaultGroup.getLimitSizeY() <= 4 && defaultGroup.getLimitSizeY() != -1) {
|
|
||||||
XLogger.err("Limit.SizeY 尺寸不能小于 4,已重置为 64");
|
|
||||||
setLimitSizeY(64);
|
|
||||||
}
|
|
||||||
if (defaultGroup.getLimitSizeZ() <= 4 && defaultGroup.getLimitSizeZ() != -1) {
|
|
||||||
XLogger.err("Limit.SizeZ 尺寸不能小于 4,已重置为 128");
|
|
||||||
setLimitSizeZ(128);
|
|
||||||
}
|
|
||||||
if (defaultGroup.getLimitMinY() >= defaultGroup.getLimitMaxY()) {
|
|
||||||
XLogger.err("Limit.MinY 不能大于或等于 Limit.MaxY,已重置为 -64 320");
|
|
||||||
setLimitMinY(-64);
|
|
||||||
setLimitMaxY(320);
|
|
||||||
}
|
|
||||||
if (defaultGroup.getRefundRatio() < 0.0 || defaultGroup.getRefundRatio() > 1.0) {
|
|
||||||
XLogger.err("Economy.Refund 设置不合法,已重置为 0.85");
|
|
||||||
setEconomyRefund(0.85f);
|
|
||||||
}
|
|
||||||
if (defaultGroup.getPrice() < 0.0) {
|
|
||||||
XLogger.err("Economy.Price 设置不合法,已重置为 10.0");
|
|
||||||
setEconomyPrice(10.0f);
|
|
||||||
}
|
|
||||||
if (defaultGroup.getLimitVert() && defaultGroup.getLimitSizeY() <= defaultGroup.getLimitMaxY() - defaultGroup.getLimitMinY()) {
|
|
||||||
XLogger.warn("启用 Limit.Vert 时 Limit.SizeY 不能小于 Limit.MaxY - Limit.MinY,已自动调整为 " + (defaultGroup.getLimitMaxY() - defaultGroup.getLimitMinY() + 1));
|
|
||||||
setLimitSizeY(defaultGroup.getLimitMaxY() - defaultGroup.getLimitMinY() + 1);
|
|
||||||
}
|
|
||||||
if (defaultGroup.getLimitAmount() < 0 && defaultGroup.getLimitAmount() != -1) {
|
|
||||||
XLogger.err("Limit.Amount 设置不合法,已重置为 10");
|
|
||||||
setLimitAmount(10);
|
|
||||||
}
|
|
||||||
if (defaultGroup.getLimitDepth() < 0 && defaultGroup.getLimitDepth() != -1) {
|
|
||||||
XLogger.err("Limit.Depth 设置不合法,已重置为 3");
|
|
||||||
setLimitDepth(3);
|
|
||||||
}
|
|
||||||
|
|
||||||
limits.putAll(GroupLimit.loadGroups(_plugin));
|
|
||||||
|
|
||||||
saveAll(); // 回写文件 防止文件中的数据不完整
|
saveAll(); // 回写文件 防止文件中的数据不完整
|
||||||
Flag.loadFromJson(); // 加载 Flag 配置
|
Flag.loadFromJson();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void saveAll() {
|
public void saveAll() {
|
||||||
// 删除旧文件
|
|
||||||
new File(_plugin.getDataFolder(), "config.yml").delete();
|
|
||||||
// 保存新文件
|
|
||||||
_plugin.saveDefaultConfig();
|
|
||||||
// 重新加载
|
|
||||||
_plugin.reloadConfig();
|
|
||||||
_file = _plugin.getConfig();
|
|
||||||
|
|
||||||
// 保存配置
|
|
||||||
_file.set("Database.Type", _db_type);
|
|
||||||
_file.set("Database.Host", _db_host);
|
|
||||||
_file.set("Database.Port", _db_port);
|
|
||||||
_file.set("Database.Name", _db_name);
|
|
||||||
_file.set("Database.User", _db_user);
|
|
||||||
_file.set("Database.Pass", _db_pass);
|
|
||||||
|
|
||||||
_file.set("AutoCreateRadius", _auto_create_radius);
|
_file.set("AutoCreateRadius", _auto_create_radius);
|
||||||
|
_file.set("Limit.SizeX", _limit_size_x);
|
||||||
_file.set("Limit.SpawnProtection", _spawn_protection);
|
_file.set("Limit.SizeY", _limit_size_y);
|
||||||
_file.set("Limit.MinY", limits.get("default").getLimitMinY());
|
_file.set("Limit.SizeZ", _limit_size_z);
|
||||||
_file.set("Limit.MaxY", limits.get("default").getLimitMaxY());
|
_file.set("BlueMap", _blue_map);
|
||||||
_file.set("Limit.SizeX", limits.get("default").getLimitSizeX());
|
_file.set("AutoCleanAfterDays", _auto_clean_after_days);
|
||||||
_file.set("Limit.SizeY", limits.get("default").getLimitSizeY());
|
_file.set("Limit.MinY", _limit_min_y);
|
||||||
_file.set("Limit.SizeZ", limits.get("default").getLimitSizeZ());
|
_file.set("Limit.MaxY", _limit_max_y);
|
||||||
_file.set("Limit.Amount", limits.get("default").getLimitAmount());
|
_file.set("Limit.Amount", _limit_amount);
|
||||||
_file.set("Limit.Depth", limits.get("default").getLimitDepth());
|
_file.set("Limit.Depth", _limit_depth);
|
||||||
_file.set("Limit.Vert", limits.get("default").getLimitVert());
|
_file.set("Limit.Vert", _limit_vert);
|
||||||
_file.set("Limit.WorldBlackList", limits.get("default").getWorldBlackList());
|
|
||||||
_file.set("Limit.OpByPass", _limit_op_bypass);
|
_file.set("Limit.OpByPass", _limit_op_bypass);
|
||||||
|
_file.set("Limit.WorldBlackList", _world_black_list);
|
||||||
|
_file.set("CheckUpdate", _check_update);
|
||||||
_file.set("Teleport.Enable", _tp_enable);
|
_file.set("Teleport.Enable", _tp_enable);
|
||||||
_file.set("Teleport.Delay", _tp_delay);
|
_file.set("Teleport.Delay", _tp_delay);
|
||||||
_file.set("Teleport.CoolDown", _tp_cool_down);
|
_file.set("Teleport.CoolDown", _tp_cool_down);
|
||||||
|
|
||||||
_file.set("AutoCleanAfterDays", _auto_clean_after_days);
|
|
||||||
|
|
||||||
_file.set("Tool", _tool);
|
_file.set("Tool", _tool);
|
||||||
|
|
||||||
_file.set("Economy.Enable", _economy_enable);
|
_file.set("Economy.Enable", _economy_enable);
|
||||||
_file.set("Economy.Price", limits.get("default").getPrice());
|
_file.set("Economy.Price", _economy_price);
|
||||||
_file.set("Economy.OnlyXZ", limits.get("default").getPriceOnlyXZ());
|
_file.set("Economy.OnlyXZ", _economy_only_xz);
|
||||||
_file.set("Economy.Refund", limits.get("default").getRefundRatio());
|
_file.set("Economy.Refund", _economy_refund);
|
||||||
|
|
||||||
_file.set("FlyPermissionNodes", _fly_permission_nodes);
|
_file.set("FlyPermissionNodes", _fly_permission_nodes);
|
||||||
|
|
||||||
_file.set("ResidenceMigration", _residence_migration);
|
_file.set("ResidenceMigration", _residence_migration);
|
||||||
|
|
||||||
_file.set("GroupTitle.Enable", _group_title_enable);
|
|
||||||
_file.set("GroupTitle.Prefix", _group_title_prefix);
|
|
||||||
_file.set("GroupTitle.Suffix", _group_title_suffix);
|
|
||||||
|
|
||||||
_file.set("BlueMap", _blue_map);
|
|
||||||
_file.set("Dynmap", _dynmap);
|
|
||||||
|
|
||||||
_file.set("CheckUpdate", _check_update);
|
|
||||||
|
|
||||||
_file.set("Debug", _debug);
|
|
||||||
_file.set("Timer", _timer);
|
|
||||||
|
|
||||||
_plugin.saveConfig();
|
_plugin.saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,10 +131,6 @@ public class ConfigManager {
|
|||||||
XLogger.setDebug(debug);
|
XLogger.setDebug(debug);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean TimerEnabled() {
|
|
||||||
return _timer;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDbType() {
|
public String getDbType() {
|
||||||
return _db_type;
|
return _db_type;
|
||||||
}
|
}
|
||||||
@ -248,32 +176,32 @@ public class ConfigManager {
|
|||||||
return _db_pass;
|
return _db_pass;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getLimitSizeX(Player player) {
|
public Integer getLimitSizeX() {
|
||||||
return limits.get(getPlayerGroup(player)).getLimitSizeX();
|
return _limit_size_x;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLimitSizeX(Integer max_x) {
|
public void setLimitSizeX(Integer max_x) {
|
||||||
limits.get("default").setLimitSizeX(max_x);
|
_limit_size_x = max_x;
|
||||||
_file.set("Limit.SizeX", max_x);
|
_file.set("Limit.SizeX", max_x);
|
||||||
_plugin.saveConfig();
|
_plugin.saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getLimitSizeY(Player player) {
|
public Integer getLimitSizeY() {
|
||||||
return limits.get(getPlayerGroup(player)).getLimitSizeY();
|
return _limit_size_y;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLimitSizeY(Integer max_y) {
|
public void setLimitSizeY(Integer max_y) {
|
||||||
limits.get("default").setLimitSizeY(max_y);
|
_limit_size_y = max_y;
|
||||||
_file.set("Limit.SizeY", max_y);
|
_file.set("Limit.SizeY", max_y);
|
||||||
_plugin.saveConfig();
|
_plugin.saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getLimitSizeZ(Player player) {
|
public Integer getLimitSizeZ() {
|
||||||
return limits.get(getPlayerGroup(player)).getLimitSizeZ();
|
return _limit_size_z;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLimitSizeZ(Integer max_z) {
|
public void setLimitSizeZ(Integer max_z) {
|
||||||
limits.get("default").setLimitSizeZ(max_z);
|
_limit_size_z = max_z;
|
||||||
_file.set("Limit.SizeZ", max_z);
|
_file.set("Limit.SizeZ", max_z);
|
||||||
_plugin.saveConfig();
|
_plugin.saveConfig();
|
||||||
}
|
}
|
||||||
@ -292,8 +220,10 @@ public class ConfigManager {
|
|||||||
return _blue_map;
|
return _blue_map;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean getDynmap() {
|
public void setBlueMap(Boolean blue_map) {
|
||||||
return _dynmap;
|
_blue_map = blue_map;
|
||||||
|
_file.set("BlueMap", blue_map);
|
||||||
|
_plugin.saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getAutoCleanAfterDays() {
|
public Integer getAutoCleanAfterDays() {
|
||||||
@ -306,58 +236,58 @@ public class ConfigManager {
|
|||||||
_plugin.saveConfig();
|
_plugin.saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getLimitMinY(Player player) {
|
public Integer getLimitMinY() {
|
||||||
return limits.get(getPlayerGroup(player)).getLimitMinY();
|
return _limit_min_y;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLimitMinY(Integer limit_bottom) {
|
public void setLimitMinY(Integer limit_bottom) {
|
||||||
limits.get("default").setLimitMinY(limit_bottom);
|
_limit_min_y = limit_bottom;
|
||||||
_file.set("Limit.MinY", limit_bottom);
|
_file.set("Limit.MinY", limit_bottom);
|
||||||
_plugin.saveConfig();
|
_plugin.saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getLimitMaxY(Player player) {
|
public Integer getLimitMaxY() {
|
||||||
return limits.get(getPlayerGroup(player)).getLimitMaxY();
|
return _limit_max_y;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLimitMaxY(Integer limit_top) {
|
public void setLimitMaxY(Integer limit_top) {
|
||||||
limits.get("default").setLimitMaxY(limit_top);
|
_limit_max_y = limit_top;
|
||||||
_file.set("Limit.MaxY", limit_top);
|
_file.set("Limit.MaxY", limit_top);
|
||||||
_plugin.saveConfig();
|
_plugin.saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getLimitAmount(Player player) {
|
public Integer getLimitAmount() {
|
||||||
return limits.get(getPlayerGroup(player)).getLimitAmount();
|
return _limit_amount;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLimitAmount(Integer limit_amount) {
|
public void setLimitAmount(Integer limit_amount) {
|
||||||
limits.get("default").setLimitAmount(limit_amount);
|
_limit_amount = limit_amount;
|
||||||
_file.set("Limit.Amount", limit_amount);
|
_file.set("Limit.Amount", limit_amount);
|
||||||
_plugin.saveConfig();
|
_plugin.saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getLimitDepth(Player player) {
|
public Integer getLimitDepth() {
|
||||||
return limits.get(getPlayerGroup(player)).getLimitDepth();
|
return _limit_depth;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLimitDepth(Integer limit_depth) {
|
public void setLimitDepth(Integer limit_depth) {
|
||||||
limits.get("default").setLimitDepth(limit_depth);
|
_limit_depth = limit_depth;
|
||||||
_file.set("Limit.Depth", limit_depth);
|
_file.set("Limit.Depth", limit_depth);
|
||||||
_plugin.saveConfig();
|
_plugin.saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean getLimitVert(Player player) {
|
public Boolean getLimitVert() {
|
||||||
return limits.get(getPlayerGroup(player)).getLimitVert();
|
return _limit_vert;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLimitVert(Boolean limit_vert) {
|
public void setLimitVert(Boolean limit_vert) {
|
||||||
limits.get("default").setLimitVert(limit_vert);
|
_limit_vert = limit_vert;
|
||||||
_file.set("Limit.Vert", limit_vert);
|
_file.set("Limit.Vert", limit_vert);
|
||||||
_plugin.saveConfig();
|
_plugin.saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> getWorldBlackList(Player player) {
|
public List<String> getWorldBlackList() {
|
||||||
return limits.get(getPlayerGroup(player)).getWorldBlackList();
|
return _world_black_list;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean getLimitOpBypass() {
|
public Boolean getLimitOpBypass() {
|
||||||
@ -424,32 +354,32 @@ public class ConfigManager {
|
|||||||
_plugin.saveConfig();
|
_plugin.saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Float getEconomyPrice(Player player) {
|
public Float getEconomyPrice() {
|
||||||
return limits.get(getPlayerGroup(player)).getPrice().floatValue();
|
return _economy_price;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setEconomyPrice(Float economy_price) {
|
public void setEconomyPrice(Float economy_price) {
|
||||||
limits.get("default").setPrice((double) economy_price);
|
_economy_price = economy_price;
|
||||||
_file.set("Economy.Price", economy_price);
|
_file.set("Economy.Price", economy_price);
|
||||||
_plugin.saveConfig();
|
_plugin.saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean getEconomyOnlyXZ(Player player) {
|
public Boolean getEconomyOnlyXZ() {
|
||||||
return limits.get(getPlayerGroup(player)).getPriceOnlyXZ();
|
return _economy_only_xz;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setEconomyOnlyXZ(Boolean economy_only_xz) {
|
public void setEconomyOnlyXZ(Boolean economy_only_xz) {
|
||||||
limits.get("default").setPriceOnlyXZ(economy_only_xz);
|
_economy_only_xz = economy_only_xz;
|
||||||
_file.set("Economy.OnlyXZ", economy_only_xz);
|
_file.set("Economy.OnlyXZ", economy_only_xz);
|
||||||
_plugin.saveConfig();
|
_plugin.saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Float getEconomyRefund(Player player) {
|
public Float getEconomyRefund() {
|
||||||
return limits.get(getPlayerGroup(player)).getRefundRatio().floatValue();
|
return _economy_refund;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setEconomyRefund(Float economy_refund) {
|
public void setEconomyRefund(Float economy_refund) {
|
||||||
limits.get("default").setRefundRatio((double) economy_refund);
|
_economy_refund = economy_refund;
|
||||||
_file.set("Economy.Refund", economy_refund);
|
_file.set("Economy.Refund", economy_refund);
|
||||||
_plugin.saveConfig();
|
_plugin.saveConfig();
|
||||||
}
|
}
|
||||||
@ -474,50 +404,9 @@ public class ConfigManager {
|
|||||||
_plugin.saveConfig();
|
_plugin.saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getSpawnProtection() {
|
|
||||||
return _spawn_protection;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSpawnProtection(Integer spawn_protection) {
|
|
||||||
_spawn_protection = spawn_protection;
|
|
||||||
_file.set("Limit.SpawnProtection", spawn_protection);
|
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Boolean getGroupTitleEnable() {
|
|
||||||
return _group_title_enable;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setGroupTitleEnable(Boolean group_title_enable) {
|
|
||||||
_group_title_enable = group_title_enable;
|
|
||||||
_file.set("GroupTitle.Enable", group_title_enable);
|
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getGroupTitlePrefix() {
|
|
||||||
return _group_title_prefix;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setGroupTitlePrefix(String group_title_prefix) {
|
|
||||||
_group_title_prefix = group_title_prefix;
|
|
||||||
_file.set("GroupTitle.Prefix", group_title_prefix);
|
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getGroupTitleSuffix() {
|
|
||||||
return _group_title_suffix;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setGroupTitleSuffix(String group_title_suffix) {
|
|
||||||
_group_title_suffix = group_title_suffix;
|
|
||||||
_file.set("GroupTitle.Suffix", group_title_suffix);
|
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
|
||||||
|
|
||||||
private final Dominion _plugin;
|
private final Dominion _plugin;
|
||||||
private FileConfiguration _file;
|
private FileConfiguration _file;
|
||||||
private Boolean _debug;
|
private Boolean _debug;
|
||||||
private Boolean _timer;
|
|
||||||
|
|
||||||
private String _db_type;
|
private String _db_type;
|
||||||
private String _db_host;
|
private String _db_host;
|
||||||
@ -528,12 +417,19 @@ public class ConfigManager {
|
|||||||
|
|
||||||
private Integer _auto_create_radius;
|
private Integer _auto_create_radius;
|
||||||
|
|
||||||
|
private Integer _limit_size_x;
|
||||||
|
private Integer _limit_size_y;
|
||||||
|
private Integer _limit_size_z;
|
||||||
private Boolean _limit_op_bypass;
|
private Boolean _limit_op_bypass;
|
||||||
|
|
||||||
private Boolean _blue_map;
|
private Boolean _blue_map;
|
||||||
private Boolean _dynmap;
|
|
||||||
private Integer _auto_clean_after_days;
|
private Integer _auto_clean_after_days;
|
||||||
|
private Integer _limit_min_y;
|
||||||
|
private Integer _limit_max_y;
|
||||||
|
private Integer _limit_amount;
|
||||||
|
private Integer _limit_depth;
|
||||||
|
private Boolean _limit_vert;
|
||||||
|
private List<String> _world_black_list;
|
||||||
private Boolean _check_update;
|
private Boolean _check_update;
|
||||||
|
|
||||||
private Boolean _tp_enable;
|
private Boolean _tp_enable;
|
||||||
@ -542,29 +438,9 @@ public class ConfigManager {
|
|||||||
private String _tool;
|
private String _tool;
|
||||||
|
|
||||||
private Boolean _economy_enable;
|
private Boolean _economy_enable;
|
||||||
|
private Float _economy_price;
|
||||||
|
private Boolean _economy_only_xz;
|
||||||
|
private Float _economy_refund;
|
||||||
private List<String> _fly_permission_nodes;
|
private List<String> _fly_permission_nodes;
|
||||||
private Boolean _residence_migration;
|
private Boolean _residence_migration;
|
||||||
private Integer _spawn_protection;
|
|
||||||
|
|
||||||
private Boolean _group_title_enable;
|
|
||||||
private String _group_title_prefix;
|
|
||||||
private String _group_title_suffix;
|
|
||||||
|
|
||||||
private final Map<String, GroupLimit> limits = new HashMap<>();
|
|
||||||
|
|
||||||
private String getPlayerGroup(@Nullable Player player) {
|
|
||||||
if (player == null) {
|
|
||||||
return "default";
|
|
||||||
}
|
|
||||||
for (String group : limits.keySet()) {
|
|
||||||
if (group.equals("default")) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (player.hasPermission("group." + group)) {
|
|
||||||
return group;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return "default";
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -6,11 +6,8 @@ import cn.lunadeer.minecraftpluginutils.databse.*;
|
|||||||
import cn.lunadeer.minecraftpluginutils.databse.syntax.AddColumn;
|
import cn.lunadeer.minecraftpluginutils.databse.syntax.AddColumn;
|
||||||
import cn.lunadeer.minecraftpluginutils.databse.syntax.CreateTable;
|
import cn.lunadeer.minecraftpluginutils.databse.syntax.CreateTable;
|
||||||
import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
|
import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
|
||||||
import cn.lunadeer.minecraftpluginutils.databse.syntax.RemoveColumn;
|
|
||||||
import org.bukkit.World;
|
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class DatabaseTables {
|
public class DatabaseTables {
|
||||||
public static void migrate() {
|
public static void migrate() {
|
||||||
@ -236,28 +233,24 @@ public class DatabaseTables {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2.1.0-beta add group name colored
|
// global teleport
|
||||||
if (!Common.IsFieldExist("dominion_group", "name_colored")) {
|
TableColumn server_info_id = new TableColumn("id", FieldType.INT, true, true, true, true, 0);
|
||||||
TableColumn dominion_group_name_colored = new TableColumn("name_colored", FieldType.STRING, false, false, true, false, "'未命名'");
|
TableColumn server_info_name = new TableColumn("name", FieldType.STRING, false, false, true, false, "'server'");
|
||||||
new AddColumn(dominion_group_name_colored).table("dominion_group").ifNotExists().execute();
|
CreateTable server_info = new CreateTable().ifNotExists();
|
||||||
String copy_sql = "UPDATE dominion_group SET name_colored = name;";
|
server_info.table("server_info")
|
||||||
DatabaseManager.instance.query(copy_sql);
|
.field(server_info_id)
|
||||||
|
.field(server_info_name);
|
||||||
|
server_info.execute();
|
||||||
|
new GlobalTeleport(Dominion.instance); // init server info
|
||||||
|
TableColumn server_id = new TableColumn("server_id", FieldType.INT, false, false, true, false, GlobalTeleport.instance.getThisServerId());
|
||||||
|
new AddColumn(server_id).table("dominion").ifNotExists().execute();
|
||||||
|
|
||||||
TableColumn player_name_using_group_title_id = new TableColumn("using_group_title_id", FieldType.INT, false, false, true, false, -1);
|
TableColumn bc_tp_cache_player_uuid = new TableColumn("player_uuid", FieldType.STRING, false, false, true, true, "''");
|
||||||
new AddColumn(player_name_using_group_title_id).table("player_name").ifNotExists().execute();
|
TableColumn bc_tp_cache_dom_id = new TableColumn("dom_id", FieldType.INT, false, false, true, false, -1);
|
||||||
}
|
CreateTable bc_tp_cache = new CreateTable().ifNotExists();
|
||||||
|
bc_tp_cache.table("bc_tp_cache")
|
||||||
// 2.3.0 change world name to world uid
|
.field(bc_tp_cache_player_uuid)
|
||||||
if (!Common.IsFieldExist("dominion", "world_uid")) {
|
.field(bc_tp_cache_dom_id);
|
||||||
TableColumn dominion_world_uid = new TableColumn("world_uid", FieldType.STRING, false, false, true, false, "'00000000-0000-0000-0000-000000000000'");
|
bc_tp_cache.execute();
|
||||||
new AddColumn(dominion_world_uid).table("dominion").ifNotExists().execute();
|
|
||||||
List<World> worlds = Dominion.instance.getServer().getWorlds();
|
|
||||||
for (World world : worlds) {
|
|
||||||
String sql = String.format("UPDATE dominion SET world_uid = '%s' WHERE world = '%s';", world.getUID().toString(), world.getName());
|
|
||||||
DatabaseManager.instance.query(sql);
|
|
||||||
}
|
|
||||||
DatabaseManager.instance.query("UPDATE dominion SET world_uid = '00000000-0000-0000-0000-000000000000' WHERE world = 'all';");
|
|
||||||
new RemoveColumn("world").table("dominion").IfExists().execute();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
158
src/main/java/cn/lunadeer/dominion/managers/GlobalTeleport.java
Normal file
158
src/main/java/cn/lunadeer/dominion/managers/GlobalTeleport.java
Normal file
@ -0,0 +1,158 @@
|
|||||||
|
package cn.lunadeer.dominion.managers;
|
||||||
|
|
||||||
|
import cn.lunadeer.dominion.Dominion;
|
||||||
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
|
import cn.lunadeer.dominion.dtos.ServerInfoDTO;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.Teleport;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.databse.DatabaseManager;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.databse.Field;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.databse.syntax.InsertRow;
|
||||||
|
import com.google.common.io.ByteArrayDataInput;
|
||||||
|
import com.google.common.io.ByteArrayDataOutput;
|
||||||
|
import com.google.common.io.ByteStreams;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
import org.bukkit.plugin.messaging.PluginMessageListener;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static cn.lunadeer.dominion.DominionNode.isInDominion;
|
||||||
|
|
||||||
|
public class GlobalTeleport implements PluginMessageListener, Listener {
|
||||||
|
|
||||||
|
public static GlobalTeleport instance;
|
||||||
|
|
||||||
|
private final JavaPlugin plugin;
|
||||||
|
private final ServerInfoDTO thisServerInfo;
|
||||||
|
private final Map<Integer, String> allServerInfo;
|
||||||
|
|
||||||
|
public GlobalTeleport(JavaPlugin plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
File infoFile = new File(plugin.getDataFolder(), "server_info.json");
|
||||||
|
this.plugin.getServer().getMessenger().registerOutgoingPluginChannel(this.plugin, "BungeeCord");
|
||||||
|
this.plugin.getServer().getMessenger().registerIncomingPluginChannel(this.plugin, "BungeeCord", this);
|
||||||
|
this.plugin.getServer().getPluginManager().registerEvents(this, this.plugin);
|
||||||
|
instance = this;
|
||||||
|
|
||||||
|
if (!infoFile.exists()) {
|
||||||
|
thisServerInfo = ServerInfoDTO.initServerInfo(plugin, infoFile);
|
||||||
|
} else {
|
||||||
|
thisServerInfo = ServerInfoDTO.updateServerInfo(plugin, infoFile);
|
||||||
|
}
|
||||||
|
allServerInfo = ServerInfoDTO.getAllServerInfo();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getThisServerName() {
|
||||||
|
return thisServerInfo.getName();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getThisServerId() {
|
||||||
|
return thisServerInfo.getId();
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getServerName(int id) {
|
||||||
|
return allServerInfo.get(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Map<Integer, String> getAllServerInfo() {
|
||||||
|
return allServerInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A method that will be thrown when a PluginMessageSource sends a plugin
|
||||||
|
* message on a registered channel.
|
||||||
|
*
|
||||||
|
* @param channel Channel that the message was sent through.
|
||||||
|
* @param player Source of the message.
|
||||||
|
* @param message The raw message that was sent.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void onPluginMessageReceived(@NotNull String channel, @NotNull Player player, @NotNull byte[] message) {
|
||||||
|
if (!channel.equals("BungeeCord")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ByteArrayDataInput in = ByteStreams.newDataInput(message);
|
||||||
|
String subChannel = in.readUTF();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void teleportToServer(Player player, DominionDTO dominionDTO) {
|
||||||
|
Field player_uuid = new Field("player_uuid", player.getUniqueId().toString());
|
||||||
|
Field dom_id = new Field("dom_id", dominionDTO.getId());
|
||||||
|
InsertRow addCache = new InsertRow();
|
||||||
|
addCache.field(player_uuid)
|
||||||
|
.field(dom_id)
|
||||||
|
.onConflictOverwrite(player_uuid)
|
||||||
|
.table("bc_tp_cache");
|
||||||
|
addCache.execute();
|
||||||
|
ByteArrayDataOutput out = ByteStreams.newDataOutput();
|
||||||
|
out.writeUTF("Connect");
|
||||||
|
out.writeUTF(dominionDTO.getServerName());
|
||||||
|
player.sendPluginMessage(plugin, "BungeeCord", out.toByteArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onJoin(PlayerJoinEvent event) {
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
String sql = "SELECT dom_id FROM bc_tp_cache WHERE player_uuid = ?";
|
||||||
|
int dominionId;
|
||||||
|
try (ResultSet res = DatabaseManager.instance.query(sql, player.getUniqueId().toString())) {
|
||||||
|
if (res.next()) {
|
||||||
|
dominionId = res.getInt("dom_id");
|
||||||
|
} else {
|
||||||
|
XLogger.debug("玩家 %s 没有传送缓存", player.getName());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
DatabaseManager.handleDatabaseError("获取玩家的传送缓存失败", e, sql);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
DominionDTO dominionDTO = DominionDTO.select(dominionId);
|
||||||
|
if (dominionDTO == null) {
|
||||||
|
Notification.error(player, "无法获取目标领地信息");
|
||||||
|
} else {
|
||||||
|
if (dominionDTO.getServerId() == getThisServerId()) {
|
||||||
|
doTp(player, dominionDTO);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sql = "DELETE FROM bc_tp_cache WHERE player_uuid = ?";
|
||||||
|
DatabaseManager.instance.query(sql, player.getUniqueId().toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void doTp(@NotNull Player player, @NotNull DominionDTO dominionDTO) {
|
||||||
|
if (dominionDTO.getServerId() != GlobalTeleport.instance.getThisServerId()) {
|
||||||
|
GlobalTeleport.instance.teleportToServer(player, dominionDTO);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Location location = dominionDTO.getTpLocation();
|
||||||
|
int center_x = (dominionDTO.getX1() + dominionDTO.getX2()) / 2;
|
||||||
|
int center_z = (dominionDTO.getZ1() + dominionDTO.getZ2()) / 2;
|
||||||
|
World world = Dominion.instance.getServer().getWorld(dominionDTO.getWorld());
|
||||||
|
if (location == null) {
|
||||||
|
location = new Location(world, center_x, player.getLocation().getY(), center_z);
|
||||||
|
Notification.warn(player, "领地 %s 没有设置传送点,将尝试传送到中心点", dominionDTO.getName());
|
||||||
|
} else if (!isInDominion(dominionDTO, location)) {
|
||||||
|
location = new Location(world, center_x, player.getLocation().getY(), center_z);
|
||||||
|
Notification.warn(player, "领地 %s 传送点不在领地内,将尝试传送到中心点", dominionDTO.getName());
|
||||||
|
}
|
||||||
|
if (player.isOnline()) {
|
||||||
|
Teleport.doTeleportSafely(player, location).thenAccept(b -> {
|
||||||
|
if (b) {
|
||||||
|
Notification.info(player, "已将你传送到 " + dominionDTO.getName());
|
||||||
|
} else {
|
||||||
|
Notification.error(player, "传送失败,请重试");
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,7 @@
|
|||||||
package cn.lunadeer.dominion.tuis;
|
package cn.lunadeer.dominion.tuis;
|
||||||
|
|
||||||
|
import cn.lunadeer.dominion.Cache;
|
||||||
import cn.lunadeer.dominion.DominionNode;
|
import cn.lunadeer.dominion.DominionNode;
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
|
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
|
||||||
@ -10,9 +10,9 @@ import org.bukkit.entity.Player;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.getPage;
|
import static cn.lunadeer.dominion.tuis.Apis.getPage;
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.notOp;
|
import static cn.lunadeer.dominion.tuis.Apis.notOp;
|
||||||
import static cn.lunadeer.dominion.tuis.dominion.DominionList.BuildTreeLines;
|
import static cn.lunadeer.dominion.tuis.dominion.DominionList.BuildTreeLines;
|
||||||
|
|
||||||
public class AllDominion {
|
public class AllDominion {
|
||||||
@ -23,7 +23,7 @@ public class AllDominion {
|
|||||||
if (notOp(player)) return;
|
if (notOp(player)) return;
|
||||||
int page = getPage(args, 1);
|
int page = getPage(args, 1);
|
||||||
|
|
||||||
List<DominionNode> allDominions = DominionNode.BuildNodeTree(-1, DominionDTO.selectAll());
|
List<DominionNode> allDominions = Cache.instance.getAllDominionTree();
|
||||||
|
|
||||||
ListView view = ListView.create(10, "/dominion all_dominion");
|
ListView view = ListView.create(10, "/dominion all_dominion");
|
||||||
|
|
@ -1,4 +1,4 @@
|
|||||||
package cn.lunadeer.dominion.utils;
|
package cn.lunadeer.dominion.tuis;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Cache;
|
import cn.lunadeer.dominion.Cache;
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
@ -10,9 +10,9 @@ import cn.lunadeer.minecraftpluginutils.stui.components.Line;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
|
|
||||||
public class TuiUtils {
|
public class Apis {
|
||||||
|
|
||||||
public static int getPage(String[] args, int pos) {
|
public static int getPage(String[] args, int pos) {
|
||||||
int page = 1;
|
int page = 1;
|
@ -9,7 +9,7 @@ import net.kyori.adventure.text.Component;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
|
|
||||||
public class Menu {
|
public class Menu {
|
||||||
public static void show(CommandSender sender, String[] args) {
|
public static void show(CommandSender sender, String[] args) {
|
||||||
@ -30,15 +30,12 @@ public class Menu {
|
|||||||
Line list = Line.create()
|
Line list = Line.create()
|
||||||
.append(Button.create("我的领地").setExecuteCommand("/dominion list").build())
|
.append(Button.create("我的领地").setExecuteCommand("/dominion list").build())
|
||||||
.append("查看我的领地");
|
.append("查看我的领地");
|
||||||
Line title = Line.create()
|
|
||||||
.append(Button.create("称号列表").setExecuteCommand("/dominion title_list").build())
|
|
||||||
.append("查看/使用权限组称号");
|
|
||||||
Line template = Line.create()
|
Line template = Line.create()
|
||||||
.append(Button.create("模板列表").setExecuteCommand("/dominion template list").build())
|
.append(Button.create("模板列表").setExecuteCommand("/dominion template list").build())
|
||||||
.append("成员权限模板列表");
|
.append("成员权限模板列表");
|
||||||
// Line help = Line.create()
|
Line help = Line.create()
|
||||||
// .append(Button.create("指令帮助").setExecuteCommand("/dominion help").build())
|
.append(Button.create("指令帮助").setExecuteCommand("/dominion help").build())
|
||||||
// .append("查看指令帮助");
|
.append("查看指令帮助");
|
||||||
Line link = Line.create()
|
Line link = Line.create()
|
||||||
.append(Button.create("使用文档").setOpenURL("https://ssl.lunadeer.cn:14448/doc/23/").build())
|
.append(Button.create("使用文档").setOpenURL("https://ssl.lunadeer.cn:14448/doc/23/").build())
|
||||||
.append("在浏览器中打开使用文档");
|
.append("在浏览器中打开使用文档");
|
||||||
@ -58,14 +55,13 @@ public class Menu {
|
|||||||
.append(Button.create("重载配置").setExecuteCommand("/dominion reload_config").build())
|
.append(Button.create("重载配置").setExecuteCommand("/dominion reload_config").build())
|
||||||
.append("重载配置文件");
|
.append("重载配置文件");
|
||||||
ListView view = ListView.create(10, "/dominion menu");
|
ListView view = ListView.create(10, "/dominion menu");
|
||||||
view.title("Dominion 领地系统");
|
view.title("Dominion 领地系统")
|
||||||
view.navigator(Line.create().append("主菜单"));
|
.navigator(Line.create().append("主菜单"))
|
||||||
view.add(create);
|
.add(create)
|
||||||
view.add(list);
|
.add(list)
|
||||||
if (Dominion.config.getGroupTitleEnable()) view.add(title);
|
.add(template)
|
||||||
view.add(template);
|
.add(help)
|
||||||
// view.add(help);
|
.add(link);
|
||||||
view.add(link);
|
|
||||||
if (Dominion.config.getResidenceMigration()) {
|
if (Dominion.config.getResidenceMigration()) {
|
||||||
view.add(migrate);
|
view.add(migrate);
|
||||||
}
|
}
|
@ -3,7 +3,6 @@ package cn.lunadeer.dominion.tuis;
|
|||||||
import cn.lunadeer.dominion.Cache;
|
import cn.lunadeer.dominion.Cache;
|
||||||
import cn.lunadeer.dominion.Dominion;
|
import cn.lunadeer.dominion.Dominion;
|
||||||
import cn.lunadeer.dominion.utils.ResMigration;
|
import cn.lunadeer.dominion.utils.ResMigration;
|
||||||
import cn.lunadeer.dominion.utils.TuiUtils;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
||||||
@ -19,7 +18,7 @@ import org.bukkit.entity.Player;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
|
|
||||||
public class MigrateList {
|
public class MigrateList {
|
||||||
|
|
||||||
@ -32,7 +31,7 @@ public class MigrateList {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int page = TuiUtils.getPage(args, 1);
|
int page = Apis.getPage(args, 1);
|
||||||
|
|
||||||
ListView view = ListView.create(10, "/dominion migrate_list");
|
ListView view = ListView.create(10, "/dominion migrate_list");
|
||||||
|
|
@ -11,9 +11,9 @@ import net.kyori.adventure.text.format.TextDecoration;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.getPage;
|
import static cn.lunadeer.dominion.tuis.Apis.getPage;
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.notOp;
|
import static cn.lunadeer.dominion.tuis.Apis.notOp;
|
||||||
|
|
||||||
public class SysConfig {
|
public class SysConfig {
|
||||||
public static void show(CommandSender sender, String[] args) {
|
public static void show(CommandSender sender, String[] args) {
|
||||||
@ -28,51 +28,40 @@ public class SysConfig {
|
|||||||
Line limitSize = Line.create()
|
Line limitSize = Line.create()
|
||||||
.append(Component.text("领地尺寸限制"));
|
.append(Component.text("领地尺寸限制"));
|
||||||
view.add(limitSize);
|
view.add(limitSize);
|
||||||
|
|
||||||
Line spawnProtect = Line.create()
|
|
||||||
.append(Component.text(" 出生点保护范围"));
|
|
||||||
if (Dominion.config.getSpawnProtection() == -1) {
|
|
||||||
spawnProtect.append(Component.text("无限制")).append(Button.create("设置数值").setExecuteCommand("/dominion set_config spawn_protection 10 " + page).build());
|
|
||||||
} else {
|
|
||||||
spawnProtect.append(NumChanger.create(Dominion.config.getSpawnProtection(), "/dominion set_config spawn_protection").setPageNumber(page).build());
|
|
||||||
spawnProtect.append(Button.create("设置无限制").setExecuteCommand("/dominion set_config spawn_protection -1 " + page).build());
|
|
||||||
}
|
|
||||||
view.add(spawnProtect);
|
|
||||||
|
|
||||||
Line limitSizeX = Line.create()
|
Line limitSizeX = Line.create()
|
||||||
.append(Component.text(" X轴(东西)"));
|
.append(Component.text(" X轴(东西)"));
|
||||||
if (Dominion.config.getLimitSizeX(null) == -1) {
|
if (Dominion.config.getLimitSizeX() == -1) {
|
||||||
limitSizeX.append(Component.text("无限制")).append(Button.create("设置数值").setExecuteCommand("/dominion set_config limit_size_x 64 " + page).build());
|
limitSizeX.append(Component.text("无限制")).append(Button.create("设置数值").setExecuteCommand("/dominion set_config limit_size_x 64 " + page).build());
|
||||||
} else {
|
} else {
|
||||||
limitSizeX.append(NumChanger.create(Dominion.config.getLimitSizeX(null), "/dominion set_config limit_size_x").setPageNumber(page).build());
|
limitSizeX.append(NumChanger.create(Dominion.config.getLimitSizeX(), "/dominion set_config limit_size_x").setPageNumber(page).build());
|
||||||
limitSizeX.append(Button.create("设置无限制").setExecuteCommand("/dominion set_config limit_size_x -1 " + page).build());
|
limitSizeX.append(Button.create("设置无限制").setExecuteCommand("/dominion set_config limit_size_x -1 " + page).build());
|
||||||
}
|
}
|
||||||
view.add(limitSizeX);
|
view.add(limitSizeX);
|
||||||
Line limitSizeZ = Line.create()
|
Line limitSizeZ = Line.create()
|
||||||
.append(Component.text(" Z轴(南北)"));
|
.append(Component.text(" Z轴(南北)"));
|
||||||
if (Dominion.config.getLimitSizeZ(null) == -1) {
|
if (Dominion.config.getLimitSizeZ() == -1) {
|
||||||
limitSizeZ.append(Component.text("无限制")).append(Button.create("设置数值").setExecuteCommand("/dominion set_config limit_size_z 64 " + page).build());
|
limitSizeZ.append(Component.text("无限制")).append(Button.create("设置数值").setExecuteCommand("/dominion set_config limit_size_z 64 " + page).build());
|
||||||
} else {
|
} else {
|
||||||
limitSizeZ.append(NumChanger.create(Dominion.config.getLimitSizeZ(null), "/dominion set_config limit_size_z").setPageNumber(page).build());
|
limitSizeZ.append(NumChanger.create(Dominion.config.getLimitSizeZ(), "/dominion set_config limit_size_z").setPageNumber(page).build());
|
||||||
limitSizeZ.append(Button.create("设置无限制").setExecuteCommand("/dominion set_config limit_size_z -1 " + page).build());
|
limitSizeZ.append(Button.create("设置无限制").setExecuteCommand("/dominion set_config limit_size_z -1 " + page).build());
|
||||||
}
|
}
|
||||||
view.add(limitSizeZ);
|
view.add(limitSizeZ);
|
||||||
Line limitSizeY = Line.create()
|
Line limitSizeY = Line.create()
|
||||||
.append(Component.text(" Y轴(垂直)"));
|
.append(Component.text(" Y轴(垂直)"));
|
||||||
if (!Dominion.config.getLimitVert(null)) {
|
if (!Dominion.config.getLimitVert()) {
|
||||||
if (Dominion.config.getLimitSizeY(null) == -1) {
|
if (Dominion.config.getLimitSizeY() == -1) {
|
||||||
limitSizeY.append(Component.text("无限制")).append(Button.create("设置数值").setExecuteCommand("/dominion set_config limit_size_y 64 " + page).build());
|
limitSizeY.append(Component.text("无限制")).append(Button.create("设置数值").setExecuteCommand("/dominion set_config limit_size_y 64 " + page).build());
|
||||||
} else {
|
} else {
|
||||||
limitSizeY.append(NumChanger.create(Dominion.config.getLimitSizeY(null), "/dominion set_config limit_size_y").setPageNumber(page).build());
|
limitSizeY.append(NumChanger.create(Dominion.config.getLimitSizeY(), "/dominion set_config limit_size_y").setPageNumber(page).build());
|
||||||
limitSizeY.append(Button.create("设置无限制").setExecuteCommand("/dominion set_config limit_size_y -1 " + page).build());
|
limitSizeY.append(Button.create("设置无限制").setExecuteCommand("/dominion set_config limit_size_y -1 " + page).build());
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
limitSizeY.append(Component.text(Dominion.config.getLimitSizeY(null))
|
limitSizeY.append(Component.text(Dominion.config.getLimitSizeY())
|
||||||
.style(Style.style(TextDecoration.STRIKETHROUGH))
|
.style(Style.style(TextDecoration.STRIKETHROUGH))
|
||||||
.hoverEvent(Component.text("因为垂直自动延伸已开启,此设置不可手动修改")));
|
.hoverEvent(Component.text("因为垂直自动延伸已开启,此设置不可手动修改")));
|
||||||
}
|
}
|
||||||
view.add(limitSizeY);
|
view.add(limitSizeY);
|
||||||
if (Dominion.config.getLimitVert(null)) {
|
if (Dominion.config.getLimitVert()) {
|
||||||
view.add(Line.create()
|
view.add(Line.create()
|
||||||
.append("垂直自动延伸")
|
.append("垂直自动延伸")
|
||||||
.append(Button.createGreen("☑").setExecuteCommand("/dominion set_config limit_vert false " + page).build()));
|
.append(Button.createGreen("☑").setExecuteCommand("/dominion set_config limit_vert false " + page).build()));
|
||||||
@ -83,27 +72,27 @@ public class SysConfig {
|
|||||||
}
|
}
|
||||||
Line limitMaxY = Line.create()
|
Line limitMaxY = Line.create()
|
||||||
.append(Component.text("最高Y坐标限制"));
|
.append(Component.text("最高Y坐标限制"));
|
||||||
limitMaxY.append(NumChanger.create(Dominion.config.getLimitMaxY(null), "/dominion set_config limit_max_y").setPageNumber(page).build());
|
limitMaxY.append(NumChanger.create(Dominion.config.getLimitMaxY(), "/dominion set_config limit_max_y").setPageNumber(page).build());
|
||||||
view.add(limitMaxY);
|
view.add(limitMaxY);
|
||||||
Line limitMinY = Line.create()
|
Line limitMinY = Line.create()
|
||||||
.append(Component.text("最低Y坐标限制"));
|
.append(Component.text("最低Y坐标限制"));
|
||||||
limitMinY.append(NumChanger.create(Dominion.config.getLimitMinY(null), "/dominion set_config limit_min_y").setPageNumber(page).build());
|
limitMinY.append(NumChanger.create(Dominion.config.getLimitMinY(), "/dominion set_config limit_min_y").setPageNumber(page).build());
|
||||||
view.add(limitMinY);
|
view.add(limitMinY);
|
||||||
Line limitAmount = Line.create()
|
Line limitAmount = Line.create()
|
||||||
.append(Component.text("每个玩家领地数量限制"));
|
.append(Component.text("每个玩家领地数量限制"));
|
||||||
if (Dominion.config.getLimitAmount(null) == -1) {
|
if (Dominion.config.getLimitAmount() == -1) {
|
||||||
limitAmount.append(Component.text("无限制")).append(Button.create("设置数值").setExecuteCommand("/dominion set_config limit_amount 3 " + page).build());
|
limitAmount.append(Component.text("无限制")).append(Button.create("设置数值").setExecuteCommand("/dominion set_config limit_amount 3 " + page).build());
|
||||||
} else {
|
} else {
|
||||||
limitAmount.append(NumChanger.create(Dominion.config.getLimitAmount(null), "/dominion set_config limit_amount").setPageNumber(page).build());
|
limitAmount.append(NumChanger.create(Dominion.config.getLimitAmount(), "/dominion set_config limit_amount").setPageNumber(page).build());
|
||||||
limitAmount.append(Button.create("设置无限制").setExecuteCommand("/dominion set_config limit_amount -1 " + page).build());
|
limitAmount.append(Button.create("设置无限制").setExecuteCommand("/dominion set_config limit_amount -1 " + page).build());
|
||||||
}
|
}
|
||||||
view.add(limitAmount);
|
view.add(limitAmount);
|
||||||
Line limitDepth = Line.create()
|
Line limitDepth = Line.create()
|
||||||
.append(Component.text("领地深度限制"));
|
.append(Component.text("领地深度限制"));
|
||||||
if (Dominion.config.getLimitDepth(null) == -1) {
|
if (Dominion.config.getLimitDepth() == -1) {
|
||||||
limitDepth.append(Component.text("无限制")).append(Button.create("设置数值").setExecuteCommand("/dominion set_config limit_depth 64 " + page).build());
|
limitDepth.append(Component.text("无限制")).append(Button.create("设置数值").setExecuteCommand("/dominion set_config limit_depth 64 " + page).build());
|
||||||
} else {
|
} else {
|
||||||
limitDepth.append(NumChanger.create(Dominion.config.getLimitDepth(null), "/dominion set_config limit_depth").setPageNumber(page).build());
|
limitDepth.append(NumChanger.create(Dominion.config.getLimitDepth(), "/dominion set_config limit_depth").setPageNumber(page).build());
|
||||||
limitDepth.append(Button.create("设置无限制").setExecuteCommand("/dominion set_config limit_depth -1 " + page).build());
|
limitDepth.append(Button.create("设置无限制").setExecuteCommand("/dominion set_config limit_depth -1 " + page).build());
|
||||||
}
|
}
|
||||||
view.add(limitDepth);
|
view.add(limitDepth);
|
||||||
@ -146,9 +135,9 @@ public class SysConfig {
|
|||||||
view.add(economy);
|
view.add(economy);
|
||||||
Line price = Line.create()
|
Line price = Line.create()
|
||||||
.append(Component.text(" 每方块单价"))
|
.append(Component.text(" 每方块单价"))
|
||||||
.append(NumChanger.create(Dominion.config.getEconomyPrice(null), "/dominion set_config economy_price", 0.1).setPageNumber(page).build());
|
.append(NumChanger.create(Dominion.config.getEconomyPrice(), "/dominion set_config economy_price", 0.1).setPageNumber(page).build());
|
||||||
view.add(price);
|
view.add(price);
|
||||||
if (Dominion.config.getEconomyOnlyXZ(null)) {
|
if (Dominion.config.getEconomyOnlyXZ()) {
|
||||||
view.add(Line.create()
|
view.add(Line.create()
|
||||||
.append(" 仅计价平面积")
|
.append(" 仅计价平面积")
|
||||||
.append(Button.createGreen("☑").setExecuteCommand("/dominion set_config economy_only_xz false " + page).build()));
|
.append(Button.createGreen("☑").setExecuteCommand("/dominion set_config economy_only_xz false " + page).build()));
|
||||||
@ -159,7 +148,7 @@ public class SysConfig {
|
|||||||
}
|
}
|
||||||
Line refund = Line.create()
|
Line refund = Line.create()
|
||||||
.append(Component.text(" 删除/缩小领地退还比例"))
|
.append(Component.text(" 删除/缩小领地退还比例"))
|
||||||
.append(NumChanger.create(Dominion.config.getEconomyRefund(null), "/dominion set_config economy_refund", 0.01).setPageNumber(page).build());
|
.append(NumChanger.create(Dominion.config.getEconomyRefund(), "/dominion set_config economy_refund", 0.01).setPageNumber(page).build());
|
||||||
view.add(refund);
|
view.add(refund);
|
||||||
}
|
}
|
||||||
if (Dominion.config.getResidenceMigration()) {
|
if (Dominion.config.getResidenceMigration()) {
|
@ -1,7 +1,9 @@
|
|||||||
package cn.lunadeer.dominion.tuis.dominion;
|
package cn.lunadeer.dominion.tuis.dominion;
|
||||||
|
|
||||||
|
import cn.lunadeer.dominion.Cache;
|
||||||
import cn.lunadeer.dominion.DominionNode;
|
import cn.lunadeer.dominion.DominionNode;
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
|
import cn.lunadeer.dominion.managers.GlobalTeleport;
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.ViewStyles;
|
import cn.lunadeer.minecraftpluginutils.stui.ViewStyles;
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
||||||
@ -14,9 +16,9 @@ import org.bukkit.entity.Player;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
import static cn.lunadeer.dominion.commands.Helper.playerAdminDominions;
|
import static cn.lunadeer.dominion.commands.Helper.playerAdminDominions;
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.getPage;
|
import static cn.lunadeer.dominion.tuis.Apis.getPage;
|
||||||
|
|
||||||
public class DominionList {
|
public class DominionList {
|
||||||
public static void show(CommandSender sender, String[] args) {
|
public static void show(CommandSender sender, String[] args) {
|
||||||
@ -27,9 +29,9 @@ public class DominionList {
|
|||||||
|
|
||||||
view.title("我的领地列表");
|
view.title("我的领地列表");
|
||||||
view.navigator(Line.create().append(Button.create("主菜单").setExecuteCommand("/dominion menu").build()).append("我的领地"));
|
view.navigator(Line.create().append(Button.create("主菜单").setExecuteCommand("/dominion menu").build()).append("我的领地"));
|
||||||
view.addLines(BuildTreeLines(DominionNode.BuildNodeTree(-1, DominionDTO.selectByOwner(player.getUniqueId())), 0));
|
view.addLines(BuildTreeLines(Cache.instance.getDominionTreeByPlayer(player.getName()), 0));
|
||||||
List<String> admin_dominions = playerAdminDominions(sender);
|
List<String> admin_dominions = playerAdminDominions(sender);
|
||||||
if (!admin_dominions.isEmpty()) {
|
if (admin_dominions.size() != 0) {
|
||||||
view.add(Line.create().append(""));
|
view.add(Line.create().append(""));
|
||||||
view.add(Line.create().append(Component.text("--- 以下为你拥有管理员权限的领地 ---", ViewStyles.main_color)));
|
view.add(Line.create().append(Component.text("--- 以下为你拥有管理员权限的领地 ---", ViewStyles.main_color)));
|
||||||
}
|
}
|
||||||
@ -37,13 +39,29 @@ public class DominionList {
|
|||||||
TextComponent manage = Button.createGreen("管理").setExecuteCommand("/dominion manage " + dominion).build();
|
TextComponent manage = Button.createGreen("管理").setExecuteCommand("/dominion manage " + dominion).build();
|
||||||
view.add(Line.create().append(manage).append(dominion));
|
view.add(Line.create().append(manage).append(dominion));
|
||||||
}
|
}
|
||||||
|
for (Integer serverId : GlobalTeleport.instance.getAllServerInfo().keySet()) {
|
||||||
|
if (serverId == GlobalTeleport.instance.getThisServerId()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
List<String> names = DominionDTO.selectAllNamesOfServer(serverId, player.getUniqueId());
|
||||||
|
if (names.size() == 0) continue;
|
||||||
|
view.add(Line.create().append(""));
|
||||||
|
view.add(Line.create().append(Component.text("--- 以下为你在 " + GlobalTeleport.instance.getAllServerInfo().get(serverId) + " 的领地 ---", ViewStyles.main_color)));
|
||||||
|
for (String name : names) {
|
||||||
|
TextComponent manage = Button.createGreen("管理").setExecuteCommand("/dominion manage " + name).build();
|
||||||
|
TextComponent delete = Button.createRed("删除").setExecuteCommand("/dominion delete " + name).build();
|
||||||
|
view.add(Line.create().append(delete).append(manage).append(name));
|
||||||
|
}
|
||||||
|
}
|
||||||
view.showOn(player, page);
|
view.showOn(player, page);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Line> BuildTreeLines(List<DominionNode> dominionTree, Integer depth) {
|
public static List<Line> BuildTreeLines(List<DominionNode> dominionTree, Integer depth) {
|
||||||
List<Line> lines = new ArrayList<>();
|
List<Line> lines = new ArrayList<>();
|
||||||
StringBuilder prefix = new StringBuilder();
|
StringBuilder prefix = new StringBuilder();
|
||||||
prefix.append(" | ".repeat(Math.max(0, depth)));
|
for (int i = 0; i < depth; i++) {
|
||||||
|
prefix.append(" | ");
|
||||||
|
}
|
||||||
for (DominionNode node : dominionTree) {
|
for (DominionNode node : dominionTree) {
|
||||||
TextComponent manage = Button.createGreen("管理").setExecuteCommand("/dominion manage " + node.getDominion().getName()).build();
|
TextComponent manage = Button.createGreen("管理").setExecuteCommand("/dominion manage " + node.getDominion().getName()).build();
|
||||||
TextComponent delete = Button.createRed("删除").setExecuteCommand("/dominion delete " + node.getDominion().getName()).build();
|
TextComponent delete = Button.createRed("删除").setExecuteCommand("/dominion delete " + node.getDominion().getName()).build();
|
@ -11,8 +11,8 @@ import net.kyori.adventure.text.format.TextColor;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.*;
|
import static cn.lunadeer.dominion.tuis.Apis.*;
|
||||||
|
|
||||||
public class DominionManage {
|
public class DominionManage {
|
||||||
public static void show(CommandSender sender, String[] args) {
|
public static void show(CommandSender sender, String[] args) {
|
@ -10,8 +10,8 @@ import net.kyori.adventure.text.Component;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.getPage;
|
import static cn.lunadeer.dominion.tuis.Apis.getPage;
|
||||||
|
|
||||||
public class EnvSetting {
|
public class EnvSetting {
|
||||||
|
|
@ -10,8 +10,8 @@ import net.kyori.adventure.text.Component;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.getPage;
|
import static cn.lunadeer.dominion.tuis.Apis.getPage;
|
||||||
|
|
||||||
public class GuestSetting {
|
public class GuestSetting {
|
||||||
|
|
@ -1,18 +1,19 @@
|
|||||||
package cn.lunadeer.dominion.tuis.dominion.manage;
|
package cn.lunadeer.dominion.tuis.dominion.manage;
|
||||||
|
|
||||||
|
import cn.lunadeer.dominion.Dominion;
|
||||||
import cn.lunadeer.dominion.controllers.PlayerController;
|
import cn.lunadeer.dominion.controllers.PlayerController;
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||||
import cn.lunadeer.dominion.utils.Particle;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.ParticleRender;
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.View;
|
import cn.lunadeer.minecraftpluginutils.stui.View;
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
|
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.getDominionNameArg_1;
|
import static cn.lunadeer.dominion.tuis.Apis.getDominionNameArg_1;
|
||||||
|
|
||||||
public class SizeInfo {
|
public class SizeInfo {
|
||||||
public static void show(CommandSender sender, String[] args) {
|
public static void show(CommandSender sender, String[] args) {
|
||||||
@ -48,6 +49,8 @@ public class SizeInfo {
|
|||||||
.append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build())
|
.append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build())
|
||||||
.append(Button.create("访客权限").setExecuteCommand("/dominion guest_setting " + dominion.getName()).build()))
|
.append(Button.create("访客权限").setExecuteCommand("/dominion guest_setting " + dominion.getName()).build()))
|
||||||
.showOn(player);
|
.showOn(player);
|
||||||
Particle.showBorder(player, dominion);
|
ParticleRender.showBoxFace(player,
|
||||||
|
dominion.getLocation1(),
|
||||||
|
dominion.getLocation2());
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -4,7 +4,7 @@ import cn.lunadeer.dominion.dtos.DominionDTO;
|
|||||||
import cn.lunadeer.dominion.dtos.GroupDTO;
|
import cn.lunadeer.dominion.dtos.GroupDTO;
|
||||||
import cn.lunadeer.dominion.dtos.MemberDTO;
|
import cn.lunadeer.dominion.dtos.MemberDTO;
|
||||||
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||||
import cn.lunadeer.dominion.utils.TuiUtils;
|
import cn.lunadeer.dominion.tuis.Apis;
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
||||||
@ -16,8 +16,8 @@ import org.bukkit.entity.Player;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.noAuthToManage;
|
import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage;
|
||||||
|
|
||||||
public class GroupList {
|
public class GroupList {
|
||||||
|
|
||||||
@ -42,7 +42,7 @@ public class GroupList {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (noAuthToManage(player, dominion)) return;
|
if (noAuthToManage(player, dominion)) return;
|
||||||
int page = TuiUtils.getPage(args, 3);
|
int page = Apis.getPage(args, 3);
|
||||||
List<GroupDTO> groups = GroupDTO.selectByDominionId(dominion.getId());
|
List<GroupDTO> groups = GroupDTO.selectByDominionId(dominion.getId());
|
||||||
ListView view = ListView.create(10, "/dominion group list " + dominion.getName());
|
ListView view = ListView.create(10, "/dominion group list " + dominion.getName());
|
||||||
view.title("权限组列表");
|
view.title("权限组列表");
|
||||||
@ -70,7 +70,7 @@ public class GroupList {
|
|||||||
Button add = Button.createGreen("+")
|
Button add = Button.createGreen("+")
|
||||||
.setHoverText("添加成员到权限组 " + group.getName())
|
.setHoverText("添加成员到权限组 " + group.getName())
|
||||||
.setExecuteCommand("/dominion group select_member " + dominion.getName() + " " + group.getName() + " " + page);
|
.setExecuteCommand("/dominion group select_member " + dominion.getName() + " " + group.getName() + " " + page);
|
||||||
line.append(del.build()).append(edit.build()).append(group.getNameColoredComponent()).append(add.build());
|
line.append(del.build()).append(edit.build()).append(group.getName()).append(add.build());
|
||||||
view.add(line);
|
view.add(line);
|
||||||
List<MemberDTO> players = MemberDTO.selectByGroupId(group.getId());
|
List<MemberDTO> players = MemberDTO.selectByGroupId(group.getId());
|
||||||
XLogger.debug("players: " + players.size());
|
XLogger.debug("players: " + players.size());
|
@ -3,7 +3,7 @@ package cn.lunadeer.dominion.tuis.dominion.manage.group;
|
|||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
import cn.lunadeer.dominion.dtos.Flag;
|
import cn.lunadeer.dominion.dtos.Flag;
|
||||||
import cn.lunadeer.dominion.dtos.GroupDTO;
|
import cn.lunadeer.dominion.dtos.GroupDTO;
|
||||||
import cn.lunadeer.dominion.utils.TuiUtils;
|
import cn.lunadeer.dominion.tuis.Apis;
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
||||||
@ -12,8 +12,8 @@ import net.kyori.adventure.text.Component;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.noAuthToManage;
|
import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage;
|
||||||
|
|
||||||
public class GroupSetting {
|
public class GroupSetting {
|
||||||
public static void show(CommandSender sender, String dominionName, String groupName) {
|
public static void show(CommandSender sender, String dominionName, String groupName) {
|
||||||
@ -37,7 +37,7 @@ public class GroupSetting {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (noAuthToManage(player, dominion)) return;
|
if (noAuthToManage(player, dominion)) return;
|
||||||
int page = TuiUtils.getPage(args, 4);
|
int page = Apis.getPage(args, 4);
|
||||||
GroupDTO group = GroupDTO.select(dominion.getId(), args[3]);
|
GroupDTO group = GroupDTO.select(dominion.getId(), args[3]);
|
||||||
if (group == null) {
|
if (group == null) {
|
||||||
Notification.error(sender, "权限组 %s 不存在", args[3]);
|
Notification.error(sender, "权限组 %s 不存在", args[3]);
|
||||||
@ -45,7 +45,7 @@ public class GroupSetting {
|
|||||||
}
|
}
|
||||||
|
|
||||||
ListView view = ListView.create(10, "/dominion group setting " + dominion.getName() + " " + group.getName());
|
ListView view = ListView.create(10, "/dominion group setting " + dominion.getName() + " " + group.getName());
|
||||||
view.title(Component.text("权限组 ").append(group.getNameColoredComponent()).append(Component.text(" 管理")));
|
view.title("权限组 " + group.getName() + " 管理");
|
||||||
view.navigator(
|
view.navigator(
|
||||||
Line.create()
|
Line.create()
|
||||||
.append(Button.create("主菜单").setExecuteCommand("/dominion menu").build())
|
.append(Button.create("主菜单").setExecuteCommand("/dominion menu").build())
|
@ -13,9 +13,9 @@ import org.bukkit.entity.Player;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.getPage;
|
import static cn.lunadeer.dominion.tuis.Apis.getPage;
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.noAuthToManage;
|
import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage;
|
||||||
|
|
||||||
public class SelectMember {
|
public class SelectMember {
|
||||||
public static void show(CommandSender sender, String[] args) {
|
public static void show(CommandSender sender, String[] args) {
|
@ -15,10 +15,10 @@ import org.bukkit.entity.Player;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.CommandParser;
|
import static cn.lunadeer.dominion.commands.Apis.CommandParser;
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.getPage;
|
import static cn.lunadeer.dominion.tuis.Apis.getPage;
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.noAuthToManage;
|
import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage;
|
||||||
|
|
||||||
public class MemberList {
|
public class MemberList {
|
||||||
|
|
@ -12,9 +12,9 @@ import net.kyori.adventure.text.Component;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.getPage;
|
import static cn.lunadeer.dominion.tuis.Apis.getPage;
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.noAuthToManage;
|
import static cn.lunadeer.dominion.tuis.Apis.noAuthToManage;
|
||||||
|
|
||||||
public class MemberSetting {
|
public class MemberSetting {
|
||||||
public static void show(CommandSender sender, String dominionName, String playerName, Integer page) {
|
public static void show(CommandSender sender, String dominionName, String playerName, Integer page) {
|
@ -11,9 +11,9 @@ import org.bukkit.entity.Player;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.CommandParser;
|
import static cn.lunadeer.dominion.commands.Apis.CommandParser;
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.getPage;
|
import static cn.lunadeer.dominion.tuis.Apis.getPage;
|
||||||
|
|
||||||
public class SelectPlayer {
|
public class SelectPlayer {
|
||||||
public static void show(CommandSender sender, String dominionName, Integer page) {
|
public static void show(CommandSender sender, String dominionName, Integer page) {
|
@ -11,9 +11,9 @@ import org.bukkit.entity.Player;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.CommandParser;
|
import static cn.lunadeer.dominion.commands.Apis.CommandParser;
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.getPage;
|
import static cn.lunadeer.dominion.tuis.Apis.getPage;
|
||||||
|
|
||||||
public class SelectTemplate {
|
public class SelectTemplate {
|
||||||
|
|
@ -9,8 +9,8 @@ import org.bukkit.entity.Player;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.getPage;
|
import static cn.lunadeer.dominion.tuis.Apis.getPage;
|
||||||
|
|
||||||
public class TemplateList {
|
public class TemplateList {
|
||||||
|
|
@ -10,8 +10,8 @@ import net.kyori.adventure.text.Component;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.commands.Apis.playerOnly;
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.getPage;
|
import static cn.lunadeer.dominion.tuis.Apis.getPage;
|
||||||
|
|
||||||
public class TemplateSetting {
|
public class TemplateSetting {
|
||||||
|
|
@ -1,12 +1,14 @@
|
|||||||
package cn.lunadeer.dominion.utils;
|
package cn.lunadeer.dominion.utils;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Dominion;
|
import cn.lunadeer.dominion.Dominion;
|
||||||
|
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||||
import cn.lunadeer.dominion.utils.Residence.Message;
|
import cn.lunadeer.dominion.utils.Residence.Message;
|
||||||
import cn.lunadeer.dominion.utils.Residence.Permission;
|
import cn.lunadeer.dominion.utils.Residence.Permission;
|
||||||
import cn.lunadeer.dominion.utils.Residence.Residence;
|
import cn.lunadeer.dominion.utils.Residence.Residence;
|
||||||
import cn.lunadeer.dominion.utils.Residence.SaveFile;
|
import cn.lunadeer.dominion.utils.Residence.SaveFile;
|
||||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import org.yaml.snakeyaml.Yaml;
|
import org.yaml.snakeyaml.Yaml;
|
||||||
@ -56,13 +58,19 @@ public class ResMigration {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static ResidenceNode parseDominion(String name, World world, Residence res, SaveFile save) {
|
private static ResidenceNode parseDominion(String name, World world, Residence res, SaveFile save) {
|
||||||
|
OfflinePlayer bukkitOwner = Dominion.instance.getServer().getOfflinePlayer(UUID.fromString(res.Permissions.OwnerUUID));
|
||||||
|
PlayerDTO owner = PlayerDTO.get(bukkitOwner);
|
||||||
|
if (owner == null) {
|
||||||
|
XLogger.warn("Owner not found: " + res.Permissions.OwnerUUID);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
String[] loc = res.Areas.values().toArray()[0].toString().split(":");
|
String[] loc = res.Areas.values().toArray()[0].toString().split(":");
|
||||||
if (loc.length != 6) {
|
if (loc.length != 6) {
|
||||||
XLogger.warn("Invalid location: " + res.Areas.get("main"));
|
XLogger.warn("Invalid location: " + res.Areas.get("main"));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
ResidenceNode dominionNode = new ResidenceNode();
|
ResidenceNode dominionNode = new ResidenceNode();
|
||||||
dominionNode.owner = UUID.fromString(res.Permissions.OwnerUUID);
|
dominionNode.owner = owner.getUuid();
|
||||||
dominionNode.world = world;
|
dominionNode.world = world;
|
||||||
dominionNode.name = name;
|
dominionNode.name = name;
|
||||||
dominionNode.joinMessage = save.Messages.get(res.Messages).EnterMessage;
|
dominionNode.joinMessage = save.Messages.get(res.Messages).EnterMessage;
|
@ -10,7 +10,6 @@ Database:
|
|||||||
AutoCreateRadius: 10 #-1 表示不开启
|
AutoCreateRadius: 10 #-1 表示不开启
|
||||||
|
|
||||||
Limit:
|
Limit:
|
||||||
SpawnProtection: 10 # 出生点保护半径 出生点此范围内不允许圈地 -1 表示不开启
|
|
||||||
MinY: -64 # 最小Y坐标
|
MinY: -64 # 最小Y坐标
|
||||||
MaxY: 320 # 最大Y坐标
|
MaxY: 320 # 最大Y坐标
|
||||||
SizeX: 128 # X方向最大长度 -1:表示不限制
|
SizeX: 128 # X方向最大长度 -1:表示不限制
|
||||||
@ -53,19 +52,8 @@ FlyPermissionNodes:
|
|||||||
# 是否允许玩家从 Residence 迁移领地数据
|
# 是否允许玩家从 Residence 迁移领地数据
|
||||||
ResidenceMigration: false
|
ResidenceMigration: false
|
||||||
|
|
||||||
# 权限组称号 - 使用权限组当作称号(需要PlaceholderAPI插件)
|
BlueMap: true
|
||||||
# Papi: %dominion_group_title%
|
|
||||||
# 前后缀如需要加颜色请使用这种格式 &#ffffff
|
|
||||||
GroupTitle:
|
|
||||||
Enable: false
|
|
||||||
Prefix: "["
|
|
||||||
Suffix: "]"
|
|
||||||
|
|
||||||
BlueMap: false
|
|
||||||
Dynmap: false
|
|
||||||
|
|
||||||
CheckUpdate: true
|
CheckUpdate: true
|
||||||
|
|
||||||
Debug: false
|
Debug: false
|
||||||
|
|
||||||
Timer: false # 性能测试计时器
|
|
13
src/main/resources/plugin.yml
Normal file
13
src/main/resources/plugin.yml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
name: Dominion
|
||||||
|
version: '${project.version}'
|
||||||
|
main: cn.lunadeer.dominion.Dominion
|
||||||
|
api-version: '1.20'
|
||||||
|
load: STARTUP
|
||||||
|
folia-supported: true
|
||||||
|
loadbefore:
|
||||||
|
- Vault
|
||||||
|
commands:
|
||||||
|
Dominion:
|
||||||
|
description: 领地插件命令
|
||||||
|
usage: /dominion <cmd>
|
||||||
|
aliases: [dominion, dom]
|
@ -1,17 +0,0 @@
|
|||||||
plugins {
|
|
||||||
id("java")
|
|
||||||
}
|
|
||||||
|
|
||||||
java {
|
|
||||||
toolchain.languageVersion.set(JavaLanguageVersion.of(21))
|
|
||||||
}
|
|
||||||
|
|
||||||
// utf-8
|
|
||||||
tasks.withType<JavaCompile> {
|
|
||||||
options.encoding = "UTF-8"
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
|
||||||
compileOnly(project(":core"))
|
|
||||||
compileOnly("io.papermc.paper:paper-api:1.20.1-R0.1-SNAPSHOT")
|
|
||||||
}
|
|
@ -1,350 +0,0 @@
|
|||||||
package cn.lunadeer.dominion.events_v1_20_1;
|
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Cache;
|
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
|
||||||
import cn.lunadeer.dominion.dtos.Flag;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.Tag;
|
|
||||||
import org.bukkit.block.Block;
|
|
||||||
import org.bukkit.block.BlockFace;
|
|
||||||
import org.bukkit.entity.*;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.EventPriority;
|
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
import org.bukkit.event.block.Action;
|
|
||||||
import org.bukkit.event.block.BlockFromToEvent;
|
|
||||||
import org.bukkit.event.block.BlockIgniteEvent;
|
|
||||||
import org.bukkit.event.block.BlockPistonExtendEvent;
|
|
||||||
import org.bukkit.event.entity.*;
|
|
||||||
import org.bukkit.event.hanging.HangingBreakByEntityEvent;
|
|
||||||
import org.bukkit.event.hanging.HangingBreakEvent;
|
|
||||||
import org.bukkit.event.inventory.InventoryMoveItemEvent;
|
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.EventUtils.checkFlag;
|
|
||||||
import static org.bukkit.Material.FARMLAND;
|
|
||||||
|
|
||||||
public class EnvironmentEvents implements Listener {
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // creeper_explode
|
|
||||||
public void onEntityExplode(EntityExplodeEvent event) {
|
|
||||||
Entity entity = event.getEntity();
|
|
||||||
XLogger.debug("EntityExplodeEvent: " + entity.getType());
|
|
||||||
if (isNotExplodeEntity(entity)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
XLogger.debug("blockList" + event.blockList().size());
|
|
||||||
event.blockList().removeIf(block -> {
|
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
|
|
||||||
return !checkFlag(dom, Flag.CREEPER_EXPLODE, null);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // creeper_explode - item frame
|
|
||||||
public void onItemFrameExploded(HangingBreakByEntityEvent event) {
|
|
||||||
Entity entity = event.getEntity();
|
|
||||||
if (event.getCause() != HangingBreakEvent.RemoveCause.EXPLOSION) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
|
|
||||||
checkFlag(dom, Flag.CREEPER_EXPLODE, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // creeper_explode - item frame
|
|
||||||
public void onItemFrameShot(ProjectileHitEvent event) {
|
|
||||||
Entity hit = event.getHitEntity();
|
|
||||||
if (hit == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (event.getEntity().getShooter() instanceof Player) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!(hit instanceof Hanging)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(hit.getLocation());
|
|
||||||
checkFlag(dom, Flag.CREEPER_EXPLODE, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // creeper_explode - armor stand
|
|
||||||
public void onArmorStandExploded(EntityDamageByEntityEvent event) {
|
|
||||||
Entity entity = event.getEntity();
|
|
||||||
if (entity.getType() != EntityType.ARMOR_STAND) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (isNotExplodeEntity(event.getDamager())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
|
|
||||||
checkFlag(dom, Flag.CREEPER_EXPLODE, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // item_frame_proj_damage
|
|
||||||
public void removeSomeOnItemFrameByArrow(HangingBreakByEntityEvent event) {
|
|
||||||
if (event.getCause() != HangingBreakEvent.RemoveCause.ENTITY) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Entity remover = event.getRemover();
|
|
||||||
if (!(remover instanceof Projectile projectile)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!(projectile.getShooter() instanceof Player)) {
|
|
||||||
// 玩家破坏由 玩家 break 权限控制
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(event.getEntity().getLocation());
|
|
||||||
checkFlag(dom, Flag.ITEM_FRAME_PROJ_DAMAGE, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean isNotExplodeEntity(Entity damager) {
|
|
||||||
return damager.getType() != EntityType.CREEPER
|
|
||||||
&& damager.getType() != EntityType.WITHER_SKULL
|
|
||||||
&& damager.getType() != EntityType.FIREBALL
|
|
||||||
&& damager.getType() != EntityType.ENDER_CRYSTAL
|
|
||||||
&& damager.getType() != EntityType.SMALL_FIREBALL
|
|
||||||
&& damager.getType() != EntityType.DRAGON_FIREBALL;
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // dragon_break_block
|
|
||||||
public void onDragonBreakBlock(EntityExplodeEvent event) {
|
|
||||||
Entity entity = event.getEntity();
|
|
||||||
if (entity.getType() != EntityType.ENDER_DRAGON) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
event.blockList().removeIf(block -> {
|
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
|
|
||||||
return !checkFlag(dom, Flag.DRAGON_BREAK_BLOCK, null);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // fire_spread
|
|
||||||
public void onFireSpread(BlockIgniteEvent event) {
|
|
||||||
Player player = event.getPlayer();
|
|
||||||
if (player != null) {
|
|
||||||
// 如果点燃事件没有玩家触发,那么就是火焰蔓延
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(event.getBlock().getLocation());
|
|
||||||
checkFlag(dom, Flag.FIRE_SPREAD, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // flow_in_protection
|
|
||||||
public void onLiquidFlowIn(BlockFromToEvent event) {
|
|
||||||
Location from = event.getBlock().getLocation();
|
|
||||||
Location to = event.getToBlock().getLocation();
|
|
||||||
DominionDTO dom_to = Cache.instance.getDominionByLoc(to);
|
|
||||||
if (dom_to == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
DominionDTO dom_from = Cache.instance.getDominionByLoc(from);
|
|
||||||
if (dom_from != null) {
|
|
||||||
if (Objects.equals(dom_from.getId(), dom_to.getId())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
checkFlag(dom_to, Flag.FLOW_IN_PROTECTION, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // mob_drop_item
|
|
||||||
public void onMobDropItem(EntityDeathEvent event) {
|
|
||||||
Entity entity = event.getEntity();
|
|
||||||
if (entity instanceof Player) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
|
|
||||||
if (dom == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (!Flag.MOB_DROP_ITEM.getEnable()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (dom.getFlagValue(Flag.MOB_DROP_ITEM)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
event.getDrops().clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // tnt_explode
|
|
||||||
public void onTntExplode(EntityExplodeEvent event) {
|
|
||||||
Entity entity = event.getEntity();
|
|
||||||
if (entity.getType() != EntityType.MINECART_TNT && entity.getType() != EntityType.PRIMED_TNT) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
event.blockList().removeIf(block -> {
|
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
|
|
||||||
return !checkFlag(dom, Flag.TNT_EXPLODE, null);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // tnt_explode - entity
|
|
||||||
public void onArmorStandExplodedByTnt(EntityDamageByEntityEvent event) {
|
|
||||||
Entity entity = event.getEntity();
|
|
||||||
Entity harmer = event.getDamager();
|
|
||||||
if (harmer.getType() != EntityType.MINECART_TNT && harmer.getType() != EntityType.PRIMED_TNT) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
|
|
||||||
checkFlag(dom, Flag.TNT_EXPLODE, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // trample
|
|
||||||
public void onFarmlandTrample(PlayerInteractEvent event) {
|
|
||||||
if (event.getAction() != Action.PHYSICAL) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Block block = event.getClickedBlock();
|
|
||||||
if (block == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (block.getType() != FARMLAND) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
|
|
||||||
checkFlag(dom, Flag.TRAMPLE, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
TRIG_PRESSURE_PROJ("trig_pressure_proj", "投掷物触发压力板", "投掷物(箭/风弹/雪球)是否可以触发压力板", false, true, true),
|
|
||||||
TRIG_PRESSURE_MOB("trig_pressure_mob", "生物触发压力板", "生物(不包含玩家)是否可以触发压力板", false, true, true),
|
|
||||||
TRIG_PRESSURE_DROP("trig_pressure_drop", "掉落物触发压力板", "掉落物是否可以触发压力板", false, true, true),
|
|
||||||
*/
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // trig_pressure_proj
|
|
||||||
public void onPressurePlateTriggeredByProjectile(EntityInteractEvent event) {
|
|
||||||
if (!(event.getEntity() instanceof Projectile)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Block block = event.getBlock();
|
|
||||||
if (!Tag.PRESSURE_PLATES.isTagged(block.getType())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
|
|
||||||
checkFlag(dom, Flag.TRIG_PRESSURE_PROJ, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // trig_pressure_mob
|
|
||||||
public void onPressurePlateTriggeredByMob(EntityInteractEvent event) {
|
|
||||||
if (!(event.getEntity() instanceof Mob)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Block block = event.getBlock();
|
|
||||||
if (!Tag.PRESSURE_PLATES.isTagged(block.getType())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
|
|
||||||
checkFlag(dom, Flag.TRIG_PRESSURE_MOB, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // trig_pressure_drop
|
|
||||||
public void onPressurePlateTriggeredByDrop(EntityInteractEvent event) {
|
|
||||||
if (!(event.getEntity() instanceof Item)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Block block = event.getBlock();
|
|
||||||
if (!Tag.PRESSURE_PLATES.isTagged(block.getType())) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(block.getLocation());
|
|
||||||
checkFlag(dom, Flag.TRIG_PRESSURE_DROP, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // wither_spawn
|
|
||||||
public void onWitherSpawn(CreatureSpawnEvent event) {
|
|
||||||
Entity entity = event.getEntity();
|
|
||||||
if (entity.getType() != EntityType.WITHER) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
|
|
||||||
checkFlag(dom, Flag.WITHER_SPAWN, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // ender_man spawn
|
|
||||||
public void onEnderManSpawn(CreatureSpawnEvent event) {
|
|
||||||
Entity entity = event.getEntity();
|
|
||||||
if (entity.getType() != EntityType.ENDERMAN) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
|
|
||||||
checkFlag(dom, Flag.ENDER_MAN, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // ender_man escape
|
|
||||||
public void onEnderManEscape(EntityTeleportEvent event) {
|
|
||||||
Entity entity = event.getEntity();
|
|
||||||
if (entity.getType() != EntityType.ENDERMAN) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
|
|
||||||
checkFlag(dom, Flag.ENDER_MAN, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // monster_spawn
|
|
||||||
public void onMonsterSpawn(CreatureSpawnEvent event) {
|
|
||||||
Entity entity = event.getEntity();
|
|
||||||
if (!(entity instanceof Monster)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
|
|
||||||
checkFlag(dom, Flag.MONSTER_SPAWN, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // animal_spawn
|
|
||||||
public void onAnimalSpawn(CreatureSpawnEvent event) {
|
|
||||||
Entity entity = event.getEntity();
|
|
||||||
if (!(entity instanceof Animals)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
|
|
||||||
checkFlag(dom, Flag.ANIMAL_SPAWN, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST) // villager_spawn
|
|
||||||
public void onVillagerSpawn(CreatureSpawnEvent event) {
|
|
||||||
Entity entity = event.getEntity();
|
|
||||||
if (entity.getType() != EntityType.VILLAGER) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
DominionDTO dom = Cache.instance.getDominionByLoc(entity.getLocation());
|
|
||||||
checkFlag(dom, Flag.VILLAGER_SPAWN, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
|
||||||
public void onHopper(InventoryMoveItemEvent event) {
|
|
||||||
Inventory hopper = event.getDestination();
|
|
||||||
Inventory inventory = event.getSource();
|
|
||||||
DominionDTO hopperDom = Cache.instance.getDominionByLoc(hopper.getLocation());
|
|
||||||
DominionDTO inventoryDom = Cache.instance.getDominionByLoc(inventory.getLocation());
|
|
||||||
if (hopperDom == null && inventoryDom != null) {
|
|
||||||
checkFlag(inventoryDom, Flag.HOPPER_OUTSIDE, event);
|
|
||||||
}
|
|
||||||
if (hopperDom != null && inventoryDom != null) {
|
|
||||||
if (!hopperDom.getId().equals(inventoryDom.getId())) {
|
|
||||||
checkFlag(inventoryDom, Flag.HOPPER_OUTSIDE, event);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
|
||||||
public void onBlockPushedByPiston(BlockPistonExtendEvent event) {
|
|
||||||
Block piston = event.getBlock();
|
|
||||||
DominionDTO pistonDom = Cache.instance.getDominionByLoc(piston.getLocation());
|
|
||||||
BlockFace direction = event.getDirection();
|
|
||||||
Block endBlockAfterPush = piston.getRelative(direction, event.getBlocks().size() + 1);
|
|
||||||
DominionDTO endBlockDom = Cache.instance.getDominionByLoc(endBlockAfterPush.getLocation());
|
|
||||||
if (pistonDom != null && endBlockDom == null) {
|
|
||||||
checkFlag(pistonDom, Flag.PISTON_OUTSIDE, event);
|
|
||||||
}
|
|
||||||
if (pistonDom == null && endBlockDom != null) {
|
|
||||||
checkFlag(endBlockDom, Flag.PISTON_OUTSIDE, event);
|
|
||||||
}
|
|
||||||
if (pistonDom != null && endBlockDom != null) {
|
|
||||||
if (!pistonDom.getId().equals(endBlockDom.getId())) {
|
|
||||||
if (!endBlockDom.getFlagValue(Flag.PISTON_OUTSIDE) || !pistonDom.getFlagValue(Flag.PISTON_OUTSIDE)) {
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user