mirror of
https://github.com/AtlasMediaGroup/TotalFreedomMod.git
synced 2025-07-01 12:36:41 +00:00
Compare commits
331 Commits
RELEASE-20
...
2022.06-RC
Author | SHA1 | Date | |
---|---|---|---|
26be5d0f44 | |||
7a724c2f13 | |||
9e1aa5d34e | |||
4564ad0449 | |||
1ddeb4b621 | |||
a8665a15d4 | |||
c0f3712c8d | |||
0dd7bc06eb | |||
4d98108a46 | |||
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 | |||
8c7bf365a0 | |||
eedb7a5375 | |||
d047cfc8ff | |||
9ff5da8d8f | |||
ac615f54f7 | |||
21af722e23 | |||
b1196fcf00 | |||
d170f6d323 | |||
9dd0298f56 | |||
bdf4ca84e0 | |||
caaa067096 | |||
7258d7f1bf | |||
8a504bff07 | |||
c00e64f736 | |||
9e73db0f24 | |||
951c061d77 | |||
579d3e0719 | |||
9777733d04 | |||
05e118dcb4 | |||
7a0d6f49f4 | |||
19f1b7f6bd | |||
b12afbdc1f | |||
49e77d4f93 | |||
eb9107bedf | |||
951c699ed0 | |||
6895e46375 | |||
1cf46c7337 | |||
407b63e48b | |||
be562fe722 | |||
928ab41d7f |
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.1.0
|
||||||
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.3.0
|
||||||
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
|
||||||
|
43
.github/workflows/downstream.yml
vendored
Normal file
43
.github/workflows/downstream.yml
vendored
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
# This is a basic workflow to help you get started with Actions
|
||||||
|
|
||||||
|
name: Downstream Branch Updates
|
||||||
|
|
||||||
|
on:
|
||||||
|
schedule:
|
||||||
|
- cron: '20 7 * * *'
|
||||||
|
# scheduled at 07:00 every Monday and Thursday
|
||||||
|
|
||||||
|
workflow_dispatch: # click the button on Github repo!
|
||||||
|
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
sync_with_upstream:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
name: Sync main with upstream latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
# Step 1: run a standard checkout action, provided by github
|
||||||
|
- name: Checkout main
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
ref: main
|
||||||
|
# submodules: 'recursive' ### may be needed in your situation
|
||||||
|
|
||||||
|
# Step 2: run this sync action - specify the upstream repo, upstream branch to sync with, and target sync branch
|
||||||
|
- name: Pull (Fast-Forward) upstream changes
|
||||||
|
id: sync
|
||||||
|
uses: aormsby/Fork-Sync-With-Upstream-action@v3.3
|
||||||
|
with:
|
||||||
|
upstream_repository: AtlasMediaGroup/TotalFreedomMod
|
||||||
|
upstream_branch: main
|
||||||
|
target_branch: development
|
||||||
|
git_pull_args: --ff-only # optional arg use, defaults to simple 'pull'
|
||||||
|
|
||||||
|
# Step 3: Display a message if 'sync' step had new commits (simple test)
|
||||||
|
- name: Check for new commits
|
||||||
|
if: steps.sync.outputs.has_new_commits
|
||||||
|
run: echo "There were new commits."
|
||||||
|
|
||||||
|
# Step 4: Print a helpful timestamp for your records (not required, just nice)
|
||||||
|
- name: Timestamp
|
||||||
|
run: date
|
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.3.0
|
||||||
|
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
|
|
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>
|
||||||
|
141
pom.xml
141
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-RC2</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>
|
||||||
@ -101,19 +97,11 @@
|
|||||||
</repository>
|
</repository>
|
||||||
|
|
||||||
<repository>
|
<repository>
|
||||||
<id>papermc</id>
|
<id>esentialsx-repo</id>
|
||||||
<url>https://papermc.io/repo/repository/maven-public/</url>
|
<url>https://repo.essentialsx.net/releases/</url>
|
||||||
</repository>
|
</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 +109,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.11.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.0</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.spigotmc</groupId>
|
<groupId>io.papermc.paper</groupId>
|
||||||
<artifactId>spigot</artifactId>
|
<artifactId>paper-api</artifactId>
|
||||||
<version>1.16.5-R0.1-SNAPSHOT</version>
|
<version>1.17.1-R0.1-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
@ -168,58 +142,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.10</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.0_352</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.2</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.7</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.7</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>
|
||||||
|
|
||||||
@ -231,54 +191,68 @@
|
|||||||
</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.19.4</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.0-GA</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.github.TotalFreedomMC</groupId>
|
<groupId>me.totalfreedom</groupId>
|
||||||
<artifactId>TFGuilds</artifactId>
|
<artifactId>tfguilds</artifactId>
|
||||||
<version>db036fb187</version>
|
<version>2021.06-RC2</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jetbrains</groupId>
|
<groupId>org.jetbrains</groupId>
|
||||||
<artifactId>annotations</artifactId>
|
<artifactId>annotations</artifactId>
|
||||||
<version>20.1.0</version>
|
<version>23.0.0</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.1.2</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.8.2</version>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.eclipse.sisu</groupId>
|
||||||
|
<artifactId>org.eclipse.sisu.inject</artifactId>
|
||||||
|
<version>0.3.5</version>
|
||||||
|
</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>
|
||||||
@ -293,12 +267,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.10.1</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>
|
||||||
|
|
||||||
@ -306,7 +280,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>
|
||||||
@ -347,7 +321,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>
|
||||||
@ -377,7 +351,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>
|
||||||
@ -397,7 +371,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.0.0</version>
|
||||||
<executions>
|
<executions>
|
||||||
<execution>
|
<execution>
|
||||||
<phase>generate-resources</phase>
|
<phase>generate-resources</phase>
|
||||||
@ -422,7 +396,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.3.0</version>
|
||||||
<executions>
|
<executions>
|
||||||
<execution>
|
<execution>
|
||||||
<phase>package</phase>
|
<phase>package</phase>
|
||||||
@ -434,7 +408,8 @@
|
|||||||
<relocations>
|
<relocations>
|
||||||
<relocation>
|
<relocation>
|
||||||
<pattern>io.papermc.lib</pattern>
|
<pattern>io.papermc.lib</pattern>
|
||||||
<shadedPattern>me.totalfreedom.totalfreedommod.paperlib</shadedPattern> <!-- Replace this -->
|
<shadedPattern>me.totalfreedom.totalfreedommod.paperlib
|
||||||
|
</shadedPattern> <!-- Replace this -->
|
||||||
</relocation>
|
</relocation>
|
||||||
<relocation>
|
<relocation>
|
||||||
<pattern>org.bstats</pattern>
|
<pattern>org.bstats</pattern>
|
||||||
@ -445,13 +420,11 @@
|
|||||||
<includes>
|
<includes>
|
||||||
<include>commons-io:commons-io</include>
|
<include>commons-io:commons-io</include>
|
||||||
<include>org.apache.commons:commons-lang3</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>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.bstats:bstats-base</include>
|
||||||
<include>org.jetbrains:annotations</include>
|
<include>org.jetbrains:annotations</include>
|
||||||
</includes>
|
</includes>
|
||||||
</artifactSet>
|
</artifactSet>
|
||||||
@ -469,7 +442,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>
|
||||||
|
@ -85,6 +85,10 @@ 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.forPlayerFuzzy(player, Bukkit.getConsoleSender(), null, kickMessage));
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
package me.totalfreedom.totalfreedommod;
|
package me.totalfreedom.totalfreedommod;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import me.totalfreedom.totalfreedommod.banning.IndefiniteBanList;
|
import me.totalfreedom.totalfreedommod.banning.IndefiniteBanList;
|
||||||
import me.totalfreedom.totalfreedommod.config.YamlConfig;
|
import me.totalfreedom.totalfreedommod.config.YamlConfig;
|
||||||
import me.totalfreedom.totalfreedommod.permissions.PermissionConfig;
|
import me.totalfreedom.totalfreedommod.permissions.PermissionConfig;
|
||||||
@ -9,8 +8,11 @@ import me.totalfreedom.totalfreedommod.util.FLog;
|
|||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import org.bukkit.util.FileUtil;
|
import org.bukkit.util.FileUtil;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
public class BackupManager extends FreedomService
|
public class BackupManager extends FreedomService
|
||||||
{
|
{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStart()
|
public void onStart()
|
||||||
{
|
{
|
||||||
@ -42,16 +44,16 @@ public class BackupManager extends FreedomService
|
|||||||
config.load();
|
config.load();
|
||||||
|
|
||||||
// Weekly
|
// Weekly
|
||||||
if (!config.isInt(save + ".weekly"))
|
if (!config.isLong(save + ".weekly"))
|
||||||
{
|
{
|
||||||
performBackup(file, "weekly");
|
performBackup(file, "weekly");
|
||||||
config.set(save + ".weekly", FUtil.getUnixTime());
|
config.set(save + ".weekly", FUtil.getUnixTime());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int lastBackupWeekly = config.getInt(save + ".weekly");
|
long lastBackupWeekly = config.getLong(save + ".weekly");
|
||||||
|
|
||||||
if (lastBackupWeekly + 3600 * 24 * 7 < FUtil.getUnixTime())
|
if (FUtil.parseLongOffset(lastBackupWeekly, "1w") < FUtil.getUnixTime())
|
||||||
{
|
{
|
||||||
performBackup(file, "weekly");
|
performBackup(file, "weekly");
|
||||||
config.set(save + ".weekly", FUtil.getUnixTime());
|
config.set(save + ".weekly", FUtil.getUnixTime());
|
||||||
@ -65,16 +67,16 @@ public class BackupManager extends FreedomService
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Daily
|
// Daily
|
||||||
if (!config.isInt(save + ".daily"))
|
if (!config.isLong(save + ".daily"))
|
||||||
{
|
{
|
||||||
performBackup(file, "daily");
|
performBackup(file, "daily");
|
||||||
config.set(save + ".daily", FUtil.getUnixTime());
|
config.set(save + ".daily", FUtil.getUnixTime());
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int lastBackupDaily = config.getInt(save + ".daily");
|
long lastBackupDaily = config.getLong(save + ".daily");
|
||||||
|
|
||||||
if (lastBackupDaily + 3600 * 24 < FUtil.getUnixTime())
|
if (FUtil.parseLongOffset(lastBackupDaily, "1d") < FUtil.getUnixTime())
|
||||||
{
|
{
|
||||||
performBackup(file, "daily");
|
performBackup(file, "daily");
|
||||||
config.set(save + ".daily", FUtil.getUnixTime());
|
config.set(save + ".daily", FUtil.getUnixTime());
|
||||||
@ -98,5 +100,4 @@ public class BackupManager extends FreedomService
|
|||||||
final File newYaml = new File(backupFolder, file + "." + type + ".bak");
|
final File newYaml = new File(backupFolder, file + "." + type + ".bak");
|
||||||
FileUtil.copy(oldYaml, newYaml);
|
FileUtil.copy(oldYaml, newYaml);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -25,11 +25,6 @@ public class CommandSpy extends FreedomService
|
|||||||
{
|
{
|
||||||
if (plugin.al.isAdmin(player) && plugin.al.getAdmin(player).getCommandSpy())
|
if (plugin.al.isAdmin(player) && plugin.al.getAdmin(player).getCommandSpy())
|
||||||
{
|
{
|
||||||
if (plugin.al.isAdmin(event.getPlayer()) && !plugin.al.isSeniorAdmin(player))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (player != event.getPlayer())
|
if (player != event.getPlayer())
|
||||||
{
|
{
|
||||||
FUtil.playerMsg(player, event.getPlayer().getName() + ": " + event.getMessage());
|
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
|
||||||
}
|
}
|
||||||
|
@ -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.isWhitelistEnforced() && !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);
|
||||||
@ -240,17 +257,9 @@ public class LoginProcess extends FreedomService
|
|||||||
if (noteCount != 0)
|
if (noteCount != 0)
|
||||||
{
|
{
|
||||||
String noteMessage = "This player has " + noteCount + " admin note" + (noteCount > 1 ? "s" : "") + ".";
|
String noteMessage = "This player has " + noteCount + " admin note" + (noteCount > 1 ? "s" : "") + ".";
|
||||||
JSONMessage notice = JSONMessage.create(ChatColor.GOLD + noteMessage + " Click here to view them.")
|
|
||||||
.tooltip("Click here to view them.")
|
|
||||||
.runCommand("/notes " + player.getName() + " list");
|
|
||||||
FLog.info(noteMessage);
|
FLog.info(noteMessage);
|
||||||
for (Player p : server.getOnlinePlayers())
|
plugin.al.messageAllAdmins(ChatColor.GOLD + noteMessage);
|
||||||
{
|
plugin.al.messageAllAdmins(ChatColor.GOLD + "Do " + ChatColor.YELLOW + "/notes " + player.getName() + " list" + ChatColor.GOLD + " to view them.");
|
||||||
if (plugin.al.isAdmin(p))
|
|
||||||
{
|
|
||||||
notice.send(p);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,17 +1,16 @@
|
|||||||
package me.totalfreedom.totalfreedommod;
|
package me.totalfreedom.totalfreedommod;
|
||||||
|
|
||||||
import ca.momothereal.mojangson.ex.MojangsonParseException;
|
import com.google.common.collect.Multimap;
|
||||||
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.Collection;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
import net.minecraft.server.v1_16_R3.NBTTagCompound;
|
|
||||||
import net.minecraft.server.v1_16_R3.NBTTagList;
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack;
|
import org.bukkit.attribute.Attribute;
|
||||||
|
import org.bukkit.attribute.AttributeModifier;
|
||||||
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;
|
||||||
@ -20,6 +19,7 @@ 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.bukkit.inventory.ItemStack;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
|
|
||||||
public class MovementValidator extends FreedomService
|
public class MovementValidator extends FreedomService
|
||||||
{
|
{
|
||||||
@ -133,55 +133,49 @@ public class MovementValidator extends FreedomService
|
|||||||
|
|
||||||
private Boolean exploitItem(ItemStack item)
|
private Boolean exploitItem(ItemStack item)
|
||||||
{
|
{
|
||||||
net.minecraft.server.v1_16_R3.ItemStack nmsStack = CraftItemStack.asNMSCopy(item);
|
if (item == null)
|
||||||
NBTTagList modifiers = getAttributeList(nmsStack);
|
|
||||||
MojangsonCompound compound = new MojangsonCompound();
|
|
||||||
boolean foundNegative = false;
|
|
||||||
boolean foundPositive = false;
|
|
||||||
try
|
|
||||||
{
|
{
|
||||||
String mod = modifiers.toString();
|
return false;
|
||||||
String fancy = ("{" + (mod.substring(1, mod.length() - 1).replace("{", "").replace("}", "")) + "}");
|
}
|
||||||
compound.read(fancy);
|
|
||||||
for (String key : compound.keySet())
|
ItemMeta meta = item.getItemMeta();
|
||||||
|
if (meta != null)
|
||||||
|
{
|
||||||
|
Multimap<Attribute, AttributeModifier> attributes = meta.getAttributeModifiers();
|
||||||
|
if (attributes != null)
|
||||||
{
|
{
|
||||||
if (Objects.equals(key, "Amount")) //null-safe .equals()
|
Map<Attribute, Collection<AttributeModifier>> attrMap = attributes.asMap();
|
||||||
|
|
||||||
|
// For every attribute...
|
||||||
|
for (Attribute attr : attributes.keySet())
|
||||||
{
|
{
|
||||||
@SuppressWarnings("rawtypes")
|
// Default values
|
||||||
List<MojangsonValue> values = compound.get(key);
|
boolean posInf = false;
|
||||||
for (MojangsonValue<?> val : values)
|
boolean negInf = false;
|
||||||
|
|
||||||
|
// For every AttributeModifier...
|
||||||
|
for (AttributeModifier modifier : attrMap.get(attr))
|
||||||
{
|
{
|
||||||
if (val.getValue().toString().equals("Infinityd"))
|
// Are they ∞ or -∞?
|
||||||
|
if (modifier.getAmount() == Double.POSITIVE_INFINITY)
|
||||||
{
|
{
|
||||||
foundPositive = true;
|
posInf = true;
|
||||||
}
|
}
|
||||||
if (val.getValue().toString().equals("-Infinityd"))
|
else if (modifier.getAmount() == Double.NEGATIVE_INFINITY)
|
||||||
{
|
{
|
||||||
foundNegative = true;
|
negInf = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Are both values set as true?
|
||||||
|
if (posInf && negInf)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
catch (MojangsonParseException e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
return foundNegative && foundPositive;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
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);
|
return false;
|
||||||
if (attr == null)
|
|
||||||
{
|
|
||||||
stack.getTag().set("AttributeModifiers", new NBTTagList());
|
|
||||||
}
|
|
||||||
return stack.getTag().getList("AttributeModifiers", 10);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,13 +1,11 @@
|
|||||||
package me.totalfreedom.totalfreedommod;
|
package me.totalfreedom.totalfreedommod;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
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 me.totalfreedom.totalfreedommod.util.FSync;
|
||||||
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.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -20,7 +18,6 @@ import org.bukkit.event.player.PlayerJoinEvent;
|
|||||||
public class Muter extends FreedomService
|
public class Muter extends FreedomService
|
||||||
{
|
{
|
||||||
|
|
||||||
public static final List<String> MUTE_COMMANDS = Arrays.asList(StringUtils.split("say,me,msg,tell,reply,mail", ","));
|
|
||||||
public final List<String> MUTED_PLAYERS = new ArrayList<>();
|
public final List<String> MUTED_PLAYERS = new ArrayList<>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -88,7 +85,7 @@ public class Muter extends FreedomService
|
|||||||
cmdName = command.getName().toLowerCase();
|
cmdName = command.getName().toLowerCase();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MUTE_COMMANDS.contains(cmdName))
|
if (ConfigEntry.MUTED_BLOCKED_COMMANDS.getStringList().contains(cmdName))
|
||||||
{
|
{
|
||||||
player.sendMessage(ChatColor.RED + "That command is blocked while you are muted.");
|
player.sendMessage(ChatColor.RED + "That command is blocked while you are muted.");
|
||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
|
@ -3,7 +3,7 @@ package me.totalfreedom.totalfreedommod;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import joptsimple.internal.Strings;
|
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.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
@ -14,7 +14,6 @@ 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;
|
||||||
@ -54,7 +53,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,8 +72,6 @@ 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 LogViewer lv;
|
||||||
public AdminList al;
|
public AdminList al;
|
||||||
@ -122,12 +118,10 @@ 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 Sitter st;
|
||||||
public VanishHandler vh;
|
public VanishHandler vh;
|
||||||
public Pterodactyl ptero;
|
public Pterodactyl ptero;
|
||||||
//public HubWorldRestrictions hwr;
|
|
||||||
//
|
//
|
||||||
// Bridges
|
// Bridges
|
||||||
public BukkitTelnetBridge btb;
|
public BukkitTelnetBridge btb;
|
||||||
@ -178,9 +172,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"));
|
||||||
@ -188,7 +179,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())
|
||||||
{
|
{
|
||||||
@ -214,13 +204,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
|
||||||
@ -299,8 +286,6 @@ 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();
|
lv = new LogViewer();
|
||||||
sql = new SQLite();
|
sql = new SQLite();
|
||||||
@ -328,7 +313,6 @@ 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();
|
st = new Sitter();
|
||||||
vh = new VanishHandler();
|
vh = new VanishHandler();
|
||||||
|
@ -2,26 +2,23 @@ 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.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();
|
||||||
@ -32,7 +29,7 @@ public class Admin
|
|||||||
|
|
||||||
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 +37,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();
|
||||||
@ -62,7 +59,7 @@ 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")
|
||||||
@ -78,7 +75,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));
|
||||||
@ -120,20 +117,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,6 +159,34 @@ public class Admin
|
|||||||
{
|
{
|
||||||
plugin.btb.killTelnetSessions(getName());
|
plugin.btb.killTelnetSessions(getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Ensure admins don't have admin functionality when removed (FS-222)
|
||||||
|
AdminList.vanished.remove(getName());
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
plugin.lv.updateLogsRegistration(null, getName(), LogsRegistrationMode.DELETE);
|
plugin.lv.updateLogsRegistration(null, getName(), LogsRegistrationMode.DELETE);
|
||||||
|
@ -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;
|
||||||
@ -22,10 +18,10 @@ 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<String> 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();
|
||||||
|
|
||||||
@ -52,12 +48,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 +68,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)
|
||||||
@ -154,40 +156,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 +182,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 +191,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())
|
||||||
@ -297,6 +238,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 +250,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,11 +277,10 @@ 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()); if (storedValue != null && !storedValue.equals(entry.getValue()) || storedValue == null && entry.getValue() != null || entry.getValue() == null)
|
||||||
if (storedValue != null && !storedValue.equals(entry.getValue()) || storedValue == null && entry.getValue() != null || entry.getValue() == null)
|
|
||||||
{
|
{
|
||||||
plugin.sql.setAdminValue(admin, entry.getKey(), entry.getValue());
|
plugin.sql.setAdminValue(admin, entry.getKey(), entry.getValue());
|
||||||
}
|
}
|
||||||
@ -401,9 +345,4 @@ public class AdminList extends FreedomService
|
|||||||
{
|
{
|
||||||
return ipTable;
|
return ipTable;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map<String, List<String>> getVerifiedNoAdmin()
|
|
||||||
{
|
|
||||||
return verifiedNoAdmin;
|
|
||||||
}
|
|
||||||
}
|
}
|
@ -43,6 +43,7 @@ public class IndefiniteBan implements IConfig
|
|||||||
@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
|
||||||
|
@ -171,6 +171,11 @@ public class BlockBlocker extends FreedomService
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
// Do nothing
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Groups.BANNERS.contains(event.getBlockPlaced().getType()))
|
if (Groups.BANNERS.contains(event.getBlockPlaced().getType()))
|
||||||
|
@ -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 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;
|
||||||
@ -265,4 +267,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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,8 @@ 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.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;
|
||||||
@ -36,10 +38,9 @@ public class InteractBlocker extends FreedomService
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case LEFT_CLICK_AIR:
|
default:
|
||||||
case LEFT_CLICK_BLOCK:
|
|
||||||
{
|
{
|
||||||
//
|
// Do nothing
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -80,9 +81,33 @@ public class InteractBlocker extends FreedomService
|
|||||||
|
|
||||||
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);
|
||||||
|
Block clickedBlock = event.getClickedBlock();
|
||||||
|
if (clickedBlock == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
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.getWorld().spawnEntity(clickedBlock.getLocation().add(event.getBlockFace().getDirection()).add(0.5, 0.5, 0.5), eggType);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -158,6 +183,11 @@ public class InteractBlocker extends FreedomService
|
|||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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())
|
||||||
{
|
{
|
||||||
|
@ -192,7 +192,6 @@ public class CoreProtectBridge extends FreedomService
|
|||||||
return (megabytes / 1024);
|
return (megabytes / 1024);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wipes DB for the specified world
|
|
||||||
public void clearDatabase(World world)
|
public void clearDatabase(World world)
|
||||||
{
|
{
|
||||||
clearDatabase(world, false);
|
clearDatabase(world, false);
|
||||||
@ -260,12 +259,6 @@ public class CoreProtectBridge extends FreedomService
|
|||||||
{
|
{
|
||||||
FLog.warning("Failed to delete the CoreProtect data for the " + world.getName());
|
FLog.warning("Failed to delete the CoreProtect data for the " + world.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
// This exits for flatlands wipes
|
|
||||||
if (shutdown)
|
|
||||||
{
|
|
||||||
server.shutdown();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
@ -276,8 +269,25 @@ public class CoreProtectBridge extends FreedomService
|
|||||||
Block block = event.getClickedBlock();
|
Block block = event.getClickedBlock();
|
||||||
final CoreProtectAPI coreProtect = getCoreProtectAPI();
|
final CoreProtectAPI coreProtect = getCoreProtectAPI();
|
||||||
|
|
||||||
|
// TODO: Rewrite this
|
||||||
if (data.hasInspection())
|
if (data.hasInspection())
|
||||||
{
|
{
|
||||||
|
int cooldownTime = 3;
|
||||||
|
|
||||||
|
// Cooldown check
|
||||||
|
if ((event.getAction() == Action.LEFT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_BLOCK)
|
||||||
|
&& 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Actual lookup time
|
||||||
if (event.getAction() == Action.LEFT_CLICK_BLOCK)
|
if (event.getAction() == Action.LEFT_CLICK_BLOCK)
|
||||||
{
|
{
|
||||||
if (block != null)
|
if (block != null)
|
||||||
@ -285,19 +295,6 @@ public class CoreProtectBridge extends FreedomService
|
|||||||
event.setCancelled(true);
|
event.setCancelled(true);
|
||||||
List<String[]> lookup = coreProtect.blockLookup(block, -1);
|
List<String[]> 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))
|
if (!plugin.al.isAdmin(player))
|
||||||
{
|
{
|
||||||
cooldown.put(player.getName(), System.currentTimeMillis());
|
cooldown.put(player.getName(), System.currentTimeMillis());
|
||||||
@ -364,91 +361,75 @@ public class CoreProtectBridge extends FreedomService
|
|||||||
{
|
{
|
||||||
if (block != null)
|
if (block != null)
|
||||||
{
|
{
|
||||||
if (data.hasInspection())
|
BlockState blockState = block.getRelative(event.getBlockFace()).getState();
|
||||||
{
|
Block placedBlock = blockState.getBlock();
|
||||||
BlockState blockState = block.getRelative(event.getBlockFace()).getState();
|
event.setCancelled(true);
|
||||||
Block placedBlock = blockState.getBlock();
|
List<String[]> lookup = coreProtect.blockLookup(placedBlock, -1);
|
||||||
event.setCancelled(true);
|
|
||||||
List<String[]> lookup = coreProtect.blockLookup(placedBlock, -1);
|
|
||||||
|
|
||||||
|
if (lookup.isEmpty())
|
||||||
|
{
|
||||||
|
lookup = coreProtect.blockLookup(block, -1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!plugin.al.isAdmin(player))
|
||||||
|
{
|
||||||
|
cooldown.put(player.getName(), System.currentTimeMillis());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lookup != null)
|
||||||
|
{
|
||||||
if (lookup.isEmpty())
|
if (lookup.isEmpty())
|
||||||
{
|
{
|
||||||
lookup = coreProtect.blockLookup(block, -1);
|
player.sendMessage(net.md_5.bungee.api.ChatColor.of("#30ade4") + "Block Inspector " + ChatColor.WHITE + "- " + "No block data found for this location");
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int cooldownTime = 3;
|
HISTORY_MAP.remove(event.getPlayer());
|
||||||
|
HISTORY_MAP.put(event.getPlayer(), new FUtil.PaginationList<>(10));
|
||||||
|
FUtil.PaginationList<String> paged = HISTORY_MAP.get(event.getPlayer());
|
||||||
|
|
||||||
if (cooldown.containsKey(player.getName()))
|
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)
|
||||||
{
|
{
|
||||||
long secondsLeft = getSecondsLeft(cooldown.get(player.getName()), cooldownTime);
|
CoreProtectAPI.ParseResult result = coreProtect.parseResult(value);
|
||||||
if (secondsLeft > 0L)
|
BlockData bl = result.getBlockData();
|
||||||
|
|
||||||
|
String s;
|
||||||
|
String st = "";
|
||||||
|
|
||||||
|
if (result.getActionString().equals("Placement"))
|
||||||
{
|
{
|
||||||
event.setCancelled(true);
|
s = " placed ";
|
||||||
player.sendMessage(ChatColor.RED + String.valueOf(secondsLeft) + " seconds left before next query.");
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
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());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!plugin.al.isAdmin(player))
|
List<String> page = paged.getPage(1);
|
||||||
|
for (String entries : page)
|
||||||
{
|
{
|
||||||
cooldown.put(player.getName(), System.currentTimeMillis());
|
player.sendMessage(entries);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lookup != null)
|
player.sendMessage("Page 1/" + paged.getPageCount() + " | To index through the pages, type " + net.md_5.bungee.api.ChatColor.of("#30ade4") + "/ins history <page>");
|
||||||
{
|
|
||||||
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>");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -114,8 +114,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)
|
||||||
|
@ -53,6 +53,6 @@ public class TFGuildsBridge extends FreedomService
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return Common.IN_GUILD_CHAT.contains(player);
|
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,8 +15,6 @@ public class WorldGuardBridge extends FreedomService
|
|||||||
@Override
|
@Override
|
||||||
public void onStart()
|
public void onStart()
|
||||||
{
|
{
|
||||||
plugin.wr.protectWorld(plugin.wm.hubworld.getWorld());
|
|
||||||
plugin.wr.protectWorld(plugin.wm.masterBuilderWorld.getWorld());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -24,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()
|
||||||
|
@ -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,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.lang.ArrayUtils;
|
import org.apache.commons.lang.ArrayUtils;
|
||||||
@ -128,6 +130,8 @@ public class Command_blockedit extends FreedomCommand
|
|||||||
|
|
||||||
msg(player2, "Your block modification abilities have been blocked.", ChatColor.RED);
|
msg(player2, "Your block modification abilities have been blocked.", ChatColor.RED);
|
||||||
msg("Blocked all block modification abilities for " + player2.getName());
|
msg("Blocked all block modification abilities for " + player2.getName());
|
||||||
|
|
||||||
|
plugin.pul.logPunishment(new Punishment(player2.getName(), FUtil.getIp(player2), sender.getName(), PunishmentType.BLOCKEDIT, null));
|
||||||
}
|
}
|
||||||
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.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;
|
||||||
@ -75,17 +77,43 @@ public class Command_cage extends FreedomCommand
|
|||||||
}
|
}
|
||||||
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]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
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 +124,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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ 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
|
@ -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,119 @@ 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
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();
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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);
|
||||||
@ -76,10 +75,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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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))
|
||||||
|
@ -26,7 +26,7 @@ public class Command_glow extends FreedomCommand
|
|||||||
playerSender.addPotionEffect(glow);
|
playerSender.addPotionEffect(glow);
|
||||||
glowing = true;
|
glowing = true;
|
||||||
}
|
}
|
||||||
msg("You " + (glowing ? "are now" : "no longer") + " glowing.");
|
msg("You are " + (glowing ? "now" : "no longer") + " glowing.");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,202 +0,0 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
|
||||||
|
|
||||||
import io.papermc.lib.PaperLib;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.world.WorldTime;
|
|
||||||
import me.totalfreedom.totalfreedommod.world.WorldWeather;
|
|
||||||
import org.bukkit.World;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.OP, source = SourceType.BOTH)
|
|
||||||
@CommandParameters(description = "HubWorld management stuff",
|
|
||||||
usage = "/<command> [time <morning | noon | evening | night> | weather <off | rain | storm>]",
|
|
||||||
aliases = "hw,hub")
|
|
||||||
public class Command_hubworld extends FreedomCommand
|
|
||||||
{
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
|
||||||
{
|
|
||||||
CommandMode commandMode = null;
|
|
||||||
|
|
||||||
if (args.length == 0)
|
|
||||||
{
|
|
||||||
commandMode = CommandMode.TELEPORT;
|
|
||||||
}
|
|
||||||
else if (args.length >= 2)
|
|
||||||
{
|
|
||||||
if ("time".equalsIgnoreCase(args[0]))
|
|
||||||
{
|
|
||||||
commandMode = CommandMode.TIME;
|
|
||||||
}
|
|
||||||
else if ("weather".equalsIgnoreCase(args[0]))
|
|
||||||
{
|
|
||||||
commandMode = CommandMode.WEATHER;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (commandMode == null)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
switch (commandMode)
|
|
||||||
{
|
|
||||||
case TELEPORT:
|
|
||||||
{
|
|
||||||
if (!(sender instanceof Player) || playerSender == null)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
World hubWorld = null;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
hubWorld = plugin.wm.hubworld.getWorld();
|
|
||||||
}
|
|
||||||
catch (Exception ignored)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hubWorld == null || playerSender.getWorld() == hubWorld)
|
|
||||||
{
|
|
||||||
msg("Going to the main world.");
|
|
||||||
PaperLib.teleportAsync(playerSender, server.getWorlds().get(0).getSpawnLocation());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
msg("Going to the hub world");
|
|
||||||
plugin.wm.hubworld.sendToWorld(playerSender);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case TIME:
|
|
||||||
{
|
|
||||||
assertCommandPerms(sender, playerSender);
|
|
||||||
|
|
||||||
if (args.length == 2)
|
|
||||||
{
|
|
||||||
WorldTime timeOfDay = WorldTime.getByAlias(args[1]);
|
|
||||||
if (timeOfDay != null)
|
|
||||||
{
|
|
||||||
plugin.wm.hubworld.setTimeOfDay(timeOfDay);
|
|
||||||
msg("Hub world time set to: " + timeOfDay.name());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
msg("Invalid time of day. Can be: sunrise, noon, sunset, midnight");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case WEATHER:
|
|
||||||
{
|
|
||||||
assertCommandPerms(sender, playerSender);
|
|
||||||
|
|
||||||
if (args.length == 2)
|
|
||||||
{
|
|
||||||
WorldWeather weatherMode = WorldWeather.getByAlias(args[1]);
|
|
||||||
if (weatherMode != null)
|
|
||||||
{
|
|
||||||
plugin.wm.hubworld.setWeatherMode(weatherMode);
|
|
||||||
msg("Hub world weather set to: " + weatherMode.name());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
msg("Invalid weather mode. Can be: off, rain, storm");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (PermissionDeniedException ex)
|
|
||||||
{
|
|
||||||
if (ex.getMessage().isEmpty())
|
|
||||||
{
|
|
||||||
return noPerms();
|
|
||||||
}
|
|
||||||
msg(ex.getMessage());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args)
|
|
||||||
{
|
|
||||||
if (!plugin.al.isAdmin(sender))
|
|
||||||
{
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
if (args.length == 1)
|
|
||||||
{
|
|
||||||
return Arrays.asList("time", "weather");
|
|
||||||
}
|
|
||||||
else if (args.length == 2)
|
|
||||||
{
|
|
||||||
if (args[0].equals("time"))
|
|
||||||
{
|
|
||||||
return Arrays.asList("morning", "noon", "evening", "night");
|
|
||||||
}
|
|
||||||
else if (args[0].equals("weather"))
|
|
||||||
{
|
|
||||||
return Arrays.asList("off", "rain", "storm");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Redo this properly
|
|
||||||
private void assertCommandPerms(CommandSender sender, Player playerSender) throws PermissionDeniedException
|
|
||||||
{
|
|
||||||
if (!(sender instanceof Player) || playerSender == null || !plugin.al.isAdmin(playerSender))
|
|
||||||
{
|
|
||||||
throw new PermissionDeniedException();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private enum CommandMode
|
|
||||||
{
|
|
||||||
TELEPORT, TIME, WEATHER
|
|
||||||
}
|
|
||||||
|
|
||||||
private static class PermissionDeniedException extends Exception
|
|
||||||
{
|
|
||||||
|
|
||||||
private static final long serialVersionUID = 1L;
|
|
||||||
|
|
||||||
private PermissionDeniedException()
|
|
||||||
{
|
|
||||||
super("");
|
|
||||||
}
|
|
||||||
|
|
||||||
private PermissionDeniedException(String string)
|
|
||||||
{
|
|
||||||
super(string);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -15,8 +15,8 @@ import org.bukkit.entity.Player;
|
|||||||
import java.util.ArrayList;
|
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> [-s | -f | -v]", aliases = "who,lsit")
|
||||||
public class Command_list extends FreedomCommand
|
public class Command_list extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -63,11 +63,6 @@ public class Command_list extends FreedomCommand
|
|||||||
listFilter = ListFilter.TELNET_SESSIONS;
|
listFilter = ListFilter.TELNET_SESSIONS;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "-i":
|
|
||||||
{
|
|
||||||
listFilter = ListFilter.IMPOSTORS;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case "-f":
|
case "-f":
|
||||||
{
|
{
|
||||||
listFilter = ListFilter.FAMOUS_PLAYERS;
|
listFilter = ListFilter.FAMOUS_PLAYERS;
|
||||||
@ -88,7 +83,7 @@ public class Command_list extends FreedomCommand
|
|||||||
|
|
||||||
List<String> n = new ArrayList<>();
|
List<String> n = new ArrayList<>();
|
||||||
|
|
||||||
if (listFilter == ListFilter.TELNET_SESSIONS && plugin.al.isAdmin(sender) && plugin.al.getAdmin(playerSender).getRank().isAtLeast(Rank.ADMIN))
|
if (listFilter == ListFilter.TELNET_SESSIONS && plugin.al.isAdmin(sender))
|
||||||
{
|
{
|
||||||
List<Admin> connectedAdmins = plugin.btb.getConnectedAdmins();
|
List<Admin> connectedAdmins = plugin.btb.getConnectedAdmins();
|
||||||
onlineStats.append(ChatColor.BLUE).append("There are ").append(ChatColor.RED).append(connectedAdmins.size())
|
onlineStats.append(ChatColor.BLUE).append("There are ").append(ChatColor.RED).append(connectedAdmins.size())
|
||||||
@ -101,8 +96,7 @@ public class Command_list extends FreedomCommand
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int count = server.getOnlinePlayers().size() - AdminList.vanished.size();
|
onlineStats.append(ChatColor.BLUE).append("There are ").append(ChatColor.RED).append(FUtil.getFakePlayerCount())
|
||||||
onlineStats.append(ChatColor.BLUE).append("There are ").append(ChatColor.RED).append(count < 0 ? 0 : count)
|
|
||||||
.append(ChatColor.BLUE)
|
.append(ChatColor.BLUE)
|
||||||
.append(" out of a maximum ")
|
.append(" out of a maximum ")
|
||||||
.append(ChatColor.RED)
|
.append(ChatColor.RED)
|
||||||
@ -123,10 +117,6 @@ public class Command_list extends FreedomCommand
|
|||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (listFilter == ListFilter.IMPOSTORS && !plugin.al.isAdminImpostor(p))
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (listFilter == ListFilter.FAMOUS_PLAYERS && !ConfigEntry.FAMOUS_PLAYERS.getList().contains(p.getName().toLowerCase()))
|
if (listFilter == ListFilter.FAMOUS_PLAYERS && !ConfigEntry.FAMOUS_PLAYERS.getList().contains(p.getName().toLowerCase()))
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
@ -165,7 +155,6 @@ public class Command_list extends FreedomCommand
|
|||||||
ADMINS,
|
ADMINS,
|
||||||
VANISHED_ADMINS,
|
VANISHED_ADMINS,
|
||||||
TELNET_SESSIONS,
|
TELNET_SESSIONS,
|
||||||
FAMOUS_PLAYERS,
|
FAMOUS_PLAYERS
|
||||||
IMPOSTORS
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -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)
|
||||||
{
|
{
|
||||||
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -130,17 +130,19 @@ public class Command_mute extends FreedomCommand
|
|||||||
{
|
{
|
||||||
playerdata.setMuted(true);
|
playerdata.setMuted(true);
|
||||||
player.sendTitle(ChatColor.RED + "You've been muted.", ChatColor.YELLOW + "Be sure to follow the rules!", 20, 100, 60);
|
player.sendTitle(ChatColor.RED + "You've been muted.", ChatColor.YELLOW + "Be sure to follow the rules!", 20, 100, 60);
|
||||||
|
|
||||||
|
if (quiet)
|
||||||
|
{
|
||||||
|
msg("Muted " + player.getName() + " quietly");
|
||||||
|
return true; // doesn't announce reason
|
||||||
|
}
|
||||||
|
|
||||||
|
FUtil.adminAction(sender.getName(), "Muting " + player.getName(), true);
|
||||||
|
|
||||||
if (reason != null)
|
if (reason != null)
|
||||||
{
|
{
|
||||||
msg(player, ChatColor.RED + "Reason: " + ChatColor.YELLOW + reason);
|
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)
|
if (smite)
|
||||||
{
|
{
|
||||||
|
@ -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
|
||||||
|
@ -24,6 +24,10 @@ 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,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();
|
|
||||||
}
|
|
||||||
}
|
|
@ -29,6 +29,7 @@ public class Command_potion extends FreedomCommand
|
|||||||
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<>();
|
List<String> potionEffectTypeNames = new ArrayList<>();
|
||||||
@ -58,14 +59,16 @@ public class Command_potion extends FreedomCommand
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
case 2:
|
case 2:
|
||||||
|
{
|
||||||
if (args[0].equalsIgnoreCase("clear"))
|
if (args[0].equalsIgnoreCase("clear"))
|
||||||
{
|
{
|
||||||
Player target = playerSender;
|
Player target = playerSender;
|
||||||
if (args.length == 2)
|
if (args.length == 2)
|
||||||
{
|
{
|
||||||
if (!plugin.al.isAdmin(sender) && !target.equals(getPlayer(sender.getName())))
|
if (!plugin.al.isAdmin(sender) && !args[1].equalsIgnoreCase(sender.getName()))
|
||||||
{
|
{
|
||||||
msg(ChatColor.RED + "Only admins can clear potion effects from other players.");
|
msg(ChatColor.RED + "Only admins can clear potion effects from other players.");
|
||||||
return true;
|
return true;
|
||||||
@ -95,16 +98,18 @@ public class Command_potion extends FreedomCommand
|
|||||||
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;
|
||||||
|
|
||||||
if (args.length == 5)
|
if (args.length == 5)
|
||||||
{
|
{
|
||||||
if (!plugin.al.isAdmin(sender) && !getPlayer(args[4]).equals(getPlayer(sender.getName())))
|
if (!plugin.al.isAdmin(sender) && !args[4].equalsIgnoreCase(sender.getName()))
|
||||||
{
|
{
|
||||||
msg("Only admins can apply potion effects to other players.", ChatColor.RED);
|
msg("Only admins can apply potion effects to other players.", ChatColor.RED);
|
||||||
return true;
|
return true;
|
||||||
@ -167,8 +172,11 @@ public class Command_potion extends FreedomCommand
|
|||||||
+ (!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;
|
||||||
}
|
}
|
||||||
@ -179,14 +187,17 @@ 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].equals("clear"))
|
||||||
{
|
{
|
||||||
if (plugin.al.isAdmin(sender))
|
if (plugin.al.isAdmin(sender))
|
||||||
@ -199,22 +210,28 @@ public class Command_potion extends FreedomCommand
|
|||||||
return getAllPotionTypes();
|
return getAllPotionTypes();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case 3:
|
case 3:
|
||||||
|
{
|
||||||
if (args[0].equals("add"))
|
if (args[0].equals("add"))
|
||||||
{
|
{
|
||||||
return Collections.singletonList("<duration>");
|
return Collections.singletonList("<duration>");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case 4:
|
case 4:
|
||||||
|
{
|
||||||
if (args[0].equals("add"))
|
if (args[0].equals("add"))
|
||||||
{
|
{
|
||||||
return Collections.singletonList("<amplifier>");
|
return Collections.singletonList("<amplifier>");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case 5:
|
case 5:
|
||||||
|
{
|
||||||
if (plugin.al.isAdmin(sender))
|
if (plugin.al.isAdmin(sender))
|
||||||
{
|
{
|
||||||
if (args[0].equals("add"))
|
if (args[0].equals("add"))
|
||||||
@ -223,6 +240,12 @@ public class Command_potion extends FreedomCommand
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return Collections.emptyList();
|
return Collections.emptyList();
|
||||||
|
@ -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;
|
|
||||||
}
|
|
||||||
}
|
|
@ -4,6 +4,7 @@ import me.totalfreedom.totalfreedommod.rank.Rank;
|
|||||||
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;
|
||||||
@ -22,36 +23,40 @@ 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);
|
plugin.cm.reportAction(playerSender, (player == null) ? offlinePlayer.getName() : player.getName(), report);
|
||||||
|
|
||||||
boolean logged = false;
|
boolean logged = false;
|
||||||
|
|
||||||
if (plugin.dc.enabled)
|
if (plugin.dc.enabled)
|
||||||
{
|
{
|
||||||
logged = plugin.dc.sendReport(playerSender, player, report);
|
logged = (player == null) ? plugin.dc.sendReportOffline(playerSender, offlinePlayer, report) : plugin.dc.sendReport(playerSender, player, report);
|
||||||
}
|
}
|
||||||
|
|
||||||
msg(ChatColor.GREEN + "Thank you, your report has been successfully logged."
|
msg(ChatColor.GREEN + "Thank you, your report has been successfully logged."
|
||||||
|
@ -26,7 +26,7 @@ public class Command_ride extends FreedomCommand
|
|||||||
final FPlayer fPlayer = plugin.pl.getPlayer(playerSender);
|
final FPlayer fPlayer = plugin.pl.getPlayer(playerSender);
|
||||||
if (fPlayer.getCageData().isCaged())
|
if (fPlayer.getCageData().isCaged())
|
||||||
{
|
{
|
||||||
msg("You cannot used this command while caged.");
|
msg("You cannot use this command while caged.");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,26 +176,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 +197,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);
|
||||||
@ -259,6 +238,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,20 +247,22 @@ 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);
|
plugin.ptero.updateAccountStatus(admin);
|
||||||
|
@ -0,0 +1,97 @@
|
|||||||
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
|
import net.md_5.bungee.api.chat.ClickEvent;
|
||||||
|
import net.md_5.bungee.api.chat.HoverEvent;
|
||||||
|
import net.md_5.bungee.api.chat.TextComponent;
|
||||||
|
import net.md_5.bungee.api.chat.TranslatableComponent;
|
||||||
|
import net.md_5.bungee.api.chat.hover.content.Text;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.World;
|
||||||
|
import org.bukkit.command.Command;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the sender is not a Player, use the usual msg method to
|
||||||
|
if (senderIsConsole)
|
||||||
|
{
|
||||||
|
msg("Seed: [" + ChatColor.GREEN + world.getSeed() + ChatColor.WHITE + "]", ChatColor.WHITE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Gets the seed for later uses
|
||||||
|
String seed = String.valueOf(world.getSeed());
|
||||||
|
|
||||||
|
// This is a really stupid hack to get things to play nicely, but it works so I don't give a damn
|
||||||
|
BaseComponent[] components = {new TranslatableComponent("chat.copy.click")};
|
||||||
|
TextComponent seedAsComponent = new TextComponent(seed);
|
||||||
|
|
||||||
|
// Style the message like in vanilla Minecraft.
|
||||||
|
seedAsComponent.setColor(ChatColor.GREEN.asBungee());
|
||||||
|
seedAsComponent.setClickEvent(new ClickEvent(ClickEvent.Action.COPY_TO_CLIPBOARD, seed));
|
||||||
|
seedAsComponent.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text(components)));
|
||||||
|
|
||||||
|
// Enclose the seed with brackets
|
||||||
|
TextComponent seedString = new TextComponent("[");
|
||||||
|
seedString.addExtra(seedAsComponent);
|
||||||
|
seedString.addExtra("]");
|
||||||
|
|
||||||
|
// Send the message to the player.
|
||||||
|
TranslatableComponent response = new TranslatableComponent("commands.seed.success", seedString);
|
||||||
|
playerSender.spigot().sendMessage(response);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<String> getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args)
|
||||||
|
{
|
||||||
|
if (args.length == 1)
|
||||||
|
{
|
||||||
|
// Returns a list of worlds on the server and returns it
|
||||||
|
List<String> worlds = new ArrayList<>();
|
||||||
|
for (World world : server.getWorlds())
|
||||||
|
{
|
||||||
|
worlds.add(world.getName());
|
||||||
|
}
|
||||||
|
return worlds;
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
|
||||||
}
|
|
||||||
}
|
|
@ -15,7 +15,7 @@ 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 = "Someone being a little bitch? Smite them down...", usage = "/<command> <player> [reason] [-c | -q]")
|
@CommandParameters(description = "Someone being a little bitch? Smite them down...", usage = "/<command> <player> [reason] [-ci | -q]")
|
||||||
public class Command_smite extends FreedomCommand
|
public class Command_smite extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -106,9 +106,9 @@ public class Command_smite extends FreedomCommand
|
|||||||
reason = StringUtils.join(ArrayUtils.subarray(args, 1, args.length - 1), " ");
|
reason = StringUtils.join(ArrayUtils.subarray(args, 1, args.length - 1), " ");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (args[args.length - 1].equalsIgnoreCase("-c"))
|
else if (args[args.length - 1].equalsIgnoreCase("-ci"))
|
||||||
{
|
{
|
||||||
if (args[args.length - 1].equalsIgnoreCase("-c"))
|
if (args[args.length - 1].equalsIgnoreCase("-ci"))
|
||||||
{
|
{
|
||||||
clearinv = true;
|
clearinv = true;
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
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.apache.commons.lang3.EnumUtils;
|
import org.apache.commons.lang3.EnumUtils;
|
||||||
@ -55,6 +57,7 @@ public class Command_spawnmob extends FreedomCommand
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int max = ConfigEntry.SPAWNMOB_MAX.getInteger();
|
||||||
int amount = 1;
|
int amount = 1;
|
||||||
if (args.length > 1)
|
if (args.length > 1)
|
||||||
{
|
{
|
||||||
@ -69,9 +72,9 @@ public class Command_spawnmob extends FreedomCommand
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (amount > 10 || amount < 1)
|
if (amount > max || amount < 1)
|
||||||
{
|
{
|
||||||
msg("Invalid amount: " + args[1] + ". Must be 1-10.", ChatColor.RED);
|
msg("Invalid amount: " + args[1] + ". Must be 1-" + max + ".", ChatColor.RED);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
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;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
@ -19,9 +20,6 @@ import org.bukkit.entity.Player;
|
|||||||
public class Command_tag extends FreedomCommand
|
public class Command_tag extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
public static final List<String> FORBIDDEN_WORDS = Arrays.asList(
|
|
||||||
"admin", "owner", "moderator", "developer", "console", "dev", "staff", "mod", "sra", "tca", "sta", "sa");
|
|
||||||
|
|
||||||
@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)
|
||||||
{
|
{
|
||||||
@ -107,6 +105,11 @@ public class Command_tag extends FreedomCommand
|
|||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (args.length >= 2)
|
else if (args.length >= 2)
|
||||||
@ -170,7 +173,7 @@ public class Command_tag extends FreedomCommand
|
|||||||
|
|
||||||
if (!plugin.al.isAdmin(sender))
|
if (!plugin.al.isAdmin(sender))
|
||||||
{
|
{
|
||||||
for (String word : FORBIDDEN_WORDS)
|
for (String word : ConfigEntry.FORBIDDEN_WORDS.getStringList())
|
||||||
{
|
{
|
||||||
if (rawTag.contains(word))
|
if (rawTag.contains(word))
|
||||||
{
|
{
|
||||||
@ -261,7 +264,7 @@ public class Command_tag extends FreedomCommand
|
|||||||
|
|
||||||
if (!plugin.al.isAdmin(sender))
|
if (!plugin.al.isAdmin(sender))
|
||||||
{
|
{
|
||||||
for (String word : FORBIDDEN_WORDS)
|
for (String word : ConfigEntry.FORBIDDEN_WORDS.getStringList())
|
||||||
{
|
{
|
||||||
if (rawTag.contains(word))
|
if (rawTag.contains(word))
|
||||||
{
|
{
|
||||||
@ -281,6 +284,11 @@ public class Command_tag extends FreedomCommand
|
|||||||
msg("Tag set to '" + outputTag + ChatColor.GRAY + "'." + (save ? " (Saved)" : "") + from + to);
|
msg("Tag set to '" + outputTag + ChatColor.GRAY + "'." + (save ? " (Saved)" : "") + from + to);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
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.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
@ -43,7 +44,7 @@ public class Command_tagnyan extends FreedomCommand
|
|||||||
|
|
||||||
if (!plugin.al.isAdmin(sender))
|
if (!plugin.al.isAdmin(sender))
|
||||||
{
|
{
|
||||||
for (String word : Command_tag.FORBIDDEN_WORDS)
|
for (String word : ConfigEntry.FORBIDDEN_WORDS.getStringList())
|
||||||
{
|
{
|
||||||
if (rawTag.contains(word))
|
if (rawTag.contains(word))
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
|
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 org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
@ -33,7 +34,7 @@ public class Command_tagrainbow extends FreedomCommand
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (String word : Command_tag.FORBIDDEN_WORDS)
|
for (String word : ConfigEntry.FORBIDDEN_WORDS.getStringList())
|
||||||
{
|
{
|
||||||
if (rawTag.contains(word))
|
if (rawTag.contains(word))
|
||||||
{
|
{
|
||||||
|
@ -1,143 +0,0 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
import me.totalfreedom.totalfreedommod.banning.Ban;
|
|
||||||
import me.totalfreedom.totalfreedommod.player.PlayerData;
|
|
||||||
import me.totalfreedom.totalfreedommod.punishments.Punishment;
|
|
||||||
import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
|
||||||
import org.apache.commons.lang.StringUtils;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH, blockHostConsole = true)
|
|
||||||
@CommandParameters(description = "Temporarily bans a player for five minutes.", usage = "/<command> [-q] <username> [reason]", aliases = "noob")
|
|
||||||
public class Command_tban extends FreedomCommand
|
|
||||||
{
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
|
||||||
{
|
|
||||||
if (args.length == 0)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean quiet = args[0].equalsIgnoreCase("-q");
|
|
||||||
if (quiet)
|
|
||||||
{
|
|
||||||
args = org.apache.commons.lang3.ArrayUtils.subarray(args, 1, args.length);
|
|
||||||
|
|
||||||
if (args.length < 1)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
final String username;
|
|
||||||
|
|
||||||
final Player player = getPlayer(args[0]);
|
|
||||||
final PlayerData entry;
|
|
||||||
if (player == null)
|
|
||||||
{
|
|
||||||
entry = plugin.pl.getData(args[0]);
|
|
||||||
|
|
||||||
if (entry == null)
|
|
||||||
{
|
|
||||||
msg("Can't find that user. If target is not logged in, make sure that you spelled the name exactly.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
username = entry.getName();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
entry = plugin.pl.getData(player);
|
|
||||||
username = player.getName();
|
|
||||||
}
|
|
||||||
final List<String> ips = new ArrayList<>(entry.getIps());
|
|
||||||
|
|
||||||
String reason = null;
|
|
||||||
if (args.length > 1)
|
|
||||||
{
|
|
||||||
reason = StringUtils.join(args, " ", 1, args.length);
|
|
||||||
}
|
|
||||||
|
|
||||||
StringBuilder kick = new StringBuilder()
|
|
||||||
.append(ChatColor.RED)
|
|
||||||
.append("You have been temporarily banned for five minutes. Please read totalfreedom.me for more info.");
|
|
||||||
|
|
||||||
if (!quiet)
|
|
||||||
{
|
|
||||||
// Strike with lightning
|
|
||||||
if (player != null)
|
|
||||||
{
|
|
||||||
final Location targetPos = player.getLocation();
|
|
||||||
for (int x = -1; x <= 1; x++)
|
|
||||||
{
|
|
||||||
for (int z = -1; z <= 1; z++)
|
|
||||||
{
|
|
||||||
final Location strike_pos = new Location(targetPos.getWorld(), targetPos.getBlockX() + x, targetPos.getBlockY(), targetPos.getBlockZ() + z);
|
|
||||||
Objects.requireNonNull(targetPos.getWorld()).strikeLightning(strike_pos);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Kill player
|
|
||||||
player.setHealth(0.0);
|
|
||||||
|
|
||||||
if (reason != null)
|
|
||||||
{
|
|
||||||
FUtil.adminAction(sender.getName(), "Tempbanning " + player.getName() + " for 5 minutes - Reason: " + reason, true);
|
|
||||||
kick.append("\n")
|
|
||||||
.append(ChatColor.RED)
|
|
||||||
.append("Reason: ")
|
|
||||||
.append(ChatColor.GOLD)
|
|
||||||
.append(reason);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
FUtil.adminAction(sender.getName(), "Tempbanning " + player.getName() + " for 5 minutes", true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (player != null)
|
|
||||||
{
|
|
||||||
if (reason != null)
|
|
||||||
{
|
|
||||||
msg("Quietly temporarily banned " + player.getName() + " for 5 minutes.");
|
|
||||||
kick.append("\n")
|
|
||||||
.append(ChatColor.RED)
|
|
||||||
.append("Reason: ")
|
|
||||||
.append(ChatColor.GOLD)
|
|
||||||
.append(reason);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Ban player
|
|
||||||
Ban ban = Ban.forPlayerName(username, sender, FUtil.parseDateOffset("5m"), reason);
|
|
||||||
for (String ip : ips)
|
|
||||||
{
|
|
||||||
ban.addIp(ip);
|
|
||||||
}
|
|
||||||
plugin.bm.addBan(ban);
|
|
||||||
|
|
||||||
// Kick player
|
|
||||||
if (player != null)
|
|
||||||
{
|
|
||||||
player.kickPlayer(kick.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Log ban
|
|
||||||
plugin.pul.logPunishment(new Punishment(username, ips.get(0), sender.getName(), PunishmentType.TEMPBAN, reason));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,10 +1,10 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
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;
|
||||||
@ -13,13 +13,15 @@ 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.ArrayUtils;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
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 = "Temporarily ban someone.", usage = "/<command> [-q] <username> [duration] [reason]")
|
@CommandParameters(description = "Temporarily ban someone.", usage = "/<command> [-q] <username> [duration] [reason]", aliases = "tban,noob")
|
||||||
public class Command_tempban extends FreedomCommand
|
public class Command_tempban extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
@ -44,74 +46,119 @@ public class Command_tempban extends FreedomCommand
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final String username;
|
||||||
|
final String ip;
|
||||||
|
|
||||||
final Player player = getPlayer(args[0]);
|
final Player player = getPlayer(args[0]);
|
||||||
final PlayerData entry;
|
PlayerData entry;
|
||||||
if (player == null)
|
if (player == null)
|
||||||
{
|
{
|
||||||
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
|
||||||
|
{
|
||||||
|
entry = plugin.pl.getData(args[0]);
|
||||||
|
if (entry == null)
|
||||||
|
{
|
||||||
|
msg(PLAYER_NOT_FOUND);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
username = entry.getName();
|
||||||
|
ip = entry.getIps().get(0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
entry = plugin.pl.getData(player);
|
username = player.getName();
|
||||||
|
ip = FUtil.getIp(player);
|
||||||
}
|
}
|
||||||
final List<String> ips = new ArrayList<>(entry.getIps());
|
|
||||||
|
|
||||||
assert player != null;
|
final StringBuilder message = new StringBuilder("Temporarily banned " + username);
|
||||||
final StringBuilder message = new StringBuilder("Temporarily banned " + player.getName());
|
|
||||||
|
// Default expiration date is 5 minutes
|
||||||
|
Date expires = FUtil.parseDateOffset("5m");
|
||||||
|
|
||||||
|
// Parses what comes after as a duration
|
||||||
|
if (args.length > 1)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
expires = FUtil.parseDateOffset(args[1]);
|
||||||
|
}
|
||||||
|
catch (NumberFormatException error)
|
||||||
|
{
|
||||||
|
msg("Invalid duration: " + args[1], ChatColor.RED);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Date expires = FUtil.parseDateOffset("30m");
|
|
||||||
message.append(" until ").append(date_format.format(expires));
|
message.append(" until ").append(date_format.format(expires));
|
||||||
|
|
||||||
|
// If a reason appears to exist, set it.
|
||||||
String reason = null;
|
String reason = null;
|
||||||
if (args.length >= 2)
|
if (args.length > 2)
|
||||||
{
|
{
|
||||||
Date parsed_offset = FUtil.parseDateOffset(args[1]);
|
reason = StringUtils.join(ArrayUtils.subarray(args, 2, args.length), " ") + " (" + sender.getName() + ")";
|
||||||
reason = StringUtils.join(ArrayUtils.subarray(args, parsed_offset == null ? 1 : 2, args.length), " ") + " (" + sender.getName() + ")";
|
|
||||||
if (parsed_offset != null)
|
|
||||||
{
|
|
||||||
expires = parsed_offset;
|
|
||||||
}
|
|
||||||
message.append(", Reason: \"").append(reason).append("\"");
|
message.append(", Reason: \"").append(reason).append("\"");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Ban ban;
|
||||||
|
if (player != null)
|
||||||
|
{
|
||||||
|
ban = Ban.forPlayer(player, sender, expires, reason);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ban = Ban.forPlayerName(username, sender, expires, reason);
|
||||||
|
}
|
||||||
|
ban.addIp(ip);
|
||||||
|
|
||||||
|
plugin.bm.addBan(ban);
|
||||||
|
|
||||||
if (!quiet)
|
if (!quiet)
|
||||||
{
|
{
|
||||||
// Strike with lightning
|
if (player != null)
|
||||||
final Location targetPos = player.getLocation();
|
|
||||||
for (int x = -1; x <= 1; x++)
|
|
||||||
{
|
{
|
||||||
for (int z = -1; z <= 1; z++)
|
// Strike with lightning
|
||||||
|
final Location targetPos = player.getLocation();
|
||||||
|
for (int x = -1; x <= 1; x++)
|
||||||
{
|
{
|
||||||
final Location strike_pos = new Location(targetPos.getWorld(), targetPos.getBlockX() + x, targetPos.getBlockY(), targetPos.getBlockZ() + z);
|
for (int z = -1; z <= 1; z++)
|
||||||
Objects.requireNonNull(targetPos.getWorld()).strikeLightningEffect(strike_pos);
|
{
|
||||||
|
final Location strike_pos = new Location(targetPos.getWorld(), targetPos.getBlockX() + x, targetPos.getBlockY(), targetPos.getBlockZ() + z);
|
||||||
|
Objects.requireNonNull(targetPos.getWorld()).strikeLightningEffect(strike_pos);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
player.kickPlayer(ban.bakeKickMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
FUtil.adminAction(sender.getName(), message.toString(), true);
|
FUtil.adminAction(sender.getName(), message.toString(), true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
msg("Quietly temporarily banned " + player.getName() + ".");
|
msg("Quietly temporarily banned " + username + ".");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (Player p : Bukkit.getOnlinePlayers())
|
||||||
Ban ban;
|
|
||||||
|
|
||||||
ban = Ban.forPlayer(player, sender, null, reason);
|
|
||||||
|
|
||||||
for (String ip : ips)
|
|
||||||
{
|
{
|
||||||
ban.addIp(ip);
|
if (FUtil.getIp(p).equals(ip))
|
||||||
|
{
|
||||||
|
p.kickPlayer(ChatColor.RED + "You've been kicked because someone on your IP has been banned.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
plugin.bm.addBan(ban);
|
|
||||||
player.kickPlayer(ban.bakeKickMessage());
|
plugin.pul.logPunishment(new Punishment(username, ip, sender.getName(), PunishmentType.TEMPBAN, reason));
|
||||||
plugin.pul.logPunishment(new Punishment(player.getName(), FUtil.getIp(player), sender.getName(), PunishmentType.TEMPBAN, reason));
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -16,6 +16,12 @@ import org.bukkit.entity.Player;
|
|||||||
@CommandParameters(description = "Toggles TotalFreedomMod settings", usage = "/<command> [option] [value] [value]")
|
@CommandParameters(description = "Toggles TotalFreedomMod settings", usage = "/<command> [option] [value] [value]")
|
||||||
public class Command_toggle extends FreedomCommand
|
public class Command_toggle extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
private final List<String> toggles = Arrays.asList(
|
||||||
|
"waterplace", "fireplace", "lavaplace", "fluidspread", "lavadmg", "firespread", "frostwalk",
|
||||||
|
"firework", "prelog", "lockdown", "petprotect", "entitywipe", "nonuke [range] [count]",
|
||||||
|
"explosives [radius]", "unsafeenchs", "bells", "armorstands", "structureblocks", "jigsaws", "grindstones",
|
||||||
|
"jukeboxes", "spawners", "4chan", "beehives", "respawnanchors", "autotp", "autoclear", "minecarts", "mp44",
|
||||||
|
"landmines", "tossmob", "gravity");
|
||||||
|
|
||||||
@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)
|
||||||
@ -23,38 +29,10 @@ public class Command_toggle extends FreedomCommand
|
|||||||
if (args.length == 0)
|
if (args.length == 0)
|
||||||
{
|
{
|
||||||
msg("Available toggles: ");
|
msg("Available toggles: ");
|
||||||
msg("- waterplace");
|
for (String toggle : toggles)
|
||||||
msg("- fireplace");
|
{
|
||||||
msg("- lavaplace");
|
msg("- " + toggle);
|
||||||
msg("- fluidspread");
|
}
|
||||||
msg("- lavadmg");
|
|
||||||
msg("- firespread");
|
|
||||||
msg("- frostwalk");
|
|
||||||
msg("- firework");
|
|
||||||
msg("- prelog");
|
|
||||||
msg("- lockdown");
|
|
||||||
msg("- petprotect");
|
|
||||||
msg("- entitywipe");
|
|
||||||
msg("- nonuke [range] [count]");
|
|
||||||
msg("- explosives [radius]");
|
|
||||||
msg("- unsafeenchs");
|
|
||||||
msg("- bells");
|
|
||||||
msg("- armorstands");
|
|
||||||
msg("- structureblocks");
|
|
||||||
msg("- jigsaws");
|
|
||||||
msg("- grindstones");
|
|
||||||
msg("- jukeboxes");
|
|
||||||
msg("- spawners");
|
|
||||||
msg("- 4chan");
|
|
||||||
msg("- beehives");
|
|
||||||
msg("- respawnanchors");
|
|
||||||
msg("- autotp");
|
|
||||||
msg("- autoclear");
|
|
||||||
msg("- minecarts");
|
|
||||||
msg("- landmines");
|
|
||||||
msg("- mp44");
|
|
||||||
msg("- tossmob");
|
|
||||||
msg("- gravity");
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -304,6 +282,16 @@ public class Command_toggle extends FreedomCommand
|
|||||||
toggle("Block gravity is", ConfigEntry.ALLOW_GRAVITY);
|
toggle("Block gravity is", ConfigEntry.ALLOW_GRAVITY);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default:
|
||||||
|
{
|
||||||
|
msg("Available toggles: ");
|
||||||
|
for (String toggle : toggles)
|
||||||
|
{
|
||||||
|
msg("- " + toggle);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
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.shop.ShopItem;
|
||||||
|
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.ONLY_IN_GAME)
|
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
|
||||||
@CommandParameters(description = "Trails rainbow wool behind you as you walk/fly.", usage = "/<command>")
|
@CommandParameters(description = "Trails rainbow wool behind you as you walk/fly.", usage = "/<command>")
|
||||||
public class Command_trail extends FreedomCommand
|
public class Command_trail extends FreedomCommand
|
||||||
{
|
{
|
||||||
@ -13,6 +15,12 @@ public class Command_trail 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.pl.getData(playerSender).hasItem(ShopItem.RAINBOW_TRAIL))
|
||||||
|
{
|
||||||
|
msg("You didn't purchase the ability to have a " + ShopItem.RAINBOW_TRAIL.getName() + "! Purchase it from the shop.", ChatColor.RED);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
if (plugin.tr.contains(playerSender))
|
if (plugin.tr.contains(playerSender))
|
||||||
{
|
{
|
||||||
plugin.tr.remove(playerSender);
|
plugin.tr.remove(playerSender);
|
||||||
@ -21,7 +29,7 @@ public class Command_trail extends FreedomCommand
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
plugin.tr.add(playerSender);
|
plugin.tr.add(playerSender);
|
||||||
msg("Trail enabled. Use \"/trail off\" to disable.");
|
msg("Trail enabled. Run this command again to disable it.");
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -1,12 +1,9 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import com.earth2me.essentials.User;
|
||||||
import java.util.List;
|
|
||||||
import me.totalfreedom.totalfreedommod.banning.Ban;
|
|
||||||
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 me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import org.apache.commons.lang.StringUtils;
|
|
||||||
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;
|
||||||
@ -22,20 +19,33 @@ public class Command_unban extends FreedomCommand
|
|||||||
if (args.length > 0)
|
if (args.length > 0)
|
||||||
{
|
{
|
||||||
String username;
|
String username;
|
||||||
final PlayerData entry = plugin.pl.getData(args[0]);
|
String ip;
|
||||||
|
|
||||||
if (entry == null)
|
// Gets the IP using Essentials data if available
|
||||||
|
if (plugin.esb.isEnabled() && plugin.esb.getEssentialsUser(args[0]) != 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();
|
||||||
|
}
|
||||||
|
// Secondary method - using Essentials if available
|
||||||
|
else
|
||||||
|
{
|
||||||
|
final PlayerData entry = plugin.pl.getData(args[0]);
|
||||||
|
if (entry == null)
|
||||||
|
{
|
||||||
|
msg(PLAYER_NOT_FOUND);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
username = entry.getName();
|
||||||
|
ip = entry.getIps().get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
username = entry.getName();
|
|
||||||
final List<String> ips = new ArrayList<>(entry.getIps());
|
|
||||||
|
|
||||||
FUtil.adminAction(sender.getName(), "Unbanning " + username, true);
|
FUtil.adminAction(sender.getName(), "Unbanning " + username, true);
|
||||||
msg(username + " has been unbanned along with the following IPs: " + StringUtils.join(ips, ", "));
|
|
||||||
plugin.bm.removeBan(plugin.bm.getByUsername(username));
|
plugin.bm.removeBan(plugin.bm.getByUsername(username));
|
||||||
|
plugin.bm.removeBan(plugin.bm.getByIp(ip));
|
||||||
|
msg(username + " has been unbanned along with the IP: " + ip);
|
||||||
|
|
||||||
if (args.length >= 2)
|
if (args.length >= 2)
|
||||||
{
|
{
|
||||||
@ -45,20 +55,6 @@ public class Command_unban extends FreedomCommand
|
|||||||
msg("Restored edits for: " + username);
|
msg("Restored edits for: " + username);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (String ip : ips)
|
|
||||||
{
|
|
||||||
Ban ban = plugin.bm.getByIp(ip);
|
|
||||||
if (ban != null)
|
|
||||||
{
|
|
||||||
plugin.bm.removeBan(ban);
|
|
||||||
}
|
|
||||||
ban = plugin.bm.getByIp(FUtil.getFuzzyIp(ip));
|
|
||||||
if (ban != null)
|
|
||||||
{
|
|
||||||
plugin.bm.removeBan(ban);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -17,7 +17,7 @@ public class Command_unlinkdiscord 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -31,7 +31,7 @@ public class Command_unlinkdiscord extends FreedomCommand
|
|||||||
}
|
}
|
||||||
|
|
||||||
playerData.setDiscordID(null);
|
playerData.setDiscordID(null);
|
||||||
msg("Unlinked " + args[0] + "'s discord account.", ChatColor.GREEN);
|
msg("Unlinked " + args[0] + "'s Discord account.", ChatColor.GREEN);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -42,7 +42,6 @@ public class Command_unlinkdiscord extends FreedomCommand
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
data.setDiscordID(null);
|
data.setDiscordID(null);
|
||||||
data.setVerification(false);
|
|
||||||
plugin.pl.save(data);
|
plugin.pl.save(data);
|
||||||
msg("Your Minecraft account has been successfully unlinked from the Discord account.", ChatColor.GREEN);
|
msg("Your Minecraft account has been successfully unlinked from the Discord account.", ChatColor.GREEN);
|
||||||
return true;
|
return true;
|
||||||
|
@ -45,7 +45,7 @@ public class Command_vanish extends FreedomCommand
|
|||||||
msg("You have unvanished.", ChatColor.GOLD);
|
msg("You have unvanished.", ChatColor.GOLD);
|
||||||
FUtil.bcastMsg(plugin.rm.craftLoginMessage(playerSender, null));
|
FUtil.bcastMsg(plugin.rm.craftLoginMessage(playerSender, null));
|
||||||
FUtil.bcastMsg(playerSender.getName() + " joined the game.", ChatColor.YELLOW);
|
FUtil.bcastMsg(playerSender.getName() + " joined the game.", ChatColor.YELLOW);
|
||||||
plugin.dc.messageChatChannel("**" + playerSender.getName() + " joined the server" + "**");
|
plugin.dc.messageChatChannel("**" + playerSender.getName() + " joined the server" + "**", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayerData playerData = plugin.pl.getData(playerSender);
|
PlayerData playerData = plugin.pl.getData(playerSender);
|
||||||
@ -91,7 +91,7 @@ public class Command_vanish extends FreedomCommand
|
|||||||
{
|
{
|
||||||
msg("You have vanished.", ChatColor.GOLD);
|
msg("You have vanished.", ChatColor.GOLD);
|
||||||
FUtil.bcastMsg(playerSender.getName() + " left the game.", ChatColor.YELLOW);
|
FUtil.bcastMsg(playerSender.getName() + " left the game.", ChatColor.YELLOW);
|
||||||
plugin.dc.messageChatChannel("**" + playerSender.getName() + " left the server" + "**");
|
plugin.dc.messageChatChannel("**" + playerSender.getName() + " left the server" + "**", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
FLog.info(playerSender.getName() + " is now vanished.");
|
FLog.info(playerSender.getName() + " is now vanished.");
|
||||||
|
@ -1,101 +0,0 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
|
||||||
import me.totalfreedom.totalfreedommod.discord.Discord;
|
|
||||||
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
|
||||||
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.IMPOSTOR, source = SourceType.BOTH)
|
|
||||||
@CommandParameters(description = "Sends a verification code to the player, or the player can input the sent code. Admins can manually verify a player impostor.", usage = "/<command> <code | <playername>>")
|
|
||||||
public class Command_verify 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 (senderIsConsole)
|
|
||||||
{
|
|
||||||
msg("/manuallyverify <playername>", ChatColor.WHITE);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!plugin.pl.IsImpostor(playerSender))
|
|
||||||
{
|
|
||||||
msg("You are not an impostor, therefore you do not need to verify.", ChatColor.RED);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
PlayerData playerData = plugin.pl.getData(playerSender);
|
|
||||||
String discordId = playerData.getDiscordID();
|
|
||||||
|
|
||||||
if (playerData.getDiscordID() == null)
|
|
||||||
{
|
|
||||||
msg("You do not have a Discord account linked to your Minecraft account, please verify the manual way.", ChatColor.RED);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args.length == 0)
|
|
||||||
{
|
|
||||||
String code = plugin.dc.generateCode(10);
|
|
||||||
plugin.dc.addVerificationCode(code, playerData);
|
|
||||||
plugin.dc.getUser(discordId).openPrivateChannel().complete().sendMessage("A user with the IP `" + FUtil.getIp(playerSender) + "` has sent a verification request. Please run the following in-game command: `/verify " + code + "`").complete();
|
|
||||||
msg("A verification code has been sent to your account, please copy the code and run /verify <code>", ChatColor.GREEN);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
String code = args[0];
|
|
||||||
String backupCode = null;
|
|
||||||
|
|
||||||
if (plugin.pl.IsImpostor(playerSender))
|
|
||||||
{
|
|
||||||
PlayerData mapPlayer = plugin.dc.getVerificationCodes().get(code);
|
|
||||||
if (mapPlayer == null)
|
|
||||||
{
|
|
||||||
if (!playerData.getBackupCodes().contains(Discord.getMD5(code)))
|
|
||||||
{
|
|
||||||
msg("You have entered an invalid verification code", ChatColor.RED);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
backupCode = Discord.getMD5(code);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
plugin.dc.removeVerificationCode(code);
|
|
||||||
}
|
|
||||||
|
|
||||||
final FPlayer fPlayer = plugin.pl.getPlayer(playerSender);
|
|
||||||
if (fPlayer.getFreezeData().isFrozen())
|
|
||||||
{
|
|
||||||
fPlayer.getFreezeData().setFrozen(false);
|
|
||||||
msg("You have been unfrozen.");
|
|
||||||
}
|
|
||||||
FUtil.bcastMsg(playerSender.getName() + " has verified!", ChatColor.GOLD);
|
|
||||||
playerSender.setOp(true);
|
|
||||||
plugin.pl.verify(playerSender, backupCode);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,92 +0,0 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import me.totalfreedom.totalfreedommod.player.FPlayer;
|
|
||||||
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 = "Verify an admin without giving them admin permissions.", usage = "/<command> <player>", aliases = "vns,verifynostaff,vna")
|
|
||||||
public class Command_verifynoadmin extends FreedomCommand
|
|
||||||
{
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
|
||||||
{
|
|
||||||
if (args.length < 1)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Player player = getPlayer(args[0]);
|
|
||||||
|
|
||||||
if (player == null)
|
|
||||||
{
|
|
||||||
msg(PLAYER_NOT_FOUND);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (plugin.al.isAdminImpostor(player))
|
|
||||||
{
|
|
||||||
String ip = FUtil.getIp(player);
|
|
||||||
if (!plugin.al.verifiedNoAdmin.containsKey(player.getName()))
|
|
||||||
{
|
|
||||||
List<String> ips = new ArrayList<>();
|
|
||||||
ips.add(ip);
|
|
||||||
plugin.al.verifiedNoAdmin.put(player.getName(), ips);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
List<String> ips = plugin.al.verifiedNoAdmin.get(player.getName());
|
|
||||||
if (!ips.contains(ip))
|
|
||||||
{
|
|
||||||
ips.add(ip);
|
|
||||||
plugin.al.verifiedNoAdmin.remove(player.getName());
|
|
||||||
plugin.al.verifiedNoAdmin.put(player.getName(), ips);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
plugin.rm.updateDisplay(player);
|
|
||||||
FUtil.adminAction(sender.getName(), "Verified " + player.getName() + ", without admin permissions.", true);
|
|
||||||
player.setOp(true);
|
|
||||||
msg(player, YOU_ARE_OP);
|
|
||||||
final FPlayer fPlayer = plugin.pl.getPlayer(player);
|
|
||||||
if (fPlayer.getFreezeData().isFrozen())
|
|
||||||
{
|
|
||||||
fPlayer.getFreezeData().setFrozen(false);
|
|
||||||
msg(player, "You have been unfrozen.");
|
|
||||||
}
|
|
||||||
msg("Verified " + player.getName() + " but didn't give them admin permissions", ChatColor.GREEN);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
msg(player.getName() + " is not an admin imposter.", ChatColor.RED);
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args)
|
|
||||||
{
|
|
||||||
if (args.length == 1)
|
|
||||||
{
|
|
||||||
List<String> adminImposters = new ArrayList<>();
|
|
||||||
for (Player player : server.getOnlinePlayers())
|
|
||||||
{
|
|
||||||
if (plugin.al.isAdminImpostor(player))
|
|
||||||
{
|
|
||||||
adminImposters.add(player.getName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return adminImposters;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,6 +1,9 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
|
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 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;
|
||||||
@ -53,25 +56,28 @@ public class Command_warn extends FreedomCommand
|
|||||||
|
|
||||||
String warnReason = StringUtils.join(ArrayUtils.subarray(args, 1, args.length), " ");
|
String warnReason = StringUtils.join(ArrayUtils.subarray(args, 1, args.length), " ");
|
||||||
player.sendTitle(ChatColor.RED + "You've been warned.", ChatColor.YELLOW + "Reason: " + warnReason, 20, 100, 60);
|
player.sendTitle(ChatColor.RED + "You've been warned.", ChatColor.YELLOW + "Reason: " + warnReason, 20, 100, 60);
|
||||||
msg(ChatColor.GREEN + "You have successfully warned " + player.getName());
|
msg(player, ChatColor.RED + "[WARNING] You received a warning from " + sender.getName() + ": " + warnReason);
|
||||||
|
plugin.pl.getPlayer(player).incrementWarnings(quiet);
|
||||||
|
plugin.pul.logPunishment(new Punishment(player.getName(), FUtil.getIp(player), sender.getName(), PunishmentType.WARN, warnReason));
|
||||||
|
|
||||||
if (quiet)
|
if (quiet)
|
||||||
{
|
{
|
||||||
msg("Warned " + player.getName() + " quietly");
|
msg("You have successfully warned " + player.getName() + " quietly.");
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
String adminNotice = ChatColor.RED +
|
||||||
|
sender.getName() +
|
||||||
|
" - " +
|
||||||
|
"Warning: " +
|
||||||
|
player.getName() +
|
||||||
|
" - Reason: " +
|
||||||
|
ChatColor.YELLOW +
|
||||||
|
warnReason;
|
||||||
|
plugin.al.messageAllAdmins(adminNotice);
|
||||||
|
|
||||||
msg(player, ChatColor.RED + "[WARNING] You received a warning from " + sender.getName() + ": " + warnReason);
|
msg("You have successfully warned " + player.getName() + ".");
|
||||||
String adminNotice = ChatColor.RED +
|
}
|
||||||
sender.getName() +
|
|
||||||
" - " +
|
|
||||||
"Warning: " +
|
|
||||||
player.getName() +
|
|
||||||
" - Reason: " +
|
|
||||||
ChatColor.YELLOW +
|
|
||||||
warnReason;
|
|
||||||
plugin.al.messageAllAdmins(adminNotice);
|
|
||||||
plugin.pl.getPlayer(player).incrementWarnings();
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -5,7 +5,6 @@ import java.util.Arrays;
|
|||||||
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;
|
||||||
import me.totalfreedom.totalfreedommod.util.DepreciationAggregator;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
@ -95,7 +94,7 @@ public class Command_whitelist extends FreedomCommand
|
|||||||
|
|
||||||
if (player == null)
|
if (player == null)
|
||||||
{
|
{
|
||||||
player = DepreciationAggregator.getOfflinePlayer(server, search_name);
|
player = server.getOfflinePlayer(search_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
FUtil.adminAction(sender.getName(), "Adding " + player.getName() + " to the whitelist", false);
|
FUtil.adminAction(sender.getName(), "Adding " + player.getName() + " to the whitelist", false);
|
||||||
@ -117,7 +116,7 @@ public class Command_whitelist extends FreedomCommand
|
|||||||
|
|
||||||
if (player == null)
|
if (player == null)
|
||||||
{
|
{
|
||||||
player = DepreciationAggregator.getOfflinePlayer(server, search_name);
|
player = server.getOfflinePlayer(search_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player.isWhitelisted())
|
if (player.isWhitelisted())
|
||||||
@ -158,7 +157,7 @@ public class Command_whitelist extends FreedomCommand
|
|||||||
if (args[0].equalsIgnoreCase("purge"))
|
if (args[0].equalsIgnoreCase("purge"))
|
||||||
{
|
{
|
||||||
FUtil.adminAction(sender.getName(), "Removing all players from the whitelist", false);
|
FUtil.adminAction(sender.getName(), "Removing all players from the whitelist", false);
|
||||||
msg("Removed " + plugin.si.purgeWhitelist() + " players from the whitelist.");
|
msg("Removed " + purge() + " players from the whitelist.");
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -198,10 +197,21 @@ public class Command_whitelist extends FreedomCommand
|
|||||||
public List<String> getWhitelistedNames()
|
public List<String> getWhitelistedNames()
|
||||||
{
|
{
|
||||||
List<String> names = new ArrayList<>();
|
List<String> names = new ArrayList<>();
|
||||||
for (Object name : plugin.si.getWhitelisted())
|
for (OfflinePlayer player : server.getWhitelistedPlayers())
|
||||||
{
|
{
|
||||||
names.add(String.valueOf(name));
|
names.add(player.getName());
|
||||||
}
|
}
|
||||||
return names;
|
return names;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int purge()
|
||||||
|
{
|
||||||
|
int removed = 0;
|
||||||
|
for (OfflinePlayer player : server.getWhitelistedPlayers())
|
||||||
|
{
|
||||||
|
player.setWhitelisted(false);
|
||||||
|
removed++;
|
||||||
|
}
|
||||||
|
return removed;
|
||||||
|
}
|
||||||
}
|
}
|
@ -3,6 +3,8 @@ package me.totalfreedom.totalfreedommod.command;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
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.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;
|
||||||
@ -15,14 +17,6 @@ import org.bukkit.entity.Player;
|
|||||||
public class Command_wildcard extends FreedomCommand
|
public class Command_wildcard extends FreedomCommand
|
||||||
{
|
{
|
||||||
|
|
||||||
public static final List<String> BLOCKED_COMMANDS = Arrays.asList(
|
|
||||||
"wildcard",
|
|
||||||
"gtfo",
|
|
||||||
"doom",
|
|
||||||
"slconfig",
|
|
||||||
"smite"
|
|
||||||
);
|
|
||||||
|
|
||||||
@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)
|
||||||
{
|
{
|
||||||
@ -52,7 +46,7 @@ public class Command_wildcard extends FreedomCommand
|
|||||||
aliases = Arrays.asList(fCmd.getAliases().split(","));
|
aliases = Arrays.asList(fCmd.getAliases().split(","));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (String blockedCommand : BLOCKED_COMMANDS)
|
for (String blockedCommand : ConfigEntry.WILDCARD_BLOCKED_COMMANDS.getStringList())
|
||||||
{
|
{
|
||||||
if (blockedCommand.equals(args[0].toLowerCase()) || aliases.contains(blockedCommand))
|
if (blockedCommand.equals(args[0].toLowerCase()) || aliases.contains(blockedCommand))
|
||||||
{
|
{
|
||||||
|
@ -1,37 +0,0 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.ADMIN, source = SourceType.ONLY_CONSOLE)
|
|
||||||
@CommandParameters(description = "Wipes the CoreProtect data for the flatlands", usage = "/<command>")
|
|
||||||
public class Command_wipecoreprotectdata extends FreedomCommand
|
|
||||||
{
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean run(final 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
FUtil.adminAction(sender.getName(), "Wiping CoreProtect data for the flatlands", true);
|
|
||||||
|
|
||||||
new BukkitRunnable()
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public void run()
|
|
||||||
{
|
|
||||||
plugin.cpb.clearDatabase(plugin.wm.flatlands.getWorld());
|
|
||||||
}
|
|
||||||
}.runTaskAsynchronously(plugin);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,53 +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.World;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.SENIOR_ADMIN, source = SourceType.ONLY_CONSOLE, blockHostConsole = true)
|
|
||||||
@CommandParameters(description = "Wipe the flatlands map. Requires manual restart after command is used.", usage = "/<command>")
|
|
||||||
public class Command_wipeflatlands extends FreedomCommand
|
|
||||||
{
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean run(final CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
|
||||||
{
|
|
||||||
plugin.sf.setSavedFlag("do_wipe_flatlands", true);
|
|
||||||
|
|
||||||
if (!ConfigEntry.FLATLANDS_GENERATE.getBoolean())
|
|
||||||
{
|
|
||||||
msg("Flatlands generation is disabled, therefore it cannot be wiped.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
FUtil.bcastMsg("Server is going offline for flatlands wipe.", ChatColor.GRAY);
|
|
||||||
|
|
||||||
World flatlands = plugin.wm.flatlands.getWorld();
|
|
||||||
|
|
||||||
if (plugin.wgb.isEnabled())
|
|
||||||
{
|
|
||||||
plugin.wgb.wipeRegions(flatlands);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Player player : server.getOnlinePlayers())
|
|
||||||
{
|
|
||||||
player.kickPlayer("Server is going offline for flatlands wipe, come back in a few minutes.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (plugin.cpb.isEnabled())
|
|
||||||
{
|
|
||||||
plugin.cpb.clearDatabase(flatlands, true);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
server.shutdown();
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,40 +0,0 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
|
||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.SENIOR_ADMIN, source = SourceType.ONLY_CONSOLE, blockHostConsole = true)
|
|
||||||
@CommandParameters(description = "Wipes all logged punishments or punishments for a specific user.", usage = "/<command> <username | -a>")
|
|
||||||
public class Command_wipepunishments extends FreedomCommand
|
|
||||||
{
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean run(final CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (args.length < 1)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args[0].equalsIgnoreCase("-a"))
|
|
||||||
{
|
|
||||||
FUtil.adminAction(sender.getName(), "Wiping the punishment history", true);
|
|
||||||
|
|
||||||
msg("Wiped " + plugin.pul.clear() + " punishments.");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
String username = args[0];
|
|
||||||
|
|
||||||
FUtil.adminAction(sender.getName(), "Wiping the punishment history for " + username, true);
|
|
||||||
|
|
||||||
msg("Wiped " + plugin.pul.clear(username) + " punishments for " + username + ".");
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,73 +0,0 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.World;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.SENIOR_ADMIN, source = SourceType.ONLY_CONSOLE)
|
|
||||||
@CommandParameters(description = "Wipe all WorldGuard regions for a specified world.", usage = "/<command> <world>")
|
|
||||||
public class Command_wiperegions extends FreedomCommand
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
|
||||||
{
|
|
||||||
if (!plugin.wgb.isEnabled())
|
|
||||||
{
|
|
||||||
msg("WorldGuard is not enabled.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args.length != 1)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
World world = server.getWorld(args[0]);
|
|
||||||
if (world == null)
|
|
||||||
{
|
|
||||||
msg("There is no world named \"" + args[0] + "\"", ChatColor.RED);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
int regionsWiped = plugin.wgb.wipeRegions(world);
|
|
||||||
|
|
||||||
if (regionsWiped != 0)
|
|
||||||
{
|
|
||||||
FUtil.adminAction(sender.getName(), "Wiped all regions in " + world.getName(), true);
|
|
||||||
msg("Wiped " + regionsWiped + " regions in " + world.getName());
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
msg(ChatColor.RED + "No regions were found in \"" + world.getName() + "\"");
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<String> getAllWorldNames()
|
|
||||||
{
|
|
||||||
List<String> names = new ArrayList<>();
|
|
||||||
for (World world : server.getWorlds())
|
|
||||||
{
|
|
||||||
names.add(world.getName());
|
|
||||||
}
|
|
||||||
return names;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args)
|
|
||||||
{
|
|
||||||
if (args.length == 1)
|
|
||||||
{
|
|
||||||
return getAllWorldNames();
|
|
||||||
}
|
|
||||||
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,34 +0,0 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
|
||||||
|
|
||||||
import com.earth2me.essentials.Essentials;
|
|
||||||
import java.io.File;
|
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
|
||||||
import org.bukkit.command.Command;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
@CommandPermissions(level = Rank.SENIOR_ADMIN, source = SourceType.ONLY_CONSOLE, blockHostConsole = true)
|
|
||||||
@CommandParameters(description = "Removes all Essentials warps", usage = "/<command>")
|
|
||||||
public class Command_wipewarps extends FreedomCommand
|
|
||||||
{
|
|
||||||
@Override
|
|
||||||
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
|
|
||||||
{
|
|
||||||
if (!plugin.esb.isEnabled())
|
|
||||||
{
|
|
||||||
msg("Essentials is not enabled on this server.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Essentials essentials = plugin.esb.getEssentialsPlugin();
|
|
||||||
File warps = new File(essentials.getDataFolder(), "warps");
|
|
||||||
FUtil.adminAction(sender.getName(), "Wiping Essentials warps", true);
|
|
||||||
FUtil.deleteFolder(warps);
|
|
||||||
//noinspection ResultOfMethodCallIgnored
|
|
||||||
warps.mkdir();
|
|
||||||
essentials.reload();
|
|
||||||
msg("All warps deleted.");
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,33 +1,27 @@
|
|||||||
package me.totalfreedom.totalfreedommod.command;
|
package me.totalfreedom.totalfreedommod.command;
|
||||||
|
|
||||||
import com.google.common.collect.Lists;
|
import com.google.common.collect.Lists;
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Timer;
|
|
||||||
import java.util.TimerTask;
|
|
||||||
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
|
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
|
||||||
import me.totalfreedom.totalfreedommod.admin.Admin;
|
import me.totalfreedom.totalfreedommod.admin.Admin;
|
||||||
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.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.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
import org.bukkit.Server;
|
import org.bukkit.Server;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.*;
|
||||||
import org.bukkit.command.CommandExecutor;
|
|
||||||
import org.bukkit.command.CommandMap;
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.command.ConsoleCommandSender;
|
|
||||||
import org.bukkit.command.PluginCommand;
|
|
||||||
import org.bukkit.command.TabCompleter;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.plugin.Plugin;
|
||||||
import org.bukkit.util.StringUtil;
|
import org.bukkit.util.StringUtil;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
public abstract class FreedomCommand implements CommandExecutor, TabCompleter
|
public abstract class FreedomCommand implements CommandExecutor, TabCompleter
|
||||||
{
|
{
|
||||||
@ -40,7 +34,6 @@ public abstract class FreedomCommand implements CommandExecutor, TabCompleter
|
|||||||
public static final String NO_PERMISSION = ChatColor.RED + "You do not have permission to execute this command.";
|
public static final String NO_PERMISSION = ChatColor.RED + "You do not have permission to execute this command.";
|
||||||
public static final Timer timer = new Timer();
|
public static final Timer timer = new Timer();
|
||||||
public static final Map<CommandSender, FreedomCommand> COOLDOWN_TIMERS = new HashMap<>();
|
public static final Map<CommandSender, FreedomCommand> COOLDOWN_TIMERS = new HashMap<>();
|
||||||
private static CommandMap commandMap;
|
|
||||||
protected final TotalFreedomMod plugin = TotalFreedomMod.getPlugin();
|
protected final TotalFreedomMod plugin = TotalFreedomMod.getPlugin();
|
||||||
protected final Server server = plugin.getServer();
|
protected final Server server = plugin.getServer();
|
||||||
private final String name;
|
private final String name;
|
||||||
@ -69,34 +62,22 @@ public abstract class FreedomCommand implements CommandExecutor, TabCompleter
|
|||||||
this.cooldown = perms.cooldown();
|
this.cooldown = perms.cooldown();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static CommandMap getCommandMap()
|
|
||||||
{
|
|
||||||
if (commandMap == null)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
final Field f = Bukkit.getServer().getPluginManager().getClass().getDeclaredField("commandMap");
|
|
||||||
f.setAccessible(true);
|
|
||||||
commandMap = (CommandMap)f.get(Bukkit.getServer().getPluginManager());
|
|
||||||
}
|
|
||||||
catch (Exception e)
|
|
||||||
{
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return commandMap;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static FreedomCommand getFrom(Command command)
|
public static FreedomCommand getFrom(Command command)
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return (FreedomCommand)(((PluginCommand)command).getExecutor());
|
if (command instanceof FCommand)
|
||||||
|
{
|
||||||
|
return ((FCommand) command).getExecutor();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
FLog.severe(ex);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getCommandPrefix()
|
public static String getCommandPrefix()
|
||||||
@ -119,7 +100,7 @@ public abstract class FreedomCommand implements CommandExecutor, TabCompleter
|
|||||||
{
|
{
|
||||||
cmd.setUsage(this.usage);
|
cmd.setUsage(this.usage);
|
||||||
}
|
}
|
||||||
getCommandMap().register("totalfreedommod", cmd);
|
server.getCommandMap().register("totalfreedommod", cmd);
|
||||||
cmd.setExecutor(this);
|
cmd.setExecutor(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -246,6 +227,16 @@ public abstract class FreedomCommand implements CommandExecutor, TabCompleter
|
|||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
protected OfflinePlayer getOfflinePlayer(String name)
|
||||||
|
{
|
||||||
|
return Arrays.stream(Bukkit.getOfflinePlayers())
|
||||||
|
.filter(player -> player.getName() != null)
|
||||||
|
.filter(player -> player.getName().equalsIgnoreCase(name))
|
||||||
|
.findFirst()
|
||||||
|
.orElse(null);
|
||||||
|
}
|
||||||
|
|
||||||
protected Admin getAdmin(CommandSender sender)
|
protected Admin getAdmin(CommandSender sender)
|
||||||
{
|
{
|
||||||
return plugin.al.getAdmin(sender);
|
return plugin.al.getAdmin(sender);
|
||||||
@ -316,7 +307,7 @@ public abstract class FreedomCommand implements CommandExecutor, TabCompleter
|
|||||||
return perms;
|
return perms;
|
||||||
}
|
}
|
||||||
|
|
||||||
private final class FCommand extends Command
|
public final class FCommand extends Command implements PluginIdentifiableCommand
|
||||||
{
|
{
|
||||||
private FreedomCommand cmd = null;
|
private FreedomCommand cmd = null;
|
||||||
|
|
||||||
@ -325,6 +316,11 @@ public abstract class FreedomCommand implements CommandExecutor, TabCompleter
|
|||||||
super(command);
|
super(command);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public final FreedomCommand getExecutor()
|
||||||
|
{
|
||||||
|
return cmd;
|
||||||
|
}
|
||||||
|
|
||||||
public void setExecutor(FreedomCommand cmd)
|
public void setExecutor(FreedomCommand cmd)
|
||||||
{
|
{
|
||||||
this.cmd = cmd;
|
this.cmd = cmd;
|
||||||
@ -427,5 +423,11 @@ public abstract class FreedomCommand implements CommandExecutor, TabCompleter
|
|||||||
}
|
}
|
||||||
return new ArrayList<>();
|
return new ArrayList<>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public @NotNull Plugin getPlugin()
|
||||||
|
{
|
||||||
|
return plugin;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -45,6 +45,8 @@ public enum ConfigEntry
|
|||||||
MOB_LIMITER_DISABLE_GIANT(Boolean.class, "moblimiter.disable.giant"),
|
MOB_LIMITER_DISABLE_GIANT(Boolean.class, "moblimiter.disable.giant"),
|
||||||
MOB_LIMITER_DISABLE_SLIME(Boolean.class, "moblimiter.disable.slime"),
|
MOB_LIMITER_DISABLE_SLIME(Boolean.class, "moblimiter.disable.slime"),
|
||||||
//
|
//
|
||||||
|
SPAWNMOB_MAX(Integer.class, "spawnmob.max"),
|
||||||
|
//
|
||||||
HTTPD_ENABLED(Boolean.class, "httpd.enabled"),
|
HTTPD_ENABLED(Boolean.class, "httpd.enabled"),
|
||||||
HTTPD_HOST(String.class, "httpd.host"),
|
HTTPD_HOST(String.class, "httpd.host"),
|
||||||
HTTPD_PORT(Integer.class, "httpd.port"),
|
HTTPD_PORT(Integer.class, "httpd.port"),
|
||||||
@ -71,9 +73,10 @@ public enum ConfigEntry
|
|||||||
SERVER_WHITELIST_MOTD(String.class, "server.motds.whitelist"),
|
SERVER_WHITELIST_MOTD(String.class, "server.motds.whitelist"),
|
||||||
SERVER_FULL_MOTD(String.class, "server.motds.full"),
|
SERVER_FULL_MOTD(String.class, "server.motds.full"),
|
||||||
//
|
//
|
||||||
DISCORD_VERIFICATION(Boolean.class, "discord.verification"),
|
|
||||||
DISCORD_TOKEN(String.class, "discord.token"),
|
DISCORD_TOKEN(String.class, "discord.token"),
|
||||||
|
DISCORD_PREFIX(String.class, "discord.prefix"),
|
||||||
DISCORD_REPORT_CHANNEL_ID(String.class, "discord.report_channel_id"),
|
DISCORD_REPORT_CHANNEL_ID(String.class, "discord.report_channel_id"),
|
||||||
|
DISCORD_REPORT_ARCHIVE_CHANNEL_ID(String.class, "discord.report_archive_channel_id"),
|
||||||
DISCORD_CHAT_CHANNEL_ID(String.class, "discord.chat_channel_id"),
|
DISCORD_CHAT_CHANNEL_ID(String.class, "discord.chat_channel_id"),
|
||||||
DISCORD_ADMINCHAT_CHANNEL_ID(String.class, "discord.adminchat_channel_id"),
|
DISCORD_ADMINCHAT_CHANNEL_ID(String.class, "discord.adminchat_channel_id"),
|
||||||
|
|
||||||
@ -83,8 +86,10 @@ public enum ConfigEntry
|
|||||||
DISCORD_NEW_ADMIN_ROLE_ID(String.class, "discord.admin_role_id"),
|
DISCORD_NEW_ADMIN_ROLE_ID(String.class, "discord.admin_role_id"),
|
||||||
DISCORD_SENIOR_ADMIN_ROLE_ID(String.class, "discord.senior_admin_role_id"),
|
DISCORD_SENIOR_ADMIN_ROLE_ID(String.class, "discord.senior_admin_role_id"),
|
||||||
DISCORD_DEVELOPER_ROLE_ID(String.class, "discord.developer_role_id"),
|
DISCORD_DEVELOPER_ROLE_ID(String.class, "discord.developer_role_id"),
|
||||||
|
DISCORD_ASSISTANT_EXECUTIVE_ROLE_ID(String.class, "discord.assistant_executive_role_id"),
|
||||||
DISCORD_EXECUTIVE_ROLE_ID(String.class, "discord.executive_role_id"),
|
DISCORD_EXECUTIVE_ROLE_ID(String.class, "discord.executive_role_id"),
|
||||||
DISCORD_SERVER_OWNER_ROLE_ID(String.class, "discord.server_owner_role_id"),
|
DISCORD_SERVER_OWNER_ROLE_ID(String.class, "discord.server_owner_role_id"),
|
||||||
|
DISCORD_INVITE_LINK(String.class, "discord.invite_link"),
|
||||||
//
|
//
|
||||||
PTERO_URL(String.class, "ptero.url"),
|
PTERO_URL(String.class, "ptero.url"),
|
||||||
PTERO_DEFAULT_EMAIL_DOMAIN(String.class, "ptero.default_email_domain"),
|
PTERO_DEFAULT_EMAIL_DOMAIN(String.class, "ptero.default_email_domain"),
|
||||||
@ -109,6 +114,7 @@ public enum ConfigEntry
|
|||||||
SHOP_PRICES_STACKING_POTATO(Integer.class, "shop.prices.stacking_potato"),
|
SHOP_PRICES_STACKING_POTATO(Integer.class, "shop.prices.stacking_potato"),
|
||||||
SHOP_PRICES_CLOWN_FISH(Integer.class, "shop.prices.clown_fish"),
|
SHOP_PRICES_CLOWN_FISH(Integer.class, "shop.prices.clown_fish"),
|
||||||
SHOP_PRICES_LOGIN_MESSAGES(Integer.class, "shop.prices.login_messages"),
|
SHOP_PRICES_LOGIN_MESSAGES(Integer.class, "shop.prices.login_messages"),
|
||||||
|
SHOP_PRICES_RAINBOW_TRAIL(Integer.class, "shop.prices.rainbow_trail"),
|
||||||
//
|
//
|
||||||
ADMINLIST_CLEAN_THESHOLD_HOURS(Integer.class, "adminlist.clean_threshold_hours"),
|
ADMINLIST_CLEAN_THESHOLD_HOURS(Integer.class, "adminlist.clean_threshold_hours"),
|
||||||
ADMINLIST_CONSOLE_IS_ADMIN(Boolean.class, "adminlist.console_is_admin"),
|
ADMINLIST_CONSOLE_IS_ADMIN(Boolean.class, "adminlist.console_is_admin"),
|
||||||
@ -154,13 +160,18 @@ public enum ConfigEntry
|
|||||||
EXPLOSIVE_RADIUS(Double.class, "explosive_radius"),
|
EXPLOSIVE_RADIUS(Double.class, "explosive_radius"),
|
||||||
FREECAM_TRIGGER_COUNT(Integer.class, "freecam_trigger_count"),
|
FREECAM_TRIGGER_COUNT(Integer.class, "freecam_trigger_count"),
|
||||||
SERVICE_CHECKER_URL(String.class, "service_checker_url"),
|
SERVICE_CHECKER_URL(String.class, "service_checker_url"),
|
||||||
BLOCKED_COMMANDS(List.class, "blocked_commands"),
|
BLOCKED_COMMANDS(List.class, "blocked_commands.global"),
|
||||||
|
MUTED_BLOCKED_COMMANDS(List.class, "blocked_commands.muted"),
|
||||||
|
WILDCARD_BLOCKED_COMMANDS(List.class, "blocked_commands.wildcard"),
|
||||||
|
FORBIDDEN_WORDS(List.class, "forbidden_words"),
|
||||||
HOST_SENDER_NAMES(List.class, "host_sender_names"),
|
HOST_SENDER_NAMES(List.class, "host_sender_names"),
|
||||||
FAMOUS_PLAYERS(List.class, "famous_players"),
|
FAMOUS_PLAYERS(List.class, "famous_players"),
|
||||||
ADMIN_ONLY_MODE(Boolean.class, "admin_only_mode"),
|
ADMIN_ONLY_MODE(Boolean.class, "admin_only_mode"),
|
||||||
ADMIN_INFO(List.class, "admininfo"),
|
ADMIN_INFO(List.class, "admininfo"),
|
||||||
VOTING_INFO(List.class, "votinginfo"),
|
VOTING_INFO(List.class, "votinginfo"),
|
||||||
MASTER_BUILDER_INFO(List.class, "masterbuilderinfo"),
|
MASTER_BUILDER_INFO(List.class, "masterbuilderinfo"),
|
||||||
|
FIRST_JOIN_INFO(List.class, "first_join_info.text"),
|
||||||
|
FIRST_JOIN_INFO_ENABLED(Boolean.class, "first_join_info.enabled"),
|
||||||
AUTO_ENTITY_WIPE(Boolean.class, "auto_wipe"),
|
AUTO_ENTITY_WIPE(Boolean.class, "auto_wipe"),
|
||||||
TOGGLE_CHAT(Boolean.class, "toggle_chat"),
|
TOGGLE_CHAT(Boolean.class, "toggle_chat"),
|
||||||
DEVELOPER_MODE(Boolean.class, "developer_mode"),
|
DEVELOPER_MODE(Boolean.class, "developer_mode"),
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
package me.totalfreedom.totalfreedommod.discord;
|
package me.totalfreedom.totalfreedommod.discord;
|
||||||
|
|
||||||
import com.google.common.base.Strings;
|
import com.google.common.base.Strings;
|
||||||
import java.io.File;
|
|
||||||
import java.io.FileWriter;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.time.ZonedDateTime;
|
import java.time.ZonedDateTime;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -16,13 +13,15 @@ import java.util.concurrent.ScheduledThreadPoolExecutor;
|
|||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
import javax.security.auth.login.LoginException;
|
import javax.security.auth.login.LoginException;
|
||||||
|
|
||||||
|
import com.google.common.collect.ImmutableList;
|
||||||
import me.totalfreedom.totalfreedommod.FreedomService;
|
import me.totalfreedom.totalfreedommod.FreedomService;
|
||||||
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.discord.command.DiscordCommandManager;
|
||||||
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.FLog;
|
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||||
import me.totalfreedom.totalfreedommod.util.FUtil;
|
|
||||||
import net.dv8tion.jda.api.EmbedBuilder;
|
import net.dv8tion.jda.api.EmbedBuilder;
|
||||||
import net.dv8tion.jda.api.JDA;
|
import net.dv8tion.jda.api.JDA;
|
||||||
import net.dv8tion.jda.api.JDABuilder;
|
import net.dv8tion.jda.api.JDABuilder;
|
||||||
@ -41,10 +40,14 @@ import net.dv8tion.jda.api.requests.GatewayIntent;
|
|||||||
import net.dv8tion.jda.api.utils.ChunkingFilter;
|
import net.dv8tion.jda.api.utils.ChunkingFilter;
|
||||||
import net.dv8tion.jda.api.utils.MemberCachePolicy;
|
import net.dv8tion.jda.api.utils.MemberCachePolicy;
|
||||||
import net.dv8tion.jda.internal.utils.concurrent.CountingThreadFactory;
|
import net.dv8tion.jda.internal.utils.concurrent.CountingThreadFactory;
|
||||||
import org.apache.commons.codec.digest.DigestUtils;
|
import net.kyori.adventure.text.Component;
|
||||||
|
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer;
|
||||||
|
import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer;
|
||||||
import org.apache.commons.lang.StringUtils;
|
import org.apache.commons.lang.StringUtils;
|
||||||
import org.apache.commons.lang.WordUtils;
|
import org.apache.commons.lang.WordUtils;
|
||||||
|
import org.apache.commons.lang3.RandomStringUtils;
|
||||||
import org.bukkit.GameRule;
|
import org.bukkit.GameRule;
|
||||||
|
import org.bukkit.OfflinePlayer;
|
||||||
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;
|
||||||
@ -57,18 +60,14 @@ public class Discord extends FreedomService
|
|||||||
{
|
{
|
||||||
|
|
||||||
public static HashMap<String, PlayerData> LINK_CODES = new HashMap<>();
|
public static HashMap<String, PlayerData> LINK_CODES = new HashMap<>();
|
||||||
public static HashMap<String, PlayerData> VERIFICATION_CODES = new HashMap<>();
|
|
||||||
public static JDA bot = null;
|
public static JDA bot = null;
|
||||||
|
public static DiscordCommandManager DISCORD_COMMAND_MANAGER;
|
||||||
public ScheduledThreadPoolExecutor RATELIMIT_EXECUTOR;
|
public ScheduledThreadPoolExecutor RATELIMIT_EXECUTOR;
|
||||||
public List<CompletableFuture<Message>> sentMessages = new ArrayList<>();
|
public List<CompletableFuture<Message>> sentMessages = new ArrayList<>();
|
||||||
public Boolean enabled = false;
|
public Boolean enabled = false;
|
||||||
|
private static final ImmutableList<String> DISCORD_SUBDOMAINS = ImmutableList.of("discordapp.com", "discord.com", "discord.gg");
|
||||||
private final Pattern DISCORD_MENTION_PATTERN = Pattern.compile("(<@!?([0-9]{16,20})>)");
|
private final Pattern DISCORD_MENTION_PATTERN = Pattern.compile("(<@!?([0-9]{16,20})>)");
|
||||||
|
|
||||||
public static String getMD5(String string)
|
|
||||||
{
|
|
||||||
return DigestUtils.md5Hex(string);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static String getCode(PlayerData playerData)
|
public static String getCode(PlayerData playerData)
|
||||||
{
|
{
|
||||||
for (String code : LINK_CODES.keySet())
|
for (String code : LINK_CODES.keySet())
|
||||||
@ -157,11 +156,8 @@ public class Discord extends FreedomService
|
|||||||
|
|
||||||
public void startBot()
|
public void startBot()
|
||||||
{
|
{
|
||||||
boolean verificationEnabled = ConfigEntry.DISCORD_VERIFICATION.getBoolean();
|
DISCORD_COMMAND_MANAGER = new DiscordCommandManager();
|
||||||
if (!verificationEnabled)
|
DISCORD_COMMAND_MANAGER.init(this);
|
||||||
{
|
|
||||||
FLog.info("Discord Verification has been manually disabled.");
|
|
||||||
}
|
|
||||||
|
|
||||||
enabled = !Strings.isNullOrEmpty(ConfigEntry.DISCORD_TOKEN.getString());
|
enabled = !Strings.isNullOrEmpty(ConfigEntry.DISCORD_TOKEN.getString());
|
||||||
if (!enabled)
|
if (!enabled)
|
||||||
@ -185,6 +181,7 @@ public class Discord extends FreedomService
|
|||||||
.addEventListeners(new PrivateMessageListener(),
|
.addEventListeners(new PrivateMessageListener(),
|
||||||
new DiscordToMinecraftListener(),
|
new DiscordToMinecraftListener(),
|
||||||
new DiscordToAdminChatListener(),
|
new DiscordToAdminChatListener(),
|
||||||
|
new MessageReactionListener(),
|
||||||
new ListenerAdapter()
|
new ListenerAdapter()
|
||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
@ -199,15 +196,15 @@ public class Discord extends FreedomService
|
|||||||
.setMemberCachePolicy(MemberCachePolicy.ALL)
|
.setMemberCachePolicy(MemberCachePolicy.ALL)
|
||||||
.enableIntents(GatewayIntent.GUILD_MEMBERS)
|
.enableIntents(GatewayIntent.GUILD_MEMBERS)
|
||||||
.build();
|
.build();
|
||||||
FLog.info("Discord verification bot has successfully enabled!");
|
FLog.info("Discord integration has successfully enabled!");
|
||||||
}
|
}
|
||||||
catch (LoginException e)
|
catch (LoginException e)
|
||||||
{
|
{
|
||||||
FLog.warning("An invalid token for the discord verification bot, the bot will not enable.");
|
FLog.warning("An invalid token for Discord integration was provided, the bot will not enable.");
|
||||||
}
|
}
|
||||||
catch (IllegalArgumentException e)
|
catch (IllegalArgumentException e)
|
||||||
{
|
{
|
||||||
FLog.warning("Discord verification bot failed to start.");
|
FLog.warning("Discord integration failed to start.");
|
||||||
}
|
}
|
||||||
catch (NoClassDefFoundError e)
|
catch (NoClassDefFoundError e)
|
||||||
{
|
{
|
||||||
@ -232,7 +229,7 @@ public class Discord extends FreedomService
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
sentMessages.clear();
|
sentMessages.clear();
|
||||||
messageChatChannel("**Message queue cleared**");
|
messageChatChannel("**Message queue cleared**", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendPteroInfo(PlayerData playerData, String username, String password)
|
public void sendPteroInfo(PlayerData playerData, String username, String password)
|
||||||
@ -261,96 +258,9 @@ public class Discord extends FreedomService
|
|||||||
return member.getUser();
|
return member.getUser();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean sendBackupCodes(PlayerData playerData)
|
|
||||||
{
|
|
||||||
List<String> codes = generateBackupCodes();
|
|
||||||
List<String> encryptedCodes = generateEncryptedBackupCodes(codes);
|
|
||||||
User user = getUser(playerData.getDiscordID());
|
|
||||||
File file = generateBackupCodesFile(playerData.getName(), codes);
|
|
||||||
if (file == null)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
PrivateChannel privateChannel = user.openPrivateChannel().complete();
|
|
||||||
privateChannel.sendMessage("Do not share these codes with anyone as they can be used to impose as you.").addFile(file).complete();
|
|
||||||
playerData.setBackupCodes(encryptedCodes);
|
|
||||||
plugin.pl.save(playerData);
|
|
||||||
//noinspection ResultOfMethodCallIgnored
|
|
||||||
file.delete();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<String> generateBackupCodes()
|
|
||||||
{
|
|
||||||
List<String> codes = new ArrayList<>();
|
|
||||||
for (int i = 0; i < 10; i++)
|
|
||||||
{
|
|
||||||
codes.add(FUtil.randomAlphanumericString(10));
|
|
||||||
}
|
|
||||||
return codes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String generateCode(int size)
|
public String generateCode(int size)
|
||||||
{
|
{
|
||||||
StringBuilder code = new StringBuilder();
|
return RandomStringUtils.randomNumeric(size);
|
||||||
SplittableRandom random = new SplittableRandom();
|
|
||||||
for (int i = 0; i < size; i++)
|
|
||||||
{
|
|
||||||
code.append(random.nextInt(10));
|
|
||||||
}
|
|
||||||
return code.toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<String> generateEncryptedBackupCodes(List<String> codes)
|
|
||||||
{
|
|
||||||
List<String> encryptedCodes = new ArrayList<>();
|
|
||||||
for (String code : codes)
|
|
||||||
{
|
|
||||||
encryptedCodes.add(getMD5(code));
|
|
||||||
}
|
|
||||||
return encryptedCodes;
|
|
||||||
}
|
|
||||||
|
|
||||||
public File generateBackupCodesFile(String name, List<String> codes)
|
|
||||||
{
|
|
||||||
StringBuilder text = new StringBuilder();
|
|
||||||
text.append("Below are your backup codes for use on TotalFreedom in the event you lose access to your discord account.\n")
|
|
||||||
.append("Simply pick a code, and run /verify <code> on the server. Each code is one use, so be sure to cross it off once you use it.\n")
|
|
||||||
.append("To generate new codes, simply run /generatebackupcodes\n\n");
|
|
||||||
|
|
||||||
for (String code : codes)
|
|
||||||
{
|
|
||||||
text.append(code).append("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
String fileUrl = plugin.getDataFolder().getAbsolutePath() + "/TF-Backup-Codes-" + name + ".txt";
|
|
||||||
try
|
|
||||||
{
|
|
||||||
FileWriter fileWriter = new FileWriter(fileUrl);
|
|
||||||
fileWriter.write(text.toString());
|
|
||||||
fileWriter.close();
|
|
||||||
}
|
|
||||||
catch (IOException e)
|
|
||||||
{
|
|
||||||
FLog.severe("Failed to generate backup codes file: " + e.toString());
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return new File(fileUrl);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addVerificationCode(String code, PlayerData playerData)
|
|
||||||
{
|
|
||||||
VERIFICATION_CODES.put(code, playerData);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void removeVerificationCode(String code)
|
|
||||||
{
|
|
||||||
VERIFICATION_CODES.remove(code);
|
|
||||||
}
|
|
||||||
|
|
||||||
public HashMap<String, PlayerData> getVerificationCodes()
|
|
||||||
{
|
|
||||||
return VERIFICATION_CODES;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
@ -363,9 +273,11 @@ public class Discord extends FreedomService
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event.getDeathMessage() != null)
|
Component deathMessage = event.deathMessage();
|
||||||
|
|
||||||
|
if (deathMessage != null)
|
||||||
{
|
{
|
||||||
messageChatChannel("**" + event.getDeathMessage() + "**");
|
messageChatChannel("**" + PlainTextComponentSerializer.plainText().serialize(deathMessage) + "**", true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -380,7 +292,7 @@ public class Discord extends FreedomService
|
|||||||
{
|
{
|
||||||
if (!plugin.al.isVanished(event.getPlayer().getName()))
|
if (!plugin.al.isVanished(event.getPlayer().getName()))
|
||||||
{
|
{
|
||||||
messageChatChannel("**" + event.getPlayer().getName() + " joined the server" + "**");
|
messageChatChannel("**" + event.getPlayer().getName() + " joined the server" + "**", true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -389,74 +301,77 @@ public class Discord extends FreedomService
|
|||||||
{
|
{
|
||||||
if (!plugin.al.isVanished(event.getPlayer().getName()))
|
if (!plugin.al.isVanished(event.getPlayer().getName()))
|
||||||
{
|
{
|
||||||
messageChatChannel("**" + event.getPlayer().getName() + " left the server" + "**");
|
messageChatChannel("**" + event.getPlayer().getName() + " left the server" + "**", true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void messageChatChannel(String message)
|
public static String sanitizeChatMessage(String message)
|
||||||
{
|
{
|
||||||
String chat_channel_id = ConfigEntry.DISCORD_CHAT_CHANNEL_ID.getString();
|
String newMessage = message;
|
||||||
if (message.contains("@everyone") || message.contains("@here"))
|
|
||||||
|
if (message.contains("@"))
|
||||||
{
|
{
|
||||||
message = StringUtils.remove(message, "@");
|
// \u200B is Zero Width Space, invisible on Discord
|
||||||
|
newMessage = message.replaceAll("@", "@\u200B");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (message.toLowerCase().contains("discord.gg"))
|
if (message.toLowerCase().contains("discord.gg")) // discord.gg/invite works as an invite
|
||||||
{
|
{
|
||||||
return;
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
for (String subdomain : DISCORD_SUBDOMAINS)
|
||||||
|
{
|
||||||
|
if (message.toLowerCase().contains(subdomain + "/invite"))
|
||||||
|
{
|
||||||
|
return "";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (message.contains("§"))
|
if (message.contains("§"))
|
||||||
{
|
{
|
||||||
message = StringUtils.remove(message, "§");
|
newMessage = message.replaceAll("§", "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return deformat(newMessage);
|
||||||
|
}
|
||||||
|
|
||||||
Matcher DISCORD_MENTION_MATCHER = DISCORD_MENTION_PATTERN.matcher(message);
|
public void messageChatChannel(String message)
|
||||||
|
{
|
||||||
|
messageChatChannel(message, false);
|
||||||
|
}
|
||||||
|
|
||||||
while (DISCORD_MENTION_MATCHER.find())
|
public void messageChatChannel(String message, boolean system)
|
||||||
{
|
{
|
||||||
String mention = DISCORD_MENTION_MATCHER.group(1);
|
String chat_channel_id = ConfigEntry.DISCORD_CHAT_CHANNEL_ID.getString();
|
||||||
message = message.replace(mention, mention.replace("@",""));
|
|
||||||
}
|
String sanitizedMessage = (system) ? message : sanitizeChatMessage(message);
|
||||||
|
|
||||||
|
if (sanitizedMessage.isBlank()) return;
|
||||||
|
|
||||||
if (enabled && !chat_channel_id.isEmpty())
|
if (enabled && !chat_channel_id.isEmpty())
|
||||||
{
|
{
|
||||||
CompletableFuture<Message> sentMessage = Objects.requireNonNull(bot.getTextChannelById(chat_channel_id)).sendMessage(deformat(message)).submit(true);
|
CompletableFuture<Message> sentMessage = Objects.requireNonNull(bot.getTextChannelById(chat_channel_id)).sendMessage(sanitizedMessage).submit(true);
|
||||||
sentMessages.add(sentMessage);
|
sentMessages.add(sentMessage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void messageAdminChatChannel(String message)
|
public void messageAdminChatChannel(String message)
|
||||||
|
{
|
||||||
|
messageAdminChatChannel(message, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void messageAdminChatChannel(String message, boolean system)
|
||||||
{
|
{
|
||||||
String chat_channel_id = ConfigEntry.DISCORD_ADMINCHAT_CHANNEL_ID.getString();
|
String chat_channel_id = ConfigEntry.DISCORD_ADMINCHAT_CHANNEL_ID.getString();
|
||||||
if (message.contains("@everyone") || message.contains("@here"))
|
|
||||||
{
|
|
||||||
message = StringUtils.remove(message, "@");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (message.toLowerCase().contains("discord.gg"))
|
String sanitizedMessage = sanitizeChatMessage(message);
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (message.contains("§"))
|
if (sanitizedMessage.isBlank()) return;
|
||||||
{
|
|
||||||
message = StringUtils.remove(message, "§");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Matcher DISCORD_MENTION_MATCHER = DISCORD_MENTION_PATTERN.matcher(message);
|
|
||||||
|
|
||||||
while (DISCORD_MENTION_MATCHER.find())
|
|
||||||
{
|
|
||||||
String mention = DISCORD_MENTION_MATCHER.group(1);
|
|
||||||
message = message.replace(mention, mention.replace("@",""));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (enabled && !chat_channel_id.isEmpty())
|
if (enabled && !chat_channel_id.isEmpty())
|
||||||
{
|
{
|
||||||
CompletableFuture<Message> sentMessage = Objects.requireNonNull(bot.getTextChannelById(chat_channel_id)).sendMessage(deformat(message)).submit(true);
|
CompletableFuture<Message> sentMessage = Objects.requireNonNull(bot.getTextChannelById(chat_channel_id)).sendMessage(sanitizedMessage).submit(true);
|
||||||
sentMessages.add(sentMessage);
|
sentMessages.add(sentMessage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -464,7 +379,7 @@ public class Discord extends FreedomService
|
|||||||
public String formatBotTag()
|
public String formatBotTag()
|
||||||
{
|
{
|
||||||
SelfUser user = bot.getSelfUser();
|
SelfUser user = bot.getSelfUser();
|
||||||
return user.getName() + "#" + user.getDiscriminator();
|
return user.getAsTag();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -472,18 +387,18 @@ public class Discord extends FreedomService
|
|||||||
{
|
{
|
||||||
if (bot != null)
|
if (bot != null)
|
||||||
{
|
{
|
||||||
messageChatChannel("**Server has stopped**");
|
messageChatChannel("**Server has stopped**", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
FLog.info("Discord verification bot has successfully shutdown.");
|
FLog.info("Discord integration has successfully shutdown.");
|
||||||
}
|
}
|
||||||
|
|
||||||
public String deformat(String input)
|
public static String deformat(String input)
|
||||||
{
|
{
|
||||||
return input.replace("_", "\\_");
|
return input.replaceAll("([_\\\\`*>|])", "\\\\$1");
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean sendReport(Player reporter, Player reported, String reason)
|
public boolean shouldISendReport()
|
||||||
{
|
{
|
||||||
if (ConfigEntry.DISCORD_REPORT_CHANNEL_ID.getString().isEmpty())
|
if (ConfigEntry.DISCORD_REPORT_CHANNEL_ID.getString().isEmpty())
|
||||||
{
|
{
|
||||||
@ -498,6 +413,7 @@ public class Discord extends FreedomService
|
|||||||
|
|
||||||
Guild server = bot.getGuildById(ConfigEntry.DISCORD_SERVER_ID.getString());
|
Guild server = bot.getGuildById(ConfigEntry.DISCORD_SERVER_ID.getString());
|
||||||
if (server == null)
|
if (server == null)
|
||||||
|
|
||||||
{
|
{
|
||||||
FLog.severe("The Discord server ID specified is invalid, or the bot is not on the server.");
|
FLog.severe("The Discord server ID specified is invalid, or the bot is not on the server.");
|
||||||
return false;
|
return false;
|
||||||
@ -510,7 +426,54 @@ public class Discord extends FreedomService
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
EmbedBuilder embedBuilder = new EmbedBuilder();
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean sendReportOffline(Player reporter, OfflinePlayer reported, String reason)
|
||||||
|
{
|
||||||
|
if (!shouldISendReport())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Guild server = bot.getGuildById(ConfigEntry.DISCORD_SERVER_ID.getString());
|
||||||
|
final TextChannel channel = server.getTextChannelById(ConfigEntry.DISCORD_REPORT_CHANNEL_ID.getString());
|
||||||
|
|
||||||
|
final EmbedBuilder embedBuilder = new EmbedBuilder();
|
||||||
|
embedBuilder.setTitle("Report for " + reported.getName() + " (offline)");
|
||||||
|
embedBuilder.setDescription(reason);
|
||||||
|
embedBuilder.setFooter("Reported by " + reporter.getName(), "https://minotar.net/helm/" + reporter.getName() + ".png");
|
||||||
|
embedBuilder.setTimestamp(Instant.from(ZonedDateTime.now()));
|
||||||
|
com.earth2me.essentials.User user = plugin.esb.getEssentialsUser(reported.getName());
|
||||||
|
String location = "World: " + Objects.requireNonNull(user.getLastLocation().getWorld()).getName() + ", X: " + user.getLastLocation().getBlockX() + ", Y: " + user.getLastLocation().getBlockY() + ", Z: " + user.getLastLocation().getBlockZ();
|
||||||
|
embedBuilder.addField("Location", location, true);
|
||||||
|
embedBuilder.addField("God Mode", WordUtils.capitalizeFully(String.valueOf(user.isGodModeEnabled())), true);
|
||||||
|
if (user.getNickname() != null)
|
||||||
|
{
|
||||||
|
embedBuilder.addField("Nickname", user.getNickname(), true);
|
||||||
|
}
|
||||||
|
MessageEmbed embed = embedBuilder.build();
|
||||||
|
Message message = channel.sendMessage(embed).complete();
|
||||||
|
|
||||||
|
if (!ConfigEntry.DISCORD_REPORT_ARCHIVE_CHANNEL_ID.getString().isEmpty())
|
||||||
|
{
|
||||||
|
message.addReaction("\uD83D\uDCCB").complete();
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean sendReport(Player reporter, Player reported, String reason)
|
||||||
|
{
|
||||||
|
if (!shouldISendReport())
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Guild server = bot.getGuildById(ConfigEntry.DISCORD_SERVER_ID.getString());
|
||||||
|
final TextChannel channel = server.getTextChannelById(ConfigEntry.DISCORD_REPORT_CHANNEL_ID.getString());
|
||||||
|
|
||||||
|
final EmbedBuilder embedBuilder = new EmbedBuilder();
|
||||||
embedBuilder.setTitle("Report for " + reported.getName());
|
embedBuilder.setTitle("Report for " + reported.getName());
|
||||||
embedBuilder.setDescription(reason);
|
embedBuilder.setDescription(reason);
|
||||||
embedBuilder.setFooter("Reported by " + reporter.getName(), "https://minotar.net/helm/" + reporter.getName() + ".png");
|
embedBuilder.setFooter("Reported by " + reporter.getName(), "https://minotar.net/helm/" + reporter.getName() + ".png");
|
||||||
@ -525,7 +488,13 @@ public class Discord extends FreedomService
|
|||||||
embedBuilder.addField("Nickname", user.getNickname(), true);
|
embedBuilder.addField("Nickname", user.getNickname(), true);
|
||||||
}
|
}
|
||||||
MessageEmbed embed = embedBuilder.build();
|
MessageEmbed embed = embedBuilder.build();
|
||||||
channel.sendMessage(embed).complete();
|
Message message = channel.sendMessage(embed).complete();
|
||||||
|
|
||||||
|
if (!ConfigEntry.DISCORD_REPORT_ARCHIVE_CHANNEL_ID.getString().isEmpty())
|
||||||
|
{
|
||||||
|
message.addReaction("\uD83D\uDCCB").complete();
|
||||||
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -534,7 +503,7 @@ public class Discord extends FreedomService
|
|||||||
{
|
{
|
||||||
public void start()
|
public void start()
|
||||||
{
|
{
|
||||||
messageChatChannel("**Server has started**");
|
messageChatChannel("**Server has started**", true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -119,6 +119,11 @@ public class DiscordToAdminChatListener extends ListenerAdapter
|
|||||||
{
|
{
|
||||||
return Title.EXECUTIVE;
|
return Title.EXECUTIVE;
|
||||||
}
|
}
|
||||||
|
// Assistant Executives
|
||||||
|
else if (member.getRoles().contains(server.getRoleById(ConfigEntry.DISCORD_ASSISTANT_EXECUTIVE_ROLE_ID.getString())))
|
||||||
|
{
|
||||||
|
return Title.ASSTEXEC;
|
||||||
|
}
|
||||||
// Senior Admins
|
// Senior Admins
|
||||||
else if (member.getRoles().contains(server.getRoleById(ConfigEntry.DISCORD_SENIOR_ADMIN_ROLE_ID.getString())))
|
else if (member.getRoles().contains(server.getRoleById(ConfigEntry.DISCORD_SENIOR_ADMIN_ROLE_ID.getString())))
|
||||||
{
|
{
|
||||||
|
@ -2,17 +2,20 @@ package me.totalfreedom.totalfreedommod.discord;
|
|||||||
|
|
||||||
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
|
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
|
||||||
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
|
import me.totalfreedom.totalfreedommod.discord.command.DiscordCommandManager;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Rank;
|
import me.totalfreedom.totalfreedommod.rank.Rank;
|
||||||
import me.totalfreedom.totalfreedommod.rank.Title;
|
import me.totalfreedom.totalfreedommod.rank.Title;
|
||||||
import me.totalfreedom.totalfreedommod.util.FLog;
|
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||||
import net.dv8tion.jda.api.entities.Guild;
|
import me.totalfreedom.totalfreedommod.util.FUtil;
|
||||||
import net.dv8tion.jda.api.entities.Member;
|
import net.dv8tion.jda.api.entities.*;
|
||||||
import net.dv8tion.jda.api.entities.Message;
|
|
||||||
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
|
import net.dv8tion.jda.api.events.message.MessageReceivedEvent;
|
||||||
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||||
|
import net.md_5.bungee.api.chat.BaseComponent;
|
||||||
import net.md_5.bungee.api.chat.ClickEvent;
|
import net.md_5.bungee.api.chat.ClickEvent;
|
||||||
import net.md_5.bungee.api.chat.ComponentBuilder;
|
import net.md_5.bungee.api.chat.ComponentBuilder;
|
||||||
|
import net.md_5.bungee.api.chat.HoverEvent;
|
||||||
import net.md_5.bungee.api.chat.TextComponent;
|
import net.md_5.bungee.api.chat.TextComponent;
|
||||||
|
import net.md_5.bungee.api.chat.hover.content.Text;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
@ -21,50 +24,108 @@ public class DiscordToMinecraftListener extends ListenerAdapter
|
|||||||
{
|
{
|
||||||
public void onMessageReceived(MessageReceivedEvent event)
|
public void onMessageReceived(MessageReceivedEvent event)
|
||||||
{
|
{
|
||||||
String chat_channel_id = ConfigEntry.DISCORD_CHAT_CHANNEL_ID.getString();
|
final String chat_channel_id = ConfigEntry.DISCORD_CHAT_CHANNEL_ID.getString();
|
||||||
if (event.getMember() != null && !chat_channel_id.isEmpty() && event.getChannel().getId().equals(chat_channel_id))
|
final MessageChannel genericChannel = event.getChannel();
|
||||||
|
|
||||||
|
if (event.getMember() == null)
|
||||||
{
|
{
|
||||||
if (!event.getAuthor().getId().equals(Discord.bot.getSelfUser().getId()))
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (chat_channel_id.isEmpty())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (event.getAuthor().getId().equals(Discord.bot.getSelfUser().getId()))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!genericChannel.getId().equals(chat_channel_id))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(genericChannel instanceof TextChannel))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final TextChannel textChannel = (TextChannel) genericChannel;
|
||||||
|
|
||||||
|
final Member member = event.getMember();
|
||||||
|
final String tag = getDisplay(member);
|
||||||
|
final Message msg = event.getMessage();
|
||||||
|
final String content = msg.getContentStripped();
|
||||||
|
|
||||||
|
if (content.startsWith(ConfigEntry.DISCORD_PREFIX.getString()))
|
||||||
|
{
|
||||||
|
Discord.DISCORD_COMMAND_MANAGER.parse(content, member, textChannel);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ComponentBuilder emsg = new ComponentBuilder();
|
||||||
|
|
||||||
|
// Prefix
|
||||||
|
emsg.append(ChatColor.DARK_GRAY + "[");
|
||||||
|
TextComponent inviteLink = new TextComponent("Discord");
|
||||||
|
inviteLink.setColor(ChatColor.DARK_AQUA.asBungee());
|
||||||
|
inviteLink.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT,
|
||||||
|
new Text("Click here to get the invite link!")));
|
||||||
|
inviteLink.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL,
|
||||||
|
ConfigEntry.DISCORD_INVITE_LINK.getString()));
|
||||||
|
emsg.append(inviteLink);
|
||||||
|
emsg.append(ChatColor.DARK_GRAY + "] ", ComponentBuilder.FormatRetention.NONE);
|
||||||
|
|
||||||
|
// Tag (if they have one)
|
||||||
|
if (tag != null)
|
||||||
|
{
|
||||||
|
emsg.append(tag);
|
||||||
|
}
|
||||||
|
|
||||||
|
emsg.append(" ");
|
||||||
|
|
||||||
|
// User
|
||||||
|
TextComponent user = new TextComponent(FUtil.stripColors(member.getEffectiveName()));
|
||||||
|
user.setColor(ChatColor.RED.asBungee());
|
||||||
|
emsg.append(user);
|
||||||
|
|
||||||
|
// Message
|
||||||
|
emsg.append(ChatColor.DARK_GRAY + ": " + ChatColor.RESET
|
||||||
|
+ FUtil.stripColors(msg.getContentDisplay()), ComponentBuilder.FormatRetention.NONE);
|
||||||
|
|
||||||
|
// Attachments
|
||||||
|
if (!msg.getAttachments().isEmpty())
|
||||||
|
{
|
||||||
|
if (!msg.getContentDisplay().isEmpty())
|
||||||
|
emsg.append(" ");
|
||||||
|
|
||||||
|
for (Message.Attachment attachment : msg.getAttachments())
|
||||||
{
|
{
|
||||||
Member member = event.getMember();
|
TextComponent media = new TextComponent("[Media] ");
|
||||||
String tag = getDisplay(member);
|
media.setColor(ChatColor.YELLOW.asBungee());
|
||||||
StringBuilder message = new StringBuilder(ChatColor.DARK_GRAY + "[" + ChatColor.DARK_AQUA + "Discord" + ChatColor.DARK_GRAY + "]");
|
media.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, attachment.getUrl()));
|
||||||
Message msg = event.getMessage();
|
media.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new Text(attachment.getUrl())));
|
||||||
if (tag != null)
|
|
||||||
{
|
emsg.append(media, ComponentBuilder.FormatRetention.NONE);
|
||||||
message.append(" ").append(tag);
|
|
||||||
}
|
|
||||||
message.append(" ").append(ChatColor.RED).append(ChatColor.stripColor(member.getEffectiveName())).append(ChatColor.DARK_GRAY).append(":").append(ChatColor.RESET);
|
|
||||||
ComponentBuilder builder = new ComponentBuilder(message.toString());
|
|
||||||
if (!msg.getContentDisplay().isEmpty())
|
|
||||||
{
|
|
||||||
builder.append(" ").append(ChatColor.stripColor(msg.getContentDisplay()));
|
|
||||||
message.append(" ").append(ChatColor.stripColor(msg.getContentDisplay())); // for logging
|
|
||||||
}
|
|
||||||
if (!msg.getAttachments().isEmpty())
|
|
||||||
{
|
|
||||||
for (Message.Attachment attachment : msg.getAttachments())
|
|
||||||
{
|
|
||||||
attachment.getUrl();
|
|
||||||
builder.append(" ");
|
|
||||||
TextComponent text = new TextComponent(ChatColor.YELLOW + "[Media]");
|
|
||||||
text.setClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, attachment.getUrl()));
|
|
||||||
builder.append(text);
|
|
||||||
message.append(" [Media]"); // for logging
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for (Player player : Bukkit.getOnlinePlayers())
|
|
||||||
{
|
|
||||||
if (TotalFreedomMod.getPlugin().pl.getData(player).doesDisplayDiscord())
|
|
||||||
{
|
|
||||||
player.spigot().sendMessage(builder.create());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FLog.info(message.toString());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BaseComponent[] components = emsg.create();
|
||||||
|
|
||||||
|
for (Player player : Bukkit.getOnlinePlayers())
|
||||||
|
{
|
||||||
|
if (TotalFreedomMod.getPlugin().pl.getData(player).doesDisplayDiscord())
|
||||||
|
{
|
||||||
|
player.sendMessage(components);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
FLog.info(TextComponent.toLegacyText(components), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public String getDisplay(Member member)
|
public String getDisplay(Member member)
|
||||||
{
|
{
|
||||||
Guild server = Discord.bot.getGuildById(ConfigEntry.DISCORD_SERVER_ID.getString());
|
Guild server = Discord.bot.getGuildById(ConfigEntry.DISCORD_SERVER_ID.getString());
|
||||||
@ -84,6 +145,11 @@ public class DiscordToMinecraftListener extends ListenerAdapter
|
|||||||
{
|
{
|
||||||
return Title.EXECUTIVE.getColoredTag();
|
return Title.EXECUTIVE.getColoredTag();
|
||||||
}
|
}
|
||||||
|
// Assistant Executives
|
||||||
|
else if (member.getRoles().contains(server.getRoleById(ConfigEntry.DISCORD_ASSISTANT_EXECUTIVE_ROLE_ID.getString())))
|
||||||
|
{
|
||||||
|
return Title.ASSTEXEC.getColoredTag();
|
||||||
|
}
|
||||||
// Senior Admins
|
// Senior Admins
|
||||||
else if (member.getRoles().contains(server.getRoleById(ConfigEntry.DISCORD_SENIOR_ADMIN_ROLE_ID.getString())))
|
else if (member.getRoles().contains(server.getRoleById(ConfigEntry.DISCORD_SENIOR_ADMIN_ROLE_ID.getString())))
|
||||||
{
|
{
|
||||||
|
@ -0,0 +1,68 @@
|
|||||||
|
package me.totalfreedom.totalfreedommod.discord;
|
||||||
|
|
||||||
|
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
|
||||||
|
import me.totalfreedom.totalfreedommod.util.FLog;
|
||||||
|
import net.dv8tion.jda.api.MessageBuilder;
|
||||||
|
import net.dv8tion.jda.api.entities.Member;
|
||||||
|
import net.dv8tion.jda.api.entities.Message;
|
||||||
|
import net.dv8tion.jda.api.entities.MessageEmbed;
|
||||||
|
import net.dv8tion.jda.api.entities.TextChannel;
|
||||||
|
import net.dv8tion.jda.api.events.message.react.MessageReactionAddEvent;
|
||||||
|
import net.dv8tion.jda.api.hooks.ListenerAdapter;
|
||||||
|
|
||||||
|
public class MessageReactionListener extends ListenerAdapter
|
||||||
|
{
|
||||||
|
public void onMessageReactionAdd(MessageReactionAddEvent messageReactionAddEvent)
|
||||||
|
{
|
||||||
|
if (!messageReactionAddEvent.isFromGuild())
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (messageReactionAddEvent.getMember() == null)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (messageReactionAddEvent.getMember().getUser().getId().equals(Discord.bot.getSelfUser().getId()))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!messageReactionAddEvent.getChannel().getId().equals(ConfigEntry.DISCORD_REPORT_CHANNEL_ID.getString()))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!messageReactionAddEvent.getReactionEmote().getEmoji().equals("\uD83D\uDCCB"))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final TextChannel archiveChannel = Discord.bot.getTextChannelById(ConfigEntry.DISCORD_REPORT_ARCHIVE_CHANNEL_ID.getString());
|
||||||
|
|
||||||
|
if (archiveChannel == null)
|
||||||
|
{
|
||||||
|
FLog.warning("Report archive channel is defined in the config, yet doesn't actually exist!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Message message = messageReactionAddEvent.retrieveMessage().complete();
|
||||||
|
final Member completer = messageReactionAddEvent.getMember();
|
||||||
|
|
||||||
|
if (!message.getAuthor().getId().equals(Discord.bot.getSelfUser().getId()))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// We don't need other embeds... yet?
|
||||||
|
final MessageEmbed embed = message.getEmbeds().get(0);
|
||||||
|
final MessageBuilder archiveMessageBuilder = new MessageBuilder();
|
||||||
|
archiveMessageBuilder.setContent("Report completed by " + completer.getUser().getAsMention() + " (" + Discord.deformat(completer.getUser().getAsTag() + ")"));
|
||||||
|
archiveMessageBuilder.setEmbed(embed);
|
||||||
|
final Message archiveMessage = archiveMessageBuilder.build();
|
||||||
|
|
||||||
|
archiveChannel.sendMessage(archiveMessage).complete();
|
||||||
|
message.delete().complete();
|
||||||
|
}
|
||||||
|
}
|
@ -22,9 +22,8 @@ public class PrivateMessageListener extends ListenerAdapter
|
|||||||
PlayerData player = Discord.LINK_CODES.get(code);
|
PlayerData player = Discord.LINK_CODES.get(code);
|
||||||
name = player.getName();
|
name = player.getName();
|
||||||
player.setDiscordID(event.getMessage().getAuthor().getId());
|
player.setDiscordID(event.getMessage().getAuthor().getId());
|
||||||
player.setVerification(true);
|
|
||||||
|
|
||||||
Admin admin = TotalFreedomMod.getPlugin().al.getEntryByName(name);
|
Admin admin = TotalFreedomMod.getPlugin().al.getEntryByUuid(player.getUuid());
|
||||||
if (admin != null)
|
if (admin != null)
|
||||||
{
|
{
|
||||||
Discord.syncRoles(admin, player.getDiscordID());
|
Discord.syncRoles(admin, player.getDiscordID());
|
||||||
@ -37,8 +36,7 @@ public class PrivateMessageListener extends ListenerAdapter
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
event.getChannel().sendMessage("Link successful. Now this Discord account is linked with your Minecraft account **" + name + "**.\n"
|
event.getChannel().sendMessage("Link successful. Now this Discord account is linked with your Minecraft account **" + name + "**.").complete();
|
||||||
+ "Now when you are an impostor on the server, you may use `/verify` to verify.").complete();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,25 @@
|
|||||||
|
package me.totalfreedom.totalfreedommod.discord.command;
|
||||||
|
|
||||||
|
import net.dv8tion.jda.api.MessageBuilder;
|
||||||
|
import net.dv8tion.jda.api.entities.Guild;
|
||||||
|
import net.dv8tion.jda.api.entities.Member;
|
||||||
|
import net.dv8tion.jda.api.entities.User;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface DiscordCommand
|
||||||
|
{
|
||||||
|
String getCommandName();
|
||||||
|
|
||||||
|
String getDescription();
|
||||||
|
|
||||||
|
String getCategory();
|
||||||
|
|
||||||
|
List<String> getAliases();
|
||||||
|
|
||||||
|
boolean isAdmin();
|
||||||
|
|
||||||
|
boolean canExecute(Member member);
|
||||||
|
|
||||||
|
MessageBuilder execute(Member member, List<String> args);
|
||||||
|
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user