mirror of
https://github.com/ColdeZhang/Dominion.git
synced 2024-10-18 21:07:08 +08:00
Compare commits
127 Commits
v2.4.0-bet
...
master
Author | SHA1 | Date | |
---|---|---|---|
11123822e4 | |||
3f6b7c8a92 | |||
3b09e6c885 | |||
2d2fb9a233 | |||
8e490ec57a | |||
f1116fa281 | |||
dcf39f4097 | |||
76a9b27ebd | |||
1b48eba6c7 | |||
01b329a3e7 | |||
7fff24dacf | |||
8e251504fa | |||
5732fe0182 | |||
a53733a0fb | |||
5734c97a58 | |||
a86ce4624f | |||
6f4d716d95 | |||
9017402d06 | |||
af7c4ad6b2 | |||
6e57cada94 | |||
d287b611ad | |||
7046ef0391 | |||
9eb69a4ecc | |||
7f4ed745d7 | |||
7bf81b753d | |||
086e468f03 | |||
e0e713c097 | |||
be496aac0d | |||
ed6dc7c878 | |||
|
901be9f9af | ||
897c6f17fd | |||
ab838c5596 | |||
1b2e193280 | |||
d58b343b7c | |||
c132f52f99 | |||
5cc0750ee9 | |||
458fc530df | |||
ca2b42a84d | |||
a350e01e4b | |||
5bdd15f442 | |||
bc2c66bdd9 | |||
e8271927ea | |||
ab0f2a95dd | |||
6789828dec | |||
0611600a72 | |||
|
38c780302d | ||
8dc6190f57 | |||
|
6ed1f2eaf5 | ||
ff23753c62 | |||
72a5a84a65 | |||
99405c3828 | |||
3a08f41906 | |||
b818fc2153 | |||
bac6f90196 | |||
b6f0d8f8ef | |||
9f788ae26d | |||
e12dd87173 | |||
618b5c1810 | |||
66af44e789 | |||
dbbcf45266 | |||
b82e6d2364 | |||
278de184ae | |||
268d17bd4f | |||
e126a2629e | |||
1ba7de75cb | |||
9113d3a043 | |||
a12775e0ff | |||
f9a5535c3f | |||
ea8c171858 | |||
5d890bc957 | |||
864bb65376 | |||
4effb8a829 | |||
555bb68af3 | |||
0a8e1935be | |||
bb5d95a6f8 | |||
d39d1981f2 | |||
59668604c1 | |||
c3a2b5db13 | |||
35ed249fbb | |||
cb24f91208 | |||
456859b645 | |||
57bc5ada44 | |||
a0f7ba8a45 | |||
4a1aecf31a | |||
d6bb84d777 | |||
ac995b5c62 | |||
1f824bc0b9 | |||
a41e245f5e | |||
e995af24fd | |||
c541a63ee0 | |||
48d8742bec | |||
e52b4426e7 | |||
3a9fcc89ad | |||
9a402199d1 | |||
e90f7f674c | |||
e158066d88 | |||
18632f9094 | |||
04c3036f2c | |||
989cad0dd8 | |||
40d4ede3fc | |||
1f3fb77b49 | |||
83a2daaaed | |||
16728cce6d | |||
f2c04df403 | |||
ec66ca545a | |||
592ade9c23 | |||
cdb8431a96 | |||
bb832fcfc8 | |||
5821285036 | |||
71ff9a6131 | |||
5cb157d7b3 | |||
c1ecaec48b | |||
4c5f3a6db1 | |||
63b1c31953 | |||
b70cfd236a | |||
d038d77fa4 | |||
34a64d3826 | |||
4355915081 | |||
2ecab82905 | |||
8773fd35d2 | |||
7c09f09a85 | |||
a6aef5fc95 | |||
5794f28a33 | |||
dbfe4f2963 | |||
968d6dfdff | |||
ecd65f611f | |||
b4d1c9fe82 |
@ -13,6 +13,12 @@ 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 17"
|
||||||
|
uses: https://ssl.lunadeer.cn:14446/actions/setup-java@v3
|
||||||
|
with:
|
||||||
|
java-version: '17'
|
||||||
|
distribution: 'zulu'
|
||||||
|
cache: gradle
|
||||||
- name: "Set up JDK 21"
|
- name: "Set up JDK 21"
|
||||||
uses: https://ssl.lunadeer.cn:14446/actions/setup-java@v3
|
uses: https://ssl.lunadeer.cn:14446/actions/setup-java@v3
|
||||||
with:
|
with:
|
||||||
@ -21,9 +27,13 @@ jobs:
|
|||||||
cache: gradle
|
cache: gradle
|
||||||
- name: "Build with Gradle"
|
- name: "Build with Gradle"
|
||||||
run: |
|
run: |
|
||||||
./gradlew buildPlugin
|
./gradlew clean
|
||||||
- name: "Copy jar to staging"
|
./gradlew shadowJar -PBuildFull=false
|
||||||
run: mkdir staging && cp build/libs/*.jar staging/
|
./gradlew shadowJar -PBuildFull=true
|
||||||
|
- name: "Stage"
|
||||||
|
run: |
|
||||||
|
mkdir -p staging
|
||||||
|
mv build/libs/*.jar staging/
|
||||||
- name: "Build & test"
|
- name: "Build & test"
|
||||||
run: |
|
run: |
|
||||||
echo "done!"
|
echo "done!"
|
||||||
@ -36,7 +46,7 @@ jobs:
|
|||||||
- name: "Release"
|
- name: "Release"
|
||||||
uses: https://ssl.lunadeer.cn:14446/zhangyuheng/release-action@main
|
uses: https://ssl.lunadeer.cn:14446/zhangyuheng/release-action@main
|
||||||
with:
|
with:
|
||||||
note: " - 带 `original-` 前缀的文件无法用于运行,请下载不带此前缀的版本。"
|
note: " - `full` 后缀包含所有依赖直接安装即可使用,`lite` 后缀不包含任何依赖,会在第一次安装后启动时自动下载"
|
||||||
files: |-
|
files: |-
|
||||||
staging/*.jar
|
staging/*.jar
|
||||||
api_key: '${{secrets.RELEASE_TOKEN}}'
|
api_key: '${{secrets.RELEASE_TOKEN}}'
|
8
.github/ISSUE_TEMPLATE/报告bug.md
vendored
8
.github/ISSUE_TEMPLATE/报告bug.md
vendored
@ -15,10 +15,9 @@ assignees: ''
|
|||||||
|
|
||||||
Bug复现步骤:
|
Bug复现步骤:
|
||||||
|
|
||||||
1. Go to '...'
|
1. 打开冰箱;
|
||||||
2. Click on '....'
|
2. 将大象放入冰箱;
|
||||||
3. Scroll down to '....'
|
3. 关上冰箱。
|
||||||
4. See error
|
|
||||||
|
|
||||||
**正常情况的表现**
|
**正常情况的表现**
|
||||||
|
|
||||||
@ -33,6 +32,7 @@ Bug复现步骤:
|
|||||||
- 服务器系统:win, linux
|
- 服务器系统:win, linux
|
||||||
- 服务端核心:(如:Paper、Spigot)
|
- 服务端核心:(如:Paper、Spigot)
|
||||||
- 服务端版本:
|
- 服务端版本:
|
||||||
|
- 客户端版本:
|
||||||
- 插件版本:
|
- 插件版本:
|
||||||
|
|
||||||
**补充信息**
|
**补充信息**
|
||||||
|
21
.github/workflows/check.yml
vendored
Normal file
21
.github/workflows/check.yml
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
name: Merge/PR Build Check
|
||||||
|
|
||||||
|
on: [ pull_request ]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
permissions: write-all
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
- name: "Set up JDK 21"
|
||||||
|
uses: actions/setup-java@v3
|
||||||
|
with:
|
||||||
|
java-version: '21'
|
||||||
|
distribution: 'zulu'
|
||||||
|
cache: gradle
|
||||||
|
- name: "Build with Gradle"
|
||||||
|
run: ./gradlew buildPlugin
|
||||||
|
- name: "Done!"
|
||||||
|
run: |
|
||||||
|
echo "done!"
|
37
.github/workflows/main.yml
vendored
37
.github/workflows/main.yml
vendored
@ -12,24 +12,51 @@ jobs:
|
|||||||
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 21"
|
||||||
uses: actions/setup-java@v3
|
uses: actions/setup-java@v3
|
||||||
with:
|
with:
|
||||||
java-version: '21'
|
java-version: '21'
|
||||||
distribution: 'zulu'
|
distribution: 'zulu'
|
||||||
cache: gradle
|
cache: gradle
|
||||||
- name: "Build with Gradle"
|
- name: "Build with Gradle"
|
||||||
run: ./gradlew buildPlugin
|
run: |
|
||||||
- name: "Copy jar to staging"
|
./gradlew clean
|
||||||
run: mkdir staging && cp build/libs/*.jar staging/
|
./gradlew shadowJar -PBuildFull=false
|
||||||
|
./gradlew shadowJar -PBuildFull=true
|
||||||
|
- name: "Stage"
|
||||||
|
run: |
|
||||||
|
mkdir -p staging
|
||||||
|
mv build/libs/*.jar staging/
|
||||||
- name: "Build & test"
|
- name: "Build & test"
|
||||||
run: |
|
run: |
|
||||||
TAG=$(echo $GITHUB_REF | sed 's/refs\/tags\///')
|
TAG=$(echo $GITHUB_REF | sed 's/refs\/tags\///')
|
||||||
echo "done!"
|
echo "done!"
|
||||||
- uses: "marvinpinto/action-automatic-releases@latest"
|
- name: "GitHub Release"
|
||||||
|
uses: "marvinpinto/action-automatic-releases@latest"
|
||||||
with:
|
with:
|
||||||
repo_token: "${{ secrets.GITHUB_TOKEN }}"
|
repo_token: "${{ secrets.GITHUB_TOKEN }}"
|
||||||
automatic_release_tag: "${{ steps.build.outputs.TAG }}"
|
automatic_release_tag: "${{ steps.build.outputs.TAG }}"
|
||||||
prerelease: false
|
prerelease: false
|
||||||
files: |
|
files: |
|
||||||
staging/*.jar
|
staging/*.jar
|
||||||
|
- name: "Modrinth Release"
|
||||||
|
uses: dsx137/modrinth-release-action@main
|
||||||
|
env:
|
||||||
|
MODRINTH_TOKEN: ${{ secrets.MODRINTH_TOKEN }}
|
||||||
|
with:
|
||||||
|
name: ${{ env.AUTOMATIC_RELEASES_TAG }}
|
||||||
|
project_id: vVZc7jAV
|
||||||
|
loaders: bukkit,folia,paper,purpur,spigot
|
||||||
|
game_versions: 1.20.1:1.20.6,1.21,1.21.1
|
||||||
|
version_number: ${{ env.AUTOMATIC_RELEASES_TAG }}
|
||||||
|
files: |
|
||||||
|
staging/*-lite.jar
|
||||||
|
changelog: "See https://github.com/ColdeZhang/Dominion/releases/tag/${{ env.AUTOMATIC_RELEASES_TAG }}"
|
||||||
|
version_type: beta
|
||||||
|
featured: false
|
||||||
|
updatable: false
|
||||||
|
delete_old_files: false
|
||||||
|
- name: "Hangar Release"
|
||||||
|
env:
|
||||||
|
HANGAR_TOKEN: ${{ secrets.HANGAR_API_TOKEN }}
|
||||||
|
run: ./gradlew build publishPluginPublicationToHangar -PBuildFull=false
|
||||||
|
55
.github/workflows/wiki.yml
vendored
Normal file
55
.github/workflows/wiki.yml
vendored
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
name: Deploy GitBook with GitHub Pages dependencies preinstalled
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
paths:
|
||||||
|
- 'docs/**'
|
||||||
|
- '.github/workflows/wiki.yml'
|
||||||
|
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: read
|
||||||
|
pages: write
|
||||||
|
id-token: write
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: "pages"
|
||||||
|
cancel-in-progress: false
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- name: Checkout
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
- name: Setup Pages
|
||||||
|
uses: actions/configure-pages@v5
|
||||||
|
- name: Setup Node.js environment
|
||||||
|
uses: actions/setup-node@v4.0.3
|
||||||
|
with:
|
||||||
|
node-version: '10.21.0'
|
||||||
|
- name: Install gitbook-cli
|
||||||
|
run: |
|
||||||
|
npm install -g gitbook-cli
|
||||||
|
- name: Build with gitbook
|
||||||
|
run: |
|
||||||
|
gitbook install docs
|
||||||
|
gitbook build docs
|
||||||
|
mv docs/_book _site
|
||||||
|
- name: Upload artifact
|
||||||
|
uses: actions/upload-pages-artifact@v3
|
||||||
|
|
||||||
|
# Deployment job
|
||||||
|
deploy:
|
||||||
|
environment:
|
||||||
|
name: github-pages
|
||||||
|
url: ${{ steps.deployment.outputs.page_url }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: build
|
||||||
|
steps:
|
||||||
|
- name: Deploy to GitHub Pages
|
||||||
|
id: deployment
|
||||||
|
uses: actions/deploy-pages@v4
|
1
.gitignore
vendored
1
.gitignore
vendored
@ -111,3 +111,4 @@ buildNumber.properties
|
|||||||
|
|
||||||
# Common working directory
|
# Common working directory
|
||||||
run/
|
run/
|
||||||
|
/docs/_book/
|
||||||
|
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
[submodule "api"]
|
||||||
|
path = api
|
||||||
|
url = https://github.com/ColdeZhang/DominionAPI.git
|
65
CONTRIBUTING.md
Normal file
65
CONTRIBUTING.md
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
# Contributing to Dominion
|
||||||
|
|
||||||
|
Thank you for considering contributing to Dominion! We welcome contributions from everyone. By participating in this
|
||||||
|
project, you agree to abide by our code of conduct.
|
||||||
|
|
||||||
|
## How to Contribute
|
||||||
|
|
||||||
|
### 🪲Reporting Bugs
|
||||||
|
|
||||||
|
If you find a bug, please report it by opening an issue on our GitHub repository. Include as much detail as possible,
|
||||||
|
including steps to reproduce the issue, the expected result, and the actual result.
|
||||||
|
|
||||||
|
### 💡Suggesting Enhancements
|
||||||
|
|
||||||
|
We welcome suggestions for new features or improvements. Please open an issue on our GitHub repository and describe the
|
||||||
|
enhancement you would like to see, why you think it would be useful, and any other relevant information.
|
||||||
|
|
||||||
|
### 🌐Translating
|
||||||
|
|
||||||
|
#### **Translate Plugin Messages**
|
||||||
|
|
||||||
|
Since the plugin messages are translated by AI, there must be some mistakes in the translation. If you find any mistakes
|
||||||
|
(or inappropriate translations), there are two ways to help us improve the translation:
|
||||||
|
|
||||||
|
1. Fork the repository & clone the repository to your local.
|
||||||
|
2. Create a new branch for your translation.
|
||||||
|
3. Translate the plugin messages.
|
||||||
|
4. Commit & Push your changes to your fork.
|
||||||
|
5. Open a pull request, wait for your pull request to be reviewed and merged.
|
||||||
|
|
||||||
|
Plugin messages are located in the `languages` directory. Translate the files in the language you want to
|
||||||
|
|
||||||
|
- If the language you want to translate to does not exist, create a new file with the language code (e.g., `zh-cn.yml`
|
||||||
|
for Simplified Chinese).
|
||||||
|
- If the translation is not up-to-date, please update it from the `zh-cn.yml` file.
|
||||||
|
- Don't forget to leave your name in the header-comment of the file.
|
||||||
|
|
||||||
|
> Plugin messages was uploaded to Crowdin too, you can directly modify the translation on
|
||||||
|
> the [Crowdin project](https://crowdin.com/project/dominion).
|
||||||
|
>
|
||||||
|
> But we **NOT RECOMMEND** this way, because the translation on Crowdin may not be the latest.
|
||||||
|
>
|
||||||
|
> ![Crowdin](https://badges.crowdin.net/dominion/localized.svg)
|
||||||
|
|
||||||
|
|
||||||
|
#### **Translate Documentation**
|
||||||
|
|
||||||
|
1. Fork the repository & clone the repository to your local.
|
||||||
|
2. Create a new branch for your translation.
|
||||||
|
3. Translate the documentation or plugin messages.
|
||||||
|
4. Commit & Push your changes to your fork.
|
||||||
|
5. Open a pull request, wait for your pull request to be reviewed and merged.
|
||||||
|
|
||||||
|
Documentations are located in the `docs` directory. Translate the files in the language you want to contribute to.
|
||||||
|
|
||||||
|
- If the language you want to translate to does not exist, create a new directory with the language code (e.g., `zh-cn`
|
||||||
|
for Simplified Chinese).
|
||||||
|
- If the documentation is not up-to-date, please update it from the `zh-cn` directory.
|
||||||
|
- Don't forget to leave your name and contact information in `docs/YOUR_LANGUAGE_CODE/README.md` below.
|
||||||
|
|
||||||
|
## 🫴Getting Help
|
||||||
|
|
||||||
|
If you need help, feel free to ask questions by opening an issue on our GitHub repository.
|
||||||
|
|
||||||
|
Thank you for contributing ❤!
|
93
README.md
93
README.md
@ -1,86 +1,55 @@
|
|||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||
<img src="https://ssl.lunadeer.cn:14437/i/2024/03/28/6604f0cec0f0e.png" alt="" width="70%">
|
<img src="logos/logo3.png" alt="" width="30%">
|
||||||
|
|
||||||
|
[![Documentation](https://img.shields.io/badge/Document-Online-70f3ff?logo=readthedocs)](https://dominion.lunadeer.cn/)
|
||||||
[![GitHub Repository](https://img.shields.io/badge/GitHub-开源地址-blue?logo=github)](https://github.com/ColdeZhang/Dominion)
|
[![GitHub Repository](https://img.shields.io/badge/SourceCode-GitHub-blue?logo=github)](https://github.com/ColdeZhang/Dominion)
|
||||||
[![bStats](https://img.shields.io/badge/bStats-Statistics-eacd76?logo=google-analytics)](https://bstats.org/plugin/bukkit/Dominion/21445)
|
[![bStats](https://img.shields.io/badge/bStats-Statistics-eacd76?logo=google-analytics)](https://bstats.org/plugin/bukkit/Dominion/21445)
|
||||||
[![Hangar](https://img.shields.io/badge/Hangar-Project-bacac6?logo=paper)](https://hangar.papermc.io/zhangyuheng/Dominion)
|
|
||||||
|
|
||||||
[![Documentation](https://img.shields.io/badge/在线文档-点击跳转-70f3ff?logo=readthedocs)](https://ssl.lunadeer.cn:14448/doc/23/)
|
[![Latest Build](https://img.shields.io/github/v/release/ColdeZhang/Dominion?label=LatestBuild&logo=github&color=0aa344)](https://github.com/ColdeZhang/Dominion/releases/latest)
|
||||||
[![Latest Build](https://img.shields.io/github/v/release/ColdeZhang/Dominion?label=%E6%9C%80%E6%96%B0%E6%9E%84%E5%BB%BA%E4%B8%8B%E8%BD%BD&logo=github&color=0aa344)](https://github.com/ColdeZhang/Dominion/releases/latest)
|
|
||||||
[![Latest Build](https://img.shields.io/github/v/release/ColdeZhang/Dominion?label=%E5%A4%87%E7%94%A8%E4%B8%8B%E8%BD%BD%E5%9C%B0%E5%9D%80&logo=gitea&color=0aa344)](https://ssl.lunadeer.cn:14446/mirror/Dominion/releases)
|
[![Hangar](https://img.shields.io/badge/To-Hangar-004ee9)](https://hangar.papermc.io/zhangyuheng/Dominion)
|
||||||
|
[![Modrinth](https://img.shields.io/badge/To-Modrinth-1bd96a)](https://modrinth.com/plugin/zhangyuheng-dominion)
|
||||||
|
[![Spigot](https://img.shields.io/badge/To-Spigot-ed8106)](https://www.spigotmc.org/resources/dominion.119514/)
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 简介
|
[中文(简体)](README_zh.md) | English
|
||||||
|
|
||||||
鉴于 Residence 插件的作者项目较多,维护压力大,无法及时跟进新版本以及适配Folia核心。故开发此插件,旨在平替纯净版生存服Residence的使用(支持从
|
## What's this?
|
||||||
Res 迁移数据)。
|
|
||||||
|
|
||||||
**请注意,本插件目前处于中期测试稳定阶段,绝大多数bug或漏洞已被修复,目前已具备完全可用性。但不排除仍然存在某些问题,如果遇到任何
|
Dominion is a completely open-source, free, future-proof, territory anti-grief plugin developed specifically for
|
||||||
BUG 欢迎及时发送邮件或添加QQ群告知,感激不尽。**
|
high-versions minecraft server. The plugin is currently undergoing rapid development and iteration, and we will do our
|
||||||
|
best to ensure the stability and functionality of the plugin.
|
||||||
|
|
||||||
## 说明
|
For detail functions and features of Dominion, you can view [Introduction](intro/intro_en-us.md)
|
||||||
|
|
||||||
本插件基本还原了Residence的核心功能,主要适用于原版纯净生存服务器的防破坏目的,支持基础的价格系统。
|
## Version Support
|
||||||
|
|
||||||
![](https://ssl.lunadeer.cn:14437/i/2024/02/16/65cf3b08c986b.png)
|
|
||||||
|
|
||||||
为了提高存储效率,本插件使用了数据库+缓存的方式存储领地数据,玩家配置领地权限直接修改数据库内容,随后触发缓存更新。权限控制则以异步的方式访问缓存,减少事件阻塞。
|
|
||||||
|
|
||||||
权限系统主要由领地权限、玩家特权组成,玩家特权优先级高于领地权限。没有特权的玩家在领地内收到领地权限的控制,有特权配置则按照特权设置受控。
|
|
||||||
|
|
||||||
## 功能介绍
|
|
||||||
|
|
||||||
- 支持 Postgresql、Mysql、Sqlite3 存储数据;
|
|
||||||
- 支持 BlueMap、Dynmap 卫星地图渲染;
|
|
||||||
- 支持为玩家单独设置特权;
|
|
||||||
- 支持设置领地管理员;
|
|
||||||
- 支持子领地;
|
|
||||||
- 采用 TUI 方式进行权限配置交互,简单快捷;
|
|
||||||
- 支持经济系统(需要 Vault 前置);
|
|
||||||
- 领地区域可视化;
|
|
||||||
- 管理员可在游戏内使用TUI配置领地系统;
|
|
||||||
- 支持[从 Residence 迁移](https://ssl.lunadeer.cn:14448/doc/73/)领地数据(1.33.7+);
|
|
||||||
- 超高性能(一个坐标在10127个领地内的搜索平均耗时不超过0.2ms,仅占用1tick的不到0.4%时间)
|
|
||||||
|
|
||||||
<div 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/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/08/13/66bad56cc9fac.png" alt="" width="60%">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
## 支持版本
|
|
||||||
|
|
||||||
- 1.20.1+ (Bukkit、Spigot、Paper、Folia)
|
- 1.20.1+ (Bukkit、Spigot、Paper、Folia)
|
||||||
|
|
||||||
> 需要使用 Java21 运行你的服务端,如果你还在使用 Java17 可以放心替换为 Java21,理论上 1.20.1+ 版本的服务端核心可以直接升级到
|
> Although this plugin supports Spigot, we strongly recommend that you upgrade your core to Paper or its forked (such as
|
||||||
> Java21 启动。
|
> Purpur) for a better performance experience.
|
||||||
|
|
||||||
## 建议与反馈
|
## For developer
|
||||||
|
|
||||||
GitHub Issues: [地址](https://github.com/ColdeZhang/Dominion/issues)
|
Dominion provides some simple (for now) APIs for developers to build something amazing depends on Dominion. You can
|
||||||
|
take a look at [Developer](docs/en-us/developer.md) for more details.
|
||||||
|
|
||||||
QQ群:309428300
|
## Help us improve
|
||||||
|
|
||||||
## 统计
|
If you encounter any problems during use or have any suggestions, please feel free to open
|
||||||
|
a [GitHub ISSUE](https://github.com/ColdeZhang/Dominion/issues) about your questions or ideas.
|
||||||
|
|
||||||
|
For detailed contribution guidelines (such as **translation** etc.), please see [CONTRIBUTING](CONTRIBUTING.md)。
|
||||||
|
|
||||||
|
> **This project was developed under chinese-simplified originally. It's Multi-Language was translated by AI currently.**
|
||||||
|
> **So, there must be some mistakes in the translation. If you find any mistakes (or inappropriate translations), please**
|
||||||
|
> **feel free to modify it and submit a pull request. See [Translating](CONTRIBUTING.md#translating) for more details.**
|
||||||
|
|
||||||
|
## bStats Statics
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
<img src="https://bstats.org/signatures/bukkit/Dominion.svg" alt="" width="100%">
|
<img src="https://bstats.org/signatures/bukkit/Dominion.svg" alt="" width="100%">
|
||||||
|
61
README_zh.md
Normal file
61
README_zh.md
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
<div align="center">
|
||||||
|
|
||||||
|
<img src="logos/logo3.png" alt="" width="30%">
|
||||||
|
|
||||||
|
[![Documentation](https://img.shields.io/badge/在线文档-点击跳转-70f3ff?logo=readthedocs)](https://dominion.lunadeer.cn/)
|
||||||
|
[![GitHub Repository](https://img.shields.io/badge/开源地址-GitHub-blue?logo=github)](https://github.com/ColdeZhang/Dominion)
|
||||||
|
[![bStats](https://img.shields.io/badge/bStats-Statistics-eacd76?logo=google-analytics)](https://bstats.org/plugin/bukkit/Dominion/21445)
|
||||||
|
|
||||||
|
[![Latest Build](https://img.shields.io/github/v/release/ColdeZhang/Dominion?label=%E6%9C%80%E6%96%B0%E6%9E%84%E5%BB%BA%E4%B8%8B%E8%BD%BD&logo=github&color=0aa344)](https://github.com/ColdeZhang/Dominion/releases/latest)
|
||||||
|
[![Latest Build](https://img.shields.io/github/v/release/ColdeZhang/Dominion?label=%E5%A4%87%E7%94%A8%E4%B8%8B%E8%BD%BD%E5%9C%B0%E5%9D%80&logo=gitea&color=0aa344)](https://ssl.lunadeer.cn:14446/mirror/Dominion/releases)
|
||||||
|
|
||||||
|
[![Hangar](https://img.shields.io/badge/To-Hangar-004ee9)](https://hangar.papermc.io/zhangyuheng/Dominion)
|
||||||
|
[![Modrinth](https://img.shields.io/badge/To-Modrinth-1bd96a)](https://modrinth.com/plugin/zhangyuheng-dominion)
|
||||||
|
[![Spigot](https://img.shields.io/badge/To-Spigot-ed8106)](https://www.spigotmc.org/resources/dominion.119514/)
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
中文(简体) | [English](README.md)
|
||||||
|
|
||||||
|
## 简介
|
||||||
|
|
||||||
|
Dominion 是一个完全开源、免费,专为高版本开发,面向未来的全新领地保护插件。插件目前处于快速的开发、迭代阶段,我们会尽力保证插件的稳定性和功能性。
|
||||||
|
|
||||||
|
关于本插件的功能特性,您可以查看 [功能介绍](intro/intro_zh-cn.md)。
|
||||||
|
|
||||||
|
## 支持版本
|
||||||
|
|
||||||
|
- 1.20.1+ (Bukkit、Spigot、Paper、Folia)
|
||||||
|
|
||||||
|
> 虽然本插件支持 Spigot,但是我们强烈建议您将您的核心升级到 Paper 或其分支核心(如 Purpur)以获得更好的性能体验。
|
||||||
|
|
||||||
|
## 帮助我们不断改进
|
||||||
|
|
||||||
|
如果您在使用过程中遇到任何问题,或者有任何建议,欢迎在 [GitHub ISSUE](https://github.com/ColdeZhang/Dominion/issues) 提交您的问题或想法。
|
||||||
|
|
||||||
|
详细的参与贡献指南请查看 [CONTRIBUTING](CONTRIBUTING.md)。
|
||||||
|
|
||||||
|
交流QQ群:309428300
|
||||||
|
|
||||||
|
## 开发者指南
|
||||||
|
|
||||||
|
Dominion 提供了一些简单(只是暂时,后续会逐步增强api)的 API 供开发者基于 Dominion
|
||||||
|
构建一些更有趣的东西。您可以查看 [开发者指南](docs/zh-cn/developer.md) 了解更多细节。
|
||||||
|
|
||||||
|
## 整个烂活儿
|
||||||
|
|
||||||
|
| | Dominion | R插件 | G插件 |
|
||||||
|
|---------|----------|-----|-----|
|
||||||
|
| 纳秒级索引 | 😊 | 😑 | 😭 |
|
||||||
|
| 权限组快捷配置 | 😊 | 😭 | 😑 |
|
||||||
|
| 开源可信 | 😊 | 😑 | 😑 |
|
||||||
|
| 高版本快速跟进 | 😊 | 😭 | 😑 |
|
||||||
|
| 完全免费 | 😊 | 😑 | 😑 |
|
||||||
|
|
||||||
|
## 统计
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
<img src="https://bstats.org/signatures/bukkit/Dominion.svg" alt="" width="100%">
|
||||||
|
</div>
|
1
api
Submodule
1
api
Submodule
@ -0,0 +1 @@
|
|||||||
|
Subproject commit 9a22a3e453ef0391741b6282a5b7f7219bfbbb0c
|
@ -1,13 +1,20 @@
|
|||||||
|
import io.papermc.hangarpublishplugin.model.Platforms
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id("java")
|
id("java")
|
||||||
id("com.github.johnrengelman.shadow") version "8.1.1"
|
id("com.github.johnrengelman.shadow") version "8.1.1"
|
||||||
|
id("io.papermc.hangar-publish-plugin") version "0.1.2"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var BuildFull = properties["BuildFull"].toString() == "true"
|
||||||
|
var libraries = listOf<String>()
|
||||||
|
libraries = libraries + "cn.lunadeer:MinecraftPluginUtils:2.0.7"
|
||||||
|
|
||||||
group = "cn.lunadeer"
|
group = "cn.lunadeer"
|
||||||
version = "2.4.0-beta"
|
version = "2.14.1-beta"
|
||||||
|
|
||||||
java {
|
java {
|
||||||
toolchain.languageVersion.set(JavaLanguageVersion.of(21))
|
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
|
||||||
}
|
}
|
||||||
|
|
||||||
// utf-8
|
// utf-8
|
||||||
@ -26,7 +33,6 @@ allprojects {
|
|||||||
maven("https://repo.papermc.io/repository/maven-public/")
|
maven("https://repo.papermc.io/repository/maven-public/")
|
||||||
maven("https://jitpack.io")
|
maven("https://jitpack.io")
|
||||||
maven("https://repo.mikeprimm.com/")
|
maven("https://repo.mikeprimm.com/")
|
||||||
maven("https://ssl.lunadeer.cn:14454/repository/maven-snapshots/")
|
|
||||||
maven("https://repo.extendedclip.com/content/repositories/placeholderapi/")
|
maven("https://repo.extendedclip.com/content/repositories/placeholderapi/")
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -35,17 +41,37 @@ allprojects {
|
|||||||
compileOnly("us.dynmap:DynmapCoreAPI:3.4")
|
compileOnly("us.dynmap:DynmapCoreAPI:3.4")
|
||||||
compileOnly("me.clip:placeholderapi:2.11.6")
|
compileOnly("me.clip:placeholderapi:2.11.6")
|
||||||
|
|
||||||
implementation("cn.lunadeer:MinecraftPluginUtils:1.3.7-SNAPSHOT")
|
if (!BuildFull) {
|
||||||
implementation("org.yaml:snakeyaml:2.0")
|
libraries.forEach {
|
||||||
|
compileOnly(it)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
libraries.forEach {
|
||||||
|
implementation(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.processResources {
|
tasks.processResources {
|
||||||
outputs.upToDateWhen { false }
|
outputs.upToDateWhen { false }
|
||||||
|
// copy languages folder from PROJECT_DIR/languages to core/src/main/resources
|
||||||
|
from(file("${projectDir}/languages")) {
|
||||||
|
into("languages")
|
||||||
|
}
|
||||||
// replace @version@ in plugin.yml with project version
|
// replace @version@ in plugin.yml with project version
|
||||||
filesMatching("**/plugin.yml") {
|
filesMatching("**/plugin.yml") {
|
||||||
filter {
|
filter {
|
||||||
it.replace("@version@", rootProject.version.toString())
|
it.replace("@version@", rootProject.version.toString())
|
||||||
}
|
}
|
||||||
|
if (!BuildFull) {
|
||||||
|
var libs = "libraries: ["
|
||||||
|
libraries.forEach {
|
||||||
|
libs += "$it,"
|
||||||
|
}
|
||||||
|
filter {
|
||||||
|
it.replace("libraries: [ ]", libs.substring(0, libs.length - 1) + "]")
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -53,6 +79,8 @@ allprojects {
|
|||||||
archiveClassifier.set("")
|
archiveClassifier.set("")
|
||||||
archiveVersion.set(project.version.toString())
|
archiveVersion.set(project.version.toString())
|
||||||
dependsOn(tasks.withType<ProcessResources>())
|
dependsOn(tasks.withType<ProcessResources>())
|
||||||
|
// add -lite to the end of the file name if BuildLite is true or -full if BuildLite is false
|
||||||
|
archiveFileName.set("${project.name}-${project.version}${if (BuildFull) "-full" else "-lite"}.jar")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -67,7 +95,29 @@ tasks.shadowJar {
|
|||||||
archiveVersion.set(project.version.toString())
|
archiveVersion.set(project.version.toString())
|
||||||
}
|
}
|
||||||
|
|
||||||
tasks.register("buildPlugin") { // <<<< RUN THIS TASK TO BUILD PLUGIN
|
tasks.register("Clean&Build") { // <<<< RUN THIS TASK TO BUILD PLUGIN
|
||||||
dependsOn(tasks.clean)
|
dependsOn(tasks.clean)
|
||||||
dependsOn(tasks.shadowJar)
|
dependsOn(tasks.shadowJar)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hangarPublish {
|
||||||
|
publications.register("plugin") {
|
||||||
|
version.set(project.version as String) // use project version as publication version
|
||||||
|
id.set("Dominion")
|
||||||
|
channel.set("Beta")
|
||||||
|
changelog.set("See https://github.com/ColdeZhang/Dominion/releases/tag/v${project.version}")
|
||||||
|
apiKey.set(System.getenv("HANGAR_TOKEN"))
|
||||||
|
// register platforms
|
||||||
|
platforms {
|
||||||
|
register(Platforms.PAPER) {
|
||||||
|
jar.set(tasks.shadowJar.flatMap { it.archiveFile })
|
||||||
|
println("ShadowJar: ${tasks.shadowJar.flatMap { it.archiveFile }}")
|
||||||
|
platformVersions.set(listOf("1.20.1-1.20.6","1.21.x"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.named("publishPluginPublicationToHangar") {
|
||||||
|
dependsOn(tasks.named("jar"))
|
||||||
|
}
|
@ -3,7 +3,7 @@ plugins {
|
|||||||
}
|
}
|
||||||
|
|
||||||
java {
|
java {
|
||||||
toolchain.languageVersion.set(JavaLanguageVersion.of(21))
|
toolchain.languageVersion.set(JavaLanguageVersion.of(17))
|
||||||
}
|
}
|
||||||
|
|
||||||
// utf-8
|
// utf-8
|
||||||
@ -12,5 +12,6 @@ tasks.withType<JavaCompile> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
implementation(project(":api"))
|
||||||
compileOnly("io.papermc.paper:paper-api:1.20.1-R0.1-SNAPSHOT")
|
compileOnly("io.papermc.paper:paper-api:1.20.1-R0.1-SNAPSHOT")
|
||||||
}
|
}
|
||||||
|
@ -2,6 +2,7 @@ package cn.lunadeer.dominion;
|
|||||||
|
|
||||||
import cn.lunadeer.dominion.controllers.PlayerController;
|
import cn.lunadeer.dominion.controllers.PlayerController;
|
||||||
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||||
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -11,15 +12,15 @@ public class AutoClean {
|
|||||||
if (Dominion.config.getAutoCleanAfterDays() < 0) {
|
if (Dominion.config.getAutoCleanAfterDays() < 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
XLogger.info("开始自动清理长时间未登录玩家领地数据");
|
XLogger.info(Translation.Messages_AutoCleanStart);
|
||||||
int auto_clean_after_days = Dominion.config.getAutoCleanAfterDays();
|
int auto_clean_after_days = Dominion.config.getAutoCleanAfterDays();
|
||||||
List<PlayerDTO> players = PlayerController.allPlayers();
|
List<PlayerDTO> players = PlayerController.allPlayers();
|
||||||
for (PlayerDTO p : players) {
|
for (PlayerDTO p : players) {
|
||||||
if (p.getLastJoinAt() + (long) auto_clean_after_days * 24 * 60 * 60 * 1000 < System.currentTimeMillis()) {
|
if (p.getLastJoinAt() + (long) auto_clean_after_days * 24 * 60 * 60 * 1000 < System.currentTimeMillis()) {
|
||||||
PlayerDTO.delete(p);
|
PlayerDTO.delete(p);
|
||||||
XLogger.info("已清理玩家 %s 的领地数据", p.getLastKnownName());
|
XLogger.info(Translation.Messages_AutoCleanPlayer, p.getLastKnownName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
XLogger.info("自动清理完成");
|
XLogger.info(Translation.Messages_AutoCleanEnd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
package cn.lunadeer.dominion;
|
package cn.lunadeer.dominion;
|
||||||
|
|
||||||
|
import cn.lunadeer.dominion.api.DominionAPI;
|
||||||
import cn.lunadeer.dominion.dtos.*;
|
import cn.lunadeer.dominion.dtos.*;
|
||||||
import cn.lunadeer.dominion.utils.MapRender;
|
import cn.lunadeer.dominion.utils.MessageDisplay;
|
||||||
import cn.lunadeer.dominion.utils.Particle;
|
import cn.lunadeer.dominion.utils.Particle;
|
||||||
import cn.lunadeer.dominion.utils.ResMigration;
|
import cn.lunadeer.dominion.utils.ResMigration;
|
||||||
|
import cn.lunadeer.dominion.utils.map.MapRender;
|
||||||
import cn.lunadeer.minecraftpluginutils.AutoTimer;
|
import cn.lunadeer.minecraftpluginutils.AutoTimer;
|
||||||
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 org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
@ -205,16 +206,7 @@ public class Cache {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public DominionDTO getPlayerCurrentDominion(@NotNull Player player) {
|
||||||
* 获取玩家当前所在领地
|
|
||||||
* 此方法会先判断缓存中是否有玩家当前所在领地,如果没有则遍历所有领地判断玩家所在位置
|
|
||||||
* 如果玩家不在任何领地内,则返回null
|
|
||||||
* 如果玩家在领地内,则返回领地信息
|
|
||||||
*
|
|
||||||
* @param player 玩家
|
|
||||||
* @return 玩家当前所在领地
|
|
||||||
*/
|
|
||||||
public DominionDTO getPlayerCurrentDominion(Player player) {
|
|
||||||
try (AutoTimer ignored = new AutoTimer(Dominion.config.TimerEnabled())) {
|
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;
|
||||||
@ -239,14 +231,18 @@ public class Cache {
|
|||||||
return last_dominion;
|
return last_dominion;
|
||||||
}
|
}
|
||||||
if (last_dom_id != -1) {
|
if (last_dom_id != -1) {
|
||||||
String msg = last_dominion.getLeaveMessage();
|
MessageDisplay.show(player, Dominion.config.getMessageDisplayJoinLeave(),
|
||||||
msg = msg.replace("${DOM_NAME}", last_dominion.getName());
|
last_dominion.getLeaveMessage()
|
||||||
Notification.actionBar(player, msg);
|
.replace("{DOM}", last_dominion.getName())
|
||||||
|
.replace("{OWNER}", getPlayerName(last_dominion.getOwner()))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
if (current_dom_id != -1) {
|
if (current_dom_id != -1) {
|
||||||
String msg = current_dominion.getJoinMessage();
|
MessageDisplay.show(player, Dominion.config.getMessageDisplayJoinLeave(),
|
||||||
msg = msg.replace("${DOM_NAME}", current_dominion.getName());
|
current_dominion.getJoinMessage()
|
||||||
Notification.actionBar(player, msg);
|
.replace("{DOM}", current_dominion.getName())
|
||||||
|
.replace("{OWNER}", getPlayerName(current_dominion.getOwner()))
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
lightOrNot(player, current_dominion); // 发光检查
|
lightOrNot(player, current_dominion); // 发光检查
|
||||||
@ -264,6 +260,10 @@ public class Cache {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public DominionDTO getDominionByLoc(@NotNull Location loc) {
|
||||||
|
return dominion_trees.getLocInDominionDTO(loc);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 玩家退出时调用 用于清除玩家当前所在领地
|
* 玩家退出时调用 用于清除玩家当前所在领地
|
||||||
* 会将玩家当前所在领地设置为null
|
* 会将玩家当前所在领地设置为null
|
||||||
@ -343,28 +343,16 @@ public class Cache {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public DominionDTO getDominionByLoc(Location loc) {
|
public GroupDTO getGroup(@NotNull Integer id) {
|
||||||
return dominion_trees.getLocInDominionDTO(loc);
|
|
||||||
}
|
|
||||||
|
|
||||||
public GroupDTO getGroup(Integer id) {
|
|
||||||
return id_groups.get(id);
|
return id_groups.get(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
public MemberDTO getMember(@NotNull Player player, cn.lunadeer.dominion.api.dtos.@NotNull DominionDTO dominion) {
|
||||||
* 获取玩家在指定领地的特权
|
|
||||||
* 如果玩家不存在特权,则返回null
|
|
||||||
*
|
|
||||||
* @param player 玩家
|
|
||||||
* @param dominion 领地
|
|
||||||
* @return 特权表
|
|
||||||
*/
|
|
||||||
public MemberDTO getMember(Player player, DominionDTO dominion) {
|
|
||||||
if (!player_uuid_to_member.containsKey(player.getUniqueId())) return null;
|
if (!player_uuid_to_member.containsKey(player.getUniqueId())) return null;
|
||||||
return player_uuid_to_member.get(player.getUniqueId()).get(dominion.getId());
|
return player_uuid_to_member.get(player.getUniqueId()).get(dominion.getId());
|
||||||
}
|
}
|
||||||
|
|
||||||
public MemberDTO getMember(UUID player_uuid, DominionDTO dominion) {
|
public MemberDTO getMember(@NotNull UUID player_uuid, cn.lunadeer.dominion.api.dtos.@NotNull DominionDTO dominion) {
|
||||||
if (!player_uuid_to_member.containsKey(player_uuid)) return null;
|
if (!player_uuid_to_member.containsKey(player_uuid)) return null;
|
||||||
return player_uuid_to_member.get(player_uuid).get(dominion.getId());
|
return player_uuid_to_member.get(player_uuid).get(dominion.getId());
|
||||||
}
|
}
|
||||||
@ -383,10 +371,20 @@ public class Cache {
|
|||||||
return groups;
|
return groups;
|
||||||
}
|
}
|
||||||
|
|
||||||
public DominionDTO getDominion(Integer id) {
|
public DominionDTO getDominion(@NotNull Integer id) {
|
||||||
return id_dominions.get(id);
|
return id_dominions.get(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getPlayerName(UUID uuid) {
|
||||||
|
if (!player_name_cache.containsKey(uuid)) {
|
||||||
|
PlayerDTO playerDTO = PlayerDTO.select(uuid);
|
||||||
|
if (playerDTO != null) {
|
||||||
|
player_name_cache.put(uuid, playerDTO.getLastKnownName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return player_name_cache.getOrDefault(uuid, "Unknown");
|
||||||
|
}
|
||||||
|
|
||||||
public int getPlayerDominionCount(UUID player_uuid) {
|
public int getPlayerDominionCount(UUID player_uuid) {
|
||||||
int count = 0;
|
int count = 0;
|
||||||
for (DominionDTO dominion : id_dominions.values()) {
|
for (DominionDTO dominion : id_dominions.values()) {
|
||||||
@ -416,7 +414,7 @@ public class Cache {
|
|||||||
return residence_data.get(player_uuid);
|
return residence_data.get(player_uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<DominionDTO> getDominions() {
|
public @NotNull List<cn.lunadeer.dominion.api.dtos.DominionDTO> getAllDominions() {
|
||||||
return new ArrayList<>(id_dominions.values());
|
return new ArrayList<>(id_dominions.values());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -452,6 +450,7 @@ public class Cache {
|
|||||||
private static final long UPDATE_INTERVAL = 1000 * 4;
|
private static final long UPDATE_INTERVAL = 1000 * 4;
|
||||||
private boolean recheckPlayerState = false; // 是否需要重新检查玩家状态(发光、飞行)
|
private boolean recheckPlayerState = false; // 是否需要重新检查玩家状态(发光、飞行)
|
||||||
public final Map<UUID, LocalDateTime> NextTimeAllowTeleport = new java.util.HashMap<>();
|
public final Map<UUID, LocalDateTime> NextTimeAllowTeleport = new java.util.HashMap<>();
|
||||||
|
private final Map<UUID, String> player_name_cache = new HashMap<>();
|
||||||
|
|
||||||
private Map<UUID, List<ResMigration.ResidenceNode>> residence_data = null;
|
private Map<UUID, List<ResMigration.ResidenceNode>> residence_data = null;
|
||||||
|
|
||||||
@ -595,7 +594,7 @@ public class Cache {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public @Nullable GroupDTO getPlayerUsingGroupTitle(UUID uuid) {
|
public @Nullable GroupDTO getPlayerUsingGroupTitle(@NotNull UUID uuid) {
|
||||||
if (!Dominion.config.getGroupTitleEnable()) {
|
if (!Dominion.config.getGroupTitleEnable()) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -2,14 +2,18 @@ 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.dtos.PlayerDTO;
|
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||||
import cn.lunadeer.dominion.tuis.*;
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.DominionList;
|
import cn.lunadeer.dominion.uis.cuis.*;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.DominionManage;
|
import cn.lunadeer.dominion.uis.tuis.AllDominion;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.manage.EnvSetting;
|
import cn.lunadeer.dominion.uis.tuis.Menu;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.manage.GuestSetting;
|
import cn.lunadeer.dominion.uis.tuis.MigrateList;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.manage.SizeInfo;
|
import cn.lunadeer.dominion.uis.tuis.TitleList;
|
||||||
|
import cn.lunadeer.dominion.uis.tuis.dominion.DominionList;
|
||||||
|
import cn.lunadeer.dominion.uis.tuis.dominion.DominionManage;
|
||||||
|
import cn.lunadeer.dominion.uis.tuis.dominion.manage.EnvSetting;
|
||||||
|
import cn.lunadeer.dominion.uis.tuis.dominion.manage.GuestSetting;
|
||||||
|
import cn.lunadeer.dominion.uis.tuis.dominion.manage.SizeInfo;
|
||||||
import cn.lunadeer.dominion.utils.TuiUtils;
|
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;
|
||||||
@ -114,12 +118,15 @@ public class Commands implements TabExecutor {
|
|||||||
case "export_mca":
|
case "export_mca":
|
||||||
Operator.exportMca(sender, args);
|
Operator.exportMca(sender, args);
|
||||||
break;
|
break;
|
||||||
case "sys_config":
|
case "export_db":
|
||||||
SysConfig.show(sender, args);
|
Operator.exportDatabase(sender, args);
|
||||||
break;
|
break;
|
||||||
case "set_config":
|
case "import_db":
|
||||||
SetConfig.handler(sender, args);
|
Operator.importDatabase(sender, args);
|
||||||
break;
|
break;
|
||||||
|
// case "set_config":
|
||||||
|
// SetConfig.handler(sender, args);
|
||||||
|
// break;
|
||||||
case "all_dominion":
|
case "all_dominion":
|
||||||
AllDominion.show(sender, args);
|
AllDominion.show(sender, args);
|
||||||
break;
|
break;
|
||||||
@ -215,6 +222,9 @@ public class Commands implements TabExecutor {
|
|||||||
"reload_cache",
|
"reload_cache",
|
||||||
"reload_config",
|
"reload_config",
|
||||||
"export_mca",
|
"export_mca",
|
||||||
|
"export_db",
|
||||||
|
"import_db",
|
||||||
|
"version",
|
||||||
"sys_config",
|
"sys_config",
|
||||||
"all_dominion",
|
"all_dominion",
|
||||||
"set_map_color",
|
"set_map_color",
|
||||||
@ -237,9 +247,10 @@ public class Commands implements TabExecutor {
|
|||||||
case "help":
|
case "help":
|
||||||
case "list":
|
case "list":
|
||||||
case "sys_config":
|
case "sys_config":
|
||||||
|
return Collections.singletonList(Translation.Commands_PageOptional.trans());
|
||||||
case "create":
|
case "create":
|
||||||
case "auto_create":
|
case "auto_create":
|
||||||
return Collections.singletonList("输入领地名称");
|
return Collections.singletonList(Translation.Commands_DominionName.trans());
|
||||||
case "delete":
|
case "delete":
|
||||||
case "info":
|
case "info":
|
||||||
case "manage":
|
case "manage":
|
||||||
@ -254,16 +265,16 @@ public class Commands implements TabExecutor {
|
|||||||
return dominionFlags();
|
return dominionFlags();
|
||||||
case "expand":
|
case "expand":
|
||||||
case "contract":
|
case "contract":
|
||||||
return Collections.singletonList("大小(整数)");
|
return Collections.singletonList(Translation.Commands_SizeInteger.trans());
|
||||||
case "create_sub":
|
case "create_sub":
|
||||||
case "auto_create_sub":
|
case "auto_create_sub":
|
||||||
return Collections.singletonList("子领地名称");
|
return Collections.singletonList(Translation.Commands_SubDominionName.trans());
|
||||||
case "set_enter_msg":
|
case "set_enter_msg":
|
||||||
return Collections.singletonList("进入提示语内容");
|
return Collections.singletonList(Translation.Commands_EnterMessageContent.trans());
|
||||||
case "set_leave_msg":
|
case "set_leave_msg":
|
||||||
return Collections.singletonList("离开提示语内容");
|
return Collections.singletonList(Translation.Commands_LeaveMessageContent.trans());
|
||||||
case "set_map_color":
|
case "set_map_color":
|
||||||
return Collections.singletonList("输入颜色(16进制)");
|
return Collections.singletonList(Translation.Commands_InputColor.trans());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (args.length == 3) {
|
if (args.length == 3) {
|
||||||
@ -279,7 +290,7 @@ public class Commands implements TabExecutor {
|
|||||||
case "set_map_color":
|
case "set_map_color":
|
||||||
return playerDominions(sender);
|
return playerDominions(sender);
|
||||||
case "rename":
|
case "rename":
|
||||||
return Collections.singletonList("输入新领地名称");
|
return Collections.singletonList(Translation.Commands_NewDominionName.trans());
|
||||||
case "give":
|
case "give":
|
||||||
return playerNames();
|
return playerNames();
|
||||||
}
|
}
|
||||||
|
@ -3,8 +3,9 @@ package cn.lunadeer.dominion;
|
|||||||
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.managers.PlaceHolderApi;
|
||||||
import cn.lunadeer.dominion.utils.DynmapConnect;
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
import cn.lunadeer.dominion.utils.MapRender;
|
import cn.lunadeer.dominion.utils.map.DynmapConnect;
|
||||||
|
import cn.lunadeer.dominion.utils.map.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;
|
||||||
@ -38,14 +39,14 @@ public final class Dominion extends JavaPlugin {
|
|||||||
new Scheduler(this);
|
new Scheduler(this);
|
||||||
AutoClean.run();
|
AutoClean.run();
|
||||||
Cache.instance = new Cache();
|
Cache.instance = new Cache();
|
||||||
|
DominionInterface.instance = new DominionInterface();
|
||||||
|
|
||||||
if (config.getGroupTitleEnable()) {
|
|
||||||
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
|
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
|
||||||
new PlaceHolderApi(this);
|
new PlaceHolderApi(this);
|
||||||
} else {
|
|
||||||
XLogger.warn("未找到 PlaceholderAPI 插件,无法使用权限组组称号功能,已自动关闭");
|
|
||||||
config.setGroupTitleEnable(false);
|
|
||||||
}
|
}
|
||||||
|
if (config.getGroupTitleEnable() && !Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
|
||||||
|
XLogger.warn(Translation.Messages_PlaceholderAPINotFound);
|
||||||
|
config.setGroupTitleEnable(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
new EventsRegister(this);
|
new EventsRegister(this);
|
||||||
@ -67,8 +68,8 @@ public final class Dominion extends JavaPlugin {
|
|||||||
// SCUI 初始化
|
// SCUI 初始化
|
||||||
Bukkit.getPluginManager().registerEvents(new CuiManager(this), this);
|
Bukkit.getPluginManager().registerEvents(new CuiManager(this), this);
|
||||||
|
|
||||||
XLogger.info("领地插件已启动");
|
XLogger.info(Translation.Messages_PluginEnabled);
|
||||||
XLogger.info("版本:" + this.getDescription().getVersion());
|
XLogger.info(Translation.Messages_PluginVersion, this.getDescription().getVersion());
|
||||||
// http://patorjk.com/software/taag/#p=display&f=Big&t=Dominion
|
// http://patorjk.com/software/taag/#p=display&f=Big&t=Dominion
|
||||||
XLogger.info(" _____ _ _");
|
XLogger.info(" _____ _ _");
|
||||||
XLogger.info(" | __ \\ (_) (_)");
|
XLogger.info(" | __ \\ (_) (_)");
|
||||||
|
@ -0,0 +1,76 @@
|
|||||||
|
package cn.lunadeer.dominion;
|
||||||
|
|
||||||
|
import cn.lunadeer.dominion.api.DominionAPI;
|
||||||
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
|
import cn.lunadeer.dominion.dtos.Flag;
|
||||||
|
import cn.lunadeer.dominion.dtos.GroupDTO;
|
||||||
|
import cn.lunadeer.dominion.dtos.MemberDTO;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class DominionInterface implements DominionAPI {
|
||||||
|
|
||||||
|
public static DominionInterface instance;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DominionDTO getPlayerCurrentDominion(@NotNull Player player) {
|
||||||
|
return Cache.instance.getPlayerCurrentDominion(player);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DominionDTO getDominionByLoc(@NotNull Location loc) {
|
||||||
|
return Cache.instance.getDominionByLoc(loc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GroupDTO getGroup(@NotNull Integer id) {
|
||||||
|
return Cache.instance.getGroup(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MemberDTO getMember(@NotNull Player player, cn.lunadeer.dominion.api.dtos.@NotNull DominionDTO dominion) {
|
||||||
|
return Cache.instance.getMember(player.getUniqueId(), dominion);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MemberDTO getMember(@NotNull UUID player_uuid, cn.lunadeer.dominion.api.dtos.@NotNull DominionDTO dominion) {
|
||||||
|
return Cache.instance.getMember(player_uuid, dominion);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DominionDTO getDominion(@NotNull Integer id) {
|
||||||
|
return Cache.instance.getDominion(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull List<cn.lunadeer.dominion.api.dtos.DominionDTO> getAllDominions() {
|
||||||
|
return Cache.instance.getAllDominions();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable GroupDTO getPlayerUsingGroupTitle(@NotNull UUID uuid) {
|
||||||
|
return Cache.instance.getPlayerUsingGroupTitle(uuid);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull List<cn.lunadeer.dominion.api.dtos.Flag> getEnvironmentFlagsEnabled() {
|
||||||
|
return new ArrayList<>(Flag.getEnvironmentFlagsEnabled());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull List<cn.lunadeer.dominion.api.dtos.Flag> getPrivilegeFlagsEnabled() {
|
||||||
|
return new ArrayList<>(Flag.getPrivilegeFlagsEnabled());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public cn.lunadeer.dominion.api.dtos.@Nullable Flag getFlagByName(@NotNull String flagName) {
|
||||||
|
return Flag.getFlag(flagName);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,5 +1,6 @@
|
|||||||
package cn.lunadeer.dominion;
|
package cn.lunadeer.dominion;
|
||||||
|
|
||||||
|
import cn.lunadeer.minecraftpluginutils.Common;
|
||||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
@ -22,12 +23,22 @@ public class EventsRegister {
|
|||||||
registerEvents("cn.lunadeer.dominion.events_v1_21.PlayerEvents");
|
registerEvents("cn.lunadeer.dominion.events_v1_21.PlayerEvents");
|
||||||
registerEvents("cn.lunadeer.dominion.events_v1_21.EnvironmentEvents");
|
registerEvents("cn.lunadeer.dominion.events_v1_21.EnvironmentEvents");
|
||||||
registerEvents("cn.lunadeer.dominion.events_v1_21.SelectPointEvents");
|
registerEvents("cn.lunadeer.dominion.events_v1_21.SelectPointEvents");
|
||||||
|
if (Common.isPaper()) {
|
||||||
|
registerEvents("cn.lunadeer.dominion.events_v1_21.special.Paper");
|
||||||
|
} else {
|
||||||
|
registerEvents("cn.lunadeer.dominion.events_v1_21.special.Spigot");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case v1_20_1:
|
case v1_20_1:
|
||||||
XLogger.debug("Load API version: 1.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.PlayerEvents");
|
||||||
registerEvents("cn.lunadeer.dominion.events_v1_20_1.EnvironmentEvents");
|
registerEvents("cn.lunadeer.dominion.events_v1_20_1.EnvironmentEvents");
|
||||||
registerEvents("cn.lunadeer.dominion.events_v1_20_1.SelectPointEvents");
|
registerEvents("cn.lunadeer.dominion.events_v1_20_1.SelectPointEvents");
|
||||||
|
if (Common.isPaper()) {
|
||||||
|
registerEvents("cn.lunadeer.dominion.events_v1_20_1.special.Paper");
|
||||||
|
} else {
|
||||||
|
registerEvents("cn.lunadeer.dominion.events_v1_20_1.special.Spigot");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
} catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) {
|
} catch (ClassNotFoundException | IllegalAccessException | InstantiationException e) {
|
||||||
|
@ -3,8 +3,9 @@ package cn.lunadeer.dominion.commands;
|
|||||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||||
import cn.lunadeer.dominion.controllers.FlagsController;
|
import cn.lunadeer.dominion.controllers.FlagsController;
|
||||||
import cn.lunadeer.dominion.dtos.Flag;
|
import cn.lunadeer.dominion.dtos.Flag;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.manage.EnvSetting;
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.manage.GuestSetting;
|
import cn.lunadeer.dominion.uis.tuis.dominion.manage.EnvSetting;
|
||||||
|
import cn.lunadeer.dominion.uis.tuis.dominion.manage.GuestSetting;
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
|
||||||
@ -41,7 +42,7 @@ public class DominionFlag {
|
|||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
Notification.error(sender, "用法: /dominion set <权限名称> <true/false> [领地名称]");
|
Notification.error(sender, Translation.Commands_Dominion_SetFlagUsage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ 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.dtos.MemberDTO;
|
import cn.lunadeer.dominion.dtos.MemberDTO;
|
||||||
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
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.Teleport;
|
||||||
@ -39,12 +40,12 @@ public class DominionOperate {
|
|||||||
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 create <领地名称>");
|
Notification.error(sender, Translation.Commands_Dominion_CreateDominionUsage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Map<Integer, Location> points = Dominion.pointsSelect.get(player.getUniqueId());
|
Map<Integer, Location> points = Dominion.pointsSelect.get(player.getUniqueId());
|
||||||
if (points == null || points.get(0) == null || points.get(1) == null) {
|
if (points == null || points.get(0) == null || points.get(1) == null) {
|
||||||
Notification.error(sender, "请先使用工具选择领地的对角线两点,或使用 /dominion auto_create <领地名称> 创建自动领地");
|
Notification.error(sender, Translation.Commands_Dominion_CreateSelectPointsFirst);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String name = args[1];
|
String name = args[1];
|
||||||
@ -66,12 +67,12 @@ public class DominionOperate {
|
|||||||
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) {
|
||||||
Notification.error(sender, "用法: /dominion create_sub <子领地名称> [父领地名称]");
|
Notification.error(sender, Translation.Commands_Dominion_CreateSubDominionUsage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Map<Integer, Location> points = Dominion.pointsSelect.get(player.getUniqueId());
|
Map<Integer, Location> points = Dominion.pointsSelect.get(player.getUniqueId());
|
||||||
if (points == null || points.get(0) == null || points.get(1) == null) {
|
if (points == null || points.get(0) == null || points.get(1) == null) {
|
||||||
Notification.error(sender, "请先使用工具选择子领地的对角线两点,或使用 /dominion auto_create_sub <子领地名称> [父领地名称] 创建自动子领地");
|
Notification.error(sender, Translation.Commands_Dominion_CreateSubSelectPointsFirst);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(player);
|
||||||
@ -82,6 +83,8 @@ public class DominionOperate {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 自动创建领地
|
* 自动创建领地
|
||||||
* 会在玩家当前位置的周围创建一个领地
|
* 会在玩家当前位置的周围创建一个领地
|
||||||
@ -97,11 +100,11 @@ public class DominionOperate {
|
|||||||
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 auto_create <领地名称>");
|
Notification.error(sender, Translation.Commands_Dominion_AutoCreateDominionUsage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (Dominion.config.getAutoCreateRadius() < 0) {
|
if (Dominion.config.getAutoCreateRadius() < 0) {
|
||||||
Notification.error(sender, "自动创建领地功能已关闭");
|
Notification.error(sender, Translation.Commands_Dominion_AutoCreateDominionDisabled);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
autoPoints(player);
|
autoPoints(player);
|
||||||
@ -123,17 +126,19 @@ public class DominionOperate {
|
|||||||
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) {
|
||||||
Notification.error(sender, "用法: /dominion auto_create_sub <子领地名称> [父领地名称]");
|
Notification.error(sender, Translation.Commands_Dominion_AutoCreateSubDominionUsage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (Dominion.config.getAutoCreateRadius() < 0) {
|
if (Dominion.config.getAutoCreateRadius() < 0) {
|
||||||
Notification.error(sender, "自动创建领地功能已关闭");
|
Notification.error(sender, Translation.Commands_Dominion_AutoCreateDominionDisabled);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
autoPoints(player);
|
autoPoints(player);
|
||||||
createSubDominion(sender, args);
|
createSubDominion(sender, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 扩张领地
|
* 扩张领地
|
||||||
* /dominion expand [大小] [领地名称]
|
* /dominion expand [大小] [领地名称]
|
||||||
@ -148,7 +153,7 @@ public class DominionOperate {
|
|||||||
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) {
|
||||||
Notification.error(sender, "用法: /dominion expand [大小] [领地名称]");
|
Notification.error(sender, Translation.Commands_Dominion_ExpandDominionUsage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int size = 10;
|
int size = 10;
|
||||||
@ -156,11 +161,11 @@ public class DominionOperate {
|
|||||||
try {
|
try {
|
||||||
size = Integer.parseInt(args[1]);
|
size = Integer.parseInt(args[1]);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Notification.error(sender, "大小格式错误");
|
Notification.error(sender, Translation.Commands_Dominion_SizeShouldBeInteger);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (size <= 0) {
|
if (size <= 0) {
|
||||||
Notification.error(sender, "大小必须大于0");
|
Notification.error(sender, Translation.Commands_Dominion_SizeShouldBePositive);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (args.length == 3) {
|
if (args.length == 3) {
|
||||||
@ -188,7 +193,7 @@ public class DominionOperate {
|
|||||||
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) {
|
||||||
Notification.error(sender, "用法: /dominion contract [大小] [领地名称]");
|
Notification.error(sender, Translation.Commands_Dominion_ContractDominionUsage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int size = 10;
|
int size = 10;
|
||||||
@ -196,11 +201,11 @@ public class DominionOperate {
|
|||||||
try {
|
try {
|
||||||
size = Integer.parseInt(args[1]);
|
size = Integer.parseInt(args[1]);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Notification.error(sender, "大小格式错误");
|
Notification.error(sender, Translation.Commands_Dominion_SizeShouldBeInteger);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (size <= 0) {
|
if (size <= 0) {
|
||||||
Notification.error(sender, "大小必须大于0");
|
Notification.error(sender, Translation.Commands_Dominion_SizeShouldBePositive);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (args.length == 3) {
|
if (args.length == 3) {
|
||||||
@ -238,7 +243,7 @@ public class DominionOperate {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Notification.error(sender, "用法: /dominion delete <领地名称>");
|
Notification.error(sender, Translation.Commands_Dominion_DeleteDominionUsage);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -261,7 +266,7 @@ public class DominionOperate {
|
|||||||
DominionController.setJoinMessage(operator, args[1], args[2]);
|
DominionController.setJoinMessage(operator, args[1], args[2]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Notification.error(sender, "用法: /dominion set_enter_msg <提示语> [领地名称]");
|
Notification.error(sender, Translation.Commands_Dominion_SetEnterMessageUsage);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -284,7 +289,7 @@ public class DominionOperate {
|
|||||||
DominionController.setLeaveMessage(operator, args[1], args[2]);
|
DominionController.setLeaveMessage(operator, args[1], args[2]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Notification.error(sender, "用法: /dominion set_leave_msg <提示语> [领地名称]");
|
Notification.error(sender, Translation.Commands_Dominion_SetLeaveMessageUsage);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -312,7 +317,7 @@ public class DominionOperate {
|
|||||||
args[1]);
|
args[1]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Notification.error(sender, "用法: /dominion set_tp_location [领地名称]");
|
Notification.error(sender, Translation.Commands_Dominion_SetTpLocationUsage);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -328,7 +333,7 @@ public class DominionOperate {
|
|||||||
}
|
}
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
||||||
if (args.length != 3) {
|
if (args.length != 3) {
|
||||||
Notification.error(sender, "用法: /dominion rename <原领地名称> <新领地名称>");
|
Notification.error(sender, Translation.Commands_Dominion_RenameDominionUsage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
DominionController.rename(operator, args[1], args[2]);
|
DominionController.rename(operator, args[1], args[2]);
|
||||||
@ -360,7 +365,7 @@ public class DominionOperate {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Notification.error(sender, "用法: /dominion give <领地名称> <玩家名称>");
|
Notification.error(sender, Translation.Commands_Dominion_GiveDominionUsage);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -377,34 +382,34 @@ public class DominionOperate {
|
|||||||
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, Translation.Commands_Dominion_TpDominionUsage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
DominionDTO dominionDTO = DominionDTO.select(args[1]);
|
DominionDTO dominionDTO = DominionDTO.select(args[1]);
|
||||||
if (dominionDTO == null) {
|
if (dominionDTO == null) {
|
||||||
Notification.error(sender, "领地不存在");
|
Notification.error(sender, Translation.Commands_Dominion_DominionNotExist);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (player.isOp() && Dominion.config.getLimitOpBypass()) {
|
if (player.isOp() && Dominion.config.getLimitOpBypass()) {
|
||||||
Notification.warn(sender, "你是OP,将忽略领地传送限制");
|
Notification.warn(sender, Translation.Messages_OpBypassTpLimit);
|
||||||
Location location = dominionDTO.getTpLocation();
|
Location location = dominionDTO.getTpLocation();
|
||||||
if (location == null) {
|
if (location == null) {
|
||||||
int x = (dominionDTO.getX1() + dominionDTO.getX2()) / 2;
|
int x = (dominionDTO.getX1() + dominionDTO.getX2()) / 2;
|
||||||
int z = (dominionDTO.getZ1() + dominionDTO.getZ2()) / 2;
|
int z = (dominionDTO.getZ1() + dominionDTO.getZ2()) / 2;
|
||||||
World world = dominionDTO.getWorld();
|
World world = dominionDTO.getWorld();
|
||||||
if (world == null) {
|
if (world == null) {
|
||||||
Notification.error(sender, "领地所在世界不存在");
|
Notification.error(sender, Translation.Messages_WorldNotExist);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
location = new Location(world, x, player.getLocation().getY(), z);
|
location = new Location(world, x, player.getLocation().getY(), z);
|
||||||
XLogger.warn("领地 %s 没有设置传送点,将尝试传送到中心点", dominionDTO.getName());
|
XLogger.warn(Translation.Messages_NoTpLocation, dominionDTO.getName());
|
||||||
}
|
}
|
||||||
Teleport.doTeleportSafely(player, location);
|
Teleport.doTeleportSafely(player, location);
|
||||||
Notification.info(player, "已将你传送到 " + dominionDTO.getName());
|
Notification.info(player, Translation.Messages_TpToDominion, dominionDTO.getName());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!Dominion.config.getTpEnable()) {
|
if (!Dominion.config.getTpEnable()) {
|
||||||
Notification.error(sender, "管理员没有开启领地传送功能");
|
Notification.error(sender, Translation.Messages_TpDisabled);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -412,19 +417,19 @@ public class DominionOperate {
|
|||||||
if (!canByPass(player, dominionDTO, privilegeDTO)) {
|
if (!canByPass(player, dominionDTO, privilegeDTO)) {
|
||||||
if (privilegeDTO == null) {
|
if (privilegeDTO == null) {
|
||||||
if (!dominionDTO.getFlagValue(Flag.TELEPORT)) {
|
if (!dominionDTO.getFlagValue(Flag.TELEPORT)) {
|
||||||
Notification.error(sender, "此领地禁止传送");
|
Notification.error(sender, Translation.Messages_DominionNoTp);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
GroupDTO groupDTO = Cache.instance.getGroup(privilegeDTO.getGroupId());
|
GroupDTO groupDTO = Cache.instance.getGroup(privilegeDTO.getGroupId());
|
||||||
if (privilegeDTO.getGroupId() != -1 && groupDTO != null) {
|
if (privilegeDTO.getGroupId() != -1 && groupDTO != null) {
|
||||||
if (!groupDTO.getFlagValue(Flag.TELEPORT)) {
|
if (!groupDTO.getFlagValue(Flag.TELEPORT)) {
|
||||||
Notification.error(sender, "你所在的权限组组不被允许传送到这个领地");
|
Notification.error(sender, Translation.Messages_GroupNoTp);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (!privilegeDTO.getFlagValue(Flag.TELEPORT)) {
|
if (!privilegeDTO.getFlagValue(Flag.TELEPORT)) {
|
||||||
Notification.error(sender, "你不被允许传送到这个领地");
|
Notification.error(sender, Translation.Messages_PrivilegeNoTp);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -436,19 +441,19 @@ public class DominionOperate {
|
|||||||
if (next_time != null) {
|
if (next_time != null) {
|
||||||
if (now.isBefore(next_time)) {
|
if (now.isBefore(next_time)) {
|
||||||
long secs_until_next = now.until(next_time, java.time.temporal.ChronoUnit.SECONDS);
|
long secs_until_next = now.until(next_time, java.time.temporal.ChronoUnit.SECONDS);
|
||||||
Notification.error(player, "请等待 %d 秒后再传送", secs_until_next);
|
Notification.error(player, Translation.Messages_TpCoolDown, secs_until_next);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (Dominion.config.getTpDelay() > 0) {
|
if (Dominion.config.getTpDelay() > 0) {
|
||||||
Notification.info(player, "传送将在 %d 秒后执行", Dominion.config.getTpDelay());
|
Notification.info(player, Translation.Messages_TpDelay, Dominion.config.getTpDelay());
|
||||||
Scheduler.runTaskAsync(() -> {
|
Scheduler.runTaskAsync(() -> {
|
||||||
int i = Dominion.config.getTpDelay();
|
int i = Dominion.config.getTpDelay();
|
||||||
while (i > 0) {
|
while (i > 0) {
|
||||||
if (!player.isOnline()) {
|
if (!player.isOnline()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Notification.actionBar(player, "传送倒计时 %d 秒", i);
|
Notification.actionBar(player, Translation.Messages_TpCountDown, i);
|
||||||
i--;
|
i--;
|
||||||
try {
|
try {
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
@ -465,22 +470,22 @@ public class DominionOperate {
|
|||||||
int center_z = (dominionDTO.getZ1() + dominionDTO.getZ2()) / 2;
|
int center_z = (dominionDTO.getZ1() + dominionDTO.getZ2()) / 2;
|
||||||
World world = dominionDTO.getWorld();
|
World world = dominionDTO.getWorld();
|
||||||
if (world == null) {
|
if (world == null) {
|
||||||
Notification.error(player, "领地所在世界不存在");
|
Notification.error(player, Translation.Messages_WorldNotExist);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (location == null) {
|
if (location == null) {
|
||||||
location = new Location(world, center_x, player.getLocation().getY(), center_z);
|
location = new Location(world, center_x, player.getLocation().getY(), center_z);
|
||||||
Notification.warn(player, "领地 %s 没有设置传送点,将尝试传送到中心点", dominionDTO.getName());
|
Notification.warn(player, Translation.Messages_NoTpLocation, dominionDTO.getName());
|
||||||
} else if (!isInDominion(dominionDTO, location)) {
|
} else if (!isInDominion(dominionDTO, location)) {
|
||||||
location = new Location(world, center_x, player.getLocation().getY(), center_z);
|
location = new Location(world, center_x, player.getLocation().getY(), center_z);
|
||||||
Notification.warn(player, "领地 %s 传送点不在领地内,将尝试传送到中心点", dominionDTO.getName());
|
Notification.warn(player, Translation.Messages_TpLocationNotInside, dominionDTO.getName());
|
||||||
}
|
}
|
||||||
if (player.isOnline()) {
|
if (player.isOnline()) {
|
||||||
Teleport.doTeleportSafely(player, location).thenAccept(b -> {
|
Teleport.doTeleportSafely(player, location).thenAccept(b -> {
|
||||||
if (b) {
|
if (b) {
|
||||||
Notification.info(player, "已将你传送到 " + dominionDTO.getName());
|
Notification.info(player, Translation.Messages_TpToDominion, dominionDTO.getName());
|
||||||
} else {
|
} else {
|
||||||
Notification.error(player, "传送失败,请重试");
|
Notification.error(player, Translation.Messages_TpFailed);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -498,7 +503,7 @@ public class DominionOperate {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (args.length < 2) {
|
if (args.length < 2) {
|
||||||
Notification.error(sender, "用法: /dominion set_map_color <颜色> [领地名称]");
|
Notification.error(sender, Translation.Commands_Dominion_SetMapColorUsage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
||||||
@ -508,4 +513,5 @@ public class DominionOperate {
|
|||||||
DominionController.setMapColor(operator, args[1], args[2]);
|
DominionController.setMapColor(operator, args[1], args[2]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,9 +2,10 @@ package cn.lunadeer.dominion.commands;
|
|||||||
|
|
||||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||||
import cn.lunadeer.dominion.controllers.GroupController;
|
import cn.lunadeer.dominion.controllers.GroupController;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.manage.group.GroupList;
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.manage.group.GroupSetting;
|
import cn.lunadeer.dominion.uis.tuis.dominion.manage.group.GroupList;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.manage.group.SelectMember;
|
import cn.lunadeer.dominion.uis.tuis.dominion.manage.group.GroupSetting;
|
||||||
|
import cn.lunadeer.dominion.uis.tuis.dominion.manage.group.SelectMember;
|
||||||
import cn.lunadeer.minecraftpluginutils.ColorParser;
|
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;
|
||||||
@ -34,7 +35,7 @@ public class Group {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (args.length < 4) {
|
if (args.length < 4) {
|
||||||
Notification.error(sender, "用法: /dominion group create <领地名称> <权限组名称>");
|
Notification.error(sender, Translation.Commands_Group_CreateGroupUsage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
||||||
@ -59,7 +60,7 @@ public class Group {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (args.length < 4) {
|
if (args.length < 4) {
|
||||||
Notification.error(sender, "用法: /dominion group delete <领地名称> <权限组名称>");
|
Notification.error(sender, Translation.Commands_Group_DeleteGroupUsage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
||||||
@ -84,7 +85,7 @@ public class Group {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (args.length < 5) {
|
if (args.length < 5) {
|
||||||
Notification.error(sender, "用法: /dominion group rename <领地名称> <权限组旧名称> <新名称>");
|
Notification.error(sender, Translation.Commands_Group_RenameGroupUsage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
||||||
@ -110,7 +111,7 @@ public class Group {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (args.length < 6) {
|
if (args.length < 6) {
|
||||||
Notification.error(sender, "用法: /dominion group set_flag <领地名称> <权限组名称> <权限名称> <true|false>");
|
Notification.error(sender, Translation.Commands_Group_SetGroupFlagUsage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
||||||
@ -138,7 +139,7 @@ public class Group {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (args.length < 5) {
|
if (args.length < 5) {
|
||||||
Notification.error(sender, "用法: /dominion group add_member <领地名称> <权限组名称> <玩家名称>");
|
Notification.error(sender, Translation.Commands_Group_AddGroupMemberUsage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
||||||
@ -165,7 +166,7 @@ public class Group {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (args.length < 5) {
|
if (args.length < 5) {
|
||||||
Notification.error(sender, "用法: /dominion group remove_member <领地名称> <权限组名称> <玩家名称>");
|
Notification.error(sender, Translation.Commands_Group_RemoveGroupMemberUsage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
||||||
@ -182,7 +183,7 @@ 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) {
|
if (args.length < 2) {
|
||||||
Notification.error(sender, "用法: /dominion group <create|delete|rename|set_flag|add_member|remove_member|select_member|setting|list>");
|
Notification.error(sender, Translation.Commands_Group_GroupUsage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
switch (args[1]) {
|
switch (args[1]) {
|
||||||
@ -238,7 +239,7 @@ public class Group {
|
|||||||
if (args.length == 4) {
|
if (args.length == 4) {
|
||||||
switch (args[1]) {
|
switch (args[1]) {
|
||||||
case "create":
|
case "create":
|
||||||
return Collections.singletonList("新权限组名称");
|
return Collections.singletonList(Translation.Commands_Group_NewGroupName.trans());
|
||||||
case "delete":
|
case "delete":
|
||||||
case "rename":
|
case "rename":
|
||||||
case "set_flag":
|
case "set_flag":
|
||||||
@ -252,7 +253,7 @@ public class Group {
|
|||||||
if (args.length == 5) {
|
if (args.length == 5) {
|
||||||
switch (args[1]) {
|
switch (args[1]) {
|
||||||
case "rename":
|
case "rename":
|
||||||
return Collections.singletonList("权限组新名称");
|
return Collections.singletonList(Translation.Commands_Group_NewGroupName.trans());
|
||||||
case "set_flag":
|
case "set_flag":
|
||||||
return playerPrivileges();
|
return playerPrivileges();
|
||||||
case "remove_member":
|
case "remove_member":
|
||||||
|
@ -44,7 +44,7 @@ public class Helper {
|
|||||||
if (dominion == null) return groups_name;
|
if (dominion == null) return groups_name;
|
||||||
List<GroupDTO> groups = GroupDTO.selectByDominionId(dominion.getId());
|
List<GroupDTO> groups = GroupDTO.selectByDominionId(dominion.getId());
|
||||||
for (GroupDTO group : groups) {
|
for (GroupDTO group : groups) {
|
||||||
groups_name.add(group.getName());
|
groups_name.add(group.getNamePlain());
|
||||||
}
|
}
|
||||||
return groups_name;
|
return groups_name;
|
||||||
}
|
}
|
||||||
|
@ -2,10 +2,11 @@ package cn.lunadeer.dominion.commands;
|
|||||||
|
|
||||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||||
import cn.lunadeer.dominion.controllers.MemberController;
|
import cn.lunadeer.dominion.controllers.MemberController;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.manage.member.MemberList;
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.manage.member.MemberSetting;
|
import cn.lunadeer.dominion.uis.tuis.dominion.manage.member.MemberList;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.manage.member.SelectPlayer;
|
import cn.lunadeer.dominion.uis.tuis.dominion.manage.member.MemberSetting;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.manage.member.SelectTemplate;
|
import cn.lunadeer.dominion.uis.tuis.dominion.manage.member.SelectPlayer;
|
||||||
|
import cn.lunadeer.dominion.uis.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.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@ -35,7 +36,7 @@ public class Member {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (args.length < 4) {
|
if (args.length < 4) {
|
||||||
Notification.error(sender, "用法: /dominion member add <领地名称> <玩家名称>");
|
Notification.error(sender, Translation.Commands_Member_DominionAddMemberUsage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
||||||
@ -61,7 +62,7 @@ public class Member {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (args.length < 6) {
|
if (args.length < 6) {
|
||||||
Notification.error(sender, "用法: /dominion member set_flag <领地名称> <玩家名称> <权限名称> <true/false>");
|
Notification.error(sender, Translation.Commands_Member_DominionSetFlagUsage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
||||||
@ -90,7 +91,7 @@ public class Member {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (args.length < 4) {
|
if (args.length < 4) {
|
||||||
Notification.error(sender, "用法: /dominion member remove <领地名称> <玩家名称>");
|
Notification.error(sender, Translation.Commands_Member_DominionRemoveMemberUsage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
||||||
@ -116,7 +117,7 @@ public class Member {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (args.length < 5) {
|
if (args.length < 5) {
|
||||||
Notification.error(sender, "用法: /dominion member apply_template <领地名称> <玩家名称> <模板名称>");
|
Notification.error(sender, Translation.Commands_Member_DominionApplyTemplateUsage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
BukkitPlayerOperator operator = BukkitPlayerOperator.create(sender);
|
||||||
@ -132,7 +133,7 @@ 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) {
|
if (args.length < 2) {
|
||||||
Notification.error(sender, "用法: /dominion member <add/set_flag/remove/apply_template/list/setting/select_player/select_template>");
|
Notification.error(sender, Translation.Commands_Member_MemberUsage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
switch (args[1]) {
|
switch (args[1]) {
|
||||||
@ -191,7 +192,7 @@ public class Member {
|
|||||||
case "select_player":
|
case "select_player":
|
||||||
return playerNames();
|
return playerNames();
|
||||||
case "list":
|
case "list":
|
||||||
return Collections.singletonList("页码(可选)");
|
return Collections.singletonList(Translation.Commands_PageOptional.trans());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (args.length == 5) {
|
if (args.length == 5) {
|
||||||
@ -202,7 +203,7 @@ public class Member {
|
|||||||
return allTemplates(sender);
|
return allTemplates(sender);
|
||||||
case "setting":
|
case "setting":
|
||||||
case "select_template":
|
case "select_template":
|
||||||
return Collections.singletonList("页码(可选)");
|
return Collections.singletonList(Translation.Commands_PageOptional.trans());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (args.length == 6) {
|
if (args.length == 6) {
|
||||||
|
@ -5,7 +5,8 @@ import cn.lunadeer.dominion.Dominion;
|
|||||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||||
import cn.lunadeer.dominion.controllers.DominionController;
|
import cn.lunadeer.dominion.controllers.DominionController;
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
import cn.lunadeer.dominion.tuis.MigrateList;
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
|
import cn.lunadeer.dominion.uis.tuis.MigrateList;
|
||||||
import cn.lunadeer.dominion.utils.ResMigration;
|
import cn.lunadeer.dominion.utils.ResMigration;
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@ -28,27 +29,27 @@ public class Migration {
|
|||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
|
|
||||||
if (!Dominion.config.getResidenceMigration()) {
|
if (!Dominion.config.getResidenceMigration()) {
|
||||||
Notification.error(sender, "Residence 迁移功能没有开启");
|
Notification.error(sender, Translation.Commands_Residence_MigrationDisabled);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args.length < 2) {
|
if (args.length < 2) {
|
||||||
Notification.error(sender, "用法: /dominion migrate <res领地名称>");
|
Notification.error(sender, Translation.Commands_Residence_MigrateUsage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
String resName = args[1];
|
String resName = args[1];
|
||||||
List<ResMigration.ResidenceNode> res_data = Cache.instance.getResidenceData(player.getUniqueId());
|
List<ResMigration.ResidenceNode> res_data = Cache.instance.getResidenceData(player.getUniqueId());
|
||||||
if (res_data == null) {
|
if (res_data == null) {
|
||||||
Notification.error(sender, "你没有可迁移的数据");
|
Notification.error(sender, Translation.Commands_Residence_NoMigrationData);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ResMigration.ResidenceNode resNode = res_data.stream().filter(node -> node.name.equals(resName)).findFirst().orElse(null);
|
ResMigration.ResidenceNode resNode = res_data.stream().filter(node -> node.name.equals(resName)).findFirst().orElse(null);
|
||||||
if (resNode == null) {
|
if (resNode == null) {
|
||||||
Notification.error(sender, "未找到指定的 Residence 领地");
|
Notification.error(sender, Translation.Commands_Residence_NoResidenceDominion);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!resNode.owner.equals(player.getUniqueId())) {
|
if (!resNode.owner.equals(player.getUniqueId())) {
|
||||||
Notification.error(sender, "你不是该领地的所有者,无法迁移此领地");
|
Notification.error(sender, Translation.Commands_Residence_ResidenceNotOwner);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
create(player, resNode, "");
|
create(player, resNode, "");
|
||||||
@ -60,7 +61,7 @@ public class Migration {
|
|||||||
MigrateList.show(sender, newArgs);
|
MigrateList.show(sender, newArgs);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Notification.error(sender, "迁移失败: " + e.getMessage());
|
Notification.error(sender, Translation.Commands_Residence_MigrateFailed, e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,7 +79,7 @@ public class Migration {
|
|||||||
for (String msg : result.getMessages()) {
|
for (String msg : result.getMessages()) {
|
||||||
Notification.info(player, msg);
|
Notification.info(player, msg);
|
||||||
}
|
}
|
||||||
Notification.info(player, "领地 " + node.name + " 已从 Residence 迁移至 Dominion");
|
Notification.info(player, Translation.Commands_Residence_MigrateSuccess, node.name);
|
||||||
if (node.children != null) {
|
if (node.children != null) {
|
||||||
for (ResMigration.ResidenceNode child : node.children) {
|
for (ResMigration.ResidenceNode child : node.children) {
|
||||||
create(player, child, node.name);
|
create(player, child, node.name);
|
||||||
|
@ -2,8 +2,10 @@ package cn.lunadeer.dominion.commands;
|
|||||||
|
|
||||||
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.api.dtos.DominionDTO;
|
||||||
import cn.lunadeer.dominion.utils.MapRender;
|
import cn.lunadeer.dominion.managers.DatabaseTables;
|
||||||
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
|
import cn.lunadeer.dominion.utils.map.MapRender;
|
||||||
import cn.lunadeer.minecraftpluginutils.GiteaReleaseCheck;
|
import cn.lunadeer.minecraftpluginutils.GiteaReleaseCheck;
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
import cn.lunadeer.minecraftpluginutils.Scheduler;
|
import cn.lunadeer.minecraftpluginutils.Scheduler;
|
||||||
@ -28,19 +30,19 @@ public class Operator {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Scheduler.runTaskAsync(() -> {
|
Scheduler.runTaskAsync(() -> {
|
||||||
Notification.info(sender, "正在从数据库重新加载领地缓存...");
|
Notification.info(sender, Translation.Commands_Operator_ReloadingDominionCache);
|
||||||
Cache.instance.loadDominions();
|
Cache.instance.loadDominions();
|
||||||
Notification.info(sender, "领地缓存已重新加载");
|
Notification.info(sender, Translation.Commands_Operator_ReloadedDominionCache);
|
||||||
});
|
});
|
||||||
Scheduler.runTaskAsync(() -> {
|
Scheduler.runTaskAsync(() -> {
|
||||||
Notification.info(sender, "正在从数据库重新加载玩家权限缓存...");
|
Notification.info(sender, Translation.Commands_Operator_ReloadingPrivilegeCache);
|
||||||
Cache.instance.loadMembers();
|
Cache.instance.loadMembers();
|
||||||
Notification.info(sender, "玩家权限缓存已重新加载");
|
Notification.info(sender, Translation.Commands_Operator_ReloadedPrivilegeCache);
|
||||||
});
|
});
|
||||||
Scheduler.runTaskAsync(() -> {
|
Scheduler.runTaskAsync(() -> {
|
||||||
Notification.info(sender, "正在从数据库重新加载权限组缓存...");
|
Notification.info(sender, Translation.Commands_Operator_ReloadingGroupCache);
|
||||||
Cache.instance.loadGroups();
|
Cache.instance.loadGroups();
|
||||||
Notification.info(sender, "权限组缓存已重新加载");
|
Notification.info(sender, Translation.Commands_Operator_ReloadedGroupCache);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -49,9 +51,9 @@ public class Operator {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Scheduler.runTaskAsync(() -> {
|
Scheduler.runTaskAsync(() -> {
|
||||||
Notification.info(sender, "正在导出拥有领地的MCA文件列表...");
|
Notification.info(sender, Translation.Commands_Operator_ExportingMCAList);
|
||||||
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.getAllDominions();
|
||||||
for (DominionDTO dom : doms) {
|
for (DominionDTO dom : doms) {
|
||||||
if (dom.getWorld() == null) {
|
if (dom.getWorld() == null) {
|
||||||
continue;
|
continue;
|
||||||
@ -81,42 +83,42 @@ public class Operator {
|
|||||||
if (!folder.exists()) {
|
if (!folder.exists()) {
|
||||||
boolean success = folder.mkdirs();
|
boolean success = folder.mkdirs();
|
||||||
if (!success) {
|
if (!success) {
|
||||||
Notification.error(sender, "创建导出文件夹失败");
|
Notification.error(sender, Translation.Commands_Operator_CreateExportFolderFailed);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (String world : mca_cords.keySet()) {
|
for (String world : mca_cords.keySet()) {
|
||||||
File file = new File(folder, world + ".txt");
|
File file = new File(folder, world + ".txt");
|
||||||
Notification.info(sender, "正在导出 %s 的MCA文件列表...", world);
|
Notification.info(sender, Translation.Commands_Operator_ExportingMCAListForWorld, world);
|
||||||
try {
|
try {
|
||||||
if (file.exists()) {
|
if (file.exists()) {
|
||||||
boolean success = file.delete();
|
boolean success = file.delete();
|
||||||
if (!success) {
|
if (!success) {
|
||||||
Notification.error(sender, "删除 %s 的MCA文件列表失败", world);
|
Notification.error(sender, Translation.Commands_Operator_DeleteMCAListFailed, world);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
boolean success = file.createNewFile();
|
boolean success = file.createNewFile();
|
||||||
if (!success) {
|
if (!success) {
|
||||||
Notification.error(sender, "创建 %s 的MCA文件列表失败", world);
|
Notification.error(sender, Translation.Commands_Operator_CreateMCAListFailed, world);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
List<String> cords = mca_cords.get(world);
|
List<String> cords = mca_cords.get(world);
|
||||||
for (String cord : cords) {
|
for (String cord : cords) {
|
||||||
XLogger.debug("正在写入 %s...", cord);
|
XLogger.debug("Writing %s...", cord);
|
||||||
try {
|
try {
|
||||||
java.nio.file.Files.write(file.toPath(), (cord + "\n").getBytes(), java.nio.file.StandardOpenOption.APPEND);
|
java.nio.file.Files.write(file.toPath(), (cord + "\n").getBytes(), java.nio.file.StandardOpenOption.APPEND);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Notification.error(sender, "写入 %s 失败", cord);
|
Notification.error(sender, Translation.Commands_Operator_WriteMCAListFailed, cord);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Notification.error(sender, "导出 %s 的MCA文件列表失败", world);
|
Notification.error(sender, Translation.Commands_Operator_ExportMCAListFailed, world);
|
||||||
Notification.error(sender, e.getMessage());
|
Notification.error(sender, e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
MapRender.renderMCA(mca_cords);
|
MapRender.renderMCA(mca_cords);
|
||||||
Notification.info(sender, "MCA文件列表已导出到 %s", folder.getAbsolutePath());
|
Notification.info(sender, Translation.Commands_Operator_ExportedMCAList, folder.getAbsolutePath());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -125,7 +127,7 @@ public class Operator {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Scheduler.runTaskAsync(() -> {
|
Scheduler.runTaskAsync(() -> {
|
||||||
Notification.info(sender, "正在重新加载配置文件...");
|
Notification.info(sender, Translation.Commands_Operator_ReloadingConfig);
|
||||||
Dominion.config.reload();
|
Dominion.config.reload();
|
||||||
DatabaseManager.instance.reConnection(
|
DatabaseManager.instance.reConnection(
|
||||||
DatabaseType.valueOf(Dominion.config.getDbType().toUpperCase()),
|
DatabaseType.valueOf(Dominion.config.getDbType().toUpperCase()),
|
||||||
@ -135,10 +137,46 @@ public class Operator {
|
|||||||
Dominion.config.getDbUser(),
|
Dominion.config.getDbUser(),
|
||||||
Dominion.config.getDbPass()
|
Dominion.config.getDbPass()
|
||||||
);
|
);
|
||||||
Notification.info(sender, "配置文件已重新加载");
|
Notification.info(sender, Translation.Commands_Operator_ReloadedConfig);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导出数据库
|
||||||
|
* /dominion export_db [confirm]
|
||||||
|
*
|
||||||
|
* @param sender 发送者
|
||||||
|
* @param args 参数
|
||||||
|
*/
|
||||||
|
public static void exportDatabase(CommandSender sender, String[] args) {
|
||||||
|
if (!hasPermission(sender, "dominion.admin")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (args.length != 2 || !args[1].equals("confirm")) {
|
||||||
|
Notification.warn(sender, Translation.Commands_Operator_ExportDBConfirm);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
DatabaseTables.Export(sender);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 导入数据库
|
||||||
|
* /dominion import_db [confirm]
|
||||||
|
*
|
||||||
|
* @param sender 发送者
|
||||||
|
* @param args 参数
|
||||||
|
*/
|
||||||
|
public static void importDatabase(CommandSender sender, String[] args) {
|
||||||
|
if (!hasPermission(sender, "dominion.admin")) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (args.length != 2 || !args[1].equals("confirm")) {
|
||||||
|
Notification.warn(sender, Translation.Commands_Operator_ImportDBConfirm);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
DatabaseTables.Import(sender);
|
||||||
|
}
|
||||||
|
|
||||||
public static void version(CommandSender sender, String[] args) {
|
public static void version(CommandSender sender, String[] args) {
|
||||||
if (!hasPermission(sender, "dominion.admin")) {
|
if (!hasPermission(sender, "dominion.admin")) {
|
||||||
return;
|
return;
|
||||||
|
@ -1,279 +0,0 @@
|
|||||||
package cn.lunadeer.dominion.commands;
|
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Dominion;
|
|
||||||
import cn.lunadeer.dominion.tuis.SysConfig;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.hasPermission;
|
|
||||||
|
|
||||||
public class SetConfig {
|
|
||||||
|
|
||||||
public static void handler(CommandSender sender, String[] args) {
|
|
||||||
if (!hasPermission(sender, "dominion.admin")) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (args.length < 2) {
|
|
||||||
Notification.error(sender, "参数错误");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
switch (args[1]) {
|
|
||||||
case "auto_create_radius":
|
|
||||||
setAutoCreateRadius(sender, args);
|
|
||||||
break;
|
|
||||||
case "limit_max_y":
|
|
||||||
setLimitMaxY(sender, args);
|
|
||||||
break;
|
|
||||||
case "limit_min_y":
|
|
||||||
setLimitMinY(sender, args);
|
|
||||||
break;
|
|
||||||
case "limit_size_x":
|
|
||||||
setLimitSizeX(sender, args);
|
|
||||||
break;
|
|
||||||
case "limit_size_z":
|
|
||||||
setLimitSizeZ(sender, args);
|
|
||||||
break;
|
|
||||||
case "limit_size_y":
|
|
||||||
setLimitSizeY(sender, args);
|
|
||||||
break;
|
|
||||||
case "limit_amount":
|
|
||||||
setLimitAmount(sender, args);
|
|
||||||
break;
|
|
||||||
case "limit_depth":
|
|
||||||
setLimitDepth(sender, args);
|
|
||||||
break;
|
|
||||||
case "limit_vert":
|
|
||||||
setLimitVert(sender, args);
|
|
||||||
break;
|
|
||||||
case "limit_op_bypass":
|
|
||||||
setLimitOpBypass(sender, args);
|
|
||||||
break;
|
|
||||||
case "tp_enable":
|
|
||||||
setTpEnable(sender, args);
|
|
||||||
break;
|
|
||||||
case "tp_delay":
|
|
||||||
setTpDelay(sender, args);
|
|
||||||
break;
|
|
||||||
case "tp_cool_down":
|
|
||||||
setTpCoolDown(sender, args);
|
|
||||||
break;
|
|
||||||
case "economy_enable":
|
|
||||||
setEconomyEnable(sender, args);
|
|
||||||
break;
|
|
||||||
case "economy_price":
|
|
||||||
setEconomyPrice(sender, args);
|
|
||||||
break;
|
|
||||||
case "economy_only_xz":
|
|
||||||
setEconomyOnlyXZ(sender, args);
|
|
||||||
break;
|
|
||||||
case "economy_refund":
|
|
||||||
setEconomyRefund(sender, args);
|
|
||||||
break;
|
|
||||||
case "residence_migration":
|
|
||||||
setResidenceMigration(sender, args);
|
|
||||||
break;
|
|
||||||
case "spawn_protection":
|
|
||||||
setSpawnProtection(sender, args);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
Notification.error(sender, "未知参数");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void refreshPageOrNot(CommandSender sender, String[] args) {
|
|
||||||
if (args.length == 4) {
|
|
||||||
int page = Integer.parseInt(args[3]);
|
|
||||||
String[] newArgs = new String[2];
|
|
||||||
newArgs[0] = "config";
|
|
||||||
newArgs[1] = String.valueOf(page);
|
|
||||||
SysConfig.show(sender, newArgs);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void setAutoCreateRadius(CommandSender sender, String[] args) {
|
|
||||||
int size = Integer.parseInt(args[2]);
|
|
||||||
if (size < 2) {
|
|
||||||
Dominion.config.setAutoCreateRadius(2);
|
|
||||||
Notification.error(sender, "自动创建半径不能小于2");
|
|
||||||
} else {
|
|
||||||
Dominion.config.setAutoCreateRadius(size);
|
|
||||||
}
|
|
||||||
refreshPageOrNot(sender, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void adjustSizeY() {
|
|
||||||
if (Dominion.config.getLimitVert(null)) {
|
|
||||||
Dominion.config.setLimitSizeY(Dominion.config.getLimitMaxY(null) - Dominion.config.getLimitMinY(null) + 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void setLimitMaxY(CommandSender sender, String[] args) {
|
|
||||||
int maxY = Integer.parseInt(args[2]);
|
|
||||||
if (maxY <= Dominion.config.getLimitMinY(null)) {
|
|
||||||
Notification.error(sender, "最高Y坐标限制不能小于最低Y坐标限制");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Dominion.config.setLimitMaxY(maxY);
|
|
||||||
adjustSizeY();
|
|
||||||
refreshPageOrNot(sender, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void setLimitMinY(CommandSender sender, String[] args) {
|
|
||||||
int minY = Integer.parseInt(args[2]);
|
|
||||||
if (minY >= Dominion.config.getLimitMaxY(null)) {
|
|
||||||
Notification.error(sender, "最低Y坐标限制不能大于最高Y坐标限制");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Dominion.config.setLimitMinY(minY);
|
|
||||||
adjustSizeY();
|
|
||||||
refreshPageOrNot(sender, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void setLimitSizeX(CommandSender sender, String[] args) {
|
|
||||||
int sizeX = Integer.parseInt(args[2]);
|
|
||||||
if (sizeX != -1 && sizeX < 4) {
|
|
||||||
Dominion.config.setLimitSizeX(4);
|
|
||||||
Notification.error(sender, "X轴(东西)最大尺寸不能小于4");
|
|
||||||
} else {
|
|
||||||
Dominion.config.setLimitSizeX(sizeX);
|
|
||||||
}
|
|
||||||
refreshPageOrNot(sender, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void setLimitSizeZ(CommandSender sender, String[] args) {
|
|
||||||
int sizeZ = Integer.parseInt(args[2]);
|
|
||||||
if (sizeZ != -1 && sizeZ < 4) {
|
|
||||||
Dominion.config.setLimitSizeZ(4);
|
|
||||||
Notification.error(sender, "Z轴(南北)最大尺寸不能小于4");
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
Dominion.config.setLimitSizeZ(sizeZ);
|
|
||||||
}
|
|
||||||
refreshPageOrNot(sender, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void setLimitSizeY(CommandSender sender, String[] args) {
|
|
||||||
int sizeY = Integer.parseInt(args[2]);
|
|
||||||
if (sizeY != -1 && sizeY < 4) {
|
|
||||||
Dominion.config.setLimitSizeY(4);
|
|
||||||
Notification.error(sender, "Y轴(垂直)最大尺寸不能小于4");
|
|
||||||
} else {
|
|
||||||
Dominion.config.setLimitSizeY(sizeY);
|
|
||||||
}
|
|
||||||
refreshPageOrNot(sender, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void setLimitAmount(CommandSender sender, String[] args) {
|
|
||||||
int amount = Integer.parseInt(args[2]);
|
|
||||||
if (amount != -1 && amount < 0) {
|
|
||||||
Dominion.config.setLimitAmount(0);
|
|
||||||
Notification.error(sender, "每个玩家领地数量限制不能小于0");
|
|
||||||
} else {
|
|
||||||
Dominion.config.setLimitAmount(amount);
|
|
||||||
}
|
|
||||||
refreshPageOrNot(sender, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void setLimitDepth(CommandSender sender, String[] args) {
|
|
||||||
int depth = Integer.parseInt(args[2]);
|
|
||||||
if (depth != -1 && depth < 0) {
|
|
||||||
Dominion.config.setLimitDepth(0);
|
|
||||||
Notification.error(sender, "领地深度限制不能小于0");
|
|
||||||
} else {
|
|
||||||
Dominion.config.setLimitDepth(depth);
|
|
||||||
}
|
|
||||||
refreshPageOrNot(sender, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void setLimitVert(CommandSender sender, String[] args) {
|
|
||||||
boolean limitVert = Boolean.parseBoolean(args[2]);
|
|
||||||
Dominion.config.setLimitVert(limitVert);
|
|
||||||
adjustSizeY();
|
|
||||||
refreshPageOrNot(sender, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void setLimitOpBypass(CommandSender sender, String[] args) {
|
|
||||||
boolean limitOpBypass = Boolean.parseBoolean(args[2]);
|
|
||||||
Dominion.config.setLimitOpBypass(limitOpBypass);
|
|
||||||
refreshPageOrNot(sender, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void setTpEnable(CommandSender sender, String[] args) {
|
|
||||||
boolean tpEnable = Boolean.parseBoolean(args[2]);
|
|
||||||
Dominion.config.setTpEnable(tpEnable);
|
|
||||||
refreshPageOrNot(sender, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void setTpDelay(CommandSender sender, String[] args) {
|
|
||||||
int tpDelay = Integer.parseInt(args[2]);
|
|
||||||
if (tpDelay < 0) {
|
|
||||||
Dominion.config.setTpDelay(0);
|
|
||||||
Notification.error(sender, "传送延迟不能小于0");
|
|
||||||
} else {
|
|
||||||
Dominion.config.setTpDelay(tpDelay);
|
|
||||||
}
|
|
||||||
refreshPageOrNot(sender, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void setTpCoolDown(CommandSender sender, String[] args) {
|
|
||||||
int tpCoolDown = Integer.parseInt(args[2]);
|
|
||||||
if (tpCoolDown < 0) {
|
|
||||||
Dominion.config.setTpCoolDown(0);
|
|
||||||
Notification.error(sender, "传送冷却时间不能小于0");
|
|
||||||
} else {
|
|
||||||
Dominion.config.setTpCoolDown(tpCoolDown);
|
|
||||||
}
|
|
||||||
refreshPageOrNot(sender, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void setEconomyEnable(CommandSender sender, String[] args) {
|
|
||||||
boolean economyEnable = Boolean.parseBoolean(args[2]);
|
|
||||||
Dominion.config.setEconomyEnable(economyEnable);
|
|
||||||
refreshPageOrNot(sender, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void setEconomyPrice(CommandSender sender, String[] args) {
|
|
||||||
float economyPrice = Float.parseFloat(args[2]);
|
|
||||||
if (economyPrice < 0) {
|
|
||||||
Dominion.config.setEconomyPrice(0.0f);
|
|
||||||
Notification.error(sender, "每方块单价不能小于0");
|
|
||||||
} else {
|
|
||||||
Dominion.config.setEconomyPrice(economyPrice);
|
|
||||||
}
|
|
||||||
refreshPageOrNot(sender, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void setEconomyOnlyXZ(CommandSender sender, String[] args) {
|
|
||||||
boolean economyOnlyXZ = Boolean.parseBoolean(args[2]);
|
|
||||||
Dominion.config.setEconomyOnlyXZ(economyOnlyXZ);
|
|
||||||
refreshPageOrNot(sender, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void setEconomyRefund(CommandSender sender, String[] args) {
|
|
||||||
float economyRefund = Float.parseFloat(args[2]);
|
|
||||||
if (economyRefund < 0) {
|
|
||||||
Dominion.config.setEconomyRefund(0.0f);
|
|
||||||
Notification.error(sender, "领地退款比例不能小于0");
|
|
||||||
} else {
|
|
||||||
Dominion.config.setEconomyRefund(economyRefund);
|
|
||||||
}
|
|
||||||
refreshPageOrNot(sender, args);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void setResidenceMigration(CommandSender sender, String[] args) {
|
|
||||||
boolean residenceMigration = Boolean.parseBoolean(args[2]);
|
|
||||||
Dominion.config.setResidenceMigration(residenceMigration);
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
@ -2,8 +2,9 @@ package cn.lunadeer.dominion.commands;
|
|||||||
|
|
||||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||||
import cn.lunadeer.dominion.controllers.TemplateController;
|
import cn.lunadeer.dominion.controllers.TemplateController;
|
||||||
import cn.lunadeer.dominion.tuis.template.TemplateList;
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
import cn.lunadeer.dominion.tuis.template.TemplateSetting;
|
import cn.lunadeer.dominion.uis.tuis.template.TemplateList;
|
||||||
|
import cn.lunadeer.dominion.uis.tuis.template.TemplateSetting;
|
||||||
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.bukkit.entity.Player;
|
||||||
@ -36,7 +37,7 @@ public class Template {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (args.length < 3) {
|
if (args.length < 3) {
|
||||||
Notification.error(sender, "用法: /dominion template create <模板名称>");
|
Notification.error(sender, Translation.Commands_Template_CreateTemplateUsage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player player = playerOnly(sender);
|
Player player = playerOnly(sender);
|
||||||
@ -62,7 +63,7 @@ public class Template {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (args.length < 3) {
|
if (args.length < 3) {
|
||||||
Notification.error(sender, "用法: /dominion template delete <模板名称>");
|
Notification.error(sender, Translation.Commands_Template_DeleteTemplateUsage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player player = playerOnly(sender);
|
Player player = playerOnly(sender);
|
||||||
@ -88,7 +89,7 @@ public class Template {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (args.length < 5) {
|
if (args.length < 5) {
|
||||||
Notification.error(sender, "用法: /dominion template set_flag <模板名称> <权限名称> <true/false>");
|
Notification.error(sender, Translation.Commands_Template_SetTemplateFlagUsage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player player = playerOnly(sender);
|
Player player = playerOnly(sender);
|
||||||
@ -107,7 +108,7 @@ 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) {
|
if (args.length < 2) {
|
||||||
Notification.error(sender, "用法: /dominion template <list|setting|delete|create|set_flag>");
|
Notification.error(sender, Translation.Commands_Template_TemplateUsage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
switch (args[1]) {
|
switch (args[1]) {
|
||||||
@ -136,13 +137,13 @@ public class Template {
|
|||||||
if (args.length == 3) {
|
if (args.length == 3) {
|
||||||
switch (args[1]) {
|
switch (args[1]) {
|
||||||
case "create":
|
case "create":
|
||||||
return Collections.singletonList("输入模板名称");
|
return Collections.singletonList(Translation.Commands_Template_NewTemplateName.trans());
|
||||||
case "delete":
|
case "delete":
|
||||||
case "set_flag":
|
case "set_flag":
|
||||||
case "setting":
|
case "setting":
|
||||||
return allTemplates(sender);
|
return allTemplates(sender);
|
||||||
case "list":
|
case "list":
|
||||||
return Collections.singletonList("页码(可选)");
|
return Collections.singletonList(Translation.Commands_PageOptional.trans());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (args.length == 4) {
|
if (args.length == 4) {
|
||||||
@ -150,7 +151,7 @@ public class Template {
|
|||||||
case "set_flag":
|
case "set_flag":
|
||||||
return playerPrivileges();
|
return playerPrivileges();
|
||||||
case "setting":
|
case "setting":
|
||||||
return Collections.singletonList("页码(可选)");
|
return Collections.singletonList(Translation.Commands_PageOptional.trans());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (args.length == 5) {
|
if (args.length == 5) {
|
||||||
|
@ -5,7 +5,8 @@ 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.tuis.TitleList;
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
|
import cn.lunadeer.dominion.uis.tuis.TitleList;
|
||||||
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.bukkit.entity.Player;
|
||||||
@ -25,7 +26,7 @@ public class Title {
|
|||||||
Player bukkit_player = playerOnly(sender);
|
Player bukkit_player = playerOnly(sender);
|
||||||
if (bukkit_player == null) return;
|
if (bukkit_player == null) return;
|
||||||
if (args.length < 2) {
|
if (args.length < 2) {
|
||||||
Notification.error(sender, "用法: /dominion use_title <权限组ID>");
|
Notification.error(sender, Translation.Commands_Title_UseTitleUsage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
@ -33,36 +34,36 @@ public class Title {
|
|||||||
PlayerDTO player = PlayerDTO.get(bukkit_player);
|
PlayerDTO player = PlayerDTO.get(bukkit_player);
|
||||||
if (id == -1) {
|
if (id == -1) {
|
||||||
player.setUsingGroupTitleID(id);
|
player.setUsingGroupTitleID(id);
|
||||||
Notification.info(sender, "成功卸下权限组称号");
|
Notification.info(sender, Translation.Commands_Title_RemoveTitleSuccess);
|
||||||
} else {
|
} else {
|
||||||
GroupDTO group = Cache.instance.getGroup(id);
|
GroupDTO group = Cache.instance.getGroup(id);
|
||||||
if (group == null) {
|
if (group == null) {
|
||||||
Notification.error(sender, "权限组不存在");
|
Notification.error(sender, Translation.Commands_Title_GroupNotExist);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
DominionDTO dominion = Cache.instance.getDominion(group.getDomID());
|
DominionDTO dominion = Cache.instance.getDominion(group.getDomID());
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
Notification.error(sender, "权限组 %s 所属领地不存在", group.getName());
|
Notification.error(sender, Translation.Commands_Title_GroupDominionNotExist, group.getNamePlain());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!dominion.getOwner().equals(bukkit_player.getUniqueId())) {
|
if (!dominion.getOwner().equals(bukkit_player.getUniqueId())) {
|
||||||
MemberDTO member = Cache.instance.getMember(bukkit_player, dominion);
|
MemberDTO member = Cache.instance.getMember(bukkit_player, dominion);
|
||||||
if (member == null) {
|
if (member == null) {
|
||||||
Notification.error(sender, "你不是 %s 的成员,无法使用其称号", dominion.getName());
|
Notification.error(sender, Translation.Commands_Title_NotDominionMember, dominion.getName());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!Objects.equals(member.getGroupId(), group.getId())) {
|
if (!Objects.equals(member.getGroupId(), group.getId())) {
|
||||||
Notification.error(sender, "你不属于权限组 %s,无法使用其称号", group.getName());
|
Notification.error(sender, Translation.Commands_Title_NotGroupMember, group.getNamePlain());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
player.setUsingGroupTitleID(group.getId());
|
player.setUsingGroupTitleID(group.getId());
|
||||||
Notification.info(sender, "成功使用权限组 %s 称号", group.getName());
|
Notification.info(sender, Translation.Commands_Title_UseTitleSuccess, group.getNamePlain());
|
||||||
}
|
}
|
||||||
int page = getPage(args, 2);
|
int page = getPage(args, 2);
|
||||||
TitleList.show(sender, page);
|
TitleList.show(sender, page);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Notification.error(sender, "使用称号失败: " + e.getMessage());
|
Notification.error(sender, Translation.Commands_Title_UseTitleFailed, e.getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package cn.lunadeer.dominion.controllers;
|
package cn.lunadeer.dominion.controllers;
|
||||||
|
|
||||||
|
import cn.lunadeer.minecraftpluginutils.i18n.i18n;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -20,6 +21,12 @@ public interface AbstractOperator {
|
|||||||
private Integer success;
|
private Integer success;
|
||||||
private List<String> messages;
|
private List<String> messages;
|
||||||
|
|
||||||
|
public Result(Integer success, i18n message, Object... args) {
|
||||||
|
this.success = success;
|
||||||
|
this.messages = new ArrayList<>();
|
||||||
|
this.messages.add(String.format(message.trans(), args));
|
||||||
|
}
|
||||||
|
|
||||||
public Result(Integer success, String message, Object... args) {
|
public Result(Integer success, String message, Object... args) {
|
||||||
this.success = success;
|
this.success = success;
|
||||||
this.messages = new ArrayList<>();
|
this.messages = new ArrayList<>();
|
||||||
@ -31,6 +38,10 @@ public interface AbstractOperator {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Result addMessage(i18n message, Object... args) {
|
||||||
|
return addMessage(message.trans(), args);
|
||||||
|
}
|
||||||
|
|
||||||
public Integer getStatus() {
|
public Integer getStatus() {
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ 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.managers.Translation;
|
||||||
import cn.lunadeer.dominion.utils.Particle;
|
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.VaultConnect.VaultConnect;
|
||||||
@ -84,32 +85,40 @@ public class DominionController {
|
|||||||
public static void create(AbstractOperator operator, String name,
|
public static void create(AbstractOperator operator, String name,
|
||||||
Location loc1, Location loc2,
|
Location loc1, Location loc2,
|
||||||
@NotNull String parent_dominion_name, boolean skipEco) {
|
@NotNull String parent_dominion_name, boolean skipEco) {
|
||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "创建领地失败");
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_CreateDominionFailed);
|
||||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功创建领地 %s", name);
|
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, Translation.Messages_CreateDominionSuccess, name);
|
||||||
if (name.isEmpty()) {
|
if (name.isEmpty()) {
|
||||||
operator.setResponse(FAIL.addMessage("领地名称不能为空"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_DominionNameShouldNotEmpty));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (name.contains(" ") || name.contains(".")) {
|
if (name.contains(" ") || name.contains(".")) {
|
||||||
operator.setResponse(FAIL.addMessage("领地名称不能包含空格或点"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_DominionNameInvalid));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (DominionDTO.select(name) != null) {
|
if (DominionDTO.select(name) != null) {
|
||||||
operator.setResponse(FAIL.addMessage("已经存在名称为 %s 的领地", name));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_DominionNameExist, name));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!loc1.getWorld().getUID().equals(loc2.getWorld().getUID())) {
|
if (!loc1.getWorld().getUID().equals(loc2.getWorld().getUID())) {
|
||||||
operator.setResponse(FAIL.addMessage("选点世界不一致"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_SelectPointsWorldNotSame));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (operator.getLocation() == null) {
|
||||||
|
operator.setResponse(FAIL.addMessage(Translation.Messages_CommandPlayerOnly));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!loc1.getWorld().getUID().equals(operator.getLocation().getWorld().getUID())) {
|
||||||
|
operator.setResponse(FAIL.addMessage(Translation.Messages_CrossWorldOperationDisallowed));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 检查世界是否可以创建
|
// 检查世界是否可以创建
|
||||||
if (worldNotValid(operator, loc1.getWorld().getName())) {
|
if (worldNotValid(operator, loc1.getWorld().getName())) {
|
||||||
operator.setResponse(FAIL.addMessage("禁止在世界 %s 创建领地", loc1.getWorld().getName()));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_CreateDominionDisabledWorld, loc1.getWorld().getName()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 检查领地数量是否达到上限
|
// 检查领地数量是否达到上限
|
||||||
if (amountNotValid(operator)) {
|
if (amountNotValid(operator)) {
|
||||||
operator.setResponse(FAIL.addMessage("你的领地数量已达上限(%d个)", Dominion.config.getLimitAmount(operator.getPlayer())));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_DominionAmountLimit, Dominion.config.getLimitAmount(operator.getPlayer())));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int minX = Math.min(loc1.getBlockX(), loc2.getBlockX());
|
int minX = Math.min(loc1.getBlockX(), loc2.getBlockX());
|
||||||
@ -129,16 +138,16 @@ public class DominionController {
|
|||||||
parent_dominion = DominionDTO.select(parent_dominion_name);
|
parent_dominion = DominionDTO.select(parent_dominion_name);
|
||||||
}
|
}
|
||||||
if (parent_dominion == null) {
|
if (parent_dominion == null) {
|
||||||
operator.setResponse(FAIL.addMessage("父领地 %s 不存在", parent_dominion_name));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_ParentDominionNotExist, parent_dominion_name));
|
||||||
if (parent_dominion_name.isEmpty()) {
|
if (parent_dominion_name.isEmpty()) {
|
||||||
XLogger.err("根领地丢失!");
|
XLogger.err(Translation.Messages_RootDominionLost);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 是否是父领地的拥有者
|
// 是否是父领地的拥有者
|
||||||
if (parent_dominion.getId() != -1) {
|
if (parent_dominion.getId() != -1) {
|
||||||
if (notOwner(operator, parent_dominion)) {
|
if (notOwner(operator, parent_dominion)) {
|
||||||
operator.setResponse(FAIL.addMessage("你不是父领地 %s 的拥有者,无法创建子领地", parent_dominion_name));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_NotParentDominionOwner, parent_dominion_name));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -147,7 +156,7 @@ public class DominionController {
|
|||||||
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.getWorldUid().equals(dominion.getWorldUid())) {
|
||||||
operator.setResponse(FAIL.addMessage("父领地与子领地不在同一世界。"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_ParentDominionNotInSameWorld));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 检查深度是否达到上限
|
// 检查深度是否达到上限
|
||||||
@ -156,20 +165,20 @@ public class DominionController {
|
|||||||
}
|
}
|
||||||
// 检查是否超出父领地范围
|
// 检查是否超出父领地范围
|
||||||
if (!isContained(dominion, parent_dominion)) {
|
if (!isContained(dominion, parent_dominion)) {
|
||||||
operator.setResponse(FAIL.addMessage("超出父领地 %s 范围", parent_dominion.getName()));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_OutOfParentDominionRange, parent_dominion.getName()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 获取此领地的所有同级领地
|
// 获取此领地的所有同级领地
|
||||||
List<DominionDTO> sub_dominions = DominionDTO.selectByParentId(dominion.getWorldUid(), parent_dominion.getId());
|
List<DominionDTO> sub_dominions = DominionDTO.selectByParentId(dominion.getWorldUid(), parent_dominion.getId());
|
||||||
// 检查是否与出生点保护冲突
|
// 检查是否与出生点保护冲突
|
||||||
if (isIntersectSpawn(operator, dominion)) {
|
if (isIntersectSpawn(operator, dominion)) {
|
||||||
operator.setResponse(FAIL.addMessage("与出生点保护冲突"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_ConflictWithSpawnProtect));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 检查是否与其他子领地冲突
|
// 检查是否与其他子领地冲突
|
||||||
for (DominionDTO sub_dominion : sub_dominions) {
|
for (DominionDTO sub_dominion : sub_dominions) {
|
||||||
if (isIntersect(sub_dominion, dominion)) {
|
if (isIntersect(sub_dominion, dominion)) {
|
||||||
operator.setResponse(FAIL.addMessage("与领地 %s 冲突", sub_dominion.getName()));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_ConflictWithDominion, sub_dominion.getName()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -181,7 +190,7 @@ public class DominionController {
|
|||||||
}
|
}
|
||||||
dominion = DominionDTO.insert(dominion);
|
dominion = DominionDTO.insert(dominion);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
operator.setResponse(FAIL.addMessage("创建领地失败,数据库错误,请联系管理员"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_DatabaseError));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 显示粒子效果
|
// 显示粒子效果
|
||||||
@ -230,7 +239,7 @@ public class DominionController {
|
|||||||
public static void expand(AbstractOperator operator, Integer size) {
|
public static void expand(AbstractOperator operator, Integer size) {
|
||||||
DominionDTO dominion = getPlayerCurrentDominion(operator);
|
DominionDTO dominion = getPlayerCurrentDominion(operator);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "无法获取你所处的领地,请指定名称"));
|
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_CannotGetDominionAuto));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
expand(operator, size, dominion.getName());
|
expand(operator, size, dominion.getName());
|
||||||
@ -244,7 +253,7 @@ public class DominionController {
|
|||||||
* @param dominion_name 领地名称
|
* @param dominion_name 领地名称
|
||||||
*/
|
*/
|
||||||
public static void expand(AbstractOperator operator, Integer size, String dominion_name) {
|
public static void expand(AbstractOperator operator, Integer size, String dominion_name) {
|
||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "扩展领地失败");
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_ExpandDominionFailed);
|
||||||
DominionDTO dominion = expandContractPreCheck(operator, getExistDomAndIsOwner(operator, dominion_name), FAIL);
|
DominionDTO dominion = expandContractPreCheck(operator, getExistDomAndIsOwner(operator, dominion_name), FAIL);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
return;
|
return;
|
||||||
@ -254,18 +263,23 @@ public class DominionController {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 检查是否与出生点保护冲突
|
// 检查是否与出生点保护冲突
|
||||||
if (isIntersectSpawn(operator, dominion.getWorld(), newCords)) {
|
World world = Dominion.instance.getServer().getWorld(dominion.getWorldUid());
|
||||||
operator.setResponse(FAIL.addMessage("与出生点保护冲突"));
|
if (world == null) {
|
||||||
|
operator.setResponse(FAIL.addMessage(Translation.Messages_DominionWorldLost));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (isIntersectSpawn(operator, world, newCords)) {
|
||||||
|
operator.setResponse(FAIL.addMessage(Translation.Messages_ConflictWithSpawnProtect));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 校验是否超出父领地范围
|
// 校验是否超出父领地范围
|
||||||
DominionDTO parent_dominion = DominionDTO.select(dominion.getParentDomId());
|
DominionDTO parent_dominion = DominionDTO.select(dominion.getParentDomId());
|
||||||
if (parent_dominion == null) {
|
if (parent_dominion == null) {
|
||||||
operator.setResponse(FAIL.addMessage("父领地丢失"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_ParentDominionLost));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!isContained(newCords, parent_dominion)) {
|
if (!isContained(newCords, parent_dominion)) {
|
||||||
operator.setResponse(FAIL.addMessage("超出父领地 %s 范围", parent_dominion.getName()));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_OutOfParentDominionRange, parent_dominion.getName()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// 获取同世界下的所有同级领地
|
// 获取同世界下的所有同级领地
|
||||||
@ -274,11 +288,11 @@ public class DominionController {
|
|||||||
if (isIntersect(exist_dominion, newCords)) {
|
if (isIntersect(exist_dominion, newCords)) {
|
||||||
// 如果是自己,跳过
|
// 如果是自己,跳过
|
||||||
if (exist_dominion.getId().equals(dominion.getId())) continue;
|
if (exist_dominion.getId().equals(dominion.getId())) continue;
|
||||||
operator.setResponse(FAIL.addMessage("与领地 %s 冲突", exist_dominion.getName()));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_ConflictWithDominion, exist_dominion.getName()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功扩展领地 %s %d格", dominion_name, size);
|
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, Translation.Messages_ExpandDominionSuccess, dominion_name, size);
|
||||||
// 检查经济
|
// 检查经济
|
||||||
if (handleEconomyFailed(operator, Dominion.config.getEconomyOnlyXZ(operator.getPlayer()) ? sqr(newCords) - dominion.getSquare() : vol(newCords) - dominion.getVolume()
|
if (handleEconomyFailed(operator, Dominion.config.getEconomyOnlyXZ(operator.getPlayer()) ? sqr(newCords) - dominion.getSquare() : vol(newCords) - dominion.getVolume()
|
||||||
, true, FAIL, SUCCESS)) return;
|
, true, FAIL, SUCCESS)) return;
|
||||||
@ -299,7 +313,7 @@ public class DominionController {
|
|||||||
public static void contract(AbstractOperator operator, Integer size) {
|
public static void contract(AbstractOperator operator, Integer size) {
|
||||||
DominionDTO dominion = getPlayerCurrentDominion(operator);
|
DominionDTO dominion = getPlayerCurrentDominion(operator);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "无法获取你所处的领地,请指定名称"));
|
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_CannotGetDominionAuto));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
contract(operator, size, dominion.getName());
|
contract(operator, size, dominion.getName());
|
||||||
@ -313,7 +327,7 @@ public class DominionController {
|
|||||||
* @param dominion_name 领地名称
|
* @param dominion_name 领地名称
|
||||||
*/
|
*/
|
||||||
public static void contract(AbstractOperator operator, Integer size, String dominion_name) {
|
public static void contract(AbstractOperator operator, Integer size, String dominion_name) {
|
||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "缩小领地失败");
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_ContractDominionFailed);
|
||||||
DominionDTO dominion = expandContractPreCheck(operator, getExistDomAndIsOwner(operator, dominion_name), FAIL);
|
DominionDTO dominion = expandContractPreCheck(operator, getExistDomAndIsOwner(operator, dominion_name), FAIL);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
return;
|
return;
|
||||||
@ -326,11 +340,11 @@ public class DominionController {
|
|||||||
List<DominionDTO> sub_dominions = DominionDTO.selectByParentId(dominion.getWorldUid(), dominion.getId());
|
List<DominionDTO> sub_dominions = DominionDTO.selectByParentId(dominion.getWorldUid(), 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(Translation.Messages_ContractDominionConflict, sub_dominion.getName()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功缩小领地 %s %d格", dominion_name, size);
|
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, Translation.Messages_ContractDominionSuccess, dominion_name, size);
|
||||||
// 退还经济
|
// 退还经济
|
||||||
if (handleEconomyFailed(operator, Dominion.config.getEconomyOnlyXZ(operator.getPlayer()) ? dominion.getSquare() - sqr(newCords) : dominion.getVolume() - vol(newCords)
|
if (handleEconomyFailed(operator, Dominion.config.getEconomyOnlyXZ(operator.getPlayer()) ? dominion.getSquare() - sqr(newCords) : dominion.getVolume() - vol(newCords)
|
||||||
, false, FAIL, SUCCESS)) return;
|
, false, FAIL, SUCCESS)) return;
|
||||||
@ -364,18 +378,18 @@ public class DominionController {
|
|||||||
* @param force 是否强制删除
|
* @param force 是否强制删除
|
||||||
*/
|
*/
|
||||||
public static void delete(AbstractOperator operator, String dominion_name, boolean force) {
|
public static void delete(AbstractOperator operator, String dominion_name, boolean force) {
|
||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "删除领地失败");
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_DeleteDominionFailed);
|
||||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "领地 %s 及其所有子领地已删除", dominion_name);
|
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, Translation.Messages_DeleteDominionSuccess, dominion_name);
|
||||||
DominionDTO dominion = getExistDomAndIsOwner(operator, dominion_name);
|
DominionDTO dominion = getExistDomAndIsOwner(operator, dominion_name);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
return;
|
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, Translation.Messages_DeleteDominionConfirm, dominion_name);
|
||||||
showSubNamesWarning(sub_dominions, WARNING);
|
showSubNamesWarning(sub_dominions, WARNING);
|
||||||
if (operator instanceof BukkitPlayerOperator) {
|
if (operator instanceof BukkitPlayerOperator) {
|
||||||
Notification.warn(operator.getPlayer(), "输入 /dominion delete %s force 确认删除", dominion_name);
|
Notification.warn(operator.getPlayer(), Translation.Messages_DeleteDominionForceConfirm, dominion_name);
|
||||||
}
|
}
|
||||||
operator.setResponse(WARNING);
|
operator.setResponse(WARNING);
|
||||||
return;
|
return;
|
||||||
@ -425,7 +439,7 @@ public class DominionController {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
dominion.setJoinMessage(message);
|
dominion.setJoinMessage(message);
|
||||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功设置领地 %s 的进入消息", dominion_name));
|
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, Translation.Messages_SetEnterMessageSuccess, dominion_name));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -455,7 +469,7 @@ public class DominionController {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
dominion.setLeaveMessage(message);
|
dominion.setLeaveMessage(message);
|
||||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功设置领地 %s 的离开消息", dominion_name));
|
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, Translation.Messages_SetLeaveMessageSuccess, dominion_name));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -478,15 +492,15 @@ public class DominionController {
|
|||||||
* @param dominion_name 领地名称
|
* @param dominion_name 领地名称
|
||||||
*/
|
*/
|
||||||
public static void setTpLocation(AbstractOperator operator, int x, int y, int z, String dominion_name) {
|
public static void setTpLocation(AbstractOperator operator, int x, int y, int z, String dominion_name) {
|
||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "设置领地传送点失败");
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_SetTpLocationFailed);
|
||||||
DominionDTO dominion = getExistDomAndIsOwner(operator, dominion_name);
|
DominionDTO dominion = getExistDomAndIsOwner(operator, dominion_name);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "领地 %s 不存在", dominion_name));
|
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_DominionNotExist, dominion_name));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
World world = dominion.getWorld();
|
World world = dominion.getWorld();
|
||||||
if (world == null) {
|
if (world == null) {
|
||||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "领地所在世界不存在"));
|
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_DominionWorldNotExist));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Location loc = new Location(world, x, y, z);
|
Location loc = new Location(world, x, y, z);
|
||||||
@ -495,10 +509,10 @@ public class DominionController {
|
|||||||
loc.setY(loc.getY() + 1.5);
|
loc.setY(loc.getY() + 1.5);
|
||||||
dominion.setTpLocation(loc);
|
dominion.setTpLocation(loc);
|
||||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS,
|
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS,
|
||||||
"成功设置领地 %s 的传送点 %d %d %d", dominion_name
|
Translation.Messages_SetTpLocationSuccess, dominion_name
|
||||||
, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()));
|
, loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()));
|
||||||
} else {
|
} else {
|
||||||
operator.setResponse(FAIL.addMessage("传送点不在领地 %s 内", dominion_name));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_TpLocationNotInDominion, dominion_name));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -510,17 +524,17 @@ public class DominionController {
|
|||||||
* @param new_name 新名称
|
* @param new_name 新名称
|
||||||
*/
|
*/
|
||||||
public static void rename(AbstractOperator operator, String old_name, String new_name) {
|
public static void rename(AbstractOperator operator, String old_name, String new_name) {
|
||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "重命名领地失败");
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_RenameDominionFailed);
|
||||||
if (new_name.isEmpty()) {
|
if (new_name.isEmpty()) {
|
||||||
operator.setResponse(FAIL.addMessage("新名称不能为空"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_DominionNameShouldNotEmpty));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (new_name.contains(" ") || new_name.contains(".")) {
|
if (new_name.contains(" ") || new_name.contains(".")) {
|
||||||
operator.setResponse(FAIL.addMessage("领地名称不能包含空格或点"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_DominionNameInvalid));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (Objects.equals(old_name, new_name)) {
|
if (Objects.equals(old_name, new_name)) {
|
||||||
operator.setResponse(FAIL.addMessage("新名称与旧名称相同"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_RenameDominionSameName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
DominionDTO dominion = getExistDomAndIsOwner(operator, old_name);
|
DominionDTO dominion = getExistDomAndIsOwner(operator, old_name);
|
||||||
@ -528,11 +542,11 @@ public class DominionController {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (DominionDTO.select(new_name) != null) {
|
if (DominionDTO.select(new_name) != null) {
|
||||||
operator.setResponse(FAIL.addMessage("已经存在名称为 %s 的领地", new_name));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_DominionNameExist, new_name));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
dominion.setName(new_name);
|
dominion.setName(new_name);
|
||||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功将领地 %s 重命名为 %s", old_name, new_name));
|
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, Translation.Messages_RenameDominionSuccess, old_name, new_name));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -544,35 +558,30 @@ public class DominionController {
|
|||||||
* @param force 是否强制转让
|
* @param force 是否强制转让
|
||||||
*/
|
*/
|
||||||
public static void give(AbstractOperator operator, String dom_name, String player_name, boolean force) {
|
public static void give(AbstractOperator operator, String dom_name, String player_name, boolean force) {
|
||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "转让领地失败");
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_GiveDominionFailed);
|
||||||
PlayerDTO operatorDTO = PlayerDTO.select(operator.getUniqueId());
|
|
||||||
if (operatorDTO == null) {
|
|
||||||
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;
|
||||||
}
|
}
|
||||||
PlayerDTO player = PlayerController.getPlayerDTO(player_name);
|
PlayerDTO player = PlayerController.getPlayerDTO(player_name);
|
||||||
if (player == null) {
|
if (player == null) {
|
||||||
operator.setResponse(FAIL.addMessage("玩家 %s 不存在", player_name));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_PlayerNotExist, player_name));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (Objects.equals(dominion.getOwner(), player.getUuid())) {
|
if (Objects.equals(dominion.getOwner(), player.getUuid())) {
|
||||||
operator.setResponse(FAIL.addMessage("领地 %s 已经属于 %s,无需转移", dom_name, player_name));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_DominionAlreadyBelong, dom_name, player_name));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (dominion.getParentDomId() != -1) {
|
if (dominion.getParentDomId() != -1) {
|
||||||
operator.setResponse(FAIL.addMessage("子领地无法转让,你可以通过将 %s 设置为管理员来让其管理领地 %s ", player_name, dom_name));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_SubDominionCannotGive, player_name, dom_name));
|
||||||
return;
|
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 给 %s 会同时转让其所有子领地,是否继续?", dom_name, player_name);
|
AbstractOperator.Result WARNING = new AbstractOperator.Result(AbstractOperator.Result.WARNING, Translation.Messages_GiveDominionConfirm, dom_name, player_name);
|
||||||
showSubNamesWarning(sub_dominions, WARNING);
|
showSubNamesWarning(sub_dominions, WARNING);
|
||||||
if (operator instanceof BukkitPlayerOperator) {
|
if (operator instanceof BukkitPlayerOperator) {
|
||||||
Notification.warn(operator.getPlayer(), "输入 /dominion give %s %s force 确认转让", dom_name, player_name);
|
Notification.warn(operator.getPlayer(), Translation.Messages_GiveDominionForceConfirm, dom_name, player_name);
|
||||||
}
|
}
|
||||||
operator.setResponse(WARNING);
|
operator.setResponse(WARNING);
|
||||||
return;
|
return;
|
||||||
@ -581,7 +590,7 @@ public class DominionController {
|
|||||||
for (DominionDTO sub_dominion : sub_dominions) {
|
for (DominionDTO sub_dominion : sub_dominions) {
|
||||||
sub_dominion.setOwner(player.getUuid());
|
sub_dominion.setOwner(player.getUuid());
|
||||||
}
|
}
|
||||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功将领地 %s 及其所有子领地转让给 %s", dom_name, player_name));
|
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, Translation.Messages_GiveDominionSuccess, dom_name, player_name));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -592,22 +601,18 @@ public class DominionController {
|
|||||||
* @param dom_name 领地名称
|
* @param dom_name 领地名称
|
||||||
*/
|
*/
|
||||||
public static void setMapColor(AbstractOperator operator, String color, String dom_name) {
|
public static void setMapColor(AbstractOperator operator, String color, String dom_name) {
|
||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "设置领地地图颜色失败");
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_SetMapColorFailed);
|
||||||
DominionDTO dominion = getExistDomAndIsOwner(operator, dom_name);
|
DominionDTO dominion = getExistDomAndIsOwner(operator, dom_name);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (notOwner(operator, dominion)) {
|
|
||||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者", dom_name));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
color = color.toUpperCase(); // 转换为大写
|
color = color.toUpperCase(); // 转换为大写
|
||||||
if (!color.matches("^#[0-9a-fA-F]{6}$")) {
|
if (!color.matches("^#[0-9a-fA-F]{6}$")) {
|
||||||
operator.setResponse(FAIL.addMessage("颜色格式不正确"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_MapColorInvalid));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
dominion.setColor(color);
|
dominion.setColor(color);
|
||||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "成功设置领地 %s 的卫星地图颜色为 %s", dom_name, color));
|
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, Translation.Messages_SetMapColorSuccess, dom_name, color));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -617,10 +622,10 @@ public class DominionController {
|
|||||||
* @param color 16进制颜色 例如 #ff0000
|
* @param color 16进制颜色 例如 #ff0000
|
||||||
*/
|
*/
|
||||||
public static void setMapColor(AbstractOperator operator, String color) {
|
public static void setMapColor(AbstractOperator operator, String color) {
|
||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "设置领地地图颜色失败");
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_SetMapColorFailed);
|
||||||
DominionDTO dominion = getPlayerCurrentDominion(operator);
|
DominionDTO dominion = getPlayerCurrentDominion(operator);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
operator.setResponse(FAIL.addMessage("无法获取你所处的领地,请指定名称"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_CannotGetDominionAuto));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
setMapColor(operator, color, dominion.getName());
|
setMapColor(operator, color, dominion.getName());
|
||||||
@ -699,7 +704,7 @@ public class DominionController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static boolean sizeNotValid(AbstractOperator operator, int x1, int y1, int z1, int x2, int y2, int z2) {
|
private static boolean sizeNotValid(AbstractOperator operator, int x1, int y1, int z1, int x2, int y2, int z2) {
|
||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "尺寸不合法");
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_SizeInvalid);
|
||||||
if (operator.isOp() && Dominion.config.getLimitOpBypass()) {
|
if (operator.isOp() && Dominion.config.getLimitOpBypass()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -722,35 +727,43 @@ public class DominionController {
|
|||||||
int x_length = x2 - x1;
|
int x_length = x2 - x1;
|
||||||
int y_length = y2 - y1;
|
int y_length = y2 - y1;
|
||||||
int z_length = z2 - z1;
|
int z_length = z2 - z1;
|
||||||
if (x_length < 4 || y_length < 4 || z_length < 4) {
|
if (x_length < Dominion.config.getLimitSizeMinX(operator.getPlayer())) {
|
||||||
operator.setResponse(FAIL.addMessage("领地的任意一边长度不得小于4"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_SizeXShouldBeGreaterThan, Dominion.config.getLimitSizeMinX(operator.getPlayer())));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (x_length > Dominion.config.getLimitSizeX(operator.getPlayer()) && Dominion.config.getLimitSizeX(operator.getPlayer()) > 0) {
|
if (y_length < Dominion.config.getLimitSizeMinY(operator.getPlayer())) {
|
||||||
operator.setResponse(FAIL.addMessage("领地X方向长度不能超过 %d", Dominion.config.getLimitSizeX(operator.getPlayer())));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_SizeYShouldBeGreaterThan, Dominion.config.getLimitSizeMinY(operator.getPlayer())));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (y_length > Dominion.config.getLimitSizeY(operator.getPlayer()) && Dominion.config.getLimitSizeY(operator.getPlayer()) > 0) {
|
if (z_length < Dominion.config.getLimitSizeMinZ(operator.getPlayer())) {
|
||||||
operator.setResponse(FAIL.addMessage("领地Y方向高度不能超过 %d", Dominion.config.getLimitSizeY(operator.getPlayer())));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_SizeZShouldBeGreaterThan, Dominion.config.getLimitSizeMinZ(operator.getPlayer())));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (z_length > Dominion.config.getLimitSizeZ(operator.getPlayer()) && Dominion.config.getLimitSizeZ(operator.getPlayer()) > 0) {
|
if (x_length > Dominion.config.getLimitSizeMaxX(operator.getPlayer()) && Dominion.config.getLimitSizeMaxX(operator.getPlayer()) > 0) {
|
||||||
operator.setResponse(FAIL.addMessage("领地Z方向长度不能超过 %d", Dominion.config.getLimitSizeZ(operator.getPlayer())));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_SizeXShouldBeLessThan, Dominion.config.getLimitSizeMaxX(operator.getPlayer())));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (y_length > Dominion.config.getLimitSizeMaxY(operator.getPlayer()) && Dominion.config.getLimitSizeMaxY(operator.getPlayer()) > 0) {
|
||||||
|
operator.setResponse(FAIL.addMessage(Translation.Messages_SizeYShouldBeLessThan, Dominion.config.getLimitSizeMaxY(operator.getPlayer())));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (z_length > Dominion.config.getLimitSizeMaxZ(operator.getPlayer()) && Dominion.config.getLimitSizeMaxZ(operator.getPlayer()) > 0) {
|
||||||
|
operator.setResponse(FAIL.addMessage(Translation.Messages_SizeZShouldBeLessThan, Dominion.config.getLimitSizeMaxZ(operator.getPlayer())));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (y2 > Dominion.config.getLimitMaxY(operator.getPlayer())) {
|
if (y2 > Dominion.config.getLimitMaxY(operator.getPlayer())) {
|
||||||
operator.setResponse(FAIL.addMessage("领地Y坐标不能超过 %d", Dominion.config.getLimitMaxY(operator.getPlayer())));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_MaxYShouldBeLessThan, Dominion.config.getLimitMaxY(operator.getPlayer())));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (y1 < Dominion.config.getLimitMinY(operator.getPlayer())) {
|
if (y1 < Dominion.config.getLimitMinY(operator.getPlayer())) {
|
||||||
operator.setResponse(FAIL.addMessage("领地Y坐标不能低于 %d", Dominion.config.getLimitMinY(operator.getPlayer())));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_MinYShouldBeLessThan, Dominion.config.getLimitMinY(operator.getPlayer())));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean depthNotValid(AbstractOperator operator, DominionDTO parent_dom) {
|
private static boolean depthNotValid(AbstractOperator operator, DominionDTO parent_dom) {
|
||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "子领地深度不合法");
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_DepthInvalid);
|
||||||
if (operator.isOp() && Dominion.config.getLimitOpBypass()) {
|
if (operator.isOp() && Dominion.config.getLimitOpBypass()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -758,7 +771,7 @@ public class DominionController {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (parent_dom.getId() != -1 && Dominion.config.getLimitDepth(operator.getPlayer()) == 0) {
|
if (parent_dom.getId() != -1 && Dominion.config.getLimitDepth(operator.getPlayer()) == 0) {
|
||||||
operator.setResponse(FAIL.addMessage("不允许创建子领地"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_CreateSubDominionDisabled));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (parent_dom.getId() == -1) {
|
if (parent_dom.getId() == -1) {
|
||||||
@ -770,7 +783,7 @@ public class DominionController {
|
|||||||
level++;
|
level++;
|
||||||
}
|
}
|
||||||
if (level >= Dominion.config.getLimitDepth(operator.getPlayer())) {
|
if (level >= Dominion.config.getLimitDepth(operator.getPlayer())) {
|
||||||
operator.setResponse(FAIL.addMessage("子领地嵌套深度不能超过 %d", Dominion.config.getLimitDepth(operator.getPlayer())));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_DepthShouldBeLessThan, Dominion.config.getLimitDepth(operator.getPlayer())));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -794,11 +807,11 @@ public class DominionController {
|
|||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "");
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "");
|
||||||
DominionDTO dominion = DominionDTO.select(dominion_name);
|
DominionDTO dominion = DominionDTO.select(dominion_name);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在", dominion_name));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_DominionNotExist, dominion_name));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (notOwner(operator, dominion)) {
|
if (notOwner(operator, dominion)) {
|
||||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者", dominion_name));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_NotDominionOwner, dominion_name));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return dominion;
|
return dominion;
|
||||||
@ -816,25 +829,25 @@ public class DominionController {
|
|||||||
private static boolean handleEconomyFailed(AbstractOperator operator, Integer count, boolean paid, AbstractOperator.Result FAIL, AbstractOperator.Result SUCCESS) {
|
private static boolean handleEconomyFailed(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(Translation.Messages_NoEconomyPlugin));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (operator.isOp() && Dominion.config.getLimitOpBypass()) {
|
if (operator.isOp() && Dominion.config.getLimitOpBypass()) {
|
||||||
SUCCESS.addMessage("你是OP,已跳过经济检查。");
|
SUCCESS.addMessage(Translation.Messages_OpBypassEconomyCheck);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
float priceOrRefund = count * Dominion.config.getEconomyPrice(operator.getPlayer());
|
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(Translation.Messages_NotEnoughMoney, priceOrRefund, VaultConnect.instance.currencyNamePlural()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
SUCCESS.addMessage("已扣除 %.2f %s", priceOrRefund, VaultConnect.instance.currencyNamePlural());
|
SUCCESS.addMessage(Translation.Messages_ChargeMoney, 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(operator.getPlayer());
|
||||||
VaultConnect.instance.depositPlayer(operator.getPlayer(), refund);
|
VaultConnect.instance.depositPlayer(operator.getPlayer(), refund);
|
||||||
SUCCESS.addMessage("已退还 %.2f %s", refund, VaultConnect.instance.currencyNamePlural());
|
SUCCESS.addMessage(Translation.Messages_RefundMoney, refund, VaultConnect.instance.currencyNamePlural());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -857,15 +870,15 @@ public class DominionController {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (operator.getLocation() == null) {
|
if (operator.getLocation() == null) {
|
||||||
operator.setResponse(FAIL.addMessage("无法获取你的位置"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_CannotGetLocation));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (!operator.getLocation().getWorld().getUID().equals(dominion.getWorldUid())) {
|
if (!operator.getLocation().getWorld().getUID().equals(dominion.getWorldUid())) {
|
||||||
operator.setResponse(FAIL.addMessage("禁止跨世界操作"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_CrossWorldOperationDisallowed));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (!isInDominion(dominion, operator.getLocation())) {
|
if (!isInDominion(dominion, operator.getLocation())) {
|
||||||
operator.setResponse(FAIL.addMessage("你不在领地 %s 内,无法执行此操作", dominion.getName()));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_NotInDominion, dominion.getName()));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return dominion;
|
return dominion;
|
||||||
@ -874,7 +887,7 @@ 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) {
|
if (face == null) {
|
||||||
operator.setResponse(FAIL.addMessage("无法获取你的方向"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_CannotGetDirection));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
int[] result = new int[6];
|
int[] result = new int[6];
|
||||||
@ -907,13 +920,13 @@ public class DominionController {
|
|||||||
result[1] -= size;
|
result[1] -= size;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
operator.setResponse(FAIL.addMessage("无效的方向"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_InvalidDirection, face));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (!expand) {
|
if (!expand) {
|
||||||
// 校验第二组坐标是否小于第一组坐标
|
// 校验第二组坐标是否小于第一组坐标
|
||||||
if (result[0] > result[3] || result[1] > result[4] || result[2] > result[5]) {
|
if (result[0] > result[3] || result[1] > result[4] || result[2] > result[5]) {
|
||||||
operator.setResponse(FAIL.addMessage("缩小后的领地大小无效"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_ContractSizeInvalid));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -937,7 +950,7 @@ public class DominionController {
|
|||||||
}
|
}
|
||||||
if (!sub_dominions.isEmpty()) {
|
if (!sub_dominions.isEmpty()) {
|
||||||
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(Translation.Messages_SubDominionList, sub_names);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2,6 +2,7 @@ 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.managers.Translation;
|
||||||
import cn.lunadeer.dominion.utils.ControllerUtils;
|
import cn.lunadeer.dominion.utils.ControllerUtils;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.ControllerUtils.noAuthToChangeFlags;
|
import static cn.lunadeer.dominion.utils.ControllerUtils.noAuthToChangeFlags;
|
||||||
@ -19,7 +20,7 @@ public class FlagsController {
|
|||||||
DominionDTO dominion = ControllerUtils.getPlayerCurrentDominion(operator);
|
DominionDTO dominion = ControllerUtils.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, Translation.Messages_SetDominionFlagSuccess, flag, value));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -33,16 +34,16 @@ public class FlagsController {
|
|||||||
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);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "领地 %s 不存在", dominionName));
|
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_DominionNotExist, dominionName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (noAuthToChangeFlags(operator, dominion)) return;
|
if (noAuthToChangeFlags(operator, dominion)) return;
|
||||||
Flag f = Flag.getFlag(flag);
|
Flag f = Flag.getFlag(flag);
|
||||||
if (f == null) {
|
if (f == null) {
|
||||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "未知的领地权限 %s", flag));
|
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_UnknownFlag, flag));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
dominion.setFlagValue(f, value);
|
dominion.setFlagValue(f, value);
|
||||||
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "设置领地权限 %s 为 %s", flag, value));
|
operator.setResponse(new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, Translation.Messages_SetDominionFlagSuccess, flag, value));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package cn.lunadeer.dominion.controllers;
|
package cn.lunadeer.dominion.controllers;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.dtos.*;
|
import cn.lunadeer.dominion.dtos.*;
|
||||||
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
@ -18,29 +19,29 @@ public class GroupController {
|
|||||||
* @param nameColored 权限组名称(带颜色)
|
* @param nameColored 权限组名称(带颜色)
|
||||||
*/
|
*/
|
||||||
public static void createGroup(AbstractOperator operator, String domName, String groupName, String nameColored) {
|
public static void createGroup(AbstractOperator operator, String domName, String groupName, String nameColored) {
|
||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "创建权限组 %s 失败", groupName);
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_CreateGroupFailed, groupName);
|
||||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "创建权限组 %s 成功", groupName);
|
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, Translation.Messages_CreateGroupSuccess, groupName);
|
||||||
if (groupName.contains(" ")) {
|
if (groupName.contains(" ")) {
|
||||||
operator.setResponse(FAIL.addMessage("权限组名称不能包含空格"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_GroupNameInvalid));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
DominionDTO dominion = DominionDTO.select(domName);
|
DominionDTO dominion = DominionDTO.select(domName);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在", domName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_DominionNotExist, domName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (notOwner(operator, dominion)) {
|
if (notOwner(operator, dominion)) {
|
||||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法创建权限组", domName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_NotDominionOwner, domName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
GroupDTO group = GroupDTO.select(dominion.getId(), groupName);
|
GroupDTO group = GroupDTO.select(dominion.getId(), groupName);
|
||||||
if (group != null) {
|
if (group != null) {
|
||||||
operator.setResponse(FAIL.addMessage("领地 %s 已存在名为 %s 的权限组", domName, groupName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_GroupNameExist, domName, groupName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
group = GroupDTO.create(nameColored, dominion);
|
group = GroupDTO.create(nameColored, dominion);
|
||||||
if (group == null) {
|
if (group == null) {
|
||||||
operator.setResponse(FAIL.addMessage("请联系服务器管理员"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_DatabaseError));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
operator.setResponse(SUCCESS);
|
operator.setResponse(SUCCESS);
|
||||||
@ -54,20 +55,20 @@ public class GroupController {
|
|||||||
* @param groupName 权限组名称
|
* @param groupName 权限组名称
|
||||||
*/
|
*/
|
||||||
public static void deleteGroup(AbstractOperator operator, String domName, String groupName) {
|
public static void deleteGroup(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, Translation.Messages_DeleteGroupFailed, groupName);
|
||||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "删除权限组 %s 成功", groupName);
|
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, Translation.Messages_DeleteGroupSuccess, groupName);
|
||||||
DominionDTO dominion = DominionDTO.select(domName);
|
DominionDTO dominion = DominionDTO.select(domName);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在", domName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_DominionNotExist, domName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (notOwner(operator, dominion)) {
|
if (notOwner(operator, dominion)) {
|
||||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法删除权限组", domName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_NotDominionOwner, domName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
GroupDTO group = GroupDTO.select(dominion.getId(), groupName);
|
GroupDTO group = GroupDTO.select(dominion.getId(), groupName);
|
||||||
if (group == null) {
|
if (group == null) {
|
||||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在名为 %s 的权限组", domName, groupName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_GroupNotExist, domName, groupName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
group.delete();
|
group.delete();
|
||||||
@ -84,11 +85,11 @@ public class GroupController {
|
|||||||
* @param value 权限值
|
* @param value 权限值
|
||||||
*/
|
*/
|
||||||
public static void setGroupFlag(AbstractOperator operator, String domName, String groupName, String flag, boolean value) {
|
public static void setGroupFlag(AbstractOperator operator, String domName, String groupName, String flag, boolean value) {
|
||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "设置权限组 %s 的权限 %s 为 %s 失败", groupName, flag, value);
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_SetGroupFlagFailed, groupName, flag, value);
|
||||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "设置权限组 %s 的权限 %s 为 %s 成功", groupName, flag, value);
|
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, Translation.Messages_SetGroupFlagSuccess, groupName, flag, value);
|
||||||
DominionDTO dominion = DominionDTO.select(domName);
|
DominionDTO dominion = DominionDTO.select(domName);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在", domName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_DominionNotExist, domName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (noAuthToChangeFlags(operator, dominion)) {
|
if (noAuthToChangeFlags(operator, dominion)) {
|
||||||
@ -96,11 +97,11 @@ public class GroupController {
|
|||||||
}
|
}
|
||||||
GroupDTO group = GroupDTO.select(dominion.getId(), groupName);
|
GroupDTO group = GroupDTO.select(dominion.getId(), groupName);
|
||||||
if (group == null) {
|
if (group == null) {
|
||||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在名为 %s 的权限组", domName, groupName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_GroupNotExist, domName, groupName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ((flag.equals("admin") || group.getAdmin()) && notOwner(operator, dominion)) {
|
if ((flag.equals("admin") || group.getAdmin()) && notOwner(operator, dominion)) {
|
||||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法修改管理员权限组权限", domName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_NotDominionOwnerForGroup, domName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (flag.equals("admin")) {
|
if (flag.equals("admin")) {
|
||||||
@ -108,13 +109,13 @@ public class GroupController {
|
|||||||
} else {
|
} else {
|
||||||
Flag f = Flag.getFlag(flag);
|
Flag f = Flag.getFlag(flag);
|
||||||
if (f == null) {
|
if (f == null) {
|
||||||
operator.setResponse(FAIL.addMessage("未知的权限 %s", flag));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_UnknownFlag, flag));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
group = group.setFlagValue(f, value);
|
group = group.setFlagValue(f, value);
|
||||||
}
|
}
|
||||||
if (group == null) {
|
if (group == null) {
|
||||||
operator.setResponse(FAIL.addMessage("请联系服务器管理员"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_DatabaseError));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
operator.setResponse(SUCCESS);
|
operator.setResponse(SUCCESS);
|
||||||
@ -130,29 +131,29 @@ public class GroupController {
|
|||||||
* @param nameColored 新名称(带颜色)
|
* @param nameColored 新名称(带颜色)
|
||||||
*/
|
*/
|
||||||
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, String nameColored) {
|
||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "重命名权限组 %s 为 %s 失败", oldName, newName);
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_RenameGroupFailed, oldName, newName);
|
||||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "重命名权限组 %s 为 %s 成功", oldName, newName);
|
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, Translation.Messages_RenameGroupSuccess, oldName, newName);
|
||||||
if (newName.contains(" ")) {
|
if (newName.contains(" ")) {
|
||||||
operator.setResponse(FAIL.addMessage("权限组名称不能包含空格"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_GroupNameInvalid));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
DominionDTO dominion = DominionDTO.select(domName);
|
DominionDTO dominion = DominionDTO.select(domName);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在", domName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_DominionNotExist, domName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (notOwner(operator, dominion)) {
|
if (notOwner(operator, dominion)) {
|
||||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法重命名权限组", domName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_NotDominionOwner, domName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
GroupDTO group = GroupDTO.select(dominion.getId(), oldName);
|
GroupDTO group = GroupDTO.select(dominion.getId(), oldName);
|
||||||
if (group == null) {
|
if (group == null) {
|
||||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在名为 %s 的权限组", domName, oldName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_GroupNotExist, domName, oldName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
group = group.setName(nameColored);
|
group = group.setName(nameColored);
|
||||||
if (group == null) {
|
if (group == null) {
|
||||||
operator.setResponse(FAIL.addMessage("请联系服务器管理员"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_DatabaseError));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
operator.setResponse(SUCCESS);
|
operator.setResponse(SUCCESS);
|
||||||
@ -167,47 +168,47 @@ public class GroupController {
|
|||||||
* @param playerName 玩家名称
|
* @param playerName 玩家名称
|
||||||
*/
|
*/
|
||||||
public static void addMember(AbstractOperator operator, String domName, String groupName, String playerName) {
|
public static void addMember(AbstractOperator operator, String domName, String groupName, String playerName) {
|
||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "添加成员 %s 到权限组 %s 失败", playerName, groupName);
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_AddGroupMemberFailed, playerName, groupName);
|
||||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "添加成员 %s 到权限组 %s 成功", playerName, groupName);
|
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, Translation.Messages_AddGroupMemberSuccess, playerName, groupName);
|
||||||
DominionDTO dominion = DominionDTO.select(domName);
|
DominionDTO dominion = DominionDTO.select(domName);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在", domName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_DominionNotExist, domName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
GroupDTO group = GroupDTO.select(dominion.getId(), groupName);
|
GroupDTO group = GroupDTO.select(dominion.getId(), groupName);
|
||||||
if (group == null) {
|
if (group == null) {
|
||||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在名为 %s 的权限组", domName, groupName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_GroupNotExist, domName, groupName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (noAuthToChangeFlags(operator, dominion)) {
|
if (noAuthToChangeFlags(operator, dominion)) {
|
||||||
operator.setResponse(FAIL.addMessage("你没有权限修改领地 %s 的权限组 %s 成员", domName, groupName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_NoPermissionForGroupMember, domName, groupName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (group.getAdmin() && notOwner(operator, dominion)) {
|
if (group.getAdmin() && notOwner(operator, dominion)) {
|
||||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法添加成员到管理员权限组", domName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_NotDominionOwnerForGroupMember, domName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PlayerDTO player = PlayerDTO.select(playerName);
|
PlayerDTO player = PlayerDTO.select(playerName);
|
||||||
if (player == null) {
|
if (player == null) {
|
||||||
operator.setResponse(FAIL.addMessage("玩家 %s 不存在", playerName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_PlayerNotExist, playerName));
|
||||||
return;
|
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 的成员,无法直接加入权限组", playerName, domName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_PlayerNotDominionMember, playerName, domName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (Objects.equals(privilege.getGroupId(), group.getId())) {
|
if (Objects.equals(privilege.getGroupId(), group.getId())) {
|
||||||
operator.setResponse(FAIL.addMessage("玩家 %s 已在权限组 %s 中", playerName, groupName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_PlayerAlreadyInGroup, playerName, groupName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (notOwner(operator, dominion) && privilege.getAdmin()) {
|
if (notOwner(operator, dominion) && privilege.getAdmin()) {
|
||||||
operator.setResponse(FAIL.addMessage("%s 是管理员,你不是领地 %s 的拥有者,无法添加管理员到权限组", playerName, domName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_PlayerIsOwnerForGroupMember, playerName, domName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
privilege = privilege.setGroupId(group.getId());
|
privilege = privilege.setGroupId(group.getId());
|
||||||
if (privilege == null) {
|
if (privilege == null) {
|
||||||
operator.setResponse(FAIL.addMessage("请联系服务器管理员"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_DatabaseError));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
operator.setResponse(SUCCESS);
|
operator.setResponse(SUCCESS);
|
||||||
@ -222,43 +223,43 @@ public class GroupController {
|
|||||||
* @param playerName 玩家名称
|
* @param playerName 玩家名称
|
||||||
*/
|
*/
|
||||||
public static void removeMember(AbstractOperator operator, String domName, String groupName, String playerName) {
|
public static void removeMember(AbstractOperator operator, String domName, String groupName, String playerName) {
|
||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "从权限组 %s 移除成员 %s 失败", groupName, playerName);
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_RemoveGroupMemberFailed, groupName, playerName);
|
||||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "从权限组 %s 移除成员 %s 成功", groupName, playerName);
|
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, Translation.Messages_RemoveGroupMemberSuccess, groupName, playerName);
|
||||||
DominionDTO dominion = DominionDTO.select(domName);
|
DominionDTO dominion = DominionDTO.select(domName);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在", domName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_DominionNotExist, domName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
GroupDTO group = GroupDTO.select(dominion.getId(), groupName);
|
GroupDTO group = GroupDTO.select(dominion.getId(), groupName);
|
||||||
if (group == null) {
|
if (group == null) {
|
||||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在名为 %s 的权限组", domName, groupName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_GroupNotExist, domName, groupName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (noAuthToChangeFlags(operator, dominion)) {
|
if (noAuthToChangeFlags(operator, dominion)) {
|
||||||
operator.setResponse(FAIL.addMessage("你没有权限移除领地 %s 的权限组 %s 成员", domName, groupName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_NoPermissionForRemoveGroupMember, domName, groupName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (group.getAdmin() && notOwner(operator, dominion)) {
|
if (group.getAdmin() && notOwner(operator, dominion)) {
|
||||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法从管理员权限组移除成员", domName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_NotDominionOwnerForRemoveGroupMember, domName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PlayerDTO player = PlayerDTO.select(playerName);
|
PlayerDTO player = PlayerDTO.select(playerName);
|
||||||
if (player == null) {
|
if (player == null) {
|
||||||
operator.setResponse(FAIL.addMessage("玩家 %s 不存在", playerName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_PlayerNotExist, playerName));
|
||||||
return;
|
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 的成员", playerName, domName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_PlayerNotMember, playerName, domName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!Objects.equals(privilege.getGroupId(), group.getId())) {
|
if (!Objects.equals(privilege.getGroupId(), group.getId())) {
|
||||||
operator.setResponse(FAIL.addMessage("玩家 %s 不在权限组 %s 中", playerName, groupName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_PlayerNotInGroup, playerName, groupName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
privilege = privilege.setGroupId(-1);
|
privilege = privilege.setGroupId(-1);
|
||||||
if (privilege == null) {
|
if (privilege == null) {
|
||||||
operator.setResponse(FAIL.addMessage("请联系服务器管理员"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_DatabaseError));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
operator.setResponse(SUCCESS);
|
operator.setResponse(SUCCESS);
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package cn.lunadeer.dominion.controllers;
|
package cn.lunadeer.dominion.controllers;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.dtos.*;
|
import cn.lunadeer.dominion.dtos.*;
|
||||||
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.ControllerUtils.*;
|
import static cn.lunadeer.dominion.utils.ControllerUtils.*;
|
||||||
|
|
||||||
@ -14,26 +15,26 @@ public class MemberController {
|
|||||||
* @param dominionName 领地名称
|
* @param dominionName 领地名称
|
||||||
*/
|
*/
|
||||||
public static void memberRemove(AbstractOperator operator, String dominionName, String player_name) {
|
public static void memberRemove(AbstractOperator operator, String dominionName, String player_name) {
|
||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "将玩家 %s 从领地 %s 移除失败", player_name, dominionName);
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_RemoveMemberFailed, player_name, dominionName);
|
||||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "将玩家 %s 从领地 %s 移除成功", player_name, dominionName);
|
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, Translation.Messages_RemoveMemberSuccess, player_name, dominionName);
|
||||||
DominionDTO dominion = DominionDTO.select(dominionName);
|
DominionDTO dominion = DominionDTO.select(dominionName);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在", dominionName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_DominionNotExist, dominionName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (noAuthToChangeFlags(operator, dominion)) return;
|
if (noAuthToChangeFlags(operator, dominion)) return;
|
||||||
PlayerDTO player = PlayerController.getPlayerDTO(player_name);
|
PlayerDTO player = PlayerController.getPlayerDTO(player_name);
|
||||||
if (player == null) {
|
if (player == null) {
|
||||||
operator.setResponse(FAIL.addMessage("玩家 %s 不存在或没有登录过", player_name));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_PlayerNotExist, player_name));
|
||||||
return;
|
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(Translation.Messages_PlayerNotMember, player_name, dominionName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (isAdmin(privilege) && notOwner(operator, dominion)) {
|
if (isAdmin(privilege) && notOwner(operator, dominion)) {
|
||||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法移除一个领地管理员", dominionName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_NotDominionOwnerForRemoveAdmin, dominionName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
MemberDTO.delete(player.getUuid(), dominion.getId());
|
MemberDTO.delete(player.getUuid(), dominion.getId());
|
||||||
@ -50,31 +51,31 @@ public class MemberController {
|
|||||||
* @param dominionName 领地名称
|
* @param dominionName 领地名称
|
||||||
*/
|
*/
|
||||||
public static void setMemberFlag(AbstractOperator operator, String dominionName, String player_name, String flag, boolean value) {
|
public static void setMemberFlag(AbstractOperator operator, String dominionName, String player_name, String flag, boolean value) {
|
||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "设置玩家 %s 在领地 %s 的权限 %s 为 %s 失败", player_name, dominionName, flag, value);
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_SetMemberFlagFailed, player_name, dominionName, flag, value);
|
||||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "设置玩家 %s 在领地 %s 的权限 %s 为 %s 成功", player_name, dominionName, flag, value);
|
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, Translation.Messages_SetMemberFlagSuccess, player_name, dominionName, flag, value);
|
||||||
DominionDTO dominion = DominionDTO.select(dominionName);
|
DominionDTO dominion = DominionDTO.select(dominionName);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在", dominionName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_DominionNotExist, dominionName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (noAuthToChangeFlags(operator, dominion)) return;
|
if (noAuthToChangeFlags(operator, dominion)) return;
|
||||||
PlayerDTO player = PlayerController.getPlayerDTO(player_name);
|
PlayerDTO player = PlayerController.getPlayerDTO(player_name);
|
||||||
if (player == null) {
|
if (player == null) {
|
||||||
operator.setResponse(FAIL.addMessage("玩家 %s 不存在或没有登录过", player_name));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_PlayerNotExist, player_name));
|
||||||
return;
|
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(Translation.Messages_PlayerNotMember, player_name, dominionName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
GroupDTO group = GroupDTO.select(privilege.getGroupId());
|
GroupDTO group = GroupDTO.select(privilege.getGroupId());
|
||||||
if (group != null) {
|
if (group != null) {
|
||||||
operator.setResponse(FAIL.addMessage("玩家 %s 属于 %s 权限组,无法单独设置权限", player_name, group.getName()));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_PlayerBelongToGroup, player_name, group.getNamePlain()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if ((flag.equals("admin") || isAdmin(privilege)) && notOwner(operator, dominion)) {
|
if ((flag.equals("admin") || isAdmin(privilege)) && notOwner(operator, dominion)) {
|
||||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法修改其他玩家管理员的权限", dominionName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_NotDominionOwnerForSetAdmin, dominionName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (flag.equals("admin")) {
|
if (flag.equals("admin")) {
|
||||||
@ -82,7 +83,7 @@ public class MemberController {
|
|||||||
} else {
|
} else {
|
||||||
Flag f = Flag.getFlag(flag);
|
Flag f = Flag.getFlag(flag);
|
||||||
if (f == null) {
|
if (f == null) {
|
||||||
operator.setResponse(FAIL.addMessage("未知的领地权限 %s", flag));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_UnknownFlag, flag));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
privilege.setFlagValue(f, value);
|
privilege.setFlagValue(f, value);
|
||||||
@ -91,26 +92,26 @@ public class MemberController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void memberAdd(AbstractOperator operator, String dominionName, String player_name) {
|
public static void memberAdd(AbstractOperator operator, String dominionName, String player_name) {
|
||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "将玩家 %s 添加到领地成员 %s 失败", player_name, dominionName);
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_AddMemberFailed, player_name, dominionName);
|
||||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "将玩家 %s 添加到领地成员 %s 成功", player_name, dominionName);
|
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, Translation.Messages_AddMemberSuccess, player_name, dominionName);
|
||||||
DominionDTO dominion = DominionDTO.select(dominionName);
|
DominionDTO dominion = DominionDTO.select(dominionName);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在", dominionName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_DominionNotExist, dominionName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (noAuthToChangeFlags(operator, dominion)) return;
|
if (noAuthToChangeFlags(operator, dominion)) return;
|
||||||
PlayerDTO player = PlayerController.getPlayerDTO(player_name);
|
PlayerDTO player = PlayerController.getPlayerDTO(player_name);
|
||||||
if (player == null) {
|
if (player == null) {
|
||||||
operator.setResponse(FAIL.addMessage("玩家 %s 不存在或没有登录过", player_name));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_PlayerNotExist, player_name));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (dominion.getOwner().equals(player.getUuid())) {
|
if (dominion.getOwner().equals(player.getUuid())) {
|
||||||
operator.setResponse(FAIL.addMessage("玩家 %s 是领地 %s 的拥有者,不可以被添加为成员", player_name, dominionName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_OwnerCannotBeMember, player_name, dominionName));
|
||||||
return;
|
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(Translation.Messages_PlayerAlreadyMember, player_name, dominionName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
privilege = MemberDTO.insert(new MemberDTO(player.getUuid(), dominion));
|
privilege = MemberDTO.insert(new MemberDTO(player.getUuid(), dominion));
|
||||||
@ -122,31 +123,31 @@ public class MemberController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void applyTemplate(AbstractOperator operator, String dominionName, String playerName, String templateName) {
|
public static void applyTemplate(AbstractOperator operator, String dominionName, String playerName, String templateName) {
|
||||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "应用模板 %s 到玩家 %s 在领地 %s 的权限成功", templateName, playerName, dominionName);
|
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, Translation.Messages_ApplyTemplateSuccess, templateName, playerName, dominionName);
|
||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "应用模板 %s 到玩家 %s 在领地 %s 的权限失败", templateName, playerName, dominionName);
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_ApplyTemplateFailed, templateName, playerName, dominionName);
|
||||||
DominionDTO dominion = DominionDTO.select(dominionName);
|
DominionDTO dominion = DominionDTO.select(dominionName);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
operator.setResponse(FAIL.addMessage("领地 %s 不存在", dominionName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_DominionNotExist, dominionName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (noAuthToChangeFlags(operator, dominion)) return;
|
if (noAuthToChangeFlags(operator, dominion)) return;
|
||||||
PlayerDTO player = PlayerDTO.select(playerName);
|
PlayerDTO player = PlayerDTO.select(playerName);
|
||||||
if (player == null) {
|
if (player == null) {
|
||||||
operator.setResponse(FAIL.addMessage("玩家 %s 不存在或没有登录过", playerName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_PlayerNotExist, playerName));
|
||||||
return;
|
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 的成员", playerName, dominionName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_PlayerNotMember, playerName, dominionName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PrivilegeTemplateDTO template = PrivilegeTemplateDTO.select(operator.getUniqueId(), templateName);
|
PrivilegeTemplateDTO template = PrivilegeTemplateDTO.select(operator.getUniqueId(), templateName);
|
||||||
if (template == null) {
|
if (template == null) {
|
||||||
operator.setResponse(FAIL.addMessage("模板 %s 不存在", templateName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_TemplateNotExist, templateName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (notOwner(operator, dominion) && (isAdmin(privilege) || template.getAdmin())) {
|
if (notOwner(operator, dominion) && (isAdmin(privilege) || template.getAdmin())) {
|
||||||
operator.setResponse(FAIL.addMessage("你不是领地 %s 的拥有者,无法修改其他管理员的权限", dominionName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_NotDominionOwnerForSetAdmin, dominionName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
privilege = privilege.applyTemplate(template);
|
privilege = privilege.applyTemplate(template);
|
||||||
|
@ -2,6 +2,7 @@ package cn.lunadeer.dominion.controllers;
|
|||||||
|
|
||||||
import cn.lunadeer.dominion.dtos.Flag;
|
import cn.lunadeer.dominion.dtos.Flag;
|
||||||
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
|
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
|
||||||
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -14,25 +15,25 @@ public class TemplateController {
|
|||||||
* @param templateName 模板名称
|
* @param templateName 模板名称
|
||||||
*/
|
*/
|
||||||
public static void createTemplate(AbstractOperator operator, String templateName) {
|
public static void createTemplate(AbstractOperator operator, String templateName) {
|
||||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "创建成功");
|
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, Translation.Messages_CreateTemplateSuccess, templateName);
|
||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "创建失败");
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_CreateTemplateFailed, templateName);
|
||||||
if (templateName.contains(" ")) {
|
if (templateName.contains(" ")) {
|
||||||
operator.setResponse(FAIL.addMessage("模板名称不能包含空格"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_TemplateNameInvalid));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
List<PrivilegeTemplateDTO> templates = PrivilegeTemplateDTO.selectAll(operator.getUniqueId());
|
List<PrivilegeTemplateDTO> templates = PrivilegeTemplateDTO.selectAll(operator.getUniqueId());
|
||||||
for (PrivilegeTemplateDTO template : templates) {
|
for (PrivilegeTemplateDTO template : templates) {
|
||||||
if (template.getName().equals(templateName)) {
|
if (template.getName().equals(templateName)) {
|
||||||
operator.setResponse(FAIL.addMessage("已经存在名为 %s 的权限模板", templateName));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_TemplateNameExist, templateName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PrivilegeTemplateDTO template = PrivilegeTemplateDTO.create(operator.getUniqueId(), templateName);
|
PrivilegeTemplateDTO template = PrivilegeTemplateDTO.create(operator.getUniqueId(), templateName);
|
||||||
if (template == null) {
|
if (template == null) {
|
||||||
operator.setResponse(FAIL.addMessage("可能是数据库错误,请联系管理员"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_DatabaseError));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
operator.setResponse(SUCCESS.addMessage("成功创建名为 %s 的权限模板", templateName));
|
operator.setResponse(SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -42,15 +43,15 @@ public class TemplateController {
|
|||||||
* @param templateName 模板名称
|
* @param templateName 模板名称
|
||||||
*/
|
*/
|
||||||
public static void deleteTemplate(AbstractOperator operator, String templateName) {
|
public static void deleteTemplate(AbstractOperator operator, String templateName) {
|
||||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "删除成功");
|
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, Translation.Messages_DeleteTemplateSuccess, templateName);
|
||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "删除失败");
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_DeleteTemplateFailed, templateName);
|
||||||
PrivilegeTemplateDTO template = PrivilegeTemplateDTO.select(operator.getUniqueId(), templateName);
|
PrivilegeTemplateDTO template = PrivilegeTemplateDTO.select(operator.getUniqueId(), templateName);
|
||||||
if (template == null) {
|
if (template == null) {
|
||||||
operator.setResponse(FAIL.addMessage("模板不存在"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_TemplateNotExist, templateName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!template.getCreator().equals(operator.getUniqueId())) {
|
if (!template.getCreator().equals(operator.getUniqueId())) {
|
||||||
operator.setResponse(FAIL.addMessage("这不是你的模板"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_TemplateNotExist, templateName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
PrivilegeTemplateDTO.delete(operator.getUniqueId(), templateName);
|
PrivilegeTemplateDTO.delete(operator.getUniqueId(), templateName);
|
||||||
@ -66,11 +67,11 @@ public class TemplateController {
|
|||||||
* @param value 权限值
|
* @param value 权限值
|
||||||
*/
|
*/
|
||||||
public static void setTemplateFlag(AbstractOperator operator, String templateName, String flag_name, boolean value) {
|
public static void setTemplateFlag(AbstractOperator operator, String templateName, String flag_name, boolean value) {
|
||||||
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, "设置成功");
|
AbstractOperator.Result SUCCESS = new AbstractOperator.Result(AbstractOperator.Result.SUCCESS, Translation.Messages_SetTemplateFlagSuccess, templateName, flag_name, value);
|
||||||
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "设置失败");
|
AbstractOperator.Result FAIL = new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_SetTemplateFlagFailed, templateName, flag_name, value);
|
||||||
PrivilegeTemplateDTO template = PrivilegeTemplateDTO.select(operator.getUniqueId(), templateName);
|
PrivilegeTemplateDTO template = PrivilegeTemplateDTO.select(operator.getUniqueId(), templateName);
|
||||||
if (template == null) {
|
if (template == null) {
|
||||||
operator.setResponse(FAIL.addMessage("模板不存在"));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_TemplateNotExist, templateName));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (flag_name.equals("admin")) {
|
if (flag_name.equals("admin")) {
|
||||||
@ -78,12 +79,12 @@ public class TemplateController {
|
|||||||
} else {
|
} else {
|
||||||
Flag f = Flag.getFlag(flag_name);
|
Flag f = Flag.getFlag(flag_name);
|
||||||
if (f == null) {
|
if (f == null) {
|
||||||
operator.setResponse(FAIL.addMessage("未知的权限 %s", flag_name));
|
operator.setResponse(FAIL.addMessage(Translation.Messages_UnknownFlag, flag_name));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
template.setFlagValue(f, value);
|
template.setFlagValue(f, value);
|
||||||
}
|
}
|
||||||
operator.setResponse(SUCCESS.addMessage("成功设置模板 " + template.getName() + " 的权限 " + flag_name + " 为 " + value));
|
operator.setResponse(SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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.api.dtos.Flag;
|
||||||
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,6 +11,7 @@ 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.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@ -17,13 +19,13 @@ import java.sql.ResultSet;
|
|||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class DominionDTO {
|
public class DominionDTO implements cn.lunadeer.dominion.api.dtos.DominionDTO {
|
||||||
private static List<DominionDTO> query(String sql, Object... args) {
|
private static List<DominionDTO> query(String sql, Object... args) {
|
||||||
List<DominionDTO> dominions = new ArrayList<>();
|
List<DominionDTO> dominions = new ArrayList<>();
|
||||||
try (ResultSet rs = DatabaseManager.instance.query(sql, args)) {
|
try (ResultSet rs = DatabaseManager.instance.query(sql, args)) {
|
||||||
return getDTOFromRS(rs);
|
return getDTOFromRS(rs);
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
DatabaseManager.handleDatabaseError("数据库操作失败: ", e, sql);
|
DatabaseManager.handleDatabaseError("DominionDTO.query ", e, sql);
|
||||||
}
|
}
|
||||||
return dominions;
|
return dominions;
|
||||||
}
|
}
|
||||||
@ -45,7 +47,7 @@ public class DominionDTO {
|
|||||||
Integer parentDomId = rs.getInt("parent_dom_id");
|
Integer parentDomId = rs.getInt("parent_dom_id");
|
||||||
String tp_location = rs.getString("tp_location");
|
String tp_location = rs.getString("tp_location");
|
||||||
Map<Flag, Boolean> flags = new HashMap<>();
|
Map<Flag, Boolean> flags = new HashMap<>();
|
||||||
for (Flag f : Flag.getDominionFlagsEnabled()) {
|
for (Flag f : cn.lunadeer.dominion.dtos.Flag.getDominionFlagsEnabled()) {
|
||||||
flags.put(f, rs.getBoolean(f.getFlagName()));
|
flags.put(f, rs.getBoolean(f.getFlagName()));
|
||||||
}
|
}
|
||||||
String color = rs.getString("color");
|
String color = rs.getString("color");
|
||||||
@ -88,7 +90,7 @@ public class DominionDTO {
|
|||||||
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.isEmpty()) return null;
|
||||||
return dominions.getFirst();
|
return dominions.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<DominionDTO> selectByParentId(World world, Integer parentId) {
|
public static List<DominionDTO> selectByParentId(World world, Integer parentId) {
|
||||||
@ -112,7 +114,7 @@ public class DominionDTO {
|
|||||||
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.isEmpty()) return null;
|
||||||
return dominions.getFirst();
|
return dominions.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static DominionDTO insert(DominionDTO dominion) {
|
public static DominionDTO insert(DominionDTO dominion) {
|
||||||
@ -125,16 +127,16 @@ public class DominionDTO {
|
|||||||
.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);
|
||||||
for (Flag f : Flag.getDominionFlagsEnabled()) {
|
for (Flag f : cn.lunadeer.dominion.dtos.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.isEmpty()) return null;
|
||||||
return dominions.getFirst();
|
return dominions.get(0);
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
DatabaseManager.handleDatabaseError("数据库操作失败: ", e, insert.toString());
|
DatabaseManager.handleDatabaseError("DominionDTO.insert ", e, insert.toString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -185,6 +187,8 @@ public class DominionDTO {
|
|||||||
this.y2.value = y2;
|
this.y2.value = y2;
|
||||||
this.z2.value = z2;
|
this.z2.value = z2;
|
||||||
this.parentDomId.value = parentDomId;
|
this.parentDomId.value = parentDomId;
|
||||||
|
this.joinMessage.value = Dominion.config.getDefaultJoinMessage();
|
||||||
|
this.leaveMessage.value = Dominion.config.getDefaultLeaveMessage();
|
||||||
}
|
}
|
||||||
|
|
||||||
public DominionDTO(UUID owner, String name, @NotNull World world,
|
public DominionDTO(UUID owner, String name, @NotNull World world,
|
||||||
@ -207,8 +211,8 @@ public class DominionDTO {
|
|||||||
private final Field y2 = new Field("y2", FieldType.INT);
|
private final Field y2 = new Field("y2", FieldType.INT);
|
||||||
private final Field z2 = new Field("z2", FieldType.INT);
|
private final Field z2 = new Field("z2", FieldType.INT);
|
||||||
private final Field parentDomId = new Field("parent_dom_id", -1);
|
private final Field parentDomId = new Field("parent_dom_id", -1);
|
||||||
private final Field joinMessage = new Field("join_message", "欢迎来到 ${DOM_NAME}!");
|
private final Field joinMessage = new Field("join_message", "");
|
||||||
private final Field leaveMessage = new Field("leave_message", "你正在离开 ${DOM_NAME},欢迎下次光临~");
|
private final Field leaveMessage = new Field("leave_message", "");
|
||||||
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");
|
||||||
@ -216,11 +220,13 @@ public class DominionDTO {
|
|||||||
|
|
||||||
|
|
||||||
// getters and setters
|
// getters and setters
|
||||||
public Integer getId() {
|
@Override
|
||||||
|
public @NotNull Integer getId() {
|
||||||
return (Integer) id.value;
|
return (Integer) id.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public UUID getOwner() {
|
@Override
|
||||||
|
public @NotNull UUID getOwner() {
|
||||||
return UUID.fromString((String) owner.value);
|
return UUID.fromString((String) owner.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -232,36 +238,48 @@ public class DominionDTO {
|
|||||||
List<DominionDTO> dominions = getDTOFromRS(rs);
|
List<DominionDTO> dominions = getDTOFromRS(rs);
|
||||||
if (dominions.isEmpty()) return null;
|
if (dominions.isEmpty()) 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("DominionDTO.doUpdate ", e, updateRow.toString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public DominionDTO setOwner(UUID owner) {
|
public DominionDTO setOwner(UUID owner) {
|
||||||
this.owner.value = owner.toString();
|
this.owner.value = owner.toString();
|
||||||
return doUpdate(new UpdateRow().field(this.owner));
|
return doUpdate(new UpdateRow().field(this.owner));
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getName() {
|
@Override
|
||||||
|
public DominionDTO setOwner(Player owner) {
|
||||||
|
this.owner.value = owner.getUniqueId().toString();
|
||||||
|
return doUpdate(new UpdateRow().field(this.owner));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String getName() {
|
||||||
return (String) name.value;
|
return (String) name.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public DominionDTO setName(String name) {
|
public DominionDTO setName(String name) {
|
||||||
this.name.value = name;
|
this.name.value = name;
|
||||||
return doUpdate(new UpdateRow().field(this.name));
|
return doUpdate(new UpdateRow().field(this.name));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public @Nullable World getWorld() {
|
public @Nullable World getWorld() {
|
||||||
return Dominion.instance.getServer().getWorld(getWorldUid());
|
return Dominion.instance.getServer().getWorld(getWorldUid());
|
||||||
}
|
}
|
||||||
|
|
||||||
public UUID getWorldUid() {
|
@Override
|
||||||
|
public @NotNull UUID getWorldUid() {
|
||||||
return UUID.fromString((String) world_uid.value);
|
return UUID.fromString((String) world_uid.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getX1() {
|
@Override
|
||||||
|
public @NotNull Integer getX1() {
|
||||||
return (Integer) x1.value;
|
return (Integer) x1.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -270,7 +288,8 @@ public class DominionDTO {
|
|||||||
return doUpdate(new UpdateRow().field(this.x1));
|
return doUpdate(new UpdateRow().field(this.x1));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getY1() {
|
@Override
|
||||||
|
public @NotNull Integer getY1() {
|
||||||
return (Integer) y1.value;
|
return (Integer) y1.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -279,7 +298,8 @@ public class DominionDTO {
|
|||||||
return doUpdate(new UpdateRow().field(this.y1));
|
return doUpdate(new UpdateRow().field(this.y1));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getZ1() {
|
@Override
|
||||||
|
public @NotNull Integer getZ1() {
|
||||||
return (Integer) z1.value;
|
return (Integer) z1.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -288,7 +308,8 @@ public class DominionDTO {
|
|||||||
return doUpdate(new UpdateRow().field(this.z1));
|
return doUpdate(new UpdateRow().field(this.z1));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getX2() {
|
@Override
|
||||||
|
public @NotNull Integer getX2() {
|
||||||
return (Integer) x2.value;
|
return (Integer) x2.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -297,7 +318,8 @@ public class DominionDTO {
|
|||||||
return doUpdate(new UpdateRow().field(this.x2));
|
return doUpdate(new UpdateRow().field(this.x2));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getY2() {
|
@Override
|
||||||
|
public @NotNull Integer getY2() {
|
||||||
return (Integer) y2.value;
|
return (Integer) y2.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -306,7 +328,8 @@ public class DominionDTO {
|
|||||||
return doUpdate(new UpdateRow().field(this.y2));
|
return doUpdate(new UpdateRow().field(this.y2));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getZ2() {
|
@Override
|
||||||
|
public @NotNull Integer getZ2() {
|
||||||
return (Integer) z2.value;
|
return (Integer) z2.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -315,43 +338,53 @@ public class DominionDTO {
|
|||||||
return doUpdate(new UpdateRow().field(this.z2));
|
return doUpdate(new UpdateRow().field(this.z2));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getSquare() {
|
@Override
|
||||||
|
public @NotNull Integer getSquare() {
|
||||||
return getWidthX() * getWidthZ();
|
return getWidthX() * getWidthZ();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getVolume() {
|
@Override
|
||||||
|
public @NotNull Integer getVolume() {
|
||||||
return getSquare() * getHeight();
|
return getSquare() * getHeight();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getWidthX() {
|
@Override
|
||||||
|
public @NotNull Integer getWidthX() {
|
||||||
return getX2() - getX1();
|
return getX2() - getX1();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getHeight() {
|
@Override
|
||||||
|
public @NotNull Integer getHeight() {
|
||||||
return getY2() - getY1();
|
return getY2() - getY1();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getWidthZ() {
|
@Override
|
||||||
|
public @NotNull Integer getWidthZ() {
|
||||||
return getZ2() - getZ1();
|
return getZ2() - getZ1();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getParentDomId() {
|
@Override
|
||||||
|
public @NotNull Integer getParentDomId() {
|
||||||
return (Integer) parentDomId.value;
|
return (Integer) parentDomId.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getJoinMessage() {
|
@Override
|
||||||
|
public @NotNull String getJoinMessage() {
|
||||||
return (String) joinMessage.value;
|
return (String) joinMessage.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public DominionDTO setJoinMessage(String joinMessage) {
|
public DominionDTO setJoinMessage(String joinMessage) {
|
||||||
this.joinMessage.value = joinMessage;
|
this.joinMessage.value = joinMessage;
|
||||||
return doUpdate(new UpdateRow().field(this.joinMessage));
|
return doUpdate(new UpdateRow().field(this.joinMessage));
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getLeaveMessage() {
|
@Override
|
||||||
|
public @NotNull String getLeaveMessage() {
|
||||||
return (String) leaveMessage.value;
|
return (String) leaveMessage.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public DominionDTO setLeaveMessage(String leaveMessage) {
|
public DominionDTO setLeaveMessage(String leaveMessage) {
|
||||||
this.leaveMessage.value = leaveMessage;
|
this.leaveMessage.value = leaveMessage;
|
||||||
return doUpdate(new UpdateRow().field(this.leaveMessage));
|
return doUpdate(new UpdateRow().field(this.leaveMessage));
|
||||||
@ -362,12 +395,28 @@ public class DominionDTO {
|
|||||||
return flags.get(flag);
|
return flags.get(flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
public DominionDTO setFlagValue(Flag flag, Boolean value) {
|
@Override
|
||||||
|
public @NotNull Map<Flag, Boolean> getEnvironmentFlagValue() {
|
||||||
|
return flags.entrySet().stream()
|
||||||
|
.filter(e -> e.getKey().isEnvironmentFlag())
|
||||||
|
.collect(HashMap::new, (m, e) -> m.put(e.getKey(), e.getValue()), HashMap::putAll);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull Map<Flag, Boolean> getGuestPrivilegeFlagValue() {
|
||||||
|
return flags.entrySet().stream()
|
||||||
|
.filter(e -> !e.getKey().isEnvironmentFlag())
|
||||||
|
.collect(HashMap::new, (m, e) -> m.put(e.getKey(), e.getValue()), HashMap::putAll);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DominionDTO setFlagValue(@NotNull Flag flag, @NotNull Boolean value) {
|
||||||
flags.put(flag, value);
|
flags.put(flag, value);
|
||||||
Field flagField = new Field(flag.getFlagName(), value);
|
Field flagField = new Field(flag.getFlagName(), value);
|
||||||
return doUpdate(new UpdateRow().field(flagField));
|
return doUpdate(new UpdateRow().field(flagField));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public DominionDTO setXYZ(Integer x1, Integer y1, Integer z1, Integer x2, Integer y2, Integer z2) {
|
public DominionDTO setXYZ(Integer x1, Integer y1, Integer z1, Integer x2, Integer y2, Integer z2) {
|
||||||
this.x1.value = x1;
|
this.x1.value = x1;
|
||||||
this.y1.value = y1;
|
this.y1.value = y1;
|
||||||
@ -375,9 +424,25 @@ public class DominionDTO {
|
|||||||
this.x2.value = x2;
|
this.x2.value = x2;
|
||||||
this.y2.value = y2;
|
this.y2.value = y2;
|
||||||
this.z2.value = z2;
|
this.z2.value = z2;
|
||||||
|
if (x1 > x2) {
|
||||||
|
int tmp = x1;
|
||||||
|
this.x1.value = x2;
|
||||||
|
this.x2.value = tmp;
|
||||||
|
}
|
||||||
|
if (y1 > y2) {
|
||||||
|
int tmp = y1;
|
||||||
|
this.y1.value = y2;
|
||||||
|
this.y2.value = tmp;
|
||||||
|
}
|
||||||
|
if (z1 > z2) {
|
||||||
|
int tmp = z1;
|
||||||
|
this.z1.value = z2;
|
||||||
|
this.z2.value = tmp;
|
||||||
|
}
|
||||||
return doUpdate(new UpdateRow().field(this.x1).field(this.y1).field(this.z1).field(this.x2).field(this.y2).field(this.z2));
|
return doUpdate(new UpdateRow().field(this.x1).field(this.y1).field(this.z1).field(this.x2).field(this.y2).field(this.z2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public DominionDTO setXYZ(int[] cords) {
|
public DominionDTO setXYZ(int[] cords) {
|
||||||
if (cords.length == 6) {
|
if (cords.length == 6) {
|
||||||
return setXYZ(cords[0], cords[1], cords[2], cords[3], cords[4], cords[5]);
|
return setXYZ(cords[0], cords[1], cords[2], cords[3], cords[4], cords[5]);
|
||||||
@ -388,6 +453,7 @@ public class DominionDTO {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
public Location getTpLocation() {
|
public Location getTpLocation() {
|
||||||
if (Objects.equals(tp_location.value, "default")) {
|
if (Objects.equals(tp_location.value, "default")) {
|
||||||
return null;
|
return null;
|
||||||
@ -410,11 +476,13 @@ public class DominionDTO {
|
|||||||
return doUpdate(new UpdateRow().field(tp_location));
|
return doUpdate(new UpdateRow().field(tp_location));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Location getLocation1() {
|
@Override
|
||||||
|
public @NotNull Location getLocation1() {
|
||||||
return new Location(getWorld(), getX1(), getY1(), getZ1());
|
return new Location(getWorld(), getX1(), getY1(), getZ1());
|
||||||
}
|
}
|
||||||
|
|
||||||
public Location getLocation2() {
|
@Override
|
||||||
|
public @NotNull Location getLocation2() {
|
||||||
return new Location(getWorld(), getX2(), getY2(), getZ2());
|
return new Location(getWorld(), getX2(), getY2(), getZ2());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -423,22 +491,27 @@ public class DominionDTO {
|
|||||||
return doUpdate(new UpdateRow().field(this.color));
|
return doUpdate(new UpdateRow().field(this.color));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public int getColorR() {
|
public int getColorR() {
|
||||||
return Integer.valueOf(getColor().substring(1, 3), 16);
|
return Integer.valueOf(getColor().substring(1, 3), 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public int getColorG() {
|
public int getColorG() {
|
||||||
return Integer.valueOf(getColor().substring(3, 5), 16);
|
return Integer.valueOf(getColor().substring(3, 5), 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public int getColorB() {
|
public int getColorB() {
|
||||||
return Integer.valueOf(getColor().substring(5, 7), 16);
|
return Integer.valueOf(getColor().substring(5, 7), 16);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getColor() {
|
@Override
|
||||||
|
public @NotNull String getColor() {
|
||||||
return (String) color.value;
|
return (String) color.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public int getColorHex() {
|
public int getColorHex() {
|
||||||
return (getColorR() << 16) + (getColorG() << 8) + getColorB();
|
return (getColorR() << 16) + (getColorG() << 8) + getColorB();
|
||||||
}
|
}
|
||||||
|
@ -1,18 +1,20 @@
|
|||||||
package cn.lunadeer.dominion.dtos;
|
package cn.lunadeer.dominion.dtos;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Dominion;
|
import cn.lunadeer.dominion.Dominion;
|
||||||
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
import cn.lunadeer.minecraftpluginutils.JsonFile;
|
import cn.lunadeer.minecraftpluginutils.JsonFile;
|
||||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.i18n.Localization;
|
||||||
import com.alibaba.fastjson.JSONObject;
|
import com.alibaba.fastjson.JSONObject;
|
||||||
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
import java.text.Collator;
|
import java.text.Collator;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Comparator;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public enum Flag {
|
public enum Flag implements cn.lunadeer.dominion.api.dtos.Flag {
|
||||||
ANCHOR("anchor", "重生锚", "是否允许设置/使用重生锚", false, false, true),
|
ANCHOR("anchor", "重生锚", "是否允许设置/使用重生锚", false, false, true),
|
||||||
ANIMAL_KILLING("animal_killing", "对动物造成伤害", "是否允许对动物造成伤害", false, false, true),
|
ANIMAL_KILLING("animal_killing", "对动物造成伤害", "是否允许对动物造成伤害", false, false, true),
|
||||||
ANIMAL_SPAWN("animal_spawn", "动物生成(繁殖)", "是否允许动物生成(包括繁殖)", true, true, false),
|
ANIMAL_SPAWN("animal_spawn", "动物生成(繁殖)", "是否允许动物生成(包括繁殖)", true, true, false),
|
||||||
@ -43,6 +45,7 @@ public enum Flag {
|
|||||||
FLOW_IN_PROTECTION("flow_in_protection", "外部流体是否可以进入", "包含:岩浆、水(不会阻止领地内部的流体蔓延)", false, true, true),
|
FLOW_IN_PROTECTION("flow_in_protection", "外部流体是否可以进入", "包含:岩浆、水(不会阻止领地内部的流体蔓延)", false, true, true),
|
||||||
FLY("fly", "飞行", "不是翅鞘飞行,是类似于创造模式的飞行", false, false, false),
|
FLY("fly", "飞行", "不是翅鞘飞行,是类似于创造模式的飞行", false, false, false),
|
||||||
GLOW("glow", "玩家发光", "类似光灵箭的高亮效果", false, false, true),
|
GLOW("glow", "玩家发光", "类似光灵箭的高亮效果", false, false, true),
|
||||||
|
GRAVITY_BLOCK("gravity_block", "允许外部重力方块落入", "如果禁止则领地外重力方块进入领地会变为掉落物", false, true, true),
|
||||||
HARVEST("harvest", "收获", "收获庄稼、作物", false, false, true),
|
HARVEST("harvest", "收获", "收获庄稼、作物", false, false, true),
|
||||||
HONEY("honey", "蜂巢交互", "是否可以采蜂蜜", false, false, true),
|
HONEY("honey", "蜂巢交互", "是否可以采蜂蜜", false, false, true),
|
||||||
HOOK("hook", "使用钓钩", "是否可以使用钓钩", false, false, true),
|
HOOK("hook", "使用钓钩", "是否可以使用钓钩", false, false, true),
|
||||||
@ -77,7 +80,7 @@ public enum Flag {
|
|||||||
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;
|
||||||
private String display_name;
|
private String display_name;
|
||||||
@ -85,36 +88,50 @@ public enum Flag {
|
|||||||
private Boolean default_value;
|
private Boolean default_value;
|
||||||
private Boolean enable;
|
private Boolean enable;
|
||||||
private final Boolean dominion_only;
|
private final Boolean dominion_only;
|
||||||
|
private final String default_display_name;
|
||||||
|
private final String default_description;
|
||||||
|
|
||||||
Flag(String flagName, String displayName, String desc, boolean defaultValue, boolean dominion_only, boolean enable) {
|
Flag(String flagName, String displayName, String desc, boolean defaultValue, boolean dominion_only, boolean enable) {
|
||||||
this.flag_name = flagName;
|
this.flag_name = flagName;
|
||||||
|
this.default_display_name = displayName;
|
||||||
this.display_name = displayName;
|
this.display_name = displayName;
|
||||||
|
this.default_description = desc;
|
||||||
this.description = desc;
|
this.description = desc;
|
||||||
this.default_value = defaultValue;
|
this.default_value = defaultValue;
|
||||||
this.dominion_only = dominion_only;
|
this.dominion_only = dominion_only;
|
||||||
this.enable = enable;
|
this.enable = enable;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getFlagName() {
|
@Override
|
||||||
|
public @NotNull String getFlagName() {
|
||||||
return flag_name;
|
return flag_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getDisplayName() {
|
@Override
|
||||||
|
public @NotNull String getDisplayName() {
|
||||||
return display_name;
|
return display_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getDescription() {
|
@Override
|
||||||
|
public @NotNull String getDescription() {
|
||||||
return description;
|
return description;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean getDefaultValue() {
|
@Override
|
||||||
|
public @NotNull Boolean getDefaultValue() {
|
||||||
return default_value;
|
return default_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean getEnable() {
|
@Override
|
||||||
|
public @NotNull Boolean getEnable() {
|
||||||
return enable;
|
return enable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull Boolean isEnvironmentFlag() {
|
||||||
|
return dominion_only;
|
||||||
|
}
|
||||||
|
|
||||||
public void setDisplayName(String displayName) {
|
public void setDisplayName(String displayName) {
|
||||||
this.display_name = displayName;
|
this.display_name = displayName;
|
||||||
}
|
}
|
||||||
@ -131,30 +148,18 @@ public enum Flag {
|
|||||||
this.enable = enable;
|
this.enable = enable;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getDisplayNameKey() {
|
||||||
|
return "Flags." + flag_name + ".DisplayName";
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDescriptionKey() {
|
||||||
|
return "Flags." + flag_name + ".Description";
|
||||||
|
}
|
||||||
|
|
||||||
public static List<Flag> getAllFlags() {
|
public static List<Flag> getAllFlags() {
|
||||||
return Arrays.asList(Flag.values());
|
return Arrays.asList(Flag.values());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Flag> getDominionOnlyFlagsEnabled() {
|
|
||||||
List<Flag> flags = new ArrayList<>();
|
|
||||||
for (Flag flag : Flag.values()) {
|
|
||||||
if (!flag.dominion_only) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (!flag.enable) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
flags.add(flag);
|
|
||||||
}
|
|
||||||
Comparator<Object> comparator = Collator.getInstance(java.util.Locale.CHINA);
|
|
||||||
flags.sort((o1, o2) -> comparator.compare(o1.getDisplayName(), o2.getDisplayName()));
|
|
||||||
return flags;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static boolean isDominionOnlyFlag(String flagName) {
|
|
||||||
return getFlag(flagName).dominion_only;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<Flag> getDominionFlagsEnabled() {
|
public static List<Flag> getDominionFlagsEnabled() {
|
||||||
List<Flag> flags = new ArrayList<>();
|
List<Flag> flags = new ArrayList<>();
|
||||||
for (Flag flag : Flag.values()) {
|
for (Flag flag : Flag.values()) {
|
||||||
@ -168,10 +173,25 @@ public enum Flag {
|
|||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Flag> getAllDominionFlags() {
|
public static boolean isDominionOnlyFlag(String flagName) {
|
||||||
return new ArrayList<>(Arrays.asList(Flag.values()));
|
return getFlag(flagName).dominion_only;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static List<Flag> getEnvironmentFlagsEnabled() {
|
||||||
|
List<Flag> flags = new ArrayList<>();
|
||||||
|
for (Flag flag : Flag.values()) {
|
||||||
|
if (!flag.dominion_only) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (!flag.enable) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
flags.add(flag);
|
||||||
|
}
|
||||||
|
Comparator<Object> comparator = Collator.getInstance(java.util.Locale.CHINA);
|
||||||
|
flags.sort((o1, o2) -> comparator.compare(o1.getDisplayName(), o2.getDisplayName()));
|
||||||
|
return flags;
|
||||||
|
}
|
||||||
|
|
||||||
public static List<Flag> getPrivilegeFlagsEnabled() {
|
public static List<Flag> getPrivilegeFlagsEnabled() {
|
||||||
List<Flag> flags = new ArrayList<>();
|
List<Flag> flags = new ArrayList<>();
|
||||||
@ -189,6 +209,10 @@ public enum Flag {
|
|||||||
return flags;
|
return flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static List<Flag> getAllDominionFlags() {
|
||||||
|
return new ArrayList<>(Arrays.asList(Flag.values()));
|
||||||
|
}
|
||||||
|
|
||||||
public static List<Flag> getAllPrivilegeFlags() {
|
public static List<Flag> getAllPrivilegeFlags() {
|
||||||
List<Flag> flags = new ArrayList<>();
|
List<Flag> flags = new ArrayList<>();
|
||||||
for (Flag flag : Flag.values()) {
|
for (Flag flag : Flag.values()) {
|
||||||
@ -204,77 +228,77 @@ public enum Flag {
|
|||||||
return Arrays.stream(Flag.values()).filter(flag -> flag.getFlagName().equals(flagName)).findFirst().orElse(null);
|
return Arrays.stream(Flag.values()).filter(flag -> flag.getFlagName().equals(flagName)).findFirst().orElse(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/**
|
||||||
{
|
* 从文件中加载Flag配置
|
||||||
flag_name: {
|
|
||||||
display_name: "",
|
|
||||||
description: "",
|
|
||||||
default_value: true,
|
|
||||||
enable: true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
*/
|
||||||
|
public static void loadFromFile() {
|
||||||
public static JSONObject serializeToJson(Flag flag) {
|
try {
|
||||||
JSONObject json = new JSONObject();
|
loadLegacyJsonFlags();
|
||||||
json.put("display_name", flag.getDisplayName());
|
loadFlagsConfiguration();
|
||||||
json.put("description", flag.getDescription());
|
} catch (Exception e) {
|
||||||
json.put("default_value", flag.getDefaultValue());
|
XLogger.err(Translation.Config_Check_LoadFlagError, e.getMessage());
|
||||||
json.put("enable", flag.getEnable());
|
}
|
||||||
return json;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static JSONObject serializeToJson() {
|
private static void loadLegacyJsonFlags() throws Exception {
|
||||||
JSONObject json = new JSONObject();
|
File jsonFile = new File(Dominion.instance.getDataFolder(), "flags.json");
|
||||||
|
if (jsonFile.exists()) {
|
||||||
|
JSONObject jsonObject = JsonFile.loadFromFile(jsonFile);
|
||||||
|
if (jsonObject != null) {
|
||||||
|
deserializeFromJson(jsonObject);
|
||||||
|
}
|
||||||
|
jsonFile.delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void loadFlagsConfiguration() throws IOException {
|
||||||
|
File yamlFile = new File(Dominion.instance.getDataFolder(), "flags.yml");
|
||||||
|
if (!yamlFile.exists()) {
|
||||||
|
Dominion.instance.saveResource("flags.yml", false);
|
||||||
|
}
|
||||||
|
YamlConfiguration yaml = YamlConfiguration.loadConfiguration(yamlFile);
|
||||||
for (Flag flag : getAllFlags()) {
|
for (Flag flag : getAllFlags()) {
|
||||||
JSONObject flagJson = serializeToJson(flag);
|
// load flags name & description translations
|
||||||
json.put(flag.getFlagName(), flagJson);
|
((Translation)(Localization.instance)).loadOrSetFlagTranslation(flag);
|
||||||
|
// load flags default value & enable
|
||||||
|
String defaultValueKey;
|
||||||
|
String enableKey;
|
||||||
|
String descriptionKey;
|
||||||
|
if (flag.dominion_only) {
|
||||||
|
descriptionKey = "environment." + flag.getFlagName();
|
||||||
|
defaultValueKey = "environment." + flag.getFlagName() + ".default";
|
||||||
|
enableKey = "environment." + flag.getFlagName() + ".enable";
|
||||||
|
} else {
|
||||||
|
descriptionKey = "privilege." + flag.getFlagName();
|
||||||
|
defaultValueKey = "privilege." + flag.getFlagName() + ".default";
|
||||||
|
enableKey = "privilege." + flag.getFlagName() + ".enable";
|
||||||
}
|
}
|
||||||
return json;
|
if (yaml.contains(defaultValueKey)) {
|
||||||
|
flag.setDefaultValue(yaml.getBoolean(defaultValueKey));
|
||||||
|
} else {
|
||||||
|
yaml.set(defaultValueKey, flag.getDefaultValue());
|
||||||
|
}
|
||||||
|
if (yaml.contains(enableKey)) {
|
||||||
|
flag.setEnable(yaml.getBoolean(enableKey));
|
||||||
|
} else {
|
||||||
|
yaml.set(enableKey, flag.getEnable());
|
||||||
|
}
|
||||||
|
yaml.setInlineComments(descriptionKey, Collections.singletonList(flag.getDisplayName() + "-" + flag.getDescription()));
|
||||||
|
}
|
||||||
|
yaml.save(yamlFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public static void deserializeFromJson(JSONObject jsonObject) {
|
public static void deserializeFromJson(JSONObject jsonObject) {
|
||||||
for (Flag flag : getAllFlags()) {
|
for (Flag flag : getAllFlags()) {
|
||||||
try {
|
try {
|
||||||
JSONObject flagJson = (JSONObject) jsonObject.get(flag.getFlagName());
|
JSONObject flagJson = (JSONObject) jsonObject.get(flag.getFlagName());
|
||||||
if (flagJson != null) {
|
if (flagJson != null) {
|
||||||
flag.setDisplayName((String) flagJson.get("display_name"));
|
flag.setDefaultValue((Boolean) flagJson.getOrDefault("default_value", flag.getDefaultValue()));
|
||||||
flag.setDescription((String) flagJson.get("description"));
|
flag.setEnable((Boolean) flagJson.getOrDefault("enable", flag.getEnable()));
|
||||||
flag.setDefaultValue((Boolean) flagJson.get("default_value"));
|
|
||||||
flag.setEnable((Boolean) flagJson.get("enable"));
|
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception ignored) {
|
||||||
XLogger.warn("读取权限 %s 配置失败:%s,已跳过", flag.getFlagName(), e.getMessage());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void loadFromJson() {
|
|
||||||
try {
|
|
||||||
File flagFile = new File(Dominion.instance.getDataFolder(), "flags.json");
|
|
||||||
if (!flagFile.exists()) {
|
|
||||||
saveToJson();
|
|
||||||
}
|
|
||||||
JSONObject jsonObject = JsonFile.loadFromFile(flagFile);
|
|
||||||
if (jsonObject == null) {
|
|
||||||
XLogger.warn("读取权限配置失败,已重置");
|
|
||||||
saveToJson();
|
|
||||||
}
|
|
||||||
deserializeFromJson(jsonObject);
|
|
||||||
saveToJson(); // 复写一遍,确保文件中包含所有权限
|
|
||||||
} catch (Exception e) {
|
|
||||||
XLogger.err("读取权限配置失败:%s", e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void saveToJson() {
|
|
||||||
try {
|
|
||||||
JSONObject json = serializeToJson();
|
|
||||||
XLogger.debug("保存权限配置:%s", json.toJSONString());
|
|
||||||
File flagFile = new File(Dominion.instance.getDataFolder(), "flags.json");
|
|
||||||
JsonFile.saveToFile(json, flagFile);
|
|
||||||
} catch (Exception e) {
|
|
||||||
XLogger.err("保存权限配置失败:%s", e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -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.api.dtos.Flag;
|
||||||
import cn.lunadeer.minecraftpluginutils.ColorParser;
|
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;
|
||||||
@ -9,6 +10,8 @@ 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 net.kyori.adventure.text.Component;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -16,69 +19,92 @@ import java.util.HashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
public class GroupDTO {
|
public class GroupDTO implements cn.lunadeer.dominion.api.dtos.GroupDTO {
|
||||||
|
|
||||||
Field id = new Field("id", FieldType.INT);
|
Field id = new Field("id", FieldType.INT);
|
||||||
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_raw = 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);
|
Field name_color = 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() {
|
@Override
|
||||||
|
public @NotNull Integer getId() {
|
||||||
return (Integer) id.value;
|
return (Integer) id.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getDomID() {
|
@Override
|
||||||
|
public @NotNull Integer getDomID() {
|
||||||
return (Integer) domID.value;
|
return (Integer) domID.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getName() {
|
@Override
|
||||||
return (String) name.value;
|
public @NotNull String getNameRaw() {
|
||||||
|
return (String) name_color.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Component getNameColoredComponent() {
|
@Override
|
||||||
|
public @NotNull String getNamePlain() {
|
||||||
|
return (String) name_raw.value;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull Component getNameColoredComponent() {
|
||||||
String with_pre_suf = "&#ffffff" +
|
String with_pre_suf = "&#ffffff" +
|
||||||
Dominion.config.getGroupTitlePrefix() +
|
Dominion.config.getGroupTitlePrefix() +
|
||||||
(String) name_colored.value +
|
(String) name_color.value +
|
||||||
"&#ffffff" +
|
"&#ffffff" +
|
||||||
Dominion.config.getGroupTitleSuffix();
|
Dominion.config.getGroupTitleSuffix();
|
||||||
return ColorParser.getComponentType(with_pre_suf);
|
return ColorParser.getComponentType(with_pre_suf);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getNameColoredBukkit() {
|
@Override
|
||||||
|
public @NotNull String getNameColoredBukkit() {
|
||||||
String with_pre_suf = "&#ffffff" +
|
String with_pre_suf = "&#ffffff" +
|
||||||
Dominion.config.getGroupTitlePrefix() +
|
Dominion.config.getGroupTitlePrefix() +
|
||||||
(String) name_colored.value +
|
(String) name_color.value +
|
||||||
"&#ffffff" +
|
"&#ffffff" +
|
||||||
Dominion.config.getGroupTitleSuffix();
|
Dominion.config.getGroupTitleSuffix();
|
||||||
return ColorParser.getBukkitType(with_pre_suf);
|
return ColorParser.getBukkitType(with_pre_suf);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean getAdmin() {
|
@Override
|
||||||
|
public @NotNull Boolean getAdmin() {
|
||||||
return (Boolean) admin.value;
|
return (Boolean) admin.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean getFlagValue(Flag flag) {
|
@Override
|
||||||
|
public @NotNull Boolean getFlagValue(@NotNull Flag flag) {
|
||||||
if (!flags.containsKey(flag)) return flag.getDefaultValue();
|
if (!flags.containsKey(flag)) return flag.getDefaultValue();
|
||||||
return flags.get(flag);
|
return flags.get(flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
public GroupDTO setName(String name) {
|
@Override
|
||||||
this.name_colored.value = name;
|
public @NotNull Map<Flag, Boolean> getFlagsValue() {
|
||||||
this.name.value = ColorParser.getPlainText(name);
|
return flags;
|
||||||
UpdateRow updateRow = new UpdateRow().field(this.name).field(this.name_colored);
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable GroupDTO setName(@NotNull String name) {
|
||||||
|
this.name_color.value = name;
|
||||||
|
this.name_raw.value = ColorParser.getPlainText(name);
|
||||||
|
UpdateRow updateRow = new UpdateRow().field(this.name_raw).field(this.name_color);
|
||||||
return doUpdate(updateRow);
|
return doUpdate(updateRow);
|
||||||
}
|
}
|
||||||
|
|
||||||
public GroupDTO setAdmin(Boolean admin) {
|
@Override
|
||||||
|
public @Nullable GroupDTO setAdmin(@NotNull Boolean admin) {
|
||||||
this.admin.value = admin;
|
this.admin.value = admin;
|
||||||
UpdateRow updateRow = new UpdateRow().field(this.admin);
|
UpdateRow updateRow = new UpdateRow().field(this.admin);
|
||||||
return doUpdate(updateRow);
|
return doUpdate(updateRow);
|
||||||
}
|
}
|
||||||
|
|
||||||
public GroupDTO setFlagValue(Flag flag, Boolean value) {
|
@Override
|
||||||
|
public GroupDTO setFlagValue(@NotNull Flag flag, @NotNull Boolean value) {
|
||||||
|
if (flag.isEnvironmentFlag()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
flags.put(flag, value);
|
flags.put(flag, value);
|
||||||
Field f = new Field(flag.getFlagName(), value);
|
Field f = new Field(flag.getFlagName(), value);
|
||||||
UpdateRow updateRow = new UpdateRow().field(f);
|
UpdateRow updateRow = new UpdateRow().field(f);
|
||||||
@ -90,19 +116,19 @@ public class GroupDTO {
|
|||||||
InsertRow insertRow = new InsertRow().returningAll().onConflictDoNothing(new Field("id", null));
|
InsertRow insertRow = new InsertRow().returningAll().onConflictDoNothing(new Field("id", null));
|
||||||
insertRow.table("dominion_group")
|
insertRow.table("dominion_group")
|
||||||
.field(group.domID)
|
.field(group.domID)
|
||||||
.field(group.name)
|
.field(group.name_raw)
|
||||||
.field(group.admin)
|
.field(group.admin)
|
||||||
.field(group.name_colored);
|
.field(group.name_color);
|
||||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
for (Flag f : cn.lunadeer.dominion.dtos.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.isEmpty()) 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("GroupDTO.create ", e, "");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -125,14 +151,14 @@ public class GroupDTO {
|
|||||||
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.isEmpty()) 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.isEmpty()) return null;
|
||||||
return groups.getFirst();
|
return groups.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<GroupDTO> selectAll() {
|
public static List<GroupDTO> selectAll() {
|
||||||
@ -147,10 +173,10 @@ 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_raw.value = ColorParser.getPlainText(name);
|
||||||
this.name_colored.value = name;
|
this.name_color.value = name;
|
||||||
this.admin.value = false;
|
this.admin.value = false;
|
||||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
for (Flag f : cn.lunadeer.dominion.dtos.Flag.getPrivilegeFlagsEnabled()) {
|
||||||
flags.put(f, f.getDefaultValue());
|
flags.put(f, f.getDefaultValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -158,10 +184,10 @@ public class GroupDTO {
|
|||||||
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, String nameColored) {
|
||||||
this.id.value = id;
|
this.id.value = id;
|
||||||
this.domID.value = domID;
|
this.domID.value = domID;
|
||||||
this.name.value = name;
|
this.name_raw.value = name;
|
||||||
this.admin.value = admin;
|
this.admin.value = admin;
|
||||||
this.flags.putAll(flags);
|
this.flags.putAll(flags);
|
||||||
this.name_colored.value = nameColored;
|
this.name_color.value = nameColored;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static List<GroupDTO> getDTOFromRS(ResultSet rs) {
|
private static List<GroupDTO> getDTOFromRS(ResultSet rs) {
|
||||||
@ -170,7 +196,7 @@ public class GroupDTO {
|
|||||||
try {
|
try {
|
||||||
while (rs.next()) {
|
while (rs.next()) {
|
||||||
Map<Flag, Boolean> flags = new HashMap<>();
|
Map<Flag, Boolean> flags = new HashMap<>();
|
||||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
for (Flag f : cn.lunadeer.dominion.dtos.Flag.getPrivilegeFlagsEnabled()) {
|
||||||
flags.put(f, rs.getBoolean(f.getFlagName()));
|
flags.put(f, rs.getBoolean(f.getFlagName()));
|
||||||
}
|
}
|
||||||
GroupDTO group = new GroupDTO(
|
GroupDTO group = new GroupDTO(
|
||||||
@ -197,7 +223,7 @@ public class GroupDTO {
|
|||||||
List<GroupDTO> groups = getDTOFromRS(rs);
|
List<GroupDTO> groups = getDTOFromRS(rs);
|
||||||
if (groups.isEmpty()) return null;
|
if (groups.isEmpty()) 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,23 +1,26 @@
|
|||||||
package cn.lunadeer.dominion.dtos;
|
package cn.lunadeer.dominion.dtos;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Cache;
|
import cn.lunadeer.dominion.Cache;
|
||||||
|
import cn.lunadeer.dominion.api.dtos.Flag;
|
||||||
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 org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
public class MemberDTO {
|
public class MemberDTO implements cn.lunadeer.dominion.api.dtos.MemberDTO {
|
||||||
|
|
||||||
private static List<MemberDTO> query(String sql, Object... params) {
|
private static List<MemberDTO> query(String sql, Object... params) {
|
||||||
List<MemberDTO> players = new ArrayList<>();
|
List<MemberDTO> players = new ArrayList<>();
|
||||||
try (ResultSet rs = DatabaseManager.instance.query(sql, params)) {
|
try (ResultSet rs = DatabaseManager.instance.query(sql, params)) {
|
||||||
return getDTOFromRS(rs);
|
return getDTOFromRS(rs);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
DatabaseManager.handleDatabaseError("查询玩家权限失败: ", e, sql);
|
DatabaseManager.handleDatabaseError("MemberDTO.query ", e, sql);
|
||||||
}
|
}
|
||||||
return players;
|
return players;
|
||||||
}
|
}
|
||||||
@ -28,7 +31,7 @@ public class MemberDTO {
|
|||||||
try {
|
try {
|
||||||
while (rs.next()) {
|
while (rs.next()) {
|
||||||
Map<Flag, Boolean> flags = new HashMap<>();
|
Map<Flag, Boolean> flags = new HashMap<>();
|
||||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
for (Flag f : cn.lunadeer.dominion.dtos.Flag.getPrivilegeFlagsEnabled()) {
|
||||||
flags.put(f, rs.getBoolean(f.getFlagName()));
|
flags.put(f, rs.getBoolean(f.getFlagName()));
|
||||||
}
|
}
|
||||||
MemberDTO player = new MemberDTO(
|
MemberDTO player = new MemberDTO(
|
||||||
@ -42,7 +45,7 @@ public class MemberDTO {
|
|||||||
players.add(player);
|
players.add(player);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
DatabaseManager.handleDatabaseError("查询玩家权限失败: ", e, "");
|
DatabaseManager.handleDatabaseError("MemberDTO.getDTOFromRS ", e, "");
|
||||||
}
|
}
|
||||||
return players;
|
return players;
|
||||||
}
|
}
|
||||||
@ -53,11 +56,11 @@ public class MemberDTO {
|
|||||||
.where("id = ?", id.value);
|
.where("id = ?", id.value);
|
||||||
try (ResultSet rs = updateRow.execute()) {
|
try (ResultSet rs = updateRow.execute()) {
|
||||||
List<MemberDTO> players = getDTOFromRS(rs);
|
List<MemberDTO> players = getDTOFromRS(rs);
|
||||||
if (players.size() == 0) return null;
|
if (players.isEmpty()) return null;
|
||||||
Cache.instance.loadMembers(getPlayerUUID());
|
Cache.instance.loadMembers(getPlayerUUID());
|
||||||
return players.get(0);
|
return players.get(0);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
DatabaseManager.handleDatabaseError("更新玩家权限失败: ", e, "");
|
DatabaseManager.handleDatabaseError("MemberDTO.doUpdate ", e, "");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -68,16 +71,16 @@ public class MemberDTO {
|
|||||||
.field(player.playerUUID)
|
.field(player.playerUUID)
|
||||||
.field(player.admin)
|
.field(player.admin)
|
||||||
.field(player.domID);
|
.field(player.domID);
|
||||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
for (Flag f : cn.lunadeer.dominion.dtos.Flag.getPrivilegeFlagsEnabled()) {
|
||||||
insertRow.field(new Field(f.getFlagName(), player.getFlagValue(f)));
|
insertRow.field(new Field(f.getFlagName(), player.getFlagValue(f)));
|
||||||
}
|
}
|
||||||
try (ResultSet rs = insertRow.execute()) {
|
try (ResultSet rs = insertRow.execute()) {
|
||||||
Cache.instance.loadMembers(player.getPlayerUUID());
|
Cache.instance.loadMembers(player.getPlayerUUID());
|
||||||
List<MemberDTO> players = getDTOFromRS(rs);
|
List<MemberDTO> players = getDTOFromRS(rs);
|
||||||
if (players.size() == 0) return null;
|
if (players.isEmpty()) return null;
|
||||||
return players.get(0);
|
return players.get(0);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
DatabaseManager.handleDatabaseError("插入玩家权限失败: ", e, "");
|
DatabaseManager.handleDatabaseError("MemberDTO.insert ", e, "");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -85,7 +88,7 @@ public class MemberDTO {
|
|||||||
public static MemberDTO select(UUID playerUUID, Integer dom_id) {
|
public static MemberDTO select(UUID playerUUID, Integer dom_id) {
|
||||||
String sql = "SELECT * FROM dominion_member WHERE player_uuid = ? AND dom_id = ?;";
|
String sql = "SELECT * FROM dominion_member WHERE player_uuid = ? AND dom_id = ?;";
|
||||||
List<MemberDTO> p = query(sql, playerUUID.toString(), dom_id);
|
List<MemberDTO> p = query(sql, playerUUID.toString(), dom_id);
|
||||||
if (p.size() == 0) return null;
|
if (p.isEmpty()) return null;
|
||||||
return p.get(0);
|
return p.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -126,41 +129,57 @@ public class MemberDTO {
|
|||||||
Field domID = new Field("dom_id", FieldType.INT);
|
Field domID = new Field("dom_id", FieldType.INT);
|
||||||
Field groupId = new Field("group_id", FieldType.INT);
|
Field groupId = new Field("group_id", FieldType.INT);
|
||||||
|
|
||||||
|
@Override
|
||||||
public Integer getId() {
|
public Integer getId() {
|
||||||
return (Integer) id.value;
|
return (Integer) id.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public UUID getPlayerUUID() {
|
public UUID getPlayerUUID() {
|
||||||
return UUID.fromString((String) playerUUID.value);
|
return UUID.fromString((String) playerUUID.value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Boolean getAdmin() {
|
public Boolean getAdmin() {
|
||||||
return (Boolean) admin.value;
|
return (Boolean) admin.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Integer getDomID() {
|
public Integer getDomID() {
|
||||||
return (Integer) domID.value;
|
return (Integer) domID.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public Integer getGroupId() {
|
public Integer getGroupId() {
|
||||||
return (Integer) groupId.value;
|
return (Integer) groupId.value;
|
||||||
}
|
}
|
||||||
|
|
||||||
private final Map<Flag, Boolean> flags = new HashMap<>();
|
private final Map<Flag, Boolean> flags = new HashMap<>();
|
||||||
|
|
||||||
public Boolean getFlagValue(Flag flag) {
|
@Override
|
||||||
|
public @NotNull Boolean getFlagValue(Flag flag) {
|
||||||
if (!flags.containsKey(flag)) return flag.getDefaultValue();
|
if (!flags.containsKey(flag)) return flag.getDefaultValue();
|
||||||
return flags.get(flag);
|
return flags.get(flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
public MemberDTO setFlagValue(Flag flag, Boolean value) {
|
@Override
|
||||||
|
public @NotNull Map<Flag, Boolean> getFlagsValue() {
|
||||||
|
return flags;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MemberDTO setFlagValue(@NotNull Flag flag, @NotNull Boolean value) {
|
||||||
|
if (flag.isEnvironmentFlag()) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
flags.put(flag, value);
|
flags.put(flag, value);
|
||||||
Field f = new Field(flag.getFlagName(), value);
|
Field f = new Field(flag.getFlagName(), value);
|
||||||
UpdateRow updateRow = new UpdateRow().field(f);
|
UpdateRow updateRow = new UpdateRow().field(f);
|
||||||
return doUpdate(updateRow);
|
return doUpdate(updateRow);
|
||||||
}
|
}
|
||||||
|
|
||||||
public MemberDTO setAdmin(Boolean admin) {
|
@Override
|
||||||
|
public @Nullable MemberDTO setAdmin(@NotNull Boolean admin) {
|
||||||
this.admin.value = admin;
|
this.admin.value = admin;
|
||||||
UpdateRow updateRow = new UpdateRow().field(this.admin);
|
UpdateRow updateRow = new UpdateRow().field(this.admin);
|
||||||
return doUpdate(updateRow);
|
return doUpdate(updateRow);
|
||||||
@ -175,7 +194,7 @@ public class MemberDTO {
|
|||||||
public MemberDTO applyTemplate(PrivilegeTemplateDTO template) {
|
public MemberDTO applyTemplate(PrivilegeTemplateDTO template) {
|
||||||
this.admin.value = template.getAdmin();
|
this.admin.value = template.getAdmin();
|
||||||
UpdateRow updateRow = new UpdateRow().field(admin);
|
UpdateRow updateRow = new UpdateRow().field(admin);
|
||||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
for (Flag f : cn.lunadeer.dominion.dtos.Flag.getPrivilegeFlagsEnabled()) {
|
||||||
this.flags.put(f, template.getFlagValue(f));
|
this.flags.put(f, template.getFlagValue(f));
|
||||||
updateRow.field(new Field(f.getFlagName(), template.getFlagValue(f)));
|
updateRow.field(new Field(f.getFlagName(), template.getFlagValue(f)));
|
||||||
}
|
}
|
||||||
@ -196,9 +215,7 @@ public class MemberDTO {
|
|||||||
this.playerUUID.value = playerUUID.toString();
|
this.playerUUID.value = playerUUID.toString();
|
||||||
this.admin.value = false;
|
this.admin.value = false;
|
||||||
this.domID.value = dom.getId();
|
this.domID.value = dom.getId();
|
||||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
this.flags.putAll(dom.getGuestPrivilegeFlagValue());
|
||||||
this.flags.put(f, dom.getFlagValue(f));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -53,7 +53,7 @@ public class PlayerDTO {
|
|||||||
try (ResultSet rs = DatabaseManager.instance.query(sql, params)) {
|
try (ResultSet rs = DatabaseManager.instance.query(sql, params)) {
|
||||||
return getDTOFromRS(rs);
|
return getDTOFromRS(rs);
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
DatabaseManager.handleDatabaseError("查询玩家信息失败: ", e, sql);
|
DatabaseManager.handleDatabaseError("PlayerDTO.query ", e, sql);
|
||||||
}
|
}
|
||||||
return players;
|
return players;
|
||||||
}
|
}
|
||||||
@ -77,14 +77,14 @@ public class PlayerDTO {
|
|||||||
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.isEmpty()) 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.isEmpty()) return null;
|
||||||
return players.getFirst();
|
return players.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<PlayerDTO> search(String name) {
|
public static List<PlayerDTO> search(String name) {
|
||||||
@ -114,9 +114,9 @@ public class PlayerDTO {
|
|||||||
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.isEmpty()) return null;
|
||||||
return players.getFirst();
|
return players.get(0);
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
DatabaseManager.handleDatabaseError("插入玩家信息失败: ", e, insertRow.toString());
|
DatabaseManager.handleDatabaseError("PlayerDTO.insert ", e, insertRow.toString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -136,9 +136,9 @@ public class PlayerDTO {
|
|||||||
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.isEmpty()) return null;
|
||||||
return players.getFirst();
|
return players.get(0);
|
||||||
} catch (SQLException e) {
|
} catch (SQLException e) {
|
||||||
DatabaseManager.handleDatabaseError("更新玩家信息失败: ", e, updateRow.toString());
|
DatabaseManager.handleDatabaseError("PlayerDTO.update ", e, updateRow.toString());
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package cn.lunadeer.dominion.dtos;
|
package cn.lunadeer.dominion.dtos;
|
||||||
|
|
||||||
|
import cn.lunadeer.dominion.api.dtos.Flag;
|
||||||
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;
|
||||||
@ -15,7 +16,7 @@ public class PrivilegeTemplateDTO {
|
|||||||
try (ResultSet rs = DatabaseManager.instance.query(sql, params)) {
|
try (ResultSet rs = DatabaseManager.instance.query(sql, params)) {
|
||||||
return getDTOFromRS(rs);
|
return getDTOFromRS(rs);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
DatabaseManager.handleDatabaseError("查询权限模版失败: ", e, sql);
|
DatabaseManager.handleDatabaseError("PrivilegeTemplateDTO.query ", e, sql);
|
||||||
}
|
}
|
||||||
return templates;
|
return templates;
|
||||||
}
|
}
|
||||||
@ -26,7 +27,7 @@ public class PrivilegeTemplateDTO {
|
|||||||
try {
|
try {
|
||||||
while (rs.next()) {
|
while (rs.next()) {
|
||||||
Map<Flag, Boolean> flags = new HashMap<>();
|
Map<Flag, Boolean> flags = new HashMap<>();
|
||||||
for (Flag f : Flag.getPrivilegeFlagsEnabled()) {
|
for (Flag f : cn.lunadeer.dominion.dtos.Flag.getPrivilegeFlagsEnabled()) {
|
||||||
flags.put(f, rs.getBoolean(f.getFlagName()));
|
flags.put(f, rs.getBoolean(f.getFlagName()));
|
||||||
}
|
}
|
||||||
PrivilegeTemplateDTO template = new PrivilegeTemplateDTO(
|
PrivilegeTemplateDTO template = new PrivilegeTemplateDTO(
|
||||||
@ -39,7 +40,7 @@ public class PrivilegeTemplateDTO {
|
|||||||
templates.add(template);
|
templates.add(template);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
DatabaseManager.handleDatabaseError("查询权限模版失败: ", e, null);
|
DatabaseManager.handleDatabaseError("PrivilegeTemplateDTO.getDTOFromRS", e, null);
|
||||||
}
|
}
|
||||||
return templates;
|
return templates;
|
||||||
}
|
}
|
||||||
@ -53,10 +54,10 @@ public class PrivilegeTemplateDTO {
|
|||||||
.returningAll();
|
.returningAll();
|
||||||
try (ResultSet rs = insertRow.execute()) {
|
try (ResultSet rs = insertRow.execute()) {
|
||||||
List<PrivilegeTemplateDTO> templates = getDTOFromRS(rs);
|
List<PrivilegeTemplateDTO> templates = getDTOFromRS(rs);
|
||||||
if (templates.size() == 0) return null;
|
if (templates.isEmpty()) return null;
|
||||||
return templates.get(0);
|
return templates.get(0);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
DatabaseManager.handleDatabaseError("创建权限模版失败: ", e, null);
|
DatabaseManager.handleDatabaseError("PrivilegeTemplateDTO.create ", e, null);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -68,10 +69,10 @@ public class PrivilegeTemplateDTO {
|
|||||||
.where("id = ?", id.value);
|
.where("id = ?", id.value);
|
||||||
try (ResultSet rs = updateRow.execute()) {
|
try (ResultSet rs = updateRow.execute()) {
|
||||||
List<PrivilegeTemplateDTO> templates = getDTOFromRS(rs);
|
List<PrivilegeTemplateDTO> templates = getDTOFromRS(rs);
|
||||||
if (templates.size() == 0) return null;
|
if (templates.isEmpty()) return null;
|
||||||
return templates.get(0);
|
return templates.get(0);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
DatabaseManager.handleDatabaseError("更新权限模版失败: ", e, null);
|
DatabaseManager.handleDatabaseError("PrivilegeTemplateDTO.doUpdate ", e, null);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -79,7 +80,7 @@ public class PrivilegeTemplateDTO {
|
|||||||
public static PrivilegeTemplateDTO select(UUID creator, String name) {
|
public static PrivilegeTemplateDTO select(UUID creator, String name) {
|
||||||
String sql = "SELECT * FROM privilege_template WHERE creator = ? AND name = ?;";
|
String sql = "SELECT * FROM privilege_template WHERE creator = ? AND name = ?;";
|
||||||
List<PrivilegeTemplateDTO> templates = query(sql, creator.toString(), name);
|
List<PrivilegeTemplateDTO> templates = query(sql, creator.toString(), name);
|
||||||
if (templates.size() == 0) return null;
|
if (templates.isEmpty()) return null;
|
||||||
return templates.get(0);
|
return templates.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,9 +102,9 @@ public class PrivilegeTemplateDTO {
|
|||||||
this.flags.putAll(flags);
|
this.flags.putAll(flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Integer id;
|
private final Integer id;
|
||||||
private UUID creator;
|
private final UUID creator;
|
||||||
private String name;
|
private final String name;
|
||||||
private Boolean admin;
|
private Boolean admin;
|
||||||
|
|
||||||
private final Map<Flag, Boolean> flags = new HashMap<>();
|
private final Map<Flag, Boolean> flags = new HashMap<>();
|
||||||
|
@ -2,29 +2,34 @@ 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.dominion.utils.MessageDisplay;
|
||||||
import cn.lunadeer.minecraftpluginutils.VaultConnect.VaultConnect;
|
import cn.lunadeer.minecraftpluginutils.VaultConnect.VaultConnect;
|
||||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.HashMap;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class ConfigManager {
|
public class ConfigManager {
|
||||||
|
public static ConfigManager instance;
|
||||||
|
|
||||||
public ConfigManager(Dominion plugin) {
|
public ConfigManager(Dominion plugin) {
|
||||||
|
instance = this;
|
||||||
|
new Translation(plugin);
|
||||||
_plugin = plugin;
|
_plugin = plugin;
|
||||||
_plugin.saveDefaultConfig();
|
_plugin.saveDefaultConfig();
|
||||||
reload();
|
reload();
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void reload() {
|
public void reload() {
|
||||||
_plugin.reloadConfig();
|
_plugin.reloadConfig();
|
||||||
_file = _plugin.getConfig();
|
_file = _plugin.getConfig();
|
||||||
|
_language = _file.getString("Language", "zh-cn");
|
||||||
|
Translation.instance.loadLocale(_language);
|
||||||
_debug = _file.getBoolean("Debug", false);
|
_debug = _file.getBoolean("Debug", false);
|
||||||
_timer = _file.getBoolean("Timer", false);
|
_timer = _file.getBoolean("Timer", false);
|
||||||
XLogger.setDebug(_debug);
|
XLogger.setDebug(_debug);
|
||||||
@ -34,29 +39,26 @@ public class ConfigManager {
|
|||||||
_db_name = _file.getString("Database.Name", "dominion");
|
_db_name = _file.getString("Database.Name", "dominion");
|
||||||
_db_user = _file.getString("Database.User", "postgres");
|
_db_user = _file.getString("Database.User", "postgres");
|
||||||
_db_pass = _file.getString("Database.Pass", "postgres");
|
_db_pass = _file.getString("Database.Pass", "postgres");
|
||||||
|
|
||||||
_auto_create_radius = _file.getInt("AutoCreateRadius", 10);
|
_auto_create_radius = _file.getInt("AutoCreateRadius", 10);
|
||||||
if (_auto_create_radius == 0) {
|
_default_join_message = _file.getString("DefaultJoinMessage", "&3{OWNER}: Welcome to {DOM}!");
|
||||||
XLogger.err("AutoCreateRadius 不能等于 0,已重置为 10");
|
_default_leave_message = _file.getString("DefaultLeaveMessage", "&3{OWNER}: Leaving {DOM}...");
|
||||||
setAutoCreateRadius(10);
|
|
||||||
}
|
_message_display_no_permission = _file.getString("MessageDisplay.NoPermission", "ACTION_BAR");
|
||||||
|
_message_display_join_leave = _file.getString("MessageDisplay.JoinLeave", "ACTION_BAR");
|
||||||
|
|
||||||
_spawn_protection = _file.getInt("Limit.SpawnProtection", 10);
|
_spawn_protection = _file.getInt("Limit.SpawnProtection", 10);
|
||||||
_blue_map = _file.getBoolean("BlueMap", false);
|
_blue_map = _file.getBoolean("BlueMap", false);
|
||||||
_dynmap = _file.getBoolean("Dynmap", false);
|
_dynmap = _file.getBoolean("Dynmap", false);
|
||||||
_auto_clean_after_days = _file.getInt("AutoCleanAfterDays", 180);
|
_auto_clean_after_days = _file.getInt("AutoCleanAfterDays", 180);
|
||||||
if (_auto_clean_after_days == 0) {
|
|
||||||
XLogger.err("AutoCleanAfterDays 不能等于 0,已重置为 180");
|
|
||||||
setAutoCleanAfterDays(180);
|
|
||||||
}
|
|
||||||
_limit_op_bypass = _file.getBoolean("Limit.OpByPass", true);
|
_limit_op_bypass = _file.getBoolean("Limit.OpByPass", true);
|
||||||
_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);
|
||||||
_tp_cool_down = _file.getInt("Teleport.CoolDown", 0);
|
_tp_cool_down = _file.getInt("Teleport.CoolDown", 0);
|
||||||
_tool = _file.getString("Tool", "ARROW");
|
_tool = _file.getString("Tool", "ARROW");
|
||||||
if (Material.getMaterial(_tool) == null) {
|
_info_tool = _file.getString("InfoTool", "STRING");
|
||||||
XLogger.err("工具名称设置错误,已重置为 ARROW");
|
|
||||||
setTool("ARROW");
|
|
||||||
}
|
|
||||||
_economy_enable = _file.getBoolean("Economy.Enable", false);
|
_economy_enable = _file.getBoolean("Economy.Enable", false);
|
||||||
if (getEconomyEnable()) {
|
if (getEconomyEnable()) {
|
||||||
new VaultConnect(this._plugin);
|
new VaultConnect(this._plugin);
|
||||||
@ -68,61 +70,40 @@ public class ConfigManager {
|
|||||||
_group_title_suffix = _file.getString("GroupTitle.Suffix", "&#ffffff]");
|
_group_title_suffix = _file.getString("GroupTitle.Suffix", "&#ffffff]");
|
||||||
|
|
||||||
GroupLimit defaultGroup = new GroupLimit();
|
GroupLimit defaultGroup = new GroupLimit();
|
||||||
defaultGroup.setLimitSizeX(_file.getInt("Limit.SizeX", 128));
|
if (_file.contains("Limit.SizeX")) { // todo: should be removed in the future
|
||||||
defaultGroup.setLimitSizeY(_file.getInt("Limit.SizeY", 64));
|
defaultGroup.setLimitSizeMaxX(_file.getInt("Limit.SizeX", 128), null);
|
||||||
defaultGroup.setLimitSizeZ(_file.getInt("Limit.SizeZ", 128));
|
defaultGroup.setLimitSizeMaxY(_file.getInt("Limit.SizeY", 64), null);
|
||||||
defaultGroup.setLimitMinY(_file.getInt("Limit.MinY", -64));
|
defaultGroup.setLimitSizeMaxZ(_file.getInt("Limit.SizeZ", 128), null);
|
||||||
defaultGroup.setLimitMaxY(_file.getInt("Limit.MaxY", 320));
|
defaultGroup.setLimitSizeMinX(4, null);
|
||||||
defaultGroup.setLimitAmount(_file.getInt("Limit.Amount", 10));
|
defaultGroup.setLimitSizeMinY(4, null);
|
||||||
defaultGroup.setLimitDepth(_file.getInt("Limit.Depth", 3));
|
defaultGroup.setLimitSizeMinZ(4, null);
|
||||||
defaultGroup.setLimitVert(_file.getBoolean("Limit.Vert", false));
|
} else {
|
||||||
defaultGroup.setWorldBlackList(_file.getStringList("Limit.WorldBlackList"));
|
defaultGroup.setLimitSizeMaxX(_file.getInt("Limit.Size.MaxX", 128), null);
|
||||||
|
defaultGroup.setLimitSizeMaxY(_file.getInt("Limit.Size.MaxY", 64), null);
|
||||||
|
defaultGroup.setLimitSizeMaxZ(_file.getInt("Limit.Size.MaxZ", 128), null);
|
||||||
|
defaultGroup.setLimitSizeMinX(_file.getInt("Limit.Size.MinX", 4), null);
|
||||||
|
defaultGroup.setLimitSizeMinY(_file.getInt("Limit.Size.MinY", 4), null);
|
||||||
|
defaultGroup.setLimitSizeMinZ(_file.getInt("Limit.Size.MinZ", 4), null);
|
||||||
|
}
|
||||||
|
defaultGroup.setLimitMinY(_file.getInt("Limit.MinY", -64), null);
|
||||||
|
defaultGroup.setLimitMaxY(_file.getInt("Limit.MaxY", 320), null);
|
||||||
|
defaultGroup.setLimitAmount(_file.getInt("Limit.Amount", 10), null);
|
||||||
|
defaultGroup.setLimitDepth(_file.getInt("Limit.Depth", 3), null);
|
||||||
|
defaultGroup.setLimitVert(_file.getBoolean("Limit.Vert", false), null);
|
||||||
defaultGroup.setPrice(_file.getDouble("Economy.Price", 10.0));
|
defaultGroup.setPrice(_file.getDouble("Economy.Price", 10.0));
|
||||||
defaultGroup.setPriceOnlyXZ(_file.getBoolean("Economy.OnlyXZ", false));
|
defaultGroup.setPriceOnlyXZ(_file.getBoolean("Economy.OnlyXZ", false));
|
||||||
defaultGroup.setRefundRatio(_file.getDouble("Economy.Refund", 0.85));
|
defaultGroup.setRefundRatio(_file.getDouble("Economy.Refund", 0.85));
|
||||||
limits.put("default", defaultGroup);
|
ConfigurationSection worldSettings = _file.getConfigurationSection("Limit.WorldSettings");
|
||||||
if (defaultGroup.getLimitSizeX() <= 4 && defaultGroup.getLimitSizeX() != -1) {
|
if (worldSettings != null) {
|
||||||
XLogger.err("Limit.SizeX 尺寸不能小于 4,已重置为 128");
|
defaultGroup.addWorldLimits(WorldSetting.load("config.yml", worldSettings));
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
groupLimits.put("default", defaultGroup);
|
||||||
|
|
||||||
limits.putAll(GroupLimit.loadGroups(_plugin));
|
groupLimits.putAll(GroupLimit.loadGroups(_plugin));
|
||||||
|
|
||||||
|
checkRules();
|
||||||
saveAll(); // 回写文件 防止文件中的数据不完整
|
saveAll(); // 回写文件 防止文件中的数据不完整
|
||||||
Flag.loadFromJson(); // 加载 Flag 配置
|
Flag.loadFromFile(); // 加载 Flag 配置
|
||||||
}
|
}
|
||||||
|
|
||||||
public void saveAll() {
|
public void saveAll() {
|
||||||
@ -142,37 +123,85 @@ public class ConfigManager {
|
|||||||
_file.set("Database.User", _db_user);
|
_file.set("Database.User", _db_user);
|
||||||
_file.set("Database.Pass", _db_pass);
|
_file.set("Database.Pass", _db_pass);
|
||||||
|
|
||||||
_file.set("AutoCreateRadius", _auto_create_radius);
|
_file.set("Language", _language);
|
||||||
|
_file.setComments("Language", List.of(Translation.Config_Comment_Language.trans()));
|
||||||
|
|
||||||
|
_file.set("AutoCreateRadius", _auto_create_radius);
|
||||||
|
_file.setComments("AutoCreateRadius", Arrays.asList(Translation.Config_Comment_AutoCreateRadius.trans(), Translation.Config_Comment_NegativeOneDisabled.trans()));
|
||||||
|
_file.set("DefaultJoinMessage", _default_join_message);
|
||||||
|
_file.setComments("DefaultJoinMessage", Collections.singletonList(Translation.Config_Comment_DefaultJoinMessage.trans()));
|
||||||
|
_file.set("DefaultLeaveMessage", _default_leave_message);
|
||||||
|
_file.setComments("DefaultLeaveMessage", Collections.singletonList(Translation.Config_Comment_DefaultLeaveMessage.trans()));
|
||||||
|
|
||||||
|
_file.setComments("MessageDisplay", Collections.singletonList(Translation.Config_Comment_MessageDisplay.trans()));
|
||||||
|
_file.set("MessageDisplay.NoPermission", _message_display_no_permission);
|
||||||
|
_file.setComments("MessageDisplay.NoPermission", Collections.singletonList(Translation.Config_Comment_MessageDisplayNoPermission.trans()));
|
||||||
|
_file.set("MessageDisplay.JoinLeave", _message_display_join_leave);
|
||||||
|
_file.setComments("MessageDisplay.JoinLeave", Collections.singletonList(Translation.Config_Comment_MessageDisplayJoinLeave.trans()));
|
||||||
|
|
||||||
|
_file.setComments("Limit", List.of(Translation.Config_Comment_DefaultLimit.trans()));
|
||||||
_file.set("Limit.SpawnProtection", _spawn_protection);
|
_file.set("Limit.SpawnProtection", _spawn_protection);
|
||||||
_file.set("Limit.MinY", limits.get("default").getLimitMinY());
|
_file.setInlineComments("Limit.SpawnProtection", List.of(Translation.Config_Comment_SpawnProtectRadius.trans() + Translation.Config_Comment_NegativeOneDisabled.trans()));
|
||||||
_file.set("Limit.MaxY", limits.get("default").getLimitMaxY());
|
_file.set("Limit.MinY", groupLimits.get("default").getLimitMinY(null));
|
||||||
_file.set("Limit.SizeX", limits.get("default").getLimitSizeX());
|
_file.setInlineComments("Limit.MinY", List.of(Translation.Config_Comment_MinY.trans()));
|
||||||
_file.set("Limit.SizeY", limits.get("default").getLimitSizeY());
|
_file.set("Limit.MaxY", groupLimits.get("default").getLimitMaxY(null));
|
||||||
_file.set("Limit.SizeZ", limits.get("default").getLimitSizeZ());
|
_file.setInlineComments("Limit.MaxY", List.of(Translation.Config_Comment_MaxY.trans()));
|
||||||
_file.set("Limit.Amount", limits.get("default").getLimitAmount());
|
_file.set("Limit.Size.MaxX", groupLimits.get("default").getLimitSizeMaxX(null));
|
||||||
_file.set("Limit.Depth", limits.get("default").getLimitDepth());
|
_file.setInlineComments("Limit.Size.MaxX", List.of(Translation.Config_Comment_SizeMaxX.trans() + Translation.Config_Comment_NegativeOneUnlimited.trans()));
|
||||||
_file.set("Limit.Vert", limits.get("default").getLimitVert());
|
_file.set("Limit.Size.MaxY", groupLimits.get("default").getLimitSizeMaxY(null));
|
||||||
_file.set("Limit.WorldBlackList", limits.get("default").getWorldBlackList());
|
_file.setInlineComments("Limit.Size.MaxY", List.of(Translation.Config_Comment_SizeMaxY.trans() + Translation.Config_Comment_NegativeOneUnlimited.trans()));
|
||||||
|
_file.set("Limit.Size.MaxZ", groupLimits.get("default").getLimitSizeMaxZ(null));
|
||||||
|
_file.setInlineComments("Limit.Size.MaxZ", List.of(Translation.Config_Comment_SizeMaxZ.trans() + Translation.Config_Comment_NegativeOneUnlimited.trans()));
|
||||||
|
_file.set("Limit.Size.MinX", groupLimits.get("default").getLimitSizeMinX(null));
|
||||||
|
_file.setInlineComments("Limit.Size.MinX", List.of(Translation.Config_Comment_SizeMinX.trans()));
|
||||||
|
_file.set("Limit.Size.MinY", groupLimits.get("default").getLimitSizeMinY(null));
|
||||||
|
_file.setInlineComments("Limit.Size.MinY", List.of(Translation.Config_Comment_SizeMinY.trans()));
|
||||||
|
_file.set("Limit.Size.MinZ", groupLimits.get("default").getLimitSizeMinZ(null));
|
||||||
|
_file.setInlineComments("Limit.Size.MinZ", List.of(Translation.Config_Comment_SizeMinZ.trans()));
|
||||||
|
_file.set("Limit.Amount", groupLimits.get("default").getLimitAmount(null));
|
||||||
|
_file.setInlineComments("Limit.Amount", List.of(Translation.Config_Comment_Amount.trans() + Translation.Config_Comment_NegativeOneUnlimited.trans()));
|
||||||
|
_file.set("Limit.Depth", groupLimits.get("default").getLimitDepth(null));
|
||||||
|
_file.setInlineComments("Limit.Depth", List.of(Translation.Config_Comment_Depth.trans() + Translation.Config_Comment_ZeroDisabled.trans() + Translation.Config_Comment_NegativeOneUnlimited.trans()));
|
||||||
|
_file.set("Limit.Vert", groupLimits.get("default").getLimitVert(null));
|
||||||
|
_file.setInlineComments("Limit.Vert", List.of(Translation.Config_Comment_Vert.trans()));
|
||||||
_file.set("Limit.OpByPass", _limit_op_bypass);
|
_file.set("Limit.OpByPass", _limit_op_bypass);
|
||||||
|
_file.setInlineComments("Limit.OpByPass", List.of(Translation.Config_Comment_OpBypass.trans()));
|
||||||
|
_file.set("Limit.WorldSettings", groupLimits.get("default").getWorldSettings());
|
||||||
|
_file.setInlineComments("Limit.WorldSettings", List.of(Translation.Config_Comment_WorldSettings.trans()));
|
||||||
|
|
||||||
_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.setInlineComments("Teleport.Delay", List.of(Translation.Config_Comment_TpDelay.trans()));
|
||||||
_file.set("Teleport.CoolDown", _tp_cool_down);
|
_file.set("Teleport.CoolDown", _tp_cool_down);
|
||||||
|
_file.setInlineComments("Teleport.CoolDown", List.of(Translation.Config_Comment_TpCoolDown.trans()));
|
||||||
|
|
||||||
_file.set("AutoCleanAfterDays", _auto_clean_after_days);
|
_file.set("AutoCleanAfterDays", _auto_clean_after_days);
|
||||||
|
_file.setComments("AutoCleanAfterDays", Arrays.asList(Translation.Config_Comment_AutoCleanAfterDays.trans(), Translation.Config_Comment_NegativeOneDisabled.trans()));
|
||||||
|
|
||||||
_file.set("Tool", _tool);
|
_file.set("Tool", _tool);
|
||||||
|
_file.setComments("Tool", List.of(Translation.Config_Comment_ToolName.trans()));
|
||||||
|
_file.set("InfoTool", _info_tool);
|
||||||
|
_file.setComments("InfoTool", List.of(Translation.Config_Comment_InfoToolName.trans()));
|
||||||
|
|
||||||
|
_file.setComments("Economy", Arrays.asList(Translation.Config_Comment_Economy.trans(), Translation.Config_Comment_VaultRequired.trans()));
|
||||||
_file.set("Economy.Enable", _economy_enable);
|
_file.set("Economy.Enable", _economy_enable);
|
||||||
_file.set("Economy.Price", limits.get("default").getPrice());
|
_file.set("Economy.Price", groupLimits.get("default").getPrice());
|
||||||
_file.set("Economy.OnlyXZ", limits.get("default").getPriceOnlyXZ());
|
_file.setInlineComments("Economy.Price", List.of(Translation.Config_Comment_Price.trans()));
|
||||||
_file.set("Economy.Refund", limits.get("default").getRefundRatio());
|
_file.set("Economy.OnlyXZ", groupLimits.get("default").getPriceOnlyXZ());
|
||||||
|
_file.setInlineComments("Economy.OnlyXZ", List.of(Translation.Config_Comment_OnlyXZ.trans()));
|
||||||
|
_file.set("Economy.Refund", groupLimits.get("default").getRefundRatio());
|
||||||
|
_file.setInlineComments("Economy.Refund", List.of(Translation.Config_Comment_Refund.trans()));
|
||||||
|
|
||||||
_file.set("FlyPermissionNodes", _fly_permission_nodes);
|
_file.set("FlyPermissionNodes", _fly_permission_nodes);
|
||||||
|
_file.setComments("FlyPermissionNodes", List.of(Translation.Config_Comment_FlyPermission.trans()));
|
||||||
|
|
||||||
_file.set("ResidenceMigration", _residence_migration);
|
_file.set("ResidenceMigration", _residence_migration);
|
||||||
|
_file.setComments("ResidenceMigration", List.of(Translation.Config_Comment_ResidenceMigration.trans()));
|
||||||
|
|
||||||
|
_file.setComments("GroupTitle", Arrays.asList(
|
||||||
|
Translation.Config_Comment_GroupTitle.trans(),
|
||||||
|
Translation.Config_Comment_GroupTitleVariable.trans(),
|
||||||
|
Translation.Config_Comment_GroupTitleColor.trans()));
|
||||||
_file.set("GroupTitle.Enable", _group_title_enable);
|
_file.set("GroupTitle.Enable", _group_title_enable);
|
||||||
_file.set("GroupTitle.Prefix", _group_title_prefix);
|
_file.set("GroupTitle.Prefix", _group_title_prefix);
|
||||||
_file.set("GroupTitle.Suffix", _group_title_suffix);
|
_file.set("GroupTitle.Suffix", _group_title_suffix);
|
||||||
@ -184,6 +213,7 @@ public class ConfigManager {
|
|||||||
|
|
||||||
_file.set("Debug", _debug);
|
_file.set("Debug", _debug);
|
||||||
_file.set("Timer", _timer);
|
_file.set("Timer", _timer);
|
||||||
|
_file.setInlineComments("Timer", List.of(Translation.Config_Comment_PerformanceTimer.trans()));
|
||||||
|
|
||||||
_plugin.saveConfig();
|
_plugin.saveConfig();
|
||||||
}
|
}
|
||||||
@ -207,12 +237,6 @@ public class ConfigManager {
|
|||||||
return _db_type;
|
return _db_type;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDbType(String db_type) {
|
|
||||||
_db_type = db_type;
|
|
||||||
_file.set("Database.Type", db_type);
|
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getDbHost() {
|
public String getDbHost() {
|
||||||
return _db_host;
|
return _db_host;
|
||||||
}
|
}
|
||||||
@ -228,7 +252,6 @@ public class ConfigManager {
|
|||||||
public void setDbUser(String db_user) {
|
public void setDbUser(String db_user) {
|
||||||
_db_user = db_user;
|
_db_user = db_user;
|
||||||
_file.set("Database.User", db_user);
|
_file.set("Database.User", db_user);
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getDbUser() {
|
public String getDbUser() {
|
||||||
@ -241,51 +264,51 @@ public class ConfigManager {
|
|||||||
public void setDbPass(String db_pass) {
|
public void setDbPass(String db_pass) {
|
||||||
_db_pass = db_pass;
|
_db_pass = db_pass;
|
||||||
_file.set("Database.Pass", db_pass);
|
_file.set("Database.Pass", db_pass);
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getDbPass() {
|
public String getDbPass() {
|
||||||
return _db_pass;
|
return _db_pass;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getLimitSizeX(Player player) {
|
public Integer getLimitSizeMaxX(Player player) {
|
||||||
return limits.get(getPlayerGroup(player)).getLimitSizeX();
|
return groupLimits.get(getPlayerGroup(player)).getLimitSizeMaxX(player.getWorld());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLimitSizeX(Integer max_x) {
|
public Integer getLimitSizeMaxY(Player player) {
|
||||||
limits.get("default").setLimitSizeX(max_x);
|
return groupLimits.get(getPlayerGroup(player)).getLimitSizeMaxY(player.getWorld());
|
||||||
_file.set("Limit.SizeX", max_x);
|
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getLimitSizeY(Player player) {
|
public Integer getLimitSizeMaxZ(Player player) {
|
||||||
return limits.get(getPlayerGroup(player)).getLimitSizeY();
|
return groupLimits.get(getPlayerGroup(player)).getLimitSizeMaxZ(player.getWorld());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLimitSizeY(Integer max_y) {
|
public Integer getLimitSizeMinX(Player player) {
|
||||||
limits.get("default").setLimitSizeY(max_y);
|
return groupLimits.get(getPlayerGroup(player)).getLimitSizeMinX(player.getWorld());
|
||||||
_file.set("Limit.SizeY", max_y);
|
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getLimitSizeZ(Player player) {
|
public Integer getLimitSizeMinY(Player player) {
|
||||||
return limits.get(getPlayerGroup(player)).getLimitSizeZ();
|
return groupLimits.get(getPlayerGroup(player)).getLimitSizeMinY(player.getWorld());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLimitSizeZ(Integer max_z) {
|
public Integer getLimitSizeMinZ(Player player) {
|
||||||
limits.get("default").setLimitSizeZ(max_z);
|
return groupLimits.get(getPlayerGroup(player)).getLimitSizeMinZ(player.getWorld());
|
||||||
_file.set("Limit.SizeZ", max_z);
|
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getAutoCreateRadius() {
|
public Integer getAutoCreateRadius() {
|
||||||
return _auto_create_radius;
|
return _auto_create_radius;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getDefaultJoinMessage() {
|
||||||
|
return _default_join_message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDefaultLeaveMessage() {
|
||||||
|
return _default_leave_message;
|
||||||
|
}
|
||||||
|
|
||||||
public void setAutoCreateRadius(Integer radius) {
|
public void setAutoCreateRadius(Integer radius) {
|
||||||
_auto_create_radius = radius;
|
_auto_create_radius = radius;
|
||||||
_file.set("AutoCreateRadius", radius);
|
_file.set("AutoCreateRadius", radius);
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean getBlueMap() {
|
public Boolean getBlueMap() {
|
||||||
@ -300,76 +323,47 @@ public class ConfigManager {
|
|||||||
return _auto_clean_after_days;
|
return _auto_clean_after_days;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public MessageDisplay.Place getMessageDisplayNoPermission() {
|
||||||
|
return MessageDisplay.Place.valueOf(_message_display_no_permission);
|
||||||
|
}
|
||||||
|
|
||||||
|
public MessageDisplay.Place getMessageDisplayJoinLeave() {
|
||||||
|
return MessageDisplay.Place.valueOf(_message_display_join_leave);
|
||||||
|
}
|
||||||
|
|
||||||
public void setAutoCleanAfterDays(Integer auto_clean_after_days) {
|
public void setAutoCleanAfterDays(Integer auto_clean_after_days) {
|
||||||
_auto_clean_after_days = auto_clean_after_days;
|
_auto_clean_after_days = auto_clean_after_days;
|
||||||
_file.set("AutoCleanAfterDays", auto_clean_after_days);
|
_file.set("AutoCleanAfterDays", auto_clean_after_days);
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getLimitMinY(Player player) {
|
public Integer getLimitMinY(Player player) {
|
||||||
return limits.get(getPlayerGroup(player)).getLimitMinY();
|
return groupLimits.get(getPlayerGroup(player)).getLimitMinY(player.getWorld());
|
||||||
}
|
|
||||||
|
|
||||||
public void setLimitMinY(Integer limit_bottom) {
|
|
||||||
limits.get("default").setLimitMinY(limit_bottom);
|
|
||||||
_file.set("Limit.MinY", limit_bottom);
|
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getLimitMaxY(Player player) {
|
public Integer getLimitMaxY(Player player) {
|
||||||
return limits.get(getPlayerGroup(player)).getLimitMaxY();
|
return groupLimits.get(getPlayerGroup(player)).getLimitMaxY(player.getWorld());
|
||||||
}
|
|
||||||
|
|
||||||
public void setLimitMaxY(Integer limit_top) {
|
|
||||||
limits.get("default").setLimitMaxY(limit_top);
|
|
||||||
_file.set("Limit.MaxY", limit_top);
|
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getLimitAmount(Player player) {
|
public Integer getLimitAmount(Player player) {
|
||||||
return limits.get(getPlayerGroup(player)).getLimitAmount();
|
return groupLimits.get(getPlayerGroup(player)).getLimitAmount(player.getWorld());
|
||||||
}
|
|
||||||
|
|
||||||
public void setLimitAmount(Integer limit_amount) {
|
|
||||||
limits.get("default").setLimitAmount(limit_amount);
|
|
||||||
_file.set("Limit.Amount", limit_amount);
|
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getLimitDepth(Player player) {
|
public Integer getLimitDepth(Player player) {
|
||||||
return limits.get(getPlayerGroup(player)).getLimitDepth();
|
return groupLimits.get(getPlayerGroup(player)).getLimitDepth(player.getWorld());
|
||||||
}
|
|
||||||
|
|
||||||
public void setLimitDepth(Integer limit_depth) {
|
|
||||||
limits.get("default").setLimitDepth(limit_depth);
|
|
||||||
_file.set("Limit.Depth", limit_depth);
|
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean getLimitVert(Player player) {
|
public Boolean getLimitVert(Player player) {
|
||||||
return limits.get(getPlayerGroup(player)).getLimitVert();
|
return groupLimits.get(getPlayerGroup(player)).getLimitVert(player.getWorld());
|
||||||
}
|
|
||||||
|
|
||||||
public void setLimitVert(Boolean limit_vert) {
|
|
||||||
limits.get("default").setLimitVert(limit_vert);
|
|
||||||
_file.set("Limit.Vert", limit_vert);
|
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> getWorldBlackList(Player player) {
|
public List<String> getWorldBlackList(Player player) {
|
||||||
return limits.get(getPlayerGroup(player)).getWorldBlackList();
|
return groupLimits.get(getPlayerGroup(player)).getWorldBlackList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean getLimitOpBypass() {
|
public Boolean getLimitOpBypass() {
|
||||||
return _limit_op_bypass;
|
return _limit_op_bypass;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLimitOpBypass(Boolean limit_op_bypass) {
|
|
||||||
_limit_op_bypass = limit_op_bypass;
|
|
||||||
_file.set("Limit.OpByPass", limit_op_bypass);
|
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Boolean getCheckUpdate() {
|
public Boolean getCheckUpdate() {
|
||||||
return _check_update;
|
return _check_update;
|
||||||
}
|
}
|
||||||
@ -378,12 +372,6 @@ public class ConfigManager {
|
|||||||
return _tp_enable;
|
return _tp_enable;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setTpEnable(Boolean tp_enable) {
|
|
||||||
_tp_enable = tp_enable;
|
|
||||||
_file.set("Teleport.Enable", tp_enable);
|
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getTpDelay() {
|
public Integer getTpDelay() {
|
||||||
return _tp_delay;
|
return _tp_delay;
|
||||||
}
|
}
|
||||||
@ -391,7 +379,6 @@ public class ConfigManager {
|
|||||||
public void setTpDelay(Integer tp_delay) {
|
public void setTpDelay(Integer tp_delay) {
|
||||||
_tp_delay = tp_delay;
|
_tp_delay = tp_delay;
|
||||||
_file.set("Teleport.Delay", tp_delay);
|
_file.set("Teleport.Delay", tp_delay);
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getTpCoolDown() {
|
public Integer getTpCoolDown() {
|
||||||
@ -401,7 +388,6 @@ public class ConfigManager {
|
|||||||
public void setTpCoolDown(Integer tp_cool_down) {
|
public void setTpCoolDown(Integer tp_cool_down) {
|
||||||
_tp_cool_down = tp_cool_down;
|
_tp_cool_down = tp_cool_down;
|
||||||
_file.set("Teleport.CoolDown", tp_cool_down);
|
_file.set("Teleport.CoolDown", tp_cool_down);
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Material getTool() {
|
public Material getTool() {
|
||||||
@ -411,79 +397,45 @@ public class ConfigManager {
|
|||||||
public void setTool(String tool) {
|
public void setTool(String tool) {
|
||||||
_tool = tool;
|
_tool = tool;
|
||||||
_file.set("Tool", tool);
|
_file.set("Tool", tool);
|
||||||
_plugin.saveConfig();
|
}
|
||||||
|
|
||||||
|
public Material getInfoTool() {
|
||||||
|
return Material.getMaterial(_info_tool);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInfoTool(String info_tool) {
|
||||||
|
_info_tool = info_tool;
|
||||||
|
_file.set("InfoTool", info_tool);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean getEconomyEnable() {
|
public Boolean getEconomyEnable() {
|
||||||
return _economy_enable;
|
return _economy_enable;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setEconomyEnable(Boolean economy_enable) {
|
|
||||||
_economy_enable = economy_enable;
|
|
||||||
_file.set("Economy.Enable", economy_enable);
|
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Float getEconomyPrice(Player player) {
|
public Float getEconomyPrice(Player player) {
|
||||||
return limits.get(getPlayerGroup(player)).getPrice().floatValue();
|
return groupLimits.get(getPlayerGroup(player)).getPrice().floatValue();
|
||||||
}
|
|
||||||
|
|
||||||
public void setEconomyPrice(Float economy_price) {
|
|
||||||
limits.get("default").setPrice((double) economy_price);
|
|
||||||
_file.set("Economy.Price", economy_price);
|
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean getEconomyOnlyXZ(Player player) {
|
public Boolean getEconomyOnlyXZ(Player player) {
|
||||||
return limits.get(getPlayerGroup(player)).getPriceOnlyXZ();
|
return groupLimits.get(getPlayerGroup(player)).getPriceOnlyXZ();
|
||||||
}
|
|
||||||
|
|
||||||
public void setEconomyOnlyXZ(Boolean economy_only_xz) {
|
|
||||||
limits.get("default").setPriceOnlyXZ(economy_only_xz);
|
|
||||||
_file.set("Economy.OnlyXZ", economy_only_xz);
|
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Float getEconomyRefund(Player player) {
|
public Float getEconomyRefund(Player player) {
|
||||||
return limits.get(getPlayerGroup(player)).getRefundRatio().floatValue();
|
return groupLimits.get(getPlayerGroup(player)).getRefundRatio().floatValue();
|
||||||
}
|
|
||||||
|
|
||||||
public void setEconomyRefund(Float economy_refund) {
|
|
||||||
limits.get("default").setRefundRatio((double) economy_refund);
|
|
||||||
_file.set("Economy.Refund", economy_refund);
|
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> getFlyPermissionNodes() {
|
public List<String> getFlyPermissionNodes() {
|
||||||
return _fly_permission_nodes;
|
return _fly_permission_nodes;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setFlyPermissionNodes(List<String> fly_permission_nodes) {
|
|
||||||
_fly_permission_nodes = fly_permission_nodes;
|
|
||||||
_file.set("FlyPermissionNodes", fly_permission_nodes);
|
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Boolean getResidenceMigration() {
|
public Boolean getResidenceMigration() {
|
||||||
return _residence_migration;
|
return _residence_migration;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setResidenceMigration(Boolean residence_migration) {
|
|
||||||
_residence_migration = residence_migration;
|
|
||||||
_file.set("ResidenceMigration", residence_migration);
|
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Integer getSpawnProtection() {
|
public Integer getSpawnProtection() {
|
||||||
return _spawn_protection;
|
return _spawn_protection;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setSpawnProtection(Integer spawn_protection) {
|
|
||||||
_spawn_protection = spawn_protection;
|
|
||||||
_file.set("Limit.SpawnProtection", spawn_protection);
|
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
|
||||||
|
|
||||||
public Boolean getGroupTitleEnable() {
|
public Boolean getGroupTitleEnable() {
|
||||||
return _group_title_enable;
|
return _group_title_enable;
|
||||||
}
|
}
|
||||||
@ -491,27 +443,57 @@ public class ConfigManager {
|
|||||||
public void setGroupTitleEnable(Boolean group_title_enable) {
|
public void setGroupTitleEnable(Boolean group_title_enable) {
|
||||||
_group_title_enable = group_title_enable;
|
_group_title_enable = group_title_enable;
|
||||||
_file.set("GroupTitle.Enable", group_title_enable);
|
_file.set("GroupTitle.Enable", group_title_enable);
|
||||||
_plugin.saveConfig();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getGroupTitlePrefix() {
|
public String getGroupTitlePrefix() {
|
||||||
return _group_title_prefix;
|
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() {
|
public String getGroupTitleSuffix() {
|
||||||
return _group_title_suffix;
|
return _group_title_suffix;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setGroupTitleSuffix(String group_title_suffix) {
|
public String getLanguage() {
|
||||||
_group_title_suffix = group_title_suffix;
|
return _language;
|
||||||
_file.set("GroupTitle.Suffix", group_title_suffix);
|
}
|
||||||
_plugin.saveConfig();
|
|
||||||
|
public void checkRules() {
|
||||||
|
if (Material.getMaterial(_tool) == null) {
|
||||||
|
XLogger.err(Translation.Config_Check_ToolNameError);
|
||||||
|
setTool("ARROW");
|
||||||
|
}
|
||||||
|
if (Material.getMaterial(_info_tool) == null) {
|
||||||
|
XLogger.err(Translation.Config_Check_InfoToolNameError);
|
||||||
|
setInfoTool("STRING");
|
||||||
|
}
|
||||||
|
if (getAutoCreateRadius() <= 0 && getAutoCreateRadius() != -1) {
|
||||||
|
XLogger.err(Translation.Config_Check_AutoCreateRadiusError);
|
||||||
|
setAutoCreateRadius(10);
|
||||||
|
}
|
||||||
|
if (getAutoCleanAfterDays() <= 0 && getAutoCleanAfterDays() != -1) {
|
||||||
|
XLogger.err(Translation.Config_Check_AutoCleanAfterDaysError);
|
||||||
|
setAutoCleanAfterDays(180);
|
||||||
|
}
|
||||||
|
if (Arrays.stream(MessageDisplay.Place.values()).noneMatch(place -> place.name().equals(getMessageDisplayNoPermission().name()))) {
|
||||||
|
XLogger.err(Translation.Config_Check_MessageDisplayError, getMessageDisplayNoPermission());
|
||||||
|
_message_display_no_permission = "ACTION_BAR";
|
||||||
|
}
|
||||||
|
if (Arrays.stream(MessageDisplay.Place.values()).noneMatch(place -> place.name().equals(getMessageDisplayJoinLeave().name()))) {
|
||||||
|
XLogger.err(Translation.Config_Check_MessageDisplayError, getMessageDisplayJoinLeave());
|
||||||
|
_message_display_join_leave = "ACTION_BAR";
|
||||||
|
}
|
||||||
|
if (getTpDelay() < 0) {
|
||||||
|
XLogger.err(Translation.Config_Check_TpDelayError);
|
||||||
|
setTpDelay(0);
|
||||||
|
}
|
||||||
|
if (getTpCoolDown() < 0) {
|
||||||
|
XLogger.err(Translation.Config_Check_TpCoolDownError);
|
||||||
|
setTpCoolDown(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (GroupLimit limit : groupLimits.values()) {
|
||||||
|
limit.checkRules();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private final Dominion _plugin;
|
private final Dominion _plugin;
|
||||||
@ -526,7 +508,11 @@ public class ConfigManager {
|
|||||||
private String _db_pass;
|
private String _db_pass;
|
||||||
private String _db_name;
|
private String _db_name;
|
||||||
|
|
||||||
|
private String _language;
|
||||||
|
|
||||||
private Integer _auto_create_radius;
|
private Integer _auto_create_radius;
|
||||||
|
private String _default_join_message;
|
||||||
|
private String _default_leave_message;
|
||||||
|
|
||||||
private Boolean _limit_op_bypass;
|
private Boolean _limit_op_bypass;
|
||||||
|
|
||||||
@ -539,7 +525,9 @@ public class ConfigManager {
|
|||||||
private Boolean _tp_enable;
|
private Boolean _tp_enable;
|
||||||
private Integer _tp_delay;
|
private Integer _tp_delay;
|
||||||
private Integer _tp_cool_down;
|
private Integer _tp_cool_down;
|
||||||
|
|
||||||
private String _tool;
|
private String _tool;
|
||||||
|
private String _info_tool;
|
||||||
|
|
||||||
private Boolean _economy_enable;
|
private Boolean _economy_enable;
|
||||||
|
|
||||||
@ -551,13 +539,16 @@ public class ConfigManager {
|
|||||||
private String _group_title_prefix;
|
private String _group_title_prefix;
|
||||||
private String _group_title_suffix;
|
private String _group_title_suffix;
|
||||||
|
|
||||||
private final Map<String, GroupLimit> limits = new HashMap<>();
|
private String _message_display_no_permission;
|
||||||
|
private String _message_display_join_leave;
|
||||||
|
|
||||||
|
private final Map<String, GroupLimit> groupLimits = new HashMap<>();
|
||||||
|
|
||||||
private String getPlayerGroup(@Nullable Player player) {
|
private String getPlayerGroup(@Nullable Player player) {
|
||||||
if (player == null) {
|
if (player == null) {
|
||||||
return "default";
|
return "default";
|
||||||
}
|
}
|
||||||
for (String group : limits.keySet()) {
|
for (String group : groupLimits.keySet()) {
|
||||||
if (group.equals("default")) {
|
if (group.equals("default")) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -1,16 +1,27 @@
|
|||||||
package cn.lunadeer.dominion.managers;
|
package cn.lunadeer.dominion.managers;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Dominion;
|
import cn.lunadeer.dominion.Dominion;
|
||||||
|
import cn.lunadeer.dominion.commands.Operator;
|
||||||
import cn.lunadeer.dominion.dtos.Flag;
|
import cn.lunadeer.dominion.dtos.Flag;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.Scheduler;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||||
import cn.lunadeer.minecraftpluginutils.databse.*;
|
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 cn.lunadeer.minecraftpluginutils.databse.syntax.RemoveColumn;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class DatabaseTables {
|
public class DatabaseTables {
|
||||||
public static void migrate() {
|
public static void migrate() {
|
||||||
@ -114,8 +125,8 @@ public class DatabaseTables {
|
|||||||
Field server_dom_y2_field = new Field("y2", 2147483647);
|
Field server_dom_y2_field = new Field("y2", 2147483647);
|
||||||
Field server_dom_z2_field = new Field("z2", 2147483647);
|
Field server_dom_z2_field = new Field("z2", 2147483647);
|
||||||
Field server_dom_parent_dom_id_field = new Field("parent_dom_id", -1);
|
Field server_dom_parent_dom_id_field = new Field("parent_dom_id", -1);
|
||||||
Field server_dom_join_message_field = new Field("join_message", "欢迎");
|
Field server_dom_join_message_field = new Field("join_message", "");
|
||||||
Field server_dom_leave_message_field = new Field("leave_message", "再见");
|
Field server_dom_leave_message_field = new Field("leave_message", "");
|
||||||
InsertRow insert_server_dom = new InsertRow().table("dominion").onConflictDoNothing(server_dom_id_field)
|
InsertRow insert_server_dom = new InsertRow().table("dominion").onConflictDoNothing(server_dom_id_field)
|
||||||
.field(server_dom_id_field)
|
.field(server_dom_id_field)
|
||||||
.field(server_dom_owner_field)
|
.field(server_dom_owner_field)
|
||||||
@ -260,4 +271,79 @@ public class DatabaseTables {
|
|||||||
new RemoveColumn("world").table("dominion").IfExists().execute();
|
new RemoveColumn("world").table("dominion").IfExists().execute();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static final File export_path = new File(Dominion.instance.getDataFolder(), "ExportedDatabaseTables");
|
||||||
|
|
||||||
|
public static void Export(CommandSender sender) {
|
||||||
|
Scheduler.runTaskAsync(() -> {
|
||||||
|
Notification.info(sender, Translation.Commands_Operator_ExportDBBegin);
|
||||||
|
if (!export_path.exists()) {
|
||||||
|
export_path.mkdirs();
|
||||||
|
}
|
||||||
|
Common.ExportCSV("player_name", new File(export_path, "player_name.csv"));
|
||||||
|
Common.ExportCSV("privilege_template", new File(export_path, "privilege_template.csv"));
|
||||||
|
Common.ExportCSV("dominion", new File(export_path, "dominion.csv"));
|
||||||
|
Common.ExportCSV("dominion_group", new File(export_path, "dominion_group.csv"));
|
||||||
|
Common.ExportCSV("dominion_member", new File(export_path, "dominion_member.csv"));
|
||||||
|
Map<String, String> world_uid_map = Dominion.instance.getServer().getWorlds().stream().collect(HashMap::new, (m, w) -> m.put(w.getName(), w.getUID().toString()), HashMap::putAll);
|
||||||
|
YamlConfiguration world_uid = new YamlConfiguration();
|
||||||
|
for (Map.Entry<String, String> entry : world_uid_map.entrySet()) {
|
||||||
|
world_uid.set(entry.getKey(), entry.getValue());
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
world_uid.save(new File(export_path, "world_uid_mapping.yml"));
|
||||||
|
} catch (Exception e) {
|
||||||
|
XLogger.err("Save world_uid_mapping.yml failed: %s", e.getMessage());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Notification.info(sender, Translation.Commands_Operator_ExportDBSuccess);
|
||||||
|
Notification.info(sender, "Path: %s", export_path.getAbsolutePath());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void Import(CommandSender sender) {
|
||||||
|
Scheduler.runTaskAsync(() -> {
|
||||||
|
if (!export_path.exists()) {
|
||||||
|
Notification.error(sender, Translation.Commands_Operator_ImportDBFail);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Notification.info(sender, Translation.Commands_Operator_ImportDBBegin);
|
||||||
|
Map<String, String> world_uid_map = Dominion.instance.getServer().getWorlds().stream().collect(HashMap::new, (m, w) -> m.put(w.getName(), w.getUID().toString()), HashMap::putAll);
|
||||||
|
File player_name_csv = new File(export_path, "player_name.csv");
|
||||||
|
File privilege_template_csv = new File(export_path, "privilege_template.csv");
|
||||||
|
File dominion_csv = new File(export_path, "dominion.csv");
|
||||||
|
File world_uid_mapping = new File(export_path, "world_uid_mapping.yml");
|
||||||
|
File dominion_group_csv = new File(export_path, "dominion_group.csv");
|
||||||
|
File dominion_member_csv = new File(export_path, "dominion_member.csv");
|
||||||
|
if (!player_name_csv.exists() || !privilege_template_csv.exists() || !dominion_csv.exists() || !world_uid_mapping.exists() || !dominion_group_csv.exists() || !dominion_member_csv.exists()) {
|
||||||
|
Notification.error(sender, Translation.Commands_Operator_ImportDBIncompleteFail);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
String dominion_file_str = Files.readString(dominion_csv.toPath());
|
||||||
|
YamlConfiguration world_uid = YamlConfiguration.loadConfiguration(world_uid_mapping);
|
||||||
|
for (String key : world_uid.getKeys(false)) {
|
||||||
|
if (world_uid_map.containsKey(key)) {
|
||||||
|
String old_uid = world_uid.getString(key);
|
||||||
|
String new_uid = world_uid_map.get(key);
|
||||||
|
if (old_uid == null || new_uid == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
dominion_file_str = dominion_file_str.replace(old_uid, world_uid_map.get(key));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Files.writeString(dominion_csv.toPath(), dominion_file_str);
|
||||||
|
} catch (IOException e) {
|
||||||
|
XLogger.err("Import world_uid_mapping.yml failed: %s", e.getMessage());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Common.ImportCSV("player_name", "id", player_name_csv);
|
||||||
|
Common.ImportCSV("privilege_template", "id", privilege_template_csv);
|
||||||
|
Common.ImportCSV("dominion", "id", dominion_csv);
|
||||||
|
Common.ImportCSV("dominion_group", "id", dominion_group_csv);
|
||||||
|
Common.ImportCSV("dominion_member", "id", dominion_member_csv);
|
||||||
|
Notification.info(sender, Translation.Commands_Operator_ImportDBSuccess);
|
||||||
|
Operator.reloadCache(sender, new String[0]);
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,26 +1,22 @@
|
|||||||
package cn.lunadeer.dominion.managers;
|
package cn.lunadeer.dominion.managers;
|
||||||
|
|
||||||
|
import cn.lunadeer.dominion.Dominion;
|
||||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.HashMap;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
|
|
||||||
public class GroupLimit {
|
public class GroupLimit {
|
||||||
private final YamlConfiguration config;
|
|
||||||
|
|
||||||
|
private YamlConfiguration config;
|
||||||
private final File file_path;
|
private final File file_path;
|
||||||
private Integer min_y;
|
private final Map<String, WorldSetting> world_limits = new HashMap<>();
|
||||||
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 Double price;
|
||||||
private Boolean only_xz;
|
private Boolean only_xz;
|
||||||
private Double refund;
|
private Double refund;
|
||||||
@ -28,93 +24,132 @@ public class GroupLimit {
|
|||||||
public GroupLimit() {
|
public GroupLimit() {
|
||||||
this.file_path = null;
|
this.file_path = null;
|
||||||
this.config = new YamlConfiguration();
|
this.config = new YamlConfiguration();
|
||||||
|
WorldSetting defaultSetting = new WorldSetting("config.yml");
|
||||||
|
world_limits.put("default", defaultSetting);
|
||||||
}
|
}
|
||||||
|
|
||||||
public GroupLimit(File filePath) {
|
private GroupLimit(File filePath) {
|
||||||
this.file_path = filePath;
|
this.file_path = filePath;
|
||||||
config = YamlConfiguration.loadConfiguration(this.file_path);
|
config = YamlConfiguration.loadConfiguration(this.file_path);
|
||||||
setLimitMinY(config.getInt("MinY", -64));
|
WorldSetting defaultSetting = new WorldSetting(filePath.getName());
|
||||||
setLimitMaxY(config.getInt("MaxY", 320));
|
defaultSetting.min_y = config.getInt("MinY", -64);
|
||||||
if (getLimitMinY() >= getLimitMaxY()) {
|
defaultSetting.max_y = config.getInt("MaxY", 320);
|
||||||
XLogger.err("权限组 %s 的 MinY 不能大于等于 MaxY,已重置为 -64 和 320", this.file_path.getName());
|
if (config.contains("SizeX")) { // todo: should be removed in the future
|
||||||
setLimitMinY(-64);
|
defaultSetting.size_max_x = config.getInt("SizeX", 128);
|
||||||
setLimitMaxY(320);
|
defaultSetting.size_max_y = config.getInt("SizeY", 64);
|
||||||
|
defaultSetting.size_max_z = config.getInt("SizeZ", 128);
|
||||||
|
defaultSetting.size_min_x = 4;
|
||||||
|
defaultSetting.size_min_y = 4;
|
||||||
|
defaultSetting.size_min_z = 4;
|
||||||
|
} else {
|
||||||
|
defaultSetting.size_max_x = config.getInt("Size.MaxX", 128);
|
||||||
|
defaultSetting.size_max_y = config.getInt("Size.MaxY", 64);
|
||||||
|
defaultSetting.size_max_z = config.getInt("Size.MaxZ", 128);
|
||||||
|
defaultSetting.size_min_x = config.getInt("Size.MinX", 4);
|
||||||
|
defaultSetting.size_min_y = config.getInt("Size.MinY", 4);
|
||||||
|
defaultSetting.size_min_z = config.getInt("Size.MinZ", 4);
|
||||||
}
|
}
|
||||||
setLimitSizeX(config.getInt("SizeX", 128));
|
defaultSetting.amount = config.getInt("Amount", 10);
|
||||||
if (getLimitSizeX() <= 4 && getLimitSizeX() != -1) {
|
defaultSetting.depth = config.getInt("Depth", 3);
|
||||||
XLogger.err("权限组 %s 的 SizeX 设置过小,已重置为 128", this.file_path.getName());
|
defaultSetting.vert = config.getBoolean("Vert", false);
|
||||||
setLimitSizeX(128);
|
world_limits.put("default", defaultSetting);
|
||||||
|
ConfigurationSection worldSettings = config.getConfigurationSection("WorldSettings");
|
||||||
|
if (worldSettings != null) {
|
||||||
|
addWorldLimits(WorldSetting.load(filePath.getName() + ":WorldSettings", worldSettings));
|
||||||
}
|
}
|
||||||
setLimitSizeY(config.getInt("SizeY", 64));
|
price = config.getDouble("Price", 10.0);
|
||||||
if (getLimitSizeY() <= 4 && getLimitSizeY() != -1) {
|
only_xz = config.getBoolean("OnlyXZ", false);
|
||||||
XLogger.err("权限组 %s 的 SizeY 设置过小,已重置为 64", this.file_path.getName());
|
refund = config.getDouble("Refund", 0.85);
|
||||||
setLimitSizeY(64);
|
checkRules();
|
||||||
}
|
saveAll();
|
||||||
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() {
|
public Integer getLimitMinY(@Nullable World world) {
|
||||||
return min_y;
|
if (world == null || !world_limits.containsKey(world.getName())) {
|
||||||
|
return world_limits.get("default").min_y;
|
||||||
|
} else {
|
||||||
|
return world_limits.get(world.getName()).min_y;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getLimitMaxY() {
|
public Integer getLimitMaxY(@Nullable World world) {
|
||||||
return max_y;
|
if (world == null || !world_limits.containsKey(world.getName())) {
|
||||||
|
return world_limits.get("default").max_y;
|
||||||
|
} else {
|
||||||
|
return world_limits.get(world.getName()).max_y;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getLimitSizeX() {
|
public Integer getLimitSizeMaxX(@Nullable World world) {
|
||||||
return size_x;
|
if (world == null || !world_limits.containsKey(world.getName())) {
|
||||||
|
return world_limits.get("default").size_max_x;
|
||||||
|
} else {
|
||||||
|
return world_limits.get(world.getName()).size_max_x;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getLimitSizeY() {
|
public Integer getLimitSizeMaxY(@Nullable World world) {
|
||||||
return size_y;
|
if (world == null || !world_limits.containsKey(world.getName())) {
|
||||||
|
return world_limits.get("default").size_max_y;
|
||||||
|
} else {
|
||||||
|
return world_limits.get(world.getName()).size_max_y;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getLimitSizeZ() {
|
public Integer getLimitSizeMaxZ(@Nullable World world) {
|
||||||
return size_z;
|
if (world == null || !world_limits.containsKey(world.getName())) {
|
||||||
|
return world_limits.get("default").size_max_z;
|
||||||
|
} else {
|
||||||
|
return world_limits.get(world.getName()).size_max_z;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getLimitAmount() {
|
public Integer getLimitSizeMinX(@Nullable World world) {
|
||||||
return amount;
|
if (world == null || !world_limits.containsKey(world.getName())) {
|
||||||
|
return world_limits.get("default").size_min_x;
|
||||||
|
} else {
|
||||||
|
return world_limits.get(world.getName()).size_min_x;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Integer getLimitDepth() {
|
public Integer getLimitSizeMinY(@Nullable World world) {
|
||||||
return depth;
|
if (world == null || !world_limits.containsKey(world.getName())) {
|
||||||
|
return world_limits.get("default").size_min_y;
|
||||||
|
} else {
|
||||||
|
return world_limits.get(world.getName()).size_min_y;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Boolean getLimitVert() {
|
public Integer getLimitSizeMinZ(@Nullable World world) {
|
||||||
return vert;
|
if (world == null || !world_limits.containsKey(world.getName())) {
|
||||||
|
return world_limits.get("default").size_min_z;
|
||||||
|
} else {
|
||||||
|
return world_limits.get(world.getName()).size_min_z;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> getWorldBlackList() {
|
public Integer getLimitAmount(@Nullable World world) {
|
||||||
return world_black_list;
|
if (world == null || !world_limits.containsKey(world.getName())) {
|
||||||
|
return world_limits.get("default").amount;
|
||||||
|
} else {
|
||||||
|
return world_limits.get(world.getName()).amount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getLimitDepth(@Nullable World world) {
|
||||||
|
if (world == null || !world_limits.containsKey(world.getName())) {
|
||||||
|
return world_limits.get("default").depth;
|
||||||
|
} else {
|
||||||
|
return world_limits.get(world.getName()).depth;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public Boolean getLimitVert(@Nullable World world) {
|
||||||
|
if (world == null || !world_limits.containsKey(world.getName())) {
|
||||||
|
return world_limits.get("default").vert;
|
||||||
|
} else {
|
||||||
|
return world_limits.get(world.getName()).vert;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Double getPrice() {
|
public Double getPrice() {
|
||||||
@ -130,89 +165,109 @@ public class GroupLimit {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void setLimitMinY(Integer min_y) {
|
public void setLimitMinY(Integer min_y, @Nullable World world) {
|
||||||
this.min_y = min_y;
|
if (world == null || !world_limits.containsKey(world.getName())) {
|
||||||
this.config.set("MinY", min_y);
|
world_limits.get("default").min_y = min_y;
|
||||||
this.save();
|
} else {
|
||||||
|
world_limits.get(world.getName()).min_y = min_y;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLimitMaxY(Integer max_y) {
|
public void setLimitMaxY(Integer max_y, @Nullable World world) {
|
||||||
this.max_y = max_y;
|
if (world == null || !world_limits.containsKey(world.getName())) {
|
||||||
this.config.set("MaxY", max_y);
|
world_limits.get("default").max_y = max_y;
|
||||||
this.save();
|
} else {
|
||||||
|
world_limits.get(world.getName()).max_y = max_y;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLimitSizeX(Integer size_x) {
|
public void setLimitSizeMaxX(Integer size_x, @Nullable World world) {
|
||||||
this.size_x = size_x;
|
if (world == null || !world_limits.containsKey(world.getName())) {
|
||||||
this.config.set("SizeX", size_x);
|
world_limits.get("default").size_max_x = size_x;
|
||||||
this.save();
|
} else {
|
||||||
|
world_limits.get(world.getName()).size_max_x = size_x;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLimitSizeY(Integer size_y) {
|
public void setLimitSizeMaxY(Integer size_y, @Nullable World world) {
|
||||||
this.size_y = size_y;
|
if (world == null || !world_limits.containsKey(world.getName())) {
|
||||||
this.config.set("SizeY", size_y);
|
world_limits.get("default").size_max_y = size_y;
|
||||||
this.save();
|
} else {
|
||||||
|
world_limits.get(world.getName()).size_max_y = size_y;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLimitSizeZ(Integer size_z) {
|
public void setLimitSizeMaxZ(Integer size_z, @Nullable World world) {
|
||||||
this.size_z = size_z;
|
if (world == null || !world_limits.containsKey(world.getName())) {
|
||||||
this.config.set("SizeZ", size_z);
|
world_limits.get("default").size_max_z = size_z;
|
||||||
this.save();
|
} else {
|
||||||
|
world_limits.get(world.getName()).size_max_z = size_z;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLimitAmount(Integer amount) {
|
public void setLimitSizeMinX(Integer size_x, @Nullable World world) {
|
||||||
this.amount = amount;
|
if (world == null || !world_limits.containsKey(world.getName())) {
|
||||||
this.config.set("Amount", amount);
|
world_limits.get("default").size_min_x = size_x;
|
||||||
this.save();
|
} else {
|
||||||
|
world_limits.get(world.getName()).size_min_x = size_x;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLimitDepth(Integer depth) {
|
public void setLimitSizeMinY(Integer size_y, @Nullable World world) {
|
||||||
this.depth = depth;
|
if (world == null || !world_limits.containsKey(world.getName())) {
|
||||||
this.config.set("Depth", depth);
|
world_limits.get("default").size_min_y = size_y;
|
||||||
this.save();
|
} else {
|
||||||
|
world_limits.get(world.getName()).size_min_y = size_y;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setLimitVert(Boolean vert) {
|
public void setLimitSizeMinZ(Integer size_z, @Nullable World world) {
|
||||||
this.vert = vert;
|
if (world == null || !world_limits.containsKey(world.getName())) {
|
||||||
this.config.set("Vert", vert);
|
world_limits.get("default").size_min_z = size_z;
|
||||||
this.save();
|
} else {
|
||||||
|
world_limits.get(world.getName()).size_min_z = size_z;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setWorldBlackList(List<String> world_black_list) {
|
public void setLimitAmount(Integer amount, @Nullable World world) {
|
||||||
this.world_black_list = world_black_list;
|
if (world == null || !world_limits.containsKey(world.getName())) {
|
||||||
this.config.set("WorldBlackList", world_black_list);
|
world_limits.get("default").amount = amount;
|
||||||
this.save();
|
} else {
|
||||||
|
world_limits.get(world.getName()).amount = amount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLimitDepth(Integer depth, @Nullable World world) {
|
||||||
|
if (world == null || !world_limits.containsKey(world.getName())) {
|
||||||
|
world_limits.get("default").depth = depth;
|
||||||
|
} else {
|
||||||
|
world_limits.get(world.getName()).depth = depth;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLimitVert(Boolean vert, @Nullable World world) {
|
||||||
|
if (world == null || !world_limits.containsKey(world.getName())) {
|
||||||
|
world_limits.get("default").vert = vert;
|
||||||
|
} else {
|
||||||
|
world_limits.get(world.getName()).vert = vert;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPrice(Double price) {
|
public void setPrice(Double price) {
|
||||||
this.price = price;
|
this.price = price;
|
||||||
this.config.set("Price", price);
|
|
||||||
this.save();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPriceOnlyXZ(Boolean only_xz) {
|
public void setPriceOnlyXZ(Boolean only_xz) {
|
||||||
this.only_xz = only_xz;
|
this.only_xz = only_xz;
|
||||||
this.config.set("OnlyXZ", only_xz);
|
|
||||||
this.save();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setRefundRatio(Double refund) {
|
public void setRefundRatio(Double refund) {
|
||||||
this.refund = refund;
|
this.refund = refund;
|
||||||
this.config.set("Refund", refund);
|
|
||||||
this.save();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void save() {
|
public void addWorldLimits(Map<String, WorldSetting> limits) {
|
||||||
if (file_path == null) {
|
world_limits.putAll(limits);
|
||||||
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) {
|
public static Map<String, GroupLimit> loadGroups(JavaPlugin plugin) {
|
||||||
Map<String, GroupLimit> groups = new HashMap<>();
|
Map<String, GroupLimit> groups = new HashMap<>();
|
||||||
@ -235,7 +290,105 @@ public class GroupLimit {
|
|||||||
GroupLimit group = new GroupLimit(file);
|
GroupLimit group = new GroupLimit(file);
|
||||||
groups.put(groupName, group);
|
groups.put(groupName, group);
|
||||||
}
|
}
|
||||||
XLogger.info("共加载了 %d 个领地组。", groups.size());
|
XLogger.info(Translation.Messages_LoadedGroupAmount, groups.size());
|
||||||
return groups;
|
return groups;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void saveAll() {
|
||||||
|
this.file_path.delete();
|
||||||
|
this.config = new YamlConfiguration();
|
||||||
|
this.config.set("MinY", world_limits.get("default").min_y);
|
||||||
|
this.config.setComments("MinY", Arrays.asList(
|
||||||
|
Translation.Config_Comment_GroupLine1.trans(),
|
||||||
|
Translation.Config_Comment_GroupLine2.trans(),
|
||||||
|
Translation.Config_Comment_GroupLine3.trans(),
|
||||||
|
Translation.Config_Comment_GroupLine4.trans(),
|
||||||
|
Translation.Config_Comment_GroupLine5.trans(),
|
||||||
|
Translation.Config_Comment_GroupLine6.trans(),
|
||||||
|
Translation.Config_Comment_GroupLine7.trans(),
|
||||||
|
String.format(Translation.Config_Comment_GroupLine8DocumentAddress.trans(), ConfigManager.instance.getLanguage())
|
||||||
|
));
|
||||||
|
this.config.setInlineComments("MinY", List.of(Translation.Config_Comment_MinY.trans()));
|
||||||
|
this.config.set("MaxY", world_limits.get("default").max_y);
|
||||||
|
this.config.setInlineComments("MaxY", List.of(Translation.Config_Comment_MaxY.trans()));
|
||||||
|
this.config.set("Size.MaxX", world_limits.get("default").size_max_x);
|
||||||
|
this.config.setInlineComments("Size.MaxX", List.of(Translation.Config_Comment_SizeMaxX.trans() + Translation.Config_Comment_NegativeOneUnlimited.trans()));
|
||||||
|
this.config.set("Size.MaxY", world_limits.get("default").size_max_y);
|
||||||
|
this.config.setInlineComments("Size.MaxY", List.of(Translation.Config_Comment_SizeMaxY.trans() + Translation.Config_Comment_NegativeOneUnlimited.trans()));
|
||||||
|
this.config.set("Size.MaxZ", world_limits.get("default").size_max_z);
|
||||||
|
this.config.setInlineComments("Size.MaxZ", List.of(Translation.Config_Comment_SizeMaxZ.trans() + Translation.Config_Comment_NegativeOneUnlimited.trans()));
|
||||||
|
this.config.set("Size.MinX", world_limits.get("default").size_min_x);
|
||||||
|
this.config.setInlineComments("Size.MinX", List.of(Translation.Config_Comment_SizeMinX.trans()));
|
||||||
|
this.config.set("Size.MinY", world_limits.get("default").size_min_y);
|
||||||
|
this.config.setInlineComments("Size.MinY", List.of(Translation.Config_Comment_SizeMinY.trans()));
|
||||||
|
this.config.set("Size.MinZ", world_limits.get("default").size_min_z);
|
||||||
|
this.config.setInlineComments("Size.MinZ", List.of(Translation.Config_Comment_SizeMinZ.trans()));
|
||||||
|
this.config.set("Amount", world_limits.get("default").amount);
|
||||||
|
this.config.setInlineComments("Amount", List.of(Translation.Config_Comment_Amount.trans() + Translation.Config_Comment_NegativeOneUnlimited.trans()));
|
||||||
|
this.config.set("Depth", world_limits.get("default").depth);
|
||||||
|
this.config.setInlineComments("Depth", List.of(Translation.Config_Comment_Depth.trans() + Translation.Config_Comment_ZeroDisabled.trans() + Translation.Config_Comment_NegativeOneUnlimited.trans()));
|
||||||
|
this.config.set("Vert", world_limits.get("default").vert);
|
||||||
|
this.config.setInlineComments("Vert", List.of(Translation.Config_Comment_Vert.trans()));
|
||||||
|
this.config.set("Price", price);
|
||||||
|
this.config.setInlineComments("Price", List.of(Translation.Config_Comment_Price.trans()));
|
||||||
|
this.config.set("OnlyXZ", only_xz);
|
||||||
|
this.config.setInlineComments("OnlyXZ", List.of(Translation.Config_Comment_OnlyXZ.trans()));
|
||||||
|
this.config.set("Refund", refund);
|
||||||
|
this.config.setInlineComments("Refund", List.of(Translation.Config_Comment_Refund.trans()));
|
||||||
|
|
||||||
|
this.config.set("WorldSettings", getWorldSettings());
|
||||||
|
this.config.setInlineComments("WorldSettings", List.of(Translation.Config_Comment_WorldSettings.trans()));
|
||||||
|
|
||||||
|
try {
|
||||||
|
this.config.save(this.file_path);
|
||||||
|
} catch (Exception e) {
|
||||||
|
XLogger.err("Failed to save group limit file: " + this.file_path.getName());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public YamlConfiguration getWorldSettings() {
|
||||||
|
YamlConfiguration section = new YamlConfiguration();
|
||||||
|
if (world_limits.size() <= 1) {
|
||||||
|
return WorldSetting.getDefaultList();
|
||||||
|
}
|
||||||
|
for (Map.Entry<String, WorldSetting> entry : world_limits.entrySet()) {
|
||||||
|
if (entry.getKey().equals("default")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
section.set(entry.getKey(), entry.getValue().getYaml());
|
||||||
|
}
|
||||||
|
return section;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void checkRules() {
|
||||||
|
if (getPrice() < 0.0) {
|
||||||
|
XLogger.err(Translation.Config_Check_GroupPriceError, this.file_path.getName());
|
||||||
|
setPrice(10.0);
|
||||||
|
}
|
||||||
|
if (getRefundRatio() < 0.0 || getRefundRatio() > 1.0) {
|
||||||
|
XLogger.err(Translation.Config_Check_GroupRefundError, this.file_path.getName());
|
||||||
|
setRefundRatio(0.85);
|
||||||
|
}
|
||||||
|
for (WorldSetting w : world_limits.values()) {
|
||||||
|
w.checkRules();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<String> getWorldBlackList() {
|
||||||
|
List<String> list = new ArrayList<>();
|
||||||
|
if (world_limits.getOrDefault("default", new WorldSetting("default")).amount == 0) {
|
||||||
|
list.addAll(Dominion.instance.getServer().getWorlds().stream().map(World::getName).toList());
|
||||||
|
}
|
||||||
|
for (Map.Entry<String, WorldSetting> entry : world_limits.entrySet()) {
|
||||||
|
if (entry.getKey().equals("default")) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (entry.getValue().amount == 0) {
|
||||||
|
list.add(entry.getKey());
|
||||||
|
} else {
|
||||||
|
list.remove(entry.getKey());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package cn.lunadeer.dominion.managers;
|
package cn.lunadeer.dominion.managers;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Cache;
|
import cn.lunadeer.dominion.Cache;
|
||||||
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
import cn.lunadeer.dominion.dtos.GroupDTO;
|
import cn.lunadeer.dominion.dtos.GroupDTO;
|
||||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||||
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
|
||||||
@ -18,7 +19,7 @@ public class PlaceHolderApi extends PlaceholderExpansion {
|
|||||||
this.plugin = plugin;
|
this.plugin = plugin;
|
||||||
this.register();
|
this.register();
|
||||||
instance = this;
|
instance = this;
|
||||||
XLogger.info("成功注册 PlaceholderAPI 扩展");
|
XLogger.info(Translation.Messages_PlaceholderAPIRegisterSuccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -30,6 +31,13 @@ public class PlaceHolderApi extends PlaceholderExpansion {
|
|||||||
}
|
}
|
||||||
return group.getNameColoredBukkit();
|
return group.getNameColoredBukkit();
|
||||||
}
|
}
|
||||||
|
if (params.equalsIgnoreCase("current_dominion")) {
|
||||||
|
DominionDTO dominion = Cache.instance.getDominionByLoc(bukkitPlayer.getLocation());
|
||||||
|
if (dominion == null) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
return dominion.getName();
|
||||||
|
}
|
||||||
return null; //
|
return null; //
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,7 +53,7 @@ public class PlaceHolderApi extends PlaceholderExpansion {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @NotNull String getVersion() {
|
public @NotNull String getVersion() {
|
||||||
return plugin.getPluginMeta().getVersion();
|
return plugin.getDescription().getVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
1024
core/src/main/java/cn/lunadeer/dominion/managers/Translation.java
Normal file
1024
core/src/main/java/cn/lunadeer/dominion/managers/Translation.java
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,150 @@
|
|||||||
|
package cn.lunadeer.dominion.managers;
|
||||||
|
|
||||||
|
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||||
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public class WorldSetting {
|
||||||
|
public Integer min_y;
|
||||||
|
public Integer max_y;
|
||||||
|
public Integer size_max_x;
|
||||||
|
public Integer size_max_y;
|
||||||
|
public Integer size_max_z;
|
||||||
|
public Integer size_min_x;
|
||||||
|
public Integer size_min_y;
|
||||||
|
public Integer size_min_z;
|
||||||
|
public Integer amount;
|
||||||
|
public Integer depth;
|
||||||
|
public Boolean vert;
|
||||||
|
private final String sourceName;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 生成默认设置
|
||||||
|
*
|
||||||
|
* @return 设置内容
|
||||||
|
*/
|
||||||
|
public static YamlConfiguration getDefaultList() {
|
||||||
|
YamlConfiguration section = new YamlConfiguration();
|
||||||
|
section.set("some_world_name.MinY", -64);
|
||||||
|
section.set("some_world_name.MaxY", 320);
|
||||||
|
section.set("some_world_name.Size.MaxX", 128);
|
||||||
|
section.set("some_world_name.Size.MaxY", 64);
|
||||||
|
section.set("some_world_name.Size.MaxZ", 128);
|
||||||
|
section.set("some_world_name.Size.MinX", 4);
|
||||||
|
section.set("some_world_name.Size.MinY", 4);
|
||||||
|
section.set("some_world_name.Size.MinZ", 4);
|
||||||
|
section.set("some_world_name.Amount", 10);
|
||||||
|
section.set("some_world_name.Depth", 3);
|
||||||
|
section.set("some_world_name.Vert", false);
|
||||||
|
return section;
|
||||||
|
}
|
||||||
|
|
||||||
|
public WorldSetting(String sourceName) {
|
||||||
|
this.sourceName = sourceName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Map<String, WorldSetting> load(String sourceName, ConfigurationSection worldSettings) {
|
||||||
|
Map<String, WorldSetting> world_limits = new java.util.HashMap<>();
|
||||||
|
for (String worldName : worldSettings.getKeys(false)) {
|
||||||
|
WorldSetting setting = new WorldSetting(sourceName);
|
||||||
|
setting.min_y = worldSettings.getInt(worldName + ".MinY", -64);
|
||||||
|
setting.max_y = worldSettings.getInt(worldName + ".MaxY", 320);
|
||||||
|
if (worldSettings.contains(worldName + ".SizeX")) { // todo: should be removed in the future
|
||||||
|
setting.size_max_x = worldSettings.getInt(worldName + ".SizeX", 128);
|
||||||
|
setting.size_max_y = worldSettings.getInt(worldName + ".SizeY", 64);
|
||||||
|
setting.size_max_z = worldSettings.getInt(worldName + ".SizeZ", 128);
|
||||||
|
setting.size_min_x = 4;
|
||||||
|
setting.size_min_y = 4;
|
||||||
|
setting.size_min_z = 4;
|
||||||
|
} else {
|
||||||
|
setting.size_max_x = worldSettings.getInt(worldName + ".Size.MaxX", 128);
|
||||||
|
setting.size_max_y = worldSettings.getInt(worldName + ".Size.MaxY", 64);
|
||||||
|
setting.size_max_z = worldSettings.getInt(worldName + ".Size.MaxZ", 128);
|
||||||
|
setting.size_min_x = worldSettings.getInt(worldName + ".Size.MinX", 4);
|
||||||
|
setting.size_min_y = worldSettings.getInt(worldName + ".Size.MinY", 4);
|
||||||
|
setting.size_min_z = worldSettings.getInt(worldName + ".Size.MinZ", 4);
|
||||||
|
}
|
||||||
|
setting.amount = worldSettings.getInt(worldName + ".Amount", 10);
|
||||||
|
setting.depth = worldSettings.getInt(worldName + ".Depth", 3);
|
||||||
|
setting.vert = worldSettings.getBoolean(worldName + ".Vert", false);
|
||||||
|
if (worldSettings.contains(worldName + ".Allow") && !worldSettings.getBoolean(worldName + ".Allow")) {
|
||||||
|
setting.amount = 0;
|
||||||
|
}
|
||||||
|
world_limits.put(worldName, setting);
|
||||||
|
}
|
||||||
|
return world_limits;
|
||||||
|
}
|
||||||
|
|
||||||
|
public YamlConfiguration getYaml() {
|
||||||
|
YamlConfiguration section = new YamlConfiguration();
|
||||||
|
section.set("MinY", min_y);
|
||||||
|
section.set("MaxY", max_y);
|
||||||
|
section.set("Size.MaxX", size_max_x);
|
||||||
|
section.set("Size.MaxY", size_max_y);
|
||||||
|
section.set("Size.MaxZ", size_max_z);
|
||||||
|
section.set("Size.MinX", size_min_x);
|
||||||
|
section.set("Size.MinY", size_min_y);
|
||||||
|
section.set("Size.MinZ", size_min_z);
|
||||||
|
section.set("Amount", amount);
|
||||||
|
section.set("Depth", depth);
|
||||||
|
section.set("Vert", vert);
|
||||||
|
return section;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void checkRules() {
|
||||||
|
if (min_y > max_y) {
|
||||||
|
XLogger.err(Translation.Config_Check_GroupMinYError, sourceName);
|
||||||
|
min_y = -64;
|
||||||
|
max_y = 320;
|
||||||
|
}
|
||||||
|
if (size_max_x <= 4 && size_max_x != -1) {
|
||||||
|
XLogger.err(Translation.Config_Check_GroupSizeMaxXError, sourceName);
|
||||||
|
size_max_x = 128;
|
||||||
|
}
|
||||||
|
if (size_max_y <= 4 && size_max_y != -1) {
|
||||||
|
XLogger.err(Translation.Config_Check_GroupSizeMaxYError, sourceName);
|
||||||
|
size_max_y = 64;
|
||||||
|
}
|
||||||
|
if (size_max_z <= 4 && size_max_z != -1) {
|
||||||
|
XLogger.err(Translation.Config_Check_GroupSizeMaxZError, sourceName);
|
||||||
|
size_max_z = 128;
|
||||||
|
}
|
||||||
|
if (size_min_x <= 0) {
|
||||||
|
XLogger.err(Translation.Config_Check_GroupSizeMinXError, sourceName);
|
||||||
|
size_min_x = 4;
|
||||||
|
}
|
||||||
|
if (size_min_y <= 0) {
|
||||||
|
XLogger.err(Translation.Config_Check_GroupSizeMinYError, sourceName);
|
||||||
|
size_min_y = 4;
|
||||||
|
}
|
||||||
|
if (size_min_z <= 0) {
|
||||||
|
XLogger.err(Translation.Config_Check_GroupSizeMinZError, sourceName);
|
||||||
|
size_min_z = 4;
|
||||||
|
}
|
||||||
|
if (size_max_x < size_min_x && size_max_x != -1) {
|
||||||
|
XLogger.err(Translation.Config_Check_GroupMaxMinXError, sourceName);
|
||||||
|
size_max_x = 128;
|
||||||
|
size_min_x = 4;
|
||||||
|
}
|
||||||
|
if (size_max_y < size_min_y && size_max_y != -1) {
|
||||||
|
XLogger.err(Translation.Config_Check_GroupMaxMinYError, sourceName);
|
||||||
|
size_max_y = 64;
|
||||||
|
size_min_y = 4;
|
||||||
|
}
|
||||||
|
if (size_max_z < size_min_z && size_max_z != -1) {
|
||||||
|
XLogger.err(Translation.Config_Check_GroupMaxMinZError, sourceName);
|
||||||
|
size_max_z = 128;
|
||||||
|
size_min_z = 4;
|
||||||
|
}
|
||||||
|
if (amount < 0 && amount != -1) {
|
||||||
|
XLogger.err(Translation.Config_Check_GroupAmountError, sourceName);
|
||||||
|
amount = 10;
|
||||||
|
}
|
||||||
|
if (depth < 0 && depth != -1) {
|
||||||
|
XLogger.err(Translation.Config_Check_GroupDepthError, sourceName);
|
||||||
|
depth = 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,82 +0,0 @@
|
|||||||
package cn.lunadeer.dominion.tuis;
|
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Dominion;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.ViewStyles;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
|
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
|
||||||
|
|
||||||
public class Menu {
|
|
||||||
public static void show(CommandSender sender, String[] args) {
|
|
||||||
Player player = playerOnly(sender);
|
|
||||||
if (player == null) return;
|
|
||||||
|
|
||||||
int page = 1;
|
|
||||||
if (args.length == 2) {
|
|
||||||
try {
|
|
||||||
page = Integer.parseInt(args[1]);
|
|
||||||
} catch (Exception ignored) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Line create = Line.create()
|
|
||||||
.append(Button.create("创建领地").setExecuteCommand("/dominion cui_create").build())
|
|
||||||
.append("以你为中心自动创建一个新的领地");
|
|
||||||
Line list = Line.create()
|
|
||||||
.append(Button.create("我的领地").setExecuteCommand("/dominion list").build())
|
|
||||||
.append("查看我的领地");
|
|
||||||
Line title = Line.create()
|
|
||||||
.append(Button.create("称号列表").setExecuteCommand("/dominion title_list").build())
|
|
||||||
.append("查看/使用权限组称号");
|
|
||||||
Line template = Line.create()
|
|
||||||
.append(Button.create("模板列表").setExecuteCommand("/dominion template list").build())
|
|
||||||
.append("成员权限模板列表");
|
|
||||||
// Line help = Line.create()
|
|
||||||
// .append(Button.create("指令帮助").setExecuteCommand("/dominion help").build())
|
|
||||||
// .append("查看指令帮助");
|
|
||||||
Line link = Line.create()
|
|
||||||
.append(Button.create("使用文档").setOpenURL("https://ssl.lunadeer.cn:14448/doc/23/").build())
|
|
||||||
.append("在浏览器中打开使用文档");
|
|
||||||
Line migrate = Line.create()
|
|
||||||
.append(Button.create("迁移数据").setExecuteCommand("/dominion migrate_list").build())
|
|
||||||
.append("把你的领地从Residence迁移到Dominion");
|
|
||||||
Line all = Line.create()
|
|
||||||
.append(Button.create("所有领地").setExecuteCommand("/dominion all_dominion").build())
|
|
||||||
.append("查看所有领地");
|
|
||||||
Line config = Line.create()
|
|
||||||
.append(Button.create("系统配置").setExecuteCommand("/dominion sys_config").build())
|
|
||||||
.append("查看/修改系统配置");
|
|
||||||
Line reload_cache = Line.create()
|
|
||||||
.append(Button.create("重载缓存").setExecuteCommand("/dominion reload_cache").build())
|
|
||||||
.append("手动刷新缓存可解决一些玩家操作无效问题,不建议频繁操作");
|
|
||||||
Line reload_config = Line.create()
|
|
||||||
.append(Button.create("重载配置").setExecuteCommand("/dominion reload_config").build())
|
|
||||||
.append("重载配置文件");
|
|
||||||
ListView view = ListView.create(10, "/dominion menu");
|
|
||||||
view.title("Dominion 领地系统");
|
|
||||||
view.navigator(Line.create().append("主菜单"));
|
|
||||||
view.add(create);
|
|
||||||
view.add(list);
|
|
||||||
if (Dominion.config.getGroupTitleEnable()) view.add(title);
|
|
||||||
view.add(template);
|
|
||||||
// view.add(help);
|
|
||||||
view.add(link);
|
|
||||||
if (Dominion.config.getResidenceMigration()) {
|
|
||||||
view.add(migrate);
|
|
||||||
}
|
|
||||||
if (player.isOp()) {
|
|
||||||
view.add(Line.create().append(""));
|
|
||||||
view.add(Line.create().append(Component.text("--- 以下选项仅OP可见 ---", ViewStyles.main_color)));
|
|
||||||
view.add(all);
|
|
||||||
view.add(config);
|
|
||||||
view.add(reload_cache);
|
|
||||||
view.add(reload_config);
|
|
||||||
}
|
|
||||||
view.showOn(player, page);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,176 +0,0 @@
|
|||||||
package cn.lunadeer.dominion.tuis;
|
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Dominion;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.components.NumChanger;
|
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import net.kyori.adventure.text.format.Style;
|
|
||||||
import net.kyori.adventure.text.format.TextDecoration;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.getPage;
|
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.notOp;
|
|
||||||
|
|
||||||
public class SysConfig {
|
|
||||||
public static void show(CommandSender sender, String[] args) {
|
|
||||||
Player player = playerOnly(sender);
|
|
||||||
if (player == null) return;
|
|
||||||
if (notOp(player)) return;
|
|
||||||
int page = getPage(args, 1);
|
|
||||||
ListView view = ListView.create(10, "/dominion sys_config");
|
|
||||||
view.title("系统配置");
|
|
||||||
view.navigator(Line.create().append(Button.create("主菜单").setExecuteCommand("/dominion menu").build()).append("系统配置"));
|
|
||||||
|
|
||||||
Line limitSize = Line.create()
|
|
||||||
.append(Component.text("领地尺寸限制"));
|
|
||||||
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()
|
|
||||||
.append(Component.text(" X轴(东西)"));
|
|
||||||
if (Dominion.config.getLimitSizeX(null) == -1) {
|
|
||||||
limitSizeX.append(Component.text("无限制")).append(Button.create("设置数值").setExecuteCommand("/dominion set_config limit_size_x 64 " + page).build());
|
|
||||||
} else {
|
|
||||||
limitSizeX.append(NumChanger.create(Dominion.config.getLimitSizeX(null), "/dominion set_config limit_size_x").setPageNumber(page).build());
|
|
||||||
limitSizeX.append(Button.create("设置无限制").setExecuteCommand("/dominion set_config limit_size_x -1 " + page).build());
|
|
||||||
}
|
|
||||||
view.add(limitSizeX);
|
|
||||||
Line limitSizeZ = Line.create()
|
|
||||||
.append(Component.text(" Z轴(南北)"));
|
|
||||||
if (Dominion.config.getLimitSizeZ(null) == -1) {
|
|
||||||
limitSizeZ.append(Component.text("无限制")).append(Button.create("设置数值").setExecuteCommand("/dominion set_config limit_size_z 64 " + page).build());
|
|
||||||
} else {
|
|
||||||
limitSizeZ.append(NumChanger.create(Dominion.config.getLimitSizeZ(null), "/dominion set_config limit_size_z").setPageNumber(page).build());
|
|
||||||
limitSizeZ.append(Button.create("设置无限制").setExecuteCommand("/dominion set_config limit_size_z -1 " + page).build());
|
|
||||||
}
|
|
||||||
view.add(limitSizeZ);
|
|
||||||
Line limitSizeY = Line.create()
|
|
||||||
.append(Component.text(" Y轴(垂直)"));
|
|
||||||
if (!Dominion.config.getLimitVert(null)) {
|
|
||||||
if (Dominion.config.getLimitSizeY(null) == -1) {
|
|
||||||
limitSizeY.append(Component.text("无限制")).append(Button.create("设置数值").setExecuteCommand("/dominion set_config limit_size_y 64 " + page).build());
|
|
||||||
} else {
|
|
||||||
limitSizeY.append(NumChanger.create(Dominion.config.getLimitSizeY(null), "/dominion set_config limit_size_y").setPageNumber(page).build());
|
|
||||||
limitSizeY.append(Button.create("设置无限制").setExecuteCommand("/dominion set_config limit_size_y -1 " + page).build());
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
limitSizeY.append(Component.text(Dominion.config.getLimitSizeY(null))
|
|
||||||
.style(Style.style(TextDecoration.STRIKETHROUGH))
|
|
||||||
.hoverEvent(Component.text("因为垂直自动延伸已开启,此设置不可手动修改")));
|
|
||||||
}
|
|
||||||
view.add(limitSizeY);
|
|
||||||
if (Dominion.config.getLimitVert(null)) {
|
|
||||||
view.add(Line.create()
|
|
||||||
.append("垂直自动延伸")
|
|
||||||
.append(Button.createGreen("☑").setExecuteCommand("/dominion set_config limit_vert false " + page).build()));
|
|
||||||
} else {
|
|
||||||
view.add(Line.create()
|
|
||||||
.append("垂直自动延伸")
|
|
||||||
.append(Button.createRed("☐").setExecuteCommand("/dominion set_config limit_vert true " + page).build()));
|
|
||||||
}
|
|
||||||
Line limitMaxY = Line.create()
|
|
||||||
.append(Component.text("最高Y坐标限制"));
|
|
||||||
limitMaxY.append(NumChanger.create(Dominion.config.getLimitMaxY(null), "/dominion set_config limit_max_y").setPageNumber(page).build());
|
|
||||||
view.add(limitMaxY);
|
|
||||||
Line limitMinY = Line.create()
|
|
||||||
.append(Component.text("最低Y坐标限制"));
|
|
||||||
limitMinY.append(NumChanger.create(Dominion.config.getLimitMinY(null), "/dominion set_config limit_min_y").setPageNumber(page).build());
|
|
||||||
view.add(limitMinY);
|
|
||||||
Line limitAmount = Line.create()
|
|
||||||
.append(Component.text("每个玩家领地数量限制"));
|
|
||||||
if (Dominion.config.getLimitAmount(null) == -1) {
|
|
||||||
limitAmount.append(Component.text("无限制")).append(Button.create("设置数值").setExecuteCommand("/dominion set_config limit_amount 3 " + page).build());
|
|
||||||
} else {
|
|
||||||
limitAmount.append(NumChanger.create(Dominion.config.getLimitAmount(null), "/dominion set_config limit_amount").setPageNumber(page).build());
|
|
||||||
limitAmount.append(Button.create("设置无限制").setExecuteCommand("/dominion set_config limit_amount -1 " + page).build());
|
|
||||||
}
|
|
||||||
view.add(limitAmount);
|
|
||||||
Line limitDepth = Line.create()
|
|
||||||
.append(Component.text("领地深度限制"));
|
|
||||||
if (Dominion.config.getLimitDepth(null) == -1) {
|
|
||||||
limitDepth.append(Component.text("无限制")).append(Button.create("设置数值").setExecuteCommand("/dominion set_config limit_depth 64 " + page).build());
|
|
||||||
} else {
|
|
||||||
limitDepth.append(NumChanger.create(Dominion.config.getLimitDepth(null), "/dominion set_config limit_depth").setPageNumber(page).build());
|
|
||||||
limitDepth.append(Button.create("设置无限制").setExecuteCommand("/dominion set_config limit_depth -1 " + page).build());
|
|
||||||
}
|
|
||||||
view.add(limitDepth);
|
|
||||||
|
|
||||||
if (Dominion.config.getLimitOpBypass()) {
|
|
||||||
view.add(Line.create()
|
|
||||||
.append("OP是否可以无视限制")
|
|
||||||
.append(Button.createGreen("☑").setExecuteCommand("/dominion set_config limit_op_bypass false " + page).build()));
|
|
||||||
} else {
|
|
||||||
view.add(Line.create()
|
|
||||||
.append("OP是否可以无视限制")
|
|
||||||
.append(Button.createRed("☐").setExecuteCommand("/dominion set_config limit_op_bypass true " + page).build()));
|
|
||||||
}
|
|
||||||
|
|
||||||
Line autoCreateRadius = Line.create()
|
|
||||||
.append(Component.text("自动创建半径"))
|
|
||||||
.append(NumChanger.create(Dominion.config.getAutoCreateRadius(), "/dominion set_config auto_create_radius").setPageNumber(page).build());
|
|
||||||
view.add(autoCreateRadius);
|
|
||||||
|
|
||||||
if (Dominion.config.getTpEnable()) {
|
|
||||||
view.add(Line.create()
|
|
||||||
.append("领地传送功能")
|
|
||||||
.append(Button.createGreen("☑").setExecuteCommand("/dominion set_config tp_enable false " + page).build()));
|
|
||||||
} else {
|
|
||||||
view.add(Line.create()
|
|
||||||
.append("领地传送功能")
|
|
||||||
.append(Button.createRed("☐").setExecuteCommand("/dominion set_config tp_enable true " + page).build()));
|
|
||||||
}
|
|
||||||
Line tpDelay = Line.create()
|
|
||||||
.append(Component.text(" 传送延迟(秒)"))
|
|
||||||
.append(NumChanger.create(Dominion.config.getTpDelay(), "/dominion set_config tp_delay").setPageNumber(page).build());
|
|
||||||
view.add(tpDelay);
|
|
||||||
Line tpCoolDown = Line.create()
|
|
||||||
.append(Component.text(" 传送冷却(秒)"))
|
|
||||||
.append(NumChanger.create(Dominion.config.getTpCoolDown(), "/dominion set_config tp_cool_down").setPageNumber(page).build());
|
|
||||||
view.add(tpCoolDown);
|
|
||||||
if (Dominion.config.getEconomyEnable()) {
|
|
||||||
Line economy = Line.create()
|
|
||||||
.append("经济系统");
|
|
||||||
view.add(economy);
|
|
||||||
Line price = Line.create()
|
|
||||||
.append(Component.text(" 每方块单价"))
|
|
||||||
.append(NumChanger.create(Dominion.config.getEconomyPrice(null), "/dominion set_config economy_price", 0.1).setPageNumber(page).build());
|
|
||||||
view.add(price);
|
|
||||||
if (Dominion.config.getEconomyOnlyXZ(null)) {
|
|
||||||
view.add(Line.create()
|
|
||||||
.append(" 仅计价平面积")
|
|
||||||
.append(Button.createGreen("☑").setExecuteCommand("/dominion set_config economy_only_xz false " + page).build()));
|
|
||||||
} else {
|
|
||||||
view.add(Line.create()
|
|
||||||
.append(" 仅计价平面积")
|
|
||||||
.append(Button.createRed("☐").setExecuteCommand("/dominion set_config economy_only_xz true " + page).build()));
|
|
||||||
}
|
|
||||||
Line refund = Line.create()
|
|
||||||
.append(Component.text(" 删除/缩小领地退还比例"))
|
|
||||||
.append(NumChanger.create(Dominion.config.getEconomyRefund(null), "/dominion set_config economy_refund", 0.01).setPageNumber(page).build());
|
|
||||||
view.add(refund);
|
|
||||||
}
|
|
||||||
if (Dominion.config.getResidenceMigration()) {
|
|
||||||
view.add(Line.create()
|
|
||||||
.append("是否允许从Residence迁移数据")
|
|
||||||
.append(Button.createGreen("☑").setExecuteCommand("/dominion set_config residence_migration false " + page).build()));
|
|
||||||
} else {
|
|
||||||
view.add(Line.create()
|
|
||||||
.append("是否允许从Residence迁移数据")
|
|
||||||
.append(Button.createRed("☐").setExecuteCommand("/dominion set_config residence_migration true " + page).build()));
|
|
||||||
}
|
|
||||||
view.showOn(player, page);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,80 +0,0 @@
|
|||||||
package cn.lunadeer.dominion.tuis.dominion;
|
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Dominion;
|
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
|
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import net.kyori.adventure.text.format.TextColor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.*;
|
|
||||||
|
|
||||||
public class DominionManage {
|
|
||||||
public static void show(CommandSender sender, String[] args) {
|
|
||||||
Player player = playerOnly(sender);
|
|
||||||
if (player == null) return;
|
|
||||||
DominionDTO dominion = getDominionNameArg_1(player, args);
|
|
||||||
if (dominion == null) {
|
|
||||||
Notification.error(sender, "你不在任何领地内,请指定领地名称 /dominion manage <领地名称>");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (noAuthToManage(player, dominion)) return;
|
|
||||||
int page = getPage(args, 2);
|
|
||||||
Line size_info = Line.create()
|
|
||||||
.append(Button.create("详细信息").setExecuteCommand("/dominion info " + dominion.getName()).build())
|
|
||||||
.append("查看领地详细信息");
|
|
||||||
Line env_info = Line.create()
|
|
||||||
.append(Button.create("环境设置").setExecuteCommand("/dominion env_setting " + dominion.getName()).build())
|
|
||||||
.append("设置领地内的一些非玩家相关效果");
|
|
||||||
Line flag_info = Line.create()
|
|
||||||
.append(Button.create("访客权限").setExecuteCommand("/dominion guest_setting " + dominion.getName()).build())
|
|
||||||
.append("访客在此领地的权限");
|
|
||||||
Line privilege_list = Line.create()
|
|
||||||
.append(Button.create("成员管理").setExecuteCommand("/dominion member list " + dominion.getName()).build())
|
|
||||||
.append("管理此领地成员的权限");
|
|
||||||
Line group_list = Line.create()
|
|
||||||
.append(Button.create("权限组").setExecuteCommand("/dominion group list " + dominion.getName()).build())
|
|
||||||
.append("管理此领地的权限组");
|
|
||||||
Line set_tp = Line.create()
|
|
||||||
.append(Button.create("设置传送点").setExecuteCommand("/dominion set_tp_location " + dominion.getName()).build())
|
|
||||||
.append("设置当前位置为此领地传送点");
|
|
||||||
Line rename = Line.create()
|
|
||||||
.append(Button.create("重命名").setExecuteCommand("/dominion cui_rename " + dominion.getName()).build())
|
|
||||||
.append("重命名领地");
|
|
||||||
Line join_msg = Line.create()
|
|
||||||
.append(Button.create("编辑欢迎提示语").setExecuteCommand("/dominion cui_edit_join_message " + dominion.getName()).build())
|
|
||||||
.append("当玩家进入领地时显示的消息");
|
|
||||||
Line leave_msg = Line.create()
|
|
||||||
.append(Button.create("编辑离开提示语").setExecuteCommand("/dominion cui_edit_leave_message " + dominion.getName()).build())
|
|
||||||
.append("当玩家离开领地时显示的消息");
|
|
||||||
Line map_color = Line.create()
|
|
||||||
.append(Button.create("设置颜色").setExecuteCommand("/dominion cui_set_map_color " + dominion.getName()).build())
|
|
||||||
.append(Component.text("设置卫星地图上的地块颜色")
|
|
||||||
.append(Component.text(dominion.getColor(),
|
|
||||||
TextColor.color(dominion.getColorR(), dominion.getColorG(), dominion.getColorB()))));
|
|
||||||
ListView view = ListView.create(10, "/dominion manage " + dominion.getName());
|
|
||||||
view.title("领地 " + dominion.getName() + " 管理界面")
|
|
||||||
.navigator(Line.create()
|
|
||||||
.append(Button.create("主菜单").setExecuteCommand("/dominion menu").build())
|
|
||||||
.append(Button.create("我的领地").setExecuteCommand("/dominion list").build())
|
|
||||||
.append(dominion.getName()))
|
|
||||||
.add(size_info)
|
|
||||||
.add(env_info)
|
|
||||||
.add(flag_info)
|
|
||||||
.add(privilege_list)
|
|
||||||
.add(group_list)
|
|
||||||
.add(set_tp)
|
|
||||||
.add(rename)
|
|
||||||
.add(join_msg)
|
|
||||||
.add(leave_msg);
|
|
||||||
if (Dominion.config.getBlueMap()) {
|
|
||||||
view.add(map_color);
|
|
||||||
}
|
|
||||||
view.showOn(player, page);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,53 +0,0 @@
|
|||||||
package cn.lunadeer.dominion.tuis.dominion.manage;
|
|
||||||
|
|
||||||
import cn.lunadeer.dominion.controllers.PlayerController;
|
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
|
||||||
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
|
||||||
import cn.lunadeer.dominion.utils.Particle;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.View;
|
|
||||||
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 static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.getDominionNameArg_1;
|
|
||||||
|
|
||||||
public class SizeInfo {
|
|
||||||
public static void show(CommandSender sender, String[] args) {
|
|
||||||
Player player = playerOnly(sender);
|
|
||||||
if (player == null) return;
|
|
||||||
DominionDTO dominion = getDominionNameArg_1(player, args);
|
|
||||||
if (dominion == null) {
|
|
||||||
Notification.error(sender, "你不在任何领地内,请指定领地名称 /dominion info <领地名称>");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
PlayerDTO owner = PlayerController.getPlayerDTO(dominion.getOwner());
|
|
||||||
Integer x1 = dominion.getX1();
|
|
||||||
Integer y1 = dominion.getY1();
|
|
||||||
Integer z1 = dominion.getZ1();
|
|
||||||
Integer x2 = dominion.getX2();
|
|
||||||
Integer y2 = dominion.getY2();
|
|
||||||
Integer z2 = dominion.getZ2();
|
|
||||||
View view = View.create();
|
|
||||||
view.title("领地 " + dominion.getName() + " 的尺寸信息")
|
|
||||||
.subtitle("领地所有者:" + owner.getLastKnownName())
|
|
||||||
.addLine(Line.create().append("领地大小:").append(dominion.getWidthX() + " x " + dominion.getHeight() + " x " + dominion.getWidthZ()))
|
|
||||||
.addLine(Line.create().append("中心坐标:").append((x1 + (x2 - x1) / 2) + " " + (y1 + (y2 - y1) / 2) + " " + (z1 + (z2 - z1) / 2)))
|
|
||||||
.addLine(Line.create().append("垂直高度:").append(String.valueOf(dominion.getHeight())))
|
|
||||||
.addLine(Line.create().append("Y轴坐标:").append(y1 + " ~ " + y2))
|
|
||||||
.addLine(Line.create().append("水平面积:").append(String.valueOf(dominion.getSquare())))
|
|
||||||
.addLine(Line.create().append("领地体积:").append(String.valueOf(dominion.getVolume())))
|
|
||||||
.addLine(Line.create().append("传送点坐标:").append(
|
|
||||||
dominion.getTpLocation() == null ?
|
|
||||||
"无" :
|
|
||||||
dominion.getTpLocation().getX() + " " + dominion.getTpLocation().getY() + " " + dominion.getTpLocation().getZ()
|
|
||||||
))
|
|
||||||
.actionBar(Line.create()
|
|
||||||
.append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build())
|
|
||||||
.append(Button.create("访客权限").setExecuteCommand("/dominion guest_setting " + dominion.getName()).build()))
|
|
||||||
.showOn(player);
|
|
||||||
Particle.showBorder(player, dominion);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,9 +1,10 @@
|
|||||||
package cn.lunadeer.dominion.cuis;
|
package cn.lunadeer.dominion.uis.cuis;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.controllers.AbstractOperator;
|
import cn.lunadeer.dominion.controllers.AbstractOperator;
|
||||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||||
import cn.lunadeer.dominion.controllers.DominionController;
|
import cn.lunadeer.dominion.controllers.DominionController;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.DominionManage;
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
|
import cn.lunadeer.dominion.uis.tuis.dominion.DominionManage;
|
||||||
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.Location;
|
import org.bukkit.Location;
|
||||||
@ -33,7 +34,7 @@ public class CreateDominion {
|
|||||||
Map<Integer, Location> points = autoPoints(sender);
|
Map<Integer, Location> points = autoPoints(sender);
|
||||||
operator.getResponse().thenAccept(result -> {
|
operator.getResponse().thenAccept(result -> {
|
||||||
if (Objects.equals(result.getStatus(), AbstractOperator.Result.SUCCESS)) {
|
if (Objects.equals(result.getStatus(), AbstractOperator.Result.SUCCESS)) {
|
||||||
DominionManage.show(sender, new String[]{"list"});
|
DominionManage.show(sender, new String[]{"manage", input});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
DominionController.create(operator, input, points.get(0), points.get(1));
|
DominionController.create(operator, input, points.get(0), points.get(1));
|
||||||
@ -44,8 +45,8 @@ public class CreateDominion {
|
|||||||
Player player = playerOnly(sender);
|
Player player = playerOnly(sender);
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
CuiTextInput.InputCallback createDominionCB = new createDominionCB(player);
|
CuiTextInput.InputCallback createDominionCB = new createDominionCB(player);
|
||||||
CuiTextInput view = CuiTextInput.create(createDominionCB).setText("未命名领地").title("输入要创建的领地名称");
|
CuiTextInput view = CuiTextInput.create(createDominionCB).setText(Translation.Commands_NewDominionName.trans()).title(Translation.CUI_Input_CreateDominion.trans());
|
||||||
view.setSuggestCommand("/dominion auto_create <领地名称>");
|
view.setSuggestCommand(Translation.Commands_Dominion_AutoCreateDominionUsage.trans());
|
||||||
view.open(player);
|
view.open(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,9 +1,10 @@
|
|||||||
package cn.lunadeer.dominion.cuis;
|
package cn.lunadeer.dominion.uis.cuis;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
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.managers.Translation;
|
||||||
|
import cn.lunadeer.dominion.uis.tuis.dominion.manage.group.GroupList;
|
||||||
import cn.lunadeer.minecraftpluginutils.ColorParser;
|
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;
|
||||||
@ -39,12 +40,12 @@ public class CreateGroup {
|
|||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
DominionDTO dominion = DominionDTO.select(args[1]);
|
DominionDTO dominion = DominionDTO.select(args[1]);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
Notification.error(sender, "领地不存在");
|
Notification.error(sender, Translation.Messages_DominionNotExist, args[1]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
CuiTextInput.InputCallback createGroupCB = new createGroupCB(player, dominion.getName());
|
CuiTextInput.InputCallback createGroupCB = new createGroupCB(player, dominion.getName());
|
||||||
CuiTextInput view = CuiTextInput.create(createGroupCB).setText("未命名权限组").title("输入要创建的权限组名称");
|
CuiTextInput view = CuiTextInput.create(createGroupCB).setText(Translation.Commands_Group_NewGroupName.trans()).title(Translation.CUI_Input_CreateGroup.trans());
|
||||||
view.setSuggestCommand("/dominion group create <领地名称> <权限组名称>");
|
view.setSuggestCommand(Translation.Commands_Group_CreateGroupUsage.trans());
|
||||||
view.open(player);
|
view.open(player);
|
||||||
}
|
}
|
||||||
|
|
@ -1,8 +1,9 @@
|
|||||||
package cn.lunadeer.dominion.cuis;
|
package cn.lunadeer.dominion.uis.cuis;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||||
import cn.lunadeer.dominion.controllers.TemplateController;
|
import cn.lunadeer.dominion.controllers.TemplateController;
|
||||||
import cn.lunadeer.dominion.tuis.template.TemplateList;
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
|
import cn.lunadeer.dominion.uis.tuis.template.TemplateList;
|
||||||
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;
|
||||||
@ -32,8 +33,8 @@ public class CreateTemplate {
|
|||||||
Player player = playerOnly(sender);
|
Player player = playerOnly(sender);
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
CuiTextInput.InputCallback createTemplateCB = new createTemplateCB(player);
|
CuiTextInput.InputCallback createTemplateCB = new createTemplateCB(player);
|
||||||
CuiTextInput view = CuiTextInput.create(createTemplateCB).setText("未命名模板").title("输入模板名称");
|
CuiTextInput view = CuiTextInput.create(createTemplateCB).setText(Translation.Commands_Template_NewTemplateName.trans()).title(Translation.CUI_Input_CreateTemplate.trans());
|
||||||
view.setSuggestCommand("/dominion template create <模板名称>");
|
view.setSuggestCommand(Translation.Commands_Template_CreateTemplateUsage.trans());
|
||||||
view.open(player);
|
view.open(player);
|
||||||
}
|
}
|
||||||
|
|
@ -1,9 +1,10 @@
|
|||||||
package cn.lunadeer.dominion.cuis;
|
package cn.lunadeer.dominion.uis.cuis;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||||
import cn.lunadeer.dominion.controllers.DominionController;
|
import cn.lunadeer.dominion.controllers.DominionController;
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.DominionManage;
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
|
import cn.lunadeer.dominion.uis.tuis.dominion.DominionManage;
|
||||||
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;
|
||||||
@ -37,12 +38,12 @@ public class EditJoinMessage {
|
|||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
DominionDTO dominion = DominionDTO.select(args[1]);
|
DominionDTO dominion = DominionDTO.select(args[1]);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
Notification.error(sender, "领地不存在");
|
Notification.error(sender, Translation.Messages_DominionNotExist, args[1]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
CuiTextInput.InputCallback editJoinMessageCB = new editJoinMessageCB(player, dominion.getName());
|
CuiTextInput.InputCallback editJoinMessageCB = new editJoinMessageCB(player, dominion.getName());
|
||||||
CuiTextInput view = CuiTextInput.create(editJoinMessageCB).setText(dominion.getJoinMessage()).title("编辑欢迎提示语");
|
CuiTextInput view = CuiTextInput.create(editJoinMessageCB).setText(dominion.getJoinMessage()).title(Translation.CUI_Input_EditEnterMessage.trans());
|
||||||
view.setSuggestCommand("/dominion set_enter_msg <提示语> [领地名称]");
|
view.setSuggestCommand(Translation.Commands_Dominion_SetEnterMessageUsage.trans());
|
||||||
view.open(player);
|
view.open(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,9 +1,10 @@
|
|||||||
package cn.lunadeer.dominion.cuis;
|
package cn.lunadeer.dominion.uis.cuis;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||||
import cn.lunadeer.dominion.controllers.DominionController;
|
import cn.lunadeer.dominion.controllers.DominionController;
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.DominionManage;
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
|
import cn.lunadeer.dominion.uis.tuis.dominion.DominionManage;
|
||||||
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;
|
||||||
@ -37,12 +38,12 @@ public class EditLeaveMessage {
|
|||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
DominionDTO dominion = DominionDTO.select(args[1]);
|
DominionDTO dominion = DominionDTO.select(args[1]);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
Notification.error(sender, "领地不存在");
|
Notification.error(sender, Translation.Messages_DominionNotExist, args[1]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
CuiTextInput.InputCallback editLeaveMessageCB = new editLeaveMessageCB(player, dominion.getName());
|
CuiTextInput.InputCallback editLeaveMessageCB = new editLeaveMessageCB(player, dominion.getName());
|
||||||
CuiTextInput view = CuiTextInput.create(editLeaveMessageCB).setText(dominion.getLeaveMessage()).title("编辑离开提示语");
|
CuiTextInput view = CuiTextInput.create(editLeaveMessageCB).setText(dominion.getLeaveMessage()).title(Translation.CUI_Input_EditLeaveMessage.trans());
|
||||||
view.setSuggestCommand("/dominion set_leave_msg <提示语> [领地名称]");
|
view.setSuggestCommand(Translation.Commands_Dominion_SetLeaveMessageUsage.trans());
|
||||||
view.open(player);
|
view.open(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,11 +1,12 @@
|
|||||||
package cn.lunadeer.dominion.cuis;
|
package cn.lunadeer.dominion.uis.cuis;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.controllers.AbstractOperator;
|
import cn.lunadeer.dominion.controllers.AbstractOperator;
|
||||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||||
import cn.lunadeer.dominion.controllers.MemberController;
|
import cn.lunadeer.dominion.controllers.MemberController;
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.manage.member.MemberList;
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.manage.member.SelectPlayer;
|
import cn.lunadeer.dominion.uis.tuis.dominion.manage.member.MemberList;
|
||||||
|
import cn.lunadeer.dominion.uis.tuis.dominion.manage.member.SelectPlayer;
|
||||||
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;
|
||||||
@ -47,12 +48,12 @@ public class MemberAdd {
|
|||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
DominionDTO dominion = DominionDTO.select(args[1]);
|
DominionDTO dominion = DominionDTO.select(args[1]);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
Notification.error(sender, "领地不存在");
|
Notification.error(sender, Translation.Messages_DominionNotExist, args[1]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
CuiTextInput.InputCallback createPrivilegeCB = new memberAddCB(player, dominion.getName());
|
CuiTextInput.InputCallback createPrivilegeCB = new memberAddCB(player, dominion.getName());
|
||||||
CuiTextInput view = CuiTextInput.create(createPrivilegeCB).setText("Steve").title("输入玩家名称以添加为成员");
|
CuiTextInput view = CuiTextInput.create(createPrivilegeCB).setText("Steve").title(Translation.CUI_Input_AddMember.trans());
|
||||||
view.setSuggestCommand("/dominion member add <领地名称> <玩家名称>");
|
view.setSuggestCommand(Translation.Commands_Member_DominionAddMemberUsage.trans());
|
||||||
view.open(player);
|
view.open(player);
|
||||||
}
|
}
|
||||||
|
|
@ -1,8 +1,9 @@
|
|||||||
package cn.lunadeer.dominion.cuis;
|
package cn.lunadeer.dominion.uis.cuis;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||||
import cn.lunadeer.dominion.controllers.DominionController;
|
import cn.lunadeer.dominion.controllers.DominionController;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.DominionManage;
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
|
import cn.lunadeer.dominion.uis.tuis.dominion.DominionManage;
|
||||||
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;
|
||||||
@ -34,8 +35,8 @@ public class RenameDominion {
|
|||||||
Player player = playerOnly(sender);
|
Player player = playerOnly(sender);
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
CuiTextInput.InputCallback renameDominionCB = new renameDominionCB(player, args[1]);
|
CuiTextInput.InputCallback renameDominionCB = new renameDominionCB(player, args[1]);
|
||||||
CuiTextInput view = CuiTextInput.create(renameDominionCB).setText(args[1]).title("领地重命名");
|
CuiTextInput view = CuiTextInput.create(renameDominionCB).setText(args[1]).title(Translation.CUI_Input_RenameDominion.trans());
|
||||||
view.setSuggestCommand("/dominion rename <原领地名称> <新领地名称>");
|
view.setSuggestCommand(Translation.Commands_Dominion_RenameDominionUsage.trans());
|
||||||
view.open(player);
|
view.open(player);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,9 +1,10 @@
|
|||||||
package cn.lunadeer.dominion.cuis;
|
package cn.lunadeer.dominion.uis.cuis;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
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.managers.Translation;
|
||||||
|
import cn.lunadeer.dominion.uis.tuis.dominion.manage.group.GroupSetting;
|
||||||
import cn.lunadeer.minecraftpluginutils.ColorParser;
|
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;
|
||||||
@ -41,12 +42,12 @@ public class RenameGroup {
|
|||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
DominionDTO dominion = DominionDTO.select(args[1]);
|
DominionDTO dominion = DominionDTO.select(args[1]);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
Notification.error(sender, "领地不存在");
|
Notification.error(sender, Translation.Messages_DominionNotExist, args[1]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
CuiTextInput.InputCallback renameGroupCB = new renameGroupCB(player, dominion.getName(), args[2]);
|
CuiTextInput.InputCallback renameGroupCB = new renameGroupCB(player, dominion.getName(), args[2]);
|
||||||
CuiTextInput view = CuiTextInput.create(renameGroupCB).setText(args[2]).title("输入新的权限组名称");
|
CuiTextInput view = CuiTextInput.create(renameGroupCB).setText(args[2]).title(Translation.CUI_Input_RenameGroup.trans());
|
||||||
view.setSuggestCommand("/dominion group rename <领地名称> <权限组旧名称> <新名称>");
|
view.setSuggestCommand(Translation.Commands_Group_RenameGroupUsage.trans());
|
||||||
view.open(player);
|
view.open(player);
|
||||||
}
|
}
|
||||||
|
|
@ -1,9 +1,10 @@
|
|||||||
package cn.lunadeer.dominion.cuis;
|
package cn.lunadeer.dominion.uis.cuis;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
import cn.lunadeer.dominion.controllers.BukkitPlayerOperator;
|
||||||
import cn.lunadeer.dominion.controllers.DominionController;
|
import cn.lunadeer.dominion.controllers.DominionController;
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
import cn.lunadeer.dominion.tuis.dominion.DominionManage;
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
|
import cn.lunadeer.dominion.uis.tuis.dominion.DominionManage;
|
||||||
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;
|
||||||
@ -37,12 +38,12 @@ public class SetMapColor {
|
|||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
DominionDTO dominion = DominionDTO.select(args[1]);
|
DominionDTO dominion = DominionDTO.select(args[1]);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
Notification.error(sender, "领地不存在");
|
Notification.error(sender, Translation.Messages_DominionNotExist, args[1]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
CuiTextInput.InputCallback setMapColorCB = new SetMapColor.setMapColorCB(player, dominion.getName());
|
CuiTextInput.InputCallback setMapColorCB = new SetMapColor.setMapColorCB(player, dominion.getName());
|
||||||
CuiTextInput view = CuiTextInput.create(setMapColorCB).setText(dominion.getColor()).title("输入卫星地图地块颜色(16进制)");
|
CuiTextInput view = CuiTextInput.create(setMapColorCB).setText(dominion.getColor()).title(Translation.CUI_Input_SetMapColor.trans());
|
||||||
view.setSuggestCommand("/dominion set_map_color <颜色> [领地名称]");
|
view.setSuggestCommand(Translation.Commands_Dominion_SetMapColorUsage.trans());
|
||||||
view.open(player);
|
view.open(player);
|
||||||
}
|
}
|
||||||
|
|
@ -1,7 +1,8 @@
|
|||||||
package cn.lunadeer.dominion.tuis;
|
package cn.lunadeer.dominion.uis.tuis;
|
||||||
|
|
||||||
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.Translation;
|
||||||
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,7 +11,7 @@ import org.bukkit.entity.Player;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static cn.lunadeer.dominion.tuis.dominion.DominionList.BuildTreeLines;
|
import static cn.lunadeer.dominion.uis.tuis.dominion.DominionList.BuildTreeLines;
|
||||||
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.getPage;
|
import static cn.lunadeer.dominion.utils.TuiUtils.getPage;
|
||||||
import static cn.lunadeer.dominion.utils.TuiUtils.notOp;
|
import static cn.lunadeer.dominion.utils.TuiUtils.notOp;
|
||||||
@ -27,8 +28,8 @@ public class AllDominion {
|
|||||||
|
|
||||||
ListView view = ListView.create(10, "/dominion all_dominion");
|
ListView view = ListView.create(10, "/dominion all_dominion");
|
||||||
|
|
||||||
view.title("所有领地");
|
view.title(Translation.TUI_Navigation_AllDominion);
|
||||||
view.navigator(Line.create().append(Button.create("主菜单").setExecuteCommand("/dominion menu").build()).append("所有领地"));
|
view.navigator(Line.create().append(Button.create(Translation.TUI_Navigation_Menu).setExecuteCommand("/dominion menu").build()).append((Translation.TUI_Navigation_AllDominion)));
|
||||||
view.addLines(BuildTreeLines(allDominions, 0));
|
view.addLines(BuildTreeLines(allDominions, 0));
|
||||||
view.showOn(player, page);
|
view.showOn(player, page);
|
||||||
}
|
}
|
83
core/src/main/java/cn/lunadeer/dominion/uis/tuis/Menu.java
Normal file
83
core/src/main/java/cn/lunadeer/dominion/uis/tuis/Menu.java
Normal file
@ -0,0 +1,83 @@
|
|||||||
|
package cn.lunadeer.dominion.uis.tuis;
|
||||||
|
|
||||||
|
import cn.lunadeer.dominion.Dominion;
|
||||||
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.stui.ViewStyles;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
||||||
|
|
||||||
|
public class Menu {
|
||||||
|
public static void show(CommandSender sender, String[] args) {
|
||||||
|
Player player = playerOnly(sender);
|
||||||
|
if (player == null) return;
|
||||||
|
|
||||||
|
int page = 1;
|
||||||
|
if (args.length == 2) {
|
||||||
|
try {
|
||||||
|
page = Integer.parseInt(args[1]);
|
||||||
|
} catch (Exception ignored) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Line create = Line.create()
|
||||||
|
.append(Button.create(Translation.TUI_Menu_CreateDominionButton).setExecuteCommand("/dominion cui_create").build())
|
||||||
|
.append(Translation.TUI_Menu_CreateDominionDescription);
|
||||||
|
Line list = Line.create()
|
||||||
|
.append(Button.create(Translation.TUI_Menu_MyDominionButton).setExecuteCommand("/dominion list").build())
|
||||||
|
.append(Translation.TUI_Menu_MyDominionDescription);
|
||||||
|
Line title = Line.create()
|
||||||
|
.append(Button.create(Translation.TUI_Menu_TitleListButton).setExecuteCommand("/dominion title_list").build())
|
||||||
|
.append(Translation.TUI_Menu_TitleListDescription);
|
||||||
|
Line template = Line.create()
|
||||||
|
.append(Button.create(Translation.TUI_Menu_TemplateListButton).setExecuteCommand("/dominion template list").build())
|
||||||
|
.append(Translation.TUI_Menu_TemplateListDescription);
|
||||||
|
Line help = Line.create()
|
||||||
|
.append(Button.create(Translation.TUI_Menu_CommandHelpButton).setOpenURL(
|
||||||
|
String.format("https://dominion.lunadeer.cn/%s/command-list.html", Dominion.config.getLanguage())
|
||||||
|
).build())
|
||||||
|
.append(Translation.TUI_Menu_CommandHelpDescription);
|
||||||
|
Line link = Line.create()
|
||||||
|
.append(Button.create(Translation.TUI_Menu_DocumentButton).setOpenURL(
|
||||||
|
String.format("https://dominion.lunadeer.cn/%s", Dominion.config.getLanguage())
|
||||||
|
).build())
|
||||||
|
.append(Translation.TUI_Menu_DocumentDescription);
|
||||||
|
Line migrate = Line.create()
|
||||||
|
.append(Button.create(Translation.TUI_Menu_MigrateButton).setExecuteCommand("/dominion migrate_list").build())
|
||||||
|
.append(Translation.TUI_Menu_MigrateDescription);
|
||||||
|
Line all = Line.create()
|
||||||
|
.append(Button.create(Translation.TUI_Menu_AllDominionButton).setExecuteCommand("/dominion all_dominion").build())
|
||||||
|
.append(Translation.TUI_Menu_AllDominionDescription);
|
||||||
|
Line reload_cache = Line.create()
|
||||||
|
.append(Button.create(Translation.TUI_Menu_ReloadCacheButton).setExecuteCommand("/dominion reload_cache").build())
|
||||||
|
.append(Translation.TUI_Menu_ReloadCacheDescription);
|
||||||
|
Line reload_config = Line.create()
|
||||||
|
.append(Button.create(Translation.TUI_Menu_ReloadConfigButton).setExecuteCommand("/dominion reload_config").build())
|
||||||
|
.append(Translation.TUI_Menu_ReloadConfigDescription);
|
||||||
|
ListView view = ListView.create(10, "/dominion menu");
|
||||||
|
view.title(Translation.TUI_Menu_Title);
|
||||||
|
view.navigator(Line.create().append(Translation.TUI_Navigation_Menu));
|
||||||
|
view.add(create);
|
||||||
|
view.add(list);
|
||||||
|
if (Dominion.config.getGroupTitleEnable()) view.add(title);
|
||||||
|
view.add(template);
|
||||||
|
view.add(help);
|
||||||
|
view.add(link);
|
||||||
|
if (Dominion.config.getResidenceMigration()) {
|
||||||
|
view.add(migrate);
|
||||||
|
}
|
||||||
|
if (player.isOp()) {
|
||||||
|
view.add(Line.create().append(""));
|
||||||
|
view.add(Line.create().append(Component.text(Translation.TUI_Menu_OpOnlySection.trans(), ViewStyles.main_color)));
|
||||||
|
view.add(all);
|
||||||
|
view.add(reload_cache);
|
||||||
|
view.add(reload_config);
|
||||||
|
}
|
||||||
|
view.showOn(player, page);
|
||||||
|
}
|
||||||
|
}
|
@ -1,18 +1,14 @@
|
|||||||
package cn.lunadeer.dominion.tuis;
|
package cn.lunadeer.dominion.uis.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.managers.Translation;
|
||||||
import cn.lunadeer.dominion.utils.ResMigration;
|
import cn.lunadeer.dominion.utils.ResMigration;
|
||||||
import cn.lunadeer.dominion.utils.TuiUtils;
|
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;
|
||||||
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
|
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import net.kyori.adventure.text.TextComponent;
|
|
||||||
import net.kyori.adventure.text.format.Style;
|
|
||||||
import net.kyori.adventure.text.format.TextColor;
|
|
||||||
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;
|
||||||
|
|
||||||
@ -28,7 +24,7 @@ public class MigrateList {
|
|||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
|
|
||||||
if (!Dominion.config.getResidenceMigration()) {
|
if (!Dominion.config.getResidenceMigration()) {
|
||||||
Notification.error(sender, "Residence 迁移功能没有开启");
|
Notification.error(sender, Translation.Commands_Residence_MigrationDisabled);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,13 +32,13 @@ public class MigrateList {
|
|||||||
|
|
||||||
ListView view = ListView.create(10, "/dominion migrate_list");
|
ListView view = ListView.create(10, "/dominion migrate_list");
|
||||||
|
|
||||||
view.title("从 Residence 迁移数据");
|
view.title(Translation.TUI_Migrate_Title);
|
||||||
view.navigator(Line.create().append(Button.create("主菜单").setExecuteCommand("/dominion menu").build()).append("Res数据"));
|
view.navigator(Line.create().append(Button.create(Translation.TUI_Navigation_Menu).setExecuteCommand("/dominion menu").build()).append(Translation.TUI_Navigation_MigrateList));
|
||||||
|
|
||||||
List<ResMigration.ResidenceNode> res_data = Cache.instance.getResidenceData(player.getUniqueId());
|
List<ResMigration.ResidenceNode> res_data = Cache.instance.getResidenceData(player.getUniqueId());
|
||||||
|
|
||||||
if (res_data == null) {
|
if (res_data == null) {
|
||||||
view.add(Line.create().append("你没有可迁移的数据"));
|
view.add(Line.create().append(Translation.TUI_Migrate_NoData));
|
||||||
} else {
|
} else {
|
||||||
view.addLines(BuildTreeLines(res_data, 0, page));
|
view.addLines(BuildTreeLines(res_data, 0, page));
|
||||||
}
|
}
|
||||||
@ -53,19 +49,14 @@ public class MigrateList {
|
|||||||
public static List<Line> BuildTreeLines(List<ResMigration.ResidenceNode> dominionTree, Integer depth, int page) {
|
public static List<Line> BuildTreeLines(List<ResMigration.ResidenceNode> dominionTree, Integer depth, int page) {
|
||||||
List<Line> lines = new ArrayList<>();
|
List<Line> lines = new ArrayList<>();
|
||||||
StringBuilder prefix = new StringBuilder();
|
StringBuilder prefix = new StringBuilder();
|
||||||
for (int i = 0; i < depth; i++) {
|
prefix.append(" | ".repeat(Math.max(0, depth)));
|
||||||
prefix.append(" | ");
|
|
||||||
}
|
|
||||||
for (ResMigration.ResidenceNode node : dominionTree) {
|
for (ResMigration.ResidenceNode node : dominionTree) {
|
||||||
TextComponent migrate = Button.create("迁移").setExecuteCommand("/dominion migrate " + node.name + " " + page).build();
|
Button migrate = Button.create(Translation.TUI_Migrate_Button).setExecuteCommand("/dominion migrate " + node.name + " " + page);
|
||||||
Line line = Line.create();
|
Line line = Line.create();
|
||||||
if (depth == 0) {
|
if (depth == 0) {
|
||||||
line.append(migrate);
|
line.append(migrate.build());
|
||||||
} else {
|
} else {
|
||||||
line.append(Component.text("[迁移]",
|
line.append(migrate.setDisabled(Translation.TUI_Migrate_SubDominion).build());
|
||||||
Style.style(TextColor.color(190, 190, 190),
|
|
||||||
TextDecoration.STRIKETHROUGH))
|
|
||||||
.hoverEvent(Component.text("子领地无法手动迁移,会随父领地自动迁移")));
|
|
||||||
}
|
}
|
||||||
line.append(prefix + node.name);
|
line.append(prefix + node.name);
|
||||||
lines.add(line);
|
lines.add(line);
|
@ -1,8 +1,9 @@
|
|||||||
package cn.lunadeer.dominion.tuis;
|
package cn.lunadeer.dominion.uis.tuis;
|
||||||
|
|
||||||
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.GroupDTO;
|
import cn.lunadeer.dominion.dtos.GroupDTO;
|
||||||
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
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;
|
||||||
@ -26,8 +27,8 @@ public class TitleList {
|
|||||||
int page = getPage(args, 1);
|
int page = getPage(args, 1);
|
||||||
ListView view = ListView.create(10, "/dominion title_list");
|
ListView view = ListView.create(10, "/dominion title_list");
|
||||||
|
|
||||||
view.title("我可使用的权限组称号");
|
view.title(Translation.TUI_TitleList_Title);
|
||||||
view.navigator(Line.create().append(Button.create("主菜单").setExecuteCommand("/dominion menu").build()).append("权限组称号列表"));
|
view.navigator(Line.create().append(Button.create(Translation.TUI_Navigation_Menu).setExecuteCommand("/dominion menu").build()).append(Translation.TUI_Navigation_TitleList));
|
||||||
|
|
||||||
List<GroupDTO> groups = Cache.instance.getBelongGroupsOf(player.getUniqueId());
|
List<GroupDTO> groups = Cache.instance.getBelongGroupsOf(player.getUniqueId());
|
||||||
GroupDTO using = Cache.instance.getPlayerUsingGroupTitle(player.getUniqueId());
|
GroupDTO using = Cache.instance.getPlayerUsingGroupTitle(player.getUniqueId());
|
||||||
@ -43,11 +44,11 @@ public class TitleList {
|
|||||||
DominionDTO dominion = Cache.instance.getDominion(group.getDomID());
|
DominionDTO dominion = Cache.instance.getDominion(group.getDomID());
|
||||||
Line line = Line.create();
|
Line line = Line.create();
|
||||||
if (using != null && using.getId().equals(group.getId())) {
|
if (using != null && using.getId().equals(group.getId())) {
|
||||||
line.append(Button.createRed("卸下").setExecuteCommand("/dominion use_title -1").build());
|
line.append(Button.createRed(Translation.TUI_TitleList_RemoveButton).setExecuteCommand("/dominion use_title -1").build());
|
||||||
} else {
|
} else {
|
||||||
line.append(Button.createGreen("使用").setExecuteCommand("/dominion use_title " + group.getId()).build());
|
line.append(Button.createGreen(Translation.TUI_TitleList_ApplyButton).setExecuteCommand("/dominion use_title " + group.getId()).build());
|
||||||
}
|
}
|
||||||
line.append(group.getNameColoredComponent()).append("来自领地:" + dominion.getName());
|
line.append(group.getNameColoredComponent()).append(Translation.TUI_TitleList_FromDominion.trans() + dominion.getName());
|
||||||
view.add(line);
|
view.add(line);
|
||||||
}
|
}
|
||||||
|
|
@ -1,7 +1,8 @@
|
|||||||
package cn.lunadeer.dominion.tuis.dominion;
|
package cn.lunadeer.dominion.uis.tuis.dominion;
|
||||||
|
|
||||||
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.Translation;
|
||||||
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;
|
||||||
@ -25,16 +26,18 @@ public class DominionList {
|
|||||||
int page = getPage(args, 1);
|
int page = getPage(args, 1);
|
||||||
ListView view = ListView.create(10, "/dominion list");
|
ListView view = ListView.create(10, "/dominion list");
|
||||||
|
|
||||||
view.title("我的领地列表");
|
view.title(Translation.TUI_DominionList_Title);
|
||||||
view.navigator(Line.create().append(Button.create("主菜单").setExecuteCommand("/dominion menu").build()).append("我的领地"));
|
view.navigator(Line.create()
|
||||||
|
.append(Button.create(Translation.TUI_Navigation_Menu).setExecuteCommand("/dominion menu").build())
|
||||||
|
.append(Translation.TUI_Navigation_DominionList));
|
||||||
view.addLines(BuildTreeLines(DominionNode.BuildNodeTree(-1, DominionDTO.selectByOwner(player.getUniqueId())), 0));
|
view.addLines(BuildTreeLines(DominionNode.BuildNodeTree(-1, DominionDTO.selectByOwner(player.getUniqueId())), 0));
|
||||||
List<String> admin_dominions = playerAdminDominions(sender);
|
List<String> admin_dominions = playerAdminDominions(sender);
|
||||||
if (!admin_dominions.isEmpty()) {
|
if (!admin_dominions.isEmpty()) {
|
||||||
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(Translation.TUI_DominionList_AdminSection.trans(), ViewStyles.main_color)));
|
||||||
}
|
}
|
||||||
for (String dominion : admin_dominions) {
|
for (String dominion : admin_dominions) {
|
||||||
TextComponent manage = Button.createGreen("管理").setExecuteCommand("/dominion manage " + dominion).build();
|
TextComponent manage = Button.createGreen(Translation.TUI_ManageButton).setExecuteCommand("/dominion manage " + dominion).build();
|
||||||
view.add(Line.create().append(manage).append(dominion));
|
view.add(Line.create().append(manage).append(dominion));
|
||||||
}
|
}
|
||||||
view.showOn(player, page);
|
view.showOn(player, page);
|
||||||
@ -45,8 +48,8 @@ public class DominionList {
|
|||||||
StringBuilder prefix = new StringBuilder();
|
StringBuilder prefix = new StringBuilder();
|
||||||
prefix.append(" | ".repeat(Math.max(0, depth)));
|
prefix.append(" | ".repeat(Math.max(0, depth)));
|
||||||
for (DominionNode node : dominionTree) {
|
for (DominionNode node : dominionTree) {
|
||||||
TextComponent manage = Button.createGreen("管理").setExecuteCommand("/dominion manage " + node.getDominion().getName()).build();
|
TextComponent manage = Button.createGreen(Translation.TUI_ManageButton).setExecuteCommand("/dominion manage " + node.getDominion().getName()).build();
|
||||||
TextComponent delete = Button.createRed("删除").setExecuteCommand("/dominion delete " + node.getDominion().getName()).build();
|
TextComponent delete = Button.createRed(Translation.TUI_DeleteButton).setExecuteCommand("/dominion delete " + node.getDominion().getName()).build();
|
||||||
Line line = Line.create().append(delete).append(manage).append(prefix + node.getDominion().getName());
|
Line line = Line.create().append(delete).append(manage).append(prefix + node.getDominion().getName());
|
||||||
lines.add(line);
|
lines.add(line);
|
||||||
lines.addAll(BuildTreeLines(node.getChildren(), depth + 1));
|
lines.addAll(BuildTreeLines(node.getChildren(), depth + 1));
|
@ -0,0 +1,81 @@
|
|||||||
|
package cn.lunadeer.dominion.uis.tuis.dominion;
|
||||||
|
|
||||||
|
import cn.lunadeer.dominion.Dominion;
|
||||||
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.stui.ListView;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.stui.components.Button;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.stui.components.Line;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.format.TextColor;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
||||||
|
import static cn.lunadeer.dominion.utils.TuiUtils.*;
|
||||||
|
|
||||||
|
public class DominionManage {
|
||||||
|
public static void show(CommandSender sender, String[] args) {
|
||||||
|
Player player = playerOnly(sender);
|
||||||
|
if (player == null) return;
|
||||||
|
DominionDTO dominion = getDominionNameArg_1(player, args);
|
||||||
|
if (dominion == null) {
|
||||||
|
Notification.error(sender, Translation.TUI_DominionManage_NotInDominion);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (noAuthToManage(player, dominion)) return;
|
||||||
|
int page = getPage(args, 2);
|
||||||
|
Line size_info = Line.create()
|
||||||
|
.append(Button.create(Translation.TUI_DominionManage_InfoButton).setExecuteCommand("/dominion info " + dominion.getName()).build())
|
||||||
|
.append(Translation.TUI_DominionManage_InfoDescription);
|
||||||
|
Line env_info = Line.create()
|
||||||
|
.append(Button.create(Translation.TUI_DominionManage_EnvSettingButton).setExecuteCommand("/dominion env_setting " + dominion.getName()).build())
|
||||||
|
.append(Translation.TUI_DominionManage_EnvSettingDescription);
|
||||||
|
Line flag_info = Line.create()
|
||||||
|
.append(Button.create(Translation.TUI_DominionManage_GuestSettingButton).setExecuteCommand("/dominion guest_setting " + dominion.getName()).build())
|
||||||
|
.append(Translation.TUI_DominionManage_GuestSettingDescription);
|
||||||
|
Line privilege_list = Line.create()
|
||||||
|
.append(Button.create(Translation.TUI_DominionManage_MemberListButton).setExecuteCommand("/dominion member list " + dominion.getName()).build())
|
||||||
|
.append(Translation.TUI_DominionManage_MemberListDescription);
|
||||||
|
Line group_list = Line.create()
|
||||||
|
.append(Button.create(Translation.TUI_DominionManage_GroupListButton).setExecuteCommand("/dominion group list " + dominion.getName()).build())
|
||||||
|
.append(Translation.TUI_DominionManage_GroupListDescription);
|
||||||
|
Line set_tp = Line.create()
|
||||||
|
.append(Button.create(Translation.TUI_DominionManage_SetTpLocationButton).setExecuteCommand("/dominion set_tp_location " + dominion.getName()).build())
|
||||||
|
.append(Translation.TUI_DominionManage_SetTpLocationDescription);
|
||||||
|
Line rename = Line.create()
|
||||||
|
.append(Button.create(Translation.TUI_DominionManage_RenameButton).setExecuteCommand("/dominion cui_rename " + dominion.getName()).build())
|
||||||
|
.append(Translation.TUI_DominionManage_RenameDescription);
|
||||||
|
Line join_msg = Line.create()
|
||||||
|
.append(Button.create(Translation.TUI_DominionManage_EditJoinMessageButton).setExecuteCommand("/dominion cui_edit_join_message " + dominion.getName()).build())
|
||||||
|
.append(Translation.TUI_DominionManage_EditJoinMessageDescription);
|
||||||
|
Line leave_msg = Line.create()
|
||||||
|
.append(Button.create(Translation.TUI_DominionManage_EditLeaveMessageButton).setExecuteCommand("/dominion cui_edit_leave_message " + dominion.getName()).build())
|
||||||
|
.append(Translation.TUI_DominionManage_EditLeaveMessageDescription);
|
||||||
|
Line map_color = Line.create()
|
||||||
|
.append(Button.create(Translation.TUI_DominionManage_SetMapColorButton).setExecuteCommand("/dominion cui_set_map_color " + dominion.getName()).build())
|
||||||
|
.append(Component.text(Translation.TUI_DominionManage_SetMapColorDescription.trans())
|
||||||
|
.append(Component.text(dominion.getColor(),
|
||||||
|
TextColor.color(dominion.getColorR(), dominion.getColorG(), dominion.getColorB()))));
|
||||||
|
ListView view = ListView.create(10, "/dominion manage " + dominion.getName());
|
||||||
|
view.title(String.format(Translation.TUI_DominionManage_Title.trans(), dominion.getName()))
|
||||||
|
.navigator(Line.create()
|
||||||
|
.append(Button.create(Translation.TUI_Navigation_Menu).setExecuteCommand("/dominion menu").build())
|
||||||
|
.append(Button.create(Translation.TUI_Navigation_DominionList).setExecuteCommand("/dominion list").build())
|
||||||
|
.append(dominion.getName()))
|
||||||
|
.add(size_info)
|
||||||
|
.add(env_info)
|
||||||
|
.add(flag_info)
|
||||||
|
.add(privilege_list)
|
||||||
|
.add(group_list)
|
||||||
|
.add(set_tp)
|
||||||
|
.add(rename)
|
||||||
|
.add(join_msg)
|
||||||
|
.add(leave_msg);
|
||||||
|
if (Dominion.config.getBlueMap() || Dominion.config.getDynmap()) {
|
||||||
|
view.add(map_color);
|
||||||
|
}
|
||||||
|
view.showOn(player, page);
|
||||||
|
}
|
||||||
|
}
|
@ -1,7 +1,8 @@
|
|||||||
package cn.lunadeer.dominion.tuis.dominion.manage;
|
package cn.lunadeer.dominion.uis.tuis.dominion.manage;
|
||||||
|
|
||||||
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.managers.Translation;
|
||||||
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;
|
||||||
@ -17,25 +18,25 @@ public class EnvSetting {
|
|||||||
|
|
||||||
public static void show(CommandSender sender, String[] args) {
|
public static void show(CommandSender sender, String[] args) {
|
||||||
if (args.length < 2) {
|
if (args.length < 2) {
|
||||||
Notification.error(sender, "用法: /dominion env_setting <领地名称> [页码]");
|
Notification.error(sender, Translation.TUI_EnvSetting_Usage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player player = playerOnly(sender);
|
Player player = playerOnly(sender);
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
DominionDTO dominion = DominionDTO.select(args[1]);
|
DominionDTO dominion = DominionDTO.select(args[1]);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
Notification.error(sender, "领地 %s 不存在", args[1]);
|
Notification.error(sender, Translation.Messages_DominionNotExist, args[1]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int page = getPage(args, 2);
|
int page = getPage(args, 2);
|
||||||
ListView view = ListView.create(10, "/dominion env_setting " + dominion.getName());
|
ListView view = ListView.create(10, "/dominion env_setting " + dominion.getName());
|
||||||
view.title("领地 " + dominion.getName() + " 环境设置")
|
view.title(String.format(Translation.TUI_EnvSetting_Title.trans(), dominion.getName()))
|
||||||
.navigator(Line.create()
|
.navigator(Line.create()
|
||||||
.append(Button.create("主菜单").setExecuteCommand("/dominion menu").build())
|
.append(Button.create(Translation.TUI_Navigation_Menu).setExecuteCommand("/dominion menu").build())
|
||||||
.append(Button.create("我的领地").setExecuteCommand("/dominion list").build())
|
.append(Button.create(Translation.TUI_Navigation_DominionList).setExecuteCommand("/dominion list").build())
|
||||||
.append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build())
|
.append(Button.create(Translation.TUI_Navigation_Manage).setExecuteCommand("/dominion manage " + dominion.getName()).build())
|
||||||
.append("环境设置"));
|
.append(Translation.TUI_Navigation_EnvSetting));
|
||||||
for (Flag flag : Flag.getDominionOnlyFlagsEnabled()) {
|
for (Flag flag : Flag.getEnvironmentFlagsEnabled()) {
|
||||||
view.add(createOption(flag, dominion.getFlagValue(flag), dominion.getName(), page));
|
view.add(createOption(flag, dominion.getFlagValue(flag), dominion.getName(), page));
|
||||||
}
|
}
|
||||||
view.showOn(player, page);
|
view.showOn(player, page);
|
@ -1,7 +1,8 @@
|
|||||||
package cn.lunadeer.dominion.tuis.dominion.manage;
|
package cn.lunadeer.dominion.uis.tuis.dominion.manage;
|
||||||
|
|
||||||
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.managers.Translation;
|
||||||
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;
|
||||||
@ -17,24 +18,24 @@ public class GuestSetting {
|
|||||||
|
|
||||||
public static void show(CommandSender sender, String[] args) {
|
public static void show(CommandSender sender, String[] args) {
|
||||||
if (args.length < 2) {
|
if (args.length < 2) {
|
||||||
Notification.error(sender, "用法: /dominion guest_setting <领地名称> [页码]");
|
Notification.error(sender, Translation.TUI_GuestSetting_Usage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player player = playerOnly(sender);
|
Player player = playerOnly(sender);
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
DominionDTO dominion = DominionDTO.select(args[1]);
|
DominionDTO dominion = DominionDTO.select(args[1]);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
Notification.error(sender, "领地 %s 不存在", args[1]);
|
Notification.error(sender, Translation.Messages_DominionNotExist, args[1]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int page = getPage(args, 2);
|
int page = getPage(args, 2);
|
||||||
ListView view = ListView.create(10, "/dominion guest_setting " + dominion.getName());
|
ListView view = ListView.create(10, "/dominion guest_setting " + dominion.getName());
|
||||||
view.title("领地 " + dominion.getName() + " 访客权限")
|
view.title(String.format(Translation.TUI_GuestSetting_Title.trans(), dominion.getName()))
|
||||||
.navigator(Line.create()
|
.navigator(Line.create()
|
||||||
.append(Button.create("主菜单").setExecuteCommand("/dominion menu").build())
|
.append(Button.create(Translation.TUI_Navigation_Menu).setExecuteCommand("/dominion menu").build())
|
||||||
.append(Button.create("我的领地").setExecuteCommand("/dominion list").build())
|
.append(Button.create(Translation.TUI_Navigation_DominionList).setExecuteCommand("/dominion list").build())
|
||||||
.append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build())
|
.append(Button.create(Translation.TUI_Navigation_Manage).setExecuteCommand("/dominion manage " + dominion.getName()).build())
|
||||||
.append("访客权限"));
|
.append(Translation.TUI_Navigation_GuestSetting));
|
||||||
for (Flag flag : Flag.getPrivilegeFlagsEnabled()) {
|
for (Flag flag : Flag.getPrivilegeFlagsEnabled()) {
|
||||||
view.add(createOption(flag, dominion.getFlagValue(flag), dominion.getName(), page));
|
view.add(createOption(flag, dominion.getFlagValue(flag), dominion.getName(), page));
|
||||||
}
|
}
|
@ -0,0 +1,54 @@
|
|||||||
|
package cn.lunadeer.dominion.uis.tuis.dominion.manage;
|
||||||
|
|
||||||
|
import cn.lunadeer.dominion.controllers.PlayerController;
|
||||||
|
import cn.lunadeer.dominion.dtos.DominionDTO;
|
||||||
|
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||||
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
|
import cn.lunadeer.dominion.utils.Particle;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.stui.View;
|
||||||
|
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 static cn.lunadeer.dominion.utils.CommandUtils.playerOnly;
|
||||||
|
import static cn.lunadeer.dominion.utils.TuiUtils.getDominionNameArg_1;
|
||||||
|
|
||||||
|
public class SizeInfo {
|
||||||
|
public static void show(CommandSender sender, String[] args) {
|
||||||
|
Player player = playerOnly(sender);
|
||||||
|
if (player == null) return;
|
||||||
|
DominionDTO dominion = getDominionNameArg_1(player, args);
|
||||||
|
if (dominion == null) {
|
||||||
|
Notification.error(sender, Translation.TUI_SizeInfo_Usage);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
PlayerDTO owner = PlayerController.getPlayerDTO(dominion.getOwner());
|
||||||
|
Integer x1 = dominion.getX1();
|
||||||
|
Integer y1 = dominion.getY1();
|
||||||
|
Integer z1 = dominion.getZ1();
|
||||||
|
Integer x2 = dominion.getX2();
|
||||||
|
Integer y2 = dominion.getY2();
|
||||||
|
Integer z2 = dominion.getZ2();
|
||||||
|
View view = View.create();
|
||||||
|
view.title(String.format(Translation.TUI_SizeInfo_Title.trans(), dominion.getName()))
|
||||||
|
.subtitle(Translation.TUI_SizeInfo_Owner.trans() + owner.getLastKnownName())
|
||||||
|
.addLine(Line.create().append(Translation.TUI_SizeInfo_Size).append(dominion.getWidthX() + " x " + dominion.getHeight() + " x " + dominion.getWidthZ()))
|
||||||
|
.addLine(Line.create().append(Translation.TUI_SizeInfo_Center).append((x1 + (x2 - x1) / 2) + " " + (y1 + (y2 - y1) / 2) + " " + (z1 + (z2 - z1) / 2)))
|
||||||
|
.addLine(Line.create().append(Translation.TUI_SizeInfo_Vertical).append(String.valueOf(dominion.getHeight())))
|
||||||
|
.addLine(Line.create().append(Translation.TUI_SizeInfo_VertY).append(y1 + " ~ " + y2))
|
||||||
|
.addLine(Line.create().append(Translation.TUI_SizeInfo_Square).append(String.valueOf(dominion.getSquare())))
|
||||||
|
.addLine(Line.create().append(Translation.TUI_SizeInfo_Volume).append(String.valueOf(dominion.getVolume())))
|
||||||
|
.addLine(Line.create().append(Translation.TUI_SizeInfo_TpLocation).append(
|
||||||
|
dominion.getTpLocation() == null ?
|
||||||
|
Translation.TUI_SizeInfo_NoneTp.trans() :
|
||||||
|
dominion.getTpLocation().getX() + " " + dominion.getTpLocation().getY() + " " + dominion.getTpLocation().getZ()
|
||||||
|
))
|
||||||
|
.actionBar(Line.create()
|
||||||
|
.append(Button.create(Translation.TUI_Navigation_Manage).setExecuteCommand("/dominion manage " + dominion.getName()).build())
|
||||||
|
.append(Button.create(Translation.TUI_Navigation_GuestSetting).setExecuteCommand("/dominion guest_setting " + dominion.getName()).build()))
|
||||||
|
.showOn(player);
|
||||||
|
Particle.showBorder(player, dominion);
|
||||||
|
}
|
||||||
|
}
|
@ -1,9 +1,10 @@
|
|||||||
package cn.lunadeer.dominion.tuis.dominion.manage.group;
|
package cn.lunadeer.dominion.uis.tuis.dominion.manage.group;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
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.managers.Translation;
|
||||||
import cn.lunadeer.dominion.utils.TuiUtils;
|
import cn.lunadeer.dominion.utils.TuiUtils;
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||||
@ -31,45 +32,45 @@ public class GroupList {
|
|||||||
|
|
||||||
public static void show(CommandSender sender, String[] args) {
|
public static void show(CommandSender sender, String[] args) {
|
||||||
if (args.length < 3) {
|
if (args.length < 3) {
|
||||||
Notification.error(sender, "用法: /dominion group list <领地名称> [页码]");
|
Notification.error(sender, Translation.TUI_GroupList_Usage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player player = playerOnly(sender);
|
Player player = playerOnly(sender);
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
DominionDTO dominion = DominionDTO.select(args[2]);
|
DominionDTO dominion = DominionDTO.select(args[2]);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
Notification.error(sender, "领地 %s 不存在", args[2]);
|
Notification.error(sender, Translation.Messages_DominionNotExist, args[2]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (noAuthToManage(player, dominion)) return;
|
if (noAuthToManage(player, dominion)) return;
|
||||||
int page = TuiUtils.getPage(args, 3);
|
int page = TuiUtils.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(String.format(Translation.TUI_GroupList_Title.trans(), dominion.getName()));
|
||||||
view.navigator(
|
view.navigator(
|
||||||
Line.create()
|
Line.create()
|
||||||
.append(Button.create("主菜单").setExecuteCommand("/dominion menu").build())
|
.append(Button.create(Translation.TUI_Navigation_Menu).setExecuteCommand("/dominion menu").build())
|
||||||
.append(Button.create("我的领地").setExecuteCommand("/dominion list").build())
|
.append(Button.create(Translation.TUI_Navigation_DominionList).setExecuteCommand("/dominion list").build())
|
||||||
.append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build())
|
.append(Button.create(Translation.TUI_Navigation_Manage).setExecuteCommand("/dominion manage " + dominion.getName()).build())
|
||||||
.append("权限组列表")
|
.append(Translation.TUI_Navigation_GroupList)
|
||||||
);
|
);
|
||||||
|
|
||||||
Button create_btn = Button.createGreen("创建权限组")
|
Button create_btn = Button.createGreen(Translation.TUI_GroupList_CreateButton)
|
||||||
.setHoverText("创建一个新的权限组")
|
.setHoverText(Translation.TUI_GroupList_CreateDescription)
|
||||||
.setExecuteCommand("/dominion cui_create_group " + dominion.getName());
|
.setExecuteCommand("/dominion cui_create_group " + dominion.getName());
|
||||||
view.add(new Line().append(create_btn.build()));
|
view.add(new Line().append(create_btn.build()));
|
||||||
|
|
||||||
for (GroupDTO group : groups) {
|
for (GroupDTO group : groups) {
|
||||||
Line line = new Line();
|
Line line = new Line();
|
||||||
Button del = Button.createRed("删除")
|
Button del = Button.createRed(Translation.TUI_DeleteButton)
|
||||||
.setHoverText("删除权限组 " + group.getName())
|
.setHoverText(String.format(Translation.TUI_GroupList_DeleteDescription.trans(), group.getNamePlain()))
|
||||||
.setExecuteCommand("/dominion group delete " + dominion.getName() + " " + group.getName());
|
.setExecuteCommand("/dominion group delete " + dominion.getName() + " " + group.getNamePlain());
|
||||||
Button edit = Button.create("编辑")
|
Button edit = Button.create(Translation.TUI_EditButton)
|
||||||
.setHoverText("编辑权限组 " + group.getName())
|
.setHoverText(String.format(Translation.TUI_GroupList_EditDescription.trans(), group.getNamePlain()))
|
||||||
.setExecuteCommand("/dominion group setting " + dominion.getName() + " " + group.getName());
|
.setExecuteCommand("/dominion group setting " + dominion.getName() + " " + group.getNamePlain());
|
||||||
Button add = Button.createGreen("+")
|
Button add = Button.createGreen("+")
|
||||||
.setHoverText("添加成员到权限组 " + group.getName())
|
.setHoverText(String.format(Translation.TUI_GroupList_AddMemberDescription.trans(), group.getNamePlain()))
|
||||||
.setExecuteCommand("/dominion group select_member " + dominion.getName() + " " + group.getName() + " " + page);
|
.setExecuteCommand("/dominion group select_member " + dominion.getName() + " " + group.getNamePlain() + " " + page);
|
||||||
line.append(del.build()).append(edit.build()).append(group.getNameColoredComponent()).append(add.build());
|
line.append(del.build()).append(edit.build()).append(group.getNameColoredComponent()).append(add.build());
|
||||||
view.add(line);
|
view.add(line);
|
||||||
List<MemberDTO> players = MemberDTO.selectByGroupId(group.getId());
|
List<MemberDTO> players = MemberDTO.selectByGroupId(group.getId());
|
||||||
@ -78,8 +79,10 @@ public class GroupList {
|
|||||||
PlayerDTO p = PlayerDTO.select(playerPrivilege.getPlayerUUID());
|
PlayerDTO p = PlayerDTO.select(playerPrivilege.getPlayerUUID());
|
||||||
if (p == null) continue;
|
if (p == null) continue;
|
||||||
Button remove = Button.createRed("-")
|
Button remove = Button.createRed("-")
|
||||||
.setHoverText("把 " + p.getLastKnownName() + " 移出权限组 " + group.getName())
|
.setHoverText(
|
||||||
.setExecuteCommand("/dominion group remove_member " + dominion.getName() + " " + group.getName() + " " + p.getLastKnownName() + " " + page);
|
String.format(Translation.TUI_GroupList_RemoveMemberDescription.trans(), p.getLastKnownName(), group.getNamePlain())
|
||||||
|
)
|
||||||
|
.setExecuteCommand("/dominion group remove_member " + dominion.getName() + " " + group.getNamePlain() + " " + p.getLastKnownName() + " " + page);
|
||||||
Line playerLine = new Line().setDivider("");
|
Line playerLine = new Line().setDivider("");
|
||||||
playerLine.append(Component.text(" "));
|
playerLine.append(Component.text(" "));
|
||||||
playerLine.append(remove.build()).append(" | " + p.getLastKnownName());
|
playerLine.append(remove.build()).append(" | " + p.getLastKnownName());
|
@ -1,8 +1,9 @@
|
|||||||
package cn.lunadeer.dominion.tuis.dominion.manage.group;
|
package cn.lunadeer.dominion.uis.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.managers.Translation;
|
||||||
import cn.lunadeer.dominion.utils.TuiUtils;
|
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;
|
||||||
@ -26,54 +27,62 @@ public class GroupSetting {
|
|||||||
|
|
||||||
public static void show(CommandSender sender, String[] args) {
|
public static void show(CommandSender sender, String[] args) {
|
||||||
if (args.length < 4) {
|
if (args.length < 4) {
|
||||||
Notification.error(sender, "用法: /dominion group setting <领地名称> <权限组名称> [页码]");
|
Notification.error(sender, Translation.TUI_GroupSetting_Usage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player player = playerOnly(sender);
|
Player player = playerOnly(sender);
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
DominionDTO dominion = DominionDTO.select(args[2]);
|
DominionDTO dominion = DominionDTO.select(args[2]);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
Notification.error(sender, "领地 %s 不存在", args[2]);
|
Notification.error(sender, Translation.Messages_DominionNotExist, args[2]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (noAuthToManage(player, dominion)) return;
|
if (noAuthToManage(player, dominion)) return;
|
||||||
int page = TuiUtils.getPage(args, 4);
|
int page = TuiUtils.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, Translation.Messages_GroupNotExist, args[2], args[3]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ListView view = ListView.create(10, "/dominion group setting " + dominion.getName() + " " + group.getName());
|
ListView view = ListView.create(10, "/dominion group setting " + dominion.getName() + " " + group.getNamePlain());
|
||||||
view.title(Component.text("权限组 ").append(group.getNameColoredComponent()).append(Component.text(" 管理")));
|
view.title(Component.text(Translation.TUI_GroupSetting_TitleL.trans())
|
||||||
|
.append(group.getNameColoredComponent())
|
||||||
|
.append(Component.text(Translation.TUI_GroupSetting_TitleR.trans())));
|
||||||
view.navigator(
|
view.navigator(
|
||||||
Line.create()
|
Line.create()
|
||||||
.append(Button.create("主菜单").setExecuteCommand("/dominion menu").build())
|
.append(Button.create(Translation.TUI_Navigation_Menu).setExecuteCommand("/dominion menu").build())
|
||||||
.append(Button.create("我的领地").setExecuteCommand("/dominion list").build())
|
.append(Button.create(Translation.TUI_Navigation_DominionList).setExecuteCommand("/dominion list").build())
|
||||||
.append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build())
|
.append(Button.create(Translation.TUI_Navigation_Manage).setExecuteCommand("/dominion manage " + dominion.getName()).build())
|
||||||
.append(Button.create("权限组列表").setExecuteCommand("/dominion group list " + dominion.getName()).build())
|
.append(Button.create(Translation.TUI_Navigation_GroupList).setExecuteCommand("/dominion group list " + dominion.getName()).build())
|
||||||
.append("权限组管理")
|
.append(Translation.TUI_Navigation_GroupSetting)
|
||||||
);
|
);
|
||||||
Button rename_btn = Button.create("重命名此权限组")
|
Button rename_btn = Button.create(Translation.TUI_GroupSetting_RenameButton)
|
||||||
.setHoverText("重命名权限组 " + group.getName())
|
.setHoverText(String.format(Translation.TUI_GroupSetting_RenameDescription.trans(), group.getNamePlain()))
|
||||||
.setExecuteCommand("/dominion cui_rename_group " + dominion.getName() + " " + group.getName());
|
.setExecuteCommand("/dominion cui_rename_group " + dominion.getName() + " " + group.getNamePlain());
|
||||||
view.add(Line.create().append(rename_btn.build()));
|
view.add(Line.create().append(rename_btn.build()));
|
||||||
|
|
||||||
if (group.getAdmin()) {
|
if (group.getAdmin()) {
|
||||||
view.add(Line.create()
|
view.add(Line.create()
|
||||||
.append(Button.createGreen("☑")
|
.append(Button.createGreen("☑")
|
||||||
.setExecuteCommand(parseCommand(dominion.getName(), group.getName(), "admin", false, page))
|
.setExecuteCommand(parseCommand(dominion.getName(), group.getNamePlain(), "admin", false, page))
|
||||||
.build())
|
.build())
|
||||||
.append("管理员"));
|
.append(
|
||||||
view.add(createOption(Flag.GLOW, group.getFlagValue(Flag.GLOW), dominion.getName(), group.getName(), page));
|
Component.text(Translation.Flags_admin_DisplayName.trans())
|
||||||
|
.hoverEvent(Component.text(Translation.Flags_admin_Description.trans()))
|
||||||
|
));
|
||||||
|
view.add(createOption(Flag.GLOW, group.getFlagValue(Flag.GLOW), dominion.getName(), group.getNamePlain(), page));
|
||||||
} else {
|
} else {
|
||||||
view.add(Line.create()
|
view.add(Line.create()
|
||||||
.append(Button.createRed("☐")
|
.append(Button.createRed("☐")
|
||||||
.setExecuteCommand(parseCommand(dominion.getName(), group.getName(), "admin", true, page))
|
.setExecuteCommand(parseCommand(dominion.getName(), group.getNamePlain(), "admin", true, page))
|
||||||
.build())
|
.build())
|
||||||
.append("管理员"));
|
.append(
|
||||||
|
Component.text(Translation.Flags_admin_DisplayName.trans())
|
||||||
|
.hoverEvent(Component.text(Translation.Flags_admin_Description.trans()))
|
||||||
|
));
|
||||||
for (Flag flag : Flag.getPrivilegeFlagsEnabled()) {
|
for (Flag flag : Flag.getPrivilegeFlagsEnabled()) {
|
||||||
view.add(createOption(flag, group.getFlagValue(flag), dominion.getName(), group.getName(), page));
|
view.add(createOption(flag, group.getFlagValue(flag), dominion.getName(), group.getNamePlain(), page));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
view.showOn(player, page);
|
view.showOn(player, page);
|
@ -1,9 +1,10 @@
|
|||||||
package cn.lunadeer.dominion.tuis.dominion.manage.group;
|
package cn.lunadeer.dominion.uis.tuis.dominion.manage.group;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
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.managers.Translation;
|
||||||
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;
|
||||||
@ -20,28 +21,28 @@ import static cn.lunadeer.dominion.utils.TuiUtils.noAuthToManage;
|
|||||||
public class SelectMember {
|
public class SelectMember {
|
||||||
public static void show(CommandSender sender, String[] args) {
|
public static void show(CommandSender sender, String[] args) {
|
||||||
if (args.length < 4) {
|
if (args.length < 4) {
|
||||||
Notification.error(sender, "用法: /dominion group select_member <领地名称> <权限组名称> [回显页码] [页码]");
|
Notification.error(sender, Translation.TUI_SelectMember_Usage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player player = playerOnly(sender);
|
Player player = playerOnly(sender);
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
DominionDTO dominion = DominionDTO.select(args[2]);
|
DominionDTO dominion = DominionDTO.select(args[2]);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
Notification.error(sender, "领地 %s 不存在", args[2]);
|
Notification.error(sender, Translation.Messages_DominionNotExist, args[2]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (noAuthToManage(player, dominion)) return;
|
if (noAuthToManage(player, dominion)) return;
|
||||||
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, "权限组不存在");
|
Notification.error(sender, Translation.Messages_GroupNotExist, args[2], args[3]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int backPage = getPage(args, 4);
|
int backPage = getPage(args, 4);
|
||||||
int page = getPage(args, 5);
|
int page = getPage(args, 5);
|
||||||
ListView view = ListView.create(10, "/dominion group select_member " + dominion.getName() + " " + group.getName() + " " + backPage);
|
ListView view = ListView.create(10, "/dominion group select_member " + dominion.getName() + " " + group.getNamePlain() + " " + backPage);
|
||||||
view.title("选择成员");
|
view.title(Translation.TUI_SelectMember_Title);
|
||||||
Line sub = Line.create().append("选择成员添加到权限组 " + group.getName())
|
Line sub = Line.create().append(String.format(Translation.TUI_SelectMember_Description.trans(), group.getNamePlain()))
|
||||||
.append(Button.create("返回").setExecuteCommand("/dominion group list " + dominion.getName() + " " + backPage).build());
|
.append(Button.create(Translation.TUI_BackButton).setExecuteCommand("/dominion group list " + dominion.getName() + " " + backPage).build());
|
||||||
view.subtitle(sub);
|
view.subtitle(sub);
|
||||||
List<MemberDTO> members = MemberDTO.selectByDomGroupId(dominion.getId(), -1);
|
List<MemberDTO> members = MemberDTO.selectByDomGroupId(dominion.getId(), -1);
|
||||||
for (MemberDTO member : members) {
|
for (MemberDTO member : members) {
|
||||||
@ -49,7 +50,7 @@ public class SelectMember {
|
|||||||
if (p == null) continue;
|
if (p == null) continue;
|
||||||
view.add(Line.create()
|
view.add(Line.create()
|
||||||
.append(Button.create(p.getLastKnownName())
|
.append(Button.create(p.getLastKnownName())
|
||||||
.setExecuteCommand("/dominion group add_member " + dominion.getName() + " " + group.getName() + " " + p.getLastKnownName() + " " + backPage)
|
.setExecuteCommand("/dominion group add_member " + dominion.getName() + " " + group.getNamePlain() + " " + p.getLastKnownName() + " " + backPage)
|
||||||
.build()));
|
.build()));
|
||||||
}
|
}
|
||||||
view.showOn(player, page);
|
view.showOn(player, page);
|
@ -1,7 +1,8 @@
|
|||||||
package cn.lunadeer.dominion.tuis.dominion.manage.member;
|
package cn.lunadeer.dominion.uis.tuis.dominion.manage.member;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Cache;
|
import cn.lunadeer.dominion.Cache;
|
||||||
import cn.lunadeer.dominion.dtos.*;
|
import cn.lunadeer.dominion.dtos.*;
|
||||||
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
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;
|
||||||
@ -32,29 +33,29 @@ public class MemberList {
|
|||||||
|
|
||||||
public static void show(CommandSender sender, String[] args) {
|
public static void show(CommandSender sender, String[] args) {
|
||||||
if (args.length < 3) {
|
if (args.length < 3) {
|
||||||
Notification.error(sender, "用法: /dominion member list <领地名称> [页码]");
|
Notification.error(sender, Translation.TUI_MemberList_Usage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player player = playerOnly(sender);
|
Player player = playerOnly(sender);
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
DominionDTO dominion = DominionDTO.select(args[2]);
|
DominionDTO dominion = DominionDTO.select(args[2]);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
Notification.error(sender, "领地 %s 不存在", args[2]);
|
Notification.error(sender, Translation.Messages_DominionNotExist, args[2]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int page = getPage(args, 3);
|
int page = getPage(args, 3);
|
||||||
ListView view = ListView.create(10, "/dominion member list " + dominion.getName());
|
ListView view = ListView.create(10, "/dominion member list " + dominion.getName());
|
||||||
if (noAuthToManage(player, dominion)) return;
|
if (noAuthToManage(player, dominion)) return;
|
||||||
List<MemberDTO> privileges = MemberDTO.select(dominion.getId());
|
List<MemberDTO> privileges = MemberDTO.select(dominion.getId());
|
||||||
view.title("领地 " + dominion.getName() + " 成员列表");
|
view.title(String.format(Translation.TUI_MemberList_Title.trans(), dominion.getName()));
|
||||||
view.navigator(
|
view.navigator(
|
||||||
Line.create()
|
Line.create()
|
||||||
.append(Button.create("主菜单").setExecuteCommand("/dominion menu").build())
|
.append(Button.create(Translation.TUI_Navigation_Menu).setExecuteCommand("/dominion menu").build())
|
||||||
.append(Button.create("我的领地").setExecuteCommand("/dominion list").build())
|
.append(Button.create(Translation.TUI_Navigation_DominionList).setExecuteCommand("/dominion list").build())
|
||||||
.append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build())
|
.append(Button.create(Translation.TUI_Navigation_Manage).setExecuteCommand("/dominion manage " + dominion.getName()).build())
|
||||||
.append("成员列表")
|
.append(Translation.TUI_Navigation_MemberList)
|
||||||
);
|
);
|
||||||
view.add(Line.create().append(Button.create("添加成员")
|
view.add(Line.create().append(Button.create(Translation.TUI_MemberList_AddButton)
|
||||||
.setExecuteCommand(CommandParser("/dominion member select_player %s", dominion.getName())).build()));
|
.setExecuteCommand(CommandParser("/dominion member select_player %s", dominion.getName())).build()));
|
||||||
for (MemberDTO privilege : privileges) {
|
for (MemberDTO privilege : privileges) {
|
||||||
PlayerDTO p_player = PlayerDTO.select(privilege.getPlayerUUID());
|
PlayerDTO p_player = PlayerDTO.select(privilege.getPlayerUUID());
|
||||||
@ -74,11 +75,11 @@ public class MemberList {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Button prev = Button.createGreen("权限")
|
Button prev = Button.createGreen(Translation.TUI_MemberList_FlagButton)
|
||||||
.setHoverText("配置成员权限")
|
.setHoverText(Translation.TUI_MemberList_FlagDescription)
|
||||||
.setExecuteCommand(CommandParser("/dominion member setting %s %s", dominion.getName(), p_player.getLastKnownName()));
|
.setExecuteCommand(CommandParser("/dominion member setting %s %s", dominion.getName(), p_player.getLastKnownName()));
|
||||||
Button remove = Button.createRed("移除")
|
Button remove = Button.createRed(Translation.TUI_MemberList_RemoveButton)
|
||||||
.setHoverText("将此成员移出(变为访客)")
|
.setHoverText(Translation.TUI_MemberList_RemoveDescription)
|
||||||
.setExecuteCommand(CommandParser("/dominion member remove %s %s", dominion.getName(), p_player.getLastKnownName()));
|
.setExecuteCommand(CommandParser("/dominion member remove %s %s", dominion.getName(), p_player.getLastKnownName()));
|
||||||
|
|
||||||
if (!player.getUniqueId().equals(dominion.getOwner())) {
|
if (!player.getUniqueId().equals(dominion.getOwner())) {
|
||||||
@ -93,12 +94,12 @@ public class MemberList {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (disable) {
|
if (disable) {
|
||||||
prev.setDisabled("你不是领地主人,无法编辑管理员权限");
|
prev.setDisabled(Translation.TUI_MemberList_NoPermissionSet);
|
||||||
remove.setDisabled("你不是领地主人,无法移除管理员");
|
remove.setDisabled(Translation.TUI_MemberList_NoPermissionRemove);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (group != null) {
|
if (group != null) {
|
||||||
prev.setDisabled(String.format("此成员属于权限组 %s 无法单独编辑权限", group.getName()));
|
prev.setDisabled(String.format(Translation.TUI_MemberList_BelongToGroup.trans(), group.getNamePlain()));
|
||||||
}
|
}
|
||||||
line.append(remove.build());
|
line.append(remove.build());
|
||||||
line.append(prev.build());
|
line.append(prev.build());
|
||||||
@ -109,11 +110,11 @@ public class MemberList {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static final TextComponent adminTag = Component.text("[A]", Style.style(TextColor.color(97, 97, 210)))
|
private static final TextComponent adminTag = Component.text("[A]", Style.style(TextColor.color(97, 97, 210)))
|
||||||
.hoverEvent(Component.text("这是一个管理员"));
|
.hoverEvent(Component.text(Translation.TUI_MemberList_AdminTag.trans()));
|
||||||
private static final TextComponent normalTag = Component.text("[N]", Style.style(TextColor.color(255, 255, 255)))
|
private static final TextComponent normalTag = Component.text("[N]", Style.style(TextColor.color(255, 255, 255)))
|
||||||
.hoverEvent(Component.text("这是一个普通成员"));
|
.hoverEvent(Component.text(Translation.TUI_MemberList_NormalTag.trans()));
|
||||||
private static final TextComponent banTag = Component.text("[B]", Style.style(TextColor.color(255, 67, 0)))
|
private static final TextComponent banTag = Component.text("[B]", Style.style(TextColor.color(255, 67, 0)))
|
||||||
.hoverEvent(Component.text("这是一个黑名单成员"));
|
.hoverEvent(Component.text(Translation.TUI_MemberList_BlacklistTag.trans()));
|
||||||
private static final TextComponent groupTag = Component.text("[G]", Style.style(TextColor.color(0, 185, 153)))
|
private static final TextComponent groupTag = Component.text("[G]", Style.style(TextColor.color(0, 185, 153)))
|
||||||
.hoverEvent(Component.text("这个成员在一个权限组里"));
|
.hoverEvent(Component.text(Translation.TUI_MemberList_GroupTag.trans()));
|
||||||
}
|
}
|
@ -1,9 +1,10 @@
|
|||||||
package cn.lunadeer.dominion.tuis.dominion.manage.member;
|
package cn.lunadeer.dominion.uis.tuis.dominion.manage.member;
|
||||||
|
|
||||||
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.MemberDTO;
|
import cn.lunadeer.dominion.dtos.MemberDTO;
|
||||||
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||||
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
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;
|
||||||
@ -27,14 +28,14 @@ public class MemberSetting {
|
|||||||
|
|
||||||
public static void show(CommandSender sender, String[] args) {
|
public static void show(CommandSender sender, String[] args) {
|
||||||
if (args.length < 3) {
|
if (args.length < 3) {
|
||||||
Notification.error(sender, "用法: /dominion member setting <领地名称> <玩家名称> [页码]");
|
Notification.error(sender, Translation.TUI_MemberSetting_Usage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player player = playerOnly(sender);
|
Player player = playerOnly(sender);
|
||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
DominionDTO dominion = DominionDTO.select(args[2]);
|
DominionDTO dominion = DominionDTO.select(args[2]);
|
||||||
if (dominion == null) {
|
if (dominion == null) {
|
||||||
Notification.error(sender, "领地 %s 不存在", args[2]);
|
Notification.error(sender, Translation.Messages_DominionNotExist, args[2]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (noAuthToManage(player, dominion)) return;
|
if (noAuthToManage(player, dominion)) return;
|
||||||
@ -43,39 +44,45 @@ public class MemberSetting {
|
|||||||
ListView view = ListView.create(10, "/dominion member setting " + dominion.getName() + " " + playerName);
|
ListView view = ListView.create(10, "/dominion member setting " + dominion.getName() + " " + playerName);
|
||||||
PlayerDTO playerDTO = PlayerDTO.select(playerName);
|
PlayerDTO playerDTO = PlayerDTO.select(playerName);
|
||||||
if (playerDTO == null) {
|
if (playerDTO == null) {
|
||||||
Notification.error(sender, "玩家 %s 不存在", playerName);
|
Notification.error(sender, Translation.Messages_PlayerNotExist, playerName);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
MemberDTO privilege = MemberDTO.select(playerDTO.getUuid(), dominion.getId());
|
MemberDTO privilege = MemberDTO.select(playerDTO.getUuid(), dominion.getId());
|
||||||
if (privilege == null) {
|
if (privilege == null) {
|
||||||
Notification.warn(sender, "玩家 %s 不是领地 %s 的成员", playerName, dominion.getName());
|
Notification.warn(sender, Translation.Messages_PlayerNotMember, playerName, dominion.getName());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
view.title("玩家 " + playerName + " 在领地 " + dominion.getName() + " 的权限设置");
|
view.title(String.format(Translation.TUI_MemberSetting_Title.trans(), playerName, dominion.getName()));
|
||||||
view.navigator(
|
view.navigator(
|
||||||
Line.create()
|
Line.create()
|
||||||
.append(Button.create("主菜单").setExecuteCommand("/dominion menu").build())
|
.append(Button.create(Translation.TUI_Navigation_Menu).setExecuteCommand("/dominion menu").build())
|
||||||
.append(Button.create("我的领地").setExecuteCommand("/dominion list").build())
|
.append(Button.create(Translation.TUI_Navigation_DominionList).setExecuteCommand("/dominion list").build())
|
||||||
.append(Button.create("管理界面").setExecuteCommand("/dominion manage " + dominion.getName()).build())
|
.append(Button.create(Translation.TUI_Navigation_Manage).setExecuteCommand("/dominion manage " + dominion.getName()).build())
|
||||||
.append(Button.create("成员列表").setExecuteCommand("/dominion member list " + dominion.getName()).build())
|
.append(Button.create(Translation.TUI_Navigation_MemberList).setExecuteCommand("/dominion member list " + dominion.getName()).build())
|
||||||
.append("成员权限")
|
.append(Translation.TUI_Navigation_MemberSetting)
|
||||||
);
|
);
|
||||||
view.add(Line.create().append(Button.createGreen("套用模板")
|
view.add(Line.create().append(Button.createGreen(Translation.TUI_MemberSetting_ApplyTemplateButton)
|
||||||
.setHoverText("选择一个权限模板套用")
|
.setHoverText(Translation.TUI_MemberSetting_ApplyTemplateDescription)
|
||||||
.setExecuteCommand("/dominion member select_template " + dominion.getName() + " " + playerName).build()));
|
.setExecuteCommand("/dominion member select_template " + dominion.getName() + " " + playerName).build()));
|
||||||
if (privilege.getAdmin()) {
|
if (privilege.getAdmin()) {
|
||||||
view.add(Line.create()
|
view.add(Line.create()
|
||||||
.append(Button.createGreen("☑").setExecuteCommand(
|
.append(Button.createGreen("☑").setExecuteCommand(
|
||||||
parseCommand(dominion.getName(), playerName, "admin", false, page)
|
parseCommand(dominion.getName(), playerName, "admin", false, page)
|
||||||
).build())
|
).build())
|
||||||
.append("管理员"));
|
.append(
|
||||||
|
Component.text(Translation.Flags_admin_DisplayName.trans())
|
||||||
|
.hoverEvent(Component.text(Translation.Flags_admin_Description.trans()))
|
||||||
|
));
|
||||||
view.add(createOption(Flag.GLOW, privilege.getFlagValue(Flag.GLOW), playerName, dominion.getName(), page));
|
view.add(createOption(Flag.GLOW, privilege.getFlagValue(Flag.GLOW), playerName, dominion.getName(), page));
|
||||||
} else {
|
} else {
|
||||||
view.add(Line.create()
|
view.add(Line.create()
|
||||||
.append(Button.createRed("☐").setExecuteCommand(
|
.append(Button.createRed("☐").setExecuteCommand(
|
||||||
parseCommand(dominion.getName(), playerName, "admin", true, page)
|
parseCommand(dominion.getName(), playerName, "admin", true, page)
|
||||||
).build())
|
).build())
|
||||||
.append("管理员"));
|
.append(
|
||||||
|
Component.text(Translation.Flags_admin_DisplayName.trans())
|
||||||
|
.hoverEvent(Component.text(Translation.Flags_admin_Description.trans()))
|
||||||
|
));
|
||||||
for (Flag flag : Flag.getPrivilegeFlagsEnabled()) {
|
for (Flag flag : Flag.getPrivilegeFlagsEnabled()) {
|
||||||
view.add(createOption(flag, privilege.getFlagValue(flag), playerName, dominion.getName(), page));
|
view.add(createOption(flag, privilege.getFlagValue(flag), playerName, dominion.getName(), page));
|
||||||
}
|
}
|
@ -1,7 +1,8 @@
|
|||||||
package cn.lunadeer.dominion.tuis.dominion.manage.member;
|
package cn.lunadeer.dominion.uis.tuis.dominion.manage.member;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.controllers.PlayerController;
|
import cn.lunadeer.dominion.controllers.PlayerController;
|
||||||
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||||
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
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;
|
||||||
@ -22,7 +23,7 @@ public class SelectPlayer {
|
|||||||
|
|
||||||
public static void show(CommandSender sender, String[] args) {
|
public static void show(CommandSender sender, String[] args) {
|
||||||
if (args.length < 3) {
|
if (args.length < 3) {
|
||||||
Notification.error(sender, "用法: /dominion member select_player <领地名称> [页码]");
|
Notification.error(sender, Translation.TUI_SelectPlayer_Usage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Player player = playerOnly(sender);
|
Player player = playerOnly(sender);
|
||||||
@ -31,10 +32,10 @@ public class SelectPlayer {
|
|||||||
String dominion_name = args[2];
|
String dominion_name = args[2];
|
||||||
ListView view = ListView.create(10, "/dominion member select_player " + dominion_name);
|
ListView view = ListView.create(10, "/dominion member select_player " + dominion_name);
|
||||||
Line sub = Line.create()
|
Line sub = Line.create()
|
||||||
.append("只能选择已经登录过的玩家")
|
.append(Translation.TUI_SelectPlayer_Description)
|
||||||
.append(Button.create("搜索").setExecuteCommand("/dominion cui_member_add " + dominion_name).build())
|
.append(Button.create(Translation.TUI_SearchButton).setExecuteCommand("/dominion cui_member_add " + dominion_name).build())
|
||||||
.append(Button.create("返回").setExecuteCommand("/dominion member list " + dominion_name).build());
|
.append(Button.create(Translation.TUI_BackButton).setExecuteCommand("/dominion member list " + dominion_name).build());
|
||||||
view.title("选择玩家添加为成员").subtitle(sub);
|
view.title(Translation.TUI_SelectPlayer_Title).subtitle(sub);
|
||||||
List<PlayerDTO> players = PlayerController.allPlayers();
|
List<PlayerDTO> players = PlayerController.allPlayers();
|
||||||
for (PlayerDTO p : players) {
|
for (PlayerDTO p : players) {
|
||||||
if (p.getUuid() == player.getUniqueId()) {
|
if (p.getUuid() == player.getUniqueId()) {
|
@ -1,6 +1,7 @@
|
|||||||
package cn.lunadeer.dominion.tuis.dominion.manage.member;
|
package cn.lunadeer.dominion.uis.tuis.dominion.manage.member;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
|
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
|
||||||
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
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;
|
||||||
@ -20,7 +21,7 @@ public class SelectTemplate {
|
|||||||
public static void show(CommandSender sender, String[] args) {
|
public static void show(CommandSender sender, String[] args) {
|
||||||
if (args.length < 4) {
|
if (args.length < 4) {
|
||||||
// /dominion member select_template <领地名称> <玩家名称> [页码]
|
// /dominion member select_template <领地名称> <玩家名称> [页码]
|
||||||
Notification.error(sender, "用法: /dominion member select_template <领地名称> <玩家名称> [页码]");
|
Notification.error(sender, Translation.TUI_SelectTemplate_Usage);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -36,16 +37,16 @@ public class SelectTemplate {
|
|||||||
List<PrivilegeTemplateDTO> templates = PrivilegeTemplateDTO.selectAll(player.getUniqueId());
|
List<PrivilegeTemplateDTO> templates = PrivilegeTemplateDTO.selectAll(player.getUniqueId());
|
||||||
|
|
||||||
ListView view = ListView.create(10, "/dominion member select_template " + dominionName + " " + playerName);
|
ListView view = ListView.create(10, "/dominion member select_template " + dominionName + " " + playerName);
|
||||||
view.title("选择一个模板");
|
view.title(Translation.TUI_SelectTemplate_Title);
|
||||||
Line sub = Line.create()
|
Line sub = Line.create()
|
||||||
.append("套用在领地 " + dominionName + " 的成员 " + playerName + " 身上")
|
.append(String.format(Translation.TUI_SelectTemplate_Description.trans(), dominionName, playerName))
|
||||||
.append(Button.create("返回").setExecuteCommand("/dominion member setting " + dominionName + " " + playerName).build());
|
.append(Button.create(Translation.TUI_BackButton).setExecuteCommand("/dominion member setting " + dominionName + " " + playerName).build());
|
||||||
view.subtitle(sub);
|
view.subtitle(sub);
|
||||||
|
|
||||||
for (PrivilegeTemplateDTO template : templates) {
|
for (PrivilegeTemplateDTO template : templates) {
|
||||||
// /dominion member apply_template <领地名称> <成员名称> <模板名称>
|
// /dominion member apply_template <领地名称> <成员名称> <模板名称>
|
||||||
view.add(Line.create()
|
view.add(Line.create()
|
||||||
.append(Button.create("选择")
|
.append(Button.create(Translation.TUI_SelectButton)
|
||||||
.setExecuteCommand(CommandParser("/dominion member apply_template %s %s %s", dominionName, playerName, template.getName()))
|
.setExecuteCommand(CommandParser("/dominion member apply_template %s %s %s", dominionName, playerName, template.getName()))
|
||||||
.build())
|
.build())
|
||||||
.append(Component.text(template.getName())));
|
.append(Component.text(template.getName())));
|
@ -1,6 +1,7 @@
|
|||||||
package cn.lunadeer.dominion.tuis.template;
|
package cn.lunadeer.dominion.uis.tuis.template;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
|
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
|
||||||
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
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;
|
||||||
@ -29,17 +30,17 @@ public class TemplateList {
|
|||||||
ListView view = ListView.create(10, "/dominion template list");
|
ListView view = ListView.create(10, "/dominion template list");
|
||||||
|
|
||||||
List<PrivilegeTemplateDTO> templates = PrivilegeTemplateDTO.selectAll(player.getUniqueId());
|
List<PrivilegeTemplateDTO> templates = PrivilegeTemplateDTO.selectAll(player.getUniqueId());
|
||||||
view.title("成员权限模板列表");
|
view.title(Translation.TUI_TemplateList_Title);
|
||||||
view.navigator(Line.create().append(Button.create("主菜单").setExecuteCommand("/dominion menu").build()).append("模板列表"));
|
view.navigator(Line.create().append(Button.create(Translation.TUI_Navigation_Menu).setExecuteCommand("/dominion menu").build()).append(Translation.TUI_Navigation_TemplateList));
|
||||||
|
|
||||||
Button create = Button.create("创建成员权限模板").setExecuteCommand("/dominion cui_template_create")
|
Button create = Button.create(Translation.TUI_TemplateList_CreateButton).setExecuteCommand("/dominion cui_template_create")
|
||||||
.setHoverText("创建一个新的成员权限模板");
|
.setHoverText(Translation.TUI_TemplateList_CreateDescription);
|
||||||
|
|
||||||
view.add(Line.create().append(create.build()));
|
view.add(Line.create().append(create.build()));
|
||||||
|
|
||||||
for (PrivilegeTemplateDTO template : templates) {
|
for (PrivilegeTemplateDTO template : templates) {
|
||||||
Button manage = Button.createGreen("配置").setExecuteCommand("/dominion template setting " + template.getName());
|
Button manage = Button.createGreen(Translation.TUI_EditButton).setExecuteCommand("/dominion template setting " + template.getName());
|
||||||
Button delete = Button.createRed("删除").setExecuteCommand("/dominion template delete " + template.getName());
|
Button delete = Button.createRed(Translation.TUI_DeleteButton).setExecuteCommand("/dominion template delete " + template.getName());
|
||||||
Line line = Line.create()
|
Line line = Line.create()
|
||||||
.append(delete.build())
|
.append(delete.build())
|
||||||
.append(manage.build())
|
.append(manage.build())
|
@ -1,7 +1,8 @@
|
|||||||
package cn.lunadeer.dominion.tuis.template;
|
package cn.lunadeer.dominion.uis.tuis.template;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.dtos.Flag;
|
import cn.lunadeer.dominion.dtos.Flag;
|
||||||
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
|
import cn.lunadeer.dominion.dtos.PrivilegeTemplateDTO;
|
||||||
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
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;
|
||||||
@ -30,16 +31,16 @@ public class TemplateSetting {
|
|||||||
int page = getPage(args, 3);
|
int page = getPage(args, 3);
|
||||||
PrivilegeTemplateDTO template = PrivilegeTemplateDTO.select(player.getUniqueId(), args[2]);
|
PrivilegeTemplateDTO template = PrivilegeTemplateDTO.select(player.getUniqueId(), args[2]);
|
||||||
if (template == null) {
|
if (template == null) {
|
||||||
Notification.error(sender, "模板 %s 不存在", args[2]);
|
Notification.error(sender, Translation.Messages_TemplateNotExist, args[2]);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
ListView view = ListView.create(10, "/dominion template setting " + template.getName());
|
ListView view = ListView.create(10, "/dominion template setting " + template.getName());
|
||||||
view.title("模板 " + args[1] + " 权限管理");
|
view.title(String.format(Translation.TUI_TemplateSetting_Title.trans(), args[1]));
|
||||||
view.navigator(Line.create()
|
view.navigator(Line.create()
|
||||||
.append(Button.create("主菜单").setExecuteCommand("/dominion menu").build())
|
.append(Button.create(Translation.TUI_Navigation_Menu).setExecuteCommand("/dominion menu").build())
|
||||||
.append(Button.create("模板列表").setExecuteCommand("/dominion template list").build())
|
.append(Button.create(Translation.TUI_Navigation_TemplateList).setExecuteCommand("/dominion template list").build())
|
||||||
.append("模板管理")
|
.append(Translation.TUI_Navigation_TemplateSetting)
|
||||||
);
|
);
|
||||||
|
|
||||||
// /dominion template_set_flag <模板名称> <权限名称> <true/false> [页码]
|
// /dominion template_set_flag <模板名称> <权限名称> <true/false> [页码]
|
||||||
@ -47,11 +48,17 @@ public class TemplateSetting {
|
|||||||
if (template.getAdmin()) {
|
if (template.getAdmin()) {
|
||||||
view.add(Line.create()
|
view.add(Line.create()
|
||||||
.append(Button.createGreen("☑").setExecuteCommand("/dominion template set_flag " + template.getName() + " admin false " + page).build())
|
.append(Button.createGreen("☑").setExecuteCommand("/dominion template set_flag " + template.getName() + " admin false " + page).build())
|
||||||
.append("管理员"));
|
.append(
|
||||||
|
Component.text(Translation.Flags_admin_DisplayName.trans())
|
||||||
|
.hoverEvent(Component.text(Translation.Flags_admin_Description.trans()))
|
||||||
|
));
|
||||||
} else {
|
} else {
|
||||||
view.add(Line.create()
|
view.add(Line.create()
|
||||||
.append(Button.createRed("☐").setExecuteCommand("/dominion template set_flag " + template.getName() + " admin true " + page).build())
|
.append(Button.createRed("☐").setExecuteCommand("/dominion template set_flag " + template.getName() + " admin true " + page).build())
|
||||||
.append("管理员"));
|
.append(
|
||||||
|
Component.text(Translation.Flags_admin_DisplayName.trans())
|
||||||
|
.hoverEvent(Component.text(Translation.Flags_admin_Description.trans()))
|
||||||
|
));
|
||||||
}
|
}
|
||||||
for (Flag flag : Flag.getPrivilegeFlagsEnabled()) {
|
for (Flag flag : Flag.getPrivilegeFlagsEnabled()) {
|
||||||
view.add(createOption(flag, template.getFlagValue(flag), template.getName(), page));
|
view.add(createOption(flag, template.getFlagValue(flag), template.getName(), page));
|
@ -1,6 +1,7 @@
|
|||||||
package cn.lunadeer.dominion.utils;
|
package cn.lunadeer.dominion.utils;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Dominion;
|
import cn.lunadeer.dominion.Dominion;
|
||||||
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@ -12,7 +13,7 @@ import java.util.Map;
|
|||||||
public class CommandUtils {
|
public class CommandUtils {
|
||||||
public static Player playerOnly(CommandSender sender) {
|
public static Player playerOnly(CommandSender sender) {
|
||||||
if (!(sender instanceof Player)) {
|
if (!(sender instanceof Player)) {
|
||||||
Notification.error(sender, "该命令只能由玩家执行");
|
Notification.error(sender, Translation.Messages_CommandPlayerOnly);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return (Player) sender;
|
return (Player) sender;
|
||||||
@ -20,7 +21,7 @@ public class CommandUtils {
|
|||||||
|
|
||||||
public static boolean hasPermission(CommandSender sender, String permission) {
|
public static boolean hasPermission(CommandSender sender, String permission) {
|
||||||
if (!sender.hasPermission(permission)) {
|
if (!sender.hasPermission(permission)) {
|
||||||
Notification.error(sender, "你没有 %s 权限执行此命令", permission);
|
Notification.error(sender, Translation.Messages_NoPermission, permission);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -6,6 +6,7 @@ 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.GroupDTO;
|
||||||
import cn.lunadeer.dominion.dtos.MemberDTO;
|
import cn.lunadeer.dominion.dtos.MemberDTO;
|
||||||
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
@ -21,7 +22,7 @@ public class ControllerUtils {
|
|||||||
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()) {
|
||||||
player.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "你不是领地 %s 的拥有者或管理员,无权修改权限", dominion.getName()));
|
player.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_NotDominionOwnerOrAdmin, dominion.getName()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -38,7 +39,7 @@ public class ControllerUtils {
|
|||||||
public static DominionDTO getPlayerCurrentDominion(AbstractOperator player) {
|
public static DominionDTO getPlayerCurrentDominion(AbstractOperator player) {
|
||||||
Location location = player.getLocation();
|
Location location = player.getLocation();
|
||||||
if (location == null) {
|
if (location == null) {
|
||||||
player.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "无法获取你的位置信息"));
|
player.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_CannotGetDominionAuto));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
DominionDTO dominion = Cache.instance.getDominionByLoc(location);
|
DominionDTO dominion = Cache.instance.getDominionByLoc(location);
|
||||||
@ -48,7 +49,7 @@ public class ControllerUtils {
|
|||||||
if (dominion.getParentDomId() == -1) {
|
if (dominion.getParentDomId() == -1) {
|
||||||
return dominion;
|
return dominion;
|
||||||
} else {
|
} else {
|
||||||
player.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, "你当前在子领地内,请指定要操作的领地名称"));
|
player.setResponse(new AbstractOperator.Result(AbstractOperator.Result.FAILURE, Translation.Messages_InSubDominion));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,12 +6,7 @@ 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.dtos.MemberDTO;
|
import cn.lunadeer.dominion.dtos.MemberDTO;
|
||||||
import cn.lunadeer.minecraftpluginutils.Notification;
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
import net.kyori.adventure.text.Component;
|
|
||||||
import net.kyori.adventure.text.TextComponent;
|
|
||||||
import net.kyori.adventure.text.format.Style;
|
|
||||||
import net.kyori.adventure.text.format.TextColor;
|
|
||||||
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;
|
||||||
@ -76,11 +71,9 @@ public class EventUtils {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
TextComponent msg = Component.text(
|
String msg = String.format(Translation.Messages_NoPermissionForFlag.trans(), flag.getDisplayName(), flag.getDescription());
|
||||||
String.format("你没有 %s (%s) 权限", flag.getDisplayName(), flag.getDescription()),
|
msg = "&#FF0000" + "&l" + msg;
|
||||||
Style.style(TextColor.color(0xFF0000), TextDecoration.BOLD))
|
MessageDisplay.show(player, Dominion.config.getMessageDisplayNoPermission(), msg);
|
||||||
.hoverEvent(Component.text(flag.getDescription()));
|
|
||||||
Notification.actionBar(player, msg);
|
|
||||||
if (event != null) {
|
if (event != null) {
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,37 @@
|
|||||||
|
package cn.lunadeer.dominion.utils;
|
||||||
|
|
||||||
|
import cn.lunadeer.minecraftpluginutils.ColorParser;
|
||||||
|
import cn.lunadeer.minecraftpluginutils.Notification;
|
||||||
|
import me.clip.placeholderapi.PlaceholderAPI;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
public class MessageDisplay {
|
||||||
|
public enum Place {
|
||||||
|
BOSS_BAR,
|
||||||
|
ACTION_BAR,
|
||||||
|
TITLE,
|
||||||
|
SUBTITLE,
|
||||||
|
CHAT
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void show(Player player, Place place, String message) {
|
||||||
|
if (Bukkit.getPluginManager().isPluginEnabled("PlaceholderAPI")) {
|
||||||
|
message = PlaceholderAPI.setPlaceholders(player, message);
|
||||||
|
}
|
||||||
|
message = ColorParser.getBukkitType(message);
|
||||||
|
// BOSS_BAR, ACTION_BAR, TITLE, SUBTITLE, CHAT
|
||||||
|
if (place == Place.BOSS_BAR) {
|
||||||
|
Notification.bossBar(player, message);
|
||||||
|
} else if (place == Place.CHAT) {
|
||||||
|
player.sendMessage(message);
|
||||||
|
} else if (place == Place.TITLE) {
|
||||||
|
Notification.title(player, message);
|
||||||
|
} else if (place == Place.SUBTITLE) {
|
||||||
|
Notification.subTitle(player, message);
|
||||||
|
} else {
|
||||||
|
Notification.actionBar(player, message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -3,9 +3,9 @@ package cn.lunadeer.dominion.utils;
|
|||||||
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.MemberDTO;
|
import cn.lunadeer.dominion.dtos.MemberDTO;
|
||||||
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
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.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;
|
||||||
@ -47,7 +47,7 @@ public class TuiUtils {
|
|||||||
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()) {
|
||||||
Notification.error(player, "你不是领地 %s 的拥有者或管理员,无权访问此页面", dominion.getName());
|
Notification.error(player, Translation.TUI_NotDominionOwnerOrAdminForPage, dominion.getName());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -56,7 +56,7 @@ public class TuiUtils {
|
|||||||
|
|
||||||
public static boolean notOp(CommandSender sender) {
|
public static boolean notOp(CommandSender sender) {
|
||||||
if (!sender.isOp()) {
|
if (!sender.isOp()) {
|
||||||
Notification.error(sender, "你没有权限访问此页面");
|
Notification.error(sender, Translation.Messages_PageNoPermission);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -67,27 +67,9 @@ public class TuiUtils {
|
|||||||
if (player == null) return;
|
if (player == null) return;
|
||||||
int page = getPage(args, 1);
|
int page = getPage(args, 1);
|
||||||
ListView view = ListView.create(10, "/dominion help");
|
ListView view = ListView.create(10, "/dominion help");
|
||||||
view.title("领地插件命令帮助 <>表示必填参数 []表示可选参数")
|
view.title(Translation.TUI_CommandHelp_Title.trans())
|
||||||
.add(Line.create().append("打开交互菜单").append("/dominion menu"))
|
.subtitle(Line.create().append(Translation.TUI_CommandHelp_SubTitle.trans()))
|
||||||
.add(Line.create().append("查看帮助").append("/dominion help [页码]"))
|
// todo ...
|
||||||
.add(Line.create().append("创建领地").append("/dominion create <领地名称>"))
|
|
||||||
.add(Line.create().append("自动创建领地").append("/dominion auto_create <领地名称>"))
|
|
||||||
.add(Line.create().append("创建子领地").append("/dominion create_sub <子领地名称> [父领地名称]"))
|
|
||||||
.add(Line.create().append("自动创建子领地").append("/dominion auto_create_sub <子领地名称> [父领地名称]"))
|
|
||||||
.add(Line.create().append("管理领地").append("/dominion manage <领地名称>"))
|
|
||||||
.add(Line.create().append("扩张领地").append("/dominion expand [大小] [领地名称]"))
|
|
||||||
.add(Line.create().append("缩小领地").append("/dominion contract [大小] [领地名称]"))
|
|
||||||
.add(Line.create().append("设置进入领地的提示语").append("/dominion set_enter_msg <提示语> [领地名称]"))
|
|
||||||
.add(Line.create().append("设置离开领地的提示语").append("/dominion set_leave_msg <提示语> [领地名称]"))
|
|
||||||
.add(Line.create().append("设置领地传送点").append("/dominion set_tp_location [领地名称]"))
|
|
||||||
.add(Line.create().append("传送到领地").append("/dominion tp <领地名称>"))
|
|
||||||
.add(Line.create().append("重命名领地").append("/dominion rename <原领地名称> <新领地名称>"))
|
|
||||||
.add(Line.create().append("转让领地").append("/dominion give <领地名称> <玩家名称> [force]"))
|
|
||||||
.add(Line.create().append("删除领地").append("/dominion delete <领地名称> [force]"))
|
|
||||||
// 管理员指令
|
|
||||||
.add(Line.create().append("---[管理员指令]---"))
|
|
||||||
.add(Line.create().append("刷新缓存").append(Button.create("/dominion reload_cache").setExecuteCommand("/dominion reload_cache").build()))
|
|
||||||
.add(Line.create().append("重载配置").append(Button.create("/dominion reload_config").setExecuteCommand("/dominion reload_config").build()))
|
|
||||||
.showOn(player, page);
|
.showOn(player, page);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
package cn.lunadeer.dominion.utils;
|
package cn.lunadeer.dominion.utils.map;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Cache;
|
import cn.lunadeer.dominion.Cache;
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.api.dtos.DominionDTO;
|
||||||
|
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||||
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
import cn.lunadeer.minecraftpluginutils.Scheduler;
|
import cn.lunadeer.minecraftpluginutils.Scheduler;
|
||||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||||
import com.flowpowered.math.vector.Vector2d;
|
import com.flowpowered.math.vector.Vector2d;
|
||||||
@ -20,7 +22,7 @@ public class BlueMapConnect {
|
|||||||
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.getAllDominions()) {
|
||||||
if (dominion.getWorld() == null) {
|
if (dominion.getWorld() == null) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -36,6 +38,11 @@ public class BlueMapConnect {
|
|||||||
.build();
|
.build();
|
||||||
|
|
||||||
for (DominionDTO dominion : d.getValue()) {
|
for (DominionDTO dominion : d.getValue()) {
|
||||||
|
PlayerDTO p = PlayerDTO.select(dominion.getOwner());
|
||||||
|
if (p == null) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
Collection<Vector2d> vectors = new ArrayList<>();
|
Collection<Vector2d> vectors = new ArrayList<>();
|
||||||
vectors.add(new Vector2d(dominion.getX1() + 0.001, dominion.getZ1() + 0.001));
|
vectors.add(new Vector2d(dominion.getX1() + 0.001, dominion.getZ1() + 0.001));
|
||||||
vectors.add(new Vector2d(dominion.getX2() - 0.001, dominion.getZ1() + 0.001));
|
vectors.add(new Vector2d(dominion.getX2() - 0.001, dominion.getZ1() + 0.001));
|
||||||
@ -54,6 +61,7 @@ public class BlueMapConnect {
|
|||||||
Color fill = new Color(r, g, b, 0.2F);
|
Color fill = new Color(r, g, b, 0.2F);
|
||||||
ExtrudeMarker marker = ExtrudeMarker.builder()
|
ExtrudeMarker marker = ExtrudeMarker.builder()
|
||||||
.label(dominion.getName())
|
.label(dominion.getName())
|
||||||
|
.detail(String.format(Translation.Messages_MapInfoDetail.trans(), dominion.getName(), p.getLastKnownName()))
|
||||||
.position(x, y, z)
|
.position(x, y, z)
|
||||||
.shape(shape, dominion.getY1() + 0.001f, dominion.getY2() - 0.001f)
|
.shape(shape, dominion.getY1() + 0.001f, dominion.getY2() - 0.001f)
|
||||||
.lineColor(line)
|
.lineColor(line)
|
||||||
@ -70,7 +78,7 @@ public class BlueMapConnect {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
} catch (NoClassDefFoundError e) {
|
} catch (NoClassDefFoundError e) {
|
||||||
XLogger.warn("无法连接 BlueMap 插件,如果你不打算使用卫星地图渲染建议前往配置文件关闭此功能以避免下方的报错。");
|
XLogger.warn(Translation.Messages_BlueMapConnectFailed);
|
||||||
XLogger.err(e.getMessage());
|
XLogger.err(e.getMessage());
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -123,7 +131,7 @@ public class BlueMapConnect {
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
} catch (NoClassDefFoundError e) {
|
} catch (NoClassDefFoundError e) {
|
||||||
XLogger.warn("无法连接 BlueMap 插件,如果你不打算使用卫星地图渲染建议前往配置文件关闭此功能以避免下方的报错。");
|
XLogger.warn(Translation.Messages_BlueMapConnectFailed);
|
||||||
XLogger.err(e.getMessage());
|
XLogger.err(e.getMessage());
|
||||||
}
|
}
|
||||||
});
|
});
|
@ -1,6 +1,8 @@
|
|||||||
package cn.lunadeer.dominion.utils;
|
package cn.lunadeer.dominion.utils.map;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.dtos.DominionDTO;
|
import cn.lunadeer.dominion.api.dtos.DominionDTO;
|
||||||
|
import cn.lunadeer.dominion.dtos.PlayerDTO;
|
||||||
|
import cn.lunadeer.dominion.managers.Translation;
|
||||||
import cn.lunadeer.minecraftpluginutils.Scheduler;
|
import cn.lunadeer.minecraftpluginutils.Scheduler;
|
||||||
import cn.lunadeer.minecraftpluginutils.XLogger;
|
import cn.lunadeer.minecraftpluginutils.XLogger;
|
||||||
import org.dynmap.DynmapCommonAPI;
|
import org.dynmap.DynmapCommonAPI;
|
||||||
@ -29,17 +31,21 @@ public class DynmapConnect extends DynmapCommonAPIListener {
|
|||||||
MarkerAPI markerAPI = dynmapCommonAPI.getMarkerAPI();
|
MarkerAPI markerAPI = dynmapCommonAPI.getMarkerAPI();
|
||||||
this.markerSet_dominion = markerAPI.getMarkerSet("dominion");
|
this.markerSet_dominion = markerAPI.getMarkerSet("dominion");
|
||||||
if (this.markerSet_dominion == null) {
|
if (this.markerSet_dominion == null) {
|
||||||
this.markerSet_dominion = markerAPI.createMarkerSet("dominion", "Dominion领地", null, false);
|
this.markerSet_dominion = markerAPI.createMarkerSet("dominion", "Dominion", null, false);
|
||||||
}
|
}
|
||||||
this.markerSet_mca = markerAPI.getMarkerSet("mca");
|
this.markerSet_mca = markerAPI.getMarkerSet("mca");
|
||||||
if (this.markerSet_mca == null) {
|
if (this.markerSet_mca == null) {
|
||||||
this.markerSet_mca = markerAPI.createMarkerSet("mca", "MCA文件", null, false);
|
this.markerSet_mca = markerAPI.createMarkerSet("mca", "MCA文件", null, false);
|
||||||
}
|
}
|
||||||
XLogger.info("Dynmap 成功注册");
|
XLogger.info(Translation.Messages_DynmapRegisterSuccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setDominionMarker(DominionDTO dominion) {
|
private void setDominionMarker(DominionDTO dominion) {
|
||||||
String nameLabel = "<div>" + dominion.getName() + "</div>";
|
PlayerDTO p = PlayerDTO.select(dominion.getOwner());
|
||||||
|
if (p == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String nameLabel = String.format(Translation.Messages_MapInfoDetail.trans(), dominion.getName(), p.getLastKnownName());
|
||||||
double[] xx = {dominion.getX1(), dominion.getX2()};
|
double[] xx = {dominion.getX1(), dominion.getX2()};
|
||||||
double[] zz = {dominion.getZ1(), dominion.getZ2()};
|
double[] zz = {dominion.getZ1(), dominion.getZ2()};
|
||||||
if (dominion.getWorld() == null) {
|
if (dominion.getWorld() == null) {
|
||||||
@ -62,7 +68,7 @@ public class DynmapConnect extends DynmapCommonAPIListener {
|
|||||||
public void setDominionMarkers(List<DominionDTO> dominions) {
|
public void setDominionMarkers(List<DominionDTO> dominions) {
|
||||||
Scheduler.runTaskAsync(() -> {
|
Scheduler.runTaskAsync(() -> {
|
||||||
if (this.markerSet_dominion == null) {
|
if (this.markerSet_dominion == null) {
|
||||||
XLogger.warn("无法连接到 Dynmap,如果你不打算使用卫星地图渲染建议前往配置文件关闭此功能。");
|
XLogger.warn(Translation.Messages_DynmapConnectFailed);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.markerSet_dominion.getAreaMarkers().forEach(AreaMarker::deleteMarker);
|
this.markerSet_dominion.getAreaMarkers().forEach(AreaMarker::deleteMarker);
|
||||||
@ -75,7 +81,7 @@ public class DynmapConnect extends DynmapCommonAPIListener {
|
|||||||
public void setMCAMarkers(Map<String, List<String>> mca_files) {
|
public void setMCAMarkers(Map<String, List<String>> mca_files) {
|
||||||
Scheduler.runTaskAsync(() -> {
|
Scheduler.runTaskAsync(() -> {
|
||||||
if (this.markerSet_mca == null) {
|
if (this.markerSet_mca == null) {
|
||||||
XLogger.warn("无法连接到 Dynmap,如果你不打算使用卫星地图渲染建议前往配置文件关闭此功能。");
|
XLogger.warn(Translation.Messages_DynmapConnectFailed);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
this.markerSet_mca.getAreaMarkers().forEach(AreaMarker::deleteMarker);
|
this.markerSet_mca.getAreaMarkers().forEach(AreaMarker::deleteMarker);
|
@ -1,4 +1,4 @@
|
|||||||
package cn.lunadeer.dominion.utils;
|
package cn.lunadeer.dominion.utils.map;
|
||||||
|
|
||||||
import cn.lunadeer.dominion.Cache;
|
import cn.lunadeer.dominion.Cache;
|
||||||
import cn.lunadeer.dominion.Dominion;
|
import cn.lunadeer.dominion.Dominion;
|
||||||
@ -14,7 +14,7 @@ public class MapRender {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (Dominion.config.getDynmap()) {
|
if (Dominion.config.getDynmap()) {
|
||||||
DynmapConnect.instance.setDominionMarkers(Cache.instance.getDominions());
|
DynmapConnect.instance.setDominionMarkers(Cache.instance.getAllDominions());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -6,56 +6,69 @@ Database:
|
|||||||
User: dominion
|
User: dominion
|
||||||
Pass: dominion
|
Pass: dominion
|
||||||
|
|
||||||
# 自动圈地大小
|
Language: zh-cn
|
||||||
AutoCreateRadius: 10 #-1 表示不开启
|
|
||||||
|
AutoCreateRadius: 10
|
||||||
|
DefaultJoinMessage: '&3{OWNER}: Welcome to {DOM}!'
|
||||||
|
DefaultLeaveMessage: '&3{OWNER}: Leaving {DOM}...'
|
||||||
|
|
||||||
|
MessageDisplay:
|
||||||
|
NoPermission: ACTION_BAR
|
||||||
|
JoinLeave: ACTION_BAR
|
||||||
|
|
||||||
Limit:
|
Limit:
|
||||||
SpawnProtection: 10 # 出生点保护半径 出生点此范围内不允许圈地 -1 表示不开启
|
SpawnProtection: 10
|
||||||
MinY: -64 # 最小Y坐标
|
MinY: -64
|
||||||
MaxY: 320 # 最大Y坐标
|
MaxY: 320
|
||||||
SizeX: 128 # X方向最大长度 -1:表示不限制
|
Size:
|
||||||
SizeY: 64 # Y方向最大长度 -1:表示不限制
|
MaxX: 128
|
||||||
SizeZ: 128 # Z方向最大长度 -1:表示不限制
|
MaxY: 64
|
||||||
Amount: 10 # 最大领地数量 -1:表示不限制
|
MaxZ: 128
|
||||||
Depth: 3 # 子领地深度 0:不允许子领地 -1:不限制
|
MinX: 4
|
||||||
Vert: false # 是否自动延伸到 MaxY 和 MinY
|
MinY: 4
|
||||||
WorldBlackList: [ ] # 不允许领地的世界
|
MinZ: 4
|
||||||
OpByPass: true # 是否允许OP无视领地限制
|
Amount: 10
|
||||||
|
Depth: 3
|
||||||
|
Vert: false
|
||||||
|
OpByPass: true
|
||||||
|
WorldSettings:
|
||||||
|
some_world_name:
|
||||||
|
MinY: -64
|
||||||
|
MaxY: 320
|
||||||
|
Size:
|
||||||
|
MaxX: 128
|
||||||
|
MaxY: 64
|
||||||
|
MaxZ: 128
|
||||||
|
MinX: 4
|
||||||
|
MinY: 4
|
||||||
|
MinZ: 4
|
||||||
|
Amount: 10
|
||||||
|
Depth: 3
|
||||||
|
Vert: false
|
||||||
|
|
||||||
Teleport:
|
Teleport:
|
||||||
Enable: true
|
Enable: true
|
||||||
# 传送延迟 秒
|
|
||||||
Delay: 0
|
Delay: 0
|
||||||
# 冷却时间 秒
|
|
||||||
CoolDown: 0
|
CoolDown: 0
|
||||||
|
|
||||||
# 自动清理长时间未上线玩家的领地
|
AutoCleanAfterDays: 180
|
||||||
AutoCleanAfterDays: 180 # -1 表示不开启
|
|
||||||
|
|
||||||
# 圈地工具
|
|
||||||
Tool: ARROW
|
Tool: ARROW
|
||||||
|
|
||||||
# 经济系统 - 需要安装Vault插件
|
InfoTool: STRING
|
||||||
|
|
||||||
Economy:
|
Economy:
|
||||||
Enable: false
|
Enable: false
|
||||||
# 单价 - 每方块
|
|
||||||
Price: 10.0
|
Price: 10.0
|
||||||
# 是否只计算xz平面积
|
|
||||||
OnlyXZ: false
|
OnlyXZ: false
|
||||||
# 删除领地退还比例
|
|
||||||
Refund: 0.85
|
Refund: 0.85
|
||||||
|
|
||||||
# 飞行权限节点 - 拥有以下任意一个权限节点的玩家不会被本插件拦截飞行
|
|
||||||
FlyPermissionNodes:
|
FlyPermissionNodes:
|
||||||
- essentials.fly
|
- essentials.fly
|
||||||
- cmi.command.fly
|
- cmi.command.fly
|
||||||
|
|
||||||
# 是否允许玩家从 Residence 迁移领地数据
|
|
||||||
ResidenceMigration: false
|
ResidenceMigration: false
|
||||||
|
|
||||||
# 权限组称号 - 使用权限组当作称号(需要PlaceholderAPI插件)
|
|
||||||
# Papi: %dominion_group_title%
|
|
||||||
# 前后缀如需要加颜色请使用这种格式 &#ffffff
|
|
||||||
GroupTitle:
|
GroupTitle:
|
||||||
Enable: false
|
Enable: false
|
||||||
Prefix: "["
|
Prefix: "["
|
||||||
@ -68,4 +81,4 @@ CheckUpdate: true
|
|||||||
|
|
||||||
Debug: false
|
Debug: false
|
||||||
|
|
||||||
Timer: false # 性能测试计时器
|
Timer: false
|
0
core/src/main/resources/flags.yml
Normal file
0
core/src/main/resources/flags.yml
Normal file
@ -1,20 +1,29 @@
|
|||||||
# >---------------------------------<
|
MinY: -64
|
||||||
# | 圈地限制特殊权限组配置 |
|
MaxY: 320
|
||||||
# >---------------------------------<
|
Size:
|
||||||
# 此文件可以作为模板,你可以将此文件复制后重命名为你想要的权限组名,然后修改里面的配置
|
MaxX: 128
|
||||||
# 如果你想给赞助玩家(或者VIP)一些特殊优惠,例如更少的圈地价格、更大的领地等,你可以在这里配置
|
MaxY: 64
|
||||||
# 详细说明参阅 > https://ssl.lunadeer.cn:14448/doc/82/
|
MaxZ: 128
|
||||||
|
MinX: 4
|
||||||
|
MinY: 4
|
||||||
MinY: -64 # 最小Y坐标
|
MinZ: 4
|
||||||
MaxY: 320 # 最大Y坐标
|
Amount: 10
|
||||||
SizeX: 128 # X方向最大长度 -1:表示不限制
|
Depth: 3
|
||||||
SizeY: 64 # Y方向最大长度 -1:表示不限制
|
Vert: false
|
||||||
SizeZ: 128 # Z方向最大长度 -1:表示不限制
|
Price: 10.0
|
||||||
Amount: 10 # 最大领地数量 -1:表示不限制
|
OnlyXZ: false
|
||||||
Depth: 3 # 子领地深度 0:不允许子领地 -1:不限制
|
Refund: 0.85
|
||||||
Vert: false # 是否自动延伸到 MaxY 和 MinY
|
WorldSettings:
|
||||||
WorldBlackList: [ ] # 不允许领地的世界
|
some_world_name:
|
||||||
Price: 10.0 # 方块单价
|
MinY: -64
|
||||||
OnlyXZ: false # 是否只计算xz平面积
|
MaxY: 320
|
||||||
Refund: 0.85 # 删除领地退还比例
|
Size:
|
||||||
|
MaxX: 128
|
||||||
|
MaxY: 64
|
||||||
|
MaxZ: 128
|
||||||
|
MinX: 4
|
||||||
|
MinY: 4
|
||||||
|
MinZ: 4
|
||||||
|
Amount: 10
|
||||||
|
Depth: 3
|
||||||
|
Vert: false
|
||||||
|
@ -3,10 +3,12 @@ version: @version@
|
|||||||
main: cn.lunadeer.dominion.Dominion
|
main: cn.lunadeer.dominion.Dominion
|
||||||
api-version: '1.20'
|
api-version: '1.20'
|
||||||
folia-supported: true
|
folia-supported: true
|
||||||
|
libraries: [ ]
|
||||||
softdepend:
|
softdepend:
|
||||||
- Vault
|
- Vault
|
||||||
- dynmap
|
- dynmap
|
||||||
- PlaceholderAPI
|
- PlaceholderAPI
|
||||||
|
- BlueMap
|
||||||
commands:
|
commands:
|
||||||
Dominion:
|
Dominion:
|
||||||
description: 领地插件命令
|
description: 领地插件命令
|
||||||
|
5
docs/LANGS.md
Normal file
5
docs/LANGS.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# Languages
|
||||||
|
|
||||||
|
* [中文(简体)](zh-cn/)
|
||||||
|
* [中文(繁體)](zh-hk/)
|
||||||
|
* [English](en-us/)
|
21
docs/book.json
Normal file
21
docs/book.json
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
"chapter-fold",
|
||||||
|
"sidebar-style",
|
||||||
|
"code",
|
||||||
|
"github"
|
||||||
|
],
|
||||||
|
"pluginsConfig": {
|
||||||
|
"sidebar-style": {
|
||||||
|
"title": "Dominion",
|
||||||
|
"author": "zhangyuheng"
|
||||||
|
},
|
||||||
|
"code": {
|
||||||
|
"lineNumbers": true,
|
||||||
|
"copyButtons": true
|
||||||
|
},
|
||||||
|
"github": {
|
||||||
|
"url": "https://github.com/ColdeZhang/Dominion"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
39
docs/en-us/README.md
Normal file
39
docs/en-us/README.md
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
## Dominion Documentation
|
||||||
|
|
||||||
|
[![GitHub Repository](https://img.shields.io/badge/SourceCode-GitHub-blue?logo=github)](https://github.com/ColdeZhang/Dominion)
|
||||||
|
[![bStats](https://img.shields.io/badge/bStats-Statistics-eacd76?logo=google-analytics)](https://bstats.org/plugin/bukkit/Dominion/21445)
|
||||||
|
|
||||||
|
[![Hangar](https://img.shields.io/badge/To-Hangar-004ee9)](https://hangar.papermc.io/zhangyuheng/Dominion)
|
||||||
|
[![Modrinth](https://img.shields.io/badge/To-Modrinth-1bd96a)](https://modrinth.com/plugin/zhangyuheng-dominion)
|
||||||
|
[![Spigot](https://img.shields.io/badge/To-Spigot-ed8106)](https://www.spigotmc.org/resources/dominion.119514/)
|
||||||
|
|
||||||
|
[![Latest Build](https://img.shields.io/github/v/release/ColdeZhang/Dominion?label=LatestBuild&logo=github&color=0aa344)](https://github.com/ColdeZhang/Dominion/releases/latest)
|
||||||
|
|
||||||
|
## Brief
|
||||||
|
|
||||||
|
First of all, thank you very much for choosing and using this plugin.
|
||||||
|
|
||||||
|
Dominion is a completely open-source, free, future-proof, territory anti-grief plugin developed specifically for
|
||||||
|
high-versions minecraft server. The plugin is currently undergoing rapid development and iteration, and we will do our
|
||||||
|
best to ensure the stability and functionality of the plugin.
|
||||||
|
|
||||||
|
If you encounter any problems during use, or have any suggestions, please feel free to submit your questions or ideas
|
||||||
|
at [GitHub ISSUE](https://github.com/ColdeZhang/Dominion/issues).
|
||||||
|
|
||||||
|
## Quick start (for players)
|
||||||
|
|
||||||
|
1. [How to create a dominion](create-dominion.md)
|
||||||
|
2. [Managing your dominion](manage-dominion/README.md)
|
||||||
|
|
||||||
|
## Quick start (for server administrators)
|
||||||
|
|
||||||
|
1. [Installation, Required Readings, FAQ](operator/README.md)
|
||||||
|
2. [Configuration File Reference](operator/config.md)
|
||||||
|
|
||||||
|
## Help translate this documentation
|
||||||
|
|
||||||
|
If you want to help us translate the documentation, please refer
|
||||||
|
to [CONTRIBUTING.md](https://github.com/ColdeZhang/Dominion/blob/master/CONTRIBUTING.md#translate-documentation).
|
||||||
|
|
||||||
|
❤ Thank you for your support and contribution! ❤
|
||||||
|
|
24
docs/en-us/SUMMARY.md
Normal file
24
docs/en-us/SUMMARY.md
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# Summary
|
||||||
|
|
||||||
|
* [Preface](README.md)
|
||||||
|
* [Creating a Dominion](README.md)
|
||||||
|
* [Territory Management](manage-dominion/README.md)
|
||||||
|
* [Environment Settings](manage-dominion/environment.md)
|
||||||
|
* [Permission Management](manage-dominion/permission/README.md)
|
||||||
|
* [Guest Permissions](manage-dominion/permission/guest.md)
|
||||||
|
* [Territory members](manage-dominion/permission/member.md)
|
||||||
|
* [Permission Groups](manage-dominion/permission/permission-group.md)
|
||||||
|
* [Permission Templates](manage-dominion/permission/template.md)
|
||||||
|
* [Territory Teleport](manage-dominion/teleport.md)
|
||||||
|
* [Resize](manage-dominion/resize.md)
|
||||||
|
* [Setting the territory reminder message](manage-dominion/message.md)
|
||||||
|
* [Permission group title](manage-dominion/group-title.md)
|
||||||
|
* [Subdominion](manage-dominion/sub-dominion.md)
|
||||||
|
* [Migration from residence](migration-residence.md)
|
||||||
|
* [Command list](command-list.md)
|
||||||
|
* [Administrator's Guide](operator/README.md)
|
||||||
|
* [Configuration file reference](operator/config.md)
|
||||||
|
* [flags.yml](operator/flags.md)
|
||||||
|
* [Privileged Player Configuration](operator/privilege.md)
|
||||||
|
* [Cross-group teleportation (global-tp in testing)](operator/global-tp.md)
|
||||||
|
* [Developer](developer.md)
|
1
docs/en-us/command-list.md
Normal file
1
docs/en-us/command-list.md
Normal file
@ -0,0 +1 @@
|
|||||||
|
# 指令列表
|
23
docs/en-us/create-dominion.md
Normal file
23
docs/en-us/create-dominion.md
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# 创建领地
|
||||||
|
|
||||||
|
## 名称规则
|
||||||
|
|
||||||
|
- 领地名称不可与其他领地重复;
|
||||||
|
- 领地名称不可包含空格;
|
||||||
|
- 领地名称不可包含特殊字符;
|
||||||
|
|
||||||
|
## 手动创建
|
||||||
|
|
||||||
|
需要使用圈地工具(默认为箭矢),依次使用左键点选领地长方体区域的第一个点、右键点击长方体区域的第二个点。然后使用:
|
||||||
|
`/dominion create <领地名称>`创建领地,领地名称不可与其他领地重复。
|
||||||
|
|
||||||
|
## 自动创建
|
||||||
|
|
||||||
|
不需要选择对角线点,会以玩家为中心自动创建一定区域的领地。
|
||||||
|
|
||||||
|
1. 使用 `/dominion` 打开主菜单,点击`【创建领地】`;
|
||||||
|
2. 在弹出的 UI 中输入你要创建的领地名称;
|
||||||
|
3. 输入完成后左键点击下方中间的绿色混凝土,即可自动创建一块领地;
|
||||||
|
|
||||||
|
> 自动创建半径是由服务器管理员在配置文件中设置的;
|
||||||
|
|
99
docs/en-us/developer.md
Normal file
99
docs/en-us/developer.md
Normal file
@ -0,0 +1,99 @@
|
|||||||
|
# 开发者文档
|
||||||
|
|
||||||
|
> DominionAPI 自 Dominion-2.9.0-beta 开始支持。
|
||||||
|
|
||||||
|
## 一、接入 DominionAPI
|
||||||
|
|
||||||
|
### 1. 引入依赖
|
||||||
|
|
||||||
|
如果您使用 gradle,可以在您的 `build.gradle` 文件中添加如下代码:
|
||||||
|
|
||||||
|
```groovy
|
||||||
|
// build.gradle
|
||||||
|
repositories {
|
||||||
|
maven { url = "https://ssl.lunadeer.cn:14454/repository/maven-snapshots/" }
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compileOnly("cn.lunadeer:DominionAPI:2.1-SNAPSHOT")
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
或者你使用的是 gradle kotlin dsl:
|
||||||
|
|
||||||
|
```kotlin
|
||||||
|
// build.gradle.kts
|
||||||
|
repositories {
|
||||||
|
maven("https://ssl.lunadeer.cn:14454/repository/maven-snapshots/")
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
compileOnly("cn.lunadeer:DominionAPI:2.1-SNAPSHOT")
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
再或者您使用 maven,可以在您的 `pom.xml` 文件中添加如下代码:
|
||||||
|
|
||||||
|
```xml
|
||||||
|
<!-- pom.xml -->
|
||||||
|
<repositories>
|
||||||
|
<repository>
|
||||||
|
<id>lunadeer</id>
|
||||||
|
<url>https://ssl.lunadeer.cn:14454/repository/maven-snapshots/</url>
|
||||||
|
</repository>
|
||||||
|
</repositories>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>cn.lunadeer</groupId>
|
||||||
|
<artifactId>DominionAPI</artifactId>
|
||||||
|
<version>2.1-SNAPSHOT</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. plugin.yml 配置
|
||||||
|
|
||||||
|
在您的插件的 `plugin.yml` 文件中添加如下配置,以确保在 Dominion 准备完成后再加载您的插件:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# plugin.yml
|
||||||
|
depend: [ Dominion ]
|
||||||
|
```
|
||||||
|
|
||||||
|
## 二、使用 DominionAPI
|
||||||
|
|
||||||
|
可以通过如下方法直接获取 DominionAPI 实例:
|
||||||
|
|
||||||
|
```java
|
||||||
|
import cn.lunadeer.dominion.api.Dominion;
|
||||||
|
import cn.lunadeer.dominion.api.DominionAPI;
|
||||||
|
|
||||||
|
DominionAPI dominionAPI = Dominion.getInstance();
|
||||||
|
```
|
||||||
|
|
||||||
|
例如,获取某个位置的领地信息:
|
||||||
|
|
||||||
|
```java
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEnable() {
|
||||||
|
// Plugin startup logic
|
||||||
|
try {
|
||||||
|
DominionAPI dominionAPI = Dominion.getInstance();
|
||||||
|
DominionDTO d = dominionAPI.getDominionByLoc(some_location);
|
||||||
|
if (d == null) {
|
||||||
|
this.getLogger().info("no dominion found");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.getLogger().info("name:" + d.getName());
|
||||||
|
} catch (Exception e) {
|
||||||
|
this.getLogger().info(e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
[示例项目地址](https://github.com/ColdeZhang/DominionAddonExample)。
|
||||||
|
|
||||||
|
[Javadoc地址](https://coldezhang.github.io/DominionAPI/)。
|
14
docs/en-us/manage-dominion/README.md
Normal file
14
docs/en-us/manage-dominion/README.md
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
# 领地管理
|
||||||
|
|
||||||
|
领地的管理可以通过领地菜单完成,通常来说您不需要任何指令就可以完成领地的管理。
|
||||||
|
|
||||||
|
## 主菜单界面 `/dominion`
|
||||||
|
|
||||||
|
使用 `/dominion` 可以打开领地系统的可视化操作菜单界面(TUI)。单击`【我的领地】`可以查看自己创建的所有领地。
|
||||||
|
|
||||||
|
## 领地管理界面 `/dominion manage [领地名称]`
|
||||||
|
|
||||||
|
单击对应领地的【管理】即可进入对应领地的管理界面,通过管理界面可以管理此领地的权限等信息。 也可以直接输入
|
||||||
|
`/dominion manage [领地名称]` 来快速打开当前所在领地的管理界面。
|
||||||
|
|
||||||
|
> 领地名称是可选的,不填写则自动打开你当前所在的领地管理界面。
|
16
docs/en-us/manage-dominion/environment.md
Normal file
16
docs/en-us/manage-dominion/environment.md
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# 环境设置
|
||||||
|
|
||||||
|
## 简介
|
||||||
|
|
||||||
|
领地环境设置主要包含了领地内的一些非玩家行为的设置,例如TNT爆炸、火焰蔓延等等。
|
||||||
|
|
||||||
|
## 设置方法
|
||||||
|
|
||||||
|
1. 打开领地菜单 `/dominion`;
|
||||||
|
2. 在 `【我的领地】` 中点击对应领地的 `【管理】`;
|
||||||
|
3. 在领地管理界面中选择 `【环境设置】`;
|
||||||
|
4. 点击对应设置项的权限前的 ☑/☐ 来允许或者禁止对应的领地环境行为。
|
||||||
|
|
||||||
|
## 注意事项
|
||||||
|
|
||||||
|
- 鼠标移动到权限名称上可以显示此权限的详细(描述)信息;
|
26
docs/en-us/manage-dominion/group-title.md
Normal file
26
docs/en-us/manage-dominion/group-title.md
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
# 权限组称号
|
||||||
|
|
||||||
|
## 简介
|
||||||
|
|
||||||
|
权限组称号可以用来对外展示玩家在领地的角色/地位/身份,有利于提高领地内的社交性、增强玩家的归属感。
|
||||||
|
|
||||||
|
## 领地主要做的事
|
||||||
|
|
||||||
|
参照文档完成领地[权限组的配置](permission/permission-group.md),并且添加对应成员;
|
||||||
|
|
||||||
|
> 领地主玩家可以使用自己领地的所有权限组称号,所以如果领地主想给自己一个称号可以建一个空权限组专门用来给自己作称号用。
|
||||||
|
|
||||||
|
## 成员玩家要做的事
|
||||||
|
|
||||||
|
1. 打开领地菜单 `/dominion`;
|
||||||
|
2. 在主菜单点击`【称号列表】`,此处会列出所有你拥有的领地权限组称号,以及该称号来源于哪个领地:
|
||||||
|
3. 点击对应称号前的【使用】,即可;
|
||||||
|
|
||||||
|
## 管理员要做的事
|
||||||
|
|
||||||
|
1. 在配置文件中启用 `GroupTitle.Enable`;
|
||||||
|
2. 安装 PlaceholderAPI 插件;
|
||||||
|
3. 在你想要显示称号的地方(如聊天前缀、TAB列表)添加占位符:`%dominion_group_title%`;
|
||||||
|
|
||||||
|
> 通常来说你还需要安装一个聊天插件来显示占位符,例如 InteractiveChat、TAB 之类的。
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user