Compare commits

..

45 Commits

Author SHA1 Message Date
fb914734ce Proof of concept implementation
Implemented based on what https://forum.totalfreedom.me/d/2882-town-hall-thingy-results says.
2021-10-03 08:26:22 -06:00
a598c933ec Merge pull request #151 from AtlasMediaGroup/FS-421
Two fixes (FS-421)
2021-10-03 06:52:45 -06:00
936f0b621e Stupid simple fix
Fixes an oopsie I made and an oopsie someone else made which broke the entire plugin.
2021-10-03 06:45:02 -06:00
180cd81132 Bump junit-jupiter from 5.7.2 to 5.8.0 (#139)
Bumps [junit-jupiter](https://github.com/junit-team/junit5) from 5.7.2 to 5.8.0.
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.7.2...r5.8.0)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-09-13 09:58:54 +01:00
213a43380e Bump git-commit-id-plugin from 4.0.2 to 4.9.10 (#113)
Bumps git-commit-id-plugin from 4.0.2 to 4.9.10.

---
updated-dependencies:
- dependency-name: pl.project13.maven:git-commit-id-plugin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-09-12 12:13:56 +01:00
8a31b4c5c0 Bump javassist from 3.27.0-GA to 3.28.0-GA (#110)
Bumps [javassist](https://github.com/jboss-javassist/javassist) from 3.27.0-GA to 3.28.0-GA.
- [Release notes](https://github.com/jboss-javassist/javassist/releases)
- [Commits](https://github.com/jboss-javassist/javassist/commits)

---
updated-dependencies:
- dependency-name: org.javassist:javassist
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-09-12 11:33:52 +01:00
0e12f5e792 Bump commons-lang3 from 3.11 to 3.12.0 (#111)
Bumps commons-lang3 from 3.11 to 3.12.0.

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-lang3
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-09-12 09:09:28 +01:00
aebe1acec2 Merge pull request #136 from AtlasMediaGroup/multiple-birds-one-stone
Multiple fixes, one commit
2021-09-12 01:57:32 -06:00
938b3aa630 Merge branch 'development' into multiple-birds-one-stone 2021-09-11 20:53:16 -06:00
6772333eb4 Bump junit-jupiter from 5.4.2 to 5.7.2 (#103)
Bumps [junit-jupiter](https://github.com/junit-team/junit5) from 5.4.2 to 5.7.2.
- [Release notes](https://github.com/junit-team/junit5/releases)
- [Commits](https://github.com/junit-team/junit5/compare/r5.4.2...r5.7.2)

---
updated-dependencies:
- dependency-name: org.junit.jupiter:junit-jupiter
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-09-12 00:10:47 +01:00
0204961834 Bump commons-io from 2.8.0 to 2.11.0 (#117)
Bumps commons-io from 2.8.0 to 2.11.0.

---
updated-dependencies:
- dependency-name: commons-io:commons-io
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-09-11 23:53:41 +01:00
2f332a8c42 Bump annotations from 20.1.0 to 22.0.0 (#104)
Bumps [annotations](https://github.com/JetBrains/java-annotations) from 20.1.0 to 22.0.0.
- [Release notes](https://github.com/JetBrains/java-annotations/releases)
- [Changelog](https://github.com/JetBrains/java-annotations/blob/master/CHANGELOG.md)
- [Commits](https://github.com/JetBrains/java-annotations/compare/20.1.0...22.0.0)

---
updated-dependencies:
- dependency-name: org.jetbrains:annotations
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-09-11 18:48:33 +01:00
e288668c92 Bump maven-antrun-plugin from 1.8 to 3.0.0 (#102)
Bumps [maven-antrun-plugin](https://github.com/apache/maven-antrun-plugin) from 1.8 to 3.0.0.
- [Release notes](https://github.com/apache/maven-antrun-plugin/releases)
- [Commits](https://github.com/apache/maven-antrun-plugin/compare/maven-antrun-plugin-1.8...maven-antrun-plugin-3.0.0)

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

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-09-11 18:42:31 +01:00
e50101df43 Merge branch 'development' into multiple-birds-one-stone 2021-09-11 15:24:52 +01:00
0a9b95bfce Move to new ATLAS Nexus (#138)
* Move to new ATLAS Nexus

Turns out jFrog is super expensive and 10GB of Bandwidth doesn't go far, this should make things a lot better :)

* Update pom.xml

* Update pom.xml
2021-09-11 01:19:08 +01:00
f00f075551 Merge branch 'development' into multiple-birds-one-stone 2021-09-06 14:38:42 -06:00
44ff621d73 Bump bstats-bukkit from 1.8 to 2.2.1 (#99)
Bumps [bstats-bukkit](https://github.com/Bastian/bStats-Metrics) from 1.8 to 2.2.1.
- [Release notes](https://github.com/Bastian/bStats-Metrics/releases)
- [Commits](https://github.com/Bastian/bStats-Metrics/commits/v2.2.1)

---
updated-dependencies:
- dependency-name: org.bstats:bstats-bukkit
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ryan <Wild1145@users.noreply.github.com>

Resolves FS-419
2021-09-06 20:21:49 +01:00
032e54e2d4 Multiple birds, one commit
Here's a list of things I've fixed/mitigated:
- Range bans in ban-related commands (FS-209)
- Bug in /tempban where the duration in the broadcast is always wrong
- Over-complicated handling of /tempban durations (instead of trying to process them and silently fail, it'll flat out say that an invalid duration is well, invalid)
- Inconsistent "player not found" messages in banning commands
- (Mitigates) weird issue with case-sensitive usernames in banning commands when the server has restarted since a player last joined
- (Mitigates) banned IPs being inaccurate when a player was banned offline whilst containing multiple IPs in their playerdata
- Redoing how MovementValidator handled positive and negative infinity exploit items, completely removing the need for Mojangson in the first place and allowing the plugin to run without Essentials once more in the process (related to FS-406)

Here is what I've done in addition:
- Merged /tban and /noob into /tempban, which now bans for 5 minutes by default (FS-205)
2021-09-06 04:44:39 -06:00
54cb0cfac4 FS-409 (#124)
Co-authored-by: Ryan <Wild1145@users.noreply.github.com>
2021-09-05 14:51:43 +01:00
23caa4e853 Dependency Fix & Improvements (#132)
* Upgrade Test

Going to see if switching to the new repo that went live 3 days ago and updating TFM to pull the latest version of Essentials is going to help things here. TFM is building locally so I haven't a fucking scooby doo why Github can't run the build because I've even tried dropping the M2 folder...

* Let's try again

Utter bullshit so far.

* Apparently we don't even use essentials...

No idea where the imports for EssentialsBridge are coming from...

* Various tweaks

Hopefully this might give some more joy, but if not it's removed a command I didn't want anyway and reduced our dependency tree.

I have also switched it to using the ATLAS Artafactory which will serve as an ongoing cache for dependencies and should start to speed up our Github builds as Maven is rubbish with many repo's.
2021-09-04 01:07:04 +01:00
4c3f188bb8 Bump actions/setup-java from 2.2.0 to 2.3.0 (#122)
Bumps [actions/setup-java](https://github.com/actions/setup-java) from 2.2.0 to 2.3.0.
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](https://github.com/actions/setup-java/compare/v2.2.0...v2.3.0)

---
updated-dependencies:
- dependency-name: actions/setup-java
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Ryan <Wild1145@users.noreply.github.com>
2021-08-29 20:08:43 +01:00
f380898bb7 yo remove my name (#123)
Co-authored-by: Ryan <Wild1145@users.noreply.github.com>
2021-08-26 16:22:08 +01:00
464ed85f1b Update java16-maven.yml 2021-08-26 16:18:58 +01:00
7dd235b166 Update java11-maven.yml 2021-08-26 16:18:49 +01:00
f45466ee24 Create java16-maven.yml 2021-08-26 13:01:20 +01:00
d70b7bbec2 Split out Java 11 and Java 16 for faster runs 2021-08-26 13:00:19 +01:00
541c66c3de Bump codacy/codacy-analysis-cli-action from 1.1.0 to 4.0.0 (#101)
Bumps [codacy/codacy-analysis-cli-action](https://github.com/codacy/codacy-analysis-cli-action) from 1.1.0 to 4.0.0.
- [Release notes](https://github.com/codacy/codacy-analysis-cli-action/releases)
- [Commits](https://github.com/codacy/codacy-analysis-cli-action/compare/1.1.0...4.0.0)

---
updated-dependencies:
- dependency-name: codacy/codacy-analysis-cli-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-08-21 21:50:45 +01:00
d901cbaa81 Update pom.xml (#121)
* Update pom.xml

* Fix version from re-upload
2021-08-21 21:25:56 +01:00
538ed7020d Merge branch 'development' of https://github.com/AtlasMediaGroup/TotalFreedomMod into development 2021-08-21 15:36:32 +01:00
18e6ef16be Merge branch 'main' of https://github.com/AtlasMediaGroup/TotalFreedomMod into development 2021-08-21 15:36:26 +01:00
a335a2acf7 Bump maven-checkstyle-plugin from 3.1.1 to 3.1.2 (#114)
Bumps [maven-checkstyle-plugin](https://github.com/apache/maven-checkstyle-plugin) from 3.1.1 to 3.1.2.
- [Release notes](https://github.com/apache/maven-checkstyle-plugin/releases)
- [Commits](https://github.com/apache/maven-checkstyle-plugin/compare/maven-checkstyle-plugin-3.1.1...maven-checkstyle-plugin-3.1.2)

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

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-08-21 15:21:18 +01:00
2eb6cc0036 Correct CoreProtect POM Version (#108)
Co-authored-by: Video <videogamesm12@gmail.com>
2021-08-18 23:45:56 +01:00
5322d8ab64 Fixing Github Actions (#107)
Hopefully this should now let us automatically down-sync from Main to Development
2021-08-18 23:45:34 +01:00
dccc315869 Bump actions/setup-java from 1.4.3 to 2.2.0 (#98)
* Bump actions/setup-java from 1.4.3 to 2.2.0

Bumps [actions/setup-java](https://github.com/actions/setup-java) from 1.4.3 to 2.2.0.
- [Release notes](https://github.com/actions/setup-java/releases)
- [Commits](https://github.com/actions/setup-java/compare/v1.4.3...v2.2.0)

---
updated-dependencies:
- dependency-name: actions/setup-java
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>

* Fix the breaking change the 2.x branch of the action added

There is a breaking change which Dependabot hasn't picked up on which causes this to not play ball. This should resolve said issue.

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Wild1145 <Wild1145@users.noreply.github.com>
2021-08-17 20:50:03 +01:00
7657ae1928 Fix Dependabot to target the right branch and open all PR (#106) 2021-08-17 19:28:14 +01:00
dcaf1ec11a Release 2021.06 (#97)
* Update Command_ride.java

* ok, done (FS-156)

* Fixes FS-137

* grammar fix

* 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.

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

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

* Switched from -c to -ci (#63)

Resolves FS-219

* Added new dependency to allow TFM to compile (#65)

* Name change for Fleek (#64)

* Add //g to blocked commands (#62)

Co-authored-by: Nathan Curran <30569566+Focusvity@users.noreply.github.com>

* Small modification to new TFGuilds (FS-255) (#67)

* Calculate the player count without offline players (FS-247) (#68)

Co-authored-by: Ryan <Wild1145@users.noreply.github.com>

* 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

* Addresses FS-224 (#70)

* 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.

* 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.

* 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.

* Update EntityWiper.java

* FS-27

* FS-26

* FS-25

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

* FS-54

* Shut up Codacy

* FS-201

* Simple fix

* 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

* Order of operations fix

* ez (#77)

* 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

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

* Use 'getPlayer()' to prevent NPE (FS-159) (#87)

Co-authored-by: Ryan <Wild1145@users.noreply.github.com>

* 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`.

* 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

* Let's actually do dependency uplifts (#89)

* Bump release to 2021.06-RC01

* Bump to release version

We're good to go!

Co-authored-by: Video <videogamesm12@gmail.com>
Co-authored-by: Elmon11 <elmon11bussiness@gmail.com>
Co-authored-by: Nathan Curran <30569566+Focusvity@users.noreply.github.com>
Co-authored-by: Paldiu <pawereus@gmail.com>
2021-08-15 01:06:21 +01:00
0582c2e5be Merge pull request #94 from AtlasMediaGroup/FS-381
Enables Lava Damage by default (FS-381)
2021-08-10 22:38:24 -06:00
101987cc17 Merge branch 'development' into FS-381 2021-08-10 17:34:03 +01:00
6874b2ce13 Fixes /setlevel by completely removing it (FS-82) (#95)
To quote Ryan:
> If /exp works (and we've said it has) then the scope of this ticket will be to just go remove the TFM command...

This does exactly that.
2021-08-10 17:33:48 +01:00
3be0ffba4e Merge branch 'development' into FS-381 2021-08-10 17:31:26 +01:00
c8a4382a7b Merge pull request #96 from AtlasMediaGroup/FS-218
Adds functionality for a one-time message to be sent to new players (FS-218)
2021-08-10 07:41:42 -06:00
3f89f3f48e Shut the fuck up Codacy 2021-08-10 06:58:04 -06:00
871acc2eeb Actually, let's make it possible to disable it if needed 2021-08-10 04:13:23 -06:00
a9c9979b1c FS-218 2021-08-10 04:06:41 -06:00
fc3fe871b3 FS-381 2021-08-05 00:43:01 -06:00
50 changed files with 833 additions and 1060 deletions

View File

@ -9,11 +9,15 @@ updates:
# Maintain Maven Updates
- package-ecosystem: "maven" # See documentation for possible values
directory: "/" # Location of package manifests
target-branch: "development"
open-pull-requests-limit: 50
schedule:
interval: "daily"
# Maintain dependencies for GitHub Actions
- package-ecosystem: "github-actions"
directory: "/"
target-branch: "development"
open-pull-requests-limit: 50
schedule:
interval: "daily"

View File

@ -25,7 +25,7 @@ jobs:
# Execute Codacy Analysis CLI and generate a SARIF output with the security issues identified during the analysis
- name: Run Codacy Analysis CLI
uses: codacy/codacy-analysis-cli-action@1.1.0
uses: codacy/codacy-analysis-cli-action@4.0.0
with:
# Check https://github.com/codacy/codacy-analysis-cli#project-token to get your project token from your Codacy repository
# You can also omit the token and run the tools that support default configurations

View File

@ -38,10 +38,11 @@ jobs:
uses: actions/checkout@v2
- name: Setup Java JDK
uses: actions/setup-java@v1.4.3
uses: actions/setup-java@v2.3.0
with:
# The Java version to make available on the path. Takes a whole or semver Java version, or 1.x syntax (e.g. 1.8 => Java 8.x). Early access versions can be specified in the form of e.g. 14-ea, 14.0.0-ea, or 14.0.0-ea.28
java-version: 11
distribution: 'adopt'
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL

View File

@ -30,7 +30,7 @@ jobs:
with:
upstream_repository: AtlasMediaGroup/TotalFreedomMod
upstream_branch: main
target_branch: main
target_branch: development
git_pull_args: --ff-only # optional arg use, defaults to simple 'pull'
# Step 3: Display a message if 'sync' step had new commits (simple test)

21
.github/workflows/java11-maven.yml vendored Normal file
View File

@ -0,0 +1,21 @@
name: Java11-Maven-Build
on: [push]
jobs:
build-java-11:
runs-on: ubuntu-latest
steps:
# Checkout the code
- uses: actions/checkout@v1
# Java 11 Builds
- name: Set up JDK 11
uses: actions/setup-java@v2.3.0
with:
java-version: 11
distribution: 'adopt'
- name: Build with Maven
run: mvn -B package --file pom.xml

21
.github/workflows/java16-maven.yml vendored Normal file
View File

@ -0,0 +1,21 @@
name: Java16-Maven-Build
on: [push]
jobs:
build-java-16:
runs-on: ubuntu-latest
steps:
# Checkout the code
- uses: actions/checkout@v1
# Java 16 Builds
- name: Set up JDK 16
uses: actions/setup-java@v2.3.0
with:
java-version: 16
distribution: 'adopt'
- name: Build with Maven
run: mvn -B package --file pom.xml

View File

@ -1,27 +0,0 @@
name: Maven-Build
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
# Java 11 Builds
- uses: actions/checkout@v1
- name: Set up JDK 11
uses: actions/setup-java@v1
with:
java-version: 11
- name: Build with Maven
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

90
pom.xml
View File

@ -5,7 +5,7 @@
<groupId>me.totalfreedom</groupId>
<artifactId>TotalFreedomMod</artifactId>
<version>2021.05</version>
<version>2021.06</version>
<packaging>jar</packaging>
<properties>
@ -14,8 +14,6 @@
<jar.finalName>${project.name}</jar.finalName>
<timestamp>${maven.build.timestamp}</timestamp>
<maven.build.timestamp.format>MM/dd/yyyy HH:mm</maven.build.timestamp.format>
<tfguilds.version>master-4ec00d977c-1</tfguilds.version>
</properties>
<name>TotalFreedomMod</name>
@ -41,9 +39,10 @@
</scm>
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
<id>atlas-nexus-01-totalfreedom-development</id>
<url>https://nexus-01.core.atlas-media.co.uk/repository/totalfreedom-development/</url>
</repository>
<repository>
@ -103,14 +102,11 @@
</repository>
<repository>
<id>papermc</id>
<url>https://papermc.io/repo/repository/maven-public/</url>
<id>esentialsx-repo</id>
<url>https://repo.essentialsx.net/releases/</url>
</repository>
<repository>
<id>ess-repo</id>
<url>https://ci.ender.zone/plugin/repository/everything/</url>
</repository>
</repositories>
<dependencies>
@ -118,14 +114,14 @@
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.8.0</version>
<version>2.11.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.11</version>
<version>3.12.0</version>
<scope>compile</scope>
</dependency>
@ -136,17 +132,10 @@
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.github.speedxx</groupId>
<artifactId>Mojangson</artifactId>
<version>1957eef8d6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.bstats</groupId>
<artifactId>bstats-bukkit</artifactId>
<version>1.8</version>
<version>2.2.1</version>
<scope>compile</scope>
</dependency>
@ -174,14 +163,7 @@
<dependency>
<groupId>com.sk89q.worldedit</groupId>
<artifactId>worldedit-bukkit</artifactId>
<version>7.3.0-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>net.ess3</groupId>
<artifactId>EssentialsX</artifactId>
<version>2.18.2</version>
<version>7.2.4</version>
<scope>provided</scope>
</dependency>
@ -195,7 +177,7 @@
<dependency>
<groupId>net.coreprotect</groupId>
<artifactId>coreprotect</artifactId>
<version>19.3</version>
<version>19.5</version>
<scope>provided</scope>
</dependency>
@ -221,10 +203,10 @@
</dependency>
<dependency>
<groupId>net.goldtreeservers</groupId>
<artifactId>worldguardextraflags</artifactId>
<version>4.0.0</version>
<scope>provided</scope>
<groupId>net.ess3</groupId>
<artifactId>EssentialsX</artifactId>
<version>2.18.2</version>
<scope>compile</scope>
</dependency>
<dependency>
@ -237,53 +219,43 @@
<dependency>
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.27.0-GA</version>
<version>3.28.0-GA</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.github.AtlasMediaGroup</groupId>
<artifactId>TFGuilds</artifactId>
<version>${tfguilds.version}</version>
<scope>provided</scope>
<groupId>me.totalfreedom</groupId>
<artifactId>tfguilds</artifactId>
<version>2021.06-RC2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.jetbrains</groupId>
<artifactId>annotations</artifactId>
<version>20.1.0</version>
<version>22.0.0</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.1.1</version>
<version>3.1.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.4.2</version>
<version>5.8.0</version>
<scope>compile</scope>
</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>
<build>
@ -313,7 +285,7 @@
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>4.0.2</version>
<version>4.9.10</version>
<executions>
<execution>
<id>get-the-git-infos</id>
@ -354,7 +326,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<version>3.0.0</version>
<executions>
<execution>
<id>default-cli</id>
@ -457,11 +429,9 @@
<include>org.reflections:reflections</include>
<include>org.javassist:javassist</include>
<include>io.papermc:paperlib</include>
<include>com.github.speedxx:Mojangson</include>
<include>org.bstats:bstats-bukkit</include>
<include>org.bstats:bstats-base</include>
<include>org.jetbrains:annotations</include>
<includes>org.apache.httpcomponents.client5:httpclient5</includes>
<includes>org.apache.httpcomponents.core5:httpcore5</includes>
</includes>
</artifactSet>
</configuration>
@ -478,7 +448,7 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-checkstyle-plugin</artifactId>
<version>3.1.1</version>
<version>3.1.2</version>
<configuration>
<configLocation>checkstyle.xml</configLocation>
<failOnViolation>true</failOnViolation>

View File

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

View File

@ -19,6 +19,7 @@ import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
public class LoginProcess extends FreedomService
{
@ -190,6 +191,22 @@ public class LoginProcess extends FreedomService
final FPlayer fPlayer = plugin.pl.getPlayer(player);
final PlayerData playerData = plugin.pl.getData(player);
// Sends a message to the player if they have never joined before (or simply lack player data).
if (!event.getPlayer().hasPlayedBefore() && ConfigEntry.FIRST_JOIN_INFO_ENABLED.getBoolean())
{
new BukkitRunnable()
{
@Override
public void run()
{
for (String line : ConfigEntry.FIRST_JOIN_INFO.getStringList())
{
player.sendMessage(FUtil.colorize(line));
}
}
}.runTaskLater(plugin, 20);
}
player.sendTitle(FUtil.colorize(ConfigEntry.SERVER_LOGIN_TITLE.getString()), FUtil.colorize(ConfigEntry.SERVER_LOGIN_SUBTITLE.getString()), 20, 100, 60);
player.setOp(true);

View File

@ -1,17 +1,16 @@
package me.totalfreedom.totalfreedommod;
import ca.momothereal.mojangson.ex.MojangsonParseException;
import ca.momothereal.mojangson.value.MojangsonCompound;
import ca.momothereal.mojangson.value.MojangsonValue;
import com.google.common.collect.Multimap;
import io.papermc.lib.PaperLib;
import java.util.List;
import java.util.Collection;
import java.util.Map;
import java.util.Objects;
import net.minecraft.server.v1_16_R3.NBTTagCompound;
import net.minecraft.server.v1_16_R3.NBTTagList;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_16_R3.inventory.CraftItemStack;
import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeModifier;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@ -20,6 +19,7 @@ import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
public class MovementValidator extends FreedomService
{
@ -133,55 +133,49 @@ public class MovementValidator extends FreedomService
private Boolean exploitItem(ItemStack item)
{
net.minecraft.server.v1_16_R3.ItemStack nmsStack = CraftItemStack.asNMSCopy(item);
NBTTagList modifiers = getAttributeList(nmsStack);
MojangsonCompound compound = new MojangsonCompound();
boolean foundNegative = false;
boolean foundPositive = false;
try
if (item == null)
{
String mod = modifiers.toString();
String fancy = ("{" + (mod.substring(1, mod.length() - 1).replace("{", "").replace("}", "")) + "}");
compound.read(fancy);
for (String key : compound.keySet())
{
if (Objects.equals(key, "Amount")) //null-safe .equals()
{
@SuppressWarnings("rawtypes")
List<MojangsonValue> values = compound.get(key);
for (MojangsonValue<?> val : values)
{
if (val.getValue().toString().equals("Infinityd"))
{
foundPositive = true;
}
if (val.getValue().toString().equals("-Infinityd"))
{
foundNegative = true;
}
}
}
}
}
catch (MojangsonParseException e)
{
e.printStackTrace();
}
return foundNegative && foundPositive;
return false;
}
ItemMeta meta = item.getItemMeta();
if (meta != null)
{
Multimap<Attribute, AttributeModifier> attributes = meta.getAttributeModifiers();
if (attributes != null)
{
Map<Attribute, Collection<AttributeModifier>> attrMap = attributes.asMap();
private NBTTagList getAttributeList(net.minecraft.server.v1_16_R3.ItemStack stack)
// For every attribute...
for (Attribute attr : attributes.keySet())
{
if (stack.getTag() == null)
// Default values
boolean posInf = false;
boolean negInf = false;
// For every AttributeModifier...
for (AttributeModifier modifier : attrMap.get(attr))
{
stack.setTag(new NBTTagCompound());
// Are they ∞ or -∞?
if (modifier.getAmount() == Double.POSITIVE_INFINITY)
{
posInf = true;
}
NBTTagList attr = stack.getTag().getList("AttributeModifiers", 10);
if (attr == null)
else if (modifier.getAmount() == Double.NEGATIVE_INFINITY)
{
stack.getTag().set("AttributeModifiers", new NBTTagList());
negInf = true;
}
return stack.getTag().getList("AttributeModifiers", 10);
}
// Are both values set as true?
if (posInf && negInf)
{
return true;
}
}
}
}
return false;
}
}

View File

@ -2,8 +2,6 @@ package me.totalfreedom.totalfreedommod;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.util.FLog;
@ -20,7 +18,7 @@ import org.bukkit.event.player.PlayerJoinEvent;
public class Muter extends FreedomService
{
public final List<UUID> MUTED_PLAYERS = new ArrayList<>();
public final List<String> MUTED_PLAYERS = new ArrayList<>();
@Override
public void onStart()
@ -47,7 +45,7 @@ public class Muter extends FreedomService
if (plugin.al.isAdminSync(player))
{
fPlayer.setMuted(false);
MUTED_PLAYERS.remove(player.getUniqueId());
MUTED_PLAYERS.remove(player.getName());
return;
}
@ -107,7 +105,7 @@ public class Muter extends FreedomService
Player player = event.getPlayer();
FPlayer playerdata = plugin.pl.getPlayer(player);
if (MUTED_PLAYERS.contains(player.getUniqueId()))
if (MUTED_PLAYERS.contains(player.getName()))
{
playerdata.setMuted(true);
}

View File

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

View File

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

View File

@ -2,8 +2,11 @@ package me.totalfreedom.totalfreedommod.admin;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import me.totalfreedom.totalfreedommod.LogViewer.LogsRegistrationMode;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.rank.Rank;
@ -18,7 +21,7 @@ public class Admin
private final List<String> ips = new ArrayList<>();
private UUID uuid;
private String name;
private boolean active = true;
private Rank rank = Rank.ADMIN;
private Date lastLogin = new Date();
@ -29,7 +32,7 @@ public class Admin
public Admin(Player player)
{
this.uuid = player.getUniqueId();
this.name = player.getName();
this.ips.add(FUtil.getIp(player));
}
@ -37,7 +40,7 @@ public class Admin
{
try
{
this.uuid = UUID.fromString(resultSet.getString("uuid"));
this.name = resultSet.getString("username");
this.active = resultSet.getBoolean("active");
this.rank = Rank.findRank(resultSet.getString("rank"));
this.ips.clear();
@ -59,7 +62,7 @@ public class Admin
{
final StringBuilder output = new StringBuilder();
output.append("Admin: ").append(uuid.toString()).append("\n")
output.append("Admin: ").append(name).append("\n")
.append("- IPs: ").append(StringUtils.join(ips, ", ")).append("\n")
.append("- Last Login: ").append(FUtil.dateToString(lastLogin)).append("\n")
.append("- Rank: ").append(rank.getName()).append("\n")
@ -75,7 +78,7 @@ public class Admin
{
Map<String, Object> map = new HashMap<String, Object>()
{{
put("uuid", uuid.toString());
put("username", name);
put("active", active);
put("rank", rank.toString());
put("ips", FUtil.listToString(ips));
@ -117,20 +120,20 @@ public class Admin
public boolean isValid()
{
return uuid != null
return name != null
&& rank != null
&& !ips.isEmpty()
&& lastLogin != null;
}
public UUID getUniqueId()
public String getName()
{
return uuid;
return name;
}
public void setUniqueId(UUID uuid)
public void setName(String name)
{
this.uuid = uuid;
this.name = name;
}
public boolean isActive()
@ -165,7 +168,6 @@ public class Admin
}
}
public Rank getRank()
{
return rank;
@ -230,9 +232,4 @@ public class Admin
{
this.pteroID = pteroID;
}
public String getName()
{
return FUtil.getNameFromUUID(uuid);
}
}

View File

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

View File

@ -19,8 +19,6 @@ import org.bukkit.entity.Player;
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");
private final List<String> ips = Lists.newArrayList();
private String username = null;

View File

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

View File

@ -1,8 +1,8 @@
package me.totalfreedom.totalfreedommod.command;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import com.earth2me.essentials.User;
import me.totalfreedom.totalfreedommod.banning.Ban;
import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.punishments.Punishment;
@ -60,28 +60,39 @@ public class Command_ban extends FreedomCommand
}
final String username;
final List<String> ips = new ArrayList<>();
final String ip;
final Player player = getPlayer(args[0]);
if (player == null)
{
final PlayerData entry = plugin.pl.getData(FUtil.getUUIDFromName(args[0]));
// Gets the IP using Essentials data if available
if (plugin.esb.isEnabled() && plugin.esb.getEssentialsUser(args[0]) != null)
{
User essUser = plugin.esb.getEssentialsUser(args[0]);
//
username = essUser.getName();
ip = essUser.getLastLoginAddress();
}
// Last resort - Getting the first result from the username itself
else
{
PlayerData entry = plugin.pl.getData(args[0]);
if (entry == null)
{
msg("Can't find that user. If target is not logged in, make sure that you spelled the name exactly.");
msg(PLAYER_NOT_FOUND);
return true;
}
username = entry.getName();
ips.addAll(entry.getIps());
}
else
{
final PlayerData entry = plugin.pl.getData(player);
username = entry.getName();
ip = entry.getIps().get(0);
}
}
}
else
{
username = player.getName();
//ips.addAll(entry.getIps());/
ips.add(FUtil.getIp(player));
ip = FUtil.getIp(player);
// Deop
player.setOp(false);
@ -126,7 +137,6 @@ public class Command_ban extends FreedomCommand
// Ban player
Ban ban;
if (player != null)
{
ban = Ban.forPlayer(player, sender, null, reason);
@ -135,12 +145,8 @@ public class Command_ban extends FreedomCommand
{
ban = Ban.forPlayerName(username, sender, null, reason);
}
for (String ip : ips)
{
ban.addIp(ip);
ban.addIp(FUtil.getFuzzyIp(ip));
}
plugin.bm.addBan(ban);
@ -154,7 +160,7 @@ public class Command_ban extends FreedomCommand
{
bcast.append(" - Reason: ").append(ChatColor.YELLOW).append(reason);
}
msg(sender, ChatColor.GRAY + username + " has been banned and IP is: " + StringUtils.join(ips, ", "));
msg(sender, ChatColor.GRAY + username + " has been banned and IP is: " + ip);
FUtil.adminAction(sender.getName(), bcast.toString(), true);
}
@ -172,7 +178,7 @@ public class Command_ban extends FreedomCommand
}
// Log ban
plugin.pul.logPunishment(new Punishment(username, ips.get(0), sender.getName(), PunishmentType.BAN, reason));
plugin.pul.logPunishment(new Punishment(username, ip, sender.getName(), PunishmentType.BAN, reason));
return true;
}

View File

@ -1,6 +1,5 @@
package me.totalfreedom.totalfreedommod.command;
import java.util.Objects;
import me.totalfreedom.totalfreedommod.admin.Admin;
import me.totalfreedom.totalfreedommod.banning.Ban;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
@ -43,7 +42,7 @@ public class Command_doom extends FreedomCommand
FUtil.adminAction(sender.getName(), "Casting oblivion over " + player.getName(), true);
FUtil.bcastMsg(player.getName() + " will be completely obliviated!", ChatColor.RED);
final String ip = Objects.requireNonNull(player.getAddress()).getAddress().getHostAddress().trim();
final String ip = FUtil.getIp(player);
// Remove from admin
Admin admin = getAdmin(player);
@ -56,7 +55,7 @@ public class Command_doom extends FreedomCommand
plugin.ptero.updateAccountStatus(admin);
if (plugin.dc.enabled && ConfigEntry.DISCORD_ROLE_SYNC.getBoolean())
{
Discord.syncRoles(admin, plugin.pl.getData(admin.getUniqueId()).getDiscordID());
Discord.syncRoles(admin, plugin.pl.getData(admin.getName()).getDiscordID());
}
}
@ -76,10 +75,7 @@ public class Command_doom extends FreedomCommand
// Ban player
Ban ban = Ban.forPlayer(player, sender);
ban.setReason((reason == null ? "FUCKOFF" : reason));
for (String playerIp : plugin.pl.getData(player).getIps())
{
ban.addIp(playerIp);
}
ban.addIp(ip);
plugin.bm.addBan(ban);
// Set gamemode to survival

View File

@ -1,40 +1,50 @@
package me.totalfreedom.totalfreedommod.command;
import java.util.ArrayList;
import java.util.List;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Eject players that are riding you.", usage = "/<command>")
@CommandParameters(description = "Eject any entities that are riding you.", usage = "/<command>")
public class Command_eject extends FreedomCommand
{
/* Player.getShoulderEntityLeft() and Player.getShoulderEntityRight() are deprecated, however unless
Player.getPassengers() also includes shoulders (which isn't likely, given the official documentation doesn't
state an alternative method to use instead), these methods will continue to be used here. */
@SuppressWarnings("deprecation")
@Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
// Uses the size of the return value of Player.getPassengers() as the starting number of entities ejected
int count = playerSender.getPassengers().size();
List<String> names = new ArrayList<>();
for (Entity entity : playerSender.getPassengers())
// Removes any entities from the sender's shoulders
if (playerSender.getShoulderEntityLeft() != null)
{
names.add(entity.getName());
playerSender.setShoulderEntityLeft(null);
count++;
}
if (playerSender.getShoulderEntityRight() != null)
{
playerSender.setShoulderEntityLeft(null);
count++;
}
if (names.isEmpty())
// Removes anything riding the sender
playerSender.eject();
if (count != 0)
{
msg(count + " entit" + (count == 1 ? "y was" : "ies were") + " ejected.", ChatColor.GREEN);
}
else
{
msg("Nothing was ejected.", ChatColor.GREEN);
return true;
}
msg("Ejecting " + StringUtils.join(names, ", ") + ".", ChatColor.GREEN);
playerSender.eject();
return true;
}
}

View File

@ -0,0 +1,19 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(level = Rank.NON_OP, source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Go to the Floatlands (not to be confused with the Flatlands).", usage = "/<command>", aliases = "void")
public class Command_floatlands extends FreedomCommand
{
@Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
plugin.wm.floatlands.sendToWorld(playerSender);
return true;
}
}

View File

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

View File

@ -1,96 +0,0 @@
package me.totalfreedom.totalfreedommod.command;
import com.sk89q.worldedit.IncompleteRegionException;
import com.sk89q.worldedit.LocalSession;
import com.sk89q.worldedit.regions.Region;
import com.sk89q.worldguard.domains.DefaultDomain;
import com.sk89q.worldguard.protection.flags.Flag;
import com.sk89q.worldguard.protection.flags.Flags;
import com.sk89q.worldguard.protection.flags.RegionGroup;
import com.sk89q.worldguard.protection.flags.StateFlag;
import com.sk89q.worldguard.protection.managers.RegionManager;
import com.sk89q.worldguard.protection.regions.ProtectedCuboidRegion;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import java.util.HashMap;
import java.util.Map;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(level = Rank.ADMIN, source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Make a WorldGuard region for an OP.", usage = "/<command> <playername> <name>", aliases = "mor")
public class Command_makeopregion extends FreedomCommand
{
final Map<Flag<?>, Object> flags = new HashMap<Flag<?>, Object>()
{{
put(Flags.BLOCK_PLACE, StateFlag.State.ALLOW);
put(Flags.BLOCK_BREAK, StateFlag.State.ALLOW);
put(Flags.BUILD, StateFlag.State.ALLOW);
put(Flags.PLACE_VEHICLE, StateFlag.State.ALLOW);
put(Flags.DESTROY_VEHICLE, StateFlag.State.ALLOW);
put(Flags.ENTITY_ITEM_FRAME_DESTROY, StateFlag.State.ALLOW);
put(Flags.ENTITY_PAINTING_DESTROY, StateFlag.State.ALLOW);
put(net.goldtreeservers.worldguardextraflags.flags.Flags.WORLDEDIT, StateFlag.State.ALLOW);
}};
public boolean run(final CommandSender sender, final Player playerSender, final Command cmd, final String commandLabel, final String[] args, final boolean senderIsConsole)
{
if (args.length < 2)
{
return false;
}
final Player player = getPlayer(args[0]);
if (player == null)
{
msg(FreedomCommand.PLAYER_NOT_FOUND);
return true;
}
String name = args[1];
LocalSession session = plugin.web.getWorldEditPlugin().getSession(playerSender);
Region selection;
try
{
selection = session.getSelection(session.getSelectionWorld());
}
catch (IncompleteRegionException e)
{
msg("Please make a WorldEdit selection", ChatColor.RED);
return true;
}
if (selection == null)
{
msg("Please make a WorldEdit selection", ChatColor.RED);
return true;
}
ProtectedRegion region = new ProtectedCuboidRegion(name, selection.getMinimumPoint(), selection.getMaximumPoint());
DefaultDomain owners = new DefaultDomain();
owners.addPlayer(playerSender.getName());
owners.addPlayer(player.getName());
region.setOwners(owners);
region.setFlags(flags);
for (Flag<?> flag : flags.keySet())
{
region.setFlag(flag.getRegionGroupFlag(), RegionGroup.MEMBERS);
}
RegionManager regionManager = plugin.wgb.getRegionManager(playerSender.getWorld());
regionManager.addRegion(region);
msg("Successfully created the region '" + name + "' for " + player.getName(), ChatColor.GREEN);
return true;
}
}

View File

@ -42,7 +42,7 @@ public class Command_manageshop extends FreedomCommand
int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2])));
if (!args[3].equals("all"))
{
PlayerData playerData = plugin.pl.getData(FUtil.getUUIDFromName(args[3]));
PlayerData playerData = plugin.pl.getData(args[3]);
if (playerData == null)
{
msg(PLAYER_NOT_FOUND);
@ -83,7 +83,7 @@ public class Command_manageshop extends FreedomCommand
int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2])));
if (!args[3].equals("all"))
{
PlayerData playerData = plugin.pl.getData(FUtil.getUUIDFromName(args[3]));
PlayerData playerData = plugin.pl.getData(args[3]);
if (playerData == null)
{
msg(PLAYER_NOT_FOUND);
@ -130,7 +130,7 @@ public class Command_manageshop extends FreedomCommand
try
{
int amount = Math.max(0, Math.min(1000000, Integer.parseInt(args[2])));
PlayerData playerData = plugin.pl.getData(FUtil.getUUIDFromName(args[3]));
PlayerData playerData = plugin.pl.getData(args[3]);
if (playerData == null)
{
msg(PLAYER_NOT_FOUND);
@ -180,7 +180,7 @@ public class Command_manageshop extends FreedomCommand
return true;
}
PlayerData playerData = plugin.pl.getData(FUtil.getUUIDFromName(args[3]));
PlayerData playerData = plugin.pl.getData(args[3]);
if (playerData == null)
{
msg(PLAYER_NOT_FOUND);
@ -205,7 +205,7 @@ public class Command_manageshop extends FreedomCommand
return true;
}
PlayerData playerData = plugin.pl.getData(FUtil.getUUIDFromName(args[3]));
PlayerData playerData = plugin.pl.getData(args[3]);
if (playerData == null)
{
msg(PLAYER_NOT_FOUND);

View File

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

View File

@ -170,7 +170,7 @@ public class Command_myadmin extends FreedomCommand
msg("Role syncing is not enabled.", ChatColor.RED);
return true;
}
PlayerData playerData = plugin.pl.getData(target.getUniqueId());
PlayerData playerData = plugin.pl.getData(target.getName());
if (playerData.getDiscordID() == null)
{
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"))
{
Admin admin = plugin.al.getEntryByUUID(FUtil.getUUIDFromName(args[1]));
Admin admin = plugin.al.getEntryByName(args[1]);
if (admin != null)
{
return admin.getIps();

View File

@ -31,7 +31,7 @@ public class Command_notes extends FreedomCommand
final Player player = getPlayer(args[0]);
if (player == null)
{
final PlayerData entry = plugin.pl.getData(FUtil.getUUIDFromName(args[0]));
final PlayerData entry = plugin.pl.getData(args[0]);
if (entry == null)
{
@ -39,7 +39,7 @@ public class Command_notes extends FreedomCommand
return true;
}
playerData = entry;
playerData = plugin.pl.getData(entry.getName());
}
else
{

View File

@ -1,41 +0,0 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Release parrots from your shoulders.", usage = "/<command>", aliases = "removeparrots")
public class Command_releaseparrots extends FreedomCommand
{
@SuppressWarnings("deprecation")
@Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
Entity leftShoulderEntity = playerSender.getShoulderEntityLeft();
Entity rightShoulderEntity = playerSender.getShoulderEntityRight();
if (rightShoulderEntity == null && leftShoulderEntity == null)
{
msg("No parrots were detected on either of your shoulders.");
return true;
}
if (leftShoulderEntity != null && leftShoulderEntity.getType().equals(EntityType.PARROT))
{
playerSender.setShoulderEntityLeft(null);
msg("Removed the parrot on your left shoulder.");
}
if (rightShoulderEntity != null && rightShoulderEntity.getType().equals(EntityType.PARROT))
{
playerSender.setShoulderEntityRight(null);
msg("Removed the parrot on your right shoulder.");
}
return true;
}
}

View File

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

View File

@ -1,49 +0,0 @@
package me.totalfreedom.totalfreedommod.command;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(level = Rank.OP, source = SourceType.ONLY_IN_GAME)
@CommandParameters(description = "Sets your experience level (XP).", usage = "/<command> [level]")
public class Command_setlevel extends FreedomCommand
{
@Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
if (args.length != 1)
{
return false;
}
int new_level;
try
{
new_level = Integer.parseInt(args[0]);
if (new_level < 0)
{
new_level = 0;
}
else if (new_level > 50)
{
new_level = 50;
}
}
catch (NumberFormatException ex)
{
msg("Invalid level.", ChatColor.RED);
return true;
}
playerSender.setLevel(new_level);
msg("Your XP level is now set to " + ChatColor.GOLD + new_level);
return true;
}
}

View File

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

View File

@ -1,143 +0,0 @@
package me.totalfreedom.totalfreedommod.command;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import me.totalfreedom.totalfreedommod.banning.Ban;
import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.punishments.Punishment;
import me.totalfreedom.totalfreedommod.punishments.PunishmentType;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH, blockHostConsole = true)
@CommandParameters(description = "Temporarily bans a player for five minutes.", usage = "/<command> [-q] <username> [reason]", aliases = "noob")
public class Command_tban extends FreedomCommand
{
@Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
if (args.length == 0)
{
return false;
}
boolean quiet = args[0].equalsIgnoreCase("-q");
if (quiet)
{
args = org.apache.commons.lang3.ArrayUtils.subarray(args, 1, args.length);
if (args.length < 1)
{
return false;
}
}
final String username;
final Player player = getPlayer(args[0]);
final PlayerData entry;
if (player == null)
{
entry = plugin.pl.getData(FUtil.getUUIDFromName(args[0]));
if (entry == null)
{
msg("Can't find that user. If target is not logged in, make sure that you spelled the name exactly.");
return true;
}
username = entry.getName();
}
else
{
entry = plugin.pl.getData(player);
username = player.getName();
}
final List<String> ips = new ArrayList<>(entry.getIps());
String reason = null;
if (args.length > 1)
{
reason = StringUtils.join(args, " ", 1, args.length);
}
StringBuilder kick = new StringBuilder()
.append(ChatColor.RED)
.append("You have been temporarily banned for five minutes. Please read totalfreedom.me for more info.");
if (!quiet)
{
// Strike with lightning
if (player != null)
{
final Location targetPos = player.getLocation();
for (int x = -1; x <= 1; x++)
{
for (int z = -1; z <= 1; z++)
{
final Location strike_pos = new Location(targetPos.getWorld(), targetPos.getBlockX() + x, targetPos.getBlockY(), targetPos.getBlockZ() + z);
Objects.requireNonNull(targetPos.getWorld()).strikeLightning(strike_pos);
}
}
// Kill player
player.setHealth(0.0);
if (reason != null)
{
FUtil.adminAction(sender.getName(), "Tempbanning " + player.getName() + " for 5 minutes - Reason: " + reason, true);
kick.append("\n")
.append(ChatColor.RED)
.append("Reason: ")
.append(ChatColor.GOLD)
.append(reason);
}
else
{
FUtil.adminAction(sender.getName(), "Tempbanning " + player.getName() + " for 5 minutes", true);
}
}
}
else
{
if (player != null)
{
if (reason != null)
{
msg("Quietly temporarily banned " + player.getName() + " for 5 minutes.");
kick.append("\n")
.append(ChatColor.RED)
.append("Reason: ")
.append(ChatColor.GOLD)
.append(reason);
}
}
}
// Ban player
Ban ban = Ban.forPlayerName(username, sender, FUtil.parseDateOffset("5m"), reason);
for (String ip : ips)
{
ban.addIp(ip);
}
plugin.bm.addBan(ban);
// Kick player
if (player != null)
{
player.kickPlayer(kick.toString());
}
// Log ban
plugin.pul.logPunishment(new Punishment(username, ips.get(0), sender.getName(), PunishmentType.TEMPBAN, reason));
return true;
}
}

View File

@ -1,10 +1,10 @@
package me.totalfreedom.totalfreedommod.command;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import com.earth2me.essentials.User;
import me.totalfreedom.totalfreedommod.banning.Ban;
import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.punishments.Punishment;
@ -21,7 +21,7 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH)
@CommandParameters(description = "Temporarily ban someone.", usage = "/<command> [-q] <username> [duration] [reason]")
@CommandParameters(description = "Temporarily ban someone.", usage = "/<command> [-q] <username> [duration] [reason]", aliases = "tban,noob")
public class Command_tempban extends FreedomCommand
{
@ -47,49 +47,72 @@ public class Command_tempban extends FreedomCommand
}
final String username;
final List<String> ips = new ArrayList<>();
final String ip;
final Player player = getPlayer(args[0]);
final PlayerData entry;
PlayerData entry;
if (player == null)
{
entry = plugin.pl.getData(FUtil.getUUIDFromName(args[0]));
// Gets the IP using Essentials data if available
if (plugin.esb.isEnabled() && plugin.esb.getEssentialsUser(args[0]) != null)
{
User essUser = plugin.esb.getEssentialsUser(args[0]);
//
username = essUser.getName();
ip = essUser.getLastLoginAddress();
}
// Last resort - Getting the first result from the username itself
else
{
entry = plugin.pl.getData(args[0]);
if (entry == null)
{
msg("Can't find that user. If target is not logged in, make sure that you spelled the name exactly.");
msg(PLAYER_NOT_FOUND);
return true;
}
username = entry.getName();
ips.addAll(entry.getIps());
}
else
{
entry = plugin.pl.getData(player);
username = entry.getName();
ip = entry.getIps().get(0);
}
}
}
else
{
username = player.getName();
ips.add(FUtil.getIp(player));
ip = FUtil.getIp(player);
}
final StringBuilder message = new StringBuilder("Temporarily banned " + username);
Date expires = FUtil.parseDateOffset("30m");
// Default expiration date is 5 minutes
Date expires = FUtil.parseDateOffset("5m");
// Parses what comes after as a duration
if (args.length > 1)
{
try
{
expires = FUtil.parseDateOffset(args[1]);
}
catch (NumberFormatException error)
{
msg("Invalid duration: " + args[1], ChatColor.RED);
return true;
}
}
message.append(" until ").append(date_format.format(expires));
// If a reason appears to exist, set it.
String reason = null;
if (args.length >= 2)
if (args.length > 2)
{
Date parsed_offset = FUtil.parseDateOffset(args[1]);
reason = StringUtils.join(ArrayUtils.subarray(args, parsed_offset == null ? 1 : 2, args.length), " ") + " (" + sender.getName() + ")";
if (parsed_offset != null)
{
expires = parsed_offset;
}
reason = StringUtils.join(ArrayUtils.subarray(args, 2, args.length), " ") + " (" + sender.getName() + ")";
message.append(", Reason: \"").append(reason).append("\"");
}
Ban ban;
if (player != null)
{
ban = Ban.forPlayer(player, sender, expires, reason);
@ -98,11 +121,8 @@ public class Command_tempban extends FreedomCommand
{
ban = Ban.forPlayerName(username, sender, expires, reason);
}
for (String ip : ips)
{
ban.addIp(ip);
}
plugin.bm.addBan(ban);
if (!quiet)
@ -119,6 +139,8 @@ public class Command_tempban extends FreedomCommand
Objects.requireNonNull(targetPos.getWorld()).strikeLightningEffect(strike_pos);
}
}
player.kickPlayer(ban.bakeKickMessage());
}
FUtil.adminAction(sender.getName(), message.toString(), true);
@ -128,19 +150,15 @@ public class Command_tempban extends FreedomCommand
msg("Quietly temporarily banned " + username + ".");
}
if (player != null)
{
player.kickPlayer(ban.bakeKickMessage());
for (Player p : Bukkit.getOnlinePlayers())
{
if (FUtil.getIp(p).equals(FUtil.getIp(player)))
if (FUtil.getIp(p).equals(ip))
{
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));
plugin.pul.logPunishment(new Punishment(username, ip, sender.getName(), PunishmentType.TEMPBAN, reason));
return true;
}
}

View File

@ -1,12 +1,9 @@
package me.totalfreedom.totalfreedommod.command;
import java.util.ArrayList;
import java.util.List;
import me.totalfreedom.totalfreedommod.banning.Ban;
import com.earth2me.essentials.User;
import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.apache.commons.lang.StringUtils;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@ -22,20 +19,33 @@ public class Command_unban extends FreedomCommand
if (args.length > 0)
{
String username;
final PlayerData entry = plugin.pl.getData(FUtil.getUUIDFromName(args[0]));
String ip;
// Gets the IP using Essentials data if available
if (plugin.esb.isEnabled() && plugin.esb.getEssentialsUser(args[0]) != null)
{
User essUser = plugin.esb.getEssentialsUser(args[0]);
//
username = essUser.getName();
ip = essUser.getLastLoginAddress();
}
// Secondary method - using Essentials if available
else
{
final PlayerData entry = plugin.pl.getData(args[0]);
if (entry == null)
{
msg("Can't find that user. If target is not logged in, make sure that you spelled the name exactly.");
msg(PLAYER_NOT_FOUND);
return true;
}
username = entry.getName();
final List<String> ips = new ArrayList<>(entry.getIps());
ip = entry.getIps().get(0);
}
FUtil.adminAction(sender.getName(), "Unbanning " + username, true);
msg(username + " has been unbanned along with the following IPs: " + StringUtils.join(ips, ", "));
plugin.bm.removeBan(plugin.bm.getByUsername(username));
plugin.bm.removeBan(plugin.bm.getByIp(ip));
msg(username + " has been unbanned along with the IP: " + ip);
if (args.length >= 2)
{
@ -45,20 +55,6 @@ public class Command_unban extends FreedomCommand
msg("Restored edits for: " + username);
}
}
for (String ip : ips)
{
Ban ban = plugin.bm.getByIp(ip);
if (ban != null)
{
plugin.bm.removeBan(ban);
}
ban = plugin.bm.getByIp(FUtil.getFuzzyIp(ip));
if (ban != null)
{
plugin.bm.removeBan(ban);
}
}
return true;
}
return false;

View File

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

View File

@ -165,6 +165,8 @@ public enum ConfigEntry
ADMIN_INFO(List.class, "admininfo"),
VOTING_INFO(List.class, "votinginfo"),
MASTER_BUILDER_INFO(List.class, "masterbuilderinfo"),
FIRST_JOIN_INFO(List.class, "first_join_info.text"),
FIRST_JOIN_INFO_ENABLED(Boolean.class, "first_join_info.enabled"),
AUTO_ENTITY_WIPE(Boolean.class, "auto_wipe"),
TOGGLE_CHAT(Boolean.class, "toggle_chat"),
DEVELOPER_MODE(Boolean.class, "developer_mode"),

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -7,8 +7,6 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.MessageFormat;
import java.util.UUID;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.admin.Admin;
import me.totalfreedom.totalfreedommod.banning.Ban;
@ -72,7 +70,6 @@ public class SQLite extends FreedomService
{
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);");
}
catch (SQLException e)
@ -85,7 +82,7 @@ public class SQLite extends FreedomService
{
try
{
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);");
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);");
}
catch (SQLException e)
{
@ -96,7 +93,7 @@ public class SQLite extends FreedomService
{
try
{
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);");
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);");
}
catch (SQLException e)
{
@ -136,8 +133,8 @@ public class SQLite extends FreedomService
{
try
{
Object[] data = {key, admin.getUniqueId().toString()};
PreparedStatement statement = connection.prepareStatement(MessageFormat.format("UPDATE admins SET {0}=? WHERE uuid=''{1}''", data));
Object[] data = {key, admin.getName()};
PreparedStatement statement = connection.prepareStatement(MessageFormat.format("UPDATE admins SET {0}=? WHERE username=''{1}''", data));
statement = setUnknownType(statement, 1, value);
statement.executeUpdate();
@ -153,8 +150,8 @@ public class SQLite extends FreedomService
{
try
{
Object[] data = {key, player.getUniqueId().toString()};
PreparedStatement statement = connection.prepareStatement(MessageFormat.format("UPDATE players SET {0}=? WHERE uuid=''{1}''", data));
Object[] data = {key, player.getName()};
PreparedStatement statement = connection.prepareStatement(MessageFormat.format("UPDATE players SET {0}=? WHERE username=''{1}''", data));
statement = setUnknownType(statement, 1, value);
statement.executeUpdate();
@ -165,11 +162,9 @@ public class SQLite extends FreedomService
}
}
@Deprecated
public void oldUpdateAdminName(String oldName, String newName)
public void updateAdminName(String oldName, String newName)
{
throw new UnsupportedOperationException("Admin no longer stores names in the object, may be changed in a future update");
/*try
try
{
PreparedStatement statement = connection.prepareStatement(MessageFormat.format("UPDATE admins SET username=? WHERE username=''{0}''", oldName));
statement = setUnknownType(statement, 1, newName);
@ -179,10 +174,10 @@ public class SQLite extends FreedomService
catch (SQLException e)
{
FLog.severe("Failed to update admin name: " + e.getMessage());
}*/
}
}
/*public void updatePlayerName(String oldName, String newName)
public void updatePlayerName(String oldName, String newName)
{
try
{
@ -195,7 +190,7 @@ public class SQLite extends FreedomService
{
FLog.severe("Failed to update player name: " + e.getMessage());
}
}*/
}
public PreparedStatement setUnknownType(PreparedStatement statement, int index, Object value) throws SQLException
{
@ -253,7 +248,7 @@ public class SQLite extends FreedomService
try
{
PreparedStatement statement = connection.prepareStatement("INSERT INTO admins VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");
statement.setString(1, admin.getUniqueId().toString());
statement.setString(1, admin.getName());
statement.setString(2, FUtil.listToString(admin.getIps()));
statement.setString(3, admin.getRank().toString());
statement.setBoolean(4, admin.isActive());
@ -276,7 +271,7 @@ public class SQLite extends FreedomService
try
{
PreparedStatement statement = connection.prepareStatement("INSERT INTO players VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
statement.setString(1, player.getUniqueId().toString());
statement.setString(1, player.getName());
statement.setString(2, FUtil.listToString(player.getIps()));
statement.setString(3, FUtil.listToString(player.getNotes()));
statement.setString(4, player.getTag());
@ -300,7 +295,7 @@ public class SQLite extends FreedomService
}
}
/*public ResultSet getAdminByName(String name)
public ResultSet getAdminByName(String name)
{
try
{
@ -317,28 +312,9 @@ public class SQLite extends FreedomService
}
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);
}
return null;
}
/*public ResultSet getPlayerByName(String name)
public ResultSet getPlayerByName(String name)
{
try
{
@ -356,8 +332,6 @@ public class SQLite extends FreedomService
return null;
}
*/
public ResultSet getMasterBuilders()
{
@ -374,25 +348,6 @@ public class SQLite extends FreedomService
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)
{
try
@ -416,7 +371,7 @@ public class SQLite extends FreedomService
{
try
{
connection.createStatement().executeUpdate(MessageFormat.format("DELETE FROM admins where uuid=''{0}''", admin.getUniqueId()));
connection.createStatement().executeUpdate(MessageFormat.format("DELETE FROM admins where name=''{0}''", admin.getName()));
}
catch (SQLException e)
{

View File

@ -1,18 +1,16 @@
package me.totalfreedom.totalfreedommod.util;
import com.google.common.collect.Maps;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.WordUtils;
import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
import org.apache.hc.client5.http.impl.classic.CloseableHttpResponse;
import org.apache.hc.client5.http.impl.classic.HttpClients;
import org.apache.hc.core5.http.HttpResponse;
import org.apache.hc.core5.http.io.entity.EntityUtils;
import org.bukkit.*;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Color;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
@ -21,14 +19,12 @@ import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
import org.json.JSONObject;
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;
@ -41,8 +37,6 @@ import static org.bukkit.Bukkit.getServer;
public class FUtil
{
private static final Map<UUID, String> NAME_CACHE = Maps.newHashMap();
public static final String SAVED_FLAGS_FILENAME = "savedflags.dat";
/* 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:
@ -60,13 +54,12 @@ public class FUtil
"d018f2b8-ce60-4672-a45f-e580e0331299", // speednt
"458de06f-36a5-4e1b-aaa6-ec1d1751c5b6", // SupItsDillon
"c8e5af82-6aba-4dd7-83e8-474381380cc9", // Paldiu
"38ea7c82-7bdc-4f48-b7fd-0e93fc26813d", // AwesomePinch
"ba5aafba-9012-418f-9819-a7020d591068", // TFTWPhoenix
"d6dd9740-40db-45f5-ab16-4ee16a633009", // Abhi
"2e06e049-24c8-42e4-8bcf-d35372af31e6", // NotInSync
"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", "NotInSync", "videogamesm12");
public static final List<String> DEVELOPER_NAMES = Arrays.asList("Madgeek1450", "Prozza", "WickedGamingUK", "Wild1145", "aggelosQQ", "scripthead", "CoolJWB", "elmon_", "speednt", "SupItsDillon", "Paldiu", "TFTWPhoenix", "abhithedev", "NotInSync", "videogamesm12");
public static final Map<String, ChatColor> CHAT_COLOR_NAMES = new HashMap<>();
public static final List<ChatColor> CHAT_COLOR_POOL = Arrays.asList(
ChatColor.DARK_RED,
@ -889,52 +882,4 @@ public class FUtil
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

@ -40,6 +40,11 @@ public class CleanroomChunkGenerator extends ChunkGenerator
}
public CleanroomChunkGenerator(String id)
{
this(id, true);
}
public CleanroomChunkGenerator(String id, boolean generateBedrock)
{
if (id != null)
{
@ -48,7 +53,11 @@ public class CleanroomChunkGenerator extends ChunkGenerator
int y = 0;
materials = new Material[128]; // Default to 128, will be resized later if required
if (generateBedrock)
{
materials[y++] = Material.BEDROCK;
}
if (id.length() > 0)
{
@ -115,14 +124,24 @@ public class CleanroomChunkGenerator extends ChunkGenerator
e.printStackTrace();
materials = new Material[65];
if (generateBedrock)
{
materials[0] = Material.BEDROCK;
}
Arrays.fill(materials, 1, 65, Material.STONE);
}
}
else
{
materials = new Material[65];
if (generateBedrock)
{
materials[0] = Material.BEDROCK;
}
Arrays.fill(materials, 1, 65, Material.STONE);
}
}

View File

@ -0,0 +1,33 @@
package me.totalfreedom.totalfreedommod.world;
import org.bukkit.*;
public class Floatlands extends CustomWorld
{
public Floatlands()
{
super("floatlands");
}
@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("", false));
final World world = Bukkit.getServer().createWorld(worldCreator);
assert world != null;
world.setSpawnFlags(false, false);
world.setSpawnLocation(0, 50, 0);
plugin.gr.commitGameRules();
return world;
}
}

View File

@ -20,12 +20,14 @@ public class WorldManager extends FreedomService
public Flatlands flatlands;
public AdminWorld adminworld;
public MasterBuilderWorld masterBuilderWorld;
public Floatlands floatlands;
public WorldManager()
{
this.flatlands = new Flatlands();
this.adminworld = new AdminWorld();
this.masterBuilderWorld = new MasterBuilderWorld();
this.floatlands = new Floatlands();
}
@Override
@ -34,6 +36,7 @@ public class WorldManager extends FreedomService
flatlands.getWorld();
adminworld.getWorld();
masterBuilderWorld.getWorld();
floatlands.getWorld();
// Disable weather
if (ConfigEntry.DISABLE_WEATHER.getBoolean())

View File

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

View File

@ -206,7 +206,7 @@ allow:
fire_spread: false
fluid_spread: false
lava_place: true
lava_damage: false
lava_damage: true
water_place: true
tnt_minecarts: false
explosions: false
@ -590,6 +590,14 @@ masterbuilderinfo:
- ' &2- Template:'
- '&9https://forum.totalfreedom.me/d/336-master-builder-application-process'
# What new players will see upon joining for the first time.
first_join_info:
enabled: true
text:
- "&6Welcome to TotalFreedom -- the original Free-OP server!"
- "&eThe server's name doesn't mean we have no rules. Do &6/rules &efor a list of them."
- "&aNeed help getting started? Do &2/help &aor a list of commands!"
# Famous players - cannot be banned by username
famous_players:
- honeydew