From 4a60cb75dea1d8f99c07cd4277649af40dbcaea4 Mon Sep 17 00:00:00 2001 From: Izzel_Aliz Date: Sun, 13 May 2018 22:42:02 +0800 Subject: [PATCH] Eclipse Compiler --- docs/.nojekyll | 0 docs/README.md | 61 ------ docs/_coverpage.md | 10 - docs/_sidebar.md | 7 - docs/asmClassTransformer.md | 0 docs/dependency.md | 40 ---- docs/index.html | 56 ----- docs/ref.md | 15 -- docs/tlocale.md | 207 ------------------ pom.xml | 19 +- .../ilummc/tlib/inject/TConfigWatcher.java | 22 +- .../ilummc/tlib/resources/TLocaleLoader.java | 22 +- 12 files changed, 44 insertions(+), 415 deletions(-) delete mode 100644 docs/.nojekyll delete mode 100644 docs/README.md delete mode 100644 docs/_coverpage.md delete mode 100644 docs/_sidebar.md delete mode 100644 docs/asmClassTransformer.md delete mode 100644 docs/dependency.md delete mode 100644 docs/index.html delete mode 100644 docs/ref.md delete mode 100644 docs/tlocale.md diff --git a/docs/.nojekyll b/docs/.nojekyll deleted file mode 100644 index e69de29..0000000 diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index b00594d..0000000 --- a/docs/README.md +++ /dev/null @@ -1,61 +0,0 @@ -# TabooLib - -> Bukkit 开发工具库 - -[![](http://ci.pcd.ac.cn/job/TabooLibDev/badge/icon)](http://ci.pcd.ac.cn/job/TabooLibDev) -[![](https://img.shields.io/github/downloads/Bkm016/TabooLib/total.svg)](https://github.com/Bkm016/TabooLib/releases) -[![](https://img.shields.io/github/release/Bkm016/TabooLib.svg)](https://github.com/Bkm016/TabooLib/tags) -[![](https://img.shields.io/github/stars/Bkm016/TabooLib.svg?style=flat-square&label=Stars)](https://github.com/Bkm016/TabooLib) -[![](https://jitpack.io/v/Bkm016/TabooLib.svg)](https://jitpack.io/#Bkm016/TabooLib) - -## 目录 - -* [TLocale](tlocale.md) - -## 添加 TabooLib 为库 - -### Maven - -```xml - - - - jitpack.io - https://jitpack.io - - - - com.github.Bkm016 - TabooLib - JitPack版本 - - -``` - -### Gradle - -```groovy -repositories { - maven { url 'https://jitpack.io' } -} -dependencies { - compile 'com.github.Bkm016:TabooLib:JitPack版本' -} -``` - -### sbt - -```scala -resolvers += "jitpack" at "https://jitpack.io" -libraryDependencies += "com.github.Bkm016" % "TabooLib" % "JitPack版本" -``` - -在添加依赖后,你还需要在 `plugin.yml` 中添加 `softdepend` 或者 `depend` 才能享受到 TabooLib 的全部功能。 - ---- -**3.56** 版本开始 `com.sun.tools.jar` 不再和插件一起发布。 - -如果需要启用 *JavaShell* 功能请将 [com.sun.tools.jar](http://skymc.oss-cn-shanghai.aliyuncs.com/plugins/com.sun.tools.jar) 放入 *"TabooLib/JavaShell/lib"* 文件夹中。   - ---- -**3.832** 版本后开源协议更改为 `MIT` \ No newline at end of file diff --git a/docs/_coverpage.md b/docs/_coverpage.md deleted file mode 100644 index 8150eb7..0000000 --- a/docs/_coverpage.md +++ /dev/null @@ -1,10 +0,0 @@ -# TabooLib - -> 超强 Bukkit API 拓展 - -* TLocale 语言文本 API -* 自动依赖下载 -* Annotation Development - -[GitHub](https://github.com/Bkm016/TabooLib/) -[开始](#目录) \ No newline at end of file diff --git a/docs/_sidebar.md b/docs/_sidebar.md deleted file mode 100644 index 867e4f1..0000000 --- a/docs/_sidebar.md +++ /dev/null @@ -1,7 +0,0 @@ -* [TabooLib](README.md) -* [TLocale](tlocale.md) -* [TDependency](dependency.md) - -* 实用工具 Utilities - -* [Ref](ref.md) \ No newline at end of file diff --git a/docs/asmClassTransformer.md b/docs/asmClassTransformer.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/dependency.md b/docs/dependency.md deleted file mode 100644 index 1dce06a..0000000 --- a/docs/dependency.md +++ /dev/null @@ -1,40 +0,0 @@ -# TDependency - -几个简单的注解轻松使用第三方库 - -## 请求一个第三方库 - -你只需要在你的主类上加上 `@Dependency` 注解。 - -比如,假如你要用 Scala 或者 Kotlin,那么可以: - -```java -@Dependency(type = Dependency.Type.LIBRARY, maven = "org.scala-lang:scala-library:2.12.6") -@Dependency(type = Dependency.Type.LIBRARY, maven = "org.jetbrains.kotlin:kotlin-stdlib:1.2.31") -public class TestMain extends JavaPlugin { - // ... -} -``` - -然后这些第三方将在 `onEnable` 调用之前可用。如果需要更早可用,你需要在使用任意第三方库之前调用一次 `TDependencyInjector.inject(instance, instance)`, -`instance` 为你的插件主类实例。 - -## 使用自定义仓库的库 - -在 `@Dependency` 里加入 `mavenRepo` 即可,如 - -```java -@Dependency(type = Dependency.Type.LIBRARY, maven = "com.github.Bkm016:TabooLib:dev-SNAPSHOT", mavenRepo = "https://jitpack.io/") -public class TestMain extends JavaPlugin { - // ... -} -``` - -## 使用指定的 URL 的 jar 文件作为库 - -```java -@Dependency(type = Dependency.Type.LIBRARY, maven = "com.sun:tools:1.8.0_151", url = "http://skymc.oss-cn-shanghai.aliyuncs.com/plugins/com.sun.tools.jar") -public class TestMain extends JavaPlugin { - // ... -} -``` \ No newline at end of file diff --git a/docs/index.html b/docs/index.html deleted file mode 100644 index eccbf45..0000000 --- a/docs/index.html +++ /dev/null @@ -1,56 +0,0 @@ - - - - - TabooLib 文档 - - - - - - -
Loading ...
- - - - - - - - - - - diff --git a/docs/ref.md b/docs/ref.md deleted file mode 100644 index f96bc9d..0000000 --- a/docs/ref.md +++ /dev/null @@ -1,15 +0,0 @@ -`com.ilummc.tlib.util.Ref` - -## getDeclaredFields - -众所周知(~~啥你竟然不知道~~) `Class#getDeclaredFields` 方法在获取时,如果该类的某个字段的类不在 classpath 里面,那么就会抛出一个 `NoClassDefFoundError` 异常。 - -而在 Ref 类中的几个 getDeclaredFields 方法解决了这个问题:返回一个 `List` 实例,只包含在 classpath 中的类。 - -## getCallerClass - -众所周知(~~啥你竟然不知道~~) Oracle 正在对内部包比如 `sun.misc` 这样的包动手脚,并且这些包可能在未来的版本里被删除(我们的 `Unsafe` 已经没了)。 - -而某个 Reflection 类就很好用,特别是 `Reflection#getCallerClass(int)` 这个方法。于是 Ref 中的 getCallerClass 方法解决了这个问题:通过分析栈调用来获取 caller class,并且在 Reflection 这个类还存在的时候用原来的方法调用。 - -在某个方法中调用 Ref.getCallerClass(3) 会返回调用这个方法的类。 \ No newline at end of file diff --git a/docs/tlocale.md b/docs/tlocale.md deleted file mode 100644 index bfc469d..0000000 --- a/docs/tlocale.md +++ /dev/null @@ -1,207 +0,0 @@ -# TLocale - -通过简单的 yml 文件自定义你的所有信息 - -## 添加一个语言文件 - -TLocale 的语言文件是自动加载的,你可以在 TabooLib 初始化你的插件完毕后任意的调用来发送,前提是你在 `plugin.yml` 添加了 TabooLib 为 `depend` 或 `softdepend` - -语言文件应该放在 `/lang/xx_XX.yml` 中,TabooLib 默认会加载 `zh_CN` 和 `en_US` 的语言文件。 - -在添加了语言文件后,你就应该可以使用 `com.ilummc.tlib.resources.TLocale` 类的所有静态方法了。 - -在 `/TaabooLib/config.yml` 中有 `LOCALE` 下的几个选项可以设置加载的语言和是否默认启用 PlaceholderAPI - -## 发送一条消息 - -`/lang/zh_CN.yml` -```yaml -TEST: '{0} 加入服务器' -TITLE_TEST: - ==: TITLE - title: '&b{0} 加入了服务器' - subtitle: '&a{0} 太强了以至于他还有 subtitle 显示' -``` - -代码部分 -```java -package com.ilummc.tlib; - -import org.bukkit.Bukkit; -import org.bukkit.event.EventHandler; -import org.bukkit.event.Listener; -import org.bukkit.plugin.java.JavaPlugin; -import org.bukkit.event.player.PlayerJoinEvent; -import com.ilummc.tlib.resources.TLocale; - -public class ExampleMain extends JavaPlugin implements Listener { - - @Override - public void onEnable() { - Bukkit.getPluginManager().registerEvents(this, this); - } - - @EventHandler - public void onJoin(PlayerJoinEvent event) { - TLocale.sendTo(event.getPlayer(), "TEST", event.getPlayer().getName()); - TLocale.sendTo(event.getPlayer(), "TITLE_TEST", event.getPlayer().getName()); - } -} -``` - -## 语言文本格式 - -TLocale 的语言文本采用 yml 存储,每一个键对应一个或多个值、 - -以下的格式都是可以的: -```yaml -normal: '一条普通的测试信息' -multiline: |- - 多行的测试信息 - 这是 YAML 表示带有换行符字符串的方法 -typeMessage: - ==: TITLE - title: 这是带有类型的语言文本 - subtitle: 在下方你可以看到所有可用的类型 -combinedTypeMessage: - - ==: TEXT - text: - - '这也是一条普通的测试信息' - - '但是他有很多行' - - '还有可替换的文本 {0}' - - ==: ACTION - text: '一条 ActionBar 消息' - - ==: JSON - text: - - '这条消息仍然可以使用 TLocale.sendTo(sender, "combinedTypeMessage") 来发送' - - '玩家会收到一条聊天栏消息' - - '一条 ActionBar 的消息' - - '和一条 JSON 文本,比如<§a§n点击这里就会执行一条命令@cmd>' - args: - cmd: - hover: |- - 命令是 /tp ~ ~50 ~ - 这一条消息展示了 TLocale 的所有特性 - command: '/tp ~ ~50 ~' - - '最后,这个消息也能混着普通字符串用' -``` - -TLocale 可以发送普通的聊天消息和其他复杂的消息,比如 ActionBar 和 Title 消息。 - -为了方便起见,我们将如下的配置 -```yaml -==: 种类 -参数1: xxxx -参数2: yyyy -``` -称为一个 `语言对象`。 - -每个语言对象可以有以下几种排列方式: -```yaml -文本1: 语言对象 -文本2: - - 语言对象 - - 语言对象 -节点1: - 文本3: 语言对象 -``` - -TLocale 的文本都支持替换,如 `{N}` ,替换的文本是 `TLocale` 的方法调用时传入的对应字符串。 - -!> 因为写这个功能的人是程序员,所以 **N 从 0 开始** - -以下内容列举了所有的语言对象种类 - -### TEXT - -`TEXT` 类型代表一条普通的聊天栏文本,有以下几种表示方法: -```yaml -node1: '文本' -node2: - - '文本' - - '文本' -node3: - ==: TEXT - text: '文本' -node4: - ==: TEXT - text: - - '文本' - - 'Placeholder API 测试 %vault_eco_balance%' - papi: true -``` -你可以在任意一个 `TEXT` 中添加 `papi: true` 来启用对 PlaceholderAPI 的支持,如果不添加,默认值为 `/TaabooLib/config.yml` 中的 `LOCALE.USE_PAPI` 设置的值。 - -所有的选项都是**可选的** 。 - -### TITLE - -`TITLE` 类型代表一条 title 消息,可以含有淡入淡出的时间选项。所有的选项都是**可选的** 。 - -```yaml -node: - ==: TITLE - title: '显示在屏幕正中的 title 文本' - subtitle: 'subtitle 文本' - fadein: 10 - fadeout: 10 - stay: 20 - papi: false -``` - -### ACTION - -`ACTION` 类型代表一条 ActionBar 消息。所有的选项都是**可选的** 。 - -```yaml -node: - ==: ACTION - text: '&6ActionBar &e文本' - papi: false -``` - -### JSON - -`JSON` 类型代表一条可以点击和可以含有悬浮文字的消息。 - -消息的文本在 `text` 中指定。 - -可以点击、鼠标停留的文本需要使用 `<可选的文本@参数名称>` 来表示,然后在 `args` 参数中添加你指定的参数名称并添加点击和悬浮的文本。 - -全部 JSON 的任何地方都可以启用替换功能,包括内置的替换和 PAPI 。 - -所有的选项都是**可选的** 。 - -```yaml -node: - ==: JSON - text: - - '<点击建议命令@test1>' - - '<点击执行命令@test2>' - - '<鼠标停留查看悬浮字@test3>' - - '<@test4>' - - '<又可以点击又可以悬浮的信息@combined>' - - '替换测试1 {0}' - - '<@test6>' - papi: true - args: - test1: - suggest: '/say 建议执行的命令' - test2: - command: '/say 点击直接执行的命令' - test3: - hover: |- - &6鼠标悬浮显示的文字 - &9可以是单行,也可以是多行 - test4: - text: '你可以在参数中指定显示的文本,比如这一条' - test5: - command: '/say Hello World.' - hover: '点击说一句 &cHello World' - test6: - text: 'JSON 文本也有参数替换的功能,比如 {1}' - hover: |- - 悬浮字中也可以替换 {1} - 甚至可以加入 PAPI 变量如 %player_name% - command: '点击文本也可以替换,不做演示' -``` \ No newline at end of file diff --git a/pom.xml b/pom.xml index c21d414..8be3a23 100644 --- a/pom.xml +++ b/pom.xml @@ -21,15 +21,32 @@ src/main/java + + org.apache.maven.plugins + maven-dependency-plugin + org.apache.maven.plugins maven-compiler-plugin - 3.6.2 + 3.7.0 + eclipse 1.8 1.8 UTF-8 + + + org.codehaus.plexus + plexus-compiler-eclipse + 2.8.4 + + + org.eclipse.jdt + ecj + 3.13.102 + + org.apache.maven.plugins diff --git a/src/main/java/com/ilummc/tlib/inject/TConfigWatcher.java b/src/main/java/com/ilummc/tlib/inject/TConfigWatcher.java index c33e1d6..b520d7d 100644 --- a/src/main/java/com/ilummc/tlib/inject/TConfigWatcher.java +++ b/src/main/java/com/ilummc/tlib/inject/TConfigWatcher.java @@ -25,17 +25,21 @@ public class TConfigWatcher { private final Map>> map = new HashMap<>(); public TConfigWatcher() { - service.scheduleAtFixedRate(() -> map.forEach((service, triple) -> { - WatchKey key; - while ((key = service.poll()) != null) { - for (WatchEvent watchEvent : key.pollEvents()) { - if (triple.getLeft().getName().equals(Objects.toString(watchEvent.context()))) { - triple.getRight().accept(triple.getMiddle()); + service.scheduleAtFixedRate(() -> { + synchronized (map) { + map.forEach((service, triple) -> { + WatchKey key; + while ((key = service.poll()) != null) { + for (WatchEvent watchEvent : key.pollEvents()) { + if (triple.getLeft().getName().equals(Objects.toString(watchEvent.context()))) { + triple.getRight().accept(triple.getMiddle()); + } + } + key.reset(); } - } - key.reset(); + }); } - }), 1000, 100, TimeUnit.MILLISECONDS); + }, 1000, 100, TimeUnit.MILLISECONDS); } public void addOnListen(File file, Object obj, Consumer consumer) { diff --git a/src/main/java/com/ilummc/tlib/resources/TLocaleLoader.java b/src/main/java/com/ilummc/tlib/resources/TLocaleLoader.java index 3e0f11e..9b27c8e 100644 --- a/src/main/java/com/ilummc/tlib/resources/TLocaleLoader.java +++ b/src/main/java/com/ilummc/tlib/resources/TLocaleLoader.java @@ -162,15 +162,19 @@ public class TLocaleLoader { private static int compareAndSet(Map origin, Map current, File file) { int i = compareMaps(origin, current); - DumperOptions options = new DumperOptions(); - options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); - options.setAllowUnicode(false); - Yaml yaml = new Yaml(options); - String dump = yaml.dump(current); - try { - Files.write(dump.getBytes(Charset.forName("utf-8")), file); - } catch (IOException ignored) { + /* + if (i > 0) { + DumperOptions options = new DumperOptions(); + options.setDefaultFlowStyle(DumperOptions.FlowStyle.BLOCK); + options.setAllowUnicode(false); + Yaml yaml = new Yaml(options); + String dump = yaml.dump(current); + try { + Files.write(dump.getBytes(Charset.forName("utf-8")), file); + } catch (IOException ignored) { + } } + */ return i; } @@ -191,7 +195,7 @@ public class TLocaleLoader { Map currentMap = currentLocaleMap(localeFile); int update = compareAndSet(originMap, currentMap, localeFile); TLocaleInstance localeInstance = getLocaleInstance(plugin); - YamlConfiguration localeConfiguration = ConfigUtils.loadYaml(plugin, localeFile); + YamlConfiguration localeConfiguration = (YamlConfiguration) ConfigUtils.mapToConf(currentMap); localeInstance.load(localeConfiguration); if (update == 0) { infoLogger("SUCCESS-LOADING-LANG-NORMAL", plugin.getName(), localeFile.getName().split("\\.")[0], String.valueOf(localeInstance.size()));