mirror of
https://github.com/AtlasMediaGroup/TotalFreedomMod.git
synced 2025-04-16 07:33:01 +00:00
Compare commits
436 Commits
2021.05-RC
...
main
Author | SHA1 | Date | |
---|---|---|---|
|
8fee6c7f14 | ||
|
0559e99fb1 | ||
|
1251276451 | ||
|
9e584069e6 | ||
|
11c24cff68 | ||
|
476c87ceb0 | ||
|
9bef4581aa | ||
|
794a25ba16 | ||
|
b4dd35c4df | ||
|
ec19b6d398 | ||
|
b2c636f919 | ||
|
8876076a9d | ||
|
80f19f0349 | ||
|
011535cf16 | ||
|
eb99dcd3a3 | ||
|
597a464623 | ||
|
08c8393abc | ||
|
ac704614c0 | ||
|
04029eb144 | ||
|
00e5403491 | ||
|
08115470b0 | ||
|
6e140ace7d | ||
|
9ce4dc6f3a | ||
|
f67db2286d | ||
|
07b3553748 | ||
|
bbbccc2b10 | ||
|
d471490a94 | ||
|
8f6d276bb6 | ||
|
b5178e6761 | ||
|
e11d72b54b | ||
|
ee594e7c63 | ||
|
41cf62c8c0 | ||
|
268b71f8a3 | ||
|
a84a47980a | ||
|
3a502713ea | ||
|
5dc5e5dcc5 | ||
|
171daf25a4 | ||
|
2fa7b6855b | ||
|
7faf719555 | ||
|
3bcf0f5082 | ||
|
c5f24b46d5 | ||
|
3016c57e3e | ||
|
00351f1163 | ||
|
40d22fa2e3 | ||
|
41923b29d7 | ||
|
0e7a2d9bce | ||
|
dcebf7bbe7 | ||
|
d30e335f57 | ||
|
cca95dc3f1 | ||
|
42b68011ea | ||
|
87d7ba19de | ||
|
16c00e3ed6 | ||
|
79e7f6904b | ||
|
1c096b97e3 | ||
|
cc48f93556 | ||
|
dd373fc9aa | ||
|
41331e719d | ||
|
72c83ba84a | ||
|
3deaaafb88 | ||
|
520bd97176 | ||
|
71127c3152 | ||
|
654f5900ba | ||
|
3bd177ea6f | ||
|
1c0b768e4f | ||
|
67b0656e61 | ||
|
b3e1a8b528 | ||
|
99a5897d44 | ||
|
9064f4b1f2 | ||
|
2698cbf46d | ||
|
d3b4feaec9 | ||
|
c9adb0c5a8 | ||
|
cb642eba08 | ||
|
fa85b8e160 | ||
|
69a06167a1 | ||
|
550ff492ee | ||
|
88914632f5 | ||
|
47445933f3 | ||
|
94d6f0a872 | ||
|
3d67c83ea4 | ||
|
22161b2e90 | ||
|
b1f08c3b7f | ||
|
466745d51f | ||
|
98921b975f | ||
|
35d53ece4e | ||
|
33146fa161 | ||
|
d7fddc3765 | ||
|
0db765af43 | ||
|
f4cb736c17 | ||
|
3763e0728d | ||
|
af18299613 | ||
|
f0d6549eec | ||
|
3b61ba408f | ||
|
af710edc88 | ||
|
459a11e638 | ||
|
2e41414358 | ||
|
a3d7fe19a0 | ||
|
7f4000aff9 | ||
|
d2884f007b | ||
|
58b1890183 | ||
|
8317b1f881 | ||
|
706e9540ce | ||
|
ac00d36dc6 | ||
|
a2133369d2 | ||
|
48728c9524 | ||
|
d343bbc3d7 | ||
|
2c357d1d49 | ||
|
5246639608 | ||
|
7fb4a477dc | ||
|
612499ff0a | ||
|
edb3dbfdbe | ||
|
a332ecfbea | ||
|
7f78549f9d | ||
|
fd6f8a2d17 | ||
|
21c84d76d3 | ||
|
88f53c05b9 | ||
|
51cc527697 | ||
|
ae5038ef0f | ||
|
ec5aa0304e | ||
|
ebafc1c669 | ||
|
9f8dafb075 | ||
|
1eaaf5fcdb | ||
|
42458084d7 | ||
|
0cd2886e40 | ||
|
575568cb05 | ||
|
26be5d0f44 | ||
|
7a724c2f13 | ||
|
9e1aa5d34e | ||
|
4564ad0449 | ||
|
1ddeb4b621 | ||
|
a8665a15d4 | ||
|
c0f3712c8d | ||
|
0dd7bc06eb | ||
|
4d98108a46 | ||
|
02b2810488 | ||
|
7e110e8ac6 | ||
|
6d3f365878 | ||
|
05bb64ce85 | ||
|
b05238c51f | ||
|
7bda4beab0 | ||
|
97544977b0 | ||
|
073356be49 | ||
|
c472c5d5ce | ||
|
cb401577a4 | ||
9d3165694a | |||
|
cffb5d9326 | ||
4e8df0938f | |||
511f172d84 | |||
bfa8b2a752 | |||
594b1f5605 | |||
b9ca4f52a2 | |||
|
d298e923b8 | ||
d0d97c0681 | |||
2540c7c589 | |||
|
6bc91fc779 | ||
|
9a54ef66d1 | ||
|
722ef5f99a | ||
|
6bf6eeec91 | ||
|
9df30a9556 | ||
83bb892056 | |||
|
62ff195ec5 | ||
|
495fe79d94 | ||
|
422b41dc8d | ||
|
f44a1c7e69 | ||
9f8dd91457 | |||
ee45256764 | |||
f6faf3b8bc | |||
|
8210dafcd3 | ||
4eb8174aa9 | |||
ab309032e5 | |||
|
0db661600f | ||
|
d94b184703 | ||
c07473ef6d | |||
|
d7261627ff | ||
6ac7090fef | |||
|
611ee619a0 | ||
|
9d2555cd03 | ||
|
3c4b4140ce | ||
|
0f2d596b7a | ||
|
dcdaecf9b0 | ||
|
b4b10a3020 | ||
|
fb259ca9b7 | ||
|
52a39aa992 | ||
|
b4e7251e3b | ||
|
0f1fbf9481 | ||
|
73eb3226ee | ||
|
8edc87034f | ||
|
68bcabe5c2 | ||
|
ecc92589e9 | ||
|
bf41d08580 | ||
|
0fc20b6c56 | ||
|
9c91166319 | ||
|
09a220e0a2 | ||
|
ad9dd42edb | ||
|
c9f5db0141 | ||
|
47c30c3283 | ||
|
6c426644f6 | ||
|
72bab1e2ed | ||
|
1726050d65 | ||
|
0fc5b01b29 | ||
|
dfd90af017 | ||
|
5af45a2154 | ||
|
54df28022f | ||
|
0326171e85 | ||
|
d13ecea947 | ||
|
7ec053c867 | ||
|
1dcc05e7f5 | ||
|
c913b7ae74 | ||
|
951f3c91d9 | ||
|
b573871c14 | ||
|
78654eb5e8 | ||
|
adbe125283 | ||
|
e6a20e1757 | ||
|
d71d8edf53 | ||
|
6af9f240f4 | ||
|
05745c4210 | ||
|
98388d0d23 | ||
|
1da87eeb37 | ||
|
b656925e4f | ||
|
d4f44e988c | ||
|
c39c632a67 | ||
|
733f002a87 | ||
|
adcccb10e5 | ||
|
3fdc0c05bb | ||
|
2551d184ca | ||
|
f9eabf27d5 | ||
|
76ce98621a | ||
|
bc0495a68f | ||
|
846154a723 | ||
|
804614d011 | ||
|
2c22c6c52d | ||
|
5ef0f29ffe | ||
|
11134f4109 | ||
|
e7992c7eb4 | ||
|
82e966dfb0 | ||
|
f457c4cde2 | ||
|
004a0f3d7c | ||
|
cf5199f28e | ||
|
43c68579e5 | ||
|
127ee7d9f9 | ||
|
c873fd4abc | ||
|
fa90e1d239 | ||
|
b711ed517f | ||
|
2618d97a3e | ||
|
1c4647290a | ||
|
f00f67a844 | ||
|
850f12103c | ||
|
7fd77f3cbb | ||
|
2eb0ab4cb1 | ||
|
2612aaec31 | ||
|
6e7ad73152 | ||
|
af6411b82c | ||
|
e9ba958a4e | ||
|
8cff0124ea | ||
|
1162f10ebb | ||
|
35965b0b10 | ||
|
1253732f77 | ||
|
7ce173e02b | ||
|
aa20a6e579 | ||
|
e1bee32163 | ||
|
4d006ed172 | ||
|
a29392cab2 | ||
|
1ecfb0b066 | ||
|
706229004c | ||
|
a4adfa9bee | ||
|
225ade8753 | ||
|
bf2323bed2 | ||
|
8cbfde8bbc | ||
|
a42cb6aff9 | ||
|
5849947c6b | ||
|
01fdf766ee | ||
|
afe755f5c1 | ||
|
5f97e68e0e | ||
|
1b5bbd1c05 | ||
|
2ecfb88604 | ||
|
8356e831a5 | ||
|
ab00cb840f | ||
|
bb2ddf1129 | ||
|
bba5ec922b | ||
|
58c21bb1aa | ||
|
f190bbeac1 | ||
|
42143c1163 | ||
|
6453e4efca | ||
|
9155ac90b5 | ||
|
1e1367d08f | ||
|
3f690e2ca1 | ||
|
abfa3b977c | ||
|
68adaed997 | ||
|
ecce62f6b4 | ||
|
cf9fdc6fe4 | ||
|
a728ec24d4 | ||
|
74a71b1843 | ||
|
4d469cdc0a | ||
|
4c287ca9b8 | ||
|
912bc1a1e4 | ||
|
a598c933ec | ||
|
936f0b621e | ||
|
387ea6f71e | ||
|
e122c4c5fa | ||
|
180cd81132 | ||
|
d814853036 | ||
|
a1ecf88109 | ||
|
5a6a5ff75d | ||
|
fdba119d5d | ||
|
087b8dd7ea | ||
|
213a43380e | ||
|
8a31b4c5c0 | ||
|
3818aab454 | ||
|
61857dd06f | ||
|
bd647afe92 | ||
|
0e12f5e792 | ||
|
69f17ef2d7 | ||
|
aebe1acec2 | ||
|
938b3aa630 | ||
|
6772333eb4 | ||
|
0204961834 | ||
|
2f332a8c42 | ||
|
e288668c92 | ||
|
caeda219fa | ||
|
e50101df43 | ||
|
ee1b27fa0d | ||
|
6ca61d9c6c | ||
|
2d18d461fe | ||
|
47e6386907 | ||
|
0a9b95bfce | ||
|
fedf80b834 | ||
|
2bdf14f38c | ||
|
b1062fbb6c | ||
|
f00f075551 | ||
|
44ff621d73 | ||
|
032e54e2d4 | ||
|
3ca9835257 | ||
|
f69feed469 | ||
|
8253f94ac4 | ||
|
54cb0cfac4 | ||
|
a4c81f202c | ||
|
da82b27016 | ||
|
daf0126f45 | ||
|
f6d46b6178 | ||
|
a2d11d4b93 | ||
|
23caa4e853 | ||
|
a51f5c9bbf | ||
|
ee804d52ff | ||
|
dc490659c1 | ||
|
0d09c3a550 | ||
|
4c3f188bb8 | ||
|
e2ccd14eb3 | ||
|
af1df22812 | ||
|
f380898bb7 | ||
|
464ed85f1b | ||
|
7dd235b166 | ||
|
1474a80875 | ||
|
f45466ee24 | ||
|
d70b7bbec2 | ||
|
541c66c3de | ||
|
77fd4ff66a | ||
|
d901cbaa81 | ||
|
538ed7020d | ||
|
18e6ef16be | ||
|
a335a2acf7 | ||
|
2eb6cc0036 | ||
|
5322d8ab64 | ||
|
dccc315869 | ||
|
7657ae1928 | ||
|
dcaf1ec11a | ||
|
33aca2a482 | ||
|
0582c2e5be | ||
|
159eda73a1 | ||
|
101987cc17 | ||
|
6874b2ce13 | ||
|
3be0ffba4e | ||
|
da2d25252b | ||
|
c8a4382a7b | ||
|
3f89f3f48e | ||
|
871acc2eeb | ||
|
a9c9979b1c | ||
|
fc3fe871b3 | ||
|
e99aaa2eb4 | ||
|
62529a6171 | ||
|
0caf972248 | ||
|
a37364d07e | ||
|
4ac9844534 | ||
|
939e98b759 | ||
|
d99f3e657b | ||
|
92bbb62379 | ||
|
e4a0943af2 | ||
|
36bd8c0fad | ||
|
d77f59435b | ||
|
a08fd2afb6 | ||
|
6fd075fe96 | ||
|
f57fc56f4a | ||
|
a6ca6b122c | ||
|
064e73f58b | ||
|
32138b2e59 | ||
|
e1c3bad4d0 | ||
|
4e78027f0c | ||
|
721f4f9fc3 | ||
|
24ad2611a9 | ||
|
c238f251f2 | ||
|
02848e3439 | ||
|
9550f54e2b | ||
|
39dade78e3 | ||
|
5b6d8b01a4 | ||
|
96bc83cead | ||
|
be700a90ce | ||
|
6d1fce1716 | ||
|
d3665f31fe | ||
|
4188cb80fa | ||
|
62fe72d99b | ||
|
f4749559d2 | ||
|
ed815794ed | ||
|
0c12a19d1d | ||
|
96d47e8e0c | ||
|
3027e2a18c | ||
|
06025b2e69 | ||
|
da7e8f64aa | ||
|
17b051e2a7 | ||
|
77a05f22a8 | ||
|
5c3ef1f107 | ||
|
53c5991971 | ||
|
ff760a6c11 | ||
|
63069ff9ec | ||
|
5e63b71861 | ||
|
b72782de4f | ||
|
de9556c550 | ||
|
6590504545 | ||
|
8d1e8dcf05 | ||
|
07b5076717 | ||
|
6fb9507a4c | ||
|
879a524bb4 | ||
|
c60b451ce7 | ||
|
f85f3e32ea | ||
|
57b3351047 | ||
|
dd10eb3f5e | ||
|
a498104777 | ||
|
4e577f97fa | ||
|
caaa067096 |
23
.github/dependabot.yml
vendored
Normal file
23
.github/dependabot.yml
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
# To get started with Dependabot version updates, you'll need to specify which
|
||||||
|
# package ecosystems to update and where the package manifests are located.
|
||||||
|
# Please see the documentation for all configuration options:
|
||||||
|
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
||||||
|
|
||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
|
||||||
|
# Maintain Maven Updates
|
||||||
|
- package-ecosystem: "maven" # See documentation for possible values
|
||||||
|
directory: "/" # Location of package manifests
|
||||||
|
target-branch: "development"
|
||||||
|
open-pull-requests-limit: 50
|
||||||
|
schedule:
|
||||||
|
interval: "daily"
|
||||||
|
|
||||||
|
# Maintain dependencies for GitHub Actions
|
||||||
|
- package-ecosystem: "github-actions"
|
||||||
|
directory: "/"
|
||||||
|
target-branch: "development"
|
||||||
|
open-pull-requests-limit: 50
|
||||||
|
schedule:
|
||||||
|
interval: "daily"
|
6
.github/workflows/codacy-analysis.yml
vendored
6
.github/workflows/codacy-analysis.yml
vendored
@ -21,11 +21,11 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
# Checkout the repository to the GitHub Actions runner
|
# Checkout the repository to the GitHub Actions runner
|
||||||
- name: Checkout code
|
- name: Checkout code
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
# Execute Codacy Analysis CLI and generate a SARIF output with the security issues identified during the analysis
|
# Execute Codacy Analysis CLI and generate a SARIF output with the security issues identified during the analysis
|
||||||
- name: Run Codacy Analysis CLI
|
- name: Run Codacy Analysis CLI
|
||||||
uses: codacy/codacy-analysis-cli-action@1.1.0
|
uses: codacy/codacy-analysis-cli-action@v4
|
||||||
with:
|
with:
|
||||||
# Check https://github.com/codacy/codacy-analysis-cli#project-token to get your project token from your Codacy repository
|
# Check https://github.com/codacy/codacy-analysis-cli#project-token to get your project token from your Codacy repository
|
||||||
# You can also omit the token and run the tools that support default configurations
|
# You can also omit the token and run the tools that support default configurations
|
||||||
@ -41,6 +41,6 @@ jobs:
|
|||||||
|
|
||||||
# Upload the SARIF file generated in the previous step
|
# Upload the SARIF file generated in the previous step
|
||||||
- name: Upload SARIF results file
|
- name: Upload SARIF results file
|
||||||
uses: github/codeql-action/upload-sarif@v1
|
uses: github/codeql-action/upload-sarif@v2
|
||||||
with:
|
with:
|
||||||
sarif_file: results.sarif
|
sarif_file: results.sarif
|
||||||
|
13
.github/workflows/codeql-analysis.yml
vendored
13
.github/workflows/codeql-analysis.yml
vendored
@ -35,17 +35,18 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
- name: Setup Java JDK
|
- name: Setup Java JDK
|
||||||
uses: actions/setup-java@v1.4.3
|
uses: actions/setup-java@v3
|
||||||
with:
|
with:
|
||||||
# The Java version to make available on the path. Takes a whole or semver Java version, or 1.x syntax (e.g. 1.8 => Java 8.x). Early access versions can be specified in the form of e.g. 14-ea, 14.0.0-ea, or 14.0.0-ea.28
|
# The Java version to make available on the path. Takes a whole or semver Java version, or 1.x syntax (e.g. 1.8 => Java 8.x). Early access versions can be specified in the form of e.g. 14-ea, 14.0.0-ea, or 14.0.0-ea.28
|
||||||
java-version: 11
|
java-version: 17
|
||||||
|
distribution: 'adopt'
|
||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
# Initializes the CodeQL tools for scanning.
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@v1
|
uses: github/codeql-action/init@v2
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
@ -56,7 +57,7 @@ jobs:
|
|||||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
||||||
# If this step fails, then you should remove it and run the build manually (see below)
|
# If this step fails, then you should remove it and run the build manually (see below)
|
||||||
- name: Autobuild
|
- name: Autobuild
|
||||||
uses: github/codeql-action/autobuild@v1
|
uses: github/codeql-action/autobuild@v2
|
||||||
|
|
||||||
# ℹ️ Command-line programs to run using the OS shell.
|
# ℹ️ Command-line programs to run using the OS shell.
|
||||||
# 📚 https://git.io/JvXDl
|
# 📚 https://git.io/JvXDl
|
||||||
@ -70,4 +71,4 @@ jobs:
|
|||||||
# make release
|
# make release
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@v1
|
uses: github/codeql-action/analyze@v2
|
||||||
|
21
.github/workflows/java17-maven.yml
vendored
Normal file
21
.github/workflows/java17-maven.yml
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
name: Java17-Maven-Build
|
||||||
|
|
||||||
|
on: [push]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-java-17:
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
# Checkout the code
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
# Java 16 Builds
|
||||||
|
- name: Set up JDK 17
|
||||||
|
uses: actions/setup-java@v3
|
||||||
|
with:
|
||||||
|
java-version: 17
|
||||||
|
distribution: 'adopt'
|
||||||
|
- name: Build with Maven
|
||||||
|
run: mvn -B package --file pom.xml
|
17
.github/workflows/maven.yml
vendored
17
.github/workflows/maven.yml
vendored
@ -1,17 +0,0 @@
|
|||||||
name: Maven-Build
|
|
||||||
|
|
||||||
on: [push]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v1
|
|
||||||
- name: Set up JDK 1.8
|
|
||||||
uses: actions/setup-java@v1
|
|
||||||
with:
|
|
||||||
java-version: 11
|
|
||||||
- name: Build with Maven
|
|
||||||
run: mvn -B package --file pom.xml
|
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -39,3 +39,6 @@ manifest.mf
|
|||||||
ehthumbs.db
|
ehthumbs.db
|
||||||
Thumbs.db
|
Thumbs.db
|
||||||
.idea/inspectionProfiles/Project_Default.xml
|
.idea/inspectionProfiles/Project_Default.xml
|
||||||
|
|
||||||
|
# Common working directory
|
||||||
|
run/
|
13
.travis.yml
13
.travis.yml
@ -1,13 +0,0 @@
|
|||||||
language: java
|
|
||||||
jdk:
|
|
||||||
- oraclejdk11
|
|
||||||
- openjdk11
|
|
||||||
notifications:
|
|
||||||
email: false
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
packages:
|
|
||||||
- sshpass
|
|
||||||
script: mvn clean install
|
|
||||||
after_success:
|
|
||||||
- ./travis-upload.sh
|
|
@ -1,4 +1,4 @@
|
|||||||
# TotalFreedomMod [](https://travis-ci.com/AtlasMediaGroup/TotalFreedomMod) [](https://www.codacy.com/gh/AtlasMediaGroup/TotalFreedomMod/dashboard?utm_source=github.com&utm_medium=referral&utm_content=AtlasMediaGroup/TotalFreedomMod&utm_campaign=Badge_Grade)
|
# TotalFreedomMod [](https://github.com/AtlasMediaGroup/TotalFreedomMod/actions/workflows/java17-maven.yml) [](https://www.codacy.com/gh/AtlasMediaGroup/TotalFreedomMod/dashboard?utm_source=github.com&utm_medium=referral&utm_content=AtlasMediaGroup/TotalFreedomMod&utm_campaign=Badge_Grade) [](https://github.com/AtlasMediaGroup/TotalFreedomMod/actions/workflows/codeql-analysis.yml)
|
||||||
|
|
||||||
TotalFreedomMod is a CraftBukkit server plugin designed primarily to support the [Official TotalFreedom Minecraft Server](https://totalfreedom.me/). However, you are more than welcome to adapt the source for your own server.
|
TotalFreedomMod is a CraftBukkit server plugin designed primarily to support the [Official TotalFreedom Minecraft Server](https://totalfreedom.me/). However, you are more than welcome to adapt the source for your own server.
|
||||||
|
|
||||||
@ -14,4 +14,4 @@ For information on our security policy and reporting an issue, please see [SECUR
|
|||||||
|
|
||||||
### Compiling
|
### Compiling
|
||||||
|
|
||||||
You need Maven to build. You'd also need to set the JDK version to Java 8 as that is the current standard as of now.
|
You need Maven to build. You'd also need to set the JDK version to Java 11 as that is the current standard as of now.
|
||||||
|
40
SECURITY.md
40
SECURITY.md
@ -2,18 +2,38 @@
|
|||||||
|
|
||||||
## Supported Versions
|
## Supported Versions
|
||||||
|
|
||||||
We currently support the code running on the "development" branch of this repository. This is supported in addition to those formal releases, but note anything not yet released should be treated as in-development.
|
We currently support the code running on the "main" branch and "development" branch of this repository. This is supported in addition to those formal releases, but note anything not yet released should be treated as in-development.
|
||||||
|
|
||||||
In terms of plugin releases, we support the following versions:
|
In terms of plugin releases, our support matrix is as follows:
|
||||||
|
|
||||||
| Version | Supported |
|
### Actively Supported
|
||||||
| ------------------- | ------------------ |
|
These versions are currently actively supported by our team, and you should expect security patches where appropriate for these versions.
|
||||||
| 2021.04 | :white_check_mark: |
|
|
||||||
| 2021.02 | :white_check_mark: |
|
| Version | Supported | Support End: |
|
||||||
| 2020.11 | :white_check_mark: |
|
| ------------------- | ---------- | ------------------------------ |
|
||||||
| 6.0.x (Pre-Release) | :x: |
|
| 2022.02 | ✅ | No Earlier than May 2022 |
|
||||||
| < 2020.11 | :x: |
|
|
||||||
| < 5.x | :x: |
|
### Legacy Supported
|
||||||
|
These versions are no longer under active development, however we will look to release critical secuirty patches where appropriate.
|
||||||
|
|
||||||
|
| Version | Supported | Support End: |
|
||||||
|
| ------------------- | ---------- | ------------ |
|
||||||
|
| 2021.09 | ⚠️ | April 2022 |
|
||||||
|
|
||||||
|
|
||||||
|
### No Longer Supported
|
||||||
|
These versions are no longer supported at all. It is strongly advised to update if you are running any of these versions.
|
||||||
|
|
||||||
|
| Version | Supported | Support Ended: |
|
||||||
|
| ------------------- | ------------------ | ------------------- |
|
||||||
|
| 2021.06 | :x: | October 2021 |
|
||||||
|
| 2021.05 | :x: | September 2021 |
|
||||||
|
| 2021.04 | :x: | July 2021 |
|
||||||
|
| 2021.02 | :x: | 6 June 2021 |
|
||||||
|
| 2020.11 | :x: | 3 May 2021 |
|
||||||
|
| 6.0.x (Pre-Release) | :x: | December 2020 |
|
||||||
|
| < 2020.11 | :x: | December 2020 |
|
||||||
|
| < 5.x | :x: | December 2020 |
|
||||||
|
|
||||||
## Reporting a Vulnerability
|
## Reporting a Vulnerability
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ You can copy and paste the single properties, into the pom.xml file and the IDE
|
|||||||
That way multiple projects can share the same settings (useful for formatting rules for example).
|
That way multiple projects can share the same settings (useful for formatting rules for example).
|
||||||
Any value defined here will override the pom.xml file value but is only applicable to the current project.
|
Any value defined here will override the pom.xml file value but is only applicable to the current project.
|
||||||
-->
|
-->
|
||||||
<netbeans.hint.jdkPlatform>JDK_11</netbeans.hint.jdkPlatform>
|
<netbeans.hint.jdkPlatform>JDK_17</netbeans.hint.jdkPlatform>
|
||||||
<netbeans.checkstyle.format>true</netbeans.checkstyle.format>
|
<netbeans.checkstyle.format>true</netbeans.checkstyle.format>
|
||||||
</properties>
|
</properties>
|
||||||
</project-shared-configuration>
|
</project-shared-configuration>
|
||||||
|
153
pom.xml
153
pom.xml
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
<groupId>me.totalfreedom</groupId>
|
<groupId>me.totalfreedom</groupId>
|
||||||
<artifactId>TotalFreedomMod</artifactId>
|
<artifactId>TotalFreedomMod</artifactId>
|
||||||
<version>2021.04</version>
|
<version>2022.06.1</version>
|
||||||
<packaging>jar</packaging>
|
<packaging>jar</packaging>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
@ -39,9 +39,10 @@
|
|||||||
</scm>
|
</scm>
|
||||||
|
|
||||||
<repositories>
|
<repositories>
|
||||||
|
|
||||||
<repository>
|
<repository>
|
||||||
<id>jitpack.io</id>
|
<id>atlas-nexus-01-totalfreedom-development</id>
|
||||||
<url>https://jitpack.io</url>
|
<url>https://nexus-01.core.atlas-media.co.uk/repository/totalfreedom-development/</url>
|
||||||
</repository>
|
</repository>
|
||||||
|
|
||||||
<repository>
|
<repository>
|
||||||
@ -49,11 +50,6 @@
|
|||||||
<url>https://repo.codemc.org/repository/maven-public/</url>
|
<url>https://repo.codemc.org/repository/maven-public/</url>
|
||||||
</repository>
|
</repository>
|
||||||
|
|
||||||
<repository>
|
|
||||||
<id>nms-repo</id>
|
|
||||||
<url>https://repo.codemc.org/repository/nms/</url>
|
|
||||||
</repository>
|
|
||||||
|
|
||||||
<repository>
|
<repository>
|
||||||
<id>spigot-repo</id>
|
<id>spigot-repo</id>
|
||||||
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
|
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
|
||||||
@ -69,11 +65,6 @@
|
|||||||
<url>https://maven.elmakers.com/repository/</url>
|
<url>https://maven.elmakers.com/repository/</url>
|
||||||
</repository>
|
</repository>
|
||||||
|
|
||||||
<repository>
|
|
||||||
<id>sk89q-snapshots</id>
|
|
||||||
<url>https://maven.sk89q.com/artifactory/repo</url>
|
|
||||||
</repository>
|
|
||||||
|
|
||||||
<repository>
|
<repository>
|
||||||
<id>dv8tion</id>
|
<id>dv8tion</id>
|
||||||
<name>m2-dv8tion</name>
|
<name>m2-dv8tion</name>
|
||||||
@ -96,24 +87,10 @@
|
|||||||
</repository>
|
</repository>
|
||||||
|
|
||||||
<repository>
|
<repository>
|
||||||
<id>sk89q-repo</id>
|
<id>esentialsx-repo</id>
|
||||||
<url>https://maven.sk89q.com/repo/</url>
|
<url>https://repo.essentialsx.net/releases/</url>
|
||||||
</repository>
|
</repository>
|
||||||
|
|
||||||
<repository>
|
|
||||||
<id>papermc</id>
|
|
||||||
<url>https://papermc.io/repo/repository/maven-public/</url>
|
|
||||||
</repository>
|
|
||||||
|
|
||||||
<repository>
|
|
||||||
<id>rayzr-repo</id>
|
|
||||||
<url>https://cdn.rawgit.com/Rayzr522/maven-repo/master/</url>
|
|
||||||
</repository>
|
|
||||||
|
|
||||||
<repository>
|
|
||||||
<id>ess-repo</id>
|
|
||||||
<url>https://ci.ender.zone/plugin/repository/everything/</url>
|
|
||||||
</repository>
|
|
||||||
</repositories>
|
</repositories>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
@ -121,42 +98,28 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>commons-io</groupId>
|
<groupId>commons-io</groupId>
|
||||||
<artifactId>commons-io</artifactId>
|
<artifactId>commons-io</artifactId>
|
||||||
<version>2.8.0</version>
|
<version>2.13.0</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.commons</groupId>
|
<groupId>org.apache.commons</groupId>
|
||||||
<artifactId>commons-lang3</artifactId>
|
<artifactId>commons-lang3</artifactId>
|
||||||
<version>3.11</version>
|
<version>3.12.0</version>
|
||||||
<scope>compile</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>commons-codec</groupId>
|
|
||||||
<artifactId>commons-codec</artifactId>
|
|
||||||
<version>1.15</version>
|
|
||||||
<scope>compile</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.github.speedxx</groupId>
|
|
||||||
<artifactId>Mojangson</artifactId>
|
|
||||||
<version>1957eef8d6</version>
|
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.bstats</groupId>
|
<groupId>org.bstats</groupId>
|
||||||
<artifactId>bstats-bukkit</artifactId>
|
<artifactId>bstats-bukkit</artifactId>
|
||||||
<version>1.8</version>
|
<version>3.0.2</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.spigotmc</groupId>
|
<groupId>me.totalfreedom.scissors</groupId>
|
||||||
<artifactId>spigot</artifactId>
|
<artifactId>Scissors-API</artifactId>
|
||||||
<version>1.16.5-R0.1-SNAPSHOT</version>
|
<version>1.19.4-R0.1-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
@ -168,58 +131,44 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.TotalFreedomMC</groupId>
|
<groupId>com.github.AtlasMediaGroup</groupId>
|
||||||
<artifactId>TF-LibsDisguises</artifactId>
|
<artifactId>TF-LibsDisguises</artifactId>
|
||||||
<version>48f01cf2fe</version>
|
<version>5a340341b0</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.sk89q.worldedit</groupId>
|
<groupId>com.sk89q.worldedit</groupId>
|
||||||
<artifactId>worldedit-bukkit</artifactId>
|
<artifactId>worldedit-bukkit</artifactId>
|
||||||
<version>7.3.0-SNAPSHOT</version>
|
<version>7.2.15</version>
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>net.ess3</groupId>
|
|
||||||
<artifactId>EssentialsX</artifactId>
|
|
||||||
<version>2.18.2</version>
|
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.dv8tion</groupId>
|
<groupId>net.dv8tion</groupId>
|
||||||
<artifactId>JDA</artifactId>
|
<artifactId>JDA</artifactId>
|
||||||
<version>4.2.1_255</version>
|
<version>4.4.1_353</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.coreprotect</groupId>
|
<groupId>net.coreprotect</groupId>
|
||||||
<artifactId>coreprotect</artifactId>
|
<artifactId>coreprotect</artifactId>
|
||||||
<version>19.3</version>
|
<version>21.3</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.sk89q.worldguard</groupId>
|
<groupId>com.sk89q.worldguard</groupId>
|
||||||
<artifactId>worldguard-bukkit</artifactId>
|
<artifactId>worldguard-bukkit</artifactId>
|
||||||
<version>7.0.4</version>
|
<version>7.0.8</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>io.papermc</groupId>
|
<groupId>io.papermc</groupId>
|
||||||
<artifactId>paperlib</artifactId>
|
<artifactId>paperlib</artifactId>
|
||||||
<version>1.0.6</version>
|
<version>1.0.8</version>
|
||||||
<scope>compile</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>me.rayzr522</groupId>
|
|
||||||
<artifactId>jsonmessage</artifactId>
|
|
||||||
<version>1.0.0</version>
|
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
@ -229,61 +178,63 @@
|
|||||||
<version>v1.9</version>
|
<version>v1.9</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>net.goldtreeservers</groupId>
|
<groupId>net.essentialsx</groupId>
|
||||||
<artifactId>worldguardextraflags</artifactId>
|
<artifactId>EssentialsX</artifactId>
|
||||||
<version>4.0.0</version>
|
<version>2.20.0</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.reflections</groupId>
|
<groupId>org.reflections</groupId>
|
||||||
<artifactId>reflections</artifactId>
|
<artifactId>reflections</artifactId>
|
||||||
<version>0.9.12</version>
|
<version>0.10.2</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.javassist</groupId>
|
<groupId>org.javassist</groupId>
|
||||||
<artifactId>javassist</artifactId>
|
<artifactId>javassist</artifactId>
|
||||||
<version>3.27.0-GA</version>
|
<version>3.29.1-GA</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
|
||||||
<groupId>com.github.AtlasMediaGroup</groupId>
|
|
||||||
<artifactId>TFGuilds</artifactId>
|
|
||||||
<version>master-SNAPSHOT</version>
|
|
||||||
<scope>provided</scope>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jetbrains</groupId>
|
<groupId>org.jetbrains</groupId>
|
||||||
<artifactId>annotations</artifactId>
|
<artifactId>annotations</artifactId>
|
||||||
<version>20.1.0</version>
|
<version>24.0.1</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-checkstyle-plugin</artifactId>
|
<artifactId>maven-checkstyle-plugin</artifactId>
|
||||||
<version>3.1.1</version>
|
<version>3.3.0</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.junit.jupiter</groupId>
|
<groupId>org.junit.jupiter</groupId>
|
||||||
<artifactId>junit-jupiter</artifactId>
|
<artifactId>junit-jupiter</artifactId>
|
||||||
<version>5.4.2</version>
|
<version>5.10.0</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.eclipse.sisu</groupId>
|
<groupId>org.eclipse.sisu</groupId>
|
||||||
<artifactId>org.eclipse.sisu.inject</artifactId>
|
<artifactId>org.eclipse.sisu.inject</artifactId>
|
||||||
<version>0.3.4</version>
|
<version>0.3.5</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
|
<pluginRepositories>
|
||||||
|
<pluginRepository>
|
||||||
|
<id>apache.snapshots</id>
|
||||||
|
<url>https://repository.apache.org/snapshots/</url>
|
||||||
|
</pluginRepository>
|
||||||
|
</pluginRepositories>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
<!-- Filter resources for build.properties -->
|
<!-- Filter resources for build.properties -->
|
||||||
<resources>
|
<resources>
|
||||||
@ -298,12 +249,12 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-compiler-plugin</artifactId>
|
<artifactId>maven-compiler-plugin</artifactId>
|
||||||
<version>3.8.1</version>
|
<version>3.11.0</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<outputFileName>TotalFreedomMod.jar</outputFileName>
|
<outputFileName>TotalFreedomMod.jar</outputFileName>
|
||||||
<compilerVersion>11</compilerVersion>
|
<compilerVersion>17</compilerVersion>
|
||||||
<source>11</source>
|
<source>17</source>
|
||||||
<target>11</target>
|
<target>17</target>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
|
||||||
@ -311,7 +262,7 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>pl.project13.maven</groupId>
|
<groupId>pl.project13.maven</groupId>
|
||||||
<artifactId>git-commit-id-plugin</artifactId>
|
<artifactId>git-commit-id-plugin</artifactId>
|
||||||
<version>4.0.2</version>
|
<version>4.9.10</version>
|
||||||
<executions>
|
<executions>
|
||||||
<execution>
|
<execution>
|
||||||
<id>get-the-git-infos</id>
|
<id>get-the-git-infos</id>
|
||||||
@ -352,7 +303,7 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-antrun-plugin</artifactId>
|
<artifactId>maven-antrun-plugin</artifactId>
|
||||||
<version>1.8</version>
|
<version>3.1.0</version>
|
||||||
<executions>
|
<executions>
|
||||||
<execution>
|
<execution>
|
||||||
<id>default-cli</id>
|
<id>default-cli</id>
|
||||||
@ -382,7 +333,7 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.codehaus.mojo</groupId>
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
<artifactId>properties-maven-plugin</artifactId>
|
<artifactId>properties-maven-plugin</artifactId>
|
||||||
<version>1.0.0</version>
|
<version>1.1.0</version>
|
||||||
<executions>
|
<executions>
|
||||||
<execution>
|
<execution>
|
||||||
<phase>initialize</phase>
|
<phase>initialize</phase>
|
||||||
@ -402,7 +353,7 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.codehaus.mojo</groupId>
|
<groupId>org.codehaus.mojo</groupId>
|
||||||
<artifactId>buildnumber-maven-plugin</artifactId>
|
<artifactId>buildnumber-maven-plugin</artifactId>
|
||||||
<version>1.4</version>
|
<version>3.2.0</version>
|
||||||
<executions>
|
<executions>
|
||||||
<execution>
|
<execution>
|
||||||
<phase>generate-resources</phase>
|
<phase>generate-resources</phase>
|
||||||
@ -427,7 +378,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.2.4</version>
|
<version>3.4.1</version>
|
||||||
<executions>
|
<executions>
|
||||||
<execution>
|
<execution>
|
||||||
<phase>package</phase>
|
<phase>package</phase>
|
||||||
@ -449,16 +400,10 @@
|
|||||||
</relocations>
|
</relocations>
|
||||||
<artifactSet>
|
<artifactSet>
|
||||||
<includes>
|
<includes>
|
||||||
<include>commons-io:commons-io</include>
|
|
||||||
<include>org.apache.commons:commons-lang3</include>
|
|
||||||
<include>commons-codec:commons-codec</include>
|
|
||||||
<include>org.reflections:reflections</include>
|
<include>org.reflections:reflections</include>
|
||||||
<include>org.javassist:javassist</include>
|
|
||||||
<include>me.rayzr522:jsonmessage</include>
|
|
||||||
<include>io.papermc:paperlib</include>
|
<include>io.papermc:paperlib</include>
|
||||||
<include>com.github.speedxx:Mojangson</include>
|
|
||||||
<include>org.bstats:bstats-bukkit</include>
|
<include>org.bstats:bstats-bukkit</include>
|
||||||
<include>org.jetbrains:annotations</include>
|
<include>org.bstats:bstats-base</include>
|
||||||
</includes>
|
</includes>
|
||||||
</artifactSet>
|
</artifactSet>
|
||||||
</configuration>
|
</configuration>
|
||||||
@ -475,7 +420,7 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-checkstyle-plugin</artifactId>
|
<artifactId>maven-checkstyle-plugin</artifactId>
|
||||||
<version>3.1.1</version>
|
<version>3.1.2</version>
|
||||||
<configuration>
|
<configuration>
|
||||||
<configLocation>checkstyle.xml</configLocation>
|
<configLocation>checkstyle.xml</configLocation>
|
||||||
<failOnViolation>true</failOnViolation>
|
<failOnViolation>true</failOnViolation>
|
||||||
|
@ -2,8 +2,8 @@ package me.totalfreedom.totalfreedommod;
|
|||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.bukkit.ChatColor;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
import org.bukkit.entity.Player;
|
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;
|
||||||
@ -35,10 +35,10 @@ public class AntiNuke extends FreedomService
|
|||||||
|
|
||||||
if (fPlayer.incrementAndGetBlockDestroyCount() > ConfigEntry.NUKE_MONITOR_COUNT_BREAK.getInteger())
|
if (fPlayer.incrementAndGetBlockDestroyCount() > ConfigEntry.NUKE_MONITOR_COUNT_BREAK.getInteger())
|
||||||
{
|
{
|
||||||
FUtil.bcastMsg(player.getName() + " is breaking blocks too fast!", ChatColor.RED);
|
server.broadcast(Component.text(player.getName()).append(Component.text(" is breaking blocks too fast!"))
|
||||||
//plugin.ae.autoEject(player, "You are breaking blocks too fast. Nukers are not permitted on this server.");
|
.color(NamedTextColor.RED));
|
||||||
player.kickPlayer(ChatColor.RED + "You are breaking blocks too fast. Nukers are not permitted on this server.");
|
player.kick(Component.text("You are breaking blocks too fast. Nukers are not permitted on this server.",
|
||||||
|
NamedTextColor.RED));
|
||||||
fPlayer.resetBlockDestroyCount();
|
fPlayer.resetBlockDestroyCount();
|
||||||
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
@ -58,10 +58,9 @@ public class AntiNuke extends FreedomService
|
|||||||
|
|
||||||
if (fPlayer.incrementAndGetBlockPlaceCount() > ConfigEntry.NUKE_MONITOR_COUNT_PLACE.getInteger())
|
if (fPlayer.incrementAndGetBlockPlaceCount() > ConfigEntry.NUKE_MONITOR_COUNT_PLACE.getInteger())
|
||||||
{
|
{
|
||||||
FUtil.bcastMsg(player.getName() + " is placing blocks too fast!", ChatColor.RED);
|
server.broadcast(Component.text(player.getName()).append(Component.text(" is placing blocks too fast!"))
|
||||||
//plugin.ae.autoEject(player, "You are placing blocks too fast.");
|
.color(NamedTextColor.RED));
|
||||||
player.kickPlayer(ChatColor.RED + "You are placing blocks too fast.");
|
player.kick(Component.text("You are placing blocks too fast.", NamedTextColor.RED));
|
||||||
|
|
||||||
fPlayer.resetBlockPlaceCount();
|
fPlayer.resetBlockPlaceCount();
|
||||||
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
@ -2,60 +2,48 @@ package me.totalfreedom.totalfreedommod;
|
|||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
||||||
import me.totalfreedom.totalfreedommod.util.FSync;
|
import net.kyori.adventure.text.Component;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.entity.Player;
|
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.player.AsyncPlayerChatEvent;
|
import org.bukkit.event.player.AsyncPlayerChatEvent;
|
||||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
import org.bukkit.scheduler.BukkitTask;
|
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
public class AntiSpam extends FreedomService
|
public class AntiSpam extends FreedomService
|
||||||
{
|
{
|
||||||
|
private ScheduledThreadPoolExecutor cycle;
|
||||||
public static final int MSG_PER_CYCLE = 8;
|
public static final int MSG_PER_CYCLE = 8;
|
||||||
public static final int TICKS_PER_CYCLE = 2 * 10;
|
|
||||||
//
|
//
|
||||||
public BukkitTask cycleTask = null;
|
|
||||||
private Map<Player, Integer> muteCounts = new HashMap<>();
|
private Map<Player, Integer> muteCounts = new HashMap<>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStart()
|
public void onStart()
|
||||||
{
|
{
|
||||||
new BukkitRunnable()
|
cycle = new ScheduledThreadPoolExecutor(1);
|
||||||
{
|
cycle.scheduleAtFixedRate(this::cycle, 0, 1, TimeUnit.SECONDS);
|
||||||
|
|
||||||
@Override
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
cycle();
|
|
||||||
}
|
|
||||||
}.runTaskTimer(plugin, TICKS_PER_CYCLE, TICKS_PER_CYCLE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStop()
|
public void onStop()
|
||||||
{
|
{
|
||||||
FUtil.cancel(cycleTask);
|
cycle.shutdownNow();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void cycle()
|
private void cycle()
|
||||||
{
|
{
|
||||||
for (Player player : server.getOnlinePlayers())
|
server.getOnlinePlayers().stream().map(player -> plugin.pl.getPlayer(player)).forEach(fPlayer ->
|
||||||
{
|
{
|
||||||
final FPlayer playerdata = plugin.pl.getPlayer(player);
|
|
||||||
|
|
||||||
// TODO: Move each to their own section
|
// TODO: Move each to their own section
|
||||||
playerdata.resetMsgCount();
|
fPlayer.resetMsgCount();
|
||||||
playerdata.resetBlockDestroyCount();
|
fPlayer.resetBlockDestroyCount();
|
||||||
playerdata.resetBlockPlaceCount();
|
fPlayer.resetBlockPlaceCount();
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOW)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
@ -81,17 +69,16 @@ public class AntiSpam extends FreedomService
|
|||||||
int time = count * minutes;
|
int time = count * minutes;
|
||||||
playerdata.setMuted(true, time);
|
playerdata.setMuted(true, time);
|
||||||
|
|
||||||
FSync.bcastMsg(String.format("%s has automatically been muted for %d minutes for spamming chat.",
|
server.broadcast(Component.text(player.getName()).append(Component.text(" has been automatically muted for "))
|
||||||
player.getName(),
|
.append(Component.text(time)).append(Component.text(" minutes for spamming chat."))
|
||||||
time),
|
.color(NamedTextColor.RED));
|
||||||
ChatColor.RED);
|
|
||||||
|
|
||||||
playerdata.resetMsgCount();
|
playerdata.resetMsgCount();
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
else if (playerdata.incrementAndGetMsgCount() > MSG_PER_CYCLE / 2)
|
else if (playerdata.incrementAndGetMsgCount() > MSG_PER_CYCLE / 2)
|
||||||
{
|
{
|
||||||
FUtil.playerMsg(player, "Please refrain from spamming chat.", ChatColor.GRAY);
|
player.sendMessage(Component.text("Please refrain from spamming chat.", NamedTextColor.GRAY));
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -107,7 +94,7 @@ public class AntiSpam extends FreedomService
|
|||||||
|
|
||||||
if (fPlayer.allCommandsBlocked())
|
if (fPlayer.allCommandsBlocked())
|
||||||
{
|
{
|
||||||
FUtil.playerMsg(player, "Your commands have been blocked by an admin.", ChatColor.RED);
|
player.sendMessage(Component.text("Your commands have been blocked by an admin.", NamedTextColor.RED));
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -119,7 +106,9 @@ public class AntiSpam extends FreedomService
|
|||||||
|
|
||||||
if (fPlayer.incrementAndGetMsgCount() > MSG_PER_CYCLE)
|
if (fPlayer.incrementAndGetMsgCount() > MSG_PER_CYCLE)
|
||||||
{
|
{
|
||||||
FUtil.bcastMsg(player.getName() + " was automatically kicked for spamming commands.", ChatColor.RED);
|
server.broadcast(Component.text(player.getName())
|
||||||
|
.append(Component.text(" was automatically kicked for spamming commands."))
|
||||||
|
.color(NamedTextColor.RED));
|
||||||
plugin.ae.autoEject(player, "Kicked for spamming commands.");
|
plugin.ae.autoEject(player, "Kicked for spamming commands.");
|
||||||
|
|
||||||
fPlayer.resetMsgCount();
|
fPlayer.resetMsgCount();
|
||||||
|
@ -85,9 +85,13 @@ public class AutoEject extends FreedomService
|
|||||||
player.kickPlayer(kickMessage);
|
player.kickPlayer(kickMessage);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
FLog.warning("Unrecognized EjectMethod " + method.name() + " found, defaulting to STRIKE_THREE");
|
||||||
|
}
|
||||||
case STRIKE_THREE:
|
case STRIKE_THREE:
|
||||||
{
|
{
|
||||||
plugin.bm.addBan(Ban.forPlayerFuzzy(player, Bukkit.getConsoleSender(), null, kickMessage));
|
plugin.bm.addBan(Ban.forPlayer(player, Bukkit.getConsoleSender(), null, kickMessage));
|
||||||
|
|
||||||
FUtil.bcastMsg(ChatColor.RED + player.getName() + " has been banned.");
|
FUtil.bcastMsg(ChatColor.RED + player.getName() + " has been banned.");
|
||||||
|
|
||||||
|
@ -4,13 +4,11 @@ import com.google.common.base.Strings;
|
|||||||
import me.totalfreedom.totalfreedommod.admin.Admin;
|
import me.totalfreedom.totalfreedommod.admin.Admin;
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
||||||
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Displayable;
|
import me.totalfreedom.totalfreedommod.rank.Displayable;
|
||||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||||
import me.totalfreedom.totalfreedommod.util.FSync;
|
import me.totalfreedom.totalfreedommod.util.FSync;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import net.md_5.bungee.api.ChatColor;
|
import net.md_5.bungee.api.ChatColor;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.SoundCategory;
|
import org.bukkit.SoundCategory;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@ -48,23 +46,17 @@ public class ChatManager extends FreedomService
|
|||||||
private void handleChatEvent(AsyncPlayerChatEvent event)
|
private void handleChatEvent(AsyncPlayerChatEvent event)
|
||||||
{
|
{
|
||||||
final Player player = event.getPlayer();
|
final Player player = event.getPlayer();
|
||||||
String message = event.getMessage().trim();
|
String originalMessage = event.getMessage();
|
||||||
|
if (plugin.mu.onPlayerChat(player) || plugin.sh.handlePlayerChat(player, originalMessage))
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String message = originalMessage.trim();
|
||||||
// Format colors and strip &k
|
// Format colors and strip &k
|
||||||
message = FUtil.colorize(message);
|
message = FUtil.colorize(message);
|
||||||
message = message.replaceAll(ChatColor.MAGIC.toString(), "&k");
|
message = message.replaceAll(ChatColor.MAGIC.toString(), "&k");
|
||||||
|
|
||||||
if (ConfigEntry.SHOP_ENABLED.getBoolean() && ConfigEntry.SHOP_REACTIONS_ENABLED.getBoolean() && !plugin.sh.reactionString.isEmpty() && message.equals(plugin.sh.reactionString))
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
PlayerData data = plugin.pl.getData(player);
|
|
||||||
data.setCoins(data.getCoins() + plugin.sh.coinsPerReactionWin);
|
|
||||||
plugin.pl.save(data);
|
|
||||||
plugin.sh.endReaction(player.getName());
|
|
||||||
player.sendMessage(ChatColor.GREEN + "You have been given " + ChatColor.GOLD + plugin.sh.coinsPerReactionWin + ChatColor.GREEN + " coins!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!ConfigEntry.TOGGLE_CHAT.getBoolean() && !plugin.al.isAdmin(player))
|
if (!ConfigEntry.TOGGLE_CHAT.getBoolean() && !plugin.al.isAdmin(player))
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
@ -95,11 +87,14 @@ public class ChatManager extends FreedomService
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
plugin.dc.onPlayerChat(player, ChatColor.stripColor(message));
|
||||||
|
|
||||||
// Check for 4chan trigger
|
// Check for 4chan trigger
|
||||||
boolean green = ChatColor.stripColor(message).toLowerCase().startsWith(">");
|
|
||||||
boolean orange = ChatColor.stripColor(message).toLowerCase().endsWith("<");
|
|
||||||
if (ConfigEntry.FOURCHAN_ENABLED.getBoolean())
|
if (ConfigEntry.FOURCHAN_ENABLED.getBoolean())
|
||||||
{
|
{
|
||||||
|
boolean green = ChatColor.stripColor(message).toLowerCase().startsWith(">");
|
||||||
|
boolean orange = ChatColor.stripColor(message).toLowerCase().endsWith("<");
|
||||||
|
|
||||||
if (green)
|
if (green)
|
||||||
{
|
{
|
||||||
message = ChatColor.GREEN + message;
|
message = ChatColor.GREEN + message;
|
||||||
@ -123,23 +118,27 @@ public class ChatManager extends FreedomService
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check for mentions
|
// Check for mentions
|
||||||
boolean mentionEveryone = ChatColor.stripColor(message).toLowerCase().contains("@everyone") && plugin.al.isAdmin(player);
|
String stripped = ChatColor.stripColor(message).toLowerCase();
|
||||||
for (Player p : server.getOnlinePlayers())
|
|
||||||
|
/* There is an issue would have allowed muted players to ping players. The issue is caused by the order in which
|
||||||
|
* these event handlers are registered when the plugin starts up. Muter is registered after the ChatManager,
|
||||||
|
* which results in latter being called first (before the former can cancel it). EventPriority does not seem to
|
||||||
|
* make a difference. As a short-term solution I've added this mute check alongside the usual isCancelled check
|
||||||
|
* so that the issue is mitigated, but a long-term solution should be to change the order in which things like
|
||||||
|
* ChatManager and Muter are registered. */
|
||||||
|
if (!event.isCancelled() && !plugin.pl.getPlayer(player).isMuted())
|
||||||
{
|
{
|
||||||
if (ChatColor.stripColor(message).toLowerCase().contains("@" + p.getName().toLowerCase()) || mentionEveryone)
|
server.getOnlinePlayers().forEach(pl ->
|
||||||
{
|
{
|
||||||
p.playSound(p.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, SoundCategory.MASTER, 1337F, 0.9F);
|
if (stripped.contains("@" + pl.getName()) || (plugin.al.isAdmin(player) && stripped.contains("@everyone")))
|
||||||
}
|
{
|
||||||
|
pl.playSound(pl.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, SoundCategory.MASTER, 1337F, 0.9F);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set format
|
// Set format
|
||||||
event.setFormat(format);
|
event.setFormat(format);
|
||||||
|
|
||||||
// Send to discord
|
|
||||||
if (!ConfigEntry.ADMIN_ONLY_MODE.getBoolean() && !Bukkit.hasWhitelist() && !plugin.pl.getPlayer(player).isMuted() && !plugin.tfg.inGuildChat(player))
|
|
||||||
{
|
|
||||||
plugin.dc.messageChatChannel(player.getName() + " \u00BB " + ChatColor.stripColor(message));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ChatColor getColor(Displayable display)
|
public ChatColor getColor(Displayable display)
|
||||||
@ -162,7 +161,8 @@ public class ChatManager extends FreedomService
|
|||||||
server.getOnlinePlayers().stream().filter(player -> plugin.al.isAdmin(player)).forEach(player ->
|
server.getOnlinePlayers().stream().filter(player -> plugin.al.isAdmin(player)).forEach(player ->
|
||||||
{
|
{
|
||||||
Admin admin = plugin.al.getAdmin(player);
|
Admin admin = plugin.al.getAdmin(player);
|
||||||
if (!Strings.isNullOrEmpty(admin.getAcFormat())) {
|
if (!Strings.isNullOrEmpty(admin.getAcFormat()))
|
||||||
|
{
|
||||||
String format = admin.getAcFormat();
|
String format = admin.getAcFormat();
|
||||||
ChatColor color = getColor(display);
|
ChatColor color = getColor(display);
|
||||||
String msg = format.replace("%name%", sender.getName()).replace("%rank%", display.getAbbr()).replace("%rankcolor%", color.toString()).replace("%msg%", message);
|
String msg = format.replace("%name%", sender.getName()).replace("%rank%", display.getAbbr()).replace("%rankcolor%", color.toString()).replace("%msg%", message);
|
||||||
@ -175,15 +175,15 @@ public class ChatManager extends FreedomService
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void reportAction(Player reporter, Player reported, String report)
|
public void reportAction(Player reporter, String reportedName, String report)
|
||||||
{
|
{
|
||||||
for (Player player : server.getOnlinePlayers())
|
for (Player player : server.getOnlinePlayers())
|
||||||
{
|
{
|
||||||
if (plugin.al.isAdmin(player))
|
if (plugin.al.isAdmin(player))
|
||||||
{
|
{
|
||||||
playerMsg(player, ChatColor.RED + "[REPORTS] " + ChatColor.GOLD + reporter.getName() + " has reported " + reported.getName() + " for " + report);
|
playerMsg(player, ChatColor.RED + "[REPORTS] " + ChatColor.GOLD + reporter.getName() + " has reported " + reportedName + " for " + report);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
FLog.info("[REPORTS] " + reporter.getName() + " has reported " + reported.getName() + " for " + report);
|
FLog.info("[REPORTS] " + reporter.getName() + " has reported " + reportedName + " for " + report);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,7 +1,7 @@
|
|||||||
package me.totalfreedom.totalfreedommod;
|
package me.totalfreedom.totalfreedommod;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.bukkit.entity.Player;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||||
@ -21,20 +21,9 @@ public class CommandSpy extends FreedomService
|
|||||||
@EventHandler(priority = EventPriority.MONITOR)
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event)
|
public void onPlayerCommandPreprocess(PlayerCommandPreprocessEvent event)
|
||||||
{
|
{
|
||||||
for (Player player : server.getOnlinePlayers())
|
server.getOnlinePlayers().stream().filter(player -> plugin.al.isAdmin(player)
|
||||||
{
|
&& plugin.al.getAdmin(player).getCommandSpy() && player != event.getPlayer()).forEach(player ->
|
||||||
if (plugin.al.isAdmin(player) && plugin.al.getAdmin(player).getCommandSpy())
|
player.sendMessage(Component.text(event.getPlayer().getName(), NamedTextColor.GRAY).append(Component.text(": ", NamedTextColor.GRAY))
|
||||||
{
|
.append(Component.text(event.getMessage(), NamedTextColor.GRAY))));
|
||||||
if (plugin.al.isAdmin(event.getPlayer()) && !plugin.al.isSeniorAdmin(player))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (player != event.getPlayer())
|
|
||||||
{
|
|
||||||
FUtil.playerMsg(player, event.getPlayer().getName() + ": " + event.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -2,6 +2,8 @@ package me.totalfreedom.totalfreedommod;
|
|||||||
|
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
import me.totalfreedom.totalfreedommod.util.Groups;
|
import me.totalfreedom.totalfreedommod.util.Groups;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
@ -33,7 +35,10 @@ public class EntityWiper extends FreedomService
|
|||||||
@Override
|
@Override
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
wipeEntities(false);
|
if (ConfigEntry.AUTO_ENTITY_WIPE.getBoolean())
|
||||||
|
{
|
||||||
|
wipeEntities(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}.runTaskTimer(plugin, 600L, 600L); // 30 second delay after startup + run every 30 seconds
|
}.runTaskTimer(plugin, 600L, 600L); // 30 second delay after startup + run every 30 seconds
|
||||||
}
|
}
|
||||||
|
@ -1,201 +0,0 @@
|
|||||||
package me.totalfreedom.totalfreedommod;
|
|
||||||
|
|
||||||
import java.io.UnsupportedEncodingException;
|
|
||||||
import java.net.HttpURLConnection;
|
|
||||||
import java.net.MalformedURLException;
|
|
||||||
import java.net.URL;
|
|
||||||
import java.net.URLEncoder;
|
|
||||||
import java.security.NoSuchAlgorithmException;
|
|
||||||
import java.security.NoSuchProviderException;
|
|
||||||
import java.security.SecureRandom;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
public class LogViewer extends FreedomService
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void onStart()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStop()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateLogsRegistration(final CommandSender sender, final Player target, final LogsRegistrationMode mode)
|
|
||||||
{
|
|
||||||
updateLogsRegistration(sender, target.getName(), mode);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateLogsRegistration(final CommandSender sender, final String targetName, final LogsRegistrationMode mode)
|
|
||||||
{
|
|
||||||
final String logsRegisterUrl = ConfigEntry.LOGS_URL.getString();
|
|
||||||
final String logsRegisterPassword = ConfigEntry.LOGS_SECRET.getString();
|
|
||||||
|
|
||||||
if (logsRegisterUrl == null || logsRegisterPassword == null || logsRegisterUrl.isEmpty() || logsRegisterPassword.isEmpty())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
new BukkitRunnable()
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (sender != null)
|
|
||||||
{
|
|
||||||
sender.sendMessage(ChatColor.YELLOW + "Connecting...");
|
|
||||||
}
|
|
||||||
|
|
||||||
final String key = SecureCodeGenerator.generateCode(20);
|
|
||||||
|
|
||||||
final URL urlAdd = new URLBuilder(logsRegisterUrl)
|
|
||||||
.addQueryParameter("mode", mode.name())
|
|
||||||
.addQueryParameter("password", logsRegisterPassword)
|
|
||||||
.addQueryParameter("name", targetName)
|
|
||||||
.addQueryParameter("key", key)
|
|
||||||
.getURL();
|
|
||||||
|
|
||||||
final HttpURLConnection connection = (HttpURLConnection)urlAdd.openConnection();
|
|
||||||
connection.setConnectTimeout(1000 * 5);
|
|
||||||
connection.setReadTimeout(1000 * 5);
|
|
||||||
connection.setUseCaches(false);
|
|
||||||
connection.setRequestMethod("HEAD");
|
|
||||||
|
|
||||||
final int responseCode = connection.getResponseCode();
|
|
||||||
|
|
||||||
if (sender != null)
|
|
||||||
{
|
|
||||||
if (!plugin.isEnabled())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
new BukkitRunnable()
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
if (responseCode == 200)
|
|
||||||
{
|
|
||||||
if (mode == LogsRegistrationMode.ADD)
|
|
||||||
{
|
|
||||||
String link = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
final URL urlVerify = new URLBuilder(logsRegisterUrl)
|
|
||||||
.addQueryParameter("mode", LogsRegistrationMode.VERIFY.name())
|
|
||||||
.addQueryParameter("name", targetName)
|
|
||||||
.addQueryParameter("key", key)
|
|
||||||
.getURL();
|
|
||||||
link = urlVerify.toString();
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
FLog.severe(ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
sender.sendMessage(ChatColor.GREEN + "Open this link to verify your logviewer registration:\n" + ChatColor.DARK_GREEN + link);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sender.sendMessage(ChatColor.GREEN + "Logviewer access revoked successfully.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sender.sendMessage(ChatColor.RED + "Error contacting logs registration server.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}.runTask(plugin);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
FLog.severe(ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}.runTaskAsynchronously(plugin);
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum LogsRegistrationMode
|
|
||||||
{
|
|
||||||
|
|
||||||
ADD, DELETE, VERIFY
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class URLBuilder
|
|
||||||
{
|
|
||||||
|
|
||||||
private final String requestPath;
|
|
||||||
private final Map<String, String> queryStringMap = new HashMap<>();
|
|
||||||
|
|
||||||
private URLBuilder(String requestPath)
|
|
||||||
{
|
|
||||||
this.requestPath = requestPath;
|
|
||||||
}
|
|
||||||
|
|
||||||
public URLBuilder addQueryParameter(String key, String value)
|
|
||||||
{
|
|
||||||
queryStringMap.put(key, value);
|
|
||||||
return this;
|
|
||||||
}
|
|
||||||
|
|
||||||
public URL getURL() throws MalformedURLException
|
|
||||||
{
|
|
||||||
List<String> pairs = new ArrayList<>();
|
|
||||||
for (Map.Entry<String, String> pair : queryStringMap.entrySet())
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
pairs.add(URLEncoder.encode(pair.getKey(), "UTF-8") + "=" + URLEncoder.encode(pair.getValue(), "UTF-8"));
|
|
||||||
}
|
|
||||||
catch (UnsupportedEncodingException ex)
|
|
||||||
{
|
|
||||||
FLog.severe(ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return new URL(requestPath + "?" + StringUtils.join(pairs, "&"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class SecureCodeGenerator
|
|
||||||
{
|
|
||||||
|
|
||||||
private static final String CHARACTER_SET = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
|
|
||||||
|
|
||||||
public static String generateCode(final int length)
|
|
||||||
{
|
|
||||||
SecureRandom random;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
random = SecureRandom.getInstance("SHA1PRNG", "SUN");
|
|
||||||
}
|
|
||||||
catch (NoSuchAlgorithmException | NoSuchProviderException ex)
|
|
||||||
{
|
|
||||||
random = new SecureRandom();
|
|
||||||
FLog.severe(ex);
|
|
||||||
}
|
|
||||||
|
|
||||||
final StringBuilder sb = new StringBuilder();
|
|
||||||
for (int i = 0; i < length; i++)
|
|
||||||
{
|
|
||||||
sb.append(CHARACTER_SET.charAt(random.nextInt(CHARACTER_SET.length())));
|
|
||||||
}
|
|
||||||
return sb.toString();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -3,8 +3,10 @@ package me.totalfreedom.totalfreedommod;
|
|||||||
import io.papermc.lib.PaperLib;
|
import io.papermc.lib.PaperLib;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import me.rayzr522.jsonmessage.JSONMessage;
|
|
||||||
|
import me.totalfreedom.totalfreedommod.admin.Admin;
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
||||||
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
||||||
@ -20,6 +22,7 @@ import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
|
|||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
import org.bukkit.event.player.PlayerLoginEvent;
|
import org.bukkit.event.player.PlayerLoginEvent;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
|
import org.bukkit.scheduler.BukkitTask;
|
||||||
|
|
||||||
public class LoginProcess extends FreedomService
|
public class LoginProcess extends FreedomService
|
||||||
{
|
{
|
||||||
@ -58,13 +61,13 @@ public class LoginProcess extends FreedomService
|
|||||||
@EventHandler(priority = EventPriority.NORMAL)
|
@EventHandler(priority = EventPriority.NORMAL)
|
||||||
public void onPlayerPreLogin(AsyncPlayerPreLoginEvent event)
|
public void onPlayerPreLogin(AsyncPlayerPreLoginEvent event)
|
||||||
{
|
{
|
||||||
final String ip = event.getAddress().getHostAddress().trim();
|
final Admin entry = plugin.al.getEntryByUuid(event.getUniqueId());
|
||||||
final boolean isAdmin = plugin.al.getEntryByIp(ip) != null;
|
final boolean isAdmin = entry != null && entry.isActive();
|
||||||
|
|
||||||
// Check if the player is already online
|
// Check if the player is already online
|
||||||
for (Player onlinePlayer : server.getOnlinePlayers())
|
for (Player onlinePlayer : server.getOnlinePlayers())
|
||||||
{
|
{
|
||||||
if (!onlinePlayer.getName().equalsIgnoreCase(event.getName()))
|
if (!onlinePlayer.getUniqueId().equals(event.getUniqueId()))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -86,7 +89,7 @@ public class LoginProcess extends FreedomService
|
|||||||
{
|
{
|
||||||
final Player player = event.getPlayer();
|
final Player player = event.getPlayer();
|
||||||
final String username = player.getName();
|
final String username = player.getName();
|
||||||
final String ip = event.getAddress().getHostAddress().trim();
|
final UUID uuid = player.getUniqueId();
|
||||||
|
|
||||||
// Check username length
|
// Check username length
|
||||||
if (username.length() < MIN_USERNAME_LENGTH || username.length() > MAX_USERNAME_LENGTH)
|
if (username.length() < MIN_USERNAME_LENGTH || username.length() > MAX_USERNAME_LENGTH)
|
||||||
@ -120,7 +123,8 @@ public class LoginProcess extends FreedomService
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Validation below this point
|
// Validation below this point
|
||||||
if (plugin.al.getEntryByIp(ip) != null) // Check if player is admin
|
final Admin entry = plugin.al.getEntryByUuid(uuid);
|
||||||
|
if (entry != null && entry.isActive()) // Check if player is admin
|
||||||
{
|
{
|
||||||
// Force-allow log in
|
// Force-allow log in
|
||||||
event.allow();
|
event.allow();
|
||||||
@ -175,12 +179,9 @@ public class LoginProcess extends FreedomService
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Whitelist
|
// Whitelist
|
||||||
if (plugin.si.isWhitelisted())
|
if (server.hasWhitelist() && !player.isWhitelisted())
|
||||||
{
|
{
|
||||||
if (!plugin.si.getWhitelisted().contains(username.toLowerCase()))
|
event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "You are not whitelisted on this server.");
|
||||||
{
|
|
||||||
event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "You are not whitelisted on this server.");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -191,6 +192,22 @@ public class LoginProcess extends FreedomService
|
|||||||
final FPlayer fPlayer = plugin.pl.getPlayer(player);
|
final FPlayer fPlayer = plugin.pl.getPlayer(player);
|
||||||
final PlayerData playerData = plugin.pl.getData(player);
|
final PlayerData playerData = plugin.pl.getData(player);
|
||||||
|
|
||||||
|
// Sends a message to the player if they have never joined before (or simply lack player data).
|
||||||
|
if (!event.getPlayer().hasPlayedBefore() && ConfigEntry.FIRST_JOIN_INFO_ENABLED.getBoolean())
|
||||||
|
{
|
||||||
|
new BukkitRunnable()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void run()
|
||||||
|
{
|
||||||
|
for (String line : ConfigEntry.FIRST_JOIN_INFO.getStringList())
|
||||||
|
{
|
||||||
|
player.sendMessage(FUtil.colorize(line));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}.runTaskLater(plugin, 20);
|
||||||
|
}
|
||||||
|
|
||||||
player.sendTitle(FUtil.colorize(ConfigEntry.SERVER_LOGIN_TITLE.getString()), FUtil.colorize(ConfigEntry.SERVER_LOGIN_SUBTITLE.getString()), 20, 100, 60);
|
player.sendTitle(FUtil.colorize(ConfigEntry.SERVER_LOGIN_TITLE.getString()), FUtil.colorize(ConfigEntry.SERVER_LOGIN_SUBTITLE.getString()), 20, 100, 60);
|
||||||
player.setOp(true);
|
player.setOp(true);
|
||||||
|
|
||||||
@ -205,7 +222,7 @@ public class LoginProcess extends FreedomService
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!playerData.hasVerification() && !playerData.getIps().contains(FUtil.getIp(player)))
|
if (!playerData.getIps().contains(FUtil.getIp(player)))
|
||||||
{
|
{
|
||||||
playerData.addIp(FUtil.getIp(player));
|
playerData.addIp(FUtil.getIp(player));
|
||||||
plugin.pl.save(playerData);
|
plugin.pl.save(playerData);
|
||||||
|
@ -1,25 +1,17 @@
|
|||||||
package me.totalfreedom.totalfreedommod;
|
package me.totalfreedom.totalfreedommod;
|
||||||
|
|
||||||
import ca.momothereal.mojangson.ex.MojangsonParseException;
|
|
||||||
import ca.momothereal.mojangson.value.MojangsonCompound;
|
|
||||||
import ca.momothereal.mojangson.value.MojangsonValue;
|
|
||||||
import io.papermc.lib.PaperLib;
|
import io.papermc.lib.PaperLib;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
import net.kyori.adventure.text.Component;
|
||||||
import net.minecraft.server.v1_16_R3.NBTTagCompound;
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
import net.minecraft.server.v1_16_R3.NBTTagList;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack;
|
|
||||||
import org.bukkit.entity.Player;
|
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.player.PlayerItemHeldEvent;
|
|
||||||
import org.bukkit.event.player.PlayerLoginEvent;
|
import org.bukkit.event.player.PlayerLoginEvent;
|
||||||
import org.bukkit.event.player.PlayerMoveEvent;
|
import org.bukkit.event.player.PlayerMoveEvent;
|
||||||
import org.bukkit.event.player.PlayerTeleportEvent;
|
import org.bukkit.event.player.PlayerTeleportEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.spigotmc.event.player.PlayerSpawnLocationEvent;
|
||||||
|
|
||||||
public class MovementValidator extends FreedomService
|
public class MovementValidator extends FreedomService
|
||||||
{
|
{
|
||||||
@ -41,67 +33,36 @@ public class MovementValidator extends FreedomService
|
|||||||
public void onPlayerTeleport(PlayerTeleportEvent event)
|
public void onPlayerTeleport(PlayerTeleportEvent event)
|
||||||
{
|
{
|
||||||
// Check absolute value to account for negatives
|
// Check absolute value to account for negatives
|
||||||
if (Math.abs(Objects.requireNonNull(event.getTo()).getX()) >= MAX_XYZ_COORD || Math.abs(event.getTo().getZ()) >= MAX_XYZ_COORD || Math.abs(event.getTo().getY()) >= MAX_XYZ_COORD)
|
if (isOutOfBounds(event.getTo()))
|
||||||
{
|
{
|
||||||
event.setCancelled(true); // illegal position, cancel it
|
event.setCancelled(true); // illegal position, cancel it
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isOutOfBounds(final Location position)
|
||||||
|
{
|
||||||
|
return Math.abs(position.getX()) >= MAX_XYZ_COORD || Math.abs(position.getY()) >= MAX_XYZ_COORD || Math.abs(position.getZ()) >= MAX_XYZ_COORD;
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGH)
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
public void onPlayerMove(PlayerMoveEvent event)
|
public void onPlayerMove(PlayerMoveEvent event)
|
||||||
{
|
{
|
||||||
final Player player = event.getPlayer();
|
final Player player = event.getPlayer();
|
||||||
Location from = event.getFrom();
|
Location from = event.getFrom();
|
||||||
Location to = event.getTo();
|
Location to = event.getTo();
|
||||||
assert to != null;
|
double distance = from.distanceSquared(to);
|
||||||
if (to.getX() >= from.getX() + MAX_DISTANCE_TRAVELED || to.getY() >= from.getY() + MAX_DISTANCE_TRAVELED || to.getZ() >= from.getZ() + MAX_DISTANCE_TRAVELED)
|
|
||||||
|
if (distance >= MAX_DISTANCE_TRAVELED)
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
player.kickPlayer(ChatColor.RED + "You were moving too quickly!");
|
player.kick(Component.text("You were moving too quickly!", NamedTextColor.RED));
|
||||||
}
|
}
|
||||||
// Check absolute value to account for negatives
|
// Check absolute value to account for negatives
|
||||||
if (Math.abs(event.getTo().getX()) >= MAX_XYZ_COORD || Math.abs(event.getTo().getZ()) >= MAX_XYZ_COORD || Math.abs(event.getTo().getY()) >= MAX_XYZ_COORD)
|
if (isOutOfBounds(event.getTo()))
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
PaperLib.teleportAsync(player, player.getWorld().getSpawnLocation());
|
PaperLib.teleportAsync(player, player.getWorld().getSpawnLocation());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (exploitItem(event.getPlayer().getInventory().getHelmet()))
|
|
||||||
{
|
|
||||||
event.getPlayer().getInventory().setHelmet(new ItemStack(Material.AIR));
|
|
||||||
event.getPlayer().sendMessage(ChatColor.RED + "An item with both negative infinity and positive infinity attributes was cleared from your helmet slot.");
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
if (exploitItem(event.getPlayer().getInventory().getBoots()))
|
|
||||||
{
|
|
||||||
event.getPlayer().getInventory().setBoots(new ItemStack(Material.AIR));
|
|
||||||
event.getPlayer().sendMessage(ChatColor.RED + "An item with both negative infinity and positive infinity attributes was cleared from your boots slot.");
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
if (exploitItem(event.getPlayer().getInventory().getLeggings()))
|
|
||||||
{
|
|
||||||
event.getPlayer().getInventory().setLeggings(new ItemStack(Material.AIR));
|
|
||||||
event.getPlayer().sendMessage(ChatColor.RED + "An item with both negative infinity and positive infinity attributes was cleared from your leggings slot.");
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
if (exploitItem(event.getPlayer().getInventory().getChestplate()))
|
|
||||||
{
|
|
||||||
event.getPlayer().getInventory().setChestplate(new ItemStack(Material.AIR));
|
|
||||||
event.getPlayer().sendMessage(ChatColor.RED + "An item with both negative infinity and positive infinity attributes was cleared from your chestplate slot.");
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
if (exploitItem(event.getPlayer().getInventory().getItemInMainHand()))
|
|
||||||
{
|
|
||||||
event.getPlayer().getInventory().setItemInMainHand(new ItemStack(Material.AIR));
|
|
||||||
event.getPlayer().sendMessage(ChatColor.RED + "An item with both negative infinity and positive infinity attributes was cleared from your hand.");
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
if (exploitItem(event.getPlayer().getInventory().getItemInOffHand()))
|
|
||||||
{
|
|
||||||
event.getPlayer().getInventory().setItemInOffHand(new ItemStack(Material.AIR));
|
|
||||||
event.getPlayer().sendMessage(ChatColor.RED + "An item with both negative infinity and positive infinity attributes was cleared from your offhand.");
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGH)
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
@ -110,78 +71,28 @@ public class MovementValidator extends FreedomService
|
|||||||
final Player player = event.getPlayer();
|
final Player player = event.getPlayer();
|
||||||
|
|
||||||
// Validate position
|
// Validate position
|
||||||
if (Math.abs(player.getLocation().getX()) >= MAX_XYZ_COORD || Math.abs(player.getLocation().getZ()) >= MAX_XYZ_COORD || Math.abs(player.getLocation().getY()) >= MAX_XYZ_COORD)
|
if (isOutOfBounds(player.getLocation()))
|
||||||
{
|
{
|
||||||
PaperLib.teleportAsync(player, player.getWorld().getSpawnLocation()); // Illegal position, teleport to spawn
|
PaperLib.teleportAsync(player, player.getWorld().getSpawnLocation()); // Illegal position, teleport to spawn
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
public void onPlayerHoldItem(PlayerItemHeldEvent event)
|
public void onPlayerSpawn(PlayerSpawnLocationEvent event)
|
||||||
{
|
{
|
||||||
if (exploitItem(event.getPlayer().getInventory().getItemInMainHand()))
|
final Location playerSpawn = event.getSpawnLocation();
|
||||||
{
|
final Location worldSpawn = event.getPlayer().getWorld().getSpawnLocation();
|
||||||
event.getPlayer().getInventory().setItemInMainHand(new ItemStack(Material.AIR));
|
|
||||||
event.getPlayer().sendMessage(ChatColor.RED + "An item with both negative infinity and positive infinity attributes was cleared from your hand.");
|
|
||||||
}
|
|
||||||
if (exploitItem(event.getPlayer().getInventory().getItemInOffHand()))
|
|
||||||
{
|
|
||||||
event.getPlayer().getInventory().setItemInOffHand(new ItemStack(Material.AIR));
|
|
||||||
event.getPlayer().sendMessage(ChatColor.RED + "An item with both negative infinity and positive infinity attributes was cleared from your offhand.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private Boolean exploitItem(ItemStack item)
|
// If the player's spawn is equal to the world's spawn, there is no need to check.
|
||||||
{
|
// This will also prevent any possible feedback loops pertaining to setting an out of bounds world spawn to the same world spawn.
|
||||||
net.minecraft.server.v1_16_R3.ItemStack nmsStack = CraftItemStack.asNMSCopy(item);
|
if (playerSpawn == worldSpawn)
|
||||||
NBTTagList modifiers = getAttributeList(nmsStack);
|
|
||||||
MojangsonCompound compound = new MojangsonCompound();
|
|
||||||
boolean foundNegative = false;
|
|
||||||
boolean foundPositive = false;
|
|
||||||
try
|
|
||||||
{
|
{
|
||||||
String mod = modifiers.toString();
|
return;
|
||||||
String fancy = ("{" + (mod.substring(1, mod.length() - 1).replace("{", "").replace("}", "")) + "}");
|
|
||||||
compound.read(fancy);
|
|
||||||
for (String key : compound.keySet())
|
|
||||||
{
|
|
||||||
if (Objects.equals(key, "Amount")) //null-safe .equals()
|
|
||||||
{
|
|
||||||
@SuppressWarnings("rawtypes")
|
|
||||||
List<MojangsonValue> values = compound.get(key);
|
|
||||||
for (MojangsonValue<?> val : values)
|
|
||||||
{
|
|
||||||
if (val.getValue().toString().equals("Infinityd"))
|
|
||||||
{
|
|
||||||
foundPositive = true;
|
|
||||||
}
|
|
||||||
if (val.getValue().toString().equals("-Infinityd"))
|
|
||||||
{
|
|
||||||
foundNegative = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (MojangsonParseException e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return foundNegative && foundPositive;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (isOutOfBounds(worldSpawn))
|
||||||
private NBTTagList getAttributeList(net.minecraft.server.v1_16_R3.ItemStack stack)
|
|
||||||
{
|
|
||||||
if (stack.getTag() == null)
|
|
||||||
{
|
{
|
||||||
stack.setTag(new NBTTagCompound());
|
event.setSpawnLocation(worldSpawn);
|
||||||
}
|
}
|
||||||
NBTTagList attr = stack.getTag().getList("AttributeModifiers", 10);
|
|
||||||
if (attr == null)
|
|
||||||
{
|
|
||||||
stack.getTag().set("AttributeModifiers", new NBTTagList());
|
|
||||||
}
|
|
||||||
return stack.getTag().getList("AttributeModifiers", 10);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,25 +1,19 @@
|
|||||||
package me.totalfreedom.totalfreedommod;
|
package me.totalfreedom.totalfreedommod;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
||||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||||
import me.totalfreedom.totalfreedommod.util.FSync;
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.entity.Player;
|
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.player.AsyncPlayerChatEvent;
|
|
||||||
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
|
||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
|
||||||
|
|
||||||
public class Muter extends FreedomService
|
public class Muter extends FreedomService
|
||||||
{
|
{
|
||||||
|
|
||||||
public final List<String> MUTED_PLAYERS = new ArrayList<>();
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStart()
|
public void onStart()
|
||||||
{
|
{
|
||||||
@ -30,27 +24,23 @@ public class Muter extends FreedomService
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGHEST)
|
public boolean onPlayerChat(Player player)
|
||||||
public void onAsyncPlayerChatEvent(AsyncPlayerChatEvent event)
|
|
||||||
{
|
{
|
||||||
Player player = event.getPlayer();
|
|
||||||
|
|
||||||
FPlayer fPlayer = plugin.pl.getPlayerSync(player);
|
FPlayer fPlayer = plugin.pl.getPlayerSync(player);
|
||||||
|
|
||||||
if (!fPlayer.isMuted())
|
if (!fPlayer.isMuted())
|
||||||
{
|
{
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (plugin.al.isAdminSync(player))
|
if (plugin.al.isAdminSync(player))
|
||||||
{
|
{
|
||||||
fPlayer.setMuted(false);
|
fPlayer.setMuted(false);
|
||||||
MUTED_PLAYERS.remove(player.getName());
|
return false;
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
FSync.playerMsg(event.getPlayer(), ChatColor.RED + "You are muted.");
|
player.sendMessage(Component.text("You are muted.", NamedTextColor.RED));
|
||||||
event.setCancelled(true);
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOW)
|
@EventHandler(priority = EventPriority.LOW)
|
||||||
@ -87,7 +77,7 @@ public class Muter extends FreedomService
|
|||||||
|
|
||||||
if (ConfigEntry.MUTED_BLOCKED_COMMANDS.getStringList().contains(cmdName))
|
if (ConfigEntry.MUTED_BLOCKED_COMMANDS.getStringList().contains(cmdName))
|
||||||
{
|
{
|
||||||
player.sendMessage(ChatColor.RED + "That command is blocked while you are muted.");
|
player.sendMessage(Component.text("That command is blocked while you are muted.", NamedTextColor.RED));
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -98,16 +88,4 @@ public class Muter extends FreedomService
|
|||||||
FLog.info(String.format("[PREPROCESS_COMMAND] %s(%s): %s", player.getName(), ChatColor.stripColor(player.getDisplayName()), message), true);
|
FLog.info(String.format("[PREPROCESS_COMMAND] %s(%s): %s", player.getName(), ChatColor.stripColor(player.getDisplayName()), message), true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOW)
|
|
||||||
public void onPlayerJoin(PlayerJoinEvent event)
|
|
||||||
{
|
|
||||||
Player player = event.getPlayer();
|
|
||||||
FPlayer playerdata = plugin.pl.getPlayer(player);
|
|
||||||
|
|
||||||
if (MUTED_PLAYERS.contains(player.getName()))
|
|
||||||
{
|
|
||||||
playerdata.setMuted(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -1,214 +0,0 @@
|
|||||||
package me.totalfreedom.totalfreedommod;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
import joptsimple.internal.Strings;
|
|
||||||
import me.totalfreedom.totalfreedommod.admin.Admin;
|
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.Response;
|
|
||||||
import org.json.simple.JSONObject;
|
|
||||||
import org.json.simple.parser.ParseException;
|
|
||||||
|
|
||||||
public class Pterodactyl extends FreedomService
|
|
||||||
{
|
|
||||||
|
|
||||||
public final String URL = ConfigEntry.PTERO_URL.getString();
|
|
||||||
private final String SERVER_KEY = ConfigEntry.PTERO_SERVER_KEY.getString();
|
|
||||||
private final String ADMIN_KEY = ConfigEntry.PTERO_ADMIN_KEY.getString();
|
|
||||||
private final List<String> SERVER_HEADERS = Arrays.asList("Accept:Application/vnd.pterodactyl.v1+json", "Content-Type:application/json", "Authorization:Bearer " + SERVER_KEY);
|
|
||||||
private final List<String> ADMIN_HEADERS = Arrays.asList("Accept:Application/vnd.pterodactyl.v1+json", "Content-Type:application/json", "Authorization:Bearer " + ADMIN_KEY);
|
|
||||||
|
|
||||||
private boolean enabled = !Strings.isNullOrEmpty(URL);
|
|
||||||
|
|
||||||
public void onStart()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onStop()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateAccountStatus(Admin admin)
|
|
||||||
{
|
|
||||||
String id = admin.getPteroID();
|
|
||||||
|
|
||||||
if (Strings.isNullOrEmpty(id) || !enabled)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!admin.isActive() || admin.getRank() != Rank.SENIOR_ADMIN)
|
|
||||||
{
|
|
||||||
FLog.debug("Disabling ptero acc");
|
|
||||||
removeAccountFromServer(id);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
FLog.debug("Enabling ptero acc");
|
|
||||||
addAccountToServer(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public String createAccount(String username, String password)
|
|
||||||
{
|
|
||||||
JSONObject json = new JSONObject();
|
|
||||||
json.put("username", username);
|
|
||||||
json.put("password", password);
|
|
||||||
json.put("email", username.toLowerCase() + "@" + ConfigEntry.PTERO_DEFAULT_EMAIL_DOMAIN.getString());
|
|
||||||
json.put("first_name", username);
|
|
||||||
json.put("last_name", "\u200E"); // required, so I made it appear empty
|
|
||||||
|
|
||||||
Response response;
|
|
||||||
JSONObject jsonResponse;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
response = FUtil.sendRequest(URL + "/api/application/users", "POST", ADMIN_HEADERS, json.toJSONString());
|
|
||||||
jsonResponse = response.getJSONMessage();
|
|
||||||
}
|
|
||||||
catch (IOException | ParseException e)
|
|
||||||
{
|
|
||||||
FLog.severe(e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ((JSONObject)jsonResponse.get("attributes")).get("id").toString();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean deleteAccount(String id)
|
|
||||||
{
|
|
||||||
JSONObject json = new JSONObject();
|
|
||||||
try
|
|
||||||
{
|
|
||||||
return FUtil.sendRequest(URL + "/api/application/users/" + id, "DELETE", ADMIN_HEADERS, json.toJSONString()).getCode() == 204;
|
|
||||||
}
|
|
||||||
catch (IOException e)
|
|
||||||
{
|
|
||||||
FLog.severe(e);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public void addAccountToServer(String id)
|
|
||||||
{
|
|
||||||
String url = URL + "/api/client/servers/" + ConfigEntry.PTERO_SERVER_UUID.getString() + "/users";
|
|
||||||
|
|
||||||
JSONObject userData = getUserData(id);
|
|
||||||
if (userData == null)
|
|
||||||
{
|
|
||||||
FLog.severe("The Pterodactyl user with the ID of " + id + " was not found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
JSONObject json = new JSONObject();
|
|
||||||
json.put("email", userData.get("email").toString());
|
|
||||||
json.put("permissions", Arrays.asList("control.console", "control.start", "control.restart", "control.stop", "control.kill"));
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
FUtil.sendRequest(url, "POST", SERVER_HEADERS, json.toJSONString());
|
|
||||||
}
|
|
||||||
catch (IOException e)
|
|
||||||
{
|
|
||||||
FLog.severe(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void removeAccountFromServer(String id)
|
|
||||||
{
|
|
||||||
JSONObject userData = getUserData(id);
|
|
||||||
if (userData == null)
|
|
||||||
{
|
|
||||||
FLog.severe("The Pterodactyl user with the ID of " + id + " was not found");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String url = URL + "/api/client/servers/" + ConfigEntry.PTERO_SERVER_UUID.getString() + "/users/" + userData.get("uuid");
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
FUtil.sendRequest(url, "DELETE", SERVER_HEADERS, null);
|
|
||||||
}
|
|
||||||
catch (IOException e)
|
|
||||||
{
|
|
||||||
FLog.severe(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public JSONObject getUserData(String id)
|
|
||||||
{
|
|
||||||
Response response;
|
|
||||||
JSONObject jsonResponse;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
response = FUtil.sendRequest(URL + "/api/application/users/" + id, "GET", ADMIN_HEADERS, null);
|
|
||||||
jsonResponse = response.getJSONMessage();
|
|
||||||
|
|
||||||
}
|
|
||||||
catch (IOException | ParseException e)
|
|
||||||
{
|
|
||||||
FLog.severe(e);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (JSONObject)jsonResponse.get("attributes");
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// API patch function on users doesnt work rn, it throws 500 errors, so it's probably not written yet
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public void setPassword(String id, String password)
|
|
||||||
{
|
|
||||||
JSONObject json = new JSONObject();
|
|
||||||
json.put("password", password);
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
FUtil.sendRequest(URL + "/api/application/users/" + id, "PATCH", ADMIN_HEADERS, json.toJSONString());
|
|
||||||
}
|
|
||||||
catch (IOException e)
|
|
||||||
{
|
|
||||||
FLog.severe(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getURL()
|
|
||||||
{
|
|
||||||
return URL;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getServerKey()
|
|
||||||
{
|
|
||||||
return SERVER_KEY;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getAdminKey()
|
|
||||||
{
|
|
||||||
return ADMIN_KEY;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<String> getServerHeaders()
|
|
||||||
{
|
|
||||||
return SERVER_HEADERS;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<String> getAdminHeaders()
|
|
||||||
{
|
|
||||||
return ADMIN_HEADERS;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isEnabled()
|
|
||||||
{
|
|
||||||
return enabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setEnabled(boolean enabled)
|
|
||||||
{
|
|
||||||
this.enabled = enabled;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,98 +0,0 @@
|
|||||||
package me.totalfreedom.totalfreedommod;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileInputStream;
|
|
||||||
import java.io.FileOutputStream;
|
|
||||||
import java.io.ObjectInputStream;
|
|
||||||
import java.io.ObjectOutputStream;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
|
||||||
import static me.totalfreedom.totalfreedommod.util.FUtil.SAVED_FLAGS_FILENAME;
|
|
||||||
|
|
||||||
public class SavedFlags extends FreedomService
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void onStart()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStop()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
public Map<String, Boolean> getSavedFlags()
|
|
||||||
{
|
|
||||||
Map<String, Boolean> flags = null;
|
|
||||||
File input = new File(TotalFreedomMod.getPlugin().getDataFolder(), SAVED_FLAGS_FILENAME);
|
|
||||||
|
|
||||||
if (input.exists())
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
try (FileInputStream fis = new FileInputStream(input); ObjectInputStream ois = new ObjectInputStream(fis))
|
|
||||||
{
|
|
||||||
flags = (HashMap<String, Boolean>)ois.readObject();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
FLog.severe(ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return flags;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean getSavedFlag(String flag) throws Exception
|
|
||||||
{
|
|
||||||
Boolean flagValue = null;
|
|
||||||
|
|
||||||
Map<String, Boolean> flags = getSavedFlags();
|
|
||||||
|
|
||||||
if (flags != null)
|
|
||||||
{
|
|
||||||
if (flags.containsKey(flag))
|
|
||||||
{
|
|
||||||
flagValue = flags.get(flag);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flagValue != null)
|
|
||||||
{
|
|
||||||
return flagValue;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
throw new Exception();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setSavedFlag(String flag, boolean value)
|
|
||||||
{
|
|
||||||
Map<String, Boolean> flags = getSavedFlags();
|
|
||||||
|
|
||||||
if (flags == null)
|
|
||||||
{
|
|
||||||
flags = new HashMap<>();
|
|
||||||
}
|
|
||||||
|
|
||||||
flags.put(flag, value);
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
final FileOutputStream fos = new FileOutputStream(new File(plugin.getDataFolder(), SAVED_FLAGS_FILENAME));
|
|
||||||
final ObjectOutputStream oos = new ObjectOutputStream(fos);
|
|
||||||
oos.writeObject(flags);
|
|
||||||
oos.close();
|
|
||||||
fos.close();
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
FLog.severe(ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,83 +0,0 @@
|
|||||||
package me.totalfreedom.totalfreedommod;
|
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
|
||||||
import net.minecraft.server.v1_16_R3.EntityPlayer;
|
|
||||||
import net.minecraft.server.v1_16_R3.MinecraftServer;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.craftbukkit.v1_16_R3.CraftServer;
|
|
||||||
|
|
||||||
public class ServerInterface extends FreedomService
|
|
||||||
{
|
|
||||||
public static final String COMPILE_NMS_VERSION = "v1_16_R3";
|
|
||||||
|
|
||||||
public static void warnVersion()
|
|
||||||
{
|
|
||||||
final String nms = FUtil.getNMSVersion();
|
|
||||||
|
|
||||||
if (!COMPILE_NMS_VERSION.equals(nms))
|
|
||||||
{
|
|
||||||
FLog.warning(TotalFreedomMod.pluginName + " is compiled for " + COMPILE_NMS_VERSION + " but the server is running version " + nms + "!");
|
|
||||||
FLog.warning("This might result in unexpected behaviour!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStart()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStop()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setOnlineMode(boolean mode)
|
|
||||||
{
|
|
||||||
getServer().setOnlineMode(mode);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int purgeWhitelist()
|
|
||||||
{
|
|
||||||
String[] whitelisted = getServer().getPlayerList().getWhitelisted();
|
|
||||||
int size = whitelisted.length;
|
|
||||||
for (EntityPlayer player : getServer().getPlayerList().players)
|
|
||||||
{
|
|
||||||
getServer().getPlayerList().getWhitelist().remove(player.getProfile());
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
getServer().getPlayerList().getWhitelist().save();
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
FLog.warning("Could not purge the whitelist!");
|
|
||||||
FLog.warning(ex);
|
|
||||||
}
|
|
||||||
return size;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isWhitelisted()
|
|
||||||
{
|
|
||||||
return getServer().getPlayerList().getHasWhitelist();
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<?> getWhitelisted()
|
|
||||||
{
|
|
||||||
return Arrays.asList(getServer().getPlayerList().getWhitelisted());
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getVersion()
|
|
||||||
{
|
|
||||||
return getServer().getVersion();
|
|
||||||
}
|
|
||||||
|
|
||||||
private MinecraftServer getServer()
|
|
||||||
{
|
|
||||||
return ((CraftServer)Bukkit.getServer()).getServer();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
@ -1,5 +1,6 @@
|
|||||||
package me.totalfreedom.totalfreedommod;
|
package me.totalfreedom.totalfreedommod;
|
||||||
|
|
||||||
|
import com.google.gson.Gson;
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
@ -7,8 +8,13 @@ import org.bukkit.event.EventHandler;
|
|||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.server.ServerListPingEvent;
|
import org.bukkit.event.server.ServerListPingEvent;
|
||||||
|
|
||||||
|
import java.io.InputStreamReader;
|
||||||
|
|
||||||
public class ServerPing extends FreedomService
|
public class ServerPing extends FreedomService
|
||||||
{
|
{
|
||||||
|
private final Gson gson = new Gson();
|
||||||
|
private final VersionMeta meta = gson.fromJson(new InputStreamReader(Bukkit.class.getClassLoader().getResourceAsStream("version.json")),VersionMeta.class);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStart()
|
public void onStart()
|
||||||
{
|
{
|
||||||
@ -54,7 +60,7 @@ public class ServerPing extends FreedomService
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
String baseMotd = ConfigEntry.SERVER_MOTD.getString().replace("%mcversion%", plugin.si.getVersion());
|
String baseMotd = ConfigEntry.SERVER_MOTD.getString().replace("%mcversion%", meta.id);
|
||||||
baseMotd = baseMotd.replace("\\n", "\n");
|
baseMotd = baseMotd.replace("\\n", "\n");
|
||||||
baseMotd = FUtil.colorize(baseMotd);
|
baseMotd = FUtil.colorize(baseMotd);
|
||||||
|
|
||||||
@ -73,4 +79,9 @@ public class ServerPing extends FreedomService
|
|||||||
|
|
||||||
event.setMotd(motd.toString().trim());
|
event.setMotd(motd.toString().trim());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static class VersionMeta
|
||||||
|
{
|
||||||
|
private String id;
|
||||||
|
}
|
||||||
}
|
}
|
@ -1,34 +0,0 @@
|
|||||||
package me.totalfreedom.totalfreedommod;
|
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.command.Command_sit;
|
|
||||||
import org.bukkit.entity.ArmorStand;
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.spigotmc.event.entity.EntityDismountEvent;
|
|
||||||
|
|
||||||
public class Sitter extends FreedomService
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void onStart()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStop()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void onEntityDismount(EntityDismountEvent e)
|
|
||||||
{
|
|
||||||
Entity dm = e.getDismounted();
|
|
||||||
if (dm instanceof ArmorStand)
|
|
||||||
{
|
|
||||||
if (Command_sit.STANDS.contains(dm))
|
|
||||||
{
|
|
||||||
Command_sit.STANDS.remove(dm);
|
|
||||||
dm.remove();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -14,13 +14,11 @@ import me.totalfreedom.totalfreedommod.blocking.InteractBlocker;
|
|||||||
import me.totalfreedom.totalfreedommod.blocking.MobBlocker;
|
import me.totalfreedom.totalfreedommod.blocking.MobBlocker;
|
||||||
import me.totalfreedom.totalfreedommod.blocking.PVPBlocker;
|
import me.totalfreedom.totalfreedommod.blocking.PVPBlocker;
|
||||||
import me.totalfreedom.totalfreedommod.blocking.PotionBlocker;
|
import me.totalfreedom.totalfreedommod.blocking.PotionBlocker;
|
||||||
import me.totalfreedom.totalfreedommod.blocking.SignBlocker;
|
|
||||||
import me.totalfreedom.totalfreedommod.blocking.command.CommandBlocker;
|
import me.totalfreedom.totalfreedommod.blocking.command.CommandBlocker;
|
||||||
import me.totalfreedom.totalfreedommod.bridge.BukkitTelnetBridge;
|
import me.totalfreedom.totalfreedommod.bridge.BukkitTelnetBridge;
|
||||||
import me.totalfreedom.totalfreedommod.bridge.CoreProtectBridge;
|
import me.totalfreedom.totalfreedommod.bridge.CoreProtectBridge;
|
||||||
import me.totalfreedom.totalfreedommod.bridge.EssentialsBridge;
|
import me.totalfreedom.totalfreedommod.bridge.EssentialsBridge;
|
||||||
import me.totalfreedom.totalfreedommod.bridge.LibsDisguisesBridge;
|
import me.totalfreedom.totalfreedommod.bridge.LibsDisguisesBridge;
|
||||||
import me.totalfreedom.totalfreedommod.bridge.TFGuildsBridge;
|
|
||||||
import me.totalfreedom.totalfreedommod.bridge.WorldEditBridge;
|
import me.totalfreedom.totalfreedommod.bridge.WorldEditBridge;
|
||||||
import me.totalfreedom.totalfreedommod.bridge.WorldGuardBridge;
|
import me.totalfreedom.totalfreedommod.bridge.WorldGuardBridge;
|
||||||
import me.totalfreedom.totalfreedommod.caging.Cager;
|
import me.totalfreedom.totalfreedommod.caging.Cager;
|
||||||
@ -54,7 +52,6 @@ import org.bukkit.generator.ChunkGenerator;
|
|||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.spigotmc.SpigotConfig;
|
|
||||||
|
|
||||||
public class TotalFreedomMod extends JavaPlugin
|
public class TotalFreedomMod extends JavaPlugin
|
||||||
{
|
{
|
||||||
@ -74,10 +71,7 @@ public class TotalFreedomMod extends JavaPlugin
|
|||||||
// Command Loader
|
// Command Loader
|
||||||
public CommandLoader cl;
|
public CommandLoader cl;
|
||||||
// Services
|
// Services
|
||||||
public ServerInterface si;
|
|
||||||
public SavedFlags sf;
|
|
||||||
public WorldManager wm;
|
public WorldManager wm;
|
||||||
public LogViewer lv;
|
|
||||||
public AdminList al;
|
public AdminList al;
|
||||||
public ActivityLog acl;
|
public ActivityLog acl;
|
||||||
public RankManager rm;
|
public RankManager rm;
|
||||||
@ -122,18 +116,14 @@ public class TotalFreedomMod extends JavaPlugin
|
|||||||
public Trailer tr;
|
public Trailer tr;
|
||||||
public HTTPDaemon hd;
|
public HTTPDaemon hd;
|
||||||
public WorldRestrictions wr;
|
public WorldRestrictions wr;
|
||||||
public SignBlocker snp;
|
|
||||||
public EntityWiper ew;
|
public EntityWiper ew;
|
||||||
public Sitter st;
|
|
||||||
public VanishHandler vh;
|
public VanishHandler vh;
|
||||||
public Pterodactyl ptero;
|
|
||||||
//
|
//
|
||||||
// Bridges
|
// Bridges
|
||||||
public BukkitTelnetBridge btb;
|
public BukkitTelnetBridge btb;
|
||||||
public EssentialsBridge esb;
|
public EssentialsBridge esb;
|
||||||
public LibsDisguisesBridge ldb;
|
public LibsDisguisesBridge ldb;
|
||||||
public CoreProtectBridge cpb;
|
public CoreProtectBridge cpb;
|
||||||
public TFGuildsBridge tfg;
|
|
||||||
public WorldEditBridge web;
|
public WorldEditBridge web;
|
||||||
public WorldGuardBridge wgb;
|
public WorldGuardBridge wgb;
|
||||||
|
|
||||||
@ -177,9 +167,6 @@ public class TotalFreedomMod extends JavaPlugin
|
|||||||
final MethodTimer timer = new MethodTimer();
|
final MethodTimer timer = new MethodTimer();
|
||||||
timer.start();
|
timer.start();
|
||||||
|
|
||||||
// Warn if we're running on a wrong version
|
|
||||||
ServerInterface.warnVersion();
|
|
||||||
|
|
||||||
// Delete unused files
|
// Delete unused files
|
||||||
FUtil.deleteCoreDumps();
|
FUtil.deleteCoreDumps();
|
||||||
FUtil.deleteFolder(new File("./_deleteme"));
|
FUtil.deleteFolder(new File("./_deleteme"));
|
||||||
@ -187,7 +174,6 @@ public class TotalFreedomMod extends JavaPlugin
|
|||||||
fsh = new FreedomServiceHandler();
|
fsh = new FreedomServiceHandler();
|
||||||
|
|
||||||
config = new MainConfig();
|
config = new MainConfig();
|
||||||
config.load();
|
|
||||||
|
|
||||||
if (FUtil.inDeveloperMode())
|
if (FUtil.inDeveloperMode())
|
||||||
{
|
{
|
||||||
@ -213,13 +199,10 @@ public class TotalFreedomMod extends JavaPlugin
|
|||||||
FLog.info("Started " + fsh.getServiceAmount() + " services.");
|
FLog.info("Started " + fsh.getServiceAmount() + " services.");
|
||||||
|
|
||||||
timer.update();
|
timer.update();
|
||||||
FLog.info("Version " + pluginVersion + " for " + ServerInterface.COMPILE_NMS_VERSION + " enabled in " + timer.getTotal() + "ms");
|
FLog.info("Version " + pluginVersion + " enabled in " + timer.getTotal() + "ms");
|
||||||
|
|
||||||
// Metrics @ https://bstats.org/plugin/bukkit/TotalFreedomMod/2966
|
// Metrics @ https://bstats.org/plugin/bukkit/TotalFreedomMod/2966
|
||||||
new Metrics(this, 2966);
|
new Metrics(this, 2966);
|
||||||
|
|
||||||
// little workaround to stop spigot from autorestarting - causing AMP to detach from process.
|
|
||||||
SpigotConfig.config.set("settings.restart-on-crash", false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -298,10 +281,7 @@ public class TotalFreedomMod extends JavaPlugin
|
|||||||
private void initServices()
|
private void initServices()
|
||||||
{
|
{
|
||||||
// Start services
|
// Start services
|
||||||
si = new ServerInterface();
|
|
||||||
sf = new SavedFlags();
|
|
||||||
wm = new WorldManager();
|
wm = new WorldManager();
|
||||||
lv = new LogViewer();
|
|
||||||
sql = new SQLite();
|
sql = new SQLite();
|
||||||
al = new AdminList();
|
al = new AdminList();
|
||||||
acl = new ActivityLog();
|
acl = new ActivityLog();
|
||||||
@ -327,11 +307,8 @@ public class TotalFreedomMod extends JavaPlugin
|
|||||||
im = new IndefiniteBanList();
|
im = new IndefiniteBanList();
|
||||||
pem = new PermissionManager();
|
pem = new PermissionManager();
|
||||||
gr = new GameRuleHandler();
|
gr = new GameRuleHandler();
|
||||||
snp = new SignBlocker();
|
|
||||||
ew = new EntityWiper();
|
ew = new EntityWiper();
|
||||||
st = new Sitter();
|
|
||||||
vh = new VanishHandler();
|
vh = new VanishHandler();
|
||||||
ptero = new Pterodactyl();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initAdminUtils()
|
private void initAdminUtils()
|
||||||
@ -357,7 +334,6 @@ public class TotalFreedomMod extends JavaPlugin
|
|||||||
cpb = new CoreProtectBridge();
|
cpb = new CoreProtectBridge();
|
||||||
esb = new EssentialsBridge();
|
esb = new EssentialsBridge();
|
||||||
ldb = new LibsDisguisesBridge();
|
ldb = new LibsDisguisesBridge();
|
||||||
tfg = new TFGuildsBridge();
|
|
||||||
web = new WorldEditBridge();
|
web = new WorldEditBridge();
|
||||||
wgb = new WorldGuardBridge();
|
wgb = new WorldGuardBridge();
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package me.totalfreedom.totalfreedommod;
|
package me.totalfreedom.totalfreedommod;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
import net.md_5.bungee.api.ChatMessageType;
|
import net.md_5.bungee.api.ChatMessageType;
|
||||||
import net.md_5.bungee.api.chat.TextComponent;
|
import net.md_5.bungee.api.chat.TextComponent;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
@ -13,7 +15,6 @@ import org.bukkit.scheduler.BukkitRunnable;
|
|||||||
|
|
||||||
public class VanishHandler extends FreedomService
|
public class VanishHandler extends FreedomService
|
||||||
{
|
{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStart()
|
public void onStart()
|
||||||
{
|
{
|
||||||
@ -29,40 +30,32 @@ public class VanishHandler extends FreedomService
|
|||||||
{
|
{
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
|
|
||||||
for (Player p : server.getOnlinePlayers())
|
server.getOnlinePlayers().stream().filter(pl -> !plugin.al.isAdmin(player)
|
||||||
{
|
&& plugin.al.isVanished(pl.getUniqueId())).forEach(pl -> player.hidePlayer(plugin, pl));
|
||||||
if (!plugin.al.isAdmin(player) && plugin.al.isVanished(p.getName()))
|
|
||||||
{
|
|
||||||
player.hidePlayer(plugin, p);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Player p : server.getOnlinePlayers())
|
server.getOnlinePlayers().stream().filter(pl -> !plugin.al.isAdmin(pl)
|
||||||
{
|
&& plugin.al.isVanished(player.getUniqueId())).forEach(pl -> pl.hidePlayer(plugin, player));
|
||||||
if (!plugin.al.isAdmin(p) && plugin.al.isVanished(player.getName()))
|
|
||||||
{
|
|
||||||
p.hidePlayer(plugin, player);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (plugin.al.isVanished(player.getName()))
|
if (plugin.al.isVanished(player.getUniqueId()))
|
||||||
{
|
{
|
||||||
plugin.esb.setVanished(player.getName(), true);
|
plugin.esb.setVanished(player.getName(), true);
|
||||||
FLog.info(player.getName() + " joined while still vanished.");
|
FLog.info(player.getName() + " joined while still vanished.");
|
||||||
plugin.al.messageAllAdmins(ChatColor.YELLOW + player.getName() + " has joined silently.");
|
plugin.al.messageAllAdmins(ChatColor.YELLOW + player.getName() + " has joined silently.");
|
||||||
event.setJoinMessage(null);
|
event.joinMessage(null);
|
||||||
|
|
||||||
new BukkitRunnable()
|
new BukkitRunnable()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
if (!plugin.al.isVanished(player.getName()))
|
if (plugin.al.isVanished(player.getUniqueId()))
|
||||||
|
{
|
||||||
|
player.sendActionBar(Component.text("You are hidden from other players.").color(NamedTextColor.GOLD));
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
this.cancel();
|
this.cancel();
|
||||||
}
|
}
|
||||||
|
|
||||||
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(ChatColor.GOLD + "You are hidden from other players."));
|
|
||||||
}
|
}
|
||||||
}.runTaskTimer(plugin, 0L, 4L);
|
}.runTaskTimer(plugin, 0L, 4L);
|
||||||
}
|
}
|
||||||
@ -73,9 +66,9 @@ public class VanishHandler extends FreedomService
|
|||||||
{
|
{
|
||||||
Player player = event.getPlayer();
|
Player player = event.getPlayer();
|
||||||
|
|
||||||
if (plugin.al.isVanished(player.getName()))
|
if (plugin.al.isVanished(player.getUniqueId()))
|
||||||
{
|
{
|
||||||
event.setQuitMessage(null);
|
event.quitMessage(null);
|
||||||
FLog.info(player.getName() + " left while still vanished.");
|
FLog.info(player.getName() + " left while still vanished.");
|
||||||
plugin.al.messageAllAdmins(ChatColor.YELLOW + player.getName() + " has left silently.");
|
plugin.al.messageAllAdmins(ChatColor.YELLOW + player.getName() + " has left silently.");
|
||||||
}
|
}
|
||||||
|
@ -66,8 +66,13 @@ public class ActivityLogEntry implements IConfig
|
|||||||
|
|
||||||
public void addLogin()
|
public void addLogin()
|
||||||
{
|
{
|
||||||
Date currentTime = Date.from(Instant.now());
|
this.addLogin(System.currentTimeMillis());
|
||||||
timestamps.add("Login: " + FUtil.dateToString(currentTime));
|
}
|
||||||
|
|
||||||
|
public void addLogin(final long timestamp)
|
||||||
|
{
|
||||||
|
Date time = Date.from(Instant.ofEpochMilli(timestamp));
|
||||||
|
timestamps.add("Login: " + FUtil.dateToString(time));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addLogout()
|
public void addLogout()
|
||||||
|
@ -2,37 +2,32 @@ package me.totalfreedom.totalfreedommod.admin;
|
|||||||
|
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import me.totalfreedom.totalfreedommod.LogViewer.LogsRegistrationMode;
|
|
||||||
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
|
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
|
||||||
|
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.Server;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
public class Admin
|
public class Admin
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
private final List<String> ips = new ArrayList<>();
|
private final List<String> ips = new ArrayList<>();
|
||||||
private String name;
|
private UUID uuid;
|
||||||
private boolean active = true;
|
private boolean active = true;
|
||||||
private Rank rank = Rank.ADMIN;
|
private Rank rank = Rank.ADMIN;
|
||||||
private Date lastLogin = new Date();
|
private Date lastLogin = new Date();
|
||||||
private Boolean commandSpy = false;
|
private Boolean commandSpy = false;
|
||||||
private Boolean potionSpy = false;
|
private Boolean potionSpy = false;
|
||||||
private String acFormat = null;
|
private String acFormat = null;
|
||||||
private String pteroID = null;
|
|
||||||
|
|
||||||
public Admin(Player player)
|
public Admin(Player player)
|
||||||
{
|
{
|
||||||
this.name = player.getName();
|
uuid = player.getUniqueId();
|
||||||
this.ips.add(FUtil.getIp(player));
|
this.ips.add(FUtil.getIp(player));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -40,7 +35,7 @@ public class Admin
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
this.name = resultSet.getString("username");
|
this.uuid = UUID.fromString(resultSet.getString("uuid"));
|
||||||
this.active = resultSet.getBoolean("active");
|
this.active = resultSet.getBoolean("active");
|
||||||
this.rank = Rank.findRank(resultSet.getString("rank"));
|
this.rank = Rank.findRank(resultSet.getString("rank"));
|
||||||
this.ips.clear();
|
this.ips.clear();
|
||||||
@ -49,7 +44,6 @@ public class Admin
|
|||||||
this.commandSpy = resultSet.getBoolean("command_spy");
|
this.commandSpy = resultSet.getBoolean("command_spy");
|
||||||
this.potionSpy = resultSet.getBoolean("potion_spy");
|
this.potionSpy = resultSet.getBoolean("potion_spy");
|
||||||
this.acFormat = resultSet.getString("ac_format");
|
this.acFormat = resultSet.getString("ac_format");
|
||||||
this.pteroID = resultSet.getString("ptero_id");
|
|
||||||
}
|
}
|
||||||
catch (SQLException e)
|
catch (SQLException e)
|
||||||
{
|
{
|
||||||
@ -62,14 +56,13 @@ public class Admin
|
|||||||
{
|
{
|
||||||
final StringBuilder output = new StringBuilder();
|
final StringBuilder output = new StringBuilder();
|
||||||
|
|
||||||
output.append("Admin: ").append(name).append("\n")
|
output.append("Admin: ").append(getName() != null ? getName() : getUuid().toString()).append("\n")
|
||||||
.append("- IPs: ").append(StringUtils.join(ips, ", ")).append("\n")
|
.append("- IPs: ").append(StringUtils.join(ips, ", ")).append("\n")
|
||||||
.append("- Last Login: ").append(FUtil.dateToString(lastLogin)).append("\n")
|
.append("- Last Login: ").append(FUtil.dateToString(lastLogin)).append("\n")
|
||||||
.append("- Rank: ").append(rank.getName()).append("\n")
|
.append("- Rank: ").append(rank.getName()).append("\n")
|
||||||
.append("- Is Active: ").append(active).append("\n")
|
.append("- Is Active: ").append(active).append("\n")
|
||||||
.append("- Potion Spy: ").append(potionSpy).append("\n")
|
.append("- Potion Spy: ").append(potionSpy).append("\n")
|
||||||
.append("- Admin Chat Format: ").append(acFormat).append("\n")
|
.append("- Admin Chat Format: ").append(acFormat).append("\n");
|
||||||
.append("- Pterodactyl ID: ").append(pteroID).append("\n");
|
|
||||||
|
|
||||||
return output.toString();
|
return output.toString();
|
||||||
}
|
}
|
||||||
@ -78,7 +71,7 @@ public class Admin
|
|||||||
{
|
{
|
||||||
Map<String, Object> map = new HashMap<String, Object>()
|
Map<String, Object> map = new HashMap<String, Object>()
|
||||||
{{
|
{{
|
||||||
put("username", name);
|
put("uuid", uuid.toString());
|
||||||
put("active", active);
|
put("active", active);
|
||||||
put("rank", rank.toString());
|
put("rank", rank.toString());
|
||||||
put("ips", FUtil.listToString(ips));
|
put("ips", FUtil.listToString(ips));
|
||||||
@ -86,7 +79,6 @@ public class Admin
|
|||||||
put("command_spy", commandSpy);
|
put("command_spy", commandSpy);
|
||||||
put("potion_spy", potionSpy);
|
put("potion_spy", potionSpy);
|
||||||
put("ac_format", acFormat);
|
put("ac_format", acFormat);
|
||||||
put("ptero_id", pteroID);
|
|
||||||
}};
|
}};
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
@ -120,20 +112,20 @@ public class Admin
|
|||||||
|
|
||||||
public boolean isValid()
|
public boolean isValid()
|
||||||
{
|
{
|
||||||
return name != null
|
return uuid != null
|
||||||
&& rank != null
|
&& rank != null
|
||||||
&& !ips.isEmpty()
|
&& !ips.isEmpty()
|
||||||
&& lastLogin != null;
|
&& lastLogin != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getName()
|
public UUID getUuid()
|
||||||
{
|
{
|
||||||
return name;
|
return uuid;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setName(String name)
|
public String getName()
|
||||||
{
|
{
|
||||||
this.name = name;
|
return Bukkit.getOfflinePlayer(uuid).getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isActive()
|
public boolean isActive()
|
||||||
@ -162,9 +154,35 @@ public class Admin
|
|||||||
{
|
{
|
||||||
plugin.btb.killTelnetSessions(getName());
|
plugin.btb.killTelnetSessions(getName());
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
plugin.lv.updateLogsRegistration(null, getName(), LogsRegistrationMode.DELETE);
|
// Ensure admins don't have admin functionality when removed (FS-222)
|
||||||
|
AdminList.vanished.remove(getUuid());
|
||||||
|
|
||||||
|
if (plugin.esb != null)
|
||||||
|
{
|
||||||
|
plugin.esb.setVanished(getName(), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
setCommandSpy(false);
|
||||||
|
setPotionSpy(false);
|
||||||
|
|
||||||
|
Server server = Bukkit.getServer();
|
||||||
|
Player player = server.getPlayer(getUuid());
|
||||||
|
|
||||||
|
if (player != null)
|
||||||
|
{
|
||||||
|
// Update chats
|
||||||
|
FPlayer freedomPlayer = plugin.pl.getPlayer(player);
|
||||||
|
freedomPlayer.removeAdminFunctionality();
|
||||||
|
|
||||||
|
// Disable vanish
|
||||||
|
for (Player player1 : server.getOnlinePlayers())
|
||||||
|
{
|
||||||
|
player1.showPlayer(plugin, player);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -222,14 +240,4 @@ public class Admin
|
|||||||
{
|
{
|
||||||
this.acFormat = acFormat;
|
this.acFormat = acFormat;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getPteroID()
|
|
||||||
{
|
|
||||||
return pteroID;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPteroID(String pteroID)
|
|
||||||
{
|
|
||||||
this.pteroID = pteroID;
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -4,11 +4,7 @@ import com.google.common.collect.Maps;
|
|||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
import me.totalfreedom.totalfreedommod.FreedomService;
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
@ -21,19 +17,14 @@ import org.bukkit.entity.Player;
|
|||||||
|
|
||||||
public class AdminList extends FreedomService
|
public class AdminList extends FreedomService
|
||||||
{
|
{
|
||||||
public static final List<String> vanished = new ArrayList<>();
|
public static final List<UUID> vanished = new ArrayList<>();
|
||||||
public final Map<String, List<String>> verifiedNoAdmin = Maps.newHashMap();
|
|
||||||
private final Set<Admin> allAdmins = Sets.newHashSet(); // Includes disabled admins
|
private final Set<Admin> allAdmins = Sets.newHashSet(); // Includes disabled admins
|
||||||
// Only active admins below
|
// Only active admins below
|
||||||
private final Set<Admin> activeAdmins = Sets.newHashSet();
|
private final Set<Admin> activeAdmins = Sets.newHashSet();
|
||||||
|
private final Map<UUID, Admin> uuidTable = Maps.newHashMap();
|
||||||
private final Map<String, Admin> nameTable = Maps.newHashMap();
|
private final Map<String, Admin> nameTable = Maps.newHashMap();
|
||||||
private final Map<String, Admin> ipTable = Maps.newHashMap();
|
private final Map<String, Admin> ipTable = Maps.newHashMap();
|
||||||
|
|
||||||
public static List<String> getVanished()
|
|
||||||
{
|
|
||||||
return vanished;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStart()
|
public void onStart()
|
||||||
{
|
{
|
||||||
@ -52,12 +43,18 @@ public class AdminList extends FreedomService
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
ResultSet adminSet = plugin.sql.getAdminList();
|
ResultSet adminSet = plugin.sql.getAdminList();
|
||||||
|
while (adminSet.next())
|
||||||
{
|
{
|
||||||
while (adminSet.next())
|
try
|
||||||
{
|
{
|
||||||
Admin admin = new Admin(adminSet);
|
Admin admin = new Admin(adminSet);
|
||||||
allAdmins.add(admin);
|
allAdmins.add(admin);
|
||||||
}
|
}
|
||||||
|
catch (Throwable ex)
|
||||||
|
{
|
||||||
|
FLog.warning("An error occurred whilst reading the admin entry at row #" + adminSet.getRow());
|
||||||
|
FLog.warning(ex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (SQLException e)
|
catch (SQLException e)
|
||||||
@ -66,7 +63,7 @@ public class AdminList extends FreedomService
|
|||||||
}
|
}
|
||||||
|
|
||||||
updateTables();
|
updateTables();
|
||||||
FLog.info("Loaded " + allAdmins.size() + " admins (" + nameTable.size() + " active, " + ipTable.size() + " IPs)");
|
FLog.info("Loaded " + allAdmins.size() + " admins (" + uuidTable.size() + " active, " + ipTable.size() + " IPs)");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void messageAllAdmins(String message)
|
public void messageAllAdmins(String message)
|
||||||
@ -97,16 +94,6 @@ public class AdminList extends FreedomService
|
|||||||
return isAdmin(sender);
|
return isAdmin(sender);
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> getActiveAdminNames()
|
|
||||||
{
|
|
||||||
List<String> names = new ArrayList();
|
|
||||||
for (Admin admin : activeAdmins)
|
|
||||||
{
|
|
||||||
names.add(admin.getName());
|
|
||||||
}
|
|
||||||
return names;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isAdmin(CommandSender sender)
|
public boolean isAdmin(CommandSender sender)
|
||||||
{
|
{
|
||||||
if (!(sender instanceof Player))
|
if (!(sender instanceof Player))
|
||||||
@ -154,40 +141,20 @@ public class AdminList extends FreedomService
|
|||||||
|
|
||||||
public Admin getAdmin(Player player)
|
public Admin getAdmin(Player player)
|
||||||
{
|
{
|
||||||
// Find admin
|
final String ip = FUtil.getIp(player);
|
||||||
String ip = FUtil.getIp(player);
|
final Admin entry = getEntryByUuid(player.getUniqueId());
|
||||||
Admin admin = getEntryByName(player.getName());
|
|
||||||
|
|
||||||
// Admin by name
|
if (entry != null && !entry.getIps().contains(ip))
|
||||||
if (admin != null)
|
|
||||||
{
|
{
|
||||||
// Check if we're in online mode,
|
entry.addIp(ip);
|
||||||
// Or the players IP is in the admin entry
|
|
||||||
if (Bukkit.getOnlineMode() || admin.getIps().contains(ip))
|
|
||||||
{
|
|
||||||
if (!admin.getIps().contains(ip))
|
|
||||||
{
|
|
||||||
// Add the new IP if we have to
|
|
||||||
admin.addIp(ip);
|
|
||||||
save(admin);
|
|
||||||
updateTables();
|
|
||||||
}
|
|
||||||
return admin;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Admin by ip
|
return entry;
|
||||||
admin = getEntryByIp(ip);
|
}
|
||||||
if (admin != null)
|
|
||||||
{
|
|
||||||
// Set the new username
|
|
||||||
String oldName = admin.getName();
|
|
||||||
admin.setName(player.getName());
|
|
||||||
plugin.sql.updateAdminName(oldName, admin.getName());
|
|
||||||
updateTables();
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
public Admin getEntryByUuid(UUID uuid)
|
||||||
|
{
|
||||||
|
return uuidTable.get(uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Admin getEntryByName(String name)
|
public Admin getEntryByName(String name)
|
||||||
@ -200,25 +167,6 @@ public class AdminList extends FreedomService
|
|||||||
return ipTable.get(ip);
|
return ipTable.get(ip);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Admin getEntryByIpFuzzy(String needleIp)
|
|
||||||
{
|
|
||||||
final Admin directAdmin = getEntryByIp(needleIp);
|
|
||||||
if (directAdmin != null)
|
|
||||||
{
|
|
||||||
return directAdmin;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (String ip : ipTable.keySet())
|
|
||||||
{
|
|
||||||
if (FUtil.fuzzyIpMatch(needleIp, ip, 3))
|
|
||||||
{
|
|
||||||
return ipTable.get(ip);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateLastLogin(Player player)
|
public void updateLastLogin(Player player)
|
||||||
{
|
{
|
||||||
final Admin admin = getAdmin(player);
|
final Admin admin = getAdmin(player);
|
||||||
@ -228,31 +176,9 @@ public class AdminList extends FreedomService
|
|||||||
}
|
}
|
||||||
|
|
||||||
admin.setLastLogin(new Date());
|
admin.setLastLogin(new Date());
|
||||||
admin.setName(player.getName());
|
|
||||||
save(admin);
|
save(admin);
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isAdminImpostor(Player player)
|
|
||||||
{
|
|
||||||
return getEntryByName(player.getName()) != null && !isAdmin(player) && !isVerifiedAdmin(player);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isVerifiedAdmin(Player player)
|
|
||||||
{
|
|
||||||
return verifiedNoAdmin.containsKey(player.getName()) && verifiedNoAdmin.get(player.getName()).contains(FUtil.getIp(player));
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isIdentityMatched(Player player)
|
|
||||||
{
|
|
||||||
if (Bukkit.getOnlineMode())
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Admin admin = getAdmin(player);
|
|
||||||
return admin != null && admin.getName().equalsIgnoreCase(player.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean addAdmin(Admin admin)
|
public boolean addAdmin(Admin admin)
|
||||||
{
|
{
|
||||||
if (!admin.isValid())
|
if (!admin.isValid())
|
||||||
@ -268,6 +194,15 @@ public class AdminList extends FreedomService
|
|||||||
// Save admin
|
// Save admin
|
||||||
plugin.sql.addAdmin(admin);
|
plugin.sql.addAdmin(admin);
|
||||||
|
|
||||||
|
// Add login time
|
||||||
|
UUID uuid = admin.getUuid();
|
||||||
|
Player player = Bukkit.getPlayer(uuid);
|
||||||
|
|
||||||
|
if (player != null)
|
||||||
|
{
|
||||||
|
plugin.acl.getActivityLog(player).addLogin(player.getLastLogin());
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -297,6 +232,7 @@ public class AdminList extends FreedomService
|
|||||||
public void updateTables()
|
public void updateTables()
|
||||||
{
|
{
|
||||||
activeAdmins.clear();
|
activeAdmins.clear();
|
||||||
|
uuidTable.clear();
|
||||||
nameTable.clear();
|
nameTable.clear();
|
||||||
ipTable.clear();
|
ipTable.clear();
|
||||||
|
|
||||||
@ -308,13 +244,16 @@ public class AdminList extends FreedomService
|
|||||||
}
|
}
|
||||||
|
|
||||||
activeAdmins.add(admin);
|
activeAdmins.add(admin);
|
||||||
nameTable.put(admin.getName().toLowerCase(), admin);
|
uuidTable.put(admin.getUuid(), admin);
|
||||||
|
if (admin.getName() != null)
|
||||||
|
{
|
||||||
|
nameTable.put(admin.getName().toLowerCase(), admin);
|
||||||
|
}
|
||||||
|
|
||||||
for (String ip : admin.getIps())
|
for (String ip : admin.getIps())
|
||||||
{
|
{
|
||||||
ipTable.put(ip, admin);
|
ipTable.put(ip, admin);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -332,7 +271,7 @@ public class AdminList extends FreedomService
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
ResultSet currentSave = plugin.sql.getAdminByName(admin.getName());
|
ResultSet currentSave = plugin.sql.getAdminByUuid(admin.getUuid());
|
||||||
for (Map.Entry<String, Object> entry : admin.toSQLStorable().entrySet())
|
for (Map.Entry<String, Object> entry : admin.toSQLStorable().entrySet())
|
||||||
{
|
{
|
||||||
Object storedValue = plugin.sql.getValue(currentSave, entry.getKey(), entry.getValue());
|
Object storedValue = plugin.sql.getValue(currentSave, entry.getKey(), entry.getValue());
|
||||||
@ -377,9 +316,9 @@ public class AdminList extends FreedomService
|
|||||||
updateTables();
|
updateTables();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isVanished(String player)
|
public boolean isVanished(UUID uuid)
|
||||||
{
|
{
|
||||||
return vanished.contains(player);
|
return vanished.contains(uuid);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Set<Admin> getAllAdmins()
|
public Set<Admin> getAllAdmins()
|
||||||
@ -401,9 +340,4 @@ public class AdminList extends FreedomService
|
|||||||
{
|
{
|
||||||
return ipTable;
|
return ipTable;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<String, List<String>> getVerifiedNoAdmin()
|
|
||||||
{
|
|
||||||
return verifiedNoAdmin;
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -121,17 +121,6 @@ public class Ban
|
|||||||
reason);
|
reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Ban forPlayerFuzzy(Player player, CommandSender by, Date expiry, String reason)
|
|
||||||
{
|
|
||||||
return new Ban(player.getName(),
|
|
||||||
player.getUniqueId(),
|
|
||||||
FUtil.getFuzzyIp(FUtil.getIp(player)),
|
|
||||||
by.getName(),
|
|
||||||
Date.from(Instant.now()),
|
|
||||||
expiry,
|
|
||||||
reason);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static SimpleDateFormat getDateFormat()
|
public static SimpleDateFormat getDateFormat()
|
||||||
{
|
{
|
||||||
return DATE_FORMAT;
|
return DATE_FORMAT;
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package me.totalfreedom.totalfreedommod.banning;
|
package me.totalfreedom.totalfreedommod.banning;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
|
||||||
import com.google.common.collect.Maps;
|
import com.google.common.collect.Maps;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
import java.sql.ResultSet;
|
import java.sql.ResultSet;
|
||||||
@ -14,7 +13,6 @@ import java.util.Map;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
import me.totalfreedom.totalfreedommod.FreedomService;
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -30,8 +28,6 @@ public class BanManager extends FreedomService
|
|||||||
private final Map<String, Ban> nameBans = Maps.newHashMap();
|
private final Map<String, Ban> nameBans = Maps.newHashMap();
|
||||||
private final Map<UUID, Ban> uuidBans = Maps.newHashMap();
|
private final Map<UUID, Ban> uuidBans = Maps.newHashMap();
|
||||||
private final Map<String, Ban> ipBans = Maps.newHashMap();
|
private final Map<String, Ban> ipBans = Maps.newHashMap();
|
||||||
private final List<String> unbannableUsernames = Lists.newArrayList();
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -70,11 +66,6 @@ public class BanManager extends FreedomService
|
|||||||
updateViews();
|
updateViews();
|
||||||
|
|
||||||
FLog.info("Loaded " + ipBans.size() + " IP bans and " + nameBans.size() + " username bans.");
|
FLog.info("Loaded " + ipBans.size() + " IP bans and " + nameBans.size() + " username bans.");
|
||||||
|
|
||||||
// Load unbannable usernames
|
|
||||||
unbannableUsernames.clear();
|
|
||||||
unbannableUsernames.addAll(ConfigEntry.FAMOUS_PLAYERS.getStringList());
|
|
||||||
FLog.info("Loaded " + unbannableUsernames.size() + " unbannable usernames.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,10 +1,14 @@
|
|||||||
package me.totalfreedom.totalfreedommod.banning;
|
package me.totalfreedom.totalfreedommod.banning;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
import java.text.ParseException;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import me.totalfreedom.totalfreedommod.config.IConfig;
|
import me.totalfreedom.totalfreedommod.config.IConfig;
|
||||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||||
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
|
|
||||||
public class IndefiniteBan implements IConfig
|
public class IndefiniteBan implements IConfig
|
||||||
@ -13,6 +17,7 @@ public class IndefiniteBan implements IConfig
|
|||||||
private String username = null;
|
private String username = null;
|
||||||
private UUID uuid = null;
|
private UUID uuid = null;
|
||||||
private String reason = null;
|
private String reason = null;
|
||||||
|
private Date expiry = null;
|
||||||
|
|
||||||
public IndefiniteBan()
|
public IndefiniteBan()
|
||||||
{
|
{
|
||||||
@ -22,6 +27,7 @@ public class IndefiniteBan implements IConfig
|
|||||||
public void loadFrom(ConfigurationSection cs)
|
public void loadFrom(ConfigurationSection cs)
|
||||||
{
|
{
|
||||||
this.username = cs.getName();
|
this.username = cs.getName();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
String strUUID = cs.getString("uuid", null);
|
String strUUID = cs.getString("uuid", null);
|
||||||
@ -35,14 +41,26 @@ public class IndefiniteBan implements IConfig
|
|||||||
{
|
{
|
||||||
FLog.warning("Failed to load indefinite banned UUID for " + this.username + ". Make sure the UUID is in the correct format with dashes.");
|
FLog.warning("Failed to load indefinite banned UUID for " + this.username + ". Make sure the UUID is in the correct format with dashes.");
|
||||||
}
|
}
|
||||||
|
|
||||||
this.ips.clear();
|
this.ips.clear();
|
||||||
this.ips.addAll(cs.getStringList("ips"));
|
this.ips.addAll(cs.getStringList("ips"));
|
||||||
this.reason = cs.getString("reason", null);
|
this.reason = cs.getString("reason", null);
|
||||||
|
|
||||||
|
String date = cs.getString("expiry", null);
|
||||||
|
try
|
||||||
|
{
|
||||||
|
this.expiry = date != null ? new SimpleDateFormat("yyyy-MM-dd").parse(date) : null;
|
||||||
|
}
|
||||||
|
catch (ParseException ex)
|
||||||
|
{
|
||||||
|
FLog.warning("Failed to load indefinite banned expiry for " + this.username + ". Make sure the expiry is in the correct format (yyyy-MM-dd).");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void saveTo(ConfigurationSection cs)
|
public void saveTo(ConfigurationSection cs)
|
||||||
{
|
{
|
||||||
|
// The indefinite ban list is only intended to be modified manually. It is not intended to save.
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -85,4 +103,24 @@ public class IndefiniteBan implements IConfig
|
|||||||
{
|
{
|
||||||
this.reason = reason;
|
this.reason = reason;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Date getExpiry()
|
||||||
|
{
|
||||||
|
return expiry;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setExpiry(Date date)
|
||||||
|
{
|
||||||
|
this.expiry = date;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean hasExpiry()
|
||||||
|
{
|
||||||
|
return this.expiry != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isExpired()
|
||||||
|
{
|
||||||
|
return hasExpiry() && expiry.before(new Date(FUtil.getUnixTime()));
|
||||||
|
}
|
||||||
}
|
}
|
@ -2,6 +2,8 @@ package me.totalfreedom.totalfreedommod.banning;
|
|||||||
|
|
||||||
import com.google.common.base.Strings;
|
import com.google.common.base.Strings;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.util.Date;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
import me.totalfreedom.totalfreedommod.FreedomService;
|
||||||
@ -19,30 +21,24 @@ public class IndefiniteBanList extends FreedomService
|
|||||||
{
|
{
|
||||||
|
|
||||||
public static final String CONFIG_FILENAME = "indefinitebans.yml";
|
public static final String CONFIG_FILENAME = "indefinitebans.yml";
|
||||||
|
private YamlConfig config;
|
||||||
|
|
||||||
private final Set<IndefiniteBan> indefBans = Sets.newHashSet();
|
private final Set<IndefiniteBan> indefBans = Sets.newHashSet();
|
||||||
|
|
||||||
|
|
||||||
private int nameBanCount = 0;
|
private int nameBanCount = 0;
|
||||||
|
|
||||||
|
|
||||||
private int uuidBanCount = 0;
|
private int uuidBanCount = 0;
|
||||||
|
|
||||||
|
|
||||||
private int ipBanCount = 0;
|
private int ipBanCount = 0;
|
||||||
|
|
||||||
public static String getConfigFilename()
|
private final SimpleDateFormat dateFormat = new SimpleDateFormat("dd MMM yyyy, zzzz");
|
||||||
{
|
|
||||||
return CONFIG_FILENAME;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStart()
|
public void onStart()
|
||||||
{
|
{
|
||||||
indefBans.clear();
|
indefBans.clear();
|
||||||
|
|
||||||
final YamlConfig config = new YamlConfig(plugin, CONFIG_FILENAME, true);
|
config = new YamlConfig(plugin, CONFIG_FILENAME, true);
|
||||||
config.load();
|
config.load();
|
||||||
|
|
||||||
for (String name : config.getKeys(false))
|
for (String name : config.getKeys(false))
|
||||||
@ -64,10 +60,18 @@ public class IndefiniteBanList extends FreedomService
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (indefBan.isExpired())
|
||||||
|
{
|
||||||
|
FLog.info("Removing " + name + " from indefinite ban list as the entry has expired!");
|
||||||
|
config.set(name, null);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
indefBans.add(indefBan);
|
indefBans.add(indefBan);
|
||||||
}
|
}
|
||||||
|
|
||||||
updateCount();
|
updateCount();
|
||||||
|
config.save();
|
||||||
|
|
||||||
FLog.info("Loaded " + nameBanCount + " indefinite name bans, " + uuidBanCount + " UUID bans, and " + ipBanCount + " ip bans");
|
FLog.info("Loaded " + nameBanCount + " indefinite name bans, " + uuidBanCount + " UUID bans, and " + ipBanCount + " ip bans");
|
||||||
}
|
}
|
||||||
@ -111,12 +115,28 @@ public class IndefiniteBanList extends FreedomService
|
|||||||
|
|
||||||
if (ban != null)
|
if (ban != null)
|
||||||
{
|
{
|
||||||
String kickMessage = ChatColor.RED + "Your " + bannedBy + " is indefinitely banned from this server.";
|
if (ban.isExpired())
|
||||||
|
{
|
||||||
|
config.set(ban.getUsername(), null);
|
||||||
|
config.save();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
String kickMessage = ChatColor.RED + "Your " + bannedBy + " is "
|
||||||
|
+ (ban.hasExpiry() ? "" : "indefinitely ")
|
||||||
|
+ "banned from this server.";
|
||||||
String reason = ban.getReason();
|
String reason = ban.getReason();
|
||||||
if (!Strings.isNullOrEmpty(reason))
|
if (!Strings.isNullOrEmpty(reason))
|
||||||
{
|
{
|
||||||
kickMessage += "\nReason: " + ChatColor.GOLD + reason;
|
kickMessage += "\nReason: " + ChatColor.GOLD + reason;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Date expiry = ban.getExpiry();
|
||||||
|
if (expiry != null)
|
||||||
|
{
|
||||||
|
kickMessage += ChatColor.RED + "\nExpiry: " + ChatColor.GOLD + dateFormat.format(expiry);
|
||||||
|
}
|
||||||
|
|
||||||
String appealURL = ConfigEntry.SERVER_INDEFBAN_URL.getString();
|
String appealURL = ConfigEntry.SERVER_INDEFBAN_URL.getString();
|
||||||
if (!Strings.isNullOrEmpty(appealURL))
|
if (!Strings.isNullOrEmpty(appealURL))
|
||||||
{
|
{
|
||||||
|
@ -1,14 +1,10 @@
|
|||||||
package me.totalfreedom.totalfreedommod.blocking;
|
package me.totalfreedom.totalfreedommod.blocking;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
import me.totalfreedom.totalfreedommod.FreedomService;
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
import me.totalfreedom.totalfreedommod.util.Groups;
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Banner;
|
|
||||||
import org.bukkit.block.Skull;
|
import org.bukkit.block.Skull;
|
||||||
import org.bukkit.block.banner.Pattern;
|
|
||||||
import org.bukkit.entity.Player;
|
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;
|
||||||
@ -71,7 +67,7 @@ public class BlockBlocker extends FreedomService
|
|||||||
}
|
}
|
||||||
case STRUCTURE_BLOCK:
|
case STRUCTURE_BLOCK:
|
||||||
{
|
{
|
||||||
if (!ConfigEntry.ALLOW_STRUCTURE_BLOCKS.getBoolean())
|
if (!ConfigEntry.ALLOW_MASTERBLOCKS.getBoolean())
|
||||||
{
|
{
|
||||||
player.sendMessage(ChatColor.GRAY + "Structure blocks are disabled.");
|
player.sendMessage(ChatColor.GRAY + "Structure blocks are disabled.");
|
||||||
player.getInventory().setItem(player.getInventory().getHeldItemSlot(), new ItemStack(Material.COOKIE, 1));
|
player.getInventory().setItem(player.getInventory().getHeldItemSlot(), new ItemStack(Material.COOKIE, 1));
|
||||||
@ -81,7 +77,7 @@ public class BlockBlocker extends FreedomService
|
|||||||
}
|
}
|
||||||
case JIGSAW:
|
case JIGSAW:
|
||||||
{
|
{
|
||||||
if (!ConfigEntry.ALLOW_JIGSAWS.getBoolean())
|
if (!ConfigEntry.ALLOW_MASTERBLOCKS.getBoolean())
|
||||||
{
|
{
|
||||||
player.sendMessage(ChatColor.GRAY + "Jigsaws are disabled.");
|
player.sendMessage(ChatColor.GRAY + "Jigsaws are disabled.");
|
||||||
player.getInventory().setItem(player.getInventory().getHeldItemSlot(), new ItemStack(Material.COOKIE, 1));
|
player.getInventory().setItem(player.getInventory().getHeldItemSlot(), new ItemStack(Material.COOKIE, 1));
|
||||||
@ -89,6 +85,16 @@ public class BlockBlocker extends FreedomService
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case REPEATING_COMMAND_BLOCK:
|
||||||
|
case CHAIN_COMMAND_BLOCK:
|
||||||
|
case COMMAND_BLOCK:
|
||||||
|
if (!ConfigEntry.ALLOW_MASTERBLOCKS.getBoolean())
|
||||||
|
{
|
||||||
|
player.sendMessage(ChatColor.GRAY + "Command blocks are disabled.");
|
||||||
|
player.getInventory().setItem(player.getInventory().getHeldItemSlot(), new ItemStack(Material.COOKIE, 1));
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case GRINDSTONE:
|
case GRINDSTONE:
|
||||||
{
|
{
|
||||||
if (!ConfigEntry.ALLOW_GRINDSTONES.getBoolean())
|
if (!ConfigEntry.ALLOW_GRINDSTONES.getBoolean())
|
||||||
@ -171,17 +177,10 @@ public class BlockBlocker extends FreedomService
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
default:
|
||||||
|
|
||||||
if (Groups.BANNERS.contains(event.getBlockPlaced().getType()))
|
|
||||||
{
|
|
||||||
Banner banner = (Banner)event.getBlockPlaced().getState();
|
|
||||||
List<Pattern> patterns = banner.getPatterns();
|
|
||||||
|
|
||||||
if (patterns.size() >= 2)
|
|
||||||
{
|
{
|
||||||
banner.setPatterns(patterns.subList(0, 2));
|
// Do nothing
|
||||||
player.sendMessage(ChatColor.GRAY + "Your banner had too many patterns on it, so some were removed.");
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,8 @@ import java.util.ArrayList;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import me.totalfreedom.scissors.event.block.MasterBlockFireEvent;
|
||||||
|
import io.papermc.paper.event.player.PlayerSignCommandPreprocessEvent;
|
||||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
import me.totalfreedom.totalfreedommod.FreedomService;
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
@ -18,15 +20,7 @@ import org.bukkit.entity.FallingBlock;
|
|||||||
import org.bukkit.entity.Tameable;
|
import org.bukkit.entity.Tameable;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.block.BlockBurnEvent;
|
import org.bukkit.event.block.*;
|
||||||
import org.bukkit.event.block.BlockDispenseEvent;
|
|
||||||
import org.bukkit.event.block.BlockFromToEvent;
|
|
||||||
import org.bukkit.event.block.BlockGrowEvent;
|
|
||||||
import org.bukkit.event.block.BlockIgniteEvent;
|
|
||||||
import org.bukkit.event.block.BlockPhysicsEvent;
|
|
||||||
import org.bukkit.event.block.BlockPistonExtendEvent;
|
|
||||||
import org.bukkit.event.block.BlockPistonRetractEvent;
|
|
||||||
import org.bukkit.event.block.LeavesDecayEvent;
|
|
||||||
import org.bukkit.event.entity.EntityCombustEvent;
|
import org.bukkit.event.entity.EntityCombustEvent;
|
||||||
import org.bukkit.event.entity.EntityDamageEvent;
|
import org.bukkit.event.entity.EntityDamageEvent;
|
||||||
import org.bukkit.event.entity.EntityDeathEvent;
|
import org.bukkit.event.entity.EntityDeathEvent;
|
||||||
@ -115,6 +109,28 @@ public class EventBlocker extends FreedomService
|
|||||||
event.setRadius(ConfigEntry.EXPLOSIVE_RADIUS.getDouble().floatValue());
|
event.setRadius(ConfigEntry.EXPLOSIVE_RADIUS.getDouble().floatValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
|
public void onBlockExplode(BlockExplodeEvent event)
|
||||||
|
{
|
||||||
|
if (!ConfigEntry.ALLOW_EXPLOSIONS.getBoolean())
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
event.setYield(ConfigEntry.EXPLOSIVE_RADIUS.getDouble().floatValue());
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
|
public void onMasterBlockFire(MasterBlockFireEvent event)
|
||||||
|
{
|
||||||
|
if (!ConfigEntry.ALLOW_MASTERBLOCKS.getBoolean())
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
event.getAt().getBlock().setType(Material.CAKE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGH)
|
@EventHandler(priority = EventPriority.HIGH)
|
||||||
public void onEntityCombust(EntityCombustEvent event)
|
public void onEntityCombust(EntityCombustEvent event)
|
||||||
{
|
{
|
||||||
@ -146,12 +162,9 @@ public class EventBlocker extends FreedomService
|
|||||||
if (ConfigEntry.ENABLE_PET_PROTECT.getBoolean())
|
if (ConfigEntry.ENABLE_PET_PROTECT.getBoolean())
|
||||||
{
|
{
|
||||||
Entity entity = event.getEntity();
|
Entity entity = event.getEntity();
|
||||||
if (entity instanceof Tameable)
|
if (entity instanceof Tameable tameable && tameable.isTamed())
|
||||||
{
|
{
|
||||||
if (((Tameable)entity).isTamed())
|
event.setCancelled(true);
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -159,7 +172,7 @@ public class EventBlocker extends FreedomService
|
|||||||
@EventHandler(priority = EventPriority.NORMAL)
|
@EventHandler(priority = EventPriority.NORMAL)
|
||||||
public void onPlayerDropItem(PlayerDropItemEvent event)
|
public void onPlayerDropItem(PlayerDropItemEvent event)
|
||||||
{
|
{
|
||||||
if (!plugin.al.isAdmin(event.getPlayer()))
|
if (!plugin.al.isAdmin(event.getPlayer()) && !ConfigEntry.ALLOW_ITEM_DROPS.getBoolean())
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
}
|
}
|
||||||
@ -265,4 +278,10 @@ public class EventBlocker extends FreedomService
|
|||||||
FUtil.fixCommandVoid(event.getEntity());
|
FUtil.fixCommandVoid(event.getEntity());
|
||||||
event.setDeathMessage(event.getDeathMessage());
|
event.setDeathMessage(event.getDeathMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
public void onSignInteract(PlayerSignCommandPreprocessEvent event)
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,7 +4,10 @@ import me.totalfreedom.totalfreedommod.FreedomService;
|
|||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
import me.totalfreedom.totalfreedommod.util.Groups;
|
import me.totalfreedom.totalfreedommod.util.Groups;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
|
import org.bukkit.block.Block;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.entity.Player;
|
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;
|
||||||
@ -24,7 +27,7 @@ public class InteractBlocker extends FreedomService
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.HIGH)
|
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
|
||||||
public void onPlayerInteract(PlayerInteractEvent event)
|
public void onPlayerInteract(PlayerInteractEvent event)
|
||||||
{
|
{
|
||||||
switch (event.getAction())
|
switch (event.getAction())
|
||||||
@ -36,10 +39,9 @@ public class InteractBlocker extends FreedomService
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case LEFT_CLICK_AIR:
|
default:
|
||||||
case LEFT_CLICK_BLOCK:
|
|
||||||
{
|
{
|
||||||
//
|
// Do nothing
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -68,21 +70,42 @@ public class InteractBlocker extends FreedomService
|
|||||||
private void handleRightClick(PlayerInteractEvent event)
|
private void handleRightClick(PlayerInteractEvent event)
|
||||||
{
|
{
|
||||||
final Player player = event.getPlayer();
|
final Player player = event.getPlayer();
|
||||||
|
if (player.getGameMode().equals(GameMode.SPECTATOR)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (event.getClickedBlock() != null)
|
final Block clickedBlock = event.getClickedBlock();
|
||||||
|
|
||||||
|
if (clickedBlock != null && clickedBlock.getType() == Material.RESPAWN_ANCHOR && !ConfigEntry.ALLOW_RESPAWN_ANCHORS.getBoolean())
|
||||||
{
|
{
|
||||||
if (event.getClickedBlock().getType().equals(Material.STRUCTURE_BLOCK) || event.getClickedBlock().getType().equals(Material.JIGSAW) || event.getClickedBlock().getType().equals(Material.RESPAWN_ANCHOR))
|
event.setCancelled(true);
|
||||||
{
|
return;
|
||||||
event.setCancelled(true);
|
|
||||||
event.getPlayer().closeInventory();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Groups.SPAWN_EGGS.contains(event.getMaterial()))
|
if (Groups.SPAWN_EGGS.contains(event.getMaterial()))
|
||||||
{
|
{
|
||||||
player.getInventory().clear(player.getInventory().getHeldItemSlot());
|
|
||||||
player.sendMessage(ChatColor.GRAY + "Spawn eggs are currently disabled.");
|
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
EntityType eggType = null;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Material mat = event.getMaterial();
|
||||||
|
if (mat == Material.MOOSHROOM_SPAWN_EGG)
|
||||||
|
{
|
||||||
|
eggType = EntityType.MUSHROOM_COW;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
eggType = EntityType.valueOf(mat.name().substring(0, mat.name().length() - 10));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (IllegalArgumentException ignored)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
}
|
||||||
|
if (eggType != null && clickedBlock != null)
|
||||||
|
{
|
||||||
|
clickedBlock.getWorld().spawnEntity(clickedBlock.getLocation().add(event.getBlockFace().getDirection()).add(0.5, 0.5, 0.5), eggType);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -153,11 +176,21 @@ public class InteractBlocker extends FreedomService
|
|||||||
}
|
}
|
||||||
case WRITTEN_BOOK:
|
case WRITTEN_BOOK:
|
||||||
{
|
{
|
||||||
|
if (ConfigEntry.ALLOW_BOOKS.getBoolean())
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
player.getInventory().clear(player.getInventory().getHeldItemSlot());
|
player.getInventory().clear(player.getInventory().getHeldItemSlot());
|
||||||
player.sendMessage(ChatColor.GRAY + "Books are currently disabled.");
|
player.sendMessage(ChatColor.GRAY + "Books are currently disabled.");
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
// Do nothing
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,67 +0,0 @@
|
|||||||
package me.totalfreedom.totalfreedommod.blocking;
|
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
|
||||||
import net.minecraft.server.v1_16_R3.NBTTagCompound;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.Tag;
|
|
||||||
import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.event.EventHandler;
|
|
||||||
import org.bukkit.event.EventPriority;
|
|
||||||
import org.bukkit.event.block.Action;
|
|
||||||
import org.bukkit.event.block.BlockPlaceEvent;
|
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
|
|
||||||
//codebeat:disable[LOC,ABC]
|
|
||||||
|
|
||||||
public class SignBlocker extends FreedomService
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void onStart()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStop()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.NORMAL)
|
|
||||||
public void onPlayerPlaceBlock(BlockPlaceEvent event)
|
|
||||||
{
|
|
||||||
|
|
||||||
final Player player = event.getPlayer();
|
|
||||||
if (Tag.SIGNS.getValues().contains(event.getBlock().getType()))
|
|
||||||
{
|
|
||||||
ItemStack sign = event.getItemInHand();
|
|
||||||
net.minecraft.server.v1_16_R3.ItemStack nmsSign = CraftItemStack.asNMSCopy(sign);
|
|
||||||
NBTTagCompound compound = (nmsSign.hasTag()) ? nmsSign.getTag() : new NBTTagCompound();
|
|
||||||
assert compound != null;
|
|
||||||
NBTTagCompound bet = compound.getCompound("BlockEntityTag");
|
|
||||||
String line1 = bet.getString("Text1");
|
|
||||||
String line2 = bet.getString("Text2");
|
|
||||||
String line3 = bet.getString("Text3");
|
|
||||||
String line4 = bet.getString("Text4");
|
|
||||||
if (line1.contains("run_command") || line2.contains("run_command") || line3.contains("run_command") || line4.contains("run_command"))
|
|
||||||
{
|
|
||||||
player.sendMessage(ChatColor.GRAY + "You are not allowed to place command signs.");
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.LOWEST)
|
|
||||||
public void onPlayerInteractSign(PlayerInteractEvent event)
|
|
||||||
{
|
|
||||||
if (event.getAction() != Action.RIGHT_CLICK_BLOCK)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (event.getClickedBlock() != null && Tag.SIGNS.getValues().contains(event.getClickedBlock().getType()))
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -24,30 +24,12 @@ import org.bukkit.plugin.SimplePluginManager;
|
|||||||
|
|
||||||
public class CommandBlocker extends FreedomService
|
public class CommandBlocker extends FreedomService
|
||||||
{
|
{
|
||||||
|
private final Pattern whitespacePattern = Pattern.compile("^/?( +)(.*)?");
|
||||||
private final Pattern flagPattern = Pattern.compile("(:([0-9]){5,})");
|
private final Pattern flagPattern = Pattern.compile("(:([0-9]){5,})");
|
||||||
//
|
//
|
||||||
private final Map<String, CommandBlockerEntry> entryList = Maps.newHashMap();
|
private final Map<String, CommandBlockerEntry> entryList = Maps.newHashMap();
|
||||||
private final List<String> unknownCommands = Lists.newArrayList();
|
private final List<String> unknownCommands = Lists.newArrayList();
|
||||||
|
|
||||||
public static CommandMap getCommandMap()
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
SimplePluginManager simplePluginManager = (SimplePluginManager)Bukkit.getServer().getPluginManager();
|
|
||||||
|
|
||||||
Field commandMapField = SimplePluginManager.class.getDeclaredField("commandMap");
|
|
||||||
commandMapField.setAccessible(true);
|
|
||||||
|
|
||||||
return (SimpleCommandMap)commandMapField.get(simplePluginManager);
|
|
||||||
}
|
|
||||||
catch (NoSuchFieldException | IllegalArgumentException | IllegalAccessException e)
|
|
||||||
{
|
|
||||||
FLog.severe("Failed to get command map field (" + e.getMessage() + ")");
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStart()
|
public void onStart()
|
||||||
{
|
{
|
||||||
@ -65,7 +47,7 @@ public class CommandBlocker extends FreedomService
|
|||||||
entryList.clear();
|
entryList.clear();
|
||||||
unknownCommands.clear();
|
unknownCommands.clear();
|
||||||
|
|
||||||
final CommandMap commandMap = getCommandMap();
|
final CommandMap commandMap = Bukkit.getCommandMap();
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
List<String> blockedCommands = (List<String>)ConfigEntry.BLOCKED_COMMANDS.getList();
|
List<String> blockedCommands = (List<String>)ConfigEntry.BLOCKED_COMMANDS.getList();
|
||||||
@ -156,6 +138,14 @@ public class CommandBlocker extends FreedomService
|
|||||||
|
|
||||||
// Format
|
// Format
|
||||||
command = command.toLowerCase().trim();
|
command = command.toLowerCase().trim();
|
||||||
|
|
||||||
|
// Whitespaces
|
||||||
|
Matcher whitespaceMatcher = whitespacePattern.matcher(command);
|
||||||
|
if (whitespaceMatcher.matches() && whitespaceMatcher.groupCount() == 2)
|
||||||
|
{
|
||||||
|
command = whitespaceMatcher.group(2);
|
||||||
|
}
|
||||||
|
|
||||||
command = command.startsWith("/") ? command.substring(1) : command;
|
command = command.startsWith("/") ? command.substring(1) : command;
|
||||||
|
|
||||||
// Check for plugin specific commands
|
// Check for plugin specific commands
|
||||||
@ -203,12 +193,9 @@ public class CommandBlocker extends FreedomService
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Validate sub command
|
// Validate sub command
|
||||||
if (entry.getSubCommand() != null)
|
if (entry.getSubCommand() != null && (subCommand == null || !subCommand.startsWith(entry.getSubCommand())))
|
||||||
{
|
{
|
||||||
if (subCommand == null || !subCommand.startsWith(entry.getSubCommand()))
|
return false;
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (entry.getRank().hasPermission(sender))
|
if (entry.getRank().hasPermission(sender))
|
||||||
|
@ -2,10 +2,10 @@ package me.totalfreedom.totalfreedommod.blocking.command;
|
|||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
|
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
|
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.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.spigotmc.SpigotConfig;
|
|
||||||
|
|
||||||
public class CommandBlockerEntry
|
public class CommandBlockerEntry
|
||||||
{
|
{
|
||||||
@ -45,7 +45,7 @@ public class CommandBlockerEntry
|
|||||||
}
|
}
|
||||||
if (action == CommandBlockerAction.BLOCK_UNKNOWN)
|
if (action == CommandBlockerAction.BLOCK_UNKNOWN)
|
||||||
{
|
{
|
||||||
sender.sendMessage(SpigotConfig.unknownCommandMessage);
|
sender.sendMessage(Bukkit.spigot().getSpigotConfig().getString("messages.unknown-command"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
FUtil.playerMsg(sender, FUtil.colorize(message));
|
FUtil.playerMsg(sender, FUtil.colorize(message));
|
||||||
|
@ -42,7 +42,7 @@ public class BukkitTelnetBridge extends FreedomService
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
final Admin admin = plugin.al.getEntryByIpFuzzy(ip);
|
final Admin admin = plugin.al.getEntryByIp(ip);
|
||||||
|
|
||||||
if (admin == null || !admin.isActive() || !admin.getRank().hasConsoleVariant())
|
if (admin == null || !admin.isActive() || !admin.getRank().hasConsoleVariant())
|
||||||
{
|
{
|
||||||
@ -90,7 +90,10 @@ public class BukkitTelnetBridge extends FreedomService
|
|||||||
|
|
||||||
playerTags.put("tfm.playerdata.getTag", plugin.pl.getPlayer(player).getTag());
|
playerTags.put("tfm.playerdata.getTag", plugin.pl.getPlayer(player).getTag());
|
||||||
|
|
||||||
playerTags.put("tfm.essentialsBridge.getNickname", plugin.esb.getNickname(player.getName()));
|
if (server.getPluginManager().isPluginEnabled("Essentials"))
|
||||||
|
{
|
||||||
|
playerTags.put("tfm.essentialsBridge.getNickname", plugin.esb.getNickname(player.getName()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -101,12 +104,9 @@ public class BukkitTelnetBridge extends FreedomService
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Plugin bukkitTelnet = server.getPluginManager().getPlugin("BukkitTelnet");
|
final Plugin bukkitTelnet = server.getPluginManager().getPlugin("BukkitTelnet");
|
||||||
if (bukkitTelnet != null)
|
if (bukkitTelnet instanceof BukkitTelnet)
|
||||||
{
|
{
|
||||||
if (bukkitTelnet instanceof BukkitTelnet)
|
bukkitTelnetPlugin = (BukkitTelnet)bukkitTelnet;
|
||||||
{
|
|
||||||
bukkitTelnetPlugin = (BukkitTelnet)bukkitTelnet;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
@ -1,81 +1,58 @@
|
|||||||
package me.totalfreedom.totalfreedommod.bridge;
|
package me.totalfreedom.totalfreedommod.bridge;
|
||||||
|
|
||||||
import java.io.File;
|
import java.util.*;
|
||||||
import java.sql.*;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.text.DecimalFormat;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
import me.totalfreedom.totalfreedommod.FreedomService;
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
|
||||||
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import net.coreprotect.CoreProtect;
|
import net.coreprotect.CoreProtect;
|
||||||
import net.coreprotect.CoreProtectAPI;
|
import net.coreprotect.CoreProtectAPI;
|
||||||
import org.bukkit.Bukkit;
|
import net.coreprotect.utility.Util;
|
||||||
import org.bukkit.ChatColor;
|
import net.kyori.adventure.text.Component;
|
||||||
import org.bukkit.World;
|
import net.kyori.adventure.text.TextComponent;
|
||||||
|
import net.kyori.adventure.text.event.ClickEvent;
|
||||||
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
import net.kyori.adventure.text.format.TextColor;
|
||||||
|
import net.kyori.adventure.text.format.TextDecoration;
|
||||||
|
import org.bukkit.Material;
|
||||||
import org.bukkit.block.Block;
|
import org.bukkit.block.Block;
|
||||||
import org.bukkit.block.BlockState;
|
|
||||||
import org.bukkit.block.data.BlockData;
|
|
||||||
import org.bukkit.entity.Player;
|
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.block.Action;
|
import org.bukkit.event.block.Action;
|
||||||
import org.bukkit.event.player.PlayerInteractEvent;
|
import org.bukkit.event.player.PlayerInteractEvent;
|
||||||
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
import org.bukkit.scheduler.BukkitTask;
|
|
||||||
|
|
||||||
public class CoreProtectBridge extends FreedomService
|
public class CoreProtectBridge extends FreedomService
|
||||||
{
|
{
|
||||||
public static Map<Player, FUtil.PaginationList<String>> HISTORY_MAP = new HashMap<>();
|
//-- Block Inspector --//
|
||||||
private final List<String> tables = Arrays.asList("co_sign", "co_session", "co_container", "co_block");
|
private static final Component name = Component.text("Block Inspector").color(TextColor.color(0x30ade4));
|
||||||
|
private static final Component header = Component.text("---- ").append(name)
|
||||||
|
.append(Component.text(" ---- ")).colorIfAbsent(NamedTextColor.WHITE);
|
||||||
|
private static final Component prefix = name.append(Component.text(" - ").color(NamedTextColor.WHITE))
|
||||||
|
.colorIfAbsent(NamedTextColor.WHITE);
|
||||||
|
//--
|
||||||
|
private final HashMap<UUID, Long> cooldownMap = new HashMap<>();
|
||||||
|
private HashMap<UUID, FUtil.PaginationList<CoreProtectAPI.ParseResult>> historyMap;
|
||||||
|
|
||||||
private final HashMap<String, Long> cooldown = new HashMap<>();
|
//---------------------//
|
||||||
private CoreProtectAPI coreProtectAPI = null;
|
private CoreProtectAPI coreProtectAPI = null;
|
||||||
private BukkitTask wiper;
|
|
||||||
|
|
||||||
public static Long getSecondsLeft(long prevTime, int timeAdd)
|
public static Long getSecondsLeft(long prevTime, int timeAdd)
|
||||||
{
|
{
|
||||||
return prevTime / 1000L + timeAdd - System.currentTimeMillis() / 1000L;
|
return prevTime / 1000L + timeAdd - System.currentTimeMillis() / 1000L;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Unix timestamp converter taken from Functions class in CoreProtect, not my code
|
|
||||||
public static String getTimeAgo(int logTime, int currentTime)
|
|
||||||
{
|
|
||||||
StringBuilder message = new StringBuilder();
|
|
||||||
double timeSince = (double)currentTime - ((double)logTime + 0.0D);
|
|
||||||
timeSince /= 60.0D;
|
|
||||||
if (timeSince < 60.0D)
|
|
||||||
{
|
|
||||||
message.append((new DecimalFormat("0.00")).format(timeSince)).append("/m ago");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (message.length() == 0)
|
|
||||||
{
|
|
||||||
timeSince /= 60.0D;
|
|
||||||
if (timeSince < 24.0D)
|
|
||||||
{
|
|
||||||
message.append((new DecimalFormat("0.00")).format(timeSince)).append("/h ago");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (message.length() == 0)
|
|
||||||
{
|
|
||||||
timeSince /= 24.0D;
|
|
||||||
message.append((new DecimalFormat("0.00")).format(timeSince)).append("/d ago");
|
|
||||||
}
|
|
||||||
|
|
||||||
return message.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStart()
|
public void onStart()
|
||||||
{
|
{
|
||||||
|
if (isEnabled())
|
||||||
|
{
|
||||||
|
historyMap = new HashMap<>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -88,7 +65,7 @@ public class CoreProtectBridge extends FreedomService
|
|||||||
CoreProtect coreProtect = null;
|
CoreProtect coreProtect = null;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
final Plugin coreProtectPlugin = Bukkit.getServer().getPluginManager().getPlugin("CoreProtect");
|
final Plugin coreProtectPlugin = server.getPluginManager().getPlugin("CoreProtect");
|
||||||
assert coreProtectPlugin != null;
|
assert coreProtectPlugin != null;
|
||||||
if (coreProtectPlugin instanceof CoreProtect)
|
if (coreProtectPlugin instanceof CoreProtect)
|
||||||
{
|
{
|
||||||
@ -129,6 +106,11 @@ public class CoreProtectBridge extends FreedomService
|
|||||||
|
|
||||||
public boolean isEnabled()
|
public boolean isEnabled()
|
||||||
{
|
{
|
||||||
|
if (!server.getPluginManager().isPluginEnabled("CoreProtect"))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
final CoreProtect coreProtect = getCoreProtect();
|
final CoreProtect coreProtect = getCoreProtect();
|
||||||
|
|
||||||
return coreProtect != null && coreProtect.isEnabled();
|
return coreProtect != null && coreProtect.isEnabled();
|
||||||
@ -137,13 +119,13 @@ public class CoreProtectBridge extends FreedomService
|
|||||||
// Rollback the specified player's edits that were in the last 24 hours.
|
// Rollback the specified player's edits that were in the last 24 hours.
|
||||||
public void rollback(final String name)
|
public void rollback(final String name)
|
||||||
{
|
{
|
||||||
final CoreProtectAPI coreProtect = getCoreProtectAPI();
|
|
||||||
|
|
||||||
if (!isEnabled())
|
if (!isEnabled())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final CoreProtectAPI coreProtect = getCoreProtectAPI();
|
||||||
|
|
||||||
new BukkitRunnable()
|
new BukkitRunnable()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
@ -157,13 +139,13 @@ public class CoreProtectBridge extends FreedomService
|
|||||||
// Reverts a rollback for the specified player's edits that were in the last 24 hours.
|
// Reverts a rollback for the specified player's edits that were in the last 24 hours.
|
||||||
public void restore(final String name)
|
public void restore(final String name)
|
||||||
{
|
{
|
||||||
final CoreProtectAPI coreProtect = getCoreProtectAPI();
|
|
||||||
|
|
||||||
if (!isEnabled())
|
if (!isEnabled())
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final CoreProtectAPI coreProtect = getCoreProtectAPI();
|
||||||
|
|
||||||
new BukkitRunnable()
|
new BukkitRunnable()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
@ -174,283 +156,182 @@ public class CoreProtectBridge extends FreedomService
|
|||||||
}.runTaskAsynchronously(plugin);
|
}.runTaskAsynchronously(plugin);
|
||||||
}
|
}
|
||||||
|
|
||||||
public File getDatabase()
|
public boolean hasHistory(Player player)
|
||||||
{
|
{
|
||||||
if (!isEnabled())
|
return historyMap.containsKey(player.getUniqueId());
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (new File(getCoreProtect().getDataFolder(), "database.db"));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public double getDBSize()
|
public FUtil.PaginationList<CoreProtectAPI.ParseResult> getHistoryForPlayer(Player player)
|
||||||
{
|
{
|
||||||
double bytes = getDatabase().length();
|
return historyMap.get(player.getUniqueId());
|
||||||
double kilobytes = (bytes / 1024);
|
|
||||||
double megabytes = (kilobytes / 1024);
|
|
||||||
return (megabytes / 1024);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wipes DB for the specified world
|
public void showPageToPlayer(Player player, FUtil.PaginationList<CoreProtectAPI.ParseResult> results, int pageNum)
|
||||||
public void clearDatabase(World world)
|
|
||||||
{
|
{
|
||||||
clearDatabase(world, false);
|
if (player == null || !player.isOnline())
|
||||||
}
|
|
||||||
|
|
||||||
// Wipes DB for the specified world
|
|
||||||
public void clearDatabase(World world, Boolean shutdown)
|
|
||||||
{
|
|
||||||
if (!ConfigEntry.COREPROTECT_MYSQL_ENABLED.getBoolean())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
final CoreProtect coreProtect = getCoreProtect();
|
|
||||||
|
|
||||||
if (coreProtect == null)
|
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* As CoreProtect doesn't have an API method for deleting all of the data for a specific world
|
List<CoreProtectAPI.ParseResult> page = results.getPage(pageNum);
|
||||||
we have to do this manually via SQL */
|
|
||||||
Connection connection;
|
if (page == null || page.isEmpty())
|
||||||
try
|
|
||||||
{
|
{
|
||||||
String host = ConfigEntry.COREPROTECT_MYSQL_HOST.getString();
|
player.sendMessage(prefix.append(Component.text("No results were found.", NamedTextColor.WHITE)));
|
||||||
String port = ConfigEntry.COREPROTECT_MYSQL_PORT.getString();
|
|
||||||
String username = ConfigEntry.COREPROTECT_MYSQL_USERNAME.getString();
|
|
||||||
String password = ConfigEntry.COREPROTECT_MYSQL_PASSWORD.getString();
|
|
||||||
String database = ConfigEntry.COREPROTECT_MYSQL_DATABASE.getString();
|
|
||||||
String url = host + ":" + port + "/" + database + "?user=" + username + "&password=" + password + "&useSSL=false";
|
|
||||||
connection = DriverManager.getConnection("jdbc:sql://" + url);
|
|
||||||
final PreparedStatement statement = connection.prepareStatement("SELECT id FROM co_world WHERE world = ?");
|
|
||||||
statement.setQueryTimeout(30);
|
|
||||||
|
|
||||||
// Obtain world ID from CoreProtect database
|
|
||||||
statement.setString(1, world.getName());
|
|
||||||
ResultSet resultSet = statement.executeQuery();
|
|
||||||
String worldID = null;
|
|
||||||
while (resultSet.next())
|
|
||||||
{
|
|
||||||
worldID = String.valueOf(resultSet.getInt("id"));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ensure the world ID is not null
|
|
||||||
|
|
||||||
if (worldID == null)
|
|
||||||
{
|
|
||||||
FLog.warning("Failed to obtain the world ID for the " + world.getName());
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Iterate through each table and delete their data if the world ID matches
|
|
||||||
for (String table : tables)
|
|
||||||
{
|
|
||||||
final PreparedStatement statement1 = connection.prepareStatement("DELETE FROM ? WHERE wid = ?");
|
|
||||||
statement1.setString(1, table);
|
|
||||||
statement1.setString(2, worldID);
|
|
||||||
statement1.executeQuery();
|
|
||||||
}
|
|
||||||
|
|
||||||
connection.close();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (SQLException e)
|
else
|
||||||
{
|
{
|
||||||
FLog.warning("Failed to delete the CoreProtect data for the " + world.getName());
|
// This shouldn't change at all in any of the other entries, so this should be safe
|
||||||
}
|
Component location = Component.text(String.format("(%s, %s, %s)", results.get(0).getX(),
|
||||||
|
results.get(0).getY(), results.get(0).getZ()));
|
||||||
|
final long time = System.currentTimeMillis() / 1000;
|
||||||
|
|
||||||
// This exits for flatlands wipes
|
player.sendMessage(header.append(location.color(NamedTextColor.GRAY).decorate(TextDecoration.ITALIC)));
|
||||||
if (shutdown)
|
page.forEach(entry ->
|
||||||
{
|
{
|
||||||
server.shutdown();
|
TextComponent.Builder line = Component.text();
|
||||||
|
|
||||||
|
// Time
|
||||||
|
line.append(Component.text(Util.getTimeSince(entry.getTime(), time, false))
|
||||||
|
.color(NamedTextColor.GRAY));
|
||||||
|
|
||||||
|
// Action
|
||||||
|
Component action = Component.text(" interacted with ");
|
||||||
|
Component symbol = Component.text(" - ", NamedTextColor.WHITE);
|
||||||
|
switch (entry.getActionId())
|
||||||
|
{
|
||||||
|
case 0 ->
|
||||||
|
{
|
||||||
|
action = Component.text(" broke ");
|
||||||
|
symbol = Component.text(" - ", NamedTextColor.RED);
|
||||||
|
}
|
||||||
|
case 1 ->
|
||||||
|
{
|
||||||
|
action = Component.text(" placed ");
|
||||||
|
symbol = Component.text(" + ", NamedTextColor.GREEN);
|
||||||
|
}
|
||||||
|
case 2 -> action = Component.text(" clicked ");
|
||||||
|
default ->
|
||||||
|
{
|
||||||
|
// Do nothing (shuts Codacy up)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Symbol, player, action, block
|
||||||
|
line.append(symbol).append(Component.text(entry.getPlayer()).color(TextColor.color(0x30ade4)))
|
||||||
|
.append(action.color(NamedTextColor.WHITE)).append(
|
||||||
|
Component.text(entry.getBlockData().getMaterial().name().toLowerCase())
|
||||||
|
.color(TextColor.color(0x30ade4)));
|
||||||
|
|
||||||
|
// Rolled back?
|
||||||
|
if (entry.isRolledBack())
|
||||||
|
{
|
||||||
|
line.decorate(TextDecoration.STRIKETHROUGH);
|
||||||
|
}
|
||||||
|
|
||||||
|
player.sendMessage(line.append(Component.text(".", NamedTextColor.WHITE)).build());
|
||||||
|
});
|
||||||
|
|
||||||
|
if (results.getPageCount() > 1)
|
||||||
|
{
|
||||||
|
player.sendMessage(Component.text("-----", NamedTextColor.WHITE));
|
||||||
|
|
||||||
|
// Page indicator
|
||||||
|
TextComponent.Builder indicator = Component.text();
|
||||||
|
|
||||||
|
// <-
|
||||||
|
if (pageNum > 1)
|
||||||
|
{
|
||||||
|
indicator.append(Component.text("◀ ", NamedTextColor.WHITE).clickEvent(
|
||||||
|
ClickEvent.runCommand("/ins history " + (pageNum - 1))));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Page <current>/<total>
|
||||||
|
indicator.append(Component.text("Page ", TextColor.color(0x30ade4)).append(Component.text(pageNum + "/"
|
||||||
|
+ results.getPageCount(), NamedTextColor.WHITE)));
|
||||||
|
|
||||||
|
// ->
|
||||||
|
if (pageNum < results.getPageCount())
|
||||||
|
{
|
||||||
|
indicator.append(Component.text(" ▶", NamedTextColor.WHITE).clickEvent(
|
||||||
|
ClickEvent.runCommand("/ins history " + (pageNum + 1))));
|
||||||
|
}
|
||||||
|
|
||||||
|
// | Use /ins history <page> for advanced navigation
|
||||||
|
indicator.append(Component.text(" | ", NamedTextColor.GRAY).append(Component.text("Use ", NamedTextColor.WHITE)
|
||||||
|
.append(Component.text("/ins history <page>", TextColor.color(0x30ade4))
|
||||||
|
.clickEvent(ClickEvent.suggestCommand("/ins history ")))
|
||||||
|
.append(Component.text(" for advanced navigation", NamedTextColor.WHITE))));
|
||||||
|
|
||||||
|
player.sendMessage(indicator.build());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CompletableFuture<FUtil.PaginationList<CoreProtectAPI.ParseResult>> lookupForPlayer(Block block, Player player)
|
||||||
|
{
|
||||||
|
cooldownMap.put(player.getUniqueId(), System.currentTimeMillis());
|
||||||
|
CoreProtectAPI api = getCoreProtectAPI();
|
||||||
|
|
||||||
|
return CompletableFuture.supplyAsync(() ->
|
||||||
|
{
|
||||||
|
historyMap.remove(player.getUniqueId());
|
||||||
|
FUtil.PaginationList<CoreProtectAPI.ParseResult> pages = new FUtil.PaginationList<>(10);
|
||||||
|
api.blockLookup(block, -1).forEach(stringArray -> pages.add(api.parseResult(stringArray)));
|
||||||
|
historyMap.put(player.getUniqueId(), pages);
|
||||||
|
return pages;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
public void onPlayerInteract(PlayerInteractEvent event)
|
public void onInteract(PlayerInteractEvent event)
|
||||||
{
|
{
|
||||||
Player player = event.getPlayer();
|
// The inspector only works if we have CoreProtect installed
|
||||||
PlayerData data = plugin.pl.getData(player);
|
if (!isEnabled())
|
||||||
Block block = event.getClickedBlock();
|
|
||||||
final CoreProtectAPI coreProtect = getCoreProtectAPI();
|
|
||||||
|
|
||||||
if (data.hasInspection())
|
|
||||||
{
|
{
|
||||||
if (event.getAction() == Action.LEFT_CLICK_BLOCK)
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Player player = event.getPlayer();
|
||||||
|
|
||||||
|
if ((event.getAction() == Action.RIGHT_CLICK_BLOCK || event.getAction() == Action.LEFT_CLICK_BLOCK)
|
||||||
|
&& plugin.pl.getData(player.getUniqueId()).hasInspection())
|
||||||
|
{
|
||||||
|
event.setCancelled(true);
|
||||||
|
Block block = event.getClickedBlock();
|
||||||
|
Optional<Long> cooldown = Optional.ofNullable(cooldownMap.get(player.getUniqueId()));
|
||||||
|
|
||||||
|
if (cooldown.isPresent() && getSecondsLeft(cooldown.get(), 3) > 0L)
|
||||||
{
|
{
|
||||||
if (block != null)
|
player.sendMessage(prefix.append(Component.text("You need to wait ")
|
||||||
{
|
.append(Component.text(getSecondsLeft(cooldown.get(), 3)))
|
||||||
event.setCancelled(true);
|
.append(Component.text(" seconds before you can make another query."))
|
||||||
List<String[]> lookup = coreProtect.blockLookup(block, -1);
|
.color(NamedTextColor.WHITE)));
|
||||||
|
return;
|
||||||
int cooldownTime = 3;
|
|
||||||
|
|
||||||
if (cooldown.containsKey(player.getName()))
|
|
||||||
{
|
|
||||||
long secondsLeft = getSecondsLeft(cooldown.get(player.getName()), cooldownTime);
|
|
||||||
if (secondsLeft > 0L)
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
player.sendMessage(ChatColor.RED + String.valueOf(secondsLeft) + " seconds left before next query.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!plugin.al.isAdmin(player))
|
|
||||||
{
|
|
||||||
cooldown.put(player.getName(), System.currentTimeMillis());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lookup != null)
|
|
||||||
{
|
|
||||||
if (lookup.isEmpty())
|
|
||||||
{
|
|
||||||
player.sendMessage(net.md_5.bungee.api.ChatColor.of("#30ade4") + "Block Inspector " + ChatColor.WHITE + "- " + "No block data found for this location");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
HISTORY_MAP.remove(event.getPlayer());
|
|
||||||
HISTORY_MAP.put(event.getPlayer(), new FUtil.PaginationList<>(10));
|
|
||||||
FUtil.PaginationList<String> paged = HISTORY_MAP.get(event.getPlayer());
|
|
||||||
|
|
||||||
player.sendMessage("---- " + net.md_5.bungee.api.ChatColor.of("#30ade4") + "Block Inspector" + ChatColor.WHITE + " ---- " +
|
|
||||||
ChatColor.GRAY + "(x" + block.getX() + "/" + "y" + block.getY() + "/" + "z" + block.getZ() + ")");
|
|
||||||
|
|
||||||
for (String[] value : lookup)
|
|
||||||
{
|
|
||||||
CoreProtectAPI.ParseResult result = coreProtect.parseResult(value);
|
|
||||||
BlockData bl = result.getBlockData();
|
|
||||||
|
|
||||||
String s;
|
|
||||||
String st = "";
|
|
||||||
|
|
||||||
if (result.getActionString().equals("Placement"))
|
|
||||||
{
|
|
||||||
s = " placed ";
|
|
||||||
}
|
|
||||||
else if (result.getActionString().equals("Removal"))
|
|
||||||
{
|
|
||||||
s = " broke ";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
s = " interacted with ";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result.isRolledBack())
|
|
||||||
{
|
|
||||||
st += "§m";
|
|
||||||
}
|
|
||||||
|
|
||||||
int time = (int)(System.currentTimeMillis() / 1000L);
|
|
||||||
|
|
||||||
paged.add(ChatColor.GRAY + getTimeAgo(result.getTime(), time) + ChatColor.WHITE + " - " + net.md_5.bungee.api.ChatColor.of("#30ade4") +
|
|
||||||
st + result.getPlayer() + ChatColor.WHITE + st + s + net.md_5.bungee.api.ChatColor.of("#30ade4") + st + bl.getMaterial().toString().toLowerCase());
|
|
||||||
}
|
|
||||||
|
|
||||||
List<String> page = paged.getPage(1);
|
|
||||||
for (String entries : page)
|
|
||||||
{
|
|
||||||
player.sendMessage(entries);
|
|
||||||
}
|
|
||||||
|
|
||||||
player.sendMessage("Page 1/" + paged.getPageCount() + " | To index through the pages, type " + net.md_5.bungee.api.ChatColor.of("#30ade4") + "/ins history <page>");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (event.getAction() == Action.RIGHT_CLICK_BLOCK)
|
|
||||||
|
// Time to do a look-up.
|
||||||
|
if (block != null)
|
||||||
{
|
{
|
||||||
if (block != null)
|
/* This is a hack to make it so that when you right-click, the coordinates that get used depend on
|
||||||
|
* what's in your hand. Non-blocks use the block you clicked directly, but blocks use wherever the
|
||||||
|
* block was supposed to be placed. */
|
||||||
|
ItemStack hand = player.getInventory().getItemInMainHand();
|
||||||
|
if (event.getAction() == Action.RIGHT_CLICK_BLOCK && hand.getType().isBlock() && hand.getType() != Material.AIR)
|
||||||
{
|
{
|
||||||
if (data.hasInspection())
|
block = block.getRelative(event.getBlockFace()).getState().getBlock();
|
||||||
{
|
|
||||||
BlockState blockState = block.getRelative(event.getBlockFace()).getState();
|
|
||||||
Block placedBlock = blockState.getBlock();
|
|
||||||
event.setCancelled(true);
|
|
||||||
List<String[]> lookup = coreProtect.blockLookup(placedBlock, -1);
|
|
||||||
|
|
||||||
if (lookup.isEmpty())
|
|
||||||
{
|
|
||||||
lookup = coreProtect.blockLookup(block, -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
int cooldownTime = 3;
|
|
||||||
|
|
||||||
if (cooldown.containsKey(player.getName()))
|
|
||||||
{
|
|
||||||
long secondsLeft = getSecondsLeft(cooldown.get(player.getName()), cooldownTime);
|
|
||||||
if (secondsLeft > 0L)
|
|
||||||
{
|
|
||||||
event.setCancelled(true);
|
|
||||||
player.sendMessage(ChatColor.RED + String.valueOf(secondsLeft) + " seconds left before next query.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!plugin.al.isAdmin(player))
|
|
||||||
{
|
|
||||||
cooldown.put(player.getName(), System.currentTimeMillis());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lookup != null)
|
|
||||||
{
|
|
||||||
if (lookup.isEmpty())
|
|
||||||
{
|
|
||||||
player.sendMessage(net.md_5.bungee.api.ChatColor.of("#30ade4") + "Block Inspector " + ChatColor.WHITE + "- " + "No block data found for this location");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
HISTORY_MAP.remove(event.getPlayer());
|
|
||||||
HISTORY_MAP.put(event.getPlayer(), new FUtil.PaginationList<>(10));
|
|
||||||
FUtil.PaginationList<String> paged = HISTORY_MAP.get(event.getPlayer());
|
|
||||||
|
|
||||||
player.sendMessage("---- " + net.md_5.bungee.api.ChatColor.of("#30ade4") + "Block Inspector" + ChatColor.WHITE + " ---- " +
|
|
||||||
ChatColor.GRAY + "(x" + block.getX() + "/" + "y" + block.getY() + "/" + "z" + block.getZ() + ")");
|
|
||||||
|
|
||||||
for (String[] value : lookup)
|
|
||||||
{
|
|
||||||
CoreProtectAPI.ParseResult result = coreProtect.parseResult(value);
|
|
||||||
BlockData bl = result.getBlockData();
|
|
||||||
|
|
||||||
String s;
|
|
||||||
String st = "";
|
|
||||||
|
|
||||||
if (result.getActionString().equals("Placement"))
|
|
||||||
{
|
|
||||||
s = " placed ";
|
|
||||||
}
|
|
||||||
else if (result.getActionString().equals("Removal"))
|
|
||||||
{
|
|
||||||
s = " broke ";
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
s = " interacted with ";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result.isRolledBack())
|
|
||||||
{
|
|
||||||
st += "§m";
|
|
||||||
}
|
|
||||||
|
|
||||||
int time = (int)(System.currentTimeMillis() / 1000L);
|
|
||||||
|
|
||||||
paged.add(ChatColor.GRAY + getTimeAgo(result.getTime(), time) + ChatColor.WHITE + " - " + net.md_5.bungee.api.ChatColor.of("#30ade4") +
|
|
||||||
st + result.getPlayer() + ChatColor.WHITE + st + s + net.md_5.bungee.api.ChatColor.of("#30ade4") + st + bl.getMaterial().toString().toLowerCase());
|
|
||||||
}
|
|
||||||
|
|
||||||
List<String> page = paged.getPage(1);
|
|
||||||
for (String entries : page)
|
|
||||||
{
|
|
||||||
player.sendMessage(entries);
|
|
||||||
}
|
|
||||||
|
|
||||||
player.sendMessage("Page 1/" + paged.getPageCount() + " | To index through the pages, type " + net.md_5.bungee.api.ChatColor.of("#30ade4") + "/ins history <page>");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lookupForPlayer(block, player).thenAccept(results ->
|
||||||
|
{
|
||||||
|
if (results.isEmpty())
|
||||||
|
{
|
||||||
|
player.sendMessage(prefix.append(Component.text("No results were found.").color(NamedTextColor.WHITE)));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
showPageToPlayer(player, results, 1);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,7 +6,6 @@ import me.totalfreedom.totalfreedommod.FreedomService;
|
|||||||
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
|
||||||
import org.bukkit.entity.HumanEntity;
|
import org.bukkit.entity.HumanEntity;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
@ -14,7 +13,6 @@ import org.bukkit.event.EventPriority;
|
|||||||
import org.bukkit.event.inventory.InventoryClickEvent;
|
import org.bukkit.event.inventory.InventoryClickEvent;
|
||||||
import org.bukkit.event.inventory.InventoryCloseEvent;
|
import org.bukkit.event.inventory.InventoryCloseEvent;
|
||||||
import org.bukkit.event.inventory.InventoryType;
|
import org.bukkit.event.inventory.InventoryType;
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
|
||||||
import org.bukkit.inventory.Inventory;
|
import org.bukkit.inventory.Inventory;
|
||||||
import org.bukkit.inventory.InventoryHolder;
|
import org.bukkit.inventory.InventoryHolder;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
@ -114,8 +112,7 @@ public class EssentialsBridge extends FreedomService
|
|||||||
User user = getEssentialsUser(username);
|
User user = getEssentialsUser(username);
|
||||||
if (user != null)
|
if (user != null)
|
||||||
{
|
{
|
||||||
Long l = FUtil.getField(user, "lastActivity");
|
return user.getLastOnlineActivity();
|
||||||
return (l != null) ? l : 0L;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@ -130,7 +127,7 @@ public class EssentialsBridge extends FreedomService
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
User user = getEssentialsUser(username);
|
User user = getEssentialsUser(username);
|
||||||
if (user != null)
|
if (user != null && user.getBase().isOnline())
|
||||||
{
|
{
|
||||||
user.setVanished(vanished);
|
user.setVanished(vanished);
|
||||||
}
|
}
|
||||||
@ -205,17 +202,10 @@ public class EssentialsBridge extends FreedomService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Actually use this for something or remove it.
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
|
||||||
public void onPlayerQuit(PlayerQuitEvent event)
|
|
||||||
{
|
|
||||||
Player player = event.getPlayer();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isEnabled()
|
public boolean isEnabled()
|
||||||
{
|
{
|
||||||
final Essentials ess = getEssentialsPlugin();
|
final Essentials ess = getEssentialsPlugin();
|
||||||
|
|
||||||
return ess != null && ess.isEnabled();
|
return ess != null && ess.isEnabled();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,58 +0,0 @@
|
|||||||
package me.totalfreedom.totalfreedommod.bridge;
|
|
||||||
|
|
||||||
import me.totalfreedom.tfguilds.Common;
|
|
||||||
import me.totalfreedom.tfguilds.TFGuilds;
|
|
||||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.plugin.Plugin;
|
|
||||||
|
|
||||||
public class TFGuildsBridge extends FreedomService
|
|
||||||
{
|
|
||||||
public boolean enabled = false;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStart()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStop()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isTFGuildsEnabled()
|
|
||||||
{
|
|
||||||
if (enabled)
|
|
||||||
{
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
final Plugin tfGuilds = server.getPluginManager().getPlugin("TFGuilds");
|
|
||||||
if (tfGuilds != null && tfGuilds.isEnabled())
|
|
||||||
{
|
|
||||||
if (tfGuilds instanceof TFGuilds)
|
|
||||||
{
|
|
||||||
enabled = true;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (NoClassDefFoundError ex)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean inGuildChat(Player player)
|
|
||||||
{
|
|
||||||
if (!isTFGuildsEnabled())
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return Common.GUILD_CHAT.contains(player);
|
|
||||||
}
|
|
||||||
}
|
|
@ -48,52 +48,6 @@ public class WorldEditBridge extends FreedomService
|
|||||||
return worldeditPlugin;
|
return worldeditPlugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void undo(Player player, int count)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
LocalSession session = getPlayerSession(player);
|
|
||||||
if (session != null)
|
|
||||||
{
|
|
||||||
final BukkitPlayer bukkitPlayer = getBukkitPlayer(player);
|
|
||||||
if (bukkitPlayer != null)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < count; i++)
|
|
||||||
{
|
|
||||||
session.undo(session.getBlockBag(bukkitPlayer), bukkitPlayer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
FLog.severe(ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void redo(Player player, int count)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
LocalSession session = getPlayerSession(player);
|
|
||||||
if (session != null)
|
|
||||||
{
|
|
||||||
final BukkitPlayer bukkitPlayer = getBukkitPlayer(player);
|
|
||||||
if (bukkitPlayer != null)
|
|
||||||
{
|
|
||||||
for (int i = 0; i < count; i++)
|
|
||||||
{
|
|
||||||
session.redo(session.getBlockBag(bukkitPlayer), bukkitPlayer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
FLog.severe(ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setLimit(Player player, int limit)
|
public void setLimit(Player player, int limit)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
@ -153,23 +107,4 @@ public class WorldEditBridge extends FreedomService
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private BukkitPlayer getBukkitPlayer(Player player)
|
|
||||||
{
|
|
||||||
final WorldEditPlugin wep = getWorldEditPlugin();
|
|
||||||
if (wep == null)
|
|
||||||
{
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
return wep.wrapPlayer(player);
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
FLog.severe(ex);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
package me.totalfreedom.totalfreedommod.bridge;
|
package me.totalfreedom.totalfreedommod.bridge;
|
||||||
|
|
||||||
import com.sk89q.worldedit.bukkit.BukkitAdapter;
|
import com.sk89q.worldguard.LocalPlayer;
|
||||||
import com.sk89q.worldguard.WorldGuard;
|
import com.sk89q.worldguard.WorldGuard;
|
||||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
|
||||||
import com.sk89q.worldguard.protection.regions.RegionContainer;
|
import com.sk89q.worldguard.protection.regions.RegionContainer;
|
||||||
import java.util.Map;
|
|
||||||
|
import com.sk89q.worldguard.protection.regions.RegionQuery;
|
||||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
import me.totalfreedom.totalfreedommod.FreedomService;
|
||||||
import org.bukkit.World;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
public class WorldGuardBridge extends FreedomService
|
public class WorldGuardBridge extends FreedomService
|
||||||
@ -15,7 +15,6 @@ public class WorldGuardBridge extends FreedomService
|
|||||||
@Override
|
@Override
|
||||||
public void onStart()
|
public void onStart()
|
||||||
{
|
{
|
||||||
plugin.wr.protectWorld(plugin.wm.masterBuilderWorld.getWorld());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -23,26 +22,21 @@ public class WorldGuardBridge extends FreedomService
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public RegionManager getRegionManager(World world)
|
public boolean canEditCurrentWorld(Player player)
|
||||||
{
|
{
|
||||||
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
|
// If WorldGuard integration is enabled, do a check with it.
|
||||||
return container.get(BukkitAdapter.adapt(world));
|
if (isEnabled())
|
||||||
}
|
|
||||||
|
|
||||||
public int wipeRegions(World world)
|
|
||||||
{
|
|
||||||
int count = 0;
|
|
||||||
RegionManager regionManager = getRegionManager(world);
|
|
||||||
if (regionManager != null)
|
|
||||||
{
|
{
|
||||||
Map<String, ProtectedRegion> regions = regionManager.getRegions();
|
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
|
||||||
for (ProtectedRegion region : regions.values())
|
|
||||||
{
|
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
|
||||||
regionManager.removeRegion(region.getId());
|
RegionQuery query = container.createQuery();
|
||||||
count++;
|
|
||||||
}
|
return query.testBuild(localPlayer.getLocation(), localPlayer);
|
||||||
}
|
}
|
||||||
return count;
|
|
||||||
|
// If the plugin isn't present, return true.
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isEnabled()
|
public boolean isEnabled()
|
||||||
|
@ -6,6 +6,7 @@ import java.util.List;
|
|||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -33,13 +34,8 @@ public class Command_adminmode extends FreedomCommand
|
|||||||
{
|
{
|
||||||
ConfigEntry.ADMIN_ONLY_MODE.setBoolean(true);
|
ConfigEntry.ADMIN_ONLY_MODE.setBoolean(true);
|
||||||
FUtil.adminAction(sender.getName(), "Closing the server to non-admins", true);
|
FUtil.adminAction(sender.getName(), "Closing the server to non-admins", true);
|
||||||
for (Player player : server.getOnlinePlayers())
|
server.getOnlinePlayers().stream().filter(player -> !isAdmin(player)).forEach(player ->
|
||||||
{
|
player.kick(Component.text("The server is now closed to non-admins.")));
|
||||||
if (!isAdmin(player))
|
|
||||||
{
|
|
||||||
player.kickPlayer("Server is now closed to non-admins.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,30 +1,21 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import org.bukkit.attribute.Attribute;
|
import org.bukkit.attribute.Attribute;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, source = SourceType.BOTH)
|
@CommandPermissions(level = Rank.OP, source = SourceType.BOTH)
|
||||||
@CommandParameters(description = "Lists all possible attributes.", usage = "/<command>")
|
@CommandParameters(description = "Lists all possible attributes.", usage = "/<command>")
|
||||||
public class Command_attributelist extends FreedomCommand
|
public class Command_attributelist extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
{
|
{
|
||||||
StringBuilder list = new StringBuilder("All possible attributes: ");
|
msg("All possible attributes: " + FUtil.listToString(Arrays.stream(Attribute.values()).map(Enum::name).toList()));
|
||||||
|
|
||||||
for (Attribute attribute : Attribute.values())
|
|
||||||
{
|
|
||||||
list.append(attribute.name()).append(", ");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove extra comma at the end of the list
|
|
||||||
list = new StringBuilder(list.substring(0, list.length() - 2));
|
|
||||||
|
|
||||||
msg(list.toString());
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
import com.earth2me.essentials.User;
|
||||||
import me.totalfreedom.totalfreedommod.banning.Ban;
|
import me.totalfreedom.totalfreedommod.banning.Ban;
|
||||||
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
||||||
import me.totalfreedom.totalfreedommod.punishments.Punishment;
|
import me.totalfreedom.totalfreedommod.punishments.Punishment;
|
||||||
@ -60,28 +60,39 @@ public class Command_ban extends FreedomCommand
|
|||||||
}
|
}
|
||||||
|
|
||||||
final String username;
|
final String username;
|
||||||
final List<String> ips = new ArrayList<>();
|
final String ip;
|
||||||
|
|
||||||
final Player player = getPlayer(args[0]);
|
final Player player = getPlayer(args[0]);
|
||||||
if (player == null)
|
if (player == null)
|
||||||
{
|
{
|
||||||
final PlayerData entry = plugin.pl.getData(args[0]);
|
// Gets the IP using Essentials data if available
|
||||||
|
if (plugin.esb.isEnabled() && plugin.esb.getEssentialsUser(args[0]) != null)
|
||||||
if (entry == null)
|
|
||||||
{
|
{
|
||||||
msg("Can't find that user. If target is not logged in, make sure that you spelled the name exactly.");
|
User essUser = plugin.esb.getEssentialsUser(args[0]);
|
||||||
return true;
|
//
|
||||||
|
username = essUser.getName();
|
||||||
|
ip = essUser.getLastLoginAddress();
|
||||||
|
}
|
||||||
|
// Last resort - Getting the first result from the username itself
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PlayerData entry = plugin.pl.getData(args[0]);
|
||||||
|
if (entry == null)
|
||||||
|
{
|
||||||
|
msg(PLAYER_NOT_FOUND);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
username = entry.getName();
|
||||||
|
ip = entry.getIps().get(0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
username = entry.getName();
|
|
||||||
ips.addAll(entry.getIps());
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
final PlayerData entry = plugin.pl.getData(player);
|
|
||||||
username = player.getName();
|
username = player.getName();
|
||||||
//ips.addAll(entry.getIps());/
|
ip = FUtil.getIp(player);
|
||||||
ips.add(FUtil.getIp(player));
|
|
||||||
|
|
||||||
// Deop
|
// Deop
|
||||||
player.setOp(false);
|
player.setOp(false);
|
||||||
@ -126,7 +137,6 @@ public class Command_ban extends FreedomCommand
|
|||||||
|
|
||||||
// Ban player
|
// Ban player
|
||||||
Ban ban;
|
Ban ban;
|
||||||
|
|
||||||
if (player != null)
|
if (player != null)
|
||||||
{
|
{
|
||||||
ban = Ban.forPlayer(player, sender, null, reason);
|
ban = Ban.forPlayer(player, sender, null, reason);
|
||||||
@ -135,12 +145,8 @@ public class Command_ban extends FreedomCommand
|
|||||||
{
|
{
|
||||||
ban = Ban.forPlayerName(username, sender, null, reason);
|
ban = Ban.forPlayerName(username, sender, null, reason);
|
||||||
}
|
}
|
||||||
|
ban.addIp(ip);
|
||||||
|
|
||||||
for (String ip : ips)
|
|
||||||
{
|
|
||||||
ban.addIp(ip);
|
|
||||||
ban.addIp(FUtil.getFuzzyIp(ip));
|
|
||||||
}
|
|
||||||
plugin.bm.addBan(ban);
|
plugin.bm.addBan(ban);
|
||||||
|
|
||||||
|
|
||||||
@ -154,7 +160,7 @@ public class Command_ban extends FreedomCommand
|
|||||||
{
|
{
|
||||||
bcast.append(" - Reason: ").append(ChatColor.YELLOW).append(reason);
|
bcast.append(" - Reason: ").append(ChatColor.YELLOW).append(reason);
|
||||||
}
|
}
|
||||||
msg(sender, ChatColor.GRAY + username + " has been banned and IP is: " + StringUtils.join(ips, ", "));
|
msg(sender, ChatColor.GRAY + username + " has been banned and IP is: " + ip);
|
||||||
FUtil.adminAction(sender.getName(), bcast.toString(), true);
|
FUtil.adminAction(sender.getName(), bcast.toString(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,7 +178,7 @@ public class Command_ban extends FreedomCommand
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Log ban
|
// Log ban
|
||||||
plugin.pul.logPunishment(new Punishment(username, ips.get(0), sender.getName(), PunishmentType.BAN, reason));
|
plugin.pul.logPunishment(new Punishment(username, ip, sender.getName(), PunishmentType.BAN, reason));
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
||||||
|
import me.totalfreedom.totalfreedommod.punishments.Punishment;
|
||||||
|
import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
@ -75,9 +77,11 @@ public class Command_blockcmd extends FreedomCommand
|
|||||||
FPlayer playerdata = plugin.pl.getPlayer(player);
|
FPlayer playerdata = plugin.pl.getPlayer(player);
|
||||||
if (!playerdata.allCommandsBlocked())
|
if (!playerdata.allCommandsBlocked())
|
||||||
{
|
{
|
||||||
playerdata.setCommandsBlocked(true);
|
|
||||||
FUtil.adminAction(sender.getName(), "Blocking all commands for " + player.getName(), true);
|
FUtil.adminAction(sender.getName(), "Blocking all commands for " + player.getName(), true);
|
||||||
|
playerdata.setCommandsBlocked(true);
|
||||||
msg("Blocked commands for " + player.getName() + ".");
|
msg("Blocked commands for " + player.getName() + ".");
|
||||||
|
|
||||||
|
plugin.pul.logPunishment(new Punishment(player.getName(), FUtil.getIp(player), sender.getName(), PunishmentType.BLOCKCMD, null));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -1,134 +1,110 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
||||||
|
import me.totalfreedom.totalfreedommod.punishments.Punishment;
|
||||||
|
import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import org.apache.commons.lang.ArrayUtils;
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH)
|
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH)
|
||||||
@CommandParameters(description = "Restricts/unrestricts block modification abilities for everyone on the server or a certain player.", usage = "/<command> [[-s] <player> [reason] | list | purge | all]")
|
@CommandParameters(description = "Restricts/restores block modification abilities for everyone on the server or a certain player.", usage = "/<command> [<player> [reason] | list | purge | all]")
|
||||||
public class Command_blockedit extends FreedomCommand
|
public class Command_blockedit extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean run(final CommandSender sender, final Player playerSender, final Command cmd, final String commandLabel, String[] args, final boolean senderIsConsole)
|
public boolean run(final CommandSender sender, final Player playerSender, final Command cmd, final String commandLabel, String[] args, final boolean senderIsConsole)
|
||||||
{
|
{
|
||||||
if (args.length == 0)
|
if (args.length > 0)
|
||||||
{
|
{
|
||||||
return false;
|
switch (args[0].toLowerCase())
|
||||||
}
|
|
||||||
|
|
||||||
if (args[0].equals("list"))
|
|
||||||
{
|
|
||||||
msg("The following have block modification abilities restricted:");
|
|
||||||
int count = 0;
|
|
||||||
for (Player player : server.getOnlinePlayers())
|
|
||||||
{
|
{
|
||||||
final FPlayer info = plugin.pl.getPlayer(player);
|
case "list" ->
|
||||||
if (info.isEditBlocked())
|
|
||||||
{
|
{
|
||||||
msg("- " + player.getName());
|
List<? extends Player> list = server.getOnlinePlayers().stream().filter(player ->
|
||||||
++count;
|
plugin.pl.getPlayer(player).isEditBlocked()).sorted().toList();
|
||||||
|
|
||||||
|
// Oh dear god, why do I have to do it like this?
|
||||||
|
msg("There " + (list.size() != 1 ? "are " : "is ") + list.size() + " player"
|
||||||
|
+ (list.size() != 1 ? "s" : "") + " online with restricted block modification abilities"
|
||||||
|
+ (list.size() > 0 ? ":" : "."));
|
||||||
|
|
||||||
|
list.forEach(player -> msg("- " + player.getName()));
|
||||||
}
|
}
|
||||||
}
|
case "purge" ->
|
||||||
|
|
||||||
if (count == 0)
|
|
||||||
{
|
|
||||||
msg("- none");
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args[0].equals("purge"))
|
|
||||||
{
|
|
||||||
FUtil.adminAction(sender.getName(), "Unblocking block modification abilities for all players", true);
|
|
||||||
int count = 0;
|
|
||||||
for (final Player player : this.server.getOnlinePlayers())
|
|
||||||
{
|
|
||||||
final FPlayer info = plugin.pl.getPlayer(player);
|
|
||||||
if (info.isEditBlocked())
|
|
||||||
{
|
{
|
||||||
info.setEditBlocked(false);
|
FUtil.adminAction(sender.getName(), "Restoring block modification abilities for all players", true);
|
||||||
++count;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
msg("Unblocked all block modification abilities for " + count + " players.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args[0].equals("all"))
|
List<? extends Player> list = server.getOnlinePlayers().stream().filter(player ->
|
||||||
{
|
plugin.pl.getPlayer(player).isEditBlocked()).toList();
|
||||||
FUtil.adminAction(sender.getName(), "Blocking block modification abilities for all non-admins", true);
|
|
||||||
int counter = 0;
|
list.forEach(player ->
|
||||||
for (final Player player : this.server.getOnlinePlayers())
|
{
|
||||||
{
|
plugin.pl.getPlayer(player).setEditBlocked(false);
|
||||||
if (!plugin.al.isAdmin(player))
|
msg(player, "Your block modification abilities have been restored.", ChatColor.GREEN);
|
||||||
|
});
|
||||||
|
|
||||||
|
msg("Restored block modification abilities for " + list.size() + " player"
|
||||||
|
+ (list.size() != 1 ? "s" : "") + ".");
|
||||||
|
}
|
||||||
|
case "all", "-a" ->
|
||||||
{
|
{
|
||||||
final FPlayer playerdata = plugin.pl.getPlayer(player);
|
FUtil.adminAction(sender.getName(), "Restricting block modification abilities for all non-admins", true);
|
||||||
playerdata.setEditBlocked(true);
|
|
||||||
++counter;
|
List<? extends Player> list = server.getOnlinePlayers().stream().filter(player ->
|
||||||
|
!plugin.al.isAdmin(player)).toList();
|
||||||
|
|
||||||
|
list.forEach(player ->
|
||||||
|
{
|
||||||
|
plugin.pl.getPlayer(player).setEditBlocked(true);
|
||||||
|
msg(player, "Your block modification abilities have been restricted.", ChatColor.RED);
|
||||||
|
});
|
||||||
|
|
||||||
|
msg("Restricted block modification abilities for " + list.size() + " player"
|
||||||
|
+ (list.size() != 1 ? "s" : "") + ".");
|
||||||
}
|
}
|
||||||
|
default -> Optional.ofNullable(getPlayer(args[0])).ifPresentOrElse(player ->
|
||||||
|
{
|
||||||
|
FPlayer fPlayer = plugin.pl.getPlayer(player);
|
||||||
|
|
||||||
|
if (fPlayer.isEditBlocked())
|
||||||
|
{
|
||||||
|
FUtil.adminAction(sender.getName(), "Restoring block modification abilities for " + player.getName(), true);
|
||||||
|
fPlayer.setEditBlocked(false);
|
||||||
|
msg("Restored block modification abilities for " + player.getName() + ".");
|
||||||
|
msg(player, "Your block modification abilities have been restored.", ChatColor.GREEN);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (plugin.al.isAdmin(player))
|
||||||
|
{
|
||||||
|
msg(player.getName() + " is an admin, and as such cannot have their block modification abilities restricted.", ChatColor.RED);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FUtil.adminAction(sender.getName(), "Restricting block modification abilities for " + player.getName(), true);
|
||||||
|
fPlayer.setEditBlocked(true);
|
||||||
|
msg("Restricted block modification abilities for " + player.getName() + ".");
|
||||||
|
msg(player, "Your block modification abilities have been restricted.", ChatColor.RED);
|
||||||
|
|
||||||
|
plugin.pul.logPunishment(new Punishment(player.getName(), FUtil.getIp(player),
|
||||||
|
sender.getName(), PunishmentType.BLOCKEDIT, null));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}, () -> msg(PLAYER_NOT_FOUND));
|
||||||
}
|
}
|
||||||
|
|
||||||
msg("Blocked block modification abilities for " + counter + " players.");
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
final boolean smite = args[0].equals("-s");
|
|
||||||
if (smite)
|
|
||||||
{
|
|
||||||
args = (String[])ArrayUtils.subarray(args, 1, args.length);
|
|
||||||
if (args.length < 1)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
final Player player2 = getPlayer(args[0]);
|
|
||||||
if (player2 == null)
|
|
||||||
{
|
|
||||||
msg(PLAYER_NOT_FOUND);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
String reason = null;
|
|
||||||
if (args.length > 1)
|
|
||||||
{
|
|
||||||
reason = StringUtils.join(args, " ", 1, args.length);
|
|
||||||
}
|
|
||||||
|
|
||||||
final FPlayer pd = plugin.pl.getPlayer(player2);
|
|
||||||
if (pd.isEditBlocked())
|
|
||||||
{
|
|
||||||
FUtil.adminAction(sender.getName(), "Unblocking block modification abilities for " + player2.getName(), true);
|
|
||||||
pd.setEditBlocked(false);
|
|
||||||
msg("Unblocking block modification abilities for " + player2.getName());
|
|
||||||
msg(player2, "Your block modification abilities have been restored.", ChatColor.RED);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (plugin.al.isAdmin(player2))
|
return false;
|
||||||
{
|
|
||||||
msg(player2.getName() + " is an admin, and cannot have their block edits blocked.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
FUtil.adminAction(sender.getName(), "Blocking block modification abilities for " + player2.getName(), true);
|
|
||||||
pd.setEditBlocked(true);
|
|
||||||
|
|
||||||
if (smite)
|
|
||||||
{
|
|
||||||
Command_smite.smite(sender, player2, reason);
|
|
||||||
}
|
|
||||||
|
|
||||||
msg(player2, "Your block modification abilities have been blocked.", ChatColor.RED);
|
|
||||||
msg("Blocked all block modification abilities for " + player2.getName());
|
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,6 +1,8 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
||||||
|
import me.totalfreedom.totalfreedommod.punishments.Punishment;
|
||||||
|
import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import org.apache.commons.lang3.ArrayUtils;
|
import org.apache.commons.lang3.ArrayUtils;
|
||||||
@ -125,6 +127,7 @@ public class Command_blockpvp extends FreedomCommand
|
|||||||
{
|
{
|
||||||
Command_smite.smite(sender, p, reason);
|
Command_smite.smite(sender, p, reason);
|
||||||
}
|
}
|
||||||
|
plugin.pul.logPunishment(new Punishment(p.getName(), FUtil.getIp(p), sender.getName(), PunishmentType.BLOCKPVP, null));
|
||||||
|
|
||||||
msg(p, "Your PVP has been disabled.", ChatColor.RED);
|
msg(p, "Your PVP has been disabled.", ChatColor.RED);
|
||||||
msg("Disabled PVP for " + p.getName());
|
msg("Disabled PVP for " + p.getName());
|
||||||
|
@ -5,6 +5,8 @@ import java.util.Arrays;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
||||||
|
import me.totalfreedom.totalfreedommod.punishments.Punishment;
|
||||||
|
import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
@ -19,7 +21,7 @@ import org.bukkit.entity.Player;
|
|||||||
@CommandParameters(description = "Place a cage around someone with certain blocks, or someone's player head.", usage = "/<command> <purge | <partialname> [head | block] [playername | blockname]")
|
@CommandParameters(description = "Place a cage around someone with certain blocks, or someone's player head.", usage = "/<command> <purge | <partialname> [head | block] [playername | blockname]")
|
||||||
public class Command_cage extends FreedomCommand
|
public class Command_cage extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
@Override
|
||||||
public boolean run(final CommandSender sender, final Player playerSender, final Command cmd, final String commandLabel, final String[] args, final boolean senderIsConsole)
|
public boolean run(final CommandSender sender, final Player playerSender, final Command cmd, final String commandLabel, final String[] args, final boolean senderIsConsole)
|
||||||
{
|
{
|
||||||
if (args.length == 0)
|
if (args.length == 0)
|
||||||
@ -31,11 +33,8 @@ public class Command_cage extends FreedomCommand
|
|||||||
if (args[0].equalsIgnoreCase("purge"))
|
if (args[0].equalsIgnoreCase("purge"))
|
||||||
{
|
{
|
||||||
FUtil.adminAction(sender.getName(), "Uncaging all players", true);
|
FUtil.adminAction(sender.getName(), "Uncaging all players", true);
|
||||||
for (Player player : server.getOnlinePlayers())
|
server.getOnlinePlayers().stream().map(player -> plugin.pl.getPlayer(player)).forEach(fPlayer ->
|
||||||
{
|
fPlayer.getCageData().setCaged(false));
|
||||||
final FPlayer fPlayer = plugin.pl.getPlayer(player);
|
|
||||||
fPlayer.getCageData().setCaged(false);
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -60,7 +59,7 @@ public class Command_cage extends FreedomCommand
|
|||||||
final String s = args[1];
|
final String s = args[1];
|
||||||
switch (s)
|
switch (s)
|
||||||
{
|
{
|
||||||
case "head":
|
case "head" ->
|
||||||
{
|
{
|
||||||
outerMaterial = Material.PLAYER_HEAD;
|
outerMaterial = Material.PLAYER_HEAD;
|
||||||
if (args.length >= 3)
|
if (args.length >= 3)
|
||||||
@ -71,21 +70,45 @@ public class Command_cage extends FreedomCommand
|
|||||||
{
|
{
|
||||||
outerMaterial = Material.SKELETON_SKULL;
|
outerMaterial = Material.SKELETON_SKULL;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
case "block":
|
case "block" ->
|
||||||
{
|
{
|
||||||
if (Material.matchMaterial(args[2]) != null)
|
if (args.length >= 3)
|
||||||
{
|
{
|
||||||
outerMaterial = Material.matchMaterial(args[2]);
|
// Checks the validity of the Material and checks if it's a block.
|
||||||
break;
|
// This is incredibly inefficient, as Spigot's isBlock() method in Material is an actual
|
||||||
|
// nightmare of switch-cases.
|
||||||
|
if (Material.matchMaterial(args[2]) != null && Material.matchMaterial(args[2]).isBlock())
|
||||||
|
{
|
||||||
|
outerMaterial = Material.matchMaterial(args[2]);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
msg("Invalid block!", ChatColor.RED);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
msg("Invalid block!", ChatColor.RED);
|
else
|
||||||
break;
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
default ->
|
||||||
|
{
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (outerMaterial == Material.PLAYER_HEAD)
|
||||||
|
{
|
||||||
|
FUtil.adminAction(sender.getName(), "Caging " + player.getName() + " in " + skullName, true);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
FUtil.adminAction(sender.getName(), "Caging " + player.getName(), true);
|
||||||
|
}
|
||||||
|
|
||||||
Location location = player.getLocation().clone().add(0.0, 1.0, 0.0);
|
Location location = player.getLocation().clone().add(0.0, 1.0, 0.0);
|
||||||
|
|
||||||
if (skullName != null)
|
if (skullName != null)
|
||||||
@ -96,17 +119,9 @@ public class Command_cage extends FreedomCommand
|
|||||||
{
|
{
|
||||||
fPlayer.getCageData().cage(location, outerMaterial, innerMaterial);
|
fPlayer.getCageData().cage(location, outerMaterial, innerMaterial);
|
||||||
}
|
}
|
||||||
|
|
||||||
player.setGameMode(GameMode.SURVIVAL);
|
player.setGameMode(GameMode.SURVIVAL);
|
||||||
|
|
||||||
if (outerMaterial == Material.PLAYER_HEAD)
|
plugin.pul.logPunishment(new Punishment(player.getName(), FUtil.getIp(player), sender.getName(), PunishmentType.CAGE, null));
|
||||||
{
|
|
||||||
FUtil.adminAction(sender.getName(), "Caging " + player.getName() + " in " + skullName, true);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
FUtil.adminAction(sender.getName(), "Caging " + player.getName(), true);
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,7 +151,7 @@ public class Command_cage extends FreedomCommand
|
|||||||
{
|
{
|
||||||
if (args[1].equals("block"))
|
if (args[1].equals("block"))
|
||||||
{
|
{
|
||||||
return FUtil.getAllMaterialNames();
|
return Arrays.stream(Material.values()).map(Enum::name).toList();
|
||||||
}
|
}
|
||||||
else if (args[1].equals("head"))
|
else if (args[1].equals("head"))
|
||||||
{
|
{
|
||||||
|
@ -8,23 +8,20 @@ import org.bukkit.entity.Player;
|
|||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH)
|
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH)
|
||||||
@CommandParameters(description = "Clears the chat.", usage = "/<command>", aliases = "cc")
|
@CommandParameters(description = "Clears the chat.", usage = "/<command>", aliases = "cc")
|
||||||
public class Command_clearchat extends FreedomCommand
|
public class Command_cleanchat extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
{
|
{
|
||||||
for (Player player : server.getOnlinePlayers())
|
server.getOnlinePlayers().stream().filter(player -> !plugin.al.isAdmin(player)).forEach(player ->
|
||||||
{
|
{
|
||||||
if (!plugin.al.isAdmin(player))
|
for (int i = 0; i < 100; i++)
|
||||||
{
|
{
|
||||||
for (int i = 0; i < 100; i++)
|
msg(player, "");
|
||||||
{
|
|
||||||
msg(player, "");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
|
|
||||||
FUtil.adminAction(sender.getName(), "Cleared chat", true);
|
FUtil.adminAction(sender.getName(), "Cleared chat", true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -9,8 +9,11 @@ import org.bukkit.command.Command;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, source = SourceType.BOTH)
|
@CommandPermissions(level = Rank.OP, source = SourceType.BOTH)
|
||||||
@CommandParameters(description = "Shows the amount of coins you have or another player has", usage = "/<command> [playername]")
|
@CommandParameters(description = "Shows the amount of coins you or another player has. Also allows you to give coins to other players.", usage = "/<command> [player] | pay <player> <amount>")
|
||||||
public class Command_coins extends FreedomCommand
|
public class Command_coins extends FreedomCommand
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
@ -21,34 +24,122 @@ public class Command_coins extends FreedomCommand
|
|||||||
msg("The shop is currently disabled!", ChatColor.RED);
|
msg("The shop is currently disabled!", ChatColor.RED);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
Player p;
|
|
||||||
final String prefix = FUtil.colorize(ConfigEntry.SHOP_PREFIX.getString() + " ");
|
final String prefix = FUtil.colorize(ConfigEntry.SHOP_PREFIX.getString() + " ");
|
||||||
if (args.length > 0)
|
|
||||||
|
switch (args.length)
|
||||||
{
|
{
|
||||||
if (getPlayer(args[0]) != null)
|
// Mode for seeing how many coins the sender has (doesn't work from console)
|
||||||
|
case 0:
|
||||||
{
|
{
|
||||||
p = getPlayer(args[0]);
|
if (senderIsConsole)
|
||||||
}
|
{
|
||||||
else
|
msg("When used from the console, you must define a target player.");
|
||||||
{
|
}
|
||||||
msg(PLAYER_NOT_FOUND);
|
else
|
||||||
|
{
|
||||||
|
PlayerData playerData = getData(playerSender);
|
||||||
|
msg(prefix + ChatColor.GREEN + "You have " + ChatColor.RED + playerData.getCoins() + ChatColor.GREEN
|
||||||
|
+ " coins.");
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
// Mode for seeing how many coins a player has.
|
||||||
{
|
case 1:
|
||||||
if (senderIsConsole)
|
|
||||||
{
|
{
|
||||||
msg(prefix + ChatColor.RED + "You are not a player, use /coins <playername>");
|
Player target = getPlayer(args[0]);
|
||||||
|
|
||||||
|
if (target == null)
|
||||||
|
{
|
||||||
|
msg(PLAYER_NOT_FOUND);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PlayerData playerData = getData(target);
|
||||||
|
msg(prefix + ChatColor.GREEN + target.getName() + " has " + ChatColor.RED + playerData.getCoins() + ChatColor.GREEN + " coins.");
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
|
// Mode for paying another player coins
|
||||||
|
case 3:
|
||||||
{
|
{
|
||||||
p = playerSender;
|
if (args[0].equalsIgnoreCase("pay"))
|
||||||
|
{
|
||||||
|
checkPlayer();
|
||||||
|
|
||||||
|
final Player target = getPlayer(args[1]);
|
||||||
|
final PlayerData senderData = getData(playerSender);
|
||||||
|
|
||||||
|
int coinsToTransfer;
|
||||||
|
|
||||||
|
// Processes args[2]
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Prevents players from trying to be cheeky with negative numbers.
|
||||||
|
coinsToTransfer = Math.max(Math.abs(Integer.parseInt(args[2])), 1);
|
||||||
|
}
|
||||||
|
catch (NumberFormatException ex)
|
||||||
|
{
|
||||||
|
msg("Invalid number: " + args[2], ChatColor.RED);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Prevents players from performing transactions they can't afford to do.
|
||||||
|
if (senderData.getCoins() < coinsToTransfer)
|
||||||
|
{
|
||||||
|
msg("You don't have enough coins to perform this transaction.", ChatColor.RED);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (target == null)
|
||||||
|
{
|
||||||
|
msg(PLAYER_NOT_FOUND);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
PlayerData playerData = getData(target);
|
||||||
|
playerData.setCoins(playerData.getCoins() + coinsToTransfer);
|
||||||
|
senderData.setCoins(senderData.getCoins() - coinsToTransfer);
|
||||||
|
|
||||||
|
msg(target, sender.getName()
|
||||||
|
+ ChatColor.GREEN + " has given you "
|
||||||
|
+ ChatColor.GOLD + coinsToTransfer
|
||||||
|
+ ChatColor.GREEN + " coin" + (coinsToTransfer > 1 ? "s" : "") + "!", ChatColor.GOLD);
|
||||||
|
|
||||||
|
msg("You have given "
|
||||||
|
+ ChatColor.GOLD + coinsToTransfer
|
||||||
|
+ ChatColor.GREEN + " coin" + (coinsToTransfer > 1 ? "s" : "")
|
||||||
|
+ " to " + ChatColor.GOLD + target.getName() + ChatColor.GREEN + ".", ChatColor.GREEN);
|
||||||
|
|
||||||
|
plugin.pl.save(playerData);
|
||||||
|
plugin.pl.save(senderData);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PlayerData playerData = plugin.pl.getData(p);
|
}
|
||||||
msg(prefix + ChatColor.GREEN + (args.length > 0 ? p.getName() + " has " : "You have ") + ChatColor.RED + playerData.getCoins() + ChatColor.GREEN + " coins.");
|
|
||||||
return true;
|
@Override
|
||||||
|
public List<String> getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args)
|
||||||
|
{
|
||||||
|
if (args.length == 1)
|
||||||
|
{
|
||||||
|
List<String> options = new ArrayList<>(FUtil.getPlayerList());
|
||||||
|
|
||||||
|
options.add("pay");
|
||||||
|
|
||||||
|
return options;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FUtil.getPlayerList();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -3,6 +3,9 @@ package me.totalfreedom.totalfreedommod.command;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
import net.kyori.adventure.text.format.TextDecoration;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
@ -15,20 +18,19 @@ import org.bukkit.inventory.meta.ItemMeta;
|
|||||||
@CommandParameters(description = "Get a stick of happiness.", usage = "/<command>")
|
@CommandParameters(description = "Get a stick of happiness.", usage = "/<command>")
|
||||||
public class Command_debugstick extends FreedomCommand
|
public class Command_debugstick extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
{
|
{
|
||||||
ItemStack itemStack = new ItemStack(Material.DEBUG_STICK);
|
ItemStack itemStack = new ItemStack(Material.DEBUG_STICK);
|
||||||
ItemMeta itemMeta = itemStack.getItemMeta();
|
ItemMeta itemMeta = itemStack.getItemMeta();
|
||||||
assert itemMeta != null;
|
assert itemMeta != null;
|
||||||
itemMeta.setDisplayName(ChatColor.GOLD.toString() + ChatColor.BOLD.toString() + "Stick of Happiness");
|
itemMeta.displayName(Component.text("Stick of Happiness", NamedTextColor.GOLD).decorate(TextDecoration.BOLD));
|
||||||
List<String> lore = Arrays.asList(
|
itemMeta.lore(Arrays.asList(
|
||||||
ChatColor.RED + "This is the most powerful stick in the game.",
|
Component.text("This is the most powerful stick in the game.", NamedTextColor.RED),
|
||||||
ChatColor.DARK_BLUE + "You can left click to select what you want to change.",
|
Component.text("You can left click to select what you want to change.", NamedTextColor.DARK_BLUE),
|
||||||
ChatColor.DARK_GREEN + "And then you can right click to change it!",
|
Component.text("And then you can right click to change it!", NamedTextColor.DARK_GREEN),
|
||||||
ChatColor.DARK_PURPLE + "Isn't technology amazing?");
|
Component.text("Isn't technology amazing?", NamedTextColor.DARK_PURPLE)
|
||||||
itemMeta.setLore(lore);
|
));
|
||||||
itemStack.setItemMeta(itemMeta);
|
itemStack.setItemMeta(itemMeta);
|
||||||
playerSender.getInventory().addItem(itemStack);
|
playerSender.getInventory().addItem(itemStack);
|
||||||
return true;
|
return true;
|
||||||
|
@ -21,12 +21,7 @@ public class Command_denick extends FreedomCommand
|
|||||||
}
|
}
|
||||||
|
|
||||||
FUtil.adminAction(sender.getName(), "Removing all nicknames", false);
|
FUtil.adminAction(sender.getName(), "Removing all nicknames", false);
|
||||||
|
server.getOnlinePlayers().forEach(player -> plugin.esb.setNickname(player.getName(), null));
|
||||||
for (Player player : server.getOnlinePlayers())
|
|
||||||
{
|
|
||||||
plugin.esb.setNickname(player.getName(), null);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,16 +32,14 @@ public class Command_deop extends FreedomCommand
|
|||||||
final List<String> matchedPlayerNames = new ArrayList<>();
|
final List<String> matchedPlayerNames = new ArrayList<>();
|
||||||
for (Player player : server.getOnlinePlayers())
|
for (Player player : server.getOnlinePlayers())
|
||||||
{
|
{
|
||||||
if (player.getName().toLowerCase().contains(targetName) || player.getDisplayName().toLowerCase().contains(targetName)
|
if ((player.getName().toLowerCase().contains(targetName) || player.getDisplayName().toLowerCase().contains(targetName)
|
||||||
|| player.getName().contains(targetName) || player.getDisplayName().contains(targetName))
|
|| player.getName().contains(targetName) || player.getDisplayName().contains(targetName)) &&
|
||||||
|
player.isOp() && !plugin.al.isVanished(player.getUniqueId()))
|
||||||
{
|
{
|
||||||
if (player.isOp() && !plugin.al.isVanished(player.getName()))
|
matchedPlayerNames.add(player.getName());
|
||||||
{
|
player.setOp(false);
|
||||||
matchedPlayerNames.add(player.getName());
|
msg(player, YOU_ARE_NOT_OP);
|
||||||
player.setOp(false);
|
plugin.rm.updateDisplay(player);
|
||||||
msg(player, YOU_ARE_NOT_OP);
|
|
||||||
plugin.rm.updateDisplay(player);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
import me.totalfreedom.totalfreedommod.admin.Admin;
|
import me.totalfreedom.totalfreedommod.admin.Admin;
|
||||||
import me.totalfreedom.totalfreedommod.banning.Ban;
|
import me.totalfreedom.totalfreedommod.banning.Ban;
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
@ -43,7 +42,7 @@ public class Command_doom extends FreedomCommand
|
|||||||
FUtil.adminAction(sender.getName(), "Casting oblivion over " + player.getName(), true);
|
FUtil.adminAction(sender.getName(), "Casting oblivion over " + player.getName(), true);
|
||||||
FUtil.bcastMsg(player.getName() + " will be completely obliviated!", ChatColor.RED);
|
FUtil.bcastMsg(player.getName() + " will be completely obliviated!", ChatColor.RED);
|
||||||
|
|
||||||
final String ip = Objects.requireNonNull(player.getAddress()).getAddress().getHostAddress().trim();
|
final String ip = FUtil.getIp(player);
|
||||||
|
|
||||||
// Remove from admin
|
// Remove from admin
|
||||||
Admin admin = getAdmin(player);
|
Admin admin = getAdmin(player);
|
||||||
@ -53,7 +52,6 @@ public class Command_doom extends FreedomCommand
|
|||||||
admin.setActive(false);
|
admin.setActive(false);
|
||||||
plugin.al.save(admin);
|
plugin.al.save(admin);
|
||||||
plugin.al.updateTables();
|
plugin.al.updateTables();
|
||||||
plugin.ptero.updateAccountStatus(admin);
|
|
||||||
if (plugin.dc.enabled && ConfigEntry.DISCORD_ROLE_SYNC.getBoolean())
|
if (plugin.dc.enabled && ConfigEntry.DISCORD_ROLE_SYNC.getBoolean())
|
||||||
{
|
{
|
||||||
Discord.syncRoles(admin, plugin.pl.getData(admin.getName()).getDiscordID());
|
Discord.syncRoles(admin, plugin.pl.getData(admin.getName()).getDiscordID());
|
||||||
@ -76,10 +74,7 @@ public class Command_doom extends FreedomCommand
|
|||||||
// Ban player
|
// Ban player
|
||||||
Ban ban = Ban.forPlayer(player, sender);
|
Ban ban = Ban.forPlayer(player, sender);
|
||||||
ban.setReason((reason == null ? "FUCKOFF" : reason));
|
ban.setReason((reason == null ? "FUCKOFF" : reason));
|
||||||
for (String playerIp : plugin.pl.getData(player).getIps())
|
ban.addIp(ip);
|
||||||
{
|
|
||||||
ban.addIp(playerIp);
|
|
||||||
}
|
|
||||||
plugin.bm.addBan(ban);
|
plugin.bm.addBan(ban);
|
||||||
|
|
||||||
// Set gamemode to survival
|
// Set gamemode to survival
|
||||||
|
@ -1,40 +1,50 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
import org.apache.commons.lang.StringUtils;
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
|
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
|
||||||
@CommandParameters(description = "Eject players that are riding you.", usage = "/<command>")
|
@CommandParameters(description = "Eject any entities that are riding you.", usage = "/<command>")
|
||||||
public class Command_eject extends FreedomCommand
|
public class Command_eject extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
/* Player.getShoulderEntityLeft() and Player.getShoulderEntityRight() are deprecated, however unless
|
||||||
|
Player.getPassengers() also includes shoulders (which isn't likely, given the official documentation doesn't
|
||||||
|
state an alternative method to use instead), these methods will continue to be used here. */
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
@Override
|
@Override
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
{
|
{
|
||||||
|
// Uses the size of the return value of Player.getPassengers() as the starting number of entities ejected
|
||||||
|
int count = playerSender.getPassengers().size();
|
||||||
|
|
||||||
List<String> names = new ArrayList<>();
|
// Removes any entities from the sender's shoulders
|
||||||
|
if (playerSender.getShoulderEntityLeft() != null)
|
||||||
for (Entity entity : playerSender.getPassengers())
|
|
||||||
{
|
{
|
||||||
names.add(entity.getName());
|
playerSender.setShoulderEntityLeft(null);
|
||||||
|
count++;
|
||||||
|
}
|
||||||
|
if (playerSender.getShoulderEntityRight() != null)
|
||||||
|
{
|
||||||
|
playerSender.setShoulderEntityLeft(null);
|
||||||
|
count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (names.isEmpty())
|
// Removes anything riding the sender
|
||||||
|
playerSender.eject();
|
||||||
|
|
||||||
|
if (count != 0)
|
||||||
|
{
|
||||||
|
msg(count + " entit" + (count == 1 ? "y was" : "ies were") + " ejected.", ChatColor.GREEN);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
msg("Nothing was ejected.", ChatColor.GREEN);
|
msg("Nothing was ejected.", ChatColor.GREEN);
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
msg("Ejecting " + StringUtils.join(names, ", ") + ".", ChatColor.GREEN);
|
|
||||||
playerSender.eject();
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,8 @@ import java.util.Arrays;
|
|||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
@ -19,18 +21,6 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
@CommandParameters(description = "Enchant items.", usage = "/<command> <list | addall | reset | add <name> [level] | remove <name>>")
|
@CommandParameters(description = "Enchant items.", usage = "/<command> <list | addall | reset | add <name> [level] | remove <name>>")
|
||||||
public class Command_enchant extends FreedomCommand
|
public class Command_enchant extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
public static List<String> stringNumberRange(int min, int max)
|
|
||||||
{
|
|
||||||
List<String> range = new ArrayList<>();
|
|
||||||
for (int i = min; i <= max; i++)
|
|
||||||
{
|
|
||||||
range.add(String.valueOf(i));
|
|
||||||
}
|
|
||||||
|
|
||||||
return range;
|
|
||||||
}
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
@SuppressWarnings("deprecation")
|
||||||
@Override
|
@Override
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
@ -73,30 +63,23 @@ public class Command_enchant extends FreedomCommand
|
|||||||
}
|
}
|
||||||
else if (args[0].equalsIgnoreCase("addall"))
|
else if (args[0].equalsIgnoreCase("addall"))
|
||||||
{
|
{
|
||||||
for (Enchantment ench : Enchantment.values())
|
Arrays.stream(Enchantment.values()).filter(enchantment -> enchantment.canEnchantItem(item)).forEach(ench ->
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
if (ench.canEnchantItem(item))
|
item.addEnchantment(ench, ench.getMaxLevel());
|
||||||
{
|
|
||||||
item.addEnchantment(ench, ench.getMaxLevel());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
msg("Could not add enchantment: " + ench.getName());
|
msg("Could not add enchantment: " + ench.getName());
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
|
|
||||||
msg("Added all possible enchantments for this item.");
|
msg("Added all possible enchantments for this item.");
|
||||||
}
|
}
|
||||||
else if (args[0].equalsIgnoreCase("reset"))
|
else if (args[0].equalsIgnoreCase("reset"))
|
||||||
{
|
{
|
||||||
for (Enchantment ench : item.getEnchantments().keySet())
|
item.getEnchantments().keySet().forEach(item::removeEnchantment);
|
||||||
{
|
|
||||||
item.removeEnchantment(ench);
|
|
||||||
}
|
|
||||||
|
|
||||||
msg("Removed all enchantments.");
|
msg("Removed all enchantments.");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -251,21 +234,18 @@ public class Command_enchant extends FreedomCommand
|
|||||||
return getEnchantments(item);
|
return getEnchantments(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (args.length == 3)
|
else if (args.length == 3 && args[0].equals("add"))
|
||||||
{
|
{
|
||||||
if (args[0].equals("add"))
|
Enchantment enchantment = Enchantment.getByName(args[1].toUpperCase());
|
||||||
|
if (enchantment != null)
|
||||||
{
|
{
|
||||||
Enchantment enchantment = Enchantment.getByName(args[1].toUpperCase());
|
if (!unsafe)
|
||||||
if (enchantment != null)
|
|
||||||
{
|
{
|
||||||
if (!unsafe)
|
return IntStream.rangeClosed(1, enchantment.getMaxLevel()).mapToObj(String::valueOf).toList();
|
||||||
{
|
}
|
||||||
return stringNumberRange(1, enchantment.getMaxLevel());
|
else
|
||||||
}
|
{
|
||||||
else
|
return Collections.singletonList("[level]");
|
||||||
{
|
|
||||||
return Collections.singletonList("[level]");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -64,6 +64,12 @@ public class Command_entitywipe extends FreedomCommand
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (type == EntityType.PLAYER)
|
||||||
|
{
|
||||||
|
msg("Player entities cannot be purged.", ChatColor.RED);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (!getAllEntities().contains(type))
|
if (!getAllEntities().contains(type))
|
||||||
{
|
{
|
||||||
msg(FUtil.formatName(type.name()) + " is an entity, however: it is a mob.", ChatColor.RED);
|
msg(FUtil.formatName(type.name()) + " is an entity, however: it is a mob.", ChatColor.RED);
|
||||||
|
@ -23,12 +23,12 @@ public class Command_freeze extends FreedomCommand
|
|||||||
|
|
||||||
if (!gFreeze)
|
if (!gFreeze)
|
||||||
{
|
{
|
||||||
FUtil.adminAction(sender.getName(), "Disabling global player freeze", false);
|
FUtil.adminAction(sender.getName(), "Unfreezing all players", false);
|
||||||
msg("Players are now free to move.");
|
msg("Players are now free to move.");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
FUtil.adminAction(sender.getName(), "Enabling global player freeze", false);
|
FUtil.adminAction(sender.getName(), "Freezing all players", false);
|
||||||
for (Player player : server.getOnlinePlayers())
|
for (Player player : server.getOnlinePlayers())
|
||||||
{
|
{
|
||||||
if (!isAdmin(player))
|
if (!isAdmin(player))
|
||||||
|
@ -1,23 +1,30 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import me.totalfreedom.totalfreedommod.bridge.CoreProtectBridge;
|
import java.util.Optional;
|
||||||
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
|
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
|
||||||
@CommandParameters(description = "Block inspector tool for operators", usage = "/<command> [history] <page>", aliases = "ins")
|
@CommandParameters(description = "Block inspector tool for operators.", usage = "/<command> [history] [page]", aliases = "ins")
|
||||||
public class Command_inspect extends FreedomCommand
|
public class Command_inspect extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
{
|
{
|
||||||
|
if (!plugin.cpb.isEnabled())
|
||||||
|
{
|
||||||
|
msg("CoreProtect is not enabled on this server.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (args.length == 0)
|
if (args.length == 0)
|
||||||
{
|
{
|
||||||
PlayerData playerData = plugin.pl.getData(playerSender);
|
PlayerData playerData = plugin.pl.getData(playerSender);
|
||||||
@ -39,31 +46,40 @@ public class Command_inspect extends FreedomCommand
|
|||||||
}
|
}
|
||||||
catch (NumberFormatException e)
|
catch (NumberFormatException e)
|
||||||
{
|
{
|
||||||
msg("Invalid number", ChatColor.RED);
|
msg("Invalid number.", ChatColor.RED);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FUtil.PaginationList<String> paged = CoreProtectBridge.HISTORY_MAP.get(playerSender);
|
|
||||||
if (paged != null)
|
|
||||||
{
|
|
||||||
if (pageIndex < 1 || pageIndex > paged.getPageCount())
|
|
||||||
{
|
|
||||||
msg("Not a valid page number", ChatColor.RED);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
msg("---- " + net.md_5.bungee.api.ChatColor.of("#30ade4") + "Block Inspector" + ChatColor.WHITE + " ---- ", ChatColor.WHITE);
|
|
||||||
|
|
||||||
List<String> page = paged.getPage(pageIndex);
|
|
||||||
for (String entries : page)
|
|
||||||
{
|
|
||||||
msg(entries);
|
|
||||||
}
|
|
||||||
|
|
||||||
msg("Page " + pageIndex + "/" + paged.getPageCount() + " | To index through the pages, type " + net.md_5.bungee.api.ChatColor.of("#30ade4") + "/ins history <page>", ChatColor.WHITE);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int godDammit = pageIndex;
|
||||||
|
Optional.ofNullable(plugin.cpb.getHistoryForPlayer(playerSender)).ifPresentOrElse(page ->
|
||||||
|
plugin.cpb.showPageToPlayer(playerSender, page, godDammit),
|
||||||
|
() -> msg("You haven't inspected anything yet!", ChatColor.RED));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args)
|
||||||
|
{
|
||||||
|
if (args.length == 1)
|
||||||
|
{
|
||||||
|
return Collections.singletonList("history");
|
||||||
|
}
|
||||||
|
else if (args.length == 2 && args[0].equalsIgnoreCase("history") && plugin.cpb.isEnabled()
|
||||||
|
&& sender instanceof Player player && plugin.cpb.hasHistory(player))
|
||||||
|
{
|
||||||
|
return IntStream.rangeClosed(1, plugin.cpb.getHistoryForPlayer(player).getPageCount()).limit(50)
|
||||||
|
.mapToObj(String::valueOf).toList();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -46,7 +46,7 @@ public class Command_invis extends FreedomCommand
|
|||||||
|
|
||||||
for (Player player : server.getOnlinePlayers())
|
for (Player player : server.getOnlinePlayers())
|
||||||
{
|
{
|
||||||
if (player.hasPotionEffect(PotionEffectType.INVISIBILITY) && !plugin.al.isVanished(player.getName()))
|
if (player.hasPotionEffect(PotionEffectType.INVISIBILITY) && !plugin.al.isVanished(player.getUniqueId()))
|
||||||
{
|
{
|
||||||
players.add(player.getName());
|
players.add(player.getName());
|
||||||
if (clear && !plugin.al.isAdmin(player))
|
if (clear && !plugin.al.isAdmin(player))
|
||||||
|
@ -2,7 +2,8 @@ package me.totalfreedom.totalfreedommod.command;
|
|||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import org.bukkit.ChatColor;
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -11,20 +12,13 @@ import org.bukkit.entity.Player;
|
|||||||
@CommandParameters(description = "Kick all non-admins on server.", usage = "/<command>", aliases = "kickall")
|
@CommandParameters(description = "Kick all non-admins on server.", usage = "/<command>", aliases = "kickall")
|
||||||
public class Command_kicknoob extends FreedomCommand
|
public class Command_kicknoob extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
{
|
{
|
||||||
FUtil.adminAction(sender.getName(), "Disconnecting all non-admins", true);
|
FUtil.adminAction(sender.getName(), "Disconnecting all non-admins", true);
|
||||||
|
|
||||||
for (Player player : server.getOnlinePlayers())
|
server.getOnlinePlayers().stream().filter(player -> !plugin.al.isAdmin(player)).forEach(player ->
|
||||||
{
|
player.kick(Component.text("All non-admins were kicked by " + sender.getName() + ".", NamedTextColor.RED)));
|
||||||
if (!plugin.al.isAdmin(player))
|
|
||||||
{
|
|
||||||
player.kickPlayer(ChatColor.RED + "All non-admins were kicked by " + sender.getName() + ".");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -18,7 +18,7 @@ public class Command_linkdiscord extends FreedomCommand
|
|||||||
{
|
{
|
||||||
if (!plugin.dc.enabled)
|
if (!plugin.dc.enabled)
|
||||||
{
|
{
|
||||||
msg("The Discord verification system is currently disabled.", ChatColor.RED);
|
msg("The Discord integration system is currently disabled.", ChatColor.RED);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -32,7 +32,7 @@ public class Command_linkdiscord extends FreedomCommand
|
|||||||
}
|
}
|
||||||
|
|
||||||
playerData.setDiscordID(args[1]);
|
playerData.setDiscordID(args[1]);
|
||||||
msg("Linked " + args[0] + "'s discord account.", ChatColor.GREEN);
|
msg("Linked " + args[0] + "'s Discord account.", ChatColor.GREEN);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.admin.Admin;
|
import me.totalfreedom.totalfreedommod.admin.Admin;
|
||||||
import me.totalfreedom.totalfreedommod.admin.AdminList;
|
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Displayable;
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import net.md_5.bungee.api.ChatColor;
|
import net.md_5.bungee.api.ChatColor;
|
||||||
@ -12,68 +9,37 @@ import org.bukkit.command.Command;
|
|||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.IMPOSTOR, source = SourceType.BOTH)
|
@CommandPermissions(level = Rank.NON_OP, source = SourceType.BOTH)
|
||||||
@CommandParameters(description = "Lists the real names of all online players.", usage = "/<command> [-s | -i | -f | -v]", aliases = "who,lsit")
|
@CommandParameters(description = "Lists the real names of all online players.", usage = "/<command> [-a | -v]", aliases = "who,lsit")
|
||||||
public class Command_list extends FreedomCommand
|
public class Command_list extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
@Override
|
||||||
public boolean run(final CommandSender sender, final Player playerSender, final Command cmd, final String commandLabel, final String[] args, final boolean senderIsConsole)
|
public boolean run(final CommandSender sender, final Player playerSender, final Command cmd, final String commandLabel, final String[] args, final boolean senderIsConsole)
|
||||||
{
|
{
|
||||||
if (args.length > 1)
|
if (args.length > 1)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (FUtil.isFromHostConsole(sender.getName()))
|
|
||||||
{
|
|
||||||
List<String> names = new ArrayList<>();
|
|
||||||
for (Player player : server.getOnlinePlayers())
|
|
||||||
{
|
|
||||||
if (!plugin.al.isVanished(player.getName()))
|
|
||||||
{
|
|
||||||
names.add(player.getName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
msg("There are " + names.size() + "/" + server.getMaxPlayers() + " players online:\n" + StringUtils.join(names, ", "), ChatColor.WHITE);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
ListFilter listFilter;
|
ListFilter listFilter;
|
||||||
if (args.length == 1)
|
if (args.length == 1)
|
||||||
{
|
{
|
||||||
String s = args[0];
|
switch (args[0].toLowerCase())
|
||||||
switch (s)
|
|
||||||
{
|
{
|
||||||
case "-s":
|
case "-s", "-a" -> listFilter = ListFilter.ADMINS;
|
||||||
case "-a":
|
case "-v" ->
|
||||||
{
|
|
||||||
listFilter = ListFilter.ADMINS;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "-v":
|
|
||||||
{
|
{
|
||||||
checkRank(Rank.ADMIN);
|
checkRank(Rank.ADMIN);
|
||||||
listFilter = ListFilter.VANISHED_ADMINS;
|
listFilter = ListFilter.VANISHED_ADMINS;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
case "-t":
|
case "-t" ->
|
||||||
{
|
{
|
||||||
checkRank(Rank.ADMIN);
|
checkRank(Rank.ADMIN);
|
||||||
listFilter = ListFilter.TELNET_SESSIONS;
|
listFilter = ListFilter.TELNET_SESSIONS;
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
case "-i":
|
default ->
|
||||||
{
|
|
||||||
listFilter = ListFilter.IMPOSTORS;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "-f":
|
|
||||||
{
|
|
||||||
listFilter = ListFilter.FAMOUS_PLAYERS;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -83,78 +49,42 @@ public class Command_list extends FreedomCommand
|
|||||||
{
|
{
|
||||||
listFilter = ListFilter.PLAYERS;
|
listFilter = ListFilter.PLAYERS;
|
||||||
}
|
}
|
||||||
StringBuilder onlineStats = new StringBuilder();
|
|
||||||
StringBuilder onlineUsers = new StringBuilder();
|
|
||||||
|
|
||||||
List<String> n = new ArrayList<>();
|
String onlineStats;
|
||||||
|
List<String> players;
|
||||||
|
|
||||||
if (listFilter == ListFilter.TELNET_SESSIONS && plugin.al.isAdmin(sender))
|
if (listFilter == ListFilter.TELNET_SESSIONS && plugin.al.isAdmin(sender))
|
||||||
{
|
{
|
||||||
List<Admin> connectedAdmins = plugin.btb.getConnectedAdmins();
|
players = plugin.btb.getConnectedAdmins().stream().map(Admin::getName).toList();
|
||||||
onlineStats.append(ChatColor.BLUE).append("There are ").append(ChatColor.RED).append(connectedAdmins.size())
|
onlineStats = ChatColor.BLUE + "There are " + ChatColor.RED + players.size() + ChatColor.BLUE
|
||||||
.append(ChatColor.BLUE)
|
+ " admins connected to telnet.";
|
||||||
.append(" admins connected to telnet.");
|
|
||||||
for (Admin admin : connectedAdmins)
|
|
||||||
{
|
|
||||||
n.add(admin.getName());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
onlineStats.append(ChatColor.BLUE).append("There are ").append(ChatColor.RED).append(FUtil.getFakePlayerCount())
|
onlineStats = ChatColor.BLUE + "There are " + ChatColor.RED + FUtil.getFakePlayerCount() + ChatColor.BLUE
|
||||||
.append(ChatColor.BLUE)
|
+ " out of a maximum " + ChatColor.RED + server.getMaxPlayers() + ChatColor.BLUE + " players online.";
|
||||||
.append(" out of a maximum ")
|
|
||||||
.append(ChatColor.RED)
|
|
||||||
.append(server.getMaxPlayers())
|
|
||||||
.append(ChatColor.BLUE)
|
|
||||||
.append(" players online.");
|
|
||||||
for (Player p : server.getOnlinePlayers())
|
|
||||||
{
|
|
||||||
if (listFilter == ListFilter.ADMINS && !plugin.al.isAdmin(p))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (listFilter == ListFilter.ADMINS && plugin.al.isVanished(p.getName()))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (listFilter == ListFilter.VANISHED_ADMINS && !plugin.al.isVanished(p.getName()))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (listFilter == ListFilter.IMPOSTORS && !plugin.al.isAdminImpostor(p))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (listFilter == ListFilter.FAMOUS_PLAYERS && !ConfigEntry.FAMOUS_PLAYERS.getList().contains(p.getName().toLowerCase()))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (listFilter == ListFilter.PLAYERS && plugin.al.isVanished(p.getName()))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
final Displayable display = plugin.rm.getDisplay(p);
|
players = server.getOnlinePlayers().stream().filter(pl ->
|
||||||
n.add(display.getColoredTag() + p.getName());
|
(listFilter == ListFilter.ADMINS && plugin.al.isAdmin(pl) && !plugin.al.isVanished(pl.getUniqueId()))
|
||||||
}
|
|| (listFilter == ListFilter.VANISHED_ADMINS && plugin.al.isVanished(pl.getUniqueId()))
|
||||||
|
|| (listFilter == ListFilter.PLAYERS && !plugin.al.isVanished(pl.getUniqueId()))).map(player ->
|
||||||
|
plugin.rm.getDisplay(player).getColoredTag() + player.getName()).toList();
|
||||||
}
|
}
|
||||||
String playerType = listFilter.toString().toLowerCase().replace('_', ' ');
|
|
||||||
onlineUsers.append("Connected ")
|
String onlineUsers = "Connected " + listFilter.name().toLowerCase().replace('_', ' ') + ": " + ChatColor.WHITE +
|
||||||
.append(playerType)
|
StringUtils.join(players, ChatColor.WHITE + ", " + ChatColor.WHITE);
|
||||||
.append(": ")
|
|
||||||
.append(StringUtils.join(n, ChatColor.WHITE + ", "));
|
|
||||||
if (senderIsConsole)
|
if (senderIsConsole)
|
||||||
{
|
{
|
||||||
msg(ChatColor.stripColor(onlineStats.toString()));
|
msg(ChatColor.stripColor(onlineStats));
|
||||||
msg(ChatColor.stripColor(onlineUsers.toString()));
|
msg(ChatColor.stripColor(onlineUsers));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
msg(onlineStats.toString());
|
msg(onlineStats);
|
||||||
msg(onlineUsers.toString());
|
msg(onlineUsers);
|
||||||
}
|
}
|
||||||
n.clear();
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -163,8 +93,6 @@ public class Command_list extends FreedomCommand
|
|||||||
PLAYERS,
|
PLAYERS,
|
||||||
ADMINS,
|
ADMINS,
|
||||||
VANISHED_ADMINS,
|
VANISHED_ADMINS,
|
||||||
TELNET_SESSIONS,
|
TELNET_SESSIONS
|
||||||
FAMOUS_PLAYERS,
|
|
||||||
IMPOSTORS
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,26 +0,0 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.LogViewer.LogsRegistrationMode;
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.ONLY_IN_GAME)
|
|
||||||
@CommandParameters(description = "Register your connection with the TFM logviewer.", usage = "/<command> [off]")
|
|
||||||
public class Command_logs extends FreedomCommand
|
|
||||||
{
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean run(final CommandSender sender, final Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
|
||||||
{
|
|
||||||
LogsRegistrationMode mode = LogsRegistrationMode.ADD;
|
|
||||||
if (args.length == 1 && "off".equalsIgnoreCase(args[0]))
|
|
||||||
{
|
|
||||||
mode = LogsRegistrationMode.DELETE;
|
|
||||||
}
|
|
||||||
plugin.lv.updateLogsRegistration(sender, playerSender, mode);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,96 +0,0 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
|
||||||
|
|
||||||
import com.sk89q.worldedit.IncompleteRegionException;
|
|
||||||
import com.sk89q.worldedit.LocalSession;
|
|
||||||
import com.sk89q.worldedit.regions.Region;
|
|
||||||
import com.sk89q.worldguard.domains.DefaultDomain;
|
|
||||||
import com.sk89q.worldguard.protection.flags.Flag;
|
|
||||||
import com.sk89q.worldguard.protection.flags.Flags;
|
|
||||||
import com.sk89q.worldguard.protection.flags.RegionGroup;
|
|
||||||
import com.sk89q.worldguard.protection.flags.StateFlag;
|
|
||||||
import com.sk89q.worldguard.protection.managers.RegionManager;
|
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
|
|
||||||
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.Map;
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.ONLY_IN_GAME)
|
|
||||||
@CommandParameters(description = "Make a WorldGuard region for an OP.", usage = "/<command> <playername> <name>", aliases = "mor")
|
|
||||||
public class Command_makeopregion extends FreedomCommand
|
|
||||||
{
|
|
||||||
|
|
||||||
final Map<Flag<?>, Object> flags = new HashMap<Flag<?>, Object>()
|
|
||||||
{{
|
|
||||||
put(Flags.BLOCK_PLACE, StateFlag.State.ALLOW);
|
|
||||||
put(Flags.BLOCK_BREAK, StateFlag.State.ALLOW);
|
|
||||||
put(Flags.BUILD, StateFlag.State.ALLOW);
|
|
||||||
put(Flags.PLACE_VEHICLE, StateFlag.State.ALLOW);
|
|
||||||
put(Flags.DESTROY_VEHICLE, StateFlag.State.ALLOW);
|
|
||||||
put(Flags.ENTITY_ITEM_FRAME_DESTROY, StateFlag.State.ALLOW);
|
|
||||||
put(Flags.ENTITY_PAINTING_DESTROY, StateFlag.State.ALLOW);
|
|
||||||
put(net.goldtreeservers.worldguardextraflags.flags.Flags.WORLDEDIT, StateFlag.State.ALLOW);
|
|
||||||
}};
|
|
||||||
|
|
||||||
public boolean run(final CommandSender sender, final Player playerSender, final Command cmd, final String commandLabel, final String[] args, final boolean senderIsConsole)
|
|
||||||
{
|
|
||||||
if (args.length < 2)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
final Player player = getPlayer(args[0]);
|
|
||||||
|
|
||||||
if (player == null)
|
|
||||||
{
|
|
||||||
msg(FreedomCommand.PLAYER_NOT_FOUND);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
String name = args[1];
|
|
||||||
|
|
||||||
LocalSession session = plugin.web.getWorldEditPlugin().getSession(playerSender);
|
|
||||||
|
|
||||||
Region selection;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
selection = session.getSelection(session.getSelectionWorld());
|
|
||||||
}
|
|
||||||
catch (IncompleteRegionException e)
|
|
||||||
{
|
|
||||||
msg("Please make a WorldEdit selection", ChatColor.RED);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (selection == null)
|
|
||||||
{
|
|
||||||
msg("Please make a WorldEdit selection", ChatColor.RED);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
ProtectedRegion region = new ProtectedCuboidRegion(name, selection.getMinimumPoint(), selection.getMaximumPoint());
|
|
||||||
|
|
||||||
DefaultDomain owners = new DefaultDomain();
|
|
||||||
owners.addPlayer(playerSender.getName());
|
|
||||||
owners.addPlayer(player.getName());
|
|
||||||
region.setOwners(owners);
|
|
||||||
region.setFlags(flags);
|
|
||||||
|
|
||||||
for (Flag<?> flag : flags.keySet())
|
|
||||||
{
|
|
||||||
region.setFlag(flag.getRegionGroupFlag(), RegionGroup.MEMBERS);
|
|
||||||
}
|
|
||||||
|
|
||||||
RegionManager regionManager = plugin.wgb.getRegionManager(playerSender.getWorld());
|
|
||||||
|
|
||||||
regionManager.addRegion(region);
|
|
||||||
|
|
||||||
msg("Successfully created the region '" + name + "' for " + player.getName(), ChatColor.GREEN);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -35,8 +35,8 @@ public class Command_manageshop extends FreedomCommand
|
|||||||
}
|
}
|
||||||
switch (args[1])
|
switch (args[1])
|
||||||
{
|
{
|
||||||
|
|
||||||
case "add":
|
case "add":
|
||||||
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2])));
|
int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2])));
|
||||||
@ -75,7 +75,9 @@ public class Command_manageshop extends FreedomCommand
|
|||||||
msg("Invalid number: " + args[2], ChatColor.RED);
|
msg("Invalid number: " + args[2], ChatColor.RED);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
case "remove":
|
case "remove":
|
||||||
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2])));
|
int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2])));
|
||||||
@ -122,7 +124,9 @@ public class Command_manageshop extends FreedomCommand
|
|||||||
msg("Invalid number: " + args[2], ChatColor.RED);
|
msg("Invalid number: " + args[2], ChatColor.RED);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
case "set":
|
case "set":
|
||||||
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2])));
|
int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2])));
|
||||||
@ -147,6 +151,11 @@ public class Command_manageshop extends FreedomCommand
|
|||||||
msg("Invalid number: " + args[2], ChatColor.RED);
|
msg("Invalid number: " + args[2], ChatColor.RED);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (args[0].equals("items"))
|
else if (args[0].equals("items"))
|
||||||
|
@ -1,63 +0,0 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH)
|
|
||||||
@CommandParameters(description = "Manually verify someone", usage = "/<command> <playername>", aliases = "mv")
|
|
||||||
public class Command_manuallyverify extends FreedomCommand
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
|
||||||
{
|
|
||||||
boolean verificationEnabled = ConfigEntry.DISCORD_VERIFICATION.getBoolean();
|
|
||||||
if (!plugin.dc.enabled)
|
|
||||||
{
|
|
||||||
msg("The Discord verification system is currently disabled.", ChatColor.RED);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!verificationEnabled)
|
|
||||||
{
|
|
||||||
msg("The Discord verification system is currently disabled.", ChatColor.RED);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args.length == 0)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
final Player player = getPlayer(args[0]);
|
|
||||||
if (player == null)
|
|
||||||
{
|
|
||||||
msg(FreedomCommand.PLAYER_NOT_FOUND);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!plugin.pl.IsImpostor(player))
|
|
||||||
{
|
|
||||||
msg("That player is not an impostor.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
FUtil.adminAction(sender.getName(), "Manually verifying player " + player.getName(), false);
|
|
||||||
player.setOp(true);
|
|
||||||
msg(player, YOU_ARE_OP);
|
|
||||||
|
|
||||||
if (plugin.pl.getPlayer(player).getFreezeData().isFrozen())
|
|
||||||
{
|
|
||||||
plugin.pl.getPlayer(player).getFreezeData().setFrozen(false);
|
|
||||||
msg(player, "You have been unfrozen.");
|
|
||||||
}
|
|
||||||
|
|
||||||
plugin.pl.verify(player, null);
|
|
||||||
plugin.rm.updateDisplay(player);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -116,39 +116,21 @@ public class Command_mbconfig extends FreedomCommand
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data.isMasterBuilder() && plugin.pl.isPlayerImpostor(player))
|
if (!data.isMasterBuilder())
|
||||||
{
|
|
||||||
FUtil.adminAction(sender.getName(), "Re-adding " + data.getName() + " to the Master Builder list", true);
|
|
||||||
|
|
||||||
if (plugin.pl.getPlayer(player).getFreezeData().isFrozen())
|
|
||||||
{
|
|
||||||
plugin.pl.getPlayer(player).getFreezeData().setFrozen(false);
|
|
||||||
}
|
|
||||||
if (player != null)
|
|
||||||
{
|
|
||||||
plugin.pl.verify(player, null);
|
|
||||||
plugin.rm.updateDisplay(player);
|
|
||||||
player.setOp(true);
|
|
||||||
msg(player, YOU_ARE_OP);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (!data.isMasterBuilder())
|
|
||||||
{
|
{
|
||||||
FUtil.adminAction(sender.getName(), "Adding " + data.getName() + " to the Master Builder list", true);
|
FUtil.adminAction(sender.getName(), "Adding " + data.getName() + " to the Master Builder list", true);
|
||||||
data.setMasterBuilder(true);
|
data.setMasterBuilder(true);
|
||||||
data.setVerification(true);
|
|
||||||
plugin.pl.save(data);
|
plugin.pl.save(data);
|
||||||
if (player != null)
|
if (player != null)
|
||||||
{
|
{
|
||||||
plugin.rm.updateDisplay(player);
|
plugin.rm.updateDisplay(player);
|
||||||
}
|
}
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
msg("That player is already on the Master Builder list.");
|
msg("That player is already on the Master Builder list.");
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
case "remove":
|
case "remove":
|
||||||
{
|
{
|
||||||
@ -173,10 +155,6 @@ public class Command_mbconfig extends FreedomCommand
|
|||||||
|
|
||||||
FUtil.adminAction(sender.getName(), "Removing " + data.getName() + " from the Master Builder list", true);
|
FUtil.adminAction(sender.getName(), "Removing " + data.getName() + " from the Master Builder list", true);
|
||||||
data.setMasterBuilder(false);
|
data.setMasterBuilder(false);
|
||||||
if (data.getDiscordID() == null)
|
|
||||||
{
|
|
||||||
data.setVerification(false);
|
|
||||||
}
|
|
||||||
plugin.pl.save(data);
|
plugin.pl.save(data);
|
||||||
if (player != null)
|
if (player != null)
|
||||||
{
|
{
|
||||||
|
@ -3,15 +3,15 @@ package me.totalfreedom.totalfreedommod.command;
|
|||||||
import me.totalfreedom.totalfreedommod.GameRuleHandler;
|
import me.totalfreedom.totalfreedommod.GameRuleHandler;
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH)
|
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH)
|
||||||
@CommandParameters(description = "Control mob limiting parameters.", usage = "/<command> <on|off|setmax <count>|dragon|giant|ghast|slime>")
|
@CommandParameters(description = "Control mob limiting parameters.", usage = "/<command> <on | off | setmax <count> | dragon | giant | ghast | slime>")
|
||||||
public class Command_moblimiter extends FreedomCommand
|
public class Command_moblimiter extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
{
|
{
|
||||||
@ -20,47 +20,35 @@ public class Command_moblimiter extends FreedomCommand
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args[0].equalsIgnoreCase("on"))
|
switch (args[0].toLowerCase())
|
||||||
{
|
{
|
||||||
ConfigEntry.MOB_LIMITER_ENABLED.setBoolean(true);
|
case "on" -> ConfigEntry.MOB_LIMITER_ENABLED.setBoolean(true);
|
||||||
}
|
case "off" -> ConfigEntry.MOB_LIMITER_ENABLED.setBoolean(false);
|
||||||
else if (args[0].equalsIgnoreCase("off"))
|
case "dragon" -> ConfigEntry.MOB_LIMITER_DISABLE_DRAGON.setBoolean(!ConfigEntry.MOB_LIMITER_DISABLE_DRAGON.getBoolean());
|
||||||
{
|
case "giant" -> ConfigEntry.MOB_LIMITER_DISABLE_GIANT.setBoolean(!ConfigEntry.MOB_LIMITER_DISABLE_GIANT.getBoolean());
|
||||||
ConfigEntry.MOB_LIMITER_ENABLED.setBoolean(false);
|
case "slime" -> ConfigEntry.MOB_LIMITER_DISABLE_SLIME.setBoolean(!ConfigEntry.MOB_LIMITER_DISABLE_SLIME.getBoolean());
|
||||||
}
|
case "ghast" -> ConfigEntry.MOB_LIMITER_DISABLE_GHAST.setBoolean(!ConfigEntry.MOB_LIMITER_DISABLE_GHAST.getBoolean());
|
||||||
else if (args[0].equalsIgnoreCase("dragon"))
|
case "setmax" ->
|
||||||
{
|
|
||||||
ConfigEntry.MOB_LIMITER_DISABLE_DRAGON.setBoolean(!ConfigEntry.MOB_LIMITER_DISABLE_DRAGON.getBoolean());
|
|
||||||
}
|
|
||||||
else if (args[0].equalsIgnoreCase("giant"))
|
|
||||||
{
|
|
||||||
ConfigEntry.MOB_LIMITER_DISABLE_GIANT.setBoolean(!ConfigEntry.MOB_LIMITER_DISABLE_GIANT.getBoolean());
|
|
||||||
}
|
|
||||||
else if (args[0].equalsIgnoreCase("slime"))
|
|
||||||
{
|
|
||||||
ConfigEntry.MOB_LIMITER_DISABLE_SLIME.setBoolean(!ConfigEntry.MOB_LIMITER_DISABLE_SLIME.getBoolean());
|
|
||||||
}
|
|
||||||
else if (args[0].equalsIgnoreCase("ghast"))
|
|
||||||
{
|
|
||||||
ConfigEntry.MOB_LIMITER_DISABLE_GHAST.setBoolean(!ConfigEntry.MOB_LIMITER_DISABLE_GHAST.getBoolean());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (args.length < 2)
|
|
||||||
{
|
{
|
||||||
return false;
|
if (args.length < 2)
|
||||||
}
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (args[0].equalsIgnoreCase("setmax"))
|
|
||||||
{
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
ConfigEntry.MOB_LIMITER_MAX.setInteger(Math.max(0, Math.min(2000, Integer.parseInt(args[1]))));
|
ConfigEntry.MOB_LIMITER_MAX.setInteger(Math.max(0, Math.min(2000, Integer.parseInt(args[1]))));
|
||||||
}
|
}
|
||||||
catch (NumberFormatException ignored)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
msg("Invalid number: " + args[1], ChatColor.RED);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
default ->
|
||||||
|
{
|
||||||
|
// Shut the fuck up Codacy!
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ConfigEntry.MOB_LIMITER_ENABLED.getBoolean())
|
if (ConfigEntry.MOB_LIMITER_ENABLED.getBoolean())
|
||||||
@ -78,7 +66,6 @@ public class Command_moblimiter extends FreedomCommand
|
|||||||
}
|
}
|
||||||
|
|
||||||
plugin.gr.setGameRule(GameRuleHandler.GameRule.DO_MOB_SPAWNING, !ConfigEntry.MOB_LIMITER_ENABLED.getBoolean());
|
plugin.gr.setGameRule(GameRuleHandler.GameRule.DO_MOB_SPAWNING, !ConfigEntry.MOB_LIMITER_ENABLED.getBoolean());
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
@ -16,17 +15,6 @@ import org.bukkit.entity.Player;
|
|||||||
@CommandParameters(description = "Purge all mobs in all worlds.", usage = "/<command> [name]", aliases = "mp")
|
@CommandParameters(description = "Purge all mobs in all worlds.", usage = "/<command> [name]", aliases = "mp")
|
||||||
public class Command_mobpurge extends FreedomCommand
|
public class Command_mobpurge extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
public static List<String> getAllMobNames()
|
|
||||||
{
|
|
||||||
List<String> names = new ArrayList<>();
|
|
||||||
for (EntityType entityType : Groups.MOB_TYPES)
|
|
||||||
{
|
|
||||||
names.add(entityType.name());
|
|
||||||
}
|
|
||||||
return names;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
{
|
{
|
||||||
@ -67,7 +55,7 @@ public class Command_mobpurge extends FreedomCommand
|
|||||||
{
|
{
|
||||||
if (args.length == 1)
|
if (args.length == 1)
|
||||||
{
|
{
|
||||||
return getAllMobNames();
|
return Groups.MOB_TYPES.stream().map(Enum::name).toList();
|
||||||
}
|
}
|
||||||
|
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
|
@ -1,266 +0,0 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.SplittableRandom;
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
|
||||||
import net.minecraft.server.v1_16_R3.NBTTagCompound;
|
|
||||||
import net.minecraft.server.v1_16_R3.NBTTagList;
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack;
|
|
||||||
import org.bukkit.enchantments.Enchantment;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
|
||||||
import org.bukkit.inventory.meta.PotionMeta;
|
|
||||||
import org.bukkit.potion.PotionEffectType;
|
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
|
|
||||||
@CommandParameters(description = "Modify the current item you are holding.", usage = "/<command> <name <message> | lore <message> | enchant <enchantment> <level> | potion <effect> <duration> <amplifier> | attribute <name> <amount> | clear>", aliases = "mi")
|
|
||||||
public class Command_modifyitem extends FreedomCommand
|
|
||||||
{
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
@Override
|
|
||||||
public boolean run(final CommandSender sender, final Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
|
||||||
{
|
|
||||||
if (args.length < 1)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
ItemStack item = playerSender.getInventory().getItemInMainHand();
|
|
||||||
if (item.getType().equals(Material.AIR))
|
|
||||||
{
|
|
||||||
msg("You must have an item in your hand!");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args[0].equalsIgnoreCase("clear"))
|
|
||||||
{
|
|
||||||
item.setItemMeta(null);
|
|
||||||
playerSender.getInventory().setItemInMainHand(item);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args.length < 2)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
ItemMeta meta = item.getItemMeta();
|
|
||||||
assert meta != null;
|
|
||||||
switch (args[0])
|
|
||||||
{
|
|
||||||
case "name":
|
|
||||||
String name = FUtil.colorize(StringUtils.join(args, " ", 1, args.length));
|
|
||||||
meta.setDisplayName(name);
|
|
||||||
item.setItemMeta(meta);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "lore":
|
|
||||||
List<String> lore = new ArrayList<>();
|
|
||||||
for (String line : StringUtils.join(args, " ", 1, args.length).split("\\\\n"))
|
|
||||||
{
|
|
||||||
lore.add(FUtil.colorize(line));
|
|
||||||
}
|
|
||||||
meta.setLore(lore);
|
|
||||||
item.setItemMeta(meta);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "enchant":
|
|
||||||
if (args.length < 3)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Enchantment enchantment = Enchantment.getByName(args[1].toUpperCase());
|
|
||||||
if (enchantment == null)
|
|
||||||
{
|
|
||||||
msg("Invalid enchantment. Please run /enchant list for a list of valid enchantments.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
int level;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
level = Integer.parseInt(args[2]);
|
|
||||||
}
|
|
||||||
catch (NumberFormatException ex)
|
|
||||||
{
|
|
||||||
msg("The level specified is not a valid integer.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
meta.addEnchant(enchantment, level, true);
|
|
||||||
item.setItemMeta(meta);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case "potion":
|
|
||||||
{
|
|
||||||
if (!item.getType().equals(Material.POTION) & !item.getType().equals(Material.SPLASH_POTION) & !item.getType().equals(Material.LINGERING_POTION) & !item.getType().equals(Material.TIPPED_ARROW))
|
|
||||||
{
|
|
||||||
msg("This item can not have potion effects added to it.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args.length < 4)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
PotionEffectType type = PotionEffectType.getByName(args[1]);
|
|
||||||
if (type == null)
|
|
||||||
{
|
|
||||||
msg("Invalid potion effect. Please run /potion list for a list of valid potion effects.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
int duration;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
duration = Math.max(1, Math.min(1000000, Integer.parseInt(args[2])));
|
|
||||||
}
|
|
||||||
catch (NumberFormatException ex)
|
|
||||||
{
|
|
||||||
msg("The duration specified is not a valid integer.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
int amplifier;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
amplifier = Math.max(1, Math.min(256, Integer.parseInt(args[2])));
|
|
||||||
}
|
|
||||||
catch (NumberFormatException ex)
|
|
||||||
{
|
|
||||||
msg("The amplifier specified is not a valid integer.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
PotionMeta potionMeta = (PotionMeta)meta;
|
|
||||||
potionMeta.addCustomEffect(type.createEffect(duration, amplifier), true);
|
|
||||||
item.setItemMeta(potionMeta);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case "attribute":
|
|
||||||
if (args.length < 3)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
net.minecraft.server.v1_16_R3.ItemStack nmsStack = CraftItemStack.asNMSCopy(item);
|
|
||||||
NBTTagCompound compound = (nmsStack.hasTag()) ? nmsStack.getTag() : new NBTTagCompound();
|
|
||||||
NBTTagList modifiers = getAttributeList(nmsStack);
|
|
||||||
NBTTagCompound cmpnd = new NBTTagCompound();
|
|
||||||
Attribute attribute = Attribute.getByName(args[1].toUpperCase());
|
|
||||||
if (attribute == null)
|
|
||||||
{
|
|
||||||
msg("Invalid attribute. Please run /attributelist for a list of valid attributes.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
cmpnd.setString("AttributeName", attribute.getAttribute());
|
|
||||||
cmpnd.setString("Name", attribute.getAttribute());
|
|
||||||
double amount;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
amount = Double.parseDouble(args[2]);
|
|
||||||
}
|
|
||||||
catch (NumberFormatException ex)
|
|
||||||
{
|
|
||||||
msg("The amount specified is not a valid integer.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
if (Double.isNaN(amount))
|
|
||||||
{
|
|
||||||
msg("The amount specified is illegal.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
cmpnd.setDouble("Amount", amount);
|
|
||||||
cmpnd.setInt("Operation", 0);
|
|
||||||
SplittableRandom random = new SplittableRandom();
|
|
||||||
cmpnd.setIntArray("UUID", new int[]
|
|
||||||
{
|
|
||||||
random.nextInt(),
|
|
||||||
random.nextInt(),
|
|
||||||
random.nextInt(),
|
|
||||||
random.nextInt()
|
|
||||||
});
|
|
||||||
cmpnd.setString("Slot", "mainhand");
|
|
||||||
modifiers.add(cmpnd);
|
|
||||||
assert compound != null;
|
|
||||||
compound.set("AttributeModifiers", modifiers);
|
|
||||||
nmsStack.setTag(compound);
|
|
||||||
item = CraftItemStack.asBukkitCopy(nmsStack);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
playerSender.getInventory().setItemInMainHand(item);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private NBTTagList getAttributeList(net.minecraft.server.v1_16_R3.ItemStack stack)
|
|
||||||
{
|
|
||||||
if (stack.getTag() == null)
|
|
||||||
{
|
|
||||||
stack.setTag(new NBTTagCompound());
|
|
||||||
}
|
|
||||||
NBTTagList attr = stack.getTag().getList("AttributeModifiers", 10);
|
|
||||||
if (attr == null)
|
|
||||||
{
|
|
||||||
stack.getTag().set("AttributeModifiers", new NBTTagList());
|
|
||||||
}
|
|
||||||
return stack.getTag().getList("AttributeModifiers", 10);
|
|
||||||
}
|
|
||||||
|
|
||||||
private enum Attribute
|
|
||||||
{
|
|
||||||
GENERIC_MAX_HEALTH("GENERIC_MAX_HEALTH", "generic.max_health"),
|
|
||||||
GENERIC_FOLLOW_RANGE("GENERIC_FOLLOW_RANGE", "generic.follow_range"),
|
|
||||||
GENERIC_KNOCKBACK_RESISTANCE("GENERIC_KNOCKBACK_RESISTANCE", "generic.knockback_resistance"),
|
|
||||||
GENERIC_MOVEMENT_SPEED("GENERIC_MOVEMENT_SPEED", "generic.movement_speed"),
|
|
||||||
GENERIC_FLYING_SPEED("GENERIC_FLYING_SPEED", "generic.flying_speed"),
|
|
||||||
GENERIC_ATTACK_DAMAGE("GENERIC_ATTACK_DAMAGE", "generic.attack_damage"),
|
|
||||||
GENERIC_ATTACK_SPEED("GENERIC_ATTACK_SPEED", "generic.attack_speed"),
|
|
||||||
GENERIC_ARMOR("GENERIC_ARMOR", "generic.armor"),
|
|
||||||
GENERIC_ARMOR_TOUGHNESS("GENERIC_ARMOR_TOUGHNESS", "generic.armor_toughmess"),
|
|
||||||
GENERIC_LUCK("GENERIC_LUCK", "generic.luck"),
|
|
||||||
HORSE_JUMP_STRENGTH("GENERIC_MAX_HEALTH", "horse.jump_strength"),
|
|
||||||
ZOMBIE_SPAWN_REINFORCEMENTS("ZOMBIE_SPAWN_REINFORCEMENTS", "zombie.spawn_reinforcements");
|
|
||||||
|
|
||||||
private final String name;
|
|
||||||
private final String attribute;
|
|
||||||
|
|
||||||
Attribute(String name, String attribute)
|
|
||||||
{
|
|
||||||
this.name = name;
|
|
||||||
this.attribute = attribute;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Attribute getByName(String name)
|
|
||||||
{
|
|
||||||
for (Attribute attr : Attribute.values())
|
|
||||||
{
|
|
||||||
if (attr.toString().toUpperCase().equals(name))
|
|
||||||
{
|
|
||||||
return attr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getAttribute()
|
|
||||||
{
|
|
||||||
return attribute;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public String toString()
|
|
||||||
{
|
|
||||||
return name;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,10 +1,6 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
|
||||||
import me.totalfreedom.totalfreedommod.punishments.Punishment;
|
import me.totalfreedom.totalfreedommod.punishments.Punishment;
|
||||||
import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
|
import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
@ -20,7 +16,6 @@ import org.bukkit.entity.Player;
|
|||||||
@CommandParameters(description = "Mutes a player with brute force.", usage = "/<command> <[-s | -q] <player> [reason] | list | purge | all>", aliases = "stfu")
|
@CommandParameters(description = "Mutes a player with brute force.", usage = "/<command> <[-s | -q] <player> [reason] | list | purge | all>", aliases = "stfu")
|
||||||
public class Command_mute extends FreedomCommand
|
public class Command_mute extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
{
|
{
|
||||||
@ -29,132 +24,110 @@ public class Command_mute extends FreedomCommand
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args[0].equalsIgnoreCase("list"))
|
switch (args[0].toLowerCase())
|
||||||
{
|
{
|
||||||
msg("Muted players:");
|
case "list" ->
|
||||||
FPlayer info;
|
|
||||||
int count = 0;
|
|
||||||
for (Player mp : server.getOnlinePlayers())
|
|
||||||
{
|
{
|
||||||
info = plugin.pl.getPlayer(mp);
|
msg("Muted players:");
|
||||||
if (info.isMuted())
|
List<? extends Player> list = server.getOnlinePlayers().stream().filter(player ->
|
||||||
|
plugin.pl.getPlayer(player).isMuted()).toList();
|
||||||
|
|
||||||
|
if (list.size() > 0)
|
||||||
|
list.forEach(player -> msg("- " + player.getName()));
|
||||||
|
else
|
||||||
|
msg("- none");
|
||||||
|
}
|
||||||
|
case "purge" ->
|
||||||
|
{
|
||||||
|
FUtil.adminAction(sender.getName(), "Unmuting all players", true);
|
||||||
|
List<? extends Player> list = server.getOnlinePlayers().stream().filter(player ->
|
||||||
|
plugin.pl.getPlayer(player).isMuted()).toList();
|
||||||
|
|
||||||
|
list.forEach(player ->
|
||||||
{
|
{
|
||||||
msg("- " + mp.getName());
|
plugin.pl.getPlayer(player).setMuted(false);
|
||||||
count++;
|
player.sendTitle(ChatColor.RED + "You have been unmuted.",
|
||||||
}
|
ChatColor.YELLOW + "Be sure to follow the rules!", 20, 100, 60);
|
||||||
}
|
});
|
||||||
if (count == 0)
|
|
||||||
{
|
|
||||||
msg("- none");
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
msg("Unmuted " + list.size() + " player" + (list.size() != 1 ? "s" : "") + ".");
|
||||||
}
|
}
|
||||||
|
case "all" ->
|
||||||
if (args[0].equalsIgnoreCase("purge"))
|
|
||||||
{
|
|
||||||
FUtil.adminAction(sender.getName(), "Unmuting all players.", true);
|
|
||||||
FPlayer info;
|
|
||||||
int count = 0;
|
|
||||||
for (Player mp : server.getOnlinePlayers())
|
|
||||||
{
|
{
|
||||||
info = plugin.pl.getPlayer(mp);
|
FUtil.adminAction(sender.getName(), "Muting all non-admins", true);
|
||||||
if (info.isMuted())
|
List<? extends Player> list = server.getOnlinePlayers().stream().filter(player ->
|
||||||
|
!plugin.al.isAdmin(player)).toList();
|
||||||
|
|
||||||
|
list.forEach(player ->
|
||||||
{
|
{
|
||||||
info.setMuted(false);
|
plugin.pl.getPlayer(player).setMuted(true);
|
||||||
mp.sendTitle(ChatColor.RED + "You've been unmuted.", ChatColor.YELLOW + "Be sure to follow the rules!", 20, 100, 60);
|
player.sendTitle(ChatColor.RED + "You've been muted globally.",
|
||||||
count++;
|
ChatColor.YELLOW + "Please be patient and you will be unmuted shortly.", 20, 100, 60);
|
||||||
}
|
});
|
||||||
|
|
||||||
|
msg("Muted " + list.size() + " player" + (list.size() != 1 ? "s" : "") + ".");
|
||||||
}
|
}
|
||||||
plugin.mu.MUTED_PLAYERS.clear();
|
default ->
|
||||||
msg("Unmuted " + count + " players.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args[0].equalsIgnoreCase("all"))
|
|
||||||
{
|
|
||||||
FUtil.adminAction(sender.getName(), "Muting all non-admins", true);
|
|
||||||
|
|
||||||
FPlayer playerdata;
|
|
||||||
int counter = 0;
|
|
||||||
for (Player player : server.getOnlinePlayers())
|
|
||||||
{
|
{
|
||||||
if (!plugin.al.isAdmin(player))
|
boolean quiet = args[0].equalsIgnoreCase("-q");
|
||||||
|
boolean smite = args[0].equalsIgnoreCase("-s");
|
||||||
|
|
||||||
|
// Handling the -q parameter
|
||||||
|
if (quiet || smite)
|
||||||
{
|
{
|
||||||
player.sendTitle(ChatColor.RED + "You've been muted globally.", ChatColor.YELLOW + "Please be patient and you will be unmuted shortly.", 20, 100, 60);
|
if (args.length == 1) return false;
|
||||||
playerdata = plugin.pl.getPlayer(player);
|
args = ArrayUtils.subarray(args, 1, args.length);
|
||||||
playerdata.setMuted(true);
|
|
||||||
counter++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Handling the (optional) reason
|
||||||
|
String reason = args.length > 1 ? StringUtils.join(args, " ", 1, args.length) : null;
|
||||||
|
|
||||||
|
// Showtime
|
||||||
|
Optional.ofNullable(getPlayer(args[0])).ifPresentOrElse(player ->
|
||||||
|
{
|
||||||
|
if (plugin.al.isAdmin(player))
|
||||||
|
{
|
||||||
|
msg(player.getName() + " is an admin, and as such can't be muted.", ChatColor.RED);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else if (plugin.pl.getPlayer(player).isMuted())
|
||||||
|
{
|
||||||
|
msg(player.getName() + " is already muted.", ChatColor.RED);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Don't broadcast the mute if it was quiet
|
||||||
|
if (!quiet)
|
||||||
|
{
|
||||||
|
FUtil.adminAction(sender.getName(), "Muting " + player.getName(), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Smite the player if we're supposed to
|
||||||
|
if (smite)
|
||||||
|
{
|
||||||
|
Command_smite.smite(sender, player, reason, true, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Mutes the player
|
||||||
|
plugin.pl.getPlayer(player).setMuted(true);
|
||||||
|
|
||||||
|
// Notify the player that they have been muted
|
||||||
|
player.sendTitle(ChatColor.RED + "You've been muted.",
|
||||||
|
ChatColor.YELLOW + "Be sure to follow the rules!", 20, 100, 60);
|
||||||
|
msg(player, "You have been muted by " + ChatColor.YELLOW + sender.getName()
|
||||||
|
+ ChatColor.RED + ".", ChatColor.RED);
|
||||||
|
|
||||||
|
// Give them the reason if one is present.
|
||||||
|
if (reason != null)
|
||||||
|
{
|
||||||
|
msg(player, "Reason: " + ChatColor.YELLOW + reason, ChatColor.RED);
|
||||||
|
}
|
||||||
|
|
||||||
|
msg((quiet ? "Quietly m" : "M") + "uted " + player.getName() + ".");
|
||||||
|
plugin.pul.logPunishment(new Punishment(player.getName(), FUtil.getIp(player), sender.getName(),
|
||||||
|
PunishmentType.MUTE, reason));
|
||||||
|
}, () -> msg(PLAYER_NOT_FOUND));
|
||||||
}
|
}
|
||||||
|
|
||||||
msg("Muted " + counter + " players.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
// -s option (smite)
|
|
||||||
boolean smite = args[0].equals("-s");
|
|
||||||
// -q option (shadowmute)
|
|
||||||
boolean quiet = args[0].equals("-q");
|
|
||||||
if (smite || quiet)
|
|
||||||
{
|
|
||||||
args = ArrayUtils.subarray(args, 1, args.length);
|
|
||||||
|
|
||||||
if (args.length < 1)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
final Player player = getPlayer(args[0]);
|
|
||||||
if (player == null)
|
|
||||||
{
|
|
||||||
msg(PLAYER_NOT_FOUND);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
String reason = null;
|
|
||||||
if (args.length > 1)
|
|
||||||
{
|
|
||||||
reason = StringUtils.join(args, " ", 1, args.length);
|
|
||||||
}
|
|
||||||
|
|
||||||
FPlayer playerdata = plugin.pl.getPlayer(player);
|
|
||||||
if (plugin.al.isAdmin(player))
|
|
||||||
{
|
|
||||||
msg(player.getName() + " is an admin, and can't be muted.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!playerdata.isMuted())
|
|
||||||
{
|
|
||||||
playerdata.setMuted(true);
|
|
||||||
player.sendTitle(ChatColor.RED + "You've been muted.", ChatColor.YELLOW + "Be sure to follow the rules!", 20, 100, 60);
|
|
||||||
if (reason != null)
|
|
||||||
{
|
|
||||||
msg(player, ChatColor.RED + "Reason: " + ChatColor.YELLOW + reason);
|
|
||||||
}
|
|
||||||
if (quiet)
|
|
||||||
{
|
|
||||||
msg("Muted " + player.getName() + " quietly");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
FUtil.adminAction(sender.getName(), "Muting " + player.getName(), true);
|
|
||||||
|
|
||||||
if (smite)
|
|
||||||
{
|
|
||||||
Command_smite.smite(sender, player, reason);
|
|
||||||
}
|
|
||||||
|
|
||||||
msg(player, "You have been muted by " + ChatColor.YELLOW + sender.getName(), ChatColor.RED);
|
|
||||||
msg("Muted " + player.getName());
|
|
||||||
|
|
||||||
plugin.pul.logPunishment(new Punishment(player.getName(), FUtil.getIp(player), sender.getName(), PunishmentType.MUTE, reason));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
msg(ChatColor.RED + "That player is already muted.");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -178,4 +151,4 @@ public class Command_mute extends FreedomCommand
|
|||||||
|
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -217,42 +217,33 @@ public class Command_myadmin extends FreedomCommand
|
|||||||
}
|
}
|
||||||
else if (args.length == 2)
|
else if (args.length == 2)
|
||||||
{
|
{
|
||||||
if (args[0].equals("-o"))
|
if (args[0].equalsIgnoreCase("-o"))
|
||||||
{
|
{
|
||||||
return FUtil.getPlayerList();
|
return FUtil.getPlayerList();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (doubleArguments.contains(args[0]))
|
if (doubleArguments.contains(args[0]) && args[0].equalsIgnoreCase("clearip"))
|
||||||
{
|
{
|
||||||
if (args[0].equals("clearip"))
|
List<String> ips = plugin.al.getAdmin(sender).getIps();
|
||||||
{
|
ips.remove(FUtil.getIp((Player)sender));
|
||||||
List<String> ips = plugin.al.getAdmin(sender).getIps();
|
return ips;
|
||||||
ips.remove(FUtil.getIp((Player)sender));
|
|
||||||
return ips;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (args.length == 3)
|
else if (args.length == 3 && args[0].equalsIgnoreCase("-o"))
|
||||||
{
|
{
|
||||||
if (args[0].equals("-o"))
|
List<String> options = new ArrayList<>();
|
||||||
{
|
options.addAll(singleArguments);
|
||||||
List<String> options = new ArrayList<>();
|
options.addAll(doubleArguments);
|
||||||
options.addAll(singleArguments);
|
return options;
|
||||||
options.addAll(doubleArguments);
|
|
||||||
return options;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (args.length == 4)
|
else if (args.length == 4 && args[0].equalsIgnoreCase("-o") && args[2].equalsIgnoreCase("clearip"))
|
||||||
{
|
{
|
||||||
if (args[0].equals("-o") && args[2].equals("clearip"))
|
Admin admin = plugin.al.getEntryByName(args[1]);
|
||||||
|
if (admin != null)
|
||||||
{
|
{
|
||||||
Admin admin = plugin.al.getEntryByName(args[1]);
|
return admin.getIps();
|
||||||
if (admin != null)
|
|
||||||
{
|
|
||||||
return admin.getIps();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return FUtil.getPlayerList();
|
return FUtil.getPlayerList();
|
||||||
|
@ -1,23 +0,0 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.History;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, source = SourceType.BOTH)
|
|
||||||
@CommandParameters(description = "Check the name history of a specified player.", usage = "/<command> <username>", aliases = "nh")
|
|
||||||
public class Command_namehistory extends FreedomCommand
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public boolean run(final CommandSender sender, final Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
|
||||||
{
|
|
||||||
if (args.length != 1)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
History.reportHistory(sender, args[0]);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -74,11 +74,11 @@ public class Command_nickfilter extends FreedomCommand
|
|||||||
|
|
||||||
player = getPlayerByDisplayName(displayName);
|
player = getPlayerByDisplayName(displayName);
|
||||||
|
|
||||||
if (player == null || plugin.al.isVanished(player.getName()) && !plugin.al.isAdmin(sender))
|
if (player == null || plugin.al.isVanished(player.getUniqueId()) && !plugin.al.isAdmin(sender))
|
||||||
{
|
{
|
||||||
player = getPlayerByDisplayNameAlt(displayName);
|
player = getPlayerByDisplayNameAlt(displayName);
|
||||||
|
|
||||||
if (player == null || !plugin.al.isVanished(player.getName()) && !plugin.al.isAdmin(sender))
|
if (player == null || !plugin.al.isVanished(player.getUniqueId()) && !plugin.al.isAdmin(sender))
|
||||||
{
|
{
|
||||||
msg("Can't find player by nickname: " + displayName);
|
msg("Can't find player by nickname: " + displayName);
|
||||||
return true;
|
return true;
|
||||||
|
@ -15,10 +15,15 @@ import org.bukkit.entity.Player;
|
|||||||
@CommandParameters(description = "Essentials Interface Command - Rainbowify your nickname.", usage = "/<command> <hex> <hex> <nick>", aliases = "nickgr")
|
@CommandParameters(description = "Essentials Interface Command - Rainbowify your nickname.", usage = "/<command> <hex> <hex> <nick>", aliases = "nickgr")
|
||||||
public class Command_nickgradient extends FreedomCommand
|
public class Command_nickgradient extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
{
|
{
|
||||||
|
if (!server.getPluginManager().isPluginEnabled("Essentials"))
|
||||||
|
{
|
||||||
|
msg("Essentials is not enabled on this server.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (args.length != 3)
|
if (args.length != 3)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@ -2,20 +2,25 @@ package me.totalfreedom.totalfreedommod.command;
|
|||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
|
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
|
||||||
@CommandParameters(description = "Essentials Interface Command - Randomize the colors of your nickname.", usage = "/<command> <<nick> | off>")
|
@CommandParameters(description = "Essentials Interface Command - Randomize the colors of your nickname.", usage = "/<command> <<nick> | off>")
|
||||||
public class Command_nicknyan extends FreedomCommand
|
public class Command_nicknyan extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
{
|
{
|
||||||
|
if (!server.getPluginManager().isPluginEnabled("Essentials"))
|
||||||
|
{
|
||||||
|
msg("Essentials is not enabled on this server.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (args.length != 1)
|
if (args.length != 1)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
@ -41,32 +46,24 @@ public class Command_nicknyan extends FreedomCommand
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Player player : Bukkit.getOnlinePlayers())
|
|
||||||
|
if (server.getOnlinePlayers().stream().anyMatch(player -> player != playerSender
|
||||||
|
&& (player.getName().equalsIgnoreCase(nickPlain)
|
||||||
|
|| ChatColor.stripColor(plugin.esb.getNickname(player.getName())).trim().equalsIgnoreCase(nickPlain))))
|
||||||
{
|
{
|
||||||
if (player == playerSender)
|
msg("That nickname is already in use.");
|
||||||
{
|
return true;
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (player.getName().equalsIgnoreCase(nickPlain) || ChatColor.stripColor(player.getDisplayName()).trim().equalsIgnoreCase(nickPlain))
|
|
||||||
{
|
|
||||||
msg("That nickname is already in use.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
final StringBuilder newNick = new StringBuilder();
|
final StringBuilder newNick = new StringBuilder();
|
||||||
|
Arrays.stream(nickPlain.chars().toArray()).forEach(character -> newNick.append(FUtil.randomChatColor())
|
||||||
final char[] chars = nickPlain.toCharArray();
|
.append(Character.toString(character)));
|
||||||
for (char c : chars)
|
|
||||||
{
|
|
||||||
newNick.append(FUtil.randomChatColor()).append(c);
|
|
||||||
}
|
|
||||||
|
|
||||||
newNick.append(ChatColor.WHITE);
|
newNick.append(ChatColor.WHITE);
|
||||||
|
|
||||||
plugin.esb.setNickname(sender.getName(), newNick.toString());
|
plugin.esb.setNickname(sender.getName(), newNick.toString());
|
||||||
|
|
||||||
msg("Your nickname is now: " + newNick.toString());
|
msg("Your nickname is now: " + newNick);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -12,10 +12,15 @@ import org.bukkit.entity.Player;
|
|||||||
@CommandParameters(description = "Essentials Interface Command - Rainbowify your nickname.", usage = "/<command> <nick>")
|
@CommandParameters(description = "Essentials Interface Command - Rainbowify your nickname.", usage = "/<command> <nick>")
|
||||||
public class Command_nickrainbow extends FreedomCommand
|
public class Command_nickrainbow extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
{
|
{
|
||||||
|
if (!server.getPluginManager().isPluginEnabled("Essentials"))
|
||||||
|
{
|
||||||
|
msg("Essentials is not enabled on this server.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (args.length != 1)
|
if (args.length != 1)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@ -116,8 +116,12 @@ public class Command_notes extends FreedomCommand
|
|||||||
msg("Cleared " + count + " notes.", ChatColor.GREEN);
|
msg("Cleared " + count + " notes.", ChatColor.GREEN);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -33,16 +33,14 @@ public class Command_op extends FreedomCommand
|
|||||||
List<String> matchedPlayerNames = new ArrayList<>();
|
List<String> matchedPlayerNames = new ArrayList<>();
|
||||||
for (final Player player : server.getOnlinePlayers())
|
for (final Player player : server.getOnlinePlayers())
|
||||||
{
|
{
|
||||||
if (player.getName().toLowerCase().contains(targetName) || player.getDisplayName().toLowerCase().contains(targetName)
|
if ((player.getName().toLowerCase().contains(targetName) || player.getDisplayName().toLowerCase().contains(targetName)
|
||||||
|| player.getName().contains(targetName) || player.getDisplayName().contains(targetName))
|
|| player.getName().contains(targetName) || player.getDisplayName().contains(targetName)) &&
|
||||||
|
!player.isOp() && !plugin.al.isVanished(player.getUniqueId()))
|
||||||
{
|
{
|
||||||
if (!player.isOp() && !plugin.al.isVanished(player.getName()))
|
matchedPlayerNames.add(player.getName());
|
||||||
{
|
player.setOp(true);
|
||||||
matchedPlayerNames.add(player.getName());
|
msg(player, YOU_ARE_OP);
|
||||||
player.setOp(true);
|
plugin.rm.updateDisplay(player);
|
||||||
msg(player, YOU_ARE_OP);
|
|
||||||
plugin.rm.updateDisplay(player);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,13 +10,12 @@ import org.bukkit.entity.Player;
|
|||||||
@CommandParameters(description = "OP everyone on the server.", usage = "/<command>")
|
@CommandParameters(description = "OP everyone on the server.", usage = "/<command>")
|
||||||
public class Command_opall extends FreedomCommand
|
public class Command_opall extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
{
|
{
|
||||||
FUtil.adminAction(sender.getName(), "Opping all players on the server", false);
|
FUtil.adminAction(sender.getName(), "Opping all players on the server", false);
|
||||||
|
|
||||||
for (Player player : server.getOnlinePlayers())
|
server.getOnlinePlayers().forEach(player ->
|
||||||
{
|
{
|
||||||
if (!player.isOp())
|
if (!player.isOp())
|
||||||
{
|
{
|
||||||
@ -24,7 +23,11 @@ public class Command_opall extends FreedomCommand
|
|||||||
msg(player, YOU_ARE_OP);
|
msg(player, YOU_ARE_OP);
|
||||||
plugin.rm.updateDisplay(player);
|
plugin.rm.updateDisplay(player);
|
||||||
}
|
}
|
||||||
}
|
else
|
||||||
|
{
|
||||||
|
player.recalculatePermissions();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
||||||
|
import me.totalfreedom.totalfreedommod.punishments.Punishment;
|
||||||
|
import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
@ -56,11 +58,13 @@ public class Command_orbit extends FreedomCommand
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FUtil.adminAction(sender.getName(), "Orbiting " + player.getName(), false);
|
||||||
|
|
||||||
player.setGameMode(GameMode.SURVIVAL);
|
player.setGameMode(GameMode.SURVIVAL);
|
||||||
playerdata.startOrbiting(strength);
|
playerdata.startOrbiting(strength);
|
||||||
|
|
||||||
player.setVelocity(new Vector(0, strength, 0));
|
player.setVelocity(new Vector(0, strength, 0));
|
||||||
FUtil.adminAction(sender.getName(), "Orbiting " + player.getName(), false);
|
|
||||||
|
plugin.pul.logPunishment(new Punishment(player.getName(), FUtil.getIp(player), sender.getName(), PunishmentType.ORBIT, null));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,114 +0,0 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
|
||||||
|
|
||||||
import com.google.common.base.Strings;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import me.totalfreedom.totalfreedommod.admin.Admin;
|
|
||||||
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.SENIOR_ADMIN, source = SourceType.ONLY_IN_GAME)
|
|
||||||
@CommandParameters(description = "Manage your Pterodactyl panel account", usage = "/<command> <create | delete>")
|
|
||||||
public class Command_panel extends FreedomCommand
|
|
||||||
{
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (!plugin.ptero.isEnabled())
|
|
||||||
{
|
|
||||||
msg("Pterodactyl integration is currently disabled.", ChatColor.RED);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
PlayerData playerData = getData(playerSender);
|
|
||||||
|
|
||||||
if (playerData.getDiscordID() == null)
|
|
||||||
{
|
|
||||||
msg("You must have a linked discord account.", ChatColor.RED);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args.length == 0)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args[0].equalsIgnoreCase("create"))
|
|
||||||
{
|
|
||||||
msg("Creating your Pterodactyl account...", ChatColor.GREEN);
|
|
||||||
Admin admin = getAdmin(playerSender);
|
|
||||||
|
|
||||||
if (admin.getPteroID() != null)
|
|
||||||
{
|
|
||||||
msg("You already have a Pterodactyl account.", ChatColor.RED);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
String username = sender.getName();
|
|
||||||
String password = FUtil.randomString(30);
|
|
||||||
|
|
||||||
String id = plugin.ptero.createAccount(username, password);
|
|
||||||
if (Strings.isNullOrEmpty(id))
|
|
||||||
{
|
|
||||||
msg("Failed to create your Pterodactyl account.", ChatColor.RED);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
plugin.ptero.addAccountToServer(id);
|
|
||||||
|
|
||||||
admin.setPteroID(id);
|
|
||||||
plugin.al.save(admin);
|
|
||||||
plugin.al.updateTables();
|
|
||||||
|
|
||||||
plugin.dc.sendPteroInfo(playerData, username, password);
|
|
||||||
msg("Successfully created your Pterodactyl account. Check your DMs from " + plugin.dc.formatBotTag() + " on discord to get your credentials.", ChatColor.GREEN);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else if (args[0].equalsIgnoreCase("delete"))
|
|
||||||
{
|
|
||||||
msg("Deleting your Pterodactyl account...", ChatColor.GREEN);
|
|
||||||
Admin admin = getAdmin(playerSender);
|
|
||||||
|
|
||||||
if (admin.getPteroID() == null)
|
|
||||||
{
|
|
||||||
msg("You do not have a Pterodactyl account.", ChatColor.RED);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean deleted = plugin.ptero.deleteAccount(admin.getPteroID());
|
|
||||||
|
|
||||||
if (!deleted)
|
|
||||||
{
|
|
||||||
msg("Failed to delete your Pterodactyl account.", ChatColor.RED);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
admin.setPteroID(null);
|
|
||||||
plugin.al.save(admin);
|
|
||||||
plugin.al.updateTables();
|
|
||||||
|
|
||||||
msg("Successfully deleted your Pterodactyl account.", ChatColor.GREEN);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args)
|
|
||||||
{
|
|
||||||
if (args.length == 1 && plugin.al.isSeniorAdmin(sender))
|
|
||||||
{
|
|
||||||
return Arrays.asList("create", "delete");
|
|
||||||
}
|
|
||||||
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,158 +0,0 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
|
||||||
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
|
|
||||||
@CommandParameters(description = "Manage your verification", usage = "/<command> <enable | disable | clearips | clearip <ip> | status | genbackupcodes>", aliases = "playerverify,pv")
|
|
||||||
public class Command_playerverification extends FreedomCommand
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
|
||||||
{
|
|
||||||
PlayerData target = plugin.pl.getData(playerSender);
|
|
||||||
boolean verificationEnabled = ConfigEntry.DISCORD_VERIFICATION.getBoolean();
|
|
||||||
List<String> ips = new ArrayList<>(target.getIps());
|
|
||||||
|
|
||||||
if (verificationEnabled)
|
|
||||||
{
|
|
||||||
if (args.length == 1)
|
|
||||||
{
|
|
||||||
if (args[0].equalsIgnoreCase("clearips"))
|
|
||||||
{
|
|
||||||
int cleared = 0;
|
|
||||||
for (String ip : ips)
|
|
||||||
{
|
|
||||||
if (!ip.equals(FUtil.getIp(playerSender)))
|
|
||||||
{
|
|
||||||
target.removeIp(ip);
|
|
||||||
cleared++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
msg("Cleared all IP's except your current IP \"" + FUtil.getIp(playerSender) + "\"");
|
|
||||||
msg("Cleared " + cleared + " IP's.");
|
|
||||||
plugin.pl.save(target);
|
|
||||||
plugin.pl.syncIps(target);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else if (args[0].equalsIgnoreCase("clearip"))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args.length < 1)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
PlayerData data = plugin.pl.getData(playerSender);
|
|
||||||
|
|
||||||
switch (args[0].toLowerCase())
|
|
||||||
{
|
|
||||||
case "enable":
|
|
||||||
{
|
|
||||||
if (!plugin.dc.enabled)
|
|
||||||
{
|
|
||||||
msg("The Discord verification system is currently disabled.", ChatColor.RED);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else if (data.hasVerification())
|
|
||||||
{
|
|
||||||
msg("Discord verification is already enabled for you.", ChatColor.RED);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else if (data.getDiscordID() == null)
|
|
||||||
{
|
|
||||||
msg("Please link a discord account with /linkdiscord.", ChatColor.RED);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
data.setVerification(true);
|
|
||||||
plugin.pl.save(data);
|
|
||||||
msg("Re-enabled Discord verification.", ChatColor.GREEN);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case "disable":
|
|
||||||
{
|
|
||||||
if (!data.hasVerification())
|
|
||||||
{
|
|
||||||
msg("Discord verification is already disabled for you.", ChatColor.RED);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
data.setVerification(false);
|
|
||||||
plugin.pl.save(data);
|
|
||||||
msg("Disabled Discord verification.", ChatColor.GREEN);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case "status":
|
|
||||||
{
|
|
||||||
boolean enabled = target.hasVerification();
|
|
||||||
boolean specified = target.getDiscordID() != null;
|
|
||||||
msg(ChatColor.GRAY + "Discord Verification Enabled: " + (enabled ? ChatColor.GREEN + "true" : ChatColor.RED + "false"));
|
|
||||||
msg(ChatColor.GRAY + "Discord ID: " + (specified ? ChatColor.GREEN + target.getDiscordID() : ChatColor.RED + "not set"));
|
|
||||||
msg(ChatColor.GRAY + "Backup Codes: " + data.getBackupCodes().size() + "/" + "10");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
case "genbackupcodes":
|
|
||||||
{
|
|
||||||
if (!plugin.dc.enabled)
|
|
||||||
{
|
|
||||||
msg("The Discord verification system is currently disabled.", ChatColor.RED);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else if (!data.hasVerification())
|
|
||||||
{
|
|
||||||
msg("Discord verification is not enabled for you.", ChatColor.RED);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean generated = plugin.dc.sendBackupCodes(data);
|
|
||||||
|
|
||||||
if (generated)
|
|
||||||
{
|
|
||||||
msg("Your backup codes have been sent to your discord account. They can be re-generated at anytime.", ChatColor.GREEN);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
msg("Failed to generate backup codes, please contact a developer.", ChatColor.RED);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
msg("The Discord verification system is currently disabled.", ChatColor.RED);
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args)
|
|
||||||
{
|
|
||||||
if (args.length == 1)
|
|
||||||
{
|
|
||||||
return Arrays.asList("enable", "disable", "status", "clearips", "genbackupcodes");
|
|
||||||
}
|
|
||||||
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,9 +1,6 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
@ -17,116 +14,109 @@ import org.bukkit.plugin.PluginManager;
|
|||||||
@CommandParameters(description = "Enable, disable, or reload a specified plugin, as well as list all plugins on the server.", usage = "/<command> <<enable | disable | reload> <pluginname>> | list>", aliases = "plc")
|
@CommandParameters(description = "Enable, disable, or reload a specified plugin, as well as list all plugins on the server.", usage = "/<command> <<enable | disable | reload> <pluginname>> | list>", aliases = "plc")
|
||||||
public class Command_plugincontrol extends FreedomCommand
|
public class Command_plugincontrol extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
private final List<String> UNTOUCHABLE_PLUGINS = Arrays.asList(plugin.getName());
|
private final List<String> UNTOUCHABLE_PLUGINS = Arrays.asList(plugin.getName());
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
{
|
{
|
||||||
if (args.length == 0 || args.length > 2)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
final PluginManager pm = server.getPluginManager();
|
final PluginManager pm = server.getPluginManager();
|
||||||
|
|
||||||
if (args.length == 1)
|
/* This is the way it is because there was too much "if the arguments aren't enough then return false" in the
|
||||||
|
* original code in addition to the stupid amount of "if something isn't right then do some boilerplate stuff
|
||||||
|
* then return true". Codacy complained, so I aggressively optimized this to keep it quiet. */
|
||||||
|
switch (args.length)
|
||||||
{
|
{
|
||||||
if (args[0].equalsIgnoreCase("list"))
|
case 1 ->
|
||||||
{
|
{
|
||||||
for (Plugin serverPlugin : pm.getPlugins())
|
if (args[0].equalsIgnoreCase("list"))
|
||||||
{
|
{
|
||||||
final String version = serverPlugin.getDescription().getVersion();
|
Arrays.stream(pm.getPlugins()).forEach(pl ->
|
||||||
msg(ChatColor.GRAY + "- " + (serverPlugin.isEnabled() ? ChatColor.GREEN : ChatColor.RED) + serverPlugin.getName()
|
{
|
||||||
+ ChatColor.GOLD + (!version.isEmpty() ? " v" + version : "") + " by "
|
final String version = pl.getDescription().getVersion();
|
||||||
+ StringUtils.join(serverPlugin.getDescription().getAuthors(), ", "));
|
msg(ChatColor.GRAY + "- " + (pl.isEnabled() ? ChatColor.GREEN : ChatColor.RED) + pl.getName()
|
||||||
|
+ ChatColor.GOLD + (!version.isEmpty() ? " v" + version : "") + " by "
|
||||||
|
+ StringUtils.join(pl.getDescription().getAuthors(), ", "));
|
||||||
|
});
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
case 2 ->
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args[0].equals("enable"))
|
|
||||||
{
|
|
||||||
final Plugin target = getPlugin(args[1]);
|
|
||||||
if (target == null)
|
|
||||||
{
|
{
|
||||||
msg("Plugin not found!");
|
Plugin pl = pm.getPlugin(args[1]);
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (target.isEnabled())
|
if (pl != null)
|
||||||
|
{
|
||||||
|
switch (args[0].toLowerCase())
|
||||||
|
{
|
||||||
|
case "enable" ->
|
||||||
|
{
|
||||||
|
if (pl.isEnabled())
|
||||||
|
{
|
||||||
|
msg(pl.getName() + " is already enabled.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
pm.enablePlugin(pl);
|
||||||
|
|
||||||
|
if (pl.isEnabled())
|
||||||
|
{
|
||||||
|
msg(pl.getName() + " is now enabled.");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
msg("An error occurred whilst attempting to enable " + pl.getName() + ".");
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
case "disable" ->
|
||||||
|
{
|
||||||
|
if (!pl.isEnabled())
|
||||||
|
{
|
||||||
|
msg(pl.getName() + " is already disabled.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (UNTOUCHABLE_PLUGINS.contains(pl.getName()))
|
||||||
|
{
|
||||||
|
msg(pl.getName() + " can't be disabled.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
pm.disablePlugin(pl);
|
||||||
|
|
||||||
|
msg(pl.getName() + " is now disabled.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
case "reload" ->
|
||||||
|
{
|
||||||
|
if (UNTOUCHABLE_PLUGINS.contains(pl.getName()))
|
||||||
|
{
|
||||||
|
msg(pl.getName() + " can't be reloaded.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
pm.disablePlugin(pl);
|
||||||
|
pm.enablePlugin(pl);
|
||||||
|
|
||||||
|
msg(pl.getName() + " has been reloaded.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
default ->
|
||||||
|
{
|
||||||
|
// Do nothing. This is here to please Codacy.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
msg("Plugin not found!");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
default ->
|
||||||
{
|
{
|
||||||
msg("Plugin is already enabled.");
|
// Ditto
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pm.enablePlugin(target);
|
|
||||||
|
|
||||||
if (!pm.isPluginEnabled(target))
|
|
||||||
{
|
|
||||||
msg("Error enabling plugin " + target.getName());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
msg(target.getName() + " is now enabled.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args[0].equals("disable"))
|
|
||||||
{
|
|
||||||
final Plugin target = getPlugin(args[1]);
|
|
||||||
if (target == null)
|
|
||||||
{
|
|
||||||
msg("Plugin not found!");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!target.isEnabled())
|
|
||||||
{
|
|
||||||
msg("Plugin is already disabled.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (UNTOUCHABLE_PLUGINS.contains(target.getName()))
|
|
||||||
{
|
|
||||||
msg("You cannot disable " + target.getName());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
pm.disablePlugin(target);
|
|
||||||
|
|
||||||
if (pm.isPluginEnabled(target))
|
|
||||||
{
|
|
||||||
msg("Error disabling plugin " + target.getName());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
msg(target.getName() + " is now disabled.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args[0].equals("reload"))
|
|
||||||
{
|
|
||||||
final Plugin target = getPlugin(args[1]);
|
|
||||||
if (target == null)
|
|
||||||
{
|
|
||||||
msg("Plugin not found!");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (UNTOUCHABLE_PLUGINS.contains(target.getName()))
|
|
||||||
{
|
|
||||||
msg("You cannot reload " + target.getName());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
pm.disablePlugin(target);
|
|
||||||
pm.enablePlugin(target);
|
|
||||||
msg(target.getName() + " reloaded.");
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
@ -143,51 +133,12 @@ public class Command_plugincontrol extends FreedomCommand
|
|||||||
{
|
{
|
||||||
return Arrays.asList("enable", "disable", "reload", "list");
|
return Arrays.asList("enable", "disable", "reload", "list");
|
||||||
}
|
}
|
||||||
else if (args.length == 2)
|
else if (args.length == 2 && !args[0].equalsIgnoreCase("list"))
|
||||||
{
|
{
|
||||||
if (!args[0].equals("list"))
|
return Arrays.stream(server.getPluginManager().getPlugins()).map(Plugin::getName)
|
||||||
{
|
.filter(pl -> !UNTOUCHABLE_PLUGINS.contains(pl)).toList();
|
||||||
return getAllPluginNames();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
public List<String> getAllPluginNames()
|
|
||||||
{
|
|
||||||
List<String> names = new ArrayList<>();
|
|
||||||
for (Plugin plugin : server.getPluginManager().getPlugins())
|
|
||||||
{
|
|
||||||
if (!UNTOUCHABLE_PLUGINS.contains(plugin.getName()))
|
|
||||||
{
|
|
||||||
names.add(plugin.getName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
names.remove(plugin.getName());
|
|
||||||
return names;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Plugin getPlugin(String name)
|
|
||||||
{
|
|
||||||
for (Plugin serverPlugin : server.getPluginManager().getPlugins())
|
|
||||||
{
|
|
||||||
if (serverPlugin.getName().equalsIgnoreCase(name))
|
|
||||||
{
|
|
||||||
return serverPlugin;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (name.length() >= 3)
|
|
||||||
{
|
|
||||||
for (Plugin serverPlugin : server.getPluginManager().getPlugins())
|
|
||||||
{
|
|
||||||
if (serverPlugin.getName().toLowerCase().contains(name.toLowerCase()))
|
|
||||||
{
|
|
||||||
return serverPlugin;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
@ -6,7 +6,6 @@ import java.util.Collections;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import org.apache.commons.lang.StringUtils;
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@ -21,25 +20,17 @@ import org.bukkit.potion.PotionEffectType;
|
|||||||
aliases = "effect")
|
aliases = "effect")
|
||||||
public class Command_potion extends FreedomCommand
|
public class Command_potion extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
@Override
|
@Override
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
{
|
{
|
||||||
switch (args.length)
|
switch (args.length)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1:
|
||||||
|
{
|
||||||
if (args[0].equalsIgnoreCase("list"))
|
if (args[0].equalsIgnoreCase("list"))
|
||||||
{
|
{
|
||||||
List<String> potionEffectTypeNames = new ArrayList<>();
|
msg("Potion effect types: " + FUtil.listToString(Arrays.stream(PotionEffectType.values())
|
||||||
for (PotionEffectType potion_effect_type : PotionEffectType.values())
|
.map(PotionEffectType::getName).toList()), ChatColor.AQUA);
|
||||||
{
|
|
||||||
if (potion_effect_type != null)
|
|
||||||
{
|
|
||||||
potionEffectTypeNames.add(potion_effect_type.getName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
msg("Potion effect types: " + StringUtils.join(potionEffectTypeNames, ", "), ChatColor.AQUA);
|
|
||||||
}
|
}
|
||||||
else if (args[0].equalsIgnoreCase("clearall"))
|
else if (args[0].equalsIgnoreCase("clearall"))
|
||||||
{
|
{
|
||||||
@ -49,17 +40,14 @@ public class Command_potion extends FreedomCommand
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
FUtil.adminAction(sender.getName(), "Cleared all potion effects from all players", true);
|
FUtil.adminAction(sender.getName(), "Clearing all potion effects from all players", true);
|
||||||
for (Player target : server.getOnlinePlayers())
|
server.getOnlinePlayers().forEach(target -> target.getActivePotionEffects().forEach(effect ->
|
||||||
{
|
target.removePotionEffect(effect.getType())));
|
||||||
for (PotionEffect potion_effect : target.getActivePotionEffects())
|
|
||||||
{
|
|
||||||
target.removePotionEffect(potion_effect.getType());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
|
{
|
||||||
if (args[0].equalsIgnoreCase("clear"))
|
if (args[0].equalsIgnoreCase("clear"))
|
||||||
{
|
{
|
||||||
Player target = playerSender;
|
Player target = playerSender;
|
||||||
@ -83,7 +71,7 @@ public class Command_potion extends FreedomCommand
|
|||||||
|
|
||||||
if (target == null)
|
if (target == null)
|
||||||
{
|
{
|
||||||
msg(FreedomCommand.PLAYER_NOT_FOUND, ChatColor.RED);
|
msg(PLAYER_NOT_FOUND, ChatColor.RED);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,12 +80,15 @@ public class Command_potion extends FreedomCommand
|
|||||||
target.removePotionEffect(potion_effect.getType());
|
target.removePotionEffect(potion_effect.getType());
|
||||||
}
|
}
|
||||||
|
|
||||||
msg("Cleared all active potion effects " + (!target.equals(playerSender) ? "from player " + target.getName() + "." : "from yourself."), ChatColor.AQUA);
|
msg("Cleared all active potion effects " + (!target.equals(playerSender) ? "from player "
|
||||||
|
+ target.getName() + "." : "from yourself."), ChatColor.AQUA);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
case 5:
|
case 5:
|
||||||
|
{
|
||||||
if (args[0].equalsIgnoreCase("add"))
|
if (args[0].equalsIgnoreCase("add"))
|
||||||
{
|
{
|
||||||
Player target = playerSender;
|
Player target = playerSender;
|
||||||
@ -112,7 +103,7 @@ public class Command_potion extends FreedomCommand
|
|||||||
|
|
||||||
target = getPlayer(args[4]);
|
target = getPlayer(args[4]);
|
||||||
|
|
||||||
if (target == null || plugin.al.isVanished(target.getName()) && !plugin.al.isAdmin(sender))
|
if (target == null || plugin.al.isVanished(target.getUniqueId()) && !plugin.al.isAdmin(sender))
|
||||||
{
|
{
|
||||||
msg(PLAYER_NOT_FOUND);
|
msg(PLAYER_NOT_FOUND);
|
||||||
return true;
|
return true;
|
||||||
@ -127,48 +118,48 @@ public class Command_potion extends FreedomCommand
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PotionEffectType potion_effect_type = PotionEffectType.getByName(args[1]);
|
PotionEffectType effectType = PotionEffectType.getByName(args[1]);
|
||||||
if (potion_effect_type == null)
|
if (effectType == null)
|
||||||
{
|
{
|
||||||
msg("Invalid potion effect type.", ChatColor.AQUA);
|
msg("Invalid potion effect: " + args[1], ChatColor.AQUA);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int duration;
|
int duration;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
duration = Integer.parseInt(args[2]);
|
duration = Math.min(Integer.parseInt(args[2]), 100000);
|
||||||
duration = Math.min(duration, 100000);
|
|
||||||
}
|
}
|
||||||
catch (NumberFormatException ex)
|
catch (NumberFormatException ex)
|
||||||
{
|
{
|
||||||
msg("Invalid potion duration.", ChatColor.RED);
|
msg("Invalid duration: " + args[2], ChatColor.RED);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
int amplifier;
|
int amplifier;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
amplifier = Integer.parseInt(args[3]);
|
amplifier = Math.min(Integer.parseInt(args[3]), 100000);
|
||||||
amplifier = Math.min(amplifier, 100000);
|
|
||||||
}
|
}
|
||||||
catch (NumberFormatException ex)
|
catch (NumberFormatException ex)
|
||||||
{
|
{
|
||||||
msg("Invalid potion amplifier.", ChatColor.RED);
|
msg("Invalid potion amplifier: " + args[3], ChatColor.RED);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
PotionEffect new_effect = potion_effect_type.createEffect(duration, amplifier);
|
PotionEffect new_effect = effectType.createEffect(duration, amplifier);
|
||||||
target.addPotionEffect(new_effect, true);
|
target.addPotionEffect(new_effect);
|
||||||
msg(
|
msg("Added potion effect: " + new_effect.getType().getName()
|
||||||
"Added potion effect: " + new_effect.getType().getName()
|
+ ", Duration: " + new_effect.getDuration()
|
||||||
+ ", Duration: " + new_effect.getDuration()
|
+ ", Amplifier: " + new_effect.getAmplifier()
|
||||||
+ ", Amplifier: " + new_effect.getAmplifier()
|
+ (!target.equals(playerSender) ? " to player " + target.getName() + "." : " to yourself."), ChatColor.AQUA);
|
||||||
+ (!target.equals(playerSender) ? " to player " + target.getName() + "." : " to yourself."), ChatColor.AQUA);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
|
{
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -178,66 +169,55 @@ public class Command_potion extends FreedomCommand
|
|||||||
{
|
{
|
||||||
switch (args.length)
|
switch (args.length)
|
||||||
{
|
{
|
||||||
case 1:
|
case 1 ->
|
||||||
|
{
|
||||||
List<String> arguments = new ArrayList<>(Arrays.asList("list", "clear", "add"));
|
List<String> arguments = new ArrayList<>(Arrays.asList("list", "clear", "add"));
|
||||||
if (plugin.al.isAdmin(sender))
|
if (plugin.al.isAdmin(sender))
|
||||||
{
|
{
|
||||||
arguments.add("clearall");
|
arguments.add("clearall");
|
||||||
}
|
}
|
||||||
return arguments;
|
return arguments;
|
||||||
|
}
|
||||||
case 2:
|
case 2 ->
|
||||||
if (args[0].equals("clear"))
|
{
|
||||||
|
if (args[0].equalsIgnoreCase("clear"))
|
||||||
{
|
{
|
||||||
if (plugin.al.isAdmin(sender))
|
if (plugin.al.isAdmin(sender))
|
||||||
{
|
{
|
||||||
return FUtil.getPlayerList();
|
return FUtil.getPlayerList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (args[0].equals("add"))
|
else if (args[0].equalsIgnoreCase("add"))
|
||||||
{
|
{
|
||||||
return getAllPotionTypes();
|
return Arrays.stream(PotionEffectType.values()).map(PotionEffectType::getName).toList();
|
||||||
}
|
}
|
||||||
break;
|
}
|
||||||
|
case 3 ->
|
||||||
case 3:
|
{
|
||||||
if (args[0].equals("add"))
|
if (args[0].equalsIgnoreCase("add"))
|
||||||
{
|
{
|
||||||
return Collections.singletonList("<duration>");
|
return Collections.singletonList("<duration>");
|
||||||
}
|
}
|
||||||
break;
|
}
|
||||||
|
case 4 ->
|
||||||
case 4:
|
{
|
||||||
if (args[0].equals("add"))
|
if (args[0].equalsIgnoreCase("add"))
|
||||||
{
|
{
|
||||||
return Collections.singletonList("<amplifier>");
|
return Collections.singletonList("<amplifier>");
|
||||||
}
|
}
|
||||||
break;
|
}
|
||||||
|
case 5 ->
|
||||||
case 5:
|
{
|
||||||
if (plugin.al.isAdmin(sender))
|
if (plugin.al.isAdmin(sender) && args[0].equalsIgnoreCase("add"))
|
||||||
{
|
{
|
||||||
if (args[0].equals("add"))
|
return FUtil.getPlayerList();
|
||||||
{
|
|
||||||
return FUtil.getPlayerList();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
}
|
||||||
|
default ->
|
||||||
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> getAllPotionTypes()
|
|
||||||
{
|
|
||||||
List<String> types = new ArrayList<>();
|
|
||||||
for (PotionEffectType potionEffectType : PotionEffectType.values())
|
|
||||||
{
|
|
||||||
if (potionEffectType != null)
|
|
||||||
{
|
|
||||||
types.add(potionEffectType.getName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return types;
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -1,41 +0,0 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.entity.EntityType;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
|
|
||||||
@CommandParameters(description = "Release parrots from your shoulders.", usage = "/<command>", aliases = "removeparrots")
|
|
||||||
public class Command_releaseparrots extends FreedomCommand
|
|
||||||
{
|
|
||||||
|
|
||||||
@SuppressWarnings("deprecation")
|
|
||||||
@Override
|
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
|
||||||
{
|
|
||||||
Entity leftShoulderEntity = playerSender.getShoulderEntityLeft();
|
|
||||||
Entity rightShoulderEntity = playerSender.getShoulderEntityRight();
|
|
||||||
|
|
||||||
if (rightShoulderEntity == null && leftShoulderEntity == null)
|
|
||||||
{
|
|
||||||
msg("No parrots were detected on either of your shoulders.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (leftShoulderEntity != null && leftShoulderEntity.getType().equals(EntityType.PARROT))
|
|
||||||
{
|
|
||||||
playerSender.setShoulderEntityLeft(null);
|
|
||||||
msg("Removed the parrot on your left shoulder.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rightShoulderEntity != null && rightShoulderEntity.getType().equals(EntityType.PARROT))
|
|
||||||
{
|
|
||||||
playerSender.setShoulderEntityRight(null);
|
|
||||||
msg("Removed the parrot on your right shoulder.");
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,17 +1,37 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
import org.apache.commons.lang.ArrayUtils;
|
import org.apache.commons.lang.ArrayUtils;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME, blockHostConsole = true)
|
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME, blockHostConsole = true)
|
||||||
@CommandParameters(description = "Report a player for all admins to see.", usage = "/<command> <player> <reason>")
|
@CommandParameters(description = "Report a player for all admins to see.", usage = "/<command> <player> <reason>")
|
||||||
public class Command_report extends FreedomCommand
|
public class Command_report extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
private void handleLog(final @Nullable Boolean value, final @Nullable Throwable ex, final CommandSender sender)
|
||||||
|
{
|
||||||
|
if (ex != null)
|
||||||
|
{
|
||||||
|
sender.sendMessage(Component.text("An error occurred while attempting to log your previously filed report to a Discord channel.", NamedTextColor.RED));
|
||||||
|
ex.printStackTrace();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Boolean.FALSE.equals(value))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
sender.sendMessage(Component.text("The report you previously filed has been successfully logged to a Discord channel. Please note that spamming reports is not allowed, and you will be sanctioned if you are found to be doing it.", NamedTextColor.GRAY));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
@ -22,41 +42,43 @@ public class Command_report extends FreedomCommand
|
|||||||
}
|
}
|
||||||
|
|
||||||
Player player = getPlayer(args[0], true);
|
Player player = getPlayer(args[0], true);
|
||||||
|
OfflinePlayer offlinePlayer = getOfflinePlayer(args[0]);
|
||||||
|
|
||||||
if (player == null)
|
if (player == null && offlinePlayer == null)
|
||||||
{
|
{
|
||||||
msg(PLAYER_NOT_FOUND);
|
msg(PLAYER_NOT_FOUND);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
else if (player != null)
|
||||||
if (sender instanceof Player)
|
|
||||||
{
|
{
|
||||||
if (player.equals(playerSender))
|
if (sender instanceof Player)
|
||||||
{
|
{
|
||||||
msg(ChatColor.RED + "Please, don't try to report yourself.");
|
if (player.equals(playerSender))
|
||||||
|
{
|
||||||
|
msg(ChatColor.RED + "Please, don't try to report yourself.");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (plugin.al.isAdmin(player))
|
||||||
|
{
|
||||||
|
msg(ChatColor.RED + "You can not report admins.");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (plugin.al.isAdmin(player))
|
|
||||||
{
|
|
||||||
msg(ChatColor.RED + "You can not report admins.");
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
String report = StringUtils.join(ArrayUtils.subarray(args, 1, args.length), " ");
|
String report = StringUtils.join(ArrayUtils.subarray(args, 1, args.length), " ");
|
||||||
plugin.cm.reportAction(playerSender, player, report);
|
String reportedUsername = (player == null) ? offlinePlayer.getName() : player.getName();
|
||||||
|
plugin.cm.reportAction(playerSender, reportedUsername, report);
|
||||||
|
|
||||||
boolean logged = false;
|
msg(ChatColor.GREEN + "Thank you, your report is being processed.");
|
||||||
|
|
||||||
if (plugin.dc.enabled)
|
if (plugin.dc.enabled)
|
||||||
{
|
{
|
||||||
logged = plugin.dc.sendReport(playerSender, player, report);
|
plugin.dc.sendReport(playerSender.getName(), reportedUsername, report).whenCompleteAsync((logged, ex) -> handleLog(logged, ex, sender));
|
||||||
}
|
}
|
||||||
|
|
||||||
msg(ChatColor.GREEN + "Thank you, your report has been successfully logged."
|
|
||||||
+ (logged ? ChatColor.RED + "\nNote: This report has been logged to a discord channel, as with any report system, spamming reports can lead to you getting banned." : ""));
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -84,19 +84,22 @@ public class Command_ride extends FreedomCommand
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args.length >= 2)
|
if (args.length >= 2 && args[0].equalsIgnoreCase("mode"))
|
||||||
{
|
{
|
||||||
if (args[0].equalsIgnoreCase("mode"))
|
try
|
||||||
{
|
{
|
||||||
if (args[1].equalsIgnoreCase("normal") || args[1].equalsIgnoreCase("off") || args[1].equalsIgnoreCase("ask"))
|
PlayerData.RideMode mode = PlayerData.RideMode.valueOf(args[1].toUpperCase());
|
||||||
{
|
PlayerData playerDataSender = plugin.pl.getData(playerSender);
|
||||||
PlayerData playerDataSender = plugin.pl.getData(playerSender);
|
playerDataSender.setRideMode(mode);
|
||||||
playerDataSender.setRideMode(args[1].toLowerCase());
|
plugin.pl.save(playerDataSender);
|
||||||
plugin.pl.save(playerDataSender);
|
msg("Ride mode is now set to " + mode.name().toLowerCase() + ".");
|
||||||
msg("Ride mode is now set to " + args[1].toLowerCase() + ".");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
catch (IllegalArgumentException ex)
|
||||||
|
{
|
||||||
|
msg("Invalid mode.", ChatColor.RED);
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
final Player player = getPlayer(args[0], true);
|
final Player player = getPlayer(args[0], true);
|
||||||
@ -114,13 +117,13 @@ public class Command_ride extends FreedomCommand
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (playerData.getRideMode().equals("off") && !isAdmin(sender))
|
if (playerData.getRideMode() == PlayerData.RideMode.OFF && !isAdmin(sender))
|
||||||
{
|
{
|
||||||
msg("That player cannot be ridden.", ChatColor.RED);
|
msg("That player cannot be ridden.", ChatColor.RED);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (playerData.getRideMode().equals("ask") && !FUtil.isExecutive(playerSender.getName()))
|
if (playerData.getRideMode() == PlayerData.RideMode.ASK && !FUtil.isExecutive(playerSender.getName()))
|
||||||
{
|
{
|
||||||
msg("Sent a request to the player.", ChatColor.GREEN);
|
msg("Sent a request to the player.", ChatColor.GREEN);
|
||||||
msg(player, sender.getName() + " has requested to ride you.", ChatColor.AQUA);
|
msg(player, sender.getName() + " has requested to ride you.", ChatColor.AQUA);
|
||||||
|
@ -5,6 +5,7 @@ import java.util.List;
|
|||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import me.totalfreedom.totalfreedommod.util.Groups;
|
import me.totalfreedom.totalfreedommod.util.Groups;
|
||||||
|
import net.coreprotect.CoreProtectAPI;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@ -22,7 +23,7 @@ import org.bukkit.entity.Player;
|
|||||||
public class Command_ro extends FreedomCommand
|
public class Command_ro extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
public static int replaceBlocks(Location center, Material fromMaterial, Material toMaterial, int radius)
|
private int removeBlocks(Location center, Material material, int radius, String user)
|
||||||
{
|
{
|
||||||
int affected = 0;
|
int affected = 0;
|
||||||
|
|
||||||
@ -35,11 +36,17 @@ public class Command_ro extends FreedomCommand
|
|||||||
{
|
{
|
||||||
Block block = centerBlock.getRelative(xOffset, yOffset, zOffset);
|
Block block = centerBlock.getRelative(xOffset, yOffset, zOffset);
|
||||||
BlockData data = block.getBlockData();
|
BlockData data = block.getBlockData();
|
||||||
|
CoreProtectAPI cpAPI = plugin.cpb.getCoreProtectAPI();
|
||||||
|
|
||||||
if (block.getLocation().distanceSquared(center) < (radius * radius))
|
if (block.getLocation().distanceSquared(center) < (radius * radius))
|
||||||
{
|
{
|
||||||
if (fromMaterial.equals(Material.WATER) && data instanceof Waterlogged)
|
if (material.equals(Material.WATER) && data instanceof Waterlogged waterloggedData)
|
||||||
{
|
{
|
||||||
Waterlogged waterloggedData = (Waterlogged)data;
|
if (cpAPI != null)
|
||||||
|
{
|
||||||
|
cpAPI.logRemoval(user, block.getLocation(), material, data);
|
||||||
|
}
|
||||||
|
|
||||||
if (waterloggedData.isWaterlogged())
|
if (waterloggedData.isWaterlogged())
|
||||||
{
|
{
|
||||||
waterloggedData.setWaterlogged(false);
|
waterloggedData.setWaterlogged(false);
|
||||||
@ -47,12 +54,18 @@ public class Command_ro extends FreedomCommand
|
|||||||
affected++;
|
affected++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
block.setType(toMaterial);
|
|
||||||
|
block.setType(Material.AIR);
|
||||||
affected++;
|
affected++;
|
||||||
}
|
}
|
||||||
else if (block.getType().equals(fromMaterial))
|
else if (block.getType().equals(material))
|
||||||
{
|
{
|
||||||
block.setType(toMaterial);
|
if (cpAPI != null)
|
||||||
|
{
|
||||||
|
cpAPI.logRemoval(user, block.getLocation(), material, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
block.setType(Material.AIR);
|
||||||
affected++;
|
affected++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -155,7 +168,7 @@ public class Command_ro extends FreedomCommand
|
|||||||
|
|
||||||
for (final Material material : materials)
|
for (final Material material : materials)
|
||||||
{
|
{
|
||||||
affected += replaceBlocks(player.getLocation(), material, Material.AIR, radius);
|
affected += removeBlocks(player.getLocation(), material, radius, sender.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -166,7 +179,7 @@ public class Command_ro extends FreedomCommand
|
|||||||
FUtil.adminAction(sender.getName(), "Removing all " + names + " within " + radius + " blocks of " + targetPlayer.getName(), false);
|
FUtil.adminAction(sender.getName(), "Removing all " + names + " within " + radius + " blocks of " + targetPlayer.getName(), false);
|
||||||
for (Material material : materials)
|
for (Material material : materials)
|
||||||
{
|
{
|
||||||
affected += replaceBlocks(targetPlayer.getLocation(), material, Material.AIR, radius);
|
affected += removeBlocks(targetPlayer.getLocation(), material, radius, sender.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -112,8 +112,6 @@ public class Command_saconfig extends FreedomCommand
|
|||||||
Discord.syncRoles(admin, plugin.pl.getData(admin.getName()).getDiscordID());
|
Discord.syncRoles(admin, plugin.pl.getData(admin.getName()).getDiscordID());
|
||||||
}
|
}
|
||||||
|
|
||||||
plugin.ptero.updateAccountStatus(admin);
|
|
||||||
|
|
||||||
msg("Set " + admin.getName() + "'s rank to " + rank.getName());
|
msg("Set " + admin.getName() + "'s rank to " + rank.getName());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -176,26 +174,18 @@ public class Command_saconfig extends FreedomCommand
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Find the old admin entry
|
// Find the old admin entry
|
||||||
String name = player.getName();
|
|
||||||
Admin admin = null;
|
Admin admin = null;
|
||||||
for (Admin loopAdmin : plugin.al.getAllAdmins())
|
for (Admin loopAdmin : plugin.al.getAllAdmins())
|
||||||
{
|
{
|
||||||
if (loopAdmin.getName().equalsIgnoreCase(name) || loopAdmin.getIps().contains(FUtil.getIp(player)))
|
if (loopAdmin.getUuid().equals(player.getUniqueId()))
|
||||||
{
|
{
|
||||||
admin = loopAdmin;
|
admin = loopAdmin;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (plugin.pl.isPlayerImpostor(player))
|
|
||||||
{
|
|
||||||
msg("This player was labeled as a Player impostor and is not an admin, therefore they cannot be added to the admin list.", ChatColor.RED);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (admin == null) // New admin
|
if (admin == null) // New admin
|
||||||
{
|
{
|
||||||
|
|
||||||
FUtil.adminAction(sender.getName(), "Adding " + player.getName() + " to the admin list", true);
|
FUtil.adminAction(sender.getName(), "Adding " + player.getName() + " to the admin list", true);
|
||||||
admin = new Admin(player);
|
admin = new Admin(player);
|
||||||
|
|
||||||
@ -205,23 +195,10 @@ public class Command_saconfig extends FreedomCommand
|
|||||||
else // Existing admin
|
else // Existing admin
|
||||||
{
|
{
|
||||||
FUtil.adminAction(sender.getName(), "Re-adding " + player.getName() + " to the admin list", true);
|
FUtil.adminAction(sender.getName(), "Re-adding " + player.getName() + " to the admin list", true);
|
||||||
|
|
||||||
String oldName = admin.getName();
|
|
||||||
if (!oldName.equals(player.getName()))
|
|
||||||
{
|
|
||||||
admin.setName(player.getName());
|
|
||||||
plugin.sql.updateAdminName(oldName, admin.getName());
|
|
||||||
}
|
|
||||||
admin.addIp(FUtil.getIp(player));
|
admin.addIp(FUtil.getIp(player));
|
||||||
|
|
||||||
admin.setActive(true);
|
admin.setActive(true);
|
||||||
admin.setLastLogin(new Date());
|
admin.setLastLogin(new Date());
|
||||||
|
|
||||||
if (plugin.al.isVerifiedAdmin(player))
|
|
||||||
{
|
|
||||||
plugin.al.verifiedNoAdmin.remove(player.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
plugin.al.save(admin);
|
plugin.al.save(admin);
|
||||||
plugin.al.updateTables();
|
plugin.al.updateTables();
|
||||||
plugin.rm.updateDisplay(player);
|
plugin.rm.updateDisplay(player);
|
||||||
@ -231,7 +208,6 @@ public class Command_saconfig extends FreedomCommand
|
|||||||
Discord.syncRoles(admin, plugin.pl.getData(player).getDiscordID());
|
Discord.syncRoles(admin, plugin.pl.getData(player).getDiscordID());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
plugin.ptero.updateAccountStatus(admin);
|
|
||||||
|
|
||||||
final FPlayer fPlayer = plugin.pl.getPlayer(player);
|
final FPlayer fPlayer = plugin.pl.getPlayer(player);
|
||||||
if (fPlayer.getFreezeData().isFrozen())
|
if (fPlayer.getFreezeData().isFrozen())
|
||||||
@ -259,6 +235,7 @@ public class Command_saconfig extends FreedomCommand
|
|||||||
checkRank(Rank.ADMIN);
|
checkRank(Rank.ADMIN);
|
||||||
|
|
||||||
Player player = getPlayer(args[1]);
|
Player player = getPlayer(args[1]);
|
||||||
|
|
||||||
Admin admin = player != null ? plugin.al.getAdmin(player) : plugin.al.getEntryByName(args[1]);
|
Admin admin = player != null ? plugin.al.getAdmin(player) : plugin.al.getEntryByName(args[1]);
|
||||||
|
|
||||||
if (admin == null)
|
if (admin == null)
|
||||||
@ -267,24 +244,24 @@ public class Command_saconfig extends FreedomCommand
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
String adminName = admin.getName();
|
||||||
|
|
||||||
FUtil.adminAction(sender.getName(), "Removing " + admin.getName() + " from the admin list", true);
|
FUtil.adminAction(sender.getName(), "Removing " + admin.getName() + " from the admin list", true);
|
||||||
admin.setActive(false);
|
admin.setActive(false);
|
||||||
|
|
||||||
plugin.al.save(admin);
|
plugin.al.save(admin);
|
||||||
plugin.al.updateTables();
|
plugin.al.updateTables();
|
||||||
|
|
||||||
if (player != null)
|
if (player != null)
|
||||||
{
|
{
|
||||||
plugin.rm.updateDisplay(player);
|
plugin.rm.updateDisplay(player);
|
||||||
plugin.pl.getPlayer(player).setAdminChat(false);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (plugin.dc.enabled && ConfigEntry.DISCORD_ROLE_SYNC.getBoolean())
|
if (plugin.dc.enabled && ConfigEntry.DISCORD_ROLE_SYNC.getBoolean())
|
||||||
{
|
{
|
||||||
Discord.syncRoles(admin, plugin.pl.getData(admin.getName()).getDiscordID());
|
Discord.syncRoles(admin, plugin.pl.getData(adminName).getDiscordID());
|
||||||
}
|
}
|
||||||
|
|
||||||
plugin.ptero.updateAccountStatus(admin);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -0,0 +1,66 @@
|
|||||||
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.event.ClickEvent;
|
||||||
|
import net.kyori.adventure.text.event.HoverEvent;
|
||||||
|
import net.kyori.adventure.text.format.NamedTextColor;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.generator.WorldInfo;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@CommandPermissions(level = Rank.NON_OP, source = SourceType.BOTH)
|
||||||
|
@CommandParameters(description = "Get the seed of the world you are currently in.", usage = "/seed [world]")
|
||||||
|
public class Command_seed extends FreedomCommand
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
|
{
|
||||||
|
World world;
|
||||||
|
|
||||||
|
if (args.length > 0)
|
||||||
|
{
|
||||||
|
world = server.getWorld(args[0]);
|
||||||
|
if (world == null)
|
||||||
|
{
|
||||||
|
msg("That world could not be found", ChatColor.RED);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// If the sender is a Player, use that world. Otherwise, use the overworld as a fallback.
|
||||||
|
if (!senderIsConsole)
|
||||||
|
{
|
||||||
|
world = playerSender.getWorld();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
world = server.getWorlds().get(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sender.sendMessage(Component.translatable("commands.seed.success",
|
||||||
|
Component.text("[", NamedTextColor.WHITE).append(Component.text(world.getSeed(), NamedTextColor.GREEN)
|
||||||
|
.clickEvent(ClickEvent.copyToClipboard(String.valueOf(world.getSeed())))
|
||||||
|
.hoverEvent(HoverEvent.showText(Component.translatable("chat.copy"))))
|
||||||
|
.append(Component.text("]"))));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args)
|
||||||
|
{
|
||||||
|
if (args.length == 1)
|
||||||
|
{
|
||||||
|
return server.getWorlds().stream().map(WorldInfo::getName).toList();
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
@ -1,49 +0,0 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
|
|
||||||
@CommandParameters(description = "Sets your experience level (XP).", usage = "/<command> [level]")
|
|
||||||
public class Command_setlevel extends FreedomCommand
|
|
||||||
{
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
|
||||||
{
|
|
||||||
if (args.length != 1)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
int new_level;
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
new_level = Integer.parseInt(args[0]);
|
|
||||||
|
|
||||||
if (new_level < 0)
|
|
||||||
{
|
|
||||||
new_level = 0;
|
|
||||||
}
|
|
||||||
else if (new_level > 50)
|
|
||||||
{
|
|
||||||
new_level = 50;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (NumberFormatException ex)
|
|
||||||
{
|
|
||||||
msg("Invalid level.", ChatColor.RED);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
playerSender.setLevel(new_level);
|
|
||||||
|
|
||||||
msg("Your XP level is now set to " + ChatColor.GOLD + new_level);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,7 +1,6 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.Optional;
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
@ -15,10 +14,9 @@ import org.bukkit.command.CommandSender;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.NON_OP, source = SourceType.BOTH)
|
@CommandPermissions(level = Rank.NON_OP, source = SourceType.BOTH)
|
||||||
@CommandParameters(description = "Set the on/off state of the lever at position x, y, z in world 'worldname'.", usage = "/<command> <x> <y> <z> <worldname> <on|off>")
|
@CommandParameters(description = "Set the on/off state of the lever at position x, y, z in world 'worldname'.", usage = "/<command> <x> <y> <z> <worldname> <on | off>")
|
||||||
public class Command_setlever extends FreedomCommand
|
public class Command_setlever extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
||||||
{
|
{
|
||||||
@ -33,50 +31,38 @@ public class Command_setlever extends FreedomCommand
|
|||||||
x = Double.parseDouble(args[0]);
|
x = Double.parseDouble(args[0]);
|
||||||
y = Double.parseDouble(args[1]);
|
y = Double.parseDouble(args[1]);
|
||||||
z = Double.parseDouble(args[2]);
|
z = Double.parseDouble(args[2]);
|
||||||
|
|
||||||
|
// Shows the "Invalid coordinates" message without having to do boilerplate bullshit
|
||||||
|
if (Math.abs(x) > 29999998 || Math.abs(y) > 29999998 || Math.abs(z) > 29999998)
|
||||||
|
{
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (NumberFormatException ex)
|
catch (IllegalArgumentException ex)
|
||||||
{
|
{
|
||||||
msg("Invalid coordinates.");
|
msg("Invalid coordinates.");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (x > 29999998 || x < -29999998 || y > 29999998 || y < -29999998 || z > 29999998 || z < -29999998)
|
Optional<World> optionalWorld = server.getWorlds().stream().filter(world ->
|
||||||
|
world.getName().equalsIgnoreCase(args[3])).findAny();
|
||||||
|
|
||||||
|
if (optionalWorld.isEmpty())
|
||||||
{
|
{
|
||||||
msg("Coordinates cannot be larger than 29999998 or smaller than -29999998 blocks.");
|
msg("Invalid world: " + args[3]);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
World world = null;
|
final Location leverLocation = new Location(optionalWorld.get(), x, y, z);
|
||||||
final String needleWorldName = args[3].trim();
|
|
||||||
final List<World> worlds = server.getWorlds();
|
|
||||||
for (final World testWorld : worlds)
|
|
||||||
{
|
|
||||||
if (testWorld.getName().trim().equalsIgnoreCase(needleWorldName))
|
|
||||||
{
|
|
||||||
world = testWorld;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (world == null)
|
|
||||||
{
|
|
||||||
msg("Invalid world name.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
final Location leverLocation = new Location(world, x, y, z);
|
|
||||||
|
|
||||||
final boolean leverOn = (args[4].trim().equalsIgnoreCase("on") || args[4].trim().equalsIgnoreCase("1"));
|
|
||||||
|
|
||||||
final Block targetBlock = leverLocation.getBlock();
|
final Block targetBlock = leverLocation.getBlock();
|
||||||
|
|
||||||
if (targetBlock.getType() == Material.LEVER)
|
if (targetBlock.getType() == Material.LEVER)
|
||||||
{
|
{
|
||||||
BlockState state = targetBlock.getState();
|
BlockState state = targetBlock.getState();
|
||||||
BlockData data = state.getBlockData();
|
BlockData data = state.getBlockData();
|
||||||
Switch caster = (Switch)data;
|
Switch caster = (Switch) data;
|
||||||
|
|
||||||
caster.setPowered(leverOn);
|
caster.setPowered(args[4].trim().equalsIgnoreCase("on") || args[4].trim().equalsIgnoreCase("1"));
|
||||||
state.setBlockData(data);
|
state.setBlockData(data);
|
||||||
state.update();
|
state.update();
|
||||||
|
|
||||||
@ -84,8 +70,7 @@ public class Command_setlever extends FreedomCommand
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
msg("Target block " + targetBlock + " is not a lever.");
|
msg("That block isn't a lever.");
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user