diff --git a/.gitignore b/.gitignore
index 210bc17..6890776 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
target
out
-server
\ No newline at end of file
+server
+/.idea/
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
index 409022c..4a80be9 100644
--- a/.idea/jarRepositories.xml
+++ b/.idea/jarRepositories.xml
@@ -6,25 +6,15 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
@@ -36,15 +26,35 @@
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Java_EE_6_Java_EE_6.xml b/.idea/libraries/Java_EE_6_Java_EE_6.xml
new file mode 100644
index 0000000..8e2c268
--- /dev/null
+++ b/.idea/libraries/Java_EE_6_Java_EE_6.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_github_MilkBowl_VaultAPI_1_7.xml b/.idea/libraries/Maven__com_github_MilkBowl_VaultAPI_1_7.xml
index 7c9ea23..a584f74 100644
--- a/.idea/libraries/Maven__com_github_MilkBowl_VaultAPI_1_7.xml
+++ b/.idea/libraries/Maven__com_github_MilkBowl_VaultAPI_1_7.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_github_oshi_oshi_core_5_8_2.xml b/.idea/libraries/Maven__com_github_oshi_oshi_core_5_8_2.xml
new file mode 100644
index 0000000..63f504d
--- /dev/null
+++ b/.idea/libraries/Maven__com_github_oshi_oshi_core_5_8_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_gmail_filoghost_holographicdisplays_holographicdisplays_api_2_4_0.xml b/.idea/libraries/Maven__com_gmail_filoghost_holographicdisplays_holographicdisplays_api_2_4_0.xml
deleted file mode 100644
index d4f4d55..0000000
--- a/.idea/libraries/Maven__com_gmail_filoghost_holographicdisplays_holographicdisplays_api_2_4_0.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_gmail_filoghost_holographicdisplays_holographicdisplays_api_2_4_9.xml b/.idea/libraries/Maven__com_gmail_filoghost_holographicdisplays_holographicdisplays_api_2_4_9.xml
new file mode 100644
index 0000000..2ae55b2
--- /dev/null
+++ b/.idea/libraries/Maven__com_gmail_filoghost_holographicdisplays_holographicdisplays_api_2_4_9.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_google_code_findbugs_jsr305_3_0_2.xml b/.idea/libraries/Maven__com_google_code_findbugs_jsr305_3_0_2.xml
new file mode 100644
index 0000000..6cc8278
--- /dev/null
+++ b/.idea/libraries/Maven__com_google_code_findbugs_jsr305_3_0_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_google_code_gson_gson_2_8_0.xml b/.idea/libraries/Maven__com_google_code_gson_gson_2_8_0.xml
index d344a8d..abc276f 100644
--- a/.idea/libraries/Maven__com_google_code_gson_gson_2_8_0.xml
+++ b/.idea/libraries/Maven__com_google_code_gson_gson_2_8_0.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_google_guava_guava_21_0.xml b/.idea/libraries/Maven__com_google_guava_guava_21_0.xml
index d450310..613497b 100644
--- a/.idea/libraries/Maven__com_google_guava_guava_21_0.xml
+++ b/.idea/libraries/Maven__com_google_guava_guava_21_0.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_google_protobuf_protobuf_java_3_11_4.xml b/.idea/libraries/Maven__com_google_protobuf_protobuf_java_3_11_4.xml
new file mode 100644
index 0000000..ba44a50
--- /dev/null
+++ b/.idea/libraries/Maven__com_google_protobuf_protobuf_java_3_11_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_googlecode_json_simple_json_simple_1_1_1.xml b/.idea/libraries/Maven__com_googlecode_json_simple_json_simple_1_1_1.xml
index 9314151..7f34eab 100644
--- a/.idea/libraries/Maven__com_googlecode_json_simple_json_simple_1_1_1.xml
+++ b/.idea/libraries/Maven__com_googlecode_json_simple_json_simple_1_1_1.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_mojang_authlib_3_2_38.xml b/.idea/libraries/Maven__com_mojang_authlib_3_2_38.xml
new file mode 100644
index 0000000..8cd8f04
--- /dev/null
+++ b/.idea/libraries/Maven__com_mojang_authlib_3_2_38.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_mojang_brigadier_1_0_18.xml b/.idea/libraries/Maven__com_mojang_brigadier_1_0_18.xml
new file mode 100644
index 0000000..01c2a49
--- /dev/null
+++ b/.idea/libraries/Maven__com_mojang_brigadier_1_0_18.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_mojang_datafixerupper_4_0_26.xml b/.idea/libraries/Maven__com_mojang_datafixerupper_4_0_26.xml
new file mode 100644
index 0000000..d24d952
--- /dev/null
+++ b/.idea/libraries/Maven__com_mojang_datafixerupper_4_0_26.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_mojang_javabridge_1_2_24.xml b/.idea/libraries/Maven__com_mojang_javabridge_1_2_24.xml
new file mode 100644
index 0000000..f12bc03
--- /dev/null
+++ b/.idea/libraries/Maven__com_mojang_javabridge_1_2_24.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_zaxxer_HikariCP_3_4_2.xml b/.idea/libraries/Maven__com_zaxxer_HikariCP_3_4_2.xml
index ed3ac0a..fe54a31 100644
--- a/.idea/libraries/Maven__com_zaxxer_HikariCP_3_4_2.xml
+++ b/.idea/libraries/Maven__com_zaxxer_HikariCP_3_4_2.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__commons_codec_commons_codec_1_11.xml b/.idea/libraries/Maven__commons_codec_commons_codec_1_11.xml
new file mode 100644
index 0000000..cfa4b25
--- /dev/null
+++ b/.idea/libraries/Maven__commons_codec_commons_codec_1_11.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__commons_io_commons_io_2_11_0.xml b/.idea/libraries/Maven__commons_io_commons_io_2_11_0.xml
new file mode 100644
index 0000000..4f26158
--- /dev/null
+++ b/.idea/libraries/Maven__commons_io_commons_io_2_11_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__commons_lang_commons_lang_2_6.xml b/.idea/libraries/Maven__commons_lang_commons_lang_2_6.xml
index 67f4ad3..1b2aeac 100644
--- a/.idea/libraries/Maven__commons_lang_commons_lang_2_6.xml
+++ b/.idea/libraries/Maven__commons_lang_commons_lang_2_6.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_netty_netty_all_4_1_68_Final.xml b/.idea/libraries/Maven__io_netty_netty_all_4_1_68_Final.xml
new file mode 100644
index 0000000..3ea8ac1
--- /dev/null
+++ b/.idea/libraries/Maven__io_netty_netty_all_4_1_68_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__it_unimi_dsi_fastutil_8_5_6.xml b/.idea/libraries/Maven__it_unimi_dsi_fastutil_8_5_6.xml
new file mode 100644
index 0000000..5dde384
--- /dev/null
+++ b/.idea/libraries/Maven__it_unimi_dsi_fastutil_8_5_6.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__javax_inject_javax_inject_1.xml b/.idea/libraries/Maven__javax_inject_javax_inject_1.xml
new file mode 100644
index 0000000..401751b
--- /dev/null
+++ b/.idea/libraries/Maven__javax_inject_javax_inject_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__jline_jline_2_12_1.xml b/.idea/libraries/Maven__jline_jline_2_12_1.xml
new file mode 100644
index 0000000..592a1c7
--- /dev/null
+++ b/.idea/libraries/Maven__jline_jline_2_12_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__junit_junit_4_10.xml b/.idea/libraries/Maven__junit_junit_4_10.xml
index c6098c0..3ff326a 100644
--- a/.idea/libraries/Maven__junit_junit_4_10.xml
+++ b/.idea/libraries/Maven__junit_junit_4_10.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__me_clip_placeholderapi_2_10_5.xml b/.idea/libraries/Maven__me_clip_placeholderapi_2_10_5.xml
deleted file mode 100644
index 79e301b..0000000
--- a/.idea/libraries/Maven__me_clip_placeholderapi_2_10_5.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__me_clip_placeholderapi_2_11_1.xml b/.idea/libraries/Maven__me_clip_placeholderapi_2_11_1.xml
new file mode 100644
index 0000000..98c244e
--- /dev/null
+++ b/.idea/libraries/Maven__me_clip_placeholderapi_2_11_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__mysql_mysql_connector_java_8_0_27.xml b/.idea/libraries/Maven__mysql_mysql_connector_java_8_0_27.xml
new file mode 100644
index 0000000..3473278
--- /dev/null
+++ b/.idea/libraries/Maven__mysql_mysql_connector_java_8_0_27.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_java_dev_jna_jna_5_9_0.xml b/.idea/libraries/Maven__net_java_dev_jna_jna_5_9_0.xml
new file mode 100644
index 0000000..66cffc0
--- /dev/null
+++ b/.idea/libraries/Maven__net_java_dev_jna_jna_5_9_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_java_dev_jna_jna_platform_5_9_0.xml b/.idea/libraries/Maven__net_java_dev_jna_jna_platform_5_9_0.xml
new file mode 100644
index 0000000..332ab0a
--- /dev/null
+++ b/.idea/libraries/Maven__net_java_dev_jna_jna_platform_5_9_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_md_5_bungeecord_chat_1_12_SNAPSHOT.xml b/.idea/libraries/Maven__net_md_5_bungeecord_chat_1_12_SNAPSHOT.xml
new file mode 100644
index 0000000..150f339
--- /dev/null
+++ b/.idea/libraries/Maven__net_md_5_bungeecord_chat_1_12_SNAPSHOT.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__net_sf_jopt_simple_jopt_simple_5_0_4.xml b/.idea/libraries/Maven__net_sf_jopt_simple_jopt_simple_5_0_4.xml
new file mode 100644
index 0000000..b3e284c
--- /dev/null
+++ b/.idea/libraries/Maven__net_sf_jopt_simple_jopt_simple_5_0_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_12_0.xml b/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_12_0.xml
new file mode 100644
index 0000000..3f7f804
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_commons_commons_lang3_3_12_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_13.xml b/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_13.xml
new file mode 100644
index 0000000..35173c2
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_httpcomponents_httpclient_4_5_13.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_14.xml b/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_14.xml
new file mode 100644
index 0000000..9cf6845
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_httpcomponents_httpcore_4_4_14.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_14_1.xml b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_14_1.xml
new file mode 100644
index 0000000..97914a1
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_14_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_core_2_14_1.xml b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_core_2_14_1.xml
new file mode 100644
index 0000000..82fda05
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_core_2_14_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_iostreams_2_14_1.xml b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_iostreams_2_14_1.xml
new file mode 100644
index 0000000..b7692ee
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_iostreams_2_14_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_slf4j18_impl_2_14_1.xml b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_slf4j18_impl_2_14_1.xml
new file mode 100644
index 0000000..d36d088
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_slf4j18_impl_2_14_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_maven_maven_artifact_3_8_4.xml b/.idea/libraries/Maven__org_apache_maven_maven_artifact_3_8_4.xml
new file mode 100644
index 0000000..dc918f9
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_maven_maven_artifact_3_8_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_maven_maven_builder_support_3_8_4.xml b/.idea/libraries/Maven__org_apache_maven_maven_builder_support_3_8_4.xml
new file mode 100644
index 0000000..038f367
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_maven_maven_builder_support_3_8_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_maven_maven_model_3_8_4.xml b/.idea/libraries/Maven__org_apache_maven_maven_model_3_8_4.xml
new file mode 100644
index 0000000..06a26eb
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_maven_maven_model_3_8_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_maven_maven_model_builder_3_8_4.xml b/.idea/libraries/Maven__org_apache_maven_maven_model_builder_3_8_4.xml
new file mode 100644
index 0000000..0dca8d1
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_maven_maven_model_builder_3_8_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_maven_maven_repository_metadata_3_8_4.xml b/.idea/libraries/Maven__org_apache_maven_maven_repository_metadata_3_8_4.xml
new file mode 100644
index 0000000..578151d
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_maven_maven_repository_metadata_3_8_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_maven_maven_resolver_provider_3_8_4.xml b/.idea/libraries/Maven__org_apache_maven_maven_resolver_provider_3_8_4.xml
new file mode 100644
index 0000000..feb4af3
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_maven_maven_resolver_provider_3_8_4.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_maven_resolver_maven_resolver_api_1_6_3.xml b/.idea/libraries/Maven__org_apache_maven_resolver_maven_resolver_api_1_6_3.xml
new file mode 100644
index 0000000..57f1ea3
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_maven_resolver_maven_resolver_api_1_6_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_maven_resolver_maven_resolver_connector_basic_1_7_2.xml b/.idea/libraries/Maven__org_apache_maven_resolver_maven_resolver_connector_basic_1_7_2.xml
new file mode 100644
index 0000000..a438911
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_maven_resolver_maven_resolver_connector_basic_1_7_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_maven_resolver_maven_resolver_impl_1_6_3.xml b/.idea/libraries/Maven__org_apache_maven_resolver_maven_resolver_impl_1_6_3.xml
new file mode 100644
index 0000000..712e970
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_maven_resolver_maven_resolver_impl_1_6_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_maven_resolver_maven_resolver_spi_1_6_3.xml b/.idea/libraries/Maven__org_apache_maven_resolver_maven_resolver_spi_1_6_3.xml
new file mode 100644
index 0000000..733dae4
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_maven_resolver_maven_resolver_spi_1_6_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_maven_resolver_maven_resolver_transport_http_1_7_2.xml b/.idea/libraries/Maven__org_apache_maven_resolver_maven_resolver_transport_http_1_7_2.xml
new file mode 100644
index 0000000..3820237
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_maven_resolver_maven_resolver_transport_http_1_7_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_apache_maven_resolver_maven_resolver_util_1_6_3.xml b/.idea/libraries/Maven__org_apache_maven_resolver_maven_resolver_util_1_6_3.xml
new file mode 100644
index 0000000..14be539
--- /dev/null
+++ b/.idea/libraries/Maven__org_apache_maven_resolver_maven_resolver_util_1_6_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_bukkit_bukkit_1_13_1_R0_1_SNAPSHOT.xml b/.idea/libraries/Maven__org_bukkit_bukkit_1_13_1_R0_1_SNAPSHOT.xml
index db20908..6d03d76 100644
--- a/.idea/libraries/Maven__org_bukkit_bukkit_1_13_1_R0_1_SNAPSHOT.xml
+++ b/.idea/libraries/Maven__org_bukkit_bukkit_1_13_1_R0_1_SNAPSHOT.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_codehaus_plexus_plexus_interpolation_1_26.xml b/.idea/libraries/Maven__org_codehaus_plexus_plexus_interpolation_1_26.xml
new file mode 100644
index 0000000..0d4190d
--- /dev/null
+++ b/.idea/libraries/Maven__org_codehaus_plexus_plexus_interpolation_1_26.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_codehaus_plexus_plexus_utils_3_3_0.xml b/.idea/libraries/Maven__org_codehaus_plexus_plexus_utils_3_3_0.xml
new file mode 100644
index 0000000..88dc59a
--- /dev/null
+++ b/.idea/libraries/Maven__org_codehaus_plexus_plexus_utils_3_3_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_sisu_org_eclipse_sisu_inject_0_3_5.xml b/.idea/libraries/Maven__org_eclipse_sisu_org_eclipse_sisu_inject_0_3_5.xml
new file mode 100644
index 0000000..490135a
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_sisu_org_eclipse_sisu_inject_0_3_5.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_1.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_1.xml
index 4400e9c..674d2d0 100644
--- a/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_1.xml
+++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_1.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jetbrains_annotations_19_0_0.xml b/.idea/libraries/Maven__org_jetbrains_annotations_19_0_0.xml
new file mode 100644
index 0000000..8e51ade
--- /dev/null
+++ b/.idea/libraries/Maven__org_jetbrains_annotations_19_0_0.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_ow2_asm_asm_9_2.xml b/.idea/libraries/Maven__org_ow2_asm_asm_9_2.xml
new file mode 100644
index 0000000..da9fbc8
--- /dev/null
+++ b/.idea/libraries/Maven__org_ow2_asm_asm_9_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_30.xml b/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_30.xml
new file mode 100644
index 0000000..1449059
--- /dev/null
+++ b/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_30.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_25.xml b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_25.xml
index 76d39c9..63360e4 100644
--- a/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_25.xml
+++ b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_25.xml
@@ -1,13 +1,13 @@
-
+
-
+
-
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_spigotmc_spigot_1_12_2_R0_1_SNAPSHOT.xml b/.idea/libraries/Maven__org_spigotmc_spigot_1_12_2_R0_1_SNAPSHOT.xml
deleted file mode 100644
index 849d562..0000000
--- a/.idea/libraries/Maven__org_spigotmc_spigot_1_12_2_R0_1_SNAPSHOT.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_spigotmc_spigot_1_18_1_R0_1_SNAPSHOT.xml b/.idea/libraries/Maven__org_spigotmc_spigot_1_18_1_R0_1_SNAPSHOT.xml
new file mode 100644
index 0000000..4374377
--- /dev/null
+++ b/.idea/libraries/Maven__org_spigotmc_spigot_1_18_1_R0_1_SNAPSHOT.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_spigotmc_spigot_api_1_12_2_R0_1_SNAPSHOT.xml b/.idea/libraries/Maven__org_spigotmc_spigot_api_1_12_2_R0_1_SNAPSHOT.xml
new file mode 100644
index 0000000..a443ccc
--- /dev/null
+++ b/.idea/libraries/Maven__org_spigotmc_spigot_api_1_12_2_R0_1_SNAPSHOT.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_xerial_sqlite_jdbc_3_36_0_3.xml b/.idea/libraries/Maven__org_xerial_sqlite_jdbc_3_36_0_3.xml
new file mode 100644
index 0000000..fa75e1c
--- /dev/null
+++ b/.idea/libraries/Maven__org_xerial_sqlite_jdbc_3_36_0_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_yaml_snakeyaml_1_19.xml b/.idea/libraries/Maven__org_yaml_snakeyaml_1_19.xml
new file mode 100644
index 0000000..636f0aa
--- /dev/null
+++ b/.idea/libraries/Maven__org_yaml_snakeyaml_1_19.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_yaml_snakeyaml_1_21.xml b/.idea/libraries/Maven__org_yaml_snakeyaml_1_21.xml
deleted file mode 100644
index 2a47be0..0000000
--- a/.idea/libraries/Maven__org_yaml_snakeyaml_1_21.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/workspace.xml b/.idea/workspace.xml
index cc90ba9..9dfd13b 100644
--- a/.idea/workspace.xml
+++ b/.idea/workspace.xml
@@ -6,12 +6,83 @@
+
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
@@ -30,18 +101,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
@@ -56,12 +140,13 @@
+
-
+
@@ -82,7 +167,7 @@
-
+
@@ -118,10 +203,11 @@
-
+
+
@@ -132,6 +218,11 @@
1584374210349
+
+
+
+
+
@@ -144,53 +235,20 @@
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/AParkour.iml b/AParkour.iml
index 03e3cb1..59abb08 100644
--- a/AParkour.iml
+++ b/AParkour.iml
@@ -9,6 +9,9 @@
+
+
+
@@ -19,19 +22,65 @@
-
-
-
-
-
-
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 7b043a6..e547b44 100644
--- a/pom.xml
+++ b/pom.xml
@@ -73,20 +73,20 @@
org.spigotmc
- spigot
+ spigot-api
1.12.2-R0.1-SNAPSHOT
provided
com.gmail.filoghost.holographicdisplays
holographicdisplays-api
- 2.4.0
+ 2.4.9
provided
me.clip
placeholderapi
- 2.10.5
+ 2.11.1
provided
@@ -100,5 +100,16 @@
1.7
provided
+
+
+ org.apache.commons
+ commons-lang3
+ 3.12.0
+
+
+ com.google.code.findbugs
+ jsr305
+ 3.0.2
+
diff --git a/src/main/java/me/davidml16/aparkour/utils/NBTEditor.java b/src/main/java/me/davidml16/aparkour/utils/NBTEditor.java
index 77f6887..029b2c1 100644
--- a/src/main/java/me/davidml16/aparkour/utils/NBTEditor.java
+++ b/src/main/java/me/davidml16/aparkour/utils/NBTEditor.java
@@ -23,16 +23,16 @@
/**
* Sets/Gets NBT tags from ItemStacks
- * Supports 1.8-1.16
+ * Supports 1.8-1.18
*
* Github: https://github.com/BananaPuncher714/NBTEditor
* Spigot: https://www.spigotmc.org/threads/269621/
*
- * @version 7.16
+ * @version 7.18.0
* @author BananaPuncher714
*/
public final class NBTEditor {
- private static final Map< String, Class> > classCache;
+ private static final Map< String, Class< ? > > classCache;
private static final Map< String, Method > methodCache;
private static final Map< Class< ? >, Constructor< ? > > constructorCache;
private static final Map< Class< ? >, Class< ? > > NBTClasses;
@@ -48,27 +48,52 @@ public final class NBTEditor {
classCache = new HashMap< String, Class> >();
try {
- classCache.put( "NBTBase", Class.forName( "net.minecraft.server." + VERSION + "." + "NBTBase" ) );
- classCache.put( "NBTTagCompound", Class.forName( "net.minecraft.server." + VERSION + "." + "NBTTagCompound" ) );
- classCache.put( "NBTTagList", Class.forName( "net.minecraft.server." + VERSION + "." + "NBTTagList" ) );
- classCache.put( "MojangsonParser", Class.forName( "net.minecraft.server." + VERSION + "." + "MojangsonParser" ) );
+ if ( LOCAL_VERSION.lessThanOrEqualTo( MinecraftVersion.v1_16 ) ) {
+ classCache.put( "NBTBase", Class.forName( "net.minecraft.server." + VERSION + "." + "NBTBase" ) );
+ classCache.put( "NBTTagCompound", Class.forName( "net.minecraft.server." + VERSION + "." + "NBTTagCompound" ) );
+ classCache.put( "NBTTagList", Class.forName( "net.minecraft.server." + VERSION + "." + "NBTTagList" ) );
+ classCache.put( "NBTTagEnd", Class.forName( "net.minecraft.server." + VERSION + "." + "NBTTagEnd" ) );
+ classCache.put( "MojangsonParser", Class.forName( "net.minecraft.server." + VERSION + "." + "MojangsonParser" ) );
+
+ classCache.put( "ItemStack", Class.forName( "net.minecraft.server." + VERSION + "." + "ItemStack" ) );
+
+ classCache.put( "Entity", Class.forName( "net.minecraft.server." + VERSION + "." + "Entity" ) );
+ classCache.put( "EntityLiving", Class.forName( "net.minecraft.server." + VERSION + "." + "EntityLiving" ) );
+
+ classCache.put( "BlockPosition", Class.forName( "net.minecraft.server." + VERSION + "." + "BlockPosition" ) );
+ classCache.put( "TileEntity", Class.forName( "net.minecraft.server." + VERSION + "." + "TileEntity" ) );
+ classCache.put( "World", Class.forName( "net.minecraft.server." + VERSION + "." + "World" ) );
+ classCache.put( "IBlockData", Class.forName( "net.minecraft.server." + VERSION + "." + "IBlockData" ) );
+
+ classCache.put( "TileEntitySkull", Class.forName( "net.minecraft.server." + VERSION + "." + "TileEntitySkull" ) );
+
+ } else {
+ classCache.put( "BlockPosition", Class.forName( "net.minecraft.core.BlockPosition" ) );
+
+ classCache.put( "NBTBase", Class.forName( "net.minecraft.nbt.NBTBase" ) );
+ classCache.put( "NBTTagCompound", Class.forName( "net.minecraft.nbt.NBTTagCompound" ) );
+ classCache.put( "NBTTagList", Class.forName( "net.minecraft.nbt.NBTTagList" ) );
+ classCache.put( "NBTTagEnd", Class.forName( "net.minecraft.nbt.NBTTagEnd" ) );
+ classCache.put( "MojangsonParser", Class.forName( "net.minecraft.nbt.MojangsonParser" ) );
+
+ classCache.put( "ItemStack", Class.forName( "net.minecraft.world.item.ItemStack" ) );
+
+ classCache.put( "Entity", Class.forName( "net.minecraft.world.entity.Entity" ) );
+ classCache.put( "EntityLiving", Class.forName( "net.minecraft.world.entity.EntityLiving" ) );
+
+ classCache.put( "World", Class.forName( "net.minecraft.world.level.World" ) );
+ classCache.put( "IBlockData", Class.forName( "net.minecraft.world.level.block.state.IBlockData" ) );
+ classCache.put( "TileEntity", Class.forName( "net.minecraft.world.level.block.entity.TileEntity" ) );
+ classCache.put( "TileEntitySkull", Class.forName( "net.minecraft.world.level.block.entity.TileEntitySkull" ) );
+ }
- classCache.put( "ItemStack", Class.forName( "net.minecraft.server." + VERSION + "." + "ItemStack" ) );
classCache.put( "CraftItemStack", Class.forName( "org.bukkit.craftbukkit." + VERSION + ".inventory." + "CraftItemStack" ) );
classCache.put( "CraftMetaSkull", Class.forName( "org.bukkit.craftbukkit." + VERSION + ".inventory." + "CraftMetaSkull" ) );
- classCache.put( "Entity", Class.forName( "net.minecraft.server." + VERSION + "." + "Entity" ) );
classCache.put( "CraftEntity", Class.forName( "org.bukkit.craftbukkit." + VERSION + ".entity." + "CraftEntity" ) );
- classCache.put( "EntityLiving", Class.forName( "net.minecraft.server." + VERSION + "." + "EntityLiving" ) );
classCache.put( "CraftWorld", Class.forName( "org.bukkit.craftbukkit." + VERSION + "." + "CraftWorld" ) );
classCache.put( "CraftBlockState", Class.forName( "org.bukkit.craftbukkit." + VERSION + ".block." + "CraftBlockState" ) );
- classCache.put( "BlockPosition", Class.forName( "net.minecraft.server." + VERSION + "." + "BlockPosition" ) );
- classCache.put( "TileEntity", Class.forName( "net.minecraft.server." + VERSION + "." + "TileEntity" ) );
- classCache.put( "World", Class.forName( "net.minecraft.server." + VERSION + "." + "World" ) );
- classCache.put( "IBlockData", Class.forName( "net.minecraft.server." + VERSION + "." + "IBlockData" ) );
-
- classCache.put( "TileEntitySkull", Class.forName( "net.minecraft.server." + VERSION + "." + "TileEntitySkull" ) );
classCache.put( "GameProfile", Class.forName( "com.mojang.authlib.GameProfile" ) );
classCache.put( "Property", Class.forName( "com.mojang.authlib.properties.Property" ) );
@@ -79,27 +104,55 @@ public final class NBTEditor {
NBTClasses = new HashMap< Class< ? >, Class< ? > >();
try {
- NBTClasses.put( Byte.class, Class.forName( "net.minecraft.server." + VERSION + "." + "NBTTagByte" ) );
- NBTClasses.put( Boolean.class, Class.forName( "net.minecraft.server." + VERSION + "." + "NBTTagByte" ) );
- NBTClasses.put( String.class, Class.forName( "net.minecraft.server." + VERSION + "." + "NBTTagString" ) );
- NBTClasses.put( Double.class, Class.forName( "net.minecraft.server." + VERSION + "." + "NBTTagDouble" ) );
- NBTClasses.put( Integer.class, Class.forName( "net.minecraft.server." + VERSION + "." + "NBTTagInt" ) );
- NBTClasses.put( Long.class, Class.forName( "net.minecraft.server." + VERSION + "." + "NBTTagLong" ) );
- NBTClasses.put( Short.class, Class.forName( "net.minecraft.server." + VERSION + "." + "NBTTagShort" ) );
- NBTClasses.put( Float.class, Class.forName( "net.minecraft.server." + VERSION + "." + "NBTTagFloat" ) );
- NBTClasses.put( Class.forName( "[B" ), Class.forName( "net.minecraft.server." + VERSION + "." + "NBTTagByteArray" ) );
- NBTClasses.put( Class.forName( "[I" ), Class.forName( "net.minecraft.server." + VERSION + "." + "NBTTagIntArray" ) );
+ if ( LOCAL_VERSION.lessThanOrEqualTo( MinecraftVersion.v1_16 ) ) {
+ NBTClasses.put( Byte.class, Class.forName( "net.minecraft.server." + VERSION + "." + "NBTTagByte" ) );
+ NBTClasses.put( Boolean.class, Class.forName( "net.minecraft.server." + VERSION + "." + "NBTTagByte" ) );
+ NBTClasses.put( String.class, Class.forName( "net.minecraft.server." + VERSION + "." + "NBTTagString" ) );
+ NBTClasses.put( Double.class, Class.forName( "net.minecraft.server." + VERSION + "." + "NBTTagDouble" ) );
+ NBTClasses.put( Integer.class, Class.forName( "net.minecraft.server." + VERSION + "." + "NBTTagInt" ) );
+ NBTClasses.put( Long.class, Class.forName( "net.minecraft.server." + VERSION + "." + "NBTTagLong" ) );
+ NBTClasses.put( Short.class, Class.forName( "net.minecraft.server." + VERSION + "." + "NBTTagShort" ) );
+ NBTClasses.put( Float.class, Class.forName( "net.minecraft.server." + VERSION + "." + "NBTTagFloat" ) );
+ NBTClasses.put( Class.forName( "[B" ), Class.forName( "net.minecraft.server." + VERSION + "." + "NBTTagByteArray" ) );
+ NBTClasses.put( Class.forName( "[I" ), Class.forName( "net.minecraft.server." + VERSION + "." + "NBTTagIntArray" ) );
+ } else {
+ NBTClasses.put( Byte.class, Class.forName( "net.minecraft.nbt.NBTTagByte" ) );
+ NBTClasses.put( Boolean.class, Class.forName( "net.minecraft.nbt.NBTTagByte" ) );
+ NBTClasses.put( String.class, Class.forName( "net.minecraft.nbt.NBTTagString" ) );
+ NBTClasses.put( Double.class, Class.forName( "net.minecraft.nbt.NBTTagDouble" ) );
+ NBTClasses.put( Integer.class, Class.forName( "net.minecraft.nbt.NBTTagInt" ) );
+ NBTClasses.put( Long.class, Class.forName( "net.minecraft.nbt.NBTTagLong" ) );
+ NBTClasses.put( Short.class, Class.forName( "net.minecraft.nbt.NBTTagShort" ) );
+ NBTClasses.put( Float.class, Class.forName( "net.minecraft.nbt.NBTTagFloat" ) );
+ NBTClasses.put( Class.forName( "[B" ), Class.forName( "net.minecraft.nbt.NBTTagByteArray" ) );
+ NBTClasses.put( Class.forName( "[I" ), Class.forName( "net.minecraft.nbt.NBTTagIntArray" ) );
+ }
} catch ( ClassNotFoundException e ) {
e.printStackTrace();
}
methodCache = new HashMap< String, Method >();
try {
- methodCache.put( "get", getNMSClass( "NBTTagCompound" ).getMethod( "get", String.class ) );
- methodCache.put( "set", getNMSClass( "NBTTagCompound" ).getMethod( "set", String.class, getNMSClass( "NBTBase" ) ) );
- methodCache.put( "hasKey", getNMSClass( "NBTTagCompound" ).getMethod( "hasKey", String.class ) );
- methodCache.put( "setIndex", getNMSClass( "NBTTagList" ).getMethod( "a", int.class, getNMSClass( "NBTBase" ) ) );
- if ( LOCAL_VERSION.greaterThanOrEqualTo( MinecraftVersion.v1_14 ) ) {
+ if ( LOCAL_VERSION.lessThanOrEqualTo( MinecraftVersion.v1_17 ) ) {
+ methodCache.put( "get", getNMSClass( "NBTTagCompound" ).getMethod( "get", String.class ) );
+ methodCache.put( "set", getNMSClass( "NBTTagCompound" ).getMethod( "set", String.class, getNMSClass( "NBTBase" ) ) );
+ methodCache.put( "hasKey", getNMSClass( "NBTTagCompound" ).getMethod( "hasKey", String.class ) );
+ } else {
+ methodCache.put( "get", getNMSClass( "NBTTagCompound" ).getMethod( "c", String.class ) );
+ methodCache.put( "set", getNMSClass( "NBTTagCompound" ).getMethod( "a", String.class, getNMSClass( "NBTBase" ) ) );
+ methodCache.put( "hasKey", getNMSClass( "NBTTagCompound" ).getMethod( "e", String.class ) );
+ }
+ if ( LOCAL_VERSION.greaterThanOrEqualTo( MinecraftVersion.v1_18 ) ) {
+ methodCache.put( "setIndex", getNMSClass( "NBTTagList" ).getMethod( "d", int.class, getNMSClass( "NBTBase" ) ) );
+ } else if ( LOCAL_VERSION.greaterThanOrEqualTo( MinecraftVersion.v1_17 ) ) {
+ methodCache.put( "setIndex", getNMSClass( "NBTTagList" ).getMethod( "set", int.class, getNMSClass( "NBTBase" ) ) );
+ } else {
+ methodCache.put( "setIndex", getNMSClass( "NBTTagList" ).getMethod( "a", int.class, getNMSClass( "NBTBase" ) ) );
+ }
+ if ( LOCAL_VERSION.greaterThanOrEqualTo( MinecraftVersion.v1_18 ) ) {
+ methodCache.put( "getTypeId", getNMSClass( "NBTBase" ).getMethod( "a" ) );
+ methodCache.put( "add", getNMSClass( "NBTTagList" ).getMethod( "c", int.class, getNMSClass( "NBTBase" ) ) );
+ } else if ( LOCAL_VERSION.greaterThanOrEqualTo( MinecraftVersion.v1_14 ) ) {
methodCache.put( "getTypeId", getNMSClass( "NBTBase" ).getMethod( "getTypeId" ) );
methodCache.put( "add", getNMSClass( "NBTTagList" ).getMethod( "add", int.class, getNMSClass( "NBTBase" ) ) );
} else {
@@ -107,27 +160,43 @@ public final class NBTEditor {
}
methodCache.put( "size", getNMSClass( "NBTTagList" ).getMethod( "size" ) );
- if ( LOCAL_VERSION == MinecraftVersion.v1_8 ) {
+ if ( LOCAL_VERSION.greaterThanOrEqualTo( MinecraftVersion.v1_18 ) ) {
+ methodCache.put( "listRemove", getNMSClass( "NBTTagList" ).getMethod( "c", int.class ) );
+ } else if ( LOCAL_VERSION == MinecraftVersion.v1_8 ) {
methodCache.put( "listRemove", getNMSClass( "NBTTagList" ).getMethod( "a", int.class ) );
} else {
methodCache.put( "listRemove", getNMSClass( "NBTTagList" ).getMethod( "remove", int.class ) );
}
- methodCache.put( "remove", getNMSClass( "NBTTagCompound" ).getMethod( "remove", String.class ) );
-
- if ( LOCAL_VERSION.greaterThanOrEqualTo( MinecraftVersion.v1_13 ) ) {
- methodCache.put( "getKeys", getNMSClass( "NBTTagCompound" ).getMethod( "getKeys" ) );
+ if ( LOCAL_VERSION.greaterThanOrEqualTo( MinecraftVersion.v1_18 ) ) {
+ methodCache.put( "remove", getNMSClass( "NBTTagCompound" ).getMethod( "r", String.class ) );
} else {
+ methodCache.put( "remove", getNMSClass( "NBTTagCompound" ).getMethod( "remove", String.class ) );
+ }
+ if ( LOCAL_VERSION.lessThanOrEqualTo( MinecraftVersion.v1_12 ) ) {
methodCache.put( "getKeys", getNMSClass( "NBTTagCompound" ).getMethod( "c" ) );
+ } else if ( LOCAL_VERSION.lessThanOrEqualTo( MinecraftVersion.v1_17 ) ) {
+ methodCache.put( "getKeys", getNMSClass( "NBTTagCompound" ).getMethod( "getKeys" ) );
+ } else {
+ methodCache.put( "getKeys", getNMSClass( "NBTTagCompound" ).getMethod( "d" ) );
}
- methodCache.put( "hasTag", getNMSClass( "ItemStack" ).getMethod( "hasTag" ) );
- methodCache.put( "getTag", getNMSClass( "ItemStack" ).getMethod( "getTag" ) );
- methodCache.put( "setTag", getNMSClass( "ItemStack" ).getMethod( "setTag", getNMSClass( "NBTTagCompound" ) ) );
+ if ( LOCAL_VERSION.greaterThanOrEqualTo( MinecraftVersion.v1_18 ) ) {
+ methodCache.put( "hasTag", getNMSClass( "ItemStack" ).getMethod( "r" ) );
+ methodCache.put( "getTag", getNMSClass( "ItemStack" ).getMethod( "s" ) );
+ methodCache.put( "setTag", getNMSClass( "ItemStack" ).getMethod( "c", getNMSClass( "NBTTagCompound" ) ) );
+ } else {
+ methodCache.put( "hasTag", getNMSClass( "ItemStack" ).getMethod( "hasTag" ) );
+ methodCache.put( "getTag", getNMSClass( "ItemStack" ).getMethod( "getTag" ) );
+ methodCache.put( "setTag", getNMSClass( "ItemStack" ).getMethod( "setTag", getNMSClass( "NBTTagCompound" ) ) );
+ }
methodCache.put( "asNMSCopy", getNMSClass( "CraftItemStack" ).getMethod( "asNMSCopy", ItemStack.class ) );
methodCache.put( "asBukkitCopy", getNMSClass( "CraftItemStack" ).getMethod( "asBukkitCopy", getNMSClass( "ItemStack" ) ) );
methodCache.put( "getEntityHandle", getNMSClass( "CraftEntity" ).getMethod( "getHandle" ) );
- if ( LOCAL_VERSION.greaterThanOrEqualTo( MinecraftVersion.v1_16 ) ) {
+ if ( LOCAL_VERSION.greaterThanOrEqualTo( MinecraftVersion.v1_18 ) ) {
+ methodCache.put( "getEntityTag", getNMSClass( "Entity" ).getMethod( "f", getNMSClass( "NBTTagCompound" ) ) );
+ methodCache.put( "setEntityTag", getNMSClass( "Entity" ).getMethod( "g", getNMSClass( "NBTTagCompound" ) ) );
+ } else if ( LOCAL_VERSION.greaterThanOrEqualTo( MinecraftVersion.v1_16 ) ) {
methodCache.put( "getEntityTag", getNMSClass( "Entity" ).getMethod( "save", getNMSClass( "NBTTagCompound" ) ) );
methodCache.put( "setEntityTag", getNMSClass( "Entity" ).getMethod( "load", getNMSClass( "NBTTagCompound" ) ) );
} else {
@@ -135,7 +204,11 @@ public final class NBTEditor {
methodCache.put( "setEntityTag", getNMSClass( "Entity" ).getMethod( "f", getNMSClass( "NBTTagCompound" ) ) );
}
- methodCache.put( "save", getNMSClass( "ItemStack" ).getMethod( "save", getNMSClass( "NBTTagCompound" ) ) );
+ if ( LOCAL_VERSION.greaterThanOrEqualTo( MinecraftVersion.v1_18 ) ) {
+ methodCache.put( "save", getNMSClass( "ItemStack" ).getMethod( "b", getNMSClass( "NBTTagCompound" ) ) );
+ } else {
+ methodCache.put( "save", getNMSClass( "ItemStack" ).getMethod( "save", getNMSClass( "NBTTagCompound" ) ) );
+ }
if ( LOCAL_VERSION.lessThanOrEqualTo( MinecraftVersion.v1_10 ) ) {
methodCache.put( "createStack", getNMSClass( "ItemStack" ).getMethod( "createStack", getNMSClass( "NBTTagCompound" ) ) );
@@ -143,7 +216,9 @@ public final class NBTEditor {
methodCache.put( "createStack", getNMSClass( "ItemStack" ).getMethod( "a", getNMSClass( "NBTTagCompound" ) ) );
}
- if ( LOCAL_VERSION.greaterThanOrEqualTo( MinecraftVersion.v1_16 ) ) {
+ if ( LOCAL_VERSION.greaterThanOrEqualTo( MinecraftVersion.v1_18 ) ) {
+ methodCache.put( "setTileTag", getNMSClass( "TileEntity" ).getMethod( "a", getNMSClass( "NBTTagCompound" ) ) );
+ } else if ( LOCAL_VERSION == MinecraftVersion.v1_16 ) {
methodCache.put( "setTileTag", getNMSClass( "TileEntity" ).getMethod( "load", getNMSClass( "IBlockData" ), getNMSClass( "NBTTagCompound" ) ) );
methodCache.put( "getType", getNMSClass( "World" ).getMethod( "getType", getNMSClass( "BlockPosition" ) ) );
} else if ( LOCAL_VERSION.greaterThanOrEqualTo( MinecraftVersion.v1_12 ) ) {
@@ -151,33 +226,42 @@ public final class NBTEditor {
} else {
methodCache.put( "setTileTag", getNMSClass( "TileEntity" ).getMethod( "a", getNMSClass( "NBTTagCompound" ) ) );
}
- methodCache.put( "getTileEntity", getNMSClass( "World" ).getMethod( "getTileEntity", getNMSClass( "BlockPosition" ) ) );
+
+ if ( LOCAL_VERSION.greaterThanOrEqualTo( MinecraftVersion.v1_18 ) ) {
+ methodCache.put( "getTileTag", getNMSClass( "TileEntity" ).getMethod( "m" ) );
+ } else if ( LOCAL_VERSION == MinecraftVersion.v1_8 ) {
+ methodCache.put( "getTileTag", getNMSClass( "TileEntity" ).getMethod( "b", getNMSClass( "NBTTagCompound" ) ) );
+ } else {
+ methodCache.put( "getTileTag", getNMSClass( "TileEntity" ).getMethod( "save", getNMSClass( "NBTTagCompound" ) ) );
+ }
+
+ if ( LOCAL_VERSION.greaterThanOrEqualTo( MinecraftVersion.v1_18 ) ) {
+ methodCache.put( "getTileEntity", getNMSClass( "World" ).getMethod( "c_", getNMSClass( "BlockPosition" ) ) );
+ } else {
+ methodCache.put( "getTileEntity", getNMSClass( "World" ).getMethod( "getTileEntity", getNMSClass( "BlockPosition" ) ) );
+ }
methodCache.put( "getWorldHandle", getNMSClass( "CraftWorld" ).getMethod( "getHandle" ) );
- methodCache.put( "setGameProfile", getNMSClass( "TileEntitySkull" ).getMethod( "setGameProfile", getNMSClass( "GameProfile" ) ) );
+ if ( LOCAL_VERSION.greaterThanOrEqualTo( MinecraftVersion.v1_18 ) ) {
+ methodCache.put( "setGameProfile", getNMSClass( "TileEntitySkull" ).getMethod( "a", getNMSClass( "GameProfile" ) ) );
+ } else {
+ methodCache.put( "setGameProfile", getNMSClass( "TileEntitySkull" ).getMethod( "setGameProfile", getNMSClass( "GameProfile" ) ) );
+ }
methodCache.put( "getProperties", getNMSClass( "GameProfile" ).getMethod( "getProperties" ) );
methodCache.put( "getName", getNMSClass( "Property" ).getMethod( "getName" ) );
methodCache.put( "getValue", getNMSClass( "Property" ).getMethod( "getValue" ) );
methodCache.put( "values", getNMSClass( "PropertyMap" ).getMethod( "values" ) );
methodCache.put( "put", getNMSClass( "PropertyMap" ).getMethod( "put", Object.class, Object.class ) );
- methodCache.put( "loadNBTTagCompound", getNMSClass( "MojangsonParser" ).getMethod( "parse", String.class ) );
+ if ( LOCAL_VERSION.greaterThanOrEqualTo( MinecraftVersion.v1_18 ) ) {
+ methodCache.put( "loadNBTTagCompound", getNMSClass( "MojangsonParser" ).getMethod( "a", String.class ) );
+ } else {
+ methodCache.put( "loadNBTTagCompound", getNMSClass( "MojangsonParser" ).getMethod( "parse", String.class ) );
+ }
} catch( Exception e ) {
e.printStackTrace();
}
- try {
- methodCache.put( "getTileTag", getNMSClass( "TileEntity" ).getMethod( "save", getNMSClass( "NBTTagCompound" ) ) );
- } catch( NoSuchMethodException exception ) {
- try {
- methodCache.put( "getTileTag", getNMSClass( "TileEntity" ).getMethod( "b", getNMSClass( "NBTTagCompound" ) ) );
- } catch ( Exception exception2 ) {
- exception2.printStackTrace();
- }
- } catch( Exception exception ) {
- exception.printStackTrace();
- }
-
try {
methodCache.put( "setProfile", getNMSClass( "CraftMetaSkull" ).getDeclaredMethod( "setProfile", getNMSClass( "GameProfile" ) ) );
methodCache.get( "setProfile" ).setAccessible( true );
@@ -217,19 +301,41 @@ public final class NBTEditor {
NBTTagFieldCache = new HashMap< Class< ? >, Field >();
try {
- for ( Class< ? > clazz : NBTClasses.values() ) {
- Field data = clazz.getDeclaredField( "data" );
- data.setAccessible( true );
- NBTTagFieldCache.put( clazz, data );
+ if ( LOCAL_VERSION.lessThanOrEqualTo( MinecraftVersion.v1_16 ) ) {
+ for ( Class< ? > clazz : NBTClasses.values() ) {
+ Field data = clazz.getDeclaredField( "data" );
+ data.setAccessible( true );
+ NBTTagFieldCache.put( clazz, data );
+ }
+ } else {
+ NBTTagFieldCache.put( NBTClasses.get( Byte.class ), NBTClasses.get( Byte.class ).getDeclaredField( "x" ) );
+ NBTTagFieldCache.put( NBTClasses.get( Boolean.class ), NBTClasses.get( Boolean.class ).getDeclaredField( "x" ) );
+ NBTTagFieldCache.put( NBTClasses.get( String.class ), NBTClasses.get( String.class ).getDeclaredField( "A" ) );
+ NBTTagFieldCache.put( NBTClasses.get( Double.class ), NBTClasses.get( Double.class ).getDeclaredField( "w" ) );
+ NBTTagFieldCache.put( NBTClasses.get( Integer.class ), NBTClasses.get( Integer.class ).getDeclaredField( "c" ) );
+ NBTTagFieldCache.put( NBTClasses.get( Long.class ), NBTClasses.get( Long.class ).getDeclaredField( "c" ) );
+ NBTTagFieldCache.put( NBTClasses.get( Float.class ), NBTClasses.get( Float.class ).getDeclaredField( "w" ) );
+ NBTTagFieldCache.put( NBTClasses.get( Short.class ), NBTClasses.get( Short.class ).getDeclaredField( "c" ) );
+ NBTTagFieldCache.put( NBTClasses.get( Class.forName( "[B" ) ), NBTClasses.get( Class.forName( "[B" ) ).getDeclaredField( "c" ) );
+ NBTTagFieldCache.put( NBTClasses.get( Class.forName( "[I" ) ), NBTClasses.get( Class.forName( "[I" ) ).getDeclaredField( "c" ) );
+
+ for ( Field field : NBTTagFieldCache.values() ) {
+ field.setAccessible( true );
+ }
}
} catch( Exception e ) {
e.printStackTrace();
}
try {
- NBTListData = getNMSClass( "NBTTagList" ).getDeclaredField( "list" );
+ if ( LOCAL_VERSION.lessThanOrEqualTo( MinecraftVersion.v1_16 ) ) {
+ NBTListData = getNMSClass( "NBTTagList" ).getDeclaredField( "list" );
+ NBTCompoundMap = getNMSClass( "NBTTagCompound" ).getDeclaredField( "map" );
+ } else {
+ NBTListData = getNMSClass( "NBTTagList" ).getDeclaredField( "c" );
+ NBTCompoundMap = getNMSClass( "NBTTagCompound" ).getDeclaredField( "x" );
+ }
NBTListData.setAccessible( true );
- NBTCompoundMap = getNMSClass( "NBTTagCompound" ).getDeclaredField( "map" );
NBTCompoundMap.setAccessible( true );
} catch( Exception e ) {
e.printStackTrace();
@@ -680,9 +786,13 @@ private static Object getCompound( Block block ) {
Object tileEntity = getMethod( "getTileEntity" ).invoke( nmsWorld, blockPosition );
- Object tag = getNMSClass( "NBTTagCompound" ).newInstance();
-
- getMethod( "getTileTag" ).invoke( tileEntity, tag );
+ Object tag;
+ if ( LOCAL_VERSION.greaterThanOrEqualTo( MinecraftVersion.v1_18 ) ) {
+ tag = getMethod( "getTileTag" ).invoke( tileEntity );
+ } else {
+ tag = getNMSClass( "NBTTagCompound" ).newInstance();
+ getMethod( "getTileTag" ).invoke( tileEntity, tag );
+ }
return tag;
} catch( Exception exception ) {
@@ -714,9 +824,13 @@ private static NBTCompound getBlockNBTTag( Block block, Object... keys ) {
Object tileEntity = getMethod( "getTileEntity" ).invoke( nmsWorld, blockPosition );
- Object tag = getNMSClass( "NBTTagCompound" ).newInstance();
-
- getMethod( "getTileTag" ).invoke( tileEntity, tag );
+ Object tag;
+ if ( LOCAL_VERSION.greaterThanOrEqualTo( MinecraftVersion.v1_18 ) ) {
+ tag = getMethod( "getTileTag" ).invoke( tileEntity );
+ } else {
+ tag = getNMSClass( "NBTTagCompound" ).newInstance();
+ getMethod( "getTileTag" ).invoke( tileEntity, tag );
+ }
return getNBTTag( tag, keys );
} catch( Exception exception ) {
@@ -749,9 +863,13 @@ private static void setBlockTag( Block block, Object value, Object... keys ) {
Object tileEntity = getMethod( "getTileEntity" ).invoke( nmsWorld, blockPosition );
- Object tag = getNMSClass( "NBTTagCompound" ).newInstance();
-
- getMethod( "getTileTag" ).invoke( tileEntity, tag );
+ Object tag;
+ if ( LOCAL_VERSION.greaterThanOrEqualTo( MinecraftVersion.v1_18 ) ) {
+ tag = getMethod( "getTileTag" ).invoke( tileEntity );
+ } else {
+ tag = getNMSClass( "NBTTagCompound" ).newInstance();
+ getMethod( "getTileTag" ).invoke( tileEntity, tag );
+ }
if ( keys.length == 0 && value instanceof NBTCompound ) {
tag = ( ( NBTCompound ) value ).tag;
@@ -759,7 +877,7 @@ private static void setBlockTag( Block block, Object value, Object... keys ) {
setTag( tag, value, keys );
}
- if ( LOCAL_VERSION.greaterThanOrEqualTo( MinecraftVersion.v1_16 ) ) {
+ if ( LOCAL_VERSION == MinecraftVersion.v1_16 ) {
getMethod( "setTileTag" ).invoke( tileEntity, getMethod( "getType" ).invoke( nmsWorld, blockPosition ), tag );
} else {
getMethod( "setTileTag" ).invoke( tileEntity, tag );
@@ -1193,7 +1311,7 @@ private static void setTag( Object tag, Object value, Object... keys ) throws In
}
if ( oldCompound.getClass().getSimpleName().equals( "NBTTagList" ) ) {
if ( LOCAL_VERSION.greaterThanOrEqualTo( MinecraftVersion.v1_14 ) ) {
- getMethod( "add" ).invoke( oldCompound, getMethod( "size" ).invoke( oldCompound ), compound );
+ getMethod( "add" ).invoke( oldCompound, getMethod( "getTypeId" ).invoke( compound ), compound );
} else {
getMethod( "add" ).invoke( oldCompound, compound );
}
@@ -1206,7 +1324,7 @@ private static void setTag( Object tag, Object value, Object... keys ) throws In
Object lastKey = keys[ keys.length - 1 ];
if ( lastKey == null ) {
if ( LOCAL_VERSION.greaterThanOrEqualTo( MinecraftVersion.v1_14 ) ) {
- getMethod( "add" ).invoke( compound, getMethod( "size" ).invoke( compound ), notCompound );
+ getMethod( "add" ).invoke( compound, getMethod( "getTypeId" ).invoke( notCompound ), notCompound );
} else {
getMethod( "add" ).invoke( compound, notCompound );
}
@@ -1224,7 +1342,18 @@ private static void setTag( Object tag, Object value, Object... keys ) throws In
}
}
} else {
+ // Add and replace all tags
if ( notCompound != null ) {
+ // Only if they're both an NBTTagCompound
+ // Can't do anything if its a list or something
+ if ( getNMSClass( "NBTTagCompound" ).isInstance( notCompound ) && getNMSClass( "NBTTagCompound" ).isInstance( compound ) )
+ for ( String key : getKeys( notCompound ) ) {
+ getMethod( "set" ).invoke( compound, key, getMethod( "get" ).invoke( notCompound, key ) );
+ }
+ } else {
+ // Did someone make an error?
+ // NBTEditor.set( something, null );
+ // Not sure what to do here
}
}
}
diff --git a/src/main/resources/language/message_chs.yml b/src/main/resources/language/message_chs.yml
new file mode 100644
index 0000000..5c58194
--- /dev/null
+++ b/src/main/resources/language/message_chs.yml
@@ -0,0 +1,108 @@
+#
+#
+# 这里是语言文件.
+# 您可以更改任何此文件中的消息
+#
+# 如果您想要重置任何一条消息,
+# 删除该消息所在的那一行并重启服务器.
+#
+#
+
+Prefix: '&9&lAParkour &l&o&f>>&r'
+
+Commands:
+ NoPerms: '%prefix% &c您没有权限使用此命令!'
+ NoStats: '%prefix% &c您还没有统计数据!'
+ NoParkours: '%prefix% &c暂无可玩的跑酷!'
+ Reload: '%prefix% &a插件已成功重载!'
+
+GUIs:
+ Stats:
+ title: '跑酷数据统计'
+ Play:
+ title: '游玩跑酷'
+ Config:
+ title: '%parkour% | 配置'
+ WalkableBlocks:
+ title: '%parkour% | 方块'
+ Rewards:
+ title: '%parkour% | 奖励'
+ Checkpoints:
+ title: '%parkour% | 存档点'
+ Holograms:
+ title: '%parkour% | 全息'
+ Titles:
+ title: '%parkour% | 标题'
+ Misc:
+ title: '%parkour% | 其它'
+
+Times:
+ Loading: '&c加载中......'
+ NoBestTime: 无
+
+Timer:
+ ActionBar: '&e&l当前时间: &6%currentTime% &7- &e&l最快时间: &6%bestTime%'
+ Formats:
+ # 变量: %hours%, %minutes%, %seconds%, %milliseconds%
+ ParkourTimer: '%hours%h %minutes%m %seconds%s %milliseconds%ms'
+ HologramUpdate: '%minutes%m %seconds%s'
+
+TopChat:
+ Header:
+ Line1: '&a&l跑酷时间排行'
+ Line2: '&6- %parkour% -'
+ Entry:
+ Time: '&e%position%. &a%player% &7- &6%time%'
+ NoTime: '&e%position%. &c无'
+
+Holograms:
+ Stats:
+ Line1: '&a%player%''s &a%parkour% parkour stats'
+ Line2: '&a最快时间&7: &6%time%'
+ Top:
+ Header:
+ Line1: '&a&l跑酷时间排行'
+ Line2: '&7- %parkour% -'
+ Body:
+ Line: '&e%position%. &a%player% &7- &6%time%'
+ NoTime: '&e%position%. &c无'
+ Loading: '&e%position%. &c加载中...'
+ Footer:
+ Line: '&a创建于: &6%time%'
+ Updating: '&a创建于: &c加载中...'
+ Plates:
+ Start:
+ Line1: '&e&l跑酷挑战'
+ Line2: '&f从这里开始!'
+ End:
+ Line1: '&e&l跑酷挑战'
+ Line2: '&f在这里结束!'
+ Checkpoint:
+ Line1: '&e&l存档点'
+ Line2: '&f#%checkpoint%'
+
+Messages:
+ NotInParkour: '&c您不在任何跑酷中...W...'
+ BlockedCommand: '&c您不能在跑酷中执行此命令.'
+ Started: '&a跑酷开始! 以最快速度到达终点.'
+ Fly: '&c您不能在跑酷中飞行.'
+ Return: '&6重新开始跑酷......'
+ Checkpoint: '&a您在 &e%time% &a内到达了存档点 &e#%checkpoint% &a.'
+ ReturnCheckpoint: '&6返回存档点 &e#%checkpoint%'
+ NeedCheckpoint: '&c您需要到达所有的存档点才能完成跑酷.'
+
+EndMessage:
+ FirstTime: '&6您首次完成了这个跑酷!'
+ Normal: '&6您在 &d%endTime% &6内完成了跑酷'
+ Record: '&6您超越了您以前的记录: &d%recordTime%'
+
+Titles:
+ Start:
+ Title: '&e&l跑酷挑战'
+ Subtitle: '&f&l开始'
+ Checkpoint:
+ Title: '&e&l存档点'
+ Subtitle: '&f&l#%checkpoint%'
+ End:
+ Title: '&e&l跑酷挑战'
+ Subtitle: '&f&l结束'
\ No newline at end of file
diff --git a/src/main/resources/language/message_cht.yml b/src/main/resources/language/message_cht.yml
new file mode 100644
index 0000000..049513d
--- /dev/null
+++ b/src/main/resources/language/message_cht.yml
@@ -0,0 +1,108 @@
+#
+#
+# 這裡是語言文件.
+# 您可以更改任何此文件中的消息
+#
+# 如果您想要重設任何一條消息,
+# 刪除該消息所在的那一行並重啟伺服器.
+#
+#
+
+Prefix: '&9&lAParkour &l&o&f>>&r'
+
+Commands:
+ NoPerms: '%prefix% &c您沒有權限使用此命令!'
+ NoStats: '%prefix% &c您還沒有統計數據!'
+ NoParkours: '%prefix% &c暫無可玩的跑酷!'
+ Reload: '%prefix% &a插件已成功重載!'
+
+GUIs:
+ Stats:
+ title: '跑酷數據統計'
+ Play:
+ title: '遊玩跑酷'
+ Config:
+ title: '%parkour% | 配置'
+ WalkableBlocks:
+ title: '%parkour% | 方塊'
+ Rewards:
+ title: '%parkour% | 獎勵'
+ Checkpoints:
+ title: '%parkour% | 存檔點'
+ Holograms:
+ title: '%parkour% | 全像'
+ Titles:
+ title: '%parkour% | 標題'
+ Misc:
+ title: '%parkour% | 其它'
+
+Times:
+ Loading: '&c載入中......'
+ NoBestTime: 無
+
+Timer:
+ ActionBar: '&e&l當前時間: &6%currentTime% &7- &e&l最快時間: &6%bestTime%'
+ Formats:
+ # 變數: %hours%, %minutes%, %seconds%, %milliseconds%
+ ParkourTimer: '%hours%h %minutes%m %seconds%s %milliseconds%ms'
+ HologramUpdate: '%minutes%m %seconds%s'
+
+TopChat:
+ Header:
+ Line1: '&a&l跑酷時間排行'
+ Line2: '&6- %parkour% -'
+ Entry:
+ Time: '&e%position%. &a%player% &7- &6%time%'
+ NoTime: '&e%position%. &c無'
+
+Holograms:
+ Stats:
+ Line1: '&a%player%''s &a%parkour% parkour stats'
+ Line2: '&a最快時間&7: &6%time%'
+ Top:
+ Header:
+ Line1: '&a&l跑酷時間排行'
+ Line2: '&7- %parkour% -'
+ Body:
+ Line: '&e%position%. &a%player% &7- &6%time%'
+ NoTime: '&e%position%. &c無'
+ Loading: '&e%position%. &c載入中...'
+ Footer:
+ Line: '&a創建於: &6%time%'
+ Updating: '&a創建於: &c載入中...'
+ Plates:
+ Start:
+ Line1: '&e&l跑酷挑戰'
+ Line2: '&f從這裡開始!'
+ End:
+ Line1: '&e&l跑酷挑戰'
+ Line2: '&f在這裡結束!'
+ Checkpoint:
+ Line1: '&e&l存檔點'
+ Line2: '&f#%checkpoint%'
+
+Messages:
+ NotInParkour: '&c您不在任何跑酷中...W...'
+ BlockedCommand: '&c您不能在跑酷中執行此命令.'
+ Started: '&a跑酷開始! 以最快速度到達終點.'
+ Fly: '&c您不能在跑酷中飛行.'
+ Return: '&6重新開始跑酷......'
+ Checkpoint: '&a您在 &e%time% &a內到達了存檔點 &e#%checkpoint% &a.'
+ ReturnCheckpoint: '&6返回存檔點 &e#%checkpoint%'
+ NeedCheckpoint: '&c您需要到達所有的存檔點才能完成跑酷.'
+
+EndMessage:
+ FirstTime: '&6您首次完成了這個跑酷!'
+ Normal: '&6您在 &d%endTime% &6內完成了跑酷'
+ Record: '&6您超越了您以前的紀錄: &d%recordTime%'
+
+Titles:
+ Start:
+ Title: '&e&l跑酷挑戰'
+ Subtitle: '&f&l開始'
+ Checkpoint:
+ Title: '&e&l存檔點'
+ Subtitle: '&f&l#%checkpoint%'
+ End:
+ Title: '&e&l跑酷挑戰'
+ Subtitle: '&f&l結束'
\ No newline at end of file