Compare commits

..

92 Commits

Author SHA1 Message Date
b99520b491 FS-177:
Part 1: This completely revamps the admin and player saving system, as well as removed multiple methods which involved getting data via player name. Most of the data is now UUID based and only thing that should be IP based is imposter system
2021-07-29 15:50:04 -07:00
62529a6171 Merge branch 'main' of https://github.com/AtlasMediaGroup/TotalFreedomMod into development 2021-07-17 13:18:18 +01:00
0caf972248 Merge pull request #90 from AtlasMediaGroup/FS-309
2 bugfixes, one command (FS-309)
2021-07-16 09:05:57 -05:00
a37364d07e Correct JDK Version in README (#92)
It's currently wrong so needed updating.
2021-07-16 11:43:46 +01:00
4ac9844534 Merge branch 'development' into FS-309 2021-07-12 22:53:44 -06:00
939e98b759 Update badges (#88)
Remove TravisCI
Add Github Maven Build Action 
Add CodeQL Badge
2021-07-08 20:48:41 +01:00
d99f3e657b Let's actually do dependency uplifts (#89) 2021-07-08 20:48:27 +01:00
92bbb62379 Temporarily re-naming /clearchat to /cleanchat (#91)
* Temporarily re-naming /clearchat to /cleanchat

Due to another plugin which currently doesn't quite have all the permissions working, this command is not currently able to be executed as it stands.

* Shhh I know I'm an idiot
2021-07-05 23:29:22 +01:00
e4a0943af2 Merge branch 'development' into FS-309 2021-06-29 22:00:13 -06:00
36bd8c0fad 2 bugfixes
- Fixes FS-309 by checking if a material provided is actually a block before caging someone.
- Fixes a bug that causes the command to throw an ArrayOutOfBoundsException if one were to use a command like `/cage player1 block`.
2021-06-29 21:52:46 -06:00
d77f59435b Use 'getPlayer()' to prevent NPE (FS-159) (#87)
Co-authored-by: Ryan <Wild1145@users.noreply.github.com>
2021-06-26 15:06:15 +01:00
a08fd2afb6 Adds /seed command (FS-225) (#85)
* Create Command_seed.java

* Addresses requested changes

* My IDE decided to try to "fix" things with *s in imports

Co-authored-by: Ryan <Wild1145@users.noreply.github.com>
2021-06-26 14:25:08 +01:00
6fd075fe96 Start building Java 16 (#84)
* Start building Java 16

* Re-apply Fleek's change

* Removed the shitty Github auto formatted white space.

* Update to the maven build in Github workflows

Given TravisCI has started to charge, I guess this might be what we move back to using as our main way to verify if something can actually build.

* Update maven.yml

* Delete .travis.yml
2021-06-24 21:21:39 +01:00
f57fc56f4a Merge pull request #83 from AtlasMediaGroup/FS-239-to-FS-242
Logs even more punishment types (FS-239, FS-240, FS-241, FS-242)
2021-06-19 03:20:47 -06:00
a6ca6b122c Merge branch 'development' into FS-239-to-FS-242 2021-06-18 13:24:15 +01:00
064e73f58b ez (#77) 2021-06-18 13:16:52 +01:00
32138b2e59 Order of operations fix 2021-06-17 13:41:25 -06:00
e1c3bad4d0 Even more punishment log types
Here's what I've changed in this commit:
- Adds /blockcmd to the punishment log (FS-239)
- Adds /blockedit and /blockpvp to the punishment log (FS-240)
- Adds /cage to the punishment log (FS-241)
- Adds /orbit to the punishment log (FS-242)
- Changes the order of operations in some commands to be a bit more consistent
2021-06-17 06:56:52 -06:00
4e78027f0c Merge pull request #79 from AtlasMediaGroup/FS-307
Fixes the EntityWiper not toggling properly (FS-307)
2021-06-17 06:12:26 -06:00
721f4f9fc3 Merge branch 'development' into FS-307 2021-06-17 05:56:56 -06:00
24ad2611a9 Merge pull request #81 from AtlasMediaGroup/FS-201
Admins can now see commands of everyone, regardless of rank (FS-201)
2021-06-17 05:54:10 -06:00
c238f251f2 Merge branch 'development' into FS-201 2021-06-17 05:46:40 -06:00
02848e3439 Merge pull request #82 from AtlasMediaGroup/FS-199
Prevents entities of type PLAYER from being purged in /entitywipe (FS-199)
2021-06-17 05:46:28 -06:00
9550f54e2b Merge branch 'development' into FS-199 2021-06-17 05:37:30 -06:00
39dade78e3 Merge pull request #80 from AtlasMediaGroup/FS-24-Round-2
Code quality improvements (FS-24)
2021-06-17 05:35:55 -06:00
5b6d8b01a4 Merge branch 'development' into FS-24-Round-2 2021-06-17 05:25:42 -06:00
96bc83cead Merge pull request #78 from AtlasMediaGroup/FS-207
Two fixes, one commit (FS-207)
2021-06-17 04:58:26 -06:00
be700a90ce Simple fix 2021-06-16 22:42:45 -06:00
6d1fce1716 FS-201 2021-06-16 22:06:12 -06:00
d3665f31fe Shut up Codacy 2021-06-16 21:56:25 -06:00
4188cb80fa FS-54 2021-06-16 21:10:08 -06:00
62fe72d99b Code quality and consistency improvements
Here's all the changes I've made in this commit:
- Resolves FS-44 (AutoEject.java)
- Resolves FS-45 (BlockBlocker.java)
- Resolves FS-47 and FS-48 (InteractBlocker.java)
- Resolves FS-49 (Command_cage.java)
- Resolves FS-50 (Command_manageshop.java)
- Resolves FS-51 (Command_notes.java)
- Resolves FS-52 (Command_potion.java)
- Resolves FS-53 (Command_tag.java)
- Resolves FS-55 (ItemFun.java)
- Resolves FS-56 (Module_list.java)
- Resolves FS-57 (Module_players.java)
- Removes redundant code from InteractBlocker.java
- Misc. code consistency corrections (global)
2021-06-16 21:10:08 -06:00
f4749559d2 FS-25 2021-06-16 21:10:08 -06:00
ed815794ed FS-26 2021-06-16 21:10:08 -06:00
0c12a19d1d FS-27 2021-06-16 21:10:08 -06:00
96d47e8e0c Update EntityWiper.java 2021-06-16 17:47:09 -06:00
3027e2a18c Two fixes, one commit
To kill two birds with one stone, I've done two fixes in this commit.
- Fixes issue that caused quiet warns to behave improperly (e.g. the warnings wouldn't increment if quiet)
- Added WARN to the PunishmentType list.
2021-06-16 17:29:57 -06:00
06025b2e69 Updated permissions to re-baseline with the dev server (#75)
Updating this to be based off of the dev server as it seems this has not been updated in some time. Primary purpose is to add the crackshot bypass removal for everyone (Though allow admins to bypass) and to add a start of network manager perms in the hopes it makes it more usable going forward.
2021-06-13 19:51:27 +01:00
da7e8f64aa Continuation on that notes thing (#74)
I forgot to remove the dependency after I removed the code that used JSONMessage. This fixes that by removing both the repository and the dependency from the pom file.
2021-06-12 11:26:40 +01:00
17b051e2a7 Retired support for 2021.02 fully. (#72) 2021-06-07 16:26:15 +01:00
77a05f22a8 TotalFreedomMod May Update 2021-06-07 16:26:15 +01:00
5c3ef1f107 Bump version 2021-06-07 16:26:15 +01:00
53c5991971 Addresses FS-224 (#70) 2021-06-07 16:26:15 +01:00
ff760a6c11 Use long instead of int and use offset to check time (FS-181) (#69)
* Use long instead of int and use offset to check time (FS-181)

* Remove star import
2021-06-07 16:26:15 +01:00
63069ff9ec Calculate the player count without offline players (FS-247) (#68)
Co-authored-by: Ryan <Wild1145@users.noreply.github.com>
2021-06-07 16:26:15 +01:00
5e63b71861 Small modification to new TFGuilds (FS-255) (#67) 2021-06-07 16:26:15 +01:00
b72782de4f Add //g to blocked commands (#62)
Co-authored-by: Nathan Curran <30569566+Focusvity@users.noreply.github.com>
2021-06-07 16:26:15 +01:00
de9556c550 Name change for Fleek (#64) 2021-06-07 16:26:15 +01:00
6590504545 Added new dependency to allow TFM to compile (#65) 2021-06-07 16:26:15 +01:00
8d1e8dcf05 Switched from -c to -ci (#63)
Resolves FS-219
2021-06-07 16:26:15 +01:00
07b5076717 Bug fixes, improvements, and removals (FS-192) (#46)
* Three fixes

* Fixes /tempban throwing a NullPointerException when trying to get a player who isn't on the server but was in the past
* Fixes /tempban banning players for 24 hours regardless of the duration defined
* Fixes /list -t throwing a NullPointerException when performed from a non-player source (such as Telnet)

* Removes hubworld entriely

* Configurable blacklists for tag, muted commands, and wildcard

Changes:
* Moves globally blocked commands to the `global` subsection of the original `blocked_commands` section. You *will* need to update your configurations
* /wildcard's command blacklist is now configurable under the `wildcard` section in `blocked_commands`.
* The commands muted players can't use are now configurable under the `muted` section in `blocked_commands`.
* Removes some commented-out globally blocked command entries.

Co-authored-by: Ryan <Wild1145@users.noreply.github.com>
2021-06-07 16:26:15 +01:00
6fb9507a4c Why overcomplicating things is a horrifically bad idea (#55)
The longer I look into this plugin's code, the angrier I will become.

This fixes 2 bugs in the /potion command:
- Fixes non-admins being able to clear other players
- Fixes NPE caused when trying to add potion effects to players who are not on the server as a non-admin.

Both of these issues are caused by overcomplicating seemingly simple solutions, hence the name of this commit.

Co-authored-by: Ryan <Wild1145@users.noreply.github.com>
Co-authored-by: Nathan Curran <30569566+Focusvity@users.noreply.github.com>
2021-06-07 16:26:15 +01:00
879a524bb4 Remove a number of wipe commands we don't want anyway
We shouldn't be wiping any of this data within the server now anyway so let's not tempt fate again.
2021-06-07 16:26:15 +01:00
c60b451ce7 grammar fix 2021-06-07 16:26:15 +01:00
f85f3e32ea Fixes FS-137 2021-06-07 16:26:15 +01:00
57b3351047 ok, done (FS-156) 2021-06-07 16:26:15 +01:00
dd10eb3f5e Update Command_ride.java 2021-06-07 16:26:15 +01:00
a498104777 Merge branch 'main' of github.com:AtlasMediaGroup/TotalFreedomMod into development 2021-06-07 16:22:43 +01:00
4e577f97fa Enable downward Sync from main (#60)
We want to make sure anything on the main branch which is commited makes it's way down to the dev and other branches.
2021-05-28 15:22:07 +01:00
8c7bf365a0 Addresses FS-224 (#70) 2021-05-26 19:55:49 +10:00
eedb7a5375 Use long instead of int and use offset to check time (FS-181) (#69)
* Use long instead of int and use offset to check time (FS-181)

* Remove star import
2021-05-25 21:45:53 +10:00
d047cfc8ff Calculate the player count without offline players (FS-247) (#68)
Co-authored-by: Ryan <Wild1145@users.noreply.github.com>
2021-05-22 15:40:55 +01:00
9ff5da8d8f Small modification to new TFGuilds (FS-255) (#67) 2021-05-22 15:06:34 +01:00
ac615f54f7 Add //g to blocked commands (#62)
Co-authored-by: Nathan Curran <30569566+Focusvity@users.noreply.github.com>
2021-05-21 22:44:51 +01:00
21af722e23 Name change for Fleek (#64) 2021-05-17 20:31:34 +10:00
b1196fcf00 Added new dependency to allow TFM to compile (#65) 2021-05-17 06:50:09 +01:00
d170f6d323 Switched from -c to -ci (#63)
Resolves FS-219
2021-05-16 15:27:12 +01:00
9dd0298f56 Bug fixes, improvements, and removals (FS-192) (#46)
* Three fixes

* Fixes /tempban throwing a NullPointerException when trying to get a player who isn't on the server but was in the past
* Fixes /tempban banning players for 24 hours regardless of the duration defined
* Fixes /list -t throwing a NullPointerException when performed from a non-player source (such as Telnet)

* Removes hubworld entriely

* Configurable blacklists for tag, muted commands, and wildcard

Changes:
* Moves globally blocked commands to the `global` subsection of the original `blocked_commands` section. You *will* need to update your configurations
* /wildcard's command blacklist is now configurable under the `wildcard` section in `blocked_commands`.
* The commands muted players can't use are now configurable under the `muted` section in `blocked_commands`.
* Removes some commented-out globally blocked command entries.

Co-authored-by: Ryan <Wild1145@users.noreply.github.com>
2021-05-09 16:42:31 +01:00
bdf4ca84e0 Why overcomplicating things is a horrifically bad idea (#55)
The longer I look into this plugin's code, the angrier I will become.

This fixes 2 bugs in the /potion command:
- Fixes non-admins being able to clear other players
- Fixes NPE caused when trying to add potion effects to players who are not on the server as a non-admin.

Both of these issues are caused by overcomplicating seemingly simple solutions, hence the name of this commit.

Co-authored-by: Ryan <Wild1145@users.noreply.github.com>
Co-authored-by: Nathan Curran <30569566+Focusvity@users.noreply.github.com>
2021-05-04 13:31:55 +01:00
caaa067096 Update Security Matrix (#59)
* Update Security Matrix

Updating the full security matrix.

* Yay for consistency

* I hate Markdown / Markup / Whatever the fuck this is.
2021-05-04 13:30:17 +01:00
7258d7f1bf Merge pull request #58 from AtlasMediaGroup/FS-221
Remove a number of wipe commands we don't want anyway
2021-05-04 12:59:31 +01:00
8a504bff07 Merge branch 'development' into FS-221 2021-05-03 22:15:20 -06:00
c00e64f736 Merge pull request #54 from VideoGameSmash12/FS-137
Assistant executive discord integration (FS-137)
2021-05-03 20:14:35 +01:00
9e73db0f24 Merge branch 'development' into FS-137 2021-05-03 19:46:59 +01:00
951c061d77 Merge pull request #57 from AtlasMediaGroup/Elmon11-patch-2
grammar fix
2021-05-03 19:46:37 +01:00
579d3e0719 Merge branch 'development' into Elmon11-patch-2 2021-05-03 19:13:39 +01:00
9777733d04 Merge pull request #53 from VideoGameSmash12/ride-typo
Fixes typo in /ride
2021-05-03 19:13:26 +01:00
05e118dcb4 Merge branch 'development' into ride-typo 2021-05-03 18:21:16 +01:00
7a0d6f49f4 Merge pull request #52 from VideoGameSmash12/FS-156
Fixes typo in the Lightning Rod's name (FS-156)
2021-05-03 18:20:20 +01:00
19f1b7f6bd Merge branch 'development' into Elmon11-patch-2 2021-05-03 15:45:54 +01:00
b12afbdc1f Merge branch 'development' into FS-137 2021-05-03 15:45:45 +01:00
49e77d4f93 Merge branch 'development' into ride-typo 2021-05-03 15:45:36 +01:00
eb9107bedf Merge branch 'development' into FS-156 2021-05-03 15:45:25 +01:00
951c699ed0 Remove a number of wipe commands we don't want anyway
We shouldn't be wiping any of this data within the server now anyway so let's not tempt fate again.
2021-05-03 15:44:05 +01:00
9e676143b8 2021.04 Release
Formal Release for 2021.04
2021-05-03 15:19:42 +01:00
6895e46375 Merge branch 'development' into ride-typo 2021-05-02 14:15:15 +02:00
c8b20bc255 RC2 Release 2021-05-02 13:12:37 +01:00
1cf46c7337 grammar fix 2021-05-02 14:03:48 +02:00
f240a15af3 Force the count to be zero if the value is negative (FS-216) (#56) 2021-05-01 23:58:03 +10:00
407b63e48b Fixes FS-137 2021-04-26 01:23:24 -06:00
be562fe722 ok, done (FS-156) 2021-04-26 00:58:28 -06:00
928ab41d7f Update Command_ride.java 2021-04-26 00:37:16 -06:00
87 changed files with 1443 additions and 1496 deletions

19
.github/dependabot.yml vendored Normal file
View File

@ -0,0 +1,19 @@
# 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
schedule:
interval: "daily"
# Maintain dependencies for GitHub Actions
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "daily"

43
.github/workflows/downstream.yml vendored Normal file
View 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@v2
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@v2.1
with:
upstream_repository: AtlasMediaGroup/TotalFreedomMod
upstream_branch: main
target_branch: main
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

View File

@ -8,10 +8,20 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
# Java 11 Builds
- uses: actions/checkout@v1 - uses: actions/checkout@v1
- name: Set up JDK 1.8 - name: Set up JDK 11
uses: actions/setup-java@v1 uses: actions/setup-java@v1
with: with:
java-version: 11 java-version: 11
- name: Build with Maven - name: Build with Maven
run: mvn -B package --file pom.xml run: mvn -B package --file pom.xml
# Java 16 Builds
- uses: actions/checkout@v1
- name: Set up JDK 16
uses: actions/setup-java@v1
with:
java-version: 16
- name: Build with Maven
run: mvn -B package --file pom.xml

View File

@ -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

View File

@ -1,4 +1,4 @@
# TotalFreedomMod [![Build Status](https://travis-ci.com/AtlasMediaGroup/TotalFreedomMod.svg?branch=development)](https://travis-ci.com/AtlasMediaGroup/TotalFreedomMod) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/29c0f964da304666bd654bc7b1d556db)](https://www.codacy.com/gh/AtlasMediaGroup/TotalFreedomMod/dashboard?utm_source=github.com&utm_medium=referral&utm_content=AtlasMediaGroup/TotalFreedomMod&utm_campaign=Badge_Grade) # TotalFreedomMod [![Maven-Build](https://github.com/AtlasMediaGroup/TotalFreedomMod/actions/workflows/maven.yml/badge.svg)](https://github.com/AtlasMediaGroup/TotalFreedomMod/actions/workflows/maven.yml) [![Codacy Badge](https://app.codacy.com/project/badge/Grade/29c0f964da304666bd654bc7b1d556db)](https://www.codacy.com/gh/AtlasMediaGroup/TotalFreedomMod/dashboard?utm_source=github.com&utm_medium=referral&utm_content=AtlasMediaGroup/TotalFreedomMod&utm_campaign=Badge_Grade) [![CodeQL](https://github.com/AtlasMediaGroup/TotalFreedomMod/actions/workflows/codeql-analysis.yml/badge.svg)](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.

View File

@ -2,18 +2,34 @@
## 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: | | 2021.05 | :white_check_mark: | No Earlier than August 2021 |
| < 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.04 | :white_check_mark: | July 2021 |
### 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.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

47
pom.xml
View File

@ -5,7 +5,7 @@
<groupId>me.totalfreedom</groupId> <groupId>me.totalfreedom</groupId>
<artifactId>TotalFreedomMod</artifactId> <artifactId>TotalFreedomMod</artifactId>
<version>2021.04-RC01</version> <version>2021.05</version>
<packaging>jar</packaging> <packaging>jar</packaging>
<properties> <properties>
@ -14,6 +14,8 @@
<jar.finalName>${project.name}</jar.finalName> <jar.finalName>${project.name}</jar.finalName>
<timestamp>${maven.build.timestamp}</timestamp> <timestamp>${maven.build.timestamp}</timestamp>
<maven.build.timestamp.format>MM/dd/yyyy HH:mm</maven.build.timestamp.format> <maven.build.timestamp.format>MM/dd/yyyy HH:mm</maven.build.timestamp.format>
<tfguilds.version>master-4ec00d977c-1</tfguilds.version>
</properties> </properties>
<name>TotalFreedomMod</name> <name>TotalFreedomMod</name>
@ -105,11 +107,6 @@
<url>https://papermc.io/repo/repository/maven-public/</url> <url>https://papermc.io/repo/repository/maven-public/</url>
</repository> </repository>
<repository>
<id>rayzr-repo</id>
<url>https://cdn.rawgit.com/Rayzr522/maven-repo/master/</url>
</repository>
<repository> <repository>
<id>ess-repo</id> <id>ess-repo</id>
<url>https://ci.ender.zone/plugin/repository/everything/</url> <url>https://ci.ender.zone/plugin/repository/everything/</url>
@ -168,9 +165,9 @@
</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>
@ -216,13 +213,6 @@
<scope>compile</scope> <scope>compile</scope>
</dependency> </dependency>
<dependency>
<groupId>me.rayzr522</groupId>
<artifactId>jsonmessage</artifactId>
<version>1.0.0</version>
<scope>compile</scope>
</dependency>
<dependency> <dependency>
<groupId>com.github.vexsoftware</groupId> <groupId>com.github.vexsoftware</groupId>
<artifactId>votifier</artifactId> <artifactId>votifier</artifactId>
@ -252,9 +242,9 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.github.TotalFreedomMC</groupId> <groupId>com.github.AtlasMediaGroup</groupId>
<artifactId>TFGuilds</artifactId> <artifactId>TFGuilds</artifactId>
<version>db036fb187</version> <version>${tfguilds.version}</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
@ -277,6 +267,23 @@
<version>5.4.2</version> <version>5.4.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.4</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents.client5</groupId>
<artifactId>httpclient5</artifactId>
<version>5.0.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20210307</version>
<scope>compile</scope>
</dependency>
</dependencies> </dependencies>
<build> <build>
@ -434,7 +441,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>
@ -448,11 +456,12 @@
<include>commons-codec:commons-codec</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>com.github.speedxx:Mojangson</include>
<include>org.bstats:bstats-bukkit</include> <include>org.bstats:bstats-bukkit</include>
<include>org.jetbrains:annotations</include> <include>org.jetbrains:annotations</include>
<includes>org.apache.httpcomponents.client5:httpclient5</includes>
<includes>org.apache.httpcomponents.core5:httpcore5</includes>
</includes> </includes>
</artifactSet> </artifactSet>
</configuration> </configuration>

View File

@ -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));

View File

@ -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);
} }
} }

View File

@ -126,7 +126,7 @@ public class ChatManager extends FreedomService
boolean mentionEveryone = ChatColor.stripColor(message).toLowerCase().contains("@everyone") && plugin.al.isAdmin(player); boolean mentionEveryone = ChatColor.stripColor(message).toLowerCase().contains("@everyone") && plugin.al.isAdmin(player);
for (Player p : server.getOnlinePlayers()) for (Player p : server.getOnlinePlayers())
{ {
if (ChatColor.stripColor(message).toLowerCase().contains("@" + p.getName().toLowerCase()) || mentionEveryone) if ((ChatColor.stripColor(message).toLowerCase().contains("@" + p.getName().toLowerCase()) || mentionEveryone) && !event.isCancelled())
{ {
p.playSound(p.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, SoundCategory.MASTER, 1337F, 0.9F); p.playSound(p.getLocation(), Sound.BLOCK_NOTE_BLOCK_PLING, SoundCategory.MASTER, 1337F, 0.9F);
} }

View File

@ -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());

View File

@ -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;
@ -32,9 +34,12 @@ public class EntityWiper extends FreedomService
{ {
@Override @Override
public void run() public void run()
{
if (ConfigEntry.AUTO_ENTITY_WIPE.getBoolean())
{ {
wipeEntities(false); 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
} }

View File

@ -4,7 +4,6 @@ import io.papermc.lib.PaperLib;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import me.rayzr522.jsonmessage.JSONMessage;
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;
@ -240,17 +239,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);
}
}
} }
} }

View File

@ -1,13 +1,13 @@
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 java.util.UUID;
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,8 +20,7 @@ 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<UUID> MUTED_PLAYERS = new ArrayList<>();
public final List<String> MUTED_PLAYERS = new ArrayList<>();
@Override @Override
public void onStart() public void onStart()
@ -48,7 +47,7 @@ public class Muter extends FreedomService
if (plugin.al.isAdminSync(player)) if (plugin.al.isAdminSync(player))
{ {
fPlayer.setMuted(false); fPlayer.setMuted(false);
MUTED_PLAYERS.remove(player.getName()); MUTED_PLAYERS.remove(player.getUniqueId());
return; return;
} }
@ -88,7 +87,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);
@ -108,7 +107,7 @@ public class Muter extends FreedomService
Player player = event.getPlayer(); Player player = event.getPlayer();
FPlayer playerdata = plugin.pl.getPlayer(player); FPlayer playerdata = plugin.pl.getPlayer(player);
if (MUTED_PLAYERS.contains(player.getName())) if (MUTED_PLAYERS.contains(player.getUniqueId()))
{ {
playerdata.setMuted(true); playerdata.setMuted(true);
} }

View File

@ -127,7 +127,6 @@ public class TotalFreedomMod extends JavaPlugin
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;

View File

@ -2,6 +2,8 @@ package me.totalfreedom.totalfreedommod.admin;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import java.util.Map; import java.util.Map;
import java.util.UUID;
import me.totalfreedom.totalfreedommod.FreedomService; import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.config.YamlConfig; import me.totalfreedom.totalfreedommod.config.YamlConfig;
import me.totalfreedom.totalfreedommod.util.FLog; import me.totalfreedom.totalfreedommod.util.FLog;
@ -14,13 +16,14 @@ import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerJoinEvent; import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.event.player.PlayerQuitEvent;
//TODO: convert to uuids
public class ActivityLog extends FreedomService public class ActivityLog extends FreedomService
{ {
public static final String FILENAME = "activitylog.yml"; public static final String FILENAME = "activitylog.yml";
private final Map<String, ActivityLogEntry> allActivityLogs = Maps.newHashMap(); private final Map<UUID, ActivityLogEntry> allActivityLogs = Maps.newHashMap();
private final Map<String, ActivityLogEntry> nameTable = Maps.newHashMap(); private final Map<UUID, ActivityLogEntry> activityLogs = Maps.newHashMap();
private final Map<String, ActivityLogEntry> ipTable = Maps.newHashMap(); private final Map<String, ActivityLogEntry> ipTable = Maps.newHashMap();
private final YamlConfig config; private final YamlConfig config;
@ -52,7 +55,7 @@ public class ActivityLog extends FreedomService
config.load(); config.load();
allActivityLogs.clear(); allActivityLogs.clear();
nameTable.clear(); activityLogs.clear();
ipTable.clear(); ipTable.clear();
for (String key : config.getKeys(false)) for (String key : config.getKeys(false))
{ {
@ -72,7 +75,7 @@ public class ActivityLog extends FreedomService
continue; continue;
} }
allActivityLogs.put(key, activityLogEntry); allActivityLogs.put(UUID.fromString(key), activityLogEntry);
} }
updateTables(); updateTables();
@ -102,12 +105,12 @@ public class ActivityLog extends FreedomService
return getActivityLog((Player)sender); return getActivityLog((Player)sender);
} }
return getEntryByName(sender.getName()); return getEntryByUUID(FUtil.getUUIDFromName(sender.getName()));
} }
public ActivityLogEntry getActivityLog(Player player) public ActivityLogEntry getActivityLog(Player player)
{ {
ActivityLogEntry activityLog = getEntryByName(player.getName()); ActivityLogEntry activityLog = getEntryByUUID(player.getUniqueId());
if (activityLog == null) if (activityLog == null)
{ {
String ip = FUtil.getIp(player); String ip = FUtil.getIp(player);
@ -115,14 +118,13 @@ public class ActivityLog extends FreedomService
if (activityLog != null) if (activityLog != null)
{ {
// Set the new username // Set the new username
activityLog.setName(player.getName());
save(); save();
updateTables(); updateTables();
} }
else else
{ {
activityLog = new ActivityLogEntry(player); activityLog = new ActivityLogEntry(player);
allActivityLogs.put(activityLog.getConfigKey(), activityLog); allActivityLogs.put(activityLog.getUUID(), activityLog);
updateTables(); updateTables();
activityLog.saveTo(config.createSection(activityLog.getConfigKey())); activityLog.saveTo(config.createSection(activityLog.getConfigKey()));
@ -139,9 +141,9 @@ public class ActivityLog extends FreedomService
return activityLog; return activityLog;
} }
public ActivityLogEntry getEntryByName(String name) public ActivityLogEntry getEntryByUUID(UUID uuid)
{ {
return nameTable.get(name.toLowerCase()); return activityLogs.get(uuid);
} }
public ActivityLogEntry getEntryByIp(String ip) public ActivityLogEntry getEntryByIp(String ip)
@ -151,12 +153,12 @@ public class ActivityLog extends FreedomService
public void updateTables() public void updateTables()
{ {
nameTable.clear(); activityLogs.clear();
ipTable.clear(); ipTable.clear();
for (ActivityLogEntry activityLog : allActivityLogs.values()) for (ActivityLogEntry activityLog : allActivityLogs.values())
{ {
nameTable.put(activityLog.getName().toLowerCase(), activityLog); activityLogs.put(activityLog.getUUID(), activityLog);
for (String ip : activityLog.getIps()) for (String ip : activityLog.getIps())
{ {
@ -190,14 +192,14 @@ public class ActivityLog extends FreedomService
} }
} }
public Map<String, ActivityLogEntry> getAllActivityLogs() public Map<UUID, ActivityLogEntry> getAllActivityLogs()
{ {
return allActivityLogs; return allActivityLogs;
} }
public Map<String, ActivityLogEntry> getNameTable() public Map<UUID, ActivityLogEntry> getActivityLogs()
{ {
return nameTable; return activityLogs;
} }
public Map<String, ActivityLogEntry> getIpTable() public Map<String, ActivityLogEntry> getIpTable()

View File

@ -4,6 +4,8 @@ import com.google.common.collect.Lists;
import java.time.Instant; import java.time.Instant;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.UUID;
import me.totalfreedom.totalfreedommod.config.IConfig; import me.totalfreedom.totalfreedommod.config.IConfig;
import me.totalfreedom.totalfreedommod.util.FUtil; import me.totalfreedom.totalfreedommod.util.FUtil;
import org.apache.commons.lang.Validate; import org.apache.commons.lang.Validate;
@ -18,17 +20,20 @@ public class ActivityLogEntry implements IConfig
private final List<String> timestamps = Lists.newArrayList(); private final List<String> timestamps = Lists.newArrayList();
private final List<String> durations = Lists.newArrayList(); private final List<String> durations = Lists.newArrayList();
private String configKey; private String configKey;
private String name;
public ActivityLogEntry(Player player) public ActivityLogEntry(Player player)
{ {
this.configKey = player.getName().toLowerCase(); this.configKey = player.getUniqueId().toString();
this.name = player.getName();
} }
public ActivityLogEntry(String configKey) public ActivityLogEntry(UUID uuid)
{ {
this.configKey = configKey; this.configKey = uuid.toString();
}
public ActivityLogEntry(String uuid)
{
this.configKey = uuid;
} }
public static String getFILENAME() public static String getFILENAME()
@ -39,13 +44,11 @@ public class ActivityLogEntry implements IConfig
public void loadFrom(Player player) public void loadFrom(Player player)
{ {
configKey = player.getName().toLowerCase(); configKey = player.getName().toLowerCase();
name = player.getName();
} }
@Override @Override
public void loadFrom(ConfigurationSection cs) public void loadFrom(ConfigurationSection cs)
{ {
name = cs.getString("username", configKey);
ips.clear(); ips.clear();
ips.addAll(cs.getStringList("ips")); ips.addAll(cs.getStringList("ips"));
timestamps.clear(); timestamps.clear();
@ -57,8 +60,8 @@ public class ActivityLogEntry implements IConfig
@Override @Override
public void saveTo(ConfigurationSection cs) public void saveTo(ConfigurationSection cs)
{ {
Validate.isTrue(isValid(), "Could not save activity entry: " + name + ". Entry not valid!"); Validate.isTrue(isValid(), "Could not save activity entry: " + getUUID() + ". Entry not valid!");
cs.set("username", name); cs.set("uuid", getUUID().toString());
cs.set("ips", Lists.newArrayList(ips)); cs.set("ips", Lists.newArrayList(ips));
cs.set("timestamps", Lists.newArrayList(timestamps)); cs.set("timestamps", Lists.newArrayList(timestamps));
cs.set("durations", Lists.newArrayList(durations)); cs.set("durations", Lists.newArrayList(durations));
@ -73,11 +76,11 @@ public class ActivityLogEntry implements IConfig
public void addLogout() public void addLogout()
{ {
// Fix of Array index out of bonds issue: FS-131 // Fix of Array index out of bonds issue: FS-131
String lastLoginString; String lastLoginString = "";
if(timestamps.size() > 1) if(timestamps.size() > 1)
{ {
lastLoginString = timestamps.get(timestamps.size() - 1); lastLoginString = timestamps.get(timestamps.size() - 1);
}else } else if (timestamps.size() == 1)
{ {
lastLoginString = timestamps.get(0); lastLoginString = timestamps.get(0);
} }
@ -136,7 +139,7 @@ public class ActivityLogEntry implements IConfig
public boolean isValid() public boolean isValid()
{ {
return configKey != null return configKey != null
&& name != null; && getUUID() != null;
} }
public String getConfigKey() public String getConfigKey()
@ -149,16 +152,6 @@ public class ActivityLogEntry implements IConfig
this.configKey = configKey; this.configKey = configKey;
} }
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public List<String> getIps() public List<String> getIps()
{ {
return ips; return ips;
@ -173,4 +166,12 @@ public class ActivityLogEntry implements IConfig
{ {
return durations; return durations;
} }
public UUID getUUID() {
return UUID.fromString(configKey);
}
public String getName() {
return FUtil.getNameFromUUID(getUUID());
}
} }

View File

@ -2,11 +2,8 @@ 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.rank.Rank; import me.totalfreedom.totalfreedommod.rank.Rank;
@ -21,7 +18,7 @@ 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(); this.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(uuid.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 getUniqueId()
{ {
return name; return uuid;
} }
public void setName(String name) public void setUniqueId(UUID uuid)
{ {
this.name = name; this.uuid = uuid;
} }
public boolean isActive() public boolean isActive()
@ -168,6 +165,7 @@ public class Admin
} }
} }
public Rank getRank() public Rank getRank()
{ {
return rank; return rank;
@ -232,4 +230,9 @@ public class Admin
{ {
this.pteroID = pteroID; this.pteroID = pteroID;
} }
public String getName()
{
return FUtil.getNameFromUUID(uuid);
}
} }

View File

@ -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;
@ -26,7 +22,7 @@ public class AdminList extends FreedomService
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<String, Admin> nameTable = Maps.newHashMap(); private final Map<UUID, Admin> adminTable = Maps.newHashMap();
private final Map<String, Admin> ipTable = Maps.newHashMap(); private final Map<String, Admin> ipTable = Maps.newHashMap();
public static List<String> getVanished() public static List<String> getVanished()
@ -66,7 +62,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 (" + adminTable.size() + " active, " + ipTable.size() + " IPs)");
} }
public void messageAllAdmins(String message) public void messageAllAdmins(String message)
@ -97,14 +93,16 @@ public class AdminList extends FreedomService
return isAdmin(sender); return isAdmin(sender);
} }
@Deprecated
public List<String> getActiveAdminNames() public List<String> getActiveAdminNames()
{ {
List<String> names = new ArrayList(); /*List<String> names = new ArrayList();
for (Admin admin : activeAdmins) for (Admin admin : activeAdmins)
{ {
names.add(admin.getName()); names.add(admin.getName());
} }
return names; return names;*/
throw new UnsupportedOperationException("Admin no longer stores names in the object, may be changed in a future update");
} }
public boolean isAdmin(CommandSender sender) public boolean isAdmin(CommandSender sender)
@ -142,21 +140,21 @@ public class AdminList extends FreedomService
return admin.getRank().ordinal() >= Rank.SENIOR_ADMIN.ordinal(); return admin.getRank().ordinal() >= Rank.SENIOR_ADMIN.ordinal();
} }
public Admin getAdmin(CommandSender sender) public Admin getAdmin(CommandSender sender) //TODO: Fix
{ {
if (sender instanceof Player) if (sender instanceof Player)
{ {
return getAdmin((Player)sender); return getAdmin((Player)sender);
} }
return getEntryByName(sender.getName()); return getEntryByUUID(FUtil.getUUIDFromName(sender.getName()));
} }
public Admin getAdmin(Player player) public Admin getAdmin(Player player)
{ {
// Find admin // Find admin
String ip = FUtil.getIp(player); String ip = FUtil.getIp(player);
Admin admin = getEntryByName(player.getName()); Admin admin = getEntryByUUID(player.getUniqueId());
// Admin by name // Admin by name
if (admin != null) if (admin != null)
@ -181,18 +179,16 @@ public class AdminList extends FreedomService
if (admin != null) if (admin != null)
{ {
// Set the new username // Set the new username
String oldName = admin.getName(); //plugin.sql.updateAdminName(oldName, admin.getName());
admin.setName(player.getName());
plugin.sql.updateAdminName(oldName, admin.getName());
updateTables(); updateTables();
} }
return null; return null;
} }
public Admin getEntryByName(String name) public Admin getEntryByUUID(UUID uuid)
{ {
return nameTable.get(name.toLowerCase()); return adminTable.get(uuid);
} }
public Admin getEntryByIp(String ip) public Admin getEntryByIp(String ip)
@ -200,6 +196,7 @@ public class AdminList extends FreedomService
return ipTable.get(ip); return ipTable.get(ip);
} }
@Deprecated // TODO: no ips maybe ? idk soontm
public Admin getEntryByIpFuzzy(String needleIp) public Admin getEntryByIpFuzzy(String needleIp)
{ {
final Admin directAdmin = getEntryByIp(needleIp); final Admin directAdmin = getEntryByIp(needleIp);
@ -228,13 +225,12 @@ 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) public boolean isAdminImpostor(Player player)
{ {
return getEntryByName(player.getName()) != null && !isAdmin(player) && !isVerifiedAdmin(player); return getEntryByUUID(player.getUniqueId()) != null && !isAdmin(player) && !isVerifiedAdmin(player);
} }
public boolean isVerifiedAdmin(Player player) public boolean isVerifiedAdmin(Player player)
@ -297,7 +293,7 @@ public class AdminList extends FreedomService
public void updateTables() public void updateTables()
{ {
activeAdmins.clear(); activeAdmins.clear();
nameTable.clear(); adminTable.clear();
ipTable.clear(); ipTable.clear();
for (Admin admin : allAdmins) for (Admin admin : allAdmins)
@ -308,7 +304,7 @@ public class AdminList extends FreedomService
} }
activeAdmins.add(admin); activeAdmins.add(admin);
nameTable.put(admin.getName().toLowerCase(), admin); adminTable.put(admin.getUniqueId(), admin);
for (String ip : admin.getIps()) for (String ip : admin.getIps())
{ {
@ -318,9 +314,9 @@ public class AdminList extends FreedomService
} }
} }
public Set<String> getAdminNames() public Set<UUID> getAdminUUIDs()
{ {
return nameTable.keySet(); return adminTable.keySet();
} }
public Set<String> getAdminIps() public Set<String> getAdminIps()
@ -332,7 +328,7 @@ public class AdminList extends FreedomService
{ {
try try
{ {
ResultSet currentSave = plugin.sql.getAdminByName(admin.getName()); ResultSet currentSave = plugin.sql.getAdminByUUID(admin.getUniqueId());
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());
@ -392,11 +388,6 @@ public class AdminList extends FreedomService
return activeAdmins; return activeAdmins;
} }
public Map<String, Admin> getNameTable()
{
return nameTable;
}
public Map<String, Admin> getIpTable() public Map<String, Admin> getIpTable()
{ {
return ipTable; return ipTable;

View File

@ -19,6 +19,8 @@ import org.bukkit.entity.Player;
public class Ban public class Ban
{ {
//TODO: fuck your usernames and getting by ips, bans will be in uuid maybe soon tm idk
public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z"); public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z");
private final List<String> ips = Lists.newArrayList(); private final List<String> ips = Lists.newArrayList();
private String username = null; private String username = null;

View File

@ -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

View File

@ -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()))

View File

@ -36,10 +36,9 @@ public class InteractBlocker extends FreedomService
break; break;
} }
case LEFT_CLICK_AIR: default:
case LEFT_CLICK_BLOCK:
{ {
// // Do nothing
break; break;
} }
} }
@ -158,6 +157,11 @@ public class InteractBlocker extends FreedomService
event.setCancelled(true); event.setCancelled(true);
break; break;
} }
default:
{
// Do nothing
break;
}
} }
} }
} }

View File

@ -12,6 +12,7 @@ import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.admin.Admin; import me.totalfreedom.totalfreedommod.admin.Admin;
import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FLog; import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.entity.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;
@ -126,7 +127,7 @@ public class BukkitTelnetBridge extends FreedomService
{ {
for (ClientSession session : telnet.appender.getSessions()) for (ClientSession session : telnet.appender.getSessions())
{ {
Admin admin = plugin.al.getEntryByName(session.getUserName().toLowerCase()); Admin admin = plugin.al.getEntryByUUID(FUtil.getUUIDFromName(session.getUserName()));
if (admin != null && !admins.contains(admin)) if (admin != null && !admins.contains(admin))
{ {
admins.add(admin); admins.add(admin);

View File

@ -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);
} }
} }

View File

@ -15,7 +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()); plugin.wr.protectWorld(plugin.wm.masterBuilderWorld.getWorld());
} }

View File

@ -65,7 +65,7 @@ public class Command_ban extends FreedomCommand
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]); final PlayerData entry = plugin.pl.getData(FUtil.getUUIDFromName(args[0]));
if (entry == null) if (entry == null)
{ {

View File

@ -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
{ {

View File

@ -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;
} }

View File

@ -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());

View File

@ -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,15 +77,41 @@ public class Command_cage extends FreedomCommand
} }
case "block": case "block":
{ {
if (Material.matchMaterial(args[2]) != null) if (args.length >= 3)
{
// Checks the validity of the Material and checks if it's a block.
// 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]); outerMaterial = Material.matchMaterial(args[2]);
break; break;
} }
else
{
msg("Invalid block!", ChatColor.RED); msg("Invalid block!", ChatColor.RED);
break; return true;
} }
} }
else
{
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);
@ -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;
} }

View File

@ -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

View File

@ -56,7 +56,7 @@ public class Command_doom extends FreedomCommand
plugin.ptero.updateAccountStatus(admin); plugin.ptero.updateAccountStatus(admin);
if (plugin.dc.enabled && ConfigEntry.DISCORD_ROLE_SYNC.getBoolean()) if (plugin.dc.enabled && ConfigEntry.DISCORD_ROLE_SYNC.getBoolean())
{ {
Discord.syncRoles(admin, plugin.pl.getData(admin.getName()).getDiscordID()); Discord.syncRoles(admin, plugin.pl.getData(admin.getUniqueId()).getDiscordID());
} }
} }

View File

@ -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);

View File

@ -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))

View File

@ -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;
} }
} }

View File

@ -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);
}
}
}

View File

@ -3,6 +3,7 @@ package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.discord.Discord; import me.totalfreedom.totalfreedommod.discord.Discord;
import me.totalfreedom.totalfreedommod.player.PlayerData; import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -24,7 +25,7 @@ public class Command_linkdiscord extends FreedomCommand
if (args.length > 1 && plugin.al.isAdmin(playerSender)) if (args.length > 1 && plugin.al.isAdmin(playerSender))
{ {
PlayerData playerData = plugin.pl.getData(args[0]); PlayerData playerData = plugin.pl.getData(FUtil.getUUIDFromName(args[0]));
if (playerData == null) if (playerData == null)
{ {
msg(PLAYER_NOT_FOUND); msg(PLAYER_NOT_FOUND);

View File

@ -88,7 +88,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,7 +101,7 @@ public class Command_list extends FreedomCommand
} }
else else
{ {
onlineStats.append(ChatColor.BLUE).append("There are ").append(ChatColor.RED).append(server.getOnlinePlayers().size() - AdminList.vanished.size()) onlineStats.append(ChatColor.BLUE).append("There are ").append(ChatColor.RED).append(FUtil.getFakePlayerCount())
.append(ChatColor.BLUE) .append(ChatColor.BLUE)
.append(" out of a maximum ") .append(" out of a maximum ")
.append(ChatColor.RED) .append(ChatColor.RED)

View File

@ -35,14 +35,14 @@ 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])));
if (!args[3].equals("all")) if (!args[3].equals("all"))
{ {
PlayerData playerData = plugin.pl.getData(args[3]); PlayerData playerData = plugin.pl.getData(FUtil.getUUIDFromName(args[3]));
if (playerData == null) if (playerData == null)
{ {
msg(PLAYER_NOT_FOUND); msg(PLAYER_NOT_FOUND);
@ -75,13 +75,15 @@ 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])));
if (!args[3].equals("all")) if (!args[3].equals("all"))
{ {
PlayerData playerData = plugin.pl.getData(args[3]); PlayerData playerData = plugin.pl.getData(FUtil.getUUIDFromName(args[3]));
if (playerData == null) if (playerData == null)
{ {
msg(PLAYER_NOT_FOUND); msg(PLAYER_NOT_FOUND);
@ -122,11 +124,13 @@ 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])));
PlayerData playerData = plugin.pl.getData(args[3]); PlayerData playerData = plugin.pl.getData(FUtil.getUUIDFromName(args[3]));
if (playerData == null) if (playerData == null)
{ {
msg(PLAYER_NOT_FOUND); msg(PLAYER_NOT_FOUND);
@ -148,6 +152,11 @@ public class Command_manageshop extends FreedomCommand
return true; return true;
} }
} }
default:
{
return false;
}
}
} }
else if (args[0].equals("items")) else if (args[0].equals("items"))
{ {
@ -171,7 +180,7 @@ public class Command_manageshop extends FreedomCommand
return true; return true;
} }
PlayerData playerData = plugin.pl.getData(args[3]); PlayerData playerData = plugin.pl.getData(FUtil.getUUIDFromName(args[3]));
if (playerData == null) if (playerData == null)
{ {
msg(PLAYER_NOT_FOUND); msg(PLAYER_NOT_FOUND);
@ -196,7 +205,7 @@ public class Command_manageshop extends FreedomCommand
return true; return true;
} }
PlayerData playerData = plugin.pl.getData(args[3]); PlayerData playerData = plugin.pl.getData(FUtil.getUUIDFromName(args[3]));
if (playerData == null) if (playerData == null)
{ {
msg(PLAYER_NOT_FOUND); msg(PLAYER_NOT_FOUND);

View File

@ -45,7 +45,7 @@ public class Command_mbconfig extends FreedomCommand
return true; return true;
} }
PlayerData data = plugin.pl.getData(sender.getName()); PlayerData data = plugin.pl.getData(FUtil.getUUIDFromName(sender.getName()));
if (!data.isMasterBuilder()) if (!data.isMasterBuilder())
{ {
msg("You are not a master builder!", ChatColor.RED); msg("You are not a master builder!", ChatColor.RED);
@ -74,7 +74,7 @@ public class Command_mbconfig extends FreedomCommand
return true; return true;
} }
PlayerData data = plugin.pl.getData(sender.getName()); PlayerData data = plugin.pl.getData(FUtil.getUUIDFromName(sender.getName()));
final String targetIp = FUtil.getIp(playerSender); final String targetIp = FUtil.getIp(playerSender);
if (!data.isMasterBuilder()) if (!data.isMasterBuilder())
@ -101,14 +101,14 @@ public class Command_mbconfig extends FreedomCommand
return false; return false;
} }
if (plugin.pl.canManageMasterBuilders(sender.getName())) if (plugin.pl.canManageMasterBuilders(FUtil.getUUIDFromName(sender.getName())))
{ {
return noPerms(); return noPerms();
} }
final Player player = getPlayer(args[1]); final Player player = getPlayer(args[1]);
PlayerData data = player != null ? plugin.pl.getData(player) : plugin.pl.getData(args[1]); PlayerData data = player != null ? plugin.pl.getData(player) : plugin.pl.getData(FUtil.getUUIDFromName(args[1]));
if (data == null) if (data == null)
{ {
@ -157,13 +157,13 @@ public class Command_mbconfig extends FreedomCommand
return false; return false;
} }
if (plugin.pl.canManageMasterBuilders(sender.getName())) if (plugin.pl.canManageMasterBuilders(FUtil.getUUIDFromName(sender.getName())))
{ {
return noPerms(); return noPerms();
} }
Player player = getPlayer(args[1]); Player player = getPlayer(args[1]);
PlayerData data = player != null ? plugin.pl.getData(player) : plugin.pl.getData(args[1]); PlayerData data = player != null ? plugin.pl.getData(player) : plugin.pl.getData(FUtil.getUUIDFromName(args[1]));
if (data == null || !data.isMasterBuilder()) if (data == null || !data.isMasterBuilder())
{ {
@ -210,7 +210,7 @@ public class Command_mbconfig extends FreedomCommand
} }
else if (args[0].equalsIgnoreCase("clearip")) else if (args[0].equalsIgnoreCase("clearip"))
{ {
PlayerData data = plugin.pl.getData(sender.getName()); PlayerData data = plugin.pl.getData(FUtil.getUUIDFromName(sender.getName()));
if (data.isMasterBuilder()) if (data.isMasterBuilder())
{ {
return data.getIps(); return data.getIps();

View File

@ -170,7 +170,7 @@ public class Command_myadmin extends FreedomCommand
msg("Role syncing is not enabled.", ChatColor.RED); msg("Role syncing is not enabled.", ChatColor.RED);
return true; return true;
} }
PlayerData playerData = plugin.pl.getData(target.getName()); PlayerData playerData = plugin.pl.getData(target.getUniqueId());
if (playerData.getDiscordID() == null) if (playerData.getDiscordID() == null)
{ {
msg("Please run /linkdiscord first!", ChatColor.RED); msg("Please run /linkdiscord first!", ChatColor.RED);
@ -248,7 +248,7 @@ public class Command_myadmin extends FreedomCommand
{ {
if (args[0].equals("-o") && args[2].equals("clearip")) if (args[0].equals("-o") && args[2].equals("clearip"))
{ {
Admin admin = plugin.al.getEntryByName(args[1]); Admin admin = plugin.al.getEntryByUUID(FUtil.getUUIDFromName(args[1]));
if (admin != null) if (admin != null)
{ {
return admin.getIps(); return admin.getIps();

View File

@ -31,7 +31,7 @@ public class Command_notes extends FreedomCommand
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]); final PlayerData entry = plugin.pl.getData(FUtil.getUUIDFromName(args[0]));
if (entry == null) if (entry == null)
{ {
@ -39,7 +39,7 @@ public class Command_notes extends FreedomCommand
return true; return true;
} }
playerData = plugin.pl.getData(entry.getName()); playerData = entry;
} }
else else
{ {
@ -116,9 +116,13 @@ 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
public List<String> getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args) public List<String> getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args)

View File

@ -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;
} }
} }

View File

@ -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,9 +172,12 @@ 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"))
@ -225,6 +242,12 @@ public class Command_potion extends FreedomCommand
break; break;
} }
default:
{
break;
}
}
return Collections.emptyList(); return Collections.emptyList();
} }

View File

@ -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;
} }

View File

@ -5,6 +5,8 @@ import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
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.Discord; import me.totalfreedom.totalfreedommod.discord.Discord;
@ -34,7 +36,7 @@ public class Command_saconfig extends FreedomCommand
{ {
case "list": case "list":
{ {
msg("Admins: " + StringUtils.join(plugin.al.getAdminNames(), ", "), ChatColor.GOLD); msg("Admins: " + StringUtils.join(plugin.al.getAdminUUIDs().stream().map(FUtil::getNameFromUUID).collect(Collectors.toList()), ", "), ChatColor.GOLD);
return true; return true;
} }
@ -45,7 +47,7 @@ public class Command_saconfig extends FreedomCommand
FUtil.adminAction(sender.getName(), "Cleaning the admin list", true); FUtil.adminAction(sender.getName(), "Cleaning the admin list", true);
plugin.al.deactivateOldEntries(true); plugin.al.deactivateOldEntries(true);
msg("Admins: " + StringUtils.join(plugin.al.getAdminNames(), ", "), ChatColor.GOLD); msg("Admins: " + StringUtils.join(plugin.al.getAdminUUIDs().stream().map(FUtil::getNameFromUUID).collect(Collectors.toList()), ", "), ChatColor.GOLD);
return true; return true;
} }
@ -89,7 +91,7 @@ public class Command_saconfig extends FreedomCommand
return true; return true;
} }
Admin admin = plugin.al.getEntryByName(args[1]); Admin admin = plugin.al.getEntryByUUID(FUtil.getUUIDFromName(args[1]));
if (admin == null) if (admin == null)
{ {
msg("Unknown admin: " + args[1]); msg("Unknown admin: " + args[1]);
@ -109,7 +111,7 @@ public class Command_saconfig extends FreedomCommand
if (plugin.dc.enabled && ConfigEntry.DISCORD_ROLE_SYNC.getBoolean()) if (plugin.dc.enabled && ConfigEntry.DISCORD_ROLE_SYNC.getBoolean())
{ {
Discord.syncRoles(admin, plugin.pl.getData(admin.getName()).getDiscordID()); Discord.syncRoles(admin, plugin.pl.getData(admin.getUniqueId()).getDiscordID());
} }
plugin.ptero.updateAccountStatus(admin); plugin.ptero.updateAccountStatus(admin);
@ -127,7 +129,7 @@ public class Command_saconfig extends FreedomCommand
checkRank(Rank.ADMIN); checkRank(Rank.ADMIN);
Admin admin = plugin.al.getEntryByName(args[1]); Admin admin = plugin.al.getEntryByUUID(FUtil.getUUIDFromName(args[1]));
if (admin == null) if (admin == null)
{ {
@ -206,12 +208,12 @@ public class Command_saconfig extends FreedomCommand
{ {
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(); /*String oldName = admin.getName();
if (!oldName.equals(player.getName())) if (!oldName.equals(player.getName()))
{ {
admin.setName(player.getName()); admin.setName(player.getName());
plugin.sql.updateAdminName(oldName, admin.getName()); plugin.sql.updateAdminName(oldName, admin.getName());
} }*/
admin.addIp(FUtil.getIp(player)); admin.addIp(FUtil.getIp(player));
admin.setActive(true); admin.setActive(true);
@ -259,7 +261,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.getEntryByUUID(FUtil.getUUIDFromName(args[1]));
if (admin == null) if (admin == null)
{ {
@ -280,7 +282,7 @@ public class Command_saconfig extends FreedomCommand
if (plugin.dc.enabled && ConfigEntry.DISCORD_ROLE_SYNC.getBoolean()) if (plugin.dc.enabled && ConfigEntry.DISCORD_ROLE_SYNC.getBoolean())
{ {
Discord.syncRoles(admin, plugin.pl.getData(admin.getName()).getDiscordID()); Discord.syncRoles(admin, plugin.pl.getData(admin.getUniqueId()).getDiscordID());
} }
plugin.ptero.updateAccountStatus(admin); plugin.ptero.updateAccountStatus(admin);

View File

@ -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;
}
}

View File

@ -3,6 +3,7 @@ package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.PlayerData; import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -38,7 +39,7 @@ public class Command_settotalvotes extends FreedomCommand
return true; return true;
} }
PlayerData playerData = plugin.pl.getData(args[1]); PlayerData playerData = plugin.pl.getData(FUtil.getUUIDFromName(args[1]));
if (playerData == null) if (playerData == null)
{ {

View File

@ -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;
} }

View File

@ -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;

View File

@ -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))
{ {

View File

@ -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))
{ {

View File

@ -46,7 +46,7 @@ public class Command_tban extends FreedomCommand
final PlayerData entry; final PlayerData entry;
if (player == null) if (player == null)
{ {
entry = plugin.pl.getData(args[0]); entry = plugin.pl.getData(FUtil.getUUIDFromName(args[0]));
if (entry == null) if (entry == null)
{ {

View File

@ -13,6 +13,8 @@ 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;
@ -44,26 +46,32 @@ public class Command_tempban extends FreedomCommand
} }
} }
final String username;
final List<String> ips = new ArrayList<>();
final Player player = getPlayer(args[0]); final Player player = getPlayer(args[0]);
final PlayerData entry; final PlayerData entry;
if (player == null) if (player == null)
{ {
entry = plugin.pl.getData(args[0]); entry = plugin.pl.getData(FUtil.getUUIDFromName(args[0]));
if (entry == null) if (entry == null)
{ {
msg("Can't find that user. If target is not logged in, make sure that you spelled the name exactly."); msg("Can't find that user. If target is not logged in, make sure that you spelled the name exactly.");
return true; return true;
} }
username = entry.getName();
ips.addAll(entry.getIps());
} }
else else
{ {
entry = plugin.pl.getData(player); entry = plugin.pl.getData(player);
username = player.getName();
ips.add(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());
Date expires = FUtil.parseDateOffset("30m"); Date expires = FUtil.parseDateOffset("30m");
message.append(" until ").append(date_format.format(expires)); message.append(" until ").append(date_format.format(expires));
@ -80,7 +88,26 @@ public class Command_tempban extends FreedomCommand
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);
}
for (String ip : ips)
{
ban.addIp(ip);
}
plugin.bm.addBan(ban);
if (!quiet) if (!quiet)
{
if (player != null)
{ {
// Strike with lightning // Strike with lightning
final Location targetPos = player.getLocation(); final Location targetPos = player.getLocation();
@ -92,26 +119,28 @@ public class Command_tempban extends FreedomCommand
Objects.requireNonNull(targetPos.getWorld()).strikeLightningEffect(strike_pos); Objects.requireNonNull(targetPos.getWorld()).strikeLightningEffect(strike_pos);
} }
} }
}
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 + ".");
} }
if (player != null)
Ban ban;
ban = Ban.forPlayer(player, sender, null, reason);
for (String ip : ips)
{ {
ban.addIp(ip);
}
plugin.bm.addBan(ban);
player.kickPlayer(ban.bakeKickMessage()); player.kickPlayer(ban.bakeKickMessage());
plugin.pul.logPunishment(new Punishment(player.getName(), FUtil.getIp(player), sender.getName(), PunishmentType.TEMPBAN, reason)); for (Player p : Bukkit.getOnlinePlayers())
{
if (FUtil.getIp(p).equals(FUtil.getIp(player)))
{
p.kickPlayer(ChatColor.RED + "You've been kicked because someone on your IP has been banned.");
}
}
}
plugin.pul.logPunishment(new Punishment(username, ips.get(0), sender.getName(), PunishmentType.TEMPBAN, reason));
return true; return true;
} }
} }

View File

@ -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;
} }

View File

@ -22,7 +22,7 @@ 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]); final PlayerData entry = plugin.pl.getData(FUtil.getUUIDFromName(args[0]));
if (entry == null) if (entry == null)
{ {

View File

@ -2,6 +2,7 @@ package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.player.PlayerData; import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.rank.Rank; import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.ChatColor; import org.bukkit.ChatColor;
import org.bukkit.command.Command; import org.bukkit.command.Command;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
@ -23,7 +24,7 @@ public class Command_unlinkdiscord extends FreedomCommand
if (args.length != 0 && plugin.al.isAdmin(playerSender)) if (args.length != 0 && plugin.al.isAdmin(playerSender))
{ {
PlayerData playerData = plugin.pl.getData(args[0]); PlayerData playerData = plugin.pl.getData(FUtil.getUUIDFromName(args[0]));
if (playerData == null) if (playerData == null)
{ {
msg(PLAYER_NOT_FOUND); msg(PLAYER_NOT_FOUND);

View File

@ -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,15 +56,16 @@ 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
msg(player, ChatColor.RED + "[WARNING] You received a warning from " + sender.getName() + ": " + warnReason); {
String adminNotice = ChatColor.RED + String adminNotice = ChatColor.RED +
sender.getName() + sender.getName() +
" - " + " - " +
@ -71,7 +75,9 @@ public class Command_warn extends FreedomCommand
ChatColor.YELLOW + ChatColor.YELLOW +
warnReason; warnReason;
plugin.al.messageAllAdmins(adminNotice); plugin.al.messageAllAdmins(adminNotice);
plugin.pl.getPlayer(player).incrementWarnings();
msg("You have successfully warned " + player.getName() + ".");
}
return true; return true;
} }
} }

View File

@ -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))
{ {

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -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();
}
}

View File

@ -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;
}
}

View File

@ -83,6 +83,7 @@ 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"),
// //
@ -154,7 +155,10 @@ 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"),

View File

@ -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())))
{ {

View File

@ -84,6 +84,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())))
{ {

View File

@ -24,7 +24,7 @@ public class PrivateMessageListener extends ListenerAdapter
player.setDiscordID(event.getMessage().getAuthor().getId()); player.setDiscordID(event.getMessage().getAuthor().getId());
player.setVerification(true); player.setVerification(true);
Admin admin = TotalFreedomMod.getPlugin().al.getEntryByName(name); Admin admin = TotalFreedomMod.getPlugin().al.getEntryByUUID(player.getUniqueId());
if (admin != null) if (admin != null)
{ {
Discord.syncRoles(admin, player.getDiscordID()); Discord.syncRoles(admin, player.getDiscordID());

View File

@ -128,7 +128,7 @@ public class ItemFun extends FreedomService
LivingEntity livingEntity = (LivingEntity)event.getRightClicked(); LivingEntity livingEntity = (LivingEntity)event.getRightClicked();
EntityType entityType = livingEntity.getType(); EntityType entityType = livingEntity.getType();
if (!(entityType == fPlayer.mobThrowerCreature())) if (entityType != fPlayer.mobThrowerCreature())
{ {
return; return;
} }
@ -304,6 +304,11 @@ public class ItemFun extends FreedomService
} }
break; break;
} }
default:
{
// Do nothing
break;
}
} }
} }

View File

@ -73,7 +73,7 @@ public class Landminer extends FreedomService
continue; continue;
} }
if (!(player.getLocation().distanceSquared(location) <= (landmine.radius * landmine.radius))) if (player.getLocation().distanceSquared(location) > (landmine.radius * landmine.radius))
{ {
break; break;
} }

View File

@ -79,12 +79,21 @@ public class Module_list extends HTTPDModule
switch (admin.getRank()) switch (admin.getRank())
{ {
case ADMIN: case ADMIN:
{
admins.add(player.getName()); admins.add(player.getName());
break; break;
}
case SENIOR_ADMIN: case SENIOR_ADMIN:
{
senioradmins.add(player.getName()); senioradmins.add(player.getName());
break; break;
} }
default:
{
// Do nothing
break;
}
}
} }
} }
@ -97,7 +106,7 @@ public class Module_list extends HTTPDModule
responseObject.put("master_builders", masterbuilders); responseObject.put("master_builders", masterbuilders);
responseObject.put("operators", operators); responseObject.put("operators", operators);
responseObject.put("imposters", imposters); responseObject.put("imposters", imposters);
responseObject.put("online", server.getOnlinePlayers().size() - AdminList.vanished.size()); responseObject.put("online", FUtil.getFakePlayerCount());
responseObject.put("max", server.getMaxPlayers()); responseObject.put("max", server.getMaxPlayers());
final NanoHTTPD.Response response = new NanoHTTPD.Response(NanoHTTPD.Response.Status.OK, NanoHTTPD.MIME_JSON, responseObject.toString()); final NanoHTTPD.Response response = new NanoHTTPD.Response(NanoHTTPD.Response.Status.OK, NanoHTTPD.MIME_JSON, responseObject.toString());
@ -110,7 +119,8 @@ public class Module_list extends HTTPDModule
final Collection<? extends Player> onlinePlayers = Bukkit.getOnlinePlayers(); final Collection<? extends Player> onlinePlayers = Bukkit.getOnlinePlayers();
body.append("<p>There are ").append(onlinePlayers.size() - AdminList.vanished.size()).append("/") int count = onlinePlayers.size() - AdminList.vanished.size();
body.append("<p>There are ").append(count < 0 ? 0 : count).append("/")
.append(Bukkit.getMaxPlayers()).append(" players online:</p>\r\n"); .append(Bukkit.getMaxPlayers()).append(" players online:</p>\r\n");
body.append("<ul>\r\n"); body.append("<ul>\r\n");

View File

@ -51,12 +51,21 @@ public class Module_players extends HTTPDModule
switch (admin.getRank()) switch (admin.getRank())
{ {
case ADMIN: case ADMIN:
{
admins.add(username); admins.add(username);
break; break;
}
case SENIOR_ADMIN: case SENIOR_ADMIN:
{
senioradmins.add(username); senioradmins.add(username);
break; break;
} }
default:
{
// Do nothing
break;
}
}
} }
masterbuilders.addAll(plugin.pl.getMasterBuilderNames()); masterbuilders.addAll(plugin.pl.getMasterBuilderNames());

View File

@ -1,7 +1,5 @@
package me.totalfreedom.totalfreedommod.player; package me.totalfreedom.totalfreedommod.player;
import java.util.ArrayList;
import java.util.List;
import me.totalfreedom.totalfreedommod.TotalFreedomMod; import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.caging.CageData; import me.totalfreedom.totalfreedommod.caging.CageData;
import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.config.ConfigEntry;
@ -16,21 +14,24 @@ import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask; import org.bukkit.scheduler.BukkitTask;
public class FPlayer import java.util.ArrayList;
{ import java.util.List;
import java.util.UUID;
public class FPlayer {
public static final long AUTO_PURGE_TICKS = 5L * 60L * 20L; public static final long AUTO_PURGE_TICKS = 5L * 60L * 20L;
private final TotalFreedomMod plugin; private final TotalFreedomMod plugin;
private final String name; private final UUID uuid;
private final String ip;
// //
private final FreezeData freezeData = new FreezeData(this); private final FreezeData freezeData = new FreezeData(this);
private final CageData cageData = new CageData(this); private final CageData cageData = new CageData(this);
private final List<LivingEntity> mobThrowerQueue = new ArrayList<>(); private final List<LivingEntity> mobThrowerQueue = new ArrayList<>();
private Player player; private Player player;
private PlayerData playerData;
// //
private BukkitTask unmuteTask; private BukkitTask unmuteTask;
private double fuckoffRadius = 0; private double fuckoffRadius = 0;
@ -69,643 +70,520 @@ public class FPlayer
private boolean invSee = false; private boolean invSee = false;
public FPlayer(TotalFreedomMod plugin, Player player)
{ public FPlayer(TotalFreedomMod plugin, Player player) {
this(plugin, player.getName(), FUtil.getIp(player)); this(plugin, player.getUniqueId());
} }
private FPlayer(TotalFreedomMod plugin, String name, String ip) private FPlayer(TotalFreedomMod plugin, UUID uuid) {
{
this.plugin = plugin; this.plugin = plugin;
this.name = name; this.uuid = uuid;
this.ip = ip;
} }
public static long getAutoPurgeTicks() public static long getAutoPurgeTicks() {
{
return AUTO_PURGE_TICKS; return AUTO_PURGE_TICKS;
} }
public Player getPlayer() public Player getPlayer() {
{ if (this.player == null) {
if (player != null && !player.isOnline()) for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
{ if (onlinePlayer.getUniqueId().equals(this.uuid)) {
player = null; this.player = onlinePlayer;
}
if (player == null)
{
for (Player onlinePlayer : Bukkit.getOnlinePlayers())
{
if (FUtil.getIp(onlinePlayer).equals(ip))
{
player = onlinePlayer;
break;
} }
} }
} }
return player; return this.player;
} }
public void setPlayer(Player player) public void setPlayer(Player player) {
{
this.player = player; this.player = player;
} }
public boolean isOrbiting() public boolean isOrbiting() {
{
return isOrbiting; return isOrbiting;
} }
public void setOrbiting(boolean orbiting) public void setOrbiting(boolean orbiting) {
{
isOrbiting = orbiting; isOrbiting = orbiting;
} }
public void startOrbiting(double strength) public void startOrbiting(double strength) {
{
this.isOrbiting = true; this.isOrbiting = true;
this.orbitStrength = strength; this.orbitStrength = strength;
} }
public void stopOrbiting() public void stopOrbiting() {
{
this.isOrbiting = false; this.isOrbiting = false;
} }
public double orbitStrength() public double orbitStrength() {
{
return orbitStrength; return orbitStrength;
} }
public boolean isFuckOff() public boolean isFuckOff() {
{
return fuckoffRadius > 0; return fuckoffRadius > 0;
} }
public void setFuckoff(double radius) public void setFuckoff(double radius) {
{
this.fuckoffRadius = radius; this.fuckoffRadius = radius;
} }
public void disableFuckoff() public void disableFuckoff() {
{
this.fuckoffRadius = 0; this.fuckoffRadius = 0;
} }
public void resetMsgCount() public void resetMsgCount() {
{
this.messageCount = 0; this.messageCount = 0;
} }
public int incrementAndGetMsgCount() public int incrementAndGetMsgCount() {
{
return this.messageCount++; return this.messageCount++;
} }
public int incrementAndGetBlockDestroyCount() public int incrementAndGetBlockDestroyCount() {
{
return this.totalBlockDestroy++; return this.totalBlockDestroy++;
} }
public void resetBlockDestroyCount() public void resetBlockDestroyCount() {
{
this.totalBlockDestroy = 0; this.totalBlockDestroy = 0;
} }
public int incrementAndGetBlockPlaceCount() public int incrementAndGetBlockPlaceCount() {
{
return this.totalBlockPlace++; return this.totalBlockPlace++;
} }
public void resetBlockPlaceCount() public void resetBlockPlaceCount() {
{
this.totalBlockPlace = 0; this.totalBlockPlace = 0;
} }
public int incrementAndGetFreecamDestroyCount() public int incrementAndGetFreecamDestroyCount() {
{
return this.freecamDestroyCount++; return this.freecamDestroyCount++;
} }
public void resetFreecamDestroyCount() public void resetFreecamDestroyCount() {
{
this.freecamDestroyCount = 0; this.freecamDestroyCount = 0;
} }
public int incrementAndGetFreecamPlaceCount() public int incrementAndGetFreecamPlaceCount() {
{
return this.freecamPlaceCount++; return this.freecamPlaceCount++;
} }
public void resetFreecamPlaceCount() public void resetFreecamPlaceCount() {
{
this.freecamPlaceCount = 0; this.freecamPlaceCount = 0;
} }
public void enableMobThrower(EntityType mobThrowerCreature, double mobThrowerSpeed) public void enableMobThrower(EntityType mobThrowerCreature, double mobThrowerSpeed) {
{
this.mobThrowerEnabled = true; this.mobThrowerEnabled = true;
this.mobThrowerEntity = mobThrowerCreature; this.mobThrowerEntity = mobThrowerCreature;
this.mobThrowerSpeed = mobThrowerSpeed; this.mobThrowerSpeed = mobThrowerSpeed;
} }
public void disableMobThrower() public void disableMobThrower() {
{
this.mobThrowerEnabled = false; this.mobThrowerEnabled = false;
} }
public EntityType mobThrowerCreature() public EntityType mobThrowerCreature() {
{
return this.mobThrowerEntity; return this.mobThrowerEntity;
} }
public double mobThrowerSpeed() public double mobThrowerSpeed() {
{
return this.mobThrowerSpeed; return this.mobThrowerSpeed;
} }
public boolean mobThrowerEnabled() public boolean mobThrowerEnabled() {
{
return this.mobThrowerEnabled; return this.mobThrowerEnabled;
} }
public void enqueueMob(LivingEntity mob) public void enqueueMob(LivingEntity mob) {
{
mobThrowerQueue.add(mob); mobThrowerQueue.add(mob);
if (mobThrowerQueue.size() > 4) if (mobThrowerQueue.size() > 4) {
{
LivingEntity oldmob = mobThrowerQueue.remove(0); LivingEntity oldmob = mobThrowerQueue.remove(0);
if (oldmob != null) if (oldmob != null) {
{
oldmob.damage(500.0); oldmob.damage(500.0);
} }
} }
} }
public void startArrowShooter(TotalFreedomMod plugin) public void startArrowShooter(TotalFreedomMod plugin) {
{
this.stopArrowShooter(); this.stopArrowShooter();
this.mp44ScheduleTask = new ArrowShooter(this.player).runTaskTimer(plugin, 1L, 1L); this.mp44ScheduleTask = new ArrowShooter(getPlayer()).runTaskTimer(plugin, 1L, 1L);
this.mp44Firing = true; this.mp44Firing = true;
} }
public void stopArrowShooter() public void stopArrowShooter() {
{ if (this.mp44ScheduleTask != null) {
if (this.mp44ScheduleTask != null)
{
this.mp44ScheduleTask.cancel(); this.mp44ScheduleTask.cancel();
this.mp44ScheduleTask = null; this.mp44ScheduleTask = null;
} }
this.mp44Firing = false; this.mp44Firing = false;
} }
public void armMP44() public void armMP44() {
{
this.mp44Armed = true; this.mp44Armed = true;
this.stopArrowShooter(); this.stopArrowShooter();
} }
public void disarmMP44() public void disarmMP44() {
{
this.mp44Armed = false; this.mp44Armed = false;
this.stopArrowShooter(); this.stopArrowShooter();
} }
public boolean isMP44Armed() public boolean isMP44Armed() {
{
return this.mp44Armed; return this.mp44Armed;
} }
public boolean toggleMP44Firing() public boolean toggleMP44Firing() {
{
this.mp44Firing = !this.mp44Firing; this.mp44Firing = !this.mp44Firing;
return mp44Firing; return mp44Firing;
} }
public boolean isMuted() public boolean isMuted() {
{
return unmuteTask != null; return unmuteTask != null;
} }
public void setMuted(boolean muted, int minutes) public void setMuted(boolean muted, int minutes) {
{
FUtil.cancel(unmuteTask); FUtil.cancel(unmuteTask);
plugin.mu.MUTED_PLAYERS.remove(getPlayer().getName()); plugin.mu.MUTED_PLAYERS.remove(getPlayer().getUniqueId());
unmuteTask = null; unmuteTask = null;
if (!muted) if (!muted) {
{
return; return;
} }
if (getPlayer() == null) if (getPlayer() == null) {
{
return; return;
} }
plugin.mu.MUTED_PLAYERS.add(getPlayer().getName()); plugin.mu.MUTED_PLAYERS.add(getPlayer().getUniqueId());
// TODO: Simplify this into a Consumer<BukkitTask> lambda? // TODO: Simplify this into a Consumer<BukkitTask> lambda?
unmuteTask = new BukkitRunnable() unmuteTask = new BukkitRunnable() {
{
@Override @Override
public void run() public void run() {
{ if (getPlayer() != null) {
if (getPlayer() != null)
{
FUtil.adminAction(ConfigEntry.SERVER_NAME.getString(), "Unmuting " + getPlayer().getName(), false); FUtil.adminAction(ConfigEntry.SERVER_NAME.getString(), "Unmuting " + getPlayer().getName(), false);
setMuted(false); setMuted(false);
} } else {
else FUtil.adminAction(ConfigEntry.SERVER_NAME.getString(), "Unmuting " + Bukkit.getOfflinePlayer(uuid).getName(), false);
{ plugin.mu.MUTED_PLAYERS.remove(uuid);
FUtil.adminAction(ConfigEntry.SERVER_NAME.getString(), "Unmuting " + getName(), false);
plugin.mu.MUTED_PLAYERS.remove(getName());
} }
} }
}.runTaskLater(plugin, minutes * (60L * 20L)); }.runTaskLater(plugin, minutes * (60L * 20L));
} }
public void setMuted(boolean muted) public void setMuted(boolean muted) {
{
setMuted(muted, 5); setMuted(muted, 5);
} }
public BukkitTask getLockupScheduleID() public BukkitTask getLockupScheduleID() {
{
return this.lockupScheduleTask; return this.lockupScheduleTask;
} }
public void setLockupScheduleId(BukkitTask id) public void setLockupScheduleId(BukkitTask id) {
{
this.lockupScheduleTask = id; this.lockupScheduleTask = id;
} }
public boolean isLockedUp() public boolean isLockedUp() {
{
return this.lockedUp; return this.lockedUp;
} }
public void setLockedUp(boolean lockedUp) public void setLockedUp(boolean lockedUp) {
{
this.lockedUp = lockedUp; this.lockedUp = lockedUp;
} }
public String getLastMessage() public String getLastMessage() {
{
return lastMessage; return lastMessage;
} }
public void setLastMessage(String message) public void setLastMessage(String message) {
{
this.lastMessage = message; this.lastMessage = message;
} }
public void setAdminChat(boolean inAdminchat) public void setAdminChat(boolean inAdminchat) {
{
this.inAdminchat = inAdminchat; this.inAdminchat = inAdminchat;
} }
public boolean inAdminChat() public boolean inAdminChat() {
{
return this.inAdminchat; return this.inAdminchat;
} }
public boolean allCommandsBlocked() public boolean allCommandsBlocked() {
{
return this.allCommandsBlocked; return this.allCommandsBlocked;
} }
public void setCommandsBlocked(boolean commandsBlocked) public void setCommandsBlocked(boolean commandsBlocked) {
{
this.allCommandsBlocked = commandsBlocked; this.allCommandsBlocked = commandsBlocked;
} }
public String getLastCommand() public String getLastCommand() {
{
return lastCommand; return lastCommand;
} }
public void setLastCommand(String lastCommand) public void setLastCommand(String lastCommand) {
{
this.lastCommand = lastCommand; this.lastCommand = lastCommand;
} }
public void setCommandSpy(boolean enabled) public void setCommandSpy(boolean enabled) {
{
this.cmdspyEnabled = enabled; this.cmdspyEnabled = enabled;
} }
public boolean cmdspyEnabled() public boolean cmdspyEnabled() {
{
return cmdspyEnabled; return cmdspyEnabled;
} }
public String getTag() public String getTag() {
{
return this.tag; return this.tag;
} }
public void setTag(String tag) public void setTag(String tag) {
{ if (tag == null) {
if (tag == null)
{
this.tag = null; this.tag = null;
} } else {
else
{
this.tag = FUtil.colorize(tag) + ChatColor.WHITE; this.tag = FUtil.colorize(tag) + ChatColor.WHITE;
} }
} }
public int getWarningCount() public int getWarningCount() {
{
return this.warningCount; return this.warningCount;
} }
public void setWarningCount(int warningCount) public void setWarningCount(int warningCount) {
{
this.warningCount = warningCount; this.warningCount = warningCount;
} }
public void incrementWarnings() public void incrementWarnings(boolean quiet) {
{
this.warningCount++; this.warningCount++;
if (this.warningCount % 2 == 0) if (this.warningCount % 2 == 0) {
{
Player p = getPlayer(); Player p = getPlayer();
if (!quiet) {
p.getWorld().strikeLightning(p.getLocation()); p.getWorld().strikeLightning(p.getLocation());
}
FUtil.playerMsg(p, ChatColor.RED + "You have been warned at least twice now, make sure to read the rules at " + ConfigEntry.SERVER_BAN_URL.getString()); FUtil.playerMsg(p, ChatColor.RED + "You have been warned at least twice now, make sure to read the rules at " + ConfigEntry.SERVER_BAN_URL.getString());
} }
} }
public TotalFreedomMod getPlugin() public TotalFreedomMod getPlugin() {
{
return plugin; return plugin;
} }
public String getName() public UUID getUniqueId() {
{ return uuid;
return name;
} }
public String getIp() public PlayerData getPlayerData() {
{ return playerData;
return ip;
} }
public BukkitTask getUnmuteTask() public BukkitTask getUnmuteTask() {
{
return unmuteTask; return unmuteTask;
} }
public void setUnmuteTask(BukkitTask unmuteTask) public void setUnmuteTask(BukkitTask unmuteTask) {
{
this.unmuteTask = unmuteTask; this.unmuteTask = unmuteTask;
} }
public FreezeData getFreezeData() public FreezeData getFreezeData() {
{
return freezeData; return freezeData;
} }
public double getFuckoffRadius() public double getFuckoffRadius() {
{
return fuckoffRadius; return fuckoffRadius;
} }
public void setFuckoffRadius(double fuckoffRadius) public void setFuckoffRadius(double fuckoffRadius) {
{
this.fuckoffRadius = fuckoffRadius; this.fuckoffRadius = fuckoffRadius;
} }
public int getMessageCount() public int getMessageCount() {
{
return messageCount; return messageCount;
} }
public void setMessageCount(int messageCount) public void setMessageCount(int messageCount) {
{
this.messageCount = messageCount; this.messageCount = messageCount;
} }
public int getTotalBlockDestroy() public int getTotalBlockDestroy() {
{
return totalBlockDestroy; return totalBlockDestroy;
} }
public void setTotalBlockDestroy(int totalBlockDestroy) public void setTotalBlockDestroy(int totalBlockDestroy) {
{
this.totalBlockDestroy = totalBlockDestroy; this.totalBlockDestroy = totalBlockDestroy;
} }
public int getTotalBlockPlace() public int getTotalBlockPlace() {
{
return totalBlockPlace; return totalBlockPlace;
} }
public void setTotalBlockPlace(int totalBlockPlace) public void setTotalBlockPlace(int totalBlockPlace) {
{
this.totalBlockPlace = totalBlockPlace; this.totalBlockPlace = totalBlockPlace;
} }
public int getFreecamDestroyCount() public int getFreecamDestroyCount() {
{
return freecamDestroyCount; return freecamDestroyCount;
} }
public void setFreecamDestroyCount(int freecamDestroyCount) public void setFreecamDestroyCount(int freecamDestroyCount) {
{
this.freecamDestroyCount = freecamDestroyCount; this.freecamDestroyCount = freecamDestroyCount;
} }
public int getFreecamPlaceCount() public int getFreecamPlaceCount() {
{
return freecamPlaceCount; return freecamPlaceCount;
} }
public void setFreecamPlaceCount(int freecamPlaceCount) public void setFreecamPlaceCount(int freecamPlaceCount) {
{
this.freecamPlaceCount = freecamPlaceCount; this.freecamPlaceCount = freecamPlaceCount;
} }
public CageData getCageData() public CageData getCageData() {
{
return cageData; return cageData;
} }
public double getOrbitStrength() public double getOrbitStrength() {
{
return orbitStrength; return orbitStrength;
} }
public void setOrbitStrength(double orbitStrength) public void setOrbitStrength(double orbitStrength) {
{
this.orbitStrength = orbitStrength; this.orbitStrength = orbitStrength;
} }
public boolean isMobThrowerEnabled() public boolean isMobThrowerEnabled() {
{
return mobThrowerEnabled; return mobThrowerEnabled;
} }
public void setMobThrowerEnabled(boolean mobThrowerEnabled) public void setMobThrowerEnabled(boolean mobThrowerEnabled) {
{
this.mobThrowerEnabled = mobThrowerEnabled; this.mobThrowerEnabled = mobThrowerEnabled;
} }
public EntityType getMobThrowerEntity() public EntityType getMobThrowerEntity() {
{
return mobThrowerEntity; return mobThrowerEntity;
} }
public void setMobThrowerEntity(EntityType mobThrowerEntity) public void setMobThrowerEntity(EntityType mobThrowerEntity) {
{
this.mobThrowerEntity = mobThrowerEntity; this.mobThrowerEntity = mobThrowerEntity;
} }
public double getMobThrowerSpeed() public double getMobThrowerSpeed() {
{
return mobThrowerSpeed; return mobThrowerSpeed;
} }
public void setMobThrowerSpeed(double mobThrowerSpeed) public void setPlayerData(PlayerData playerData) {
{ this.playerData = playerData;
}
public void setMobThrowerSpeed(double mobThrowerSpeed) {
this.mobThrowerSpeed = mobThrowerSpeed; this.mobThrowerSpeed = mobThrowerSpeed;
} }
public List<LivingEntity> getMobThrowerQueue() public List<LivingEntity> getMobThrowerQueue() {
{
return mobThrowerQueue; return mobThrowerQueue;
} }
public BukkitTask getMp44ScheduleTask() public BukkitTask getMp44ScheduleTask() {
{
return mp44ScheduleTask; return mp44ScheduleTask;
} }
public void setMp44ScheduleTask(BukkitTask mp44ScheduleTask) public void setMp44ScheduleTask(BukkitTask mp44ScheduleTask) {
{
this.mp44ScheduleTask = mp44ScheduleTask; this.mp44ScheduleTask = mp44ScheduleTask;
} }
public boolean isMp44Armed() public boolean isMp44Armed() {
{
return mp44Armed; return mp44Armed;
} }
public void setMp44Armed(boolean mp44Armed) public void setMp44Armed(boolean mp44Armed) {
{
this.mp44Armed = mp44Armed; this.mp44Armed = mp44Armed;
} }
public boolean isMp44Firing() public boolean isMp44Firing() {
{
return mp44Firing; return mp44Firing;
} }
public void setMp44Firing(boolean mp44Firing) public void setMp44Firing(boolean mp44Firing) {
{
this.mp44Firing = mp44Firing; this.mp44Firing = mp44Firing;
} }
public BukkitTask getLockupScheduleTask() public BukkitTask getLockupScheduleTask() {
{
return lockupScheduleTask; return lockupScheduleTask;
} }
public void setLockupScheduleTask(BukkitTask lockupScheduleTask) public void setLockupScheduleTask(BukkitTask lockupScheduleTask) {
{
this.lockupScheduleTask = lockupScheduleTask; this.lockupScheduleTask = lockupScheduleTask;
} }
public boolean isInAdminchat() public boolean isInAdminchat() {
{
return inAdminchat; return inAdminchat;
} }
public void setInAdminchat(boolean inAdminchat) public void setInAdminchat(boolean inAdminchat) {
{
this.inAdminchat = inAdminchat; this.inAdminchat = inAdminchat;
} }
public boolean isAllCommandsBlocked() public boolean isAllCommandsBlocked() {
{
return allCommandsBlocked; return allCommandsBlocked;
} }
public void setAllCommandsBlocked(boolean allCommandsBlocked) public void setAllCommandsBlocked(boolean allCommandsBlocked) {
{
this.allCommandsBlocked = allCommandsBlocked; this.allCommandsBlocked = allCommandsBlocked;
} }
public boolean isSuperadminIdVerified() public boolean isSuperadminIdVerified() {
{
return superadminIdVerified; return superadminIdVerified;
} }
public void setSuperadminIdVerified(boolean superadminIdVerified) public void setSuperadminIdVerified(boolean superadminIdVerified) {
{
this.superadminIdVerified = superadminIdVerified; this.superadminIdVerified = superadminIdVerified;
} }
public boolean isCmdspyEnabled() public boolean isCmdspyEnabled() {
{
return cmdspyEnabled; return cmdspyEnabled;
} }
public void setCmdspyEnabled(boolean cmdspyEnabled) public void setCmdspyEnabled(boolean cmdspyEnabled) {
{
this.cmdspyEnabled = cmdspyEnabled; this.cmdspyEnabled = cmdspyEnabled;
} }
public boolean isEditBlocked() public boolean isEditBlocked() {
{
return editBlocked; return editBlocked;
} }
public void setEditBlocked(boolean editBlocked) public void setEditBlocked(boolean editBlocked) {
{
this.editBlocked = editBlocked; this.editBlocked = editBlocked;
} }
public boolean isPvpBlocked() public boolean isPvpBlocked() {
{
return pvpBlocked; return pvpBlocked;
} }
public void setPvpBlocked(boolean pvpBlocked) public void setPvpBlocked(boolean pvpBlocked) {
{
this.pvpBlocked = pvpBlocked; this.pvpBlocked = pvpBlocked;
} }
public boolean isInvSee() public boolean isInvSee() {
{
return invSee; return invSee;
} }
public void setInvSee(boolean invSee) public void setInvSee(boolean invSee) {
{
this.invSee = invSee; this.invSee = invSee;
} }
private static class ArrowShooter extends BukkitRunnable private static class ArrowShooter extends BukkitRunnable {
{
private final Player player; private final Player player;
private ArrowShooter(Player player) private ArrowShooter(Player player) {
{
this.player = player; this.player = player;
} }
@Override @Override
public void run() public void run() {
{ if (player != null) {
Arrow shot = player.launchProjectile(Arrow.class); Arrow shot = player.launchProjectile(Arrow.class);
shot.setVelocity(shot.getVelocity().multiply(2.0)); shot.setVelocity(shot.getVelocity().multiply(2.0));
} }
} }
} }
}

View File

@ -3,10 +3,8 @@ package me.totalfreedom.totalfreedommod.player;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.Collections; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import me.totalfreedom.totalfreedommod.TotalFreedomMod; import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.shop.ShopItem; import me.totalfreedom.totalfreedommod.shop.ShopItem;
import me.totalfreedom.totalfreedommod.util.FLog; import me.totalfreedom.totalfreedommod.util.FLog;
@ -20,7 +18,7 @@ public class PlayerData
private final List<String> ips = Lists.newArrayList(); private final List<String> ips = Lists.newArrayList();
private final List<String> notes = Lists.newArrayList(); private final List<String> notes = Lists.newArrayList();
private final List<String> backupCodes = Lists.newArrayList(); private final List<String> backupCodes = Lists.newArrayList();
private String name; private UUID uuid;
private String tag = null; private String tag = null;
private String discordID = null; private String discordID = null;
private Boolean masterBuilder = false; private Boolean masterBuilder = false;
@ -48,7 +46,7 @@ public class PlayerData
{ {
try try
{ {
name = resultSet.getString("username"); uuid = UUID.fromString(resultSet.getString("uuid"));
ips.clear(); ips.clear();
ips.addAll(FUtil.stringToList(resultSet.getString("ips"))); ips.addAll(FUtil.stringToList(resultSet.getString("ips")));
notes.clear(); notes.clear();
@ -88,14 +86,13 @@ public class PlayerData
public PlayerData(Player player) public PlayerData(Player player)
{ {
this.name = player.getName(); this.uuid = player.getUniqueId();
} }
@Override @Override
public String toString() public String toString()
{ {
return "Player: " + uuid.toString() + "\n" +
return "Player: " + name + "\n" +
"- IPs: " + StringUtils.join(ips, ", ") + "\n" + "- IPs: " + StringUtils.join(ips, ", ") + "\n" +
"- Discord ID: " + discordID + "\n" + "- Discord ID: " + discordID + "\n" +
"- Master Builder: " + masterBuilder + "\n" + "- Master Builder: " + masterBuilder + "\n" +
@ -232,7 +229,7 @@ public class PlayerData
{ {
return new HashMap<String, Object>() return new HashMap<String, Object>()
{{ {{
put("username", name); put("uuid", uuid);
put("ips", FUtil.listToString(ips)); put("ips", FUtil.listToString(ips));
put("notes", FUtil.listToString(notes)); put("notes", FUtil.listToString(notes));
put("tag", tag); put("tag", tag);
@ -255,14 +252,14 @@ public class PlayerData
return displayDiscord; return displayDiscord;
} }
public String getName() public UUID getUniqueId()
{ {
return name; return uuid;
} }
public void setName(String name) public void setUniqueId(UUID uuid)
{ {
this.name = name; this.uuid = uuid;
} }
public String getTag() public String getTag()
@ -364,4 +361,9 @@ public class PlayerData
{ {
this.inspect = inspect; this.inspect = inspect;
} }
public String getName()
{
return FUtil.getNameFromUUID(uuid);
}
} }

View File

@ -3,11 +3,9 @@ package me.totalfreedom.totalfreedommod.player;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
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.stream.Collectors;
import java.util.List;
import java.util.Map;
import java.util.Objects;
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;
@ -20,13 +18,12 @@ import org.bukkit.entity.Player;
public class PlayerList extends FreedomService public class PlayerList extends FreedomService
{ {
public final Map<String, FPlayer> playerMap = Maps.newHashMap(); // ip,dataMap public final Map<UUID, FPlayer> playerMap = Maps.newHashMap(); // uuid,dataMap
public final Map<String, PlayerData> dataMap = Maps.newHashMap(); // username, data //public final Map<String, PlayerData> dataMap = Maps.newHashMap(); // username, data
@Override @Override
public void onStart() public void onStart()
{ {
dataMap.clear();
loadMasterBuilders(); loadMasterBuilders();
} }
@ -57,7 +54,6 @@ public class PlayerList extends FreedomService
while (resultSet.next()) while (resultSet.next())
{ {
PlayerData playerData = load(resultSet); PlayerData playerData = load(resultSet);
dataMap.put(playerData.getName(), playerData);
} }
} }
catch (SQLException e) catch (SQLException e)
@ -73,27 +69,20 @@ public class PlayerList extends FreedomService
return FUtil.getIp(Objects.requireNonNull(player.getPlayer())); return FUtil.getIp(Objects.requireNonNull(player.getPlayer()));
} }
final PlayerData entry = getData(player.getName()); final PlayerData entry = getData(player.getUniqueId());
return (entry == null ? null : entry.getIps().iterator().next()); return (entry == null ? null : entry.getIps().iterator().next());
} }
public List<String> getMasterBuilderNames() public List<String> getMasterBuilderNames()
{ {
List<String> masterBuilders = new ArrayList<>(); return playerMap.values().stream().map(FPlayer::getPlayerData).filter(PlayerData::isMasterBuilder).map(p -> FUtil.getNameFromUUID(p.getUniqueId())).collect(Collectors.toList());
for (PlayerData playerData : plugin.pl.dataMap.values())
{
if (playerData.isMasterBuilder())
{
masterBuilders.add(playerData.getName());
}
}
return masterBuilders;
} }
public boolean canManageMasterBuilders(String name) public boolean canManageMasterBuilders(UUID uuid)
{ {
PlayerData data = getData(name); PlayerData data = getData(uuid);
String name = FUtil.getNameFromUUID(uuid);
return (!ConfigEntry.HOST_SENDER_NAMES.getStringList().contains(name.toLowerCase()) && data != null && !ConfigEntry.SERVER_OWNERS.getStringList().contains(data.getName())) return (!ConfigEntry.HOST_SENDER_NAMES.getStringList().contains(name.toLowerCase()) && data != null && !ConfigEntry.SERVER_OWNERS.getStringList().contains(data.getName()))
&& !ConfigEntry.SERVER_EXECUTIVES.getStringList().contains(data.getName()) && !ConfigEntry.SERVER_EXECUTIVES.getStringList().contains(data.getName())
@ -103,31 +92,41 @@ public class PlayerList extends FreedomService
public boolean isTelnetMasterBuilder(PlayerData playerData) public boolean isTelnetMasterBuilder(PlayerData playerData)
{ {
Admin admin = plugin.al.getEntryByName(playerData.getName()); Admin admin = plugin.al.getEntryByUUID(playerData.getUniqueId());
return admin != null && admin.getRank().isAtLeast(Rank.ADMIN) && playerData.isMasterBuilder(); return admin != null && admin.getRank().isAtLeast(Rank.ADMIN) && playerData.isMasterBuilder();
} }
// May not return null // May not return null
public FPlayer getPlayer(Player player) public FPlayer getPlayer(Player player)
{ {
FPlayer tPlayer = playerMap.get(FUtil.getIp(player)); FPlayer tPlayer = playerMap.get(player.getUniqueId());
if (tPlayer != null) if (tPlayer != null)
{ {
return tPlayer; return tPlayer;
} }
tPlayer = new FPlayer(plugin, player); tPlayer = new FPlayer(plugin, player);
playerMap.put(FUtil.getIp(player), tPlayer); playerMap.put(player.getUniqueId(), tPlayer);
return tPlayer; return tPlayer;
} }
public PlayerData loadByName(String name) /*public PlayerData loadByName(String name)
{ {
return load(plugin.sql.getPlayerByName(name)); return load(plugin.sql.getPlayerByName(name));
} }
public PlayerData loadByIp(String ip) public PlayerData loadByIp(String ip)
{
return load(plugin.sql.getPlayerByIp(ip));
}*/
public PlayerData loadByUUID(UUID uuid)
{
return load(plugin.sql.getPlayerByUUID(uuid));
}
private PlayerData loadByIp(String ip)
{ {
return load(plugin.sql.getPlayerByIp(ip)); return load(plugin.sql.getPlayerByIp(ip));
} }
@ -168,7 +167,7 @@ public class PlayerList extends FreedomService
if (plugin.al.isAdminImpostor(player)) if (plugin.al.isAdminImpostor(player))
{ {
Admin admin = plugin.al.getEntryByName(player.getName()); Admin admin = plugin.al.getEntryByUUID(player.getUniqueId());
admin.setLastLogin(new Date()); admin.setLastLogin(new Date());
admin.addIp(FUtil.getIp(player)); admin.addIp(FUtil.getIp(player));
plugin.al.updateTables(); plugin.al.updateTables();
@ -180,7 +179,7 @@ public class PlayerList extends FreedomService
public void syncIps(Admin admin) public void syncIps(Admin admin)
{ {
PlayerData playerData = getData(admin.getName()); PlayerData playerData = getData(admin.getUniqueId());
playerData.clearIps(); playerData.clearIps();
playerData.addIps(admin.getIps()); playerData.addIps(admin.getIps());
plugin.pl.save(playerData); plugin.pl.save(playerData);
@ -188,7 +187,7 @@ public class PlayerList extends FreedomService
public void syncIps(PlayerData playerData) public void syncIps(PlayerData playerData)
{ {
Admin admin = plugin.al.getEntryByName(playerData.getName()); Admin admin = plugin.al.getEntryByUUID(playerData.getUniqueId());
if (admin != null && admin.isActive()) if (admin != null && admin.isActive())
{ {
@ -204,7 +203,7 @@ public class PlayerList extends FreedomService
{ {
try try
{ {
ResultSet currentSave = plugin.sql.getPlayerByName(player.getName()); ResultSet currentSave = plugin.sql.getPlayerByUUID(player.getUniqueId());
for (Map.Entry<String, Object> entry : player.toSQLStorable().entrySet()) for (Map.Entry<String, Object> entry : player.toSQLStorable().entrySet())
{ {
Object storedValue = plugin.sql.getValue(currentSave, entry.getKey(), entry.getValue()); Object storedValue = plugin.sql.getValue(currentSave, entry.getKey(), entry.getValue());
@ -223,31 +222,32 @@ public class PlayerList extends FreedomService
public PlayerData getData(Player player) public PlayerData getData(Player player)
{ {
// Check for existing data // Check for existing data
PlayerData playerData = dataMap.get(player.getName()); PlayerData playerData = playerMap.get(player.getUniqueId()).getPlayerData();
if (playerData != null) if (playerData != null)
{ {
return playerData; return playerData;
} }
// Load data // Load data
playerData = loadByName(player.getName()); playerData = loadByUUID(player.getUniqueId());
if (playerData == null) /*if (playerData == null)
{ {
playerData = loadByIp(FUtil.getIp(player)); playerData = loadByIp(FUtil.getIp(player));
if (playerData != null) if (playerData != null)
{ {
plugin.sql.updatePlayerName(playerData.getName(), player.getName()); plugin.sql.updatePlayerName(playerData.getName(), player.getName());
playerData.setName(player.getName()); playerMap.get(player.getUniqueId()).setPlayerData(playerData);
dataMap.put(player.getName(), playerData);
return playerData; return playerData;
} }
} }
else else
{ {
dataMap.put(player.getName(), playerData); playerMap.get(player.getUniqueId()).setPlayerData(playerData);
return playerData; return playerData;
} }*/
playerMap.get(player.getUniqueId()).setPlayerData(playerData);
// Create new data if nonexistent // Create new data if nonexistent
FLog.info("Creating new player verification entry for " + player.getName()); FLog.info("Creating new player verification entry for " + player.getName());
@ -257,7 +257,7 @@ public class PlayerList extends FreedomService
playerData.addIp(FUtil.getIp(player)); playerData.addIp(FUtil.getIp(player));
// Store player // Store player
dataMap.put(player.getName(), playerData); playerMap.get(player.getUniqueId()).setPlayerData(playerData);
// Save player // Save player
plugin.sql.addPlayer(playerData); plugin.sql.addPlayer(playerData);
@ -265,8 +265,10 @@ public class PlayerList extends FreedomService
} }
/*@Deprecated
public PlayerData getData(String username) public PlayerData getData(String username)
{ {
throw new UnsupportedOperationException();
// Check for existing data // Check for existing data
PlayerData playerData = dataMap.get(username); PlayerData playerData = dataMap.get(username);
if (playerData != null) if (playerData != null)
@ -286,6 +288,40 @@ public class PlayerList extends FreedomService
} }
return playerData; return playerData;
}*/
public PlayerData getData(UUID uuid)
{
PlayerData playerData = playerMap.get(uuid).getPlayerData();
if (playerData != null)
{
return playerData;
}
playerData = loadByUUID(uuid);
if (playerData != null)
{
playerMap.get(uuid).setPlayerData(playerData);
}
else
{
return null;
}
return playerData;
}
public PlayerData getDataByUUID(UUID uuid)
{
PlayerData player = loadByUUID(uuid);
if (player != null)
{
playerMap.get(uuid).setPlayerData(player);
}
return player;
} }
public PlayerData getDataByIp(String ip) public PlayerData getDataByIp(String ip)
@ -294,19 +330,15 @@ public class PlayerList extends FreedomService
if (player != null) if (player != null)
{ {
dataMap.put(player.getName(), player); playerMap.get(player.getUniqueId()).setPlayerData(player);
} }
return player; return player;
} }
public Map<String, FPlayer> getPlayerMap() public Map<UUID, FPlayer> getPlayerMap()
{ {
return playerMap; return playerMap;
} }
public Map<String, PlayerData> getDataMap()
{
return dataMap;
}
} }

View File

@ -7,5 +7,11 @@ public enum PunishmentType
KICK, KICK,
TEMPBAN, TEMPBAN,
BAN, BAN,
DOOM DOOM,
WARN,
CAGE,
BLOCKEDIT,
BLOCKPVP,
BLOCKCMD,
ORBIT
} }

View File

@ -117,7 +117,7 @@ public class RankManager extends FreedomService
} }
// Console admin, get by name // Console admin, get by name
Admin admin = plugin.al.getEntryByName(sender.getName()); Admin admin = plugin.al.getEntryByUUID(FUtil.getUUIDFromName(sender.getName()));
// Unknown console: RCON? // Unknown console: RCON?
if (admin == null) if (admin == null)

View File

@ -227,7 +227,7 @@ public class Shop extends FreedomService
ItemStack itemStack = new ItemStack(Material.BLAZE_ROD); ItemStack itemStack = new ItemStack(Material.BLAZE_ROD);
ItemMeta itemMeta = itemStack.getItemMeta(); ItemMeta itemMeta = itemStack.getItemMeta();
assert itemMeta != null; assert itemMeta != null;
itemMeta.setDisplayName(FUtil.colorize("&bL&3i&bg&3h&bt&3i&bn&3g &b&bR&3o&bd")); itemMeta.setDisplayName(FUtil.colorize("&bL&3i&bg&3h&bt&3n&bi&3n&bg &3R&bo&3d"));
itemMeta.setLore(Arrays.asList(ChatColor.AQUA + "Strike others down with the power of lightning.", ChatColor.RED + ChatColor.ITALIC.toString() + "The classic way to exterminate annoyances.")); itemMeta.setLore(Arrays.asList(ChatColor.AQUA + "Strike others down with the power of lightning.", ChatColor.RED + ChatColor.ITALIC.toString() + "The classic way to exterminate annoyances."));
itemMeta.addEnchant(Enchantment.CHANNELING, 1, false); itemMeta.addEnchant(Enchantment.CHANNELING, 1, false);
itemStack.setItemMeta(itemMeta); itemStack.setItemMeta(itemMeta);

View File

@ -37,7 +37,7 @@ public class Votifier extends FreedomService
} }
else else
{ {
data = plugin.pl.getData(name); data = plugin.pl.getData(FUtil.getUUIDFromName(name));
} }
if (data != null) if (data != null)

View File

@ -7,6 +7,8 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.util.UUID;
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.banning.Ban; import me.totalfreedom.totalfreedommod.banning.Ban;
@ -70,6 +72,7 @@ public class SQLite extends FreedomService
{ {
try try
{ {
//TODO: move bans to uuid
connection.createStatement().execute("CREATE TABLE `bans` (`name` VARCHAR, `uuid` VARCHAR, `ips` VARCHAR, `by` VARCHAR NOT NULL, `at` LONG NOT NULL, `expires` LONG, `reason` VARCHAR);"); connection.createStatement().execute("CREATE TABLE `bans` (`name` VARCHAR, `uuid` VARCHAR, `ips` VARCHAR, `by` VARCHAR NOT NULL, `at` LONG NOT NULL, `expires` LONG, `reason` VARCHAR);");
} }
catch (SQLException e) catch (SQLException e)
@ -82,7 +85,7 @@ public class SQLite extends FreedomService
{ {
try try
{ {
connection.createStatement().execute("CREATE TABLE `admins` (`username` VARCHAR NOT NULL, `ips` VARCHAR NOT NULL, `rank` VARCHAR NOT NULL, `active` BOOLEAN NOT NULL, `last_login` LONG NOT NULL, `command_spy` BOOLEAN NOT NULL, `potion_spy` BOOLEAN NOT NULL, `ac_format` VARCHAR, `ptero_id` VARCHAR);"); connection.createStatement().execute("CREATE TABLE `admins` (`uuid` VARCHAR NOT NULL, `ips` VARCHAR NOT NULL, `rank` VARCHAR NOT NULL, `active` BOOLEAN NOT NULL, `last_login` LONG NOT NULL, `command_spy` BOOLEAN NOT NULL, `potion_spy` BOOLEAN NOT NULL, `ac_format` VARCHAR, `ptero_id` VARCHAR);");
} }
catch (SQLException e) catch (SQLException e)
{ {
@ -93,7 +96,7 @@ public class SQLite extends FreedomService
{ {
try try
{ {
connection.createStatement().execute("CREATE TABLE `players` (`username` VARCHAR NOT NULL, `ips` VARCHAR NOT NULL, `notes` VARCHAR, `tag` VARCHAR, `discord_id` VARCHAR, `backup_codes` VARCHAR, `master_builder` BOOLEAN NOT NULL,`verification` BOOLEAN NOT NULL, `ride_mode` VARCHAR NOT NULL, `coins` INT, `items` VARCHAR, `total_votes` INT NOT NULL, `display_discord` BOOLEAN NOT NULL, `login_message` VARCHAR, `inspect` BOOLEAN NOT NULL);"); connection.createStatement().execute("CREATE TABLE `players` (`uuid` VARCHAR NOT NULL, `ips` VARCHAR NOT NULL, `notes` VARCHAR, `tag` VARCHAR, `discord_id` VARCHAR, `backup_codes` VARCHAR, `master_builder` BOOLEAN NOT NULL,`verification` BOOLEAN NOT NULL, `ride_mode` VARCHAR NOT NULL, `coins` INT, `items` VARCHAR, `total_votes` INT NOT NULL, `display_discord` BOOLEAN NOT NULL, `login_message` VARCHAR, `inspect` BOOLEAN NOT NULL);");
} }
catch (SQLException e) catch (SQLException e)
{ {
@ -133,8 +136,8 @@ public class SQLite extends FreedomService
{ {
try try
{ {
Object[] data = {key, admin.getName()}; Object[] data = {key, admin.getUniqueId().toString()};
PreparedStatement statement = connection.prepareStatement(MessageFormat.format("UPDATE admins SET {0}=? WHERE username=''{1}''", data)); PreparedStatement statement = connection.prepareStatement(MessageFormat.format("UPDATE admins SET {0}=? WHERE uuid=''{1}''", data));
statement = setUnknownType(statement, 1, value); statement = setUnknownType(statement, 1, value);
statement.executeUpdate(); statement.executeUpdate();
@ -150,8 +153,8 @@ public class SQLite extends FreedomService
{ {
try try
{ {
Object[] data = {key, player.getName()}; Object[] data = {key, player.getUniqueId().toString()};
PreparedStatement statement = connection.prepareStatement(MessageFormat.format("UPDATE players SET {0}=? WHERE username=''{1}''", data)); PreparedStatement statement = connection.prepareStatement(MessageFormat.format("UPDATE players SET {0}=? WHERE uuid=''{1}''", data));
statement = setUnknownType(statement, 1, value); statement = setUnknownType(statement, 1, value);
statement.executeUpdate(); statement.executeUpdate();
@ -162,9 +165,11 @@ public class SQLite extends FreedomService
} }
} }
public void updateAdminName(String oldName, String newName) @Deprecated
public void oldUpdateAdminName(String oldName, String newName)
{ {
try throw new UnsupportedOperationException("Admin no longer stores names in the object, may be changed in a future update");
/*try
{ {
PreparedStatement statement = connection.prepareStatement(MessageFormat.format("UPDATE admins SET username=? WHERE username=''{0}''", oldName)); PreparedStatement statement = connection.prepareStatement(MessageFormat.format("UPDATE admins SET username=? WHERE username=''{0}''", oldName));
statement = setUnknownType(statement, 1, newName); statement = setUnknownType(statement, 1, newName);
@ -174,10 +179,10 @@ public class SQLite extends FreedomService
catch (SQLException e) catch (SQLException e)
{ {
FLog.severe("Failed to update admin name: " + e.getMessage()); FLog.severe("Failed to update admin name: " + e.getMessage());
} }*/
} }
public void updatePlayerName(String oldName, String newName) /*public void updatePlayerName(String oldName, String newName)
{ {
try try
{ {
@ -190,7 +195,7 @@ public class SQLite extends FreedomService
{ {
FLog.severe("Failed to update player name: " + e.getMessage()); FLog.severe("Failed to update player name: " + e.getMessage());
} }
} }*/
public PreparedStatement setUnknownType(PreparedStatement statement, int index, Object value) throws SQLException public PreparedStatement setUnknownType(PreparedStatement statement, int index, Object value) throws SQLException
{ {
@ -248,7 +253,7 @@ public class SQLite extends FreedomService
try try
{ {
PreparedStatement statement = connection.prepareStatement("INSERT INTO admins VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"); PreparedStatement statement = connection.prepareStatement("INSERT INTO admins VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");
statement.setString(1, admin.getName()); statement.setString(1, admin.getUniqueId().toString());
statement.setString(2, FUtil.listToString(admin.getIps())); statement.setString(2, FUtil.listToString(admin.getIps()));
statement.setString(3, admin.getRank().toString()); statement.setString(3, admin.getRank().toString());
statement.setBoolean(4, admin.isActive()); statement.setBoolean(4, admin.isActive());
@ -271,7 +276,7 @@ public class SQLite extends FreedomService
try try
{ {
PreparedStatement statement = connection.prepareStatement("INSERT INTO players VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); PreparedStatement statement = connection.prepareStatement("INSERT INTO players VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
statement.setString(1, player.getName()); statement.setString(1, player.getUniqueId().toString());
statement.setString(2, FUtil.listToString(player.getIps())); statement.setString(2, FUtil.listToString(player.getIps()));
statement.setString(3, FUtil.listToString(player.getNotes())); statement.setString(3, FUtil.listToString(player.getNotes()));
statement.setString(4, player.getTag()); statement.setString(4, player.getTag());
@ -295,7 +300,7 @@ public class SQLite extends FreedomService
} }
} }
public ResultSet getAdminByName(String name) /*public ResultSet getAdminByName(String name)
{ {
try try
{ {
@ -312,9 +317,28 @@ public class SQLite extends FreedomService
} }
return null; return null;
}*/
public ResultSet getAdminByUUID(UUID uuid)
{
try
{
ResultSet resultSet = connection.createStatement().executeQuery(MessageFormat.format("SELECT * FROM admins WHERE uuid=''{0}''", uuid.toString()));
if (resultSet.next())
{
return resultSet;
}
}
catch (SQLException e)
{
FLog.severe("Failed to get admin by name:");
FLog.severe(e);
} }
public ResultSet getPlayerByName(String name) return null;
}
/*public ResultSet getPlayerByName(String name)
{ {
try try
{ {
@ -332,6 +356,8 @@ public class SQLite extends FreedomService
return null; return null;
} }
*/
public ResultSet getMasterBuilders() public ResultSet getMasterBuilders()
{ {
@ -348,6 +374,25 @@ public class SQLite extends FreedomService
return null; return null;
} }
public ResultSet getPlayerByUUID(UUID uuid)
{
try
{
ResultSet resultSet = connection.createStatement().executeQuery(MessageFormat.format("SELECT * FROM players WHERE uuid LIKE ''%{0}%''", uuid.toString()));
if (resultSet.next())
{
return resultSet;
}
}
catch (SQLException e)
{
FLog.severe("Failed to get player by uuid:");
FLog.severe(e);
}
return null;
}
public ResultSet getPlayerByIp(String ip) public ResultSet getPlayerByIp(String ip)
{ {
try try
@ -371,7 +416,7 @@ public class SQLite extends FreedomService
{ {
try try
{ {
connection.createStatement().executeUpdate(MessageFormat.format("DELETE FROM admins where name=''{0}''", admin.getName())); connection.createStatement().executeUpdate(MessageFormat.format("DELETE FROM admins where uuid=''{0}''", admin.getUniqueId()));
} }
catch (SQLException e) catch (SQLException e)
{ {

View File

@ -1,44 +1,18 @@
package me.totalfreedom.totalfreedommod.util; package me.totalfreedom.totalfreedommod.util;
import java.io.BufferedReader; import com.google.common.collect.Maps;
import java.io.DataOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.reflect.Field;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.SplittableRandom;
import java.util.TimeZone;
import java.util.UUID;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import me.totalfreedom.totalfreedommod.TotalFreedomMod; import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.config.ConfigEntry; import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
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.bukkit.Bukkit; import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.bukkit.ChatColor; import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.bukkit.Color; import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
import org.bukkit.Location; import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.bukkit.Material; import org.apache.hc.core5.http.HttpResponse;
import org.bukkit.OfflinePlayer; import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.bukkit.*;
import org.bukkit.command.CommandSender; import org.bukkit.command.CommandSender;
import org.bukkit.entity.Entity; import org.bukkit.entity.Entity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
@ -47,12 +21,28 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask; import org.bukkit.scheduler.BukkitTask;
import org.json.JSONObject;
import org.json.simple.JSONArray; import org.json.simple.JSONArray;
import java.io.*;
import java.lang.reflect.Field;
import java.net.HttpURLConnection;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import static org.bukkit.Bukkit.getServer; import static org.bukkit.Bukkit.getServer;
public class FUtil public class FUtil
{ {
private static final Map<UUID, String> NAME_CACHE = Maps.newHashMap();
public static final String SAVED_FLAGS_FILENAME = "savedflags.dat"; public static final String SAVED_FLAGS_FILENAME = "savedflags.dat";
/* See https://github.com/TotalFreedom/License - None of the listed names may be removed. /* See https://github.com/TotalFreedom/License - None of the listed names may be removed.
Leaving this list here for anyone running TFM on a cracked server: Leaving this list here for anyone running TFM on a cracked server:
@ -73,10 +63,10 @@ public class FUtil
"38ea7c82-7bdc-4f48-b7fd-0e93fc26813d", // AwesomePinch "38ea7c82-7bdc-4f48-b7fd-0e93fc26813d", // AwesomePinch
"ba5aafba-9012-418f-9819-a7020d591068", // TFTWPhoenix "ba5aafba-9012-418f-9819-a7020d591068", // TFTWPhoenix
"d6dd9740-40db-45f5-ab16-4ee16a633009", // Abhi "d6dd9740-40db-45f5-ab16-4ee16a633009", // Abhi
"2e06e049-24c8-42e4-8bcf-d35372af31e6", // unsuperiordev "2e06e049-24c8-42e4-8bcf-d35372af31e6", // NotInSync
"f97c0d7b-6413-4558-a409-88f09a8f9adb" // videogamesm12 "f97c0d7b-6413-4558-a409-88f09a8f9adb" // videogamesm12
); );
public static final List<String> DEVELOPER_NAMES = Arrays.asList("Madgeek1450", "Prozza", "WickedGamingUK", "Wild1145", "aggelosQQ", "scripthead", "CoolJWB", "elmon_", "speednt", "SupItsDillon", "Paldiu", "AwesomePinch", "TFTWPhoenix","abhithedev", "unsuperiordev", "videogamesm12"); public static final List<String> DEVELOPER_NAMES = Arrays.asList("Madgeek1450", "Prozza", "WickedGamingUK", "Wild1145", "aggelosQQ", "scripthead", "CoolJWB", "elmon_", "speednt", "SupItsDillon", "Paldiu", "AwesomePinch", "TFTWPhoenix", "abhithedev", "NotInSync", "videogamesm12");
public static final Map<String, ChatColor> CHAT_COLOR_NAMES = new HashMap<>(); public static final Map<String, ChatColor> CHAT_COLOR_NAMES = new HashMap<>();
public static final List<ChatColor> CHAT_COLOR_POOL = Arrays.asList( public static final List<ChatColor> CHAT_COLOR_POOL = Arrays.asList(
ChatColor.DARK_RED, ChatColor.DARK_RED,
@ -393,7 +383,8 @@ public class FUtil
} }
} }
private static final List<String> regxList = new ArrayList<String>(){{ private static final List<String> regxList = new ArrayList<String>()
{{
add("y"); add("y");
add("mo"); add("mo");
add("w"); add("w");
@ -403,11 +394,13 @@ public class FUtil
add("s"); add("s");
}}; }};
private static long a(String parse) { private static long a(String parse)
{
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
regxList.forEach(obj -> { regxList.forEach(obj -> {
if (parse.endsWith(obj)) { if (parse.endsWith(obj))
{
sb.append(parse.split(obj)[0]); sb.append(parse.split(obj)[0]);
} }
}); });
@ -415,7 +408,8 @@ public class FUtil
return Long.parseLong(sb.toString()); return Long.parseLong(sb.toString());
} }
private static TimeUnit verify(String arg) { private static TimeUnit verify(String arg)
{
TimeUnit unit = null; TimeUnit unit = null;
for (String c : regxList) for (String c : regxList)
{ {
@ -461,6 +455,16 @@ public class FUtil
return Date.from(instant); return Date.from(instant);
} }
public static long parseLongOffset(long unix, String... time)
{
Instant instant = Instant.ofEpochMilli(unix);
for (String arg : time)
{
instant = instant.plusSeconds(verify(arg).get() * a(arg));
}
return FUtil.getUnixTime(Date.from(instant));
}
public static String playerListToNames(Set<OfflinePlayer> players) public static String playerListToNames(Set<OfflinePlayer> players)
{ {
List<String> names = new ArrayList<>(); List<String> names = new ArrayList<>();
@ -838,8 +842,22 @@ public class FUtil
}.runTaskLater(TotalFreedomMod.getPlugin(), delay); }.runTaskLater(TotalFreedomMod.getPlugin(), delay);
} }
public static int getFakePlayerCount()
{
int i = TotalFreedomMod.getPlugin().al.vanished.size();
for (String name : TotalFreedomMod.getPlugin().al.vanished)
{
if (Bukkit.getPlayer(name) == null)
{
i--;
}
}
return getServer().getOnlinePlayers().size() - i;
}
public static class PaginationList<T> extends ArrayList<T> public static class PaginationList<T> extends ArrayList<T>
{ {
private final int epp; private final int epp;
public PaginationList(int epp) public PaginationList(int epp)
@ -871,4 +889,52 @@ public class FUtil
return subList(startIndex, endIndex + 1); return subList(startIndex, endIndex + 1);
} }
} }
public static String getNameFromUUID(UUID uuid) {
OfflinePlayer player = Bukkit.getOfflinePlayer(uuid);
if (player.hasPlayedBefore()) return player.getName();
if (NAME_CACHE.containsKey(uuid)) return NAME_CACHE.get(uuid);
CloseableHttpClient client = HttpClients.createDefault();
HttpGet get = new HttpGet("https://api.ashcon.app/mojang/v2/user/" + uuid.toString().replace("-", ""));
try {
CloseableHttpResponse response = client.execute(get);
String json = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
JSONObject obj = new JSONObject(json);
response.close();
if (response.getCode() == 200) {
String name = NAME_CACHE.put(uuid, obj.getString("username"));
Bukkit.getScheduler().runTaskLaterAsynchronously(TotalFreedomMod.getPlugin(), () -> NAME_CACHE.remove(uuid), 20 * 60L * 5); // remove the uuid from cache as names can be changed
return name;
}
client.close();
} catch (IOException | org.apache.hc.core5.http.ParseException e) {
e.printStackTrace();
}
return "";
}
public static UUID getUUIDFromName(String name) {
//get offline player is deprecated so we'll just see if they're online to get their uuid
Player player = Bukkit.getPlayer(name);
if (player != null) return player.getUniqueId();
CloseableHttpClient client = HttpClients.createDefault();
HttpGet get = new HttpGet("https://api.ashcon.app/mojang/v2/user/" + name);
try {
CloseableHttpResponse response = client.execute(get);
String json = EntityUtils.toString(response.getEntity(), StandardCharsets.UTF_8);
JSONObject obj = new JSONObject(json);
response.close();
if (response.getCode() == 200) {
return UUID.fromString(obj.getString("uuid"));
}
client.close();
} catch (IOException | org.apache.hc.core5.http.ParseException e) {
e.printStackTrace();
}
return null;
}
} }

View File

@ -1,102 +0,0 @@
package me.totalfreedom.totalfreedommod.world;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.WorldCreator;
import org.bukkit.WorldType;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.entity.Player;
public final class HubWorld extends CustomWorld
{
private static final String GENERATION_PARAMETERS = ConfigEntry.FLATLANDS_GENERATE_PARAMS.getString();
//
private WorldWeather weather = WorldWeather.OFF;
private WorldTime time = WorldTime.INHERIT;
public HubWorld()
{
super("hubworld");
}
@Override
public void sendToWorld(Player player)
{
super.sendToWorld(player);
}
// TODO: Replace instances of org.bukkit.Sign with a non deprecated version. This might include more boilerplate.
@SuppressWarnings("deprecation")
@Override
protected World generateWorld()
{
final WorldCreator worldCreator = new WorldCreator(getName());
worldCreator.generateStructures(false);
worldCreator.type(WorldType.NORMAL);
worldCreator.environment(World.Environment.NORMAL);
worldCreator.generator(new CleanroomChunkGenerator(GENERATION_PARAMETERS));
final World world = server.createWorld(worldCreator);
assert world != null;
world.setSpawnFlags(false, false);
world.setSpawnLocation(0, 50, 0);
final Block welcomeSignBlock = world.getBlockAt(0, 50, 0);
welcomeSignBlock.setType(Material.OAK_SIGN);
org.bukkit.block.Sign welcomeSign = (org.bukkit.block.Sign)welcomeSignBlock.getState();
org.bukkit.material.Sign signData = (org.bukkit.material.Sign)welcomeSign.getData();
signData.setFacingDirection(BlockFace.NORTH);
welcomeSign.setLine(0, ChatColor.GREEN + "Hub World");
welcomeSign.setLine(1, ChatColor.DARK_GRAY + "---");
welcomeSign.setLine(2, ChatColor.YELLOW + "Spawn Point");
welcomeSign.setLine(3, ChatColor.DARK_GRAY + "---");
welcomeSign.update();
plugin.gr.commitGameRules();
return world;
}
public WorldWeather getWeatherMode()
{
return weather;
}
public void setWeatherMode(final WorldWeather weatherMode)
{
this.weather = weatherMode;
try
{
weatherMode.setWorldToWeather(getWorld());
}
catch (Exception ignored)
{
}
}
public WorldTime getTimeOfDay()
{
return time;
}
public void setTimeOfDay(final WorldTime timeOfDay)
{
this.time = timeOfDay;
try
{
timeOfDay.setWorldToTime(getWorld());
}
catch (Exception ignored)
{
}
}
}

View File

@ -20,14 +20,12 @@ public class WorldManager extends FreedomService
public Flatlands flatlands; public Flatlands flatlands;
public AdminWorld adminworld; public AdminWorld adminworld;
public MasterBuilderWorld masterBuilderWorld; public MasterBuilderWorld masterBuilderWorld;
public HubWorld hubworld;
public WorldManager() public WorldManager()
{ {
this.flatlands = new Flatlands(); this.flatlands = new Flatlands();
this.adminworld = new AdminWorld(); this.adminworld = new AdminWorld();
this.masterBuilderWorld = new MasterBuilderWorld(); this.masterBuilderWorld = new MasterBuilderWorld();
this.hubworld = new HubWorld();
} }
@Override @Override
@ -36,7 +34,6 @@ public class WorldManager extends FreedomService
flatlands.getWorld(); flatlands.getWorld();
adminworld.getWorld(); adminworld.getWorld();
masterBuilderWorld.getWorld(); masterBuilderWorld.getWorld();
hubworld.getWorld();
// Disable weather // Disable weather
if (ConfigEntry.DISABLE_WEATHER.getBoolean()) if (ConfigEntry.DISABLE_WEATHER.getBoolean())
@ -57,7 +54,6 @@ public class WorldManager extends FreedomService
flatlands.getWorld().save(); flatlands.getWorld().save();
adminworld.getWorld().save(); adminworld.getWorld().save();
masterBuilderWorld.getWorld().save(); masterBuilderWorld.getWorld().save();
hubworld.getWorld().save();
} }
@EventHandler(priority = EventPriority.HIGH) @EventHandler(priority = EventPriority.HIGH)
@ -73,10 +69,6 @@ public class WorldManager extends FreedomService
{ {
return; return;
} }
else if (event.getWorld().equals(hubworld.getWorld()) && hubworld.getWeatherMode() != WorldWeather.OFF)
{
return;
}
} }
catch (Exception ignored) catch (Exception ignored)
{ {
@ -101,10 +93,6 @@ public class WorldManager extends FreedomService
{ {
return; return;
} }
else if (event.getWorld().equals(hubworld.getWorld()) && hubworld.getWeatherMode() != WorldWeather.OFF)
{
return;
}
} }
catch (Exception ignored) catch (Exception ignored)
{ {

View File

@ -52,9 +52,9 @@ public class WorldRestrictions extends FreedomService
public boolean doRestrict(Player player) public boolean doRestrict(Player player)
{ {
if (!plugin.pl.getData(player).isMasterBuilder() && plugin.pl.canManageMasterBuilders(player.getName())) if (!plugin.pl.getData(player).isMasterBuilder() && plugin.pl.canManageMasterBuilders(player.getUniqueId()))
{ {
if (player.getWorld().equals(plugin.wm.masterBuilderWorld.getWorld()) || player.getWorld().equals(plugin.wm.hubworld.getWorld())) if (player.getWorld().equals(plugin.wm.masterBuilderWorld.getWorld()))
{ {
return true; return true;
} }

View File

@ -78,6 +78,8 @@ discord:
senior_admin_role_id: '' senior_admin_role_id: ''
# Developer role ID # Developer role ID
developer_role_id: '' developer_role_id: ''
# Assistant Executive role ID
assistant_executive_role_id: ''
# Executive Admin role ID # Executive Admin role ID
executive_role_id: '' executive_role_id: ''
# Owner role ID # Owner role ID
@ -228,9 +230,9 @@ allow:
auto_clear: false auto_clear: false
gravity: false gravity: false
# Blocked commands: blocked_commands:
# #
# How blocked commands work: # How globally blocked commands work:
# All sections described below are delimited by colon characters. # All sections described below are delimited by colon characters.
# Make sure that you block a command by its main command name, not an alias # Make sure that you block a command by its main command name, not an alias
# as all aliases are blocked by default. Commands are case-insensitive. # as all aliases are blocked by default. Commands are case-insensitive.
@ -260,7 +262,7 @@ allow:
# - 's:a:/stop' # - 's:a:/stop'
# - 'n:b:/ban:_' # - 'n:b:/ban:_'
# #
blocked_commands: global:
# CoreProtect Blocked and shows as an unknown command... # CoreProtect Blocked and shows as an unknown command...
- 'a:u:/co:_' - 'a:u:/co:_'
- 'n:u:/co purge:_' - 'n:u:/co purge:_'
@ -268,6 +270,7 @@ blocked_commands:
- 'n:u:/coreprotect purge:_' - 'n:u:/coreprotect purge:_'
- 'a:u:/core:_' - 'a:u:/core:_'
- 'n:u:/core purge:_' - 'n:u:/core purge:_'
# Disabled commands # Disabled commands
- 'n:b:/essentials:_' - 'n:b:/essentials:_'
- 'n:b:/time:Server-side time changing is disabled. Please use /ptime to set your own personal time.' - 'n:b:/time:Server-side time changing is disabled. Please use /ptime to set your own personal time.'
@ -290,7 +293,6 @@ blocked_commands:
- 'n:b:/bungeeguard:_' - 'n:b:/bungeeguard:_'
- 'n:b:/buycraft:_' - 'n:b:/buycraft:_'
- 'n:b:/spigot reload:_' - 'n:b:/spigot reload:_'
# - 'n:b:/setjail:_'
- 'n:b:/mail sendall:Sending mail to all players is not allowed.' - 'n:b:/mail sendall:Sending mail to all players is not allowed.'
- 'n:b:/entitydata:_' - 'n:b:/entitydata:_'
- 'n:b:/skins:_' - 'n:b:/skins:_'
@ -309,7 +311,6 @@ blocked_commands:
- 'n:b:/d minecart_command:_' - 'n:b:/d minecart_command:_'
- 'n:b:/loot:_' - 'n:b:/loot:_'
- 'n:b:/plan:_' - 'n:b:/plan:_'
# - 'n:b:/explosivearrows:&cDisabled until further notice'
- 'n:b://material:_' - 'n:b://material:_'
- 'n:b://mat:_' - 'n:b://mat:_'
- 'n:b:/mat:_' - 'n:b:/mat:_'
@ -319,7 +320,6 @@ blocked_commands:
- 'n:b:/data:_' - 'n:b:/data:_'
- 'n:b:/datapack:_' - 'n:b:/datapack:_'
- 'n:b://regen:_' - 'n:b://regen:_'
- 'n:b:/onlinemode:&cThis breaks UUIDs.'
- 'n:b:/execute:_' - 'n:b:/execute:_'
- 'n:b:/killall:_' - 'n:b:/killall:_'
- 'n:b:/createdisguise:_' - 'n:b:/createdisguise:_'
@ -403,14 +403,12 @@ blocked_commands:
- 'a:b:/bossbar:_' - 'a:b:/bossbar:_'
- 'a:b:/team:_' - 'a:b:/team:_'
- 'a:b:/spawner:_' - 'a:b:/spawner:_'
# - 'a:b:/getpos:_'
- 's:b:/istack:_' - 's:b:/istack:_'
- 'a:b:/getloc:_' - 'a:b:/getloc:_'
- 'a:b:/holo:_' - 'a:b:/holo:_'
- 'a:b:/hd:_' - 'a:b:/hd:_'
- 'a:b:/hologram:_' - 'a:b:/hologram:_'
- 'a:b:/holograms:_' - 'a:b:/holograms:_'
# - 'a:b:/whois:&cpeople like aurulim ruined the usage of this command, stop tp bypassing' # Blocking this is ridiculous. Instead of being lazy and just blocking whois, how about you disable the part where it reveals people's coords, like you did with disabling IPs?
- 's:b:/awe toggle:_' - 's:b:/awe toggle:_'
- 's:b:/tellraw:_' - 's:b:/tellraw:_'
- 's:b://awe toggle:_' - 's:b://awe toggle:_'
@ -436,6 +434,39 @@ blocked_commands:
- 's:b:/viaver:_' - 's:b:/viaver:_'
- 's:b:/viaversion:_' - 's:b:/viaversion:_'
- 's:b:/spark:_' - 's:b:/spark:_'
- 's:b://g:_'
# Commands that cannot be used by muted players
muted:
- say
- me
- msg
- tell
- reply
- mail
# Commands that cannot be used with /wildcard
wildcard:
- wildcard
- gtfo
- doom
- slconfig
- smite
# Words that cannot be used in tags
forbidden_words:
- admin
- owner
- moderator
- developer
- console
- dev
- staff
- mod
- sra
- tca
- sta
- sa
# Automatically wipe dropped objects # Automatically wipe dropped objects
auto_wipe: true auto_wipe: true

View File

@ -1,16 +1,50 @@
# #
# TotalFreedomMod Permissions # TotalFreedomMod 5.5 Permissions
# by ZeroEpoch1969 # by ZeroEpoch1969
# #
# Note that every group inherits the previous groups' permissions # Note that every group inherits the previous groups' permissions
# Meaning Senior Admins have the permissions of Operators and Admins, and etc # Meaning Telnet Admins have the permissions of Operators and Super Admins, and etc
# This is used to remove all permission begging with the root node # This is used to remove all permission begging with the root node
# This is useful when a plugin gives all permissions to a player because they are opped # This is useful when a plugin gives all permissions to a player because they are opped
remove: remove:
- "voxelsniper" - "voxelsniper"
- "bending" - "bending.admin"
- "bending.ability.Cleanse"
- "worldedit.brush.apply"
- "essentials.near.exclude"
- "plots.admin"
- "plots.debugroadregen"
- "plots.debugclaimtest"
- "plots.debugpaste"
- "plots.debugallowunsafe"
- "plots.debugloadtest"
- "plots.debugsavetest"
- "plots.cluster"
#Crackshot
- "crackshot.bypass.all"
#NetworkManager
- "networkmanager.*"
- "networkmanager.notify.joinbanned"
- "networkmanager.notify.*"
- "networkmanager.announce.global"
- "networkmanager.announce"
- "networkmanager.chatlock"
- "networkmanager.clearchat.bypass"
- "networkmanager.clearchat.*"
- "networkmanager.notify.ticket.new"
- "networkmanager.lookup"
- "networkmanager.maintenance.*"
- "networkmanager.permissions"
- "networkmanager.reports"
- "networkmanager.tickets"
- "networkmanager.chatlock.bypass"
- "networkmanager.anticaps.bypass"
- "networkmanager.antispam.bypass"
- "networkmanager.commandblocker.bypass"
- "networkmanager.tags.*"
# Operator permission nodes # Operator permission nodes
operators: operators:
@ -36,7 +70,10 @@ operators:
- "worldedit.removebelow" - "worldedit.removebelow"
- "worldedit.removenear" - "worldedit.removenear"
- "worldedit.replacenear" - "worldedit.replacenear"
- "worldedit.brush.*"
- "worldedit.global-mask"
- "worldedit.fill"
- "worldedit.fill.recursive"
# LibsDisguises # LibsDisguises
- "libsdisguises.noactionbar" - "libsdisguises.noactionbar"
@ -46,6 +83,66 @@ operators:
- "worldguard.region.removemember.own.*" - "worldguard.region.removemember.own.*"
- "worldguard.region.info.*" - "worldguard.region.info.*"
# Bending
- "bending.command.add"
- "bending.command.bind"
- "bending.command.check"
- "bending.command.choose"
- "bending.command.rechoose"
- "bending.command.clear"
- "bending.command.copy"
- "bending.command.display"
- "bending.command.help"
- "bending.command.invincible"
- "bending.command.preset"
- "bending.command.preset.list"
- "bending.command.preset.create"
- "bending.command.preset.delete"
- "bending.command.preset.bind"
- "bending.command.preset.bind.assign"
- "bending.command.preset.bind.external"
- "bending.command.toggle"
- "bending.command.version"
- "bending.command.who"
- "bending.earth"
- "bending.air"
- "bending.fire"
- "bending.water"
- "bending.water.bloodbending.anytime"
- "bending.ability.AvatarState"
- "bending.command.add.chi"
- "bending.command.choose.chi"
- "bending.ability.Paralyze"
- "bending.ability.RapidPunch"
- "bending.ability.Smokescreen"
- "bending.ability.WarriorStance"
- "bending.ability.AcrobatStance"
- "bending.ability.QuickStrike"
- "bending.ability.SwiftKick"
- "bending.ability.ChiCombo"
- "bending.chi.passive"
- "bending.ability.MetalClips.throw"
- "bending.ability.AirCombo"
- "bending.ability.Flight"
- "bending.ability.WaterCombo"
- "bending.ability.EarthCombo"
- "bending.ability.FireCombo"
- "bending.ability.ChiCombo"
- "bending.air.passive"
- "bending.chi.passive"
- "bending.earth.passive"
- "bending.fire.passive"
- "bending.water.passive"
# NetworkManager
- "networkmanager.chatlog"
- "networkmanager.find"
- "networkmanager.gtps"
- "networkmanager.lookup"
- "networkmanager.slashserver.*"
- "networkmanager.notification.join"
- "networkmanager.party.nolimit"
- "networkmanager.tabcompletechat"
# Master Builder permission nodes # Master Builder permission nodes
master_builders: master_builders:
- "worldedit.tool.*" - "worldedit.tool.*"
@ -62,10 +159,22 @@ master_builders:
# Admin permission nodes # Admin permission nodes
admins: admins:
- "coreprotect.*"
- "worldedit.*" - "worldedit.*"
- "worldguard.*" - "worldguard.*"
- "bending.*" - "bending.admin.remove"
- "bending.command.toggle.all"
- "bending.admin.toggle"
- "bending.command.reload"
- "plots.cluster"
- "networkmanager.adminchat"
- "networkmanager.announce.server"
- "networkmanager.socialspy"
- "networkmanager.fullproxy.bypass"
- "networkmanager.lookup.ip"
#Crackshot
- "crackshot.bypass.all"
# Senior Admin permission nodes # Senior Admin permission nodes
senior_admins: [] senior_admins:
- "bending.admin.permaremove"
- "bending.ability.Cleanse"