Compare commits

...

199 Commits
b46 ... master

Author SHA1 Message Date
Deichor
b630df850f Update Multiverse and removed unused folialib 2024-12-10 02:33:35 +03:00
dependabot[bot]
da99cad206
Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.10.1 to 3.11.1 (#224) 2024-12-08 12:57:07 +00:00
Kobe ⑧
22027b5fdd
Merge pull request #231 from HaHaWTH/dependabot/maven/org.xerial-sqlite-jdbc-3.47.1.0
Bump org.xerial:sqlite-jdbc from 3.47.0.0 to 3.47.1.0
2024-12-04 09:00:07 -08:00
dependabot[bot]
7f00c4183f
Bump org.xerial:sqlite-jdbc from 3.47.0.0 to 3.47.1.0
Bumps [org.xerial:sqlite-jdbc](https://github.com/xerial/sqlite-jdbc) from 3.47.0.0 to 3.47.1.0.
- [Release notes](https://github.com/xerial/sqlite-jdbc/releases)
- [Changelog](https://github.com/xerial/sqlite-jdbc/blob/master/CHANGELOG)
- [Commits](https://github.com/xerial/sqlite-jdbc/compare/3.47.0.0...3.47.1.0)

---
updated-dependencies:
- dependency-name: org.xerial:sqlite-jdbc
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-11-26 04:25:26 +00:00
HaHaWTH
2bde2fd8ac default false 2024-11-04 21:57:28 +08:00
HaHaWTH
48a48f0c07 Remove menu plugin 2024-11-04 19:38:31 +08:00
HaHaWTH
a70d1d7268 Update workflow 2024-11-04 19:36:07 +08:00
HaHaWTH
5cc4167e4f Reformat email.html 2024-11-04 19:31:55 +08:00
HaHaWTH
b9e2514556 Cleanup 2024-11-04 19:24:24 +08:00
Kobe ⑧
0b11781329
Merge pull request #221 from HaHaWTH/dependabot/maven/org.xerial-sqlite-jdbc-3.47.0.0
Bump org.xerial:sqlite-jdbc from 3.46.1.2 to 3.47.0.0
2024-10-24 21:21:53 +08:00
Kobe ⑧
645d11ea54
Merge pull request #222 from HaHaWTH/dependabot/maven/org.apache.maven.plugins-maven-site-plugin-3.21.0
Bump org.apache.maven.plugins:maven-site-plugin from 3.12.1 to 3.21.0
2024-10-24 21:21:36 +08:00
dependabot[bot]
3e87b9f44a
Bump org.apache.maven.plugins:maven-site-plugin from 3.12.1 to 3.21.0
Bumps [org.apache.maven.plugins:maven-site-plugin](https://github.com/apache/maven-site-plugin) from 3.12.1 to 3.21.0.
- [Release notes](https://github.com/apache/maven-site-plugin/releases)
- [Commits](https://github.com/apache/maven-site-plugin/compare/maven-site-plugin-3.12.1...maven-site-plugin-3.21.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-site-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-23 05:04:58 +00:00
dependabot[bot]
a6dc4514f2
Bump org.xerial:sqlite-jdbc from 3.46.1.2 to 3.47.0.0
Bumps [org.xerial:sqlite-jdbc](https://github.com/xerial/sqlite-jdbc) from 3.46.1.2 to 3.47.0.0.
- [Release notes](https://github.com/xerial/sqlite-jdbc/releases)
- [Changelog](https://github.com/xerial/sqlite-jdbc/blob/master/CHANGELOG)
- [Commits](https://github.com/xerial/sqlite-jdbc/compare/3.46.1.2...3.47.0.0)

---
updated-dependencies:
- dependency-name: org.xerial:sqlite-jdbc
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-23 05:04:50 +00:00
Kobe ⑧
69ea9a1d43
Merge pull request #216 from HaHaWTH/dependabot/maven/org.apache.maven.plugins-maven-javadoc-plugin-3.10.1
Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.10.0 to 3.10.1
2024-10-12 22:40:12 +08:00
Kobe ⑧
1dfbbb543c
Merge pull request #217 from HaHaWTH/dependabot/maven/org.checkerframework-checker-qual-3.48.0
Bump org.checkerframework:checker-qual from 3.47.0 to 3.48.0
2024-10-12 22:39:58 +08:00
dependabot[bot]
092df678a8
Bump org.checkerframework:checker-qual from 3.47.0 to 3.48.0
Bumps [org.checkerframework:checker-qual](https://github.com/typetools/checker-framework) from 3.47.0 to 3.48.0.
- [Release notes](https://github.com/typetools/checker-framework/releases)
- [Changelog](https://github.com/typetools/checker-framework/blob/master/docs/CHANGELOG.md)
- [Commits](https://github.com/typetools/checker-framework/compare/checker-framework-3.47.0...checker-framework-3.48.0)

---
updated-dependencies:
- dependency-name: org.checkerframework:checker-qual
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-03 05:07:53 +00:00
dependabot[bot]
5f165eed75
Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.10.0 to 3.10.1
Bumps [org.apache.maven.plugins:maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.10.0 to 3.10.1.
- [Release notes](https://github.com/apache/maven-javadoc-plugin/releases)
- [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.10.0...maven-javadoc-plugin-3.10.1)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-javadoc-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-02 04:22:40 +00:00
Kobe ⑧
a988422302
Merge pull request #214 from HaHaWTH/dependabot/maven/org.xerial-sqlite-jdbc-3.46.1.2
Bump org.xerial:sqlite-jdbc from 3.46.1.1 to 3.46.1.2
2024-09-26 13:00:19 +08:00
dependabot[bot]
e5f6e31af2
Bump org.xerial:sqlite-jdbc from 3.46.1.1 to 3.46.1.2
Bumps [org.xerial:sqlite-jdbc](https://github.com/xerial/sqlite-jdbc) from 3.46.1.1 to 3.46.1.2.
- [Release notes](https://github.com/xerial/sqlite-jdbc/releases)
- [Changelog](https://github.com/xerial/sqlite-jdbc/blob/master/CHANGELOG)
- [Commits](https://github.com/xerial/sqlite-jdbc/compare/3.46.1.1...3.46.1.2)

---
updated-dependencies:
- dependency-name: org.xerial:sqlite-jdbc
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-26 04:37:04 +00:00
Kobe ⑧
f4bd83e86a
Merge pull request #213 from HaHaWTH/dependabot/maven/org.xerial-sqlite-jdbc-3.46.1.1
Bump org.xerial:sqlite-jdbc from 3.46.1.0 to 3.46.1.1
2024-09-25 13:45:39 +08:00
dependabot[bot]
7713ee499d
Bump org.xerial:sqlite-jdbc from 3.46.1.0 to 3.46.1.1
Bumps [org.xerial:sqlite-jdbc](https://github.com/xerial/sqlite-jdbc) from 3.46.1.0 to 3.46.1.1.
- [Release notes](https://github.com/xerial/sqlite-jdbc/releases)
- [Changelog](https://github.com/xerial/sqlite-jdbc/blob/master/CHANGELOG)
- [Commits](https://github.com/xerial/sqlite-jdbc/compare/3.46.1.0...3.46.1.1)

---
updated-dependencies:
- dependency-name: org.xerial:sqlite-jdbc
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-25 04:54:43 +00:00
Kobe ⑧
6fb2d93650
Merge pull request #210 from HaHaWTH/dependabot/maven/org.checkerframework-checker-qual-3.47.0
Bump org.checkerframework:checker-qual from 3.46.0 to 3.47.0
2024-09-07 23:39:13 +08:00
Kobe ⑧
81db29f76f
Merge pull request #208 from HaHaWTH/dependabot/maven/org.apache.maven.plugins-maven-javadoc-plugin-3.10.0
Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.8.0 to 3.10.0
2024-09-07 23:38:55 +08:00
dependabot[bot]
fd2018186c
Bump org.checkerframework:checker-qual from 3.46.0 to 3.47.0
Bumps [org.checkerframework:checker-qual](https://github.com/typetools/checker-framework) from 3.46.0 to 3.47.0.
- [Release notes](https://github.com/typetools/checker-framework/releases)
- [Changelog](https://github.com/typetools/checker-framework/blob/master/docs/CHANGELOG.md)
- [Commits](https://github.com/typetools/checker-framework/compare/checker-framework-3.46.0...checker-framework-3.47.0)

---
updated-dependencies:
- dependency-name: org.checkerframework:checker-qual
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-09-05 05:00:38 +00:00
dependabot[bot]
bb85a7c619
Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.8.0 to 3.10.0
Bumps [org.apache.maven.plugins:maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.8.0 to 3.10.0.
- [Release notes](https://github.com/apache/maven-javadoc-plugin/releases)
- [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.8.0...maven-javadoc-plugin-3.10.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-javadoc-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-28 04:44:19 +00:00
Kobe ⑧
9e7e90db6c
Update pom.xml 2024-08-22 18:36:50 +08:00
HaHaWTH
007e01156b B53 release 2024-08-20 23:52:40 +08:00
Kobe ⑧
d2ec62ac7f
Merge pull request #203 from HaHaWTH/dependabot/maven/org.apache.maven.plugins-maven-deploy-plugin-3.1.3
Bump org.apache.maven.plugins:maven-deploy-plugin from 3.1.2 to 3.1.3
2024-08-20 18:46:24 +08:00
Kobe ⑧
da32bdec94
Merge pull request #204 from HaHaWTH/dependabot/maven/org.apache.maven.plugins-maven-install-plugin-3.1.3
Bump org.apache.maven.plugins:maven-install-plugin from 3.1.2 to 3.1.3
2024-08-20 18:46:14 +08:00
Kobe ⑧
7d58e90557
Merge pull request #202 from HaHaWTH/dependabot/maven/org.xerial-sqlite-jdbc-3.46.1.0
Bump org.xerial:sqlite-jdbc from 3.46.0.1 to 3.46.1.0
2024-08-20 18:45:54 +08:00
dependabot[bot]
08dabda7c7
Bump org.apache.maven.plugins:maven-install-plugin from 3.1.2 to 3.1.3
Bumps [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin) from 3.1.2 to 3.1.3.
- [Release notes](https://github.com/apache/maven-install-plugin/releases)
- [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.2...maven-install-plugin-3.1.3)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-install-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-20 04:34:00 +00:00
dependabot[bot]
feea348ec3
Bump org.apache.maven.plugins:maven-deploy-plugin from 3.1.2 to 3.1.3
Bumps [org.apache.maven.plugins:maven-deploy-plugin](https://github.com/apache/maven-deploy-plugin) from 3.1.2 to 3.1.3.
- [Release notes](https://github.com/apache/maven-deploy-plugin/releases)
- [Commits](https://github.com/apache/maven-deploy-plugin/compare/maven-deploy-plugin-3.1.2...maven-deploy-plugin-3.1.3)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-deploy-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-20 04:32:17 +00:00
dependabot[bot]
67eb7dee0f
Bump org.xerial:sqlite-jdbc from 3.46.0.1 to 3.46.1.0
Bumps [org.xerial:sqlite-jdbc](https://github.com/xerial/sqlite-jdbc) from 3.46.0.1 to 3.46.1.0.
- [Release notes](https://github.com/xerial/sqlite-jdbc/releases)
- [Changelog](https://github.com/xerial/sqlite-jdbc/blob/master/CHANGELOG)
- [Commits](https://github.com/xerial/sqlite-jdbc/compare/3.46.0.1...3.46.1.0)

---
updated-dependencies:
- dependency-name: org.xerial:sqlite-jdbc
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-19 04:42:25 +00:00
Kobe ⑧
6fb1d2855e
Merge pull request #196 from HaHaWTH/dependabot/maven/net.kyori-adventure-platform-bukkit-4.3.4
Bump net.kyori:adventure-platform-bukkit from 4.3.3 to 4.3.4
2024-08-16 19:40:48 +08:00
dependabot[bot]
faa3d9320c
Bump net.kyori:adventure-platform-bukkit from 4.3.3 to 4.3.4
Bumps [net.kyori:adventure-platform-bukkit](https://github.com/KyoriPowered/adventure-platform) from 4.3.3 to 4.3.4.
- [Release notes](https://github.com/KyoriPowered/adventure-platform/releases)
- [Commits](https://github.com/KyoriPowered/adventure-platform/compare/v4.3.3...v4.3.4)

---
updated-dependencies:
- dependency-name: net.kyori:adventure-platform-bukkit
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-13 05:06:28 +00:00
Kobe ⑧
497cd543fd
Merge pull request #194 from HaHaWTH/dependabot/maven/org.checkerframework-checker-qual-3.46.0
Bump org.checkerframework:checker-qual from 3.45.0 to 3.46.0
2024-08-02 12:38:37 +08:00
Kobe ⑧
71d5205df0
Merge pull request #192 from HaHaWTH/dependabot/maven/org.xerial-sqlite-jdbc-3.46.0.1
Bump org.xerial:sqlite-jdbc from 3.46.0.0 to 3.46.0.1
2024-08-02 12:38:26 +08:00
dependabot[bot]
bba90d93f1
Bump org.checkerframework:checker-qual from 3.45.0 to 3.46.0
Bumps [org.checkerframework:checker-qual](https://github.com/typetools/checker-framework) from 3.45.0 to 3.46.0.
- [Release notes](https://github.com/typetools/checker-framework/releases)
- [Changelog](https://github.com/typetools/checker-framework/blob/master/docs/CHANGELOG.md)
- [Commits](https://github.com/typetools/checker-framework/compare/checker-framework-3.45.0...checker-framework-3.46.0)

---
updated-dependencies:
- dependency-name: org.checkerframework:checker-qual
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-02 04:33:38 +00:00
HaHaWTH
ab40b1b82d fix papi NPE 2024-07-31 23:48:32 +08:00
HaHaWTH
22a6cefbdc Merge remote-tracking branch 'origin/master' 2024-07-31 13:54:34 +08:00
HaHaWTH
9ca3a24862 Temporarily fix inventory loss 2024-07-31 13:53:54 +08:00
dependabot[bot]
91f0dfa5c5
Bump org.xerial:sqlite-jdbc from 3.46.0.0 to 3.46.0.1
Bumps [org.xerial:sqlite-jdbc](https://github.com/xerial/sqlite-jdbc) from 3.46.0.0 to 3.46.0.1.
- [Release notes](https://github.com/xerial/sqlite-jdbc/releases)
- [Changelog](https://github.com/xerial/sqlite-jdbc/blob/master/CHANGELOG)
- [Commits](https://github.com/xerial/sqlite-jdbc/compare/3.46.0.0...3.46.0.1)

---
updated-dependencies:
- dependency-name: org.xerial:sqlite-jdbc
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-31 04:21:56 +00:00
Kobe ⑧
f0e935a5d8
Merge pull request #186 from luketeam5/patch-1
Better Regex e-mail
2024-07-23 09:39:45 +08:00
luketeam5
f0fae0fce0
Update RestrictionSettings.java 2024-07-23 03:34:10 +02:00
luketeam5
4c40ba36a6
Better regex 2024-07-23 00:07:34 +02:00
HaHaWTH
bd7a25560f Added config to disable changepassword email verification 2024-07-23 03:52:01 +08:00
Kobe ⑧
e02659d850
Merge pull request #183 from HaHaWTH/dependabot/maven/net.kyori-adventure-platform-bukkit-4.3.3
Bump net.kyori:adventure-platform-bukkit from 4.3.2 to 4.3.3
2024-07-22 13:37:10 +08:00
Kobe ⑧
c95f96572c
Merge pull request #182 from HaHaWTH/dependabot/maven/org.apache.maven.plugins-maven-javadoc-plugin-3.8.0
Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.7.0 to 3.8.0
2024-07-22 13:36:52 +08:00
dependabot[bot]
1c1356a4d1
Bump net.kyori:adventure-platform-bukkit from 4.3.2 to 4.3.3
Bumps [net.kyori:adventure-platform-bukkit](https://github.com/KyoriPowered/adventure-platform) from 4.3.2 to 4.3.3.
- [Release notes](https://github.com/KyoriPowered/adventure-platform/releases)
- [Commits](https://github.com/KyoriPowered/adventure-platform/compare/v4.3.2...v4.3.3)

---
updated-dependencies:
- dependency-name: net.kyori:adventure-platform-bukkit
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-22 04:18:17 +00:00
dependabot[bot]
f206deb8ed
Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.7.0 to 3.8.0
Bumps [org.apache.maven.plugins:maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.7.0 to 3.8.0.
- [Release notes](https://github.com/apache/maven-javadoc-plugin/releases)
- [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.7.0...maven-javadoc-plugin-3.8.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-javadoc-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-22 04:17:53 +00:00
Kobe ⑧
9bf6aae8e9
[ci skip] Update README.md 2024-07-17 02:07:28 +08:00
HaHaWTH
63bfc7a5c1 B52 release 2024-07-14 17:48:25 +08:00
HaHaWTH
731c6477a5 PlaceholderAPI hook 2024-07-14 16:24:04 +08:00
HaHaWTH
e0bf35284c Update runtime test to 1.21 2024-07-13 04:08:55 +08:00
HaHaWTH
02ebb0b0ab hehe 2024-07-12 23:26:14 +08:00
HaHaWTH
92741daaa8 fix: #178 mail sending lags server 2024-07-11 15:10:40 +08:00
Kobe ⑧
18ce05d07d
Merge pull request #174 from HaHaWTH/dependabot/maven/org.checkerframework-checker-qual-3.45.0
Bump org.checkerframework:checker-qual from 3.40.0 to 3.45.0
2024-07-02 13:38:18 +08:00
dependabot[bot]
37e6e9feb6
Bump org.checkerframework:checker-qual from 3.40.0 to 3.45.0
Bumps [org.checkerframework:checker-qual](https://github.com/typetools/checker-framework) from 3.40.0 to 3.45.0.
- [Release notes](https://github.com/typetools/checker-framework/releases)
- [Changelog](https://github.com/typetools/checker-framework/blob/master/docs/CHANGELOG.md)
- [Commits](https://github.com/typetools/checker-framework/compare/checker-framework-3.40.0...checker-framework-3.45.0)

---
updated-dependencies:
- dependency-name: org.checkerframework:checker-qual
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-02 05:07:13 +00:00
Kobe ⑧
655c5ca42c
Bump version to 5.7.0-Fork 2024-06-30 12:20:05 +08:00
Kobe ⑧
c99fc5c389
Update plugin.yml 2024-06-30 12:19:19 +08:00
Kobe ⑧
9b0a4a003e
Bump version to 5.7.0-FORK 2024-06-30 12:18:46 +08:00
HaHaWTH
f25610c90b Fix workflow 2024-06-27 12:10:57 +08:00
HaHaWTH
7130d3989c Bump version number 2024-06-27 12:02:24 +08:00
HaHaWTH
900d2bd2e9 Merge remote-tracking branch 'origin/master' 2024-06-27 11:57:55 +08:00
HaHaWTH
7d255dfa30 Sync with upstream & Bump version number 2024-06-27 11:57:17 +08:00
DGun Otto
0cce930260
Merge pull request #172 from HaHaWTH/dependabot/maven/org.apache.maven.plugins-maven-jar-plugin-3.4.2
Bump org.apache.maven.plugins:maven-jar-plugin from 3.4.1 to 3.4.2
2024-06-20 14:37:48 +08:00
DGun Otto
0671a54b20
Merge pull request #171 from HaHaWTH/dependabot/maven/org.apache.maven.plugins-maven-clean-plugin-3.4.0
Bump org.apache.maven.plugins:maven-clean-plugin from 3.3.2 to 3.4.0
2024-06-20 14:37:37 +08:00
dependabot[bot]
4df4a1fa4b
Bump org.apache.maven.plugins:maven-jar-plugin from 3.4.1 to 3.4.2
Bumps [org.apache.maven.plugins:maven-jar-plugin](https://github.com/apache/maven-jar-plugin) from 3.4.1 to 3.4.2.
- [Release notes](https://github.com/apache/maven-jar-plugin/releases)
- [Commits](https://github.com/apache/maven-jar-plugin/compare/maven-jar-plugin-3.4.1...maven-jar-plugin-3.4.2)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-jar-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-20 04:48:58 +00:00
dependabot[bot]
5b52a0ff00
Bump org.apache.maven.plugins:maven-clean-plugin from 3.3.2 to 3.4.0
Bumps [org.apache.maven.plugins:maven-clean-plugin](https://github.com/apache/maven-clean-plugin) from 3.3.2 to 3.4.0.
- [Release notes](https://github.com/apache/maven-clean-plugin/releases)
- [Commits](https://github.com/apache/maven-clean-plugin/compare/maven-clean-plugin-3.3.2...maven-clean-plugin-3.4.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-clean-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-20 04:48:06 +00:00
HaHaWTH
5186d09116 Revert some changes 2024-06-18 16:17:03 +08:00
HaHaWTH
a5b06bbd07 Merge remote-tracking branch 'origin/master' 2024-06-12 01:46:32 +08:00
HaHaWTH
9b74cb5a00 Fix Folia join commands 2024-06-12 01:45:57 +08:00
DGun Otto
be97e7faa0
Update maven.yml 2024-06-11 21:43:35 +08:00
HaHaWTH
253822a056 Merge remote-tracking branch 'origin/master' 2024-06-11 07:28:59 +08:00
HaHaWTH
0fcc45039d Add openInventory method to API 2024-06-11 07:28:13 +08:00
DGun Otto
4700e2ae90
Merge pull request #169 from Dreeam-qwq/fix/i18n-opt
Remove locale data from locale map when player quit to save ram
2024-06-10 06:51:49 +08:00
Dreeam
d9c89e1dc6
Remove locale data from locale map when player quit to save mem 2024-06-10 06:15:48 +08:00
DGun Otto
b513fd37cb
[ci skip] Update link 2024-06-06 03:20:54 +08:00
HaHaWTH
304eca4b6a B50 release 2024-06-04 20:56:24 +08:00
HaHaWTH
13315e6132 pom cleanup 2024-06-04 17:49:53 +08:00
DGun Otto
90684451d8
Merge pull request #162 from HaHaWTH/dependabot/maven/org.apache.maven.plugins-maven-javadoc-plugin-3.7.0
Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.4.1 to 3.7.0
2024-06-04 04:11:17 +08:00
DGun Otto
799849920f
Merge pull request #161 from HaHaWTH/dependabot/maven/org.apache.maven.plugins-maven-shade-plugin-3.6.0
Bump org.apache.maven.plugins:maven-shade-plugin from 3.5.3 to 3.6.0
2024-06-04 04:11:05 +08:00
DGun Otto
f7d83f1459
Merge pull request #155 from Dreeam-qwq/feat/i18n
i18n messages sending support
2024-06-03 23:55:23 +08:00
Dreeam
fbf5f32415
Instantly return null if didn't receive locale packet before calling messages sending method 2024-06-03 20:04:54 +08:00
Dreeam
e922422922
Adjust code style 2024-06-03 19:58:44 +08:00
Dreeam
b9648393a7
Remove deprecated feature lang 2024-06-03 19:54:03 +08:00
dependabot[bot]
d20cc6514b
Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.4.1 to 3.7.0
Bumps [org.apache.maven.plugins:maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.4.1 to 3.7.0.
- [Release notes](https://github.com/apache/maven-javadoc-plugin/releases)
- [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.4.1...maven-javadoc-plugin-3.7.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-javadoc-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-03 04:37:24 +00:00
dependabot[bot]
6a20976370
Bump org.apache.maven.plugins:maven-shade-plugin from 3.5.3 to 3.6.0
Bumps [org.apache.maven.plugins:maven-shade-plugin](https://github.com/apache/maven-shade-plugin) from 3.5.3 to 3.6.0.
- [Release notes](https://github.com/apache/maven-shade-plugin/releases)
- [Commits](https://github.com/apache/maven-shade-plugin/compare/maven-shade-plugin-3.5.3...maven-shade-plugin-3.6.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-shade-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-06-03 04:37:07 +00:00
HaHaWTH
3e56aacb4e Improved inventory whitelist check & prepare for better MiniMessage support 2024-06-03 00:21:03 +08:00
Dreeam
a8e18d1bb8
Decrease timeout limit to prevent main thread waiting too long 2024-06-02 21:19:52 +08:00
Dreeam
32ed70f099
Use Protocollib to get locale packet for lower server version (< 1.15.2) 2024-06-02 18:59:27 +08:00
Dreeam
e89b6182a7
Merge remote-tracking branch 'upstream/master' into feat/i18n 2024-06-02 17:19:47 +08:00
HaHaWTH
41d04c7604 Merge remote-tracking branch 'origin/master' 2024-06-01 15:14:50 +08:00
HaHaWTH
d7a5869e99 Cleanup & Fix 2024-06-01 15:13:04 +08:00
DGun Otto
3139902b37
[ci skip] Update README.md 2024-06-01 05:04:42 +08:00
HaHaWTH
dc599fe5c3 Completely removed gui captcha things 2024-05-31 23:48:12 +08:00
Dreeam
5829bfeaa2
[ci skip] Update messages translations 2024-05-31 22:00:36 +08:00
Dreeam
100805da8b
Merge branch 'master' into feat/i18n 2024-05-31 20:36:27 +08:00
Dreeam
0679087e53
Try to reduce complexity 2024-05-31 20:23:47 +08:00
Dreeam
b6476dcb79
Revert 2024-05-31 20:17:02 +08:00
Dreeam
471e1c0d2c
[ci skip] Update messages translations 2024-05-31 20:13:19 +08:00
Dreeam
3d6b1a059c
[ci skip] Update messages translations 2024-05-31 18:20:42 +08:00
Dreeam
f56ca830cf
[ci skip] Update messages_en.yml 2024-05-31 17:26:57 +08:00
HaHaWTH
0fbe7d99cb Fixes 2024-05-31 16:32:54 +08:00
DGun Otto
bbdf64415c
Merge pull request #159 from HaHaWTH/dependabot/maven/org.apache.maven.plugins-maven-enforcer-plugin-3.5.0
Bump org.apache.maven.plugins:maven-enforcer-plugin from 3.2.1 to 3.5.0
2024-05-31 16:26:34 +08:00
HaHaWTH
5981af630a Merge remote-tracking branch 'origin/master' 2024-05-31 14:38:12 +08:00
HaHaWTH
7e14bd8675 skip Paper plugin remap 2024-05-31 14:37:51 +08:00
dependabot[bot]
0f407f9658
Bump org.apache.maven.plugins:maven-enforcer-plugin from 3.2.1 to 3.5.0
Bumps [org.apache.maven.plugins:maven-enforcer-plugin](https://github.com/apache/maven-enforcer) from 3.2.1 to 3.5.0.
- [Release notes](https://github.com/apache/maven-enforcer/releases)
- [Commits](https://github.com/apache/maven-enforcer/compare/enforcer-3.2.1...enforcer-3.5.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-enforcer-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-31 05:00:31 +00:00
DGun Otto
9439098472
Merge pull request #140 from HaHaWTH/dependabot/maven/org.apache.maven.plugins-maven-install-plugin-3.1.2
Bump org.apache.maven.plugins:maven-install-plugin from 3.1.0 to 3.1.2
2024-05-31 02:37:58 +08:00
DGun Otto
6618c004c3
Merge pull request #154 from HaHaWTH/dependabot/maven/org.xerial-sqlite-jdbc-3.46.0.0
Bump org.xerial:sqlite-jdbc from 3.45.3.0 to 3.46.0.0
2024-05-31 02:37:23 +08:00
DGun Otto
18ab6623ff
Support for latest Leaves 2024-05-31 02:24:22 +08:00
HaHaWTH
2fe0da569b Cleanup 2024-05-30 23:53:08 +08:00
HaHaWTH
42e907580c Async teleport is now default >v< 2024-05-30 22:15:21 +08:00
DGun Otto
ae76066db6
Merge pull request #158 from HaHaWTH/feat/minimessage
Minimessage support
2024-05-30 18:40:59 +08:00
HaHaWTH
5c74580866 Revert message changes 2024-05-30 18:04:19 +08:00
HaHaWTH
2dd5ebcb8c Fix Folia compatibility 2024-05-30 13:38:04 +08:00
HaHaWTH
69f3d9838d Change default quickCommandProtection value 2024-05-30 02:17:10 +08:00
Dreeam
e8010782fd
Cleanup reflection 2024-05-30 01:39:40 +08:00
Dreeam
4e54d86712
Fix getting locale in lower version client by delaying message sending 2024-05-30 01:21:57 +08:00
Dreeam
fdc0d31632
Fix reflect error 2024-05-30 00:27:38 +08:00
Dreeam
0d903d23b0
Add strict locale-code-redirect config format check 2024-05-29 23:20:34 +08:00
Dreeam
e79036d42f
Revert "[ci skip] Try to decrease complexity"
This reverts commit 39e94c6ea79d16c78fc23c04700c8595a241085d.
2024-05-29 23:06:47 +08:00
Dreeam
39e94c6ea7
[ci skip] Try to decrease complexity 2024-05-29 23:04:58 +08:00
Dreeam
0c10cb0ead
Fix code style 2024-05-29 22:55:19 +08:00
Dreeam
7301a22d44
[ci skip] Update docs/config.md 2024-05-29 21:05:11 +08:00
Dreeam
89817d420c
Move utils to I18NUtils 2024-05-29 20:34:27 +08:00
Dreeam
c53f622e94
Cleanup 2024-05-29 20:19:33 +08:00
Dreeam
eb43dc3960
Clean up locale to language code matching 2024-05-29 18:59:41 +08:00
Dreeam
6001ee6979
Add configurable locale code to AuthMe language code redirect 2024-05-29 18:46:57 +08:00
Dreeam
d09e545554
Add hard mapping to convert to AuthMe language code from locale code 2024-05-29 17:07:30 +08:00
HaHaWTH
642270e4c3 Reapply "Always save quit location and fixes #2769 issue 1"
This reverts commit 8c4da6288e0fc662df582ef6bdab5c210170e338.
2024-05-29 14:44:28 +08:00
HaHaWTH
d648725b10 Silent login for BedrockAutoLoginListener 2024-05-29 13:40:46 +08:00
HaHaWTH
0f6ecb8f03 Merge remote-tracking branch 'origin/master' 2024-05-29 13:38:35 +08:00
HaHaWTH
ce60648233 Expose silentForceLogin to api (#2819) 2024-05-29 13:37:37 +08:00
DGun Otto
186860c1fa
Merge pull request #156 from F3F5/master
yay the Russian translation is up to date
2024-05-29 13:12:19 +08:00
MISHA
3beed667b4
refresh the translation 2024-05-29 00:34:13 +04:00
Dreeam
2219dd55dd
Intial i18n messages support
Send different languages of messages based on player's client setting
2024-05-29 00:11:25 +08:00
DGun Otto
3e73a5090a
Merge pull request #139 from HaHaWTH/dependabot/maven/org.apache.maven.plugins-maven-deploy-plugin-3.1.2
Bump org.apache.maven.plugins:maven-deploy-plugin from 3.0.0 to 3.1.2
2024-05-28 19:36:20 +08:00
HaHaWTH
583a275100 Exclude bungee-chat
Nothing uses this lol
2024-05-28 14:20:31 +08:00
dependabot[bot]
a4c1dd6f5b
Bump org.xerial:sqlite-jdbc from 3.45.3.0 to 3.46.0.0
Bumps [org.xerial:sqlite-jdbc](https://github.com/xerial/sqlite-jdbc) from 3.45.3.0 to 3.46.0.0.
- [Release notes](https://github.com/xerial/sqlite-jdbc/releases)
- [Changelog](https://github.com/xerial/sqlite-jdbc/blob/master/CHANGELOG)
- [Commits](https://github.com/xerial/sqlite-jdbc/compare/3.45.3.0...3.46.0.0)

---
updated-dependencies:
- dependency-name: org.xerial:sqlite-jdbc
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-05-28 04:31:50 +00:00
HaHaWTH
de69919c01 Fix some issues with Velocity support 2024-05-27 19:40:50 +08:00
HaHaWTH
6dea065ed2 Support plain text password storage method (NOCRYPT) 2024-05-27 05:11:15 +08:00
HaHaWTH
9e208532d3 Initial MiniMessage support 2024-05-27 04:56:50 +08:00
DGun Otto
c0b6d87678
Allow dot in the email username 2024-05-27 00:56:40 +08:00
HaHaWTH
778edac895 B49 release 2024-05-24 16:41:36 +08:00
HaHaWTH
17d1cf1665 Update SpigotAPI 2024-05-24 00:55:58 +08:00
HaHaWTH
3f3671c95c Fix #146 and cleanup 2024-05-24 00:42:47 +08:00
HaHaWTH
52c06917c3 Add repository 2024-05-23 18:02:47 +08:00
HaHaWTH
b2ea5cbef8 Dynamically download H2 2024-05-23 17:55:42 +08:00
HaHaWTH
99c7466b37 Better handling teleportUnAuthedToSpawn 2024-05-22 23:55:34 +08:00
HaHaWTH
e60c18d8a8 Merge remote-tracking branch 'origin/master' 2024-05-22 23:49:33 +08:00
HaHaWTH
8c4da6288e Revert "Always save quit location and fixes #2769 issue 1"
This reverts commit c1eee8e139f1430342be9c4cda9426b6c10c692f.
2024-05-22 23:48:28 +08:00
DGun Otto
1a73adf414
Remove relocation 2024-05-11 14:28:38 +08:00
HaHaWTH
cb76ae01e1 Fix potential NPE when using velocity 2024-05-08 08:32:19 +08:00
HaHaWTH
89df4e451c B48 release 2024-04-30 22:58:53 +08:00
dependabot[bot]
f99b4bd0ad
Bump org.apache.maven.plugins:maven-install-plugin from 3.1.0 to 3.1.2
Bumps [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin) from 3.1.0 to 3.1.2.
- [Release notes](https://github.com/apache/maven-install-plugin/releases)
- [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.0...maven-install-plugin-3.1.2)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-install-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-30 04:24:30 +00:00
dependabot[bot]
930f889745
Bump org.apache.maven.plugins:maven-deploy-plugin from 3.0.0 to 3.1.2
Bumps [org.apache.maven.plugins:maven-deploy-plugin](https://github.com/apache/maven-deploy-plugin) from 3.0.0 to 3.1.2.
- [Release notes](https://github.com/apache/maven-deploy-plugin/releases)
- [Commits](https://github.com/apache/maven-deploy-plugin/compare/maven-deploy-plugin-3.0.0...maven-deploy-plugin-3.1.2)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-deploy-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-30 04:24:10 +00:00
DGun Otto
fe39310eca
Merge pull request #138 from HaHaWTH/HaHaWTH-patch-1
Update workflows
2024-04-30 00:40:07 +08:00
DGun Otto
b9790d458e
Update workflows 2024-04-30 00:30:28 +08:00
DGun Otto
dc8d5f741a
[ci skip] Update README.md 2024-04-25 23:46:55 +08:00
DGun Otto
b3288e9c72
[ci skip] Update LICENSE 2024-04-25 23:44:25 +08:00
DGun Otto
c88aa79377
[ci skip] Update LICENSE 2024-04-25 23:42:27 +08:00
HaHaWTH
2327c07f9a Revert email dependency update 2024-04-24 16:46:22 +08:00
DGun Otto
8e93d4cd19
Merge pull request #133 from HaHaWTH/dependabot/maven/org.apache.commons-commons-email-1.6.0
Bump org.apache.commons:commons-email from 1.6-SNAPSHOT to 1.6.0
2024-04-24 15:31:23 +08:00
HaHaWTH
a963bde749 Merge remote-tracking branch 'origin/master' 2024-04-24 15:26:57 +08:00
HaHaWTH
10b6997c32 Don't apply relocation and fixes #999 again 2024-04-24 15:26:20 +08:00
DGun Otto
970c77678b
Merge pull request #132 from HaHaWTH/dependabot/maven/org.apache.maven.plugins-maven-shade-plugin-3.5.3
Bump org.apache.maven.plugins:maven-shade-plugin from 3.5.2 to 3.5.3
2024-04-24 14:22:30 +08:00
dependabot[bot]
07c479746b
Bump org.apache.commons:commons-email from 1.6-SNAPSHOT to 1.6.0
Bumps org.apache.commons:commons-email from 1.6-SNAPSHOT to 1.6.0.

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-email
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-24 04:38:47 +00:00
dependabot[bot]
d90a8a36cf
Bump org.apache.maven.plugins:maven-shade-plugin from 3.5.2 to 3.5.3
Bumps [org.apache.maven.plugins:maven-shade-plugin](https://github.com/apache/maven-shade-plugin) from 3.5.2 to 3.5.3.
- [Release notes](https://github.com/apache/maven-shade-plugin/releases)
- [Commits](https://github.com/apache/maven-shade-plugin/compare/maven-shade-plugin-3.5.2...maven-shade-plugin-3.5.3)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-shade-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-24 04:38:40 +00:00
HaHaWTH
c1eee8e139 Always save quit location and fixes #2769 issue 1 2024-04-24 02:21:40 +08:00
DGun Otto
dd831a65a5
Downgrade email dependency version 2024-04-24 00:56:24 +08:00
DGun Otto
51783604c6
Merge pull request #130 from HaHaWTH/dependabot/maven/org.apache.maven.plugins-maven-jar-plugin-3.4.1
Bump org.apache.maven.plugins:maven-jar-plugin from 3.4.0 to 3.4.1
2024-04-22 12:37:00 +08:00
dependabot[bot]
9f8471d4e9
Bump org.apache.maven.plugins:maven-jar-plugin from 3.4.0 to 3.4.1
Bumps [org.apache.maven.plugins:maven-jar-plugin](https://github.com/apache/maven-jar-plugin) from 3.4.0 to 3.4.1.
- [Release notes](https://github.com/apache/maven-jar-plugin/releases)
- [Commits](https://github.com/apache/maven-jar-plugin/compare/maven-jar-plugin-3.4.0...maven-jar-plugin-3.4.1)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-jar-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-22 04:11:25 +00:00
HaHaWTH
c4ac2601ad Merge remote-tracking branch 'origin/master' 2024-04-20 03:53:59 +08:00
HaHaWTH
b4a0994871 Update GeoLite2 database 2024-04-20 03:53:41 +08:00
DGun Otto
b619e1dac5
Merge pull request #128 from HaHaWTH/dependabot/maven/org.xerial-sqlite-jdbc-3.45.3.0
Bump org.xerial:sqlite-jdbc from 3.45.2.0 to 3.45.3.0
2024-04-16 14:24:56 +08:00
dependabot[bot]
ba1703c684
Bump org.xerial:sqlite-jdbc from 3.45.2.0 to 3.45.3.0
Bumps [org.xerial:sqlite-jdbc](https://github.com/xerial/sqlite-jdbc) from 3.45.2.0 to 3.45.3.0.
- [Release notes](https://github.com/xerial/sqlite-jdbc/releases)
- [Changelog](https://github.com/xerial/sqlite-jdbc/blob/master/CHANGELOG)
- [Commits](https://github.com/xerial/sqlite-jdbc/compare/3.45.2.0...3.45.3.0)

---
updated-dependencies:
- dependency-name: org.xerial:sqlite-jdbc
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-16 04:52:25 +00:00
DGun Otto
131b5b7805
Merge pull request #127 from HaHaWTH/dependabot/maven/org.apache.maven.plugins-maven-jar-plugin-3.4.0
Bump org.apache.maven.plugins:maven-jar-plugin from 3.3.0 to 3.4.0
2024-04-15 16:19:11 +08:00
dependabot[bot]
099415e823
Bump org.apache.maven.plugins:maven-jar-plugin from 3.3.0 to 3.4.0
Bumps [org.apache.maven.plugins:maven-jar-plugin](https://github.com/apache/maven-jar-plugin) from 3.3.0 to 3.4.0.
- [Release notes](https://github.com/apache/maven-jar-plugin/releases)
- [Commits](https://github.com/apache/maven-jar-plugin/compare/maven-jar-plugin-3.3.0...maven-jar-plugin-3.4.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-jar-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-15 04:46:39 +00:00
HaHaWTH
91261f4315 Update config comment 2024-04-15 02:20:19 +08:00
HaHaWTH
548be5042d Merge remote-tracking branch 'origin/master' 2024-04-07 12:37:57 +08:00
HaHaWTH
e9fd7fd80f B47 release 2024-04-07 12:37:34 +08:00
DGun Otto
e44cd3edc6
Merge pull request #124 from HaHaWTH/dependabot/maven/org.apache.maven.plugins-maven-source-plugin-3.3.1
Bump org.apache.maven.plugins:maven-source-plugin from 3.3.0 to 3.3.1
2024-04-05 13:16:21 +08:00
dependabot[bot]
219a7a3493
Bump org.apache.maven.plugins:maven-source-plugin from 3.3.0 to 3.3.1
Bumps [org.apache.maven.plugins:maven-source-plugin](https://github.com/apache/maven-source-plugin) from 3.3.0 to 3.3.1.
- [Commits](https://github.com/apache/maven-source-plugin/compare/maven-source-plugin-3.3.0...maven-source-plugin-3.3.1)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-source-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-05 04:57:38 +00:00
DGun Otto
6876a6dd9f
Update workflows 2024-04-04 14:51:02 +08:00
DGun Otto
d04a69f481
Update workflows 2024-04-04 13:26:41 +08:00
DGun Otto
dfa8317706
Update workflows 2024-04-04 13:21:27 +08:00
HaHaWTH
555514f7dd Add warning for H2 database 2024-04-03 19:02:19 +08:00
HaHaWTH
74633937bc Revert stupid changes made by the original upstream 2024-04-03 16:40:37 +08:00
HaHaWTH
948736b5ea Merge upstream pull request #2777 2024-04-03 16:11:06 +08:00
HaHaWTH
5e54b8b105 Update build 2024-04-03 13:55:42 +08:00
DGun Otto
0d818dd00f
Merge pull request #121 from HaHaWTH/dependabot/maven/org.jacoco-jacoco-maven-plugin-0.8.12
Bump org.jacoco:jacoco-maven-plugin from 0.8.11 to 0.8.12
2024-04-03 13:07:47 +08:00
dependabot[bot]
22586e601f
Bump org.jacoco:jacoco-maven-plugin from 0.8.11 to 0.8.12
Bumps [org.jacoco:jacoco-maven-plugin](https://github.com/jacoco/jacoco) from 0.8.11 to 0.8.12.
- [Release notes](https://github.com/jacoco/jacoco/releases)
- [Commits](https://github.com/jacoco/jacoco/compare/v0.8.11...v0.8.12)

---
updated-dependencies:
- dependency-name: org.jacoco:jacoco-maven-plugin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-03 05:02:43 +00:00
DGun Otto
9938df3c28
[ci skip] Update feature_request.yml 2024-04-02 20:16:08 +08:00
DGun Otto
ec2e8d3654
[ci skip] Update bug_report.yml 2024-04-02 20:14:50 +08:00
DGun Otto
71a9c0c98f
[ci skip] Update README.md 2024-04-02 19:59:44 +08:00
HaHaWTH
54cef57ea5 Configurable send delay 2024-04-02 17:34:03 +08:00
HaHaWTH
73c1116047 Delayed more 2024-04-02 01:27:58 +08:00
HaHaWTH
abb85f005d Delayed more 2024-04-02 01:23:53 +08:00
102 changed files with 2614 additions and 1935 deletions

View File

@ -47,8 +47,10 @@ body:
description: Which server implementation are you using? description: Which server implementation are you using?
multiple: false multiple: false
options: options:
- Standalone server (no proxy) - Standalone(Spigot)
- Standalone(Folia)
- BungeeCord - BungeeCord
- Velocity
validations: validations:
required: true required: true
@ -60,6 +62,9 @@ body:
options: options:
- SQLite - SQLite
- MySQL - MySQL
- H2
- MariaDB
- PostgreSQL
validations: validations:
required: true required: true

View File

@ -1,6 +1,6 @@
name: Feature request name: Feature request
description: Suggest an idea for AuthMe description: Suggest an idea for AuthMe
labels: 'Type: enhancement' labels: 'enhancement'
body: body:
- type: markdown - type: markdown

View File

@ -10,11 +10,11 @@ jobs:
Build: Build:
strategy: strategy:
matrix: matrix:
jdkversion: [ 17 ] jdkversion: [ 21 ]
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v3 - uses: actions/checkout@v4
- uses: actions/setup-java@v3 - uses: actions/setup-java@v4
with: with:
distribution: 'temurin' distribution: 'temurin'
java-version: ${{ matrix.jdkversion }} java-version: ${{ matrix.jdkversion }}
@ -22,10 +22,10 @@ jobs:
- name: Build - name: Build
run: mvn -V -B clean package --file pom.xml run: mvn -V -B clean package --file pom.xml
- name: Upload Artifacts - name: Upload Artifacts
uses: actions/upload-artifact@v3.1.2 uses: actions/upload-artifact@v4
with: with:
name: Download name: Download
path: ./target/AuthMe-5.6.0-FORK-Spigot-Universal.jar path: ./target/AuthMe-*-FORK-Universal.jar
runtime-test: runtime-test:
name: Plugin Runtime Test name: Plugin Runtime Test
needs: [Build] needs: [Build]
@ -37,8 +37,12 @@ jobs:
javaVersion: '8' javaVersion: '8'
- mcVersion: '1.12.2' - mcVersion: '1.12.2'
javaVersion: '8' javaVersion: '8'
- mcVersion: '1.20.2' - mcVersion: '1.18.2'
javaVersion: '20' javaVersion: '17'
- mcVersion: '1.20.4'
javaVersion: '21'
- mcVersion: '1.21.1'
javaVersion: '21'
steps: steps:
- uses: HaHaWTH/minecraft-plugin-runtime-test@paper - uses: HaHaWTH/minecraft-plugin-runtime-test@paper
with: with:

View File

@ -8,7 +8,10 @@
<img src="https://img.shields.io/github/languages/code-size/HaHaWTH/AuthMeReReloaded.svg" alt="Code size"/> <img src="https://img.shields.io/github/languages/code-size/HaHaWTH/AuthMeReReloaded.svg" alt="Code size"/>
<img src="https://img.shields.io/github/repo-size/HaHaWTH/AuthMeReReloaded.svg" alt="GitHub repo size"/> <img src="https://img.shields.io/github/repo-size/HaHaWTH/AuthMeReReloaded.svg" alt="GitHub repo size"/>
<img src="https://www.codefactor.io/repository/github/hahawth/authmerereloaded/badge" alt="CodeFactor" /> <img src="https://www.codefactor.io/repository/github/hahawth/authmerereloaded/badge" alt="CodeFactor" />
<img src="https://img.shields.io/github/downloads/HaHaWTH/AuthMeReReloaded/total" alt="Downloads" /> <img alt="GitHub Downloads (all assets, all releases)" src="https://img.shields.io/github/downloads/HaHaWTH/AuthMeReReloaded/total?logo=github&label=GitHub%20Downloads&color=black">
<img alt="Spiget Downloads" src="https://img.shields.io/spiget/downloads/114010?logo=spigotmc&label=SpigotMC%20Downloads&color=orange">
<img alt="Modrinth Downloads" src="https://img.shields.io/modrinth/dt/3IEZ9vol?logo=modrinth&label=Modrinth%20Downloads&color=light-green">
<img alt="Hangar Downloads" src="https://img.shields.io/hangar/dt/AuthMeReReloaded?logo=hangar&label=Hangar%20Downloads&color=white">
</p> </p>
**Detailed Changes:** **Detailed Changes:**
@ -24,24 +27,25 @@
10. Player login logic improvement to reduce lag 10. Player login logic improvement to reduce lag
11. Automatically purge bot data 11. Automatically purge bot data
12. **Folia support (in active testing)** 12. **Folia support (in active testing)**
13. Offhand Menu compatibility(Thats amazing) 13. **Velocity support (See [Velocity Support](./vc-support.md))**
14. **Velocity support (See [Velocity Support](./vc-support.md))** 14. Support Virtual Threads caching
15. Support Virtual Threads caching 15. Automatically fix portal stuck issue
16. Automatically fix portal stuck issue 16. Automatically login for Bedrock players(configurable)
17. Automatically login for Bedrock players(configurable) 17. Fix shulker box crash bug on legacy versions(MC 1.13-)
18. Fix shulker box crash bug on legacy versions(MC 1.13-) 18. **H2 database support**
19. **H2 database support** 19. **100% compatibility with original authme and extensions**
20. **100% compatibility with original authme and extensions** 20. More......
21. More......
**Download links:** **Download links:**
[Releases](https://github.com/HaHaWTH/AuthMeReReloaded/releases/latest) [Releases](https://github.com/HaHaWTH/AuthMeReReloaded/releases/latest)
[Actions(Dev builds, use at your own risk!)](https://github.com/HaHaWTH/AuthMeReReloaded/actions/workflows/maven.yml) [Actions(Dev builds, use at your own risk!)](https://github.com/HaHaWTH/AuthMeReReloaded/actions/workflows/maven.yml)
If you are using FRP(内网穿透) for your server, this plugin may help [HAProxy-Detector](https://github.com/HaHaWTH/HAProxy-Detector)
**Pull Requests and suggestions are welcome!** **Pull Requests and suggestions are welcome!**
## License
Only modifications to AuthMeReloaded is under AGPL-3.0 license, AuthMeReloaded is licensed under GPL-3.0.
<picture> <picture>
<source <source
media="(prefers-color-scheme: dark)" media="(prefers-color-scheme: dark)"

View File

@ -108,4 +108,4 @@ brackets; optional arguments are enclosed in square brackets (`[ ]`).
--- ---
This page was automatically generated on the [AuthMe/AuthMeReloaded repository](https://github.com/AuthMe/AuthMeReloaded/tree/master/docs/) on Sun Apr 04 21:31:42 CEST 2021 This page was automatically generated on the [HaHaWTH/AuthMeReReloaded repository](https://github.com/HaHaWTH/AuthMeReReloaded/tree/master/docs/) on Sun Apr 04 21:31:42 CEST 2021

File diff suppressed because it is too large Load Diff

View File

@ -80,4 +80,4 @@ or bad.
--- ---
This page was automatically generated on the [AuthMe/AuthMeReloaded repository](https://github.com/AuthMe/AuthMeReloaded/tree/master/docs/) on Sun Apr 04 21:31:44 CEST 2021 This page was automatically generated on the [HaHaWTH/AuthMeReReloaded repository](https://github.com/HaHaWTH/AuthMeReReloaded/tree/master/docs/) on Sun Apr 04 21:31:44 CEST 2021

View File

@ -73,4 +73,4 @@ The following are the permission nodes that are currently supported by the lates
--- ---
This page was automatically generated on the [AuthMe/AuthMeReloaded repository](https://github.com/AuthMe/AuthMeReloaded/tree/master/docs/) on Sun Apr 04 21:31:44 CEST 2021 This page was automatically generated on the [HaHaWTH/AuthMeReReloaded repository](https://github.com/HaHaWTH/AuthMeReReloaded/tree/master/docs/) on Sun Apr 04 21:31:44 CEST 2021

View File

@ -1,47 +1,49 @@
<!-- AUTO-GENERATED FILE! Do not edit this directly --> <!-- AUTO-GENERATED FILE! Do not edit this directly -->
<!-- File auto-generated on Wed Jun 21 12:14:29 CEST 2023. See docs/translations/translations.tpl.md --> <!-- File auto-generated on Fri May 31 22:00:00 CST 2024. See docs/translations/translations.tpl.md -->
# AuthMe Translations # AuthMe Translations
The following translations are available in AuthMe. Set `messagesLanguage` to the language code The following translations are available in AuthMe. Set `messagesLanguage` to the language code
in your config.yml to use the language, or use another language code to start a new translation. in your config.yml to use the language, or use another language code to start a new translation.
Code | Language | Translated | &nbsp; | Code | Language | Translated | &nbsp; |
---- | -------- | ---------: | ------ |------------------------------------------------------------------------------------------------------------|---------------------|-----------:|---------------------------------------------------------------------------|
[en](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_en.yml) | English | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> | [en](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_en.yml) | English | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[bg](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_bg.yml) | Bulgarian | 99% | <img src="https://via.placeholder.com/99x7/66ee55?text=%20" alt="99" /> | [bg](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_bg.yml) | Bulgarian | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[br](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_br.yml) | Brazilian | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> | [br](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_br.yml) | Brazilian | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[cz](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_cz.yml) | Czech | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> | [cz](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_cz.yml) | Czech | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[de](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_de.yml) | German | 99% | <img src="https://via.placeholder.com/99x7/66ee55?text=%20" alt="99" /> | [de](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_de.yml) | German | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[eo](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_eo.yml) | Esperanto | 79% | <img src="https://via.placeholder.com/79x7/bb9900?text=%20" alt="79" /> | [eo](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_eo.yml) | Esperanto | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[es](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_es.yml) | Spanish | 99% | <img src="https://via.placeholder.com/99x7/66ee55?text=%20" alt="99" /> | [es](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_es.yml) | Spanish | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[et](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_et.yml) | Estonian | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> | [et](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_et.yml) | Estonian | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[eu](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_eu.yml) | Basque | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> | [eu](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_eu.yml) | Basque | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[fi](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_fi.yml) | Finnish | 45% | <img src="https://via.placeholder.com/45x7/aa5500?text=%20" alt="45" /> | [fi](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_fi.yml) | Finnish | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[fr](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_fr.yml) | French | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> | [fr](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_fr.yml) | French | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[gl](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_gl.yml) | Galician | 48% | <img src="https://via.placeholder.com/48x7/aa5500?text=%20" alt="48" /> | [gl](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_gl.yml) | Galician | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[hu](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_hu.yml) | Hungarian | 99% | <img src="https://via.placeholder.com/99x7/66ee55?text=%20" alt="99" /> | [hu](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_hu.yml) | Hungarian | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[id](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_id.yml) | Indonesian | 93% | <img src="https://via.placeholder.com/93x7/77dd44?text=%20" alt="93" /> | [id](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_id.yml) | Indonesian | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[it](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_it.yml) | Italian | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> | [it](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_it.yml) | Italian | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[ja](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_ja.yml) | Japanese | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> | [ja](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_ja.yml) | Japanese | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[ko](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_ko.yml) | Korean | 99% | <img src="https://via.placeholder.com/99x7/66ee55?text=%20" alt="99" /> | [ko](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_ko.yml) | Korean | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[lt](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_lt.yml) | Lithuanian | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> | [lt](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_lt.yml) | Lithuanian | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[nl](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_nl.yml) | Dutch | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> | [nl](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_nl.yml) | Dutch | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[pl](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_pl.yml) | Polish | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> | [pl](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_pl.yml) | Polish | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[pt](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_pt.yml) | Portuguese | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> | [pt](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_pt.yml) | Portuguese | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[ro](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_ro.yml) | Romanian | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> | [ro](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_ro.yml) | Romanian | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[ru](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_ru.yml) | Russian | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> | [ru](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_ru.yml) | Russian | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[si](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_si.yml) | Slovenian | 99% | <img src="https://via.placeholder.com/99x7/66ee55?text=%20" alt="99" /> | [si](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_si.yml) | Slovenian | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[sk](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_sk.yml) | Slovakian | 79% | <img src="https://via.placeholder.com/79x7/bb9900?text=%20" alt="79" /> | [sk](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_sk.yml) | Slovakian | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[sr](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_sr.yml) | Serbian | 99% | <img src="https://via.placeholder.com/99x7/66ee55?text=%20" alt="99" /> | [sr](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_sr.yml) | Serbian | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[tr](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_tr.yml) | Turkish | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> | [tr](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_tr.yml) | Turkish | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[uk](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_uk.yml) | Ukrainian | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> | [uk](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_uk.yml) | Ukrainian | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[vn](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_vn.yml) | Vietnamese | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> | [vn](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_vn.yml) | Vietnamese | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[zhcn](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_zhcn.yml) | Chinese (China) | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> | [zhcn](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_zhcn.yml) | Chinese (China) | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[zhhk](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_zhhk.yml) | Chinese (Hong Kong) | 99% | <img src="https://via.placeholder.com/99x7/66ee55?text=%20" alt="99" /> | [zhhk](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_zhhk.yml) | Chinese (Hong Kong) | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[zhmc](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_zhmc.yml) | Chinese (Macau) | 64% | <img src="https://via.placeholder.com/64x7/bb7700?text=%20" alt="64" /> | [zhmc](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_zhmc.yml) | Chinese (Macau) | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
[zhtw](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_zhtw.yml) | Chinese (Taiwan) | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> | [zhtw](https://github.com/AuthMe/AuthMeReloaded/blob/master/src/main/resources/messages/messages_zhtw.yml) | Chinese (Taiwan) | 100% | <img src="https://via.placeholder.com/100x7/66ff66?text=%20" alt="100" /> |
--- ---
This page was automatically generated on the [AuthMe/AuthMeReloaded repository](https://github.com/AuthMe/AuthMeReloaded/tree/master/docs/) on Wed Jun 21 12:14:29 CEST 2023 This page was automatically generated on
the [HaHaWTH/AuthMeReReloaded repository](https://github.com/HaHaWTH/AuthMeReReloaded/tree/master/docs/) on Fri May 31
22:00:00 CST 2024

305
pom.xml
View File

@ -6,7 +6,7 @@
<groupId>fr.xephi</groupId> <groupId>fr.xephi</groupId>
<artifactId>authme</artifactId> <artifactId>authme</artifactId>
<version>5.6.0-FORK</version> <version>5.7.0-FORK</version>
<name>AuthMeReReloaded</name> <name>AuthMeReReloaded</name>
<description>Fork of the first authentication plugin for the Bukkit API!</description> <description>Fork of the first authentication plugin for the Bukkit API!</description>
@ -67,7 +67,7 @@
<maven.minimumVersion>3.6.3</maven.minimumVersion> <maven.minimumVersion>3.6.3</maven.minimumVersion>
<!-- Dependencies versions --> <!-- Dependencies versions -->
<spigot.version>1.20.4-R0.1-SNAPSHOT</spigot.version> <spigot.version>1.21.1-R0.1-SNAPSHOT</spigot.version>
<!-- Versioning properties --> <!-- Versioning properties -->
<project.outputName>AuthMe</project.outputName> <project.outputName>AuthMe</project.outputName>
@ -82,54 +82,11 @@
<pluginDescription.authors>sgdc3, games647, Hex3l, krusic22</pluginDescription.authors> <pluginDescription.authors>sgdc3, games647, Hex3l, krusic22</pluginDescription.authors>
</properties> </properties>
<!-- Jenkins profile -->
<profiles>
<!-- Set the buildNumber using the jenkins env. variable -->
<profile>
<id>jenkins</id>
<activation>
<property>
<name>env.BUILD_NUMBER</name>
</property>
</activation>
<properties>
<project.buildNumber>${env.BUILD_NUMBER}</project.buildNumber>
</properties>
</profile>
<!-- Skip long hash tests, reduce the test time of 20-30 seconds -->
<profile>
<id>skipLongHashTests</id>
<activation>
<property>
<name>skipLongHashTests</name>
</property>
</activation>
<properties>
<project.skipExtendedHashTests>true</project.skipExtendedHashTests>
</properties>
</profile>
<!-- Skip javadoc generation for faster local build -->
<profile>
<id>skipJavadocGeneration</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<configuration>
<skip>true</skip>
</configuration>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<build> <build>
<defaultGoal>clean package</defaultGoal> <defaultGoal>clean package</defaultGoal>
<!-- Little hack to make the shade plugin output a file with the right name --> <!-- Little hack to make the shade plugin output a file with the right name -->
<finalName>${project.finalNameBase}-noshade</finalName> <finalName>${project.finalNameBase}-noshade</finalName>
<resources> <resources>
<resource> <resource>
<directory>.</directory> <directory>.</directory>
@ -154,7 +111,7 @@
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId> <artifactId>maven-javadoc-plugin</artifactId>
<version>3.4.1</version> <version>3.11.1</version>
<configuration> <configuration>
<failOnError>false</failOnError> <failOnError>false</failOnError>
<failOnWarnings>false</failOnWarnings> <failOnWarnings>false</failOnWarnings>
@ -169,7 +126,7 @@
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-enforcer-plugin</artifactId> <artifactId>maven-enforcer-plugin</artifactId>
<version>3.2.1</version> <version>3.5.0</version>
<executions> <executions>
<execution> <execution>
<id>enforce-environment</id> <id>enforce-environment</id>
@ -194,7 +151,7 @@
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-clean-plugin</artifactId> <artifactId>maven-clean-plugin</artifactId>
<version>3.3.2</version> <version>3.4.0</version>
</plugin> </plugin>
<!-- Include resource files --> <!-- Include resource files -->
<plugin> <plugin>
@ -222,7 +179,7 @@
<plugin> <plugin>
<groupId>org.jacoco</groupId> <groupId>org.jacoco</groupId>
<artifactId>jacoco-maven-plugin</artifactId> <artifactId>jacoco-maven-plugin</artifactId>
<version>0.8.11</version> <version>0.8.12</version>
<executions> <executions>
<execution> <execution>
<id>pre-unit-test</id> <id>pre-unit-test</id>
@ -238,27 +195,18 @@
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
<!-- Unit testing -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.2</version>
<configuration>
<!-- Force the right file encoding during unit testing -->
<!-- Set language to English in order to get consistent results for localized time formatting -->
<argLine>-Dfile.encoding=${project.build.sourceEncoding} -Duser.language=en @{argLine}</argLine>
<systemPropertyVariables>
<project.skipExtendedHashTests>${project.skipExtendedHashTests}</project.skipExtendedHashTests>
</systemPropertyVariables>
<!-- Don't trim stack traces -->
<trimStackTrace>false</trimStackTrace>
</configuration>
</plugin>
<!-- Generate a jar containing classes and resources --> <!-- Generate a jar containing classes and resources -->
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId> <artifactId>maven-jar-plugin</artifactId>
<version>3.3.0</version> <version>3.4.2</version>
<configuration>
<archive>
<manifestEntries>
<paperweight-mappings-namespace>mojang</paperweight-mappings-namespace>
</manifestEntries>
</archive>
</configuration>
</plugin> </plugin>
<!-- Generate a jar containing the source javadoc --> <!-- Generate a jar containing the source javadoc -->
<plugin> <plugin>
@ -282,7 +230,7 @@
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId> <artifactId>maven-source-plugin</artifactId>
<version>3.3.0</version> <version>3.3.1</version>
<configuration> <configuration>
<finalName>${project.finalNameBase}</finalName> <finalName>${project.finalNameBase}</finalName>
</configuration> </configuration>
@ -299,7 +247,7 @@
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId> <artifactId>maven-shade-plugin</artifactId>
<version>3.5.2</version> <version>3.6.0</version>
<executions> <executions>
<execution> <execution>
<id>shaded-jar</id> <id>shaded-jar</id>
@ -308,6 +256,7 @@
<goal>shade</goal> <goal>shade</goal>
</goals> </goals>
<configuration> <configuration>
<finalName>${project.finalNameBase}-Lite</finalName>
<artifactSet> <artifactSet>
<excludes> <excludes>
<!-- Guava --> <!-- Guava -->
@ -318,13 +267,9 @@
<exclude>com.google.j2objc:j2objc-annotations</exclude> <exclude>com.google.j2objc:j2objc-annotations</exclude>
<!-- Gson --> <!-- Gson -->
<exclude>com.google.code.gson:gson</exclude> <exclude>com.google.code.gson:gson</exclude>
</excludes> </excludes>
</artifactSet> </artifactSet>
<relocations> <relocations>
<relocation>
<pattern>org.h2</pattern>
<shadedPattern>fr.xephi.authme.libs.org.h2</shadedPattern>
</relocation>
<relocation> <relocation>
<pattern>org.apache.http</pattern> <pattern>org.apache.http</pattern>
<shadedPattern>fr.xephi.authme.libs.org.apache.http</shadedPattern> <shadedPattern>fr.xephi.authme.libs.org.apache.http</shadedPattern>
@ -333,39 +278,25 @@
<pattern>org.apache.commons</pattern> <pattern>org.apache.commons</pattern>
<shadedPattern>fr.xephi.authme.libs.org.apache.commons</shadedPattern> <shadedPattern>fr.xephi.authme.libs.org.apache.commons</shadedPattern>
</relocation> </relocation>
<relocation>
<pattern>javax.activation</pattern>
<shadedPattern>fr.xephi.authme.libs.javax.activation</shadedPattern>
</relocation>
<relocation>
<pattern>javax.annotation</pattern>
<shadedPattern>fr.xephi.authme.libs.javax.annotation</shadedPattern>
</relocation>
<relocation>
<pattern>javax.mail</pattern>
<shadedPattern>fr.xephi.authme.libs.javax.mail</shadedPattern>
</relocation>
<relocation> <relocation>
<pattern>waffle</pattern> <pattern>waffle</pattern>
<shadedPattern>fr.xephi.authme.libs.waffle</shadedPattern> <shadedPattern>fr.xephi.authme.libs.waffle</shadedPattern>
</relocation> </relocation>
<relocation>
<pattern>com.sun.mail</pattern>
<shadedPattern>fr.xephi.authme.libs.com.sun.mail</shadedPattern>
</relocation>
<relocation>
<pattern>com.sun.jna</pattern>
<shadedPattern>fr.xephi.authme.libs.com.sun.jna</shadedPattern>
</relocation>
<relocation>
<pattern>com.sun.activation</pattern>
<shadedPattern>fr.xephi.authme.libs.com.sun.activation</shadedPattern>
</relocation>
<relocation> <relocation>
<pattern>com.github.benmanes.caffeine</pattern> <pattern>com.github.benmanes.caffeine</pattern>
<shadedPattern>fr.xephi.authme.libs.com.github.benmanes.caffeine</shadedPattern> <shadedPattern>fr.xephi.authme.libs.com.github.benmanes.caffeine</shadedPattern>
</relocation> </relocation>
</relocations> </relocations>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration> </configuration>
</execution> </execution>
<execution> <execution>
@ -375,7 +306,7 @@
<goal>shade</goal> <goal>shade</goal>
</goals> </goals>
<configuration> <configuration>
<finalName>${project.finalNameBase}-Spigot-Universal</finalName> <finalName>${project.finalNameBase}-Universal</finalName>
<relocations> <relocations>
<relocation> <relocation>
<pattern>com.google.common</pattern> <pattern>com.google.common</pattern>
@ -397,10 +328,6 @@
<pattern>com.google.gson</pattern> <pattern>com.google.gson</pattern>
<shadedPattern>fr.xephi.authme.libs.com.google.gson</shadedPattern> <shadedPattern>fr.xephi.authme.libs.com.google.gson</shadedPattern>
</relocation> </relocation>
<relocation>
<pattern>org.h2</pattern>
<shadedPattern>fr.xephi.authme.libs.org.h2</shadedPattern>
</relocation>
<relocation> <relocation>
<pattern>org.apache.http</pattern> <pattern>org.apache.http</pattern>
<shadedPattern>fr.xephi.authme.libs.org.apache.http</shadedPattern> <shadedPattern>fr.xephi.authme.libs.org.apache.http</shadedPattern>
@ -409,34 +336,10 @@
<pattern>org.apache.commons</pattern> <pattern>org.apache.commons</pattern>
<shadedPattern>fr.xephi.authme.libs.org.apache.commons</shadedPattern> <shadedPattern>fr.xephi.authme.libs.org.apache.commons</shadedPattern>
</relocation> </relocation>
<relocation>
<pattern>javax.activation</pattern>
<shadedPattern>fr.xephi.authme.libs.javax.activation</shadedPattern>
</relocation>
<relocation>
<pattern>javax.annotation</pattern>
<shadedPattern>fr.xephi.authme.libs.javax.annotation</shadedPattern>
</relocation>
<relocation>
<pattern>javax.mail</pattern>
<shadedPattern>fr.xephi.authme.libs.javax.mail</shadedPattern>
</relocation>
<relocation> <relocation>
<pattern>waffle</pattern> <pattern>waffle</pattern>
<shadedPattern>fr.xephi.authme.libs.waffle</shadedPattern> <shadedPattern>fr.xephi.authme.libs.waffle</shadedPattern>
</relocation> </relocation>
<relocation>
<pattern>com.sun.mail</pattern>
<shadedPattern>fr.xephi.authme.libs.com.sun.mail</shadedPattern>
</relocation>
<relocation>
<pattern>com.sun.jna</pattern>
<shadedPattern>fr.xephi.authme.libs.com.sun.jna</shadedPattern>
</relocation>
<relocation>
<pattern>com.sun.activation</pattern>
<shadedPattern>fr.xephi.authme.libs.com.sun.activation</shadedPattern>
</relocation>
<relocation> <relocation>
<pattern>com.github.benmanes.caffeine</pattern> <pattern>com.github.benmanes.caffeine</pattern>
<shadedPattern>fr.xephi.authme.libs.com.github.benmanes.caffeine</shadedPattern> <shadedPattern>fr.xephi.authme.libs.com.github.benmanes.caffeine</shadedPattern>
@ -547,6 +450,22 @@
<pattern>org.apache.commons.validator</pattern> <pattern>org.apache.commons.validator</pattern>
<shadedPattern>fr.xephi.authme.libs.org.apache.commons.validator</shadedPattern> <shadedPattern>fr.xephi.authme.libs.org.apache.commons.validator</shadedPattern>
</relocation> </relocation>
<relocation>
<pattern>com.alessiodp.libby</pattern>
<shadedPattern>fr.xephi.authme.libs.com.alessiodp.libby</shadedPattern>
</relocation>
<relocation>
<pattern>net.kyori.adventure</pattern>
<shadedPattern>fr.xephi.authme.libs.net.kyori.adventure</shadedPattern>
</relocation>
<relocation>
<pattern>net.kyori.examination</pattern>
<shadedPattern>fr.xephi.authme.libs.net.kyori.examination</shadedPattern>
</relocation>
<relocation>
<pattern>net.kyori.option</pattern>
<shadedPattern>fr.xephi.authme.libs.net.kyori.option</shadedPattern>
</relocation>
</relocations> </relocations>
<filters> <filters>
@ -559,7 +478,6 @@
<exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude> <exclude>META-INF/*.RSA</exclude>
<exclude>META-INF/*.RSA</exclude> <exclude>META-INF/*.RSA</exclude>
<exclude>META-INF/*.MF</exclude>
<exclude>META-INF/DEPENDENCIES</exclude> <exclude>META-INF/DEPENDENCIES</exclude>
<exclude>META-INF/**/module-info.class</exclude> <exclude>META-INF/**/module-info.class</exclude>
</excludes> </excludes>
@ -579,19 +497,19 @@
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId> <artifactId>maven-install-plugin</artifactId>
<version>3.1.0</version> <version>3.1.3</version>
</plugin> </plugin>
<!-- Deploy the jars as artifacts into the remote repository --> <!-- Deploy the jars as artifacts into the remote repository -->
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-deploy-plugin</artifactId> <artifactId>maven-deploy-plugin</artifactId>
<version>3.0.0</version> <version>3.1.3</version>
</plugin> </plugin>
<!-- Handle documentation generation, required by other plugins --> <!-- Handle documentation generation, required by other plugins -->
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-site-plugin</artifactId> <artifactId>maven-site-plugin</artifactId>
<version>3.12.1</version> <version>3.21.0</version>
</plugin> </plugin>
<!-- Publish coveralls test coverage reports, not included in the build cycle by default --> <!-- Publish coveralls test coverage reports, not included in the build cycle by default -->
<plugin> <plugin>
@ -623,6 +541,12 @@
<url>https://repo.opencollab.dev/maven-snapshots/</url> <url>https://repo.opencollab.dev/maven-snapshots/</url>
</repository> </repository>
<!-- Adventure API -->
<repository>
<id>sonatype-oss-snapshots1</id>
<url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url>
</repository>
<!-- Apache snapshots repo --> <!-- Apache snapshots repo -->
<repository> <repository>
<id>apache-snapshots</id> <id>apache-snapshots</id>
@ -693,32 +617,29 @@
</snapshots> </snapshots>
</repository> </repository>
<!-- Multiverse Repo --> <!-- Maven Central Snapshots Repository -->
<repository> <repository>
<id>onarandombox-repo-releases</id> <id>maven-snapshots</id>
<url>https://repo.onarandombox.com/content/repositories/multiverse/</url> <url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>onarandombox-repo-snapshots</id>
<url>https://repo.onarandombox.com/content/repositories/multiverse-snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository> </repository>
<!-- FoliaLib --> <!-- Placeholder API Repo -->
<repository> <repository>
<id>devmart-other</id> <id>placeholderapi-repo</id>
<url>https://nexuslite.gcnt.net/repos/other/</url> <url>https://repo.extendedclip.com/content/repositories/placeholderapi/</url>
</repository>
<!-- Multiverse Repo -->
<repository>
<id>multiverse-multiverse-releases</id>
<name>Multiverse Repository</name>
<url>https://repo.onarandombox.com/multiverse-releases</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository> </repository>
<repository> <repository>
@ -769,7 +690,7 @@
</dependency> </dependency>
<!-- MaxMind GEO IP with our modifications to use GSON in replacement of the big Jackson dependency --> <!-- MaxMind GEO IP with our modifications to use GSON in replacement of the big Jackson dependency -->
<!-- GSON is already included and therefore it reduces the file size in comparison to the original version --> <!-- GSON is already included, and therefore it reduces the file size in comparison to the original version -->
<dependency> <dependency>
<groupId>com.maxmind.db</groupId> <groupId>com.maxmind.db</groupId>
<artifactId>maxmind-db-gson</artifactId> <artifactId>maxmind-db-gson</artifactId>
@ -795,7 +716,7 @@
<dependency> <dependency>
<groupId>org.apache.commons</groupId> <groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId> <artifactId>commons-email</artifactId>
<version>1.6.0</version> <version>1.6-SNAPSHOT</version>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
@ -807,6 +728,14 @@
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<!-- Libby -->
<dependency>
<groupId>com.alessiodp.libby</groupId>
<artifactId>libby-bukkit</artifactId>
<version>2.0.0-SNAPSHOT</version>
<scope>compile</scope>
</dependency>
<!-- Database Connection Pool --> <!-- Database Connection Pool -->
<dependency> <dependency>
<groupId>com.zaxxer</groupId> <groupId>com.zaxxer</groupId>
@ -877,10 +806,6 @@
<artifactId>junit</artifactId> <artifactId>junit</artifactId>
<groupId>junit</groupId> <groupId>junit</groupId>
</exclusion> </exclusion>
<exclusion>
<artifactId>bungeecord-chat</artifactId>
<groupId>net.md-5</groupId>
</exclusion>
<exclusion> <exclusion>
<groupId>com.googlecode.json-simple</groupId> <groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId> <artifactId>json-simple</artifactId>
@ -952,6 +877,23 @@
</exclusions> </exclusions>
</dependency> </dependency>
<!-- Adventure API -->
<dependency>
<groupId>net.kyori</groupId>
<artifactId>adventure-text-minimessage</artifactId>
<version>4.17.0</version>
</dependency>
<dependency>
<groupId>net.kyori</groupId>
<artifactId>adventure-platform-bukkit</artifactId>
<version>4.3.4</version>
</dependency>
<dependency>
<groupId>net.kyori</groupId>
<artifactId>adventure-text-serializer-gson</artifactId>
<version>4.17.0</version>
</dependency>
<!-- LuckPerms plugin --> <!-- LuckPerms plugin -->
<dependency> <dependency>
<groupId>net.luckperms</groupId> <groupId>net.luckperms</groupId>
@ -1027,8 +969,8 @@
<!-- Multi World plugin, https://www.spigotmc.org/resources/multiverse-core.390/ --> <!-- Multi World plugin, https://www.spigotmc.org/resources/multiverse-core.390/ -->
<dependency> <dependency>
<groupId>com.onarandombox.multiversecore</groupId> <groupId>com.onarandombox.multiversecore</groupId>
<artifactId>Multiverse-Core</artifactId> <artifactId>multiverse-core</artifactId>
<version>4.3.1</version> <version>4.3.14</version>
<type>jar</type> <type>jar</type>
<scope>provided</scope> <scope>provided</scope>
<exclusions> <exclusions>
@ -1087,6 +1029,14 @@
</exclusions> </exclusions>
</dependency> </dependency>
<!-- Placeholder API -->
<dependency>
<groupId>me.clip</groupId>
<artifactId>placeholderapi</artifactId>
<version>2.11.6</version>
<scope>provided</scope>
</dependency>
<!-- EssentialsX plugin --> <!-- EssentialsX plugin -->
<dependency> <dependency>
<groupId>net.essentialsx</groupId> <groupId>net.essentialsx</groupId>
@ -1173,40 +1123,11 @@
</exclusions> </exclusions>
</dependency> </dependency>
<!-- Unit Testing Libraries -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
<version>4.13.2</version>
</dependency>
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>java-hamcrest</artifactId>
<scope>test</scope>
<version>2.0.0.0</version>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<scope>test</scope>
<version>5.2.0</version>
<exclusions>
<exclusion>
<artifactId>hamcrest-core</artifactId>
<groupId>org.hamcrest</groupId>
</exclusion>
</exclusions>
</dependency>
<!-- Required to mock the LuckPerms API--> <!-- Required to mock the LuckPerms API-->
<dependency> <dependency>
<groupId>org.checkerframework</groupId> <groupId>org.checkerframework</groupId>
<artifactId>checker-qual</artifactId> <artifactId>checker-qual</artifactId>
<version>3.40.0</version> <version>3.48.0</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
@ -1222,14 +1143,14 @@
<dependency> <dependency>
<groupId>org.xerial</groupId> <groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId> <artifactId>sqlite-jdbc</artifactId>
<version>3.45.2.0</version> <version>3.47.1.0</version>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.h2database</groupId> <groupId>com.h2database</groupId>
<artifactId>h2</artifactId> <artifactId>h2</artifactId>
<version>2.2.224</version> <version>2.2.224</version>
<scope>compile</scope> <scope>provided</scope>
</dependency> </dependency>
</dependencies> </dependencies>

View File

@ -2,6 +2,7 @@ package fr.xephi.authme;
import ch.jalu.injector.Injector; import ch.jalu.injector.Injector;
import ch.jalu.injector.InjectorBuilder; import ch.jalu.injector.InjectorBuilder;
import com.alessiodp.libby.BukkitLibraryManager;
import com.github.Anon8281.universalScheduler.UniversalScheduler; import com.github.Anon8281.universalScheduler.UniversalScheduler;
import com.github.Anon8281.universalScheduler.scheduling.schedulers.TaskScheduler; import com.github.Anon8281.universalScheduler.scheduling.schedulers.TaskScheduler;
import fr.xephi.authme.api.v3.AuthMeApi; import fr.xephi.authme.api.v3.AuthMeApi;
@ -19,7 +20,6 @@ import fr.xephi.authme.listener.BedrockAutoLoginListener;
import fr.xephi.authme.listener.BlockListener; import fr.xephi.authme.listener.BlockListener;
import fr.xephi.authme.listener.DoubleLoginFixListener; import fr.xephi.authme.listener.DoubleLoginFixListener;
import fr.xephi.authme.listener.EntityListener; import fr.xephi.authme.listener.EntityListener;
import fr.xephi.authme.listener.GuiCaptchaHandler;
import fr.xephi.authme.listener.LoginLocationFixListener; import fr.xephi.authme.listener.LoginLocationFixListener;
import fr.xephi.authme.listener.PlayerListener; import fr.xephi.authme.listener.PlayerListener;
import fr.xephi.authme.listener.PlayerListener111; import fr.xephi.authme.listener.PlayerListener111;
@ -43,6 +43,7 @@ import fr.xephi.authme.settings.properties.EmailSettings;
import fr.xephi.authme.settings.properties.HooksSettings; import fr.xephi.authme.settings.properties.HooksSettings;
import fr.xephi.authme.settings.properties.SecuritySettings; import fr.xephi.authme.settings.properties.SecuritySettings;
import fr.xephi.authme.task.CleanupTask; import fr.xephi.authme.task.CleanupTask;
import fr.xephi.authme.task.Updater;
import fr.xephi.authme.task.purge.PurgeService; import fr.xephi.authme.task.purge.PurgeService;
import fr.xephi.authme.util.ExceptionUtils; import fr.xephi.authme.util.ExceptionUtils;
import org.bukkit.Server; import org.bukkit.Server;
@ -54,15 +55,10 @@ import org.jetbrains.annotations.NotNull;
import javax.inject.Inject; import javax.inject.Inject;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import java.util.Objects; import java.util.Objects;
import java.util.Scanner;
import java.util.function.Consumer; import java.util.function.Consumer;
import java.util.logging.Level;
import static fr.xephi.authme.service.BukkitService.TICKS_PER_MINUTE; import static fr.xephi.authme.service.BukkitService.TICKS_PER_MINUTE;
import static fr.xephi.authme.util.Utils.isClassLoaded; import static fr.xephi.authme.util.Utils.isClassLoaded;
@ -78,9 +74,9 @@ public class AuthMe extends JavaPlugin {
private static final int CLEANUP_INTERVAL = 5 * TICKS_PER_MINUTE; private static final int CLEANUP_INTERVAL = 5 * TICKS_PER_MINUTE;
// Version and build number values // Version and build number values
private static String pluginVersion = "5.6.0-Fork"; private static String pluginVersion = "5.7.0-Fork";
private static final String pluginBuild = "b"; private static final String pluginBuild = "b";
private static String pluginBuildNumber = "46"; private static String pluginBuildNumber = "53";
// Private instances // Private instances
private EmailService emailService; private EmailService emailService;
private CommandHandler commandHandler; private CommandHandler commandHandler;
@ -143,6 +139,11 @@ public class AuthMe extends JavaPlugin {
return scheduler; return scheduler;
} }
/**
* The library manager
*/
public static BukkitLibraryManager libraryManager;
/** /**
* Method called when the server enables the plugin. * Method called when the server enables the plugin.
*/ */
@ -151,6 +152,7 @@ public class AuthMe extends JavaPlugin {
// Load the plugin version data from the plugin description file // Load the plugin version data from the plugin description file
loadPluginInfo(getDescription().getVersion()); loadPluginInfo(getDescription().getVersion());
scheduler = UniversalScheduler.getScheduler(this); scheduler = UniversalScheduler.getScheduler(this);
libraryManager = new BukkitLibraryManager(this);
// Set the Logger instance and log file path // Set the Logger instance and log file path
ConsoleLogger.initialize(getLogger(), new File(getDataFolder(), LOG_FILENAME)); ConsoleLogger.initialize(getLogger(), new File(getDataFolder(), LOG_FILENAME));
@ -211,14 +213,15 @@ public class AuthMe extends JavaPlugin {
} }
//detect server brand with classloader //detect server brand with classloader
checkServerType(); checkServerType();
Objects.requireNonNull(getCommand("register")).setTabCompleter(new TabCompleteHandler()); try {
Objects.requireNonNull(getCommand("login")).setTabCompleter(new TabCompleteHandler()); Objects.requireNonNull(getCommand("register")).setTabCompleter(new TabCompleteHandler());
Objects.requireNonNull(getCommand("login")).setTabCompleter(new TabCompleteHandler());
} catch (NullPointerException ignored) {
}
logger.info("AuthMeReReloaded is enabled successfully!"); logger.info("AuthMeReReloaded is enabled successfully!");
// Purge on start if enabled // Purge on start if enabled
PurgeService purgeService = injector.getSingleton(PurgeService.class); PurgeService purgeService = injector.getSingleton(PurgeService.class);
purgeService.runAutoPurge(); purgeService.runAutoPurge();
// 注册玩家加入事件监听
// register3rdPartyListeners();
logger.info("GitHub: https://github.com/HaHaWTH/AuthMeReReloaded/"); logger.info("GitHub: https://github.com/HaHaWTH/AuthMeReReloaded/");
if (settings.getProperty(SecuritySettings.CHECK_FOR_UPDATES)) { if (settings.getProperty(SecuritySettings.CHECK_FOR_UPDATES)) {
checkForUpdates(); checkForUpdates();
@ -226,8 +229,6 @@ public class AuthMe extends JavaPlugin {
} }
//Migrated
/** /**
* Load the version and build number of the plugin from the description file. * Load the version and build number of the plugin from the description file.
* *
@ -345,13 +346,6 @@ public class AuthMe extends JavaPlugin {
} }
//Register 3rd party listeners //Register 3rd party listeners
if (settings.getProperty(SecuritySettings.GUI_CAPTCHA) && getServer().getPluginManager().getPlugin("ProtocolLib") != null) {
pluginManager.registerEvents(injector.getSingleton(GuiCaptchaHandler.class), this);
logger.info("(Beta)GUICaptcha is enabled successfully!");
logger.info("These features are still in early development, if you encountered any problem, please report.");
} else if (settings.getProperty(SecuritySettings.GUI_CAPTCHA) && getServer().getPluginManager().getPlugin("ProtocolLib") == null) {
logger.warning("ProtocolLib is not loaded, can't enable GUI Captcha.");
}
if (settings.getProperty(SecuritySettings.FORCE_LOGIN_BEDROCK) && settings.getProperty(HooksSettings.HOOK_FLOODGATE_PLAYER) && getServer().getPluginManager().getPlugin("floodgate") != null) { if (settings.getProperty(SecuritySettings.FORCE_LOGIN_BEDROCK) && settings.getProperty(HooksSettings.HOOK_FLOODGATE_PLAYER) && getServer().getPluginManager().getPlugin("floodgate") != null) {
pluginManager.registerEvents(injector.getSingleton(BedrockAutoLoginListener.class), this); pluginManager.registerEvents(injector.getSingleton(BedrockAutoLoginListener.class), this);
} else if (settings.getProperty(SecuritySettings.FORCE_LOGIN_BEDROCK) && (!settings.getProperty(HooksSettings.HOOK_FLOODGATE_PLAYER) || getServer().getPluginManager().getPlugin("floodgate") == null)) { } else if (settings.getProperty(SecuritySettings.FORCE_LOGIN_BEDROCK) && (!settings.getProperty(HooksSettings.HOOK_FLOODGATE_PLAYER) || getServer().getPluginManager().getPlugin("floodgate") == null)) {
@ -366,7 +360,7 @@ public class AuthMe extends JavaPlugin {
if (settings.getProperty(SecuritySettings.ADVANCED_SHULKER_FIX) && !isClassLoaded("org.bukkit.event.player.PlayerCommandSendEvent")) { if (settings.getProperty(SecuritySettings.ADVANCED_SHULKER_FIX) && !isClassLoaded("org.bukkit.event.player.PlayerCommandSendEvent")) {
pluginManager.registerEvents(injector.getSingleton(AdvancedShulkerFixListener.class), this); pluginManager.registerEvents(injector.getSingleton(AdvancedShulkerFixListener.class), this);
} else if (settings.getProperty(SecuritySettings.ADVANCED_SHULKER_FIX) && isClassLoaded("org.bukkit.event.player.PlayerCommandSendEvent")) { } else if (settings.getProperty(SecuritySettings.ADVANCED_SHULKER_FIX) && isClassLoaded("org.bukkit.event.player.PlayerCommandSendEvent")) {
logger.warning("You are running an 1.13+ minecraft server, advancedShulkerFix won't enable."); logger.warning("You are running an 1.13+ minecraft server, AdvancedShulkerFix won't enable.");
} }
if (settings.getProperty(SecuritySettings.PURGE_DATA_ON_QUIT)) { if (settings.getProperty(SecuritySettings.PURGE_DATA_ON_QUIT)) {
pluginManager.registerEvents(injector.getSingleton(PurgeListener.class), this); pluginManager.registerEvents(injector.getSingleton(PurgeListener.class), this);
@ -395,7 +389,7 @@ public class AuthMe extends JavaPlugin {
if (onShutdownPlayerSaver != null) { if (onShutdownPlayerSaver != null) {
onShutdownPlayerSaver.saveAllPlayers(); onShutdownPlayerSaver.saveAllPlayers();
} }
if (settings.getProperty(EmailSettings.SHUTDOWN_MAIL)){ if (settings != null && settings.getProperty(EmailSettings.SHUTDOWN_MAIL)) {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy'.'MM'.'dd'.' HH:mm:ss"); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy'.'MM'.'dd'.' HH:mm:ss");
Date date = new Date(System.currentTimeMillis()); Date date = new Date(System.currentTimeMillis());
emailService.sendShutDown(settings.getProperty(EmailSettings.SHUTDOWN_MAIL_ADDRESS),dateFormat.format(date)); emailService.sendShutDown(settings.getProperty(EmailSettings.SHUTDOWN_MAIL_ADDRESS),dateFormat.format(date));
@ -415,55 +409,19 @@ public class AuthMe extends JavaPlugin {
ConsoleLogger.closeFileWriter(); ConsoleLogger.closeFileWriter();
} }
private static final String owner = "HaHaWTH";
// private static final String owner_gitee = "Shixuehan114514";
private static final String repo = "AuthMeReReloaded";
private void checkForUpdates() { private void checkForUpdates() {
logger.info("Checking for updates..."); logger.info("Checking for updates...");
Updater updater = new Updater(pluginBuild + pluginBuildNumber);
bukkitService.runTaskAsynchronously(() -> { bukkitService.runTaskAsynchronously(() -> {
try { if (updater.isUpdateAvailable()) {
// 从南通集线器获取最新版本号 String message = "New version available! Latest:" + updater.getLatestVersion() + " Current:" + pluginBuild + pluginBuildNumber;
URL url = new URL("https://api.github.com/repos/" + owner + "/" + repo + "/releases/latest"); logger.warning(message);
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); logger.warning("Download from here: https://modrinth.com/plugin/authmerereloaded");
conn.setConnectTimeout(10000); // 设置连接超时为10秒 } else {
conn.setReadTimeout(10000); // 设置读取超时为10秒 logger.info("You are running the latest version.");
Scanner scanner = new Scanner(conn.getInputStream());
String response = scanner.useDelimiter("\\Z").next();
scanner.close();
// 处理JSON响应
String latestVersion = response.substring(response.indexOf("tag_name") + 11);
latestVersion = latestVersion.substring(0, latestVersion.indexOf("\""));
if (isUpdateAvailable(latestVersion)) {
String message = "New version available! Latest:" + latestVersion + " Current:" + pluginBuild + pluginBuildNumber;
getLogger().log(Level.WARNING, message);
getLogger().log(Level.WARNING, "Download from here: https://github.com/HaHaWTH/AuthMeReReloaded/releases/latest");
} else {
getLogger().log(Level.INFO, "You are running the latest version.");
}
} catch (IOException ignored) {
} }
}); });
} }
private boolean isUpdateAvailable(String latestVersion) {
// Extract the first character and the remaining digits from the version string
char latestChar = latestVersion.charAt(0);
int latestNumber = Integer.parseInt(latestVersion.substring(1));
char currentChar = pluginBuild.charAt(0);
int currentNumber = Integer.parseInt(pluginBuildNumber);
// Compare the characters first
if (latestChar > currentChar) {
return true;
} else if (latestChar < currentChar) {
return false;
} else {
// If the characters are the same, compare the numbers
return latestNumber > currentNumber;
}
}
private void checkServerType() { private void checkServerType() {

View File

@ -32,6 +32,7 @@ import java.util.Optional;
* AuthMeApi authmeApi = AuthMeApi.getInstance(); * AuthMeApi authmeApi = AuthMeApi.getInstance();
* </code> * </code>
*/ */
@SuppressWarnings("unused")
public class AuthMeApi { public class AuthMeApi {
private static AuthMeApi singleton; private static AuthMeApi singleton;
@ -265,6 +266,16 @@ public class AuthMeApi {
management.forceLogin(player); management.forceLogin(player);
} }
/**
* Force a player to login, i.e. the player is logged in without needing his password.
*
* @param player The player to log in
* @param quiet Whether to suppress the login message
*/
public void forceLogin(Player player, boolean quiet) {
management.forceLogin(player, quiet);
}
/** /**
* Force a player to logout. * Force a player to logout.
* *

View File

@ -1,9 +1,9 @@
package fr.xephi.authme.command.executable.authme; package fr.xephi.authme.command.executable.authme;
import fr.xephi.authme.command.PlayerCommand; import fr.xephi.authme.command.PlayerCommand;
import fr.xephi.authme.service.BukkitService;
import fr.xephi.authme.settings.Settings; import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.SpawnLoader; import fr.xephi.authme.settings.SpawnLoader;
import fr.xephi.authme.settings.properties.SecuritySettings;
import fr.xephi.authme.util.TeleportUtils; import fr.xephi.authme.util.TeleportUtils;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -18,17 +18,17 @@ public class FirstSpawnCommand extends PlayerCommand {
private Settings settings; private Settings settings;
@Inject @Inject
private SpawnLoader spawnLoader; private SpawnLoader spawnLoader;
@Inject
private BukkitService bukkitService;
@Override @Override
public void runCommand(Player player, List<String> arguments) { public void runCommand(Player player, List<String> arguments) {
if (spawnLoader.getFirstSpawn() == null) { if (spawnLoader.getFirstSpawn() == null) {
player.sendMessage("[AuthMe] First spawn has failed, please try to define the first spawn"); player.sendMessage("[AuthMe] First spawn has failed, please try to define the first spawn");
} else { } else {
//String name= player.getName(); //String name= player.getName();
if(settings.getProperty(SecuritySettings.SMART_ASYNC_TELEPORT)) { bukkitService.runTaskIfFolia(player, () -> {
TeleportUtils.teleport(player, spawnLoader.getFirstSpawn()); TeleportUtils.teleport(player, spawnLoader.getFirstSpawn());
} else { });
player.teleport(spawnLoader.getFirstSpawn());
}
//player.teleport(spawnLoader.getFirstSpawn()); //player.teleport(spawnLoader.getFirstSpawn());
} }
} }

View File

@ -1,7 +1,9 @@
package fr.xephi.authme.command.executable.authme; package fr.xephi.authme.command.executable.authme;
import fr.xephi.authme.command.PlayerCommand; import fr.xephi.authme.command.PlayerCommand;
import fr.xephi.authme.service.BukkitService;
import fr.xephi.authme.settings.SpawnLoader; import fr.xephi.authme.settings.SpawnLoader;
import fr.xephi.authme.util.TeleportUtils;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import javax.inject.Inject; import javax.inject.Inject;
@ -11,13 +13,15 @@ public class SpawnCommand extends PlayerCommand {
@Inject @Inject
private SpawnLoader spawnLoader; private SpawnLoader spawnLoader;
@Inject
private BukkitService bukkitService;
@Override @Override
public void runCommand(Player player, List<String> arguments) { public void runCommand(Player player, List<String> arguments) {
if (spawnLoader.getSpawn() == null) { if (spawnLoader.getSpawn() == null) {
player.sendMessage("[AuthMe] Spawn has failed, please try to define the spawn"); player.sendMessage("[AuthMe] Spawn has failed, please try to define the spawn");
} else { } else {
player.teleport(spawnLoader.getSpawn()); bukkitService.runTaskIfFolia(player, () -> TeleportUtils.teleport(player, spawnLoader.getSpawn()));
} }
} }
} }

View File

@ -8,6 +8,7 @@ import fr.xephi.authme.process.Management;
import fr.xephi.authme.service.CommonService; import fr.xephi.authme.service.CommonService;
import fr.xephi.authme.service.ValidationService; import fr.xephi.authme.service.ValidationService;
import fr.xephi.authme.service.ValidationService.ValidationResult; import fr.xephi.authme.service.ValidationService.ValidationResult;
import fr.xephi.authme.settings.properties.SecuritySettings;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import javax.inject.Inject; import javax.inject.Inject;
@ -42,11 +43,14 @@ public class ChangePasswordCommand extends PlayerCommand {
commonService.send(player, MessageKey.NOT_LOGGED_IN); commonService.send(player, MessageKey.NOT_LOGGED_IN);
return; return;
} }
// Check if the user has been verified or not
if (codeManager.isVerificationRequired(player)) { if (commonService.getProperty(SecuritySettings.CHANGE_PASSWORD_EMAIL_VERIFICATION_REQUIRED)) {
codeManager.codeExistOrGenerateNew(name); // Check if the user has been verified or not
commonService.send(player, MessageKey.VERIFICATION_CODE_REQUIRED); if (codeManager.isVerificationRequired(player)) {
return; codeManager.codeExistOrGenerateNew(name);
commonService.send(player, MessageKey.VERIFICATION_CODE_REQUIRED);
return;
}
} }
String oldPassword = arguments.get(0); String oldPassword = arguments.get(0);

View File

@ -15,6 +15,7 @@ import fr.xephi.authme.process.register.executors.PasswordRegisterParams;
import fr.xephi.authme.process.register.executors.RegistrationMethod; import fr.xephi.authme.process.register.executors.RegistrationMethod;
import fr.xephi.authme.process.register.executors.TwoFactorRegisterParams; import fr.xephi.authme.process.register.executors.TwoFactorRegisterParams;
import fr.xephi.authme.security.HashAlgorithm; import fr.xephi.authme.security.HashAlgorithm;
import fr.xephi.authme.service.BukkitService;
import fr.xephi.authme.service.CommonService; import fr.xephi.authme.service.CommonService;
import fr.xephi.authme.service.ValidationService; import fr.xephi.authme.service.ValidationService;
import fr.xephi.authme.settings.properties.EmailSettings; import fr.xephi.authme.settings.properties.EmailSettings;
@ -24,8 +25,6 @@ import org.bukkit.entity.Player;
import javax.inject.Inject; import javax.inject.Inject;
import java.util.List; import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import static fr.xephi.authme.process.register.RegisterSecondaryArgument.CONFIRMATION; import static fr.xephi.authme.process.register.RegisterSecondaryArgument.CONFIRMATION;
import static fr.xephi.authme.process.register.RegisterSecondaryArgument.EMAIL_MANDATORY; import static fr.xephi.authme.process.register.RegisterSecondaryArgument.EMAIL_MANDATORY;
@ -46,6 +45,9 @@ public class RegisterCommand extends PlayerCommand {
@Inject @Inject
private CommonService commonService; private CommonService commonService;
@Inject
private BukkitService bukkitService;
@Inject @Inject
private DataSource dataSource; private DataSource dataSource;
@ -175,20 +177,15 @@ public class RegisterCommand extends PlayerCommand {
} else if (isSecondArgValidForEmailRegistration(player, arguments)) { } else if (isSecondArgValidForEmailRegistration(player, arguments)) {
management.performRegister(RegistrationMethod.EMAIL_REGISTRATION, management.performRegister(RegistrationMethod.EMAIL_REGISTRATION,
EmailRegisterParams.of(player, email)); EmailRegisterParams.of(player, email));
Timer timer = new Timer(); if (commonService.getProperty(RegistrationSettings.UNREGISTER_ON_EMAIL_VERIFICATION_FAILURE) && commonService.getProperty(RegistrationSettings.UNREGISTER_AFTER_MINUTES) > 0) {
timer.schedule(new TimerTask() { bukkitService.runTaskLater(player, () -> {
@Override
public void run() {
if (dataSource.getAuth(player.getName()) != null) { if (dataSource.getAuth(player.getName()) != null) {
if (dataSource.getAuth(player.getName()).getLastLogin() == null) { if (dataSource.getAuth(player.getName()).getLastLogin() == null) {
management.performUnregisterByAdmin(null, player.getName(), player); management.performUnregisterByAdmin(null, player.getName(), player);
timer.cancel();
} }
} else {
timer.cancel();
} }
} }, 60 * 20 * commonService.getProperty(RegistrationSettings.UNREGISTER_AFTER_MINUTES));
}, 600000); }
} }
} }

View File

@ -22,6 +22,8 @@ import java.util.Locale;
import java.util.Set; import java.util.Set;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import static fr.xephi.authme.AuthMe.getScheduler;
public class VerificationCodeManager implements SettingsDependent, HasCleanup { public class VerificationCodeManager implements SettingsDependent, HasCleanup {
private final EmailService emailService; private final EmailService emailService;
@ -133,17 +135,19 @@ public class VerificationCodeManager implements SettingsDependent, HasCleanup {
* @param name the name of the player to generate a code for * @param name the name of the player to generate a code for
*/ */
private void generateCode(String name) { private void generateCode(String name) {
DataSourceValue<String> emailResult = dataSource.getEmail(name); getScheduler().runTaskAsynchronously(() -> {
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy'年'MM'月'dd'日' HH:mm:ss"); DataSourceValue<String> emailResult = dataSource.getEmail(name);
Date date = new Date(System.currentTimeMillis()); SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy'-'MM'-'dd'-' HH:mm:ss");
if (emailResult.rowExists()) { Date date = new Date(System.currentTimeMillis());
final String email = emailResult.getValue(); if (emailResult.rowExists()) {
if (!Utils.isEmailEmpty(email)) { final String email = emailResult.getValue();
String code = RandomStringUtils.generateNum(6); // 6 digits code if (!Utils.isEmailEmpty(email)) {
verificationCodes.put(name.toLowerCase(Locale.ROOT), code); String code = RandomStringUtils.generateNum(6); // 6 digits code
emailService.sendVerificationMail(name, email, code, dateFormat.format(date)); verificationCodes.put(name.toLowerCase(Locale.ROOT), code);
emailService.sendVerificationMail(name, email, code, dateFormat.format(date));
}
} }
} });
} }
/** /**

View File

@ -41,6 +41,7 @@ public class MySQL extends AbstractSqlDataSource {
private boolean useSsl; private boolean useSsl;
private boolean serverCertificateVerification; private boolean serverCertificateVerification;
private boolean allowPublicKeyRetrieval; private boolean allowPublicKeyRetrieval;
private String mariaDbSslMode;
private String host; private String host;
private String port; private String port;
private String username; private String username;
@ -121,6 +122,7 @@ public class MySQL extends AbstractSqlDataSource {
this.useSsl = settings.getProperty(DatabaseSettings.MYSQL_USE_SSL); this.useSsl = settings.getProperty(DatabaseSettings.MYSQL_USE_SSL);
this.serverCertificateVerification = settings.getProperty(DatabaseSettings.MYSQL_CHECK_SERVER_CERTIFICATE); this.serverCertificateVerification = settings.getProperty(DatabaseSettings.MYSQL_CHECK_SERVER_CERTIFICATE);
this.allowPublicKeyRetrieval = settings.getProperty(DatabaseSettings.MYSQL_ALLOW_PUBLIC_KEY_RETRIEVAL); this.allowPublicKeyRetrieval = settings.getProperty(DatabaseSettings.MYSQL_ALLOW_PUBLIC_KEY_RETRIEVAL);
this.mariaDbSslMode = settings.getProperty(DatabaseSettings.MARIADB_SSL_MODE);
} }
/** /**
@ -145,12 +147,19 @@ public class MySQL extends AbstractSqlDataSource {
ds.setDriverClassName(this.getDriverClassName()); ds.setDriverClassName(this.getDriverClassName());
// Request mysql over SSL // Request mysql over SSL
ds.addDataSourceProperty("useSSL", String.valueOf(useSsl)); if (this instanceof MariaDB) {
ds.addDataSourceProperty("sslMode", mariaDbSslMode);
} else {
ds.addDataSourceProperty("useSSL", String.valueOf(useSsl));
// Disabling server certificate verification on need
if (!serverCertificateVerification) {
ds.addDataSourceProperty("verifyServerCertificate", String.valueOf(false));
}
}
// Disabling server certificate verification on need // Disabling server certificate verification on need
if (!serverCertificateVerification) {
ds.addDataSourceProperty("verifyServerCertificate", String.valueOf(false));
} // Disabling server certificate verification on need
if (allowPublicKeyRetrieval) { if (allowPublicKeyRetrieval) {
ds.addDataSourceProperty("allowPublicKeyRetrieval", String.valueOf(true)); ds.addDataSourceProperty("allowPublicKeyRetrieval", String.valueOf(true));
} }

View File

@ -1,5 +1,6 @@
package fr.xephi.authme.initialization; package fr.xephi.authme.initialization;
import com.alessiodp.libby.Library;
import fr.xephi.authme.ConsoleLogger; import fr.xephi.authme.ConsoleLogger;
import fr.xephi.authme.data.auth.PlayerCache; import fr.xephi.authme.data.auth.PlayerCache;
import fr.xephi.authme.datasource.CacheDataSource; import fr.xephi.authme.datasource.CacheDataSource;
@ -21,6 +22,8 @@ import javax.inject.Provider;
import java.io.File; import java.io.File;
import java.sql.SQLException; import java.sql.SQLException;
import static fr.xephi.authme.AuthMe.libraryManager;
/** /**
* Creates the AuthMe data source. * Creates the AuthMe data source.
*/ */
@ -78,6 +81,13 @@ public class DataSourceProvider implements Provider<DataSource> {
dataSource = new SQLite(settings, dataFolder); dataSource = new SQLite(settings, dataFolder);
break; break;
case H2: case H2:
Library h2 = Library.builder()
.groupId("com.h2database")
.artifactId("h2")
.version("2.2.224")
.build();
libraryManager.addMavenCentral();
libraryManager.loadLibrary(h2);
dataSource = new H2(settings, dataFolder); dataSource = new H2(settings, dataFolder);
break; break;
default: default:

View File

@ -39,14 +39,16 @@ public class BedrockAutoLoginListener implements Listener {
return settings.getProperty(HooksSettings.HOOK_FLOODGATE_PLAYER) && settings.getProperty(SecuritySettings.FORCE_LOGIN_BEDROCK) && org.geysermc.floodgate.api.FloodgateApi.getInstance().isFloodgateId(uuid) && getServer().getPluginManager().getPlugin("floodgate") != null; return settings.getProperty(HooksSettings.HOOK_FLOODGATE_PLAYER) && settings.getProperty(SecuritySettings.FORCE_LOGIN_BEDROCK) && org.geysermc.floodgate.api.FloodgateApi.getInstance().isFloodgateId(uuid) && getServer().getPluginManager().getPlugin("floodgate") != null;
} }
@EventHandler(priority = EventPriority.HIGHEST) @EventHandler(priority = EventPriority.MONITOR)
public void onPlayerJoin(PlayerJoinEvent event) { public void onPlayerJoin(PlayerJoinEvent event) {
Player player = event.getPlayer(); Player player = event.getPlayer();
String name = event.getPlayer().getName(); String name = event.getPlayer().getName();
UUID uuid = event.getPlayer().getUniqueId(); UUID uuid = event.getPlayer().getUniqueId();
if (isBedrockPlayer(uuid) && !authmeApi.isAuthenticated(player) && authmeApi.isRegistered(name)) { bukkitService.runTaskLater(player, () -> {
authmeApi.forceLogin(player); if (isBedrockPlayer(uuid) && !authmeApi.isAuthenticated(player) && authmeApi.isRegistered(name)) {
messages.send(player, MessageKey.BEDROCK_AUTO_LOGGED_IN); authmeApi.forceLogin(player, true);
} messages.send(player, MessageKey.BEDROCK_AUTO_LOGGED_IN);
}
},20L);
} }
} }

View File

@ -1,263 +0,0 @@
package fr.xephi.authme.listener;
import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.events.ListenerPriority;
import com.comphenix.protocol.events.PacketAdapter;
import com.comphenix.protocol.events.PacketEvent;
import fr.xephi.authme.AuthMe;
import fr.xephi.authme.api.v3.AuthMeApi;
import fr.xephi.authme.events.LoginEvent;
import fr.xephi.authme.message.MessageKey;
import fr.xephi.authme.message.Messages;
import fr.xephi.authme.service.BukkitService;
import fr.xephi.authme.service.CommonService;
import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.HooksSettings;
import fr.xephi.authme.settings.properties.RestrictionSettings;
import fr.xephi.authme.settings.properties.SecuritySettings;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import javax.inject.Inject;
import java.util.List;
import java.util.Random;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Level;
import static fr.xephi.authme.util.PlayerUtils.getPlayerIp;
import static fr.xephi.authme.util.PlayerUtils.isNpc;
import static org.bukkit.Bukkit.getLogger;
import static org.bukkit.Bukkit.getServer;
/**
* This class handles ALL the GUI captcha features in the plugin.
*/
public class GuiCaptchaHandler implements Listener {
//define AuthMeApi
private final AuthMeApi authmeApi = AuthMeApi.getInstance();
@Inject
private BukkitService bukkitService;
@Inject
private AuthMe plugin;
@Inject
private Messages messages;
@Inject
private CommonService service;
@Inject
private Settings settings;
private PacketAdapter chatPacketListener;
private PacketAdapter windowPacketListener;
//define timesLeft
private int timesLeft = 3;
//Use ConcurrentHashMap to store player and their close reason
/* We used many async tasks so there is concurrent**/
public static ConcurrentHashMap<Player, String> closeReasonMap = new ConcurrentHashMap<>();
//define randomStringSet
String randomSet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890abcdefghijklmnopqrstuvwxyz!@#%&*()_+";
String randomString = "";
Random randomItemSet = new Random();
Random howManyRandom = new Random();
private Material captchaMaterial = getRandomMaterial();
private boolean isPacketListenersActive = false;
public GuiCaptchaHandler() {
}
private StringBuilder sb;
private final List<String> whiteList = AuthMe.settings.getProperty(SecuritySettings.GUI_CAPTCHA_COUNTRY_WHITELIST);
private boolean isBedrockPlayer(UUID uuid) {
if (getServer().getPluginManager().getPlugin("floodgate") != null) {
return settings.getProperty(HooksSettings.HOOK_FLOODGATE_PLAYER) && settings.getProperty(SecuritySettings.GUI_CAPTCHA_BE_COMPATIBILITY) && org.geysermc.floodgate.api.FloodgateApi.getInstance().isFloodgateId(uuid);
}
return false;
}
private void initializePacketListeners() {
if (!isPacketListenersActive) {
ProtocolLibrary.getProtocolManager().addPacketListener(windowPacketListener);
ProtocolLibrary.getProtocolManager().addPacketListener(chatPacketListener);
isPacketListenersActive = true;
}
}
@EventHandler
public void onInventoryClick(InventoryClickEvent event) {
if (event.getWhoClicked() instanceof Player) {
Player player = (Player) event.getWhoClicked();
ItemStack currentItem = event.getCurrentItem();
if (!authmeApi.isRegistered(player.getName())) {
if (isBedrockPlayer(player.getUniqueId())) {
return;
}
if (currentItem != null && currentItem.getType().equals(captchaMaterial)) {
event.setCancelled(true);
if (!closeReasonMap.containsKey(player)) {
closeReasonMap.put(player, "verified");
}
player.closeInventory();
messages.send(player, MessageKey.GUI_CAPTCHA_VERIFIED);
}
}
}
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onPlayerLogin(PlayerLoginEvent event) {
Player player = event.getPlayer();
bukkitService.runTaskAsynchronously(() -> {
sb = new StringBuilder();
int howLongIsRandomString = (howManyRandom.nextInt(3) + 1);
for (int i = 0; i < howLongIsRandomString; i++) {
//生成随机索引号
int index = randomItemSet.nextInt(randomSet.length());
// 从字符串中获取由索引 index 指定的字符
char randomChar = randomSet.charAt(index);
// 将字符追加到字符串生成器
sb.append(randomChar);
}
if (!whiteList.isEmpty()) {
String ip = getPlayerIp(player);
if (whiteList.contains(authmeApi.getCountryCode(ip)) && ip != null) {
if (!closeReasonMap.containsKey(player)) {
closeReasonMap.put(player, "verified:whitelist");
}
}
}
});
}
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
public void onPlayerJoin(PlayerJoinEvent event) {
randomString = "";
Player playerunreg = event.getPlayer();
String name = playerunreg.getName();
if (!authmeApi.isRegistered(name) && !isNpc(playerunreg) && !closeReasonMap.containsKey(playerunreg)) {
if (isBedrockPlayer(playerunreg.getUniqueId())) {
if (!closeReasonMap.containsKey(playerunreg)) {
closeReasonMap.put(playerunreg, "verified:bedrock");
}
messages.send(playerunreg, MessageKey.GUI_CAPTCHA_VERIFIED_AUTO_BEDROCK);
return;
}
randomString = sb.toString();
Random random_blockpos = new Random();
AtomicInteger random_num = new AtomicInteger(random_blockpos.nextInt(27));
Inventory menu = Bukkit.createInventory(playerunreg, 27, messages.retrieveSingle(playerunreg, MessageKey.GUI_CAPTCHA_WINDOW_NAME, randomString));
ItemStack item = new ItemStack(captchaMaterial);
ItemMeta meta = item.getItemMeta();
try {
if (meta != null) {
meta.setDisplayName(messages.retrieveSingle(playerunreg, MessageKey.GUI_CAPTCHA_CLICKABLE_NAME, randomString));
item.setItemMeta(meta);
}
} catch (NullPointerException e) {
getLogger().log(Level.WARNING, "Unexpected error occurred while setting item meta.");
}
windowPacketListener = new PacketAdapter(this.plugin, ListenerPriority.HIGHEST, PacketType.Play.Client.CLOSE_WINDOW) {
@Override
public void onPacketReceiving(PacketEvent event) {
Player packetPlayer = event.getPlayer();
if (!closeReasonMap.containsKey(packetPlayer) && !authmeApi.isRegistered(packetPlayer.getName())) {
if (timesLeft <= 0) {
bukkitService.runTask(() -> {
packetPlayer.kickPlayer(service.retrieveSingleMessage(packetPlayer, MessageKey.GUI_CAPTCHA_KICK_FAILED));
});
timesLeft = 3;
} else {
--timesLeft;
if (timesLeft <= 0) {
bukkitService.runTask(() -> {
packetPlayer.kickPlayer(service.retrieveSingleMessage(packetPlayer, MessageKey.GUI_CAPTCHA_KICK_FAILED));
});
timesLeft = 3;
return;
}
messages.send(packetPlayer, MessageKey.GUI_CAPTCHA_RETRY_MESSAGE, String.valueOf(timesLeft));
event.setCancelled(true);
random_num.set(random_blockpos.nextInt(26));
bukkitService.runTask(() -> {
menu.clear();
menu.setItem(random_num.get(), item);
packetPlayer.openInventory(menu);
});
}
}
}
};
chatPacketListener = new PacketAdapter(this.plugin, ListenerPriority.HIGHEST, PacketType.Play.Client.CHAT) {
@Override
public void onPacketReceiving(PacketEvent event) {
Player packetPlayer = event.getPlayer();
if (!closeReasonMap.containsKey(packetPlayer) && !authmeApi.isRegistered(packetPlayer.getName())) {
messages.send(packetPlayer, MessageKey.GUI_CAPTCHA_DENIED_MESSAGE);
event.setCancelled(true);
}
}
};
initializePacketListeners();
//Open captcha inventory
menu.setItem(random_num.get(), item);
playerunreg.openInventory(menu);
if (settings.getProperty(SecuritySettings.GUI_CAPTCHA_TIMEOUT) > 0) {
long timeOut = settings.getProperty(SecuritySettings.GUI_CAPTCHA_TIMEOUT);
if (settings.getProperty(SecuritySettings.GUI_CAPTCHA_TIMEOUT) > settings.getProperty(RestrictionSettings.TIMEOUT)) {
bukkitService.runTask(() -> {
getLogger().warning("AuthMe detected that your GUI captcha timeout seconds(" + settings.getProperty(SecuritySettings.GUI_CAPTCHA_TIMEOUT) + ") is bigger than the Login timeout seconds(" +
settings.getProperty(RestrictionSettings.TIMEOUT) + "). To prevent issues, we will let the GUI captcha follow the Login timeout seconds, please check and modify your config.");
});
timeOut = settings.getProperty(RestrictionSettings.TIMEOUT);
}
long finalTimeOut = timeOut;
bukkitService.runTaskLater(() -> {
if (!closeReasonMap.containsKey(playerunreg) && !authmeApi.isRegistered(playerunreg.getName())) {
playerunreg.kickPlayer(service.retrieveSingleMessage(playerunreg, MessageKey.GUI_CAPTCHA_KICK_TIMEOUT));
timesLeft = 3; // Reset the attempt counter
}
}, finalTimeOut * 20L);
}
}
}
//This prevents players from unregistering by Admins
@EventHandler
public void onPlayerAuthMeLogin(LoginEvent event) {
Player player = event.getPlayer();
if (!closeReasonMap.containsKey(player)) {
closeReasonMap.put(player, "verified:login");
}
}
private Material getRandomMaterial() {
Material[] allMaterials = Material.values();
Random random = new Random();
return allMaterials[random.nextInt(allMaterials.length)];
}
}

View File

@ -1,14 +1,11 @@
package fr.xephi.authme.listener; package fr.xephi.authme.listener;
import fr.xephi.authme.AuthMe;
import fr.xephi.authme.api.v3.AuthMeApi;
import fr.xephi.authme.data.auth.PlayerCache; import fr.xephi.authme.data.auth.PlayerCache;
import fr.xephi.authme.datasource.DataSource; import fr.xephi.authme.datasource.DataSource;
import fr.xephi.authme.initialization.SettingsDependent; import fr.xephi.authme.initialization.SettingsDependent;
import fr.xephi.authme.service.ValidationService; import fr.xephi.authme.service.ValidationService;
import fr.xephi.authme.settings.Settings; import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.RegistrationSettings; import fr.xephi.authme.settings.properties.RegistrationSettings;
import fr.xephi.authme.settings.properties.SecuritySettings;
import fr.xephi.authme.util.PlayerUtils; import fr.xephi.authme.util.PlayerUtils;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -21,7 +18,6 @@ import javax.inject.Inject;
* Service class for the AuthMe listeners to determine whether an event should be canceled. * Service class for the AuthMe listeners to determine whether an event should be canceled.
*/ */
class ListenerService implements SettingsDependent { class ListenerService implements SettingsDependent {
private final AuthMeApi authmeApi = AuthMeApi.getInstance();
private final DataSource dataSource; private final DataSource dataSource;
private final PlayerCache playerCache; private final PlayerCache playerCache;
private final ValidationService validationService; private final ValidationService validationService;
@ -79,19 +75,9 @@ class ListenerService implements SettingsDependent {
* @param player the player to verify * @param player the player to verify
* @return true if the associated event should be canceled, false otherwise * @return true if the associated event should be canceled, false otherwise
*/ */
public boolean shouldCancelEvent(Player player) { public boolean shouldCancelEvent(Player player) {
return player != null && !checkAuth(player.getName()) && !PlayerUtils.isNpc(player); return player != null && !checkAuth(player.getName()) && !PlayerUtils.isNpc(player);
} }
public boolean shouldCancelInvEvent(Player player) {
try {
return !AuthMe.settings.getProperty(SecuritySettings.GUI_CAPTCHA) || authmeApi.isRegistered(player.getName()) || GuiCaptchaHandler.closeReasonMap.containsKey(player)/* || !player.getOpenInventory().getTitle().equals("请验证你是真人")*/;
} catch (Exception e) {
return true;
}
}
@Override @Override
public void reload(Settings settings) { public void reload(Settings settings) {
isRegistrationForced = settings.getProperty(RegistrationSettings.FORCE); isRegistrationForced = settings.getProperty(RegistrationSettings.FORCE);

View File

@ -75,11 +75,7 @@ public class LoginLocationFixListener implements Listener {
boolean solved = false; boolean solved = false;
for (BlockFace face : faces) { for (BlockFace face : faces) {
if (JoinBlock.getRelative(face).getType().equals(Material.AIR) && JoinBlock.getRelative(face).getRelative(BlockFace.UP).getType().equals(Material.AIR)) { if (JoinBlock.getRelative(face).getType().equals(Material.AIR) && JoinBlock.getRelative(face).getRelative(BlockFace.UP).getType().equals(Material.AIR)) {
if (settings.getProperty(SecuritySettings.SMART_ASYNC_TELEPORT)) { TeleportUtils.teleport(player, JoinBlock.getRelative(face).getLocation().add(0.5, 0.1, 0.5));
TeleportUtils.teleport(player, JoinBlock.getRelative(face).getLocation().add(0.5, 0.1, 0.5));
} else {
player.teleport(JoinBlock.getRelative(face).getLocation().add(0.5, 0.1, 0.5));
}
solved = true; solved = true;
break; break;
} }
@ -107,20 +103,12 @@ public class LoginLocationFixListener implements Listener {
if (JoinBlock.getRelative(BlockFace.DOWN).getType().equals(Material.LAVA)) { if (JoinBlock.getRelative(BlockFace.DOWN).getType().equals(Material.LAVA)) {
JoinBlock.getRelative(BlockFace.DOWN).setType(Material.DIRT); JoinBlock.getRelative(BlockFace.DOWN).setType(Material.DIRT);
} }
if (settings.getProperty(SecuritySettings.SMART_ASYNC_TELEPORT)) { TeleportUtils.teleport(player, JoinBlock.getLocation().add(0.5, 0.1, 0.5));
TeleportUtils.teleport(player, JoinBlock.getLocation().add(0.5, 0.1, 0.5));
} else {
player.teleport(JoinBlock.getLocation().add(0.5, 0.1, 0.5));
}
messages.send(player, MessageKey.LOCATION_FIX_UNDERGROUND); messages.send(player, MessageKey.LOCATION_FIX_UNDERGROUND);
break; break;
} }
if (i == MaxHeight) { if (i == MaxHeight) {
if (settings.getProperty(SecuritySettings.SMART_ASYNC_TELEPORT)) { TeleportUtils.teleport(player, JoinBlock.getLocation().add(0.5, 1.1, 0.5));
TeleportUtils.teleport(player, JoinBlock.getLocation().add(0.5, 1.1, 0.5));
} else {
player.teleport(JoinBlock.getLocation().add(0.5, 1.1, 0.5));
}
messages.send(player, MessageKey.LOCATION_FIX_UNDERGROUND_CANT_FIX); messages.send(player, MessageKey.LOCATION_FIX_UNDERGROUND_CANT_FIX);
} }
} }

View File

@ -1,6 +1,5 @@
package fr.xephi.authme.listener; package fr.xephi.authme.listener;
import fr.xephi.authme.api.v3.AuthMeApi;
import fr.xephi.authme.data.QuickCommandsProtectionManager; import fr.xephi.authme.data.QuickCommandsProtectionManager;
import fr.xephi.authme.data.auth.PlayerAuth; import fr.xephi.authme.data.auth.PlayerAuth;
import fr.xephi.authme.datasource.DataSource; import fr.xephi.authme.datasource.DataSource;
@ -17,10 +16,12 @@ import fr.xephi.authme.service.ValidationService;
import fr.xephi.authme.settings.Settings; import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.SpawnLoader; import fr.xephi.authme.settings.SpawnLoader;
import fr.xephi.authme.settings.properties.HooksSettings; import fr.xephi.authme.settings.properties.HooksSettings;
import fr.xephi.authme.settings.properties.PluginSettings;
import fr.xephi.authme.settings.properties.RegistrationSettings; import fr.xephi.authme.settings.properties.RegistrationSettings;
import fr.xephi.authme.settings.properties.RestrictionSettings; import fr.xephi.authme.settings.properties.RestrictionSettings;
import fr.xephi.authme.settings.properties.SecuritySettings;
import fr.xephi.authme.util.TeleportUtils; import fr.xephi.authme.util.TeleportUtils;
import fr.xephi.authme.util.message.I18NUtils;
import fr.xephi.authme.util.message.MiniMessageUtils;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.HumanEntity; import org.bukkit.entity.HumanEntity;
@ -64,12 +65,7 @@ import static org.bukkit.Bukkit.getServer;
/** /**
* Listener class for player events. * Listener class for player events.
*/ */
public class PlayerListener implements Listener{ public class PlayerListener implements Listener {
private final AuthMeApi authmeApi = AuthMeApi.getInstance();
@Inject @Inject
private Settings settings; private Settings settings;
@Inject @Inject
@ -99,7 +95,6 @@ public class PlayerListener implements Listener{
@Inject @Inject
private QuickCommandsProtectionManager quickCommandsProtectionManager; private QuickCommandsProtectionManager quickCommandsProtectionManager;
// Lowest priority to apply fast protection checks // Lowest priority to apply fast protection checks
@EventHandler(priority = EventPriority.LOWEST) @EventHandler(priority = EventPriority.LOWEST)
public void onAsyncPlayerPreLoginEventLowest(AsyncPlayerPreLoginEvent event) { public void onAsyncPlayerPreLoginEventLowest(AsyncPlayerPreLoginEvent event) {
@ -193,7 +188,6 @@ public class PlayerListener implements Listener{
@EventHandler(priority = EventPriority.NORMAL) @EventHandler(priority = EventPriority.NORMAL)
public void onPlayerJoin(PlayerJoinEvent event) { public void onPlayerJoin(PlayerJoinEvent event) {
final Player player = event.getPlayer(); final Player player = event.getPlayer();
final AuthMeApi authmeApi = AuthMeApi.getInstance();
if (!PlayerListener19Spigot.isPlayerSpawnLocationEventCalled()) { if (!PlayerListener19Spigot.isPlayerSpawnLocationEventCalled()) {
teleportationService.teleportOnJoin(player); teleportationService.teleportOnJoin(player);
} }
@ -220,7 +214,7 @@ public class PlayerListener implements Listener{
String customJoinMessage = settings.getProperty(RegistrationSettings.CUSTOM_JOIN_MESSAGE); String customJoinMessage = settings.getProperty(RegistrationSettings.CUSTOM_JOIN_MESSAGE);
if (!customJoinMessage.isEmpty()) { if (!customJoinMessage.isEmpty()) {
customJoinMessage = ChatColor.translateAlternateColorCodes('&', customJoinMessage); customJoinMessage = ChatColor.translateAlternateColorCodes('&', MiniMessageUtils.parseMiniMessageToLegacy(customJoinMessage));
event.setJoinMessage(customJoinMessage event.setJoinMessage(customJoinMessage
.replace("{PLAYERNAME}", player.getName()) .replace("{PLAYERNAME}", player.getName())
.replace("{DISPLAYNAME}", player.getDisplayName()) .replace("{DISPLAYNAME}", player.getDisplayName())
@ -255,6 +249,11 @@ public class PlayerListener implements Listener{
} }
} }
// Remove data from locale map when player quit
if (settings.getProperty(PluginSettings.I18N_MESSAGES)) {
I18NUtils.removeLocale(player.getUniqueId());
}
if (antiBotService.wasPlayerKicked(player.getName())) { if (antiBotService.wasPlayerKicked(player.getName())) {
return; return;
} }
@ -375,17 +374,9 @@ public class PlayerListener implements Listener{
Location spawn = spawnLoader.getSpawnLocation(player); Location spawn = spawnLoader.getSpawnLocation(player);
if (spawn != null && spawn.getWorld() != null) { if (spawn != null && spawn.getWorld() != null) {
if (!player.getWorld().equals(spawn.getWorld())) { if (!player.getWorld().equals(spawn.getWorld())) {
if(settings.getProperty(SecuritySettings.SMART_ASYNC_TELEPORT)) { TeleportUtils.teleport(player,spawn);
TeleportUtils.teleport(player,spawn);
} else {
player.teleport(spawn);
}
} else if (spawn.distance(player.getLocation()) > settings.getProperty(ALLOWED_MOVEMENT_RADIUS)) { } else if (spawn.distance(player.getLocation()) > settings.getProperty(ALLOWED_MOVEMENT_RADIUS)) {
if(settings.getProperty(SecuritySettings.SMART_ASYNC_TELEPORT)) { TeleportUtils.teleport(player,spawn);
TeleportUtils.teleport(player,spawn);
} else {
player.teleport(spawn);
}
} }
} }
} }
@ -504,21 +495,33 @@ public class PlayerListener implements Listener{
} }
} }
@SuppressWarnings("all")
private boolean isInventoryWhitelisted(InventoryView inventory) { private boolean isInventoryWhitelisted(InventoryView inventory) {
if (inventory == null) { if (inventory == null) {
return false; return false;
} }
Set<String> whitelist = settings.getProperty(RestrictionSettings.UNRESTRICTED_INVENTORIES); Set<String> whitelist = settings.getProperty(RestrictionSettings.UNRESTRICTED_INVENTORIES);
if (whitelist.isEmpty()) {
return false;
}
//append a string for String whitelist //append a string for String whitelist
return whitelist.contains(ChatColor.stripColor(inventory.getTitle()).toLowerCase(Locale.ROOT)); String invName = ChatColor.stripColor(inventory.getTitle()).toLowerCase(Locale.ROOT);
if (settings.getProperty(RestrictionSettings.STRICT_UNRESTRICTED_INVENTORIES_CHECK)) {
return whitelist.contains(invName);
}
for (String wl : whitelist) {
if (invName.contains(wl)) {
return true;
}
}
return false;
} }
@EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST) @EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST)
public void onPlayerInventoryOpen(InventoryOpenEvent event) { public void onPlayerInventoryOpen(InventoryOpenEvent event) {
final HumanEntity player = event.getPlayer(); final HumanEntity player = event.getPlayer();
Player ply = (Player) event.getPlayer();
if (listenerService.shouldCancelEvent(player) if (listenerService.shouldCancelEvent(player)
&& !isInventoryWhitelisted(event.getView()) && listenerService.shouldCancelInvEvent(ply)) { && !isInventoryWhitelisted(event.getView())) {
event.setCancelled(true); event.setCancelled(true);
/* /*
@ -536,12 +539,4 @@ public class PlayerListener implements Listener{
event.setCancelled(true); event.setCancelled(true);
} }
} }
// @EventHandler(priority = EventPriority.LOWEST)
// public void onSwitchHand(PlayerSwapHandItemsEvent event) {
// Player player = event.getPlayer();
// if (!player.isSneaking() || !player.hasPermission("keybindings.use"))
// return;
// event.setCancelled(true);
// Bukkit.dispatchCommand(event.getPlayer(), "help");
// }
} }

View File

@ -1,14 +1,10 @@
package fr.xephi.authme.listener; package fr.xephi.authme.listener;
import fr.xephi.authme.settings.Settings; import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.PluginSettings;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority; import org.bukkit.event.EventPriority;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.entity.EntityPickupItemEvent; import org.bukkit.event.entity.EntityPickupItemEvent;
import org.bukkit.event.player.PlayerSwapHandItemsEvent;
import javax.inject.Inject; import javax.inject.Inject;
@ -26,12 +22,4 @@ public class PlayerListenerHigherThan18 implements Listener {
} }
} }
@EventHandler(priority = EventPriority.LOWEST)
public void onSwitchHand(PlayerSwapHandItemsEvent event) {
Player player = event.getPlayer();
if (player.isSneaking() && player.hasPermission("keybindings.use") && settings.getProperty(PluginSettings.MENU_UNREGISTER_COMPATIBILITY)) {
event.setCancelled(true);
Bukkit.dispatchCommand(event.getPlayer(), "help");
}
}
} }

View File

@ -53,6 +53,9 @@ public class ServerListener implements Listener {
} else if ("ProtocolLib".equalsIgnoreCase(pluginName)) { } else if ("ProtocolLib".equalsIgnoreCase(pluginName)) {
protocolLibService.disable(); protocolLibService.disable();
logger.warning("ProtocolLib has been disabled, unhooking packet adapters!"); logger.warning("ProtocolLib has been disabled, unhooking packet adapters!");
} else if ("PlaceholderAPI".equalsIgnoreCase(pluginName)) {
pluginHookService.unhookPlaceholderApi();
logger.info("PlaceholderAPI has been disabled: unhooking placeholders");
} }
} }
@ -74,6 +77,8 @@ public class ServerListener implements Listener {
spawnLoader.loadCmiSpawn(); spawnLoader.loadCmiSpawn();
} else if ("ProtocolLib".equalsIgnoreCase(pluginName)) { } else if ("ProtocolLib".equalsIgnoreCase(pluginName)) {
protocolLibService.setup(); protocolLibService.setup();
} else if ("PlaceholderAPI".equalsIgnoreCase(pluginName)) {
pluginHookService.tryHookToPlaceholderApi();
} }
} }
} }

View File

@ -0,0 +1,36 @@
package fr.xephi.authme.listener.protocollib;
import com.comphenix.protocol.PacketType;
import com.comphenix.protocol.ProtocolLibrary;
import com.comphenix.protocol.events.ListenerPriority;
import com.comphenix.protocol.events.PacketAdapter;
import com.comphenix.protocol.events.PacketEvent;
import fr.xephi.authme.AuthMe;
import fr.xephi.authme.util.message.I18NUtils;
import java.util.UUID;
class I18NGetLocalePacketAdapter extends PacketAdapter {
I18NGetLocalePacketAdapter(AuthMe plugin) {
super(plugin, ListenerPriority.NORMAL, PacketType.Play.Client.SETTINGS);
}
@Override
public void onPacketReceiving(PacketEvent event) {
if (event.getPacketType() == PacketType.Play.Client.SETTINGS) {
String locale = event.getPacket().getStrings().read(0).toLowerCase();
UUID uuid = event.getPlayer().getUniqueId();
I18NUtils.addLocale(uuid, locale);
}
}
public void register() {
ProtocolLibrary.getProtocolManager().addPacketListener(this);
}
public void unregister() {
ProtocolLibrary.getProtocolManager().removePacketListener(this);
}
}

View File

@ -9,7 +9,9 @@ import fr.xephi.authme.initialization.SettingsDependent;
import fr.xephi.authme.output.ConsoleLoggerFactory; import fr.xephi.authme.output.ConsoleLoggerFactory;
import fr.xephi.authme.service.BukkitService; import fr.xephi.authme.service.BukkitService;
import fr.xephi.authme.settings.Settings; import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.PluginSettings;
import fr.xephi.authme.settings.properties.RestrictionSettings; import fr.xephi.authme.settings.properties.RestrictionSettings;
import fr.xephi.authme.util.Utils;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import javax.inject.Inject; import javax.inject.Inject;
@ -22,10 +24,12 @@ public class ProtocolLibService implements SettingsDependent {
/* Packet Adapters */ /* Packet Adapters */
private InventoryPacketAdapter inventoryPacketAdapter; private InventoryPacketAdapter inventoryPacketAdapter;
private TabCompletePacketAdapter tabCompletePacketAdapter; private TabCompletePacketAdapter tabCompletePacketAdapter;
private I18NGetLocalePacketAdapter i18nGetLocalePacketAdapter;
/* Settings */ /* Settings */
private boolean protectInvBeforeLogin; private boolean protectInvBeforeLogin;
private boolean denyTabCompleteBeforeLogin; private boolean denyTabCompleteBeforeLogin;
private boolean i18nMessagesSending;
/* Service */ /* Service */
private boolean isEnabled; private boolean isEnabled;
@ -58,6 +62,10 @@ public class ProtocolLibService implements SettingsDependent {
logger.warning("WARNING! The denyTabComplete feature requires ProtocolLib! Disabling it..."); logger.warning("WARNING! The denyTabComplete feature requires ProtocolLib! Disabling it...");
} }
if (i18nMessagesSending) {
logger.warning("WARNING! The i18n Messages feature requires ProtocolLib on lower version (< 1.15.2)! Disabling it...");
}
this.isEnabled = false; this.isEnabled = false;
return; return;
} }
@ -84,6 +92,16 @@ public class ProtocolLibService implements SettingsDependent {
tabCompletePacketAdapter = null; tabCompletePacketAdapter = null;
} }
if (i18nMessagesSending) {
if (i18nGetLocalePacketAdapter == null) {
i18nGetLocalePacketAdapter = new I18NGetLocalePacketAdapter(plugin);
i18nGetLocalePacketAdapter.register();
}
} else if (i18nGetLocalePacketAdapter != null) {
i18nGetLocalePacketAdapter.unregister();
i18nGetLocalePacketAdapter = null;
}
this.isEnabled = true; this.isEnabled = true;
} }
@ -101,6 +119,10 @@ public class ProtocolLibService implements SettingsDependent {
tabCompletePacketAdapter.unregister(); tabCompletePacketAdapter.unregister();
tabCompletePacketAdapter = null; tabCompletePacketAdapter = null;
} }
if (i18nGetLocalePacketAdapter != null) {
i18nGetLocalePacketAdapter.unregister();
i18nGetLocalePacketAdapter = null;
}
} }
/** /**
@ -120,6 +142,7 @@ public class ProtocolLibService implements SettingsDependent {
this.protectInvBeforeLogin = settings.getProperty(RestrictionSettings.PROTECT_INVENTORY_BEFORE_LOGIN); this.protectInvBeforeLogin = settings.getProperty(RestrictionSettings.PROTECT_INVENTORY_BEFORE_LOGIN);
this.denyTabCompleteBeforeLogin = settings.getProperty(RestrictionSettings.DENY_TABCOMPLETE_BEFORE_LOGIN); this.denyTabCompleteBeforeLogin = settings.getProperty(RestrictionSettings.DENY_TABCOMPLETE_BEFORE_LOGIN);
this.i18nMessagesSending = settings.getProperty(PluginSettings.I18N_MESSAGES) && Utils.MAJOR_VERSION <= 15;
//it was true and will be deactivated now, so we need to restore the inventory for every player //it was true and will be deactivated now, so we need to restore the inventory for every player
if (oldProtectInventory && !protectInvBeforeLogin && inventoryPacketAdapter != null) { if (oldProtectInventory && !protectInvBeforeLogin && inventoryPacketAdapter != null) {

View File

@ -158,7 +158,7 @@ public class EmailService {
try { try {
htmlEmail = sendMailSsl.initializeMail(email); htmlEmail = sendMailSsl.initializeMail(email);
} catch (EmailException e) { } catch (EmailException e) {
logger.logException("Failed to create email for recovery code:", e); logger.logException("Failed to create email for shutdown:", e);
return; return;
} }

View File

@ -8,12 +8,15 @@ import fr.xephi.authme.output.ConsoleLoggerFactory;
import fr.xephi.authme.settings.Settings; import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.PluginSettings; import fr.xephi.authme.settings.properties.PluginSettings;
import fr.xephi.authme.util.FileUtils; import fr.xephi.authme.util.FileUtils;
import fr.xephi.authme.util.message.I18NUtils;
import org.bukkit.configuration.file.FileConfiguration; import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration; import org.bukkit.configuration.file.YamlConfiguration;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import javax.inject.Inject; import javax.inject.Inject;
import java.io.File; import java.io.File;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import static fr.xephi.authme.message.MessagePathHelper.DEFAULT_LANGUAGE; import static fr.xephi.authme.message.MessagePathHelper.DEFAULT_LANGUAGE;
@ -33,6 +36,7 @@ public abstract class AbstractMessageFileHandler implements Reloadable {
private String filename; private String filename;
private FileConfiguration configuration; private FileConfiguration configuration;
private Map<String, FileConfiguration> i18nConfiguration;
private final String defaultFile; private final String defaultFile;
protected AbstractMessageFileHandler() { protected AbstractMessageFileHandler() {
@ -46,6 +50,7 @@ public abstract class AbstractMessageFileHandler implements Reloadable {
filename = createFilePath(language); filename = createFilePath(language);
File messagesFile = initializeFile(filename); File messagesFile = initializeFile(filename);
configuration = YamlConfiguration.loadConfiguration(messagesFile); configuration = YamlConfiguration.loadConfiguration(messagesFile);
i18nConfiguration = null;
} }
protected String getLanguage() { protected String getLanguage() {
@ -83,6 +88,24 @@ public abstract class AbstractMessageFileHandler implements Reloadable {
: message; : message;
} }
/**
* Returns the i18n message for the given key and given locale.
*
* @param key the key to retrieve the message for
* @param locale the locale that player client setting uses
* @return the message
*/
public String getMessageByLocale(String key, String locale) {
if (locale == null || !settings.getProperty(PluginSettings.I18N_MESSAGES)) {
return getMessage(key);
}
String message = getI18nConfiguration(locale).getString(key);
return message == null
? "Error retrieving message '" + key + "'"
: message;
}
/** /**
* Returns the message for the given key only if it exists, * Returns the message for the given key only if it exists,
* i.e. without falling back to the default file. * i.e. without falling back to the default file.
@ -94,6 +117,27 @@ public abstract class AbstractMessageFileHandler implements Reloadable {
return configuration.getString(key); return configuration.getString(key);
} }
public FileConfiguration getI18nConfiguration(String locale) {
if (i18nConfiguration == null) {
i18nConfiguration = new ConcurrentHashMap<>();
}
locale = I18NUtils.localeToCode(locale, settings);
if (i18nConfiguration.containsKey(locale)) {
return i18nConfiguration.get(locale);
} else {
// Sync with reload();
String i18nFilename = createFilePath(locale);
File i18nMessagesFile = initializeFile(i18nFilename);
FileConfiguration config = YamlConfiguration.loadConfiguration(i18nMessagesFile);
i18nConfiguration.put(locale, config);
return config;
}
}
/** /**
* Creates the path to the messages file for the given language code. * Creates the path to the messages file for the given language code.
* *

View File

@ -29,46 +29,6 @@ public enum MessageKey {
*/ */
BEDROCK_AUTO_LOGGED_IN("bedrock_auto_login.success"), BEDROCK_AUTO_LOGGED_IN("bedrock_auto_login.success"),
/**
* %random Verification
*/
GUI_CAPTCHA_WINDOW_NAME("gui_captcha.captcha_window_name", "%random"),
/**
* %random I am human
*/
GUI_CAPTCHA_CLICKABLE_NAME("gui_captcha.captcha_clickable_name", "%random"),
/**
* Verification failed, you have %times retries left
*/
GUI_CAPTCHA_RETRY_MESSAGE("gui_captcha.message_on_retry", "%times"),
/**
* Bedrock verification success!
*/
GUI_CAPTCHA_VERIFIED_AUTO_BEDROCK("gui_captcha.bedrock_auto_verify_success"),
/**
* Please be verified before chatting!
*/
GUI_CAPTCHA_DENIED_MESSAGE("gui_captcha.denied_message_sending"),
/**
* Verification timed out!
*/
GUI_CAPTCHA_KICK_TIMEOUT("gui_captcha.kick_on_timeout"),
/**
* Please complete the verification!
*/
GUI_CAPTCHA_KICK_FAILED("gui_captcha.kick_on_failed"),
/**
* Verification success!
*/
GUI_CAPTCHA_VERIFIED("gui_captcha.success"),
/** /**
* In order to use this command you must be authenticated! * In order to use this command you must be authenticated!
*/ */

View File

@ -5,6 +5,8 @@ import fr.xephi.authme.ConsoleLogger;
import fr.xephi.authme.mail.EmailService; import fr.xephi.authme.mail.EmailService;
import fr.xephi.authme.output.ConsoleLoggerFactory; import fr.xephi.authme.output.ConsoleLoggerFactory;
import fr.xephi.authme.util.expiring.Duration; import fr.xephi.authme.util.expiring.Duration;
import fr.xephi.authme.util.message.I18NUtils;
import fr.xephi.authme.util.message.MiniMessageUtils;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -120,13 +122,16 @@ public class Messages {
* @return The message from the file * @return The message from the file
*/ */
private String retrieveMessage(MessageKey key, CommandSender sender) { private String retrieveMessage(MessageKey key, CommandSender sender) {
String message = messagesFileHandler.getMessage(key.getKey()); String locale = sender instanceof Player
? I18NUtils.getLocale((Player) sender)
: null;
String message = messagesFileHandler.getMessageByLocale(key.getKey(), locale);
String displayName = sender.getName(); String displayName = sender.getName();
if (sender instanceof Player) { if (sender instanceof Player) {
displayName = ((Player) sender).getDisplayName(); displayName = ((Player) sender).getDisplayName();
} }
return ChatColor.translateAlternateColorCodes('&', message) return ChatColor.translateAlternateColorCodes('&', MiniMessageUtils.parseMiniMessageToLegacy(message))
.replace(NEWLINE_TAG, "\n") .replace(NEWLINE_TAG, "\n")
.replace(USERNAME_TAG, sender.getName()) .replace(USERNAME_TAG, sender.getName())
.replace(DISPLAYNAME_TAG, displayName); .replace(DISPLAYNAME_TAG, displayName);
@ -142,7 +147,7 @@ public class Messages {
private String retrieveMessage(MessageKey key, String name) { private String retrieveMessage(MessageKey key, String name) {
String message = messagesFileHandler.getMessage(key.getKey()); String message = messagesFileHandler.getMessage(key.getKey());
return ChatColor.translateAlternateColorCodes('&', message) return ChatColor.translateAlternateColorCodes('&', MiniMessageUtils.parseMiniMessageToLegacy(message))
.replace(NEWLINE_TAG, "\n") .replace(NEWLINE_TAG, "\n")
.replace(USERNAME_TAG, name) .replace(USERNAME_TAG, name)
.replace(DISPLAYNAME_TAG, name); .replace(DISPLAYNAME_TAG, name);

View File

@ -149,7 +149,6 @@ public class MessageUpdater {
.put("verification", "Verification code") .put("verification", "Verification code")
.put("time", "Time units") .put("time", "Time units")
.put("two_factor", "Two-factor authentication") .put("two_factor", "Two-factor authentication")
.put("gui_captcha", "3rd party features: GUI Captcha")
.put("bedrock_auto_login", "3rd party features: Bedrock Auto Login") .put("bedrock_auto_login", "3rd party features: Bedrock Auto Login")
.put("login_location_fix", "3rd party features: Login Location Fix") .put("login_location_fix", "3rd party features: Login Location Fix")
.put("double_login_fix", "3rd party features: Double Login Fix") .put("double_login_fix", "3rd party features: Double Login Fix")
@ -171,7 +170,7 @@ public class MessageUpdater {
// Create ConfigurationData instance // Create ConfigurationData instance
Map<String, List<String>> commentsMap = comments.entrySet().stream() Map<String, List<String>> commentsMap = comments.entrySet().stream()
.collect(Collectors.toMap(e -> e.getKey(), e -> singletonList(e.getValue()))); .collect(Collectors.toMap(Map.Entry::getKey, e -> singletonList(e.getValue())));
return new MessageKeyConfigurationData(builder, commentsMap); return new MessageKeyConfigurationData(builder, commentsMap);
} }

View File

@ -19,6 +19,7 @@ import fr.xephi.authme.service.bungeecord.BungeeSender;
import fr.xephi.authme.service.bungeecord.MessageType; import fr.xephi.authme.service.bungeecord.MessageType;
import fr.xephi.authme.service.velocity.VMessageType; import fr.xephi.authme.service.velocity.VMessageType;
import fr.xephi.authme.service.velocity.VelocitySender; import fr.xephi.authme.service.velocity.VelocitySender;
import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.commandconfig.CommandManager; import fr.xephi.authme.settings.commandconfig.CommandManager;
import fr.xephi.authme.settings.properties.HooksSettings; import fr.xephi.authme.settings.properties.HooksSettings;
import fr.xephi.authme.settings.properties.RegistrationSettings; import fr.xephi.authme.settings.properties.RegistrationSettings;
@ -28,8 +29,6 @@ import fr.xephi.authme.util.PlayerUtils;
import org.bukkit.GameMode; import org.bukkit.GameMode;
import org.bukkit.Server; import org.bukkit.Server;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import javax.inject.Inject; import javax.inject.Inject;
import java.util.Locale; import java.util.Locale;
@ -47,6 +46,9 @@ public class AsynchronousJoin implements AsynchronousProcess {
@Inject @Inject
private Server server; private Server server;
@Inject
private Settings settings;
@Inject @Inject
private DataSource database; private DataSource database;
@ -133,6 +135,10 @@ public class AsynchronousJoin implements AsynchronousProcess {
// Session logic // Session logic
if (sessionService.canResumeSession(player)) { if (sessionService.canResumeSession(player)) {
if (velocitySender.isEnabled()) {
bukkitService.scheduleSyncDelayedTask(() ->
velocitySender.sendAuthMeVelocityMessage(player, VMessageType.LOGIN), service.getProperty(HooksSettings.PROXY_SEND_DELAY));
}
service.send(player, MessageKey.SESSION_RECONNECTION); service.send(player, MessageKey.SESSION_RECONNECTION);
// Run commands // Run commands
bukkitService.scheduleSyncTaskFromOptionallyAsyncTask( bukkitService.scheduleSyncTaskFromOptionallyAsyncTask(
@ -157,11 +163,11 @@ public class AsynchronousJoin implements AsynchronousProcess {
// As described at https://www.spigotmc.org/wiki/bukkit-bungee-plugin-messaging-channel/ // As described at https://www.spigotmc.org/wiki/bukkit-bungee-plugin-messaging-channel/
// "Keep in mind that you can't send plugin messages directly after a player joins." // "Keep in mind that you can't send plugin messages directly after a player joins."
bukkitService.scheduleSyncDelayedTask(() -> bukkitService.scheduleSyncDelayedTask(() ->
bungeeSender.sendAuthMeBungeecordMessage(player, MessageType.LOGIN), 5L); bungeeSender.sendAuthMeBungeecordMessage(player, MessageType.LOGIN), settings.getProperty(HooksSettings.PROXY_SEND_DELAY));
} }
if (velocitySender.isEnabled()) { if (velocitySender.isEnabled()) {
bukkitService.scheduleSyncDelayedTask(() -> bukkitService.scheduleSyncDelayedTask(() ->
velocitySender.sendAuthMeVelocityMessage(player, VMessageType.LOGIN), 5L); velocitySender.sendAuthMeVelocityMessage(player, VMessageType.LOGIN), settings.getProperty(HooksSettings.PROXY_SEND_DELAY));
} }
return; return;
} }
@ -200,7 +206,7 @@ public class AsynchronousJoin implements AsynchronousProcess {
int blindTimeOut = (registrationTimeout <= 0) ? 99999 : registrationTimeout; int blindTimeOut = (registrationTimeout <= 0) ? 99999 : registrationTimeout;
// AuthMeReReloaded - Fix potion apply on Folia // AuthMeReReloaded - Fix potion apply on Folia
bukkitService.runTaskIfFolia(player,() -> player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, blindTimeOut, 2))); bukkitService.runTaskIfFolia(player, () -> player.addPotionEffect(bukkitService.createBlindnessEffect(blindTimeOut)));
} }
commandManager.runCommandsOnJoin(player); commandManager.runCommandsOnJoin(player);
}); });

View File

@ -26,8 +26,8 @@ import fr.xephi.authme.service.CommonService;
import fr.xephi.authme.service.SessionService; import fr.xephi.authme.service.SessionService;
import fr.xephi.authme.service.bungeecord.BungeeSender; import fr.xephi.authme.service.bungeecord.BungeeSender;
import fr.xephi.authme.service.bungeecord.MessageType; import fr.xephi.authme.service.bungeecord.MessageType;
import fr.xephi.authme.service.velocity.VMessageType;
import fr.xephi.authme.service.velocity.VelocitySender; import fr.xephi.authme.service.velocity.VelocitySender;
import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.DatabaseSettings; import fr.xephi.authme.settings.properties.DatabaseSettings;
import fr.xephi.authme.settings.properties.EmailSettings; import fr.xephi.authme.settings.properties.EmailSettings;
import fr.xephi.authme.settings.properties.HooksSettings; import fr.xephi.authme.settings.properties.HooksSettings;
@ -83,7 +83,8 @@ public class AsynchronousLogin implements AsynchronousProcess {
@Inject @Inject
private SessionService sessionService; private SessionService sessionService;
@Inject
private Settings settings;
@Inject @Inject
private BungeeSender bungeeSender; private BungeeSender bungeeSender;
@Inject @Inject
@ -310,11 +311,7 @@ public class AsynchronousLogin implements AsynchronousProcess {
// As described at https://www.spigotmc.org/wiki/bukkit-bungee-plugin-messaging-channel/ // As described at https://www.spigotmc.org/wiki/bukkit-bungee-plugin-messaging-channel/
// "Keep in mind that you can't send plugin messages directly after a player joins." // "Keep in mind that you can't send plugin messages directly after a player joins."
bukkitService.scheduleSyncDelayedTask(() -> bukkitService.scheduleSyncDelayedTask(() ->
bungeeSender.sendAuthMeBungeecordMessage(player, MessageType.LOGIN), 5L); bungeeSender.sendAuthMeBungeecordMessage(player, MessageType.LOGIN), settings.getProperty(HooksSettings.PROXY_SEND_DELAY));
}
if (velocitySender.isEnabled()) {
bukkitService.scheduleSyncDelayedTask(() ->
velocitySender.sendAuthMeVelocityMessage(player, VMessageType.LOGIN), 5L);
} }
// As the scheduling executes the Task most likely after the current // As the scheduling executes the Task most likely after the current

View File

@ -14,7 +14,10 @@ import fr.xephi.authme.service.CommonService;
import fr.xephi.authme.service.JoinMessageService; import fr.xephi.authme.service.JoinMessageService;
import fr.xephi.authme.service.TeleportationService; import fr.xephi.authme.service.TeleportationService;
import fr.xephi.authme.service.bungeecord.BungeeSender; import fr.xephi.authme.service.bungeecord.BungeeSender;
import fr.xephi.authme.service.velocity.VMessageType;
import fr.xephi.authme.service.velocity.VelocitySender;
import fr.xephi.authme.settings.commandconfig.CommandManager; import fr.xephi.authme.settings.commandconfig.CommandManager;
import fr.xephi.authme.settings.properties.HooksSettings;
import fr.xephi.authme.settings.properties.RegistrationSettings; import fr.xephi.authme.settings.properties.RegistrationSettings;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.potion.PotionEffectType; import org.bukkit.potion.PotionEffectType;
@ -30,6 +33,9 @@ public class ProcessSyncPlayerLogin implements SynchronousProcess {
@Inject @Inject
private BungeeSender bungeeSender; private BungeeSender bungeeSender;
@Inject
private VelocitySender velocitySender;
@Inject @Inject
private LimboService limboService; private LimboService limboService;
@ -102,6 +108,13 @@ public class ProcessSyncPlayerLogin implements SynchronousProcess {
player.removePotionEffect(PotionEffectType.BLINDNESS); player.removePotionEffect(PotionEffectType.BLINDNESS);
} }
// AuthMeVelocity start - send on player login
if (velocitySender.isEnabled()) {
bukkitService.scheduleSyncDelayedTask(() ->
velocitySender.sendAuthMeVelocityMessage(player, VMessageType.LOGIN), commonService.getProperty(HooksSettings.PROXY_SEND_DELAY));
}
// AuthMeVelocity end
// The Login event now fires (as intended) after everything is processed // The Login event now fires (as intended) after everything is processed
bukkitService.callEvent(new LoginEvent(player)); bukkitService.callEvent(new LoginEvent(player));

View File

@ -13,7 +13,6 @@ import fr.xephi.authme.service.bungeecord.BungeeSender;
import fr.xephi.authme.service.bungeecord.MessageType; import fr.xephi.authme.service.bungeecord.MessageType;
import fr.xephi.authme.service.velocity.VMessageType; import fr.xephi.authme.service.velocity.VMessageType;
import fr.xephi.authme.service.velocity.VelocitySender; import fr.xephi.authme.service.velocity.VelocitySender;
import fr.xephi.authme.settings.properties.RestrictionSettings;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import javax.inject.Inject; import javax.inject.Inject;
@ -65,11 +64,11 @@ public class AsynchronousLogout implements AsynchronousProcess {
PlayerAuth auth = playerCache.getAuth(name); PlayerAuth auth = playerCache.getAuth(name);
database.updateSession(auth); database.updateSession(auth);
// TODO: send an update when a messaging service will be implemented (SESSION) // TODO: send an update when a messaging service will be implemented (SESSION)
if (service.getProperty(RestrictionSettings.SAVE_QUIT_LOCATION)) { //if (service.getProperty(RestrictionSettings.SAVE_QUIT_LOCATION)) {
auth.setQuitLocation(player.getLocation()); auth.setQuitLocation(player.getLocation());
database.updateQuitLoc(auth); database.updateQuitLoc(auth);
// TODO: send an update when a messaging service will be implemented (QUITLOC) // TODO: send an update when a messaging service will be implemented (QUITLOC)
} //} AuthMeReReloaded - Always save quit location
playerCache.removePlayer(name); playerCache.removePlayer(name);
codeManager.unverify(name); codeManager.unverify(name);

View File

@ -14,8 +14,6 @@ import fr.xephi.authme.settings.commandconfig.CommandManager;
import fr.xephi.authme.settings.properties.RegistrationSettings; import fr.xephi.authme.settings.properties.RegistrationSettings;
import fr.xephi.authme.settings.properties.RestrictionSettings; import fr.xephi.authme.settings.properties.RestrictionSettings;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import javax.inject.Inject; import javax.inject.Inject;
@ -75,7 +73,7 @@ public class ProcessSyncPlayerLogout implements SynchronousProcess {
// Apply Blindness effect // Apply Blindness effect
if (service.getProperty(RegistrationSettings.APPLY_BLIND_EFFECT)) { if (service.getProperty(RegistrationSettings.APPLY_BLIND_EFFECT)) {
int timeout = service.getProperty(RestrictionSettings.TIMEOUT) * TICKS_PER_SECOND; int timeout = service.getProperty(RestrictionSettings.TIMEOUT) * TICKS_PER_SECOND;
player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, timeout, 2)); player.addPotionEffect(bukkitService.createBlindnessEffect(timeout));
} }
// Set player's data to unauthenticated // Set player's data to unauthenticated

View File

@ -12,7 +12,6 @@ import fr.xephi.authme.service.SessionService;
import fr.xephi.authme.service.ValidationService; import fr.xephi.authme.service.ValidationService;
import fr.xephi.authme.settings.SpawnLoader; import fr.xephi.authme.settings.SpawnLoader;
import fr.xephi.authme.settings.properties.PluginSettings; import fr.xephi.authme.settings.properties.PluginSettings;
import fr.xephi.authme.settings.properties.RestrictionSettings;
import fr.xephi.authme.util.PlayerUtils; import fr.xephi.authme.util.PlayerUtils;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -68,13 +67,16 @@ public class AsynchronousQuit implements AsynchronousProcess {
boolean wasLoggedIn = playerCache.isAuthenticated(name); boolean wasLoggedIn = playerCache.isAuthenticated(name);
if (wasLoggedIn) { if (wasLoggedIn) {
if (service.getProperty(RestrictionSettings.SAVE_QUIT_LOCATION)) { //if (service.getProperty(RestrictionSettings.SAVE_QUIT_LOCATION)) {
Location loc = spawnLoader.getPlayerLocationOrSpawn(player); // AuthMeReReloaded - Always save quit location on quit
PlayerAuth auth = PlayerAuth.builder() Location loc = spawnLoader.getPlayerLocationOrSpawn(player);
.name(name).location(loc) PlayerAuth authLoc = PlayerAuth.builder()
.realName(player.getName()).build(); .name(name).location(loc)
database.updateQuitLoc(auth); .realName(player.getName()).build();
} database.updateQuitLoc(authLoc);
// AuthMeReReloaded - Fix AuthMe#2769 -1
//}
String ip = PlayerUtils.getPlayerIp(player); String ip = PlayerUtils.getPlayerIp(player);
PlayerAuth auth = PlayerAuth.builder() PlayerAuth auth = PlayerAuth.builder()

View File

@ -1,5 +1,6 @@
package fr.xephi.authme.process.quit; package fr.xephi.authme.process.quit;
import com.github.Anon8281.universalScheduler.UniversalScheduler;
import fr.xephi.authme.data.limbo.LimboService; import fr.xephi.authme.data.limbo.LimboService;
import fr.xephi.authme.process.SynchronousProcess; import fr.xephi.authme.process.SynchronousProcess;
import fr.xephi.authme.settings.commandconfig.CommandManager; import fr.xephi.authme.settings.commandconfig.CommandManager;
@ -27,7 +28,9 @@ public class ProcessSyncPlayerQuit implements SynchronousProcess {
commandManager.runCommandsOnLogout(player); commandManager.runCommandsOnLogout(player);
} else { } else {
limboService.restoreData(player); limboService.restoreData(player);
player.saveData(); // #1238: Speed is sometimes not restored properly if (!UniversalScheduler.isFolia) { // AuthMeReReloaded - Fix #146 (Very stupid solution, but works)
// player.saveData(); // #1238: Speed is sometimes not restored properly
}
} }
player.leaveVehicle(); player.leaveVehicle();
} }

View File

@ -23,8 +23,6 @@ import fr.xephi.authme.settings.properties.RegistrationSettings;
import fr.xephi.authme.settings.properties.RestrictionSettings; import fr.xephi.authme.settings.properties.RestrictionSettings;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import javax.inject.Inject; import javax.inject.Inject;
@ -103,7 +101,7 @@ public class AsynchronousUnregister implements AsynchronousProcess {
public void adminUnregister(CommandSender initiator, String name, Player player) { public void adminUnregister(CommandSender initiator, String name, Player player) {
if (dataSource.removeAuth(name)) { if (dataSource.removeAuth(name)) {
performPostUnregisterActions(name, player); performPostUnregisterActions(name, player);
velocitySender.sendAuthMeVelocityMessage(player, VMessageType.FORCE_UNREGISTER); if (player != null) velocitySender.sendAuthMeVelocityMessage(player, VMessageType.FORCE_UNREGISTER);
bukkitService.createAndCallEvent(isAsync -> new UnregisterByAdminEvent(player, name, isAsync, initiator)); bukkitService.createAndCallEvent(isAsync -> new UnregisterByAdminEvent(player, name, isAsync, initiator));
if (initiator == null) { if (initiator == null) {
logger.info(name + " was unregistered"); logger.info(name + " was unregistered");
@ -150,7 +148,7 @@ public class AsynchronousUnregister implements AsynchronousProcess {
private void applyBlindEffect(Player player) { private void applyBlindEffect(Player player) {
if (service.getProperty(RegistrationSettings.APPLY_BLIND_EFFECT)) { if (service.getProperty(RegistrationSettings.APPLY_BLIND_EFFECT)) {
int timeout = service.getProperty(RestrictionSettings.TIMEOUT) * TICKS_PER_SECOND; int timeout = service.getProperty(RestrictionSettings.TIMEOUT) * TICKS_PER_SECOND;
player.addPotionEffect(new PotionEffect(PotionEffectType.BLINDNESS, timeout, 2)); bukkitService.runTaskIfFolia(player, () -> player.addPotionEffect(bukkitService.createBlindnessEffect(timeout)));
} }
} }

View File

@ -32,6 +32,7 @@ public enum HashAlgorithm {
WORDPRESS(fr.xephi.authme.security.crypts.Wordpress.class), WORDPRESS(fr.xephi.authme.security.crypts.Wordpress.class),
XAUTH(fr.xephi.authme.security.crypts.XAuth.class), XAUTH(fr.xephi.authme.security.crypts.XAuth.class),
XFBCRYPT(fr.xephi.authme.security.crypts.XfBCrypt.class), XFBCRYPT(fr.xephi.authme.security.crypts.XfBCrypt.class),
NOCRYPT(fr.xephi.authme.security.crypts.NoCrypt.class),
CUSTOM(null), CUSTOM(null),
@Deprecated DOUBLEMD5(fr.xephi.authme.security.crypts.DoubleMd5.class), @Deprecated DOUBLEMD5(fr.xephi.authme.security.crypts.DoubleMd5.class),

View File

@ -0,0 +1,15 @@
package fr.xephi.authme.security.crypts;
import fr.xephi.authme.security.crypts.description.Recommendation;
import fr.xephi.authme.security.crypts.description.Usage;
@Deprecated
@Recommendation(Usage.DEPRECATED)
public class NoCrypt extends UnsaltedMethod {
@Override
public String computeHash(String password) {
return password;
}
}

View File

@ -1,12 +1,12 @@
package fr.xephi.authme.service; package fr.xephi.authme.service;
import com.github.Anon8281.universalScheduler.UniversalRunnable; import com.github.Anon8281.universalScheduler.UniversalRunnable;
import com.github.Anon8281.universalScheduler.UniversalScheduler;
import com.github.Anon8281.universalScheduler.scheduling.tasks.MyScheduledTask; import com.github.Anon8281.universalScheduler.scheduling.tasks.MyScheduledTask;
import fr.xephi.authme.AuthMe; import fr.xephi.authme.AuthMe;
import fr.xephi.authme.initialization.SettingsDependent; import fr.xephi.authme.initialization.SettingsDependent;
import fr.xephi.authme.settings.Settings; import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.PluginSettings; import fr.xephi.authme.settings.properties.PluginSettings;
import fr.xephi.authme.util.Utils;
import org.bukkit.BanEntry; import org.bukkit.BanEntry;
import org.bukkit.BanList; import org.bukkit.BanList;
import org.bukkit.Bukkit; import org.bukkit.Bukkit;
@ -18,6 +18,8 @@ import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
import javax.inject.Inject; import javax.inject.Inject;
import java.util.Collection; import java.util.Collection;
@ -38,7 +40,7 @@ public class BukkitService implements SettingsDependent {
/** Number of ticks per minute. */ /** Number of ticks per minute. */
public static final int TICKS_PER_MINUTE = 60 * TICKS_PER_SECOND; public static final int TICKS_PER_MINUTE = 60 * TICKS_PER_SECOND;
/** Whether the server is running Folia. */ /** Whether the server is running Folia. */
private static final boolean IS_FOLIA = Utils.isClassLoaded("io.papermc.paper.threadedregions.RegionizedServer"); private static final boolean isFolia = UniversalScheduler.isFolia;
private final AuthMe authMe; private final AuthMe authMe;
private boolean useAsyncTasks; private boolean useAsyncTasks;
@ -68,7 +70,7 @@ public class BukkitService implements SettingsDependent {
* @param delay Delay in server ticks before executing task * @param delay Delay in server ticks before executing task
*/ */
public void scheduleSyncDelayedTask(Runnable task, long delay) { public void scheduleSyncDelayedTask(Runnable task, long delay) {
if (IS_FOLIA) { if (isFolia) {
runTaskLater(task, delay); runTaskLater(task, delay);
} else { } else {
Bukkit.getScheduler().runTaskLater(authMe, task, delay); // We must do this to keep compatibility Bukkit.getScheduler().runTaskLater(authMe, task, delay); // We must do this to keep compatibility
@ -98,7 +100,7 @@ public class BukkitService implements SettingsDependent {
* @throws IllegalArgumentException if task is null * @throws IllegalArgumentException if task is null
*/ */
public void runTask(Runnable task) { public void runTask(Runnable task) {
if (IS_FOLIA) { if (isFolia) {
getScheduler().runTask(task); getScheduler().runTask(task);
} else { } else {
Bukkit.getScheduler().runTask(authMe, task); Bukkit.getScheduler().runTask(authMe, task);
@ -106,7 +108,7 @@ public class BukkitService implements SettingsDependent {
} }
public void runTask(Entity entity, Runnable task) { public void runTask(Entity entity, Runnable task) {
if (IS_FOLIA) { if (isFolia) {
getScheduler().runTask(entity, task); getScheduler().runTask(entity, task);
} else { } else {
Bukkit.getScheduler().runTask(authMe, task); Bukkit.getScheduler().runTask(authMe, task);
@ -122,7 +124,7 @@ public class BukkitService implements SettingsDependent {
* @param task the task to be run * @param task the task to be run
*/ */
public void runTaskIfFolia(Runnable task) { public void runTaskIfFolia(Runnable task) {
if (IS_FOLIA) { if (isFolia) {
runTask(task); runTask(task);
} else { } else {
task.run(); task.run();
@ -134,7 +136,7 @@ public class BukkitService implements SettingsDependent {
* @param task the task to be run * @param task the task to be run
*/ */
public void runTaskIfFolia(Entity entity, Runnable task) { public void runTaskIfFolia(Entity entity, Runnable task) {
if (IS_FOLIA) { if (isFolia) {
runTask(entity, task); runTask(entity, task);
} else { } else {
task.run(); task.run();
@ -146,7 +148,7 @@ public class BukkitService implements SettingsDependent {
* @param task the task to be run * @param task the task to be run
*/ */
public void runTaskIfFolia(Location location, Runnable task) { public void runTaskIfFolia(Location location, Runnable task) {
if (IS_FOLIA) { if (isFolia) {
runTask(location, task); runTask(location, task);
} else { } else {
task.run(); task.run();
@ -167,6 +169,10 @@ public class BukkitService implements SettingsDependent {
return getScheduler().runTaskLater(task, delay); return getScheduler().runTaskLater(task, delay);
} }
public MyScheduledTask runTaskLater(Entity entity, Runnable task, long delay) {
return getScheduler().runTaskLater(entity, task, delay);
}
/** /**
* Schedules this task to run asynchronously or immediately executes it based on * Schedules this task to run asynchronously or immediately executes it based on
* AuthMe's configuration. * AuthMe's configuration.
@ -192,7 +198,7 @@ public class BukkitService implements SettingsDependent {
* @throws IllegalArgumentException if task is null * @throws IllegalArgumentException if task is null
*/ */
public void runTaskAsynchronously(Runnable task) { public void runTaskAsynchronously(Runnable task) {
if (IS_FOLIA) { if (isFolia) {
getScheduler().runTaskAsynchronously(task); getScheduler().runTaskAsynchronously(task);
} else { } else {
Bukkit.getScheduler().runTaskAsynchronously(authMe, task); Bukkit.getScheduler().runTaskAsynchronously(authMe, task);
@ -323,6 +329,16 @@ public class BukkitService implements SettingsDependent {
return event; return event;
} }
/**
* Creates a PotionEffect with blindness for the given duration in ticks.
*
* @param timeoutInTicks duration of the effect in ticks
* @return blindness potion effect
*/
public PotionEffect createBlindnessEffect(int timeoutInTicks) {
return new PotionEffect(PotionEffectType.BLINDNESS, timeoutInTicks, 2);
}
/** /**
* Gets the world with the given name. * Gets the world with the given name.
* *
@ -376,7 +392,11 @@ public class BukkitService implements SettingsDependent {
* @param bytes the message * @param bytes the message
*/ */
public void sendVelocityMessage(Player player, byte[] bytes) { public void sendVelocityMessage(Player player, byte[] bytes) {
player.sendPluginMessage(authMe, "authmevelocity:main", bytes); if (player != null) {
player.sendPluginMessage(authMe, "authmevelocity:main", bytes);
} else {
Bukkit.getServer().sendPluginMessage(authMe, "authmevelocity:main", bytes);
}
} }

View File

@ -37,7 +37,7 @@ public class GeoIpService {
private volatile boolean downloading; private volatile boolean downloading;
@Inject @Inject
GeoIpService(@DataFolder File dataFolder){ GeoIpService(@DataFolder File dataFolder) {
this.dataFile = dataFolder.toPath().resolve(DATABASE_FILE); this.dataFile = dataFolder.toPath().resolve(DATABASE_FILE);
// Fires download of recent data or the initialization of the look up service // Fires download of recent data or the initialization of the look up service

View File

@ -6,6 +6,8 @@ import com.onarandombox.MultiverseCore.MultiverseCore;
import com.onarandombox.MultiverseCore.api.MVWorldManager; import com.onarandombox.MultiverseCore.api.MVWorldManager;
import fr.xephi.authme.ConsoleLogger; import fr.xephi.authme.ConsoleLogger;
import fr.xephi.authme.output.ConsoleLoggerFactory; import fr.xephi.authme.output.ConsoleLoggerFactory;
import fr.xephi.authme.service.hook.papi.AuthMeExpansion;
import me.clip.placeholderapi.PlaceholderAPIPlugin;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.World; import org.bukkit.World;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -26,6 +28,8 @@ public class PluginHookService {
private Essentials essentials; private Essentials essentials;
private Plugin cmi; private Plugin cmi;
private MultiverseCore multiverse; private MultiverseCore multiverse;
private PlaceholderAPIPlugin placeholderApi;
private AuthMeExpansion authMeExpansion;
/** /**
* Constructor. * Constructor.
@ -38,6 +42,7 @@ public class PluginHookService {
tryHookToEssentials(); tryHookToEssentials();
tryHookToCmi(); tryHookToCmi();
tryHookToMultiverse(); tryHookToMultiverse();
tryHookToPlaceholderApi();
} }
/** /**
@ -133,6 +138,20 @@ public class PluginHookService {
} }
} }
/**
* Attempts to create a hook into PlaceholderAPI.
*/
public void tryHookToPlaceholderApi() {
try {
placeholderApi = getPlugin(pluginManager, "PlaceholderAPI", PlaceholderAPIPlugin.class);
authMeExpansion = new AuthMeExpansion();
authMeExpansion.register();
} catch (Exception | NoClassDefFoundError ignored) {
placeholderApi = null;
authMeExpansion = null;
}
}
/** /**
* Attempts to create a hook into CMI. * Attempts to create a hook into CMI.
*/ */
@ -180,6 +199,16 @@ public class PluginHookService {
multiverse = null; multiverse = null;
} }
/**
* Unhooks from PlaceholderAPI.
*/
public void unhookPlaceholderApi() {
if (placeholderApi != null) {
authMeExpansion.unregister();
placeholderApi = null;
}
}
// ------ // ------
// Helpers // Helpers
// ------ // ------

View File

@ -14,7 +14,6 @@ import fr.xephi.authme.output.ConsoleLoggerFactory;
import fr.xephi.authme.settings.Settings; import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.SpawnLoader; import fr.xephi.authme.settings.SpawnLoader;
import fr.xephi.authme.settings.properties.RestrictionSettings; import fr.xephi.authme.settings.properties.RestrictionSettings;
import fr.xephi.authme.settings.properties.SecuritySettings;
import fr.xephi.authme.util.TeleportUtils; import fr.xephi.authme.util.TeleportUtils;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.World; import org.bukkit.World;
@ -144,7 +143,9 @@ public class TeleportationService implements Reloadable {
} else if (settings.getProperty(TELEPORT_UNAUTHED_TO_SPAWN)) { } else if (settings.getProperty(TELEPORT_UNAUTHED_TO_SPAWN)) {
if (settings.getProperty(RestrictionSettings.SAVE_QUIT_LOCATION)) { if (settings.getProperty(RestrictionSettings.SAVE_QUIT_LOCATION)) {
Location location = buildLocationFromAuth(player, auth); Location location = buildLocationFromAuth(player, auth);
if (location.equals(player.getLocation())) return; Location playerLoc = player.getLocation();
if (location.getX() == playerLoc.getX() && location.getY() == playerLoc.getY() && location.getZ() == playerLoc.getZ()
&& location.getWorld() == playerLoc.getWorld()) return;
logger.debug("Teleporting `{0}` after login, based on the player auth", player.getName()); logger.debug("Teleporting `{0}` after login, based on the player auth", player.getName());
teleportBackFromSpawn(player, location); teleportBackFromSpawn(player, location);
} else if (limbo != null && limbo.getLocation() != null) { } else if (limbo != null && limbo.getLocation() != null) {
@ -187,10 +188,8 @@ public class TeleportationService implements Reloadable {
private void performTeleportation(final Player player, final AbstractTeleportEvent event) { private void performTeleportation(final Player player, final AbstractTeleportEvent event) {
bukkitService.scheduleSyncTaskFromOptionallyAsyncTask(() -> { bukkitService.scheduleSyncTaskFromOptionallyAsyncTask(() -> {
bukkitService.callEvent(event); bukkitService.callEvent(event);
if (player.isOnline() && isEventValid(event) && settings.getProperty(SecuritySettings.SMART_ASYNC_TELEPORT)) { if (player.isOnline() && isEventValid(event)) {
TeleportUtils.teleport(player, event.getTo()); TeleportUtils.teleport(player, event.getTo());
} else if (player.isOnline() && isEventValid(event)) {
player.teleport(event.getTo());
} }
}); });
} }

View File

@ -0,0 +1,72 @@
package fr.xephi.authme.service.hook.papi;
import fr.xephi.authme.AuthMe;
import fr.xephi.authme.api.v3.AuthMeApi;
import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.HooksSettings;
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
/**
* AuthMe PlaceholderAPI expansion class.
* @author Kobe 8
*/
public class AuthMeExpansion extends PlaceholderExpansion {
private final Settings settings = AuthMe.settings;
@Override
public @NotNull String getIdentifier() {
return "authme";
}
@Override
public @NotNull String getAuthor() {
return "HaHaWTH";
}
@Override
public @NotNull String getVersion() {
return AuthMe.getPluginVersion();
}
@Override
public boolean persist() {
return true;
}
@Override
public String onRequest(OfflinePlayer player, @NotNull String params) {
if (!settings.getProperty(HooksSettings.PLACEHOLDER_API)) return null;
AuthMeApi authMeApi = AuthMeApi.getInstance();
if (authMeApi == null) return null;
if (params.equalsIgnoreCase("version")) {
return getVersion();
}
if (params.equalsIgnoreCase("is_registered")) {
if (player != null) {
Player onlinePlayer = player.getPlayer();
if (onlinePlayer != null) {
return String.valueOf(authMeApi.isRegistered(onlinePlayer.getName()));
}
}
}
if (params.equalsIgnoreCase("is_authenticated")) {
if (player != null) {
Player onlinePlayer = player.getPlayer();
if (onlinePlayer != null) {
return String.valueOf(authMeApi.isAuthenticated(onlinePlayer));
}
}
}
if (params.equalsIgnoreCase("last_login_time")) {
if (player != null) {
Player onlinePlayer = player.getPlayer();
if (onlinePlayer != null) {
return authMeApi.getLastLoginTime(onlinePlayer.getName()).toString();
}
}
}
return null;
}
}

View File

@ -129,9 +129,9 @@ public class CommandManager implements Reloadable {
if (predicate.test(cmd)) { if (predicate.test(cmd)) {
long delay = cmd.getDelay(); long delay = cmd.getDelay();
if (delay > 0) { if (delay > 0) {
bukkitService.scheduleSyncDelayedTask(() -> dispatchCommand(player, cmd), delay); bukkitService.runTaskLater(player, () -> dispatchCommand(player, cmd), delay);
} else { } else {
dispatchCommand(player, cmd); bukkitService.runTaskIfFolia(player, () -> dispatchCommand(player, cmd));
} }
} }
} }

View File

@ -31,7 +31,17 @@ public final class DatabaseSettings implements SettingsHolder {
public static final Property<String> MYSQL_PORT = public static final Property<String> MYSQL_PORT =
newProperty("DataSource.mySQLPort", "3306"); newProperty("DataSource.mySQLPort", "3306");
@Comment("Connect to MySQL database over SSL") @Comment({"Replacement of Mysql's useSsl (for MariaDB only).",
"- disable: No SSL",
"- trust: Trust blindly (no validation)",
"- verify_ca: Encryption, certificates validation, BUT no hostname verification",
"- verify_full: Encryption, certificate validation and hostname validation",
"Read more: https://bit.ly/mariadb-sslmode"})
public static final Property<String> MARIADB_SSL_MODE =
newProperty("DataSource.MariaDbSslMode", "disabled");
@Comment({"Connect to MySQL database over SSL",
"If you're using MariaDB, use sslMode instead"})
public static final Property<Boolean> MYSQL_USE_SSL = public static final Property<Boolean> MYSQL_USE_SSL =
newProperty("DataSource.mySQLUseSSL", true); newProperty("DataSource.mySQLUseSSL", true);
@ -39,12 +49,13 @@ public final class DatabaseSettings implements SettingsHolder {
"We would not recommend to set this option to false.", "We would not recommend to set this option to false.",
"Set this option to false at your own risk if and only if you know what you're doing"}) "Set this option to false at your own risk if and only if you know what you're doing"})
public static final Property<Boolean> MYSQL_CHECK_SERVER_CERTIFICATE = public static final Property<Boolean> MYSQL_CHECK_SERVER_CERTIFICATE =
newProperty( "DataSource.mySQLCheckServerCertificate", true ); newProperty( "DataSource.mySQLCheckServerCertificate", true);
@Comment({"Authorize client to retrieve RSA server public key.", @Comment({"Authorize client to retrieve RSA server public key.",
"Advanced option, ignore if you don't know what it means."}) "Advanced option, ignore if you don't know what it means.",
"If you are using MariaDB, use MariaDbSslMode instead."})
public static final Property<Boolean> MYSQL_ALLOW_PUBLIC_KEY_RETRIEVAL = public static final Property<Boolean> MYSQL_ALLOW_PUBLIC_KEY_RETRIEVAL =
newProperty( "DataSource.mySQLAllowPublicKeyRetrieval", true ); newProperty( "DataSource.mySQLAllowPublicKeyRetrieval", true);
@Comment("Username to connect to the MySQL database") @Comment("Username to connect to the MySQL database")
public static final Property<String> MYSQL_USERNAME = public static final Property<String> MYSQL_USERNAME =

View File

@ -15,6 +15,10 @@ public final class HooksSettings implements SettingsHolder {
public static final Property<Boolean> MULTIVERSE = public static final Property<Boolean> MULTIVERSE =
newProperty("Hooks.multiverse", true); newProperty("Hooks.multiverse", true);
@Comment("Do we need to hook with PlaceholderAPI for AuthMe placeholders?")
public static final Property<Boolean> PLACEHOLDER_API =
newProperty("Hooks.placeholderapi", false);
@Comment("Do we need to hook with BungeeCord?") @Comment("Do we need to hook with BungeeCord?")
public static final Property<Boolean> BUNGEECORD = public static final Property<Boolean> BUNGEECORD =
newProperty("Hooks.bungeecord", false); newProperty("Hooks.bungeecord", false);
@ -22,6 +26,12 @@ public final class HooksSettings implements SettingsHolder {
public static final Property<Boolean> VELOCITY = public static final Property<Boolean> VELOCITY =
newProperty("Hooks.velocity", false); newProperty("Hooks.velocity", false);
@Comment({"How many ticks should we wait before sending login info to proxy?",
"Change this to higher if your player has high ping.",
"See: https://www.spigotmc.org/wiki/bukkit-bungee-plugin-messaging-channel/"})
public static final Property<Long> PROXY_SEND_DELAY =
newProperty("Hooks.proxySendDelay", 10L);
@Comment({"Hook into floodgate.", @Comment({"Hook into floodgate.",
"This must be true if you want to use other bedrock features." "This must be true if you want to use other bedrock features."
}) })

View File

@ -5,16 +5,32 @@ import ch.jalu.configme.SettingsHolder;
import ch.jalu.configme.properties.Property; import ch.jalu.configme.properties.Property;
import fr.xephi.authme.output.LogLevel; import fr.xephi.authme.output.LogLevel;
import java.util.Set;
import static ch.jalu.configme.properties.PropertyInitializer.newLowercaseStringSetProperty;
import static ch.jalu.configme.properties.PropertyInitializer.newProperty; import static ch.jalu.configme.properties.PropertyInitializer.newProperty;
public final class PluginSettings implements SettingsHolder { public final class PluginSettings implements SettingsHolder {
@Comment({ @Comment({
"Should we execute /help command when unregistered players press Shift+F?", "Send i18n messages to player based on their client settings, this option will override `settings.messagesLanguage`",
"This keeps compatibility with some menu plugins", "(Requires ProtocolLib)",
"If you are using TrMenu, don't enable this because TrMenu already implemented this." "This will not affect language of AuthMe help command."
}) })
public static final Property<Boolean> MENU_UNREGISTER_COMPATIBILITY = public static final Property<Boolean> I18N_MESSAGES =
newProperty("3rdPartyFeature.compatibility.menuPlugins", false); newProperty("3rdPartyFeature.features.i18nMessages.enabled", false);
@Comment({"Redirect locale code to certain AuthMe language code as you want",
"Minecraft locale list: https://minecraft.wiki/w/Language",
"AuthMe language code: https://github.com/HaHaWTH/AuthMeReReloaded/blob/master/docs/translations.md",
"For example, if you want to show Russian messages to player using language Tatar(tt_ru),",
"and show Chinese Simplified messages to player using language Classical Chinese(lzh), then:",
"locale-code-redirect:",
"- 'tt_ru:ru'",
"- 'lzh:zhcn'"})
public static final Property<Set<String>> I18N_CODE_REDIRECT =
newLowercaseStringSetProperty("3rdPartyFeature.features.i18nMessages.locale-code-redirect",
"tt_ru:ru", "lzh:zhcn");
@Comment({ @Comment({
"Do you want to enable the session feature?", "Do you want to enable the session feature?",
@ -36,7 +52,8 @@ public final class PluginSettings implements SettingsHolder {
@Comment({ @Comment({
"Message language, available languages:", "Message language, available languages:",
"https://github.com/AuthMe/AuthMeReloaded/blob/master/docs/translations.md" "https://github.com/AuthMe/AuthMeReloaded/blob/master/docs/translations.md",
"Example: zhcn, en"
}) })
public static final Property<String> MESSAGES_LANGUAGE = public static final Property<String> MESSAGES_LANGUAGE =
newProperty("settings.messagesLanguage", "en"); newProperty("settings.messagesLanguage", "en");

View File

@ -58,7 +58,7 @@ public final class ProtectionSettings implements SettingsHolder {
@Comment("Kicks the player that issued a command before the defined time after the join process") @Comment("Kicks the player that issued a command before the defined time after the join process")
public static final Property<Integer> QUICK_COMMANDS_DENIED_BEFORE_MILLISECONDS = public static final Property<Integer> QUICK_COMMANDS_DENIED_BEFORE_MILLISECONDS =
newProperty("Protection.quickCommands.denyCommandsBeforeMilliseconds", 3000); newProperty("Protection.quickCommands.denyCommandsBeforeMilliseconds", 1000);
private ProtectionSettings() { private ProtectionSettings() {
} }

View File

@ -46,6 +46,16 @@ public final class RegistrationSettings implements SettingsHolder {
newProperty(RegisterSecondaryArgument.class, "settings.registration.secondArg", newProperty(RegisterSecondaryArgument.class, "settings.registration.secondArg",
RegisterSecondaryArgument.CONFIRMATION); RegisterSecondaryArgument.CONFIRMATION);
@Comment({
"Should we unregister the player when he didn't verify the email?",
"This only works if you enabled email registration."})
public static final Property<Boolean> UNREGISTER_ON_EMAIL_VERIFICATION_FAILURE =
newProperty("settings.registration.email.unregisterOnEmailVerificationFailure", false);
@Comment({"How many minutes should we wait before unregister the player",
"when he didn't verify the email?"})
public static final Property<Long> UNREGISTER_AFTER_MINUTES =
newProperty("settings.registration.email.unregisterAfterMinutes", 10L);
@Comment({ @Comment({
"Do we force kick a player after a successful registration?", "Do we force kick a player after a successful registration?",
"Do not use with login feature below"}) "Do not use with login feature below"})

View File

@ -173,7 +173,7 @@ public final class RestrictionSettings implements SettingsHolder {
@Comment("Regex syntax for allowed chars in email.") @Comment("Regex syntax for allowed chars in email.")
public static final Property<String> ALLOWED_EMAIL_REGEX = public static final Property<String> ALLOWED_EMAIL_REGEX =
newProperty("settings.restrictions.allowedEmailCharacters", "^[A-Za-z0-9_]{4,15}@(qq|outlook|163|gmail|icloud)\\.com$"); newProperty("settings.restrictions.allowedEmailCharacters", "^([a-zA-Z0-9_.+-]+)@([a-zA-Z0-9-]+)\\.([a-zA-Z]{2,})$");
@Comment("Force survival gamemode when player joins?") @Comment("Force survival gamemode when player joins?")
@ -205,6 +205,10 @@ public final class RestrictionSettings implements SettingsHolder {
public static final Property<Set<String>> UNRESTRICTED_INVENTORIES = public static final Property<Set<String>> UNRESTRICTED_INVENTORIES =
newLowercaseStringSetProperty("settings.unrestrictions.UnrestrictedInventories"); newLowercaseStringSetProperty("settings.unrestrictions.UnrestrictedInventories");
@Comment("Should we check unrestricted inventories strictly? (Original behavior)")
public static final Property<Boolean> STRICT_UNRESTRICTED_INVENTORIES_CHECK =
newProperty("settings.unrestrictions.StrictUnrestrictedInventoriesCheck", true);
private RestrictionSettings() { private RestrictionSettings() {

View File

@ -6,10 +6,8 @@ import ch.jalu.configme.properties.Property;
import fr.xephi.authme.security.HashAlgorithm; import fr.xephi.authme.security.HashAlgorithm;
import fr.xephi.authme.settings.EnumSetProperty; import fr.xephi.authme.settings.EnumSetProperty;
import java.util.List;
import java.util.Set; import java.util.Set;
import static ch.jalu.configme.properties.PropertyInitializer.newListProperty;
import static ch.jalu.configme.properties.PropertyInitializer.newLowercaseStringSetProperty; import static ch.jalu.configme.properties.PropertyInitializer.newLowercaseStringSetProperty;
import static ch.jalu.configme.properties.PropertyInitializer.newProperty; import static ch.jalu.configme.properties.PropertyInitializer.newProperty;
@ -21,11 +19,6 @@ public final class SecuritySettings implements SettingsHolder {
public static final Property<Boolean> STOP_SERVER_ON_PROBLEM = public static final Property<Boolean> STOP_SERVER_ON_PROBLEM =
newProperty("Security.SQLProblem.stopServer", false); newProperty("Security.SQLProblem.stopServer", false);
@Comment({"Should send GUI captcha by country code whitelist?",
"If the country of the player is in this list, the captcha won't be sent."})
public static final Property<List<String>> GUI_CAPTCHA_COUNTRY_WHITELIST =
newListProperty("3rdPartyFeature.features.captcha.whiteList");
@Comment({"Should we let Bedrock players login automatically?", @Comment({"Should we let Bedrock players login automatically?",
"(Requires hookFloodgate to be true & floodgate loaded)", "(Requires hookFloodgate to be true & floodgate loaded)",
"(**THIS IS SAFE DO NOT WORRY**)"}) "(**THIS IS SAFE DO NOT WORRY**)"})
@ -48,25 +41,6 @@ public final class SecuritySettings implements SettingsHolder {
public static final Property<Boolean> ADVANCED_SHULKER_FIX = public static final Property<Boolean> ADVANCED_SHULKER_FIX =
newProperty("3rdPartyFeature.fixes.advancedShulkerFix", false); newProperty("3rdPartyFeature.fixes.advancedShulkerFix", false);
@Comment({"Choose the best teleport method by server brand?",
"(Enable this if you are using Paper/Folia)"})
public static final Property<Boolean> SMART_ASYNC_TELEPORT =
newProperty("3rdPartyFeature.optimizes.smartAsyncTeleport", true);
@Comment("Send a GUI captcha to unregistered players?(Requires ProtocolLib)")
public static final Property<Boolean> GUI_CAPTCHA =
newProperty("3rdPartyFeature.features.captcha.guiCaptcha", false);
@Comment({"Should we kick the players when they don't finish the GUI captcha in seconds?",
"(less than or equals 0 is disabled)"})
public static final Property<Integer> GUI_CAPTCHA_TIMEOUT =
newProperty("3rdPartyFeature.features.captcha.timeOut", 0);
@Comment({"Should we ignore floodgate players when sending GUI captcha?",
"(Requires floodgate and hookFloodgate: true)"})
public static final Property<Boolean> GUI_CAPTCHA_BE_COMPATIBILITY =
newProperty("3rdPartyFeature.features.captcha.ignoreBedrock", false);
@Comment("Should we fix the location when players logged in the portal?") @Comment("Should we fix the location when players logged in the portal?")
public static final Property<Boolean> LOGIN_LOC_FIX_SUB_PORTAL = public static final Property<Boolean> LOGIN_LOC_FIX_SUB_PORTAL =
newProperty("3rdPartyFeature.fixes.loginLocationFix.fixPortalStuck", false); newProperty("3rdPartyFeature.fixes.loginLocationFix.fixPortalStuck", false);
@ -88,6 +62,11 @@ public final class SecuritySettings implements SettingsHolder {
public static final Property<Integer> HAVE_I_BEEN_PWNED_LIMIT = public static final Property<Integer> HAVE_I_BEEN_PWNED_LIMIT =
newProperty("Security.account.haveIBeenPwned.limit", 0); newProperty("Security.account.haveIBeenPwned.limit", 0);
@Comment({"Require email verification when changing password if email feature enabled.",
"Original behavior is true"})
public static final Property<Boolean> CHANGE_PASSWORD_EMAIL_VERIFICATION_REQUIRED =
newProperty("Security.account.emailVerification.required", true);
@Comment("Enable captcha when a player uses wrong password too many times") @Comment("Enable captcha when a player uses wrong password too many times")
public static final Property<Boolean> ENABLE_LOGIN_FAILURE_CAPTCHA = public static final Property<Boolean> ENABLE_LOGIN_FAILURE_CAPTCHA =
newProperty("Security.captcha.useCaptcha", false); newProperty("Security.captcha.useCaptcha", false);
@ -127,7 +106,7 @@ public final class SecuritySettings implements SettingsHolder {
@Comment({ @Comment({
"Possible values: SHA256, BCRYPT, BCRYPT2Y, PBKDF2, SALTEDSHA512,", "Possible values: SHA256, BCRYPT, BCRYPT2Y, PBKDF2, SALTEDSHA512,",
"MYBB, IPB3, PHPBB, PHPFUSION, SMF, XENFORO, XAUTH, JOOMLA, WBB3, WBB4, MD5VB,", "MYBB, IPB3, PHPBB, PHPFUSION, SMF, XENFORO, XAUTH, JOOMLA, WBB3, WBB4, MD5VB,",
"PBKDF2DJANGO, WORDPRESS, ROYALAUTH, ARGON2, CUSTOM (for developers only). See full list at", "PBKDF2DJANGO, WORDPRESS, ROYALAUTH, ARGON2, NOCRYPT, CUSTOM (for developers only). See full list at",
"https://github.com/AuthMe/AuthMeReloaded/blob/master/docs/hash_algorithms.md", "https://github.com/AuthMe/AuthMeReloaded/blob/master/docs/hash_algorithms.md",
"If you use ARGON2, check that you have the argon2 c library on your system" "If you use ARGON2, check that you have the argon2 c library on your system"
}) })

View File

@ -0,0 +1,72 @@
package fr.xephi.authme.task;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL;
public class Updater {
private final String currentVersion;
private String latestVersion;
private static boolean isUpdateAvailable = false;
private static final String owner = "HaHaWTH";
private static final String repo = "AuthMeReReloaded";
private static final String UPDATE_URL = "https://api.github.com/repos/" + owner + "/" + repo + "/releases/latest";
public Updater(String currentVersion) {
this.currentVersion = currentVersion;
}
/**
* Check if there is an update available
* Note: This method will perform a network request!
*
* @return true if there is an update available, false otherwise
*/
public boolean isUpdateAvailable() {
URI uri = URI.create(UPDATE_URL);
try {
URL url = uri.toURL();
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(10000);
conn.setReadTimeout(10000);
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/vnd.github+json");
try (InputStreamReader reader = new InputStreamReader(conn.getInputStream())) {
JsonObject jsonObject = new JsonParser().parse(reader).getAsJsonObject();
String latest = jsonObject.get("tag_name").getAsString();
latestVersion = latest;
isUpdateAvailable = !currentVersion.equals(latest);
reader.close();
return isUpdateAvailable;
}
} catch (IOException ignored) {
this.latestVersion = null;
isUpdateAvailable = false;
return false;
}
}
public String getLatestVersion() {
return latestVersion;
}
public String getCurrentVersion() {
return currentVersion;
}
/**
* Returns true if there is an update available, false otherwise
* Must be called after {@link Updater#isUpdateAvailable()}
*
* @return A boolean indicating whether there is an update available
*/
public static boolean hasUpdate() {
return isUpdateAvailable;
}
}

View File

@ -10,7 +10,7 @@ public final class PlayerUtils {
// Utility class // Utility class
private PlayerUtils() { private PlayerUtils() {
} }
private static final boolean IS_LEAVES_SERVER = Utils.isClassLoaded("top.leavesmc.leaves.LeavesConfig"); private static final boolean isLeavesServer = Utils.isClassLoaded("top.leavesmc.leaves.LeavesConfig") || Utils.isClassLoaded("org.leavesmc.leaves.LeavesConfig");
/** /**
* Returns the IP of the given player. * Returns the IP of the given player.
@ -29,7 +29,7 @@ public final class PlayerUtils {
* @return True if the player is an NPC, false otherwise * @return True if the player is an NPC, false otherwise
*/ */
public static boolean isNpc(Player player) { public static boolean isNpc(Player player) {
if (IS_LEAVES_SERVER) { if (isLeavesServer) {
return player.hasMetadata("NPC") || player.getAddress() == null; return player.hasMetadata("NPC") || player.getAddress() == null;
} else { } else {
return player.hasMetadata("NPC"); return player.hasMetadata("NPC");

View File

@ -3,24 +3,24 @@ package fr.xephi.authme.util;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import java.lang.reflect.InvocationTargetException; import java.lang.invoke.MethodHandle;
import java.lang.reflect.Method; import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodType;
import java.util.concurrent.CompletableFuture;
/** /**
* This class is a utility class for handling async teleportation of players in game. * This class is a utility class for handling async teleportation of players in game.
*/ */
public class TeleportUtils { public class TeleportUtils {
private static Method teleportAsyncMethod; private static MethodHandle teleportAsyncMethodHandle;
static { static {
try {//Detect Paper class try {
Class<?> paperClass = Class.forName("com.destroystokyo.paper.PaperConfig"); MethodHandles.Lookup lookup = MethodHandles.lookup();
teleportAsyncMethod = Player.class.getMethod("teleportAsync", Location.class); teleportAsyncMethodHandle = lookup.findVirtual(Player.class, "teleportAsync", MethodType.methodType(CompletableFuture.class, Location.class));
teleportAsyncMethod.setAccessible(true); } catch (NoSuchMethodException | IllegalAccessException e) {
// if detected,use teleportAsync() teleportAsyncMethodHandle = null;
} catch (ClassNotFoundException | NoSuchMethodException e) { // if not, set method handle to null
teleportAsyncMethod = null;
//if not, set method to null
} }
} }
@ -31,10 +31,10 @@ public class TeleportUtils {
* @param location Where should the player be teleported * @param location Where should the player be teleported
*/ */
public static void teleport(Player player, Location location) { public static void teleport(Player player, Location location) {
if (teleportAsyncMethod != null) { if (teleportAsyncMethodHandle != null) {
try { try {
teleportAsyncMethod.invoke(player, location); teleportAsyncMethodHandle.invoke(player, location);
} catch (IllegalAccessException | InvocationTargetException e) { } catch (Throwable throwable) {
player.teleport(location); player.teleport(location);
} }
} else { } else {

View File

@ -2,6 +2,7 @@ package fr.xephi.authme.util;
import fr.xephi.authme.ConsoleLogger; import fr.xephi.authme.ConsoleLogger;
import fr.xephi.authme.output.ConsoleLoggerFactory; import fr.xephi.authme.output.ConsoleLoggerFactory;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.command.ConsoleCommandSender; import org.bukkit.command.ConsoleCommandSender;
@ -107,4 +108,12 @@ public final class Utils {
public static boolean isEmailEmpty(String email) { public static boolean isEmailEmpty(String email) {
return StringUtils.isBlank(email) || "your@email.com".equalsIgnoreCase(email); return StringUtils.isBlank(email) || "your@email.com".equalsIgnoreCase(email);
} }
private final static String[] serverVersion = Bukkit.getServer().getBukkitVersion()
.substring(0, Bukkit.getServer().getBukkitVersion().indexOf("-"))
.split("\\.");
private final static int FIRST_VERSION = Integer.parseInt(serverVersion[0]);
public final static int MAJOR_VERSION = Integer.parseInt(serverVersion[1]);
public final static int MINOR_VERSION = serverVersion.length == 3 ? Integer.parseInt(serverVersion[2]) : 0;
} }

View File

@ -0,0 +1,102 @@
package fr.xephi.authme.util.message;
import fr.xephi.authme.settings.Settings;
import fr.xephi.authme.settings.properties.PluginSettings;
import fr.xephi.authme.util.Utils;
import org.bukkit.entity.Player;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
public class I18NUtils {
private static Map<UUID, String> PLAYER_LOCALE = new ConcurrentHashMap<>();
private static final Map<String, String> LOCALE_MAP = new HashMap<>();
private static final List<String> LOCALE_LIST = Arrays.asList(
"en", "bg", "de", "eo", "es", "et", "eu", "fi", "fr", "gl", "hu", "id", "it", "ja", "ko", "lt", "nl", "pl",
"pt", "ro", "ru", "sk", "sr", "tr", "uk"
);
static {
LOCALE_MAP.put("pt_br", "br");
LOCALE_MAP.put("cs_cz", "cz");
LOCALE_MAP.put("nds_de", "de");
LOCALE_MAP.put("sxu", "de");
LOCALE_MAP.put("swg", "de");
LOCALE_MAP.put("rpr", "ru");
LOCALE_MAP.put("sl_si", "si");
LOCALE_MAP.put("vi_vn", "vn");
LOCALE_MAP.put("lzh", "zhcn");
LOCALE_MAP.put("zh_cn", "zhcn");
LOCALE_MAP.put("zh_hk", "zhhk");
LOCALE_MAP.put("zh_tw", "zhtw");
//LOCALE_MAP.put("zhmc", "zhmc");
}
/**
* Returns the locale that player uses.
*
* @param player The player
*/
public static String getLocale(Player player) {
if (Utils.MAJOR_VERSION > 15) {
return player.getLocale().toLowerCase();
} else if (PLAYER_LOCALE.containsKey(player.getUniqueId())) {
return PLAYER_LOCALE.get(player.getUniqueId());
}
return null;
}
public static void addLocale(UUID uuid, String locale) {
if (PLAYER_LOCALE == null) {
PLAYER_LOCALE = new ConcurrentHashMap<>();
}
PLAYER_LOCALE.put(uuid, locale);
}
public static void removeLocale(UUID uuid) {
PLAYER_LOCALE.remove(uuid);
}
/**
* Returns the AuthMe messages file language code, by given locale and settings.
* Dreeam - Hard mapping, based on mc1.20.6, 5/29/2024
*
* @param locale The locale that player client setting uses.
* @param settings The AuthMe settings, for default/fallback language usage.
*/
public static String localeToCode(String locale, Settings settings) {
// Certain locale code to AuthMe language code redirect
if (!settings.getProperty(PluginSettings.I18N_CODE_REDIRECT).isEmpty()) {
for (String raw : settings.getProperty(PluginSettings.I18N_CODE_REDIRECT)) {
String[] split = raw.split(":");
if (split.length == 2 && locale.equalsIgnoreCase(split[0])) {
return split[1];
}
}
}
// Match certain locale code
if (LOCALE_MAP.containsKey(locale)) {
return LOCALE_MAP.get(locale);
}
if (locale.contains("_")) {
locale = locale.substring(0, locale.indexOf("_"));
}
// Match locale code with "_"
if (LOCALE_LIST.contains(locale)) {
return locale;
}
return settings.getProperty(PluginSettings.MESSAGES_LANGUAGE);
}
}

View File

@ -0,0 +1,22 @@
package fr.xephi.authme.util.message;
import net.kyori.adventure.text.Component;
import net.kyori.adventure.text.minimessage.MiniMessage;
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
public class MiniMessageUtils {
private static final MiniMessage miniMessage = MiniMessage.miniMessage();
/**
* Parse a MiniMessage string into a legacy string.
*
* @param message The message to parse.
* @return The parsed message.
*/
public static String parseMiniMessageToLegacy(String message) {
Component component = miniMessage.deserialize(message);
return LegacyComponentSerializer.legacyAmpersand().serialize(component);
}
private MiniMessageUtils() {
}
}

View File

@ -104,7 +104,7 @@
<td> <td>
<p style="color:#b0adc5;">© 2024 HomoCraft. All rights reserved.</p> <p style="color:#b0adc5;">© 2024 HomoCraft. All rights reserved.</p>
<a href="1919810.com" target="_blank" <a href="1919810.com" target="_blank"
style="text-decoration: none; font-size: 16px">wdsj.in</a> style="text-decoration: none; font-size: 16px">example.com</a>
</td> </td>
</tr> </tr>
</tbody> </tbody>

View File

@ -9,7 +9,7 @@ registration:
name_taken: '&cПотребителското име е заетo!' name_taken: '&cПотребителското име е заетo!'
register_request: '&3Моля регистрирайте се с: /register парола парола.' register_request: '&3Моля регистрирайте се с: /register парола парола.'
command_usage: '&cКоманда: /register парола парола' command_usage: '&cКоманда: /register парола парола'
reg_only: '&4Само регистрирани потребители могат да влизат в сървъра! Моля посетете http://example.com, за да се регистрирате!' reg_only: '&4Само регистрирани потребители могат да влизат в сървъра! Моля посетете https://example.com, за да се регистрирате!'
success: '&2Успешна регистрация!' success: '&2Успешна регистрация!'
kicked_admin_registered: 'Вие бяхте регистриран от администратора, моля да влезете отново!' kicked_admin_registered: 'Вие бяхте регистриран от администратора, моля да влезете отново!'
@ -20,6 +20,7 @@ password:
unsafe_password: '&cИзбраната парола не е безопасна, моля изберете друга парола.' unsafe_password: '&cИзбраната парола не е безопасна, моля изберете друга парола.'
forbidden_characters: '&4Паролата съдържа непозволени символи. Позволени символи: %valid_chars' forbidden_characters: '&4Паролата съдържа непозволени символи. Позволени символи: %valid_chars'
wrong_length: '&cПаролата е твърде къса или прекалено дълга! Моля опитайте с друга парола.' wrong_length: '&cПаролата е твърде къса или прекалено дълга! Моля опитайте с друга парола.'
pwned_password: '&cИзбраната парола не е сигурна. Тя е използвана %pwned_count пъти вече! Моля, използвайте силна парола...'
# Login # Login
login: login:
@ -40,7 +41,7 @@ error:
max_registration: '&cВие сте достигнали максималният брой регистрации (%reg_count/%max_acc %reg_names)!' max_registration: '&cВие сте достигнали максималният брой регистрации (%reg_count/%max_acc %reg_names)!'
logged_in: '&cВече сте влезли!' logged_in: '&cВече сте влезли!'
kick_for_vip: '&3VIP потребител влезе докато сървъра беше пълен, вие бяхте изгонен!' kick_for_vip: '&3VIP потребител влезе докато сървъра беше пълен, вие бяхте изгонен!'
# TODO kick_unresolved_hostname: '&cAn error occurred: unresolved player hostname!' kick_unresolved_hostname: '&cВъзникна грешка: неразрешено име на играч!'
tempban_max_logins: '&cВие бяхте баннат временно, понеже сте си сгрешили паролата прекалено много пъти.' tempban_max_logins: '&cВие бяхте баннат временно, понеже сте си сгрешили паролата прекалено много пъти.'
# AntiBot # AntiBot
@ -57,6 +58,7 @@ unregister:
# Other messages # Other messages
misc: misc:
account_not_activated: '&cВашият акаунт все още не е актириван, моля провете своят email адрес!' account_not_activated: '&cВашият акаунт все още не е актириван, моля провете своят email адрес!'
not_activated: '&cАкаунтът не е активиран, моля регистрирайте се и го активирайте преди да опитате отново.'
password_changed: '&2Паротала е променена успешно!' password_changed: '&2Паротала е променена успешно!'
logout: '&2Излязохте успешно!' logout: '&2Излязохте успешно!'
reload: '&2Конфигурацията и база данните бяха презаредени правилно!' reload: '&2Конфигурацията и база данните бяха презаредени правилно!'
@ -155,3 +157,17 @@ two_factor:
not_enabled_error: 'Защитата със секретен код не е включена за Вашият акаунт. Моля изпълнете команда /2fa add' not_enabled_error: 'Защитата със секретен код не е включена за Вашият акаунт. Моля изпълнете команда /2fa add'
removed_success: 'Успешно изключихте защитата със секретен код от Вашият акаунт!' removed_success: 'Успешно изключихте защитата със секретен код от Вашият акаунт!'
invalid_code: 'Невалиден код!' invalid_code: 'Невалиден код!'
# 3rd party features: Bedrock Auto Login
bedrock_auto_login:
success: '&aУспешно автоматично влизане за Bedrock!'
# 3rd party features: Login Location Fix
login_location_fix:
fix_portal: '&aЗаседнали сте в портал по време на влизане.'
fix_underground: '&aЗаседнали сте под земята по време на влизане.'
cannot_fix_underground: '&aЗаседнали сте под земята по време на влизане, но не можем да го поправим.'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&cБяхте изключени поради двойно влизане.'

View File

@ -8,13 +8,13 @@
# Registro # Registro
registration: registration:
disabled: '&cRegistrar-se está desativado neste servidor!'
name_taken: '&cVocê já registrou este nome de usuário!'
register_request: '&3Por favor, registre-se com o comando "/register <senha> <senha>"' register_request: '&3Por favor, registre-se com o comando "/register <senha> <senha>"'
command_usage: '&cUse: /register <senha> <senha>' command_usage: '&cUse: /register <senha> <senha>'
reg_only: '&4Somente usuários registrados podem entrar no servidor! Por favor visite www.seusite.com para se registrar!' reg_only: '&4Somente usuários registrados podem entrar no servidor! Por favor visite www.seusite.com para se registrar!'
success: '&2Registrado com sucesso!' success: '&2Registrado com sucesso!'
kicked_admin_registered: 'Um administrador registrou você. Por favor, faça login novamente' kicked_admin_registered: 'Um administrador registrou você. Por favor, faça login novamente'
disabled: '&cRegistrar-se está desativado neste servidor!'
name_taken: '&cVocê já registrou este nome de usuário!'
# Erros de senha ao registrar-se # Erros de senha ao registrar-se
password: password:
@ -23,6 +23,7 @@ password:
unsafe_password: '&cA senha escolhida não é segura. Por favor, escolha outra senha...' unsafe_password: '&cA senha escolhida não é segura. Por favor, escolha outra senha...'
forbidden_characters: '&Sua senha contém caracteres inválidos. Caracteres permitidos: %valid_chars' forbidden_characters: '&Sua senha contém caracteres inválidos. Caracteres permitidos: %valid_chars'
wrong_length: '&cSua senha é muito curta ou muito longa! Por favor, escolha outra senha...' wrong_length: '&cSua senha é muito curta ou muito longa! Por favor, escolha outra senha...'
pwned_password: '&cSua senha escolhida não é segura. Ela foi usada %pwned_count vezes já! Por favor, use uma senha forte...'
# Login # Login
login: login:
@ -34,17 +35,17 @@ login:
# Erros # Erros
error: error:
unregistered_user: '&cEste usuário não está registrado!'
denied_command: '&cPara utilizar este comando é necessário estar logado!' denied_command: '&cPara utilizar este comando é necessário estar logado!'
denied_chat: '&cPara utilizar o chat é necessário estar logado!' denied_chat: '&cPara utilizar o chat é necessário estar logado!'
unregistered_user: '&cEste usuário não está registrado!'
not_logged_in: '&cVocê não está logado!' not_logged_in: '&cVocê não está logado!'
tempban_max_logins: '&cVocê foi temporariamente banido por tentar fazer login muitas vezes.'
max_registration: '&cVocê excedeu o número máximo de registros (%reg_count/%max_acc %reg_names) para o seu IP!'
no_permission: '&4Você não tem permissão para executar esta ação!' no_permission: '&4Você não tem permissão para executar esta ação!'
unexpected_error: '&4Ocorreu um erro inesperado. Por favor contate um administrador!' unexpected_error: '&4Ocorreu um erro inesperado. Por favor contate um administrador!'
kick_for_vip: '&3Um jogador VIP juntou-se ao servidor enquanto ele estava cheio!' max_registration: '&cVocê excedeu o número máximo de registros (%reg_count/%max_acc %reg_names) para o seu IP!'
logged_in: '&cVocê já está logado!' logged_in: '&cVocê já está logado!'
kick_for_vip: '&3Um jogador VIP juntou-se ao servidor enquanto ele estava cheio!'
kick_unresolved_hostname: '&cErro: hostname do jogador não resolvido!' kick_unresolved_hostname: '&cErro: hostname do jogador não resolvido!'
tempban_max_logins: '&cVocê foi temporariamente banido por tentar fazer login muitas vezes.'
# AntiBot # AntiBot
antibot: antibot:
@ -59,13 +60,14 @@ unregister:
# Outras mensagens # Outras mensagens
misc: misc:
accounts_owned_self: 'Você tem %count contas:'
accounts_owned_other: 'O jogador %name tem %count contas:'
account_not_activated: '&cA sua conta ainda não está ativada. Por favor, verifique seus e-mails!' account_not_activated: '&cA sua conta ainda não está ativada. Por favor, verifique seus e-mails!'
not_activated: '&cConta não ativada, por favor registre e ative antes de tentar novamente.'
password_changed: '&2Senha alterada com sucesso!' password_changed: '&2Senha alterada com sucesso!'
logout: '&2Desconectado com sucesso!' logout: '&2Desconectado com sucesso!'
reload: '&2A configuração e o banco de dados foram recarregados corretamente!' reload: '&2A configuração e o banco de dados foram recarregados corretamente!'
usage_change_password: '&cUse: /changepassword <senhaVelha> <senhaNova>' usage_change_password: '&cUse: /changepassword <senhaVelha> <senhaNova>'
accounts_owned_self: 'Você tem %count contas:'
accounts_owned_other: 'O jogador %name tem %count contas:'
# Mensagens de sessão # Mensagens de sessão
session: session:
@ -74,36 +76,36 @@ session:
# Mensagens de erro ao entrar # Mensagens de erro ao entrar
on_join_validation: on_join_validation:
same_ip_online: 'Um jogador com o mesmo IP já está no servidor!'
same_nick_online: '&4Alguém com o mesmo nome de usuário já está jogando no servidor!'
name_length: '&4Seu nome de usuário ou é muito curto ou é muito longo!' name_length: '&4Seu nome de usuário ou é muito curto ou é muito longo!'
characters_in_name: '&4Seu nome de usuário contém caracteres inválidos. Caracteres permitidos: %valid_chars' characters_in_name: '&4Seu nome de usuário contém caracteres inválidos. Caracteres permitidos: %valid_chars'
kick_full_server: '&4O servidor está cheio, tente novamente mais tarde!'
country_banned: '&4O seu país está banido deste servidor!' country_banned: '&4O seu país está banido deste servidor!'
not_owner_error: 'Você não é o proprietário da conta. Por favor, escolha outro nome!' not_owner_error: 'Você não é o proprietário da conta. Por favor, escolha outro nome!'
kick_full_server: '&4O servidor está cheio, tente novamente mais tarde!'
same_nick_online: '&4Alguém com o mesmo nome de usuário já está jogando no servidor!'
invalid_name_case: 'Você deve entrar usando o nome de usuário %valid, não %invalid.' invalid_name_case: 'Você deve entrar usando o nome de usuário %valid, não %invalid.'
same_ip_online: 'Um jogador com o mesmo IP já está no servidor!'
quick_command: 'Você usou o comando muito rápido! Por favor, entre no servidor e aguarde antes de usar um comando novamente.' quick_command: 'Você usou o comando muito rápido! Por favor, entre no servidor e aguarde antes de usar um comando novamente.'
# E-mail # E-mail
email: email:
add_email_request: '&3Por favor, adicione seu e-mail para a sua conta com o comando "/email add <seuEmail> <seuEmail>"'
usage_email_add: '&cUse: /email add <email> <email>' usage_email_add: '&cUse: /email add <email> <email>'
usage_email_change: '&cUse: /email change <emailAntigo> <novoEmail>' usage_email_change: '&cUse: /email change <emailAntigo> <novoEmail>'
new_email_invalid: '&cE-mail novo inválido, tente novamente!' new_email_invalid: '&cE-mail novo inválido, tente novamente!'
old_email_invalid: '&cE-mail antigo inválido, tente novamente!' old_email_invalid: '&cE-mail antigo inválido, tente novamente!'
invalid: '&E-mail inválido, tente novamente!' invalid: '&E-mail inválido, tente novamente!'
added: '&2E-mail adicionado com sucesso!' added: '&2E-mail adicionado com sucesso!'
add_not_allowed: '&cAdicionar um e-mail não é permitido.'
request_confirmation: '&cPor favor, confirme o seu endereço de e-mail!' request_confirmation: '&cPor favor, confirme o seu endereço de e-mail!'
changed: '&2E-mail alterado com sucesso!' changed: '&2E-mail alterado com sucesso!'
change_not_allowed: '&cAlterar o e-mail não é permitido.'
email_show: '&2O seu endereço de e-mail atual é: &f%email' email_show: '&2O seu endereço de e-mail atual é: &f%email'
incomplete_settings: 'Erro: Nem todas as configurações necessárias estão definidas para o envio de e-mails. Entre em contato com um administrador.'
already_used: '&4O endereço de e-mail já está sendo usado'
send_failure: '&cO e-mail não pôde ser enviado, reporte isso a um administrador!'
no_email_for_account: '&2Você atualmente não têm endereço de e-mail associado a esta conta.' no_email_for_account: '&2Você atualmente não têm endereço de e-mail associado a esta conta.'
add_email_request: '&3Por favor, adicione seu e-mail para a sua conta com o comando "/email add <seuEmail> <seuEmail>"' already_used: '&4O endereço de e-mail já está sendo usado'
incomplete_settings: 'Erro: Nem todas as configurações necessárias estão definidas para o envio de e-mails. Entre em contato com um administrador.'
send_failure: '&cO e-mail não pôde ser enviado, reporte isso a um administrador!'
change_password_expired: 'Você não pode mais usar esse comando de recuperação de senha!' change_password_expired: 'Você não pode mais usar esse comando de recuperação de senha!'
email_cooldown_error: '&cUm e-mail já foi enviado, espere %time antes de enviar novamente!' email_cooldown_error: '&cUm e-mail já foi enviado, espere %time antes de enviar novamente!'
add_not_allowed: '&cAdicionar um e-mail não é permitido.'
change_not_allowed: '&cAlterar o e-mail não é permitido.'
# Recuperação de senha por e-mail # Recuperação de senha por e-mail
recovery: recovery:
@ -135,6 +137,17 @@ verification:
code_expired: '&3O seu código expirou! Execute outro comando sensível para gerar um outro código.' code_expired: '&3O seu código expirou! Execute outro comando sensível para gerar um outro código.'
email_needed: '&3Para verificar sua identidade, você precisa vincular um e-mail à sua conta!' email_needed: '&3Para verificar sua identidade, você precisa vincular um e-mail à sua conta!'
# Unidades de tempo
time:
second: 'segundo'
seconds: 'segundos'
minute: 'minuto'
minutes: 'minutos'
hour: 'hora'
hours: 'horas'
day: 'dia'
days: 'dias'
# Verificação em duas etapas # Verificação em duas etapas
two_factor: two_factor:
code_created: '&2O seu código secreto é %code. Você pode verificá-lo aqui %url' code_created: '&2O seu código secreto é %code. Você pode verificá-lo aqui %url'
@ -148,13 +161,16 @@ two_factor:
removed_success: 'Verificação em duas etapas desativada com sucesso!' removed_success: 'Verificação em duas etapas desativada com sucesso!'
invalid_code: 'Código inválido!' invalid_code: 'Código inválido!'
# Unidades de tempo # 3rd party features: Bedrock Auto Login
time: bedrock_auto_login:
second: 'segundo' success: '&aLogin automático Bedrock bem-sucedido!'
seconds: 'segundos'
minute: 'minuto' # 3rd party features: Login Location Fix
minutes: 'minutos' login_location_fix:
hour: 'hora' fix_portal: '&aVocê está preso no portal durante o login.'
hours: 'horas' fix_underground: '&aVocê está preso no subsolo durante o login.'
day: 'dia' cannot_fix_underground: '&aVocê está preso no subsolo durante o login, mas não podemos corrigir.'
days: 'dias'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&cVocê foi desconectado devido a login duplo.'

View File

@ -19,7 +19,8 @@ password:
name_in_password: '&cNemůžeš použít své jméno jako heslo, prosím, zvol si jiné heslo...' name_in_password: '&cNemůžeš použít své jméno jako heslo, prosím, zvol si jiné heslo...'
unsafe_password: '&cToto heslo není bezpečné, prosím, zvol si jiné heslo...' unsafe_password: '&cToto heslo není bezpečné, prosím, zvol si jiné heslo...'
forbidden_characters: '&4Tvoje heslo obsahuje nepovolené znaky. Přípustné znaky jsou: %valid_chars' forbidden_characters: '&4Tvoje heslo obsahuje nepovolené znaky. Přípustné znaky jsou: %valid_chars'
wrong_length: '&cTvoje heslo nedosahuje minimální délky (4).' wrong_length: '&cTvoje heslo nedosahuje minimální délky.'
pwned_password: '&cZvolené heslo není bezpečné. Bylo použito již %pwned_count krát! Prosím, použijte silné heslo...'
# Login # Login
login: login:
@ -57,6 +58,7 @@ unregister:
# Other messages # Other messages
misc: misc:
account_not_activated: '&cTvůj účet ještě není aktivovaný, zkontroluj svůj E-mail.' account_not_activated: '&cTvůj účet ještě není aktivovaný, zkontroluj svůj E-mail.'
not_activated: '&cÚčet není aktivován, prosím zaregistrujte se a aktivujte ho před dalším pokusem.'
password_changed: '&cHeslo změněno!' password_changed: '&cHeslo změněno!'
logout: '&cÚspěšně jsi se odhlásil.' logout: '&cÚspěšně jsi se odhlásil.'
reload: '&cZnovu načtení nastavení AuthMe proběhlo úspěšně.' reload: '&cZnovu načtení nastavení AuthMe proběhlo úspěšně.'
@ -155,3 +157,17 @@ two_factor:
not_enabled_error: 'Dvoufaktorové ověření není zapnuté na tvém účtu. Můžeš ho zapnout použitím příkazu /2fa add' not_enabled_error: 'Dvoufaktorové ověření není zapnuté na tvém účtu. Můžeš ho zapnout použitím příkazu /2fa add'
removed_success: 'Dvoufaktorovka byla úspěšně odebrána z tvého účtu' removed_success: 'Dvoufaktorovka byla úspěšně odebrána z tvého účtu'
invalid_code: 'Nesprávný kód!' invalid_code: 'Nesprávný kód!'
# 3rd party features: Bedrock Auto Login
bedrock_auto_login:
success: '&aAutomatické přihlášení Bedrock úspěšné!'
# 3rd party features: Login Location Fix
login_location_fix:
fix_portal: '&aPři přihlášení jste uvízli v portálu.'
fix_underground: '&aPři přihlášení jste uvízli pod zemí.'
cannot_fix_underground: '&aPři přihlášení jste uvízli pod zemí, ale nemůžeme to opravit.'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&cByli jste odpojeni kvůli dvojímu přihlášení.'

View File

@ -9,7 +9,7 @@ registration:
name_taken: '&cDieser Benutzername ist schon vergeben' name_taken: '&cDieser Benutzername ist schon vergeben'
register_request: '&3Bitte registriere dich mit "/register <passwort> <passwortBestätigen>"' register_request: '&3Bitte registriere dich mit "/register <passwort> <passwortBestätigen>"'
command_usage: '&cBenutze: /register <passwort> <passwortBestätigen>' command_usage: '&cBenutze: /register <passwort> <passwortBestätigen>'
reg_only: '&4Nur für registrierte Spieler! Bitte besuche http://example.com um dich zu registrieren.' reg_only: '&4Nur für registrierte Spieler! Bitte besuche https://example.com um dich zu registrieren.'
success: '&2Erfolgreich registriert!' success: '&2Erfolgreich registriert!'
kicked_admin_registered: 'Ein Administrator hat dich bereits registriert; bitte logge dich erneut ein.' kicked_admin_registered: 'Ein Administrator hat dich bereits registriert; bitte logge dich erneut ein.'
@ -20,6 +20,7 @@ password:
unsafe_password: '&cPasswort unsicher! Bitte wähle ein anderes.' unsafe_password: '&cPasswort unsicher! Bitte wähle ein anderes.'
forbidden_characters: '&4Dein Passwort enthält unerlaubte Zeichen. Zulässige Zeichen: %valid_chars' forbidden_characters: '&4Dein Passwort enthält unerlaubte Zeichen. Zulässige Zeichen: %valid_chars'
wrong_length: '&cDein Passwort ist zu kurz oder zu lang!' wrong_length: '&cDein Passwort ist zu kurz oder zu lang!'
pwned_password: '&cIhr gewähltes Passwort ist nicht sicher. Es wurde bereits %pwned_count Mal verwendet! Bitte verwenden Sie ein starkes Passwort...'
# Login # Login
login: login:
@ -40,7 +41,7 @@ error:
max_registration: '&cDu hast die maximale Anzahl an Accounts erreicht (%reg_count/%max_acc %reg_names).' max_registration: '&cDu hast die maximale Anzahl an Accounts erreicht (%reg_count/%max_acc %reg_names).'
logged_in: '&cBereits eingeloggt!' logged_in: '&cBereits eingeloggt!'
kick_for_vip: '&3Ein VIP-Spieler hat den vollen Server betreten!' kick_for_vip: '&3Ein VIP-Spieler hat den vollen Server betreten!'
# TODO kick_unresolved_hostname: '&cAn error occurred: unresolved player hostname!' kick_unresolved_hostname: '&cEin Fehler ist aufgetreten: nicht auflösbarer Spieler-Hostname!'
tempban_max_logins: '&cDu bist wegen zu vielen fehlgeschlagenen Login-Versuchen temporär gebannt!' tempban_max_logins: '&cDu bist wegen zu vielen fehlgeschlagenen Login-Versuchen temporär gebannt!'
# AntiBot # AntiBot
@ -57,6 +58,7 @@ unregister:
# Other messages # Other messages
misc: misc:
account_not_activated: '&cDein Account wurde noch nicht aktiviert. Bitte prüfe deine E-Mails!' account_not_activated: '&cDein Account wurde noch nicht aktiviert. Bitte prüfe deine E-Mails!'
not_activated: '&cKonto nicht aktiviert, bitte registrieren und aktivieren Sie es, bevor Sie es erneut versuchen.'
password_changed: '&2Passwort geändert!' password_changed: '&2Passwort geändert!'
logout: '&2Erfolgreich ausgeloggt' logout: '&2Erfolgreich ausgeloggt'
reload: '&2Konfiguration und Datenbank wurden erfolgreich neu geladen.' reload: '&2Konfiguration und Datenbank wurden erfolgreich neu geladen.'
@ -155,3 +157,17 @@ two_factor:
not_enabled_error: 'Die Zwei-Faktor-Authentifizierung ist für dein Konto nicht aktiviert. Benutze /2fa add' not_enabled_error: 'Die Zwei-Faktor-Authentifizierung ist für dein Konto nicht aktiviert. Benutze /2fa add'
removed_success: 'Die Zwei-Faktor-Authentifizierung wurde erfolgreich von deinem Konto entfernt' removed_success: 'Die Zwei-Faktor-Authentifizierung wurde erfolgreich von deinem Konto entfernt'
invalid_code: 'Ungültiger Code!' invalid_code: 'Ungültiger Code!'
# 3rd party features: Bedrock Auto Login
bedrock_auto_login:
success: '&aBedrock Auto-Login erfolgreich!'
# 3rd party features: Login Location Fix
login_location_fix:
fix_portal: '&aSie stecken während des Logins im Portal fest.'
fix_underground: '&aSie stecken während des Logins unter der Erde fest.'
cannot_fix_underground: '&aSie stecken während des Logins unter der Erde fest, aber wir können es nicht beheben.'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&cSie wurden wegen doppeltem Login getrennt.'

View File

@ -5,13 +5,13 @@
# Registration # Registration
registration: registration:
register_request: '&3Please, register to the server with the command: /register <password> <ConfirmPassword>'
command_usage: '&cUsage: /register <password> <ConfirmPassword>'
reg_only: '&4Only registered users can join the server! Please visit http://example.com to register yourself!'
kicked_admin_registered: 'An admin just registered you; please log in again.'
success: '&2Successfully registered!'
disabled: '&cIn-game registration is disabled!' disabled: '&cIn-game registration is disabled!'
name_taken: '&cYou already have registered this username!' name_taken: '&cYou already have registered this username!'
register_request: '&3Please, register to the server with the command: /register <password> <ConfirmPassword>'
command_usage: '&cUsage: /register <password> <ConfirmPassword>'
reg_only: '&4Only registered users can join the server! Please visit https://example.com to register yourself!'
success: '&2Successfully registered!'
kicked_admin_registered: 'An admin just registered you; please log in again.'
# Password errors on registration # Password errors on registration
password: password:
@ -32,17 +32,17 @@ login:
# Errors # Errors
error: error:
unregistered_user: '&cThis user isn''t registered!'
denied_command: '&cIn order to use this command you must be authenticated!' denied_command: '&cIn order to use this command you must be authenticated!'
denied_chat: '&cIn order to chat you must be authenticated!' denied_chat: '&cIn order to chat you must be authenticated!'
unregistered_user: '&cThis user isn''t registered!'
not_logged_in: '&cYou''re not logged in!' not_logged_in: '&cYou''re not logged in!'
tempban_max_logins: '&cYou have been temporarily banned for failing to log in too many times.'
max_registration: '&cYou have exceeded the maximum number of registrations (%reg_count/%max_acc %reg_names) for your connection!'
no_permission: '&4You don''t have the permission to perform this action!' no_permission: '&4You don''t have the permission to perform this action!'
unexpected_error: '&4An unexpected error occurred, please contact an administrator!' unexpected_error: '&4An unexpected error occurred, please contact an administrator!'
kick_for_vip: '&3A VIP player has joined the server when it was full!' max_registration: '&cYou have exceeded the maximum number of registrations (%reg_count/%max_acc %reg_names) for your connection!'
logged_in: '&cYou''re already logged in!' logged_in: '&cYou''re already logged in!'
kick_for_vip: '&3A VIP player has joined the server when it was full!'
kick_unresolved_hostname: '&cAn error occurred: unresolved player hostname!' kick_unresolved_hostname: '&cAn error occurred: unresolved player hostname!'
tempban_max_logins: '&cYou have been temporarily banned for failing to log in too many times.'
# AntiBot # AntiBot
antibot: antibot:
@ -50,19 +50,21 @@ antibot:
auto_enabled: '&4[AntiBotService] AntiBot enabled due to the huge number of connections!' auto_enabled: '&4[AntiBotService] AntiBot enabled due to the huge number of connections!'
auto_disabled: '&2[AntiBotService] AntiBot disabled after %m minutes!' auto_disabled: '&2[AntiBotService] AntiBot disabled after %m minutes!'
# Unregister
unregister: unregister:
success: '&cSuccessfully unregistered!' success: '&cSuccessfully unregistered!'
command_usage: '&cUsage: /unregister <password>' command_usage: '&cUsage: /unregister <password>'
# Other messages # Other messages
misc: misc:
accounts_owned_self: 'You own %count accounts:'
accounts_owned_other: 'The player %name has %count accounts:'
account_not_activated: '&cYour account isn''t activated yet, please check your emails!' account_not_activated: '&cYour account isn''t activated yet, please check your emails!'
not_activated: '&cAccount not activated, please register and activate it before trying again.'
password_changed: '&2Password changed successfully!' password_changed: '&2Password changed successfully!'
logout: '&2Logged out successfully!' logout: '&2Logged out successfully!'
reload: '&2Configuration and database have been reloaded correctly!' reload: '&2Configuration and database have been reloaded correctly!'
usage_change_password: '&cUsage: /changepassword <oldPassword> <newPassword>' usage_change_password: '&cUsage: /changepassword <oldPassword> <newPassword>'
accounts_owned_self: 'You own %count accounts:'
accounts_owned_other: 'The player %name has %count accounts:'
# Session messages # Session messages
session: session:
@ -71,36 +73,36 @@ session:
# Error messages when joining # Error messages when joining
on_join_validation: on_join_validation:
same_ip_online: 'A player with the same IP is already in game!'
same_nick_online: '&4The same username is already playing on the server!'
name_length: '&4Your username is either too short or too long!' name_length: '&4Your username is either too short or too long!'
characters_in_name: '&4Your username contains illegal characters. Allowed chars: %valid_chars' characters_in_name: '&4Your username contains illegal characters. Allowed chars: %valid_chars'
kick_full_server: '&4The server is full, try again later!'
country_banned: '&4Your country is banned from this server!' country_banned: '&4Your country is banned from this server!'
not_owner_error: 'You are not the owner of this account. Please choose another name!' not_owner_error: 'You are not the owner of this account. Please choose another name!'
kick_full_server: '&4The server is full, try again later!'
same_nick_online: '&4The same username is already playing on the server!'
invalid_name_case: 'You should join using username %valid, not %invalid.' invalid_name_case: 'You should join using username %valid, not %invalid.'
same_ip_online: 'A player with the same IP is already in game!'
quick_command: 'You used a command too fast! Please, join the server again and wait more before using any command.' quick_command: 'You used a command too fast! Please, join the server again and wait more before using any command.'
# Email # Email
email: email:
add_email_request: '&3Please add your email to your account with the command: /email add <yourEmail> <confirmEmail>'
usage_email_add: '&cUsage: /email add <email> <confirmEmail>' usage_email_add: '&cUsage: /email add <email> <confirmEmail>'
usage_email_change: '&cUsage: /email change <oldEmail> <newEmail>' usage_email_change: '&cUsage: /email change <oldEmail> <newEmail>'
new_email_invalid: '&cInvalid new email, try again!' new_email_invalid: '&cInvalid new email, try again!'
old_email_invalid: '&cInvalid old email, try again!' old_email_invalid: '&cInvalid old email, try again!'
invalid: '&cInvalid email address, try again!' invalid: '&cInvalid email address, try again!'
added: '&2Email address successfully added to your account!' added: '&2Email address successfully added to your account!'
add_not_allowed: '&cAdding email was not allowed.'
request_confirmation: '&cPlease confirm your email address!' request_confirmation: '&cPlease confirm your email address!'
changed: '&2Email address changed correctly!' changed: '&2Email address changed correctly!'
change_not_allowed: '&cChanging email was not allowed.'
email_show: '&2Your current email address is: &f%email' email_show: '&2Your current email address is: &f%email'
incomplete_settings: 'Error: not all required settings are set for sending emails. Please contact an admin.'
already_used: '&4The email address is already being used'
send_failure: 'The email could not be sent. Please contact an administrator.'
no_email_for_account: '&2You currently don''t have email address associated with this account.' no_email_for_account: '&2You currently don''t have email address associated with this account.'
add_email_request: '&3Please add your email to your account with the command: /email add <yourEmail> <confirmEmail>' already_used: '&4The email address is already being used'
incomplete_settings: 'Error: not all required settings are set for sending emails. Please contact an admin.'
send_failure: 'The email could not be sent. Please contact an administrator.'
change_password_expired: 'You cannot change your password using this command anymore.' change_password_expired: 'You cannot change your password using this command anymore.'
email_cooldown_error: '&cAn email was already sent recently. You must wait %time before you can send a new one.' email_cooldown_error: '&cAn email was already sent recently. You must wait %time before you can send a new one.'
add_not_allowed: '&cAdding email was not allowed.'
change_not_allowed: '&cChanging email was not allowed.'
# Password recovery by email # Password recovery by email
recovery: recovery:
@ -132,6 +134,17 @@ verification:
code_expired: '&3Your code has expired! Execute another sensitive command to get a new code!' code_expired: '&3Your code has expired! Execute another sensitive command to get a new code!'
email_needed: '&3To verify your identity you need to link an email address with your account!!' email_needed: '&3To verify your identity you need to link an email address with your account!!'
# Time units
time:
second: 'second'
seconds: 'seconds'
minute: 'minute'
minutes: 'minutes'
hour: 'hour'
hours: 'hours'
day: 'day'
days: 'days'
# Two-factor authentication # Two-factor authentication
two_factor: two_factor:
code_created: '&2Your secret code is %code. You can scan it from here %url' code_created: '&2Your secret code is %code. You can scan it from here %url'
@ -145,37 +158,15 @@ two_factor:
removed_success: 'Successfully removed two-factor auth from your account' removed_success: 'Successfully removed two-factor auth from your account'
invalid_code: 'Invalid code!' invalid_code: 'Invalid code!'
# Time units
time:
second: 'second'
seconds: 'seconds'
minute: 'minute'
minutes: 'minutes'
hour: 'hour'
hours: 'hours'
day: 'day'
days: 'days'
# 3rd party features: GUI Captcha
gui_captcha:
success: '&aVerification success!'
bedrock_auto_verify_success: '&aBedrock verification success!'
captcha_window_name: '%random Verification'
captcha_clickable_name: '%random I am human'
message_on_retry: '&cVerification failed, you have %times retries left'
denied_message_sending: '&cPlease be verified before chatting!'
kick_on_failed: '&cPlease complete the verification!'
kick_on_timeout: '&cVerification timed out!'
# 3rd party features: Bedrock Auto Login # 3rd party features: Bedrock Auto Login
bedrock_auto_login: bedrock_auto_login:
success: '&aBedrock auto login success!' success: '&aBedrock auto login success!'
# 3rd party features: Login Location Fix # 3rd party features: Login Location Fix
login_location_fix: login_location_fix:
fix_portal: '&aYou are stuck in portal during Login.' fix_portal: '&aYou are stuck in portal during login.'
fix_underground: '&aYou are stuck underground during Login.' fix_underground: '&aYou are stuck underground during login.'
cannot_fix_underground: '&aYou are stuck underground during Login, but we cant fix it.' cannot_fix_underground: '&aYou are stuck underground during login, but we cant fix it.'
# 3rd party features: Double Login Fix # 3rd party features: Double Login Fix
double_login_fix: double_login_fix:

View File

@ -9,7 +9,7 @@ registration:
name_taken: '&cVi jam registris tiun uzantnomon!' name_taken: '&cVi jam registris tiun uzantnomon!'
register_request: '&3Bonvolu registri al la servilo per la komando: /register <pasvorto> <konfirmiPasvorto>' register_request: '&3Bonvolu registri al la servilo per la komando: /register <pasvorto> <konfirmiPasvorto>'
command_usage: '&cUzado: /register <pasvorto> <konfirmiPasvorto>' command_usage: '&cUzado: /register <pasvorto> <konfirmiPasvorto>'
reg_only: '&4Nur registritaj uzantoj povas aliĝi la servilon! Bonvolu viziti http://example.com registri vin mem!' reg_only: '&4Nur registritaj uzantoj povas aliĝi la servilon! Bonvolu viziti https://example.com registri vin mem!'
success: '&2Sukcese registris!' success: '&2Sukcese registris!'
kicked_admin_registered: 'Administranto ĵus registrita vin; bonvolu ensaluti denove' kicked_admin_registered: 'Administranto ĵus registrita vin; bonvolu ensaluti denove'
@ -20,6 +20,7 @@ password:
unsafe_password: '&cLa elektita pasvorto estas danĝere, bonvolu elekti alian...' unsafe_password: '&cLa elektita pasvorto estas danĝere, bonvolu elekti alian...'
forbidden_characters: '&4Via pasvorto enhavas kontraŭleĝan karakteroj. Permesita signoj: %valid_chars' forbidden_characters: '&4Via pasvorto enhavas kontraŭleĝan karakteroj. Permesita signoj: %valid_chars'
wrong_length: '&cVia pasvorto estas tro mallonga aŭ tro longa! Bonvolu provi alian pasvorton!' wrong_length: '&cVia pasvorto estas tro mallonga aŭ tro longa! Bonvolu provi alian pasvorton!'
pwned_password: '&cVia elektita pasvorto ne estas sekura. Ĝi estis uzita %pwned_count fojojn jam! Bonvolu uzi fortan pasvorton...'
# Login # Login
login: login:
@ -40,7 +41,7 @@ error:
max_registration: 'Vi superis la maksimuman nombron de enregistroj (%reg_count/%max_acc %reg_names) pro via ligo!' max_registration: 'Vi superis la maksimuman nombron de enregistroj (%reg_count/%max_acc %reg_names) pro via ligo!'
logged_in: '&cVi jam estas ensalutinta!' logged_in: '&cVi jam estas ensalutinta!'
kick_for_vip: '&3VIP ludanto aliĝis al la servilo kiam ĝi pleniĝis!' kick_for_vip: '&3VIP ludanto aliĝis al la servilo kiam ĝi pleniĝis!'
# TODO kick_unresolved_hostname: '&cAn error occurred: unresolved player hostname!' kick_unresolved_hostname: '&cEraro okazis: neatingebla ludanta gastiga nomo!'
tempban_max_logins: '&cVi estis portempe malpermesita por ne ensaluti tro multajn fojojn.' tempban_max_logins: '&cVi estis portempe malpermesita por ne ensaluti tro multajn fojojn.'
# AntiBot # AntiBot
@ -57,6 +58,7 @@ unregister:
# Other messages # Other messages
misc: misc:
account_not_activated: '&cVia konto ne aktivigis tamen, bonvolu kontroli viajn retpoŝtojn!' account_not_activated: '&cVia konto ne aktivigis tamen, bonvolu kontroli viajn retpoŝtojn!'
not_activated: '&cKonto ne aktivigita, bonvolu registriĝi kaj aktivigi ĝin antaŭ ol provi denove.'
password_changed: '&2Pasvorto sukcese ŝanĝita!' password_changed: '&2Pasvorto sukcese ŝanĝita!'
logout: '&2Elsalutita sukcese!' logout: '&2Elsalutita sukcese!'
reload: '&2Agordo kaj datumbazo estis larditaj korekte!' reload: '&2Agordo kaj datumbazo estis larditaj korekte!'
@ -79,7 +81,7 @@ on_join_validation:
country_banned: '&4Via lando estas malpermesitaj de tiu servilo!' country_banned: '&4Via lando estas malpermesitaj de tiu servilo!'
not_owner_error: 'Vi ne estas la posedanto de tiu konto. Bonvolu elekti alian nomon!' not_owner_error: 'Vi ne estas la posedanto de tiu konto. Bonvolu elekti alian nomon!'
invalid_name_case: 'Vi devus aliĝi uzante uzantnomon %valid, ne %invalid.' invalid_name_case: 'Vi devus aliĝi uzante uzantnomon %valid, ne %invalid.'
# TODO quick_command: 'You used a command too fast! Please, join the server again and wait more before using any command.' quick_command: 'Vi uzis komandon tro rapide! Bonvolu, re-aliĝi al la servilo kaj atendi pli longe antaŭ ol uzi iun ajn komandon.'
# Email # Email
email: email:
@ -90,10 +92,10 @@ email:
old_email_invalid: '&cNevalida malnovaj retpoŝto, provu denove!' old_email_invalid: '&cNevalida malnovaj retpoŝto, provu denove!'
invalid: '&cNevalida retadreso, provu denove!' invalid: '&cNevalida retadreso, provu denove!'
added: '&2Retpoŝtadreso sukcese aldonitaj al via konto!' added: '&2Retpoŝtadreso sukcese aldonitaj al via konto!'
# TODO add_not_allowed: '&cAdding email was not allowed' add_not_allowed: '&cAldoni retpoŝton ne estis permesita.'
request_confirmation: '&cBonvolu konfirmi vian retadreson!' request_confirmation: '&cBonvolu konfirmi vian retadreson!'
changed: '&2Retpoŝtadreso ŝanĝis ĝuste!' changed: '&2Retpoŝtadreso ŝanĝis ĝuste!'
# TODO change_not_allowed: '&cChanging email was not allowed' change_not_allowed: '&cŜanĝi retpoŝton ne estis permesita.'
email_show: '&2Via nuna retadreso estas: &f%email' email_show: '&2Via nuna retadreso estas: &f%email'
no_email_for_account: '&2Vi aktuale ne havas retadreson asociita kun ĉi tiu konto.' no_email_for_account: '&2Vi aktuale ne havas retadreson asociita kun ĉi tiu konto.'
already_used: '&4La retpoŝto jam estas uzata' already_used: '&4La retpoŝto jam estas uzata'
@ -119,18 +121,18 @@ captcha:
usage_captcha: '&3Ensaluti vi devas solvi captcha kodo, bonvolu uzi la komando: /captcha %captcha_code' usage_captcha: '&3Ensaluti vi devas solvi captcha kodo, bonvolu uzi la komando: /captcha %captcha_code'
wrong_captcha: '&cMalĝusta captcha, bonvolu tajpi "/captcha %captcha_code" en la babilejo!' wrong_captcha: '&cMalĝusta captcha, bonvolu tajpi "/captcha %captcha_code" en la babilejo!'
valid_captcha: '&2Captcha kodo solvita ĝuste!' valid_captcha: '&2Captcha kodo solvita ĝuste!'
# TODO captcha_for_registration: 'To register you have to solve a captcha first, please use the command: /captcha %captcha_code' captcha_for_registration: 'Por registri vi devas unue solvi kapĉon, bonvolu uzi la komandon: /captcha %captcha_code'
# TODO register_captcha_valid: '&2Valid captcha! You may now register with /register' register_captcha_valid: '&2Valida kapĉo! Vi nun povas registri per /register'
# Verification code # Verification code
verification: verification:
# TODO code_required: '&3This command is sensitive and requires an email verification! Check your inbox and follow the email''s instructions.' code_required: '&3Tiu ĉi komando estas sentema kaj postulas retpoŝtan kontrolon! Kontrolu vian leterkeston kaj sekvu la instrukciojn en la retpoŝto.'
# TODO command_usage: '&cUsage: /verification <code>' command_usage: '&cUzado: /verification <code>'
# TODO incorrect_code: '&cIncorrect code, please type "/verification <code>" into the chat, using the code you received by email' incorrect_code: '&cMalĝusta kodo, bonvolu tajpi "/verification <code>" en la babilejo, uzante la kodon, kiun vi ricevis per retpoŝto'
# TODO success: '&2Your identity has been verified! You can now execute all commands within the current session!' success: '&2Via identeco estis kontrolita! Vi nun povas ekzekuti ĉiujn komandojn dum la aktuala sesio!'
# TODO already_verified: '&2You can already execute every sensitive command within the current session!' already_verified: '&2Vi jam povas ekzekuti ĉiujn sentemajn komandojn dum la aktuala sesio!'
# TODO code_expired: '&3Your code has expired! Execute another sensitive command to get a new code!' code_expired: '&3Via kodo eksvalidiĝis! Ekzekutu alian senteman komandon por ricevi novan kodon!'
# TODO email_needed: '&3To verify your identity you need to link an email address with your account!!' email_needed: '&3Por kontroli vian identecon vi devas ligi retpoŝtan adreson kun via konto!'
# Time units # Time units
time: time:
@ -146,12 +148,26 @@ time:
# Two-factor authentication # Two-factor authentication
two_factor: two_factor:
code_created: '&2Via sekreta kodo estas %code. Vi povas skani ĝin de tie %url' code_created: '&2Via sekreta kodo estas %code. Vi povas skani ĝin de tie %url'
# TODO confirmation_required: 'Please confirm your code with /2fa confirm <code>' confirmation_required: 'Bonvolu konfirmi vian kodon per /2fa confirm <code>'
# TODO code_required: 'Please submit your two-factor authentication code with /2fa code <code>' code_required: 'Bonvolu sendi vian du-faktoran aŭtentikigan kodon per /2fa code <code>'
# TODO already_enabled: 'Two-factor authentication is already enabled for your account!' already_enabled: 'Du-faktora aŭtentikigo jam estas ebligita por via konto!'
# TODO enable_error_no_code: 'No 2fa key has been generated for you or it has expired. Please run /2fa add' enable_error_no_code: 'Neniu 2fa ŝlosilo estis generita por vi aŭ ĝi eksvalidiĝis. Bonvolu kuri /2fa add'
# TODO enable_success: 'Successfully enabled two-factor authentication for your account' enable_success: 'Sukcese ebligis du-faktoran aŭtentikigon por via konto'
# TODO enable_error_wrong_code: 'Wrong code or code has expired. Please run /2fa add' enable_error_wrong_code: 'Malĝusta kodo aŭ kodo eksvalidiĝis. Bonvolu kuri /2fa add'
# TODO not_enabled_error: 'Two-factor authentication is not enabled for your account. Run /2fa add' not_enabled_error: 'Du-faktora aŭtentikigo ne estas ebligita por via konto. Kuru /2fa add'
# TODO removed_success: 'Successfully removed two-factor auth from your account' removed_success: 'Sukcese forigis du-faktoran aŭtentikigon de via konto'
# TODO invalid_code: 'Invalid code!' invalid_code: 'Nevalida kodo!'
# 3rd party features: Bedrock Auto Login
bedrock_auto_login:
success: '&aSukcesa Bedrock-aŭtomata ensaluto!'
# 3rd party features: Login Location Fix
login_location_fix:
fix_portal: '&aVi estas blokita en portalo dum ensaluto.'
fix_underground: '&aVi estas blokita subtere dum ensaluto.'
cannot_fix_underground: '&aVi estas blokita subtere dum ensaluto, sed ni ne povas ripari ĝin.'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&cVi estis malkonektita pro duobla ensaluto.'

View File

@ -10,7 +10,7 @@ registration:
name_taken: '&cUsuario ya registrado' name_taken: '&cUsuario ya registrado'
register_request: '&cPor favor, regístrate con "/register <contraseña> <confirmarContraseña">' register_request: '&cPor favor, regístrate con "/register <contraseña> <confirmarContraseña">'
command_usage: '&cUso: /register Contraseña ConfirmarContraseña' command_usage: '&cUso: /register Contraseña ConfirmarContraseña'
reg_only: '&f¡Sólo para jugadores registrados! Por favor visita http://www.example.com/ para registrarte' reg_only: '&f¡Sólo para jugadores registrados! Por favor visita https://www.example.com/ para registrarte'
success: '&c¡Registrado correctamente!' success: '&c¡Registrado correctamente!'
kicked_admin_registered: 'Un administrador te acaba de registrar; entra en la cuenta de nuevo' kicked_admin_registered: 'Un administrador te acaba de registrar; entra en la cuenta de nuevo'
@ -21,6 +21,7 @@ password:
unsafe_password: '&cLa contraseña elegida no es segura, por favor elija otra...' unsafe_password: '&cLa contraseña elegida no es segura, por favor elija otra...'
forbidden_characters: '&cTu contraseña tiene carácteres no admitidos, los cuales son: %valid_chars' forbidden_characters: '&cTu contraseña tiene carácteres no admitidos, los cuales son: %valid_chars'
wrong_length: '&fTu contraseña es muy larga o muy corta' wrong_length: '&fTu contraseña es muy larga o muy corta'
pwned_password: '&cLa contraseña elegida no es segura. ¡Se ha usado %pwned_count veces ya! Por favor, use una contraseña fuerte...'
# Login # Login
login: login:
@ -41,7 +42,7 @@ error:
max_registration: '&fHas excedido la cantidad máxima de registros para tu cuenta' max_registration: '&fHas excedido la cantidad máxima de registros para tu cuenta'
logged_in: '&c¡Ya has iniciado sesión!' logged_in: '&c¡Ya has iniciado sesión!'
kick_for_vip: '&c¡Un jugador VIP ha ingresado al servidor lleno!' kick_for_vip: '&c¡Un jugador VIP ha ingresado al servidor lleno!'
# TODO kick_unresolved_hostname: '&cAn error occurred: unresolved player hostname!' kick_unresolved_hostname: '&cSe produjo un error: nombre de host del jugador no resuelto!'
tempban_max_logins: '&cHas sido expulsado temporalmente por intentar iniciar sesión demasiadas veces.' tempban_max_logins: '&cHas sido expulsado temporalmente por intentar iniciar sesión demasiadas veces.'
# AntiBot # AntiBot
@ -58,6 +59,7 @@ unregister:
# Other messages # Other messages
misc: misc:
account_not_activated: '&fTu cuenta no está activada aún, ¡revisa tu correo!' account_not_activated: '&fTu cuenta no está activada aún, ¡revisa tu correo!'
not_activated: '&cCuenta no activada, por favor regístrese y actívela antes de intentarlo de nuevo.'
password_changed: '&c¡Contraseña cambiada!' password_changed: '&c¡Contraseña cambiada!'
logout: '&cDesconectado correctamente.' logout: '&cDesconectado correctamente.'
reload: '&fLa configuración y la base de datos han sido recargados' reload: '&fLa configuración y la base de datos han sido recargados'
@ -156,3 +158,17 @@ two_factor:
not_enabled_error: 'La autenticación de dos factores no está habilitada para tu cuenta. Por favor usa /2fa add' not_enabled_error: 'La autenticación de dos factores no está habilitada para tu cuenta. Por favor usa /2fa add'
removed_success: 'Se ha eliminado correctamente la autenticación de dos factores de tu cuenta' removed_success: 'Se ha eliminado correctamente la autenticación de dos factores de tu cuenta'
invalid_code: '¡Código incorrecto!' invalid_code: '¡Código incorrecto!'
# 3rd party features: Bedrock Auto Login
bedrock_auto_login:
success: '&a¡Inicio de sesión automático de Bedrock exitoso!'
# 3rd party features: Login Location Fix
login_location_fix:
fix_portal: '&aEstás atascado en el portal durante el inicio de sesión.'
fix_underground: '&aEstás atascado bajo tierra durante el inicio de sesión.'
cannot_fix_underground: '&aEstás atascado bajo tierra durante el inicio de sesión, pero no podemos solucionarlo.'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&cHas sido desconectado debido a un inicio de sesión doble.'

View File

@ -5,13 +5,13 @@
# Registration # Registration
registration: registration:
register_request: '&3Palun registreeri käsklusega: /register <parool> <KinnitaParool>'
command_usage: '&cKasutus: /register <parool> <KinnitaParool>'
reg_only: '&4Vaid registreeritud mängijad saavad serveriga liituda! Enda kasutaja registreerimiseks külasta http://example.com!'
kicked_admin_registered: 'Administraator registreeris su kasutaja, palun logi uuesti sisse.'
success: '&2Edukalt registreeritud!'
disabled: '&cMängusisene registreerimine on välja lülitatud!' disabled: '&cMängusisene registreerimine on välja lülitatud!'
name_taken: '&cSee kasutaja on juba registreeritud!' name_taken: '&cSee kasutaja on juba registreeritud!'
register_request: '&3Palun registreeri käsklusega: /register <parool> <KinnitaParool>'
command_usage: '&cKasutus: /register <parool> <KinnitaParool>'
reg_only: '&4Vaid registreeritud mängijad saavad serveriga liituda! Enda kasutaja registreerimiseks külasta https://example.com!'
success: '&2Edukalt registreeritud!'
kicked_admin_registered: 'Administraator registreeris su kasutaja, palun logi uuesti sisse.'
# Password errors on registration # Password errors on registration
password: password:
@ -20,6 +20,7 @@ password:
unsafe_password: '&cSee parool ei ole turvaline, palun vali mõni teine parool.' unsafe_password: '&cSee parool ei ole turvaline, palun vali mõni teine parool.'
forbidden_characters: '&4Sinu parool sisaldab keelatud tähemärke. Lubatud tähemärgid: %valid_chars' forbidden_characters: '&4Sinu parool sisaldab keelatud tähemärke. Lubatud tähemärgid: %valid_chars'
wrong_length: '&cSinu parool on liiga pikk või lühike, palun vali mõni teine parool.' wrong_length: '&cSinu parool on liiga pikk või lühike, palun vali mõni teine parool.'
pwned_password: '&cTeie valitud parool ei ole turvaline. Seda on kasutatud juba %pwned_count korda! Palun kasutage tugevat parooli...'
# Login # Login
login: login:
@ -31,17 +32,17 @@ login:
# Errors # Errors
error: error:
unregistered_user: '&cSee kasutaja ei ole registreeritud!'
denied_command: '&cSelle käskluse kasutamiseks pead olema sisselogitud!' denied_command: '&cSelle käskluse kasutamiseks pead olema sisselogitud!'
denied_chat: '&cVestlemiseks pead olema sisselogitud!' denied_chat: '&cVestlemiseks pead olema sisselogitud!'
unregistered_user: '&cSee kasutaja ei ole registreeritud!'
not_logged_in: '&cSa ei ole sisselogitud!' not_logged_in: '&cSa ei ole sisselogitud!'
tempban_max_logins: '&cSind on ajutiselt serverist blokeeritud, kuna sisestasid mitu korda vale parooli.'
max_registration: '&cSinu IP-aadressile on registreeritud liiga palju kasutajaid! (%reg_count/%max_acc %reg_names)'
no_permission: '&4Sul puudub selle käskluse kasutamiseks luba.' no_permission: '&4Sul puudub selle käskluse kasutamiseks luba.'
unexpected_error: '&4Esines ootamatu tõrge, palun teavita administraatorit!' unexpected_error: '&4Esines ootamatu tõrge, palun teavita administraatorit!'
kick_for_vip: '&3VIP-mängija liitus serveriga ajal, mil see oli täis!' max_registration: '&cSinu IP-aadressile on registreeritud liiga palju kasutajaid! (%reg_count/%max_acc %reg_names)'
logged_in: '&cSa oled juba sisselogitud!' logged_in: '&cSa oled juba sisselogitud!'
kick_for_vip: '&3VIP-mängija liitus serveriga ajal, mil see oli täis!'
kick_unresolved_hostname: '&cEsines tõrge: mängija hostinimi on lahendamata!' kick_unresolved_hostname: '&cEsines tõrge: mängija hostinimi on lahendamata!'
tempban_max_logins: '&cSind on ajutiselt serverist blokeeritud, kuna sisestasid mitu korda vale parooli.'
# AntiBot # AntiBot
antibot: antibot:
@ -49,57 +50,59 @@ antibot:
auto_enabled: '&4[AntiBotTeenus] AntiBot sisselülitatud!' auto_enabled: '&4[AntiBotTeenus] AntiBot sisselülitatud!'
auto_disabled: '&2[AntiBotTeenus] AntiBot välja lülitatud peale %m minutit!' auto_disabled: '&2[AntiBotTeenus] AntiBot välja lülitatud peale %m minutit!'
# Unregister
unregister: unregister:
success: '&cKasutaja edukalt kustutatud!' success: '&cKasutaja edukalt kustutatud!'
command_usage: '&cKasutus: /unregister <parool>' command_usage: '&cKasutus: /unregister <parool>'
# Other messages # Other messages
misc: misc:
accounts_owned_self: 'Sa omad %count kontot:'
accounts_owned_other: 'Mängijal %name on %count kontot:'
account_not_activated: '&cSinu konto ei ole veel aktiveeritud, kontrolli oma meili!' account_not_activated: '&cSinu konto ei ole veel aktiveeritud, kontrolli oma meili!'
not_activated: '&cKonto ei ole aktiveeritud, palun registreerige ja aktiveerige see enne uuesti proovimist.'
password_changed: '&2Parool edukalt vahetatud!' password_changed: '&2Parool edukalt vahetatud!'
logout: '&2Edukalt välja logitud!' logout: '&2Edukalt välja logitud!'
reload: '&2Seadistused ning andmebaas on edukalt taaslaaditud!' reload: '&2Seadistused ning andmebaas on edukalt taaslaaditud!'
usage_change_password: '&cKasutus: /changepassword <vanaParool> <uusParool>' usage_change_password: '&cKasutus: /changepassword <vanaParool> <uusParool>'
accounts_owned_self: 'Sa omad %count kontot:'
accounts_owned_other: 'Mängijal %name on %count kontot:'
# Session messages # Session messages
session: session:
invalid_session: '&cSinu IP-aadress muutus, seega sinu sessioon aegus!'
valid_session: '&2Sisse logitud sessiooni jätkumise tõttu.' valid_session: '&2Sisse logitud sessiooni jätkumise tõttu.'
invalid_session: '&cSinu IP-aadress muutus, seega sinu sessioon aegus!'
# Error messages when joining # Error messages when joining
on_join_validation: on_join_validation:
same_ip_online: 'Sama IP-aadressiga mängija juba mängib!'
same_nick_online: '&4Sama kasutaja on juba serveriga ühendatud!'
name_length: '&4Sinu kasutajanimi on liiga pikk või liiga lühike!' name_length: '&4Sinu kasutajanimi on liiga pikk või liiga lühike!'
characters_in_name: '&4Sinu kasutajanimi sisaldab keelatud tähemärke. Lubatud tähemärgid: %valid_chars' characters_in_name: '&4Sinu kasutajanimi sisaldab keelatud tähemärke. Lubatud tähemärgid: %valid_chars'
country_banned: '&4Sinu riigist ei ole võimalik sellesse serverisse ühenduda!' country_banned: '&4Sinu riigist ei ole võimalik sellesse serverisse ühenduda!'
not_owner_error: 'Sa ei ole selle konto omanik. Vali teine nimi!' not_owner_error: 'Sa ei ole selle konto omanik. Vali teine nimi!'
kick_full_server: '&4Server on täis, proovi hiljem uuesti!' kick_full_server: '&4Server on täis, proovi hiljem uuesti!'
same_nick_online: '&4Sama kasutaja on juba serveriga ühendatud!'
invalid_name_case: 'Sa peaksid liituma nimega %valid, mitte nimega %invalid.' invalid_name_case: 'Sa peaksid liituma nimega %valid, mitte nimega %invalid.'
same_ip_online: 'Sama IP-aadressiga mängija juba mängib!'
quick_command: 'Sa kasutasid käsklust liiga kiiresti! Palun liitu serveriga uuesti ning oota enne mõne käskluse kasutamist kauem.' quick_command: 'Sa kasutasid käsklust liiga kiiresti! Palun liitu serveriga uuesti ning oota enne mõne käskluse kasutamist kauem.'
# Email # Email
email: email:
add_email_request: '&3Palun seo oma kasutajaga meiliaadress kasutades käsklust: /email add <sinuEmail> <kinnitaEmail>'
usage_email_add: '&cKasutus: /email add <email> <kinnitaEmail>' usage_email_add: '&cKasutus: /email add <email> <kinnitaEmail>'
usage_email_change: '&cKasutus: /email change <vanaEmail> <uusEmail>' usage_email_change: '&cKasutus: /email change <vanaEmail> <uusEmail>'
new_email_invalid: '&cUus meiliaadress on sobimatu, proovi uuesti!' new_email_invalid: '&cUus meiliaadress on sobimatu, proovi uuesti!'
old_email_invalid: '&cVana meiliaadress on sobimatu, proovi uuesti!' old_email_invalid: '&cVana meiliaadress on sobimatu, proovi uuesti!'
invalid: '&cSobimatu meiliaadress, proovi uuesti!' invalid: '&cSobimatu meiliaadress, proovi uuesti!'
added: '&2Meiliaadress edukalt lisatud!' added: '&2Meiliaadress edukalt lisatud!'
add_not_allowed: '&cMeiliaadressi lisamine ei ole lubatud.'
request_confirmation: '&cPalun kinnita oma meiliaadress!' request_confirmation: '&cPalun kinnita oma meiliaadress!'
changed: '&2Meiliaadress edukalt muudetud!' changed: '&2Meiliaadress edukalt muudetud!'
change_not_allowed: '&cMeiliaadressi muutmine ei ole lubatud.'
email_show: '&2Sinu praegune meiliaadress on: &f%email' email_show: '&2Sinu praegune meiliaadress on: &f%email'
incomplete_settings: 'Viga: meili saatmiseks pole kõik vajalikud seaded seadistatud. Teata sellest administraatorit.'
already_used: '&4See meiliaadress on juba kasutuses!'
send_failure: 'Meili ei õnnestunud saata. Teata sellest administraatorit.'
no_email_for_account: '&2Selle kasutajaga ei ole seotud ühtegi meiliaadressi.' no_email_for_account: '&2Selle kasutajaga ei ole seotud ühtegi meiliaadressi.'
add_email_request: '&3Palun seo oma kasutajaga meiliaadress kasutades käsklust: /email add <sinuEmail> <kinnitaEmail>' already_used: '&4See meiliaadress on juba kasutuses!'
incomplete_settings: 'Viga: meili saatmiseks pole kõik vajalikud seaded seadistatud. Teata sellest administraatorit.'
send_failure: 'Meili ei õnnestunud saata. Teata sellest administraatorit.'
change_password_expired: 'Selle käsklusega ei saa sa enam parooli muuta.' change_password_expired: 'Selle käsklusega ei saa sa enam parooli muuta.'
email_cooldown_error: '&cMeil on juba saadetud. Sa pead ootama %time enne kui saad küsida uue saatmist.' email_cooldown_error: '&cMeil on juba saadetud. Sa pead ootama %time enne kui saad küsida uue saatmist.'
add_not_allowed: '&cMeiliaadressi lisamine ei ole lubatud.'
change_not_allowed: '&cMeiliaadressi muutmine ei ole lubatud.'
# Password recovery by email # Password recovery by email
recovery: recovery:
@ -131,6 +134,17 @@ verification:
code_expired: '&3Kood on aegunud! Kasuta mõnda ohtlikku käsklust, et saada uus kood!' code_expired: '&3Kood on aegunud! Kasuta mõnda ohtlikku käsklust, et saada uus kood!'
email_needed: '&3Konto kinnitamiseks pead siduma oma kontoga enda meiliaadressi!' email_needed: '&3Konto kinnitamiseks pead siduma oma kontoga enda meiliaadressi!'
# Time units
time:
second: 'sekund'
seconds: 'sekundit'
minute: 'minut'
minutes: 'minutit'
hour: 'tund'
hours: 'tundi'
day: 'päev'
days: 'päeva'
# Two-factor authentication # Two-factor authentication
two_factor: two_factor:
code_created: '&2Sinu privaatne kood on %code. Sa saad selle skännida aadressil %url' code_created: '&2Sinu privaatne kood on %code. Sa saad selle skännida aadressil %url'
@ -144,13 +158,16 @@ two_factor:
removed_success: 'Sinu kontolt on edukalt eemaldatud kaheastmeline autentimine.' removed_success: 'Sinu kontolt on edukalt eemaldatud kaheastmeline autentimine.'
invalid_code: 'Vale kood!' invalid_code: 'Vale kood!'
# Time units # 3rd party features: Bedrock Auto Login
time: bedrock_auto_login:
second: 'sekund' success: '&aBedrocki automaatne sisselogimine õnnestus!'
seconds: 'sekundit'
minute: 'minut' # 3rd party features: Login Location Fix
minutes: 'minutit' login_location_fix:
hour: 'tund' fix_portal: '&aOlete sisselogimise ajal portaalis kinni.'
hours: 'tundi' fix_underground: '&aOlete sisselogimise ajal maa all kinni.'
day: 'päev' cannot_fix_underground: '&aOlete sisselogimise ajal maa all kinni, kuid me ei saa seda parandada.'
days: 'päeva'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&cTeid on ühendatud lahti kahekordse sisselogimise tõttu.'

View File

@ -20,6 +20,7 @@ password:
unsafe_password: '&cAukeratutako pasahitza ez da segurua.Mesedez, aukeratu beste bat...' unsafe_password: '&cAukeratutako pasahitza ez da segurua.Mesedez, aukeratu beste bat...'
forbidden_characters: '&4Pasahitzak ondorengo karaktereak bakarrik izan ditzake: %valid_chars' forbidden_characters: '&4Pasahitzak ondorengo karaktereak bakarrik izan ditzake: %valid_chars'
wrong_length: '&fZure pasahitza motzegia edo luzeegia da' wrong_length: '&fZure pasahitza motzegia edo luzeegia da'
pwned_password: '&cAukeratutako pasahitza ez da segurua. %pwned_count aldiz erabili da dagoeneko! Mesedez, erabili pasahitz sendo bat...'
# Login # Login
login: login:
@ -57,6 +58,7 @@ unregister:
# Other messages # Other messages
misc: misc:
account_not_activated: '&fZure kontua aktibatu gabe dago. Mesedez, berretsi zure posta elektronikoa!' account_not_activated: '&fZure kontua aktibatu gabe dago. Mesedez, berretsi zure posta elektronikoa!'
not_activated: '&cKontua ez dago aktibatuta, mesedez erregistratu eta aktibatu berriro saiatu aurretik.'
password_changed: '&cPasahitza ondo aldatu duzu!' password_changed: '&cPasahitza ondo aldatu duzu!'
logout: '&cSaioa itxi duzu' logout: '&cSaioa itxi duzu'
reload: '&fEzarpenak eta datu-basea berrabiarazi dira' reload: '&fEzarpenak eta datu-basea berrabiarazi dira'
@ -155,3 +157,17 @@ two_factor:
not_enabled_error: 'Ez duzu 2 faktore autentikazioa konfiguratu. Erabaili /2fa add' not_enabled_error: 'Ez duzu 2 faktore autentikazioa konfiguratu. Erabaili /2fa add'
removed_success: '2 faktoreko autentikazioa desaktibatu duzu' removed_success: '2 faktoreko autentikazioa desaktibatu duzu'
invalid_code: 'Kode okerra!' invalid_code: 'Kode okerra!'
# 3rd party features: Bedrock Auto Login
bedrock_auto_login:
success: '&aBedrock automatikoki saioa hasi da!'
# 3rd party features: Login Location Fix
login_location_fix:
fix_portal: '&aPortal batean trabatuta zaude saioa hasten ari zarela.'
fix_underground: '&aLur azpian trabatuta zaude saioa hasten ari zarela.'
cannot_fix_underground: '&aLur azpian trabatuta zaude saioa hasten ari zarela, baina ezin dugu konpondu.'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&cSistematik kanporatu zaitugu saio bikoitza egiteagatik.'

View File

@ -9,17 +9,18 @@ registration:
name_taken: '&cPelaaja on jo rekisteröity' name_taken: '&cPelaaja on jo rekisteröity'
register_request: '&cRekisteröidy palvelimellemme komennolla "/register <salasana> <salasana>"' register_request: '&cRekisteröidy palvelimellemme komennolla "/register <salasana> <salasana>"'
command_usage: '&cKäyttötapa: /register <salasana> <salasana>' command_usage: '&cKäyttötapa: /register <salasana> <salasana>'
reg_only: '&fMene sivustolle: http://example.com rekisteröityäksesi!' reg_only: '&fMene sivustolle: https://example.com rekisteröityäksesi!'
success: '&cRekisteröidyit onnistuneesti!' success: '&cRekisteröidyit onnistuneesti!'
# TODO kicked_admin_registered: 'An admin just registered you; please log in again' kicked_admin_registered: 'Ylläpitäjä rekisteröi sinut juuri; kirjaudu sisään uudelleen.'
# Password errors on registration # Password errors on registration
password: password:
match_error: '&fSalasanat ei täsmää' match_error: '&fSalasanat ei täsmää'
# TODO name_in_password: '&cYou can''t use your name as password, please choose another one...' name_in_password: '&cEt voi käyttää nimeäsi salasanana, valitse toinen...'
# TODO unsafe_password: '&cThe chosen password isn''t safe, please choose another one...' unsafe_password: '&cValitsemasi salasana ei ole turvallinen, valitse toinen...'
# TODO forbidden_characters: '&4Your password contains illegal characters. Allowed chars: %valid_chars' forbidden_characters: '&4Salasanassasi on kiellettyjä merkkejä. Sallitut merkit: %valid_chars'
wrong_length: '&fSalasanasi on liian pitkä tai lyhyt.' wrong_length: '&fSalasanasi on liian pitkä tai lyhyt.'
pwned_password: '&cValitsemasi salasana ei ole turvallinen. Sitä on käytetty %pwned_count kertaa jo! Käytä vahvaa salasanaa...'
# Login # Login
login: login:
@ -31,8 +32,8 @@ login:
# Errors # Errors
error: error:
# TODO denied_command: '&cIn order to use this command you must be authenticated!' denied_command: '&cSinun on oltava todennettu käyttääksesi tätä komentoa!'
# TODO denied_chat: '&cIn order to chat you must be authenticated!' denied_chat: '&cSinun on oltava todennettu voidaksesi chattailla!'
unregistered_user: '&cSalasanat eivät täsmää' unregistered_user: '&cSalasanat eivät täsmää'
not_logged_in: '&cEt ole kirjautunut sisään!' not_logged_in: '&cEt ole kirjautunut sisään!'
no_permission: '&cEi oikeuksia' no_permission: '&cEi oikeuksia'
@ -40,14 +41,14 @@ error:
max_registration: '&fSinulla ei ole oikeuksia tehdä enempää pelaajatilejä!' max_registration: '&fSinulla ei ole oikeuksia tehdä enempää pelaajatilejä!'
logged_in: '&cOlet jo kirjautunut!' logged_in: '&cOlet jo kirjautunut!'
kick_for_vip: '&cVIP pelaaja liittyi täyteen palvelimeen!' kick_for_vip: '&cVIP pelaaja liittyi täyteen palvelimeen!'
# TODO kick_unresolved_hostname: '&cAn error occurred: unresolved player hostname!' kick_unresolved_hostname: '&cTapahtui virhe: pelaajan verkkonimiä ei voitu ratkaista!'
# TODO tempban_max_logins: '&cYou have been temporarily banned for failing to log in too many times.' tempban_max_logins: '&cSinut on tilapäisesti kielletty liian monen kirjautumisen epäonnistumisen vuoksi.'
# AntiBot # AntiBot
antibot: antibot:
# TODO kick_antibot: 'AntiBot protection mode is enabled! You have to wait some minutes before joining the server.' kick_antibot: 'Antibot-suojatila on käytössä! Sinun on odotettava muutama minuutti ennen kuin voit liittyä palvelimelle.'
# TODO auto_enabled: '&4[AntiBotService] AntiBot enabled due to the huge number of connections!' auto_enabled: '&4[AntiBotService] Antibot otettu käyttöön suuren yhteyksien määrän vuoksi!'
# TODO auto_disabled: '&2[AntiBotService] AntiBot disabled after %m minutes!' auto_disabled: '&2[AntiBotService] Antibot poistettu käytöstä %m minuutin kuluttua!'
# Unregister # Unregister
unregister: unregister:
@ -57,12 +58,13 @@ unregister:
# Other messages # Other messages
misc: misc:
account_not_activated: '&fKäyttäjäsi ei ole vahvistettu!' account_not_activated: '&fKäyttäjäsi ei ole vahvistettu!'
not_activated: '&cTiliä ei ole aktivoitu, rekisteröidy ja aktivoi se ennen kuin yrität uudelleen.'
password_changed: '&cSalasana vaihdettu!!' password_changed: '&cSalasana vaihdettu!!'
logout: '&cKirjauduit ulos palvelimelta.' logout: '&cKirjauduit ulos palvelimelta.'
reload: '&fAsetukset uudelleenladattu' reload: '&fAsetukset uudelleenladattu'
usage_change_password: '&fKäyttötapa: /changepassword vanhaSalasana uusiSalasana' usage_change_password: '&fKäyttötapa: /changepassword vanhaSalasana uusiSalasana'
# TODO accounts_owned_self: 'You own %count accounts:' accounts_owned_self: 'Omistat %count tiliä:'
# TODO accounts_owned_other: 'The player %name has %count accounts:' accounts_owned_other: 'Pelaajalla %name on %count tiliä:'
# Session messages # Session messages
session: session:
@ -71,15 +73,15 @@ session:
# Error messages when joining # Error messages when joining
on_join_validation: on_join_validation:
# TODO same_ip_online: 'A player with the same IP is already in game!' same_ip_online: 'Sama IP-osoitteella oleva pelaaja on jo pelissä!'
same_nick_online: '&COlet jo palvelimella! &COdota käyttäjän aikakatkaisua tai ota yhteyttä palveluntarjoojaan.' same_nick_online: '&COlet jo palvelimella! &COdota käyttäjän aikakatkaisua tai ota yhteyttä palveluntarjoojaan.'
name_length: '&cPelaajanimesi on liian lyhyt tai pitkä' name_length: '&cPelaajanimesi on liian lyhyt tai pitkä'
characters_in_name: '&cPelaajanimesi sisältää luvattomia merkkejä. Hyväksytyt merkit: %valid_chars' characters_in_name: '&cPelaajanimesi sisältää luvattomia merkkejä. Hyväksytyt merkit: %valid_chars'
kick_full_server: '&cPalvelin on täynnä, Yritä pian uudelleen!' kick_full_server: '&cPalvelin on täynnä, Yritä pian uudelleen!'
# TODO country_banned: '&4Your country is banned from this server!' country_banned: '&4Maasi on estetty tästä palvelimesta!'
# TODO not_owner_error: 'You are not the owner of this account. Please choose another name!' not_owner_error: 'Et ole tämän tilin omistaja. Valitse toinen nimi!'
# TODO invalid_name_case: 'You should join using username %valid, not %invalid.' invalid_name_case: 'Sinun pitäisi liittyä käyttäen käyttäjänimeä %valid, ei %invalid.'
# TODO quick_command: 'You used a command too fast! Please, join the server again and wait more before using any command.' quick_command: 'Käytit komentoa liian nopeasti! Kirjaudu sisään uudelleen ja odota enemmän ennen minkään komennon käyttöä.'
# Email # Email
email: email:
@ -90,17 +92,17 @@ email:
old_email_invalid: '[AuthMe] Vanha sähköposti on väärä!' old_email_invalid: '[AuthMe] Vanha sähköposti on väärä!'
invalid: '[AuthMe] Väärä sähköposti' invalid: '[AuthMe] Väärä sähköposti'
added: '[AuthMe] Sähköposti lisätty!' added: '[AuthMe] Sähköposti lisätty!'
# TODO add_not_allowed: '&cAdding email was not allowed' add_not_allowed: '&cSähköpostin lisääminen ei ollut sallittua.'
request_confirmation: '[AuthMe] Vahvistuta sähköposti!' request_confirmation: '[AuthMe] Vahvistuta sähköposti!'
changed: '[AuthMe] Sähköposti vaihdettu!' changed: '[AuthMe] Sähköposti vaihdettu!'
# TODO change_not_allowed: '&cChanging email was not allowed' change_not_allowed: '&cSähköpostin muuttaminen ei ollut sallittua.'
# TODO email_show: '&2Your current email address is: &f%email' email_show: '&2Nykyinen sähköpostiosoitteesi on: &f%email'
# TODO no_email_for_account: '&2You currently don''t have email address associated with this account.' no_email_for_account: '&2Sinulla ei tällä hetkellä ole liitettyä sähköpostiosoitetta tähän tiliin.'
# TODO already_used: '&4The email address is already being used' already_used: '&4Sähköpostiosoite on jo käytössä'
# TODO incomplete_settings: 'Error: not all required settings are set for sending emails. Please contact an admin.' incomplete_settings: 'Virhe: kaikki tarvittavat asetukset eivät ole asetettu sähköpostien lähettämistä varten. Ota yhteyttä ylläpitäjään.'
# TODO send_failure: 'The email could not be sent. Please contact an administrator.' send_failure: 'Sähköpostia ei voitu lähettää. Ota yhteyttä järjestelmänvalvojaan.'
# TODO change_password_expired: 'You cannot change your password using this command anymore.' change_password_expired: 'Et voi enää vaihtaa salasanaa tällä komennolla.'
# TODO email_cooldown_error: '&cAn email was already sent recently. You must wait %time before you can send a new one.' email_cooldown_error: '&cSähköpostia on jo lähetetty äskettäin. Sinun on odotettava %time ennen kuin voit lähettää uuden.'
# Password recovery by email # Password recovery by email
recovery: recovery:
@ -108,50 +110,64 @@ recovery:
command_usage: '&fKäyttötapa: /email recovery <Email>' command_usage: '&fKäyttötapa: /email recovery <Email>'
email_sent: '[AuthMe] Palautus sähköposti lähetetty!' email_sent: '[AuthMe] Palautus sähköposti lähetetty!'
code: code:
# TODO code_sent: 'A recovery code to reset your password has been sent to your email.' code_sent: 'Salasanasi palauttamiseksi lähetetty palautuskoodi on lähetetty sähköpostiisi.'
# TODO incorrect: 'The recovery code is not correct! You have %count tries remaining.' incorrect: 'Palautuskoodi ei ole oikea! Sinulla on %count yritystä jäljellä.'
# TODO tries_exceeded: 'You have exceeded the maximum number attempts to enter the recovery code. Use "/email recovery [email]" to generate a new one.' tries_exceeded: 'Olet ylittänyt enimmäisyritysten määrän palautuskoodin syöttämisessä. Käytä "/email recovery [email]" luodaksesi uuden.'
# TODO correct: 'Recovery code entered correctly!' correct: 'Palautuskoodi syötetty oikein!'
# TODO change_password: 'Please use the command /email setpassword <new password> to change your password immediately.' change_password: 'Käytä komentoa /email setpassword <uusi salasana> vaihtaaksesi salasanasi välittömästi.'
# Captcha # Captcha
captcha: captcha:
usage_captcha: '&cKäyttötapa: /captcha %captcha_code' usage_captcha: '&cKäyttötapa: /captcha %captcha_code'
wrong_captcha: '&cVäärä varmistus, käytä : /captcha %captcha_code' wrong_captcha: '&cVäärä varmistus, käytä : /captcha %captcha_code'
valid_captcha: '&cSinun varmistus onnistui.!' valid_captcha: '&cSinun varmistus onnistui.!'
# TODO captcha_for_registration: 'To register you have to solve a captcha first, please use the command: /captcha %captcha_code' captcha_for_registration: 'Rekisteröityäksesi sinun on ensin ratkaistava captcha, käytä komentoa: /captcha %captcha_code'
# TODO register_captcha_valid: '&2Valid captcha! You may now register with /register' register_captcha_valid: '&2Validi captcha! Voit nyt rekisteröityä käyttäen komentoa /register'
# Verification code # Verification code
verification: verification:
# TODO code_required: '&3This command is sensitive and requires an email verification! Check your inbox and follow the email''s instructions.' code_required: '&3Tämä komento on herkkä ja vaatii sähköpostivahvistuksen! Tarkista sähköpostisi ja seuraa sähköpostin ohjeita.'
# TODO command_usage: '&cUsage: /verification <code>' command_usage: '&cKäyttö: /verification <koodi>'
# TODO incorrect_code: '&cIncorrect code, please type "/verification <code>" into the chat, using the code you received by email' incorrect_code: '&cVirheellinen koodi, kirjoita "/verification <koodi>" chatiin, käyttäen koodia, jonka sait sähköpostitse'
# TODO success: '&2Your identity has been verified! You can now execute all commands within the current session!' success: '&2Henkilöllisyytesi on varmennettu! Voit nyt suorittaa kaikki komennot tämän istunnon aikana!'
# TODO already_verified: '&2You can already execute every sensitive command within the current session!' already_verified: '&2Voit jo suorittaa jokaisen herkän komennon tämän istunnon aikana!'
# TODO code_expired: '&3Your code has expired! Execute another sensitive command to get a new code!' code_expired: '&3Koodisi on vanhentunut! Suorita toinen herkkä komento saadaksesi uuden koodin!'
# TODO email_needed: '&3To verify your identity you need to link an email address with your account!!' email_needed: '&3Vahvistaaksesi henkilöllisyytesi sinun on liitettävä sähköpostiosoite tilillesi!!'
# Time units # Time units
time: time:
# TODO second: 'second' second: 'sekunti'
# TODO seconds: 'seconds' seconds: 'sekuntia'
# TODO minute: 'minute' minute: 'minuutti'
# TODO minutes: 'minutes' minutes: 'minuuttia'
# TODO hour: 'hour' hour: 'tunti'
# TODO hours: 'hours' hours: 'tuntia'
# TODO day: 'day' day: 'päivä'
# TODO days: 'days' days: 'päivää'
# Two-factor authentication # Two-factor authentication
two_factor: two_factor:
# TODO code_created: '&2Your secret code is %code. You can scan it from here %url' code_created: '&2Salainen koodisi on %code. Voit skannata sen täältä %url'
# TODO confirmation_required: 'Please confirm your code with /2fa confirm <code>' confirmation_required: 'Vahvista koodisi komennolla /2fa confirm <koodi>'
# TODO code_required: 'Please submit your two-factor authentication code with /2fa code <code>' code_required: 'Lähetä kaksivaiheisen todennuksen koodisi komennolla /2fa code <koodi>'
# TODO already_enabled: 'Two-factor authentication is already enabled for your account!' already_enabled: 'Kaksivaiheinen todennus on jo käytössä tililläsi!'
# TODO enable_error_no_code: 'No 2fa key has been generated for you or it has expired. Please run /2fa add' enable_error_no_code: 'Sinulle ei ole luotu kaksivaiheisen todennuksen avainta tai se on vanhentunut. Suorita komento /2fa add'
# TODO enable_success: 'Successfully enabled two-factor authentication for your account' enable_success: 'Kaksivaiheinen todennus onnistuneesti käytössä tililläsi'
# TODO enable_error_wrong_code: 'Wrong code or code has expired. Please run /2fa add' enable_error_wrong_code: 'Väärä koodi tai koodi on vanhentunut. Suorita komento /2fa add'
# TODO not_enabled_error: 'Two-factor authentication is not enabled for your account. Run /2fa add' not_enabled_error: 'Kaksivaiheista todennusta ei ole käytössä tililläsi. Suorita komento /2fa add'
# TODO removed_success: 'Successfully removed two-factor auth from your account' removed_success: 'Kaksivaiheinen todennus poistettu tililtäsi onnistuneesti'
# TODO invalid_code: 'Invalid code!' invalid_code: 'Virheellinen koodi!'
# 3rd party features: Bedrock Auto Login
bedrock_auto_login:
success: '&aBedrock-automaattinen sisäänkirjautuminen onnistui!'
# 3rd party features: Login Location Fix
login_location_fix:
fix_portal: '&aOlet jumissa portaalissa sisäänkirjautumisen aikana.'
fix_underground: '&aOlet jumissa maan alla sisäänkirjautumisen aikana.'
cannot_fix_underground: '&aOlet jumissa maan alla sisäänkirjautumisen aikana, mutta emme voi korjata sitä.'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&cSinut on katkaistu kaksoiskirjautumisen vuoksi.'

View File

@ -23,6 +23,7 @@ password:
unsafe_password: '&cCe mot de passe n''est pas accepté, choisissez-en un autre.' unsafe_password: '&cCe mot de passe n''est pas accepté, choisissez-en un autre.'
forbidden_characters: '&cVotre mot de passe contient des caractères non autorisés. Caractères permis : %valid_chars' forbidden_characters: '&cVotre mot de passe contient des caractères non autorisés. Caractères permis : %valid_chars'
wrong_length: '&cVotre mot de passe est trop court ou trop long !' wrong_length: '&cVotre mot de passe est trop court ou trop long !'
pwned_password: '&cLe mot de passe choisi n''est pas sécurisé. Il a déjà été utilisé %pwned_count fois ! Veuillez utiliser un mot de passe fort...'
# Identification # Identification
login: login:
@ -60,6 +61,7 @@ unregister:
# Autres messages # Autres messages
misc: misc:
account_not_activated: '&fCe compte n''est pas actif, consultez vos mails !' account_not_activated: '&fCe compte n''est pas actif, consultez vos mails !'
not_activated: '&cCompte non activé, veuillez vous inscrire et l''activer avant de réessayer.'
password_changed: '&aMot de passe changé avec succès !' password_changed: '&aMot de passe changé avec succès !'
logout: '&cVous avez été déconnecté !' logout: '&cVous avez été déconnecté !'
reload: '&aAuthMe a été relancé avec succès.' reload: '&aAuthMe a été relancé avec succès.'
@ -158,3 +160,17 @@ two_factor:
not_enabled_error: '&cL''authentification à double facteur n''est pas active sur votre compte. Faites "/2fa add" pour l''activer.' not_enabled_error: '&cL''authentification à double facteur n''est pas active sur votre compte. Faites "/2fa add" pour l''activer.'
removed_success: '&cL''authentification à double facteur a été désactivé pour votre compte !' removed_success: '&cL''authentification à double facteur a été désactivé pour votre compte !'
invalid_code: '&cCode secret invalide !' invalid_code: '&cCode secret invalide !'
# 3rd party features: Bedrock Auto Login
bedrock_auto_login:
success: '&aConnexion automatique Bedrock réussie !'
# 3rd party features: Login Location Fix
login_location_fix:
fix_portal: '&aVous êtes bloqué dans un portail lors de la connexion.'
fix_underground: '&aVous êtes bloqué sous terre lors de la connexion.'
cannot_fix_underground: '&aVous êtes bloqué sous terre lors de la connexion, mais nous ne pouvons pas le corriger.'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&cVous avez été déconnecté en raison d''une double connexion.'

View File

@ -9,17 +9,18 @@ registration:
name_taken: '&cEse nome de usuario xa está rexistrado' name_taken: '&cEse nome de usuario xa está rexistrado'
register_request: '&cPor favor, rexístrate con "/register <contrasinal> <confirmarContrasinal>"' register_request: '&cPor favor, rexístrate con "/register <contrasinal> <confirmarContrasinal>"'
command_usage: '&cUso: /register contrasinal confirmarContrasinal' command_usage: '&cUso: /register contrasinal confirmarContrasinal'
reg_only: '&fSó xogadores rexistrados! Por favor, visita http://example.com para rexistrarte' reg_only: '&fSó xogadores rexistrados! Por favor, visita https://example.com para rexistrarte'
success: '&cRexistrado con éxito!' success: '&cRexistrado con éxito!'
# TODO kicked_admin_registered: 'An admin just registered you; please log in again' kicked_admin_registered: 'Un administrador acaba de rexistrarte; por favor, volve a iniciar sesión.'
# Password errors on registration # Password errors on registration
password: password:
match_error: '&fO contrasinal non coincide' match_error: '&fO contrasinal non coincide'
# TODO name_in_password: '&cYou can''t use your name as password, please choose another one...' name_in_password: '&cNon podes usar o teu nome como contrasinal, por favor, escolle outro...'
# TODO unsafe_password: '&cThe chosen password isn''t safe, please choose another one...' unsafe_password: '&cO contrasinal escollido non é seguro, por favor, escolle outro...'
# TODO forbidden_characters: '&4Your password contains illegal characters. Allowed chars: %valid_chars' forbidden_characters: '&4O teu contrasinal contén caracteres non permitidos. Caracteres permitidos: %valid_chars'
wrong_length: '&fO teu contrasinal non alcanza a lonxitude mínima ou excede a lonxitude máxima' wrong_length: '&fO teu contrasinal non alcanza a lonxitude mínima ou excede a lonxitude máxima'
pwned_password: '&cO contrasinal elixido non é seguro. Foi usado %pwned_count veces xa! Por favor, use un contrasinal forte...'
# Login # Login
login: login:
@ -31,8 +32,8 @@ login:
# Errors # Errors
error: error:
# TODO denied_command: '&cIn order to use this command you must be authenticated!' denied_command: '&cPara usar este comando debes estar autenticado!'
# TODO denied_chat: '&cIn order to chat you must be authenticated!' denied_chat: '&cPara chatear debes estar autenticado!'
unregistered_user: '&cEse nome de usuario non está rexistrado' unregistered_user: '&cEse nome de usuario non está rexistrado'
not_logged_in: '&cNon te identificaches!' not_logged_in: '&cNon te identificaches!'
no_permission: '&cNon tes o permiso' no_permission: '&cNon tes o permiso'
@ -40,12 +41,12 @@ error:
max_registration: '&fExcediches o máximo de rexistros para a túa Conta' max_registration: '&fExcediches o máximo de rexistros para a túa Conta'
logged_in: '&cXa estás identificado!' logged_in: '&cXa estás identificado!'
kick_for_vip: '&cUn xogador VIP uniuse ao servidor cheo!' kick_for_vip: '&cUn xogador VIP uniuse ao servidor cheo!'
# TODO kick_unresolved_hostname: '&cAn error occurred: unresolved player hostname!' kick_unresolved_hostname: '&cProduciuse un erro: nome do xogador non resolto!'
# TODO tempban_max_logins: '&cYou have been temporarily banned for failing to log in too many times.' tempban_max_logins: '&cEstás temporalmente expulsado por fallar ao acceder en demasiadas ocasións.'
# AntiBot # AntiBot
antibot: antibot:
# TODO kick_antibot: 'AntiBot protection mode is enabled! You have to wait some minutes before joining the server.' kick_antibot: 'O modo de protección AntiBot está activado! Tes que agardar uns minutos antes de unirte ao servidor.'
auto_enabled: '[AuthMe] AntiBotMod conectouse automáticamente debido a conexións masivas!' auto_enabled: '[AuthMe] AntiBotMod conectouse automáticamente debido a conexións masivas!'
auto_disabled: '[AuthMe] AntiBotMod desactivouse automáticamente despois de %m minutos, esperemos que a invasión se detivera' auto_disabled: '[AuthMe] AntiBotMod desactivouse automáticamente despois de %m minutos, esperemos que a invasión se detivera'
@ -57,12 +58,13 @@ unregister:
# Other messages # Other messages
misc: misc:
account_not_activated: '&fA túa conta aínda non está activada, comproba a túa bandexa de correo!!' account_not_activated: '&fA túa conta aínda non está activada, comproba a túa bandexa de correo!!'
not_activated: '&cConta non activada, por favor rexístrese e actívea antes de tentalo de novo.'
password_changed: '&cCambiouse o contrasinal!' password_changed: '&cCambiouse o contrasinal!'
logout: '&cSesión pechada con éxito' logout: '&cSesión pechada con éxito'
reload: '&fRecargáronse a configuración e a base de datos' reload: '&fRecargáronse a configuración e a base de datos'
usage_change_password: '&fUso: /changepassword <contrasinalVello> <contrasinalNovo>' usage_change_password: '&fUso: /changepassword <contrasinalVello> <contrasinalNovo>'
# TODO accounts_owned_self: 'You own %count accounts:' accounts_owned_self: 'Tes %count contas:'
# TODO accounts_owned_other: 'The player %name has %count accounts:' accounts_owned_other: 'O xogador %name ten %count contas:'
# Session messages # Session messages
session: session:
@ -71,15 +73,15 @@ session:
# Error messages when joining # Error messages when joining
on_join_validation: on_join_validation:
# TODO same_ip_online: 'A player with the same IP is already in game!' same_ip_online: 'Un xogador coa mesma IP xa está en xogo!'
same_nick_online: '&fXa está xogando alguén co mesmo nome' same_nick_online: '&fXa está xogando alguén co mesmo nome'
name_length: '&cO teu nome é demasiado curto ou demasiado longo' name_length: '&cO teu nome é demasiado curto ou demasiado longo'
characters_in_name: '&cO teu nome contén caracteres ilegais. Caracteres permitidos: %valid_chars' characters_in_name: '&cO teu nome contén caracteres ilegais. Caracteres permitidos: %valid_chars'
kick_full_server: '&cO servidor está actualmente cheo, sentímolo!' kick_full_server: '&cO servidor está actualmente cheo, sentímolo!'
country_banned: 'O teu país está bloqueado neste servidor' country_banned: '&4O teu país está prohibido neste servidor!'
# TODO not_owner_error: 'You are not the owner of this account. Please choose another name!' not_owner_error: 'Non es o dono desta conta. Por favor, escolle outro nome!'
# TODO invalid_name_case: 'You should join using username %valid, not %invalid.' invalid_name_case: 'Deberías unirte usando o nome de usuario %valid, non %invalid.'
# TODO quick_command: 'You used a command too fast! Please, join the server again and wait more before using any command.' quick_command: 'Usaches un comando moi rápido! Por favor, úneste ao servidor de novo e agarda máis antes de usar calquera comando.'
# Email # Email
email: email:
@ -90,17 +92,16 @@ email:
old_email_invalid: '[AuthMe] O correo vello non é válido!' old_email_invalid: '[AuthMe] O correo vello non é válido!'
invalid: '[AuthMe] Correo non válido' invalid: '[AuthMe] Correo non válido'
added: '[AuthMe] Correo engadido!' added: '[AuthMe] Correo engadido!'
# TODO add_not_allowed: '&cAdding email was not allowed' add_not_allowed: '&cEngadir o correo electrónico non estaba permitido.'
request_confirmation: '[AuthMe] Confirma o teu correo!' request_confirmation: '[AuthMe] Confirma o teu correo!'
changed: '[AuthMe] Cambiouse o correo!' changed: '[AuthMe] Cambiouse o correo!'
# TODO change_not_allowed: '&cChanging email was not allowed' email_show: '&2O teu enderezo de correo electrónico actual é: &f%email'
# TODO email_show: '&2Your current email address is: &f%email' no_email_for_account: '&2Actualmente non tes ningún enderezo de correo electrónico asociado con esta conta.'
# TODO no_email_for_account: '&2You currently don''t have email address associated with this account.' already_used: '&4O enderezo de correo electrónico xa está a ser usado'
# TODO already_used: '&4The email address is already being used' incomplete_settings: 'Erro: non todos os axustes necesarios están configurados para enviar correos electrónicos. Por favor, contacta cun administrador.'
# TODO incomplete_settings: 'Error: not all required settings are set for sending emails. Please contact an admin.' send_failure: 'O correo electrónico non puido ser enviado. Por favor, contacta cun administrador.'
# TODO send_failure: 'The email could not be sent. Please contact an administrator.' change_password_expired: 'Non podes cambiar o teu contrasinal usando este comando máis.'
# TODO change_password_expired: 'You cannot change your password using this command anymore.' email_cooldown_error: '&cUn correo electrónico xa foi enviado recentemente. Debes agardar %time antes de poder enviar un novo.'
# TODO email_cooldown_error: '&cAn email was already sent recently. You must wait %time before you can send a new one.'
# Password recovery by email # Password recovery by email
recovery: recovery:
@ -108,50 +109,64 @@ recovery:
command_usage: '&fUso: /email recovery <correo>' command_usage: '&fUso: /email recovery <correo>'
email_sent: '[AuthMe] Enviouse o correo de confirmación!' email_sent: '[AuthMe] Enviouse o correo de confirmación!'
code: code:
# TODO code_sent: 'A recovery code to reset your password has been sent to your email.' code_sent: 'Enviouse un código de recuperación para restablecer o teu contrasinal ao teu correo electrónico.'
# TODO incorrect: 'The recovery code is not correct! You have %count tries remaining.' incorrect: 'O código de recuperación non é correcto! Tes %count intentos restantes.'
# TODO tries_exceeded: 'You have exceeded the maximum number attempts to enter the recovery code. Use "/email recovery [email]" to generate a new one.' tries_exceeded: 'Excedeches o número máximo de intentos para ingresar o código de recuperación. Usa "/email recovery [email]" para xerar un novo.'
# TODO correct: 'Recovery code entered correctly!' correct: 'O código de recuperación foi ingresado correctamente!'
# TODO change_password: 'Please use the command /email setpassword <new password> to change your password immediately.' change_password: 'Usa o comando /email setpassword <novo contrasinal> para cambiar o teu contrasinal inmediatamente.'
# Captcha # Captcha
captcha: captcha:
usage_captcha: '&cNecesitas escribir un captcha, por favor escribe: /captcha %captcha_code' usage_captcha: '&cNecesitas escribir un captcha, por favor escribe: /captcha %captcha_code'
wrong_captcha: '&cCaptcha equivocado, por favor usa: /captcha %captcha_code' wrong_captcha: '&cCaptcha equivocado, por favor usa: /captcha %captcha_code'
valid_captcha: '&cO teu captcha é válido !' valid_captcha: '&cO teu captcha é válido !'
# TODO captcha_for_registration: 'To register you have to solve a captcha first, please use the command: /captcha %captcha_code' captcha_for_registration: 'Para rexistrarte debes resolver un captcha primeiro, por favor, usa o comando: /captcha %captcha_code'
# TODO register_captcha_valid: '&2Valid captcha! You may now register with /register' register_captcha_valid: '&2Captcha válido! Agora podes rexistrarte con /register'
# Verification code # Verification code
verification: verification:
# TODO code_required: '&3This command is sensitive and requires an email verification! Check your inbox and follow the email''s instructions.' code_required: '&3Este comando é sensible e require unha verificación por correo electrónico! Comproba a túa bandeixa de entrada e segue as instrucións do correo electrónico.'
# TODO command_usage: '&cUsage: /verification <code>' command_usage: '&cUso: /verification <código>'
# TODO incorrect_code: '&cIncorrect code, please type "/verification <code>" into the chat, using the code you received by email' incorrect_code: '&cCódigo incorrecto, por favor, escribe "/verification <código>" no chat, usando o código que recibiches por correo electrónico'
# TODO success: '&2Your identity has been verified! You can now execute all commands within the current session!' success: '&2A túa identidade foi verificada! Agora podes executar todos os comandos dentro da sesión actual!'
# TODO already_verified: '&2You can already execute every sensitive command within the current session!' already_verified: '&2Xa podes executar todos os comandos sensibles dentro da sesión actual!'
# TODO code_expired: '&3Your code has expired! Execute another sensitive command to get a new code!' code_expired: '&3O teu código caducou! Executa outro comando sensible para obter un novo código!'
# TODO email_needed: '&3To verify your identity you need to link an email address with your account!!' email_needed: '&3Para verificar a túa identidade debes vincular un enderezo de correo electrónico á túa conta!!'
# Time units # Time units
time: time:
# TODO second: 'second' second: 'segundo'
# TODO seconds: 'seconds' seconds: 'segundos'
# TODO minute: 'minute' minute: 'minuto'
# TODO minutes: 'minutes' minutes: 'minutos'
# TODO hour: 'hour' hour: 'hora'
# TODO hours: 'hours' hours: 'horas'
# TODO day: 'day' day: 'día'
# TODO days: 'days' days: 'días'
# Two-factor authentication # Two-factor authentication
two_factor: two_factor:
# TODO code_created: '&2Your secret code is %code. You can scan it from here %url' code_created: '&2O teu código secreto é %code. Podes escanealo desde aquí %url'
# TODO confirmation_required: 'Please confirm your code with /2fa confirm <code>' confirmation_required: 'Por favor, confirma o teu código con /2fa confirm <código>'
# TODO code_required: 'Please submit your two-factor authentication code with /2fa code <code>' code_required: 'Por favor, envía o teu código de autenticación en dous pasos con /2fa code <código>'
# TODO already_enabled: 'Two-factor authentication is already enabled for your account!' already_enabled: 'A autenticación en dous pasos xa está activada para a túa conta!'
# TODO enable_error_no_code: 'No 2fa key has been generated for you or it has expired. Please run /2fa add' enable_error_no_code: 'Non se xerou ningún clave 2fa para ti ou caducou. Por favor, executa /2fa add'
# TODO enable_success: 'Successfully enabled two-factor authentication for your account' enable_success: 'Autenticación en dous pasos activada con éxito para a túa conta'
# TODO enable_error_wrong_code: 'Wrong code or code has expired. Please run /2fa add' enable_error_wrong_code: 'Código incorrecto ou caducado. Por favor, executa /2fa add'
# TODO not_enabled_error: 'Two-factor authentication is not enabled for your account. Run /2fa add' not_enabled_error: 'A autenticación en dous pasos non está activada para a túa conta. Executa /2fa add'
# TODO removed_success: 'Successfully removed two-factor auth from your account' removed_success: 'Autenticación en dous pasos eliminada con éxito da túa conta'
# TODO invalid_code: 'Invalid code!' invalid_code: 'Código incorrecto!'
# 3rd party features: Bedrock Auto Login
bedrock_auto_login:
success: '&aInicio de sesión automático de Bedrock exitoso!'
# 3rd party features: Login Location Fix
login_location_fix:
fix_portal: '&aEstá atrapado no portal durante o inicio de sesión.'
fix_underground: '&aEstá atrapado baixo terra durante o inicio de sesión.'
cannot_fix_underground: '&aEstá atrapado baixo terra durante o inicio de sesión, pero non podemos arranxalo.'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&cFoi desconectado debido a un inicio de sesión dobre.'

View File

@ -20,6 +20,7 @@ password:
unsafe_password: '&cA választott jelszó nem biztonságos, kérlek, válassz másikat...' unsafe_password: '&cA választott jelszó nem biztonságos, kérlek, válassz másikat...'
forbidden_characters: '&4A választott jelszó nem engedélyezett karaktereket tartalmaz. Engedélyezett karakterek: %valid_chars' forbidden_characters: '&4A választott jelszó nem engedélyezett karaktereket tartalmaz. Engedélyezett karakterek: %valid_chars'
wrong_length: 'A jelszavad nem éri el a minimális hosszúságot!' wrong_length: 'A jelszavad nem éri el a minimális hosszúságot!'
pwned_password: '&cA választott jelszavad nem biztonságos. Már %pwned_count alkalommal használták! Kérlek használj erős jelszót...'
# Login # Login
login: login:
@ -40,7 +41,7 @@ error:
max_registration: '&cElérted a maximálisan beregisztrálható karakterek számát. (%reg_count/%max_acc %reg_names)' max_registration: '&cElérted a maximálisan beregisztrálható karakterek számát. (%reg_count/%max_acc %reg_names)'
logged_in: '&cMár be vagy jelentkezve!' logged_in: '&cMár be vagy jelentkezve!'
kick_for_vip: '&3VIP játékos csatlakozott a szerverhez!' kick_for_vip: '&3VIP játékos csatlakozott a szerverhez!'
# TODO kick_unresolved_hostname: '&cAn error occurred: unresolved player hostname!' kick_unresolved_hostname: '&cHiba történt: feloldatlan játékos hosztnév!'
tempban_max_logins: '&cIdeiglenesen ki lettél tiltva, mert túl sok alkalommal rontottad el a jelszavad!' tempban_max_logins: '&cIdeiglenesen ki lettél tiltva, mert túl sok alkalommal rontottad el a jelszavad!'
# AntiBot # AntiBot
@ -57,6 +58,7 @@ unregister:
# Other messages # Other messages
misc: misc:
account_not_activated: '&cA felhasználód aktiválása még nem történt meg, ellenőrizd a megadott emailed!' account_not_activated: '&cA felhasználód aktiválása még nem történt meg, ellenőrizd a megadott emailed!'
not_activated: '&cA fiók nincs aktiválva, kérlek regisztrálj és aktiváld azt mielőtt újra megpróbálkoznál.'
password_changed: '&cA jelszó sikeresen megváltoztatva!' password_changed: '&cA jelszó sikeresen megváltoztatva!'
logout: '&cSikeresen kijelentkeztél!' logout: '&cSikeresen kijelentkeztél!'
reload: 'Beállítások és az adatbázis újratöltve!' reload: 'Beállítások és az adatbázis újratöltve!'
@ -155,3 +157,17 @@ two_factor:
not_enabled_error: 'Kétszámjegyű hitelesítés nincs engedélyezve a fiókodban. Futtasd a /2fa add' not_enabled_error: 'Kétszámjegyű hitelesítés nincs engedélyezve a fiókodban. Futtasd a /2fa add'
removed_success: 'Sikeresen eltávolítottad a fiók két számjegyű hitelesítőjét' removed_success: 'Sikeresen eltávolítottad a fiók két számjegyű hitelesítőjét'
invalid_code: 'Érvénytelen kód!' invalid_code: 'Érvénytelen kód!'
# 3rd party features: Bedrock Auto Login
bedrock_auto_login:
success: '&aBedrock automatikus bejelentkezés sikeres!'
# 3rd party features: Login Location Fix
login_location_fix:
fix_portal: '&aBeragadtál a portálban a bejelentkezés közben.'
fix_underground: '&aBeragadtál a föld alatt a bejelentkezés közben.'
cannot_fix_underground: '&aBeragadtál a föld alatt a bejelentkezés közben, de nem tudjuk megjavítani.'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&cKét bejelentkezés miatt lecsatlakoztattak.'

View File

@ -9,7 +9,7 @@ registration:
name_taken: '&cKamu telah mendaftarkan username ini!' name_taken: '&cKamu telah mendaftarkan username ini!'
register_request: '&3Silahkan mendaftar ke server menggunakan perintah "/register <password> <ulangiPassword>"' register_request: '&3Silahkan mendaftar ke server menggunakan perintah "/register <password> <ulangiPassword>"'
command_usage: '&cPenggunaan: /register <password> <KonfirmasiPassword>' command_usage: '&cPenggunaan: /register <password> <KonfirmasiPassword>'
reg_only: '&4Hanya pengguna terdaftar yang bisa bergabung! Silahkan kunjungi http://example.com untuk mendaftar!' reg_only: '&4Hanya pengguna terdaftar yang bisa bergabung! Silahkan kunjungi https://example.com untuk mendaftar!'
success: '&2Register berhasil!' success: '&2Register berhasil!'
kicked_admin_registered: 'Administrator sudah meregistrasi kamu; dimohon untuk login kembali' kicked_admin_registered: 'Administrator sudah meregistrasi kamu; dimohon untuk login kembali'
@ -40,7 +40,7 @@ error:
max_registration: '&Kamu telah mencapai batas maksimum pendaftaran di server ini!' max_registration: '&Kamu telah mencapai batas maksimum pendaftaran di server ini!'
logged_in: '&cKamu telah login!' logged_in: '&cKamu telah login!'
kick_for_vip: '&3Player VIP mencoba masuk pada saat server sedang penuh!' kick_for_vip: '&3Player VIP mencoba masuk pada saat server sedang penuh!'
# TODO kick_unresolved_hostname: '&cAn error occurred: unresolved player hostname!' kick_unresolved_hostname: '&cTerjadi kesalahan: nama host pemain tidak dapat dipecahkan!'
tempban_max_logins: '&cKamu untuk sementara diblokir karena terlalu sering salah saat login.' tempban_max_logins: '&cKamu untuk sementara diblokir karena terlalu sering salah saat login.'
# AntiBot # AntiBot
@ -57,6 +57,7 @@ unregister:
# Other messages # Other messages
misc: misc:
account_not_activated: '&cAkunmu belum diaktifkan, silahkan periksa email kamu!' account_not_activated: '&cAkunmu belum diaktifkan, silahkan periksa email kamu!'
not_activated: '&cAkun belum diaktifkan, silakan daftar dan aktivasi sebelum mencoba lagi.'
password_changed: '&2Berhasil mengubah password!' password_changed: '&2Berhasil mengubah password!'
logout: '&2Berhasil logout!' logout: '&2Berhasil logout!'
reload: '&2Konfigurasi dan database telah dimuat ulang!' reload: '&2Konfigurasi dan database telah dimuat ulang!'
@ -124,13 +125,13 @@ captcha:
# Verification code # Verification code
verification: verification:
# TODO code_required: '&3This command is sensitive and requires an email verification! Check your inbox and follow the email''s instructions.' code_required: '&3Perintah ini sensitif dan memerlukan verifikasi email! Periksa kotak masuk Anda dan ikuti petunjuk email.'
# TODO command_usage: '&cUsage: /verification <code>' command_usage: '&cPenggunaan: /verification <kode>'
# TODO incorrect_code: '&cIncorrect code, please type "/verification <code>" into the chat, using the code you received by email' incorrect_code: '&cKode salah, ketik "/verification <kode>" di chat, menggunakan kode yang Anda terima melalui email'
# TODO success: '&2Your identity has been verified! You can now execute all commands within the current session!' success: '&2Identitas Anda telah diverifikasi! Anda sekarang dapat menjalankan semua perintah dalam sesi saat ini!'
# TODO already_verified: '&2You can already execute every sensitive command within the current session!' already_verified: '&2Anda sudah dapat menjalankan setiap perintah sensitif dalam sesi saat ini!'
# TODO code_expired: '&3Your code has expired! Execute another sensitive command to get a new code!' code_expired: '&3Kode Anda telah kedaluwarsa! Jalankan perintah sensitif lain untuk mendapatkan kode baru!'
# TODO email_needed: '&3To verify your identity you need to link an email address with your account!!' email_needed: '&3Untuk memverifikasi identitas Anda, Anda perlu menyambungkan alamat email dengan akun Anda!!'
# Time units # Time units
time: time:
@ -155,3 +156,17 @@ two_factor:
not_enabled_error: 'Autentikasi dua langkah tidak diaktifkan untuk akunmu. Jalankan /2fa add' not_enabled_error: 'Autentikasi dua langkah tidak diaktifkan untuk akunmu. Jalankan /2fa add'
removed_success: 'Sukses menghapus autentikasi dua langkah dari akunmu' removed_success: 'Sukses menghapus autentikasi dua langkah dari akunmu'
invalid_code: 'Kode tidak valid!' invalid_code: 'Kode tidak valid!'
# 3rd party features: Bedrock Auto Login
bedrock_auto_login:
success: '&aLogin otomatis Bedrock berhasil!'
# 3rd party features: Login Location Fix
login_location_fix:
fix_portal: '&aAnda terjebak di portal selama proses login.'
fix_underground: '&aAnda terjebak di bawah tanah selama proses login.'
cannot_fix_underground: '&aAnda terjebak di bawah tanah selama proses login, tetapi kami tidak dapat memperbaikinya.'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&cAnda telah terputus karena login ganda.'

View File

@ -10,7 +10,7 @@ registration:
name_taken: '&cHai già eseguito la registrazione!' name_taken: '&cHai già eseguito la registrazione!'
register_request: '&3Per favore, esegui la registrazione con il comando: /register <password> <confermaPassword>' register_request: '&3Per favore, esegui la registrazione con il comando: /register <password> <confermaPassword>'
command_usage: '&cUtilizzo: /register <password> <confermaPassword>' command_usage: '&cUtilizzo: /register <password> <confermaPassword>'
reg_only: '&4Puoi giocare in questo server solo dopo aver eseguito la registrazione attraverso il sito web! Per favore, vai su http://esempio.it per procedere!' reg_only: '&4Puoi giocare in questo server solo dopo aver eseguito la registrazione attraverso il sito web! Per favore, vai su https://esempio.it per procedere!'
success: '&2Registrato correttamente!' success: '&2Registrato correttamente!'
kicked_admin_registered: 'Un amministratore ti ha appena registrato, per favore rientra nel server' kicked_admin_registered: 'Un amministratore ti ha appena registrato, per favore rientra nel server'
@ -21,6 +21,7 @@ password:
unsafe_password: '&cLa password che hai inserito non è sicura, per favore scegline un''altra...' unsafe_password: '&cLa password che hai inserito non è sicura, per favore scegline un''altra...'
forbidden_characters: '&4La tua password contiene caratteri non consentiti. I caratteri consentiti sono: %valid_chars' forbidden_characters: '&4La tua password contiene caratteri non consentiti. I caratteri consentiti sono: %valid_chars'
wrong_length: '&cLa password che hai inserito è troppo corta o troppo lunga, per favore scegline un''altra...' wrong_length: '&cLa password che hai inserito è troppo corta o troppo lunga, per favore scegline un''altra...'
pwned_password: '&cLa password scelta non è sicura. È stata già utilizzata %pwned_count volte! Si prega di utilizzare una password sicura...'
# Login # Login
login: login:
@ -58,6 +59,7 @@ unregister:
# Other messages # Other messages
misc: misc:
account_not_activated: '&cIl tuo account non è stato ancora verificato, controlla fra le tue email per scoprire come attivarlo!' account_not_activated: '&cIl tuo account non è stato ancora verificato, controlla fra le tue email per scoprire come attivarlo!'
not_activated: '&cAccount non attivato, si prega di registrarsi e attivarlo prima di riprovare.'
password_changed: '&2Password cambiata correttamente!' password_changed: '&2Password cambiata correttamente!'
logout: '&2Disconnessione avvenuta correttamente!' logout: '&2Disconnessione avvenuta correttamente!'
reload: '&2La configurazione e il database sono stati ricaricati correttamente!' reload: '&2La configurazione e il database sono stati ricaricati correttamente!'
@ -156,3 +158,17 @@ two_factor:
not_enabled_error: 'L''autenticazione a 2 fattori non è ancora abilitata per il tuo account. Scrivi: /2fa add' not_enabled_error: 'L''autenticazione a 2 fattori non è ancora abilitata per il tuo account. Scrivi: /2fa add'
removed_success: 'Autenticazione a 2 fattori rimossa correttamente' removed_success: 'Autenticazione a 2 fattori rimossa correttamente'
invalid_code: 'Il codice inserito non è valido, riprova!' invalid_code: 'Il codice inserito non è valido, riprova!'
# 3rd party features: Bedrock Auto Login
bedrock_auto_login:
success: '&aAccesso automatico Bedrock riuscito!'
# 3rd party features: Login Location Fix
login_location_fix:
fix_portal: '&aSei bloccato nel portale durante il login.'
fix_underground: '&aSei bloccato sottoterra durante il login.'
cannot_fix_underground: '&aSei bloccato sottoterra durante il login, ma non possiamo risolverlo.'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&cSei stato disconnesso a causa di un login doppio.'

View File

@ -5,13 +5,13 @@
# Registration # Registration
registration: registration:
register_request: '&3サーバーに登録するには、次のコマンドを使用してください: /register <パスワード> <パスワードの確認>'
command_usage: '&c使用方法: /register <パスワード> <パスワードの確認>'
reg_only: '&4登録済みのユーザーのみサーバーに参加できます 自分自身を登録するには、http://example.com にアクセスしてください!'
kicked_admin_registered: '管理者があなたを登録しました。再度ログインしてください。'
success: '&2登録が完了しました'
disabled: '&cゲーム内での登録は無効になっています' disabled: '&cゲーム内での登録は無効になっています'
name_taken: '&cこのユーザー名はすでに登録されています' name_taken: '&cこのユーザー名はすでに登録されています'
register_request: '&3サーバーに登録するには、次のコマンドを使用してください: /register <パスワード> <パスワードの確認>'
command_usage: '&c使用方法: /register <パスワード> <パスワードの確認>'
reg_only: '&4登録済みのユーザーのみサーバーに参加できます 自分自身を登録するには、https://example.com にアクセスしてください!'
success: '&2登録が完了しました'
kicked_admin_registered: '管理者があなたを登録しました。再度ログインしてください。'
# Password errors on registration # Password errors on registration
password: password:
@ -20,6 +20,7 @@ password:
unsafe_password: '&c選択したパスワードは安全ではありません。別のパスワードを選択してください...' unsafe_password: '&c選択したパスワードは安全ではありません。別のパスワードを選択してください...'
forbidden_characters: '&4パスワードに不正な文字が含まれています。許可されている文字: %valid_chars' forbidden_characters: '&4パスワードに不正な文字が含まれています。許可されている文字: %valid_chars'
wrong_length: '&cパスワードが短すぎるか長すぎます別のパスワードを試してください' wrong_length: '&cパスワードが短すぎるか長すぎます別のパスワードを試してください'
pwned_password: '&c選択されたパスワードは安全ではありません。すでに %pwned_count 回使用されています!強力なパスワードを使用してください...'
# Login # Login
login: login:
@ -31,17 +32,17 @@ login:
# Errors # Errors
error: error:
unregistered_user: '&cこのユーザーは登録されていません'
denied_command: '&cこのコマンドを使用するには認証が必要です' denied_command: '&cこのコマンドを使用するには認証が必要です'
denied_chat: '&cチャットするには認証が必要です' denied_chat: '&cチャットするには認証が必要です'
unregistered_user: '&cこのユーザーは登録されていません'
not_logged_in: '&cログインしていません' not_logged_in: '&cログインしていません'
tempban_max_logins: '&cログインに失敗した回数が多すぎるため、一時的にアクセスが制限されています。'
max_registration: '&c接続ごとの登録数が最大値を超えています%reg_count/%max_acc %reg_names'
no_permission: '&4この操作を実行する権限がありません' no_permission: '&4この操作を実行する権限がありません'
unexpected_error: '&4予期しないエラーが発生しました。管理者に連絡してください' unexpected_error: '&4予期しないエラーが発生しました。管理者に連絡してください'
kick_for_vip: '&3VIPプレイヤーがサーバーが満員の状態で参加しました' max_registration: '&c接続ごとの登録数が最大値を超えています%reg_count/%max_acc %reg_names'
logged_in: '&cすでにログイン済みです' logged_in: '&cすでにログイン済みです'
kick_for_vip: '&3VIPプレイヤーがサーバーが満員の状態で参加しました'
kick_unresolved_hostname: '&cエラーが発生しました解決できないプレイヤーのホスト名' kick_unresolved_hostname: '&cエラーが発生しました解決できないプレイヤーのホスト名'
tempban_max_logins: '&cログインに失敗した回数が多すぎるため、一時的にアクセスが制限されています。'
# AntiBot # AntiBot
antibot: antibot:
@ -49,57 +50,59 @@ antibot:
auto_enabled: '&4[AntiBotService] 接続数が非常に多いため、AntiBotが有効になりました' auto_enabled: '&4[AntiBotService] 接続数が非常に多いため、AntiBotが有効になりました'
auto_disabled: '&2[AntiBotService] %m 分後にAntiBotが無効になりました' auto_disabled: '&2[AntiBotService] %m 分後にAntiBotが無効になりました'
# Unregister
unregister: unregister:
success: '&c登録が正常に解除されました' success: '&c登録が正常に解除されました'
command_usage: '&c使用方法: /unregister <パスワード>' command_usage: '&c使用方法: /unregister <パスワード>'
# Other messages # Other messages
misc: misc:
accounts_owned_self: '所持しているアカウント数:%count 個'
accounts_owned_other: 'プレイヤー %name のアカウント数:%count 個'
account_not_activated: '&cアカウントはまだ有効化されていません。メールを確認してください' account_not_activated: '&cアカウントはまだ有効化されていません。メールを確認してください'
not_activated: '&cアカウントは有効化されていません。再試行する前に登録してアクティブ化してください。'
password_changed: '&2パスワードが正常に変更されました' password_changed: '&2パスワードが正常に変更されました'
logout: '&2正常にログアウトしました' logout: '&2正常にログアウトしました'
reload: '&2設定とデータベースが正常に再読み込みされました' reload: '&2設定とデータベースが正常に再読み込みされました'
usage_change_password: '&c使用方法: /changepassword <旧パスワード> <新パスワード>' usage_change_password: '&c使用方法: /changepassword <旧パスワード> <新パスワード>'
accounts_owned_self: '所持しているアカウント数:%count 個'
accounts_owned_other: 'プレイヤー %name のアカウント数:%count 個'
# Session messages # Session messages
session: session:
invalid_session: '&cIPアドレスが変更され、セッションのデータが期限切れです'
valid_session: '&2セッションの再接続によるログインです。' valid_session: '&2セッションの再接続によるログインです。'
invalid_session: '&cIPアドレスが変更され、セッションのデータが期限切れです'
# Error messages when joining # Error messages when joining
on_join_validation: on_join_validation:
same_ip_online: '同じIPアドレスを持つプレイヤーが既にゲーム内にいます'
same_nick_online: '&4同じユーザー名のプレイヤーが既にサーバーでプレイしています'
name_length: '&4ユーザー名が短すぎるか長すぎます' name_length: '&4ユーザー名が短すぎるか長すぎます'
characters_in_name: '&4ユーザー名に無効な文字が含まれています。許可される文字%valid_chars' characters_in_name: '&4ユーザー名に無効な文字が含まれています。許可される文字%valid_chars'
kick_full_server: '&4サーバーが満員です。後でもう一度お試しください'
country_banned: '&4このサーバーへのアクセスは、お使いの国から制限されています' country_banned: '&4このサーバーへのアクセスは、お使いの国から制限されています'
not_owner_error: 'このアカウントの所有者ではありません。別の名前を選択してください!' not_owner_error: 'このアカウントの所有者ではありません。別の名前を選択してください!'
kick_full_server: '&4サーバーが満員です。後でもう一度お試しください'
same_nick_online: '&4同じユーザー名のプレイヤーが既にサーバーでプレイしています'
invalid_name_case: '正しいユーザー名は %valid です。%invalid ではなく、このユーザー名で参加してください。' invalid_name_case: '正しいユーザー名は %valid です。%invalid ではなく、このユーザー名で参加してください。'
same_ip_online: '同じIPアドレスを持つプレイヤーが既にゲーム内にいます'
quick_command: 'コマンドを速すぎる速度で使用しました!もう一度サーバーに参加してから、コマンドを使用する前にしばらくお待ちください。' quick_command: 'コマンドを速すぎる速度で使用しました!もう一度サーバーに参加してから、コマンドを使用する前にしばらくお待ちください。'
# Email # Email
email: email:
add_email_request: '&3コマンド「/email add <あなたのメールアドレス> <確認用メールアドレス>」を使用して、アカウントにメールアドレスを追加してください。'
usage_email_add: '&c使用方法/email add <メールアドレス> <メールアドレスの確認>' usage_email_add: '&c使用方法/email add <メールアドレス> <メールアドレスの確認>'
usage_email_change: '&c使用方法/email change <古いメールアドレス> <新しいメールアドレス>' usage_email_change: '&c使用方法/email change <古いメールアドレス> <新しいメールアドレス>'
new_email_invalid: '&c無効な新しいメールアドレスです。もう一度やり直してください' new_email_invalid: '&c無効な新しいメールアドレスです。もう一度やり直してください'
old_email_invalid: '&c無効な古いメールアドレスです。もう一度やり直してください' old_email_invalid: '&c無効な古いメールアドレスです。もう一度やり直してください'
invalid: '&c無効なメールアドレスです。もう一度やり直してください' invalid: '&c無効なメールアドレスです。もう一度やり直してください'
added: '&2メールアドレスがアカウントに正常に追加されました' added: '&2メールアドレスがアカウントに正常に追加されました'
add_not_allowed: '&cメールアドレスの追加は許可されていません。'
request_confirmation: '&cメールアドレスを確認してください' request_confirmation: '&cメールアドレスを確認してください'
changed: '&2メールアドレスが正しく変更されました' changed: '&2メールアドレスが正しく変更されました'
change_not_allowed: '&cメールアドレスの変更は許可されていません。'
email_show: '&2現在のメールアドレスは%email' email_show: '&2現在のメールアドレスは%email'
incomplete_settings: 'エラー:メールの送信に必要なすべての設定が設定されていません。管理者に連絡してください。'
already_used: '&4そのメールアドレスは既に使用されています'
send_failure: 'メールを送信できませんでした。管理者に連絡してください。'
no_email_for_account: '&2現在、このアカウントに関連付けられたメールアドレスはありません。' no_email_for_account: '&2現在、このアカウントに関連付けられたメールアドレスはありません。'
add_email_request: '&3コマンド「/email add <あなたのメールアドレス> <確認用メールアドレス>」を使用して、アカウントにメールアドレスを追加してください。' already_used: '&4そのメールアドレスは既に使用されています'
incomplete_settings: 'エラー:メールの送信に必要なすべての設定が設定されていません。管理者に連絡してください。'
send_failure: 'メールを送信できませんでした。管理者に連絡してください。'
change_password_expired: 'このコマンドを使用してパスワードを変更することはできません。' change_password_expired: 'このコマンドを使用してパスワードを変更することはできません。'
email_cooldown_error: '&c最近すでにメールが送信されています。新しいメールを送信する前に、%time 待つ必要があります。' email_cooldown_error: '&c最近すでにメールが送信されています。新しいメールを送信する前に、%time 待つ必要があります。'
add_not_allowed: '&cメールアドレスの追加は許可されていません。'
change_not_allowed: '&cメールアドレスの変更は許可されていません。'
# Password recovery by email # Password recovery by email
recovery: recovery:
@ -131,6 +134,17 @@ verification:
code_expired: '&3コードの有効期限が切れています新しいコードを取得するには、別のセンシティブなコマンドを実行してください' code_expired: '&3コードの有効期限が切れています新しいコードを取得するには、別のセンシティブなコマンドを実行してください'
email_needed: '&3アカウントにはメールアドレスのリンクが必要です。身元を確認するためにはメールアドレスを関連付けてください' email_needed: '&3アカウントにはメールアドレスのリンクが必要です。身元を確認するためにはメールアドレスを関連付けてください'
# Time units
time:
second: '秒'
seconds: '秒'
minute: '分'
minutes: '分'
hour: '時間'
hours: '時間'
day: '日'
days: '日'
# Two-factor authentication # Two-factor authentication
two_factor: two_factor:
code_created: '&2秘密コードは %code です。こちらからスキャンできます:%url' code_created: '&2秘密コードは %code です。こちらからスキャンできます:%url'
@ -144,13 +158,16 @@ two_factor:
removed_success: 'アカウントから二要素認証が正常に削除されました' removed_success: 'アカウントから二要素認証が正常に削除されました'
invalid_code: '無効なコードです!' invalid_code: '無効なコードです!'
# Time units # 3rd party features: Bedrock Auto Login
time: bedrock_auto_login:
second: '秒' success: '&aBedrock 自動ログイン成功!'
seconds: '秒'
minute: '分' # 3rd party features: Login Location Fix
minutes: '分' login_location_fix:
hour: '時間' fix_portal: '&aログイン中にポータルに閉じ込められました。'
hours: '時間' fix_underground: '&aログイン中に地下に閉じ込められました。'
day: '日' cannot_fix_underground: '&aログイン中に地下に閉じ込められましたが、修正できません。'
days: '日'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&c二重ログインのため、切断されました。'

View File

@ -22,6 +22,7 @@ password:
unsafe_password: '&c이 비밀번호는 안전하지 않습니다, 다른 비밀번호를 사용하세요...' unsafe_password: '&c이 비밀번호는 안전하지 않습니다, 다른 비밀번호를 사용하세요...'
forbidden_characters: '&4비밀번호에 잘못된 문자가 있습니다. 허용된 문자: %valid_chars' forbidden_characters: '&4비밀번호에 잘못된 문자가 있습니다. 허용된 문자: %valid_chars'
wrong_length: '&c비밀번호가 너무 짧거나 너무 깁니다!' wrong_length: '&c비밀번호가 너무 짧거나 너무 깁니다!'
pwned_password: '&c선택한 비밀번호가 안전하지 않습니다. 이미 %pwned_count 번 사용되었습니다! 강력한 비밀번호를 사용하세요...'
# Login # Login
login: login:
@ -42,7 +43,7 @@ error:
max_registration: '&c당신은 가입할 수 있는 계정 한도를 초과했습니다 (%reg_count/%max_acc %reg_names)!' max_registration: '&c당신은 가입할 수 있는 계정 한도를 초과했습니다 (%reg_count/%max_acc %reg_names)!'
logged_in: '&c이미 로그인되어 있습니다!' logged_in: '&c이미 로그인되어 있습니다!'
kick_for_vip: '&3서버가 꽉 차있을 때는 VIP 플레이어만 접속이 가능합니다!' kick_for_vip: '&3서버가 꽉 차있을 때는 VIP 플레이어만 접속이 가능합니다!'
# TODO kick_unresolved_hostname: '&cAn error occurred: unresolved player hostname!' kick_unresolved_hostname: '&c오류 발생: 확인되지 않은 플레이어 호스트 이름!'
tempban_max_logins: '&c너무 많이 로그인에 실패하여 잠시 서버에서 차단되었습니다.' tempban_max_logins: '&c너무 많이 로그인에 실패하여 잠시 서버에서 차단되었습니다.'
# AntiBot # AntiBot
@ -59,6 +60,7 @@ unregister:
# Other messages # Other messages
misc: misc:
account_not_activated: '&c계정이 아직 활성화되지 않았습니다. 이메일을 확인해보세요!' account_not_activated: '&c계정이 아직 활성화되지 않았습니다. 이메일을 확인해보세요!'
not_activated: '&c계정이 활성화되지 않았습니다. 다시 시도하기 전에 등록하고 활성화하세요.'
password_changed: '&2비밀번호가 변경되었습니다!' password_changed: '&2비밀번호가 변경되었습니다!'
logout: '&2로그아웃 되었습니다!' logout: '&2로그아웃 되었습니다!'
reload: '&2설정과 데이터 베이스가 새로고침 되었습니다!' reload: '&2설정과 데이터 베이스가 새로고침 되었습니다!'
@ -157,3 +159,17 @@ two_factor:
not_enabled_error: '2단계 인증 기능을 활성화하시지 않았습니다. /2fa add 명령어를 통해 활성화해주세요.' not_enabled_error: '2단계 인증 기능을 활성화하시지 않았습니다. /2fa add 명령어를 통해 활성화해주세요.'
removed_success: '2단계 인증 기능을 성공적으로 비활성화하였습니다.' removed_success: '2단계 인증 기능을 성공적으로 비활성화하였습니다.'
invalid_code: '올바르지 않은 인증 코드입니다!' invalid_code: '올바르지 않은 인증 코드입니다!'
# 3rd party features: Bedrock Auto Login
bedrock_auto_login:
success: '&aBedrock 자동 로그인 성공!'
# 3rd party features: Login Location Fix
login_location_fix:
fix_portal: '&a로그인 중에 포탈에 갇혔습니다.'
fix_underground: '&a로그인 중에 지하에 갇혔습니다.'
cannot_fix_underground: '&a로그인 중에 지하에 갇혔지만, 수정할 수 없습니다.'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&c중복 로그인으로 인해 연결이 종료되었습니다.'

View File

@ -9,7 +9,7 @@ registration:
name_taken: '&cVartotojo vardas jau užregistruotas' name_taken: '&cVartotojo vardas jau užregistruotas'
register_request: '&ePrašome prisiregistruoti: /register slaptažodis pakartotiSlaptažodį' register_request: '&ePrašome prisiregistruoti: /register slaptažodis pakartotiSlaptažodį'
command_usage: '&eNaudojimas: /register slaptažodis pakartotiSlaptažodį' command_usage: '&eNaudojimas: /register slaptažodis pakartotiSlaptažodį'
reg_only: '&cTik prisiregistravusiems žaidėjams: apsilankykite: http://example.com tam, kad užsiregistruoti.' reg_only: '&cTik prisiregistravusiems žaidėjams: apsilankykite: https://example.com tam, kad užsiregistruoti.'
success: '&aSėkmingai prisiregistravote.' success: '&aSėkmingai prisiregistravote.'
kicked_admin_registered: 'Administatorius Jus užregistravo. Prisijunkite iš naujo' kicked_admin_registered: 'Administatorius Jus užregistravo. Prisijunkite iš naujo'
@ -20,6 +20,7 @@ password:
unsafe_password: '&cŠį Slaptažodį lengva nulaužti, pasirinkite kitą slaptažodį' unsafe_password: '&cŠį Slaptažodį lengva nulaužti, pasirinkite kitą slaptažodį'
forbidden_characters: '&4Jūsų slaptažodis turi netinkamų simbolių. Leidžiami simboliai: %valid_chars' forbidden_characters: '&4Jūsų slaptažodis turi netinkamų simbolių. Leidžiami simboliai: %valid_chars'
wrong_length: '&cJūsų pasirinktas slaptažodis per ilgas arba per trumpas.' wrong_length: '&cJūsų pasirinktas slaptažodis per ilgas arba per trumpas.'
pwned_password: '&cJūsų pasirinktas slaptažodis nėra saugus. Jis buvo naudotas %pwned_count kartų! Prašome naudoti stiprų slaptažodį...'
# Login # Login
login: login:
@ -57,6 +58,7 @@ unregister:
# Other messages # Other messages
misc: misc:
account_not_activated: '&aJūsų vartotojas nėra patvirtintas, pasitikrinkite el.paštą.' account_not_activated: '&aJūsų vartotojas nėra patvirtintas, pasitikrinkite el.paštą.'
not_activated: '&cPaskyra neaktyvuota, prašome užsiregistruoti ir aktyvuoti prieš bandant dar kartą.'
password_changed: '&aSlaptažodis pakeistas' password_changed: '&aSlaptažodis pakeistas'
logout: '&aSėkmingai atsijungėte' logout: '&aSėkmingai atsijungėte'
reload: '&aNustatymai ir duomenų bazė buvo perkrauta.' reload: '&aNustatymai ir duomenų bazė buvo perkrauta.'
@ -155,3 +157,17 @@ two_factor:
not_enabled_error: 'Dviejų faktorių autentifikavimas nėra įjungtas ant jūsų paskyros. Rašykite /2fa add' not_enabled_error: 'Dviejų faktorių autentifikavimas nėra įjungtas ant jūsų paskyros. Rašykite /2fa add'
removed_success: 'Dviejų faktorių autentifikavimas sėkmingai pašalintas iš jūsų paskyros.' removed_success: 'Dviejų faktorių autentifikavimas sėkmingai pašalintas iš jūsų paskyros.'
invalid_code: 'Neteisingas kodas!' invalid_code: 'Neteisingas kodas!'
# 3rd party features: Bedrock Auto Login
bedrock_auto_login:
success: '&aBedrock automatinis prisijungimas sėkmingas!'
# 3rd party features: Login Location Fix
login_location_fix:
fix_portal: '&aJūs užstrigote portale prisijungimo metu.'
fix_underground: '&aJūs užstrigote po žeme prisijungimo metu.'
cannot_fix_underground: '&aJūs užstrigote po žeme prisijungimo metu, bet mes negalime to pataisyti.'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&cJūs buvote atjungtas dėl dvigubo prisijungimo.'

View File

@ -9,7 +9,7 @@ registration:
name_taken: '&cJe hebt deze gebruikersnaam al geregistreerd!' name_taken: '&cJe hebt deze gebruikersnaam al geregistreerd!'
register_request: '&cRegistreer met het commando: /register <wachtwoord> <herhaal wachtwoord>' register_request: '&cRegistreer met het commando: /register <wachtwoord> <herhaal wachtwoord>'
command_usage: '&cGebruik: /register <wachtwoord> <herhaal wachtwoord>' command_usage: '&cGebruik: /register <wachtwoord> <herhaal wachtwoord>'
reg_only: 'Alleen voor geregistreerde spelers! Bezoek http://example.com om te registreren!' reg_only: 'Alleen voor geregistreerde spelers! Bezoek https://example.com om te registreren!'
success: '&cSuccesvol geregistreerd!' success: '&cSuccesvol geregistreerd!'
kicked_admin_registered: 'Een administrator heeft je net geregistreerd; log alsjeblieft opnieuw in.' kicked_admin_registered: 'Een administrator heeft je net geregistreerd; log alsjeblieft opnieuw in.'
@ -20,6 +20,7 @@ password:
unsafe_password: '&fDit wachtwoord is onveilig, kies een ander wachtwoord...' unsafe_password: '&fDit wachtwoord is onveilig, kies een ander wachtwoord...'
forbidden_characters: '&cJouw wachtwoord bevat ongeldige tekens. Toegestane karakters zijn: %valid_chars' forbidden_characters: '&cJouw wachtwoord bevat ongeldige tekens. Toegestane karakters zijn: %valid_chars'
wrong_length: 'Jouw gekozen wachtwoord voldoet niet aan de minimum of maximum lengte, kies een ander wachtwoord...' wrong_length: 'Jouw gekozen wachtwoord voldoet niet aan de minimum of maximum lengte, kies een ander wachtwoord...'
pwned_password: '&cHet gekozen wachtwoord is niet veilig. Het is al %pwned_count keer gebruikt! Gebruik alstublieft een sterk wachtwoord...'
# Login # Login
login: login:
@ -57,6 +58,7 @@ unregister:
# Other messages # Other messages
misc: misc:
account_not_activated: 'Je account is nog niet geactiveerd, controleer je mailbox!' account_not_activated: 'Je account is nog niet geactiveerd, controleer je mailbox!'
not_activated: '&cAccount niet geactiveerd, registreer en activeer het alstublieft voordat u het opnieuw probeert.'
password_changed: '&cWachtwoord succesvol aangepast!' password_changed: '&cWachtwoord succesvol aangepast!'
logout: '&2Je bent succesvol uitgelogd!' logout: '&2Je bent succesvol uitgelogd!'
reload: '&2De configuratie en database zijn succesvol herladen!' reload: '&2De configuratie en database zijn succesvol herladen!'
@ -155,3 +157,17 @@ two_factor:
not_enabled_error: 'Twee-factor authenticatie is uitgeschakeld voor jou account. Voer "/2fa add" uit' not_enabled_error: 'Twee-factor authenticatie is uitgeschakeld voor jou account. Voer "/2fa add" uit'
removed_success: 'Twee-factor authenticatie is met succes van jouw account verwijderd.' removed_success: 'Twee-factor authenticatie is met succes van jouw account verwijderd.'
invalid_code: 'Ongeldige code!' invalid_code: 'Ongeldige code!'
# 3rd party features: Bedrock Auto Login
bedrock_auto_login:
success: '&aBedrock automatisch inloggen gelukt!'
# 3rd party features: Login Location Fix
login_location_fix:
fix_portal: '&aU zit vast in een portal tijdens het inloggen.'
fix_underground: '&aU zit vast onder de grond tijdens het inloggen.'
cannot_fix_underground: '&aU zit vast onder de grond tijdens het inloggen, maar we kunnen het niet repareren.'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&cU bent losgekoppeld vanwege een dubbele inlog.'

View File

@ -20,6 +20,7 @@ password:
unsafe_password: '&cTwoje hasło nie jest bezpieczne, wybierz inne...' unsafe_password: '&cTwoje hasło nie jest bezpieczne, wybierz inne...'
forbidden_characters: '&4W twoim haśle występują niedozwolone znaki, dozwolone znaki to: %valid_chars' forbidden_characters: '&4W twoim haśle występują niedozwolone znaki, dozwolone znaki to: %valid_chars'
wrong_length: '&fTwoje hasło jest za krótkie lub za długie! Spróbuj ponownie...' wrong_length: '&fTwoje hasło jest za krótkie lub za długie! Spróbuj ponownie...'
pwned_password: '&cTwoje wybrane hasło nie jest bezpieczne. Zostało już użyte %pwned_count razy! Proszę użyj silnego hasła...'
# Login # Login
login: login:
@ -57,6 +58,7 @@ unregister:
# Other messages # Other messages
misc: misc:
account_not_activated: '&fTwoje konto nie zostało aktywowane! Sprawdź maila.' account_not_activated: '&fTwoje konto nie zostało aktywowane! Sprawdź maila.'
not_activated: '&cKonto nieaktywowane, proszę zarejestruj się i aktywuj konto przed ponowną próbą.'
password_changed: '&fHasło zostało zmienione!' password_changed: '&fHasło zostało zmienione!'
logout: '&cPomyślnie wylogowany' logout: '&cPomyślnie wylogowany'
reload: '&fKonfiguracja bazy danych została przeładowana.' reload: '&fKonfiguracja bazy danych została przeładowana.'
@ -155,3 +157,17 @@ two_factor:
not_enabled_error: 'Weryfikacja dwuetapowa nie jest włączona dla twojego konta. Wpisz komende /2fa add' not_enabled_error: 'Weryfikacja dwuetapowa nie jest włączona dla twojego konta. Wpisz komende /2fa add'
removed_success: '&aPomyślnie usunięto weryfikacje dwuetapową z Twojego konta.' removed_success: '&aPomyślnie usunięto weryfikacje dwuetapową z Twojego konta.'
invalid_code: '&cWpisany kod jest nieprawidłowy, spróbuj jeszcze raz.' invalid_code: '&cWpisany kod jest nieprawidłowy, spróbuj jeszcze raz.'
# 3rd party features: Bedrock Auto Login
bedrock_auto_login:
success: '&aAutomatyczne logowanie na Bedrocku udane!'
# 3rd party features: Login Location Fix
login_location_fix:
fix_portal: '&aUtknąłeś w portalu podczas logowania.'
fix_underground: '&aUtknąłeś pod ziemią podczas logowania.'
cannot_fix_underground: '&aUtknąłeś pod ziemią podczas logowania, ale nie możemy tego naprawić.'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&cZostałeś rozłączony z powodu podwójnego logowania.'

View File

@ -9,7 +9,7 @@ registration:
name_taken: '&cUtilizador já registado' name_taken: '&cUtilizador já registado'
register_request: '&cPor favor registe-se com "/register <password> <confirmePassword>"' register_request: '&cPor favor registe-se com "/register <password> <confirmePassword>"'
command_usage: '&cUse: /register <password> <confirmePassword>' command_usage: '&cUse: /register <password> <confirmePassword>'
reg_only: '&fApenas jogadores registados podem entrar no servidor! Visite http://example.com para se registar' reg_only: '&fApenas jogadores registados podem entrar no servidor! Visite https://example.com para se registar'
success: '&cRegistado com sucesso!' success: '&cRegistado com sucesso!'
kicked_admin_registered: 'Um administrador registou-te, por favor entre novamente' kicked_admin_registered: 'Um administrador registou-te, por favor entre novamente'
@ -20,6 +20,7 @@ password:
unsafe_password: '&cA senha escolhida não é segura, por favor, escolha outra ...' unsafe_password: '&cA senha escolhida não é segura, por favor, escolha outra ...'
forbidden_characters: '&4Sua senha contém caracteres ilegais. Caracteres permitidos: %valid_chars' forbidden_characters: '&4Sua senha contém caracteres ilegais. Caracteres permitidos: %valid_chars'
wrong_length: '&fPassword demasiado curta ou longa! Por favor escolhe outra outra!' wrong_length: '&fPassword demasiado curta ou longa! Por favor escolhe outra outra!'
pwned_password: '&cA senha escolhida não é segura. Ela foi usada %pwned_count vezes! Por favor, use uma senha forte...'
# Login # Login
login: login:
@ -57,6 +58,7 @@ unregister:
# Other messages # Other messages
misc: misc:
account_not_activated: '&fA sua conta não foi ainda activada, verifique o seu email onde irá receber indicações para activação de conta. ' account_not_activated: '&fA sua conta não foi ainda activada, verifique o seu email onde irá receber indicações para activação de conta. '
not_activated: '&cConta não ativada, por favor, registre-se e ative antes de tentar novamente.'
password_changed: '&cPassword alterada!' password_changed: '&cPassword alterada!'
logout: '&cSaida com sucesso' logout: '&cSaida com sucesso'
reload: '&fConfiguração e base de dados foram recarregadas' reload: '&fConfiguração e base de dados foram recarregadas'
@ -155,3 +157,17 @@ two_factor:
not_enabled_error: 'Autenticação de duas etapas não está habilitada na sua conta. Digite /2fa add' not_enabled_error: 'Autenticação de duas etapas não está habilitada na sua conta. Digite /2fa add'
removed_success: 'Autenticação de duas etapas removida com sucesso da sua conta' removed_success: 'Autenticação de duas etapas removida com sucesso da sua conta'
invalid_code: 'Codigo invalido!' invalid_code: 'Codigo invalido!'
# 3rd party features: Bedrock Auto Login
bedrock_auto_login:
success: '&aLogin automático no Bedrock bem-sucedido!'
# 3rd party features: Login Location Fix
login_location_fix:
fix_portal: '&aVocê está preso no portal durante o login.'
fix_underground: '&aVocê está preso no subsolo durante o login.'
cannot_fix_underground: '&aVocê está preso no subsolo durante o login, mas não podemos consertar.'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&cVocê foi desconectado devido a um login duplicado.'

View File

@ -5,13 +5,13 @@
# Registration # Registration
registration: registration:
register_request: '&3Te rugam sa te inregistrezi folosind comanda "/register <Parola> <CorfirmareParola>"'
command_usage: '&cFoloseste comanda: /register <Parola> <ConfirmareParola>'
reg_only: '&4Doar jucatori inregistrati pot intra pe server! Te rugam foloseste http://example.com pentru a te inregistra!'
kicked_admin_registered: 'Un administrator tocmai te-a inregistrat, te rog autentifica-te din nou.'
success: '&2Te-ai inregistrat cu succes!'
disabled: '&cInregistrarea in joc nu este activata!' disabled: '&cInregistrarea in joc nu este activata!'
name_taken: '&cCineva este inregistrat cu acest nume!' name_taken: '&cCineva este inregistrat cu acest nume!'
register_request: '&3Te rugam sa te inregistrezi folosind comanda "/register <Parola> <CorfirmareParola>"'
command_usage: '&cFoloseste comanda: /register <Parola> <ConfirmareParola>'
reg_only: '&4Doar jucatori inregistrati pot intra pe server! Te rugam foloseste https://example.com pentru a te inregistra!'
success: '&2Te-ai inregistrat cu succes!'
kicked_admin_registered: 'Un administrator tocmai te-a inregistrat, te rog autentifica-te din nou.'
# Password errors on registration # Password errors on registration
password: password:
@ -20,6 +20,7 @@ password:
unsafe_password: '&cParola aleasa nu este sigura. Te rugam sa folosesti alta parola...' unsafe_password: '&cParola aleasa nu este sigura. Te rugam sa folosesti alta parola...'
forbidden_characters: '&4Parola ta contine caractere nepermise. Caractere permise: %valid_chars' forbidden_characters: '&4Parola ta contine caractere nepermise. Caractere permise: %valid_chars'
wrong_length: '&cParola ta este prea scurta pentru a te inregistra! Te rugam incearca alta parola!' wrong_length: '&cParola ta este prea scurta pentru a te inregistra! Te rugam incearca alta parola!'
pwned_password: '&cParola aleasă nu este sigură. A fost folosită de %pwned_count ori! Vă rugăm să utilizați o parolă puternică...'
# Login # Login
login: login:
@ -31,17 +32,17 @@ login:
# Errors # Errors
error: error:
unregistered_user: '&cAcest jucator nu este inregistrat!'
denied_command: '&cPentru a utiliza aceasta comanda trebuie sa fi autentificat!' denied_command: '&cPentru a utiliza aceasta comanda trebuie sa fi autentificat!'
denied_chat: '&cPentru a utiliza chat-ul trebuie sa fi autentificat!' denied_chat: '&cPentru a utiliza chat-ul trebuie sa fi autentificat!'
unregistered_user: '&cAcest jucator nu este inregistrat!'
not_logged_in: '&cNu esti autentificat!' not_logged_in: '&cNu esti autentificat!'
tempban_max_logins: '&cAi fost banat temporar deoarece ai esuat sa te autentifici de prea multe ori.'
max_registration: '&cAi depasit numarul maxim de inregistrari (%reg_count /%max_acc %reg_names) pentru conexiunea dvs.!'
no_permission: '&4Nu ai permisiunea de a efectua aceasta actiune!' no_permission: '&4Nu ai permisiunea de a efectua aceasta actiune!'
unexpected_error: '&4A aparut o eroare, te rugam contacteaza un administrator!' unexpected_error: '&4A aparut o eroare, te rugam contacteaza un administrator!'
kick_for_vip: '&3Un VIP a intrat pe server cand era plin!' max_registration: '&cAi depasit numarul maxim de inregistrari (%reg_count /%max_acc %reg_names) pentru conexiunea dvs.!'
logged_in: '&cEsti deja autentificat!' logged_in: '&cEsti deja autentificat!'
kick_for_vip: '&3Un VIP a intrat pe server cand era plin!'
kick_unresolved_hostname: '&cA aparut o eroare: nume gazda nerezolvat!' kick_unresolved_hostname: '&cA aparut o eroare: nume gazda nerezolvat!'
tempban_max_logins: '&cAi fost banat temporar deoarece ai esuat sa te autentifici de prea multe ori.'
# AntiBot # AntiBot
antibot: antibot:
@ -55,51 +56,52 @@ unregister:
# Other messages # Other messages
misc: misc:
accounts_owned_self: 'Detii %count conturi:'
accounts_owned_other: 'Jucatorul %name are %count conturi:'
account_not_activated: '&cContul tau nu este activat, te rugam verifica-ti email-ul!' account_not_activated: '&cContul tau nu este activat, te rugam verifica-ti email-ul!'
not_activated: '&cContul nu este activat, vă rugăm să vă înregistrați și să îl activați înainte de a încerca din nou.'
password_changed: '&2Parola a fost schimbata cu succes!' password_changed: '&2Parola a fost schimbata cu succes!'
logout: '&2Te-ai deconectat cu succes!' logout: '&2Te-ai deconectat cu succes!'
reload: '&2Configuratiile si baza de date s-au reincarcat corect!' reload: '&2Configuratiile si baza de date s-au reincarcat corect!'
usage_change_password: '&cFoloseste comanda: /changepassword <ParolaVeche> <ParolaNoua>' usage_change_password: '&cFoloseste comanda: /changepassword <ParolaVeche> <ParolaNoua>'
accounts_owned_self: 'Detii %count conturi:'
accounts_owned_other: 'Jucatorul %name are %count conturi:'
# Session messages # Session messages
session: session:
invalid_session: '&cIP-ul tau a fost schimbat si sesiunea ta a expirat!'
valid_session: '&2Conectat datorita reconectarii sesiunii.' valid_session: '&2Conectat datorita reconectarii sesiunii.'
invalid_session: '&cIP-ul tau a fost schimbat si sesiunea ta a expirat!'
# Error messages when joining # Error messages when joining
on_join_validation: on_join_validation:
same_ip_online: 'Un jucator cu acelasi IP este deja in joc!'
same_nick_online: '&4Acelasi nume apartine unui jucator care e deja pe server!'
name_length: '&4Numele tau este fie prea scurt, fie prea lung!' name_length: '&4Numele tau este fie prea scurt, fie prea lung!'
characters_in_name: '&4Numele tau contine caractere ilegale. Caractere permise: %valid_chars' characters_in_name: '&4Numele tau contine caractere ilegale. Caractere permise: %valid_chars'
kick_full_server: '&4Server-ul este plin, incearca mai tarziu!'
country_banned: '&4Tara ta este interzisa pe acest server!' country_banned: '&4Tara ta este interzisa pe acest server!'
not_owner_error: 'Tu nu esti detinatorul acestui cont. Te rugam alege alt nume!' not_owner_error: 'Tu nu esti detinatorul acestui cont. Te rugam alege alt nume!'
kick_full_server: '&4Server-ul este plin, incearca mai tarziu!'
same_nick_online: '&4Acelasi nume apartine unui jucator care e deja pe server!'
invalid_name_case: 'Ar trebui sa intri cu numele %valid, nu %invalid' invalid_name_case: 'Ar trebui sa intri cu numele %valid, nu %invalid'
same_ip_online: 'Un jucator cu acelasi IP este deja in joc!'
quick_command: 'Ai folosit o comanda prea repede! Te rugam, intra din nou pe server si astepta mai mult inainte de a utiliza orice comanda.' quick_command: 'Ai folosit o comanda prea repede! Te rugam, intra din nou pe server si astepta mai mult inainte de a utiliza orice comanda.'
# Email # Email
email: email:
add_email_request: '&3Te rugam adaugati email-ul la contul tau folosind comanda "/email add <Email> <ConfrimaEmail>"'
usage_email_add: '&cFoloseste comanda: /email add <Email> <ConfrimareEmail>' usage_email_add: '&cFoloseste comanda: /email add <Email> <ConfrimareEmail>'
usage_email_change: '&cFoloseste comanda: /email change <EmailVechi> <EmailNou>' usage_email_change: '&cFoloseste comanda: /email change <EmailVechi> <EmailNou>'
new_email_invalid: '&cNoul email este nevalid, incearca din nou!' new_email_invalid: '&cNoul email este nevalid, incearca din nou!'
old_email_invalid: '&cEmail-ul vechi este nevalid, incearca din nou!' old_email_invalid: '&cEmail-ul vechi este nevalid, incearca din nou!'
invalid: '&cEmail-ul este nevalid, incearca din nou!' invalid: '&cEmail-ul este nevalid, incearca din nou!'
added: '&2Email-ul a fost adaugat cu succes la contul tau!' added: '&2Email-ul a fost adaugat cu succes la contul tau!'
add_not_allowed: '&cAdaugarea email-ului nu a fost permisa.'
request_confirmation: '&cTe rugam sa confirmi adresa ta de email!' request_confirmation: '&cTe rugam sa confirmi adresa ta de email!'
changed: '&2Email-ul a fost schimbat cu succes!' changed: '&2Email-ul a fost schimbat cu succes!'
change_not_allowed: '&cModificarea email-ului nu a fost permisa.'
email_show: '&2Adresa ta curenta de email este: &f%email' email_show: '&2Adresa ta curenta de email este: &f%email'
incomplete_settings: 'Eroare: Nu indeplinesti conditiile trimiterii unui email! Te rugam contacteaza un administrator.'
already_used: '&4Email-ul acesta este deja folosit de altcineva'
send_failure: 'Email-ul nu a putut fi trimis. Ta rugam contactatezi un administrator.'
no_email_for_account: '&2Nu ai nici o adresa de email asociata cu acest cont.' no_email_for_account: '&2Nu ai nici o adresa de email asociata cu acest cont.'
add_email_request: '&3Te rugam adaugati email-ul la contul tau folosind comanda "/email add <Email> <ConfrimaEmail>"' already_used: '&4Email-ul acesta este deja folosit de altcineva'
incomplete_settings: 'Eroare: Nu indeplinesti conditiile trimiterii unui email! Te rugam contacteaza un administrator.'
send_failure: 'Email-ul nu a putut fi trimis. Ta rugam contactatezi un administrator.'
change_password_expired: 'Nu mai iti poti schimba parola folosind aceasta comanda.' change_password_expired: 'Nu mai iti poti schimba parola folosind aceasta comanda.'
email_cooldown_error: '&cAi primit deja un mail pentru schimbarea parolei. Trebuie sa astepti %time inainte de a trimite unul nou.' email_cooldown_error: '&cAi primit deja un mail pentru schimbarea parolei. Trebuie sa astepti %time inainte de a trimite unul nou.'
add_not_allowed: '&cAdaugarea email-ului nu a fost permisa.'
change_not_allowed: '&cModificarea email-ului nu a fost permisa.'
# Password recovery by email # Password recovery by email
recovery: recovery:
@ -131,6 +133,17 @@ verification:
code_expired: '&3Codul tau a expirat! Executa o alta comanda sensibila pentru a obtine un cod nou!' code_expired: '&3Codul tau a expirat! Executa o alta comanda sensibila pentru a obtine un cod nou!'
email_needed: '&3Pentru ati verifica identitatea, trebuie sa conectezi o adresa de email cu contul tau!!' email_needed: '&3Pentru ati verifica identitatea, trebuie sa conectezi o adresa de email cu contul tau!!'
# Time units
time:
second: 'secunda'
seconds: 'secunde'
minute: 'minut'
minutes: 'minute'
hour: 'ora'
hours: 'ore'
day: 'zi'
days: 'zile'
# Two-factor authentication # Two-factor authentication
two_factor: two_factor:
code_created: '&2Codul tau secret este %code. Il poti scana de aici %url' code_created: '&2Codul tau secret este %code. Il poti scana de aici %url'
@ -144,13 +157,16 @@ two_factor:
removed_success: 'Eliminare cu succes a autentificarii in doi pasi de pe cont' removed_success: 'Eliminare cu succes a autentificarii in doi pasi de pe cont'
invalid_code: 'Cod invalid!' invalid_code: 'Cod invalid!'
# Time units # 3rd party features: Bedrock Auto Login
time: bedrock_auto_login:
second: 'secunda' success: '&aAutentificare automată Bedrock reușită!'
seconds: 'secunde'
minute: 'minut' # 3rd party features: Login Location Fix
minutes: 'minute' login_location_fix:
hour: 'ora' fix_portal: '&aSunteți blocat în portal în timpul autentificării.'
hours: 'ore' fix_underground: '&aSunteți blocat sub pământ în timpul autentificării.'
day: 'zi' cannot_fix_underground: '&aSunteți blocat sub pământ în timpul autentificării, dar nu putem remedia.'
days: 'zile'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&cAți fost deconectat din cauza unei autentificări duble.'

View File

@ -1,152 +1,172 @@
# List of global tags:
# %nl% - Goes to new line.
# %username% - Replaces the username of the player receiving the message.
# %displayname% - Replaces the nickname (and colors) of the player receiving the message.
# Registration # Registration
registration: registration:
disabled: '&cРегистрация отключена.' disabled: '&cРегистрация отключена.'
name_taken: '&cИгрок с таким никнеймом уже зарегистрирован.' name_taken: '&cИгрок с таким никнеймом уже зарегистрирован.'
register_request: '&3Регистрация: /reg <пароль> <повтор пароля>' register_request: '&3Регистрация: /reg <пароль> <повтор пароля>'
command_usage: '&cИспользование: /reg <пароль> <повтор пароля>' command_usage: '&cИспользование: /reg <пароль> <повтор пароля>'
reg_only: '&4Вход только для зарегистрированных! Посетите http://сайт_сервера.ru для регистрации.' reg_only: '&4Вход только для зарегистрированных! Посетите https://сайт_сервера.ru для регистрации.'
success: '&2Вы успешно зарегистрировались!' success: '&2Вы успешно зарегистрировались!'
kicked_admin_registered: 'Администратор зарегистрировал вас. Авторизуйтесь снова.' kicked_admin_registered: 'Администратор зарегистрировал вас. Авторизуйтесь снова.'
# Password errors on registration # Password errors on registration
password: password:
match_error: '&cПароли не совпадают.' match_error: '&cПароли не совпадают.'
name_in_password: '&cНельзя использовать свой никнейм в качестве пароля.' name_in_password: '&cНельзя использовать свой никнейм в качестве пароля.'
unsafe_password: '&cТакой пароль небезопасен.' unsafe_password: '&cТакой пароль небезопасен.'
forbidden_characters: '&4Пароль содержит запрещённые символы. Разрешённые: %valid_chars' forbidden_characters: '&4Пароль содержит запрещённые символы. Разрешённые: %valid_chars'
wrong_length: '&cПароль слишком длинный/короткий.' wrong_length: '&cПароль слишком длинный/короткий.'
pwned_password: '&cВыбранный вами пароль небезопасен. Он уже был использован %pwned_count раз! Пожалуйста, используйте надежный пароль...'
# Login # Login
login: login:
command_usage: '&cИспользование: /login <пароль>' command_usage: '&cИспользование: /login <пароль>'
wrong_password: '&cНеправильный пароль!' wrong_password: '&cНеправильный пароль!'
success: '&2Вы успешно вошли!' success: '&2Вы успешно вошли!'
login_request: '&3Авторизация: /login <Пароль>' login_request: '&3Авторизация: /login <Пароль>'
timeout_error: '&4Время авторизации истекло.' timeout_error: '&4Время авторизации истекло.'
# Errors # Errors
error: error:
denied_command: '&cНеобходимо авторизоваться для использования этой команды!' denied_command: '&cНеобходимо авторизоваться для использования этой команды!'
denied_chat: '&cНеобходимо авторизоваться, чтобы писать в чат!' denied_chat: '&cНеобходимо авторизоваться, чтобы писать в чат!'
unregistered_user: '&cИгрок с таким именем не зарегистрирован.' unregistered_user: '&cИгрок с таким именем не зарегистрирован.'
not_logged_in: '&cВы ещё не вошли!' not_logged_in: '&cВы ещё не вошли!'
no_permission: '&4Недостаточно прав.' no_permission: '&4Недостаточно прав.'
unexpected_error: '&cПроизошла ошибка. Свяжитесь с администратором.' unexpected_error: '&cПроизошла ошибка. Свяжитесь с администратором.'
max_registration: '&cПревышено максимальное количество регистраций на сервере! (%reg_count/%max_acc %reg_names)' max_registration: '&cПревышено максимальное количество регистраций на сервере! (%reg_count/%max_acc %reg_names)'
logged_in: '&cВы уже авторизированы!' logged_in: '&cВы уже авторизированы!'
kick_for_vip: '&3VIP-игрок зашёл на переполненный сервер.' kick_for_vip: '&3VIP-игрок зашёл на переполненный сервер.'
kick_unresolved_hostname: '&cПроизошла ошибка: неразрешенное имя узла игрока!' kick_unresolved_hostname: '&cПроизошла ошибка: неразрешенное имя узла игрока!'
tempban_max_logins: '&cВы временно заблокированы из-за большого количества неудачных попыток авторизоваться.' tempban_max_logins: '&cВы временно заблокированы из-за большого количества неудачных попыток авторизоваться.'
# AntiBot # AntiBot
antibot: antibot:
kick_antibot: 'Сработала защита против ботов! Необходимо подождать перед следующим входом на сервер.' kick_antibot: 'Сработала защита против ботов! Необходимо подождать перед следующим входом на сервер.'
auto_enabled: '&4[AuthMe] AntiBot-режим включился из-за большого количества входов!' auto_enabled: '&4[AuthMe] AntiBot-режим включился из-за большого количества входов!'
auto_disabled: '&2[AuthMe] AntiBot-режим отключился спустя %m мин.' auto_disabled: '&2[AuthMe] AntiBot-режим отключился спустя %m мин.'
# Unregister
unregister: unregister:
success: '&cУчётная запись успешно удалена!' success: '&cУчётная запись успешно удалена!'
command_usage: '&cИспользование: /unregister <пароль>' command_usage: '&cИспользование: /unregister <пароль>'
# Other messages # Other messages
misc: misc:
account_not_activated: '&cВаша уч. запись ещё не активирована. Проверьте электронную почту!' account_not_activated: '&cВаша уч. запись ещё не активирована. Проверьте электронную почту!'
password_changed: '&2Ваш пароль изменён!' not_activated: '&cАккаунт не активирован, пожалуйста, зарегистрируйтесь и активируйте его перед повторной попыткой.'
logout: '&2Вы успешно вышли.' password_changed: '&2Ваш пароль изменён!'
reload: '&6Конфигурация и база данных перезагружены.' logout: '&2Успешно вышли из системы!'
usage_change_password: '&cИспользование: /changepassword <пароль> <новый пароль>' reload: '&6Конфигурация и база данных перезагружены.'
accounts_owned_self: 'У вас %count уч. записей:' usage_change_password: '&cИспользование: /changepassword <пароль> <новый пароль>'
accounts_owned_other: 'У игрока %name %count уч. записей:' accounts_owned_self: 'У вас %count уч. записей:'
accounts_owned_other: 'У игрока %name %count уч. записей:'
# Session messages # Session messages
session: session:
valid_session: '&2Вы автоматически авторизовались!' valid_session: '&2Вы автоматически авторизовались!'
invalid_session: '&cСессия некорректна. Дождитесь, пока она закончится.' invalid_session: '&cСессия некорректна. Дождитесь, пока она закончится.'
# Error messages when joining # Error messages when joining
on_join_validation: on_join_validation:
same_ip_online: 'Игрок с данным IP-адресом уже играет на сервере!' same_ip_online: 'Игрок с данным IP-адресом уже играет на сервере!'
same_nick_online: '&4Игрок с данным никнеймом уже играет на сервере!' same_nick_online: '&4Игрок с данным никнеймом уже играет на сервере!'
name_length: '&4Ваш никнейм слишком длинный/короткий.' name_length: '&4Ваш никнейм слишком длинный/короткий.'
characters_in_name: '&4Ваш никнейм содержит запрещённые символы. Разрешённые: %valid_chars' characters_in_name: '&4Ваш никнейм содержит запрещённые символы. Разрешённые: %valid_chars'
kick_full_server: '&4Сервер полон. Попробуйте зайти позже!' kick_full_server: '&4Сервер полон. Попробуйте зайти позже!'
country_banned: '&4Вход с IP-адресов вашей страны запрещён на этом сервере.' country_banned: '&4Вход с IP-адресов вашей страны запрещён на этом сервере.'
not_owner_error: 'Вы не являетесь владельцем данной уч. записи. Выберите себе другой никнейм!' not_owner_error: 'Вы не являетесь владельцем данной уч. записи. Выберите себе другой никнейм!'
invalid_name_case: 'Неверный никнейм! Зайдите под никнеймом %valid, а не %invalid.' invalid_name_case: 'Неверный никнейм! Зайдите под никнеймом %valid, а не %invalid.'
quick_command: 'Вы вводили команды слишком часто! Пожалуйста, переподключитесь и вводите команды медленнее.' quick_command: 'Вы вводили команды слишком часто! Пожалуйста, переподключитесь и вводите команды медленнее.'
# Email # Email
email: email:
add_email_request: '&3Добавьте электронную почту: /email add <эл. почта> <повтор эл. почты>' add_email_request: '&3Добавьте электронную почту: /email add <эл. почта> <повтор эл. почты>'
usage_email_add: '&cИспользование: /email add <эл. почта> <повтор эл. почты>' usage_email_add: '&cИспользование: /email add <эл. почта> <повтор эл. почты>'
usage_email_change: '&cИспользование: /email change <эл. почта> <новая эл. почта>' usage_email_change: '&cИспользование: /email change <эл. почта> <новая эл. почта>'
new_email_invalid: '&cНедействительная новая электронная почта!' new_email_invalid: '&cНедействительная новая электронная почта!'
old_email_invalid: '&cНедействительная старая электронная почта!' old_email_invalid: '&cНедействительная старая электронная почта!'
invalid: '&cНедействительный адрес электронной почты!' invalid: '&cНедействительный адрес электронной почты!'
added: '&2Электронная почта успешно добавлена!' added: '&2Электронная почта успешно добавлена!'
add_not_allowed: '&cДобавление электронной почты не было разрешено.' add_not_allowed: '&cДобавление электронной почты не было разрешено.'
request_confirmation: '&cПодтвердите свою электронную почту!' request_confirmation: '&cПодтвердите свою электронную почту!'
changed: '&2Адрес электронной почты изменён!' changed: '&2Адрес электронной почты изменён!'
change_not_allowed: '&cИзменение электронной почты не было разрешено.' change_not_allowed: '&cИзменение электронной почты не было разрешено.'
email_show: '&2Текущий адрес электронной почты — &f%email' email_show: '&2Текущий адрес электронной почты — &f%email'
no_email_for_account: '&2К вашей уч. записи не привязана электронная почта.' no_email_for_account: '&2К вашей уч. записи не привязана электронная почта.'
already_used: '&4Эта электронная почта уже используется.' already_used: '&4Эта электронная почта уже используется.'
incomplete_settings: 'Ошибка: не все необходимые параметры установлены для отправки электронной почты. Свяжитесь с администратором.' incomplete_settings: 'Ошибка: не все необходимые параметры установлены для отправки электронной почты. Свяжитесь с администратором.'
send_failure: 'Письмо не может быть отправлено. Свяжитесь в администратором.' send_failure: 'Письмо не может быть отправлено. Свяжитесь в администратором.'
change_password_expired: 'Больше нельзя сменить свой пароль, используя эту команду.' change_password_expired: 'Больше нельзя сменить свой пароль, используя эту команду.'
email_cooldown_error: '&cПисьмо было отправлено недавно. Подождите %time, прежде чем отправить новое.' email_cooldown_error: '&cПисьмо было отправлено недавно. Подождите %time, прежде чем отправить новое.'
# Password recovery by email # Password recovery by email
recovery: recovery:
forgot_password_hint: '&Забыли пароль? Используйте «/email recovery <эл. почта>».' forgot_password_hint: '&Забыли пароль? Используйте «/email recovery <эл. почта>».'
command_usage: '&cИспользование: /email recovery <эл. почта>' command_usage: '&cИспользование: /email recovery <эл. почта>'
email_sent: '&2Письмо с инструкциями для восстановления было отправлено на вашу электронную почту!' email_sent: '&2Письмо с инструкциями для восстановления было отправлено на вашу электронную почту!'
code: code:
code_sent: 'Код восстановления для сброса пароля был отправлен на электронную почту.' code_sent: 'Код восстановления для сброса пароля был отправлен на электронную почту.'
incorrect: 'Неверный код восстановления! Попыток осталось: %count.' incorrect: 'Неверный код восстановления! Попыток осталось: %count.'
tries_exceeded: 'Вы слишком много раз неверно ввели код восстановления. Используйте «/email recovery [эл. почта]», чтобы получить новый код.' tries_exceeded: 'Вы слишком много раз неверно ввели код восстановления. Используйте «/email recovery [эл. почта]», чтобы получить новый код.'
correct: 'Код восстановления введён верно!' correct: 'Код восстановления введён верно!'
change_password: 'Используйте «/email setpassword <новый пароль>», чтобы сменить свой пароль.' change_password: 'Используйте «/email setpassword <новый пароль>», чтобы сменить свой пароль.'
# Captcha # Captcha
captcha: captcha:
usage_captcha: '&3Необходимо ввести текст с каптчи. Используйте «/captcha %captcha_code»' usage_captcha: '&3Необходимо ввести текст с каптчи. Используйте «/captcha %captcha_code»'
wrong_captcha: '&cНеверно! Используйте «/captcha %captcha_code».' wrong_captcha: '&cНеверно! Используйте «/captcha %captcha_code».'
valid_captcha: '&2Вы успешно решили каптчу!' valid_captcha: '&2Вы успешно решили каптчу!'
captcha_for_registration: 'Чтобы зарегистрироваться, решите каптчу используя команду: «/captcha %captcha_code»' captcha_for_registration: 'Чтобы зарегистрироваться, решите каптчу используя команду: «/captcha %captcha_code»'
register_captcha_valid: '&2Вы успешно решили каптчу! Теперь вы можете зарегистрироваться командой «/register»' register_captcha_valid: '&2Вы успешно решили каптчу! Теперь вы можете зарегистрироваться командой «/register»'
# Verification code # Verification code
verification: verification:
code_required: '&3Эта команда чувствительна и требует подтверждения электронной почты! Проверьте свою почту и следуйте инструкциям в письме.' code_required: '&3Эта команда чувствительна и требует подтверждения электронной почты! Проверьте свою почту и следуйте инструкциям в письме.'
command_usage: '&cИспользование: /verification <код>' command_usage: '&cИспользование: /verification <код>'
incorrect_code: '&cНеверный код, используйте «/verification <код>», подставив код из полученного письма.' incorrect_code: '&cНеверный код, используйте «/verification <код>», подставив код из полученного письма.'
success: '&2Ваша личность подтверждена! Теперь можно выполнять все чувствительные команды в текущем сеансе!' success: '&2Ваша личность подтверждена! Теперь можно выполнять все чувствительные команды в текущем сеансе!'
already_verified: '&2Вы уже можете выполнять все чувствительные команды в текущем сеансе!' already_verified: '&2Вы уже можете выполнять все чувствительные команды в текущем сеансе!'
code_expired: '&3Срок действия кода истёк! Выполните чувствительную команду, чтобы получить новый код!' code_expired: '&3Срок действия кода истёк! Выполните чувствительную команду, чтобы получить новый код!'
email_needed: '&3Чтобы подтвердить вашу личность, необходимо привязать электронную почту к учётной записи!!' email_needed: '&3Чтобы подтвердить вашу личность, необходимо привязать электронную почту к учётной записи!!'
# Time units # Time units
time: time:
second: 'с.' second: 'с.'
seconds: 'с.' seconds: 'с.'
minute: 'мин.' minute: 'мин.'
minutes: 'мин.' minutes: 'мин.'
hour: 'ч.' hour: 'ч.'
hours: 'ч.' hours: 'ч.'
day: 'дн.' day: 'дн.'
days: 'дн.' days: 'дн.'
# Two-factor authentication # Two-factor authentication
two_factor: two_factor:
code_created: '&2Ваш секретный код — %code. Просканируйте его здесь: %url' code_created: '&2Ваш секретный код — %code. Просканируйте его здесь: %url'
confirmation_required: 'Пожалуйста, подтвердите ваш код с помощью /2fa confirm <код>' confirmation_required: 'Пожалуйста, подтвердите ваш код с помощью /2fa confirm <код>'
code_required: 'Пожалуйста, введите ваш код двухфакторной аутентификации используя команду /2fa code <код>' code_required: 'Пожалуйста, введите ваш код двухфакторной аутентификации используя команду /2fa code <код>'
already_enabled: 'Двухфакторная аутентификация уже активирована для вашего аккаунта!' already_enabled: 'Двухфакторная аутентификация уже активирована для вашего аккаунта!'
enable_error_no_code: 'Код двухфакторной аутентификации не был сгенерирован или истек. Пожалуйста, введите /2fa add' enable_error_no_code: 'Код двухфакторной аутентификации не был сгенерирован или истек. Пожалуйста, введите /2fa add'
enable_success: 'Двухфакторная аутентификация для вашего аккаунта успешно подключена' enable_success: 'Двухфакторная аутентификация для вашего аккаунта успешно подключена'
enable_error_wrong_code: 'Срок действия кода истек или код неверный. Введите /2fa add' enable_error_wrong_code: 'Срок действия кода истек или код неверный. Введите /2fa add'
not_enabled_error: 'Двухфакторная аутентификация не включена для вашего аккаунта. Введите /2fa add' not_enabled_error: 'Двухфакторная аутентификация не включена для вашего аккаунта. Введите /2fa add'
removed_success: 'Двухфакторная аутентификация успешно удалена с вашего аккаунта!' removed_success: 'Двухфакторная аутентификация успешно удалена с вашего аккаунта!'
invalid_code: 'Неверный код!' invalid_code: 'Неверный код!'
# 3rd party features: Bedrock Auto Login
bedrock_auto_login:
success: '&aВы автоматически авторизовались потому что вы играете с Bedrock!'
# 3rd party features: Login Location Fix
login_location_fix:
fix_portal: '&aВы застряли в портале во время авторизации.'
fix_underground: '&aВы застряли под землей во время авторизации.'
cannot_fix_underground: '&aВы застряли под землей во время авторизации, но мы не можем это исправить.'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&cВы были отключены из-за двойного входа.'

View File

@ -9,7 +9,7 @@ registration:
name_taken: '&cTo uporabniško ime ste ze registrirali!' name_taken: '&cTo uporabniško ime ste ze registrirali!'
register_request: '&3Registrirajte se z ukazom "/register <geslo> <PotrdiGeslo>"' register_request: '&3Registrirajte se z ukazom "/register <geslo> <PotrdiGeslo>"'
command_usage: '&cUporaba: /register <geslo> <PotrdiGeslo>' command_usage: '&cUporaba: /register <geslo> <PotrdiGeslo>'
reg_only: '&4Samo registrirani uporabniki se lahko povezejo! Obiscite http://example.com , da se registrirate!' reg_only: '&4Samo registrirani uporabniki se lahko povezejo! Obiscite https://example.com , da se registrirate!'
success: '&2Uspešno registriran!' success: '&2Uspešno registriran!'
kicked_admin_registered: 'Administrator vas je registriral; prosimo, da se prijavite.' kicked_admin_registered: 'Administrator vas je registriral; prosimo, da se prijavite.'
@ -20,6 +20,7 @@ password:
unsafe_password: '&cIzbrano geslo ni varno, izberite drugo...' unsafe_password: '&cIzbrano geslo ni varno, izberite drugo...'
forbidden_characters: '&4Vaše geslo vsebuje nedovoljene znake. Dovoljeni znaki: %valid_chars' forbidden_characters: '&4Vaše geslo vsebuje nedovoljene znake. Dovoljeni znaki: %valid_chars'
wrong_length: '&cVaše geslo je prekratko ali predolgo! Poskusite z drugim!' wrong_length: '&cVaše geslo je prekratko ali predolgo! Poskusite z drugim!'
pwned_password: '&cIzbrano geslo ni varno. Uporabljeno je bilo že %pwned_count krat! Prosimo, uporabite močno geslo...'
# Login # Login
login: login:
@ -40,7 +41,7 @@ error:
max_registration: '&cPresegli ste največjo stevilo registracij (%reg_count/%max_acc %reg_names) za vašo povezavo!' max_registration: '&cPresegli ste največjo stevilo registracij (%reg_count/%max_acc %reg_names) za vašo povezavo!'
logged_in: '&cSte že povezani!' logged_in: '&cSte že povezani!'
kick_for_vip: '&3VIP igralec se je pridruzil serverju, ko je bil poln!' kick_for_vip: '&3VIP igralec se je pridruzil serverju, ko je bil poln!'
# TODO kick_unresolved_hostname: '&cAn error occurred: unresolved player hostname!' kick_unresolved_hostname: '&cPrišlo je do napake: ime gostitelja igralca ni razrešeno!'
tempban_max_logins: '&cBil si začasno izločen zaradi preveč neuspešnih prijav.' tempban_max_logins: '&cBil si začasno izločen zaradi preveč neuspešnih prijav.'
# AntiBot # AntiBot
@ -57,6 +58,7 @@ unregister:
# Other messages # Other messages
misc: misc:
account_not_activated: '&cVas račun se ni aktiviran, preverite e-mail!' account_not_activated: '&cVas račun se ni aktiviran, preverite e-mail!'
not_activated: '&cRačun ni aktiviran, prosimo, registrirajte se in ga aktivirajte, preden poskusite znova.'
password_changed: '&2Geslo uspesno spremenjeno!' password_changed: '&2Geslo uspesno spremenjeno!'
logout: '&2Odjavljeni uspesno!' logout: '&2Odjavljeni uspesno!'
reload: '&2Konfiguracija in baza podatkov sta bila uspesno osvezena!' reload: '&2Konfiguracija in baza podatkov sta bila uspesno osvezena!'
@ -155,3 +157,17 @@ two_factor:
not_enabled_error: 'Dvo stopična prijava ni vključena za vaš račun. Uporabite /2fa add' not_enabled_error: 'Dvo stopična prijava ni vključena za vaš račun. Uporabite /2fa add'
removed_success: 'Usprešno ste odstranili dvo stopično prijavo za vaš račun.' removed_success: 'Usprešno ste odstranili dvo stopično prijavo za vaš račun.'
invalid_code: 'Nepravilna koda!' invalid_code: 'Nepravilna koda!'
# 3rd party features: Bedrock Auto Login
bedrock_auto_login:
success: '&aSamodejno prijavljanje v Bedrocku uspešno!'
# 3rd party features: Login Location Fix
login_location_fix:
fix_portal: '&aMed prijavo ste obtičali v portalu.'
fix_underground: '&aMed prijavo ste obtičali pod zemljo.'
cannot_fix_underground: '&aMed prijavo ste obtičali pod zemljo, vendar tega ne moremo popraviti.'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&cBili ste odklopljeni zaradi podvojenega prijave.'

View File

@ -15,7 +15,7 @@ registration:
name_taken: '&cZadané meno je už zaregistrované.' name_taken: '&cZadané meno je už zaregistrované.'
register_request: '&cZaregistruj sa príkazom "/register <heslo> <zopakujHeslo>".' register_request: '&cZaregistruj sa príkazom "/register <heslo> <zopakujHeslo>".'
command_usage: '&cPoužitie: /register <heslo> <zopakujHeslo>' command_usage: '&cPoužitie: /register <heslo> <zopakujHeslo>'
reg_only: '&fIba zaregistrovaný hráči sa môžu pripojiť na tento server! Navštív http://example.com pre registráciu.' reg_only: '&fIba zaregistrovaný hráči sa môžu pripojiť na tento server! Navštív https://example.com pre registráciu.'
success: '&cBol si úspešne zaregistrovaný.' success: '&cBol si úspešne zaregistrovaný.'
kicked_admin_registered: 'Admin ťa zaregistroval. Prosím, prihlás sa znovu.' kicked_admin_registered: 'Admin ťa zaregistroval. Prosím, prihlás sa znovu.'
@ -26,6 +26,7 @@ password:
unsafe_password: '&cTvoje heslo nieje bezpečné. Prosím, zvoľ si iné...' unsafe_password: '&cTvoje heslo nieje bezpečné. Prosím, zvoľ si iné...'
forbidden_characters: '&4Tvoje heslo obsahuje zakázané znaky. Povolené znaky: %valid_chars' forbidden_characters: '&4Tvoje heslo obsahuje zakázané znaky. Povolené znaky: %valid_chars'
wrong_length: '&fHeslo je veľmi krátke alebo veľmi dlhé.' wrong_length: '&fHeslo je veľmi krátke alebo veľmi dlhé.'
pwned_password: '&cVaše zvolené heslo nie je bezpečné. Bolo použité %pwned_count krát! Prosím, použite silné heslo...'
# Login # Login
login: login:
@ -46,7 +47,7 @@ error:
max_registration: '&fPrekročil si maximum registrovaných účtov(%reg_count/%max_acc|%reg_names).' max_registration: '&fPrekročil si maximum registrovaných účtov(%reg_count/%max_acc|%reg_names).'
logged_in: '&cAktuálne si už prihlásený!' logged_in: '&cAktuálne si už prihlásený!'
kick_for_vip: '&3Uvoľnil si miesto pre VIP hráča!' kick_for_vip: '&3Uvoľnil si miesto pre VIP hráča!'
# TODO kick_unresolved_hostname: '&cAn error occurred: unresolved player hostname!' kick_unresolved_hostname: '&cDošlo k chybe: nerozpoznaný hostname hráča!'
tempban_max_logins: '&cBol si dočasne zabanovaný za opakované zadanie zlého hesla.' tempban_max_logins: '&cBol si dočasne zabanovaný za opakované zadanie zlého hesla.'
# AntiBot # AntiBot
@ -63,6 +64,7 @@ unregister:
# Other messages # Other messages
misc: misc:
account_not_activated: '&fTvoj účet nie je aktivovaný. Prezri si svoj e-mail!' account_not_activated: '&fTvoj účet nie je aktivovaný. Prezri si svoj e-mail!'
not_activated: '&cÚčet nie je aktivovaný, prosím, zaregistrujte sa a aktivujte ho pred pokusom o prihlásenie znova.'
password_changed: '&cHeslo zmenené!' password_changed: '&cHeslo zmenené!'
logout: '&cBol si úspešne odhlásený.' logout: '&cBol si úspešne odhlásený.'
reload: '&fZnovu načítanie konfigurácie a databázy bolo úspešné.' reload: '&fZnovu načítanie konfigurácie a databázy bolo úspešné.'
@ -85,7 +87,7 @@ on_join_validation:
country_banned: '&4Tvoja krajina je zabanovaná na tomto serveri!' country_banned: '&4Tvoja krajina je zabanovaná na tomto serveri!'
not_owner_error: 'Nie si majiteľom tohto účtu. Prosím zvoľ si iné meno!' not_owner_error: 'Nie si majiteľom tohto účtu. Prosím zvoľ si iné meno!'
invalid_name_case: 'Mal by si sa pripojiť s nickom %valid, nie %invalid - pozor na veľké a malé písmená.' invalid_name_case: 'Mal by si sa pripojiť s nickom %valid, nie %invalid - pozor na veľké a malé písmená.'
# TODO quick_command: 'You used a command too fast! Please, join the server again and wait more before using any command.' quick_command: 'Príkaz ste použili príliš rýchlo! Prosím, znovu sa pripojte na server a počkajte dlhšie pred použitím akéhokoľvek príkazu.'
# Email # Email
email: email:
@ -96,10 +98,10 @@ email:
old_email_invalid: '&cNeplatný starý email, skús to znovu!' old_email_invalid: '&cNeplatný starý email, skús to znovu!'
invalid: '&cNeplatná emailová adresa, skús to znovu!' invalid: '&cNeplatná emailová adresa, skús to znovu!'
added: '&2Emailová adresa bola úspešne pridaná k tvojmu účtu!' added: '&2Emailová adresa bola úspešne pridaná k tvojmu účtu!'
# TODO add_not_allowed: '&cAdding email was not allowed' add_not_allowed: '&cPridanie emailu nebolo povolené.'
request_confirmation: '&cProsím potvrď svoju emailovú adresu!' request_confirmation: '&cProsím potvrď svoju emailovú adresu!'
changed: '&2Emailová adresa bola úspešne zmenená!' changed: '&2Emailová adresa bola úspešne zmenená!'
# TODO change_not_allowed: '&cChanging email was not allowed' change_not_allowed: '&cZmena emailu nebola povolená.'
email_show: '&2Tvoja súčastná emailová adresa je: &f%email' email_show: '&2Tvoja súčastná emailová adresa je: &f%email'
no_email_for_account: '&2Momentálne nemáš emailovú adresu spojenú s týmto účtom.' no_email_for_account: '&2Momentálne nemáš emailovú adresu spojenú s týmto účtom.'
already_used: '&4Túto emailovú adresu už niekto používa.' already_used: '&4Túto emailovú adresu už niekto používa.'
@ -125,18 +127,18 @@ captcha:
usage_captcha: '&3Pre prihlásenie musíš vyriešiť captcha kód, prosím použi príkaz: /captcha %captcha_code' usage_captcha: '&3Pre prihlásenie musíš vyriešiť captcha kód, prosím použi príkaz: /captcha %captcha_code'
wrong_captcha: '&cNesprávny kód captcha, prosím napíš "/captcha %captcha_code" do chatu!' wrong_captcha: '&cNesprávny kód captcha, prosím napíš "/captcha %captcha_code" do chatu!'
valid_captcha: '&2Správne si vyriešil captcha kód!' valid_captcha: '&2Správne si vyriešil captcha kód!'
# TODO captcha_for_registration: 'To register you have to solve a captcha first, please use the command: /captcha %captcha_code' captcha_for_registration: 'Ak sa chcete zaregistrovať, musíte najskôr vyriešiť captcha, prosím, použite príkaz: /captcha %captcha_code'
# TODO register_captcha_valid: '&2Valid captcha! You may now register with /register' register_captcha_valid: '&2Platná captcha! Teraz sa môžete zaregistrovať pomocou /register'
# Verification code # Verification code
verification: verification:
# TODO code_required: '&3This command is sensitive and requires an email verification! Check your inbox and follow the email''s instructions.' code_required: '&3Tento príkaz je citlivý a vyžaduje overenie emailom! Skontrolujte svoju schránku a postupujte podľa pokynov v emaile.'
# TODO command_usage: '&cUsage: /verification <code>' command_usage: '&cPoužitie: /verification <code>'
# TODO incorrect_code: '&cIncorrect code, please type "/verification <code>" into the chat, using the code you received by email' incorrect_code: '&cNesprávny kód, prosím, zadajte "/verification <code>" do chatu, pomocou kódu, ktorý ste dostali emailom'
# TODO success: '&2Your identity has been verified! You can now execute all commands within the current session!' success: '&2Vaša identita bola overená! Teraz môžete vykonávať všetky príkazy v rámci aktuálnej relácie!'
# TODO already_verified: '&2You can already execute every sensitive command within the current session!' already_verified: '&2Už môžete vykonávať každý citlivý príkaz v rámci aktuálnej relácie!'
# TODO code_expired: '&3Your code has expired! Execute another sensitive command to get a new code!' code_expired: '&3Váš kód vypršal! Vykonajte ďalší citlivý príkaz na získanie nového kódu!'
# TODO email_needed: '&3To verify your identity you need to link an email address with your account!!' email_needed: '&3Na overenie vašej identity potrebujete prepojiť emailovú adresu so svojím účtom!!'
# Time units # Time units
time: time:
@ -152,12 +154,26 @@ time:
# Two-factor authentication # Two-factor authentication
two_factor: two_factor:
code_created: '&2Tvoj tajný kód je %code. Môžeš ho oskenovať tu: %url' code_created: '&2Tvoj tajný kód je %code. Môžeš ho oskenovať tu: %url'
# TODO confirmation_required: 'Please confirm your code with /2fa confirm <code>' confirmation_required: 'Prosím, potvrďte svoj kód pomocou /2fa confirm <code>'
# TODO code_required: 'Please submit your two-factor authentication code with /2fa code <code>' code_required: 'Prosím, zadajte svoj dvojfaktorový autentifikačný kód pomocou /2fa code <code>'
# TODO already_enabled: 'Two-factor authentication is already enabled for your account!' already_enabled: 'Dvojfaktorová autentifikácia je už pre váš účet povolená!'
# TODO enable_error_no_code: 'No 2fa key has been generated for you or it has expired. Please run /2fa add' enable_error_no_code: 'Nebolo pre vás vygenerované žiadne 2fa kľúč alebo vypršal jeho platnosť. Prosím, použite príkaz /2fa add'
# TODO enable_success: 'Successfully enabled two-factor authentication for your account' enable_success: 'Dvojfaktorová autentifikácia bola úspešne povolená pre váš účet'
# TODO enable_error_wrong_code: 'Wrong code or code has expired. Please run /2fa add' enable_error_wrong_code: 'Nesprávny kód alebo kód vypršal. Prosím, použite príkaz /2fa add'
# TODO not_enabled_error: 'Two-factor authentication is not enabled for your account. Run /2fa add' not_enabled_error: 'Dvojfaktorová autentifikácia nie je pre váš účet povolená. Použite príkaz /2fa add'
# TODO removed_success: 'Successfully removed two-factor auth from your account' removed_success: 'Dvojfaktorová autentifikácia bola úspešne odstránená z vášho účtu'
# TODO invalid_code: 'Invalid code!' invalid_code: 'Neplatný kód!'
# 3rd party features: Bedrock Auto Login
bedrock_auto_login:
success: '&aAutomatické prihlásenie do Bedrocku úspešné!'
# 3rd party features: Login Location Fix
login_location_fix:
fix_portal: '&aPočas prihlasovania ste uviazli v portáli.'
fix_underground: '&aPočas prihlasovania ste uviazli pod zemou.'
cannot_fix_underground: '&aPočas prihlasovania ste uviazli pod zemou, ale nemôžeme to opraviť.'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&cBoli ste odpojení kvôli zdvojenému prihláseniu.'

View File

@ -9,7 +9,7 @@ registration:
name_taken: '&cKorisnik je već registrovan!' name_taken: '&cKorisnik je već registrovan!'
register_request: '&3Molimo Vas, registrujte se na server komandom: /register <lozinka> <PotvrditeLozinku>' register_request: '&3Molimo Vas, registrujte se na server komandom: /register <lozinka> <PotvrditeLozinku>'
command_usage: '&cUpotreba: /register <lozinka> <PotvrditeLozinku>' command_usage: '&cUpotreba: /register <lozinka> <PotvrditeLozinku>'
reg_only: '&4Samo registrovani igrači mogu ući na server! Molimo Vas posetite http://example.com da biste se registrovali!' reg_only: '&4Samo registrovani igrači mogu ući na server! Molimo Vas posetite https://example.com da biste se registrovali!'
success: '&2Uspešno registrovani!' success: '&2Uspešno registrovani!'
kicked_admin_registered: 'Admin vas je upravo registrovao; molimo Vas uđite ponovo' kicked_admin_registered: 'Admin vas je upravo registrovao; molimo Vas uđite ponovo'
@ -20,6 +20,7 @@ password:
unsafe_password: '&cIzabrana lozinka nije bezbedna, molimo vas da izaberete drugu...' unsafe_password: '&cIzabrana lozinka nije bezbedna, molimo vas da izaberete drugu...'
forbidden_characters: '&4Vaša lozinka sadrži nedozvoljene karaktere. Dozvoljeni karakteri: %valid_chars' forbidden_characters: '&4Vaša lozinka sadrži nedozvoljene karaktere. Dozvoljeni karakteri: %valid_chars'
wrong_length: '&cVaša lozinka je prekratka ili predugačka! Molimo Vas da probate drugu!' wrong_length: '&cVaša lozinka je prekratka ili predugačka! Molimo Vas da probate drugu!'
pwned_password: '&cVaša izabrana lozinka nije sigurna. Već je korišćena %pwned_count puta! Molimo koristite jaku lozinku...'
# Login # Login
login: login:
@ -40,7 +41,7 @@ error:
max_registration: '&cDostigli ste maksimalan broj registracija (%reg_count/%max_acc %reg_names) za vaše povezivanje!' max_registration: '&cDostigli ste maksimalan broj registracija (%reg_count/%max_acc %reg_names) za vaše povezivanje!'
logged_in: '&cVeć ste ulogovani!' logged_in: '&cVeć ste ulogovani!'
kick_for_vip: '&3VIP igrač je ušao na server dok je bio pun!' kick_for_vip: '&3VIP igrač je ušao na server dok je bio pun!'
# TODO kick_unresolved_hostname: '&cAn error occurred: unresolved player hostname!' kick_unresolved_hostname: '&cDošlo je do greške: nerešeno ime domaćina igrača!'
tempban_max_logins: '&cPrivremeno ste banovani zbog previše pogrešnih pokušaja ulogovanja.' tempban_max_logins: '&cPrivremeno ste banovani zbog previše pogrešnih pokušaja ulogovanja.'
# AntiBot # AntiBot
@ -57,6 +58,7 @@ unregister:
# Other messages # Other messages
misc: misc:
account_not_activated: '&cVaš nalog još uvek nije aktiviran, molimo Vas proverite svoj email!' account_not_activated: '&cVaš nalog još uvek nije aktiviran, molimo Vas proverite svoj email!'
not_activated: '&cNalog nije aktiviran, molimo registrujte se i aktivirajte pre nego što pokušate ponovo.'
password_changed: '&2Lozinka uspešno promenjena!' password_changed: '&2Lozinka uspešno promenjena!'
logout: '&2Uspešno ste se odlogovali!' logout: '&2Uspešno ste se odlogovali!'
reload: '&2Konfiguracija i databaza su uspešno osveženi!' reload: '&2Konfiguracija i databaza su uspešno osveženi!'
@ -155,3 +157,17 @@ two_factor:
not_enabled_error: 'Dvo-faktorna autentifikacija nije aktivirana za vaš nalog. Kucajte /2fa add' not_enabled_error: 'Dvo-faktorna autentifikacija nije aktivirana za vaš nalog. Kucajte /2fa add'
removed_success: 'Uspešno ste uklonili dvo-faktornu autentifikaciju sa vašeg naloga' removed_success: 'Uspešno ste uklonili dvo-faktornu autentifikaciju sa vašeg naloga'
invalid_code: 'Nevažeći kod!' invalid_code: 'Nevažeći kod!'
# 3rd party features: Bedrock Auto Login
bedrock_auto_login:
success: '&aBedrock automatsko prijavljivanje uspešno!'
# 3rd party features: Login Location Fix
login_location_fix:
fix_portal: '&aZaglavljeni ste u portalu tokom prijavljivanja.'
fix_underground: '&aZaglavljeni ste pod zemljom tokom prijavljivanja.'
cannot_fix_underground: '&aZaglavljeni ste pod zemljom tokom prijavljivanja, ali ne možemo to popraviti.'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&cPrekinuti ste zbog duplog prijavljivanja.'

View File

@ -9,7 +9,7 @@ registration:
name_taken: '&cSenin adinda daha once birisi kaydolmus!' name_taken: '&cSenin adinda daha once birisi kaydolmus!'
register_request: '&3Lutfen kayit komutunu kullanin "/register <sifre> <TekrarSifre>"' register_request: '&3Lutfen kayit komutunu kullanin "/register <sifre> <TekrarSifre>"'
command_usage: '&cKullanim: /register <sifre> <TekrarSifre>' command_usage: '&cKullanim: /register <sifre> <TekrarSifre>'
reg_only: '&4Sunucuya kayit sadece internet uzerinden yapilmakta! Lutfen http://ornek.com sitesini kayit icin ziyaret edin!' reg_only: '&4Sunucuya kayit sadece internet uzerinden yapilmakta! Lutfen https://ornek.com sitesini kayit icin ziyaret edin!'
success: '&2Basariyla kaydoldun!' success: '&2Basariyla kaydoldun!'
kicked_admin_registered: 'Bir yetkili seni kayit etti; tekrardan giris yap' kicked_admin_registered: 'Bir yetkili seni kayit etti; tekrardan giris yap'
@ -20,6 +20,7 @@ password:
unsafe_password: '&cSectiginiz sifre guvenli degil, lutfen farkli bir sifre secin...' unsafe_password: '&cSectiginiz sifre guvenli degil, lutfen farkli bir sifre secin...'
forbidden_characters: '&4Sifrenizde izin verilmeyen karakterler bulunmakta. Izin verilen karakterler: %valid_chars' forbidden_characters: '&4Sifrenizde izin verilmeyen karakterler bulunmakta. Izin verilen karakterler: %valid_chars'
wrong_length: '&cSenin sifren ya cok kisa yada cok uzun! Lutfen farkli birsey dene!' wrong_length: '&cSenin sifren ya cok kisa yada cok uzun! Lutfen farkli birsey dene!'
pwned_password: '&cSeçtiğiniz şifre güvenli değil. Zaten %pwned_count kez kullanılmış! Lütfen güçlü bir şifre kullanın...'
# Login # Login
login: login:
@ -57,6 +58,7 @@ unregister:
# Other messages # Other messages
misc: misc:
account_not_activated: '&cHeabiniz henuz aktif edilmemis, e-postanizi kontrol edin!' account_not_activated: '&cHeabiniz henuz aktif edilmemis, e-postanizi kontrol edin!'
not_activated: '&cHesap aktif değil, lütfen tekrar denemeden önce kaydolun ve aktif hale getirin.'
password_changed: '&2Sifre basariyla degistirildi!' password_changed: '&2Sifre basariyla degistirildi!'
logout: '&2Basariyla cikis yaptin!' logout: '&2Basariyla cikis yaptin!'
reload: '&2Ayarlar ve veritabani yenilendi!' reload: '&2Ayarlar ve veritabani yenilendi!'
@ -155,3 +157,17 @@ two_factor:
not_enabled_error: 'Iki-faktorlu kimlik dogrulama kodu hesabiniz icin aktif edilmemis. /2fa add komutunu calistirin' not_enabled_error: 'Iki-faktorlu kimlik dogrulama kodu hesabiniz icin aktif edilmemis. /2fa add komutunu calistirin'
removed_success: 'Iki-faktorlu dogrulama hesabinizdan basariyla kaldirilmistir' removed_success: 'Iki-faktorlu dogrulama hesabinizdan basariyla kaldirilmistir'
invalid_code: 'Gecersiz kod!' invalid_code: 'Gecersiz kod!'
# 3rd party features: Bedrock Auto Login
bedrock_auto_login:
success: '&aBedrock otomatik giriş başarılı!'
# 3rd party features: Login Location Fix
login_location_fix:
fix_portal: '&aGiriş sırasında portalda sıkıştınız.'
fix_underground: '&aGiriş sırasında yeraltında sıkıştınız.'
cannot_fix_underground: '&aGiriş sırasında yeraltında sıkıştınız, ancak bunu düzeltemiyoruz.'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&cÇifte giriş nedeniyle bağlantınız kesildi.'

View File

@ -9,7 +9,7 @@ registration:
name_taken: '&cТакий нікнейм вже зареєстровано.' name_taken: '&cТакий нікнейм вже зареєстровано.'
register_request: '&3Перш ніж почати гру, вам потрібно зареєструвати свій нікнейм!%nl%&3Для цього просто введіть команду "/register <пароль> <повторПароля>"' register_request: '&3Перш ніж почати гру, вам потрібно зареєструвати свій нікнейм!%nl%&3Для цього просто введіть команду "/register <пароль> <повторПароля>"'
command_usage: '&cСинтаксис: /register <пароль> <повторПароля>' command_usage: '&cСинтаксис: /register <пароль> <повторПароля>'
reg_only: '&4Лише зареєстровані гравці можуть підключатись до сервера!%nl%&4Будь ласка, відвідайте http://example.com для реєстрації.' reg_only: '&4Лише зареєстровані гравці можуть підключатись до сервера!%nl%&4Будь ласка, відвідайте https://example.com для реєстрації.'
success: '&2Реєстрація пройшла успішно!' success: '&2Реєстрація пройшла успішно!'
kicked_admin_registered: 'Адміністратор вас зареєстрував; Будь ласка, авторизуйтесь знову!' kicked_admin_registered: 'Адміністратор вас зареєстрував; Будь ласка, авторизуйтесь знову!'
@ -20,6 +20,7 @@ password:
unsafe_password: '&cЦей пароль надто простий! Будь ласка, придумайте інакший...' unsafe_password: '&cЦей пароль надто простий! Будь ласка, придумайте інакший...'
forbidden_characters: '&4Ваш пароль містить недопустимі символи. Підберіть інакший...%nl%&4(Reg-ex: %valid_chars)' forbidden_characters: '&4Ваш пароль містить недопустимі символи. Підберіть інакший...%nl%&4(Reg-ex: %valid_chars)'
wrong_length: '&cВаш пароль надто короткий або надто довгий! Спробуйте інакший...' wrong_length: '&cВаш пароль надто короткий або надто довгий! Спробуйте інакший...'
pwned_password: '&cВаш вибраний пароль небезпечний. Він вже використовувався %pwned_count разів! Будь ласка, використовуйте надійний пароль...'
# Login # Login
login: login:
@ -57,6 +58,7 @@ unregister:
# Other messages # Other messages
misc: misc:
account_not_activated: '&cВаш акаунт ще не активовано. Будь ласка, провірте свою електронну пошту!' account_not_activated: '&cВаш акаунт ще не активовано. Будь ласка, провірте свою електронну пошту!'
not_activated: '&cАкаунт не активовано, будь ласка, зареєструйтесь і активуйте його перед повторною спробою.'
password_changed: '&2Пароль успішно змінено!' password_changed: '&2Пароль успішно змінено!'
logout: '&2Ви вийшли зі свого акаунта!' logout: '&2Ви вийшли зі свого акаунта!'
reload: '&2Конфігурації та базу даних було успішно перезавантажено!' reload: '&2Конфігурації та базу даних було успішно перезавантажено!'
@ -76,7 +78,7 @@ on_join_validation:
name_length: '&4Ваш нікнейм надто короткий або надто довгий!' name_length: '&4Ваш нікнейм надто короткий або надто довгий!'
characters_in_name: '&4Ваш нікнейм містить недопустимі символи! Reg-ex: %valid_chars' characters_in_name: '&4Ваш нікнейм містить недопустимі символи! Reg-ex: %valid_chars'
kick_full_server: '&4Сервер переповнено! Доведеться зачекати доки хтось вийде.' kick_full_server: '&4Сервер переповнено! Доведеться зачекати доки хтось вийде.'
country_banned: '&4Your country is banned from this server!' country_banned: '&4Ваша країна заборонена на цьому сервері!'
not_owner_error: 'Цей акаунт вам не належить! Будь ласка, оберіть інакший нікнейм!' not_owner_error: 'Цей акаунт вам не належить! Будь ласка, оберіть інакший нікнейм!'
invalid_name_case: 'Регістр у вашому нікнеймі відрізняється від регістру при реєстрації.%nl%Поточний регістр: &c%invalid&f. Валідний регістр: &a%valid&f.%nl%Будь ласка, перезайдіть з валідним регістром!' invalid_name_case: 'Регістр у вашому нікнеймі відрізняється від регістру при реєстрації.%nl%Поточний регістр: &c%invalid&f. Валідний регістр: &a%valid&f.%nl%Будь ласка, перезайдіть з валідним регістром!'
quick_command: 'Ви занадто швидко використовували команду! Будь ласка, приєднайтесь знову до сервера і почекайте, перш ніж використовувати будь-яку команду.' quick_command: 'Ви занадто швидко використовували команду! Будь ласка, приєднайтесь знову до сервера і почекайте, перш ніж використовувати будь-яку команду.'
@ -155,3 +157,17 @@ two_factor:
not_enabled_error: 'Двофакторна аутентифікація не включена для вашого акаунту. Використовуйте: /2fa add' not_enabled_error: 'Двофакторна аутентифікація не включена для вашого акаунту. Використовуйте: /2fa add'
removed_success: 'Двофакторну авторизацію успішно видалено з вашого акаунту' removed_success: 'Двофакторну авторизацію успішно видалено з вашого акаунту'
invalid_code: 'Невірний код!' invalid_code: 'Невірний код!'
# 3rd party features: Bedrock Auto Login
bedrock_auto_login:
success: '&aАвтоматичний вхід Bedrock успішний!'
# 3rd party features: Login Location Fix
login_location_fix:
fix_portal: '&aВи застрягли в порталі під час входу.'
fix_underground: '&aВи застрягли під землею під час входу.'
cannot_fix_underground: '&aВи застрягли під землею під час входу, але ми не можемо це виправити.'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&cВас відключено через подвійний вхід.'

View File

@ -9,7 +9,7 @@ registration:
name_taken: '&cTài khoản này đã được đăng ký!' name_taken: '&cTài khoản này đã được đăng ký!'
register_request: '&2Xin vui lòng đăng ký tài khoản với lệnh "/register <mật khẩu> <nhập lại mật khẩu>"' register_request: '&2Xin vui lòng đăng ký tài khoản với lệnh "/register <mật khẩu> <nhập lại mật khẩu>"'
command_usage: '&cSử dụng: /register <mật khẩu> <nhập lại mật khẩu>' command_usage: '&cSử dụng: /register <mật khẩu> <nhập lại mật khẩu>'
reg_only: '&4Chỉ có thành viên mới có thể tham gia máy chủ, vui lòng truy cập trang web http://example.com để đăng ký thành viên!' reg_only: '&4Chỉ có thành viên mới có thể tham gia máy chủ, vui lòng truy cập trang web https://example.com để đăng ký thành viên!'
success: '&2Đăng ký thành công!' success: '&2Đăng ký thành công!'
kicked_admin_registered: 'Một quản trị viên đã đăng ký cho bạn; vui lòng đăng nhập lại' kicked_admin_registered: 'Một quản trị viên đã đăng ký cho bạn; vui lòng đăng nhập lại'
@ -20,6 +20,7 @@ password:
unsafe_password: '&cMật khẩu của bạn vừa đặt không an toàn, vui lòng đặt lại...' unsafe_password: '&cMật khẩu của bạn vừa đặt không an toàn, vui lòng đặt lại...'
forbidden_characters: '&4Mật khẩu của bạn chứa ký tự không hợp lệ. Các ký tự cho phép: %valid_chars' forbidden_characters: '&4Mật khẩu của bạn chứa ký tự không hợp lệ. Các ký tự cho phép: %valid_chars'
wrong_length: '&cMật khẩu của bạn đặt quá dài hoặc quá ngắn, vui lòng đặt lại!' wrong_length: '&cMật khẩu của bạn đặt quá dài hoặc quá ngắn, vui lòng đặt lại!'
pwned_password: '&cMật khẩu bạn chọn không an toàn. Nó đã được sử dụng %pwned_count lần! Vui lòng sử dụng mật khẩu mạnh...'
# Login # Login
login: login:
@ -57,6 +58,7 @@ unregister:
# Other messages # Other messages
misc: misc:
account_not_activated: '&cTài khoản của bạn chưa được kích hoạt, vui lòng kiểm tra email!' account_not_activated: '&cTài khoản của bạn chưa được kích hoạt, vui lòng kiểm tra email!'
not_activated: '&cTài khoản chưa được kích hoạt, vui lòng đăng ký và kích hoạt trước khi thử lại.'
password_changed: '&2Thay đổi mật khẩu thành công!' password_changed: '&2Thay đổi mật khẩu thành công!'
logout: '&2Bạn đã đăng xuất!' logout: '&2Bạn đã đăng xuất!'
reload: '&2Cấu hình và cơ sở dử liệu đã được tải lại thành công!' reload: '&2Cấu hình và cơ sở dử liệu đã được tải lại thành công!'
@ -156,3 +158,16 @@ two_factor:
removed_success: 'Đã thành công tắt xác thực 2 lớp khỏi tài khoản của bạn' removed_success: 'Đã thành công tắt xác thực 2 lớp khỏi tài khoản của bạn'
invalid_code: 'Mã xác thực không hợp lệ!' invalid_code: 'Mã xác thực không hợp lệ!'
# 3rd party features: Bedrock Auto Login
bedrock_auto_login:
success: '&aĐăng nhập tự động Bedrock thành công!'
# 3rd party features: Login Location Fix
login_location_fix:
fix_portal: '&aBạn bị kẹt trong cổng khi đăng nhập.'
fix_underground: '&aBạn bị kẹt dưới lòng đất khi đăng nhập.'
cannot_fix_underground: '&aBạn bị kẹt dưới lòng đất khi đăng nhập, nhưng chúng tôi không thể khắc phục điều này.'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&cBạn đã bị ngắt kết nối do đăng nhập đôi.'

View File

@ -166,17 +166,6 @@ two_factor:
removed_success: '&c双重验证已从您的账号上禁用' removed_success: '&c双重验证已从您的账号上禁用'
invalid_code: '&c无效的验证码' invalid_code: '&c无效的验证码'
# 3rd party features: GUI Captcha
gui_captcha:
success: '&a*** 验证完成 ***'
bedrock_auto_verify_success: '&a*** 基岩版自动验证完成 ***'
captcha_window_name: '&k%random&r&n请验证你是真人'
captcha_clickable_name: '&k%random&r&n我是真人'
message_on_retry: '&c验证失败,你还有 %times 次机会'
denied_message_sending: '&c请先完成验证再聊天!'
kick_on_failed: '&c请先完成验证!'
kick_on_timeout: '&c验证超时'
# 3rd party features: Bedrock Auto Login # 3rd party features: Bedrock Auto Login
bedrock_auto_login: bedrock_auto_login:
success: "&a基岩版自动登录完成" success: "&a基岩版自动登录完成"
@ -190,5 +179,3 @@ login_location_fix:
# 3rd party features: Double Login Fix # 3rd party features: Double Login Fix
double_login_fix: double_login_fix:
fix_message: '&a已修复幽灵玩家, 请重新进入' fix_message: '&a已修复幽灵玩家, 请重新进入'

View File

@ -23,6 +23,7 @@ password:
unsafe_password: '&8[&6用戶系統&8] &c這個密碼太不安全了 ' unsafe_password: '&8[&6用戶系統&8] &c這個密碼太不安全了 '
forbidden_characters: '&8[&6用戶系統&8] &4密碼字符只能含有這些喔%valid_chars' forbidden_characters: '&8[&6用戶系統&8] &4密碼字符只能含有這些喔%valid_chars'
wrong_length: '&8[&6用戶系統&8] &f嗯... 你的密碼並不符合規定長度。' wrong_length: '&8[&6用戶系統&8] &f嗯... 你的密碼並不符合規定長度。'
pwned_password: '&8[&6用戶系統&8] &c你使用的密碼並不安全。它已經被使用了 %pwned_count 次! 請使用一個更強大的密碼...'
# Login # Login
login: login:
@ -42,8 +43,8 @@ error:
unexpected_error: '&8[&6用戶系統&8] &f發生錯誤請與管理員聯絡。' unexpected_error: '&8[&6用戶系統&8] &f發生錯誤請與管理員聯絡。'
max_registration: '&8[&6用戶系統&8] &f你的IP地址已達到註冊數上限。 &7(info: %reg_count/%max_acc %reg_names)' max_registration: '&8[&6用戶系統&8] &f你的IP地址已達到註冊數上限。 &7(info: %reg_count/%max_acc %reg_names)'
logged_in: '&8[&6用戶系統&8] &c你已經登入過了。' logged_in: '&8[&6用戶系統&8] &c你已經登入過了。'
kick_for_vip: '&c喔 因為有VIP玩家登入了伺服器。' kick_for_vip: '&8[&6用戶系統&8] &c喔 因為有VIP玩家登入了伺服器。'
# TODO kick_unresolved_hostname: '&cAn error occurred: unresolved player hostname!' kick_unresolved_hostname: '&8[&6用戶系統&8] &c發生了一個錯誤: 無法解析玩家的主機名'
tempban_max_logins: '&8[&6用戶系統&8] &c因為多次登入失敗你已被暫時封禁。' tempban_max_logins: '&8[&6用戶系統&8] &c因為多次登入失敗你已被暫時封禁。'
# AntiBot # AntiBot
@ -60,6 +61,7 @@ unregister:
# Other messages # Other messages
misc: misc:
account_not_activated: '&8[&6用戶系統&8] &f你的帳戶還沒有經過電郵驗證 ' account_not_activated: '&8[&6用戶系統&8] &f你的帳戶還沒有經過電郵驗證 '
not_activated: '&8[&6用戶系統&8] &c賬戶未激活,請註冊激活後再次嘗試.'
password_changed: '&8[&6用戶系統&8] &c你成功更換了你的密碼 ' password_changed: '&8[&6用戶系統&8] &c你成功更換了你的密碼 '
logout: '&8[&6用戶系統&8] &b你成功登出了。' logout: '&8[&6用戶系統&8] &b你成功登出了。'
reload: '&8[&6用戶系統&8] &b登入系統設定及資料庫重新載入完畢。' reload: '&8[&6用戶系統&8] &b登入系統設定及資料庫重新載入完畢。'
@ -158,3 +160,17 @@ two_factor:
not_enabled_error: '&8[&6用戶系統&8] &c你的帳戶尚未啓用兩步驗證功能 &f你可以使用指令《 /2fa add 》以啓用此功能。' not_enabled_error: '&8[&6用戶系統&8] &c你的帳戶尚未啓用兩步驗證功能 &f你可以使用指令《 /2fa add 》以啓用此功能。'
removed_success: '&8[&6用戶系統&8] &2你已成功關閉兩步驗證功能&c為保障帳戶安全請儘快於可行的情況下重新啟用本功能。' removed_success: '&8[&6用戶系統&8] &2你已成功關閉兩步驗證功能&c為保障帳戶安全請儘快於可行的情況下重新啟用本功能。'
invalid_code: '&8[&6用戶系統&8] &c無效的兩步驗證碼 ' invalid_code: '&8[&6用戶系統&8] &c無效的兩步驗證碼 '
# 3rd party features: Bedrock Auto Login
bedrock_auto_login:
success: "&8[&6用戶系統&8] &a基岩版自動登錄完成"
# 3rd party features: Login Location Fix
login_location_fix:
fix_portal: '&8[&6用戶系統&8] &a你在登錄時卡在了地獄門, 現已修正'
fix_underground: '&8[&6用戶系統&8] &a你被埋住了, 坐標已修正, 下次下線之前請小心!'
cannot_fix_underground: '&8[&6用戶系統&8] &a你被埋住了, 坐標無法修正, 只好送你去了最高點, 自求多福吧少年~'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&8[&6用戶系統&8] &a已修復幽靈玩家, 請重新進入'

View File

@ -9,7 +9,7 @@ registration:
name_taken: '&c您已經註冊此用戶名!' name_taken: '&c您已經註冊此用戶名!'
register_request: '&3[請先注冊] 請按T , 然後輸入 "/register [你的密碼] [重覆確認你的密碼]" 來注冊。' register_request: '&3[請先注冊] 請按T , 然後輸入 "/register [你的密碼] [重覆確認你的密碼]" 來注冊。'
command_usage: '&c使用方法: 輸入"/register [你的密碼] [重覆確認你的密碼]"' command_usage: '&c使用方法: 輸入"/register [你的密碼] [重覆確認你的密碼]"'
reg_only: '&4只有註冊用戶才能加入服務器 請訪問http://example.com註冊' reg_only: '&4只有註冊用戶才能加入服務器 請訪問https://example.com註冊'
success: '&2已成功註冊!' success: '&2已成功註冊!'
kicked_admin_registered: '管理員剛剛註冊了您; 請重新登錄。' kicked_admin_registered: '管理員剛剛註冊了您; 請重新登錄。'
@ -20,6 +20,7 @@ password:
unsafe_password: '&c所選的你的密碼並不安全的請選擇另一個...' unsafe_password: '&c所選的你的密碼並不安全的請選擇另一個...'
forbidden_characters: '&4您的密碼含有非法字符。允許的字符%valid_chars' forbidden_characters: '&4您的密碼含有非法字符。允許的字符%valid_chars'
wrong_length: '&c你的密碼太短或太長!請嘗試另一個!' wrong_length: '&c你的密碼太短或太長!請嘗試另一個!'
pwned_password: '&c你使用的密碼並不安全。它已經被使用了 %pwned_count 次! 請使用一個更強大的密碼...'
# Login # Login
login: login:
@ -40,7 +41,7 @@ error:
max_registration: '&c您已超過註冊的最大數量(%reg_count/%max_acc %reg_names)!' max_registration: '&c您已超過註冊的最大數量(%reg_count/%max_acc %reg_names)!'
logged_in: '&c您已經登錄!' logged_in: '&c您已經登錄!'
kick_for_vip: '&3一名VIP玩家在服務器已滿時已加入伺服器!' kick_for_vip: '&3一名VIP玩家在服務器已滿時已加入伺服器!'
# TODO kick_unresolved_hostname: '&cAn error occurred: unresolved player hostname!' kick_unresolved_hostname: '&c發生了一個錯誤: 無法解析玩家的主機名'
tempban_max_logins: '&c由於登錄失敗次數過多您已被暫時禁止。' tempban_max_logins: '&c由於登錄失敗次數過多您已被暫時禁止。'
# AntiBot # AntiBot
@ -57,6 +58,7 @@ unregister:
# Other messages # Other messages
misc: misc:
account_not_activated: '&c你的帳戶未激活,請確認電郵!' account_not_activated: '&c你的帳戶未激活,請確認電郵!'
not_activated: '&c賬戶未激活,請註冊激活後再次嘗試.'
password_changed: '&2密碼已更變!' password_changed: '&2密碼已更變!'
logout: '&2已成功註銷!' logout: '&2已成功註銷!'
reload: '&2伺服器已正確地被重新加載配置和數據庫' reload: '&2伺服器已正確地被重新加載配置和數據庫'
@ -79,7 +81,7 @@ on_join_validation:
country_banned: '&4您的國家/地區已被禁止使用此伺服器!' country_banned: '&4您的國家/地區已被禁止使用此伺服器!'
not_owner_error: '您不是此帳戶的所有者。 請選擇其他名稱!' not_owner_error: '您不是此帳戶的所有者。 請選擇其他名稱!'
invalid_name_case: '您應該使用用戶名 %valid 而不是 %invalid 來加入。' invalid_name_case: '您應該使用用戶名 %valid 而不是 %invalid 來加入。'
# TODO quick_command: 'You used a command too fast! Please, join the server again and wait more before using any command.' quick_command: '&c您發送命令的速度太快了,請重新加入伺服器等待一會後再使用命令'
# Email # Email
email: email:
@ -90,17 +92,17 @@ email:
old_email_invalid: '&c舊電子郵件地址無效請重試!' old_email_invalid: '&c舊電子郵件地址無效請重試!'
invalid: '&c電子郵件地址無效請重試!' invalid: '&c電子郵件地址無效請重試!'
added: '&2電子郵件地址已成功添加到您的帳戶!' added: '&2電子郵件地址已成功添加到您的帳戶!'
# TODO add_not_allowed: '&cAdding email was not allowed' add_not_allowed: '&c伺服器不允許添加電子郵箱'
request_confirmation: '&c請確認你的電郵地址!' request_confirmation: '&c請確認你的電郵地址!'
changed: '&2已正確地更改電子郵件地址!' changed: '&2已正確地更改電子郵件地址!'
# TODO change_not_allowed: '&cChanging email was not allowed' change_not_allowed: '&c伺服器不允許修改郵箱地址'
# TODO email_show: '&2Your current email address is: &f%email' email_show: '&a該賬戶使用的電子郵箱為: &a%email'
# TODO no_email_for_account: '&2You currently don''t have email address associated with this account.' no_email_for_account: '&c當前並沒有任何郵箱與該賬戶綁定'
already_used: '&4此電子郵件地址已被使用' already_used: '&4此電子郵件地址已被使用'
incomplete_settings: '缺少必要的配置來為發送電子郵件。請聯繫管理員。' incomplete_settings: '缺少必要的配置來為發送電子郵件。請聯繫管理員。'
# TODO send_failure: 'The email could not be sent. Please contact an administrator.' send_failure: '&c郵件已被作廢,請檢查您的郵箱是否正常工作.'
# TODO change_password_expired: 'You cannot change your password using this command anymore.' change_password_expired: '&c您不能使用此命令更改密碼'
# TODO email_cooldown_error: '&cAn email was already sent recently. You must wait %time before you can send a new one.' email_cooldown_error: '&c您需要等待 %time 後才能再次請求發送'
# Password recovery by email # Password recovery by email
recovery: recovery:
@ -110,48 +112,62 @@ recovery:
code: code:
code_sent: '已將重設密碼的恢復代碼發送到您的電子郵件。' code_sent: '已將重設密碼的恢復代碼發送到您的電子郵件。'
incorrect: '恢復代碼錯誤!使用指令: "/email recovery [電郵地址]" 生成新的一個恢復代碼。' incorrect: '恢復代碼錯誤!使用指令: "/email recovery [電郵地址]" 生成新的一個恢復代碼。'
# TODO tries_exceeded: 'You have exceeded the maximum number attempts to enter the recovery code. Use "/email recovery [email]" to generate a new one.' tries_exceeded: '&a您已經達到輸入驗證碼次數的最大允許次數.'
# TODO correct: 'Recovery code entered correctly!' correct: '&a*** 驗證通過 ***'
# TODO change_password: 'Please use the command /email setpassword <new password> to change your password immediately.' change_password: '&c請使用 /email setpassword <新密碼> 立即設置新的密碼'
# Captcha # Captcha
captcha: captcha:
usage_captcha: '&3T要登錄您必須使用captcha驗證碼,請使用命令: "/captcha %captcha_code"' usage_captcha: '&3T要登錄您必須使用captcha驗證碼,請使用命令: "/captcha %captcha_code"'
wrong_captcha: '&c驗證碼錯誤!請按T在聊天中輸入 "/captcha %captcha_code"' wrong_captcha: '&c驗證碼錯誤!請按T在聊天中輸入 "/captcha %captcha_code"'
valid_captcha: '&2驗證碼正確!' valid_captcha: '&2驗證碼正確!'
# TODO captcha_for_registration: 'To register you have to solve a captcha first, please use the command: /captcha %captcha_code' captcha_for_registration: '&7請輸入 /captcha %captcha_code 來驗證操作.'
# TODO register_captcha_valid: '&2Valid captcha! You may now register with /register' register_captcha_valid: '&a驗證通過, 現在可以使用 /register 註冊啦!'
# Verification code # Verification code
verification: verification:
# TODO code_required: '&3This command is sensitive and requires an email verification! Check your inbox and follow the email''s instructions.' code_required: '&a*** 已發送驗證郵件 ***'
# TODO command_usage: '&cUsage: /verification <code>' command_usage: '&c使用方法:/verification <驗證碼>'
# TODO incorrect_code: '&cIncorrect code, please type "/verification <code>" into the chat, using the code you received by email' incorrect_code: '&c錯誤的驗證碼.'
# TODO success: '&2Your identity has been verified! You can now execute all commands within the current session!' success: '&a*** 驗證通過 ***'
# TODO already_verified: '&2You can already execute every sensitive command within the current session!' already_verified: '&a您已經通過驗證'
# TODO code_expired: '&3Your code has expired! Execute another sensitive command to get a new code!' code_expired: '&c驗證碼已失效'
# TODO email_needed: '&3To verify your identity you need to link an email address with your account!!' email_needed: '&c郵箱未綁定'
# Time units # Time units
time: time:
# TODO second: 'second' second: '秒'
# TODO seconds: 'seconds' seconds: '秒'
# TODO minute: 'minute' minute: '分'
# TODO minutes: 'minutes' minutes: '分'
# TODO hour: 'hour' hour: '時'
# TODO hours: 'hours' hours: '時'
# TODO day: 'day' day: '天'
# TODO days: 'days' days: '天'
# Two-factor authentication # Two-factor authentication
two_factor: two_factor:
code_created: '&2您的密碼是 %code。您可以從這裡掃描 %url' code_created: '&2您的密碼是 %code。您可以從這裡掃描 %url'
# TODO confirmation_required: 'Please confirm your code with /2fa confirm <code>' confirmation_required: '&7請輸入“/totp confirm <驗證碼>”來確認啟動雙重驗證'
# TODO code_required: 'Please submit your two-factor authentication code with /2fa code <code>' code_required: '&c請輸入“/totp code <驗證碼>”來提交驗證碼'
# TODO already_enabled: 'Two-factor authentication is already enabled for your account!' already_enabled: '&a雙重驗證已啟用'
# TODO enable_error_no_code: 'No 2fa key has been generated for you or it has expired. Please run /2fa add' enable_error_no_code: '&c驗證碼丟失'
# TODO enable_success: 'Successfully enabled two-factor authentication for your account' enable_success: '&a已成功啟用雙重驗證'
# TODO enable_error_wrong_code: 'Wrong code or code has expired. Please run /2fa add' enable_error_wrong_code: '&c驗證碼錯誤或者已經過期,請重新執行“/totp add”'
# TODO not_enabled_error: 'Two-factor authentication is not enabled for your account. Run /2fa add' not_enabled_error: '&c雙重驗證未在您的賬號上啟用,請使用“/totp add”來啟用'
# TODO removed_success: 'Successfully removed two-factor auth from your account' removed_success: '&c雙重驗證已從您的賬號上禁用'
# TODO invalid_code: 'Invalid code!' invalid_code: '&c無效的驗證碼'
# 3rd party features: Bedrock Auto Login
bedrock_auto_login:
success: "&a基岩版自動登錄完成"
# 3rd party features: Login Location Fix
login_location_fix:
fix_portal: '&a你在登錄時卡在了地獄門, 現已修正'
fix_underground: '&a你被埋住了, 坐標已修正, 下次下線之前請小心!'
cannot_fix_underground: '&a你被埋住了, 坐標無法修正, 只好送你去了最高點, 自求多福吧少年~'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&a已修復幽靈玩家, 請重新進入'

View File

@ -22,6 +22,7 @@ password:
unsafe_password: '&b【AuthMe】&6您不可以使用這個不安全的密碼' unsafe_password: '&b【AuthMe】&6您不可以使用這個不安全的密碼'
forbidden_characters: '&b【AuthMe】&c密碼包含非法字符可使用%valid_chars' forbidden_characters: '&b【AuthMe】&c密碼包含非法字符可使用%valid_chars'
wrong_length: '&b【AuthMe】&6您的密碼 超過最大字數 / 小於最小字數' wrong_length: '&b【AuthMe】&6您的密碼 超過最大字數 / 小於最小字數'
pwned_password: '&b【AuthMe】&c你使用的密碼並不安全。它已經被使用了 %pwned_count 次! 請使用一個更強大的密碼...'
# Login # Login
login: login:
@ -59,6 +60,7 @@ unregister:
# Other messages # Other messages
misc: misc:
account_not_activated: '&b【AuthMe】&6您的帳號還沒有經過驗證檢查看看您的電子郵件 (Email) 吧!' account_not_activated: '&b【AuthMe】&6您的帳號還沒有經過驗證檢查看看您的電子郵件 (Email) 吧!'
not_activated: '&b【AuthMe】&c賬戶未激活,請註冊激活後再次嘗試.'
password_changed: '&b【AuthMe】&6密碼變更成功' password_changed: '&b【AuthMe】&6密碼變更成功'
logout: '&b【AuthMe】&6您已成功登出。' logout: '&b【AuthMe】&6您已成功登出。'
reload: '&b【AuthMe】&6已重新讀取設定檔及資料庫。' reload: '&b【AuthMe】&6已重新讀取設定檔及資料庫。'
@ -157,3 +159,17 @@ two_factor:
not_enabled_error: '&b【AuthMe】&6雙重驗證尚未開啟使用 /2fa add 來開啟。' not_enabled_error: '&b【AuthMe】&6雙重驗證尚未開啟使用 /2fa add 來開啟。'
removed_success: '&b【AuthMe】&6雙重驗證已成功移除' removed_success: '&b【AuthMe】&6雙重驗證已成功移除'
invalid_code: '&b【AuthMe】&c驗證碼錯誤。' invalid_code: '&b【AuthMe】&c驗證碼錯誤。'
# 3rd party features: Bedrock Auto Login
bedrock_auto_login:
success: "&b【AuthMe】&a基岩版自動登錄完成"
# 3rd party features: Login Location Fix
login_location_fix:
fix_portal: '&b【AuthMe】&a你在登錄時卡在了地獄門, 現已修正'
fix_underground: '&b【AuthMe】&a你被埋住了, 坐標已修正, 下次下線之前請小心!'
cannot_fix_underground: '&b【AuthMe】&a你被埋住了, 坐標無法修正, 只好送你去了最高點, 自求多福吧少年~'
# 3rd party features: Double Login Fix
double_login_fix:
fix_message: '&b【AuthMe】&a已修復幽靈玩家, 請重新進入'

View File

@ -110,7 +110,7 @@
<td> <td>
<p style="color:#b0adc5;">© 2024 HomoCraft. All rights reserved.</p> <p style="color:#b0adc5;">© 2024 HomoCraft. All rights reserved.</p>
<a href="1919810.com" target="_blank" <a href="1919810.com" target="_blank"
style="text-decoration: none; font-size: 16px">wdsj.in</a> style="text-decoration: none; font-size: 16px">example.com</a>
</td> </td>
</tr> </tr>
</tbody> </tbody>

View File

@ -1,10 +1,13 @@
# noinspection YAMLSchemaValidation
name: ${pluginDescription.name} name: ${pluginDescription.name}
# noinspection YAMLSchemaValidation
authors: [${pluginDescription.authors}] authors: [${pluginDescription.authors}]
website: http://github.com/HaHaWTH/AuthMeReReloaded/ website: https://github.com/HaHaWTH/AuthMeReReloaded/
description: A fork of AuthMeReloaded that contains bug fixes description: A fork of AuthMeReloaded that contains bug fixes
# noinspection YAMLSchemaValidation
main: ${pluginDescription.main} main: ${pluginDescription.main}
folia-supported: true folia-supported: true
version: 5.6.0-FORK-b46 version: 5.7.0-FORK-b53
api-version: 1.13 api-version: 1.13
softdepend: softdepend:
- Vault - Vault
@ -17,6 +20,7 @@ softdepend:
- EssentialsSpawn - EssentialsSpawn
- ProtocolLib - ProtocolLib
- floodgate - floodgate
- PlaceholderAPI
commands: commands:
authme: authme:
description: AuthMe op commands description: AuthMe op commands

View File

@ -103,7 +103,7 @@
<td> <td>
<p style="color:#b0adc5;">© 2024 HomoCraft. All rights reserved.</p> <p style="color:#b0adc5;">© 2024 HomoCraft. All rights reserved.</p>
<a href="1919810.com" target="_blank" <a href="1919810.com" target="_blank"
style="text-decoration: none; font-size: 16px">wdsj.in</a> style="text-decoration: none; font-size: 16px">example.com</a>
</td> </td>
</tr> </tr>
</tbody> </tbody>

Some files were not shown because too many files have changed in this diff Show More