mirror of
https://github.com/CarmJos/MoeTeleport.git
synced 2024-09-19 21:35:56 +00:00
feat(update): 更新插件依赖版本,适配新功能
This commit is contained in:
parent
4f232d35c4
commit
8eb0021196
36
README.md
36
README.md
@ -1,12 +1,9 @@
|
|||||||
```text
|
```text
|
||||||
__ __ _______ _ _
|
__ ___ ______ __ __
|
||||||
| \/ | |__ __| | | | |
|
/ |/ /__ __/_ __/__ / /__ ___ ___ ____/ /_
|
||||||
| \ / | ___ ___| | ___| | ___ _ __ ___ _ __| |_
|
/ /|_/ / _ \/ -_) / / -_) / -_) _ \/ _ \/ __/ __/
|
||||||
| |\/| |/ _ \ / _ \ |/ _ \ |/ _ \ '_ \ / _ \| '__| __|
|
/_/ /_/\___/\__/_/ \__/_/\__/ .__/\___/_/ \__/
|
||||||
| | | | (_) | __/ | __/ | __/ |_) | (_) | | | |_
|
/_/
|
||||||
|_| |_|\___/ \___|_|\___|_|\___| .__/ \___/|_| \__|
|
|
||||||
| |
|
|
||||||
|_|
|
|
||||||
```
|
```
|
||||||
|
|
||||||
# MoeTeleport 喵喵传送
|
# MoeTeleport 喵喵传送
|
||||||
@ -15,7 +12,9 @@
|
|||||||
|
|
||||||
项目代码符合开发规范,适合新手开发者学习Bukkit,制作属于自己的插件。
|
项目代码符合开发规范,适合新手开发者学习Bukkit,制作属于自己的插件。
|
||||||
|
|
||||||
本插件由 [璎珞服务器](https://www.yingluo.world/) 委托本人开发,经过授权后开源。
|
本插件由 [**璎珞**服务器](https://www.yingluo.world/) 委托本人开发,经过授权后开源。
|
||||||
|
|
||||||
|
感谢 [**XingMC**(MagicMC服务器开发者)](https://www.mcbbs.net/?4816320) 为本插件提供后续开发的资金赞助。
|
||||||
|
|
||||||
## 功能与优势
|
## 功能与优势
|
||||||
|
|
||||||
@ -33,16 +32,20 @@
|
|||||||
- 回到死亡地点、上一传送地点
|
- 回到死亡地点、上一传送地点
|
||||||
|
|
||||||
### 优势
|
### 优势
|
||||||
|
|
||||||
- **轻量插件。** 适合小型服务器使用,配置简单方便。
|
- **轻量插件。** 适合小型服务器使用,配置简单方便。
|
||||||
- **规范开发。** 插件架构符合开发规范,适合新手开发者学习。
|
- **规范开发。** 插件架构符合开发规范,适合新手开发者学习。
|
||||||
- 自 [v3.0.0]() 版本开始采用了 EasyPlugin 开发,可能与其他主流插件结构有些不同。
|
- 自 [3.0.0]() 版本开始采用了 EasyPlugin 开发,可能与其他主流插件结构有些不同。
|
||||||
- **持续维护。** 新功能需求均可提交,大概率在后续开发中支持。
|
- **持续维护。** 新功能需求均可提交,大概率在后续开发中支持。
|
||||||
- 功能需求请 [提交Issues](https://github.com/CarmJos/MoeTeleport/issues/new?assignees=&labels=enhancement&template=feature_issues.md&title=) ,不要在帖子中提交!
|
-
|
||||||
|
功能需求请 [提交Issues](https://github.com/CarmJos/MoeTeleport/issues/new?assignees=&labels=enhancement&template=feature_issues.md&title=)
|
||||||
|
,不要在帖子中提交!
|
||||||
- 提交与 “传送” 相关联的请求才大概率会被更新支持。
|
- 提交与 “传送” 相关联的请求才大概率会被更新支持。
|
||||||
|
|
||||||
## [依赖](https://github.com/CarmJos/MoeTeleport/network/dependencies)
|
## [依赖](https://github.com/CarmJos/MoeTeleport/network/dependencies)
|
||||||
|
|
||||||
- **[必须]** 插件本体基于 [Spigot-API](https://hub.spigotmc.org/stash/projects/SPIGOT) 、[BukkitAPI](http://bukkit.org/) 实现。
|
- **[必须]** 插件本体基于 [Spigot-API](https://hub.spigotmc.org/stash/projects/SPIGOT) 、[BukkitAPI](http://bukkit.org/)
|
||||||
|
实现。
|
||||||
- **[自带]** 消息格式基于 [MineDown](https://github.com/Phoenix616/MineDown) 实现。
|
- **[自带]** 消息格式基于 [MineDown](https://github.com/Phoenix616/MineDown) 实现。
|
||||||
- 所有 messages.yml 均支持 MineDown 语法。
|
- 所有 messages.yml 均支持 MineDown 语法。
|
||||||
- **[推荐]** 变量部分基于 [PlaceholderAPI](https://www.spigotmc.org/resources/6245/) 实现。
|
- **[推荐]** 变量部分基于 [PlaceholderAPI](https://www.spigotmc.org/resources/6245/) 实现。
|
||||||
@ -93,8 +96,6 @@
|
|||||||
|
|
||||||
支持 [MineDown 语法](https://wiki.phoenix616.dev/library:minedown:syntax),详见源文件。
|
支持 [MineDown 语法](https://wiki.phoenix616.dev/library:minedown:syntax),详见源文件。
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
### 玩家数据配置文件 (data/\<UUID\>.yml)
|
### 玩家数据配置文件 (data/\<UUID\>.yml)
|
||||||
|
|
||||||
本插件采用 `YAML格式` 存储玩家数据。
|
本插件采用 `YAML格式` 存储玩家数据。
|
||||||
@ -108,6 +109,7 @@ homes:
|
|||||||
```
|
```
|
||||||
|
|
||||||
## 使用统计
|
## 使用统计
|
||||||
|
|
||||||
[![bStats](https://bstats.org/signatures/bukkit/MoeTeleport.svg)](https://bstats.org/plugin/bukkit/MoeTeleport/14459)
|
[![bStats](https://bstats.org/signatures/bukkit/MoeTeleport.svg)](https://bstats.org/plugin/bukkit/MoeTeleport/14459)
|
||||||
|
|
||||||
## 支持与捐赠
|
## 支持与捐赠
|
||||||
@ -133,9 +135,11 @@ homes:
|
|||||||
> #### 可以用来盈利
|
> #### 可以用来盈利
|
||||||
> 你可以在分发软件的时候收费,但你必须在收费前向你的客户提供该软件的 GNU GPL 许可协议,以便让他们知道,他们可以从别的渠道免费得到这份软件,以及你收费的理由。
|
> 你可以在分发软件的时候收费,但你必须在收费前向你的客户提供该软件的 GNU GPL 许可协议,以便让他们知道,他们可以从别的渠道免费得到这份软件,以及你收费的理由。
|
||||||
> #### 可自由修改
|
> #### 可自由修改
|
||||||
> 如果你想添加或删除某个功能,没问题,如果你想在别的项目中使用部分代码,也没问题,唯一的要求是,使用了这段代码的项目也必须使用 GPL 协议。
|
> 如果你想添加或删除某个功能,没问题,如果你想在别的项目中使用部分代码,也没问题,唯一的要求是,使用了这段代码的项目也必须使用
|
||||||
|
> GPL 协议。
|
||||||
>
|
>
|
||||||
> 需要注意的是,分发的时候,需要明确提供源代码和二进制文件,另外,用于某些程序的某些协议有一些问题和限制,你可以看一下 @PierreJoye 写的 Practical Guide to GPL Compliance 一文。使用 GPL 协议,你必须在源代码代码中包含相应信息,以及协议本身。
|
> 需要注意的是,分发的时候,需要明确提供源代码和二进制文件,另外,用于某些程序的某些协议有一些问题和限制,你可以看一下
|
||||||
|
> @PierreJoye 写的 Practical Guide to GPL Compliance 一文。使用 GPL 协议,你必须在源代码代码中包含相应信息,以及协议本身。
|
||||||
>
|
>
|
||||||
> *以上文字来自 [五种开源协议GPL,LGPL,BSD,MIT,Apache](https://www.oschina.net/question/54100_9455) 。*
|
> *以上文字来自 [五种开源协议GPL,LGPL,BSD,MIT,Apache](https://www.oschina.net/question/54100_9455) 。*
|
||||||
</details>
|
</details>
|
||||||
|
BIN
lib/CMI-API9.3.1.2.jar
Normal file
BIN
lib/CMI-API9.3.1.2.jar
Normal file
Binary file not shown.
BIN
lib/CMILib1.2.4.5.jar
Normal file
BIN
lib/CMILib1.2.4.5.jar
Normal file
Binary file not shown.
126
pom.xml
126
pom.xml
@ -5,17 +5,20 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<maven.compiler.source>8</maven.compiler.source>
|
<project.jdk.version>8</project.jdk.version>
|
||||||
<maven.compiler.target>8</maven.compiler.target>
|
<maven.compiler.source>${project.jdk.version}</maven.compiler.source>
|
||||||
|
<maven.compiler.target>${project.jdk.version}</maven.compiler.target>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
|
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
|
||||||
<easyplugin.version>1.3.9</easyplugin.version>
|
|
||||||
<easysql.version>0.3.8</easysql.version>
|
<deps.easyplugin.version>1.4.18</deps.easyplugin.version>
|
||||||
|
<deps.easysql.version>0.4.6</deps.easysql.version>
|
||||||
|
<deps.mineconfig.version>2.3.0</deps.mineconfig.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
<groupId>cc.carm.plugin</groupId>
|
<groupId>cc.carm.plugin</groupId>
|
||||||
<artifactId>moeteleport</artifactId>
|
<artifactId>moeteleport</artifactId>
|
||||||
<version>3.1.2</version>
|
<version>4.0.0</version>
|
||||||
|
|
||||||
<name>MoeTeleport</name>
|
<name>MoeTeleport</name>
|
||||||
<description>喵喵传送,简单的传送、设置家的插件。</description>
|
<description>喵喵传送,简单的传送、设置家的插件。</description>
|
||||||
@ -23,12 +26,12 @@
|
|||||||
|
|
||||||
<issueManagement>
|
<issueManagement>
|
||||||
<system>GitHub Issues</system>
|
<system>GitHub Issues</system>
|
||||||
<url>${project.url}/issues</url>
|
<url>https://github.com/CarmJos/MoeTeleport/issues</url>
|
||||||
</issueManagement>
|
</issueManagement>
|
||||||
|
|
||||||
<ciManagement>
|
<ciManagement>
|
||||||
<system>GitHub Actions</system>
|
<system>GitHub Actions</system>
|
||||||
<url>${project.url}/actions/workflows/maven.yml</url>
|
<url>https://github.com/CarmJos/MoeTeleport/actions/workflows/maven.yml</url>
|
||||||
</ciManagement>
|
</ciManagement>
|
||||||
|
|
||||||
<developers>
|
<developers>
|
||||||
@ -91,7 +94,7 @@
|
|||||||
</repositories>
|
</repositories>
|
||||||
|
|
||||||
<distributionManagement>
|
<distributionManagement>
|
||||||
<downloadUrl>${project.url}/releases</downloadUrl>
|
<downloadUrl>https://github.com/CarmJos/MoeTeleport/releases</downloadUrl>
|
||||||
<repository>
|
<repository>
|
||||||
<id>github</id>
|
<id>github</id>
|
||||||
<name>GitHub Packages</name>
|
<name>GitHub Packages</name>
|
||||||
@ -102,19 +105,36 @@
|
|||||||
<dependencies>
|
<dependencies>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.spigotmc</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<artifactId>spigot-api</artifactId>
|
<artifactId>mineconfiguration-bukkit</artifactId>
|
||||||
<version>1.17-R0.1-SNAPSHOT</version>
|
<version>${deps.mineconfig.version}</version>
|
||||||
<scope>provided</scope>
|
<scope>compile</scope>
|
||||||
|
<optional>true</optional>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>me.clip</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<artifactId>placeholderapi</artifactId>
|
<artifactId>easyplugin-main</artifactId>
|
||||||
<version>2.10.9</version>
|
<version>${deps.easyplugin.version}</version>
|
||||||
<scope>provided</scope>
|
<scope>compile</scope>
|
||||||
|
<optional>true</optional>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>cc.carm.lib</groupId>
|
||||||
|
<artifactId>easyplugin-command</artifactId>
|
||||||
|
<version>${deps.easyplugin.version}</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
<optional>true</optional>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>cc.carm.lib</groupId>
|
||||||
|
<artifactId>easyplugin-githubchecker</artifactId>
|
||||||
|
<version>${deps.easyplugin.version}</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
<optional>true</optional>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.essentialsx</groupId>
|
<groupId>net.essentialsx</groupId>
|
||||||
@ -123,44 +143,46 @@
|
|||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.Zrips</groupId>
|
||||||
|
<artifactId>CMI-API</artifactId>
|
||||||
|
<version>9.3.1.2</version>
|
||||||
|
<scope>system</scope>
|
||||||
|
<systemPath>${project.basedir}/lib/CMI-API9.3.1.2.jar</systemPath>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.Zrips</groupId>
|
||||||
|
<artifactId>CMILib</artifactId>
|
||||||
|
<version>1.2.4.5</version>
|
||||||
|
<scope>system</scope>
|
||||||
|
<systemPath>${project.basedir}/lib/CMILib1.2.4.5.jar</systemPath>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>cc.carm.lib</groupId>
|
<groupId>cc.carm.lib</groupId>
|
||||||
<artifactId>easysql-beecp</artifactId>
|
<artifactId>easysql-beecp</artifactId>
|
||||||
<version>${easysql.version}</version>
|
<version>${deps.easysql.version}</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
<optional>true</optional>
|
<optional>true</optional>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>cc.carm.lib</groupId>
|
|
||||||
<artifactId>easyplugin-main</artifactId>
|
|
||||||
<optional>true</optional>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>cc.carm.lib</groupId>
|
|
||||||
<artifactId>easyplugin-configuration</artifactId>
|
|
||||||
<optional>true</optional>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>cc.carm.lib</groupId>
|
|
||||||
<artifactId>githubreleases4j</artifactId>
|
|
||||||
<version>1.3.1</version>
|
|
||||||
<scope>compile</scope>
|
|
||||||
|
|
||||||
<optional>true</optional>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>de.themoep</groupId>
|
<groupId>de.themoep</groupId>
|
||||||
<artifactId>minedown</artifactId>
|
<artifactId>minedown</artifactId>
|
||||||
<version>1.7.1-SNAPSHOT</version>
|
<version>1.7.1-SNAPSHOT</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
|
|
||||||
<optional>true</optional>
|
<optional>true</optional>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.spigotmc</groupId>
|
||||||
|
<artifactId>spigot-api</artifactId>
|
||||||
|
<version>1.17-R0.1-SNAPSHOT</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.bstats</groupId>
|
<groupId>org.bstats</groupId>
|
||||||
<artifactId>bstats-bukkit</artifactId>
|
<artifactId>bstats-bukkit</artifactId>
|
||||||
@ -169,6 +191,13 @@
|
|||||||
<optional>true</optional>
|
<optional>true</optional>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>me.clip</groupId>
|
||||||
|
<artifactId>placeholderapi</artifactId>
|
||||||
|
<version>2.10.9</version>
|
||||||
|
<scope>provided</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>junit</groupId>
|
<groupId>junit</groupId>
|
||||||
<artifactId>junit</artifactId>
|
<artifactId>junit</artifactId>
|
||||||
@ -185,21 +214,6 @@
|
|||||||
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
|
||||||
<dependencyManagement>
|
|
||||||
<dependencies>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>cc.carm.lib</groupId>
|
|
||||||
<artifactId>easyplugin-bom</artifactId>
|
|
||||||
<version>${easyplugin.version}</version>
|
|
||||||
<type>pom</type>
|
|
||||||
<scope>import</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
</dependencies>
|
|
||||||
</dependencyManagement>
|
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<plugins>
|
<plugins>
|
||||||
<plugin>
|
<plugin>
|
||||||
@ -230,8 +244,8 @@
|
|||||||
<artifactId>maven-compiler-plugin</artifactId>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
<version>3.8.1</version>
|
<version>3.8.1</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<source>1.8</source>
|
<source>${project.jdk.version}</source>
|
||||||
<target>1.8</target>
|
<target>${project.jdk.version}</target>
|
||||||
<encoding>UTF-8</encoding>
|
<encoding>UTF-8</encoding>
|
||||||
<compilerArgument>-parameters</compilerArgument>
|
<compilerArgument>-parameters</compilerArgument>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
@ -1,7 +1,9 @@
|
|||||||
package cc.carm.plugin.moeteleport;
|
package cc.carm.plugin.moeteleport;
|
||||||
|
|
||||||
|
import cc.carm.lib.configuration.core.source.ConfigurationProvider;
|
||||||
import cc.carm.lib.easyplugin.EasyPlugin;
|
import cc.carm.lib.easyplugin.EasyPlugin;
|
||||||
import cc.carm.lib.easyplugin.i18n.EasyPluginMessageProvider;
|
import cc.carm.lib.easyplugin.updatechecker.GHUpdateChecker;
|
||||||
|
import cc.carm.lib.mineconfiguration.bukkit.MineConfiguration;
|
||||||
import cc.carm.plugin.moeteleport.command.BackCommand;
|
import cc.carm.plugin.moeteleport.command.BackCommand;
|
||||||
import cc.carm.plugin.moeteleport.command.MoeTeleportCommand;
|
import cc.carm.plugin.moeteleport.command.MoeTeleportCommand;
|
||||||
import cc.carm.plugin.moeteleport.command.completer.HomeNameCompleter;
|
import cc.carm.plugin.moeteleport.command.completer.HomeNameCompleter;
|
||||||
@ -15,73 +17,47 @@ import cc.carm.plugin.moeteleport.command.home.HomeTpCommand;
|
|||||||
import cc.carm.plugin.moeteleport.command.tpa.TpHandleCommand;
|
import cc.carm.plugin.moeteleport.command.tpa.TpHandleCommand;
|
||||||
import cc.carm.plugin.moeteleport.command.tpa.TpaCommand;
|
import cc.carm.plugin.moeteleport.command.tpa.TpaCommand;
|
||||||
import cc.carm.plugin.moeteleport.command.warp.*;
|
import cc.carm.plugin.moeteleport.command.warp.*;
|
||||||
import cc.carm.plugin.moeteleport.configuration.PluginConfig;
|
import cc.carm.plugin.moeteleport.conf.PluginConfig;
|
||||||
|
import cc.carm.plugin.moeteleport.conf.PluginMessages;
|
||||||
|
import cc.carm.plugin.moeteleport.listener.CommandListener;
|
||||||
import cc.carm.plugin.moeteleport.listener.UserListener;
|
import cc.carm.plugin.moeteleport.listener.UserListener;
|
||||||
import cc.carm.plugin.moeteleport.manager.ConfigManager;
|
|
||||||
import cc.carm.plugin.moeteleport.manager.RequestManager;
|
import cc.carm.plugin.moeteleport.manager.RequestManager;
|
||||||
import cc.carm.plugin.moeteleport.manager.UserManager;
|
import cc.carm.plugin.moeteleport.manager.UserManager;
|
||||||
import cc.carm.plugin.moeteleport.manager.WarpManager;
|
import cc.carm.plugin.moeteleport.manager.WarpManager;
|
||||||
import cc.carm.plugin.moeteleport.storage.DataStorage;
|
import cc.carm.plugin.moeteleport.storage.DataStorage;
|
||||||
import cc.carm.plugin.moeteleport.storage.StorageMethod;
|
import cc.carm.plugin.moeteleport.storage.StorageMethod;
|
||||||
import cc.carm.plugin.moeteleport.util.JarResourceUtils;
|
|
||||||
import cc.carm.plugin.moeteleport.util.UpdateChecker;
|
|
||||||
import org.bstats.bukkit.Metrics;
|
import org.bstats.bukkit.Metrics;
|
||||||
import org.bstats.charts.SimplePie;
|
import org.bstats.charts.SimplePie;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.event.Listener;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
public class Main extends EasyPlugin {
|
public class Main extends EasyPlugin {
|
||||||
private static Main instance;
|
private static Main instance;
|
||||||
|
|
||||||
|
protected ConfigurationProvider<?> configProvider;
|
||||||
|
protected ConfigurationProvider<?> messageProvider;
|
||||||
|
|
||||||
|
|
||||||
protected DataStorage storage;
|
protected DataStorage storage;
|
||||||
protected WarpManager warpManager;
|
protected WarpManager warpManager;
|
||||||
protected UserManager userManager;
|
protected UserManager userManager;
|
||||||
protected RequestManager requestManager;
|
protected RequestManager requestManager;
|
||||||
|
|
||||||
public Main() {
|
public Main() {
|
||||||
super(new EasyPluginMessageProvider.zh_CN());
|
|
||||||
instance = this;
|
instance = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 注册监听器
|
|
||||||
*
|
|
||||||
* @param listener 监听器
|
|
||||||
*/
|
|
||||||
public static void regListener(Listener listener) {
|
|
||||||
Bukkit.getPluginManager().registerEvents(listener, getInstance());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void info(String... messages) {
|
|
||||||
getInstance().log(messages);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void severe(String... messages) {
|
|
||||||
getInstance().error(messages);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void debugging(String... messages) {
|
|
||||||
getInstance().debug(messages);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Main getInstance() {
|
|
||||||
return instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean initialize() {
|
protected boolean initialize() {
|
||||||
|
|
||||||
info("加载配置文件...");
|
log("加载插件配置文件...");
|
||||||
if (!ConfigManager.initConfig()) {
|
this.configProvider = MineConfiguration.from(this, "config.yml");
|
||||||
severe("配置文件初始化失败,请检查。");
|
this.configProvider.initialize(PluginConfig.class);
|
||||||
setEnabled(false);
|
|
||||||
return false;
|
this.messageProvider = MineConfiguration.from(this, "messages.yml");
|
||||||
}
|
this.messageProvider.initialize(PluginMessages.class);
|
||||||
|
|
||||||
info("初始化存储方式...");
|
info("初始化存储方式...");
|
||||||
StorageMethod storageMethod = StorageMethod.read(PluginConfig.STORAGE_METHOD.get());
|
StorageMethod storageMethod = StorageMethod.read(PluginConfig.STORAGE.METHOD.get());
|
||||||
|
|
||||||
try {
|
try {
|
||||||
info(" 正在使用 " + storageMethod.name() + " 进行数据存储");
|
info(" 正在使用 " + storageMethod.name() + " 进行数据存储");
|
||||||
@ -108,7 +84,8 @@ public class Main extends EasyPlugin {
|
|||||||
this.requestManager = new RequestManager(this);
|
this.requestManager = new RequestManager(this);
|
||||||
|
|
||||||
info("注册监听器...");
|
info("注册监听器...");
|
||||||
regListener(new UserListener());
|
registerListener(new UserListener());
|
||||||
|
registerListener(new CommandListener());
|
||||||
|
|
||||||
info("注册指令...");
|
info("注册指令...");
|
||||||
registerCommand("MoeTeleport", new MoeTeleportCommand());
|
registerCommand("MoeTeleport", new MoeTeleportCommand());
|
||||||
@ -131,15 +108,15 @@ public class Main extends EasyPlugin {
|
|||||||
registerCommand("setWarp", new WarpSetCommand());
|
registerCommand("setWarp", new WarpSetCommand());
|
||||||
registerCommand("delWarp", new WarpDelCommand(), new WarpNameCompleter(true));
|
registerCommand("delWarp", new WarpDelCommand(), new WarpNameCompleter(true));
|
||||||
|
|
||||||
if (PluginConfig.METRICS.get()) {
|
if (PluginConfig.METRICS.getNotNull()) {
|
||||||
info("启用统计数据...");
|
info("启用统计数据...");
|
||||||
Metrics metrics = new Metrics(this, 14459);
|
Metrics metrics = new Metrics(this, 14459);
|
||||||
metrics.addCustomChart(new SimplePie("storage_method", storageMethod::name));
|
metrics.addCustomChart(new SimplePie("storage_method", storageMethod::name));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PluginConfig.CHECK_UPDATE.get()) {
|
if (PluginConfig.CHECK_UPDATE.getNotNull()) {
|
||||||
info("开始检查更新...");
|
info("开始检查更新...");
|
||||||
UpdateChecker.checkUpdate();
|
getScheduler().runAsync(GHUpdateChecker.runner(this));
|
||||||
} else {
|
} else {
|
||||||
info("已禁用检查更新,跳过。");
|
info("已禁用检查更新,跳过。");
|
||||||
}
|
}
|
||||||
@ -167,15 +144,30 @@ public class Main extends EasyPlugin {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isDebugging() {
|
public boolean isDebugging() {
|
||||||
return PluginConfig.DEBUG.get();
|
return PluginConfig.DEBUG.getNotNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void outputInfo() {
|
public static void info(String... messages) {
|
||||||
String[] pluginInfo = JarResourceUtils.readResource(this.getResource("PLUGIN_INFO"));
|
getInstance().log(messages);
|
||||||
if (pluginInfo != null) {
|
|
||||||
Arrays.stream(pluginInfo).forEach(Main::info);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void severe(String... messages) {
|
||||||
|
getInstance().error(messages);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void debugging(String... messages) {
|
||||||
|
getInstance().debug(messages);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Main getInstance() {
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ConfigurationProvider<?> getConfigProvider() {
|
||||||
|
return configProvider;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ConfigurationProvider<?> getMessageProvider() {
|
||||||
|
return messageProvider;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,10 +8,6 @@ import cc.carm.plugin.moeteleport.storage.StorageMethod;
|
|||||||
|
|
||||||
public class MoeTeleport {
|
public class MoeTeleport {
|
||||||
|
|
||||||
public static void outputInfo() {
|
|
||||||
Main.getInstance().outputInfo();
|
|
||||||
}
|
|
||||||
|
|
||||||
public static DataStorage getStorage() {
|
public static DataStorage getStorage() {
|
||||||
return Main.getInstance().storage;
|
return Main.getInstance().storage;
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
package cc.carm.plugin.moeteleport.command;
|
package cc.carm.plugin.moeteleport.command;
|
||||||
|
|
||||||
import cc.carm.plugin.moeteleport.MoeTeleport;
|
import cc.carm.plugin.moeteleport.MoeTeleport;
|
||||||
import cc.carm.plugin.moeteleport.configuration.PluginMessages;
|
import cc.carm.plugin.moeteleport.conf.PluginMessages;
|
||||||
import cc.carm.plugin.moeteleport.manager.TeleportManager;
|
import cc.carm.plugin.moeteleport.manager.TeleportManager;
|
||||||
import cc.carm.plugin.moeteleport.model.UserData;
|
import cc.carm.plugin.moeteleport.storage.UserData;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.command.CommandExecutor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
@ -0,0 +1,25 @@
|
|||||||
|
package cc.carm.plugin.moeteleport.command;
|
||||||
|
|
||||||
|
import cc.carm.lib.easyplugin.command.CommandHandler;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
public class MainCommand extends CommandHandler {
|
||||||
|
|
||||||
|
public MainCommand(@NotNull JavaPlugin plugin) {
|
||||||
|
super(plugin);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void noArgs(CommandSender sender) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Void noPermission(CommandSender sender) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
package cc.carm.plugin.moeteleport.command;
|
||||||
|
|
||||||
|
import cc.carm.lib.easyplugin.command.SimpleCompleter;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.Collection;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class MoeCompleter extends SimpleCompleter {
|
||||||
|
|
||||||
|
public static @NotNull List<String> objects(@NotNull String input, Collection<?> objects) {
|
||||||
|
return objects(input, objects.size(), objects);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -1,6 +1,5 @@
|
|||||||
package cc.carm.plugin.moeteleport.command;
|
package cc.carm.plugin.moeteleport.command;
|
||||||
|
|
||||||
import cc.carm.plugin.moeteleport.manager.ConfigManager;
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.command.CommandExecutor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package cc.carm.plugin.moeteleport.command.completer;
|
package cc.carm.plugin.moeteleport.command.completer;
|
||||||
|
|
||||||
import cc.carm.plugin.moeteleport.MoeTeleport;
|
import cc.carm.plugin.moeteleport.MoeTeleport;
|
||||||
import cc.carm.plugin.moeteleport.model.UserData;
|
import cc.carm.plugin.moeteleport.storage.UserData;
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
package cc.carm.plugin.moeteleport.command.home;
|
package cc.carm.plugin.moeteleport.command.home;
|
||||||
|
|
||||||
import cc.carm.plugin.moeteleport.MoeTeleport;
|
import cc.carm.plugin.moeteleport.MoeTeleport;
|
||||||
import cc.carm.plugin.moeteleport.configuration.PluginMessages;
|
import cc.carm.plugin.moeteleport.conf.PluginMessages;
|
||||||
import cc.carm.plugin.moeteleport.configuration.location.DataLocation;
|
import cc.carm.plugin.moeteleport.conf.location.DataLocation;
|
||||||
import cc.carm.plugin.moeteleport.model.UserData;
|
import cc.carm.plugin.moeteleport.storage.UserData;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.command.CommandExecutor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package cc.carm.plugin.moeteleport.command.home;
|
package cc.carm.plugin.moeteleport.command.home;
|
||||||
|
|
||||||
import cc.carm.plugin.moeteleport.MoeTeleport;
|
import cc.carm.plugin.moeteleport.MoeTeleport;
|
||||||
import cc.carm.plugin.moeteleport.configuration.PluginMessages;
|
import cc.carm.plugin.moeteleport.conf.PluginMessages;
|
||||||
import cc.carm.plugin.moeteleport.model.UserData;
|
import cc.carm.plugin.moeteleport.storage.UserData;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.command.CommandExecutor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
package cc.carm.plugin.moeteleport.command.home;
|
package cc.carm.plugin.moeteleport.command.home;
|
||||||
|
|
||||||
import cc.carm.plugin.moeteleport.MoeTeleport;
|
import cc.carm.plugin.moeteleport.MoeTeleport;
|
||||||
import cc.carm.plugin.moeteleport.configuration.PluginMessages;
|
import cc.carm.plugin.moeteleport.conf.PluginMessages;
|
||||||
import cc.carm.plugin.moeteleport.configuration.location.DataLocation;
|
import cc.carm.plugin.moeteleport.conf.location.DataLocation;
|
||||||
import cc.carm.plugin.moeteleport.model.UserData;
|
import cc.carm.plugin.moeteleport.storage.UserData;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.command.CommandExecutor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
package cc.carm.plugin.moeteleport.command.home;
|
package cc.carm.plugin.moeteleport.command.home;
|
||||||
|
|
||||||
import cc.carm.plugin.moeteleport.MoeTeleport;
|
import cc.carm.plugin.moeteleport.MoeTeleport;
|
||||||
import cc.carm.plugin.moeteleport.configuration.PluginMessages;
|
import cc.carm.plugin.moeteleport.conf.PluginMessages;
|
||||||
import cc.carm.plugin.moeteleport.configuration.location.DataLocation;
|
import cc.carm.plugin.moeteleport.conf.location.DataLocation;
|
||||||
import cc.carm.plugin.moeteleport.manager.TeleportManager;
|
import cc.carm.plugin.moeteleport.manager.TeleportManager;
|
||||||
import cc.carm.plugin.moeteleport.model.UserData;
|
import cc.carm.plugin.moeteleport.storage.UserData;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.command.CommandExecutor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
package cc.carm.plugin.moeteleport.command.tpa;
|
package cc.carm.plugin.moeteleport.command.tpa;
|
||||||
|
|
||||||
import cc.carm.plugin.moeteleport.MoeTeleport;
|
import cc.carm.plugin.moeteleport.MoeTeleport;
|
||||||
import cc.carm.plugin.moeteleport.configuration.PluginMessages;
|
import cc.carm.plugin.moeteleport.conf.PluginMessages;
|
||||||
import cc.carm.plugin.moeteleport.model.TeleportRequest;
|
import cc.carm.plugin.moeteleport.model.TeleportRequest;
|
||||||
import cc.carm.plugin.moeteleport.model.UserData;
|
import cc.carm.plugin.moeteleport.storage.UserData;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package cc.carm.plugin.moeteleport.command.tpa;
|
package cc.carm.plugin.moeteleport.command.tpa;
|
||||||
|
|
||||||
import cc.carm.plugin.moeteleport.MoeTeleport;
|
import cc.carm.plugin.moeteleport.MoeTeleport;
|
||||||
import cc.carm.plugin.moeteleport.configuration.PluginMessages;
|
import cc.carm.plugin.moeteleport.conf.PluginMessages;
|
||||||
import cc.carm.plugin.moeteleport.model.TeleportRequest;
|
import cc.carm.plugin.moeteleport.model.TeleportRequest;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package cc.carm.plugin.moeteleport.command.warp;
|
package cc.carm.plugin.moeteleport.command.warp;
|
||||||
|
|
||||||
import cc.carm.plugin.moeteleport.MoeTeleport;
|
import cc.carm.plugin.moeteleport.MoeTeleport;
|
||||||
import cc.carm.plugin.moeteleport.configuration.PluginMessages;
|
import cc.carm.plugin.moeteleport.conf.PluginMessages;
|
||||||
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package cc.carm.plugin.moeteleport.command.warp;
|
package cc.carm.plugin.moeteleport.command.warp;
|
||||||
|
|
||||||
import cc.carm.plugin.moeteleport.MoeTeleport;
|
import cc.carm.plugin.moeteleport.MoeTeleport;
|
||||||
import cc.carm.plugin.moeteleport.configuration.PluginMessages;
|
import cc.carm.plugin.moeteleport.conf.PluginMessages;
|
||||||
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package cc.carm.plugin.moeteleport.command.warp;
|
package cc.carm.plugin.moeteleport.command.warp;
|
||||||
|
|
||||||
import cc.carm.plugin.moeteleport.MoeTeleport;
|
import cc.carm.plugin.moeteleport.MoeTeleport;
|
||||||
import cc.carm.plugin.moeteleport.configuration.PluginMessages;
|
import cc.carm.plugin.moeteleport.conf.PluginMessages;
|
||||||
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package cc.carm.plugin.moeteleport.command.warp;
|
package cc.carm.plugin.moeteleport.command.warp;
|
||||||
|
|
||||||
import cc.carm.plugin.moeteleport.MoeTeleport;
|
import cc.carm.plugin.moeteleport.MoeTeleport;
|
||||||
import cc.carm.plugin.moeteleport.configuration.PluginMessages;
|
import cc.carm.plugin.moeteleport.conf.PluginMessages;
|
||||||
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.command.CommandExecutor;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package cc.carm.plugin.moeteleport.command.warp;
|
package cc.carm.plugin.moeteleport.command.warp;
|
||||||
|
|
||||||
import cc.carm.plugin.moeteleport.MoeTeleport;
|
import cc.carm.plugin.moeteleport.MoeTeleport;
|
||||||
import cc.carm.plugin.moeteleport.configuration.PluginMessages;
|
import cc.carm.plugin.moeteleport.conf.PluginMessages;
|
||||||
import cc.carm.plugin.moeteleport.manager.TeleportManager;
|
import cc.carm.plugin.moeteleport.manager.TeleportManager;
|
||||||
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
|
128
src/main/java/cc/carm/plugin/moeteleport/conf/PluginConfig.java
Normal file
128
src/main/java/cc/carm/plugin/moeteleport/conf/PluginConfig.java
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
package cc.carm.plugin.moeteleport.conf;
|
||||||
|
|
||||||
|
|
||||||
|
import cc.carm.lib.configuration.core.ConfigurationRoot;
|
||||||
|
import cc.carm.lib.configuration.core.annotation.HeaderComment;
|
||||||
|
import cc.carm.lib.configuration.core.util.MapFactory;
|
||||||
|
import cc.carm.lib.configuration.core.value.ConfigValue;
|
||||||
|
import cc.carm.lib.configuration.core.value.type.ConfiguredList;
|
||||||
|
import cc.carm.lib.configuration.core.value.type.ConfiguredMap;
|
||||||
|
import cc.carm.lib.configuration.core.value.type.ConfiguredValue;
|
||||||
|
|
||||||
|
public class PluginConfig extends ConfigurationRoot {
|
||||||
|
|
||||||
|
public static final ConfigValue<Boolean> DEBUG = ConfiguredValue.of(Boolean.class, false);
|
||||||
|
|
||||||
|
@HeaderComment({
|
||||||
|
"统计数据设定",
|
||||||
|
"该选项用于帮助开发者统计插件版本与使用情况,且绝不会影响性能与使用体验。",
|
||||||
|
"当然,您也可以选择在这里关闭,或在plugins/bStats下的配置文件中关闭。"
|
||||||
|
})
|
||||||
|
public static final ConfigValue<Boolean> METRICS = ConfiguredValue.of(Boolean.class, true);
|
||||||
|
|
||||||
|
@HeaderComment({
|
||||||
|
"检查更新设定",
|
||||||
|
"该选项用于插件判断是否要检查更新,若您不希望插件检查更新并提示您,可以选择关闭。",
|
||||||
|
"检查更新为异步操作,绝不会影响性能与使用体验。"
|
||||||
|
})
|
||||||
|
public static final ConfigValue<Boolean> CHECK_UPDATE = ConfiguredValue.of(Boolean.class, true);
|
||||||
|
|
||||||
|
@HeaderComment({"存储相关配置", "注意:存储配置不会通过重载指令生效,如有修改请重新启动服务器。"})
|
||||||
|
public static final class STORAGE extends ConfigurationRoot {
|
||||||
|
|
||||||
|
@HeaderComment("存储方式,可选 [ yaml | json | mysql | Essential(须安装ess插件) | CMI(须安装CMI插件) | custom(自定义,须重写功能) ]")
|
||||||
|
public static final ConfigValue<String> METHOD = ConfiguredValue.of(String.class, "YAML");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@HeaderComment("传送的相关配置")
|
||||||
|
public static final class TELEPORTATION extends ConfigurationRoot {
|
||||||
|
|
||||||
|
@HeaderComment("危险的方块类型,将判断目的地脚下的方块的类型是否在这个列表中")
|
||||||
|
public static final ConfiguredList<String> DANGEROUS_TYPES = ConfiguredList.builder(String.class)
|
||||||
|
.fromString()
|
||||||
|
.defaults("LAVA", "AIR")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
@HeaderComment("传送的引导时间,单位为秒")
|
||||||
|
public static final ConfigValue<Integer> WAIT_TIME = ConfiguredValue.of(Integer.class, 3);
|
||||||
|
|
||||||
|
@HeaderComment("打断传送引导的方式")
|
||||||
|
public static final class INTERRUPT {
|
||||||
|
|
||||||
|
@HeaderComment("在传送引导时是否会因为移动打断传送")
|
||||||
|
public static final ConfigValue<Boolean> MOVE = ConfiguredValue.of(Boolean.class, true);
|
||||||
|
|
||||||
|
@HeaderComment("在传送引导时是否会因为攻击/被攻击打断传送")
|
||||||
|
public static final ConfigValue<Boolean> ATTACK = ConfiguredValue.of(Boolean.class, true);
|
||||||
|
|
||||||
|
@HeaderComment("在传送引导时是否会因为下蹲打断传送")
|
||||||
|
public static final ConfigValue<Boolean> SNAKE = ConfiguredValue.of(Boolean.class, false);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@HeaderComment("传送引导特效与音效")
|
||||||
|
public static final ConfigValue<Boolean> EFFECTS = ConfiguredValue.of(Boolean.class, true);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@HeaderComment("传送请求的相关配置")
|
||||||
|
public static final class REQUEST extends ConfigurationRoot {
|
||||||
|
|
||||||
|
@HeaderComment("请求的过期时间,单位为秒")
|
||||||
|
public static final ConfigValue<Integer> EXPIRE_TIME = ConfiguredValue.of(Integer.class, 30);
|
||||||
|
|
||||||
|
@HeaderComment("一个玩家同时能发出的最大请求数量")
|
||||||
|
public static final ConfigValue<Integer> MAX = ConfiguredValue.of(Integer.class, 3);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@HeaderComment("返回上一传送点的相关配置")
|
||||||
|
public static final class BACK extends ConfigurationRoot {
|
||||||
|
|
||||||
|
@HeaderComment({"返回死亡点", "开启后将允许玩家输入 /back 返回死亡地点。"})
|
||||||
|
public static final ConfigValue<Boolean> DEATH = ConfiguredValue.of(Boolean.class, true);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@HeaderComment("“家”功能相关配置")
|
||||||
|
public static final class HOMES extends ConfigurationRoot {
|
||||||
|
|
||||||
|
@HeaderComment("是否启用家功能")
|
||||||
|
public static final ConfigValue<Boolean> ENABLE = ConfiguredValue.of(Boolean.class, false);
|
||||||
|
|
||||||
|
@HeaderComment("普通玩家可设置多少家")
|
||||||
|
public static final ConfigValue<Integer> DEFAULTS = ConfiguredValue.of(Integer.class, 2);
|
||||||
|
|
||||||
|
@HeaderComment("设定权限对应的可设置家的数量。 (数量: 权限)")
|
||||||
|
public static final ConfiguredMap<Integer, String> PERMISSIONS = ConfiguredMap
|
||||||
|
.builder(Integer.class, String.class)
|
||||||
|
.fromString()
|
||||||
|
.parseKey(Integer::parseInt).serializeKey(Object::toString)
|
||||||
|
.defaults(MapFactory.linkedMap(10, "MoeTeleport.vip").build())
|
||||||
|
.build();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@HeaderComment("“地标”功能相关配置")
|
||||||
|
public static final class WARPS extends ConfigurationRoot {
|
||||||
|
|
||||||
|
@HeaderComment("是否启用地标功能")
|
||||||
|
public static final ConfigValue<Boolean> ENABLE = ConfiguredValue.of(Boolean.class, false);
|
||||||
|
|
||||||
|
@HeaderComment("普通玩家可设置多少地标")
|
||||||
|
public static final ConfigValue<Integer> DEFAULTS = ConfiguredValue.of(Integer.class, 0);
|
||||||
|
|
||||||
|
@HeaderComment("设定权限对应的可设置地标的数量。 (数量: 权限)")
|
||||||
|
public static final ConfiguredMap<Integer, String> PERMISSIONS = ConfiguredMap
|
||||||
|
.builder(Integer.class, String.class)
|
||||||
|
.fromString()
|
||||||
|
.parseKey(Integer::parseInt).serializeKey(Object::toString)
|
||||||
|
.defaults(MapFactory.linkedMap(2, "MoeTeleport.vip").build())
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -1,38 +1,66 @@
|
|||||||
package cc.carm.plugin.moeteleport.configuration;
|
package cc.carm.plugin.moeteleport.conf;
|
||||||
|
|
||||||
import cc.carm.lib.easyplugin.configuration.language.EasyMessageList;
|
import cc.carm.lib.configuration.core.ConfigurationRoot;
|
||||||
import cc.carm.lib.easyplugin.configuration.language.MessagesRoot;
|
import cc.carm.lib.mineconfiguration.bukkit.builder.message.CraftMessageListBuilder;
|
||||||
import cc.carm.plugin.moeteleport.configuration.messages.MoeMessageList;
|
import cc.carm.lib.mineconfiguration.bukkit.builder.message.CraftMessageValueBuilder;
|
||||||
|
import cc.carm.lib.mineconfiguration.bukkit.value.ConfiguredMessage;
|
||||||
|
import cc.carm.lib.mineconfiguration.bukkit.value.ConfiguredMessageList;
|
||||||
|
import de.themoep.minedown.MineDown;
|
||||||
|
import me.clip.placeholderapi.PlaceholderAPI;
|
||||||
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public class PluginMessages extends MessagesRoot {
|
import java.util.function.BiFunction;
|
||||||
|
|
||||||
public static final EasyMessageList NOT_ONLINE = MoeMessageList.builder().contents(
|
public class PluginMessages extends ConfigurationRoot {
|
||||||
|
|
||||||
|
public static @NotNull CraftMessageListBuilder<BaseComponent[]> list() {
|
||||||
|
return ConfiguredMessageList.create(getParser())
|
||||||
|
.whenSend((sender, message) -> message.forEach(m -> sender.spigot().sendMessage(m)));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static @NotNull CraftMessageValueBuilder<BaseComponent[]> value() {
|
||||||
|
return ConfiguredMessage.create(getParser())
|
||||||
|
.whenSend((sender, message) -> sender.spigot().sendMessage(message));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static @NotNull BiFunction<CommandSender, String, BaseComponent[]> getParser() {
|
||||||
|
return (sender, message) -> {
|
||||||
|
if (sender instanceof Player) message = PlaceholderAPI.setPlaceholders((Player) sender, message);
|
||||||
|
return MineDown.parse(ColorParser.parse(message));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public static final ConfiguredMessageList<BaseComponent[]> NOT_ONLINE = list().defaults(
|
||||||
"&f目标玩家并不在线,无法发送请求。"
|
"&f目标玩家并不在线,无法发送请求。"
|
||||||
).build();
|
).build();
|
||||||
|
|
||||||
public static class Back {
|
public static class Back {
|
||||||
|
|
||||||
public static final EasyMessageList NO_LAST_LOCATION = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> NO_LAST_LOCATION = list().defaults(
|
||||||
"&f您当前没有进行任何传送,无法返回上个地点。"
|
"&f您当前没有进行任何传送,无法返回上个地点。"
|
||||||
).build();
|
).build();
|
||||||
|
|
||||||
public static final EasyMessageList DEATH_MESSAGE = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> DEATH_MESSAGE = list().defaults(
|
||||||
"&f您可以输入 &5/back &f或 [&d&l点击这里](show_text=点击返回到死亡地点 run_command=/moeteleport:back) &f返回您的死亡地点。"
|
"&f您可以输入 &5/back &f或 [&d&l点击这里](show_text=点击返回到死亡地点 run_command=/moeteleport:back) &f返回您的死亡地点。"
|
||||||
).build();
|
).build();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Teleport {
|
public static class Teleport {
|
||||||
public static final EasyMessageList TELEPORTING = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> TELEPORTING = list().defaults(
|
||||||
"&f正在将您传送到 &d%(location) &f..."
|
"&f正在将您传送到 &d%(location) &f..."
|
||||||
).params("location").build();
|
).params("location").build();
|
||||||
|
|
||||||
public static final EasyMessageList NOT_SAFE = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> NOT_SAFE = list().defaults(
|
||||||
"&f目标地点 &d%(location) &f并不安全,因此传送被取消。",
|
"&f目标地点 &d%(location) &f并不安全,因此传送被取消。",
|
||||||
"&7如需传送,请告知请求者到达安全位置后重新发送传送请求。"
|
"&7如需传送,请告知请求者到达安全位置后重新发送传送请求。"
|
||||||
).params("location").build();
|
).params("location").build();
|
||||||
|
|
||||||
public static final EasyMessageList NOT_AVAILABLE = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> NOT_AVAILABLE = list().defaults(
|
||||||
"&f目标地点暂时无法前往,传送被取消。"
|
"&f目标地点暂时无法前往,传送被取消。"
|
||||||
).build();
|
).build();
|
||||||
|
|
||||||
@ -40,68 +68,68 @@ public class PluginMessages extends MessagesRoot {
|
|||||||
|
|
||||||
public static class Requests {
|
public static class Requests {
|
||||||
|
|
||||||
public static final EasyMessageList SELF = MoeMessageList.builder().contents("&f您不能向自己发送请求。").build();
|
public static final ConfiguredMessageList<BaseComponent[]> SELF = list().defaults("&f您不能向自己发送请求。").build();
|
||||||
|
|
||||||
public static final EasyMessageList OFFLINE = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> OFFLINE = list().defaults(
|
||||||
"&d%(player) &f离线,相关请求已自动取消。"
|
"&d%(player) &f离线,相关请求已自动取消。"
|
||||||
).params("player").build();
|
).params("player").build();
|
||||||
|
|
||||||
public static final EasyMessageList MULTI = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> MULTI = list().defaults(
|
||||||
"&f您当前有&d%(num)条请求&f待处理,请输入 &5/%(command) <玩家名> &f决定回应谁的请求。",
|
"&f您当前有&d%(num)条请求&f待处理,请输入 &5/%(command) <玩家名> &f决定回应谁的请求。",
|
||||||
"&f您也可以再次输入 &5/%(command) &f快速回应最近的一条请求。"
|
"&f您也可以再次输入 &5/%(command) &f快速回应最近的一条请求。"
|
||||||
).params("num", "command").build();
|
).params("num", "command").build();
|
||||||
|
|
||||||
|
|
||||||
public static final EasyMessageList EMPTY_REQUESTS = MoeMessageList.builder()
|
public static final ConfiguredMessageList<BaseComponent[]> EMPTY_REQUESTS = list()
|
||||||
.contents("&f您当前没有任何待处理的传送请求。")
|
.defaults("&f您当前没有任何待处理的传送请求。")
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final EasyMessageList NO_REQUEST_FROM = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> NO_REQUEST_FROM = list().defaults(
|
||||||
"&f您当前没有收到来自 &d%(player) &f的传送请求。"
|
"&f您当前没有收到来自 &d%(player) &f的传送请求。"
|
||||||
).params("player").build();
|
).params("player").build();
|
||||||
|
|
||||||
public static final EasyMessageList SENT = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> SENT = list().defaults(
|
||||||
"&f成功向玩家 &d%(player) &f发送传送请求,对方有 &5%(expire)秒 &f的时间回应该请求。"
|
"&f成功向玩家 &d%(player) &f发送传送请求,对方有 &5%(expire)秒 &f的时间回应该请求。"
|
||||||
).params("player", "expire").build();
|
).params("player", "expire").build();
|
||||||
|
|
||||||
public static final EasyMessageList DUPLICATE = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> DUPLICATE = list().defaults(
|
||||||
"&f您已经向 &d%(player) &f发送过传送请求,对方仍有 &5%(expire)秒 &f的时间回应该请求。"
|
"&f您已经向 &d%(player) &f发送过传送请求,对方仍有 &5%(expire)秒 &f的时间回应该请求。"
|
||||||
).params("player", "expire").build();
|
).params("player", "expire").build();
|
||||||
|
|
||||||
public static final EasyMessageList RECEIVED_TP_HERE = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> RECEIVED_TP_HERE = list().defaults(
|
||||||
"&d%(player) &f请求传送到您身边,您有 &5%(expire)秒 &f的时间回应。",
|
"&d%(player) &f请求传送到您身边,您有 &5%(expire)秒 &f的时间回应。",
|
||||||
" [&a&l[点击同意]](show_text=点击同意请求 run_command=/moeteleport:tpaccept %(player)) &f或输入 &5/tpAccept &f同意该请求。",
|
" [&a&l[点击同意]](show_text=点击同意请求 run_command=/moeteleport:tpaccept %(player)) &f或输入 &5/tpAccept &f同意该请求。",
|
||||||
" [&c&l[点击拒绝]](show_text=点击拒绝请求 run_command=/moeteleport:tpdeny %(player)) &f或输入 &5/tpDeny &f拒绝该请求。"
|
" [&c&l[点击拒绝]](show_text=点击拒绝请求 run_command=/moeteleport:tpdeny %(player)) &f或输入 &5/tpDeny &f拒绝该请求。"
|
||||||
).params("player", "expire").build();
|
).params("player", "expire").build();
|
||||||
|
|
||||||
public static final EasyMessageList RECEIVED_TP_TO = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> RECEIVED_TP_TO = list().defaults(
|
||||||
"&d%(player) &f请求传送您到Ta身边,您有 &5%(expire)秒 &f的时间回应。",
|
"&d%(player) &f请求传送您到Ta身边,您有 &5%(expire)秒 &f的时间回应。",
|
||||||
" [&a&l[点击同意]](show_text=点击同意请求 run_command=/moeteleport:tpaccept %(player)) &f或输入 &5/tpAccept &f同意该请求。",
|
" [&a&l[点击同意]](show_text=点击同意请求 run_command=/moeteleport:tpaccept %(player)) &f或输入 &5/tpAccept &f同意该请求。",
|
||||||
" [&c&l[点击拒绝]](show_text=点击拒绝请求 run_command=/moeteleport:tpdeny %(player)) &f或输入 &5/tpDeny &f拒绝该请求。"
|
" [&c&l[点击拒绝]](show_text=点击拒绝请求 run_command=/moeteleport:tpdeny %(player)) &f或输入 &5/tpDeny &f拒绝该请求。"
|
||||||
).params("player", "expire").build();
|
).params("player", "expire").build();
|
||||||
|
|
||||||
|
|
||||||
public static final EasyMessageList ACCEPTED = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> ACCEPTED = list().defaults(
|
||||||
"&f您同意了 &d%(player) &f的传送请求。"
|
"&f您同意了 &d%(player) &f的传送请求。"
|
||||||
).params("player").build();
|
).params("player").build();
|
||||||
|
|
||||||
public static final EasyMessageList DENIED = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> DENIED = list().defaults(
|
||||||
"&f您&d拒绝&f了 &d%(player) &f的传送请求。"
|
"&f您&d拒绝&f了 &d%(player) &f的传送请求。"
|
||||||
).params("player").build();
|
).params("player").build();
|
||||||
|
|
||||||
public static final EasyMessageList WAS_ACCEPTED = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> WAS_ACCEPTED = list().defaults(
|
||||||
"&d%(player) &f同意了您的传送请求。"
|
"&d%(player) &f同意了您的传送请求。"
|
||||||
).params("player").build();
|
).params("player").build();
|
||||||
|
|
||||||
public static final EasyMessageList WAS_DENIED = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> WAS_DENIED = list().defaults(
|
||||||
"&d%(player) &f拒绝了您的传送请求。"
|
"&d%(player) &f拒绝了您的传送请求。"
|
||||||
).params("player").build();
|
).params("player").build();
|
||||||
|
|
||||||
public static final EasyMessageList SENT_TIMEOUT = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> SENT_TIMEOUT = list().defaults(
|
||||||
"&f发往 &d%(player) &f的传送请求已超时。"
|
"&f发往 &d%(player) &f的传送请求已超时。"
|
||||||
).params("player").build();
|
).params("player").build();
|
||||||
|
|
||||||
public static final EasyMessageList RECEIVED_TIMEOUT = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> RECEIVED_TIMEOUT = list().defaults(
|
||||||
"&f来自 &d%(player) &f的传送请求已超时。"
|
"&f来自 &d%(player) &f的传送请求已超时。"
|
||||||
).params("player").build();
|
).params("player").build();
|
||||||
|
|
||||||
@ -110,41 +138,41 @@ public class PluginMessages extends MessagesRoot {
|
|||||||
|
|
||||||
public static class Home {
|
public static class Home {
|
||||||
|
|
||||||
public static final EasyMessageList NAME_TOO_LONG = MoeMessageList.builder()
|
public static final ConfiguredMessageList<BaseComponent[]> NAME_TOO_LONG = list()
|
||||||
.contents("&f您所输入的家的名字太长,家的名称不应当超过 &d32 &f个字符。")
|
.defaults("&f您所输入的家的名字太长,家的名称不应当超过 &d32 &f个字符。")
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final EasyMessageList OVER_LIMIT = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> OVER_LIMIT = list().defaults(
|
||||||
"&f您最多只能设置 &d%(max) &f个家传送点!",
|
"&f您最多只能设置 &d%(max) &f个家传送点!",
|
||||||
"&7可以输入 &5/delHome <家名称> &7删除之前的家传送点,",
|
"&7可以输入 &5/delHome <家名称> &7删除之前的家传送点,",
|
||||||
"&7或输入 &5/setHome <家名称> &7覆盖之前的家传送点。"
|
"&7或输入 &5/setHome <家名称> &7覆盖之前的家传送点。"
|
||||||
).params("max").build();
|
).params("max").build();
|
||||||
|
|
||||||
public static final EasyMessageList NOT_FOUND = MoeMessageList.builder()
|
public static final ConfiguredMessageList<BaseComponent[]> NOT_FOUND = list()
|
||||||
.contents("&f您还没有设置这个家,请先输入 &5/setHome <家名称> &f设置一个吧!")
|
.defaults("&f您还没有设置这个家,请先输入 &5/setHome <家名称> &f设置一个吧!")
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final EasyMessageList SET = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> SET = list().defaults(
|
||||||
"&f成功设定名为 &d%(name) &f的家传送点。"
|
"&f成功设定名为 &d%(name) &f的家传送点。"
|
||||||
).params("name").build();
|
).params("name").build();
|
||||||
|
|
||||||
public static final EasyMessageList OVERRIDE = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> OVERRIDE = list().defaults(
|
||||||
"&f成功覆盖名为 &d%(name) &f的家传送点。",
|
"&f成功覆盖名为 &d%(name) &f的家传送点。",
|
||||||
"&8原先位置为 &5%(location) &8。"
|
"&8原先位置为 &5%(location) &8。"
|
||||||
).params("name", "location").build();
|
).params("name", "location").build();
|
||||||
|
|
||||||
public static final EasyMessageList REMOVED = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> REMOVED = list().defaults(
|
||||||
"&f成功移除名为 &d%(name) &f的家传送点。",
|
"&f成功移除名为 &d%(name) &f的家传送点。",
|
||||||
"&8原先位置为 &5%(location) &8。"
|
"&8原先位置为 &5%(location) &8。"
|
||||||
).params("name", "location").build();
|
).params("name", "location").build();
|
||||||
|
|
||||||
public static class List {
|
public static class List {
|
||||||
|
|
||||||
public static final EasyMessageList HEADER = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> HEADER = list().defaults(
|
||||||
"&f您当前设定的所有家:"
|
"&f您当前设定的所有家:"
|
||||||
).build();
|
).build();
|
||||||
|
|
||||||
public static final EasyMessageList OBJECT = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> OBJECT = list().defaults(
|
||||||
"&8# &f%(id) &d%(location) [&7✈](show_text=点击返回家 %(id) run_command=/moeteleport:home %(id))"
|
"&8# &f%(id) &d%(location) [&7✈](show_text=点击返回家 %(id) run_command=/moeteleport:home %(id))"
|
||||||
).params("id", "location").build();
|
).params("id", "location").build();
|
||||||
|
|
||||||
@ -154,46 +182,46 @@ public class PluginMessages extends MessagesRoot {
|
|||||||
|
|
||||||
public static class Warp {
|
public static class Warp {
|
||||||
|
|
||||||
public static final EasyMessageList EMPTY = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> EMPTY = list().defaults(
|
||||||
"&f当前服务器暂无任何地标点,快设置一个吧!"
|
"&f当前服务器暂无任何地标点,快设置一个吧!"
|
||||||
).build();
|
).build();
|
||||||
|
|
||||||
public static final EasyMessageList NOT_OWNER = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> NOT_OWNER = list().defaults(
|
||||||
"&f您不是地标 &d%(name) &f的创建者,无法进行此操作。"
|
"&f您不是地标 &d%(name) &f的创建者,无法进行此操作。"
|
||||||
).params("name").build();
|
).params("name").build();
|
||||||
|
|
||||||
public static final EasyMessageList NOT_FOUND = MoeMessageList.builder()
|
public static final ConfiguredMessageList<BaseComponent[]> NOT_FOUND = list()
|
||||||
.contents("&f目前暂不存在该地标。")
|
.defaults("&f目前暂不存在该地标。")
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final EasyMessageList NAME_TOO_LONG = MoeMessageList.builder()
|
public static final ConfiguredMessageList<BaseComponent[]> NAME_TOO_LONG = list()
|
||||||
.contents("&f您所输入的家的名字太长,地标的名称不应当超过 &d16 &f个字符。")
|
.defaults("&f您所输入的家的名字太长,地标的名称不应当超过 &d16 &f个字符。")
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
public static final EasyMessageList OVER_LIMIT = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> OVER_LIMIT = list().defaults(
|
||||||
"&f您最多只能设置 &d%(max) &f个地标传送点!",
|
"&f您最多只能设置 &d%(max) &f个地标传送点!",
|
||||||
"&7可以输入 &5/delWarp <地标名称> &7删除之前的地标传送点,",
|
"&7可以输入 &5/delWarp <地标名称> &7删除之前的地标传送点,",
|
||||||
"&7或输入 &5/setWarp <地标名称> &7覆盖之前的地标传送点。"
|
"&7或输入 &5/setWarp <地标名称> &7覆盖之前的地标传送点。"
|
||||||
).params("max").build();
|
).params("max").build();
|
||||||
|
|
||||||
public static final EasyMessageList INFO_LOCATION = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> INFO_LOCATION = list().defaults(
|
||||||
"&f地标点 &d%(name) &f所在位置为 &5%(location) &f。[&7✈](show_text=点击前往&d %(name) run_command=/moeteleport:warp %(name))"
|
"&f地标点 &d%(name) &f所在位置为 &5%(location) &f。[&7✈](show_text=点击前往&d %(name) run_command=/moeteleport:warp %(name))"
|
||||||
).params("name", "location").build();
|
).params("name", "location").build();
|
||||||
|
|
||||||
public static final EasyMessageList INFO_FULL = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> INFO_FULL = list().defaults(
|
||||||
"&f地标点 &d%(name) &f由 &5%(owner) &f创建,所在位置为 &d%(location) &f。[&7✈](show_text=点击前往&d %(name) run_command=/moeteleport:warp %(name))"
|
"&f地标点 &d%(name) &f由 &5%(owner) &f创建,所在位置为 &d%(location) &f。[&7✈](show_text=点击前往&d %(name) run_command=/moeteleport:warp %(name))"
|
||||||
).params("name", "owner", "location").build();
|
).params("name", "owner", "location").build();
|
||||||
|
|
||||||
public static final EasyMessageList SET = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> SET = list().defaults(
|
||||||
"&f成功设定名为 &d%(name) &f的地标传送点。"
|
"&f成功设定名为 &d%(name) &f的地标传送点。"
|
||||||
).params("name").build();
|
).params("name").build();
|
||||||
|
|
||||||
public static final EasyMessageList OVERRIDE = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> OVERRIDE = list().defaults(
|
||||||
"&f成功覆盖名为 &d%(name) &f的地标传送点。",
|
"&f成功覆盖名为 &d%(name) &f的地标传送点。",
|
||||||
"&8原先位置为 &5%(location) &8。"
|
"&8原先位置为 &5%(location) &8。"
|
||||||
).params("name", "location").build();
|
).params("name", "location").build();
|
||||||
|
|
||||||
public static final EasyMessageList REMOVED = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> REMOVED = list().defaults(
|
||||||
"&f成功移除名为 &d%(name) &f的地标传送点。",
|
"&f成功移除名为 &d%(name) &f的地标传送点。",
|
||||||
"&8原先位置为 &5%(location) &8。"
|
"&8原先位置为 &5%(location) &8。"
|
||||||
).params("name", "location").build();
|
).params("name", "location").build();
|
||||||
@ -201,16 +229,16 @@ public class PluginMessages extends MessagesRoot {
|
|||||||
|
|
||||||
public static class List {
|
public static class List {
|
||||||
|
|
||||||
public static final EasyMessageList HEADER = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> HEADER = list().defaults(
|
||||||
"&f当前地标列表 &7(第&f%(current)&8/%(max)&7页):"
|
"&f当前地标列表 &7(第&f%(current)&8/%(max)&7页):"
|
||||||
).params("current", "max").build();
|
).params("current", "max").build();
|
||||||
|
|
||||||
public static final EasyMessageList OBJECT = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> OBJECT = list().defaults(
|
||||||
"&8# &f%(id) &7[由%(owner)创建]",
|
"&8# &f%(id) &7[由%(owner)创建]",
|
||||||
"&8- &d%(location) [&7✈](show_text=点击前往&d %(id) run_command=/moeteleport:warp %(id))"
|
"&8- &d%(location) [&7✈](show_text=点击前往&d %(id) run_command=/moeteleport:warp %(id))"
|
||||||
).params("id", "owner", "location").build();
|
).params("id", "owner", "location").build();
|
||||||
|
|
||||||
public static final EasyMessageList OBJECT_NO_OWNER = MoeMessageList.builder().contents(
|
public static final ConfiguredMessageList<BaseComponent[]> OBJECT_NO_OWNER = list().defaults(
|
||||||
"&8# &f%(id)",
|
"&8# &f%(id)",
|
||||||
"&8- &d%(location) [&7✈](show_text=点击前往&d %(id) run_command=/moeteleport:warp %(id))"
|
"&8- &d%(location) [&7✈](show_text=点击前往&d %(id) run_command=/moeteleport:warp %(id))"
|
||||||
).params("id", "location").build();
|
).params("id", "location").build();
|
@ -1,4 +1,4 @@
|
|||||||
package cc.carm.plugin.moeteleport.configuration.location;
|
package cc.carm.plugin.moeteleport.conf.location;
|
||||||
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
@ -1,53 +0,0 @@
|
|||||||
package cc.carm.plugin.moeteleport.configuration;
|
|
||||||
|
|
||||||
import cc.carm.lib.easyplugin.configuration.values.ConfigValue;
|
|
||||||
import cc.carm.lib.easyplugin.configuration.values.ConfigValueList;
|
|
||||||
import cc.carm.lib.easyplugin.configuration.values.ConfigValueMap;
|
|
||||||
|
|
||||||
public class PluginConfig {
|
|
||||||
|
|
||||||
public static final ConfigValue<Boolean> DEBUG = new ConfigValue<>(
|
|
||||||
"debug", Boolean.class, false
|
|
||||||
);
|
|
||||||
|
|
||||||
public static final ConfigValue<Boolean> METRICS = new ConfigValue<>(
|
|
||||||
"metrics", Boolean.class, true
|
|
||||||
);
|
|
||||||
|
|
||||||
public static final ConfigValue<Boolean> CHECK_UPDATE = new ConfigValue<>(
|
|
||||||
"check-update", Boolean.class, true
|
|
||||||
);
|
|
||||||
|
|
||||||
public static final ConfigValue<String> STORAGE_METHOD = new ConfigValue<>(
|
|
||||||
"storage.method", String.class, "YAML"
|
|
||||||
);
|
|
||||||
|
|
||||||
public static final ConfigValueMap<Integer, String> HOME_PERMISSIONS = new ConfigValueMap<>(
|
|
||||||
"permissions.home", Integer::parseInt, String.class
|
|
||||||
);
|
|
||||||
|
|
||||||
public static final ConfigValueMap<Integer, String> WARP_PERMISSIONS = new ConfigValueMap<>(
|
|
||||||
"permissions.warp", Integer::parseInt, String.class
|
|
||||||
);
|
|
||||||
|
|
||||||
public static final ConfigValueList<String> DANGEROUS_TYPES = new ConfigValueList<>(
|
|
||||||
"dangerous-blocks", String.class, new String[]{"LAVA"}
|
|
||||||
);
|
|
||||||
|
|
||||||
public static final ConfigValue<Integer> EXPIRE_TIME = new ConfigValue<>(
|
|
||||||
"expireTime", Integer.class, 30
|
|
||||||
);
|
|
||||||
|
|
||||||
public static final ConfigValue<Integer> DEFAULT_HOME = new ConfigValue<>(
|
|
||||||
"defaults.home", Integer.class, 1
|
|
||||||
);
|
|
||||||
|
|
||||||
public static final ConfigValue<Integer> DEFAULT_WARP = new ConfigValue<>(
|
|
||||||
"defaults.warp", Integer.class, 0
|
|
||||||
);
|
|
||||||
|
|
||||||
public static final ConfigValue<Boolean> DEATH_GO_BACK = new ConfigValue<>(
|
|
||||||
"death-back", Boolean.class, true
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
|
@ -1,33 +0,0 @@
|
|||||||
package cc.carm.plugin.moeteleport.configuration.messages;
|
|
||||||
|
|
||||||
import cc.carm.lib.easyplugin.configuration.language.EasyMessage;
|
|
||||||
import cc.carm.lib.easyplugin.configuration.language.builder.EasyMessageBuilder;
|
|
||||||
import de.themoep.minedown.MineDown;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
public class MoeMessage extends EasyMessage {
|
|
||||||
|
|
||||||
public MoeMessage(@Nullable String defaultValue, @Nullable String[] messageParams) {
|
|
||||||
super(defaultValue, messageParams);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static EasyMessageBuilder builder() {
|
|
||||||
return new EasyMessageBuilder() {
|
|
||||||
@Override
|
|
||||||
public MoeMessage build() {
|
|
||||||
return new MoeMessage(this.content, buildParams());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void send(@Nullable CommandSender sender, @Nullable String[] params, @Nullable Object[] values) {
|
|
||||||
if (sender == null) return;
|
|
||||||
String message = get(sender, params, values);
|
|
||||||
if (message.length() < 1) return;
|
|
||||||
sender.spigot().sendMessage(MineDown.parse(message));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
package cc.carm.plugin.moeteleport.configuration.messages;
|
|
||||||
|
|
||||||
import cc.carm.lib.easyplugin.configuration.language.EasyMessageList;
|
|
||||||
import cc.carm.lib.easyplugin.configuration.language.builder.EasyMessageListBuilder;
|
|
||||||
import de.themoep.minedown.MineDown;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class MoeMessageList extends EasyMessageList {
|
|
||||||
|
|
||||||
public MoeMessageList(@Nullable String[] defaultValue, @Nullable String[] messageParams) {
|
|
||||||
super(defaultValue, messageParams);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static EasyMessageListBuilder builder() {
|
|
||||||
return new EasyMessageListBuilder() {
|
|
||||||
@Override
|
|
||||||
public MoeMessageList build() {
|
|
||||||
return new MoeMessageList(this.contents, buildParams());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void send(@Nullable CommandSender sender, @Nullable String[] params, @Nullable Object[] values) {
|
|
||||||
if (sender == null) return;
|
|
||||||
List<String> messages = get(sender, params, values);
|
|
||||||
if (messages.isEmpty()) return;
|
|
||||||
if (messages.size() == 1 && messages.get(0).length() == 0) return; //空消息不再发送
|
|
||||||
messages.forEach(message -> sender.spigot().sendMessage(MineDown.parse(message)));
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -0,0 +1,8 @@
|
|||||||
|
package cc.carm.plugin.moeteleport.effect;
|
||||||
|
|
||||||
|
public class TeleportEffect {
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
package cc.carm.plugin.moeteleport.listener;
|
||||||
|
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||||
|
|
||||||
|
public class CommandListener implements Listener {
|
||||||
|
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onCommand(PlayerCommandPreprocessEvent event) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -1,8 +1,8 @@
|
|||||||
package cc.carm.plugin.moeteleport.listener;
|
package cc.carm.plugin.moeteleport.listener;
|
||||||
|
|
||||||
import cc.carm.plugin.moeteleport.MoeTeleport;
|
import cc.carm.plugin.moeteleport.MoeTeleport;
|
||||||
import cc.carm.plugin.moeteleport.configuration.PluginConfig;
|
import cc.carm.plugin.moeteleport.conf.PluginConfig;
|
||||||
import cc.carm.plugin.moeteleport.configuration.PluginMessages;
|
import cc.carm.plugin.moeteleport.conf.PluginMessages;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
@ -26,7 +26,7 @@ public class UserListener implements Listener {
|
|||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onDeath(PlayerDeathEvent event) {
|
public void onDeath(PlayerDeathEvent event) {
|
||||||
if (PluginConfig.DEATH_GO_BACK.get()) {
|
if (PluginConfig.BACK.DEATH.getNotNull()) {
|
||||||
Player player = event.getEntity();
|
Player player = event.getEntity();
|
||||||
MoeTeleport.getUserManager().getData(player).setLastLocation(player.getLocation());
|
MoeTeleport.getUserManager().getData(player).setLastLocation(player.getLocation());
|
||||||
PluginMessages.Back.DEATH_MESSAGE.send(player);
|
PluginMessages.Back.DEATH_MESSAGE.send(player);
|
||||||
|
@ -1,57 +0,0 @@
|
|||||||
package cc.carm.plugin.moeteleport.manager;
|
|
||||||
|
|
||||||
import cc.carm.lib.easyplugin.configuration.file.FileConfig;
|
|
||||||
import cc.carm.lib.easyplugin.configuration.language.MessagesConfig;
|
|
||||||
import cc.carm.lib.easyplugin.configuration.language.MessagesInitializer;
|
|
||||||
import cc.carm.plugin.moeteleport.Main;
|
|
||||||
import cc.carm.plugin.moeteleport.configuration.PluginMessages;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
|
|
||||||
public class ConfigManager {
|
|
||||||
|
|
||||||
private static FileConfig config;
|
|
||||||
private static MessagesConfig messageConfig;
|
|
||||||
|
|
||||||
public static boolean initConfig() {
|
|
||||||
try {
|
|
||||||
ConfigManager.config = new FileConfig(Main.getInstance());
|
|
||||||
ConfigManager.messageConfig = new MessagesConfig(Main.getInstance());
|
|
||||||
|
|
||||||
FileConfig.pluginConfiguration = () -> config;
|
|
||||||
FileConfig.messageConfiguration = () -> messageConfig;
|
|
||||||
|
|
||||||
MessagesInitializer.initialize(messageConfig, PluginMessages.class);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
} catch (IOException e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static FileConfig getPluginConfig() {
|
|
||||||
return config;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static FileConfig getMessageConfig() {
|
|
||||||
return messageConfig;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void reload() {
|
|
||||||
try {
|
|
||||||
getPluginConfig().reload();
|
|
||||||
getMessageConfig().reload();
|
|
||||||
} catch (Exception ignored) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void saveConfig() {
|
|
||||||
try {
|
|
||||||
getPluginConfig().save();
|
|
||||||
getMessageConfig().save();
|
|
||||||
} catch (Exception ignored) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -2,10 +2,10 @@ package cc.carm.plugin.moeteleport.manager;
|
|||||||
|
|
||||||
import cc.carm.plugin.moeteleport.Main;
|
import cc.carm.plugin.moeteleport.Main;
|
||||||
import cc.carm.plugin.moeteleport.MoeTeleport;
|
import cc.carm.plugin.moeteleport.MoeTeleport;
|
||||||
import cc.carm.plugin.moeteleport.configuration.PluginConfig;
|
import cc.carm.plugin.moeteleport.conf.PluginConfig;
|
||||||
import cc.carm.plugin.moeteleport.configuration.PluginMessages;
|
import cc.carm.plugin.moeteleport.conf.PluginMessages;
|
||||||
import cc.carm.plugin.moeteleport.model.TeleportRequest;
|
import cc.carm.plugin.moeteleport.model.TeleportRequest;
|
||||||
import cc.carm.plugin.moeteleport.model.UserData;
|
import cc.carm.plugin.moeteleport.storage.UserData;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
@ -51,7 +51,7 @@ public class RequestManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void sendRequest(Player sender, Player receiver, TeleportRequest.RequestType type) {
|
public void sendRequest(Player sender, Player receiver, TeleportRequest.RequestType type) {
|
||||||
int expireTime = PluginConfig.EXPIRE_TIME.get();
|
int expireTime = PluginConfig.REQUEST.EXPIRE_TIME.getNotNull();
|
||||||
|
|
||||||
PluginMessages.Requests.SENT.send(sender, receiver.getName(), expireTime);
|
PluginMessages.Requests.SENT.send(sender, receiver.getName(), expireTime);
|
||||||
|
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
package cc.carm.plugin.moeteleport.manager;
|
package cc.carm.plugin.moeteleport.manager;
|
||||||
|
|
||||||
import cc.carm.plugin.moeteleport.MoeTeleport;
|
import cc.carm.plugin.moeteleport.MoeTeleport;
|
||||||
import cc.carm.plugin.moeteleport.configuration.PluginConfig;
|
import cc.carm.plugin.moeteleport.conf.PluginConfig;
|
||||||
import cc.carm.plugin.moeteleport.configuration.PluginMessages;
|
import cc.carm.plugin.moeteleport.conf.PluginMessages;
|
||||||
import cc.carm.plugin.moeteleport.configuration.location.DataLocation;
|
import cc.carm.plugin.moeteleport.conf.location.DataLocation;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockFace;
|
import org.bukkit.block.BlockFace;
|
||||||
@ -11,6 +11,7 @@ import org.bukkit.entity.Player;
|
|||||||
|
|
||||||
public class TeleportManager {
|
public class TeleportManager {
|
||||||
|
|
||||||
|
|
||||||
public static void teleport(Player player, DataLocation targetLocation, boolean onlySafety) {
|
public static void teleport(Player player, DataLocation targetLocation, boolean onlySafety) {
|
||||||
Location location = targetLocation.getBukkitLocation();
|
Location location = targetLocation.getBukkitLocation();
|
||||||
if (location == null) {
|
if (location == null) {
|
||||||
@ -44,7 +45,7 @@ public class TeleportManager {
|
|||||||
return false; // not transparent (will suffocate)
|
return false; // not transparent (will suffocate)
|
||||||
}
|
}
|
||||||
Block ground = leg.getRelative(BlockFace.DOWN);
|
Block ground = leg.getRelative(BlockFace.DOWN);
|
||||||
return !PluginConfig.DANGEROUS_TYPES.get().contains(ground.getType().name());
|
return !PluginConfig.TELEPORTATION.DANGEROUS_TYPES.getNotNull().contains(ground.getType().name());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2,10 +2,10 @@ package cc.carm.plugin.moeteleport.manager;
|
|||||||
|
|
||||||
import cc.carm.plugin.moeteleport.Main;
|
import cc.carm.plugin.moeteleport.Main;
|
||||||
import cc.carm.plugin.moeteleport.MoeTeleport;
|
import cc.carm.plugin.moeteleport.MoeTeleport;
|
||||||
import cc.carm.plugin.moeteleport.configuration.PluginConfig;
|
import cc.carm.plugin.moeteleport.conf.PluginConfig;
|
||||||
import cc.carm.plugin.moeteleport.model.UserData;
|
|
||||||
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
||||||
import cc.carm.plugin.moeteleport.storage.DataStorage;
|
import cc.carm.plugin.moeteleport.storage.DataStorage;
|
||||||
|
import cc.carm.plugin.moeteleport.storage.UserData;
|
||||||
import cc.carm.plugin.moeteleport.util.DataTaskRunner;
|
import cc.carm.plugin.moeteleport.util.DataTaskRunner;
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@ -132,11 +132,11 @@ public class UserManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int getMaxHome(Player player) {
|
public int getMaxHome(Player player) {
|
||||||
return getMaxValue(player, PluginConfig.HOME_PERMISSIONS.get(), PluginConfig.DEFAULT_HOME.get());
|
return getMaxValue(player, PluginConfig.HOMES.PERMISSIONS.getNotNull(), PluginConfig.HOMES.DEFAULTS.getNotNull());
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getMaxWarps(Player player) {
|
public int getMaxWarps(Player player) {
|
||||||
return getMaxValue(player, PluginConfig.WARP_PERMISSIONS.get(), PluginConfig.DEFAULT_WARP.get());
|
return getMaxValue(player, PluginConfig.WARPS.PERMISSIONS.getNotNull(), PluginConfig.WARPS.DEFAULTS.getNotNull());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void editData(@NotNull DataTaskRunner task) {
|
public void editData(@NotNull DataTaskRunner task) {
|
||||||
|
@ -2,7 +2,7 @@ package cc.carm.plugin.moeteleport.manager;
|
|||||||
|
|
||||||
import cc.carm.plugin.moeteleport.Main;
|
import cc.carm.plugin.moeteleport.Main;
|
||||||
import cc.carm.plugin.moeteleport.MoeTeleport;
|
import cc.carm.plugin.moeteleport.MoeTeleport;
|
||||||
import cc.carm.plugin.moeteleport.configuration.location.DataLocation;
|
import cc.carm.plugin.moeteleport.conf.location.DataLocation;
|
||||||
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
||||||
import com.google.common.collect.ImmutableMap;
|
import com.google.common.collect.ImmutableMap;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cc.carm.plugin.moeteleport.model;
|
package cc.carm.plugin.moeteleport.model;
|
||||||
|
|
||||||
import cc.carm.plugin.moeteleport.configuration.PluginConfig;
|
import cc.carm.plugin.moeteleport.conf.PluginConfig;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@ -51,7 +51,7 @@ public class TeleportRequest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public long getRemainTime() {
|
public long getRemainTime() {
|
||||||
return PluginConfig.EXPIRE_TIME.get() * 1000 - getActiveTime();
|
return PluginConfig.REQUEST.EXPIRE_TIME.getNotNull() * 1000 - getActiveTime();
|
||||||
}
|
}
|
||||||
|
|
||||||
public long getRemainSeconds() {
|
public long getRemainSeconds() {
|
||||||
@ -59,7 +59,7 @@ public class TeleportRequest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean isExpired() {
|
public boolean isExpired() {
|
||||||
return getActiveTime() > PluginConfig.EXPIRE_TIME.get() * 1000;
|
return getActiveTime() > PluginConfig.REQUEST.EXPIRE_TIME.getNotNull() * 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum RequestType {
|
public enum RequestType {
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cc.carm.plugin.moeteleport.model;
|
package cc.carm.plugin.moeteleport.model;
|
||||||
|
|
||||||
import cc.carm.plugin.moeteleport.configuration.location.DataLocation;
|
import cc.carm.plugin.moeteleport.conf.location.DataLocation;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package cc.carm.plugin.moeteleport.storage;
|
package cc.carm.plugin.moeteleport.storage;
|
||||||
|
|
||||||
import cc.carm.plugin.moeteleport.configuration.location.DataLocation;
|
import cc.carm.plugin.moeteleport.conf.location.DataLocation;
|
||||||
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
package cc.carm.plugin.moeteleport.storage;
|
package cc.carm.plugin.moeteleport.storage;
|
||||||
|
|
||||||
import cc.carm.plugin.moeteleport.configuration.location.DataLocation;
|
import cc.carm.plugin.moeteleport.conf.location.DataLocation;
|
||||||
import cc.carm.plugin.moeteleport.manager.UserManager;
|
import cc.carm.plugin.moeteleport.manager.UserManager;
|
||||||
import cc.carm.plugin.moeteleport.model.UserData;
|
|
||||||
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
@ -2,6 +2,7 @@ package cc.carm.plugin.moeteleport.storage;
|
|||||||
|
|
||||||
import cc.carm.plugin.moeteleport.storage.custom.CustomStorage;
|
import cc.carm.plugin.moeteleport.storage.custom.CustomStorage;
|
||||||
import cc.carm.plugin.moeteleport.storage.database.MySQLStorage;
|
import cc.carm.plugin.moeteleport.storage.database.MySQLStorage;
|
||||||
|
import cc.carm.plugin.moeteleport.storage.extension.CMIStorage;
|
||||||
import cc.carm.plugin.moeteleport.storage.extension.EssentialStorage;
|
import cc.carm.plugin.moeteleport.storage.extension.EssentialStorage;
|
||||||
import cc.carm.plugin.moeteleport.storage.file.JSONStorage;
|
import cc.carm.plugin.moeteleport.storage.file.JSONStorage;
|
||||||
import cc.carm.plugin.moeteleport.storage.file.YAMLStorage;
|
import cc.carm.plugin.moeteleport.storage.file.YAMLStorage;
|
||||||
@ -18,7 +19,8 @@ public enum StorageMethod {
|
|||||||
JSON(2, new String[]{}, JSONStorage.class),
|
JSON(2, new String[]{}, JSONStorage.class),
|
||||||
MYSQL(3, new String[]{"my-sql", "mariadb", "sql", "database"}, MySQLStorage.class),
|
MYSQL(3, new String[]{"my-sql", "mariadb", "sql", "database"}, MySQLStorage.class),
|
||||||
|
|
||||||
ESSENTIALS(11, new String[]{"essential", "ess", "EssentialsX", "essX"}, EssentialStorage.class);
|
ESSENTIALS(11, new String[]{"essential", "ess", "EssentialsX", "essX"}, EssentialStorage.class),
|
||||||
|
CMI(12, new String[]{}, CMIStorage.class);
|
||||||
|
|
||||||
private final int id;
|
private final int id;
|
||||||
private final String[] alias;
|
private final String[] alias;
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
package cc.carm.plugin.moeteleport.model;
|
package cc.carm.plugin.moeteleport.storage;
|
||||||
|
|
||||||
import cc.carm.plugin.moeteleport.MoeTeleport;
|
import cc.carm.plugin.moeteleport.MoeTeleport;
|
||||||
import cc.carm.plugin.moeteleport.configuration.location.DataLocation;
|
import cc.carm.plugin.moeteleport.conf.location.DataLocation;
|
||||||
|
import cc.carm.plugin.moeteleport.model.TeleportRequest;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
@ -1,8 +1,8 @@
|
|||||||
package cc.carm.plugin.moeteleport.storage.custom;
|
package cc.carm.plugin.moeteleport.storage.custom;
|
||||||
|
|
||||||
import cc.carm.plugin.moeteleport.Main;
|
import cc.carm.plugin.moeteleport.Main;
|
||||||
import cc.carm.plugin.moeteleport.configuration.location.DataLocation;
|
import cc.carm.plugin.moeteleport.conf.location.DataLocation;
|
||||||
import cc.carm.plugin.moeteleport.model.UserData;
|
import cc.carm.plugin.moeteleport.storage.UserData;
|
||||||
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
||||||
import cc.carm.plugin.moeteleport.storage.DataStorage;
|
import cc.carm.plugin.moeteleport.storage.DataStorage;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
@ -1,37 +0,0 @@
|
|||||||
package cc.carm.plugin.moeteleport.storage.database;
|
|
||||||
|
|
||||||
import cc.carm.lib.easyplugin.configuration.values.ConfigValue;
|
|
||||||
|
|
||||||
public class DBConfiguration {
|
|
||||||
|
|
||||||
protected static final ConfigValue<String> DRIVER_NAME = new ConfigValue<>(
|
|
||||||
"storage.mysql.driver", String.class,
|
|
||||||
"com.mysql.cj.jdbc.Driver"
|
|
||||||
);
|
|
||||||
|
|
||||||
protected static final ConfigValue<String> HOST = new ConfigValue<>(
|
|
||||||
"storage.mysql.host", String.class,
|
|
||||||
"127.0.0.1"
|
|
||||||
);
|
|
||||||
|
|
||||||
protected static final ConfigValue<Integer> PORT = new ConfigValue<>(
|
|
||||||
"storage.mysql.port", Integer.class,
|
|
||||||
3306
|
|
||||||
);
|
|
||||||
|
|
||||||
protected static final ConfigValue<String> DATABASE = new ConfigValue<>(
|
|
||||||
"storage.mysql.database", String.class,
|
|
||||||
"minecraft"
|
|
||||||
);
|
|
||||||
|
|
||||||
protected static final ConfigValue<String> USERNAME = new ConfigValue<>(
|
|
||||||
"storage.mysql.username", String.class,
|
|
||||||
"root"
|
|
||||||
);
|
|
||||||
|
|
||||||
protected static final ConfigValue<String> PASSWORD = new ConfigValue<>(
|
|
||||||
"storage.mysql.password", String.class,
|
|
||||||
"password"
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
|
@ -1,73 +0,0 @@
|
|||||||
package cc.carm.plugin.moeteleport.storage.database;
|
|
||||||
|
|
||||||
import cc.carm.lib.easyplugin.configuration.values.ConfigValue;
|
|
||||||
|
|
||||||
public class DBTables {
|
|
||||||
|
|
||||||
protected static class UserLastLocations {
|
|
||||||
|
|
||||||
protected static final ConfigValue<String> TABLE_NAME = new ConfigValue<>(
|
|
||||||
"storage.mysql.tables.last-location", String.class,
|
|
||||||
"mt_user_last_locations"
|
|
||||||
);
|
|
||||||
|
|
||||||
protected static final String[] TABLE_COLUMNS = new String[]{
|
|
||||||
"`uuid` VARCHAR(36) NOT NULL PRIMARY KEY", // 用户的UUID
|
|
||||||
"`world` VARCHAR(128) NOT NULL",// 最后地址的所在世界
|
|
||||||
"`x` DOUBLE NOT NULL",// 最后地址的X坐标
|
|
||||||
"`y` DOUBLE NOT NULL",// 最后地址的Y坐标
|
|
||||||
"`z` DOUBLE NOT NULL",// 最后地址的Z坐标
|
|
||||||
"`yaw` DOUBLE NOT NULL",// 最后地址的Yaw角度
|
|
||||||
"`pitch` DOUBLE NOT NULL",// 最后地址的Pitch角度
|
|
||||||
"`update` DATETIME NOT NULL " +
|
|
||||||
"DEFAULT CURRENT_TIMESTAMP " +
|
|
||||||
"ON UPDATE CURRENT_TIMESTAMP "
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
protected static class UserHomes {
|
|
||||||
|
|
||||||
protected static final ConfigValue<String> TABLE_NAME = new ConfigValue<>(
|
|
||||||
"storage.mysql.tables.home", String.class,
|
|
||||||
"mt_user_homes"
|
|
||||||
);
|
|
||||||
|
|
||||||
protected static final String[] TABLE_COLUMNS = new String[]{
|
|
||||||
"`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY",
|
|
||||||
"`uuid` VARCHAR(36) NOT NULL", // 用户的UUID
|
|
||||||
"`name` VARCHAR(32) NOT NULL",
|
|
||||||
"`world` VARCHAR(128) NOT NULL",
|
|
||||||
"`x` DOUBLE NOT NULL",
|
|
||||||
"`y` DOUBLE NOT NULL",
|
|
||||||
"`z` DOUBLE NOT NULL",
|
|
||||||
"`yaw` DOUBLE NOT NULL",
|
|
||||||
"`pitch` DOUBLE NOT NULL",
|
|
||||||
"INDEX `user`(`uuid`)",
|
|
||||||
"UNIQUE KEY `home`(`uuid`,`name`)"
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
protected static class Warps {
|
|
||||||
|
|
||||||
protected static final ConfigValue<String> TABLE_NAME = new ConfigValue<>(
|
|
||||||
"storage.mysql.tables.warps", String.class,
|
|
||||||
"mt_warps"
|
|
||||||
);
|
|
||||||
|
|
||||||
protected static final String[] TABLE_COLUMNS = new String[]{
|
|
||||||
"`id` INT NOT NULL AUTO_INCREMENT UNIQUE KEY",
|
|
||||||
"`name` VARCHAR(16) PRIMARY KEY NOT NULL", // 传送点名称 不为空且唯一
|
|
||||||
"`owner` VARCHAR(36)", // 用户的UUID
|
|
||||||
"`world` VARCHAR(128) NOT NULL",
|
|
||||||
"`x` DOUBLE NOT NULL",
|
|
||||||
"`y` DOUBLE NOT NULL",
|
|
||||||
"`z` DOUBLE NOT NULL",
|
|
||||||
"`yaw` DOUBLE NOT NULL",
|
|
||||||
"`pitch` DOUBLE NOT NULL"
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -0,0 +1,41 @@
|
|||||||
|
package cc.carm.plugin.moeteleport.storage.database;
|
||||||
|
|
||||||
|
import cc.carm.lib.configuration.core.ConfigurationRoot;
|
||||||
|
import cc.carm.lib.configuration.core.annotation.ConfigPath;
|
||||||
|
import cc.carm.lib.configuration.core.annotation.HeaderComment;
|
||||||
|
import cc.carm.lib.configuration.core.value.ConfigValue;
|
||||||
|
import cc.carm.lib.configuration.core.value.type.ConfiguredValue;
|
||||||
|
|
||||||
|
|
||||||
|
@HeaderComment("选择 database (如mysql) 存储方式时的数据库配置")
|
||||||
|
@ConfigPath("storage.database")
|
||||||
|
public class DatabaseConfig extends ConfigurationRoot {
|
||||||
|
|
||||||
|
@ConfigPath("driver")
|
||||||
|
protected static final ConfigValue<String> DRIVER_NAME = ConfiguredValue.of(
|
||||||
|
String.class, "com.mysql.jdbc.Driver"
|
||||||
|
);
|
||||||
|
|
||||||
|
protected static final ConfigValue<String> HOST = ConfiguredValue.of(String.class, "127.0.0.1");
|
||||||
|
protected static final ConfigValue<Integer> PORT = ConfiguredValue.of(Integer.class, 3306);
|
||||||
|
protected static final ConfigValue<String> DATABASE = ConfiguredValue.of(String.class, "minecraft");
|
||||||
|
protected static final ConfigValue<String> USERNAME = ConfiguredValue.of(String.class, "root");
|
||||||
|
protected static final ConfigValue<String> PASSWORD = ConfiguredValue.of(String.class, "password");
|
||||||
|
protected static final ConfigValue<String> EXTRA = ConfiguredValue.of(String.class, "?useSSL=false");
|
||||||
|
|
||||||
|
@HeaderComment("插件相关表的名称")
|
||||||
|
public static final class TABLES extends ConfigurationRoot {
|
||||||
|
|
||||||
|
public static final ConfigValue<String> LAST_LOCATION = ConfiguredValue.of(String.class, "mt_last_locations");
|
||||||
|
public static final ConfigValue<String> HOMES = ConfiguredValue.of(String.class, "mt_homes");
|
||||||
|
public static final ConfigValue<String> WARPS = ConfiguredValue.of(String.class, "mt_warps");
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
protected static String buildJDBC() {
|
||||||
|
return String.format("jdbc:mysql://%s:%s/%s%s",
|
||||||
|
HOST.getNotNull(), PORT.getNotNull(), DATABASE.getNotNull(), EXTRA.getNotNull()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,96 @@
|
|||||||
|
package cc.carm.plugin.moeteleport.storage.database;
|
||||||
|
|
||||||
|
import cc.carm.lib.configuration.core.value.ConfigValue;
|
||||||
|
import cc.carm.lib.easysql.api.SQLManager;
|
||||||
|
import cc.carm.lib.easysql.api.SQLTable;
|
||||||
|
import cc.carm.lib.easysql.api.builder.TableCreateBuilder;
|
||||||
|
import cc.carm.lib.easysql.api.enums.IndexType;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.function.Consumer;
|
||||||
|
|
||||||
|
public enum DatabaseTables implements SQLTable {
|
||||||
|
|
||||||
|
LAST_LOCATION(DatabaseConfig.TABLES.LAST_LOCATION, (table) -> {
|
||||||
|
table.addColumn("uuid", "CHAR(36) NOT NULL PRIMARY KEY"); // 用户的UUID
|
||||||
|
|
||||||
|
// 坐标世界与位置
|
||||||
|
table.addColumn("world", "VARCHAR(128) NOT NULL");
|
||||||
|
table.addColumn("x", "DOUBLE NOT NULL");
|
||||||
|
table.addColumn("y", "DOUBLE NOT NULL");
|
||||||
|
table.addColumn("z", "DOUBLE NOT NULL");
|
||||||
|
table.addColumn("yaw", "DOUBLE NOT NULL");
|
||||||
|
table.addColumn("pitch", "DOUBLE NOT NULL");
|
||||||
|
|
||||||
|
table.addColumn("update",
|
||||||
|
"DATETIME NOT NULL " +
|
||||||
|
"DEFAULT CURRENT_TIMESTAMP " +
|
||||||
|
"ON UPDATE CURRENT_TIMESTAMP"
|
||||||
|
);
|
||||||
|
}),
|
||||||
|
|
||||||
|
HOMES(DatabaseConfig.TABLES.HOMES, (table) -> {
|
||||||
|
table.addAutoIncrementColumn("id", true, true);
|
||||||
|
table.addColumn("uuid", "CHAR(36) NOT NULL");
|
||||||
|
table.addColumn("name", "VARCHAR(32) NOT NULL");
|
||||||
|
|
||||||
|
// 坐标世界与位置
|
||||||
|
table.addColumn("world", "VARCHAR(128) NOT NULL");
|
||||||
|
table.addColumn("x", "DOUBLE NOT NULL");
|
||||||
|
table.addColumn("y", "DOUBLE NOT NULL");
|
||||||
|
table.addColumn("z", "DOUBLE NOT NULL");
|
||||||
|
table.addColumn("yaw", "DOUBLE NOT NULL");
|
||||||
|
table.addColumn("pitch", "DOUBLE NOT NULL");
|
||||||
|
|
||||||
|
table.setIndex(IndexType.INDEX, "idx_homes_user", "uuid");
|
||||||
|
table.setIndex(IndexType.UNIQUE_KEY, "uk_homes", "uuid", "name");
|
||||||
|
}),
|
||||||
|
|
||||||
|
WRAPS(DatabaseConfig.TABLES.WARPS, (table) -> {
|
||||||
|
|
||||||
|
table.addAutoIncrementColumn("id", true, true);
|
||||||
|
table.addColumn("name", "VARCHAR(32) NOT NULL");
|
||||||
|
table.addColumn("owner", "CHAR(36) NOT NULL");
|
||||||
|
|
||||||
|
// 坐标世界与位置
|
||||||
|
table.addColumn("world", "VARCHAR(128) NOT NULL");
|
||||||
|
table.addColumn("x", "DOUBLE NOT NULL");
|
||||||
|
table.addColumn("y", "DOUBLE NOT NULL");
|
||||||
|
table.addColumn("z", "DOUBLE NOT NULL");
|
||||||
|
table.addColumn("yaw", "DOUBLE NOT NULL");
|
||||||
|
table.addColumn("pitch", "DOUBLE NOT NULL");
|
||||||
|
|
||||||
|
table.setIndex(IndexType.UNIQUE_KEY, "uk_wraps", "name");
|
||||||
|
});
|
||||||
|
|
||||||
|
private final Consumer<TableCreateBuilder> builder;
|
||||||
|
private final ConfigValue<String> name;
|
||||||
|
private @Nullable SQLManager manager;
|
||||||
|
|
||||||
|
DatabaseTables(ConfigValue<String> name,
|
||||||
|
Consumer<TableCreateBuilder> builder) {
|
||||||
|
this.name = name;
|
||||||
|
this.builder = builder;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable SQLManager getSQLManager() {
|
||||||
|
return this.manager;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull String getTableName() {
|
||||||
|
return this.name.getNotNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean create(SQLManager sqlManager) throws SQLException {
|
||||||
|
if (this.manager == null) this.manager = sqlManager;
|
||||||
|
|
||||||
|
TableCreateBuilder tableBuilder = sqlManager.createTable(getTableName());
|
||||||
|
if (builder != null) builder.accept(tableBuilder);
|
||||||
|
return tableBuilder.build().executeFunction(l -> l > 0, false);
|
||||||
|
}
|
||||||
|
}
|
@ -4,10 +4,10 @@ import cc.carm.lib.easysql.EasySQL;
|
|||||||
import cc.carm.lib.easysql.api.SQLManager;
|
import cc.carm.lib.easysql.api.SQLManager;
|
||||||
import cc.carm.lib.easysql.api.util.UUIDUtil;
|
import cc.carm.lib.easysql.api.util.UUIDUtil;
|
||||||
import cc.carm.plugin.moeteleport.Main;
|
import cc.carm.plugin.moeteleport.Main;
|
||||||
import cc.carm.plugin.moeteleport.configuration.location.DataLocation;
|
import cc.carm.plugin.moeteleport.conf.location.DataLocation;
|
||||||
import cc.carm.plugin.moeteleport.model.UserData;
|
|
||||||
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
||||||
import cc.carm.plugin.moeteleport.storage.DataStorage;
|
import cc.carm.plugin.moeteleport.storage.DataStorage;
|
||||||
|
import cc.carm.plugin.moeteleport.storage.UserData;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.annotations.Nullable;
|
import org.jetbrains.annotations.Nullable;
|
||||||
@ -27,14 +27,15 @@ public class MySQLStorage implements DataStorage {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() throws Exception {
|
public void initialize() throws Exception {
|
||||||
|
|
||||||
|
Main.info("加载数据库配置...");
|
||||||
|
Main.getInstance().getConfigProvider().initialize(DatabaseConfig.class);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Main.info(" 尝试连接到数据库...");
|
Main.info(" 尝试连接到数据库...");
|
||||||
String url = String.format("jdbc:mysql://%s:%s/%s?useSSL=false",
|
|
||||||
DBConfiguration.HOST.get(), DBConfiguration.PORT.get(), DBConfiguration.DATABASE.get()
|
|
||||||
);
|
|
||||||
this.sqlManager = EasySQL.createManager(
|
this.sqlManager = EasySQL.createManager(
|
||||||
DBConfiguration.DRIVER_NAME.get(), url,
|
DatabaseConfig.DRIVER_NAME.getNotNull(), DatabaseConfig.buildJDBC(),
|
||||||
DBConfiguration.USERNAME.get(), DBConfiguration.PASSWORD.get()
|
DatabaseConfig.USERNAME.getNotNull(), DatabaseConfig.PASSWORD.getNotNull()
|
||||||
);
|
);
|
||||||
this.sqlManager.setDebugMode(() -> Main.getInstance().isDebugging());
|
this.sqlManager.setDebugMode(() -> Main.getInstance().isDebugging());
|
||||||
} catch (Exception exception) {
|
} catch (Exception exception) {
|
||||||
@ -43,18 +44,9 @@ public class MySQLStorage implements DataStorage {
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
Main.info(" 创建插件所需表...");
|
Main.info(" 创建插件所需表...");
|
||||||
getSQLManager().createTable(DBTables.UserLastLocations.TABLE_NAME.get())
|
for (DatabaseTables value : DatabaseTables.values()) {
|
||||||
.setColumns(DBTables.UserLastLocations.TABLE_COLUMNS)
|
value.create(this.sqlManager);
|
||||||
.build().execute();
|
}
|
||||||
|
|
||||||
getSQLManager().createTable(DBTables.UserHomes.TABLE_NAME.get())
|
|
||||||
.setColumns(DBTables.UserHomes.TABLE_COLUMNS)
|
|
||||||
.build().execute();
|
|
||||||
|
|
||||||
getSQLManager().createTable(DBTables.Warps.TABLE_NAME.get())
|
|
||||||
.setColumns(DBTables.Warps.TABLE_COLUMNS)
|
|
||||||
.build().execute();
|
|
||||||
|
|
||||||
} catch (SQLException exception) {
|
} catch (SQLException exception) {
|
||||||
throw new Exception("无法创建插件所需的表,请检查数据库权限。", exception);
|
throw new Exception("无法创建插件所需的表,请检查数据库权限。", exception);
|
||||||
}
|
}
|
||||||
@ -74,6 +66,10 @@ public class MySQLStorage implements DataStorage {
|
|||||||
this.sqlManager = null;
|
this.sqlManager = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SQLManager getSQLManager() {
|
||||||
|
return sqlManager;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public @Nullable UserData loadData(@NotNull UUID uuid) throws Exception {
|
public @Nullable UserData loadData(@NotNull UUID uuid) throws Exception {
|
||||||
LinkedHashMap<String, DataLocation> homes = loadHomes(uuid);
|
LinkedHashMap<String, DataLocation> homes = loadHomes(uuid);
|
||||||
@ -85,7 +81,7 @@ public class MySQLStorage implements DataStorage {
|
|||||||
public void saveUserData(@NotNull UserData data) throws Exception {
|
public void saveUserData(@NotNull UserData data) throws Exception {
|
||||||
Location location = data.getLastLocation();
|
Location location = data.getLastLocation();
|
||||||
if (location != null && location.getWorld() != null) {
|
if (location != null && location.getWorld() != null) {
|
||||||
getSQLManager().createReplace(DBTables.UserLastLocations.TABLE_NAME.get())
|
DatabaseTables.LAST_LOCATION.createReplace()
|
||||||
.setColumnNames("uuid", "world", "x", "y", "z", "yaw", "pitch")
|
.setColumnNames("uuid", "world", "x", "y", "z", "yaw", "pitch")
|
||||||
.setParams(
|
.setParams(
|
||||||
data.getUserUUID(), location.getWorld().getName(),
|
data.getUserUUID(), location.getWorld().getName(),
|
||||||
@ -93,7 +89,7 @@ public class MySQLStorage implements DataStorage {
|
|||||||
location.getYaw(), location.getPitch()
|
location.getYaw(), location.getPitch()
|
||||||
).execute();
|
).execute();
|
||||||
} else {
|
} else {
|
||||||
getSQLManager().createDelete(DBTables.UserLastLocations.TABLE_NAME.get())
|
DatabaseTables.LAST_LOCATION.createDelete()
|
||||||
.addCondition("uuid", data.getUserUUID()).setLimit(1)
|
.addCondition("uuid", data.getUserUUID()).setLimit(1)
|
||||||
.build().execute();
|
.build().execute();
|
||||||
}
|
}
|
||||||
@ -110,7 +106,7 @@ public class MySQLStorage implements DataStorage {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private @NotNull LinkedHashMap<String, DataLocation> loadHomes(@NotNull UUID uuid) throws Exception {
|
private @NotNull LinkedHashMap<String, DataLocation> loadHomes(@NotNull UUID uuid) throws Exception {
|
||||||
return getSQLManager().createQuery().inTable(DBTables.UserHomes.TABLE_NAME.get())
|
return DatabaseTables.HOMES.createQuery()
|
||||||
.addCondition("uuid", uuid).build()
|
.addCondition("uuid", uuid).build()
|
||||||
.executeFunction((query) -> {
|
.executeFunction((query) -> {
|
||||||
LinkedHashMap<String, DataLocation> homes = new LinkedHashMap<>();
|
LinkedHashMap<String, DataLocation> homes = new LinkedHashMap<>();
|
||||||
@ -119,38 +115,24 @@ public class MySQLStorage implements DataStorage {
|
|||||||
while (resultSet.next()) {
|
while (resultSet.next()) {
|
||||||
String name = resultSet.getString("name");
|
String name = resultSet.getString("name");
|
||||||
if (name == null) continue;
|
if (name == null) continue;
|
||||||
homes.put(name, new DataLocation(
|
homes.put(name, readLocation(resultSet));
|
||||||
resultSet.getString("world"),
|
|
||||||
resultSet.getDouble("x"),
|
|
||||||
resultSet.getDouble("y"),
|
|
||||||
resultSet.getDouble("z"),
|
|
||||||
resultSet.getFloat("yaw"),
|
|
||||||
resultSet.getFloat("pitch")
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
return homes;
|
return homes;
|
||||||
}, new LinkedHashMap<>());
|
}, new LinkedHashMap<>());
|
||||||
}
|
}
|
||||||
|
|
||||||
private @Nullable DataLocation loadLastLocation(@NotNull UUID uuid) throws Exception {
|
private @Nullable DataLocation loadLastLocation(@NotNull UUID uuid) throws Exception {
|
||||||
return getSQLManager().createQuery().inTable(DBTables.UserLastLocations.TABLE_NAME.get())
|
return DatabaseTables.LAST_LOCATION.createQuery()
|
||||||
.addCondition("uuid", uuid).setLimit(1).build()
|
.addCondition("uuid", uuid).setLimit(1).build()
|
||||||
.executeFunction((query) -> {
|
.executeFunction((query) -> {
|
||||||
ResultSet resultSet = query.getResultSet();
|
ResultSet resultSet = query.getResultSet();
|
||||||
if (resultSet == null || !resultSet.next()) return null;
|
if (resultSet == null || !resultSet.next()) return null;
|
||||||
return new DataLocation(
|
return readLocation(resultSet);
|
||||||
resultSet.getString("world"),
|
|
||||||
resultSet.getDouble("x"),
|
|
||||||
resultSet.getDouble("y"),
|
|
||||||
resultSet.getDouble("z"),
|
|
||||||
resultSet.getFloat("yaw"),
|
|
||||||
resultSet.getFloat("pitch")
|
|
||||||
);
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private @NotNull Map<String, WarpInfo> loadWarps() throws Exception {
|
private @NotNull Map<String, WarpInfo> loadWarps() throws Exception {
|
||||||
return getSQLManager().createQuery().inTable(DBTables.Warps.TABLE_NAME.get())
|
return DatabaseTables.WRAPS.createQuery()
|
||||||
.orderBy("id", true).build().executeFunction((query) -> {
|
.orderBy("id", true).build().executeFunction((query) -> {
|
||||||
LinkedHashMap<String, WarpInfo> warps = new LinkedHashMap<>();
|
LinkedHashMap<String, WarpInfo> warps = new LinkedHashMap<>();
|
||||||
ResultSet resultSet = query.getResultSet();
|
ResultSet resultSet = query.getResultSet();
|
||||||
@ -159,14 +141,7 @@ public class MySQLStorage implements DataStorage {
|
|||||||
String uuidString = resultSet.getString("owner");
|
String uuidString = resultSet.getString("owner");
|
||||||
UUID uuid = uuidString == null ? null : UUIDUtil.toUUID(uuidString);
|
UUID uuid = uuidString == null ? null : UUIDUtil.toUUID(uuidString);
|
||||||
String name = resultSet.getString("name");
|
String name = resultSet.getString("name");
|
||||||
DataLocation location = new DataLocation(
|
DataLocation location = readLocation(resultSet);
|
||||||
resultSet.getString("world"),
|
|
||||||
resultSet.getDouble("x"),
|
|
||||||
resultSet.getDouble("y"),
|
|
||||||
resultSet.getDouble("z"),
|
|
||||||
resultSet.getFloat("yaw"),
|
|
||||||
resultSet.getFloat("pitch")
|
|
||||||
);
|
|
||||||
warps.put(name, new WarpInfo(name, uuid, location));
|
warps.put(name, new WarpInfo(name, uuid, location));
|
||||||
}
|
}
|
||||||
return warps;
|
return warps;
|
||||||
@ -175,7 +150,7 @@ public class MySQLStorage implements DataStorage {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setHome(@NotNull UUID uuid, @NotNull String homeName, @NotNull DataLocation location) throws Exception {
|
public void setHome(@NotNull UUID uuid, @NotNull String homeName, @NotNull DataLocation location) throws Exception {
|
||||||
getSQLManager().createReplace(DBTables.UserHomes.TABLE_NAME.get())
|
DatabaseTables.HOMES.createReplace()
|
||||||
.setColumnNames("uuid", "name", "world", "x", "y", "z", "yaw", "pitch")
|
.setColumnNames("uuid", "name", "world", "x", "y", "z", "yaw", "pitch")
|
||||||
.setParams(
|
.setParams(
|
||||||
uuid, homeName, location.getWorldName(),
|
uuid, homeName, location.getWorldName(),
|
||||||
@ -187,7 +162,7 @@ public class MySQLStorage implements DataStorage {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean delHome(@NotNull UUID uuid, @NotNull String homeName) throws Exception {
|
public boolean delHome(@NotNull UUID uuid, @NotNull String homeName) throws Exception {
|
||||||
return getSQLManager().createDelete(DBTables.UserHomes.TABLE_NAME.get())
|
return DatabaseTables.HOMES.createDelete()
|
||||||
.addCondition("uuid", uuid)
|
.addCondition("uuid", uuid)
|
||||||
.addCondition("name", homeName)
|
.addCondition("name", homeName)
|
||||||
.setLimit(1)
|
.setLimit(1)
|
||||||
@ -198,7 +173,7 @@ public class MySQLStorage implements DataStorage {
|
|||||||
public void setWarp(@NotNull String name, @NotNull WarpInfo warpInfo) throws Exception {
|
public void setWarp(@NotNull String name, @NotNull WarpInfo warpInfo) throws Exception {
|
||||||
this.warpsMap.put(name, warpInfo);
|
this.warpsMap.put(name, warpInfo);
|
||||||
DataLocation location = warpInfo.getLocation();
|
DataLocation location = warpInfo.getLocation();
|
||||||
getSQLManager().createReplace(DBTables.Warps.TABLE_NAME.get())
|
DatabaseTables.WRAPS.createReplace()
|
||||||
.setColumnNames("name", "owner", "world", "x", "y", "z", "yaw", "pitch")
|
.setColumnNames("name", "owner", "world", "x", "y", "z", "yaw", "pitch")
|
||||||
.setParams(
|
.setParams(
|
||||||
name, warpInfo.getOwner(), location.getWorldName(),
|
name, warpInfo.getOwner(), location.getWorldName(),
|
||||||
@ -213,13 +188,20 @@ public class MySQLStorage implements DataStorage {
|
|||||||
if (actualName == null) return false;
|
if (actualName == null) return false;
|
||||||
|
|
||||||
this.warpsMap.remove(actualName);
|
this.warpsMap.remove(actualName);
|
||||||
return getSQLManager().createDelete(DBTables.Warps.TABLE_NAME.get())
|
return DatabaseTables.WRAPS.createDelete()
|
||||||
.addCondition("name", actualName).setLimit(1)
|
.addCondition("name", actualName).setLimit(1)
|
||||||
.build().executeFunction((i) -> i > 0, false);
|
.build().executeFunction((i) -> i > 0, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SQLManager getSQLManager() {
|
protected DataLocation readLocation(ResultSet result) throws SQLException {
|
||||||
return sqlManager;
|
return new DataLocation(
|
||||||
|
result.getString("world"),
|
||||||
|
result.getDouble("x"),
|
||||||
|
result.getDouble("y"),
|
||||||
|
result.getDouble("z"),
|
||||||
|
result.getFloat("yaw"),
|
||||||
|
result.getFloat("pitch")
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -0,0 +1,124 @@
|
|||||||
|
package cc.carm.plugin.moeteleport.storage.extension;
|
||||||
|
|
||||||
|
import cc.carm.plugin.moeteleport.conf.location.DataLocation;
|
||||||
|
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
||||||
|
import cc.carm.plugin.moeteleport.storage.UserData;
|
||||||
|
import cc.carm.plugin.moeteleport.storage.impl.PluginBasedStorage;
|
||||||
|
import com.Zrips.CMI.CMI;
|
||||||
|
import com.Zrips.CMI.Containers.CMIUser;
|
||||||
|
import com.Zrips.CMI.Modules.Homes.CmiHome;
|
||||||
|
import com.Zrips.CMI.Modules.Warps.CmiWarp;
|
||||||
|
import com.Zrips.CMI.Modules.Warps.WarpManager;
|
||||||
|
import net.Zrips.CMILib.Container.CMILocation;
|
||||||
|
import org.bukkit.Location;
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
public class CMIStorage extends PluginBasedStorage {
|
||||||
|
|
||||||
|
public CMIStorage() {
|
||||||
|
super("CMI");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable UserData loadData(@NotNull UUID uuid) {
|
||||||
|
return new CMIUserData(uuid);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<String, WarpInfo> getWarps() {
|
||||||
|
Map<String, WarpInfo> warps = new LinkedHashMap<>();
|
||||||
|
|
||||||
|
cmi().getWarps().forEach((name, warp) -> warps.put(name, new WarpInfo(name, warp.getCreator(), convert(warp.getLoc()))));
|
||||||
|
|
||||||
|
return warps;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setWarp(@NotNull String name, @NotNull WarpInfo warpInfo) throws Exception {
|
||||||
|
CmiWarp warp = new CmiWarp(name);
|
||||||
|
|
||||||
|
warp.setLoc(convert(warpInfo.getLocation()));
|
||||||
|
warp.setCreator(warpInfo.getOwner());
|
||||||
|
|
||||||
|
cmi().addWarp(warp);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean delWarp(@NotNull String name) throws Exception {
|
||||||
|
CmiWarp warp = cmi().getWarp(name);
|
||||||
|
if (warp == null) return false;
|
||||||
|
cmi().remove(warp);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasWarp(@NotNull String name) {
|
||||||
|
return cmi().getWarp(name) != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected WarpManager cmi() {
|
||||||
|
return CMI.getInstance().getWarpManager();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static DataLocation convert(CMILocation loc) {
|
||||||
|
return new DataLocation(loc.getWorldName(), loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static CMILocation convert(DataLocation loc) {
|
||||||
|
return new CMILocation(loc.getWorldName(), loc.getX(), loc.getY(), loc.getZ(), loc.getYaw(), loc.getPitch());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class CMIUserData extends UserData {
|
||||||
|
|
||||||
|
CMIUser cmiUser;
|
||||||
|
|
||||||
|
public CMIUserData(@NotNull UUID userUUID) {
|
||||||
|
super(userUUID);
|
||||||
|
this.cmiUser = CMI.getInstance().getPlayerManager().getUser(userUUID);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CMIUser getCMIUser() {
|
||||||
|
return cmiUser;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public LinkedHashMap<String, DataLocation> getHomeLocations() {
|
||||||
|
LinkedHashMap<String, DataLocation> homes = new LinkedHashMap<>();
|
||||||
|
getCMIUser().getHomes().forEach((name, home) -> {
|
||||||
|
homes.put(name, convert(home.getLoc()));
|
||||||
|
});
|
||||||
|
return homes;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setHomeLocation(String homeName, Location location) {
|
||||||
|
getCMIUser().addHome(new CmiHome(homeName, new CMILocation(location)), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void delHomeLocation(String homeName) {
|
||||||
|
try {
|
||||||
|
getCMIUser().removeHome(homeName);
|
||||||
|
} catch (Exception ignored) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @Nullable Location getLastLocation() {
|
||||||
|
return getCMIUser().getLastTeleportLocation();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setLastLocation(@Nullable Location lastLocation) {
|
||||||
|
getCMIUser().setLastTeleportLocation(lastLocation);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
@ -1,7 +1,7 @@
|
|||||||
package cc.carm.plugin.moeteleport.storage.extension;
|
package cc.carm.plugin.moeteleport.storage.extension;
|
||||||
|
|
||||||
import cc.carm.plugin.moeteleport.configuration.location.DataLocation;
|
import cc.carm.plugin.moeteleport.conf.location.DataLocation;
|
||||||
import cc.carm.plugin.moeteleport.model.UserData;
|
import cc.carm.plugin.moeteleport.storage.UserData;
|
||||||
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
||||||
import cc.carm.plugin.moeteleport.storage.impl.PluginBasedStorage;
|
import cc.carm.plugin.moeteleport.storage.impl.PluginBasedStorage;
|
||||||
import com.earth2me.essentials.Essentials;
|
import com.earth2me.essentials.Essentials;
|
||||||
|
@ -2,8 +2,8 @@ package cc.carm.plugin.moeteleport.storage.file;
|
|||||||
|
|
||||||
import cc.carm.lib.easysql.api.util.UUIDUtil;
|
import cc.carm.lib.easysql.api.util.UUIDUtil;
|
||||||
import cc.carm.plugin.moeteleport.Main;
|
import cc.carm.plugin.moeteleport.Main;
|
||||||
import cc.carm.plugin.moeteleport.configuration.location.DataLocation;
|
import cc.carm.plugin.moeteleport.conf.location.DataLocation;
|
||||||
import cc.carm.plugin.moeteleport.model.UserData;
|
import cc.carm.plugin.moeteleport.storage.UserData;
|
||||||
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
||||||
import cc.carm.plugin.moeteleport.storage.DataSerializer;
|
import cc.carm.plugin.moeteleport.storage.DataSerializer;
|
||||||
import cc.carm.plugin.moeteleport.storage.impl.FileBasedStorage;
|
import cc.carm.plugin.moeteleport.storage.impl.FileBasedStorage;
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package cc.carm.plugin.moeteleport.storage.file;
|
package cc.carm.plugin.moeteleport.storage.file;
|
||||||
|
|
||||||
import cc.carm.plugin.moeteleport.Main;
|
import cc.carm.plugin.moeteleport.Main;
|
||||||
import cc.carm.plugin.moeteleport.configuration.location.DataLocation;
|
import cc.carm.plugin.moeteleport.conf.location.DataLocation;
|
||||||
import cc.carm.plugin.moeteleport.model.UserData;
|
import cc.carm.plugin.moeteleport.storage.UserData;
|
||||||
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
||||||
import cc.carm.plugin.moeteleport.storage.DataSerializer;
|
import cc.carm.plugin.moeteleport.storage.DataSerializer;
|
||||||
import cc.carm.plugin.moeteleport.storage.impl.FileBasedStorage;
|
import cc.carm.plugin.moeteleport.storage.impl.FileBasedStorage;
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
package cc.carm.plugin.moeteleport.storage.impl;
|
package cc.carm.plugin.moeteleport.storage.impl;
|
||||||
|
|
||||||
import cc.carm.lib.easyplugin.configuration.values.ConfigValue;
|
import cc.carm.lib.configuration.core.value.ConfigValue;
|
||||||
|
import cc.carm.lib.configuration.core.value.type.ConfiguredValue;
|
||||||
import cc.carm.plugin.moeteleport.Main;
|
import cc.carm.plugin.moeteleport.Main;
|
||||||
import cc.carm.plugin.moeteleport.configuration.location.DataLocation;
|
import cc.carm.plugin.moeteleport.conf.location.DataLocation;
|
||||||
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
||||||
import cc.carm.plugin.moeteleport.storage.DataStorage;
|
import cc.carm.plugin.moeteleport.storage.DataStorage;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
@ -13,15 +14,25 @@ import java.util.UUID;
|
|||||||
|
|
||||||
public abstract class FileBasedStorage implements DataStorage {
|
public abstract class FileBasedStorage implements DataStorage {
|
||||||
|
|
||||||
private static final ConfigValue<String> FILE_PATH = new ConfigValue<>(
|
protected static final ConfigValue<String> FILE_PATH = ConfiguredValue.builder(String.class)
|
||||||
"storage.file-path", String.class, "data"
|
.fromString().defaults("data")
|
||||||
);
|
.headerComments(
|
||||||
|
"选择 yaml/json 存储方式时的存储路径",
|
||||||
|
"默认为相对路径,相对于插件生成的配置文件夹下的路径",
|
||||||
|
"支持绝对路径,如 “/var/data/moe-teleport/\"(linux) 或 \"D:\\data\\moe-teleport\\\"(windows)",
|
||||||
|
"使用绝对路径时请注意权限问题"
|
||||||
|
).build();
|
||||||
|
|
||||||
protected @Nullable File dataFolder;
|
protected @Nullable File dataFolder;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void initialize() throws Exception {
|
public void initialize() throws Exception {
|
||||||
this.dataFolder = new File(Main.getInstance().getDataFolder(), FILE_PATH.get());
|
FILE_PATH.initialize(
|
||||||
|
Main.getInstance().getConfigProvider(), true,
|
||||||
|
"storage.file", null, null
|
||||||
|
);
|
||||||
|
|
||||||
|
this.dataFolder = new File(Main.getInstance().getDataFolder(), FILE_PATH.getNotNull());
|
||||||
if (!dataFolder.exists()) {
|
if (!dataFolder.exists()) {
|
||||||
if (!dataFolder.mkdir()) {
|
if (!dataFolder.mkdir()) {
|
||||||
throw new Exception("无法创建数据文件夹!");
|
throw new Exception("无法创建数据文件夹!");
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package cc.carm.plugin.moeteleport.storage.impl;
|
package cc.carm.plugin.moeteleport.storage.impl;
|
||||||
|
|
||||||
import cc.carm.plugin.moeteleport.configuration.location.DataLocation;
|
import cc.carm.plugin.moeteleport.conf.location.DataLocation;
|
||||||
import cc.carm.plugin.moeteleport.model.UserData;
|
import cc.carm.plugin.moeteleport.storage.UserData;
|
||||||
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
import cc.carm.plugin.moeteleport.model.WarpInfo;
|
||||||
import cc.carm.plugin.moeteleport.storage.DataStorage;
|
import cc.carm.plugin.moeteleport.storage.DataStorage;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
@ -1,31 +0,0 @@
|
|||||||
package cc.carm.plugin.moeteleport.util;
|
|
||||||
|
|
||||||
import java.util.regex.Matcher;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
public class ColorParser {
|
|
||||||
|
|
||||||
public static String parse(String text) {
|
|
||||||
return parseColor(parseHexColor(text));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String parseColor(final String text) {
|
|
||||||
return text.replaceAll("&", "§").replace("§§", "&");
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String parseHexColor(String text) {
|
|
||||||
Pattern pattern = Pattern.compile("&\\((&?#[0-9a-fA-F]{6})\\)");
|
|
||||||
Matcher matcher = pattern.matcher(text);
|
|
||||||
while (matcher.find()) {
|
|
||||||
String hexColor = text.substring(matcher.start() + 2, matcher.end() - 1);
|
|
||||||
hexColor = hexColor.replace("&", "");
|
|
||||||
StringBuilder bukkitColorCode = new StringBuilder('§' + "x");
|
|
||||||
for (int i = 1; i < hexColor.length(); i++) {
|
|
||||||
bukkitColorCode.append('§').append(hexColor.charAt(i));
|
|
||||||
}
|
|
||||||
text = text.replaceAll("&\\(" + hexColor + "\\)", bukkitColorCode.toString().toLowerCase());
|
|
||||||
matcher.reset(text);
|
|
||||||
}
|
|
||||||
return text;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,105 +0,0 @@
|
|||||||
package cc.carm.plugin.moeteleport.util;
|
|
||||||
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
import java.io.*;
|
|
||||||
import java.net.URI;
|
|
||||||
import java.net.URISyntaxException;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Scanner;
|
|
||||||
import java.util.zip.ZipEntry;
|
|
||||||
import java.util.zip.ZipInputStream;
|
|
||||||
|
|
||||||
@SuppressWarnings("ResultOfMethodCallIgnored")
|
|
||||||
public class JarResourceUtils {
|
|
||||||
public static final char JAR_SEPARATOR = '/';
|
|
||||||
|
|
||||||
public static @Nullable String[] readResource(@Nullable InputStream resourceStream) {
|
|
||||||
if (resourceStream == null) return null;
|
|
||||||
try (Scanner scanner = new Scanner(resourceStream, "UTF-8")) {
|
|
||||||
List<String> contents = new ArrayList<>();
|
|
||||||
while (scanner.hasNextLine()) {
|
|
||||||
contents.add(scanner.nextLine());
|
|
||||||
}
|
|
||||||
return contents.toArray(new String[0]);
|
|
||||||
} catch (Exception e) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void copyFolderFromJar(String folderName, File destFolder, CopyOption option)
|
|
||||||
throws IOException {
|
|
||||||
copyFolderFromJar(folderName, destFolder, option, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void copyFolderFromJar(String folderName, File destFolder,
|
|
||||||
CopyOption option, PathTrimmer trimmer) throws IOException {
|
|
||||||
if (!destFolder.exists())
|
|
||||||
destFolder.mkdirs();
|
|
||||||
|
|
||||||
byte[] buffer = new byte[1024];
|
|
||||||
|
|
||||||
File fullPath;
|
|
||||||
String path = JarResourceUtils.class.getProtectionDomain().getCodeSource().getLocation().getPath();
|
|
||||||
if (trimmer != null)
|
|
||||||
path = trimmer.trim(path);
|
|
||||||
try {
|
|
||||||
if (!path.startsWith("file"))
|
|
||||||
path = "file://" + path;
|
|
||||||
|
|
||||||
fullPath = new File(new URI(path));
|
|
||||||
} catch (URISyntaxException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
ZipInputStream zis = new ZipInputStream(new FileInputStream(fullPath));
|
|
||||||
|
|
||||||
ZipEntry entry;
|
|
||||||
while ((entry = zis.getNextEntry()) != null) {
|
|
||||||
if (!entry.getName().startsWith(folderName + JAR_SEPARATOR))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
String fileName = entry.getName();
|
|
||||||
|
|
||||||
if (fileName.charAt(fileName.length() - 1) == JAR_SEPARATOR) {
|
|
||||||
File file = new File(destFolder + File.separator + fileName);
|
|
||||||
if (file.isFile()) {
|
|
||||||
file.delete();
|
|
||||||
}
|
|
||||||
file.mkdirs();
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
File file = new File(destFolder + File.separator + fileName);
|
|
||||||
if (option == CopyOption.COPY_IF_NOT_EXIST && file.exists())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (!file.getParentFile().exists())
|
|
||||||
file.getParentFile().mkdirs();
|
|
||||||
|
|
||||||
if (!file.exists())
|
|
||||||
file.createNewFile();
|
|
||||||
FileOutputStream fos = new FileOutputStream(file);
|
|
||||||
|
|
||||||
int len;
|
|
||||||
while ((len = zis.read(buffer)) > 0) {
|
|
||||||
fos.write(buffer, 0, len);
|
|
||||||
}
|
|
||||||
fos.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
zis.closeEntry();
|
|
||||||
zis.close();
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum CopyOption {
|
|
||||||
COPY_IF_NOT_EXIST, REPLACE_IF_EXIST
|
|
||||||
}
|
|
||||||
|
|
||||||
@FunctionalInterface
|
|
||||||
public interface PathTrimmer {
|
|
||||||
String trim(String original);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,77 +0,0 @@
|
|||||||
package cc.carm.plugin.moeteleport.util;
|
|
||||||
|
|
||||||
import de.themoep.minedown.MineDown;
|
|
||||||
import me.clip.placeholderapi.PlaceholderAPI;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.jetbrains.annotations.Nullable;
|
|
||||||
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
public class MessageUtil {
|
|
||||||
|
|
||||||
public static boolean hasPlaceholderAPI() {
|
|
||||||
return Bukkit.getPluginManager().getPlugin("PlaceholderAPI") != null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void send(@Nullable CommandSender sender, List<String> messages) {
|
|
||||||
if (messages == null || messages.isEmpty() || sender == null) return;
|
|
||||||
for (String s : messages) {
|
|
||||||
sender.spigot().sendMessage(MineDown.parse(s));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void send(@Nullable CommandSender sender, String... messages) {
|
|
||||||
send(sender, Arrays.asList(messages));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void sendWithPlaceholders(CommandSender sender, String... messages) {
|
|
||||||
sendWithPlaceholders(sender, Arrays.asList(messages));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void sendWithPlaceholders(@Nullable CommandSender sender, List<String> messages) {
|
|
||||||
if (messages == null || messages.isEmpty() || sender == null) return;
|
|
||||||
if (hasPlaceholderAPI() && sender instanceof Player) {
|
|
||||||
send(sender, PlaceholderAPI.setPlaceholders((Player) sender, messages));
|
|
||||||
} else {
|
|
||||||
send(sender, messages);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void sendWithPlaceholders(@Nullable CommandSender sender, List<String> messages, String param, Object value) {
|
|
||||||
sendWithPlaceholders(sender, messages, new String[]{param}, new Object[]{value});
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void sendWithPlaceholders(@Nullable CommandSender sender, List<String> messages, String[] params, Object[] values) {
|
|
||||||
sendWithPlaceholders(sender, setCustomParams(messages, params, values));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<String> setCustomParams(List<String> messages, String param, Object value) {
|
|
||||||
return setCustomParams(messages, new String[]{param}, new Object[]{value});
|
|
||||||
}
|
|
||||||
|
|
||||||
public static List<String> setCustomParams(List<String> messages, String[] params, Object[] values) {
|
|
||||||
if (params.length != values.length) return messages;
|
|
||||||
HashMap<String, Object> paramsMap = new HashMap<>();
|
|
||||||
for (int i = 0; i < params.length; i++) {
|
|
||||||
paramsMap.put(params[i], values[i]);
|
|
||||||
}
|
|
||||||
return setCustomParams(messages, paramsMap);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
public static List<String> setCustomParams(List<String> messages, HashMap<String, Object> params) {
|
|
||||||
List<String> list = new ArrayList<>();
|
|
||||||
for (String message : messages) {
|
|
||||||
String afterMessage = message;
|
|
||||||
for (Map.Entry<String, Object> entry : params.entrySet()) {
|
|
||||||
afterMessage = afterMessage.replace(entry.getKey(), entry.getValue().toString());
|
|
||||||
}
|
|
||||||
list.add(afterMessage);
|
|
||||||
}
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -1,37 +0,0 @@
|
|||||||
package cc.carm.plugin.moeteleport.util;
|
|
||||||
|
|
||||||
import cc.carm.lib.githubreleases4j.GithubReleases4J;
|
|
||||||
import cc.carm.plugin.moeteleport.Main;
|
|
||||||
import cc.carm.plugin.moeteleport.MoeTeleport;
|
|
||||||
|
|
||||||
public class UpdateChecker {
|
|
||||||
|
|
||||||
public static void checkUpdate() {
|
|
||||||
Main.getInstance().getScheduler().runAsync(() -> {
|
|
||||||
|
|
||||||
Integer behindVersions = GithubReleases4J.getVersionBehind(
|
|
||||||
"CarmJos", "MoeTeleport",
|
|
||||||
Main.getInstance().getDescription().getVersion()
|
|
||||||
);
|
|
||||||
|
|
||||||
String downloadURL = GithubReleases4J.getReleasesURL("CarmJos", "MoeTeleport");
|
|
||||||
|
|
||||||
MoeTeleport.outputInfo();
|
|
||||||
if (behindVersions == null) {
|
|
||||||
Main.severe("检查更新失败,请您定期查看插件是否更新,避免安全问题。");
|
|
||||||
Main.severe("下载地址 " + downloadURL);
|
|
||||||
} else if (behindVersions == 0) {
|
|
||||||
Main.info("检查完成,当前已是最新版本。");
|
|
||||||
} else if (behindVersions > 0) {
|
|
||||||
Main.info("发现新版本! 目前已落后 " + behindVersions + " 个版本。");
|
|
||||||
Main.info("最新版下载地址 " + downloadURL);
|
|
||||||
} else {
|
|
||||||
Main.severe("检查更新失败! 当前版本未知,请您使用原生版本以避免安全问题。");
|
|
||||||
Main.severe("最新版下载地址 " + downloadURL);
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -1,69 +0,0 @@
|
|||||||
# ${project.name} - ${project.description}
|
|
||||||
# 项目地址: ${project.url}
|
|
||||||
# 下载地址: ${project.distributionManagement.downloadUrl}
|
|
||||||
version: ${project.version}
|
|
||||||
debug: false
|
|
||||||
|
|
||||||
# 统计数据设定
|
|
||||||
# 该选项用于帮助开发者统计插件版本与使用情况,且绝不会影响性能与使用体验。
|
|
||||||
# 当然,您也可以选择在这里关闭,或在plugins/bStats下的配置文件中关闭。
|
|
||||||
metrics: true
|
|
||||||
|
|
||||||
# 检查更新设定
|
|
||||||
# 该选项用于插件判断是否要检查更新,若您不希望插件检查更新并提示您,可以选择关闭。
|
|
||||||
# 检查更新为异步操作,绝不会影响性能与使用体验。
|
|
||||||
check-update: true
|
|
||||||
|
|
||||||
# 存储相关配置
|
|
||||||
# 注意:存储配置不会通过重载指令生效,如有修改请重新启动服务器。
|
|
||||||
storage:
|
|
||||||
|
|
||||||
# 存储方式,可选 [ yaml | json | mysql | Essential(须安装ess插件) ]
|
|
||||||
method: yaml
|
|
||||||
|
|
||||||
# 选择 yaml/json 存储方式时的存储路径
|
|
||||||
# 默认为相对路径,相对于插件生成的配置文件夹下的路径
|
|
||||||
# 支持绝对路径,如 “/var/data/moe-teleport/"(linux) 或 "D:\data\moe-teleport\"(windows)
|
|
||||||
# 使用绝对路径时请注意权限问题
|
|
||||||
file-path: data
|
|
||||||
|
|
||||||
# 选择 database 存储方式时的数据库配置
|
|
||||||
mysql:
|
|
||||||
# 数据库驱动路径
|
|
||||||
driver: "com.mysql.cj.jdbc.Driver"
|
|
||||||
# 数据库连接配置
|
|
||||||
host: "127.0.0.1"
|
|
||||||
port: 3306
|
|
||||||
database: "minecraft"
|
|
||||||
username: "username"
|
|
||||||
password: "password"
|
|
||||||
# 插件相关表的名称
|
|
||||||
tables:
|
|
||||||
last-location: "mt_last_locations"
|
|
||||||
home: "mt_homes"
|
|
||||||
warps: "mt_warps"
|
|
||||||
|
|
||||||
|
|
||||||
defaults:
|
|
||||||
# 默认玩家可设置多少家
|
|
||||||
home: 1
|
|
||||||
# 默认玩家可设置多少地标
|
|
||||||
warp: 0
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
home:
|
|
||||||
10: "MoeTeleport.home.vip" # 拥有该权限的玩家最多可以设置10个家
|
|
||||||
warp:
|
|
||||||
2: "MoeTeleport.home.vip" # 拥有该权限的玩家最多可以设置2个地标
|
|
||||||
|
|
||||||
# 传送请求过期时间
|
|
||||||
expireTime: 30
|
|
||||||
|
|
||||||
# 返回死亡点
|
|
||||||
# 开启后将允许玩家输入 /back 返回死亡地点。
|
|
||||||
death-back: true
|
|
||||||
|
|
||||||
# 危险的方块类型,将判断目的地脚下的方块的类型是否在这个列表中
|
|
||||||
dangerous-blocks:
|
|
||||||
- LAVA
|
|
||||||
- AIR
|
|
@ -1,4 +0,0 @@
|
|||||||
# ${project.name} - ${project.description}
|
|
||||||
# 项目地址: ${project.url}
|
|
||||||
# 下载地址: ${project.distributionManagement.downloadUrl}
|
|
||||||
version: ${project.version}
|
|
@ -10,6 +10,7 @@ api-version: 1.13
|
|||||||
softdepend:
|
softdepend:
|
||||||
- PlaceholderAPI
|
- PlaceholderAPI
|
||||||
- Essentials
|
- Essentials
|
||||||
|
- CMI
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
"MoeTeleport":
|
"MoeTeleport":
|
||||||
|
Loading…
Reference in New Issue
Block a user