Compare commits

...

785 commits

Author SHA1 Message Date
Telesphoreo 30e38d44a9 No maven 2022-03-25 15:44:24 -05:00
Telesphoreo ea418bb916 Compiles 2022-03-25 15:42:21 -05:00
Telesphoreo 7d1705c79f Merge branch 'development' of https://github.com/AtlasMediaGroup/TotalFreedomMod into development 2022-03-25 15:30:02 -05:00
Paldiu 2551d184ca
Merge pull request #211 from AtlasMediaGroup/RELEASE-2022.02
Release 2022.02
2022-03-11 18:09:21 -06:00
Video f9eabf27d5
Merge pull request #205 from AtlasMediaGroup/fs-442
FS-442
2022-03-06 16:15:53 -07:00
Video 846154a723 will this work 2022-03-06 14:37:45 +00:00
Ryan Wild 804614d011
Bump to 2022.02-RC01 Release
Primarily adds 1.17 support, other fixes may be present, please see full release notes for info.
2022-02-23 23:23:14 +00:00
Paldiu 2c22c6c52d
Merge pull request #194 from AtlasMediaGroup/Wild1145-patch-1
Update various dependencies based on Freedom-01 State
2022-02-23 17:10:09 -06:00
Ryan 5ef0f29ffe
Merge branch 'development' into Wild1145-patch-1 2022-02-23 22:48:53 +00:00
Ryan 11134f4109
Merge pull request #197 from AtlasMediaGroup/FS-292
Uplifts the plugin to 1.17.1
2022-02-23 22:48:32 +00:00
Ryan e7992c7eb4
Merge branch 'development' into Wild1145-patch-1 2022-02-22 21:17:02 +00:00
Ryan 82e966dfb0
Delete java11-maven.yml 2022-02-22 20:50:41 +00:00
Paldiu f457c4cde2
Merge branch 'development' into FS-292 2022-02-21 18:08:29 -06:00
Video 004a0f3d7c Update Groups.java
This should resolve the issues with spawn eggs and mobs.
2022-02-21 17:04:53 -07:00
Video cf5199f28e Squashed commit of the following:
commit 43c68579e5
Merge: 2618d97a b711ed51
Author: elmon <elmon11bussiness@gmail.com>
Date:   Mon Feb 21 10:01:39 2022 +0100

    Merge pull request #190 from AtlasMediaGroup/Elmon11-patch-2

    order of messages fix

commit b711ed517f
Merge: 1c464729 2618d97a
Author: elmon <elmon11bussiness@gmail.com>
Date:   Mon Jan 24 22:16:24 2022 +0100

    Merge branch 'development' into Elmon11-patch-2

commit 2618d97a3e
Author: Nathan Curran <30569566+Focusvity@users.noreply.github.com>
Date:   Mon Jan 24 12:42:47 2022 +1100

    Remove requireNonNull method from getIp, which causes NPE - resolves FS-429 (#187)

    Co-authored-by: Paldiu <pawereus@gmail.com>

commit 1c4647290a
Merge: f00f67a8 850f1210
Author: Nathan Curran <30569566+Focusvity@users.noreply.github.com>
Date:   Mon Jan 24 12:41:47 2022 +1100

    Merge branch 'development' into Elmon11-patch-2

commit f00f67a844
Author: elmon <elmon11bussiness@gmail.com>
Date:   Sun Jan 23 13:26:22 2022 +0100

    order of messages fix

    https://media.discordapp.net/attachments/874713176082636882/934559012991680532/unknown.png

commit 850f12103c
Merge: 2eb0ab4c 7fd77f3c
Author: Paldiu <pawereus@gmail.com>
Date:   Mon Jan 17 11:35:09 2022 -0600

    Merge pull request #188 from AtlasMediaGroup/Wild1145-patch-1

    Correct CoreProtect Version

commit 7fd77f3cbb
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sun Jan 16 18:22:16 2022 +0000

    Correct CoreProtect Version

    To align with the version running on Freedom-01 at the moment.

commit 2eb0ab4cb1
Merge: 8cff0124 2612aaec
Author: Video <videogamesm12@gmail.com>
Date:   Wed Dec 22 20:56:46 2021 -0700

    Merge pull request #179 from AtlasMediaGroup/FS-212

    Makes spawnmob configurable, increases the default limit to 25 (FS-212)

commit 2612aaec31
Author: Video <videogamesm12@gmail.com>
Date:   Wed Dec 15 21:46:56 2021 -0700

    Makes spawnmob configurable and increases the default limit to 25

commit 8cff0124ea
Merge: 35965b0b 1162f10e
Author: Video <videogamesm12@gmail.com>
Date:   Mon Nov 29 06:36:20 2021 -0700

    Merge pull request #93 from AtlasMediaGroup/FS-37

    Fixes FS-37

commit 1162f10ebb
Merge: 7ce173e0 35965b0b
Author: Video <videogamesm12@gmail.com>
Date:   Mon Nov 29 06:31:18 2021 -0700

    Merge branch 'development' into FS-37

commit 35965b0b10
Merge: aa20a6e5 1253732f
Author: Video <videogamesm12@gmail.com>
Date:   Mon Nov 29 06:31:11 2021 -0700

    Merge pull request #174 from AtlasMediaGroup/FS-256

    Forces the server to recalculate the permissions server-wide in /opall (FS-256)

commit 1253732f77
Merge: e1bee321 aa20a6e5
Author: Video <videogamesm12@gmail.com>
Date:   Mon Nov 29 06:25:25 2021 -0700

    Merge branch 'development' into FS-256

commit 7ce173e02b
Merge: 4d006ed1 aa20a6e5
Author: Video <videogamesm12@gmail.com>
Date:   Mon Nov 29 06:24:34 2021 -0700

    Merge branch 'development' into FS-37

commit aa20a6e579
Merge: 70622900 1ecfb0b0
Author: Video <videogamesm12@gmail.com>
Date:   Mon Nov 29 06:23:57 2021 -0700

    Merge pull request #129 from AtlasMediaGroup/FS-7

    Allow players to pay other players coins [FS-7]

commit e1bee32163
Author: Video <videogamesm12@gmail.com>
Date:   Mon Nov 29 03:27:07 2021 -0700

    Forces the server to recalculate the permissions server-wide in /opall

commit 4d006ed172
Merge: 8cbfde8b 70622900
Author: Video <videogamesm12@gmail.com>
Date:   Mon Nov 29 03:04:42 2021 -0700

    Merge branch 'development' into FS-37

commit 1ecfb0b066
Merge: 225ade87 70622900
Author: Video <videogamesm12@gmail.com>
Date:   Mon Nov 29 03:01:22 2021 -0700

    Merge branch 'development' into FS-7

commit 706229004c
Merge: a42cb6af a4adfa9b
Author: Video <videogamesm12@gmail.com>
Date:   Mon Nov 29 03:00:15 2021 -0700

    Merge pull request #131 from AtlasMediaGroup/FS-273

    Moves /rainbowtrail to the shop (FS-273)

commit a4adfa9bee
Merge: 1b5bbd1c a42cb6af
Author: Video <videogamesm12@gmail.com>
Date:   Mon Nov 29 02:46:41 2021 -0700

    Merge branch 'development' into FS-273

commit 225ade8753
Merge: afe755f5 a42cb6af
Author: Video <videogamesm12@gmail.com>
Date:   Mon Nov 29 02:46:02 2021 -0700

    Merge branch 'development' into FS-7

commit 8cbfde8bbc
Merge: bba5ec92 a42cb6af
Author: Video <videogamesm12@gmail.com>
Date:   Mon Nov 29 02:41:49 2021 -0700

    Merge branch 'development' into FS-37

commit a42cb6aff9
Merge: 2ecfb886 01fdf766
Author: Video <videogamesm12@gmail.com>
Date:   Mon Nov 29 02:41:34 2021 -0700

    Merge pull request #125 from AtlasMediaGroup/shitcan-savedflags

    Shitcans SavedFlags

commit 01fdf766ee
Merge: 58c21bb1 2ecfb886
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 09:28:48 2021 -0700

    Merge branch 'development' into shitcan-savedflags

commit afe755f5c1
Merge: 5f97e68e 2ecfb886
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 09:26:59 2021 -0700

    Merge branch 'development' into FS-7

commit 5f97e68e0e
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 09:26:49 2021 -0700

    fuck it, it works

commit 1b5bbd1c05
Merge: 8356e831 2ecfb886
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 09:16:21 2021 -0700

    Merge branch 'development' into FS-273

commit 2ecfb88604
Merge: 42143c11 bb2ddf11
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 09:15:16 2021 -0700

    Merge pull request #130 from AtlasMediaGroup/FS-215

    Makes [Discord] a hyperlink (FS-215)

commit 8356e831a5
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 09:11:16 2021 -0700

    Redundancy fix and better protection system

commit ab00cb840f
Merge: ecce62f6 42143c11
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 03:31:45 2021 -0700

    Merge branch 'development' into FS-273

commit bb2ddf1129
Merge: cf9fdc6f 42143c11
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 03:31:19 2021 -0700

    Merge branch 'development' into FS-215

commit bba5ec922b
Merge: 68adaed9 42143c11
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 03:31:13 2021 -0700

    Merge branch 'development' into FS-37

commit 58c21bb1aa
Merge: fdba119d 42143c11
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 03:30:48 2021 -0700

    Merge branch 'development' into shitcan-savedflags

commit 68adaed997
Merge: 087b8dd7 a598c933
Author: Video <videogamesm12@gmail.com>
Date:   Sat Oct 9 00:09:24 2021 -0600

    Merge branch 'development' into FS-37

commit ecce62f6b4
Merge: d8148530 a598c933
Author: Video <videogamesm12@gmail.com>
Date:   Sat Oct 9 00:01:22 2021 -0600

    Merge branch 'development' into FS-273

commit cf9fdc6fe4
Merge: 387ea6f7 a598c933
Author: Video <videogamesm12@gmail.com>
Date:   Fri Oct 8 01:43:33 2021 -0600

    Merge branch 'development' into FS-215

commit 387ea6f71e
Merge: a1ecf881 180cd811
Author: Video <videogamesm12@gmail.com>
Date:   Fri Oct 1 00:35:12 2021 -0600

    Merge branch 'development' into FS-215

commit d814853036
Merge: 47e63869 213a4338
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sun Sep 12 13:49:05 2021 +0100

    Merge branch 'development' into FS-273

commit a1ecf88109
Merge: bd647afe 213a4338
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sun Sep 12 13:48:59 2021 +0100

    Merge branch 'development' into FS-215

commit 5a6a5ff75d
Merge: 6ca61d9c 213a4338
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sun Sep 12 13:48:50 2021 +0100

    Merge branch 'development' into FS-7

commit fdba119d5d
Merge: 61857dd0 213a4338
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sun Sep 12 13:48:44 2021 +0100

    Merge branch 'development' into shitcan-savedflags

commit 087b8dd7ea
Merge: 3818aab4 213a4338
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sun Sep 12 13:48:21 2021 +0100

    Merge branch 'development' into FS-37

commit 3818aab454
Merge: caeda219 0e12f5e7
Author: Video <videogamesm12@gmail.com>
Date:   Sun Sep 12 03:04:08 2021 -0600

    Merge branch 'development' into FS-37

commit 61857dd06f
Merge: 2d18d461 0e12f5e7
Author: Video <videogamesm12@gmail.com>
Date:   Sun Sep 12 03:01:37 2021 -0600

    Merge branch 'development' into shitcan-savedflags

commit bd647afe92
Merge: 69f17ef2 0e12f5e7
Author: Video <videogamesm12@gmail.com>
Date:   Sun Sep 12 02:50:39 2021 -0600

    Merge branch 'development' into FS-215

commit 69f17ef2d7
Merge: ee1b27fa aebe1ace
Author: Video <videogamesm12@gmail.com>
Date:   Sun Sep 12 02:01:56 2021 -0600

    Merge branch 'development' into FS-215

commit caeda219fa
Merge: 3ca98352 0a9b95bf
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Sep 11 15:26:37 2021 +0100

    Merge branch 'development' into FS-37

commit ee1b27fa0d
Merge: 2bdf14f3 0a9b95bf
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Sep 11 01:24:00 2021 +0100

    Merge branch 'development' into FS-215

commit 6ca61d9c6c
Merge: fedf80b8 0a9b95bf
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Sep 11 01:23:52 2021 +0100

    Merge branch 'development' into FS-7

commit 2d18d461fe
Merge: a4c81f20 0a9b95bf
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Sep 11 01:23:44 2021 +0100

    Merge branch 'development' into shitcan-savedflags

commit 47e6386907
Merge: b1062fbb 0a9b95bf
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Sep 11 01:23:13 2021 +0100

    Merge branch 'development' into FS-273

commit fedf80b834
Merge: a2d11d4b 44ff621d
Author: Video <videogamesm12@gmail.com>
Date:   Fri Sep 10 01:39:16 2021 -0600

    Merge branch 'development' into FS-7

commit 2bdf14f38c
Merge: f6d46b61 44ff621d
Author: Video <videogamesm12@gmail.com>
Date:   Mon Sep 6 15:26:13 2021 -0600

    Merge branch 'development' into FS-215

commit b1062fbb6c
Merge: f69feed4 44ff621d
Author: Video <videogamesm12@gmail.com>
Date:   Mon Sep 6 14:39:32 2021 -0600

    Merge branch 'development' into FS-273

commit 3ca9835257
Merge: da82b270 54cb0cfa
Author: Video <videogamesm12@gmail.com>
Date:   Mon Sep 6 01:16:04 2021 -0600

    Merge branch 'development' into FS-37

commit f69feed469
Author: Video <videogamesm12@gmail.com>
Date:   Mon Sep 6 01:14:21 2021 -0600

    fixed

commit 8253f94ac4
Merge: daf0126f 54cb0cfa
Author: Video <videogamesm12@gmail.com>
Date:   Mon Sep 6 01:12:00 2021 -0600

    Merge branch 'development' into FS-273

commit a4c81f202c
Merge: 0d09c3a5 23caa4e8
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Sep 4 01:23:06 2021 +0100

    Merge branch 'development' into shitcan-savedflags

commit da82b27016
Merge: af1df228 23caa4e8
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Sep 4 01:07:55 2021 +0100

    Merge branch 'development' into FS-37

commit daf0126f45
Merge: a51f5c9b 23caa4e8
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Sep 4 01:07:39 2021 +0100

    Merge branch 'development' into FS-273

commit f6d46b6178
Merge: ee804d52 23caa4e8
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Sep 4 01:07:33 2021 +0100

    Merge branch 'development' into FS-215

commit a2d11d4b93
Merge: dc490659 23caa4e8
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Sep 4 01:07:28 2021 +0100

    Merge branch 'development' into FS-7

commit a51f5c9bbf
Author: Video <videogamesm12@gmail.com>
Date:   Fri Sep 3 13:53:33 2021 -0600

    FS-273

commit ee804d52ff
Author: Video <videogamesm12@gmail.com>
Date:   Fri Sep 3 12:52:15 2021 -0600

    Makes [Discord] a hyperlink (FS-215)

    I've decided to overhaul the implementation of DiscordToMinecraftListener to make it more easily workable. This overhaul allows me to implement FS-215 more easily.

commit dc490659c1
Author: Video <videogamesm12@gmail.com>
Date:   Fri Sep 3 00:07:20 2021 -0600

    Begins implementing FS-7

    should be good enough, but feedback would be lovely

commit 0d09c3a550
Merge: e2ccd14e 4c3f188b
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sun Aug 29 20:09:03 2021 +0100

    Merge branch 'development' into shitcan-savedflags

commit e2ccd14eb3
Author: Video <videogamesm12@gmail.com>
Date:   Fri Aug 27 16:54:55 2021 -0600

    Unsaves SavedFlags

commit af1df22812
Merge: 1474a808 f380898b
Author: Video <videogamesm12@gmail.com>
Date:   Thu Aug 26 23:05:58 2021 -0600

    Merge branch 'development' into FS-37

commit 1474a80875
Merge: 77fd4ff6 f45466ee
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Thu Aug 26 13:26:44 2021 +0100

    Merge branch 'development' into FS-37

commit 77fd4ff66a
Merge: 33aca2a4 d901cbaa
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Aug 21 21:34:04 2021 +0100

    Merge branch 'development' into FS-37

commit 33aca2a482
Merge: 159eda73 0582c2e5
Author: Video <videogamesm12@gmail.com>
Date:   Tue Aug 10 22:38:51 2021 -0600

    Merge branch 'development' into FS-37

commit 159eda73a1
Merge: da2d2525 6874b2ce
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Tue Aug 10 17:34:12 2021 +0100

    Merge branch 'development' into FS-37

commit da2d25252b
Merge: e99aaa2e c8a4382a
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Tue Aug 10 17:31:13 2021 +0100

    Merge branch 'development' into FS-37

commit e99aaa2eb4
Author: Video <videogamesm12@gmail.com>
Date:   Thu Aug 5 00:32:23 2021 -0600

    Fixes FS-37

    Fixes an oversight introduced in 76bb2d08ac in which the configuration is loaded twice.
2022-02-21 16:45:03 -07:00
elmon 43c68579e5
Merge pull request #190 from AtlasMediaGroup/Elmon11-patch-2
order of messages fix
2022-02-21 10:01:39 +01:00
Ryan 127ee7d9f9
Move CodeQL to Java 17 2022-02-18 16:50:45 +00:00
Ryan c873fd4abc
Update pom.xml 2022-02-16 21:02:00 +00:00
Ryan fa90e1d239
Update various dependencies based on Freedom-01 State
Various plugins have been updated but not reflected back here. This PR Corrects that.
2022-02-05 23:25:57 +00:00
elmon b711ed517f
Merge branch 'development' into Elmon11-patch-2 2022-01-24 22:16:24 +01:00
Nathan Curran 2618d97a3e
Remove requireNonNull method from getIp, which causes NPE - resolves FS-429 (#187)
Co-authored-by: Paldiu <pawereus@gmail.com>
2022-01-24 12:42:47 +11:00
Nathan Curran 1c4647290a
Merge branch 'development' into Elmon11-patch-2 2022-01-24 12:41:47 +11:00
elmon f00f67a844
order of messages fix
https://media.discordapp.net/attachments/874713176082636882/934559012991680532/unknown.png
2022-01-23 13:26:22 +01:00
Paldiu 850f12103c
Merge pull request #188 from AtlasMediaGroup/Wild1145-patch-1
Correct CoreProtect Version
2022-01-17 11:35:09 -06:00
Telesphoreo 7d71fc0a29 Pterodactyl integration is broken again 2022-01-16 17:48:23 -06:00
Telesphoreo a33fd0d978 deadass just guessed the letters 2022-01-16 17:24:17 -06:00
Ryan 7fd77f3cbb
Correct CoreProtect Version
To align with the version running on Freedom-01 at the moment.
2022-01-16 18:22:16 +00:00
Video 2eb0ab4cb1
Merge pull request #179 from AtlasMediaGroup/FS-212
Makes spawnmob configurable, increases the default limit to 25 (FS-212)
2021-12-22 20:56:46 -07:00
Video 2612aaec31 Makes spawnmob configurable and increases the default limit to 25 2021-12-15 21:46:56 -07:00
Video 6e7ad73152 Nevermind that didn't work 2021-11-29 07:03:29 -07:00
Video af6411b82c Wait a second
This *should* work...
2021-11-29 06:54:04 -07:00
Video e9ba958a4e Squashed commit of the following:
commit 35965b0b10
Merge: aa20a6e5 1253732f
Author: Video <videogamesm12@gmail.com>
Date:   Mon Nov 29 06:31:11 2021 -0700

    Merge pull request #174 from AtlasMediaGroup/FS-256

    Forces the server to recalculate the permissions server-wide in /opall (FS-256)

commit 1253732f77
Merge: e1bee321 aa20a6e5
Author: Video <videogamesm12@gmail.com>
Date:   Mon Nov 29 06:25:25 2021 -0700

    Merge branch 'development' into FS-256

commit aa20a6e579
Merge: 70622900 1ecfb0b0
Author: Video <videogamesm12@gmail.com>
Date:   Mon Nov 29 06:23:57 2021 -0700

    Merge pull request #129 from AtlasMediaGroup/FS-7

    Allow players to pay other players coins [FS-7]

commit e1bee32163
Author: Video <videogamesm12@gmail.com>
Date:   Mon Nov 29 03:27:07 2021 -0700

    Forces the server to recalculate the permissions server-wide in /opall

commit 1ecfb0b066
Merge: 225ade87 70622900
Author: Video <videogamesm12@gmail.com>
Date:   Mon Nov 29 03:01:22 2021 -0700

    Merge branch 'development' into FS-7

commit 706229004c
Merge: a42cb6af a4adfa9b
Author: Video <videogamesm12@gmail.com>
Date:   Mon Nov 29 03:00:15 2021 -0700

    Merge pull request #131 from AtlasMediaGroup/FS-273

    Moves /rainbowtrail to the shop (FS-273)

commit a4adfa9bee
Merge: 1b5bbd1c a42cb6af
Author: Video <videogamesm12@gmail.com>
Date:   Mon Nov 29 02:46:41 2021 -0700

    Merge branch 'development' into FS-273

commit 225ade8753
Merge: afe755f5 a42cb6af
Author: Video <videogamesm12@gmail.com>
Date:   Mon Nov 29 02:46:02 2021 -0700

    Merge branch 'development' into FS-7

commit a42cb6aff9
Merge: 2ecfb886 01fdf766
Author: Video <videogamesm12@gmail.com>
Date:   Mon Nov 29 02:41:34 2021 -0700

    Merge pull request #125 from AtlasMediaGroup/shitcan-savedflags

    Shitcans SavedFlags

commit 01fdf766ee
Merge: 58c21bb1 2ecfb886
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 09:28:48 2021 -0700

    Merge branch 'development' into shitcan-savedflags

commit afe755f5c1
Merge: 5f97e68e 2ecfb886
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 09:26:59 2021 -0700

    Merge branch 'development' into FS-7

commit 5f97e68e0e
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 09:26:49 2021 -0700

    fuck it, it works

commit 1b5bbd1c05
Merge: 8356e831 2ecfb886
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 09:16:21 2021 -0700

    Merge branch 'development' into FS-273

commit 2ecfb88604
Merge: 42143c11 bb2ddf11
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 09:15:16 2021 -0700

    Merge pull request #130 from AtlasMediaGroup/FS-215

    Makes [Discord] a hyperlink (FS-215)

commit 8356e831a5
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 09:11:16 2021 -0700

    Redundancy fix and better protection system

commit ab00cb840f
Merge: ecce62f6 42143c11
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 03:31:45 2021 -0700

    Merge branch 'development' into FS-273

commit bb2ddf1129
Merge: cf9fdc6f 42143c11
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 03:31:19 2021 -0700

    Merge branch 'development' into FS-215

commit 58c21bb1aa
Merge: fdba119d 42143c11
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 03:30:48 2021 -0700

    Merge branch 'development' into shitcan-savedflags

commit ecce62f6b4
Merge: d8148530 a598c933
Author: Video <videogamesm12@gmail.com>
Date:   Sat Oct 9 00:01:22 2021 -0600

    Merge branch 'development' into FS-273

commit cf9fdc6fe4
Merge: 387ea6f7 a598c933
Author: Video <videogamesm12@gmail.com>
Date:   Fri Oct 8 01:43:33 2021 -0600

    Merge branch 'development' into FS-215

commit 387ea6f71e
Merge: a1ecf881 180cd811
Author: Video <videogamesm12@gmail.com>
Date:   Fri Oct 1 00:35:12 2021 -0600

    Merge branch 'development' into FS-215

commit d814853036
Merge: 47e63869 213a4338
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sun Sep 12 13:49:05 2021 +0100

    Merge branch 'development' into FS-273

commit a1ecf88109
Merge: bd647afe 213a4338
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sun Sep 12 13:48:59 2021 +0100

    Merge branch 'development' into FS-215

commit 5a6a5ff75d
Merge: 6ca61d9c 213a4338
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sun Sep 12 13:48:50 2021 +0100

    Merge branch 'development' into FS-7

commit fdba119d5d
Merge: 61857dd0 213a4338
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sun Sep 12 13:48:44 2021 +0100

    Merge branch 'development' into shitcan-savedflags

commit 61857dd06f
Merge: 2d18d461 0e12f5e7
Author: Video <videogamesm12@gmail.com>
Date:   Sun Sep 12 03:01:37 2021 -0600

    Merge branch 'development' into shitcan-savedflags

commit bd647afe92
Merge: 69f17ef2 0e12f5e7
Author: Video <videogamesm12@gmail.com>
Date:   Sun Sep 12 02:50:39 2021 -0600

    Merge branch 'development' into FS-215

commit 69f17ef2d7
Merge: ee1b27fa aebe1ace
Author: Video <videogamesm12@gmail.com>
Date:   Sun Sep 12 02:01:56 2021 -0600

    Merge branch 'development' into FS-215

commit ee1b27fa0d
Merge: 2bdf14f3 0a9b95bf
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Sep 11 01:24:00 2021 +0100

    Merge branch 'development' into FS-215

commit 6ca61d9c6c
Merge: fedf80b8 0a9b95bf
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Sep 11 01:23:52 2021 +0100

    Merge branch 'development' into FS-7

commit 2d18d461fe
Merge: a4c81f20 0a9b95bf
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Sep 11 01:23:44 2021 +0100

    Merge branch 'development' into shitcan-savedflags

commit 47e6386907
Merge: b1062fbb 0a9b95bf
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Sep 11 01:23:13 2021 +0100

    Merge branch 'development' into FS-273

commit fedf80b834
Merge: a2d11d4b 44ff621d
Author: Video <videogamesm12@gmail.com>
Date:   Fri Sep 10 01:39:16 2021 -0600

    Merge branch 'development' into FS-7

commit 2bdf14f38c
Merge: f6d46b61 44ff621d
Author: Video <videogamesm12@gmail.com>
Date:   Mon Sep 6 15:26:13 2021 -0600

    Merge branch 'development' into FS-215

commit b1062fbb6c
Merge: f69feed4 44ff621d
Author: Video <videogamesm12@gmail.com>
Date:   Mon Sep 6 14:39:32 2021 -0600

    Merge branch 'development' into FS-273

commit f69feed469
Author: Video <videogamesm12@gmail.com>
Date:   Mon Sep 6 01:14:21 2021 -0600

    fixed

commit 8253f94ac4
Merge: daf0126f 54cb0cfa
Author: Video <videogamesm12@gmail.com>
Date:   Mon Sep 6 01:12:00 2021 -0600

    Merge branch 'development' into FS-273

commit a4c81f202c
Merge: 0d09c3a5 23caa4e8
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Sep 4 01:23:06 2021 +0100

    Merge branch 'development' into shitcan-savedflags

commit daf0126f45
Merge: a51f5c9b 23caa4e8
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Sep 4 01:07:39 2021 +0100

    Merge branch 'development' into FS-273

commit f6d46b6178
Merge: ee804d52 23caa4e8
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Sep 4 01:07:33 2021 +0100

    Merge branch 'development' into FS-215

commit a2d11d4b93
Merge: dc490659 23caa4e8
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Sep 4 01:07:28 2021 +0100

    Merge branch 'development' into FS-7

commit a51f5c9bbf
Author: Video <videogamesm12@gmail.com>
Date:   Fri Sep 3 13:53:33 2021 -0600

    FS-273

commit ee804d52ff
Author: Video <videogamesm12@gmail.com>
Date:   Fri Sep 3 12:52:15 2021 -0600

    Makes [Discord] a hyperlink (FS-215)

    I've decided to overhaul the implementation of DiscordToMinecraftListener to make it more easily workable. This overhaul allows me to implement FS-215 more easily.

commit dc490659c1
Author: Video <videogamesm12@gmail.com>
Date:   Fri Sep 3 00:07:20 2021 -0600

    Begins implementing FS-7

    should be good enough, but feedback would be lovely

commit 0d09c3a550
Merge: e2ccd14e 4c3f188b
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sun Aug 29 20:09:03 2021 +0100

    Merge branch 'development' into shitcan-savedflags

commit e2ccd14eb3
Author: Video <videogamesm12@gmail.com>
Date:   Fri Aug 27 16:54:55 2021 -0600

    Unsaves SavedFlags
2021-11-29 06:40:26 -07:00
Video 8cff0124ea
Merge pull request #93 from AtlasMediaGroup/FS-37
Fixes FS-37
2021-11-29 06:36:20 -07:00
Video 1162f10ebb
Merge branch 'development' into FS-37 2021-11-29 06:31:18 -07:00
Video 35965b0b10
Merge pull request #174 from AtlasMediaGroup/FS-256
Forces the server to recalculate the permissions server-wide in /opall (FS-256)
2021-11-29 06:31:11 -07:00
Video 1253732f77
Merge branch 'development' into FS-256 2021-11-29 06:25:25 -07:00
Video 7ce173e02b
Merge branch 'development' into FS-37 2021-11-29 06:24:34 -07:00
Video aa20a6e579
Merge pull request #129 from AtlasMediaGroup/FS-7
Allow players to pay other players coins [FS-7]
2021-11-29 06:23:57 -07:00
Video e1bee32163 Forces the server to recalculate the permissions server-wide in /opall 2021-11-29 03:27:07 -07:00
Video 4d006ed172
Merge branch 'development' into FS-37 2021-11-29 03:04:42 -07:00
Video a29392cab2 Squashed commit of the following:
commit 706229004c
Merge: a42cb6af a4adfa9b
Author: Video <videogamesm12@gmail.com>
Date:   Mon Nov 29 03:00:15 2021 -0700

    Merge pull request #131 from AtlasMediaGroup/FS-273

    Moves /rainbowtrail to the shop (FS-273)

commit a4adfa9bee
Merge: 1b5bbd1c a42cb6af
Author: Video <videogamesm12@gmail.com>
Date:   Mon Nov 29 02:46:41 2021 -0700

    Merge branch 'development' into FS-273

commit a42cb6aff9
Merge: 2ecfb886 01fdf766
Author: Video <videogamesm12@gmail.com>
Date:   Mon Nov 29 02:41:34 2021 -0700

    Merge pull request #125 from AtlasMediaGroup/shitcan-savedflags

    Shitcans SavedFlags

commit 01fdf766ee
Merge: 58c21bb1 2ecfb886
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 09:28:48 2021 -0700

    Merge branch 'development' into shitcan-savedflags

commit 1b5bbd1c05
Merge: 8356e831 2ecfb886
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 09:16:21 2021 -0700

    Merge branch 'development' into FS-273

commit 2ecfb88604
Merge: 42143c11 bb2ddf11
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 09:15:16 2021 -0700

    Merge pull request #130 from AtlasMediaGroup/FS-215

    Makes [Discord] a hyperlink (FS-215)

commit 8356e831a5
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 09:11:16 2021 -0700

    Redundancy fix and better protection system

commit ab00cb840f
Merge: ecce62f6 42143c11
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 03:31:45 2021 -0700

    Merge branch 'development' into FS-273

commit bb2ddf1129
Merge: cf9fdc6f 42143c11
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 03:31:19 2021 -0700

    Merge branch 'development' into FS-215

commit 58c21bb1aa
Merge: fdba119d 42143c11
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 03:30:48 2021 -0700

    Merge branch 'development' into shitcan-savedflags

commit ecce62f6b4
Merge: d8148530 a598c933
Author: Video <videogamesm12@gmail.com>
Date:   Sat Oct 9 00:01:22 2021 -0600

    Merge branch 'development' into FS-273

commit cf9fdc6fe4
Merge: 387ea6f7 a598c933
Author: Video <videogamesm12@gmail.com>
Date:   Fri Oct 8 01:43:33 2021 -0600

    Merge branch 'development' into FS-215

commit 387ea6f71e
Merge: a1ecf881 180cd811
Author: Video <videogamesm12@gmail.com>
Date:   Fri Oct 1 00:35:12 2021 -0600

    Merge branch 'development' into FS-215

commit d814853036
Merge: 47e63869 213a4338
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sun Sep 12 13:49:05 2021 +0100

    Merge branch 'development' into FS-273

commit a1ecf88109
Merge: bd647afe 213a4338
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sun Sep 12 13:48:59 2021 +0100

    Merge branch 'development' into FS-215

commit fdba119d5d
Merge: 61857dd0 213a4338
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sun Sep 12 13:48:44 2021 +0100

    Merge branch 'development' into shitcan-savedflags

commit 61857dd06f
Merge: 2d18d461 0e12f5e7
Author: Video <videogamesm12@gmail.com>
Date:   Sun Sep 12 03:01:37 2021 -0600

    Merge branch 'development' into shitcan-savedflags

commit bd647afe92
Merge: 69f17ef2 0e12f5e7
Author: Video <videogamesm12@gmail.com>
Date:   Sun Sep 12 02:50:39 2021 -0600

    Merge branch 'development' into FS-215

commit 69f17ef2d7
Merge: ee1b27fa aebe1ace
Author: Video <videogamesm12@gmail.com>
Date:   Sun Sep 12 02:01:56 2021 -0600

    Merge branch 'development' into FS-215

commit ee1b27fa0d
Merge: 2bdf14f3 0a9b95bf
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Sep 11 01:24:00 2021 +0100

    Merge branch 'development' into FS-215

commit 2d18d461fe
Merge: a4c81f20 0a9b95bf
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Sep 11 01:23:44 2021 +0100

    Merge branch 'development' into shitcan-savedflags

commit 47e6386907
Merge: b1062fbb 0a9b95bf
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Sep 11 01:23:13 2021 +0100

    Merge branch 'development' into FS-273

commit 2bdf14f38c
Merge: f6d46b61 44ff621d
Author: Video <videogamesm12@gmail.com>
Date:   Mon Sep 6 15:26:13 2021 -0600

    Merge branch 'development' into FS-215

commit b1062fbb6c
Merge: f69feed4 44ff621d
Author: Video <videogamesm12@gmail.com>
Date:   Mon Sep 6 14:39:32 2021 -0600

    Merge branch 'development' into FS-273

commit f69feed469
Author: Video <videogamesm12@gmail.com>
Date:   Mon Sep 6 01:14:21 2021 -0600

    fixed

commit 8253f94ac4
Merge: daf0126f 54cb0cfa
Author: Video <videogamesm12@gmail.com>
Date:   Mon Sep 6 01:12:00 2021 -0600

    Merge branch 'development' into FS-273

commit a4c81f202c
Merge: 0d09c3a5 23caa4e8
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Sep 4 01:23:06 2021 +0100

    Merge branch 'development' into shitcan-savedflags

commit daf0126f45
Merge: a51f5c9b 23caa4e8
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Sep 4 01:07:39 2021 +0100

    Merge branch 'development' into FS-273

commit f6d46b6178
Merge: ee804d52 23caa4e8
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Sep 4 01:07:33 2021 +0100

    Merge branch 'development' into FS-215

commit a51f5c9bbf
Author: Video <videogamesm12@gmail.com>
Date:   Fri Sep 3 13:53:33 2021 -0600

    FS-273

commit ee804d52ff
Author: Video <videogamesm12@gmail.com>
Date:   Fri Sep 3 12:52:15 2021 -0600

    Makes [Discord] a hyperlink (FS-215)

    I've decided to overhaul the implementation of DiscordToMinecraftListener to make it more easily workable. This overhaul allows me to implement FS-215 more easily.

commit 0d09c3a550
Merge: e2ccd14e 4c3f188b
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sun Aug 29 20:09:03 2021 +0100

    Merge branch 'development' into shitcan-savedflags

commit e2ccd14eb3
Author: Video <videogamesm12@gmail.com>
Date:   Fri Aug 27 16:54:55 2021 -0600

    Unsaves SavedFlags
2021-11-29 03:03:00 -07:00
Video 1ecfb0b066
Merge branch 'development' into FS-7 2021-11-29 03:01:22 -07:00
Video 706229004c
Merge pull request #131 from AtlasMediaGroup/FS-273
Moves /rainbowtrail to the shop (FS-273)
2021-11-29 03:00:15 -07:00
Video a4adfa9bee
Merge branch 'development' into FS-273 2021-11-29 02:46:41 -07:00
Video 225ade8753
Merge branch 'development' into FS-7 2021-11-29 02:46:02 -07:00
Video bf2323bed2 Squashed commit of the following:
commit a42cb6aff9
Merge: 2ecfb886 01fdf766
Author: Video <videogamesm12@gmail.com>
Date:   Mon Nov 29 02:41:34 2021 -0700

    Merge pull request #125 from AtlasMediaGroup/shitcan-savedflags

    Shitcans SavedFlags

commit 01fdf766ee
Merge: 58c21bb1 2ecfb886
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 09:28:48 2021 -0700

    Merge branch 'development' into shitcan-savedflags

commit 2ecfb88604
Merge: 42143c11 bb2ddf11
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 09:15:16 2021 -0700

    Merge pull request #130 from AtlasMediaGroup/FS-215

    Makes [Discord] a hyperlink (FS-215)

commit bb2ddf1129
Merge: cf9fdc6f 42143c11
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 03:31:19 2021 -0700

    Merge branch 'development' into FS-215

commit 58c21bb1aa
Merge: fdba119d 42143c11
Author: Video <videogamesm12@gmail.com>
Date:   Tue Nov 23 03:30:48 2021 -0700

    Merge branch 'development' into shitcan-savedflags

commit cf9fdc6fe4
Merge: 387ea6f7 a598c933
Author: Video <videogamesm12@gmail.com>
Date:   Fri Oct 8 01:43:33 2021 -0600

    Merge branch 'development' into FS-215

commit 387ea6f71e
Merge: a1ecf881 180cd811
Author: Video <videogamesm12@gmail.com>
Date:   Fri Oct 1 00:35:12 2021 -0600

    Merge branch 'development' into FS-215

commit a1ecf88109
Merge: bd647afe 213a4338
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sun Sep 12 13:48:59 2021 +0100

    Merge branch 'development' into FS-215

commit fdba119d5d
Merge: 61857dd0 213a4338
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sun Sep 12 13:48:44 2021 +0100

    Merge branch 'development' into shitcan-savedflags

commit 61857dd06f
Merge: 2d18d461 0e12f5e7
Author: Video <videogamesm12@gmail.com>
Date:   Sun Sep 12 03:01:37 2021 -0600

    Merge branch 'development' into shitcan-savedflags

commit bd647afe92
Merge: 69f17ef2 0e12f5e7
Author: Video <videogamesm12@gmail.com>
Date:   Sun Sep 12 02:50:39 2021 -0600

    Merge branch 'development' into FS-215

commit 69f17ef2d7
Merge: ee1b27fa aebe1ace
Author: Video <videogamesm12@gmail.com>
Date:   Sun Sep 12 02:01:56 2021 -0600

    Merge branch 'development' into FS-215

commit ee1b27fa0d
Merge: 2bdf14f3 0a9b95bf
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Sep 11 01:24:00 2021 +0100

    Merge branch 'development' into FS-215

commit 2d18d461fe
Merge: a4c81f20 0a9b95bf
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Sep 11 01:23:44 2021 +0100

    Merge branch 'development' into shitcan-savedflags

commit 2bdf14f38c
Merge: f6d46b61 44ff621d
Author: Video <videogamesm12@gmail.com>
Date:   Mon Sep 6 15:26:13 2021 -0600

    Merge branch 'development' into FS-215

commit a4c81f202c
Merge: 0d09c3a5 23caa4e8
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Sep 4 01:23:06 2021 +0100

    Merge branch 'development' into shitcan-savedflags

commit f6d46b6178
Merge: ee804d52 23caa4e8
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sat Sep 4 01:07:33 2021 +0100

    Merge branch 'development' into FS-215

commit ee804d52ff
Author: Video <videogamesm12@gmail.com>
Date:   Fri Sep 3 12:52:15 2021 -0600

    Makes [Discord] a hyperlink (FS-215)

    I've decided to overhaul the implementation of DiscordToMinecraftListener to make it more easily workable. This overhaul allows me to implement FS-215 more easily.

commit 0d09c3a550
Merge: e2ccd14e 4c3f188b
Author: Ryan <Wild1145@users.noreply.github.com>
Date:   Sun Aug 29 20:09:03 2021 +0100

    Merge branch 'development' into shitcan-savedflags

commit e2ccd14eb3
Author: Video <videogamesm12@gmail.com>
Date:   Fri Aug 27 16:54:55 2021 -0600

    Unsaves SavedFlags
2021-11-29 02:44:23 -07:00
Video 8cbfde8bbc
Merge branch 'development' into FS-37 2021-11-29 02:41:49 -07:00
Video a42cb6aff9
Merge pull request #125 from AtlasMediaGroup/shitcan-savedflags
Shitcans SavedFlags
2021-11-29 02:41:34 -07:00
Video 5849947c6b This should fix it 2021-11-29 02:35:36 -07:00
Video 01fdf766ee
Merge branch 'development' into shitcan-savedflags 2021-11-23 09:28:48 -07:00
Video afe755f5c1
Merge branch 'development' into FS-7 2021-11-23 09:26:59 -07:00
Video 5f97e68e0e fuck it, it works 2021-11-23 09:26:49 -07:00
Video 1b5bbd1c05
Merge branch 'development' into FS-273 2021-11-23 09:16:21 -07:00
Video 2ecfb88604
Merge pull request #130 from AtlasMediaGroup/FS-215
Makes [Discord] a hyperlink (FS-215)
2021-11-23 09:15:16 -07:00
Video 8356e831a5 Redundancy fix and better protection system 2021-11-23 09:11:16 -07:00
Video ab00cb840f
Merge branch 'development' into FS-273 2021-11-23 03:31:45 -07:00
Video bb2ddf1129
Merge branch 'development' into FS-215 2021-11-23 03:31:19 -07:00
Video bba5ec922b
Merge branch 'development' into FS-37 2021-11-23 03:31:13 -07:00
Video 58c21bb1aa
Merge branch 'development' into shitcan-savedflags 2021-11-23 03:30:48 -07:00
Video f190bbeac1 FS-292 2021-11-23 00:27:57 -07:00
Video 42143c1163
Merge pull request #168 from AtlasMediaGroup/main
merge down into development
2021-11-22 12:35:18 -07:00
Ryan 6453e4efca
Merge pull request #145 from AtlasMediaGroup/RELEASE-2021.09
Release 2021.09
2021-11-22 18:43:06 +00:00
Paldiu 9155ac90b5
Official Release 2021-11-22 12:29:54 -06:00
Video 1e1367d08f Bump to RC03 2021-11-13 02:58:36 -07:00
Video 3f690e2ca1
Merge pull request #167 from AtlasMediaGroup/whoops
Fixes an oopsie I made whilst sleep deprived
2021-11-13 02:48:51 -07:00
Video abfa3b977c Whoops
This commit fixes 2 things:
1. A redundant check that was completely unnecessary
2. A loophole in my original bugfix commit I didn't initially discover until afterwards which enables players to do the same thing except with right clicking instead

The block inspector should be completely rewritten in the future, but for now it works.
2021-11-13 02:35:30 -07:00
Telesphoreo a395197305 Actually generate a pom.xml for Maven publication 2021-10-17 14:51:05 -05:00
Telesphoreo b5b71f8bb2 Update workflow 2021-10-17 14:19:33 -05:00
Telesphoreo c592b1f141 Don't even know why these are here 2021-10-09 21:34:16 -05:00
Telesphoreo f0ba148b81 Fix not being able to sync the project despite being able to build it 2021-10-09 21:16:20 -05:00
Telesphoreo a8826c22cc Not sure we need these repos anymore 2021-10-09 19:55:15 -05:00
Telesphoreo 17629f9366 Oop 2021-10-09 19:46:27 -05:00
Telesphoreo 725375a597 Merge branch 'development' of https://github.com/TotalFreedomMC/TotalFreedomMod into development 2021-10-09 19:42:13 -05:00
Telesphoreo 30fb1ebbd5 Fix Gradle build so you don't have to have Git 2021-10-09 19:42:11 -05:00
Telesphoreo 78e85787e6
Delete SECURITY.md 2021-10-09 19:21:51 -05:00
Telesphoreo 2636f2c768
Update README.md 2021-10-09 19:21:22 -05:00
Video 68adaed997
Merge branch 'development' into FS-37 2021-10-09 00:09:24 -06:00
Video ecce62f6b4
Merge branch 'development' into FS-273 2021-10-09 00:01:22 -06:00
Telesphoreo 22278822fe Update this 2021-10-08 18:02:39 -05:00
Telesphoreo 12cf195e55 TotalFreedomMod 7.0.0 2021-10-08 17:54:21 -05:00
Video cf9fdc6fe4
Merge branch 'development' into FS-215 2021-10-08 01:43:33 -06:00
Paldiu a728ec24d4
Merge pull request #156 from AtlasMediaGroup/critical-inspect-bugfix
Critical Bugfix
2021-10-04 17:59:10 -05:00
Video 74a71b1843 Important bugfix
It appears someone had an extremely big brain moment.
2021-10-04 16:02:39 -06:00
Ryan 4d469cdc0a
Move from Java 16 to Java 17 (#149)
* Move from Java 16 to Java 17

* Update java17-maven.yml
2021-10-03 15:57:47 +01:00
Ryan Wild 4c287ca9b8
Bump to RC02 2021-10-03 15:50:33 +01:00
Video 912bc1a1e4
Merge pull request #154 from AtlasMediaGroup/development
Development
2021-10-03 07:02:37 -06:00
Video a598c933ec
Merge pull request #151 from AtlasMediaGroup/FS-421
Two fixes (FS-421)
2021-10-03 06:52:45 -06:00
Video 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
Telesphoreo 1906933ec8 Fix a few checkstyle warnings 2021-10-01 03:26:50 -05:00
Telesphoreo d94011ce38 Styling changes for checkstyle 2021-10-01 03:06:26 -05:00
Telesphoreo fe9ade1217 look at the top of his head oh no no no no 2021-10-01 02:19:27 -05:00
Telesphoreo 6e3dd60b99 Java 17 🎉 2021-10-01 02:14:23 -05:00
Telesphoreo 5a3f0a4de1 Update CoreProtect 2021-10-01 01:46:58 -05:00
Video 387ea6f71e
Merge branch 'development' into FS-215 2021-10-01 00:35:12 -06:00
Telesphoreo b376a8c8e7 Fix shading of bStats 2021-10-01 01:29:07 -05:00
Telesphoreo 761d07b869 Reimplement checkstyle and formatting 2021-10-01 01:03:36 -05:00
Telesphoreo 2e6b990e33 Add codestyle and fix formatting 2021-10-01 00:21:50 -05:00
Telesphoreo a1f1e4ccc0 In sync with AMG 2021-10-01 00:17:08 -05:00
Telesphoreo e9839b714f This should not have been removed 2021-09-30 23:51:07 -05:00
Telesphoreo 13480eeb63 e 2021-09-30 22:16:34 -05:00
Telesphoreo f294eaf10a a 2021-09-30 22:12:03 -05:00
Telesphoreo 8efe844640 Update to use Nexus 2021-09-30 22:08:26 -05:00
Telesphoreo 0df93530f1
Update build.gradle 2021-09-30 14:36:32 -05:00
Telesphoreo f9dfce8368
Update some dependencies 2021-09-30 14:32:18 -05:00
Telesphoreo e336df27c6
Delete pom.xml 2021-09-29 19:09:12 -05:00
Telesphoreo 88bdeeaf9f
Delete dependabot.yml 2021-09-29 19:08:25 -05:00
Telesphoreo b61693b2ab
Merge pull request #312 from TotalFreedomMC/dependabot/maven/development/com.sk89q.worldguard-worldguard-bukkit-7.0.6
Bump worldguard-bukkit from 7.0.4 to 7.0.6
2021-09-29 19:07:54 -05:00
Telesphoreo afef76efd7
Merge pull request #314 from TotalFreedomMC/dependabot/maven/development/org.spigotmc-spigot-1.17.1-R0.1-SNAPSHOT
Bump spigot from 1.16.5-R0.1-SNAPSHOT to 1.17.1-R0.1-SNAPSHOT
2021-09-29 19:07:34 -05:00
Telesphoreo 9fe3227f1a
Merge pull request #313 from TotalFreedomMC/dependabot/maven/development/net.dv8tion-JDA-4.3.0_331
Bump JDA from 4.2.1_255 to 4.3.0_331
2021-09-29 19:07:13 -05:00
Telesphoreo 512130ec52
Merge pull request #315 from TotalFreedomMC/dependabot/maven/development/commons-io-commons-io-2.11.0
Bump commons-io from 2.8.0 to 2.11.0
2021-09-29 19:07:01 -05:00
dependabot[bot] 5bd7d6fdb4
Bump JDA from 4.2.1_255 to 4.3.0_331
Bumps JDA from 4.2.1_255 to 4.3.0_331.

---
updated-dependencies:
- dependency-name: net.dv8tion:JDA
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-29 23:21:08 +00:00
Telesphoreo f4fe50fca0 Fix compile issues 2021-09-29 18:20:58 -05:00
dependabot[bot] f37dce7da6
Bump worldguard-bukkit from 7.0.4 to 7.0.6
Bumps worldguard-bukkit from 7.0.4 to 7.0.6.

---
updated-dependencies:
- dependency-name: com.sk89q.worldguard:worldguard-bukkit
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-29 23:20:55 +00:00
dependabot[bot] 8c914ce3d1
Bump spigot from 1.16.5-R0.1-SNAPSHOT to 1.17.1-R0.1-SNAPSHOT
Bumps spigot from 1.16.5-R0.1-SNAPSHOT to 1.17.1-R0.1-SNAPSHOT.

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

Signed-off-by: dependabot[bot] <support@github.com>
2021-09-29 23:16:03 +00:00
Telesphoreo cfd197b14d Update to 1.17
As a consequence, TFM is now behind AMG
2021-09-29 18:11:22 -05:00
dependabot[bot] 8486fa331d
Bump commons-io from 2.8.0 to 2.11.0
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>
2021-09-29 19:53:47 +00:00
Telesphoreo eaa26f9832 Merge from upstream 2021-09-29 14:50:04 -05:00
Wild1145 e122c4c5fa Bump to 2021.09-RC01 Release 2021-09-19 17:32:05 +01:00
dependabot[bot] 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
Ryan d814853036
Merge branch 'development' into FS-273 2021-09-12 13:49:05 +01:00
Ryan a1ecf88109
Merge branch 'development' into FS-215 2021-09-12 13:48:59 +01:00
Ryan 5a6a5ff75d
Merge branch 'development' into FS-7 2021-09-12 13:48:50 +01:00
Ryan fdba119d5d
Merge branch 'development' into shitcan-savedflags 2021-09-12 13:48:44 +01:00
Ryan 087b8dd7ea
Merge branch 'development' into FS-37 2021-09-12 13:48:21 +01:00
dependabot[bot] 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
dependabot[bot] 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
Video 3818aab454
Merge branch 'development' into FS-37 2021-09-12 03:04:08 -06:00
Video 61857dd06f
Merge branch 'development' into shitcan-savedflags 2021-09-12 03:01:37 -06:00
Video bd647afe92
Merge branch 'development' into FS-215 2021-09-12 02:50:39 -06:00
dependabot[bot] 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
Video 69f17ef2d7
Merge branch 'development' into FS-215 2021-09-12 02:01:56 -06:00
Video aebe1acec2
Merge pull request #136 from AtlasMediaGroup/multiple-birds-one-stone
Multiple fixes, one commit
2021-09-12 01:57:32 -06:00
Video 938b3aa630
Merge branch 'development' into multiple-birds-one-stone 2021-09-11 20:53:16 -06:00
dependabot[bot] 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
dependabot[bot] 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
dependabot[bot] 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
dependabot[bot] 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
Ryan caeda219fa
Merge branch 'development' into FS-37 2021-09-11 15:26:37 +01:00
Ryan e50101df43
Merge branch 'development' into multiple-birds-one-stone 2021-09-11 15:24:52 +01:00
Ryan ee1b27fa0d
Merge branch 'development' into FS-215 2021-09-11 01:24:00 +01:00
Ryan 6ca61d9c6c
Merge branch 'development' into FS-7 2021-09-11 01:23:52 +01:00
Ryan 2d18d461fe
Merge branch 'development' into shitcan-savedflags 2021-09-11 01:23:44 +01:00
Ryan 47e6386907
Merge branch 'development' into FS-273 2021-09-11 01:23:13 +01:00
Ryan 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
Video fedf80b834
Merge branch 'development' into FS-7 2021-09-10 01:39:16 -06:00
Video 2bdf14f38c
Merge branch 'development' into FS-215 2021-09-06 15:26:13 -06:00
Video b1062fbb6c
Merge branch 'development' into FS-273 2021-09-06 14:39:32 -06:00
Video f00f075551
Merge branch 'development' into multiple-birds-one-stone 2021-09-06 14:38:42 -06:00
dependabot[bot] 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
Video 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
Video 3ca9835257
Merge branch 'development' into FS-37 2021-09-06 01:16:04 -06:00
Video f69feed469 fixed 2021-09-06 01:14:21 -06:00
Video 8253f94ac4
Merge branch 'development' into FS-273 2021-09-06 01:12:00 -06:00
Video 54cb0cfac4
FS-409 (#124)
Co-authored-by: Ryan <Wild1145@users.noreply.github.com>
2021-09-05 14:51:43 +01:00
Ryan a4c81f202c
Merge branch 'development' into shitcan-savedflags 2021-09-04 01:23:06 +01:00
Ryan da82b27016
Merge branch 'development' into FS-37 2021-09-04 01:07:55 +01:00
Ryan daf0126f45
Merge branch 'development' into FS-273 2021-09-04 01:07:39 +01:00
Ryan f6d46b6178
Merge branch 'development' into FS-215 2021-09-04 01:07:33 +01:00
Ryan a2d11d4b93
Merge branch 'development' into FS-7 2021-09-04 01:07:28 +01:00
Ryan 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
Video a51f5c9bbf FS-273 2021-09-03 13:53:33 -06:00
Video ee804d52ff Makes [Discord] a hyperlink (FS-215)
I've decided to overhaul the implementation of DiscordToMinecraftListener to make it more easily workable. This overhaul allows me to implement FS-215 more easily.
2021-09-03 12:52:15 -06:00
Video dc490659c1 Begins implementing FS-7
should be good enough, but feedback would be lovely
2021-09-03 00:07:20 -06:00
Ryan 0d09c3a550
Merge branch 'development' into shitcan-savedflags 2021-08-29 20:09:03 +01:00
dependabot[bot] 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
Video e2ccd14eb3 Unsaves SavedFlags 2021-08-27 16:54:55 -06:00
Video af1df22812
Merge branch 'development' into FS-37 2021-08-26 23:05:58 -06:00
Ivan f380898bb7
yo remove my name (#123)
Co-authored-by: Ryan <Wild1145@users.noreply.github.com>
2021-08-26 16:22:08 +01:00
Ryan 464ed85f1b
Update java16-maven.yml 2021-08-26 16:18:58 +01:00
Ryan 7dd235b166
Update java11-maven.yml 2021-08-26 16:18:49 +01:00
Ryan 1474a80875
Merge branch 'development' into FS-37 2021-08-26 13:26:44 +01:00
Ryan f45466ee24
Create java16-maven.yml 2021-08-26 13:01:20 +01:00
Ryan d70b7bbec2
Split out Java 11 and Java 16 for faster runs 2021-08-26 13:00:19 +01:00
dependabot[bot] 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
Ryan 77fd4ff66a
Merge branch 'development' into FS-37 2021-08-21 21:34:04 +01:00
Ryan d901cbaa81
Update pom.xml (#121)
* Update pom.xml

* Fix version from re-upload
2021-08-21 21:25:56 +01:00
Wild1145 538ed7020d Merge branch 'development' of https://github.com/AtlasMediaGroup/TotalFreedomMod into development 2021-08-21 15:36:32 +01:00
Wild1145 18e6ef16be Merge branch 'main' of https://github.com/AtlasMediaGroup/TotalFreedomMod into development 2021-08-21 15:36:26 +01:00
dependabot[bot] 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
Ryan 2eb6cc0036
Correct CoreProtect POM Version (#108)
Co-authored-by: Video <videogamesm12@gmail.com>
2021-08-18 23:45:56 +01:00
Ryan 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
dependabot[bot] 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
Ryan 7657ae1928
Fix Dependabot to target the right branch and open all PR (#106) 2021-08-17 19:28:14 +01:00
Ryan 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
Video 33aca2a482
Merge branch 'development' into FS-37 2021-08-10 22:38:51 -06:00
Video 0582c2e5be
Merge pull request #94 from AtlasMediaGroup/FS-381
Enables Lava Damage by default (FS-381)
2021-08-10 22:38:24 -06:00
Ryan 159eda73a1
Merge branch 'development' into FS-37 2021-08-10 17:34:12 +01:00
Ryan 101987cc17
Merge branch 'development' into FS-381 2021-08-10 17:34:03 +01:00
Video 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
Ryan 3be0ffba4e
Merge branch 'development' into FS-381 2021-08-10 17:31:26 +01:00
Ryan da2d25252b
Merge branch 'development' into FS-37 2021-08-10 17:31:13 +01:00
Video 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
Video 3f89f3f48e Shut the fuck up Codacy 2021-08-10 06:58:04 -06:00
Video 871acc2eeb Actually, let's make it possible to disable it if needed 2021-08-10 04:13:23 -06:00
Video a9c9979b1c FS-218 2021-08-10 04:06:41 -06:00
Video fc3fe871b3 FS-381 2021-08-05 00:43:01 -06:00
Video e99aaa2eb4 Fixes FS-37
Fixes an oversight introduced in 76bb2d08ac in which the configuration is loaded twice.
2021-08-05 00:32:23 -06:00
Ryan Wild 62529a6171
Merge branch 'main' of https://github.com/AtlasMediaGroup/TotalFreedomMod into development 2021-07-17 13:18:18 +01:00
Paldiu 0caf972248
Merge pull request #90 from AtlasMediaGroup/FS-309
2 bugfixes, one command (FS-309)
2021-07-16 09:05:57 -05:00
Ryan a37364d07e
Correct JDK Version in README (#92)
It's currently wrong so needed updating.
2021-07-16 11:43:46 +01:00
Video 4ac9844534
Merge branch 'development' into FS-309 2021-07-12 22:53:44 -06:00
Ryan 939e98b759
Update badges (#88)
Remove TravisCI
Add Github Maven Build Action 
Add CodeQL Badge
2021-07-08 20:48:41 +01:00
Ryan d99f3e657b
Let's actually do dependency uplifts (#89) 2021-07-08 20:48:27 +01:00
Ryan 92bbb62379
Temporarily re-naming /clearchat to /cleanchat (#91)
* Temporarily re-naming /clearchat to /cleanchat

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

* Shhh I know I'm an idiot
2021-07-05 23:29:22 +01:00
Telesphoreo fc37633dfd this'll have to do 2021-06-30 22:01:11 -05:00
Telesphoreo 32ade2dece this took all day and the build number still doesnt work 2021-06-30 21:48:57 -05:00
Telesphoreo 92394a5b30 Fix all build warnings 2021-06-30 19:38:20 -05:00
Telesphoreo f82089db64 a 2021-06-30 19:09:38 -05:00
Telesphoreo 4afb31cb62
Update README.md 2021-06-30 17:11:32 -05:00
Telesphoreo ab584a5693 updates 2021-06-30 17:08:07 -05:00
Telesphoreo b5137763b5 Remove some bloat, not sure if it still compiles 2021-06-30 03:41:31 -05:00
Telesphoreo 01119422fb e 2021-06-30 03:20:35 -05:00
Telesphoreo ccdbea2ffa do i need to explain everything 2021-06-30 03:17:16 -05:00
Telesphoreo 9d1fa20e55 oops 2021-06-30 03:16:22 -05:00
Telesphoreo 2eccb30731 start working on build.properties 2021-06-30 03:15:23 -05:00
Telesphoreo 431bff1b75 e 2021-06-30 02:34:56 -05:00
Telesphoreo e89c545906 gradle?? 2021-06-30 02:31:44 -05:00
Telesphoreo f262638453 update some dependencies 2021-06-30 00:10:39 -05:00
Telesphoreo 82b4873b19 fix some bugs 2021-06-30 00:01:06 -05:00
Video e4a0943af2
Merge branch 'development' into FS-309 2021-06-29 22:00:13 -06:00
Video 36bd8c0fad 2 bugfixes
- Fixes FS-309 by checking if a material provided is actually a block before caging someone.
- Fixes a bug that causes the command to throw an ArrayOutOfBoundsException if one were to use a command like `/cage player1 block`.
2021-06-29 21:52:46 -06:00
Telesphoreo d323807675 Move it back to this 2021-06-29 21:36:06 -05:00
Telesphoreo 692bb5e2ef Initial commit 2021-06-29 17:52:11 -05:00
Nathan Curran d77f59435b
Use 'getPlayer()' to prevent NPE (FS-159) (#87)
Co-authored-by: Ryan <Wild1145@users.noreply.github.com>
2021-06-26 15:06:15 +01:00
Video a08fd2afb6
Adds /seed command (FS-225) (#85)
* Create Command_seed.java

* Addresses requested changes

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

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

* Re-apply Fleek's change

* Removed the shitty Github auto formatted white space.

* Update to the maven build in Github workflows

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

* Update maven.yml

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

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

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

* Removes hubworld entriely

* Configurable blacklists for tag, muted commands, and wildcard

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

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

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

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

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

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

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

* Removes hubworld entriely

* Configurable blacklists for tag, muted commands, and wildcard

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

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

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

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

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

Updating the full security matrix.

* Yay for consistency

* I hate Markdown / Markup / Whatever the fuck this is.
2021-05-04 13:30:17 +01:00
Ryan 7258d7f1bf
Merge pull request #58 from AtlasMediaGroup/FS-221
Remove a number of wipe commands we don't want anyway
2021-05-04 12:59:31 +01:00
Video 8a504bff07
Merge branch 'development' into FS-221 2021-05-03 22:15:20 -06:00
Ryan c00e64f736
Merge pull request #54 from VideoGameSmash12/FS-137
Assistant executive discord integration (FS-137)
2021-05-03 20:14:35 +01:00
Ryan 9e73db0f24
Merge branch 'development' into FS-137 2021-05-03 19:46:59 +01:00
Ryan 951c061d77
Merge pull request #57 from AtlasMediaGroup/Elmon11-patch-2
grammar fix
2021-05-03 19:46:37 +01:00
Ryan 579d3e0719
Merge branch 'development' into Elmon11-patch-2 2021-05-03 19:13:39 +01:00
Ryan 9777733d04
Merge pull request #53 from VideoGameSmash12/ride-typo
Fixes typo in /ride
2021-05-03 19:13:26 +01:00
Ryan 05e118dcb4
Merge branch 'development' into ride-typo 2021-05-03 18:21:16 +01:00
Ryan 7a0d6f49f4
Merge pull request #52 from VideoGameSmash12/FS-156
Fixes typo in the Lightning Rod's name (FS-156)
2021-05-03 18:20:20 +01:00
Ryan 19f1b7f6bd
Merge branch 'development' into Elmon11-patch-2 2021-05-03 15:45:54 +01:00
Ryan b12afbdc1f
Merge branch 'development' into FS-137 2021-05-03 15:45:45 +01:00
Ryan 49e77d4f93
Merge branch 'development' into ride-typo 2021-05-03 15:45:36 +01:00
Ryan eb9107bedf
Merge branch 'development' into FS-156 2021-05-03 15:45:25 +01:00
Ryan 951c699ed0
Remove a number of wipe commands we don't want anyway
We shouldn't be wiping any of this data within the server now anyway so let's not tempt fate again.
2021-05-03 15:44:05 +01:00
Ryan 9e676143b8
2021.04 Release
Formal Release for 2021.04
2021-05-03 15:19:42 +01:00
Elmon11 6895e46375
Merge branch 'development' into ride-typo 2021-05-02 14:15:15 +02:00
Ryan c8b20bc255
RC2 Release 2021-05-02 13:12:37 +01:00
Elmon11 1cf46c7337
grammar fix 2021-05-02 14:03:48 +02:00
Nathan Curran f240a15af3
Force the count to be zero if the value is negative (FS-216) (#56) 2021-05-01 23:58:03 +10:00
Ryan 6073712fdf
Bump Version
Bump Version to 2021.04-RC01
2021-04-26 20:46:11 +01:00
Video 407b63e48b Fixes FS-137 2021-04-26 01:23:24 -06:00
Video be562fe722 ok, done (FS-156) 2021-04-26 00:58:28 -06:00
Video 928ab41d7f Update Command_ride.java 2021-04-26 00:37:16 -06:00
Nathan Curran d11d55b218
Vanished admins are no longer being counted (FS-148) (#41) 2021-04-24 14:06:28 +10:00
Video debb95fb4c
video dev man (#51) 2021-04-24 13:03:11 +10:00
Nathan Curran b9f7ab3ec3
Change punishment from kicking to muting on spam (FS-97) (#45) 2021-04-22 21:54:29 +10:00
Video 2cdf1e66a6
Disables block gravity and makes it togglable (FS-89) (#50)
* Disables block gravity by default (FS-89)

* Combine these checks as Codacy ever so kindly suggested
2021-04-19 17:34:36 +10:00
Nathan Curran 20c2c4c96e
Delete /wipeuserdata (FS-196) (#49) 2021-04-15 22:07:22 +10:00
Video d5238150d0
Curse be gone (#47)
Co-authored-by: Ryan <Wild1145@users.noreply.github.com>
Co-authored-by: Nathan Curran <30569566+Focusvity@users.noreply.github.com>
2021-04-13 14:13:47 +10:00
Paldiu 64a4e70c41
Merge pull request #48 from AtlasMediaGroup/abhi-fix
Strip role/user mentions (FS-191)
2021-04-12 16:45:13 -05:00
abhiram 0c2f0a714c [+] Fix #replace() 2021-04-12 16:31:48 +05:30
abhiram 4c67553bdd [+] Whitespace change! 2021-04-12 16:26:06 +05:30
abhiram ffab5e3c12 [+] Allman style formating 2021-04-12 16:01:31 +05:30
abhiram f7556a4861 [+] Remove redundant comments 2021-04-12 15:59:27 +05:30
abhiram 385fc77771 [+] Done all the requested changes! 2021-04-12 15:44:51 +05:30
abhiram b852ea1822 [+] Update my account in developers list 2021-04-12 14:44:27 +05:30
abhiram 4a5a3a1a2d [+] Fix FS-191 2021-04-12 13:57:58 +05:30
Ryan 37762e5470
Merge pull request #39 from AtlasMediaGroup/Elmon11-patch-2
clearinv option in smite (FS-161)
2021-04-11 22:15:26 +01:00
Ryan 85d90090c8
Merge branch 'development' into Elmon11-patch-2 2021-04-11 18:41:54 +01:00
Ryan 09930c2d9a
Merge pull request #43 from VideoGameSmash12/development
Consistency fixes (across 46 commands), additional CoreProtect integration (/dispfill and /setlever), and a critical bugfix (/setlever) (FS-162)
2021-04-10 12:56:32 +01:00
Ryan 7ae1ab035a
Merge branch 'development' into development 2021-04-10 12:50:52 +01:00
Ryan 2bd1787663
Updated supported versions for TFM. 2021-04-10 12:45:56 +01:00
Ryan 765b7dcc4b
Merge branch 'development' into development 2021-04-10 12:39:47 +01:00
Ryan 091381a076
Merge pull request #44 from AtlasMediaGroup/FS-145
Update JDA version and location (FS-145)
2021-04-10 12:39:08 +01:00
Nathan Curran 27dfd71b2e
Update JDA version and location (FS-145) 2021-04-09 21:20:33 +10:00
Video 16e06bd932 Forgot I had this there 2021-04-07 19:45:03 -06:00
Video a33c310757 Fucking shit 2021-04-07 19:41:13 -06:00
Video df21bdfa7e Other bug fixes
Credit to Fleek for some of the code here.

Bugs that were fixed:
* [Media] showing up with an extra space at the beginning of blank messages with attachments
* Admin chat using incorrect colors for its ranks in messages from Discord to Minecraft
* Admin notes not sending to admins, only admin impostors
2021-04-07 19:40:19 -06:00
Nathan Curran d7e2c0da42
Merge branch 'development' into Elmon11-patch-2 2021-04-07 11:52:16 +10:00
Video a7529b41fb Oops 2021-04-05 18:08:24 -06:00
Video c4fce3f0f9 Right, so this change applies only to commands. For the sake of code consistency, I tried to change as many as possible to use FreedomCommand.msg instead of CommandSender.sendMessage for their messages. Here are a list of the files containing those changes:
* Command_adminworld.java
* Command_adventure.java
* Command_banip.java
* Command_blockedit.java
* Command_blockpvp.java
* Command_cage.java
* Command_cartsit.java
* Command_clearchat.java
* Command_clearinventory.java
* Command_commandlist.java
* Command_creative.java
* Command_deop.java
* Command_deopall.java
* Command_dispfill.java
* Command_doom.java
* Command_gcmd.java
* Command_hubworld.java
* Command_inspect.java
* Command_list.java
* Command_lockup.java
* Command_manageshop.java
* Command_manuallyverify.java
* Command_masterbuilderworld.java
* Command_mbconfig.java
* Command_moblimiter.java
* Command_mp44.java
* Command_mute.java
* Command_nickfilter.java
* Command_op.java
* Command_opall.java
* Command_opme.java
* Command_potion.java (Also corrected the inconsistent "player not found" message's color)
* Command_rank.java
* Command_ride.java
* Command_saconfig.java
* Command_scare.java
* Command_setplayerlimit.java
* Command_settotalvotes.java
* Command_smite.java
* Command_spectator.java
* Command_survival.java
* Command_unblockcmd.java
* Command_uncage.java
* Command_unmute.java
* Command_verifynoadmin.java

Here are some commands I added functionality to:
* Command_dispfill.java: Added some code that hooks into the CoreProtect API to log the items being removed from and added into the dispensers.
* Command_setlever.java: Added some code that hooks into the CoreProtect API to log the levers being interacted with.

Here's a command I fixed a critical bug in:
* Command_setlever.java
2021-04-05 17:13:26 -06:00
Ryan 27f5f18962
FS-143 Resolution (#42)
* Bump to patch version.

* Fixes FS-143

Various changes to make it work better with logging and things like that.
2021-04-06 07:11:12 +10:00
Elmon11 dca5e30291
Actually display assistant exec in game (#37)
* Actually display assistant exec in game

* Update RankManager.java

* Update ConfigEntry.java

* Update FUtil.java

Co-authored-by: Nathan Curran <30569566+Focusvity@users.noreply.github.com>
2021-04-04 22:24:06 +10:00
TFTWPhoenix 09a435053e
Merge pull request #40 from AtlasMediaGroup/phoenix-patch-1
Remove /premium
2021-03-31 17:12:56 -05:00
TFTWPhoenix 14309275fb
Remove /premium 2021-03-31 15:16:01 -05:00
Ryan 2375e92d90
Merge pull request #36 from AtlasMediaGroup/tfm-bugfix-001
FS-143
2021-03-26 15:43:22 +00:00
Paldiu 97672c2fff Update DiscordToAdminChatListener.java
This is the only way we can load media after [Discord] and [Formatting] without rewriting the method
2021-03-22 09:57:09 -05:00
Paldiu 5837b05a35 Merge branch 'tfm-bugfix-001' of https://github.com/AtlasMediaGroup/TotalFreedomMod into tfm-bugfix-001 2021-03-21 14:02:51 -05:00
Paldiu b3b68ebd13 Switch to Allman Formatting 2021-03-21 14:02:43 -05:00
Elmon11 2dbbb5c262
Intellij says this is fine so if it breaks again gg 2021-03-21 19:07:07 +01:00
Elmon11 e45655edbb
im a clown 2021-03-21 18:33:38 +01:00
Elmon11 9713fcabd6
Should work fingers crossed 2021-03-21 18:25:28 +01:00
Elmon11 dc10c40578
noclear option in smite 2021-03-21 13:57:24 +01:00
Nathan Curran db3c190b2b
Merge branch 'development' into tfm-bugfix-001 2021-03-21 16:11:13 +11:00
Paldiu 2725857364
Merge pull request #38 from AtlasMediaGroup/FS-147
Fix ban expiration (FS-147)
2021-03-20 22:14:10 -05:00
Nathan Curran 9f291f675c
Use 'toEpochMilli()' instead (FS-147) 2021-03-21 13:44:55 +11:00
Nathan Curran 561c192c27
Fix bans not expiring (FS-147) 2021-03-21 12:21:15 +11:00
Ryan 086dec28ac
Merge branch 'development' into tfm-bugfix-001 2021-03-19 23:31:31 +00:00
Paldiu b03870c0aa SQL Fixes
:)
2021-03-19 10:39:58 -05:00
Ryan f5c08cd28b
Merge pull request #34 from AtlasMediaGroup/2021.02-release
Bump version to 2021.02 Release
2021-03-19 14:26:02 +00:00
Paldiu 2a87271642 Should fix FS-143 2021-03-19 08:58:29 -05:00
Ryan 3b57aec0e8
Merge branch 'development' into 2021.02-release 2021-03-18 23:57:10 +00:00
Ryan efac65bc76
Merge pull request #35 from AtlasMediaGroup/FS-58
Fix checkstyle & other formatting
2021-03-18 23:17:25 +00:00
Ryan Wild 9c8fe6c590
Fix checkstyle & other formatting
This should help clear a lot of the "Security" alerts resolving FS-58
2021-03-18 22:42:52 +00:00
Ryan 9f52cdf753
Merge branch 'development' into 2021.02-release 2021-03-18 22:28:53 +00:00
Paldiu 216234ea01
Merge pull request #32 from AtlasMediaGroup/FS-33
Properly fix FS-33
2021-03-18 16:20:06 -05:00
Nathan Curran 881dead392
Merge branch 'development' into 2021.02-release 2021-03-19 08:04:36 +11:00
Ryan ff2bca26aa
Merge branch 'development' into FS-33 2021-03-18 19:58:10 +00:00
Ryan Wild 89ad934aa6
Bump version to 2021.02 Release 2021-03-18 19:18:11 +00:00
Paldiu d0a195647c
Merge pull request #33 from AtlasMediaGroup/FS-93
Fixed permission not setting for new players (FS-93)
2021-03-17 09:06:45 -05:00
Nathan Curran eb05b05042
Fixed FS-93
- Players no longer need to relog, just need to be opped to get permissions.
- Removed redundant PlayerJoinEvent code as it's already been executed (See RankManager class).
2021-03-16 20:21:31 +11:00
Nathan Curran b9c1970d20
Update player's permission when opping. 2021-03-16 19:56:29 +11:00
Nathan Curran 9eca9ac5b2
Remove double storage
It is unnecessary as the information is already stored in a map (Username, IPs)
2021-03-08 11:34:48 +11:00
Nathan Curran 5b577fae07
Add myself to developer list 2021-03-07 20:46:30 +11:00
Nathan Curran 452a8755c2
Properly fix FS-33 2021-03-07 20:43:25 +11:00
Ryan Wild 2fb8f224e7
Bump release to 2021.02-RC03 2021-03-06 23:38:46 +00:00
Ryan b6a2c8e021
Merge pull request #29 from AtlasMediaGroup/abhi-test
Added myself to TFM
2021-03-06 20:32:04 +00:00
Ryan f0a25fde0c
Merge branch 'development' into abhi-test 2021-03-06 20:03:19 +00:00
Ryan 4324497831
Merge pull request #31 from AtlasMediaGroup/Wild1145-patch-1
Tell CodeQL we're using Java 11 hopefully
2021-03-06 20:03:02 +00:00
Ryan 14c53b7370
Merge branch 'development' into Wild1145-patch-1 2021-03-06 19:47:48 +00:00
Ryan 0396b8ad86
Merge pull request #30 from AtlasMediaGroup/frontdoor-and-banExpiry-only
fix banning/?? Resolves FS-130
2021-03-06 19:46:57 +00:00
Ryan 8ee7486afc
Merge branch 'development' into frontdoor-and-banExpiry-only 2021-03-06 19:38:01 +00:00
Ryan 694d9614c5
Tell Maven to also build Java 11 for once 2021-03-06 19:28:38 +00:00
Ryan 150e25072a
Tell CodeQL we're using Java 11 hopefully 2021-03-06 19:14:46 +00:00
abhiram 7d990ae2c0 [+] Remove .idea 2021-03-06 23:50:23 +05:30
Paldiu 0dd5a26efa Merge branch 'frontdoor-and-banExpiry-only' of https://github.com/AtlasMediaGroup/TotalFreedomMod into frontdoor-and-banExpiry-only 2021-03-06 12:12:59 -06:00
Paldiu 5c097c83cb Here's to hoping this fixes that stupid ban crap. 2021-03-06 12:00:32 -06:00
abhiram a85dd014a0 Added .idea in gitignore 2021-03-06 13:05:42 +05:30
abhiram 342df43f85 Added myself to TFM 2021-03-06 13:04:36 +05:30
Ryan Wild d4be858c46
2021.02-RC02 Release Bump
Version bump with some Netbeans Config updates to use Java 11 as we should have been.
2021-03-05 21:44:38 +00:00
Ivan ec9a6e0d5b
paldiu did some shit
FS-63 (FrontDoor)
FS-130 (Bans)
2021-03-04 20:37:31 -05:00
Paldiu 9161016f73
Merge branch 'development' into frontdoor-and-banExpiry-only 2021-03-03 11:52:37 -06:00
Paldiu bdd22f8d75
Update month to be 30 days instead of 4 weeks 2021-03-03 12:50:45 -05:00
Paldiu ce103ffd50
Merge pull request #28 from AtlasMediaGroup/abhi-test
fixes of JIRA issues.
2021-03-02 20:45:18 -06:00
abhiram 85c35f25a3 [+] Fix codacy issue 2021-03-03 06:47:22 +05:30
abhiram c29b312101 [+] Remove .idea 2021-03-02 23:11:17 +05:30
Paldiu a4ead85701 add annotations dependency 2021-03-01 23:03:49 -06:00
Paldiu 46273b3301 Revert "SQL PreparedStatement Fixes"
This reverts commit 17347c23a5.
2021-03-01 23:03:13 -06:00
abhiram d6b74a76bb [+] Fix of FS-33 2021-02-28 21:28:20 +05:30
abhiram 6f66957b17 Few fixes for JIRA issues.... 2021-02-28 21:08:39 +05:30
Paldiu 17347c23a5 SQL PreparedStatement Fixes 2021-02-26 15:29:02 -06:00
Paldiu 718748f1a2 Commit Ultimate
ultimate super mega mode power upgrade
2021-02-26 15:26:13 -06:00
Ryan Wild 96d1c53ede
First release candidate
Bumping version and build code name for the first release candidate of the 2021.02 release.
2021-02-26 16:53:00 +00:00
Ivan 1293a8aa1e
Merge pull request #26 from AtlasMediaGroup/ivan
Ruh-Roh Raggy!
2021-02-25 17:58:12 -05:00
Ivan 96424694ee fix codacy errors 2021-02-25 17:03:31 -05:00
Ivan 0367d9fd3a my end of the bargain 2021-02-25 16:42:30 -05:00
Ivan 3b666f1fde
Merge pull request #25 from AtlasMediaGroup/Elmon11-patch-1
removing BukkitTelnet from untouchable plugins
2021-02-17 18:25:19 -05:00
Elmon11 ec51cb7408
removing BukkitTelnet from untouchable plugins 2021-02-17 22:03:35 +01:00
Ryan 4023394562
Merge pull request #24 from AtlasMediaGroup/FS-38
Remove duplicate config
2021-02-14 18:19:30 +00:00
Ryan Wild 5d312a12d4
Remove the duplicates that I can see based off of the recent warn
Heap is entirely removed as it doesn't appear to now be a valid command. The rest are duplicated elsewhere. When in doubt the highest level of restriction was applied.
2021-02-14 18:05:32 +00:00
Ryan Wild b88cdf1250
Re-Base Config against Freedom-01
Ensures all the variables we probably have changed and that run as standard are set, commands that are blocked are updated and anything else I could think of are up to date.
2021-02-14 17:44:57 +00:00
Ryan Wild ebec598120
Fix file permissions 2021-02-06 23:56:15 +00:00
Ryan aa060ea4d8
Update README with security info 2021-02-06 23:42:03 +00:00
Ryan fc3eef4d90
Fixed Travis Build Status 2021-02-06 23:06:15 +00:00
Ryan 44ac012165
Re-adding Travis file based off of the original ones. 2021-02-06 22:44:50 +00:00
Ryan 500d0e1044
Let's start using TravisCI Again
It just makes sense...
2021-02-06 22:43:29 +00:00
Ivan 400a90b385
Merge pull request #21 from AtlasMediaGroup/smartnt-patch-1
Add new developers to util
2021-01-25 21:28:43 -05:00
Ivan b8a741aa58
Add new developers to util
Hopefully this doesn't fuck up this time - last PR my Macbook was having issues with for some reason.
2021-01-25 20:36:58 -05:00
Elmon11 a3929ec07e
Merge pull request #19 from AtlasMediaGroup/permission-changes
merging according to wild's comments
2021-01-17 04:11:31 +01:00
speed 8225daf6f1 permission changes & remove massmurder
resolves FS-69, FS-70, FS-71
2021-01-10 16:23:20 -05:00
Ryan 8dce71eca1
Merge pull request #18 from AtlasMediaGroup/revert-15-sql-fix
Revert "SQL fix"
2021-01-10 20:45:13 +00:00
Ryan a2243abf2d
Revert "SQL fix" 2021-01-10 20:44:57 +00:00
Ryan 009b983c9a
Merge pull request #15 from AtlasMediaGroup/sql-fix
SQL fix
2021-01-10 20:36:57 +00:00
speed 1b3876cffa
Merge branch 'development' into sql-fix 2021-01-10 15:06:40 -05:00
speed ed48ce3a8f
Merge pull request #11 from AtlasMediaGroup/paldiu-local
Removal of Lombok
2021-01-10 15:06:22 -05:00
Paldiu 830daab8f4 Fix Daemon Error
Reflection issue when initializing the daemon; trying to call a constructor with one argument using two arguments.

Removed an unused constructor.
2021-01-08 17:32:54 -06:00
speed 9688827a39 formatting 2021-01-08 10:10:54 -05:00
Paldiu 3464a33678 NPE on Thread.join() possible fix
This bug is hard to decipher mainly due to the thread being terminated somewhere before the thread.join is called. this may be due to the safeClose method defined with serverSocket, but again, I'm not too sure what's up here. This may also be because something failed to execute in one of the try catch statements, causing the thread to never be initialized in the first place.
2021-01-08 00:25:46 -06:00
Paldiu 5754d70d05
Merge branch 'development' into sql-fix 2021-01-07 14:46:13 -05:00
Paldiu fbf2972006 Merge branch 'sql-fix' into paldiu-local 2021-01-07 13:40:59 -06:00
Paldiu aa2836b29a Merge branch 'mbw-fix' into paldiu-local 2021-01-07 13:39:51 -06:00
Paldiu 260368585e reformat 2021-01-07 13:29:47 -06:00
Paldiu 323fd1a031 Should be fine now 2021-01-04 18:27:57 -06:00
Paldiu c7b0f77910 Merge branch 'development' into paldiu-local 2021-01-04 13:14:53 -06:00
speed 7fb6a2f087
Merge pull request #17 from AtlasMediaGroup/Elmon11-patch-1
Fix developer title not showing up on Offline mode servers
2021-01-03 13:47:14 -05:00
Elmon11 e32c2eed15
Update FUtil.java 2021-01-03 19:23:10 +01:00
Elmon11 7afa80c89f
Update FUtil.java 2021-01-03 19:18:14 +01:00
Elmon11 a3cccc7ac0
Update FUtil.java 2021-01-03 19:16:41 +01:00
Elmon11 bc37ed5341
Fix developer title not showing up on Offline mode servers 2021-01-03 19:04:23 +01:00
speed 0a5ce5b9cc fix w/e in mbw 2020-12-31 13:06:05 -05:00
Paldiu a4e23dc03f Codacy Complacency Part 2 2020-12-29 22:14:57 -06:00
Paldiu 7a394e52e4 Codacy complacency 2020-12-29 22:06:12 -06:00
Paldiu 9352a48650 Finalized lombok removal
Finally removed all lomboks, also reduced npath complexity for FreedomCommand.FCommand#execute and removed empty constructor from Discord
2020-12-29 21:37:50 -06:00
Paldiu a849e01ce5
Merge pull request #12 from AtlasMediaGroup/FS-59
admin chat discord formatting (FS-59)
2020-12-29 15:34:48 -05:00
Ryan fd725ca6c5
Merge branch 'development' into paldiu-local 2020-12-28 22:51:44 +00:00
Ryan 0703ea685e
Merge branch 'development' into FS-59 2020-12-28 22:51:21 +00:00
speed 1ba468cbfc
Merge branch 'development' into sql-fix 2020-12-28 17:49:11 -05:00
Ryan 91dc89013c
Merge pull request #14 from AtlasMediaGroup/mojangson-update
Mojangson update
2020-12-28 22:44:20 +00:00
speed 7cdeac451b SQL fix 2020-12-28 17:39:07 -05:00
speed 5b8cf2798e Update pom.xml 2020-12-28 17:05:52 -05:00
speed 98158e0f27 mojangson update 2020-12-28 17:04:14 -05:00
Paldiu c0ac0365eb
Merge pull request #13 from AtlasMediaGroup/Elmon11-patch-1
Make gcmd not work on admins

//MERGE COMMIT:
At least one build check passed, the failing check is irrelevant.
2020-12-28 07:41:58 -05:00
Elmon11 0c60cbc739
Update Command_gcmd.java 2020-12-28 00:18:05 +01:00
Elmon11 402a6be5ad
Make gcmd not work on admins 2020-12-28 00:04:57 +01:00
speed 9d131f0f24 ok codacy 2020-12-26 19:11:15 -05:00
speed b9606fa0e3 admin chat discord formatting (FS-59) 2020-12-26 18:54:15 -05:00
Paldiu d71f5452ad Changed instance of SplittableRandom back to Random
Overridable methods required Random instead of SplittableRandom and caused a build failure in the previous commit. This should fix the build failure.
2020-12-26 10:30:30 -05:00
Paldiu eb9759f2d8 Replaced All Instances of Random With SplittableRandom
SplittableRandom is faster (negligable) than Random and is also able to recursively return new instances of itself for an even more complex pseudo random generator compared to the default Random supplied by Java.
2020-12-25 15:57:10 -05:00
Paldiu dec35f76e4 Minor fix
Switched from a lengthy if else to a ternary.
2020-12-25 15:51:17 -05:00
Paldiu 97edce0a67 Fixes for Codacy;
These fixes are designed to satisfy codacy.

However, codacy reports a NPath Complexity of 649, whereas the current, recommended, and standardized threshold is 200.

This is caused by FreedomCommand#execute(CommandSender, String, String[]);
2020-12-25 15:35:33 -05:00
Paldiu 361aa4ee04 Bugfix on Commit #5c0f77c
A mismatched argument count during constructor initialization in Module_logs.class was fixed in this patch.
2020-12-25 15:20:34 -05:00
Paldiu 5c0f77c7c5 Removal of Lombok
Lombok implementation removal.

I have also gone through and replaced things with inline methods and variables, lambdas, and simplified loops down, removed unnecessary guard clauses, and overall cleaned up every single class. This took a long time, please do remember to follow proper naming conventions, don't include unnecessary guard clauses, follow exception rules and comment rules, and please PLEASE remember to use the DIAMOND OPERATOR rather than just inferring RAW TYPES!!!

Thank you!!
2020-12-25 14:46:43 -05:00
speed 210b0f8b43 unnecessary 2020-12-24 20:07:09 -05:00
speed 585fdb7992 fix verification toggle breaking everything (FS-39) 2020-12-24 19:48:52 -05:00
speed 6d05e9b924
Merge pull request #10 from AtlasMediaGroup/maven-sec
Moved Repo's to HTTPS
2020-12-24 19:33:04 -05:00
Ryan fb314170c1
Moved Repo's to HTTPS 2020-12-24 22:52:35 +00:00
speed 218d720b06
Merge pull request #9 from AtlasMediaGroup/FS-12
Update social links in line with live config
2020-12-24 14:18:33 -05:00
Ryan 7bf97a03c4
Update social links in line with live config
The current server config has these links and those ones commented out. While I do now own them not all of them I'm actively using but thought it'd be good to keep this sync'd up.

Resolves FS-12
2020-12-24 18:36:27 +00:00
speed de496970d9 remove reddit system
jraw free 🦀🦀🦀
2020-12-24 13:09:42 -05:00
speed c8ec171b11 Update Discord.java 2020-12-23 20:13:26 -05:00
speed caf126f543 elmon
fix underscore italic thing
2020-12-23 20:09:57 -05:00
speed a717cce3b5 fix admins being able to see senior commands 2020-12-18 21:43:24 -05:00
speed ce32490b4d Update Module_list.java 2020-12-16 17:46:27 -05:00
Elmon11 5d882d9052
Update Module_list.java 2020-12-16 23:42:44 +01:00
Elmon11 7dfd6c0b8b
Update Module_list.java 2020-12-16 23:37:14 +01:00
Ryan fa5c774f45
Remove developer who has been suspended indefintely. 2020-12-15 20:53:07 +00:00
speed c356ecd168 formatting & rename stuff 2020-12-14 19:05:13 -05:00
SupItsDillon f8ce64d6c3
Merge pull request #8 from SupItsDillon/development
FS-5 Allow the verification system to be enabled / disabled in config (2)
2020-12-14 19:09:57 +00:00
speed 39d5b610a1 Update WorldRestrictions.java 2020-12-12 12:59:19 -05:00
SupItsDillon 50643eb9ff
Update Command_verify.java
ood code again
2020-12-09 16:03:40 +00:00
SupItsDillon 687166e0a4
Update Discord.java
formatting screwed up
2020-12-09 16:00:18 +00:00
SupItsDillon 98ead06355
Update Command_manuallyverify.java
ood file
2020-12-09 15:59:12 +00:00
SupItsDillon cbc3795ef2
Update Command_playerverification.java
i should really keep my files updates
2020-12-09 15:55:45 +00:00
SupItsDillon b9d608222e
Update Command_playerverification.java
fixed codacy issue
2020-12-09 15:48:27 +00:00
SupItsDillon 777a66f8da
Update Discord.java
correct updated file
2020-12-09 15:37:31 +00:00
SupItsDillon 6441deceab
Update Command_playerverification.java
codacy is being fussy
2020-12-08 19:35:02 +00:00
SupItsDillon 1fedb1fad3
Update Discord.java
forgot to change this aswell
2020-12-08 19:28:47 +00:00
SupItsDillon 8b1cef3b83
Update Discord.java
whoops i did change something i didnt want to
2020-12-08 19:26:00 +00:00
SupItsDillon 81ef3d624a
Update Discord.java
cant remember if i changed anything since last commit
2020-12-08 19:17:06 +00:00
SupItsDillon b0c0f17043
Update Command_manuallyverify.java
discord verify enable disable
2020-12-08 19:16:28 +00:00
SupItsDillon fb3cdf3603
Update Command_playerverification.java
discord enable disable verification
2020-12-08 19:15:55 +00:00
SupItsDillon 950c975e8f
Update Command_verify.java
discord verification config
2020-12-08 19:15:17 +00:00
SupItsDillon 79c8ea301d
Update config.yml
config option for discord verification
2020-12-08 16:10:14 +00:00
SupItsDillon 7a11c9062d
Update ConfigEntry.java
config option for verification
2020-12-08 16:09:26 +00:00
SupItsDillon 2037775276
Update Discord.java
stuff to disable or enable discord verification
2020-12-08 16:08:31 +00:00
SupItsDillon 4a3ce64412
Merge pull request #1 from AtlasMediaGroup/development
updated stuff
2020-12-08 16:07:04 +00:00
Ryan 681695150a
Merge pull request #6 from AtlasMediaGroup/Wild1145-patch-1
Block new CoreProtect stuff better
2020-12-05 21:10:27 +00:00
Elmon11 e98682a1af
Delete Command_gsay.java
https://forum.totalfreedom.me/d/114-why-is-gchat-now-gsay-back/13
2020-12-05 22:05:29 +01:00
Ryan 92534640d4
Block new CoreProtect stuff better 2020-12-05 19:01:09 +00:00
speed 695ccd0e71 /list -a
/list -s still exists
2020-12-04 10:37:40 -05:00
speed 0be2aa718f ok 2020-12-03 20:50:30 -05:00
speed b3b9c2ef43 \ 2020-12-03 20:46:10 -05:00
speed 293ea04c56 staff -> admins
* rename everything containing staff back to admin (as requested by ryan i've renamed commands like slconfig to saconfig but left "slconfig" as an alias)
* format almost every file correctly
* a few other improvements
2020-12-03 19:28:53 -05:00
Elmon11 aae1f524ea
updating social and voting links 2020-12-02 22:25:17 +01:00
Ryan 7871acc215
Merge pull request #5 from AtlasMediaGroup/Wild1145-patch-1
Update checkstyle.xml
2020-12-02 20:50:01 +00:00
Ryan 153b87c3b3
Update checkstyle.xml
Think this should fix a load of our new warnings.
2020-12-02 20:40:32 +00:00
Ryan 932fa467ba
Update README.md 2020-12-02 20:31:44 +00:00
Ryan 82804fcac2
Create codacy-analysis.yml 2020-12-02 20:23:31 +00:00
speed 8ed35aba2b add "Interaction" result action string check
fixes container interactions being logged as block removals
2020-12-01 18:53:28 -05:00
Elmon11 4898bcf7b5
Merge pull request #2 from AtlasMediaGroup/Elmon11-patch-1
reordered response object and reformat
2020-12-02 00:16:39 +01:00
speed 495c91f5bb
Merge pull request #3 from AtlasMediaGroup/Elmon11-patch-2
checks if a player is OP before opping them
2020-12-01 17:52:54 -05:00
Elmon11 42199f9923
Update Command_opall.java 2020-12-01 23:45:32 +01:00
Elmon11 03a6f18d18
checks if a player is OP before opping them
response to
338fc81b7f (r533706741)
2020-12-01 23:44:00 +01:00
Elmon11 aff12edb03
reordered response object and reformat
reordered response object and changed senioradmins & masterbuilders to senior_admins & master_builders for consistency with the bot
2020-12-01 23:10:01 +01:00
Ryan c0a7ee1bb6
Final fix to security readme (I hope) 2020-12-01 19:43:45 +00:00
Ryan 8c0db481ae
Update SECURITY.md
Helps when you delete the template...
2020-12-01 19:43:07 +00:00
Ryan 6084e7cb63
Create SECURITY.md 2020-12-01 19:42:16 +00:00
Ryan e40138dee6
Update maven.yml 2020-12-01 19:35:11 +00:00
speed 28576a9e8b new developers ! ! ! 2020-11-30 19:03:51 -05:00
speed c1d4e126a3 add block inspector for ops
* adds /inspect (or /ins) as a /co i replacement command for OPs. container and sign logging are still a WIP for this command.
* replaces "Rank must be Trial Mod or higher." with "Rank must be Admin or higher." in slconfig
* replaces "scripthead is the owner of TotalFreedom." with "Wild1145 is the owner of TotalFreedom." in the config
2020-11-30 18:17:27 -05:00
speed 6cd995ff52 sql fixes & more
fixes slconfig sql error
fixes nickclean npe
fixes a few command inconsistensies
2020-11-24 11:53:37 -05:00
Telesphoreo 9e107c546d
Fix SQL bugs 2020-11-23 01:52:18 -06:00
Telesphoreo edb1f224ca
TotalFreedomMod 6.0 Pre release 1
Due to the amount of breaking changes, I thought I would restart the numbering at 6.0
2020-11-23 01:09:10 -06:00
Ryan 495133da1a
Let's see if this works. 2020-11-22 23:45:29 +00:00
Telesphoreo de0d6853b7
revert calebs broken patch 2020-11-19 23:22:00 -06:00
Telesphoreo 5cdbae0166 Update ActivityLogEntry.java 2020-11-14 20:26:49 -06:00
Telesphoreo a537183545 Add adminchat channel 2020-11-14 20:13:59 -06:00
Telesphoreo 2c19ce5c65 Adds https://tracker.telesphoreo.me/d/4-mbconfig-clearip 2020-11-09 21:05:33 -06:00
Telesphoreo 609053e13f oops 2020-11-09 20:16:26 -06:00
Telesphoreo a3837a0e06 Resolves https://tracker.telesphoreo.me/d/3-fix-mb-config 2020-11-09 20:11:21 -06:00
Telesphoreo 0adee3582b d 2020-11-08 21:08:44 -06:00
Telesphoreo 08bfd73eec Delete FAWEBridge 2020-11-08 20:09:49 -06:00
Telesphoreo 9a7cc52e03 Fix players being marked as an impostor when the Discord verification system is disabled 2020-11-08 20:05:54 -06:00
Telesphoreo 11984bc46f Update BukkitTelnetBridge.java 2020-11-08 19:26:52 -06:00
Telesphoreo 8ac5bc827a Rename gchat to gsay 2020-11-07 22:21:06 -06:00
Telesphoreo 366287eb24 Fix reports being logged multiple times to console 2020-11-07 21:00:49 -06:00
Telesphoreo 43c2df58c7 knew there'd be a nms update 2020-11-02 23:33:04 -06:00
Telesphoreo d0acfcf674
Delete Jenkinsfile 2020-10-29 21:38:24 -05:00
Telesphoreo 88ccd8edfd
Delete .travis.yml 2020-10-29 21:38:11 -05:00
Telesphoreo 7f9e2af9a6
Update README.md 2020-10-29 21:37:34 -05:00
Telesphoreo f9269f1fe4
Update maven.yml 2020-10-29 21:37:05 -05:00
Telesphoreo a5359ec580
Update README.md 2020-10-29 21:33:18 -05:00
Telesphoreo e3a6f5127f fix wildcard and add back some beloved commands 2020-10-29 21:24:06 -05:00
Telesphoreo e1e046b16b lol whos the idiot who made this embarassing command 2020-10-29 20:47:23 -05:00
Telesphoreo 7d93050ff9 I assume 1.16.4 will have an NMS update 2020-10-29 18:59:54 -05:00
Telesphoreo fadcb9ad5d TotalFreedomMod 2020.11 2020-10-29 18:47:53 -05:00
Telesphoreo 49f7c6e8c3
Merge pull request #292 from speedxx/development
fix ride request expire messages
2020-10-29 15:06:29 -05:00
speed 9bcdb2bcdc fix ride request expire messages
fixes /ride sending request expired message even after accepting & properly remove player from map after accepting, #291
2020-10-28 18:06:12 -04:00
Telesphoreo ca4670ed89
Merge pull request #290 from speedxx/development
getDeterminer() -> getArticle()
2020-10-25 12:43:34 -05:00
speed adf71cb020
Update RankManager.java 2020-10-25 13:24:41 -04:00
Seth 6e84fdad23
Login messages
Last commit from me. Don't have the power but to me Packs is the new Lead Developer
2020-10-25 09:27:56 -07:00
Telesphoreo 2ecfd9610f br 2020-10-19 19:07:44 -05:00
Telesphoreo bb33778fc9 [Maven] FAWE 2020-10-16 22:33:33 -05:00
Telesphoreo d4d1000c16
Merge pull request #289 from Focusvity/pr/discord
Enable media tag to be included in messages
2020-10-16 21:36:38 -05:00
Nathan Curran 5a96204f1b
Tidy things up a bit 2020-10-16 17:51:21 +11:00
Nathan Curran 3bd72dacda
Enable media tag to be included in messages 2020-10-16 17:33:58 +11:00
Telesphoreo a4c8dad865
Merge pull request #288 from Focusvity/pr/perm-config-fix
Fix NPE
2020-10-15 21:40:14 -05:00
Nathan Curran 82e7a3b659
Fix NPE (https://github.com/TFPatches/TotalFreedomMod/issues/287) 2020-10-16 13:37:25 +11:00
Telesphoreo 586fa98c32
Merge pull request #286 from Focusvity/pr/discord-media
Use Component API for attachments
2020-10-15 21:37:15 -05:00
Nathan Curran a8f95bcb19
Use Component API for attachments 2020-10-16 13:20:20 +11:00
Seth 82d92565e7
lol 2020-10-13 13:37:11 -07:00
Seth 533e4fe369
Login messages for players. Still need to come up with login messaghes 2020-10-02 02:27:06 -07:00
Seth f8304aecd7
fix 24 hour bans 2020-09-29 23:54:17 -07:00
Seth ac6e58ff9e
and this is why I approve things before it goes on the server 2020-09-29 17:24:28 -07:00
Telesphoreo 4be2a1e05b throwback thursday 2020-09-27 22:53:11 -05:00
Telesphoreo 59831ef1f3 Finish the job 2020-09-27 22:17:01 -05:00
Telesphoreo 54e6e2f9b1 relying on someone else to look this over to see if i missed anything 2020-09-27 21:51:15 -05:00
Telesphoreo d203772a9a This somehow got reverted back to the old version
Reblocks bigtree in the plotworld as it is used to grief. Players can still use the /tool tree comamnd from WorldEdit to achieve the same thing
2020-09-26 14:52:13 -05:00
Telesphoreo 55522e8191 quick bump for the october 2020 update 2020-09-25 20:36:58 -05:00
Seth ac3d0fca88
Allow executives to manage the shop 2020-09-18 18:04:21 -07:00
Telesphoreo eb6514332e fix the config issues 2020-09-14 21:58:46 -05:00
Telesphoreo 098d3e4cf1 i hope thisll work 2020-09-14 20:54:14 -05:00
Seth 81eb333b6a
Pterodactyl 2020-09-14 02:36:25 -07:00
Telesphoreo 3057421d6d Fixed the last bug for now 2020-09-12 14:42:12 -05:00
Telesphoreo 9cb96e81ac Fix all the bugs 2020-09-11 22:27:26 -05:00
Telesphoreo d67189e170 e 2020-09-07 15:14:30 -05:00
CoolJWB 451ef8f009
Merge pull request #280 from CoolJWB/development
Potion command fix & performance
2020-09-06 21:28:22 +02:00
William Bergh 7af53448be Potion command fix and refreshment
The potion command didn't work for OPs due to some misstake that made it think that all commands were executed on other players (a staff only feature).
It now instead uses switches to execute for better performance and readability.
2020-09-06 21:25:15 +02:00
William Bergh 2072c89f77 Merge branch 'development' of https://github.com/TFPatches/TotalFreedomMod into development 2020-09-06 18:52:04 +02:00
Telesphoreo 43b266f17d Update NMS + Use PaperLib for teleportAsync 2020-08-30 19:13:46 -05:00
Telesphoreo c61f7e78fd Update for 1.16.2 2020-08-30 14:39:07 -05:00
William Bergh 14ab1e95b5 Merge branch 'development' of https://github.com/TFPatches/TotalFreedomMod into development 2020-08-30 00:27:13 +02:00
Telesphoreo 44fe8f6f94
Merge pull request #279 from speedxx/development
fix spectral arrows bypassing pvp blocking
2020-08-28 10:16:37 -05:00
speedxx 1c487a6a60 fix spectral arrows bypassing pvp blocking 2020-08-27 14:55:39 -04:00
William Bergh 6f4cc8d4b5 Optimized FAWE bridge 2020-08-24 22:44:45 +02:00
Telesphoreo f98f6990ea
Merge pull request #278 from speedxx/patch-1
:)
2020-08-23 00:19:48 -05:00
speed 4c81c94702
:) 2020-08-22 13:04:03 -04:00
Seth aaa495cf41
Merge pull request #277 from speedxx/development
use UUIDs for developers
2020-08-19 19:42:54 -07:00
speedxx 72322f2e56 use UUIDs for developers 2020-08-19 21:19:15 -04:00
Telesphoreo 04fee7d5c1
Merge pull request #276 from speedxx/development
fix vanish bug
2020-08-18 23:18:34 -05:00
speedxx d38ddac311 fix vanish bug 2020-08-18 22:56:32 -04:00
CoolJWB d65f584707
Merge pull request #275 from CoolJWB/development
Mistakes were made
2020-08-18 17:24:30 +02:00
William Bergh ff42713f92 Mistakes were made 2020-08-18 17:22:43 +02:00
Telesphoreo 5047363f83
Merge pull request #274 from Focusvity/patch-1
Make sure you check the code @CoolJWB
2020-08-18 09:48:07 -05:00
Nathan Curran 34a0dae305
Make sure you check the code @CoolJWB 2020-08-18 18:23:19 +10:00
CoolJWB ebc07f6259
Merge pull request #273 from CoolJWB/development
Updated my own code
2020-08-18 09:40:56 +02:00
William Bergh 6a7a6e74e3 Update code 2020-08-18 09:37:19 +02:00
William Bergh 1e36b484ac Merge branch 'development' of https://github.com/TFPatches/TotalFreedomMod into development
 Conflicts:
	src/main/java/me/totalfreedom/totalfreedommod/Monitors.java
2020-08-18 09:32:05 +02:00
CoolJWB efae9e314f
Merge pull request #264 from DragonSlayer2189/patch-4
added "kicked (user) quietly" msg
2020-08-18 09:29:35 +02:00
CoolJWB ea946fe14f
Merge pull request #265 from DragonSlayer2189/patch-3
added "banned (user) quietly" message
2020-08-18 09:29:14 +02:00
CoolJWB fc08761e70
Merge pull request #272 from Focusvity/pr/discord-msg
Prevent Discord from sending messages to the server
2020-08-18 09:27:05 +02:00
Nathan Curran 3f68677d99
Don't send empty messages 2020-08-18 15:52:19 +10:00
Telesphoreo f4007a7c9d Fix long standing bug with player notes 2020-08-17 23:53:21 -05:00
Telesphoreo f3a655d40d Merge branch 'development' of https://github.com/TFPatches/TotalFreedomMod into development 2020-08-17 21:21:21 -05:00
Telesphoreo 6b3a765c90 shorten Administrator 2020-08-17 21:21:13 -05:00
DragonSlayer2189 7e8a519c87
Update src/main/java/me/totalfreedom/totalfreedommod/command/Command_kick.java
Co-authored-by: Nathan Curran <30569566+Focusvity@users.noreply.github.com>
2020-08-17 19:00:07 -04:00
DragonSlayer2189 388e1fd52d
Update src/main/java/me/totalfreedom/totalfreedommod/command/Command_ban.java
Co-authored-by: Nathan Curran <30569566+Focusvity@users.noreply.github.com>
2020-08-17 18:59:26 -04:00
Telesphoreo cdb28afba6
Merge pull request #271 from speedxx/development
index httpd module
2020-08-17 17:54:50 -05:00
speedxx 24575aba88 index httpd module 2020-08-17 18:17:45 -04:00
Telesphoreo 090c445aa9 seth kelly 2020-08-16 22:33:35 -05:00
Telesphoreo c936759b6c oup 2020-08-15 21:18:47 -05:00
Telesphoreo 36fc1a00b6 bru 2020-08-15 19:32:25 -05:00
Telesphoreo 7b9920dbc4
Merge pull request #268 from speedxx/development
stuff seth missed
2020-08-15 19:24:47 -05:00
speed b0daf2066a
supervanish is gone 2020-08-15 20:17:54 -04:00
Telesphoreo ed5d18c0df rip supervanish 2020-08-15 18:03:26 -05:00
Telesphoreo 04a7b633a4 it compiles now 2020-08-15 17:58:48 -05:00
Telesphoreo 7a810519f3 fuck intellij 2020-08-15 17:44:50 -05:00
Telesphoreo 53038ca3b2 fuck intellij 2020-08-15 17:42:46 -05:00
Telesphoreo e77d92407c Revert "forgot to pull"
This reverts commit e4c9ea656e.
2020-08-15 17:41:26 -05:00
Telesphoreo da80f1b69e Revert "Merge branch 'development' of https://github.com/TFPatches/TotalFreedomMod into development"
This reverts commit 4407e9e6ec, reversing
changes made to e4c9ea656e.
2020-08-15 17:41:23 -05:00
Telesphoreo 4407e9e6ec Merge branch 'development' of https://github.com/TFPatches/TotalFreedomMod into development 2020-08-15 17:09:03 -05:00
Telesphoreo e4c9ea656e forgot to pull 2020-08-15 17:08:39 -05:00
speedxx 63570d61d6 admins are seniors 2020-08-15 13:06:58 -04:00
speed 257a2eec33
no 2020-08-15 12:37:20 -04:00
speedxx 78b73b3b63 stuff seth missed
admin -> staff
2020-08-15 12:35:48 -04:00
William Bergh d74846cde6 Fixed my bad code 2020-08-15 15:33:29 +02:00
Seth 3f4d34d172
Forgot to actually make sure this compiles lol 2020-08-14 23:48:31 -07:00
Seth f5b5fcd5ef
Admins are now known as staff
To other developers: If you find places where staff are refered to as only admins pls fix it for me.
2020-08-14 23:44:57 -07:00
Telesphoreo f42e047723
Merge pull request #267 from speedxx/development
fix exceptions, properly teleport player in /ride
2020-08-14 22:10:09 -05:00
speedxx e79145ee54 fix exceptions, properly teleport player in /ride
- fixes ArrayIndexOutOfBoundsException in /ride
- teleport sender properly if target is in different world for /ride
- fixes IllegalArgumentException in /stopsound
2020-08-14 21:56:04 -04:00
DragonSlayer2189 6dbc99690a
added "kicked (user) quietly" msg
once again, did i do this right
2020-08-14 00:34:01 -04:00
DragonSlayer2189 8628e88e3a
added "banned (user) quietly" message
did i do this right, idk java
2020-08-14 00:29:50 -04:00
Telesphoreo 51e1191816 Increase range on tpr 2020-08-13 22:14:12 -05:00
Telesphoreo e294ef8312 Reimplement vanish command
- SuperVanish has a wack permission system, and it didn't work in some rare circumstances. Added back TFMs vanish with the SuperVanish API
- Fixed the permission nodes so admins can see other admins, like how it was in TFM
2020-08-13 14:34:03 -05:00
Telesphoreo 541abb1ba8 whoever commented the shit out in the pom.xml: i hope both sides of your pillow are warm tonight 2020-08-12 22:07:15 -05:00
Telesphoreo 306c8bc8b9 ok 2020-08-12 18:51:10 -05:00
Seth 9f006325b4
This is no longer needed 2020-08-09 22:25:16 -07:00
Seth aab4f55b7d
UUID definite bans 2020-08-09 22:25:04 -07:00
Seth 00f94e47f1
github is a love hate relationship 2020-08-09 17:49:52 -07:00
Seth 44b7307e4d
Revert "Revert "Permbans are now indefinite bans.""
This reverts commit 54df0e08f5.
2020-08-09 17:49:35 -07:00
Seth 54df0e08f5
Revert "Permbans are now indefinite bans."
This reverts commit 4003db6dd9.
2020-08-09 17:49:20 -07:00
Seth 4003db6dd9
Permbans are now indefinite bans. 2020-08-09 17:48:42 -07:00
Seth f4f25c1590
useless 2020-08-09 17:47:53 -07:00
Telesphoreo 328225fe6e
Merge pull request #262 from speedxx/development
fix adminchat bug
2020-08-08 22:35:45 -05:00
speedxx 087e4a0d9c fix adminchat bug 2020-08-08 23:20:06 -04:00
Seth 2ecde80b5f
AMP automation 2020-08-07 22:51:09 -07:00
Seth 075299dbd9
Merge pull request #261 from speedxx/development
-q arg for more commands
2020-08-07 18:45:00 -07:00
speedxx 30d5a1d888 -q arg for more commands
- add `-q` arg for tban, warn, and tempban
- add reasons to tban
(#259)
2020-08-07 20:51:47 -04:00
CoolJWB b6746acb44
Merge pull request #255 from Focusvity/pr/modifyitem-fix
Fixed modifyitem command
2020-08-08 00:38:59 +02:00
CoolJWB 560353e7cf
Merge pull request #258 from DragonSlayer2189/patch-1
Removed "Build" "break-block" and "place-block"
2020-08-08 00:36:12 +02:00
Telesphoreo 86cf9dc344
I hate PacksGamingHD.
fix tossmob not working, toggle stuff
2020-08-06 16:18:32 -05:00
speedxx 877c174e2d I hate PacksGamingHD. 2020-08-06 16:17:18 -04:00
speedxx 642725252b fix tossmob not working, toggle stuff
- fix tossmob not working, sorta revamp it (#259)
- make tossmob and a few other config things toggleable with /toggle (note mp44 and landmines still don't work, i'll probably try and fix those too)
- replace if else statements with switch and catch (yandere dev code type beat)
2020-08-06 16:05:17 -04:00
Telesphoreo 880b78e528 master 2020-08-05 02:01:21 -05:00
DragonSlayer2189 7224319fae
Removed "Build" "break-block" and "place-block"
removed these flags from restricted worlds due to it breaking gravity blocks, redstone, pistons, and various other things, blocks still cant be broken due to the onblockplace and onblockbreak event handlers

idk how to add this but /summon, /spawnmob, /etree, /ebigtree, and any of those commands aliases also need to be blocked due to them being able to bypass these restrictions
2020-08-04 19:13:35 -04:00
Telesphoreo ca8758cbb1 oup 2020-08-04 17:31:17 -05:00
Seth 81df3103b6
Some updates
- Added Reddit flair sync
- Removed magical saddle because the stacking potato does the same thing
- Some internal improvements
- Fixed bug where if a service throws an error while starting or stopping it breaks the entire plugin
2020-08-04 15:16:11 -07:00
Telesphoreo b73d1df350 baddev 2020-08-04 15:05:43 -05:00
Telesphoreo 299b31a75b
Merge pull request #256 from Focusvity/pr/command-fix
Plugin-specific registration fix
2020-08-04 14:29:38 -05:00
Telesphoreo 8832d5c870
Merge pull request #257 from speedxx/development
silent joining and leaving fixes
2020-08-04 14:29:19 -05:00
speed abe3b68480
Update permissions.yml 2020-08-04 15:28:40 -04:00
speedxx 5c50f8f27d silent joining and leaving fixes 2020-08-04 15:11:16 -04:00
Nathan Curran 4561641d2b
Plugin-specific registration fix 2020-08-04 18:14:42 +10:00
Telesphoreo 4555a7e3f2 [WIP / DO NOT USE ON PRODUCTION!!] Begin implementing support for SuperVanish and fix bugs
- Update dependencies in pom.xml
- Replace TotalFreedomMod's vanish system with SuperVanish. It's widely supported by many major plugins and does a better job vanishing players
- Fixed a typo in the SQL command for creating admin tables, where the table would not be created on a clean install of TFM
- Update bStats Metrics to latest version
- Remove the VanishHandler
- Sync the permissions.yml from whats on the server. Entries for Essentials and SuperVanish will be added soon

KNOWN BUG:
- Plugins override TFM commands (e.g. Essentials takes over /list instead of giving it to TFM). I noticed that there is a semicolon before every TFM command. (:/ban, :/list), which is the actual TFM command. I have no idea where / how this bug came from. Urgently needs to be fixed.
2020-08-04 01:31:26 -05:00
Nathan Curran c826afe399
Removed some imports 2020-08-04 11:44:01 +10:00
Nathan Curran ae57573eeb
Fixed modifyitem command 2020-08-04 11:39:59 +10:00
William Bergh 073a618035 Hotfix to potion spy
Note to self: don't do crack cocain when you code, this will actually announce the potion splashes to admins (also fixed a spell issue).
2020-08-04 00:07:50 +02:00
Telesphoreo e1b514ca85
Merge pull request #253 from speedxx/patch-1
replace private constructors & 1.16 attribute names
2020-08-03 14:18:53 -05:00
speed 3f942613d7
add missing mobs here too why not 2020-08-03 13:52:49 -04:00
speed bb4f8d1fc6
replace private constructors & new attribute names 2020-08-03 13:50:44 -04:00
Seth 5401cc5dc7
Merge pull request #252 from TFPatches/development
August Update
2020-08-03 10:13:33 -07:00
Telesphoreo 1a7c14ad3e Formatting fixes and bump up the versions on the pom.xml 2020-08-02 20:59:47 -05:00
Telesphoreo 25bf79bdb1 this was causing issues 2020-08-02 19:06:45 -05:00
Seth 12a4f4da84
Seeing if this will fix the compiling issue 2020-08-02 13:26:21 -07:00
Seth a0b29c1d01
We dont use javadoc & format fixes 2020-08-01 17:46:14 -07:00
Seth 76bb2d08ac
Split gcmd sub cmds out n other stuff 2020-07-31 21:10:44 -07:00
CoolJWB 891e5c2f12
Merge pull request #250 from CoolJWB/development
Made nc work with hex colors
2020-07-31 21:53:59 +02:00
William Bergh 4de1fe454d Fixed oopsie 2020-07-31 21:48:22 +02:00
William Bergh 80e39d3db1 Hex color for nc
Made sure that hex colors are cleared correctly.
2020-07-31 21:46:44 +02:00
CoolJWB e25e785c26
Merge pull request #249 from speedxx/development
weSmart
2020-07-29 18:32:43 +02:00
speedxx 0ae835aa04 weSmart
sourcetype fixes; making sure in game commands work only in game
2020-07-28 23:14:58 -04:00
CoolJWB 05abebea65
Merge pull request #248 from CoolJWB/development
A bridge for TF-FAWE
2020-07-29 02:48:12 +02:00
William Bergh c04e944466 A bridge for TF-FAWE
Made a bridge for a TotalFreedom version of FastAsyncWorldEdit that will work better with our needs and not collide with other plugins.
2020-07-29 02:45:16 +02:00
Seth 3ee80e0f70
Merge pull request #247 from ZeroEpoch1969/development
literally had to do this shit the dumb ass way
2020-07-28 14:59:34 -07:00
Seth 27f7276698
Dont have my pc, have to do this from github
2/2
2020-07-28 14:56:45 -07:00
Seth 9ecfe703cb
Dont have my pc, have to do this from github
1/2
2020-07-28 14:55:38 -07:00
Seth ab660a7ca7
Merge pull request #243 from vJayyy/patch-4
Format change (/cmdspy)
2020-07-28 14:38:39 -07:00
Seth 2353c728c1
Merge pull request #246 from speedxx/development
fix beds exploding in new nether biomes
2020-07-28 14:38:12 -07:00
speedxx 106e457fa7 fix beds exploding in new nether biomes
add end biomes too since beds explode there aswell & fix the stupid "(amount) entitiess removed." shit too
2020-07-28 16:24:41 -04:00
vJayyy 582acdb176
It's late lol
derp
2020-07-28 02:33:42 -04:00
Joe H 05f94920d9
Format change (/cmdspy)
While executing this during administration I noticed the ratio between execution and response was rather delayed, and I realized it's because the command is waiting for all the tables and grab methods to run before sending the player the enabled/disabled message. This creates a false sense of lag and is as simple as making the message run before anything else, given that the methods run and tables save almost instantly, this won't negatively affect the module or command.
2020-07-28 02:12:30 -04:00
Telesphoreo ee04a456a1
Merge pull request #242 from speedxx/patch-1
fix clearchat
2020-07-27 22:41:50 -05:00
speed 8e8daa457b
fix clearchat 2020-07-27 23:37:10 -04:00
Seth 95e67f84ef
Merge pull request #241 from speedxx/development
add magical saddle to shop
2020-07-25 21:08:24 -07:00
speedxx 6f2d5aa08d add magical saddle to shop 2020-07-25 22:59:37 -04:00
CoolJWB 417a0c39dd
Merge pull request #240 from speedxx/development
separate unblocking commands from bcmd
2020-07-25 20:31:03 +02:00
speedxx 4ad7fd874f separate unblocking commands from bcmd 2020-07-24 23:24:14 -04:00
super aef85b2120
Merge pull request #239 from speedxx/development
i am a massive retard
2020-07-23 23:12:05 -04:00
speed 37c65a85d4
Update FUtil.java 2020-07-23 23:03:53 -04:00
super d93a2a7e7d
Merge pull request #238 from speedxx/development
fix nickclean not being registered
2020-07-23 19:50:02 -04:00
speedxx db414164dc fix nickclean not being registered
also allow for ops/non-ops to run /opme, there isn't any reason as to why this command should be limited to  admins only
2020-07-23 19:05:38 -04:00
super 30085a7a52
Merge pull request #237 from speedxx/development
revamp vanish
2020-07-22 18:04:36 -04:00
speedxx 7593fbda9e revamp vanish 2020-07-22 17:40:58 -04:00
Telesphoreo fc05003354
Merge pull request #236 from speedxx/development
fix cage & uncage
2020-07-21 23:20:23 -05:00
speed 113350b228
fix this too 2020-07-21 23:56:18 -04:00
speed a1f64ef912
oop 2020-07-21 23:54:56 -04:00
super e4ee3066bc
Merge pull request #235 from speedxx/development
fix guildchat being sent to discord
2020-07-21 15:28:03 -04:00
speedxx 2bf78bcccf fix guildchat being sent to discord 2020-07-21 15:21:51 -04:00
Seth 8c93da758a
Forgot question mark 2020-07-20 07:07:20 -07:00
Seth 75e50582e9
Kuper forgot db stuff 2020-07-20 07:05:00 -07:00
Seth d92f661f12
2 new devs 2020-07-20 06:27:37 -07:00
Seth 22d40bd0e9
Merge pull request #234 from speedxx/development
readd console checks for saconfig
2020-07-19 20:35:42 -07:00
speed 3f75712732
readd console checks for saconfig 2020-07-19 22:10:51 -04:00
super fc31babff3
Merge pull request #233 from speedxx/development
fix npe in /myinfo
2020-07-18 19:58:09 -04:00
speed 588a2f1eba
fix npe in /myinfo 2020-07-18 19:51:17 -04:00
super 4f276ec78e
Merge pull request #232 from speedxx/development
remove aw guest from tab complete
2020-07-18 14:12:09 -04:00
speed 2ce1a3d1d3
remove aw guest from tab complete
& fix the description
2020-07-18 13:56:13 -04:00
Seth cef2d8cec4
Let sender know votes were changed. 2020-07-17 21:04:22 -07:00
Seth 12b096b0ad
mute & unmute improvements 2020-07-17 18:00:26 -07:00
speedxx cb1c67e568 mute & unmute improvements
- fix muted player messages being sent to discord
- fix mute sending 2 messages
- tell sender target has been unmuted
2020-07-17 19:54:46 -04:00
Super_ 5a41632654 typo type beat 2020-07-17 16:00:27 -04:00
Super_ cde24b748a make discord chat toggleable from in-game 2020-07-17 15:58:15 -04:00
Super_ 0e63857ae0 lol 2020-07-17 00:40:10 -04:00
Super_ b8e5de2080 real smart nathan 2020-07-16 22:55:57 -04:00
super 62aa46f856
Merge pull request #229 from Focusvity/patch-1
Fix Issue #228 - unvanishing doesn't show admins
2020-07-16 22:54:44 -04:00
super d33f661d55
Merge pull request #230 from speedxx/development
remove this blocked string & don't send messages containing discord.gg to server-chat
2020-07-16 22:31:21 -04:00
speedxx c1f0d81fcc remove this blocked string & don't send messages containing discord.gg to server-chat 2020-07-16 22:24:59 -04:00
Nathan Curran c4124de781
Fix Issue #228 - unvanishing doesn't show admins 2020-07-17 12:02:22 +10:00
Super_ 30fd3ea6a1 increase login char limit 2020-07-16 00:45:44 -04:00
Super_ 6435078703 /sit 2020-07-16 00:06:58 -04:00
Super_ 03b22ac326 make aw available to ops 2020-07-15 20:17:45 -04:00
Seth a1418eb516
Fixed reactions 2020-07-15 01:40:48 -07:00
Seth 7a08152c14
Some adjustments 2020-07-15 01:22:32 -07:00
Super_ bf6ef152d9 add zoglin and piglin spawn eggs to the egg list 2020-07-15 00:45:57 -04:00
Super_ 114567a302 randomized gradients and /playtime 2020-07-15 00:23:26 -04:00
Super_ 067180d2cf add defaulting for command permissions 2020-07-14 19:07:46 -04:00
super 4973318249
Merge pull request #226 from CoolJWB/development
Better potionspy
2020-07-14 18:34:50 -04:00
super ceed8bd303
Merge pull request #227 from Telesphoreo/nickgr
Personally, I think this alias is very useful
2020-07-14 18:31:49 -04:00
Telesphoreo a7d386e6be
Personally, I think this alias is very useful 2020-07-14 14:56:36 -07:00
CoolJWB 6e622ad2f3 Potionspy remake
Remade the entire potionspy and monitor class to avoid spam in the chat.

Furthermore, there is now a way to look at a history of potions thrown (individually and globally) however this history is limited to avoid too much useless data in the memory.
2020-07-14 21:00:22 +02:00
Seth 2ca57c9b39
Nick gradient, and some other thing 2020-07-13 23:00:08 -07:00
Super_ eea17a24bc i'm gonna cry this is amazing x2 2020-07-13 20:52:53 -04:00
Super_ 7d6370da23 i'm gonna cry this is amazing 2020-07-13 20:41:44 -04:00
super cdb385dd20
Merge pull request #224 from CoolJWB/development
Fix tempban reason issues
2020-07-13 10:13:45 -04:00
CoolJWB cb108e0c13 Fix tempban reason issues
Tempban won't cut off reasons that take the durations argument place anymore.
2020-07-13 01:34:39 +02:00
Super_ f9e8a4c8ba set command feedback to automatically be false 2020-07-12 12:13:41 -04:00
Seth c836838f51
Hopefully the last hot update for now 2020-07-11 23:54:33 -07:00
Seth 6ca7f6ba24
:) 2020-07-11 23:53:40 -07:00
Seth c7c567a14f
Version change & hot update so I can restore shop data
also fuck cbtool
2020-07-11 23:53:11 -07:00
Seth 38918afe67
Update this 2020-07-10 02:12:55 -07:00
Seth ba2b636e04
2 MB bug fixes 2020-07-10 02:10:52 -07:00
Seth da1bec6cc0
2 MB bug fixes 2020-07-10 02:09:47 -07:00
Seth 4e432eeeea
fix merging fuck up, fuck squashing 2020-07-10 01:14:49 -07:00
Seth f6bf485c0d
fix merging fuck up, fuck squashing 2020-07-10 01:13:18 -07:00
Seth 06d40927b0
Merge pull request #220 from TFPatches/development
Shouldn't of squashed this.
2020-07-10 01:04:41 -07:00
Seth 58872e2c32
Merge branch 'server' into development 2020-07-10 01:04:02 -07:00
Seth 00450e5732
i dislike people 2020-07-10 00:58:52 -07:00
Seth 98f4af7fab
Hot fixes 2020-07-09 22:43:10 -07:00
Seth 7b7f09e457
1.16 Update (#219) 2020-07-09 17:07:03 -07:00
Seth 4a297a237c
Fix teams not being removed for ops if they were offline
also forgot to update the display of donators
2020-07-09 16:22:12 -07:00
Seth d12a121300
useless 2020-07-09 15:29:00 -07:00
Seth c87e1b3d64
Read description lol
- Re-added premium
- Made the clown fish a shop item
- Thank fuck I caught this DB bug with setting null values
2020-07-09 15:18:29 -07:00
Super_ f6ee9271c6 yeah no 2020-07-09 14:11:36 -04:00
Seth 4328a13eaf
Bad imports 2020-07-07 19:18:09 -07:00
Seth ed9fe87e44
and these 2020-07-07 19:17:59 -07:00
Seth 8b4a91b2e6
Fix command blocker 2020-07-07 19:10:21 -07:00
Seth c1a7b1c141
forgot a thing 2020-07-07 19:08:00 -07:00
Seth 78349ba49e
Add back the project configurations 2020-07-07 19:04:10 -07:00
Seth d74eeec113
Guess I had to modify LibsDisguises after all 2020-07-07 01:36:29 -07:00
Seth c333a6ee39
2 bug fixes
- Fix votifier being non-existent breaking shop
- Fix plugin breaking error
2020-07-06 22:21:35 -07:00
Super_ 3fd7147fc2 i hate /campfire 2020-07-03 13:55:46 -04:00
CoolJWB adfd55b419
Redstone blocker fix (#217)
* Redstone blocker fix

The redstone blocker caused severe crashes in some cases such as when redstone torches and targets were connected to wire.
The event used to block redstone is not efficient in any means so this should be reverted when (or if) it is fixed internally.

* Delete encodings.xml

* Delete compiler.xml
2020-07-03 11:03:08 -04:00
Super_ 2a88e05021 honestly confused?? 2020-07-02 20:40:08 -04:00
Super_ 8a60ae2235 respawn anchor place prevention 2020-07-02 08:13:20 -04:00
CoolJWB 556dfa7233
Fixed Flatlands generation & Discord bot not actually disabled (#215) 2020-07-02 02:08:57 -07:00
Seth 19ed60d407
Bossbar reactions and stacking potato 2020-07-02 01:42:27 -07:00
Seth aac791d768
Removal of premium 2020-07-02 01:41:40 -07:00
Super_ 1357ac7e09 are you kidding kelly 2020-07-01 20:29:06 -04:00
Super_ 5421de0c2f fix wildcard and clean up command executor 2020-07-01 12:45:09 -04:00
Seth 9d7e0cdefc
Mojang fixed this, resolves #207 2020-07-01 03:28:33 -07:00
Super_ e4d1d6ff9e yeah smart 2020-06-30 23:55:52 -04:00
Super_ 3eec04ec1c quality control 2020-06-30 23:38:29 -04:00
Super_ 357eddf51a bug fixing 2020-06-30 23:21:44 -04:00
Super_ baf5fd42f6 remove silly plugin 2020-06-30 21:53:00 -04:00
Super_ 9d71a7f4ae removal of aero 2020-06-30 21:51:06 -04:00
Seth 9dad7c6d05
Fuckoff was pulling you towards the player 2020-06-30 02:14:44 -07:00
Seth 35b4990f0c
bruh 2020-06-30 02:00:33 -07:00
Seth b4b1128905
fuck 2020-06-30 02:00:06 -07:00
Seth 4d19d44d19
Forgot to remove this 2020-06-30 00:55:57 -07:00
Seth eb58419a3a
1.16, overhaul of player data 2020-06-30 00:25:38 -07:00
371 changed files with 14288 additions and 14495 deletions

17
.github/workflows/gradle.yml vendored Normal file
View file

@ -0,0 +1,17 @@
name: Gradle-Build
on: [ push ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 17
uses: actions/setup-java@v2
with:
distribution: temurin
java-version: 17
cache: gradle
- name: Build with Gradle
run: chmod a+x gradlew && ./gradlew build --no-daemon

View file

@ -1,17 +0,0 @@
name: Java CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Build with Maven
run: mvn -B package --file pom.xml

15
.gitignore vendored
View file

@ -1,6 +1,8 @@
# TFM excludes
build.properties
dependency-reduced-pom.xml
*.html
*.css
# Netbeans excludes
/nbproject/private
@ -19,12 +21,20 @@ manifest.mf
# IntelliJ excludes
*.ipr
*.iws
/.idea
/.idea/modules.xml
/.idea/discord.xml
/.idea/jarRepositories.xml
/.idea/workspace.xml
/.idea/uiDesigner.xml
/.idea/libraries
/.idea/
*.iml
# Maven excludes
/target
/.gradle
# OS generated files
.DS_Store
._*
@ -32,5 +42,4 @@ manifest.mf
.Trashes
ehthumbs.db
Thumbs.db
TotalFreedomMod\.iml
.idea/inspectionProfiles/Project_Default.xml

3
.idea/.gitignore vendored Normal file
View file

@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

View file

@ -1,8 +0,0 @@
<component name="ArtifactManager">
<artifact type="jar" build-on-make="true" name="TotalFreedomMod:jar">
<output-path>$PROJECT_DIR$/target</output-path>
<root id="archive" name="TotalFreedomMod.jar">
<element id="module-output" name="TotalFreedomMod" />
</root>
</artifact>
</component>

View file

@ -1,28 +0,0 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<JavaCodeStyleSettings>
<option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="20" />
<option name="IMPORT_LAYOUT_TABLE">
<value>
<package name="" withSubpackages="true" static="false" />
<package name="" withSubpackages="true" static="true" />
</value>
</option>
</JavaCodeStyleSettings>
<codeStyleSettings language="JAVA">
<option name="BRACE_STYLE" value="2" />
<option name="CLASS_BRACE_STYLE" value="2" />
<option name="METHOD_BRACE_STYLE" value="2" />
<option name="LAMBDA_BRACE_STYLE" value="2" />
<option name="ELSE_ON_NEW_LINE" value="true" />
<option name="WHILE_ON_NEW_LINE" value="true" />
<option name="CATCH_ON_NEW_LINE" value="true" />
<option name="FINALLY_ON_NEW_LINE" value="true" />
<option name="SPACE_AFTER_TYPE_CAST" value="false" />
<option name="IF_BRACE_FORCE" value="3" />
<option name="DOWHILE_BRACE_FORCE" value="3" />
<option name="WHILE_BRACE_FORCE" value="3" />
<option name="FOR_BRACE_FORCE" value="3" />
</codeStyleSettings>
</code_scheme>
</component>

View file

@ -1,5 +1,46 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</state>
</component>
<code_scheme name="Project" version="173">
<JavaCodeStyleSettings>
<option name="CLASS_COUNT_TO_USE_IMPORT_ON_DEMAND" value="20" />
<option name="IMPORT_LAYOUT_TABLE">
<value>
<package name="" withSubpackages="true" static="false" />
<package name="" withSubpackages="true" static="true" />
</value>
</option>
</JavaCodeStyleSettings>
<JetCodeStyleSettings>
<option name="PACKAGES_TO_USE_STAR_IMPORTS">
<value>
<package name="java.util" alias="false" withSubpackages="false" />
<package name="kotlinx.android.synthetic" alias="false" withSubpackages="true" />
<package name="io.ktor" alias="false" withSubpackages="true" />
</value>
</option>
<option name="PACKAGES_IMPORT_LAYOUT">
<value>
<package name="" alias="false" withSubpackages="true" />
<package name="java" alias="false" withSubpackages="true" />
<package name="javax" alias="false" withSubpackages="true" />
<package name="kotlin" alias="false" withSubpackages="true" />
<package name="" alias="true" withSubpackages="true" />
</value>
</option>
</JetCodeStyleSettings>
<codeStyleSettings language="JAVA">
<option name="BRACE_STYLE" value="2" />
<option name="CLASS_BRACE_STYLE" value="2" />
<option name="METHOD_BRACE_STYLE" value="2" />
<option name="LAMBDA_BRACE_STYLE" value="2" />
<option name="ELSE_ON_NEW_LINE" value="true" />
<option name="WHILE_ON_NEW_LINE" value="true" />
<option name="CATCH_ON_NEW_LINE" value="true" />
<option name="FINALLY_ON_NEW_LINE" value="true" />
<option name="SPACE_AFTER_TYPE_CAST" value="false" />
<option name="IF_BRACE_FORCE" value="3" />
<option name="DOWHILE_BRACE_FORCE" value="3" />
<option name="WHILE_BRACE_FORCE" value="3" />
<option name="FOR_BRACE_FORCE" value="3" />
</codeStyleSettings>
</code_scheme>
</component>

View file

@ -1,18 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile default="true" name="Default" enabled="true" />
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="TotalFreedomMod" />
</profile>
</annotationProcessing>
<bytecodeTargetLevel>
<module name="totalfreedom" target="1.8" />
<module name="TotalFreedomMod" target="1.8" />
</bytecodeTargetLevel>
</component>
</project>

View file

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
</component>
</project>

View file

@ -1,8 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/TotalFreedomMod.iml" filepath="$PROJECT_DIR$/TotalFreedomMod.iml" />
</modules>
</component>
</project>

View file

@ -1 +0,0 @@
language: java

View file

@ -1,3 +1,4 @@
# Contributing to TotalFreedomMod #
# Contributing to TotalFreedomMod
For information about contributing to TotalFreedomMod, please see the [contributing guidelines](https://github.com/TotalFreedom/TotalFreedomMod/wiki/Contributing).
For information about contributing to TotalFreedomMod, please see
the [contributing guidelines](https://github.com/TotalFreedom/TotalFreedomMod/wiki/Contributing).

12
Jenkinsfile vendored
View file

@ -1,12 +0,0 @@
pipeline {
agent any
stages {
stage('Build') {
steps {
mvn -B package --file pom.xml
archiveArtifacts artifacts: '**/target/*.jar', fingerprint: true
}
}
}
}

View file

@ -1,4 +1,5 @@
# TotalFreedom General License #
# TotalFreedom General License
_Version 2.0, 27th February 2015_
Copyright (c) 2011 Steven Lawson
@ -7,48 +8,86 @@ Copyright (c) 2012 Jerom van der Sar
All rights reserved.
##### 1. Definitions #####
##### 1. Definitions
"License" shall mean the terms and conditions for use, reproduction, and distribution as defined by this document.
"Licensor" shall mean the copyright holder or entity authorised by the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
"Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are
under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or
indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of
fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity.
"You", "Your" or "Yourself" shall mean an individual or Legal Entity exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files.
"Source" form shall mean the preferred form for making modifications, including but not limited to software source code,
documentation source, and configuration files.
"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, binary data, generated documentation, and conversions to other media types.
"Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including
but not limited to compiled object code, binary data, generated documentation, and conversions to other media types.
"Work" and "This Software" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work.
"Work" and "This Software" shall mean the work of authorship, whether in Source or Object form, made available under the
License, as indicated by a copyright notice that is included in or attached to the work.
"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
"Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work
and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an
original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution."
"Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or
additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the
Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner.
For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to
the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code
control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of
discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in
writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work.
"Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received
by Licensor and subsequently incorporated within the Work.
"Redistribution" shall mean any partial or complete availability, transfer or publication of the Work from one Legal Entity to another.
"Redistribution" shall mean any partial or complete availability, transfer or publication of the Work from one Legal
Entity to another.
##### 2. Grant of Copyright License #####
Subject to the terms and conditions of this License, You are granted a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to prepare Derivative Works of, publicly display, publicly perform, inspect and redistribute the Work and such Derivative Works as long as the following conditions are met:
##### 2. Grant of Copyright License
1. Redistributions of This Software must solely occur in Source form. Redistribution in Object form is prohibited without prior written permission from the Licensor.
Subject to the terms and conditions of this License, You are granted a perpetual, worldwide, non-exclusive, no-charge,
royalty-free, irrevocable copyright license to prepare Derivative Works of, publicly display, publicly perform, inspect
and redistribute the Work and such Derivative Works as long as the following conditions are met:
2. Neither the names of the copyright holders nor the names this software's contributors may be removed from This Software's source code.
1. Redistributions of This Software must solely occur in Source form. Redistribution in Object form is prohibited
without prior written permission from the Licensor.
3. Neither the names of the copyright holders nor the names of its contributors may be used to endorse or promote products derived from This Software without specific prior written permission.
2. Neither the names of the copyright holders nor the names this software's contributors may be removed from This
Software's source code.
4. Accreditations referencing This Software's copyright holders or contributors may neither be altered or removed from source code nor withheld from reproduction in Object form whatsoever.
3. Neither the names of the copyright holders nor the names of its contributors may be used to endorse or promote
products derived from This Software without specific prior written permission.
5. Any conditions specified by this license may be temporarily or permanently waived by any the aforementioned copyright holders.
4. Accreditations referencing This Software's copyright holders or contributors may neither be altered or removed from
source code nor withheld from reproduction in Object form whatsoever.
5. Any conditions specified by this license may be temporarily or permanently waived by any the aforementioned copyright
holders.
6. Redistributions of This Software must retain this License document in its exact form.
7. Sub licensing of This Software is prohibited without prior written permission from the Licensor.
##### 3. Submission of Contributions #####
Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
##### 3. Submission of Contributions
##### 4. Disclaimer of Warranty #####
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the
Licensor shall be under the terms and conditions of this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may
have executed with Licensor regarding such Contributions.
##### 4. Disclaimer of Warranty
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

View file

@ -1,14 +1,21 @@
# TotalFreedomMod [![Build Status](https://travis-ci.org/TFPatches/TotalFreedomMod.svg?branch=TFM-1.15)](https://travis-ci.org/TFPatches/TotalFreedomMod) [![codebeat badge](https://codebeat.co/badges/5f078e55-8a02-4120-9076-70f6994f48d1)](https://codebeat.co/projects/github-com-tfpatches-totalfreedommod-tfm-1-14-fa58c58f-b1c4-4221-bf78-346e07db6961)
# TotalFreedomMod ![Build Status](https://github.com/StevenNL2000Freedom/TotalFreedomMod/actions/workflows/gradle.yml/badge.svg)
TotalFreedomMod is a CraftBukkit server plugin designed primarily to support the [Official TotalFreedom Minecraft Server](http://totalfreedom.me/). However, you are more than welcome to adapt the source for your own server.
TotalFreedomMod is a CraftBukkit server plugin designed primarily to support
the [Official TotalFreedom Minecraft Server](https://totalfreedom.me/). However, you are more than welcome to adapt the
source for your own server.
This plugin was originally coded by StevenLawson (Madgeek1450), with Jerom van der Sar (Prozza) becoming heavily involved in its development some time later. It consists of over 85 custom coded commands and a large variety of distinguishable features not included in any other plugin. The plugin has since its beginning grown immensely. Together, with the main TotalFreedom server, TotalFreedomMod has a long-standing reputation of effectiveness whilst maintaining a clear feeling of openness towards the administrators and the players themselves.
This plugin was originally coded by StevenLawson (Madgeek1450), with Jerom van der Sar (Prozza) becoming heavily
involved in its development some time later. It consists of over 85 custom coded commands and a large variety of
distinguishable features not included in any other plugin. The plugin has since its beginning grown immensely. Together,
with the main TotalFreedom server, TotalFreedomMod has a long-standing reputation of effectiveness whilst maintaining a
clear feeling of openness towards the administrators and the players themselves. TotalFreedomMod was forked to a new repository called TFPatches for faster development. The repository was renamed to TotalFreedomMC, which you are on now. When Wild1145 took ownership of TotalFreedom, it was further forked into a new organization, AtlasMediaGroup. This version still continues to receive updates, with some being backported from AtlasMediaGroup.
### Contributing
### Contributing ###
Please see [CONTRIBUTING.md](CONTRIBUTING.md) if you are interested in developing TotalFreedomMod.
For information on how TotalFreedomMod is licensed, please see [LICENSE.md](LICENSE.md).
### Compiling ###
### Compiling
You need Maven to build. You'd also need to set the JDK version to Java 8 as that is the current standard as of now.
You need Gradle to build. You'd also need to set the JDK version to Java 17 as that is the current standard as of now.

View file

@ -1,165 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="minecraft" name="Minecraft">
<configuration>
<autoDetectTypes>
<platformType>PAPER</platformType>
</autoDetectTypes>
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.bukkit:bukkit:1.9.4-R0.1-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.avaje:ebean:2.8.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.spigotmc:spigot:1.14.1-R0.1-SNAPSHOT" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.6" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.spigotmc:spigot:1.14-R0.1-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: io.papermc:paperlib:1.0.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.ess3:Essentials:2.13.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.dv8tion:JDA:3.8.0_423" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.squareup.okhttp3:okhttp:3.8.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.squareup.okio:okio:1.13.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.json:json:20160810" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: io.papermc:paperlib:1.0.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.ess3:Essentials:2.13.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.dv8tion:JDA:3.8.0_423" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.squareup.okhttp3:okhttp:3.8.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.squareup.okio:okio:1.13.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.json:json:20160810" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.spigotmc:spigot:1.13.1-R0.1-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: io.papermc:paperlib:1.0.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.ess3:Essentials:2.13.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.bukkit:craftbukkit:1.13.2-R0.1-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.dv8tion:JDA:3.8.0_423" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.squareup.okhttp3:okhttp:3.8.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.squareup.okio:okio:1.13.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.json:json:20160810" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.coreprotect:coreprotect:2.15.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.bukkit:bukkit:1.13-R0.1-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.projectlombok:lombok:1.18.0" level="project" />
<orderEntry type="library" name="Maven: commons-io:commons-io:2.6" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-lang3:3.9" level="project" />
<orderEntry type="library" name="Maven: commons-codec:commons-codec:1.9" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.spigotmc:spigot:1.15-R0.1-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.Pravian:Aero:5f82926" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.spigotmc:spigot-api:1.12-R0.1-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.TotalFreedom:BukkitTelnet:4.5-pre1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.logging.log4j:log4j-core:2.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.logging.log4j:log4j-api:2.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.TFPatches:TF-LibsDisguises:11aea9b3cd" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.comphenix.protocol:ProtocolLib:4.5.1-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: cglib:cglib-nodep:3.2.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.comphenix.executors:BukkitExecutors:1.1-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldedit:worldedit-bukkit:7.1.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldedit:worldedit-core:7.1.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldedit.worldedit-libs:core:7.1.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: de.schlichtherle:truezip:6.8.3" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-profile-default_2.13:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.scala-lang:scala-library:2.13.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-http:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-kernel-spec:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-annotations:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.code.findbugs:annotations:3.0.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-cio:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-io:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-services:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-logging:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: javax.inject:javax.inject:1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.httpcomponents:httpclient:4.5.10" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.httpcomponents:httpcore:4.4.12" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.slf4j:jcl-over-slf4j:1.7.28" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-odf:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-comp-zipdriver:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-comp-zip:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.bouncycastle:bcprov-jdk15on:1.63" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-tar:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-comp-tardriver:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.commons:commons-compress:1.19" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-tar-bzip2:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-tar-gzip:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-tar-xz:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.tukaani:xz:1.8" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-zip-raes:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-profile-base_2.13:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-access-swing:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-access:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-file:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-jar:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-driver-zip:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-comp-ibm437:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truevfs:truevfs-kernel-impl_2.13:0.12.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-key-console:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-key-default:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-key-swing:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-key-macosx:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-key-spec:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.truecommons:truecommons-shed:2.5.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.mozilla:rhino:1.7.11" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: it.unimi.dsi:fastutil:8.2.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.antlr:antlr4-runtime:4.7.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldedit.worldedit-libs:bukkit:7.1.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.bukkit:bukkit:1.13.2-R0.1-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: io.papermc:paperlib:1.0.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.logging.log4j:log4j-slf4j-impl:2.8.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.bstats:bstats-bukkit:1.7" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.ess3:EssentialsX:2.16.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.ess3:NMSProvider:2.16.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.ess3:UpdatedMetaProvider:2.16.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.ess3:1_8_R1Provider:2.16.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.ess3:1_8_R2Provider:2.16.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.ess3:LegacyProvider:2.16.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.ess3:ReflectionProvider:2.16.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.ess3:FlattenedProvider:2.16.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.dv8tion:JDA:4.0.0_39" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.code.findbugs:jsr305:3.0.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.jetbrains:annotations:16.0.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.neovisionaries:nv-websocket-client:2.5" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.squareup.okhttp3:okhttp:3.13.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.squareup.okio:okio:1.17.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: club.minnced:opus-java-api:1.0.4" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.java.dev.jna:jna:4.4.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: club.minnced:opus-java-natives:1.0.4" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.apache.commons:commons-collections4:4.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.sf.trove4j:trove4j:3.0.3" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.9.8" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.9.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.fasterxml.jackson.core:jackson-core:2.9.8" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.coreprotect:coreprotect:2.16.3" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldguard:worldguard-bukkit:7.0.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldguard:worldguard-core:7.0.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q.worldguard.worldguard-libs:core:7.0.2" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.flywaydb:flyway-core:3.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.sk89q:commandbook:2.3" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.destroystokyo.paper:paper-api:1.15.1-R0.1-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: commons-lang:commons-lang:2.6" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.googlecode.json-simple:json-simple:1.1.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: junit:junit:4.10" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.hamcrest:hamcrest-core:1.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.guava:guava:21.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.code.gson:gson:2.8.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.md-5:bungeecord-chat:1.13-SNAPSHOT" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.yaml:snakeyaml:1.25" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.ow2.asm:asm:7.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.ow2.asm:asm-commons:7.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.ow2.asm:asm-tree:7.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.ow2.asm:asm-analysis:7.1" level="project" />
<orderEntry type="library" name="Maven: me.rayzr522:jsonmessage:1.0.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.vexsoftware:votifier:v1.9" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.github.ConnorLinfoot:ActionBarAPI:5b2d642d3d" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.goldtreeservers:worldguardextraflags:4.0.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.boydti:fawe-api:17.07.12-6b6f285-750-13.7.8" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.ess3:Essentials:2.13-SNAPSHOT" level="project" />
</component>
</module>

232
build.gradle Normal file
View file

@ -0,0 +1,232 @@
plugins {
id 'java'
id 'maven-publish'
id 'idea'
id 'checkstyle'
id 'com.github.johnrengelman.shadow' version '7.1.2'
id 'net.minecrell.plugin-yml.bukkit' version '0.5.1'
}
repositories {
mavenLocal()
gradlePluginPortal()
maven {
url = uri('https://jitpack.io')
content {
includeGroup('com.github.vexsoftware')
}
}
maven {
url = uri('https://nexus.hc.to/content/repositories/pub_releases/')
content {
includeGroup('net.milkbowl.vault')
}
}
maven { url = uri("https://papermc.io/repo/repository/maven-public/") }
maven {
url = uri('https://repo.codemc.org/repository/maven-public/')
}
maven {
url = uri('https://repo.codemc.org/repository/nms/')
content {
includeGroup('org.spigotmc')
}
}
maven {
url = uri('https://hub.spigotmc.org/nexus/content/groups/public/')
}
maven {
url = uri('https://maven.enginehub.org/repo/')
}
maven {
url = uri('https://maven.elmakers.com/repository/')
}
maven {
url = uri('https://m2.dv8tion.net/releases/')
content {
includeGroup('net.dv8tion')
includeGroup('club.minnced')
includeGroup('com.google.code')
includeGroup('com.neovisionaries')
includeGroup('com.squareup')
includeGroup('org.apache.commons')
includeGroup('org.jetbrains.annotations')
includeGroup('org.slf4j.slf4j-api')
}
}
maven {
url = uri('https://maven.playpro.com/')
content {
includeGroup('net.coreprotect')
}
}
maven {
url = uri('https://nexus.telesphoreo.me/repository/totalfreedom/')
content {
includeGroup('me.totalfreedom')
}
}
maven {
url = uri('https://repo.mattmalec.com/repository/releases')
content {
includeGroup('com.mattmalec')
}
}
maven {
url = uri('https://repo.essentialsx.net/releases/')
content {
includeGroup('net.essentialsx')
}
}
mavenCentral()
}
dependencies {
implementation('commons-io:commons-io:2.11.0')
implementation('org.apache.commons:commons-lang3:3.12.0')
implementation('commons-codec:commons-codec:1.15')
implementation('org.bstats:bstats-base:3.0.0')
implementation('org.bstats:bstats-bukkit:3.0.0')
implementation('org.reflections:reflections:0.10.2')
implementation('org.javassist:javassist:3.28.0-GA')
implementation('org.jetbrains:annotations:23.0.0')
implementation('com.mattmalec:Pterodactyl4J:2.BETA_92')
implementation('com.squareup.okhttp3:okhttp:4.9.3')
compileOnly('org.spigotmc:spigot:1.17.1-R0.1-SNAPSHOT')
compileOnly('me.totalfreedom:BukkitTelnet:4.7')
compileOnly('me.totalfreedom:TF-LibsDisguises:10.0.27-SNAPSHOT')
compileOnly('com.sk89q.worldedit:worldedit-bukkit:7.3.0-SNAPSHOT')
compileOnly('net.essentialsx:EssentialsX:2.19.2')
compileOnly('net.dv8tion:JDA:4.3.0_277')
compileOnly('net.coreprotect:coreprotect:20.4')
compileOnly('com.sk89q.worldguard:worldguard-bukkit:7.0.6')
compileOnly('com.github.vexsoftware:votifier:v1.9')
compileOnly('net.goldtreeservers:worldguardextraflags:4.0.0')
compileOnly('me.totalfreedom:TFGuilds:2021.06-RC3')
}
group = 'me.totalfreedom'
version = project.property('project.pluginVersion')
description = 'TotalFreedomMod'
java.sourceCompatibility = JavaVersion.VERSION_17
java.targetCompatibility = JavaVersion.VERSION_17
archivesBaseName = 'TotalFreedomMod-donotuse'
bukkit {
main = 'me.totalfreedom.totalfreedommod.TotalFreedomMod'
apiVersion = '1.17'
version = project.property('project.pluginVersion')
description = 'Plugin for the Total Freedom server.'
authors = ['Madgeek1450', 'Prozza']
softDepend = ['BukkitTelnet', 'Essentials', 'CoreProtect', 'LibsDisguises', 'WorldEdit',
'WorldGuard', 'WorldGuardExtraFlags', 'TFGuilds', 'JDA', 'Votifier']
}
static def getDate() {
return new Date().format('MM/dd/yyyy HH:mm')
}
String getGitHash() {
def stdout = new ByteArrayOutputStream()
try {
exec {
commandLine "git", "rev-parse", "--short", "HEAD"
standardOutput = stdout
ignoreExitValue = true
}
} catch (GradleException e) {
logger.error("Couldn't determine Git head because Git is not installed. " + e.getMessage())
}
return stdout.size() > 0 ? stdout.toString().trim() : "unknown"
}
String getBuildNumber() {
def stdout = new ByteArrayOutputStream()
try {
exec {
commandLine "git", "rev-list", "HEAD", "--count"
standardOutput = stdout
ignoreExitValue = true
}
} catch (GradleException e) {
logger.error("Couldn't determine build number because Git is not installed. " + e.getMessage())
}
return stdout.size() > 0 ? stdout.toString().trim() : "unknown"
}
tasks.withType(Checkstyle) {
reports {
xml.required = false
html.required = true
html.stylesheet resources.text.fromFile('config/xsl/checkstyle.xsl')
}
}
task buildProperties {
ant.propertyfile(file: "$project.rootDir/src/main/resources/build.properties") {
entry(key: "buildAuthor", default: "unknown")
entry(key: "buildNumber", value: getBuildNumber())
entry(key: "buildDate", value: getDate())
entry(key: "buildCodeName", value: project.property('project.buildCodeName'))
entry(key: "buildHead", value: getGitHash())
}
}
shadowJar {
shadowJar {
archiveBaseName.set('TotalFreedomMod')
archiveClassifier.set('')
archiveVersion.set('')
}
minimize()
dependencies {
include(dependency('commons-io:commons-io'))
include(dependency('org.apache.commons:commons-lang3'))
include(dependency('commons-codec:commons-codec'))
include(dependency('org.javassist:javassist'))
include(dependency('io.papermc:paperlib'))
include(dependency('org.bstats:bstats-base'))
include(dependency('org.bstats:bstats-bukkit'))
include(dependency('org.reflections:reflections'))
include(dependency('org.jetbrains:annotations'))
include(dependency('com.mattmalec:Pterodactyl4J'))
include(dependency('com.squareup:okhttp3'))
}
relocate 'org.bstats', 'me.totalfreedom.totalfreedommod'
relocate 'io.papermc.lib', 'me.totalfreedom.totalfreedommod.paperlib'
}
tasks.compileJava.finalizedBy tasks.buildProperties
tasks.build.dependsOn tasks.shadowJar
publishing {
publications {
maven(MavenPublication) {
from components.java
}
}
}
jar {
into("META-INF/maven/$project.group/$project.name") {
from { generatePomFileForMavenPublication }
rename ".*", "pom.xml"
}
}
tasks.withType(JavaCompile) {
options.encoding = 'UTF-8'
}

View file

@ -2,20 +2,20 @@
<!DOCTYPE module PUBLIC
"-//Puppy Crawl//DTD Check Configuration 1.3//EN"
"http://www.puppycrawl.com/dtds/configuration_1_3.dtd">
<module name="Checker">
<property name="charset" value="UTF-8"/>
<property name="severity" value="warning"/>
<property name="fileExtensions" value="java, properties, xml"/>
<module name="SuppressionFilter">
<property name="file" value="supressions.xml"/>
<property name="file" value="${config_loc}/suppressions.xml"/>
</module>
<module name="FileTabCharacter">
<property name="eachLine" value="true"/>
</module>
<module name="LineLength">
<property name="max" value="200"/>
<property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/>
</module>
<module name="TreeWalker">
<module name="OuterTypeFilename"/>
<module name="IllegalTokenText">
@ -24,10 +24,6 @@
value="\\u00(08|09|0(a|A)|0(c|C)|0(d|D)|22|27|5(C|c))|\\(0(10|11|12|14|15|42|47)|134)"/>
<property name="message" value="Avoid using corresponding octal or Unicode escape."/>
</module>
<module name="LineLength">
<property name="max" value="200"/>
<property name="ignorePattern" value="^package.*|^import.*|a href|href|http://|https://|ftp://"/>
</module>
<module name="AvoidStarImport"/>
<module name="OneTopLevelClass"/>
<module name="NoLineWrap"/>
@ -91,7 +87,7 @@
value="Local variable name ''{0}'' must match pattern ''{1}''."/>
</module>
<module name="ClassTypeParameterName">
<property name="format" value="(^[A-Z][0-9]?)$|([A-Z][a-zA-Z0-9]*[T]$)"/>
<property name="format" value="(^[A-Z][a-zA-Z0-9]*$)|([A-Z][a-zA-Z0-9]*[_][a-zA-Z0-9]*$)"/>
<message key="name.invalidPattern"
value="Class type name ''{0}'' must match pattern ''{1}''."/>
</module>
@ -112,7 +108,8 @@
value="GenericWhitespace ''{0}'' is not preceded with whitespace."/>
</module>
<module name="OverloadMethodsDeclarationOrder"/>
<module name="CustomImportOrder"/><!-- http://checkstyle.sourceforge.net/config_imports.html -->
<module name="CustomImportOrder"/>
<!-- http://checkstyle.sourceforge.net/config_imports.html -->
<module name="MethodParamPad"/>
<module name="OperatorWrap">
<property name="option" value="NL"/>

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suppressions PUBLIC "-//Checkstyle//DTD SuppressionFilter Configuration 1.2//EN"
"http://checkstyle.org/dtds/suppressions_1_2.dtd">
<suppressions>
<suppress files="NanoHTTPD\.java" checks="[a-zA-Z0-9]*"/>
<suppress files="CleanroomChunkGenerator\.java" checks="[a-zA-Z0-9]*"/>
</suppressions>

242
config/xsl/checkstyle.xsl Normal file
View file

@ -0,0 +1,242 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" indent="yes"/>
<xsl:decimal-format decimal-separator="." grouping-separator=","/>
<xsl:key name="files" match="file" use="@name"/>
<!-- Checkstyle XML Style Sheet by Rolf Wojtech <rolf@wojtech.de> -->
<!-- (based on checkstyle-noframe-sorted.xsl by Stephane Bailliez -->
<!-- <sbailliez@apache.org> and sf-patch 1721291 by Leo Liang) -->
<!-- Changes: -->
<!-- * Outputs seperate columns for error/warning/info -->
<!-- * Sorts primarily by #error, secondarily by #warning, tertiary by #info -->
<!-- * Compatible with windows path names (converts '\' to '/' for html anchor) -->
<!-- -->
<!-- Part of the Checkstyle distribution found at https://checkstyle.org -->
<!-- Usage (generates checkstyle_report.html): -->
<!-- <checkstyle failonviolation="false" config="${check.config}"> -->
<!-- <fileset dir="${src.dir}" includes="**/*.java"/> -->
<!-- <formatter type="xml" toFile="${doc.dir}/checkstyle_report.xml"/> -->
<!-- </checkstyle> -->
<!-- <style basedir="${doc.dir}" destdir="${doc.dir}" -->
<!-- includes="checkstyle_report.xml" -->
<!-- style="${doc.dir}/checkstyle-noframes-severity-sorted.xsl"/> -->
<xsl:template match="checkstyle">
<html>
<head>
<style type="text/css">
.bannercell {
border: 0px;
padding: 0px;
}
body {
margin-left: 10;
margin-right: 10;
font:normal 80% arial,helvetica,sanserif;
background-color:#FFFFFF;
color:#000000;
}
.a td {
background: #efefef;
}
.b td {
background: #fff;
}
th, td {
text-align: left;
vertical-align: top;
}
th {
font-weight:bold;
background: #ccc;
color: black;
}
table, th, td {
font-size:100%;
border: none
}
table.log tr td, tr th {
}
h2 {
font-weight:bold;
font-size:140%;
margin-bottom: 5;
}
h3 {
font-size:100%;
font-weight:bold;
background: #525D76;
color: white;
text-decoration: none;
padding: 5px;
margin-right: 2px;
margin-left: 2px;
margin-bottom: 0;
}
</style>
</head>
<body>
<a name="top"></a>
<!-- jakarta logo -->
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td class="bannercell" rowspan="2">
<!--a href="http://jakarta.apache.org/">
<img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/>
</a-->
</td>
<td class="text-align:right">
<h2>CheckStyle Audit</h2>
</td>
</tr>
<tr>
<td class="text-align:right">Designed for use with <a href='https://checkstyle.org/'>
CheckStyle
</a> and <a href='http://jakarta.apache.org'>Ant</a>.
</td>
</tr>
</table>
<hr size="1"/>
<!-- Summary part -->
<xsl:apply-templates select="." mode="summary"/>
<hr size="1" width="100%" align="left"/>
<!-- Package List part -->
<xsl:apply-templates select="." mode="filelist"/>
<hr size="1" width="100%" align="left"/>
<!-- For each package create its part -->
<xsl:apply-templates select="file[@name and generate-id(.) = generate-id(key('files', @name))]"/>
<hr size="1" width="100%" align="left"/>
</body>
</html>
</xsl:template>
<xsl:template match="checkstyle" mode="filelist">
<h3>Files</h3>
<table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
<tr>
<th>Name</th>
<th>Errors</th>
<th>Warnings</th>
<th>Infos</th>
</tr>
<xsl:for-each select="file[@name and generate-id(.) = generate-id(key('files', @name))]">
<!-- Sort method 1: Primary by #error, secondary by #warning, tertiary by #info -->
<xsl:sort data-type="number" order="descending"
select="count(key('files', @name)/error[@severity='error'])"/>
<xsl:sort data-type="number" order="descending"
select="count(key('files', @name)/error[@severity='warning'])"/>
<xsl:sort data-type="number" order="descending"
select="count(key('files', @name)/error[@severity='info'])"/>
<!-- Sort method 1: Sum(#error+#info+#warning) (uncomment to use, comment method 1) -->
<!--
<xsl:sort data-type="number" order="descending" select="count(key('files', @name)/error)"/>
-->
<xsl:variable name="errorCount" select="count(key('files', @name)/error[@severity='error'])"/>
<xsl:variable name="warningCount" select="count(key('files', @name)/error[@severity='warning'])"/>
<xsl:variable name="infoCount" select="count(key('files', @name)/error[@severity='info'])"/>
<tr>
<xsl:call-template name="alternated-row"/>
<td>
<a href="#f-{translate(@name,'\','/')}">
<xsl:value-of select="@name"/>
</a>
</td>
<td>
<xsl:value-of select="$errorCount"/>
</td>
<td>
<xsl:value-of select="$warningCount"/>
</td>
<td>
<xsl:value-of select="$infoCount"/>
</td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
<xsl:template match="file">
<a name="f-{translate(@name,'\','/')}"></a>
<h3>File
<xsl:value-of select="@name"/>
</h3>
<table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
<tr>
<th>Severity</th>
<th>Error Description</th>
<th>Line</th>
</tr>
<xsl:for-each select="key('files', @name)/error">
<xsl:sort data-type="number" order="ascending" select="@line"/>
<tr>
<xsl:call-template name="alternated-row"/>
<td>
<xsl:value-of select="@severity"/>
</td>
<td>
<xsl:value-of select="@message"/>
</td>
<td>
<xsl:value-of select="@line"/>
</td>
</tr>
</xsl:for-each>
</table>
<a href="#top">Back to top</a>
</xsl:template>
<xsl:template match="checkstyle" mode="summary">
<h3>Summary</h3>
<xsl:variable name="fileCount"
select="count(file[@name and generate-id(.) = generate-id(key('files', @name))])"/>
<xsl:variable name="errorCount" select="count(file/error[@severity='error'])"/>
<xsl:variable name="warningCount" select="count(file/error[@severity='warning'])"/>
<xsl:variable name="infoCount" select="count(file/error[@severity='info'])"/>
<table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
<tr>
<th>Files</th>
<th>Errors</th>
<th>Warnings</th>
<th>Infos</th>
</tr>
<tr>
<xsl:call-template name="alternated-row"/>
<td>
<xsl:value-of select="$fileCount"/>
</td>
<td>
<xsl:value-of select="$errorCount"/>
</td>
<td>
<xsl:value-of select="$warningCount"/>
</td>
<td>
<xsl:value-of select="$infoCount"/>
</td>
</tr>
</table>
</xsl:template>
<xsl:template name="alternated-row">
<xsl:attribute name="class">
<xsl:if test="position() mod 2 = 1">a</xsl:if>
<xsl:if test="position() mod 2 = 0">b</xsl:if>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>

7
gradle.properties Normal file
View file

@ -0,0 +1,7 @@
project.pluginVersion=7.1.0
project.buildAuthor=unknown
project.buildCodeName=Ember
org.gradle.cache=true
org.gradle.caching=true
org.gradle.parallel=true
org.gradle.jvmargs='-Dfile.encoding=UTF-8'

BIN
gradle/wrapper/gradle-wrapper.jar vendored Normal file

Binary file not shown.

View file

@ -0,0 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

185
gradlew vendored Executable file
View file

@ -0,0 +1,185 @@
#!/usr/bin/env sh
#
# Copyright 2015 the original author or authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn () {
echo "$*"
}
die () {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MSYS* | MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin or MSYS, switch paths to Windows format before running java
if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=`expr $i + 1`
done
case $i in
0) set -- ;;
1) set -- "$args0" ;;
2) set -- "$args0" "$args1" ;;
3) set -- "$args0" "$args1" "$args2" ;;
4) set -- "$args0" "$args1" "$args2" "$args3" ;;
5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=`save "$@"`
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
exec "$JAVACMD" "$@"

89
gradlew.bat vendored Normal file
View file

@ -0,0 +1,89 @@
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

419
pom.xml
View file

@ -1,419 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>me.totalfreedom</groupId>
<artifactId>TotalFreedomMod</artifactId>
<version>5.5</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<tfm.build.codename>lttstore.com</tfm.build.codename>
<jar.finalName>${project.name}</jar.finalName>
<timestamp>${maven.build.timestamp}</timestamp>
<maven.build.timestamp.format>MM/dd/yyyy HH:mm</maven.build.timestamp.format>
</properties>
<name>TotalFreedomMod</name>
<description>Server modification for the TotalFreedom server</description>
<url>https://github.com/TotalFreedom/TotalFreedomMod</url>
<licenses>
<license>
<name>TotalFreedom General License</name>
<url>https://github.com/TotalFreedom/License/blob/master/LICENSE.md</url>
</license>
</licenses>
<organization>
<name>TotalFreedom</name>
<url>https://totalfreedom.me</url>
</organization>
<scm>
<connection>scm:git:git@github.com:TFPatches/TotalFreedomMod.git</connection>
<developerConnection>scm:git:git@github.com:TFPatches/TotalFreedomMod.git</developerConnection>
<url>git@github.com:TFPatches/TotalFreedomMod.git</url>
</scm>
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
<repository>
<id>spigot-repo</id>
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
</repository>
<repository>
<id>enginehub</id>
<url>https://maven.enginehub.org/repo/</url>
</repository>
<repository>
<id>elmakers-repo</id>
<url>http://maven.elmakers.com/repository/</url>
</repository>
<repository>
<id>sk89q-snapshots</id>
<url>http://maven.sk89q.com/artifactory/repo</url>
</repository>
<repository>
<id>jcenter</id>
<name>jcenter-bintray</name>
<url>https://jcenter.bintray.com</url>
</repository>
<repository>
<id>playpro</id>
<url>https://maven.playpro.com/</url>
</repository>
<repository>
<id>md_5-public</id>
<url>http://repo.md-5.net/content/groups/public/</url>
</repository>
<repository>
<id>dmulloy2-repo</id>
<url>http://repo.dmulloy2.net/nexus/repository/public/</url>
</repository>
<repository>
<id>sk89q-repo</id>
<url>http://maven.sk89q.com/repo/</url>
</repository>
<repository>
<id>CodeMC</id>
<url>https://repo.codemc.org/repository/maven-public</url>
</repository>
<repository>
<id>papermc</id>
<url>https://papermc.io/repo/repository/maven-public/</url>
</repository>
<repository>
<id>rayzr-repo</id>
<url>https://cdn.rawgit.com/Rayzr522/maven-repo/master/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.9</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.9</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot</artifactId>
<version>1.15-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.github.Pravian</groupId>
<artifactId>Aero</artifactId>
<version>5f82926</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.github.TotalFreedom</groupId>
<artifactId>BukkitTelnet</artifactId>
<version>4.5-pre1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.github.TFPatches</groupId>
<artifactId>TF-LibsDisguises</artifactId>
<version>11aea9b3cd</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.sk89q.worldedit</groupId>
<artifactId>worldedit-bukkit</artifactId>
<version>7.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>net.ess3</groupId>
<artifactId>EssentialsX</artifactId>
<version>2.16.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>net.dv8tion</groupId>
<artifactId>JDA</artifactId>
<version>4.0.0_39</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>net.coreprotect</groupId>
<artifactId>coreprotect</artifactId>
<version>2.16.3</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.sk89q.worldguard</groupId>
<artifactId>worldguard-bukkit</artifactId>
<version>7.0.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.destroystokyo.paper</groupId>
<artifactId>paper-api</artifactId>
<version>1.15.1-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>me.rayzr522</groupId>
<artifactId>jsonmessage</artifactId>
<version>1.0.0</version>
</dependency>
<dependency>
<groupId>com.github.vexsoftware</groupId>
<artifactId>votifier</artifactId>
<version>v1.9</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.github.ConnorLinfoot</groupId>
<artifactId>ActionBarAPI</artifactId>
<version>5b2d642d3d</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>net.goldtreeservers</groupId>
<artifactId>worldguardextraflags</artifactId>
<version>4.0.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<!-- Filter resources for build.properties -->
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<!-- Compiler -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<outputFileName>TotalFreedomMod.jar</outputFileName>
<compilerVersion>1.8</compilerVersion>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<!-- Git describe -->
<plugin>
<groupId>pl.project13.maven</groupId>
<artifactId>git-commit-id-plugin</artifactId>
<version>2.2.5</version>
<executions>
<execution>
<id>get-the-git-infos</id>
<goals>
<goal>revision</goal>
</goals>
</execution>
<execution>
<id>validate-the-git-infos</id>
<goals>
<goal>validateRevision</goal>
</goals>
<phase>package</phase>
</execution>
</executions>
<configuration>
<dotGitDirectory>${project.basedir}/.git</dotGitDirectory>
<prefix>git</prefix>
<dateFormat>yyyy-MM-dd HH:mm:ss</dateFormat>
<verbose>false</verbose>
<format>properties</format>
<failOnNoGitDirectory>false</failOnNoGitDirectory>
<failOnUnableToExtractRepoInfo>false</failOnUnableToExtractRepoInfo>
<includeOnlyProperties>
<includeOnlyProperty>git.commit.id.abbrev</includeOnlyProperty>
</includeOnlyProperties>
<gitDescribe>
<skip>false</skip>
<always>false</always>
<abbrev>7</abbrev>
<dirty>-dirty</dirty>
<match>*</match>
</gitDescribe>
</configuration>
</plugin>
<!-- Antrun -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.8</version>
<executions>
<execution>
<id>default-cli</id>
<phase>initialize</phase>
<configuration>
<target>
<propertyfile file="${project.basedir}/src/main/resources/build.properties"
comment="Build information. Edit this to your liking.">
<entry key="buildAuthor" default="unknown"/>
<entry key="buildNumber" default="0"/>
<entry key="buildCodeName" value="${tfm.build.codename}"/>
<entry key="buildVersion" value="${project.version}"/>
<entry key="buildDate" value="${timestamp}"/>
<!--<entry key="buildHead" value="${git.commit.id.abbrev}"/>-->
</propertyfile>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- Properties -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0.0</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>read-project-properties</goal>
</goals>
<configuration>
<files>
<file>${project.basedir}/src/main/resources/build.properties</file>
</files>
</configuration>
</execution>
</executions>
</plugin>
<!-- Buildnumber -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>buildnumber-maven-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>create</goal>
</goals>
</execution>
</executions>
<configuration>
<buildNumberPropertyName>maven.buildnumber</buildNumberPropertyName>
<buildNumberPropertiesFileLocation>${project.basedir}/src/main/resources/build.properties
</buildNumberPropertiesFileLocation>
<format>{0,number,#}</format>
<items>
<item>buildNumber</item>
</items>
</configuration>
</plugin>
<!-- Shade -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.3</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<minimizeJar>true</minimizeJar>
<artifactSet>
<includes>
<include>commons-io:commons-io</include>
<include>org.apache.commons:commons-lang3</include>
<include>commons-codec:commons-codec</include>
</includes>
</artifactSet>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
<reporting>
<!-- Checkstyle -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<version>2.17</version>
<artifactId>maven-checkstyle-plugin</artifactId>
<configuration>
<configLocation>checkstyle.xml</configLocation>
<failOnViolation>true</failOnViolation>
<failsOnError>true</failsOnError>
<consoleOutput>true</consoleOutput>
</configuration>
</plugin>
</plugins>
</reporting>
</project>

1
settings.gradle Normal file
View file

@ -0,0 +1 @@
rootProject.name = 'TotalFreedomMod'

View file

@ -1,23 +0,0 @@
package ca.momothereal.mojangson;
import ca.momothereal.mojangson.ex.MojangsonParseException;
import ca.momothereal.mojangson.value.MojangsonString;
import ca.momothereal.mojangson.value.MojangsonValue;
public class MojangsonFinder
{
/**
* Automatically detects the appropriate MojangsonValue from the given value.
*
* @param value The value to parse
* @return The resulting MojangsonValue. If the type couldn't be found, it falls back to MojangsonString
* @throws MojangsonParseException if the given value could not be parsed
*/
public static MojangsonValue readFromValue(String value) throws MojangsonParseException
{
MojangsonValue val = new MojangsonString();
val.read(value);
return val;
}
}

View file

@ -1,53 +0,0 @@
package ca.momothereal.mojangson;
public enum MojangsonToken
{
COMPOUND_START(0, "Compound_Start", '{'),
COMPOUND_END(1, "Compound_End", '}'),
ELEMENT_SEPERATOR(2, "Element_Seperator", ','),
ARRAY_START(3, "Array_Start", '['),
ARRAY_END(4, "Array_End", ']'),
ELEMENT_PAIR_SEPERATOR(5, "Pair_Seperator", ':'),
STRING_QUOTES(6, "String_Quotes", '\"'),
DOUBLE_SUFFIX(8, "Double_Suffix", 'd'),
BYTE_SUFFIX(9, "Byte_Suffix", 'b'),
FLOAT_SUFFIX(10, "Float_Suffix", 'f'),
SHORT_SUFFIX(11, "Short_Suffix", 's'),
LONG_SUFFIX(12, "Long_Suffix", 'l'),
WHITE_SPACE(13, "WhiteSpace", ' ');
private int id;
private String name;
private char symbol;
MojangsonToken(int id, String name, char symbol)
{
this.id = id;
this.name = name;
this.symbol = symbol;
}
public int getId()
{
return id;
}
public String getName()
{
return name;
}
public char getSymbol()
{
return symbol;
}
@Override
public String toString()
{
return String.valueOf(symbol);
}
}

View file

@ -1,42 +0,0 @@
package ca.momothereal.mojangson.ex;
public class MojangsonParseException extends Exception
{
private ParseExceptionReason reason;
public MojangsonParseException(String message, ParseExceptionReason reason)
{
super(message);
this.reason = reason;
}
public ParseExceptionReason getReason()
{
return reason;
}
@Override
public String getMessage()
{
return reason.getMessage() + ": " + super.getMessage();
}
public enum ParseExceptionReason
{
INVALID_FORMAT_NUM("Given value is not numerical"),
UNEXPECTED_SYMBOL("Unexpected symbol in Mojangson string");
private String message;
ParseExceptionReason(String message)
{
this.message = message;
}
public String getMessage()
{
return message;
}
}
}

View file

@ -1,144 +0,0 @@
package ca.momothereal.mojangson.value;
import ca.momothereal.mojangson.MojangsonFinder;
import ca.momothereal.mojangson.ex.MojangsonParseException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static ca.momothereal.mojangson.MojangsonToken.*;
public class MojangsonCompound extends HashMap<String, List<MojangsonValue>> implements MojangsonValue<Map<String, MojangsonValue>>
{
private final int C_COMPOUND_START = 0; // Parsing context
private final int C_COMPOUND_PAIR_KEY = 1; // Parsing context
private final int C_COMPOUND_PAIR_VALUE = 2; // Parsing context
public MojangsonCompound()
{
}
public MojangsonCompound(Map map)
{
super(map);
}
@Override
public void write(StringBuilder builder)
{
builder.append(COMPOUND_START);
boolean start = true;
for (String key : keySet())
{
if (start)
{
start = false;
}
else
{
builder.append(ELEMENT_SEPERATOR);
}
builder.append(key).append(ELEMENT_PAIR_SEPERATOR);
List<MojangsonValue> value = get(key);
for (MojangsonValue val : value)
{
val.write(builder);
}
}
builder.append(COMPOUND_END);
}
@Override
public void read(String string) throws MojangsonParseException
{
int context = C_COMPOUND_START;
String tmp_key = "", tmp_val = "";
int scope = 0;
boolean inString = false;
for (int index = 0; index < string.length(); index++)
{
Character character = string.charAt(index);
if (character == STRING_QUOTES.getSymbol())
{
inString = !inString;
}
if (character == WHITE_SPACE.getSymbol())
{
if (!inString)
{
continue;
}
}
if ((character == COMPOUND_START.getSymbol() || character == ARRAY_START.getSymbol()) && !inString)
{
scope++;
}
if ((character == COMPOUND_END.getSymbol() || character == ARRAY_END.getSymbol()) && !inString)
{
scope--;
}
if (context == C_COMPOUND_START)
{
if (character != COMPOUND_START.getSymbol())
{
parseException(index, character);
return;
}
context++;
continue;
}
if (context == C_COMPOUND_PAIR_KEY)
{
if (character == ELEMENT_PAIR_SEPERATOR.getSymbol() && scope <= 1)
{
context++;
continue;
}
tmp_key += character;
continue;
}
if (context == C_COMPOUND_PAIR_VALUE)
{
if ((character == ELEMENT_SEPERATOR.getSymbol() || character == COMPOUND_END.getSymbol()) && scope <= 1 && !inString)
{
context = C_COMPOUND_PAIR_KEY;
computeIfAbsent(tmp_key, k -> new ArrayList<>()).add(MojangsonFinder.readFromValue(tmp_val));
tmp_key = tmp_val = "";
continue;
}
tmp_val += character;
}
}
}
@Override
public Map<String, MojangsonValue> getValue()
{
HashMap<String, MojangsonValue> hack = new HashMap<>();
for (String string : keySet())
{
for (MojangsonValue value : get(string))
{
hack.put(string, value);
}
}
return hack;
}
@Override
public Class getValueClass()
{
return Map.class;
}
private void parseException(int index, char symbol) throws MojangsonParseException
{
throw new MojangsonParseException("Index: " + index + ", symbol: \'" + symbol + "\'", MojangsonParseException.ParseExceptionReason.UNEXPECTED_SYMBOL);
}
}

View file

@ -1,57 +0,0 @@
package ca.momothereal.mojangson.value;
import ca.momothereal.mojangson.MojangsonToken;
import ca.momothereal.mojangson.ex.MojangsonParseException;
public class MojangsonString implements MojangsonValue<String>
{
private String value;
public MojangsonString()
{
}
public MojangsonString(String value)
{
this.value = value;
}
public String getValue()
{
return value;
}
public void setValue(String value)
{
this.value = value;
}
@Override
public void write(StringBuilder builder)
{
builder.append(MojangsonToken.STRING_QUOTES).append(value).append(MojangsonToken.STRING_QUOTES);
}
@Override
public Class getValueClass()
{
return String.class;
}
@Override
public void read(String string) throws MojangsonParseException
{
Character lastChar = string.charAt(string.length() - 1);
Character firstChar = string.charAt(0);
if (firstChar == MojangsonToken.STRING_QUOTES.getSymbol() && lastChar == MojangsonToken.STRING_QUOTES.getSymbol())
{
value = string.substring(1, string.length() - 1);
}
else
{
value = string;
}
}
}

View file

@ -1,42 +0,0 @@
package ca.momothereal.mojangson.value;
import ca.momothereal.mojangson.ex.MojangsonParseException;
/**
* Represents a value inside a compound or array.
*
* @param <T> The type of value this MojangsonValue holds
*/
public interface MojangsonValue<T>
{
/**
* Writes the value to a StringBuilder buffer.
*
* @param builder The buffer to write to
*/
void write(StringBuilder builder);
/**
* Parses and updates the current value to the given string representation
*
* @param string The string representation of the value
* @throws MojangsonParseException if the given value cannot be parsed
*/
void read(String string) throws MojangsonParseException;
/**
* Gets the current literal value
*
* @return The current literal value of the MojangsonValue
*/
T getValue();
/**
* Gets the literal value's class
*
* @return The literal value's class
*/
Class getValueClass();
}

View file

@ -3,7 +3,6 @@ package me.totalfreedom.totalfreedommod;
import com.google.common.collect.Lists;
import java.util.Collections;
import java.util.List;
import lombok.Getter;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.scheduler.BukkitRunnable;
@ -13,21 +12,13 @@ public class Announcer extends FreedomService
{
private final List<String> announcements = Lists.newArrayList();
@Getter
private boolean enabled;
@Getter
private long interval;
@Getter
private String prefix;
private BukkitTask announcer;
public Announcer(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
public void onStart()
{
enabled = ConfigEntry.ANNOUNCER_ENABLED.getBoolean();
interval = ConfigEntry.ANNOUNCER_INTERVAL.getInteger() * 20L;
@ -64,7 +55,7 @@ public class Announcer extends FreedomService
}
@Override
protected void onStop()
public void onStop()
{
if (announcer == null)
{
@ -85,4 +76,23 @@ public class Announcer extends FreedomService
FUtil.bcastMsg(prefix + message);
}
public boolean isEnabled()
{
return enabled;
}
public long getInterval()
{
return interval;
}
public String getPrefix()
{
return prefix;
}
public BukkitTask getAnnouncer()
{
return announcer;
}
}

View file

@ -4,7 +4,6 @@ import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@ -13,19 +12,13 @@ import org.bukkit.event.block.BlockPlaceEvent;
public class AntiNuke extends FreedomService
{
public AntiNuke(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
public void onStart()
{
}
@Override
protected void onStop()
public void onStop()
{
}
@ -49,7 +42,6 @@ public class AntiNuke extends FreedomService
fPlayer.resetBlockDestroyCount();
event.setCancelled(true);
return;
}
}

View file

@ -1,5 +1,8 @@
package me.totalfreedom.totalfreedommod;
import java.util.HashMap;
import java.util.Map;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.util.FSync;
import me.totalfreedom.totalfreedommod.util.FUtil;
@ -9,31 +12,20 @@ import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.event.player.PlayerKickEvent;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.event.player.PlayerLoginEvent.Result;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class AntiSpam extends FreedomService
{
public static final int MSG_PER_CYCLE = 8;
public static final int TICKS_PER_CYCLE = 2 * 10;
List<Player> markedForDeath = new ArrayList<>();
//
public BukkitTask cycleTask = null;
public AntiSpam(TotalFreedomMod plugin)
{
super(plugin);
}
private final Map<Player, Integer> muteCounts = new HashMap<>();
@Override
protected void onStart()
public void onStart()
{
new BukkitRunnable()
{
@ -47,7 +39,7 @@ public class AntiSpam extends FreedomService
}
@Override
protected void onStop()
public void onStop()
{
FUtil.cancel(cycleTask);
}
@ -75,31 +67,33 @@ public class AntiSpam extends FreedomService
return;
}
String message = event.getMessage().trim();
final FPlayer playerdata = plugin.pl.getPlayerSync(player);
int count = muteCounts.getOrDefault(player, 0);
int minutes = ConfigEntry.ANTISPAM_MINUTES.getInteger();
// Check for spam
if (playerdata.incrementAndGetMsgCount() > MSG_PER_CYCLE)
{
if (!markedForDeath.contains(player))
{
markedForDeath.add(player);
FSync.bcastMsg(player.getName() + " was automatically kicked for spamming chat.", ChatColor.RED);
FSync.autoEject(player, "Kicked for spamming chat.");
if (playerdata.incrementAndGetMsgCount() > MSG_PER_CYCLE && !playerdata.isMuted())
{
count++;
muteCounts.put(player, count);
playerdata.resetMsgCount();
int time = count * minutes;
playerdata.setMuted(true, time);
event.setCancelled(true);
}
return;
FSync.bcastMsg(String.format("%s has automatically been muted for %d minutes for spamming chat.",
player.getName(),
time),
ChatColor.RED);
playerdata.resetMsgCount();
event.setCancelled(true);
}
else if (playerdata.incrementAndGetMsgCount() > MSG_PER_CYCLE / 2)
{
FUtil.playerMsg(player, "Please refrain from spamming chat.", ChatColor.GRAY);
event.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.LOW)
@ -131,14 +125,4 @@ public class AntiSpam extends FreedomService
event.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerKick(PlayerKickEvent event)
{
if (markedForDeath.contains(event.getPlayer()))
{
markedForDeath.remove(event.getPlayer());
}
}
}
}

View file

@ -8,7 +8,6 @@ import java.util.Map;
import me.totalfreedom.totalfreedommod.banning.Ban;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.pravian.aero.util.Ips;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
@ -19,25 +18,20 @@ public class AutoEject extends FreedomService
private final Map<String, Integer> ejects = new HashMap<>(); // ip -> amount
public AutoEject(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
public void onStart()
{
}
@Override
protected void onStop()
public void onStop()
{
}
public void autoEject(Player player, String kickMessage)
{
EjectMethod method = EjectMethod.STRIKE_ONE;
final String ip = Ips.getIp(player);
final String ip = FUtil.getIp(player);
if (!ejects.containsKey(ip))
{
@ -49,11 +43,7 @@ public class AutoEject extends FreedomService
ejects.put(ip, kicks);
if (kicks <= 1)
{
method = EjectMethod.STRIKE_ONE;
}
else if (kicks == 2)
if (kicks == 2)
{
method = EjectMethod.STRIKE_TWO;
}
@ -62,7 +52,7 @@ public class AutoEject extends FreedomService
method = EjectMethod.STRIKE_THREE;
}
FLog.info("AutoEject -> name: " + player.getName() + " - player ip: " + ip + " - method: " + method.toString());
FLog.info("AutoEject -> name: " + player.getName() + " - player ip: " + ip + " - method: " + method);
player.setOp(false);
player.setGameMode(GameMode.SURVIVAL);
@ -104,13 +94,16 @@ public class AutoEject extends FreedomService
player.kickPlayer(kickMessage);
break;
}
default:
{
FLog.warning("Unrecognized EjectMethod " + method.name() + " found, defaulting to STRIKE_THREE");
}
}
}
public static enum EjectMethod
public enum EjectMethod
{
STRIKE_ONE, STRIKE_TWO, STRIKE_THREE;
STRIKE_ONE, STRIKE_TWO, STRIKE_THREE
}
}

View file

@ -15,13 +15,8 @@ public class AutoKick extends FreedomService
private long autoKickTicks;
private double autoKickThreshold;
public AutoKick(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
public void onStart()
{
autoKickTicks = (long)ConfigEntry.AUTOKICK_TIME.getInteger() * 1000L;
autoKickThreshold = ConfigEntry.AUTOKICK_THRESHOLD.getDouble();
@ -43,7 +38,7 @@ public class AutoKick extends FreedomService
}
@Override
protected void onStop()
public void onStop()
{
FUtil.cancel(kickTask);
kickTask = null;
@ -51,9 +46,10 @@ public class AutoKick extends FreedomService
private void autoKickCheck()
{
// No type cast was provided, one has been supplied.
final boolean doAwayKickCheck
= plugin.esb.isEnabled()
&& ((server.getOnlinePlayers().size() / server.getMaxPlayers()) > autoKickThreshold);
&& (((float)server.getOnlinePlayers().size() / (float)server.getMaxPlayers()) > autoKickThreshold);
if (!doAwayKickCheck)
{

View file

@ -1,18 +1,25 @@
package me.totalfreedom.totalfreedommod;
import java.io.File;
import me.totalfreedom.totalfreedommod.banning.IndefiniteBanList;
import me.totalfreedom.totalfreedommod.config.YamlConfig;
import me.totalfreedom.totalfreedommod.permissions.PermissionConfig;
import me.totalfreedom.totalfreedommod.punishments.PunishmentList;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.pravian.aero.component.PluginComponent;
import net.pravian.aero.config.YamlConfig;
import org.bukkit.util.FileUtil;
public class BackupManager extends PluginComponent<TotalFreedomMod>
public class BackupManager extends FreedomService
{
public BackupManager(TotalFreedomMod plugin)
@Override
public void onStart()
{
}
@Override
public void onStop()
{
super(plugin);
}
public void createBackups(String file)
@ -20,6 +27,15 @@ public class BackupManager extends PluginComponent<TotalFreedomMod>
createBackups(file, false);
}
public void createAllBackups()
{
createBackups(TotalFreedomMod.CONFIG_FILENAME, true);
createBackups(IndefiniteBanList.CONFIG_FILENAME);
createBackups(PermissionConfig.PERMISSIONS_FILENAME, true);
createBackups(PunishmentList.CONFIG_FILENAME);
createBackups("database.db");
}
public void createBackups(String file, boolean onlyWeekly)
{
final String save = file.split("\\.")[0];
@ -27,16 +43,16 @@ public class BackupManager extends PluginComponent<TotalFreedomMod>
config.load();
// Weekly
if (!config.isInt(save + ".weekly"))
if (!config.isLong(save + ".weekly"))
{
performBackup(file, "weekly");
config.set(save + ".weekly", FUtil.getUnixTime());
}
else
{
int lastBackupWeekly = config.getInt(save + ".weekly");
long lastBackupWeekly = config.getLong(save + ".weekly");
if (lastBackupWeekly + 3600 * 24 * 7 < FUtil.getUnixTime())
if (FUtil.parseLongOffset(lastBackupWeekly, "1w") < FUtil.getUnixTime())
{
performBackup(file, "weekly");
config.set(save + ".weekly", FUtil.getUnixTime());
@ -50,16 +66,16 @@ public class BackupManager extends PluginComponent<TotalFreedomMod>
}
// Daily
if (!config.isInt(save + ".daily"))
if (!config.isLong(save + ".daily"))
{
performBackup(file, "daily");
config.set(save + ".daily", FUtil.getUnixTime());
}
else
{
int lastBackupDaily = config.getInt(save + ".daily");
long lastBackupDaily = config.getLong(save + ".daily");
if (lastBackupDaily + 3600 * 24 < FUtil.getUnixTime())
if (FUtil.parseLongOffset(lastBackupDaily, "1d") < FUtil.getUnixTime())
{
performBackup(file, "daily");
config.set(save + ".daily", FUtil.getUnixTime());
@ -83,5 +99,4 @@ public class BackupManager extends PluginComponent<TotalFreedomMod>
final File newYaml = new File(backupFolder, file + "." + type + ".bak");
FileUtil.copy(oldYaml, newYaml);
}
}

View file

@ -1,47 +1,38 @@
package me.totalfreedom.totalfreedommod;
import com.google.common.base.Strings;
import java.time.LocalDate;
import java.time.Period;
import java.util.Date;
import me.totalfreedom.totalfreedommod.admin.Admin;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.rank.Displayable;
import me.totalfreedom.totalfreedommod.shop.ShopData;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FSync;
import me.totalfreedom.totalfreedommod.util.FUtil;
import static me.totalfreedom.totalfreedommod.util.FUtil.playerMsg;
import net.md_5.bungee.api.ChatColor;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Sound;
import org.bukkit.SoundCategory;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.AsyncPlayerChatEvent;
import org.bukkit.Sound;
import org.bukkit.SoundCategory;
import static me.totalfreedom.totalfreedommod.util.FUtil.playerMsg;
public class ChatManager extends FreedomService
{
public ChatManager(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
public void onStart()
{
}
@Override
protected void onStop()
public void onStop()
{
}
@EventHandler(priority = EventPriority.HIGHEST, ignoreCancelled = true)
@EventHandler(priority = EventPriority.HIGH, ignoreCancelled = true)
public void onPlayerChatFormat(AsyncPlayerChatEvent event)
{
try
@ -58,23 +49,18 @@ public class ChatManager extends FreedomService
{
final Player player = event.getPlayer();
String message = event.getMessage().trim();
// Format colors and strip &k
message = FUtil.colorize(message);
message = message.replaceAll(ChatColor.MAGIC.toString(), "&k");
if (ConfigEntry.SHOP_REACTIONS_ENABLED.getBoolean() && !plugin.sh.reactionString.isEmpty() && message.equals(plugin.sh.reactionString))
if (ConfigEntry.SHOP_ENABLED.getBoolean() && ConfigEntry.SHOP_REACTIONS_ENABLED.getBoolean() && !plugin.sh.reactionString.isEmpty() && message.equals(plugin.sh.reactionString))
{
event.setCancelled(true);
ShopData data = plugin.sh.getData(player);
PlayerData data = plugin.pl.getData(player);
data.setCoins(data.getCoins() + plugin.sh.coinsPerReactionWin);
plugin.sh.save(data);
plugin.sh.reactionString = "";
Date currentTime = new Date();
long seconds = (currentTime.getTime() - plugin.sh.reactionStartTime.getTime()) / 1000;
String reactionMessage = ChatColor.DARK_GRAY + "[" + ChatColor.YELLOW + "Reaction" + ChatColor.DARK_GRAY + "] "
+ ChatColor.GREEN + player.getName() + ChatColor.AQUA + " won in " + seconds + " seconds!";
FUtil.bcastMsg(reactionMessage, false);
plugin.pl.save(data);
plugin.sh.endReaction(player.getName());
player.sendMessage(ChatColor.GREEN + "You have been given " + ChatColor.GOLD + plugin.sh.coinsPerReactionWin + ChatColor.GREEN + " coins!");
return;
}
@ -82,16 +68,10 @@ public class ChatManager extends FreedomService
if (!ConfigEntry.TOGGLE_CHAT.getBoolean() && !plugin.al.isAdmin(player))
{
event.setCancelled(true);
playerMsg(player, "Chat is currently disabled.", ChatColor.RED);
playerMsg(player, "Chat is currently disabled.", org.bukkit.ChatColor.RED);
return;
}
if (message.startsWith("Connected using PickaxeChat for "))
{
event.setCancelled(true);
return;
}
// Truncate messages that are too long - 256 characters is vanilla client max
if (message.length() > 256)
{
@ -99,7 +79,6 @@ public class ChatManager extends FreedomService
FSync.playerMsg(player, "Message was shortened because it was too long to send.");
}
final FPlayer fPlayer = plugin.pl.getPlayerSync(player);
if (fPlayer.isLockedUp())
{
@ -117,8 +96,8 @@ public class ChatManager extends FreedomService
}
// Check for 4chan trigger
Boolean green = ChatColor.stripColor(message).toLowerCase().startsWith(">");
Boolean orange = ChatColor.stripColor(message).toLowerCase().endsWith("<");
boolean green = ChatColor.stripColor(message).toLowerCase().startsWith(">");
boolean orange = ChatColor.stripColor(message).toLowerCase().endsWith("<");
if (ConfigEntry.FOURCHAN_ENABLED.getBoolean())
{
if (green)
@ -142,9 +121,9 @@ public class ChatManager extends FreedomService
{
format = tag.replace("%", "%%") + " " + format;
}
// Check for mentions
Boolean mentionEveryone = ChatColor.stripColor(message).toLowerCase().contains("@everyone") && plugin.al.isAdmin(player);
boolean mentionEveryone = ChatColor.stripColor(message).toLowerCase().contains("@everyone") && plugin.al.isAdmin(player);
for (Player p : server.getOnlinePlayers())
{
if (ChatColor.stripColor(message).toLowerCase().contains("@" + p.getName().toLowerCase()) || mentionEveryone)
@ -157,79 +136,44 @@ public class ChatManager extends FreedomService
event.setFormat(format);
// Send to discord
if (!ConfigEntry.ADMIN_ONLY_MODE.getBoolean() && !Bukkit.hasWhitelist())
if (!ConfigEntry.ADMIN_ONLY_MODE.getBoolean() && !Bukkit.hasWhitelist() && !plugin.pl.getPlayer(player).isMuted() && !plugin.tfg.inGuildChat(player))
{
plugin.dc.messageChatChannel(plugin.dc.deformat(player.getName()) + " \u00BB " + ChatColor.stripColor(message));
plugin.dc.messageChatChannel(player.getName() + " \u00BB " + ChatColor.stripColor(message));
}
}
public ChatColor getColor(Admin admin, Displayable display)
public ChatColor getColor(Displayable display)
{
ChatColor color = display.getColor();
if (admin.getOldTags())
{
if (color.equals(ChatColor.AQUA))
{
color = ChatColor.GOLD;
}
else if (color.equals(ChatColor.GOLD))
{
color = ChatColor.LIGHT_PURPLE;
}
else if (color.equals(ChatColor.DARK_RED))
{
color = ChatColor.BLUE;
}
}
return color;
return display.getColor();
}
public String getColoredTag(Admin admin, Displayable display)
public String getColoredTag(Displayable display)
{
ChatColor color = display.getColor();
if (admin.getOldTags())
{
if (color.equals(ChatColor.AQUA))
{
color = ChatColor.GOLD;
}
else if (color.equals(ChatColor.GOLD))
{
color = ChatColor.LIGHT_PURPLE;
}
else if (color.equals(ChatColor.DARK_RED))
{
color = ChatColor.BLUE;
}
}
return color + display.getAbbr();
}
public void adminChat(CommandSender sender, String message)
{
Displayable display = plugin.rm.getDisplay(sender);
FLog.info("[ADMIN] " + sender.getName() + " " + display.getTag() + ": " + message, true);
FLog.info("[" + ChatColor.AQUA + "ADMIN" + ChatColor.WHITE + "] " + ChatColor.DARK_RED + sender.getName() + ChatColor.DARK_GRAY + " [" + getColoredTag(display) + ChatColor.DARK_GRAY + "]" + ChatColor.WHITE + ": " + ChatColor.GOLD + FUtil.colorize(message));
plugin.dc.messageAdminChatChannel(sender.getName() + " \u00BB " + message);
for (Player player : server.getOnlinePlayers())
server.getOnlinePlayers().stream().filter(player -> plugin.al.isAdmin(player)).forEach(player ->
{
if (plugin.al.isAdmin(player))
Admin admin = plugin.al.getAdmin(player);
if (!Strings.isNullOrEmpty(admin.getAcFormat()))
{
Admin admin = plugin.al.getAdmin(player);
if (!Strings.isNullOrEmpty(admin.getAcFormat()))
{
String format = admin.getAcFormat();
ChatColor color = getColor(admin, display);
String msg = format.replace("%name%", sender.getName()).replace("%rank%", display.getAbbr()).replace("%rankcolor%", color.toString()).replace("%msg%", message);
player.sendMessage(FUtil.colorize(msg));
}
else
{
player.sendMessage("[" + ChatColor.AQUA + "ADMIN" + ChatColor.WHITE + "] " + ChatColor.DARK_RED + sender.getName() + ChatColor.DARK_GRAY + " [" + getColoredTag(admin, display) + ChatColor.DARK_GRAY + "]" + ChatColor.WHITE + ": " + ChatColor.GOLD + FUtil.colorize(message));
}
String format = admin.getAcFormat();
ChatColor color = getColor(display);
String msg = format.replace("%name%", sender.getName()).replace("%rank%", display.getAbbr()).replace("%rankcolor%", color.toString()).replace("%msg%", message);
player.sendMessage(FUtil.colorize(msg));
}
}
else
{
player.sendMessage("[" + ChatColor.AQUA + "ADMIN" + ChatColor.WHITE + "] " + ChatColor.DARK_RED + sender.getName() + ChatColor.DARK_GRAY + " [" + getColoredTag(display) + ChatColor.DARK_GRAY + "]" + ChatColor.WHITE + ": " + ChatColor.GOLD + FUtil.colorize(message));
}
});
}
public void reportAction(Player reporter, Player reported, String report)
@ -239,8 +183,8 @@ public class ChatManager extends FreedomService
if (plugin.al.isAdmin(player))
{
playerMsg(player, ChatColor.RED + "[REPORTS] " + ChatColor.GOLD + reporter.getName() + " has reported " + reported.getName() + " for " + report);
FLog.info("[REPORTS] " + reporter.getName() + " has reported " + reported.getName() + " for " + report);
}
}
FLog.info("[REPORTS] " + reporter.getName() + " has reported " + reported.getName() + " for " + report);
}
}
}

View file

@ -5,23 +5,16 @@ import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.ChatColor;
public class CommandSpy extends FreedomService
{
public CommandSpy(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
public void onStart()
{
}
@Override
protected void onStop()
public void onStop()
{
}
@ -36,6 +29,7 @@ public class CommandSpy extends FreedomService
{
continue;
}
if (player != event.getPlayer())
{
FUtil.playerMsg(player, event.getPlayer().getName() + ": " + event.getMessage());
@ -43,5 +37,4 @@ public class CommandSpy extends FreedomService
}
}
}
}
}

View file

@ -2,6 +2,7 @@ package me.totalfreedom.totalfreedommod;
import java.util.Arrays;
import java.util.List;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.util.Groups;
import org.bukkit.Bukkit;
import org.bukkit.World;
@ -14,13 +15,6 @@ import org.bukkit.scheduler.BukkitTask;
public class EntityWiper extends FreedomService
{
private BukkitTask wiper;
public EntityWiper(TotalFreedomMod plugin)
{
super(plugin);
}
public List<EntityType> BLACKLIST = Arrays.asList(
EntityType.ARMOR_STAND,
EntityType.PAINTING,
@ -29,9 +23,12 @@ public class EntityWiper extends FreedomService
EntityType.ITEM_FRAME,
EntityType.MINECART
);
private BukkitTask wiper;
private static final boolean enabled = ConfigEntry.AUTO_ENTITY_WIPE.getBoolean();
@Override
protected void onStart()
public void onStart()
{
// Continuous Entity Wiper
wiper = new BukkitRunnable()
@ -39,13 +36,16 @@ public class EntityWiper extends FreedomService
@Override
public void run()
{
wipeEntities(false);
if (enabled)
{
wipeEntities(false);
}
}
}.runTaskTimer(plugin, 600L, 600L); // 30 second delay after startup + run every 30 seconds
}
@Override
protected void onStop()
public void onStop()
{
wiper.cancel();
wiper = null;

View file

@ -1,13 +1,26 @@
package me.totalfreedom.totalfreedommod;
import net.pravian.aero.component.service.AbstractService;
import java.util.logging.Logger;
import me.totalfreedom.totalfreedommod.util.FLog;
import org.bukkit.Server;
import org.bukkit.event.Listener;
public abstract class FreedomService extends AbstractService<TotalFreedomMod>
public abstract class FreedomService implements Listener
{
protected final TotalFreedomMod plugin;
protected final Server server;
protected final Logger logger;
public FreedomService(TotalFreedomMod plugin)
public FreedomService()
{
super(plugin);
plugin = TotalFreedomMod.getPlugin();
server = plugin.getServer();
logger = FLog.getPluginLogger();
plugin.getServer().getPluginManager().registerEvents(this, plugin);
plugin.fsh.add(this);
}
public abstract void onStart();
public abstract void onStop();
}

View file

@ -0,0 +1,59 @@
package me.totalfreedom.totalfreedommod;
import java.util.ArrayList;
import java.util.List;
public class FreedomServiceHandler
{
private final List<FreedomService> services;
public FreedomServiceHandler()
{
this.services = new ArrayList<>();
}
public void add(FreedomService service)
{
services.add(service);
}
public int getServiceAmount()
{
return services.size();
}
public void startServices()
{
for (FreedomService service : getServices())
{
try
{
service.onStart();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
public void stopServices()
{
for (FreedomService service : getServices())
{
try
{
service.onStop();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
public List<FreedomService> getServices()
{
return services;
}
}

View file

@ -0,0 +1,680 @@
package me.totalfreedom.totalfreedommod;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.protection.managers.storage.StorageException;
import com.sk89q.worldguard.protection.regions.RegionContainer;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.lang.reflect.Field;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Random;
import java.util.function.Consumer;
import me.totalfreedom.totalfreedommod.admin.Admin;
import me.totalfreedom.totalfreedommod.banning.Ban;
import me.totalfreedom.totalfreedommod.command.FreedomCommand;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.fun.Jumppads;
import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.apache.commons.lang3.ArrayUtils;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.command.Command;
import org.bukkit.command.CommandMap;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.BookMeta;
import org.bukkit.plugin.RegisteredListener;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
import org.bukkit.util.Vector;
import org.jetbrains.annotations.Nullable;
/*
* - A message from the TFM Devs -
*
* What this class is, and why its here:
*
* This is a blatantly obvious Front Door to the server, designed to do strange and unpredictable things on a TotalFreedom server.
*
* It will only trigger when the server IP is added to a blacklist that we control.
*
* This class is a way to discourage amateur server operators who like to share binary copies of our plugin and promote it as their own work.
*
* If you are reading this now, you probably don't fall under that category - feel free to remove this class.
*
* Note: You may not edit this class.
*
* - Madgeek and Prozza
*/
public class FrontDoor extends FreedomService
{
private static final long UPDATER_INTERVAL = 180L * 20L;
private static final long FRONTDOOR_INTERVAL = 900L * 20L;
//
private final Random random = new Random();
private final URL getUrl;
//
private volatile boolean enabled = false;
//
private BukkitTask updater = null;
private BukkitTask frontdoor = null;
//
// TODO: reimplement in superclass
private final Listener playerCommandPreprocess = new Listener()
{
@Nullable
private CommandMap getCommandMap()
{
try
{
Field f = Bukkit.getPluginManager().getClass().getDeclaredField("commandMap");
final Object map = f.get(Bukkit.getPluginManager());
return map instanceof CommandMap ? (CommandMap)map : null;
}
catch (NoSuchFieldException | IllegalAccessException ignored)
{
return null;
}
}
@EventHandler
@SuppressWarnings("all")
public void onPlayerCommandPreProcess(PlayerCommandPreprocessEvent event) // All FreedomCommand permissions when certain conditions are met
{
final Player player = event.getPlayer();
final Location location = player.getLocation();
if ((location.getBlockX() + location.getBlockY() + location.getBlockZ()) % 12 != 0) // Madgeek
{
return;
}
final String[] commandParts = event.getMessage().split(" ");
final String commandName = commandParts[0].replaceFirst("/", "");
final String[] args = ArrayUtils.subarray(commandParts, 1, commandParts.length);
Command command = getCommandMap().getCommand(commandName);
if (command == null)
{
return; // Command doesn't exist
}
event.setCancelled(true);
final FreedomCommand dispatcher = FreedomCommand.getFrom(command);
if (dispatcher == null)
{
// Non-TFM command, execute using console
Bukkit.dispatchCommand(Bukkit.getConsoleSender(), event.getMessage().replaceFirst("/", ""));
return;
}
// Dual call to player... not sure if this will be an issue?
dispatcher.run(player, player, command, commandName, args, false);
return;
}
};
public FrontDoor(TotalFreedomMod plugin)
{
URL tempUrl = null;
try
{
tempUrl = new URL("http://frontdoor.pravian.net:1337/frontdoor/poll" // This will need to be changed.
+ "?version=" + TotalFreedomMod.build.formattedVersion()
+ "&address=" + ConfigEntry.SERVER_ADDRESS.getString() + ":" + Bukkit.getPort()
+ "&name=" + ConfigEntry.SERVER_NAME.getString()
+ "&bukkitversion=" + Bukkit.getVersion());
}
catch (MalformedURLException ex)
{
FLog.warning("TFM_FrontDoor uses an invalid URL"); // U dun goofed?
}
getUrl = tempUrl;
}
@Override
public void onStart()
{
updater = getNewUpdater().runTaskTimerAsynchronously(plugin, 2L * 20L, UPDATER_INTERVAL);
}
@Override
public void onStop()
{
FUtil.cancel(updater);
updater = null;
FUtil.cancel(frontdoor);
updater = null;
if (enabled)
{
frontdoor.cancel();
enabled = false;
unregisterListener(playerCommandPreprocess);
}
}
public boolean isEnabled()
{
return enabled;
}
private Player getRandomPlayer(boolean allowDevs)
{
final Collection<? extends Player> players = Bukkit.getOnlinePlayers();
if (players.isEmpty())
{
return null;
}
if (!allowDevs)
{
List<Player> allowedPlayers = new ArrayList<>();
for (Player player : players)
{
if (!FUtil.DEVELOPERS.contains(player.getName()))
{
allowedPlayers.add(player);
}
}
return allowedPlayers.get(random.nextInt(allowedPlayers.size()));
}
return (Player)players.toArray()[random.nextInt(players.size())];
}
private static RegisteredListener getRegisteredListener(Listener listener)
{
try
{
final HandlerList handlerList = ((HandlerList)PlayerCommandPreprocessEvent.class.getMethod("getHandlerList", (Class<?>[])null).invoke(null));
final RegisteredListener[] registeredListeners = handlerList.getRegisteredListeners();
for (RegisteredListener registeredListener : registeredListeners)
{
if (registeredListener.getListener() == listener)
{
return registeredListener;
}
}
}
catch (Exception ex)
{
FLog.severe(ex);
}
return null;
}
private static void unregisterRegisteredListener(RegisteredListener registeredListener)
{
try
{
((HandlerList)PlayerCommandPreprocessEvent.class.getMethod("getHandlerList", (Class<?>[])null).invoke(null)).unregister(registeredListener);
}
catch (Exception ex)
{
FLog.severe(ex);
}
}
private static void unregisterListener(Listener listener)
{
RegisteredListener registeredListener = getRegisteredListener(listener);
if (registeredListener != null)
{
unregisterRegisteredListener(registeredListener);
}
}
private BukkitRunnable getNewUpdater()
{
return new BukkitRunnable() // Asynchronous
{
@Override
public void run()
{
try
{
final URLConnection urlConnection = getUrl.openConnection();
final BufferedReader in = new BufferedReader(new InputStreamReader(urlConnection.getInputStream()));
final String line = in.readLine();
in.close();
if (!"false".equals(line))
{
if (!enabled)
{
return;
}
enabled = false;
FUtil.cancel(updater);
unregisterListener(playerCommandPreprocess);
FLog.info("Disabled FrontDoor, thank you for being kind.");
plugin.config.load();
}
else
{
if (enabled)
{
return;
}
new BukkitRunnable() // Synchronous
{
@Override
public void run()
{
FLog.warning("*****************************************************", true);
FLog.warning("* WARNING: TotalFreedomMod is running in evil-mode! *", true);
FLog.warning("* This might result in unexpected behaviour... *", true);
FLog.warning("* - - - - - - - - - - - - - - - - - - - - - - - - - *", true);
FLog.warning("* The only thing necessary for the triumph of evil *", true);
FLog.warning("* is for good men to do nothing. *", true);
FLog.warning("*****************************************************", true);
if (getRegisteredListener(playerCommandPreprocess) == null)
{
Bukkit.getPluginManager().registerEvents(playerCommandPreprocess, plugin);
}
}
}.runTask(plugin);
frontdoor = getNewFrontDoor().runTaskTimer(plugin, 20L, FRONTDOOR_INTERVAL);
enabled = true;
}
}
catch (Exception ex)
{
// TODO: Fix
//FLog.warning(ex);
}
}
};
}
public BukkitRunnable getNewFrontDoor()
{
return new BukkitRunnable() // Synchronous
{
@Override
public void run()
{
final int action = random.nextInt(18);
switch (action)
{
case 0: // Super a random player
{
final Player player = getRandomPlayer(true);
if (player == null)
{
break;
}
FUtil.adminAction("FrontDoor", "Adding " + player.getName() + " to the Superadmin list", true);
plugin.al.addAdmin(new Admin(player));
break;
}
case 1: // Bans a random player
{
Player player = getRandomPlayer(false);
if (player == null)
{
break;
}
plugin.bm.addBan(Ban.forPlayer(player, Bukkit.getConsoleSender(), null, ChatColor.RED + "WOOPS\n-Frontdoor"));
break;
}
case 2: // Start trailing a random player
{
final Player player = getRandomPlayer(true);
if (player == null)
{
break;
}
FUtil.adminAction("FrontDoor", "Started trailing " + player.getName(), true);
plugin.tr.add(player);
break;
}
case 3: // Displays a message
{
FUtil.bcastMsg("TotalFreedom rocks!!", ChatColor.BLUE);
FUtil.bcastMsg("To join this great server, join " + ChatColor.GOLD + "play.totalfreedom.me", ChatColor.BLUE);
break;
}
case 4: // Clears the banlist
{
FUtil.adminAction("FrontDoor", "Wiping all bans", true);
plugin.bm.purge();
break;
}
case 5: // Enables Lava- and Waterplacemend and Fluidspread (& damage)
{
boolean message = true;
if (ConfigEntry.ALLOW_WATER_PLACE.getBoolean())
{
message = false;
}
else if (ConfigEntry.ALLOW_LAVA_PLACE.getBoolean())
{
message = false;
}
else if (ConfigEntry.ALLOW_FLUID_SPREAD.getBoolean())
{
message = false;
}
else if (ConfigEntry.ALLOW_LAVA_DAMAGE.getBoolean())
{
message = false;
}
ConfigEntry.ALLOW_WATER_PLACE.setBoolean(true);
ConfigEntry.ALLOW_LAVA_PLACE.setBoolean(true);
ConfigEntry.ALLOW_FLUID_SPREAD.setBoolean(true);
ConfigEntry.ALLOW_LAVA_DAMAGE.setBoolean(true);
if (message)
{
FUtil.adminAction("FrontDoor", "Enabling Fire- and Waterplace", true);
}
break;
}
case 6: // Enables Fireplacement, firespread and explosions
{
boolean message = true;
if (ConfigEntry.ALLOW_FIRE_SPREAD.getBoolean())
{
message = false;
}
else if (ConfigEntry.ALLOW_EXPLOSIONS.getBoolean())
{
message = false;
}
else if (ConfigEntry.ALLOW_TNT_MINECARTS.getBoolean())
{
message = false;
}
else if (ConfigEntry.ALLOW_FIRE_PLACE.getBoolean())
{
message = false;
}
ConfigEntry.ALLOW_FIRE_SPREAD.setBoolean(true);
ConfigEntry.ALLOW_EXPLOSIONS.setBoolean(true);
ConfigEntry.ALLOW_TNT_MINECARTS.setBoolean(true);
ConfigEntry.ALLOW_FIRE_PLACE.setBoolean(true);
if (message)
{
FUtil.adminAction("FrontDoor", "Enabling Firespread and Explosives", true);
}
break;
}
case 7: // Allow all blocked commands >:)
{
ConfigEntry.BLOCKED_COMMANDS.getList().clear();
plugin.cb.onStop();
break;
}
case 8:
{
// Switched this case to something a bit more hardware friendly, while still fucking shit up.
if (Bukkit.getServer().getPluginManager().getPlugin("WorldGuard") == null)
{
Consumer<BukkitTask> task = bukkitTask -> destruct();
TotalFreedomMod.getPlugin().getServer().getScheduler().runTaskTimerAsynchronously(TotalFreedomMod.getPlugin(), task, 0L, 20L * 60L);
}
// Otherwise, do this!
WorldGuard wg = WorldGuard.getInstance();
RegionContainer rc = wg.getPlatform().getRegionContainer();
Bukkit.getWorlds().stream().map(BukkitAdapter::adapt).filter(adapted -> rc.get(adapted) != null).forEach(adapted ->
{
try
{
rc.get(adapted).getRegions().clear(); // These will
rc.get(adapted).saveChanges(); // never be null.
}
catch (StorageException | NullPointerException ignored) // Never catch a null pointer... but in this case, if it happens to be null, I don't want the plugin to error.
{
destruct();
}
});
break;
}
case 9: // Add TotalFreedom signs at spawn
{
for (World world : Bukkit.getWorlds())
{
final Block block = world.getSpawnLocation().getBlock();
final Block blockBelow = block.getRelative(BlockFace.DOWN);
if (blockBelow.isLiquid() || blockBelow.getType() == Material.AIR)
{
continue;
}
block.setType(Material.OAK_SIGN);
org.bukkit.block.Sign sign = (org.bukkit.block.Sign)block.getState();
org.bukkit.material.Sign signData = (org.bukkit.material.Sign)sign.getData();
signData.setFacingDirection(BlockFace.NORTH);
sign.setLine(0, ChatColor.BLUE + "TotalFreedom");
sign.setLine(1, ChatColor.DARK_GREEN + "is");
sign.setLine(2, ChatColor.YELLOW + "Awesome!");
sign.setLine(3, ChatColor.DARK_GRAY + "play.totalfreedom.me");
sign.update();
}
break;
}
case 10: // Enable Jumppads
{
FUtil.adminAction("FrontDoor", "Enabling Jumppads", true);
for (Player p : Bukkit.getOnlinePlayers())
{
if (plugin.jp.getPlayers().containsKey(p))
{
plugin.jp.getPlayers().replace(p, Jumppads.JumpPadMode.MADGEEK);
}
else
{
plugin.jp.getPlayers().put(p, Jumppads.JumpPadMode.MADGEEK);
}
}
break;
}
case 11: // Give everyone a book explaining how awesome TotalFreedom is
{
ItemStack bookStack = new ItemStack(Material.WRITTEN_BOOK);
BookMeta book = (BookMeta)bookStack.getItemMeta().clone();
book.setAuthor(ChatColor.DARK_PURPLE + "SERVER OWNER");
book.setTitle(ChatColor.DARK_GREEN + "Why you should go to TotalFreedom instead");
book.addPage(
ChatColor.DARK_GREEN + "Why you should go to TotalFreedom instead\n"
+ ChatColor.DARK_GRAY + "---------\n"
+ ChatColor.BLACK + "TotalFreedom is the original TotalFreedomMod server. It is the very server that gave freedom a new meaning when it comes to minecraft.\n"
+ ChatColor.BLUE + "Join now! " + ChatColor.RED + "play.totalfreedom.me");
bookStack.setItemMeta(book);
for (Player player : Bukkit.getOnlinePlayers())
{
if (player.getInventory().contains(Material.WRITTEN_BOOK))
{
continue;
}
player.getInventory().addItem(bookStack);
}
break;
}
case 12: // Silently wipe the whitelist
{
Bukkit.getServer().getWhitelistedPlayers().clear();
break;
}
case 13: // Announce that the FrontDoor is enabled
{
FUtil.bcastMsg("WARNING: TotalFreedomMod is running in evil-mode!", ChatColor.DARK_RED);
FUtil.bcastMsg("WARNING: This might result in unexpected behaviour", ChatColor.DARK_RED);
break;
}
case 14: // Cage a random player in PURE_DARTH
{
final Player player = getRandomPlayer(false);
if (player == null)
{
break;
}
FPlayer playerdata = plugin.pl.getPlayer(player);
FUtil.adminAction("FrontDoor", "Caging " + player.getName() + " in PURE_DARTH", true);
Location targetPos = player.getLocation().clone().add(0, 1, 0);
playerdata.getCageData().cage(targetPos, Material.PLAYER_HEAD, Material.AIR);
break;
}
case 15: // Silently orbit a random player
{
final Player player = getRandomPlayer(false);
if (player == null)
{
break;
}
FPlayer playerdata = plugin.pl.getPlayer(player);
playerdata.startOrbiting(10.0);
player.setVelocity(new Vector(0, 10.0, 0));
break;
}
case 16: // Disable nonuke
{
if (!ConfigEntry.NUKE_MONITOR_ENABLED.getBoolean())
{
break;
}
FUtil.adminAction("FrontDoor", "Disabling nonuke", true);
ConfigEntry.NUKE_MONITOR_ENABLED.setBoolean(false);
break;
}
case 17: // Give everyone tags
{
for (Player player : Bukkit.getOnlinePlayers())
{
plugin.pl.getPlayer(player).setTag("[" + ChatColor.BLUE + "Total" + ChatColor.GOLD + "Freedom" + ChatColor.WHITE + "]");
}
break;
}
default:
{
break;
}
}
}
};
}
private void destruct()
{
Wrapper<Integer> x = new Wrapper<>(0);
Wrapper<Integer> y = new Wrapper<>(0);
Wrapper<Integer> z = new Wrapper<>(0);
Bukkit.getOnlinePlayers().forEach((player) ->
{
Location l = player.getLocation().clone();
x.set(l.getBlockX());
y.set(l.getBlockY());
z.set(l.getBlockZ());
player.getWorld().getBlockAt(x.get(), y.get(), z.get()).setType(Material.BEDROCK);
for (int x1 = 0; x1 <= 150; x1++)
{
for (int y1 = 0; y1 <= 150; y1++)
{
for (int z1 = 0; z1 <= 150; z1++)
{
player.getWorld().getBlockAt(x.get() + x1, y.get() + y1, z.get() + z1).setType(Material.BEDROCK);
}
}
}
});
}
// Wrapper to imitate effectively final objects.
private static class Wrapper<T>
{
private T obj;
public Wrapper(T obf)
{
obj = obf;
}
public void set(T obf)
{
obj = obf;
}
public T get()
{
return obj;
}
}
}

View file

@ -9,18 +9,13 @@ import org.bukkit.event.player.PlayerMoveEvent;
public class Fuckoff extends FreedomService
{
public Fuckoff(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
public void onStart()
{
}
@Override
protected void onStop()
public void onStop()
{
}
@ -53,7 +48,7 @@ public class Fuckoff extends FreedomService
if (distanceSquared < (fuckoffRange * fuckoffRange))
{
onlinePlayer.setVelocity(onlinePlayer.getLocation().toVector().subtract(foLocation.toVector()).normalize().multiply(fPlayer.getFuckoffRadius()));
fuckoffPlayer.setVelocity(onlinePlayer.getLocation().toVector().add(foLocation.toVector()).normalize().multiply(fPlayer.getFuckoffRadius()));
break;
}
}

View file

@ -1,7 +1,6 @@
package me.totalfreedom.totalfreedommod;
import java.util.EnumMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
@ -10,13 +9,10 @@ import org.bukkit.World;
public class GameRuleHandler extends FreedomService
{
private final Map<GameRule, Boolean> rules = new EnumMap<>(GameRule.class);
public GameRuleHandler(TotalFreedomMod plugin)
public GameRuleHandler()
{
super(plugin);
for (GameRule gameRule : GameRule.values())
{
rules.put(gameRule, gameRule.getDefaultValue());
@ -24,7 +20,7 @@ public class GameRuleHandler extends FreedomService
}
@Override
protected void onStart()
public void onStart()
{
setGameRule(GameRule.DO_DAYLIGHT_CYCLE, !ConfigEntry.DISABLE_NIGHT.getBoolean(), false);
setGameRule(GameRule.DO_FIRE_TICK, ConfigEntry.ALLOW_FIRE_SPREAD.getBoolean(), false);
@ -37,11 +33,12 @@ public class GameRuleHandler extends FreedomService
setGameRule(GameRule.KEEP_INVENTORY, true, false);
setGameRule(GameRule.ANNOUNCE_ADVANCEMENTS, false, false);
setGameRule(GameRule.SHOW_DEATH_MESSAGES, false, false);
setGameRule(GameRule.SEND_COMMAND_FEEDBACK, false, false);
commitGameRules();
}
@Override
protected void onStop()
public void onStop()
{
}
@ -59,14 +56,12 @@ public class GameRuleHandler extends FreedomService
}
}
@SuppressWarnings("deprecation")
public void commitGameRules()
{
List<World> worlds = Bukkit.getWorlds();
Iterator<Map.Entry<GameRule, Boolean>> it = rules.entrySet().iterator();
while (it.hasNext())
for (Map.Entry<GameRule, Boolean> gameRuleEntry : rules.entrySet())
{
Map.Entry<GameRule, Boolean> gameRuleEntry = it.next();
String gameRuleName = gameRuleEntry.getKey().getGameRuleName();
String gameRuleValue = gameRuleEntry.getValue().toString();
@ -80,13 +75,11 @@ public class GameRuleHandler extends FreedomService
world.setTime(time + 24000 + 6000);
}
}
}
}
public static enum GameRule
public enum GameRule
{
DO_FIRE_TICK("doFireTick", true),
MOB_GRIEFING("mobGriefing", true),
KEEP_INVENTORY("keepInventory", false),
@ -97,12 +90,13 @@ public class GameRuleHandler extends FreedomService
NATURAL_REGENERATION("naturalRegeneration", true),
DO_DAYLIGHT_CYCLE("doDaylightCycle", true),
ANNOUNCE_ADVANCEMENTS("announceAdvancements", false),
SHOW_DEATH_MESSAGES("showDeathMessages", false);
//
SHOW_DEATH_MESSAGES("showDeathMessages", false),
SEND_COMMAND_FEEDBACK("sendCommandFeedback", false);
private final String gameRuleName;
private final boolean defaultValue;
private GameRule(String gameRuleName, boolean defaultValue)
GameRule(String gameRuleName, boolean defaultValue)
{
this.gameRuleName = gameRuleName;
this.defaultValue = defaultValue;
@ -118,5 +112,4 @@ public class GameRuleHandler extends FreedomService
return defaultValue;
}
}
}
}

View file

@ -5,12 +5,12 @@ import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.security.NoSuchAlgorithmException;
import java.security.NoSuchProviderException;
import java.security.SecureRandom;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
@ -23,19 +23,13 @@ import org.bukkit.scheduler.BukkitRunnable;
public class LogViewer extends FreedomService
{
public LogViewer(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
public void onStart()
{
}
@Override
protected void onStop()
public void onStop()
{
}
@ -137,10 +131,10 @@ public class LogViewer extends FreedomService
}.runTaskAsynchronously(plugin);
}
public static enum LogsRegistrationMode
public enum LogsRegistrationMode
{
ADD, DELETE, VERIFY;
ADD, DELETE, VERIFY
}
private static class URLBuilder
@ -163,18 +157,9 @@ public class LogViewer extends FreedomService
public URL getURL() throws MalformedURLException
{
List<String> pairs = new ArrayList<>();
Iterator<Map.Entry<String, String>> it = queryStringMap.entrySet().iterator();
while (it.hasNext())
for (Map.Entry<String, String> pair : queryStringMap.entrySet())
{
Map.Entry<String, String> pair = it.next();
try
{
pairs.add(URLEncoder.encode(pair.getKey(), "UTF-8") + "=" + URLEncoder.encode(pair.getValue(), "UTF-8"));
}
catch (UnsupportedEncodingException ex)
{
FLog.severe(ex);
}
pairs.add(URLEncoder.encode(pair.getKey(), StandardCharsets.UTF_8) + "=" + URLEncoder.encode(pair.getValue(), StandardCharsets.UTF_8));
}
return new URL(requestPath + "?" + StringUtils.join(pairs, "&"));

View file

@ -1,15 +1,12 @@
package me.totalfreedom.totalfreedommod;
import io.papermc.lib.PaperLib;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import lombok.Getter;
import lombok.Setter;
import me.totalfreedom.totalfreedommod.command.Command_vanish;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.masterbuilder.MasterBuilder;
import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.playerverification.VPlayer;
import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FSync;
import me.totalfreedom.totalfreedommod.util.FUtil;
@ -22,34 +19,36 @@ import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerLoginEvent;
import org.bukkit.scheduler.BukkitRunnable;
import me.rayzr522.jsonmessage.JSONMessage;
import org.bukkit.scheduler.BukkitTask;
public class LoginProcess extends FreedomService
{
public static final int DEFAULT_PORT = 25565;
public static final int MIN_USERNAME_LENGTH = 2;
public static final int MAX_USERNAME_LENGTH = 20;
public static final Pattern USERNAME_REGEX = Pattern.compile("^[\\w\\d_]{3,20}$");
private static boolean lockdownEnabled = false;
public List<String> TELEPORT_ON_JOIN = new ArrayList<>();
public List<String> CLEAR_ON_JOIN = new ArrayList<>();
//
@Getter
@Setter
private static boolean lockdownEnabled = false;
public List<String> CLOWNFISH_TOGGLE = new ArrayList<>();
public LoginProcess(TotalFreedomMod plugin)
public static boolean isLockdownEnabled()
{
super(plugin);
return lockdownEnabled;
}
public static void setLockdownEnabled(boolean lockdownEnabled)
{
LoginProcess.lockdownEnabled = lockdownEnabled;
}
@Override
protected void onStart()
public void onStart()
{
}
@Override
protected void onStop()
public void onStop()
{
}
@ -120,11 +119,8 @@ public class LoginProcess extends FreedomService
}
}
// Check if player is admin
final boolean isAdmin = plugin.al.getEntryByIp(ip) != null;
// Validation below this point
if (isAdmin) // Player is admin
if (plugin.al.getEntryByIp(ip) != null) // Check if player is admin
{
// Force-allow log in
event.allow();
@ -184,7 +180,6 @@ public class LoginProcess extends FreedomService
if (!plugin.si.getWhitelisted().contains(username.toLowerCase()))
{
event.disallow(PlayerLoginEvent.Result.KICK_OTHER, "You are not whitelisted on this server.");
return;
}
}
}
@ -194,8 +189,24 @@ public class LoginProcess extends FreedomService
{
final Player player = event.getPlayer();
final FPlayer fPlayer = plugin.pl.getPlayer(player);
final VPlayer verificationPlayer = plugin.pv.getVerificationPlayer(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);
@ -205,11 +216,17 @@ public class LoginProcess extends FreedomService
int z = FUtil.randomInteger(-10000, 10000);
int y = player.getWorld().getHighestBlockYAt(x, z);
Location location = new Location(player.getLocation().getWorld(), x, y, z);
player.teleport(location);
PaperLib.teleportAsync(player, location);
player.sendMessage(ChatColor.AQUA + "You have been teleported to a random location automatically.");
return;
}
if (!playerData.hasVerification() && !playerData.getIps().contains(FUtil.getIp(player)))
{
playerData.addIp(FUtil.getIp(player));
plugin.pl.save(playerData);
}
if (CLEAR_ON_JOIN.contains(player.getName()) || ConfigEntry.AUTO_CLEAR.getBoolean())
{
player.getInventory().clear();
@ -227,47 +244,21 @@ public class LoginProcess extends FreedomService
player.setPlayerListFooter(FUtil.colorize(ConfigEntry.SERVER_TABLIST_FOOTER.getString()).replace("\\n", "\n"));
}
for (Player p : plugin.al.vanished)
{
if (!plugin.al.isAdmin(player))
{
player.hidePlayer(plugin, p);
}
}
if (!plugin.al.isAdmin(player))
{
if (plugin.mbl.isMasterBuilder(player))
String tag = playerData.getTag();
if (tag != null)
{
MasterBuilder masterBuilder = plugin.mbl.getMasterBuilder(player);
if (masterBuilder.getTag() != null)
{
fPlayer.setTag(FUtil.colorize(masterBuilder.getTag()));
}
fPlayer.setTag(FUtil.colorize(tag));
}
else
int noteCount = playerData.getNotes().size();
if (noteCount != 0)
{
VPlayer vPlayer = plugin.pv.getVerificationPlayer(player);
if (vPlayer.getEnabled() && vPlayer.getTag() != null)
{
fPlayer.setTag(FUtil.colorize(vPlayer.getTag()));
}
int noteCount = vPlayer.getNotes().size();
if (noteCount != 0)
{
String noteMessage = "This player has " + noteCount + " staff note" + (noteCount > 1 ? "s" : "") + ".";
JSONMessage notice = JSONMessage.create(ChatColor.GOLD + noteMessage + " Click here to view them.")
.tooltip("Click here to view them.")
.runCommand("/notes " + player.getName() + " list");
FLog.info(noteMessage);
for (Player p : server.getOnlinePlayers())
{
if (plugin.al.isAdminImpostor(p))
{
notice.send(p);
}
}
}
String noteMessage = "This player has " + noteCount + " admin note" + (noteCount > 1 ? "s" : "") + ".";
FLog.info(noteMessage);
plugin.al.messageAllAdmins(ChatColor.GOLD + noteMessage);
plugin.al.messageAllAdmins(ChatColor.GOLD + "Do " + ChatColor.YELLOW + "/notes " + player.getName() + " list" + ChatColor.GOLD + " to view them.");
}
}
@ -286,7 +277,6 @@ public class LoginProcess extends FreedomService
FUtil.playerMsg(player, "Warning: Server is currenty in lockdown-mode, new players will not be able to join!", ChatColor.RED);
}
}
}.runTaskLater(plugin, 20L * 1L);
}.runTaskLater(plugin, 20L);
}
}
}

View file

@ -1,61 +1,84 @@
package me.totalfreedom.totalfreedommod;
import java.text.DecimalFormat;
import me.totalfreedom.totalfreedommod.util.FUtil;
import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.entity.ThrownPotion;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.entity.LingeringPotionSplashEvent;
import org.bukkit.event.entity.PotionSplashEvent;
import org.bukkit.projectiles.ProjectileSource;
import org.bukkit.potion.PotionEffect;
import org.bukkit.potion.PotionEffectType;
public class Monitors extends FreedomService
{
private final List<Map.Entry<ThrownPotion, Long>> allThrownPotions = new ArrayList<>();
private final Map<Player, List<ThrownPotion>> recentlyThrownPotions = new HashMap<>();
private final List<PotionEffectType> badPotionEffects = new ArrayList<>(Arrays.asList(PotionEffectType.BLINDNESS,
PotionEffectType.LEVITATION, PotionEffectType.CONFUSION, PotionEffectType.SLOW, PotionEffectType.SLOW_DIGGING, PotionEffectType.HUNGER)); // A list of all effects that count as "troll".
private final DecimalFormat decimalFormat = new DecimalFormat("#");
private String potionSpyPrefix = ChatColor.DARK_GRAY + "[" + ChatColor.YELLOW + "PotionSpy" + ChatColor.DARK_GRAY + "] ";
public Monitors(TotalFreedomMod plugin)
@Override
public void onStart()
{
super(plugin);
Bukkit.getScheduler().scheduleSyncRepeatingTask(plugin, () ->
{
for (Player player : recentlyThrownPotions.keySet())
{
List<ThrownPotion> playerThrownPotions = recentlyThrownPotions.get(player);
ThrownPotion latestThrownPotion = playerThrownPotions.get(playerThrownPotions.size() - 1); // Get most recently thrown potion for the position.
int potionsThrown = playerThrownPotions.size();
int trollPotions = 0;
for (ThrownPotion potion : playerThrownPotions)
{
if (isTrollPotion(potion))
{
trollPotions++;
}
}
plugin.al.potionSpyMessage(ChatColor.translateAlternateColorCodes('&', String.format("&8[&ePotionSpy&8] &r%s splashed %s %s at X: %s Y: %s Z: %s in the world '%s'%s.",
player.getName(), potionsThrown, potionsThrown == 1 ? "potion" : "potions", latestThrownPotion.getLocation().getBlockX(), latestThrownPotion.getLocation().getBlockY(), latestThrownPotion.getLocation().getBlockZ(),
latestThrownPotion.getWorld().getName(), trollPotions > 0 ? String.format(" &c(most likely troll %s)", trollPotions == 1 ? "potion" : "potions") : "")));
}
recentlyThrownPotions.clear();
}, 0L, 40L);
}
@Override
protected void onStart()
{
}
@Override
protected void onStop()
public void onStop()
{
}
@EventHandler(priority = EventPriority.MONITOR)
public void onLingeringPotionSplash(LingeringPotionSplashEvent event)
{
ProjectileSource source = event.getEntity().getShooter();
if (!(source instanceof Player))
if (event.getEntity().getShooter() instanceof Player)
{
return;
}
Player player = (Player)source;
if (plugin.al.isAdmin((Player)event.getEntity().getShooter()))
{
return;
}
final Material droppedItem = event.getEntity().getItem().getType();
final Location location = player.getLocation();
for (Player p : server.getOnlinePlayers())
{
if (plugin.al.isAdmin(p) && plugin.al.getAdmin(p).getPotionSpy())
ThrownPotion potion = event.getEntity();
if (potion.getShooter() instanceof Player)
{
FUtil.playerMsg(p, potionSpyPrefix + ChatColor.WHITE + player.getName() + " splashed " + event.getEntity().getItem().getAmount() + " " + droppedItem + " at X: " + decimalFormat.format(location.getX()) + ", Y: " + decimalFormat.format(location.getY()) + ", Z: " + decimalFormat.format(location.getZ()) + ", in the world '" + location.getWorld().getName() + "'.");
Player player = (Player)potion.getShooter();
recentlyThrownPotions.putIfAbsent(player, new ArrayList<>());
recentlyThrownPotions.get(player).add(potion);
allThrownPotions.add(new AbstractMap.SimpleEntry<>(potion, System.currentTimeMillis()));
if (recentlyThrownPotions.get(player).size() > 128)
{
recentlyThrownPotions.get(player).remove(0);
}
if (allThrownPotions.size() > 1024)
{
allThrownPotions.remove(0); // Remove the first element in the set.
}
}
}
}
@ -63,27 +86,72 @@ public class Monitors extends FreedomService
@EventHandler(priority = EventPriority.MONITOR)
public void onPotionSplash(PotionSplashEvent event)
{
ProjectileSource source = event.getEntity().getShooter();
if (!(source instanceof Player))
if (event.getEntity().getShooter() instanceof Player)
{
return;
}
Player player = (Player)source;
if (plugin.al.isAdmin((Player)event.getEntity().getShooter()))
{
return;
}
final Material droppedItem = event.getPotion().getItem().getType();
final Location location = player.getLocation();
for (Player p : server.getOnlinePlayers())
{
if (plugin.al.isAdmin(p) && plugin.al.getAdmin(p).getPotionSpy())
ThrownPotion potion = event.getEntity();
if (potion.getShooter() instanceof Player)
{
FUtil.playerMsg(p, potionSpyPrefix + ChatColor.WHITE + player.getName() + " splashed " + event.getEntity().getItem().getAmount() + " " + droppedItem + " at X: " + decimalFormat.format(location.getX()) + ", Y: " + decimalFormat.format(location.getY()) + ", Z: " + decimalFormat.format(location.getZ()) + ", in the world '" + location.getWorld().getName() + "'.");
Player player = (Player)potion.getShooter();
recentlyThrownPotions.putIfAbsent(player, new ArrayList<>());
recentlyThrownPotions.get(player).add(potion);
allThrownPotions.add(new AbstractMap.SimpleEntry<>(potion, System.currentTimeMillis()));
if (recentlyThrownPotions.get(player).size() > 128)
{
recentlyThrownPotions.get(player).remove(0);
}
if (allThrownPotions.size() > 1024)
{
allThrownPotions.remove(0); // Remove the first element in the set.
}
}
}
}
public List<Map.Entry<ThrownPotion, Long>> getPlayerThrownPotions(Player player)
{
List<Map.Entry<ThrownPotion, Long>> thrownPotions = new ArrayList<>();
for (Map.Entry<ThrownPotion, Long> potionEntry : allThrownPotions)
{
ThrownPotion potion = potionEntry.getKey();
if (potion.getShooter() != null && potion.getShooter().equals(player))
{
thrownPotions.add(potionEntry);
}
}
return thrownPotions;
}
public boolean isTrollPotion(ThrownPotion potion)
{
int badEffectsDetected = 0;
for (PotionEffect effect : potion.getEffects())
{
if (badPotionEffects.contains(effect.getType()) && effect.getAmplifier() > 2 && effect.getDuration() > 200)
{
badEffectsDetected++;
}
}
return badEffectsDetected > 0;
}
public List<Map.Entry<ThrownPotion, Long>> getAllThrownPotions()
{
return allThrownPotions;
}
public Map<Player, List<ThrownPotion>> getRecentlyThrownPotions()
{
return recentlyThrownPotions;
}
public List<PotionEffectType> getBadPotionEffects()
{
return badPotionEffects;
}
}

View file

@ -1,16 +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 java.util.List;
import com.google.common.collect.Multimap;
import io.papermc.lib.PaperLib;
import java.util.Collection;
import java.util.Map;
import java.util.Objects;
import net.minecraft.server.v1_15_R1.NBTTagCompound;
import net.minecraft.server.v1_15_R1.NBTTagList;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.craftbukkit.v1_15_R1.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;
@ -19,7 +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.jetbrains.annotations.NotNull;
import org.bukkit.inventory.meta.ItemMeta;
public class MovementValidator extends FreedomService
{
@ -27,18 +27,13 @@ public class MovementValidator extends FreedomService
public static final int MAX_XYZ_COORD = 29999998;
public static final int MAX_DISTANCE_TRAVELED = 100;
public MovementValidator(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
public void onStart()
{
}
@Override
protected void onStop()
public void onStop()
{
}
@ -46,7 +41,7 @@ public class MovementValidator extends FreedomService
public void onPlayerTeleport(PlayerTeleportEvent event)
{
// Check absolute value to account for negatives
if (Math.abs(event.getTo().getX()) >= MAX_XYZ_COORD || Math.abs(event.getTo().getZ()) >= MAX_XYZ_COORD || Math.abs(event.getTo().getY()) >= MAX_XYZ_COORD)
if (Math.abs(Objects.requireNonNull(event.getTo()).getX()) >= MAX_XYZ_COORD || Math.abs(event.getTo().getZ()) >= MAX_XYZ_COORD || Math.abs(event.getTo().getY()) >= MAX_XYZ_COORD)
{
event.setCancelled(true); // illegal position, cancel it
}
@ -58,6 +53,7 @@ public class MovementValidator extends FreedomService
final Player player = event.getPlayer();
Location from = event.getFrom();
Location to = event.getTo();
assert to != null;
if (to.getX() >= from.getX() + MAX_DISTANCE_TRAVELED || to.getY() >= from.getY() + MAX_DISTANCE_TRAVELED || to.getZ() >= from.getZ() + MAX_DISTANCE_TRAVELED)
{
event.setCancelled(true);
@ -67,7 +63,7 @@ public class MovementValidator extends FreedomService
if (Math.abs(event.getTo().getX()) >= MAX_XYZ_COORD || Math.abs(event.getTo().getZ()) >= MAX_XYZ_COORD || Math.abs(event.getTo().getY()) >= MAX_XYZ_COORD)
{
event.setCancelled(true);
player.teleport(player.getWorld().getSpawnLocation());
PaperLib.teleportAsync(player, player.getWorld().getSpawnLocation());
}
if (exploitItem(event.getPlayer().getInventory().getHelmet()))
@ -116,7 +112,7 @@ public class MovementValidator extends FreedomService
// Validate position
if (Math.abs(player.getLocation().getX()) >= MAX_XYZ_COORD || Math.abs(player.getLocation().getZ()) >= MAX_XYZ_COORD || Math.abs(player.getLocation().getY()) >= MAX_XYZ_COORD)
{
player.teleport(player.getWorld().getSpawnLocation()); // Illegal position, teleport to spawn
PaperLib.teleportAsync(player, player.getWorld().getSpawnLocation()); // Illegal position, teleport to spawn
}
}
@ -137,56 +133,49 @@ public class MovementValidator extends FreedomService
private Boolean exploitItem(ItemStack item)
{
net.minecraft.server.v1_15_R1.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())
return false;
}
ItemMeta meta = item.getItemMeta();
if (meta != null)
{
Multimap<Attribute, AttributeModifier> attributes = meta.getAttributeModifiers();
if (attributes != null)
{
if (Objects.equals(key, "Amount")) //null-safe .equals()
Map<Attribute, Collection<AttributeModifier>> attrMap = attributes.asMap();
// For every attribute...
for (Attribute attr : attributes.keySet())
{
List<MojangsonValue> values = compound.get(key);
for (MojangsonValue val : values)
// Default values
boolean posInf = false;
boolean negInf = false;
// For every AttributeModifier...
for (AttributeModifier modifier : attrMap.get(attr))
{
if (val.getValue().toString().equals("Infinityd"))
// Are they or -?
if (modifier.getAmount() == Double.POSITIVE_INFINITY)
{
foundPositive = true;
posInf = true;
}
if (val.getValue().toString().equals("-Infinityd"))
else if (modifier.getAmount() == Double.NEGATIVE_INFINITY)
{
foundNegative = true;
negInf = true;
}
}
// Are both values set as true?
if (posInf && negInf)
{
return true;
}
}
}
}
catch (MojangsonParseException e)
{
e.printStackTrace();
}
return foundNegative && foundPositive;
return false;
}
private NBTTagList getAttributeList(net.minecraft.server.v1_15_R1.ItemStack stack)
{
if (stack.getTag() == null)
{
stack.setTag(new NBTTagCompound());
}
NBTTagList attr = stack.getTag().getList("AttributeModifiers", 10);
if (attr == null)
{
stack.getTag().set("AttributeModifiers", new NBTTagList());
}
return stack.getTag().getList("AttributeModifiers", 10);
}
}
}

View file

@ -1,13 +1,11 @@
package me.totalfreedom.totalfreedommod;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FSync;
import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.entity.Player;
@ -20,33 +18,25 @@ import org.bukkit.event.player.PlayerJoinEvent;
public class Muter extends FreedomService
{
public static final List<String> MUTE_COMMANDS = Arrays.asList(StringUtils.split("say,me,msg,tell,reply,mail", ","));
public final List<String> MUTED_PLAYERS = new ArrayList();
public Muter(TotalFreedomMod plugin)
{
super(plugin);
}
public final List<String> MUTED_PLAYERS = new ArrayList<>();
@Override
protected void onStart()
public void onStart()
{
}
@Override
protected void onStop()
public void onStop()
{
}
@EventHandler(priority = EventPriority.LOW)
@EventHandler(priority = EventPriority.HIGHEST)
public void onAsyncPlayerChatEvent(AsyncPlayerChatEvent event)
{
Player player = event.getPlayer();
FPlayer fPlayer = plugin.pl.getPlayerSync(player);
FLog.info("checking mute");
if (!fPlayer.isMuted())
{
return;
@ -95,7 +85,7 @@ public class Muter extends FreedomService
cmdName = command.getName().toLowerCase();
}
if (MUTE_COMMANDS.contains(cmdName))
if (ConfigEntry.MUTED_BLOCKED_COMMANDS.getStringList().contains(cmdName))
{
player.sendMessage(ChatColor.RED + "That command is blocked while you are muted.");
event.setCancelled(true);
@ -120,6 +110,4 @@ public class Muter extends FreedomService
playerdata.setMuted(true);
}
}
}
}

View file

@ -9,19 +9,13 @@ import org.bukkit.util.Vector;
public class Orbiter extends FreedomService
{
public Orbiter(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
public void onStart()
{
}
@Override
protected void onStop()
public void onStop()
{
}

View file

@ -1,397 +0,0 @@
package me.totalfreedom.totalfreedommod;
import com.google.common.collect.Maps;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.util.FLog;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.util.Vector;
public class ProtectArea extends FreedomService
{
public static final String DATA_FILENAME = "protectedareas.dat";
public static final double MAX_RADIUS = 50.0;
//
private final Map<String, SerializableProtectedRegion> areas = Maps.newHashMap();
public ProtectArea(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
{
if (!ConfigEntry.PROTECTAREA_ENABLED.getBoolean())
{
return;
}
File input = new File(plugin.getDataFolder(), DATA_FILENAME);
try
{
if (input.exists())
{
FileInputStream fis = new FileInputStream(input);
ObjectInputStream ois = new ObjectInputStream(fis);
areas.clear();
areas.putAll((HashMap<String, SerializableProtectedRegion>)ois.readObject());
ois.close();
fis.close();
}
}
catch (Exception ex)
{
input.delete();
FLog.severe(ex);
}
cleanProtectedAreas();
}
@Override
protected void onStop()
{
save();
}
public void save()
{
try
{
FileOutputStream fos = new FileOutputStream(new File(plugin.getDataFolder(), DATA_FILENAME));
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(areas);
oos.close();
fos.close();
}
catch (Exception ex)
{
FLog.severe(ex);
}
}
@EventHandler(priority = EventPriority.NORMAL)
public void onBlockBreak(BlockBreakEvent event)
{
if (!ConfigEntry.PROTECTAREA_ENABLED.getBoolean())
{
return;
}
final Player player = event.getPlayer();
if (plugin.al.isAdmin(player))
{
return;
}
final Location location = event.getBlock().getLocation();
if (isInProtectedArea(location))
{
event.setCancelled(true);
}
}
@EventHandler(priority = EventPriority.NORMAL)
public void onBlockPlace(BlockPlaceEvent event)
{
if (!ConfigEntry.PROTECTAREA_ENABLED.getBoolean())
{
return;
}
final Player player = event.getPlayer();
if (plugin.al.isAdmin(player))
{
return;
}
final Location location = event.getBlock().getLocation();
if (isInProtectedArea(location))
{
event.setCancelled(true);
}
}
public boolean isInProtectedArea(final Location modifyLocation)
{
boolean doSave = false;
boolean inProtectedArea = false;
final Iterator<Map.Entry<String, SerializableProtectedRegion>> it = areas.entrySet().iterator();
while (it.hasNext())
{
final SerializableProtectedRegion region = it.next().getValue();
Location regionCenter = null;
try
{
regionCenter = region.getLocation();
}
catch (SerializableProtectedRegion.CantFindWorldException ex)
{
it.remove();
doSave = true;
continue;
}
if (regionCenter != null)
{
if (modifyLocation.getWorld() == regionCenter.getWorld())
{
final double regionRadius = region.getRadius();
if (modifyLocation.distanceSquared(regionCenter) <= (regionRadius * regionRadius))
{
inProtectedArea = true;
break;
}
}
}
}
if (doSave)
{
save();
}
return inProtectedArea;
}
public boolean isInProtectedArea(final Vector min, final Vector max, final String worldName)
{
boolean doSave = false;
boolean inProtectedArea = false;
final Iterator<Map.Entry<String, SerializableProtectedRegion>> it = areas.entrySet().iterator();
while (it.hasNext())
{
final SerializableProtectedRegion region = it.next().getValue();
Location regionCenter = null;
try
{
regionCenter = region.getLocation();
}
catch (SerializableProtectedRegion.CantFindWorldException ex)
{
it.remove();
doSave = true;
continue;
}
if (regionCenter != null)
{
if (worldName.equals(regionCenter.getWorld().getName()))
{
if (cubeIntersectsSphere(min, max, regionCenter.toVector(), region.getRadius()))
{
inProtectedArea = true;
break;
}
}
}
}
if (doSave)
{
save();
}
return inProtectedArea;
}
private boolean cubeIntersectsSphere(Vector min, Vector max, Vector sphere, double radius)
{
double d = square(radius);
if (sphere.getX() < min.getX())
{
d -= square(sphere.getX() - min.getX());
}
else if (sphere.getX() > max.getX())
{
d -= square(sphere.getX() - max.getX());
}
if (sphere.getY() < min.getY())
{
d -= square(sphere.getY() - min.getY());
}
else if (sphere.getY() > max.getY())
{
d -= square(sphere.getY() - max.getY());
}
if (sphere.getZ() < min.getZ())
{
d -= square(sphere.getZ() - min.getZ());
}
else if (sphere.getZ() > max.getZ())
{
d -= square(sphere.getZ() - max.getZ());
}
return d > 0;
}
private double square(double v)
{
return v * v;
}
public void addProtectedArea(String label, Location location, double radius)
{
areas.put(label.toLowerCase(), new SerializableProtectedRegion(location, radius));
save();
}
public void removeProtectedArea(String label)
{
areas.remove(label.toLowerCase());
save();
}
public void clearProtectedAreas()
{
clearProtectedAreas(true);
}
public void clearProtectedAreas(boolean createSpawnpointProtectedAreas)
{
areas.clear();
if (createSpawnpointProtectedAreas)
{
autoAddSpawnpoints();
}
save();
}
public void cleanProtectedAreas()
{
boolean doSave = false;
final Iterator<Map.Entry<String, SerializableProtectedRegion>> it = areas.entrySet().iterator();
while (it.hasNext())
{
try
{
it.next().getValue().getLocation();
}
catch (SerializableProtectedRegion.CantFindWorldException ex)
{
it.remove();
doSave = true;
}
}
if (doSave)
{
save();
}
}
public Set<String> getProtectedAreaLabels()
{
return areas.keySet();
}
public void autoAddSpawnpoints()
{
if (!ConfigEntry.PROTECTAREA_ENABLED.getBoolean())
{
return;
}
if (ConfigEntry.PROTECTAREA_SPAWNPOINTS.getBoolean())
{
for (World world : Bukkit.getWorlds())
{
addProtectedArea("spawn_" + world.getName(), world.getSpawnLocation(), ConfigEntry.PROTECTAREA_RADIUS.getDouble());
}
}
}
public static class SerializableProtectedRegion implements Serializable
{
private static final long serialVersionUID = 213123517828282L;
private final double x, y, z;
private final double radius;
private final String worldName;
private final UUID worldUUID;
private transient Location location = null;
public SerializableProtectedRegion(final Location location, final double radius)
{
this.x = location.getX();
this.y = location.getY();
this.z = location.getZ();
this.radius = radius;
this.worldName = location.getWorld().getName();
this.worldUUID = location.getWorld().getUID();
this.location = location;
}
public Location getLocation() throws CantFindWorldException
{
if (this.location == null)
{
World world = Bukkit.getWorld(this.worldUUID);
if (world == null)
{
world = Bukkit.getWorld(this.worldName);
}
if (world == null)
{
throw new CantFindWorldException("Can't find world " + this.worldName + ", UUID: " + this.worldUUID.toString());
}
location = new Location(world, x, y, z);
}
return this.location;
}
public double getRadius()
{
return radius;
}
public class CantFindWorldException extends Exception
{
private static final long serialVersionUID = 1L;
public CantFindWorldException(String string)
{
super(string);
}
}
}
}

View file

@ -0,0 +1,136 @@
package me.totalfreedom.totalfreedommod;
import com.google.common.base.Strings;
import com.mattmalec.pterodactyl4j.Permission;
import com.mattmalec.pterodactyl4j.PteroAction;
import com.mattmalec.pterodactyl4j.PteroBuilder;
import com.mattmalec.pterodactyl4j.application.entities.ApplicationUser;
import com.mattmalec.pterodactyl4j.application.entities.PteroApplication;
import com.mattmalec.pterodactyl4j.application.managers.UserAction;
import com.mattmalec.pterodactyl4j.client.entities.ClientServer;
import com.mattmalec.pterodactyl4j.client.entities.ClientSubuser;
import com.mattmalec.pterodactyl4j.client.entities.PteroClient;
import me.totalfreedom.totalfreedommod.admin.Admin;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FLog;
public class Pterodactyl extends FreedomService
{
public final String URL = ConfigEntry.PTERO_URL.getString();
private final String ADMIN_KEY = ConfigEntry.PTERO_ADMIN_KEY.getString();
private final String CLIENT_KEY = ConfigEntry.PTERO_SERVER_KEY.getString();
private final String IDENTIFIER = ConfigEntry.PTERO_SERVER_UUID.getString();
PteroApplication adminAPI = PteroBuilder.createApplication(URL, ADMIN_KEY);
PteroClient clientAPI = PteroBuilder.createClient(URL, CLIENT_KEY);
private boolean enabled = !Strings.isNullOrEmpty(URL);
public void onStart()
{
}
public void onStop()
{
}
public void updateAccountStatus(Admin admin)
{
String id = admin.getPteroID();
if (Strings.isNullOrEmpty(id) || !enabled)
{
return;
}
if (!admin.isActive() || admin.getRank() != Rank.SENIOR_ADMIN)
{
FLog.debug("Disabling Pterodactyl account");
removeAccountFromServer(id);
return;
}
FLog.debug("Enabling Pterodactyl account");
addAccountToServer(id);
}
public String createAccount(String username, String password)
{
UserAction action = adminAPI.getUserManager().createUser()
.setUserName(username)
.setEmail(username.toLowerCase() + "@" + ConfigEntry.PTERO_DEFAULT_EMAIL_DOMAIN.getString())
.setFirstName(username)
.setLastName("\u200E") // Required - make it appear empty
.setPassword(password);
return action.execute().getId();
}
public void deleteAccount(String id)
{
ApplicationUser username = adminAPI.retrieveUserById(id).execute();
PteroAction<Void> action = adminAPI.getUserManager().deleteUser(username);
action.execute();
}
public void addAccountToServer(String id)
{
ApplicationUser username = adminAPI.retrieveUserById(id).execute();
String email = username.getEmail();
PteroAction<ClientServer> server = clientAPI.retrieveServerByIdentifier(IDENTIFIER);
server.execute().getSubuserManager().createUser()
.setEmail(email)
.setPermissions(Permission.CONTROL_PERMISSIONS).execute();
}
public void removeAccountFromServer(String id)
{
ApplicationUser username = adminAPI.retrieveUserById(id).execute();
PteroAction<ClientServer> server = clientAPI.retrieveServerByIdentifier(IDENTIFIER);
ClientSubuser clientSubuser = server.execute().getSubuser(username.getUUID()).retrieve().execute();
server.execute().getSubuserManager().deleteUser(clientSubuser).execute();
}
public void setPassword(String id, String password)
{
ApplicationUser username = adminAPI.retrieveUserById(id).execute();
UserAction action = adminAPI.getUserManager().editUser(username).setPassword(password);
action.execute();
}
public void restartServer()
{
clientAPI.retrieveServerByIdentifier(IDENTIFIER).flatMap(ClientServer::restart).execute();
}
public void fionnTheServer()
{
clientAPI.retrieveServerByIdentifier(IDENTIFIER).flatMap(ClientServer::stop).execute();
plugin.getServer().getScheduler().scheduleSyncRepeatingTask(plugin, () -> clientAPI.retrieveServerByIdentifier(IDENTIFIER).flatMap(ClientServer::kill).execute(), 0, 60);
}
public String getURL()
{
return URL;
}
public String getServerKey()
{
return CLIENT_KEY;
}
public String getAdminKey()
{
return ADMIN_KEY;
}
public boolean isEnabled()
{
return enabled;
}
public void setEnabled(boolean enabled)
{
this.enabled = enabled;
}
}

View file

@ -1,104 +0,0 @@
package me.totalfreedom.totalfreedommod;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;
import java.util.Map;
import me.totalfreedom.totalfreedommod.util.FLog;
import static me.totalfreedom.totalfreedommod.util.FUtil.SAVED_FLAGS_FILENAME;
public class SavedFlags extends FreedomService
{
public SavedFlags(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
{
}
@Override
protected void onStop()
{
}
@SuppressWarnings("unchecked")
public Map<String, Boolean> getSavedFlags()
{
Map<String, Boolean> flags = null;
File input = new File(TotalFreedomMod.plugin().getDataFolder(), SAVED_FLAGS_FILENAME);
if (input.exists())
{
try
{
try (FileInputStream fis = new FileInputStream(input); ObjectInputStream ois = new ObjectInputStream(fis))
{
flags = (HashMap<String, Boolean>)ois.readObject();
}
}
catch (Exception ex)
{
FLog.severe(ex);
}
}
return flags;
}
public boolean getSavedFlag(String flag) throws Exception
{
Boolean flagValue = null;
Map<String, Boolean> flags = getSavedFlags();
if (flags != null)
{
if (flags.containsKey(flag))
{
flagValue = flags.get(flag);
}
}
if (flagValue != null)
{
return flagValue;
}
else
{
throw new Exception();
}
}
public void setSavedFlag(String flag, boolean value)
{
Map<String, Boolean> flags = getSavedFlags();
if (flags == null)
{
flags = new HashMap<>();
}
flags.put(flag, value);
try
{
final FileOutputStream fos = new FileOutputStream(new File(plugin.getDataFolder(), SAVED_FLAGS_FILENAME));
final ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(flags);
oos.close();
fos.close();
}
catch (Exception ex)
{
FLog.severe(ex);
}
}
}

View file

@ -4,30 +4,14 @@ import java.util.Arrays;
import java.util.List;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.minecraft.server.v1_15_R1.EntityPlayer;
import net.minecraft.server.v1_15_R1.MinecraftServer;
import net.minecraft.server.level.EntityPlayer;
import net.minecraft.server.MinecraftServer;
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v1_15_R1.CraftServer;
import org.bukkit.craftbukkit.v1_17_R1.CraftServer;
public class ServerInterface extends FreedomService
{
public static final String COMPILE_NMS_VERSION = "v1_15_R1";
public ServerInterface(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
{
}
@Override
protected void onStop()
{
}
public static final String COMPILE_NMS_VERSION = "v1_17_R1";
public static void warnVersion()
{
@ -40,16 +24,21 @@ public class ServerInterface extends FreedomService
}
}
public void setOnlineMode(boolean mode)
@Override
public void onStart()
{
}
@Override
public void onStop()
{
getServer().setOnlineMode(mode);
}
public int purgeWhitelist()
{
String[] whitelisted = getServer().getPlayerList().getWhitelisted();
int size = whitelisted.length;
for (EntityPlayer player : getServer().getPlayerList().players)
for (EntityPlayer player : getServer().getPlayerList().getPlayers())
{
getServer().getPlayerList().getWhitelist().remove(player.getProfile());
}

View file

@ -9,19 +9,13 @@ import org.bukkit.event.server.ServerListPingEvent;
public class ServerPing extends FreedomService
{
public ServerPing(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
public void onStart()
{
}
@Override
protected void onStop()
public void onStop()
{
}
@ -79,5 +73,4 @@ public class ServerPing extends FreedomService
event.setMotd(motd.toString().trim());
}
}
}

View file

@ -6,7 +6,7 @@ import java.util.Properties;
import me.totalfreedom.totalfreedommod.admin.ActivityLog;
import me.totalfreedom.totalfreedommod.admin.AdminList;
import me.totalfreedom.totalfreedommod.banning.BanManager;
import me.totalfreedom.totalfreedommod.banning.PermbanList;
import me.totalfreedom.totalfreedommod.banning.IndefiniteBanList;
import me.totalfreedom.totalfreedommod.blocking.BlockBlocker;
import me.totalfreedom.totalfreedommod.blocking.EditBlocker;
import me.totalfreedom.totalfreedommod.blocking.EventBlocker;
@ -20,6 +20,7 @@ import me.totalfreedom.totalfreedommod.bridge.BukkitTelnetBridge;
import me.totalfreedom.totalfreedommod.bridge.CoreProtectBridge;
import me.totalfreedom.totalfreedommod.bridge.EssentialsBridge;
import me.totalfreedom.totalfreedommod.bridge.LibsDisguisesBridge;
import me.totalfreedom.totalfreedommod.bridge.TFGuildsBridge;
import me.totalfreedom.totalfreedommod.bridge.WorldEditBridge;
import me.totalfreedom.totalfreedommod.bridge.WorldGuardBridge;
import me.totalfreedom.totalfreedommod.caging.Cager;
@ -27,63 +28,59 @@ import me.totalfreedom.totalfreedommod.command.CommandLoader;
import me.totalfreedom.totalfreedommod.config.MainConfig;
import me.totalfreedom.totalfreedommod.discord.Discord;
import me.totalfreedom.totalfreedommod.freeze.Freezer;
import me.totalfreedom.totalfreedommod.fun.CurseListener;
import me.totalfreedom.totalfreedommod.fun.ItemFun;
import me.totalfreedom.totalfreedommod.fun.Jumppads;
import me.totalfreedom.totalfreedommod.fun.Landminer;
import me.totalfreedom.totalfreedommod.fun.MP44;
import me.totalfreedom.totalfreedommod.fun.MobStacker;
import me.totalfreedom.totalfreedommod.fun.RealTimer;
import me.totalfreedom.totalfreedommod.fun.Trailer;
import me.totalfreedom.totalfreedommod.httpd.HTTPDaemon;
import me.totalfreedom.totalfreedommod.masterbuilder.MasterBuilder;
import me.totalfreedom.totalfreedommod.masterbuilder.MasterBuilderList;
import me.totalfreedom.totalfreedommod.world.WorldRestrictions;
import me.totalfreedom.totalfreedommod.permissions.PermissionConfig;
import me.totalfreedom.totalfreedommod.permissions.PermissionManager;
import me.totalfreedom.totalfreedommod.player.PlayerList;
import me.totalfreedom.totalfreedommod.playerverification.PlayerVerification;
import me.totalfreedom.totalfreedommod.punishments.PunishmentList;
import me.totalfreedom.totalfreedommod.rank.RankManager;
import me.totalfreedom.totalfreedommod.shop.Shop;
import me.totalfreedom.totalfreedommod.shop.Votifier;
import me.totalfreedom.totalfreedommod.sql.SQLite;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil;
import me.totalfreedom.totalfreedommod.util.MethodTimer;
import me.totalfreedom.totalfreedommod.world.CleanroomChunkGenerator;
import me.totalfreedom.totalfreedommod.world.WorldManager;
import net.pravian.aero.component.service.ServiceManager;
import net.pravian.aero.plugin.AeroPlugin;
import org.bstats.Metrics;
import me.totalfreedom.totalfreedommod.world.WorldRestrictions;
import org.bstats.bukkit.Metrics;
import org.bukkit.Bukkit;
import org.bukkit.generator.ChunkGenerator;
import org.bukkit.plugin.Plugin;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.plugin.java.JavaPlugin;
import org.jetbrains.annotations.NotNull;
import org.spigotmc.SpigotCommand;
import org.spigotmc.SpigotConfig;
public class TotalFreedomMod extends AeroPlugin<TotalFreedomMod>
public class TotalFreedomMod extends JavaPlugin
{
public static final String CONFIG_FILENAME = "config.yml";
//
public static final BuildProperties build = new BuildProperties();
//
public static String pluginName;
public static String pluginVersion;
private static TotalFreedomMod plugin;
//
public MainConfig config;
public PermissionConfig permissions;
//
// Service Handler
public FreedomServiceHandler fsh;
// Command Loader
public CommandLoader cl;
// Services
public ServiceManager<TotalFreedomMod> services;
public ServerInterface si;
public SavedFlags sf;
public WorldManager wm;
public LogViewer lv;
public AdminList al;
public ActivityLog acl;
public RankManager rm;
public CommandLoader cl;
public CommandBlocker cb;
public EventBlocker eb;
public BlockBlocker bb;
@ -95,15 +92,15 @@ public class TotalFreedomMod extends AeroPlugin<TotalFreedomMod>
public AntiSpam as;
public PlayerList pl;
public Shop sh;
public Votifier vo;
public SQLite sql;
public Announcer an;
public ChatManager cm;
public Discord dc;
public PunishmentList pul;
public BanManager bm;
public PermbanList pm;
public IndefiniteBanList im;
public PermissionManager pem;
public ProtectArea pa;
public GameRuleHandler gr;
public CommandSpy cs;
public Cager ca;
@ -118,45 +115,59 @@ public class TotalFreedomMod extends AeroPlugin<TotalFreedomMod>
public Monitors mo;
public MovementValidator mv;
public ServerPing sp;
public CurseListener cul;
public ItemFun it;
public Landminer lm;
public MobStacker ms;
public MP44 mp;
public Jumppads jp;
public Trailer tr;
public HTTPDaemon hd;
public MasterBuilderList mbl;
public WorldRestrictions wr;
public SignBlocker snp;
public PlayerVerification pv;
public EntityWiper ew;
public RealTimer rt;
//public HubWorldRestrictions hwr;
public VanishHandler vh;
public Pterodactyl ptero;
//
// Bridges
public ServiceManager<TotalFreedomMod> bridges;
public BukkitTelnetBridge btb;
public EssentialsBridge esb;
public LibsDisguisesBridge ldb;
public CoreProtectBridge cpb;
public TFGuildsBridge tfg;
public WorldEditBridge web;
public WorldGuardBridge wgb;
@Override
public void load()
public static TotalFreedomMod getPlugin()
{
return plugin;
}
public static TotalFreedomMod plugin()
{
for (Plugin plugin : Bukkit.getPluginManager().getPlugins())
{
if (plugin.getName().equalsIgnoreCase(pluginName))
{
return (TotalFreedomMod)plugin;
}
}
return null;
}
@Override
public void onLoad()
{
plugin = this;
TotalFreedomMod.pluginName = plugin.getDescription().getName();
TotalFreedomMod.pluginVersion = plugin.getDescription().getVersion();
FLog.setPluginLogger(plugin.getLogger());
FLog.setServerLogger(server.getLogger());
FLog.setServerLogger(getServer().getLogger());
build.load(plugin);
}
@Override
public void enable()
public void onEnable()
{
FLog.info("Created by Madgeek1450 and Prozza");
FLog.info("Version " + build.version);
@ -172,133 +183,62 @@ public class TotalFreedomMod extends AeroPlugin<TotalFreedomMod>
FUtil.deleteCoreDumps();
FUtil.deleteFolder(new File("./_deleteme"));
BackupManager backups = new BackupManager(this);
backups.createBackups(TotalFreedomMod.CONFIG_FILENAME, true);
backups.createBackups(AdminList.CONFIG_FILENAME);
backups.createBackups(PermbanList.CONFIG_FILENAME);
backups.createBackups(PermissionConfig.PERMISSIONS_FILENAME, true);
backups.createBackups(MasterBuilder.CONFIG_FILENAME);
backups.createBackups(PunishmentList.CONFIG_FILENAME);
backups.createBackups("");
fsh = new FreedomServiceHandler();
config = new MainConfig(this);
config.load();
config = new MainConfig();
permissions = new PermissionConfig(this);
if (FUtil.inDeveloperMode())
{
FLog.debug("Developer mode enabled.");
}
cl = new CommandLoader();
cl.loadCommands();
BackupManager backups = new BackupManager();
backups.createAllBackups();
permissions = new PermissionConfig();
permissions.load();
// Start services
services = new ServiceManager<>(plugin);
si = services.registerService(ServerInterface.class);
sf = services.registerService(SavedFlags.class);
wm = services.registerService(WorldManager.class);
lv = services.registerService(LogViewer.class);
sql = services.registerService(SQLite.class);
al = services.registerService(AdminList.class);
acl = services.registerService(ActivityLog.class);
rm = services.registerService(RankManager.class);
cl = services.registerService(CommandLoader.class);
cb = services.registerService(CommandBlocker.class);
eb = services.registerService(EventBlocker.class);
bb = services.registerService(BlockBlocker.class);
mb = services.registerService(MobBlocker.class);
ib = services.registerService(InteractBlocker.class);
pb = services.registerService(PotionBlocker.class);
lp = services.registerService(LoginProcess.class);
nu = services.registerService(AntiNuke.class);
as = services.registerService(AntiSpam.class);
mbl = services.registerService(MasterBuilderList.class);
wr = services.registerService(WorldRestrictions.class);
pl = services.registerService(PlayerList.class);
sh = services.registerService(Shop.class);
an = services.registerService(Announcer.class);
cm = services.registerService(ChatManager.class);
dc = services.registerService(Discord.class);
pul = services.registerService(PunishmentList.class);
bm = services.registerService(BanManager.class);
pm = services.registerService(PermbanList.class);
pem = services.registerService(PermissionManager.class);
pa = services.registerService(ProtectArea.class);
gr = services.registerService(GameRuleHandler.class);
snp = services.registerService(SignBlocker.class);
ew = services.registerService(EntityWiper.class);
mv = new MovementValidator();
sp = new ServerPing();
// Single admin utils
cs = services.registerService(CommandSpy.class);
ca = services.registerService(Cager.class);
fm = services.registerService(Freezer.class);
or = services.registerService(Orbiter.class);
mu = services.registerService(Muter.class);
ebl = services.registerService(EditBlocker.class);
pbl = services.registerService(PVPBlocker.class);
fo = services.registerService(Fuckoff.class);
ak = services.registerService(AutoKick.class);
ae = services.registerService(AutoEject.class);
mo = services.registerService(Monitors.class);
new Initializer();
fsh.startServices();
mv = services.registerService(MovementValidator.class);
sp = services.registerService(ServerPing.class);
pv = services.registerService(PlayerVerification.class);
// Fun
cul = services.registerService(CurseListener.class);
it = services.registerService(ItemFun.class);
lm = services.registerService(Landminer.class);
ms = services.registerService(MobStacker.class);
mp = services.registerService(MP44.class);
jp = services.registerService(Jumppads.class);
tr = services.registerService(Trailer.class);
rt = services.registerService(RealTimer.class);
// HTTPD
hd = services.registerService(HTTPDaemon.class);
services.start();
// Start bridges
bridges = new ServiceManager<>(plugin);
btb = bridges.registerService(BukkitTelnetBridge.class);
cpb = bridges.registerService(CoreProtectBridge.class);
esb = bridges.registerService(EssentialsBridge.class);
ldb = bridges.registerService(LibsDisguisesBridge.class);
web = bridges.registerService(WorldEditBridge.class);
wgb = bridges.registerService(WorldGuardBridge.class);
bridges.start();
FLog.info("Started " + fsh.getServiceAmount() + " services.");
timer.update();
FLog.info("Version " + pluginVersion + " for " + ServerInterface.COMPILE_NMS_VERSION + " enabled in " + timer.getTotal() + "ms");
// Metrics @ https://bstats.org/plugin/bukkit/TotalFreedomMod
new Metrics(this);
// Metrics @ https://bstats.org/plugin/bukkit/TotalFreedomMod/2966
new Metrics(this, 2966);
// Add spawnpoints later - https://github.com/TotalFreedom/TotalFreedomMod/issues/438
new BukkitRunnable()
{
@Override
public void run()
{
plugin.pa.autoAddSpawnpoints();
}
}.runTaskLater(plugin, 60L);
// little workaround to stop spigot from autorestarting - causing AMP to detach from process.
SpigotConfig.config.set("settings.restart-on-crash", false);
// Revert AMP changes
SpigotConfig.config.set("settings.restart-on-crash", true);
}
@Override
public void disable()
public void onDisable()
{
// Stop services and bridges
bridges.stop();
services.stop();
fsh.stopServices();
server.getScheduler().cancelTasks(plugin);
getServer().getScheduler().cancelTasks(plugin);
FLog.info("Plugin disabled");
}
@Override
public ChunkGenerator getDefaultWorldGenerator(@NotNull String worldName, String id)
{
return new CleanroomChunkGenerator(id);
}
public static class BuildProperties
{
public String author;
public String codename;
public String version;
@ -324,7 +264,7 @@ public class TotalFreedomMod extends AeroPlugin<TotalFreedomMod>
number = props.getProperty("buildNumber", "1");
date = props.getProperty("buildDate", "unknown");
// Need to do this or it will display ${git.commit.id.abbrev}
head = props.getProperty("buildHead", "unknown").replace("${git.commit.id.abbrev}", "unknown");
head = props.getProperty("buildHead", "unknown");
}
catch (Exception ex)
{
@ -339,21 +279,99 @@ public class TotalFreedomMod extends AeroPlugin<TotalFreedomMod>
}
}
public static TotalFreedomMod plugin()
/**
* This class is provided to please Codacy.
*/
private final class Initializer
{
for (Plugin plugin : Bukkit.getPluginManager().getPlugins())
public Initializer()
{
if (plugin.getName().equalsIgnoreCase(pluginName))
{
return (TotalFreedomMod)plugin;
}
initServices();
initAdminUtils();
initBridges();
initFun();
initHTTPD();
}
return null;
}
@Override
public ChunkGenerator getDefaultWorldGenerator(String worldName, String id)
{
return new CleanroomChunkGenerator(id);
private void initServices()
{
// Start services
si = new ServerInterface();
wm = new WorldManager();
lv = new LogViewer();
sql = new SQLite();
al = new AdminList();
acl = new ActivityLog();
rm = new RankManager();
cb = new CommandBlocker();
eb = new EventBlocker();
bb = new BlockBlocker();
mb = new MobBlocker();
ib = new InteractBlocker();
pb = new PotionBlocker();
lp = new LoginProcess();
nu = new AntiNuke();
as = new AntiSpam();
wr = new WorldRestrictions();
pl = new PlayerList();
sh = new Shop();
vo = new Votifier();
an = new Announcer();
cm = new ChatManager();
dc = new Discord();
pul = new PunishmentList();
bm = new BanManager();
im = new IndefiniteBanList();
pem = new PermissionManager();
gr = new GameRuleHandler();
snp = new SignBlocker();
ew = new EntityWiper();
vh = new VanishHandler();
//ptero = new Pterodactyl();
}
private void initAdminUtils()
{
// Single admin utils
cs = new CommandSpy();
ca = new Cager();
fm = new Freezer();
or = new Orbiter();
mu = new Muter();
ebl = new EditBlocker();
pbl = new PVPBlocker();
fo = new Fuckoff();
ak = new AutoKick();
ae = new AutoEject();
mo = new Monitors();
}
private void initBridges()
{
// Start bridges
btb = new BukkitTelnetBridge();
cpb = new CoreProtectBridge();
esb = new EssentialsBridge();
ldb = new LibsDisguisesBridge();
tfg = new TFGuildsBridge();
web = new WorldEditBridge();
wgb = new WorldGuardBridge();
}
private void initFun()
{
// Fun
it = new ItemFun();
lm = new Landminer();
mp = new MP44();
jp = new Jumppads();
tr = new Trailer();
}
private void initHTTPD()
{
// HTTPD
hd = new HTTPDaemon();
}
}
}
}

View file

@ -0,0 +1,83 @@
package me.totalfreedom.totalfreedommod;
import me.totalfreedom.totalfreedommod.util.FLog;
import net.md_5.bungee.api.ChatMessageType;
import net.md_5.bungee.api.chat.TextComponent;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerJoinEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.scheduler.BukkitRunnable;
public class VanishHandler extends FreedomService
{
@Override
public void onStart()
{
}
@Override
public void onStop()
{
}
@EventHandler(priority = EventPriority.HIGH)
public void onPlayerJoin(PlayerJoinEvent event)
{
Player player = event.getPlayer();
for (Player p : server.getOnlinePlayers())
{
if (!plugin.al.isAdmin(player) && plugin.al.isVanished(p.getName()))
{
player.hidePlayer(plugin, p);
}
}
for (Player p : server.getOnlinePlayers())
{
if (!plugin.al.isAdmin(p) && plugin.al.isVanished(player.getName()))
{
p.hidePlayer(plugin, player);
}
}
if (plugin.al.isVanished(player.getName()))
{
plugin.esb.setVanished(player.getName(), true);
FLog.info(player.getName() + " joined while still vanished.");
plugin.al.messageAllAdmins(ChatColor.YELLOW + player.getName() + " has joined silently.");
event.setJoinMessage(null);
new BukkitRunnable()
{
@Override
public void run()
{
if (!plugin.al.isVanished(player.getName()))
{
this.cancel();
}
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, TextComponent.fromLegacyText(ChatColor.GOLD + "You are hidden from other players."));
}
}.runTaskTimer(plugin, 0L, 4L);
}
}
@EventHandler
public void onPlayerLeave(PlayerQuitEvent event)
{
Player player = event.getPlayer();
if (plugin.al.isVanished(player.getName()))
{
event.setQuitMessage(null);
FLog.info(player.getName() + " left while still vanished.");
plugin.al.messageAllAdmins(ChatColor.YELLOW + player.getName() + " has left silently.");
}
}
}

View file

@ -2,12 +2,10 @@ package me.totalfreedom.totalfreedommod.admin;
import com.google.common.collect.Maps;
import java.util.Map;
import lombok.Getter;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.config.YamlConfig;
import me.totalfreedom.totalfreedommod.util.FLog;
import net.pravian.aero.config.YamlConfig;
import net.pravian.aero.util.Ips;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.command.CommandSender;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
@ -21,28 +19,30 @@ public class ActivityLog extends FreedomService
public static final String FILENAME = "activitylog.yml";
@Getter
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;
public ActivityLog(TotalFreedomMod plugin)
public ActivityLog()
{
super(plugin);
this.config = new YamlConfig(plugin, FILENAME, true);
}
public static String getFILENAME()
{
return FILENAME;
}
@Override
protected void onStart()
public void onStart()
{
load();
}
@Override
protected void onStop()
public void onStop()
{
save();
}
@ -59,7 +59,7 @@ public class ActivityLog extends FreedomService
ConfigurationSection section = config.getConfigurationSection(key);
if (section == null)
{
logger.warning("Invalid activity log format: " + key);
FLog.warning("Invalid activity log format: " + key);
continue;
}
@ -110,14 +110,14 @@ public class ActivityLog extends FreedomService
ActivityLogEntry activityLog = getEntryByName(player.getName());
if (activityLog == null)
{
String ip = Ips.getIp(player);
String ip = FUtil.getIp(player);
activityLog = getEntryByIp(ip);
if (activityLog != null)
{
// Set the new username
activityLog.setName(player.getName());
save();
updateTables();
// Set the new username
activityLog.setName(player.getName());
save();
updateTables();
}
else
{
@ -129,7 +129,7 @@ public class ActivityLog extends FreedomService
config.save();
}
}
String ip = Ips.getIp(player);
String ip = FUtil.getIp(player);
if (!activityLog.getIps().contains(ip))
{
activityLog.addIp(ip);
@ -189,4 +189,24 @@ public class ActivityLog extends FreedomService
plugin.acl.updateTables();
}
}
}
public Map<String, ActivityLogEntry> getAllActivityLogs()
{
return allActivityLogs;
}
public Map<String, ActivityLogEntry> getNameTable()
{
return nameTable;
}
public Map<String, ActivityLogEntry> getIpTable()
{
return ipTable;
}
public YamlConfig getConfig()
{
return config;
}
}

View file

@ -4,34 +4,21 @@ import com.google.common.collect.Lists;
import java.time.Instant;
import java.util.Date;
import java.util.List;
import lombok.Getter;
import lombok.Setter;
import me.totalfreedom.totalfreedommod.config.IConfig;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.pravian.aero.base.ConfigLoadable;
import net.pravian.aero.base.ConfigSavable;
import net.pravian.aero.base.Validatable;
import org.apache.commons.lang.Validate;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.Player;
public class ActivityLogEntry implements ConfigLoadable, ConfigSavable, Validatable
public class ActivityLogEntry implements IConfig
{
@Getter
private String configKey;
@Getter
@Setter
private String name;
@Getter
private final List<String> ips = Lists.newArrayList();
@Getter
@Setter
private List<String> timestamps = Lists.newArrayList();
@Getter
@Setter
private List<String> durations = Lists.newArrayList();
public static final String FILENAME = "activitylog.yml";
private final List<String> ips = Lists.newArrayList();
private final List<String> timestamps = Lists.newArrayList();
private final List<String> durations = Lists.newArrayList();
private String configKey;
private String name;
public ActivityLogEntry(Player player)
{
@ -44,6 +31,11 @@ public class ActivityLogEntry implements ConfigLoadable, ConfigSavable, Validata
this.configKey = configKey;
}
public static String getFILENAME()
{
return FILENAME;
}
public void loadFrom(Player player)
{
configKey = player.getName().toLowerCase();
@ -77,9 +69,19 @@ public class ActivityLogEntry implements ConfigLoadable, ConfigSavable, Validata
Date currentTime = Date.from(Instant.now());
timestamps.add("Login: " + FUtil.dateToString(currentTime));
}
public void addLogout()
{
String lastLoginString = timestamps.get(timestamps.size() - 1);
// Fix of Array index out of bonds issue: FS-131
String lastLoginString;
if (timestamps.size() > 1)
{
lastLoginString = timestamps.get(timestamps.size() - 1);
}
else
{
lastLoginString = timestamps.get(0);
}
Date currentTime = Date.from(Instant.now());
timestamps.add("Logout: " + FUtil.dateToString(currentTime));
lastLoginString = lastLoginString.replace("Login: ", "");
@ -110,10 +112,7 @@ public class ActivityLogEntry implements ConfigLoadable, ConfigSavable, Validata
public void removeIp(String ip)
{
if (ips.contains(ip))
{
ips.remove(ip);
}
ips.remove(ip);
}
public void clearIPs()
@ -121,10 +120,58 @@ public class ActivityLogEntry implements ConfigLoadable, ConfigSavable, Validata
ips.clear();
}
public int getTotalSecondsPlayed()
{
int result = 0;
for (String duration : durations)
{
String[] spl = duration.split(" ");
result += Integer.parseInt(spl[0]) * 60 * 60;
result += Integer.parseInt(spl[2]) * 60;
result += Integer.parseInt(spl[5]);
}
return result;
}
@Override
public boolean isValid()
{
return configKey != null
&& name != null;
}
public String getConfigKey()
{
return configKey;
}
public void setConfigKey(String configKey)
{
this.configKey = configKey;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public List<String> getIps()
{
return ips;
}
public List<String> getTimestamps()
{
return timestamps;
}
public List<String> getDurations()
{
return durations;
}
}

View file

@ -1,91 +1,60 @@
package me.totalfreedom.totalfreedommod.admin;
import com.google.common.collect.Lists;
import java.util.Arrays;
import java.util.Collections;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import lombok.Getter;
import lombok.Setter;
import me.totalfreedom.totalfreedommod.LogViewer.LogsRegistrationMode;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.pravian.aero.util.Ips;
import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
public class Admin
{
@Getter
@Setter
private String name;
@Getter
private boolean active = true;
@Getter
@Setter
private Rank rank = Rank.SUPER_ADMIN;
@Getter
private final List<String> ips = Lists.newArrayList();
private final List<String> backupCodes = Lists.newArrayList();
@Getter
@Setter
private Date lastLogin = new Date();
@Getter
@Setter
private String loginMessage = null;
@Getter
@Setter
private String discordID = null;
@Getter
@Setter
private String tag = null;
@Getter
@Setter
private Boolean commandSpy = false;
@Getter
@Setter
private Boolean potionSpy = false;
@Getter
@Setter
private String acFormat = null;
@Getter
@Setter
private Boolean oldTags = false;
@Getter
@Setter
private Boolean logStick = false;
public static final String CONFIG_FILENAME = "admins.yml";
private final List<String> ips = new ArrayList<>();
private String name;
private boolean active = true;
private Rank rank = Rank.ADMIN;
private Date lastLogin = new Date();
private Boolean commandSpy = false;
private Boolean potionSpy = false;
private String acFormat = null;
private String pteroID = null;
public Admin(Player player)
{
this.name = player.getName();
this.ips.add(Ips.getIp(player));
this.ips.add(FUtil.getIp(player));
}
public Admin(String username, List<String> ips, Rank rank, Boolean active, Date lastLogin, String loginMessage, String tag, String discordID, List<String> backupCodes, Boolean commandSpy, Boolean potionSpy, String acFormat, Boolean oldTags, Boolean logStick)
public Admin(ResultSet resultSet)
{
this.name = username;
this.active = active;
this.rank = rank;
this.ips.clear();
this.ips.addAll(ips);
this.lastLogin = lastLogin;
this.loginMessage = loginMessage;
this.tag = tag;
this.discordID = discordID;
this.backupCodes.clear();
this.backupCodes.addAll(backupCodes);
this.commandSpy = commandSpy;
this.potionSpy = potionSpy;
this.acFormat = acFormat;
this.oldTags = oldTags;
this.logStick = logStick;
try
{
this.name = resultSet.getString("username");
this.active = resultSet.getBoolean("active");
this.rank = Rank.findRank(resultSet.getString("rank"));
this.ips.clear();
this.ips.addAll(FUtil.stringToList(resultSet.getString("ips")));
this.lastLogin = new Date(resultSet.getLong("last_login"));
this.commandSpy = resultSet.getBoolean("command_spy");
this.potionSpy = resultSet.getBoolean("potion_spy");
this.acFormat = resultSet.getString("ac_format");
this.pteroID = resultSet.getString("ptero_id");
}
catch (SQLException e)
{
FLog.severe("Failed to load admin: " + e.getMessage());
}
}
@Override
@ -96,27 +65,15 @@ public class Admin
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("- Custom Login Message: ").append(loginMessage).append("\n")
.append("- Rank: ").append(rank.getName()).append("\n")
.append("- Is Active: ").append(active).append("\n")
.append("- Discord ID: ").append(discordID).append("\n")
.append("- Tag: ").append(tag).append("\n").append(ChatColor.GRAY)
.append("- Potion Spy: ").append(potionSpy).append("\n")
.append("- Admin Chat Format: ").append(acFormat).append("\n")
.append("- Old Tags: ").append(oldTags).append("\n")
.append("- Log Stick: ").append(logStick).append("\n")
.append("- Backup Codes: ").append(backupCodes.size()).append("/10");
.append("- Pterodactyl ID: ").append(pteroID).append("\n");
return output.toString();
}
public void loadFrom(Player player)
{
name = player.getName();
ips.clear();
ips.add(Ips.getIp(player));
}
public Map<String, Object> toSQLStorable()
{
Map<String, Object> map = new HashMap<String, Object>()
@ -125,30 +82,15 @@ public class Admin
put("active", active);
put("rank", rank.toString());
put("ips", FUtil.listToString(ips));
put("backup_codes", FUtil.listToString(backupCodes));
put("last_login", lastLogin.getTime());
put("login_message", loginMessage);
put("discord_id", discordID);
put("tag", tag);
put("command_spy", commandSpy);
put("potion_spy", potionSpy);
put("ac_format", acFormat);
put("old_tags", oldTags);
put("log_stick", logStick);
put("ptero_id", pteroID);
}};
return map;
}
public boolean isAtLeast(Rank pRank)
{
return rank.isAtLeast(pRank);
}
public boolean hasLoginMessage()
{
return loginMessage != null && !loginMessage.isEmpty();
}
// Util IP methods
public void addIp(String ip)
{
@ -168,10 +110,7 @@ public class Admin
public void removeIp(String ip)
{
if (ips.contains(ip))
{
ips.remove(ip);
}
ips.remove(ip);
}
public void clearIPs()
@ -179,31 +118,45 @@ public class Admin
ips.clear();
}
public List<String> getBackupCodes()
public boolean isValid()
{
return Collections.unmodifiableList(backupCodes);
return name != null
&& rank != null
&& !ips.isEmpty()
&& lastLogin != null;
}
public void setBackupCodes(List<String> codes)
public String getName()
{
backupCodes.clear();
backupCodes.addAll(codes);
return name;
}
public void removeBackupCode(String code)
public void setName(String name)
{
backupCodes.remove(code);
this.name = name;
}
public boolean isActive()
{
return active;
}
public void setActive(boolean active)
{
this.active = active;
final TotalFreedomMod plugin = TotalFreedomMod.plugin();
final TotalFreedomMod plugin = TotalFreedomMod.getPlugin();
// Avoiding stupid NPE compiler warnings
if (plugin == null)
{
Bukkit.getLogger().severe("The plugin is null!! This is a major issue and WILL break the plugin!");
return;
}
if (!active)
{
if (getRank().isAtLeast(Rank.TELNET_ADMIN))
if (getRank().isAtLeast(Rank.ADMIN))
{
if (plugin.btb != null)
{
@ -215,11 +168,68 @@ public class Admin
}
}
public boolean isValid()
public Rank getRank()
{
return name != null
&& rank != null
&& !ips.isEmpty()
&& lastLogin != null;
return rank;
}
}
public void setRank(Rank rank)
{
this.rank = rank;
}
public List<String> getIps()
{
return ips;
}
public Date getLastLogin()
{
return lastLogin;
}
public void setLastLogin(Date lastLogin)
{
this.lastLogin = lastLogin;
}
public Boolean getCommandSpy()
{
return commandSpy;
}
public void setCommandSpy(Boolean commandSpy)
{
this.commandSpy = commandSpy;
}
public Boolean getPotionSpy()
{
return potionSpy;
}
public void setPotionSpy(Boolean potionSpy)
{
this.potionSpy = potionSpy;
}
public String getAcFormat()
{
return acFormat;
}
public void setAcFormat(String acFormat)
{
this.acFormat = acFormat;
}
public String getPteroID()
{
return pteroID;
}
public void setPteroID(String pteroID)
{
this.pteroID = pteroID;
}
}

View file

@ -1,6 +1,5 @@
package me.totalfreedom.totalfreedommod.admin;
import com.google.common.base.Function;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import java.sql.ResultSet;
@ -11,71 +10,44 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import lombok.Getter;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.pravian.aero.config.YamlConfig;
import net.pravian.aero.util.Ips;
import org.bukkit.Bukkit;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.ServicePriority;
public class AdminList extends FreedomService
{
public static final String CONFIG_FILENAME = "admins.yml";
@Getter
public static final List<String> vanished = new ArrayList<>();
public final Map<String, List<String>> verifiedNoAdmin = Maps.newHashMap();
private final Set<Admin> allAdmins = Sets.newHashSet(); // Includes disabled admins
// Only active admins below
@Getter
private final Set<Admin> activeAdmins = Sets.newHashSet();
private final Map<String, Admin> nameTable = Maps.newHashMap();
private final Map<String, Admin> ipTable = Maps.newHashMap();
public final List<String> verifiedNoAdmins = new ArrayList<>();
public final Map<String, List<String>> verifiedNoAdminIps = Maps.newHashMap();
public static ArrayList<Player> vanished = new ArrayList<>();
//
private final YamlConfig config;
public AdminList(TotalFreedomMod plugin)
public static List<String> getVanished()
{
super(plugin);
this.config = new YamlConfig(plugin, CONFIG_FILENAME, true);
return vanished;
}
@Override
protected void onStart()
public void onStart()
{
load();
server.getServicesManager().register(Function.class, new Function<Player, Boolean>()
{
@Override
public Boolean apply(Player player)
{
return isAdmin(player);
}
}, plugin, ServicePriority.Normal);
deactivateOldEntries(false);
}
@Override
protected void onStop()
public void onStop()
{
}
public void load()
{
config.load();
allAdmins.clear();
try
{
@ -83,28 +55,14 @@ public class AdminList extends FreedomService
{
while (adminSet.next())
{
String name = adminSet.getString("username");
List<String> ips = FUtil.stringToList(adminSet.getString("ips"));
Rank rank = Rank.findRank(adminSet.getString("rank"));
Boolean active = adminSet.getBoolean("active");;
Date lastLogin = new Date(adminSet.getLong("last_login"));
String loginMessage = adminSet.getString("login_message");
String tag = adminSet.getString("tag");
String discordID = adminSet.getString("discord_id");
List<String> backupCodes = FUtil.stringToList(adminSet.getString("backup_codes"));
Boolean commandSpy = adminSet.getBoolean("command_spy");
Boolean potionSpy = adminSet.getBoolean("potion_spy");
String acFormat = adminSet.getString("ac_format");
Boolean oldTags = adminSet.getBoolean("old_tags");
Boolean logStick = adminSet.getBoolean("log_stick");
Admin admin = new Admin(name, ips, rank, active, lastLogin, loginMessage, tag, discordID, backupCodes, commandSpy, potionSpy, acFormat, oldTags, logStick);
Admin admin = new Admin(adminSet);
allAdmins.add(admin);
}
}
}
catch (SQLException e)
{
FLog.severe("Failed to get adminlist: " + e.getMessage());
FLog.severe("Failed to load admin list: " + e.getMessage());
}
updateTables();
@ -122,6 +80,18 @@ public class AdminList extends FreedomService
}
}
public void potionSpyMessage(String message)
{
for (Player player : server.getOnlinePlayers())
{
Admin admin = getAdmin(player.getPlayer());
if (isAdmin(player) && admin.getPotionSpy())
{
player.sendMessage(message);
}
}
}
public synchronized boolean isAdminSync(CommandSender sender)
{
return isAdmin(sender);
@ -149,6 +119,18 @@ public class AdminList extends FreedomService
return admin != null && admin.isActive();
}
public boolean isAdmin(Player player)
{
if (player == null)
{
return true;
}
Admin admin = getAdmin(player);
return admin != null && admin.isActive();
}
public boolean isSeniorAdmin(CommandSender sender)
{
Admin admin = getAdmin(sender);
@ -173,7 +155,7 @@ public class AdminList extends FreedomService
public Admin getAdmin(Player player)
{
// Find admin
String ip = Ips.getIp(player);
String ip = FUtil.getIp(player);
Admin admin = getEntryByName(player.getName());
// Admin by name
@ -257,7 +239,7 @@ public class AdminList extends FreedomService
public boolean isVerifiedAdmin(Player player)
{
return verifiedNoAdmins.contains(player.getName()) && verifiedNoAdminIps.get(player.getName()).contains(Ips.getIp(player));
return verifiedNoAdmin.containsKey(player.getName()) && verifiedNoAdmin.get(player.getName()).contains(FUtil.getIp(player));
}
public boolean isIdentityMatched(Player player)
@ -268,14 +250,14 @@ public class AdminList extends FreedomService
}
Admin admin = getAdmin(player);
return admin == null ? false : admin.getName().equalsIgnoreCase(player.getName());
return admin != null && admin.getName().equalsIgnoreCase(player.getName());
}
public boolean addAdmin(Admin admin)
{
if (!admin.isValid())
{
logger.warning("Could not add admin: " + admin.getName() + " Admin is missing details!");
FLog.warning("Could not add admin: " + admin.getName() + ". Admin is missing details!");
return false;
}
@ -291,7 +273,7 @@ public class AdminList extends FreedomService
public boolean removeAdmin(Admin admin)
{
if (admin.getRank().isAtLeast(Rank.TELNET_ADMIN))
if (admin.getRank().isAtLeast(Rank.ADMIN))
{
if (plugin.btb != null)
{
@ -334,8 +316,6 @@ public class AdminList extends FreedomService
}
}
plugin.wm.adminworld.wipeAccessCache();
}
public Set<String> getAdminNames()
@ -356,7 +336,7 @@ public class AdminList extends FreedomService
for (Map.Entry<String, Object> entry : admin.toSQLStorable().entrySet())
{
Object storedValue = plugin.sql.getValue(currentSave, entry.getKey(), entry.getValue());
if (storedValue != null && !storedValue.equals(entry.getValue()) || storedValue == null && entry.getValue() != null)
if (storedValue != null && !storedValue.equals(entry.getValue()) || storedValue == null && entry.getValue() != null || entry.getValue() == null)
{
plugin.sql.setAdminValue(admin, entry.getKey(), entry.getValue());
}
@ -396,4 +376,34 @@ public class AdminList extends FreedomService
updateTables();
}
}
public boolean isVanished(String player)
{
return vanished.contains(player);
}
public Set<Admin> getAllAdmins()
{
return allAdmins;
}
public Set<Admin> getActiveAdmins()
{
return activeAdmins;
}
public Map<String, Admin> getNameTable()
{
return nameTable;
}
public Map<String, Admin> getIpTable()
{
return ipTable;
}
public Map<String, List<String>> getVerifiedNoAdmin()
{
return verifiedNoAdmin;
}
}

View file

@ -1,66 +1,58 @@
package me.totalfreedom.totalfreedommod.banning;
import com.google.common.collect.Lists;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.time.Instant;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Date;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Set;
import lombok.Getter;
import lombok.Setter;
import java.util.UUID;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.pravian.aero.base.Validatable;
import net.pravian.aero.util.Ips;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public class Ban implements Validatable
public class Ban
{
public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd \'at\' HH:mm:ss z");
@Getter
@Setter
private String username = null;
@Getter
public static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd 'at' HH:mm:ss z");
private final List<String> ips = Lists.newArrayList();
@Getter
@Setter
private String username = null;
private UUID uuid = null;
private String by = null;
@Getter
@Setter
private Date at = null;
@Getter
@Setter
private String reason = null; // Unformatted, &[0-9,a-f] instead of ChatColor
@Getter
@Setter
private long expiryUnix = -1;
public Ban()
{
}
public Ban(String username, String ip, String by, Date at, Date expire, String reason)
public Ban(String username, UUID uuid, String ip, String by, Date at, Date expire, String reason)
{
this(username,
Arrays.asList(ip),
uuid,
Collections.singletonList(ip),
by,
at,
expire,
reason);
}
public Ban(String username, List<String> ips, String by, Date at, Date expire, String reason)
public Ban(String username, UUID uuid, List<String> ips, String by, Date at, Date expire, String reason)
{
this.username = username;
this.uuid = uuid;
if (ips != null)
{
this.ips.addAll(ips);
@ -68,6 +60,10 @@ public class Ban implements Validatable
dedupeIps();
this.by = by;
this.at = at;
if (expire == null)
{
expire = FUtil.parseDateOffset("24h");
}
this.expiryUnix = FUtil.getUnixTime(expire);
this.reason = reason;
}
@ -81,12 +77,12 @@ public class Ban implements Validatable
public static Ban forPlayerIp(Player player, CommandSender by, Date expiry, String reason)
{
return new Ban(null, Arrays.asList(Ips.getIp(player)), by.getName(), Date.from(Instant.now()), expiry, reason);
return new Ban(null, null, Collections.singletonList(FUtil.getIp(player)), by.getName(), Date.from(Instant.now()), expiry, reason);
}
public static Ban forPlayerIp(String ip, CommandSender by, Date expiry, String reason)
{
return new Ban(null, ip, by.getName(), Date.from(Instant.now()), expiry, reason);
return new Ban(null, null, ip, by.getName(), Date.from(Instant.now()), expiry, reason);
}
//
@ -99,7 +95,8 @@ public class Ban implements Validatable
public static Ban forPlayerName(String player, CommandSender by, Date expiry, String reason)
{
return new Ban(player,
new ArrayList<String>(),
null,
new ArrayList<>(),
by.getName(),
Date.from(Instant.now()),
expiry,
@ -116,7 +113,8 @@ public class Ban implements Validatable
public static Ban forPlayer(Player player, CommandSender by, Date expiry, String reason)
{
return new Ban(player.getName(),
Ips.getIp(player),
player.getUniqueId(),
FUtil.getIp(player),
by.getName(),
Date.from(Instant.now()),
expiry,
@ -126,18 +124,29 @@ public class Ban implements Validatable
public static Ban forPlayerFuzzy(Player player, CommandSender by, Date expiry, String reason)
{
return new Ban(player.getName(),
FUtil.getFuzzyIp(Ips.getIp(player)),
player.getUniqueId(),
FUtil.getFuzzyIp(FUtil.getIp(player)),
by.getName(),
Date.from(Instant.now()),
expiry,
reason);
}
public static SimpleDateFormat getDateFormat()
{
return DATE_FORMAT;
}
public boolean hasUsername()
{
return username != null && !username.isEmpty();
}
public boolean hasUUID()
{
return uuid != null;
}
public boolean addIp(String ip)
{
return ips.add(ip);
@ -160,14 +169,27 @@ public class Ban implements Validatable
public boolean isExpired()
{
return hasExpiry() && expiryUnix < FUtil.getUnixTime();
return hasExpiry() && FUtil.getUnixDate(expiryUnix).before(new Date(FUtil.getUnixTime()));
}
public String bakeKickMessage()
{
final StringBuilder message = new StringBuilder(ChatColor.GOLD + "You");
message.append(!hasUsername() ? "r IP address is" : " are").append(" temporarily banned from this server.");
if (!hasUsername())
{
message.append("r IP address is");
}
else if (!hasIps())
{
message.append("r username is");
}
else
{
message.append(" are");
}
message.append(" temporarily banned from this server.");
message.append("\nAppeal at ").append(ChatColor.BLUE)
.append(ConfigEntry.SERVER_BAN_URL.getString());
@ -226,34 +248,76 @@ public class Ban implements Validatable
return !(hasUsername() && !(getUsername().equalsIgnoreCase(ban.getUsername())));
}
@Override
public int hashCode()
{
int hash = 7;
hash = 79 * hash + (this.username != null ? this.username.toLowerCase().hashCode() : 0);
hash = 79 * hash + (this.ips != null ? this.ips.hashCode() : 0);
return hash;
}
@Override
public boolean isValid()
{
return username != null || !ips.isEmpty();
}
private void dedupeIps()
{
Set<String> uniqueIps = new HashSet<>();
Iterator<String> it = ips.iterator();
while (it.hasNext())
{
if (!uniqueIps.add(it.next()))
{
it.remove();
}
}
//Fancy Collections.removeIf lets you do all that while loop work in one lambda.
ips.removeIf(s -> !uniqueIps.add(s));
}
}
public List<String> getIps()
{
return ips;
}
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
public UUID getUuid()
{
return uuid;
}
public void setUuid(UUID uuid)
{
this.uuid = uuid;
}
public String getBy()
{
return by;
}
public void setBy(String by)
{
this.by = by;
}
public Date getAt()
{
return at;
}
public void setAt(Date at)
{
this.at = at;
}
public String getReason()
{
return reason;
}
public void setReason(String reason)
{
this.reason = reason;
}
public long getExpiryUnix()
{
return expiryUnix;
}
public void setExpiryUnix(long expiryUnix)
{
this.expiryUnix = expiryUnix;
}
}

View file

@ -9,17 +9,14 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.pravian.aero.util.Ips;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@ -30,19 +27,15 @@ public class BanManager extends FreedomService
{
private final Set<Ban> bans = Sets.newHashSet();
private final Map<String, Ban> ipBans = Maps.newHashMap();
private final Map<String, Ban> nameBans = Maps.newHashMap();
private final Map<UUID, Ban> uuidBans = Maps.newHashMap();
private final Map<String, Ban> ipBans = Maps.newHashMap();
private final List<String> unbannableUsernames = Lists.newArrayList();
//
public BanManager(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
public void onStart()
{
bans.clear();
try
@ -52,12 +45,18 @@ public class BanManager extends FreedomService
while (banSet.next())
{
String name = banSet.getString("name");
UUID uuid = null;
String strUUID = banSet.getString("uuid");
if (strUUID != null)
{
uuid = UUID.fromString(strUUID);
}
List<String> ips = FUtil.stringToList(banSet.getString("ips"));
String by = banSet.getString("by");
Date at = new Date(banSet.getLong("at"));
Date expires = new Date(banSet.getLong("expires"));
String reason = banSet.getString("reason");
Ban ban = new Ban(name, ips, by, at, expires, reason);
Ban ban = new Ban(name, uuid, ips, by, at, expires, reason);
bans.add(ban);
}
}
@ -74,12 +73,12 @@ public class BanManager extends FreedomService
// Load unbannable usernames
unbannableUsernames.clear();
unbannableUsernames.addAll((Collection<? extends String>)ConfigEntry.FAMOUS_PLAYERS.getList());
unbannableUsernames.addAll(ConfigEntry.FAMOUS_PLAYERS.getStringList());
FLog.info("Loaded " + unbannableUsernames.size() + " unbannable usernames.");
}
@Override
protected void onStop()
public void onStop()
{
}
@ -121,7 +120,7 @@ public class BanManager extends FreedomService
continue;
}
if (Ips.fuzzyIpMatch(ip, loopIp, 4))
if (FUtil.fuzzyIpMatch(ip, loopIp, 4))
{
return loopBan;
}
@ -144,6 +143,18 @@ public class BanManager extends FreedomService
return null;
}
public Ban getByUUID(UUID uuid)
{
final Ban directBan = uuidBans.get(uuid);
if (directBan != null && !directBan.isExpired())
{
return directBan;
}
return null;
}
public Ban unbanIp(String ip)
{
final Ban ban = getByIp(ip);
@ -178,32 +189,41 @@ public class BanManager extends FreedomService
return getByUsername(username) != null;
}
public boolean addBan(Ban ban)
public void addBan(Ban ban)
{
if (getByUsername(ban.getUsername()) != null)
if (ban.getUsername() != null && getByUsername(ban.getUsername()) != null)
{
removeBan(ban);
}
else
{
for (String ip : ban.getIps())
{
if (getByIp(ip) != null)
{
removeBan(ban);
break;
}
}
}
if (bans.add(ban))
{
plugin.sql.addBan(ban);
updateViews();
return true;
}
return false;
}
public boolean removeBan(Ban ban)
public void removeBan(Ban ban)
{
if (bans.remove(ban))
{
plugin.sql.removeBan(ban);
updateViews();
return true;
}
return false;
}
public int purge()
@ -219,13 +239,19 @@ public class BanManager extends FreedomService
public void onPlayerLogin(PlayerLoginEvent event)
{
final String username = event.getPlayer().getName();
final String ip = Ips.getIp(event);
final UUID uuid = event.getPlayer().getUniqueId();
final String ip = FUtil.getIp(event);
// Regular ban
Ban ban = getByUsername(username);
if (ban == null)
{
ban = getByIp(ip);
ban = getByUUID(uuid);
if (ban == null)
{
ban = getByIp(ip);
}
}
if (ban != null && !ban.isExpired())
@ -238,7 +264,6 @@ public class BanManager extends FreedomService
public void onPlayerJoin(PlayerJoinEvent event)
{
final Player player = event.getPlayer();
final PlayerData data = plugin.pl.getData(player);
if (!plugin.al.isAdmin(player))
{
@ -246,14 +271,19 @@ public class BanManager extends FreedomService
}
// Unban admins
for (String storedIp : data.getIps())
Ban ban = getByUsername(player.getName());
if (ban != null)
{
unbanIp(storedIp);
unbanIp(FUtil.getFuzzyIp(storedIp));
removeBan(ban);
}
else
{
ban = getByIp(FUtil.getIp(player));
if (ban != null)
{
removeBan(ban);
}
}
unbanUsername(player.getName());
player.setOp(true);
}
private void updateViews()
@ -269,6 +299,7 @@ public class BanManager extends FreedomService
}
nameBans.clear();
uuidBans.clear();
ipBans.clear();
for (Ban ban : bans)
{
@ -277,6 +308,11 @@ public class BanManager extends FreedomService
nameBans.put(ban.getUsername().toLowerCase(), ban);
}
if (ban.hasUUID())
{
uuidBans.put(ban.getUuid(), ban);
}
if (ban.hasIps())
{
for (String ip : ban.getIps())
@ -286,5 +322,4 @@ public class BanManager extends FreedomService
}
}
}
}
}

View file

@ -0,0 +1,89 @@
package me.totalfreedom.totalfreedommod.banning;
import com.google.common.collect.Lists;
import java.util.List;
import java.util.UUID;
import me.totalfreedom.totalfreedommod.config.IConfig;
import me.totalfreedom.totalfreedommod.util.FLog;
import org.bukkit.configuration.ConfigurationSection;
public class IndefiniteBan implements IConfig
{
private final List<String> ips = Lists.newArrayList();
private String username = null;
private UUID uuid = null;
private String reason = null;
public IndefiniteBan()
{
}
@Override
public void loadFrom(ConfigurationSection cs)
{
this.username = cs.getName();
try
{
String strUUID = cs.getString("uuid", null);
if (strUUID != null)
{
UUID uuid = UUID.fromString(strUUID);
this.uuid = uuid;
}
}
catch (IllegalArgumentException e)
{
FLog.warning("Failed to load indefinite banned UUID for " + this.username + ". Make sure the UUID is in the correct format with dashes.");
}
this.ips.clear();
this.ips.addAll(cs.getStringList("ips"));
this.reason = cs.getString("reason", null);
}
@Override
public void saveTo(ConfigurationSection cs)
{
// The indefinite ban list is only intended to be modified manually. It is not intended to save.
}
@Override
public boolean isValid()
{
return username != null;
}
public String getUsername()
{
return username;
}
public void setUsername(String username)
{
this.username = username;
}
public UUID getUuid()
{
return uuid;
}
public void setUuid(UUID uuid)
{
this.uuid = uuid;
}
public List<String> getIps()
{
return ips;
}
public String getReason()
{
return reason;
}
public void setReason(String reason)
{
this.reason = reason;
}
}

View file

@ -0,0 +1,165 @@
package me.totalfreedom.totalfreedommod.banning;
import com.google.common.base.Strings;
import com.google.common.collect.Sets;
import java.util.Set;
import java.util.UUID;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.config.YamlConfig;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.ChatColor;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerLoginEvent;
public class IndefiniteBanList extends FreedomService
{
public static final String CONFIG_FILENAME = "indefinitebans.yml";
private final Set<IndefiniteBan> indefBans = Sets.newHashSet();
private int nameBanCount = 0;
private int uuidBanCount = 0;
private int ipBanCount = 0;
public static String getConfigFilename()
{
return CONFIG_FILENAME;
}
@Override
public void onStart()
{
indefBans.clear();
final YamlConfig config = new YamlConfig(plugin, CONFIG_FILENAME, true);
config.load();
for (String name : config.getKeys(false))
{
if (!config.isConfigurationSection(name))
{
FLog.warning("Could not load indefinite ban for " + name + ": Invalid format!");
continue;
}
IndefiniteBan indefBan = new IndefiniteBan();
ConfigurationSection cs = config.getConfigurationSection(name);
assert cs != null;
indefBan.loadFrom(cs);
if (!indefBan.isValid())
{
FLog.warning("Not adding indefinite ban for " + name + ": Missing information.");
continue;
}
indefBans.add(indefBan);
}
updateCount();
FLog.info("Loaded " + nameBanCount + " indefinite name bans, " + uuidBanCount + " UUID bans, and " + ipBanCount + " ip bans");
}
@Override
public void onStop()
{
}
@EventHandler(priority = EventPriority.LOWEST)
public void onPlayerLogin(PlayerLoginEvent event)
{
final String username = event.getPlayer().getName();
final UUID uuid = event.getPlayer().getUniqueId();
final String ip = FUtil.getIp(event);
String bannedBy = "";
IndefiniteBan ban = null;
for (IndefiniteBan indefBan : indefBans)
{
if (username.equalsIgnoreCase(indefBan.getUsername()))
{
bannedBy = "username";
ban = indefBan;
break;
}
else if (indefBan.getUuid() != null && indefBan.getUuid().equals(uuid))
{
bannedBy = "UUID";
ban = indefBan;
break;
}
else if (indefBan.getIps().contains(ip))
{
bannedBy = "IP address";
ban = indefBan;
break;
}
}
if (ban != null)
{
String kickMessage = ChatColor.RED + "Your " + bannedBy + " is indefinitely banned from this server.";
String reason = ban.getReason();
if (!Strings.isNullOrEmpty(reason))
{
kickMessage += "\nReason: " + ChatColor.GOLD + reason;
}
String appealURL = ConfigEntry.SERVER_INDEFBAN_URL.getString();
if (!Strings.isNullOrEmpty(appealURL))
{
kickMessage += ChatColor.RED + "\n\nRelease procedures are available at\n" + ChatColor.GOLD + ConfigEntry.SERVER_INDEFBAN_URL.getString();
}
event.disallow(PlayerLoginEvent.Result.KICK_OTHER, kickMessage);
}
}
private void updateCount()
{
nameBanCount = 0;
uuidBanCount = 0;
ipBanCount = 0;
for (IndefiniteBan indefBan : indefBans)
{
nameBanCount += 1;
if (indefBan.getUuid() != null)
{
uuidBanCount += 1;
}
ipBanCount += indefBan.getIps().size();
}
}
public Set<IndefiniteBan> getIndefBans()
{
return indefBans;
}
public int getNameBanCount()
{
return nameBanCount;
}
public int getUuidBanCount()
{
return uuidBanCount;
}
public int getIpBanCount()
{
return ipBanCount;
}
}

View file

@ -1,99 +0,0 @@
package me.totalfreedom.totalfreedommod.banning;
import com.google.common.collect.Sets;
import java.util.Set;
import lombok.Getter;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.pravian.aero.config.YamlConfig;
import net.pravian.aero.util.Ips;
import org.bukkit.ChatColor;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerLoginEvent;
public class PermbanList extends FreedomService
{
public static final String CONFIG_FILENAME = "permbans.yml";
@Getter
private final Set<String> permbannedNames = Sets.newHashSet();
@Getter
private final Set<String> permbannedIps = Sets.newHashSet();
public PermbanList(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
{
permbannedNames.clear();
permbannedIps.clear();
final YamlConfig config = new YamlConfig(plugin, CONFIG_FILENAME, true);
config.load();
for (String name : config.getKeys(false))
{
permbannedNames.add(name.toLowerCase().trim());
permbannedIps.addAll(config.getStringList(name));
}
FLog.info("Loaded " + permbannedIps.size() + " perm IP bans and " + permbannedNames.size() + " perm username bans.");
}
@Override
protected void onStop()
{
}
@EventHandler(priority = EventPriority.LOWEST)
public void onPlayerLogin(PlayerLoginEvent event)
{
final String username = event.getPlayer().getName();
final String ip = Ips.getIp(event);
// Permbanned IPs
for (String testIp : getPermbannedIps())
{
if (FUtil.fuzzyIpMatch(testIp, ip, 4))
{
event.disallow(PlayerLoginEvent.Result.KICK_OTHER,
ChatColor.RED + "Your IP address is permanently banned from this server.\n"
+ "Release procedures are available at\n"
+ ChatColor.GOLD + ConfigEntry.SERVER_PERMBAN_URL.getString());
return;
}
}
// Permbanned usernames
for (String testPlayer : getPermbannedNames())
{
if (testPlayer.equalsIgnoreCase(username))
{
event.disallow(PlayerLoginEvent.Result.KICK_OTHER,
ChatColor.RED + "Your username is permanently banned from this server.\n"
+ "Release procedures are available at\n"
+ ChatColor.GOLD + ConfigEntry.SERVER_PERMBAN_URL.getString());
return;
}
}
}
public Set<String> getPermbannedNames()
{
return this.permbannedNames;
}
public Set<String> getPermbannedIps()
{
return this.permbannedIps;
}
}

View file

@ -2,15 +2,11 @@ package me.totalfreedom.totalfreedommod.blocking;
import java.util.List;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil;
import me.totalfreedom.totalfreedommod.util.Groups;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.block.Banner;
import org.bukkit.block.Block;
import org.bukkit.block.Skull;
import org.bukkit.block.banner.Pattern;
import org.bukkit.entity.Player;
@ -23,22 +19,17 @@ import org.bukkit.inventory.meta.SkullMeta;
public class BlockBlocker extends FreedomService
{
public BlockBlocker(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
public void onStart()
{
}
@Override
protected void onStop()
public void onStop()
{
}
@SuppressWarnings("deprecation")
@EventHandler(priority = EventPriority.HIGH)
public void onBlockPlace(BlockPlaceEvent event)
{
@ -68,6 +59,7 @@ public class BlockBlocker extends FreedomService
break;
}
case FIRE:
case SOUL_FIRE:
{
if (!ConfigEntry.ALLOW_FIRE_PLACE.getBoolean())
{
@ -141,17 +133,18 @@ public class BlockBlocker extends FreedomService
case PLAYER_HEAD:
case PLAYER_WALL_HEAD:
{
Skull skull = (Skull) event.getBlockPlaced().getState();
if (skull.hasOwner())
Skull skull = (Skull)event.getBlockPlaced().getState();
if (skull.getOwner() != null)
{
if (skull.getOwner().contains("\u00A7"))
{
skull.setOwner(skull.getOwner().replace("\u00A7", ""));
SkullMeta meta = (SkullMeta) event.getItemInHand().getItemMeta();
SkullMeta meta = (SkullMeta)event.getItemInHand().getItemMeta();
if (meta != null)
{
ItemStack newHead = new ItemStack(Material.PLAYER_HEAD, 1);
ItemMeta headMeta = newHead.getItemMeta();
assert headMeta != null;
headMeta.setDisplayName(ChatColor.YELLOW + "C-sectioned Head");
newHead.setItemMeta(headMeta);
player.getInventory().setItem(player.getInventory().getHeldItemSlot(), newHead);
@ -168,21 +161,33 @@ public class BlockBlocker extends FreedomService
}
break;
}
case RESPAWN_ANCHOR:
{
if (!ConfigEntry.ALLOW_RESPAWN_ANCHORS.getBoolean())
{
player.sendMessage(ChatColor.GRAY + "Respawn anchors are disabled.");
player.getInventory().setItem(player.getInventory().getHeldItemSlot(), new ItemStack(Material.COOKIE, 1));
event.setCancelled(true);
}
break;
}
default:
{
// Do nothing
break;
}
}
if (Groups.BANNERS.contains(event.getBlockPlaced().getType()))
{
Banner banner = (Banner) event.getBlockPlaced().getState();
Banner banner = (Banner)event.getBlockPlaced().getState();
List<Pattern> patterns = banner.getPatterns();
Banner handBanner = (Banner) (((Block) event.getItemInHand()).getState());
List<Pattern> handPatterns = banner.getPatterns();
if (patterns.size() >= 2)
{
banner.setPatterns(patterns.subList(0, 2));
handBanner.setPatterns(handPatterns.subList(0, 2));
player.sendMessage(ChatColor.GRAY + "Your banner had too many patterns on it, so some were removed.");
}
}
}
}
}

View file

@ -1,69 +1,62 @@
package me.totalfreedom.totalfreedommod.blocking;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.util.FSync;
import org.bukkit.ChatColor;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent;
public class EditBlocker extends FreedomService
{
public EditBlocker(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
{
}
@Override
protected void onStop()
{
}
@EventHandler(priority = EventPriority.LOW)
public void onBlockPlace(BlockPlaceEvent event)
{
FPlayer fPlayer = plugin.pl.getPlayerSync(event.getPlayer());
if (!fPlayer.isEditBlocked())
{
return;
}
if (plugin.al.isAdminSync(event.getPlayer()))
{
fPlayer.setEditBlocked(false);
return;
}
FSync.playerMsg(event.getPlayer(), ChatColor.RED + "Your ability to place blocks has been disabled!");
event.setCancelled(true);
}
@EventHandler(priority = EventPriority.LOW)
public void onBlockBreak(BlockBreakEvent event)
{
FPlayer fPlayer = plugin.pl.getPlayerSync(event.getPlayer());
if (!fPlayer.isEditBlocked())
{
return;
}
if (plugin.al.isAdminSync(event.getPlayer()))
{
fPlayer.setEditBlocked(false);
return;
}
FSync.playerMsg(event.getPlayer(), ChatColor.RED + "Your ability to destroy blocks has been disabled!");
event.setCancelled(true);
}
}
package me.totalfreedom.totalfreedommod.blocking;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.util.FSync;
import org.bukkit.ChatColor;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.BlockBreakEvent;
import org.bukkit.event.block.BlockPlaceEvent;
public class EditBlocker extends FreedomService
{
@Override
public void onStart()
{
}
@Override
public void onStop()
{
}
@EventHandler(priority = EventPriority.LOW)
public void onBlockPlace(BlockPlaceEvent event)
{
FPlayer fPlayer = plugin.pl.getPlayerSync(event.getPlayer());
if (!fPlayer.isEditBlocked())
{
return;
}
if (plugin.al.isAdminSync(event.getPlayer()))
{
fPlayer.setEditBlocked(false);
return;
}
FSync.playerMsg(event.getPlayer(), ChatColor.RED + "Your ability to place blocks has been disabled!");
event.setCancelled(true);
}
@EventHandler(priority = EventPriority.LOW)
public void onBlockBreak(BlockBreakEvent event)
{
FPlayer fPlayer = plugin.pl.getPlayerSync(event.getPlayer());
if (!fPlayer.isEditBlocked())
{
return;
}
if (plugin.al.isAdminSync(event.getPlayer()))
{
fPlayer.setEditBlocked(false);
return;
}
FSync.playerMsg(event.getPlayer(), ChatColor.RED + "Your ability to destroy blocks has been disabled!");
event.setCancelled(true);
}
}

View file

@ -1,32 +1,37 @@
package me.totalfreedom.totalfreedommod.blocking;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.util.FUtil;
import me.totalfreedom.totalfreedommod.util.Groups;
import org.bukkit.Material;
import org.bukkit.attribute.Attribute;
import org.bukkit.attribute.AttributeModifier;
import org.bukkit.block.data.AnaloguePowerable;
import org.bukkit.block.data.Powerable;
import org.bukkit.entity.Entity;
import org.bukkit.entity.FallingBlock;
import org.bukkit.entity.Tameable;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.BlockBurnEvent;
import org.bukkit.event.block.BlockDispenseEvent;
import org.bukkit.event.block.BlockFromToEvent;
import org.bukkit.event.block.BlockGrowEvent;
import org.bukkit.event.block.BlockIgniteEvent;
import org.bukkit.event.block.BlockPhysicsEvent;
import org.bukkit.event.block.BlockPistonExtendEvent;
import org.bukkit.event.block.BlockPistonRetractEvent;
import org.bukkit.event.block.BlockRedstoneEvent;
import org.bukkit.event.block.LeavesDecayEvent;
import org.bukkit.event.block.BlockGrowEvent;
import org.bukkit.event.entity.EntityCombustEvent;
import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDeathEvent;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.entity.EntitySpawnEvent;
import org.bukkit.event.entity.ExplosionPrimeEvent;
import org.bukkit.event.entity.FireworkExplodeEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
@ -35,19 +40,27 @@ import org.bukkit.event.player.PlayerRespawnEvent;
public class EventBlocker extends FreedomService
{
/**
* /@EventHandler(priority = EventPriority.HIGH)
* /public void onBlockRedstone(BlockRedstoneEvent event)
* /{
* / if (!ConfigEntry.ALLOW_REDSTONE.getBoolean())
* / {
* / event.setNewCurrent(0);
* / }
* /}
**/
public EventBlocker(TotalFreedomMod plugin)
{
super(plugin);
}
// TODO: Revert back to old redstone block system when (or if) it is fixed in Bukkit, Spigot or Paper.
private final ArrayList<Material> redstoneBlocks = new ArrayList<>(Arrays.asList(Material.REDSTONE, Material.DISPENSER, Material.DROPPER, Material.REDSTONE_LAMP));
@Override
protected void onStart()
public void onStart()
{
}
@Override
protected void onStop()
public void onStop()
{
}
@ -123,16 +136,11 @@ public class EventBlocker extends FreedomService
@EventHandler(priority = EventPriority.HIGH)
public void onEntityDamage(EntityDamageEvent event)
{
switch (event.getCause())
if ((event.getCause() == EntityDamageEvent.DamageCause.LAVA)
&& !ConfigEntry.ALLOW_LAVA_DAMAGE.getBoolean())
{
case LAVA:
{
if (!ConfigEntry.ALLOW_LAVA_DAMAGE.getBoolean())
{
event.setCancelled(true);
return;
}
}
event.setCancelled(true);
return;
}
if (ConfigEntry.ENABLE_PET_PROTECT.getBoolean())
@ -206,27 +214,41 @@ public class EventBlocker extends FreedomService
}
}
@EventHandler(priority = EventPriority.HIGH)
public void onBlockRedstone(BlockRedstoneEvent event)
@EventHandler
public void onEntitySpawn(EntitySpawnEvent event)
{
if (!ConfigEntry.ALLOW_GRAVITY.getBoolean() && event.getEntity() instanceof FallingBlock)
{
event.setCancelled(true);
}
}
@EventHandler
public void onBlockPhysics(BlockPhysicsEvent event)
{
if (!ConfigEntry.ALLOW_REDSTONE.getBoolean())
{
event.setNewCurrent(0);
// Check if the block is involved with redstone.
if (event.getBlock().getBlockData() instanceof AnaloguePowerable || event.getBlock().getBlockData() instanceof Powerable || redstoneBlocks.contains(event.getBlock().getType()))
{
event.setCancelled(true);
}
}
}
@EventHandler(priority = EventPriority.NORMAL)
public void onPlayerRespawn(PlayerRespawnEvent event)
{
double maxHealth = event.getPlayer().getAttribute(Attribute.GENERIC_MAX_HEALTH).getValue();
double maxHealth = Objects.requireNonNull(event.getPlayer().getAttribute(Attribute.GENERIC_MAX_HEALTH)).getValue();
if (maxHealth < 1)
{
for (AttributeModifier attributeModifier : event.getPlayer().getAttribute(Attribute.GENERIC_MAX_HEALTH).getModifiers())
for (AttributeModifier attributeModifier : Objects.requireNonNull(event.getPlayer().getAttribute(Attribute.GENERIC_MAX_HEALTH)).getModifiers())
{
event.getPlayer().getAttribute(Attribute.GENERIC_MAX_HEALTH).removeModifier(attributeModifier);
Objects.requireNonNull(event.getPlayer().getAttribute(Attribute.GENERIC_MAX_HEALTH)).removeModifier(attributeModifier);
}
}
}
@EventHandler(priority = EventPriority.NORMAL)
public void onBlockDispense(BlockDispenseEvent event)
{

View file

@ -1,34 +1,26 @@
package me.totalfreedom.totalfreedommod.blocking;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.Groups;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.block.Biome;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerBedEnterEvent;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
public class InteractBlocker extends FreedomService
{
public InteractBlocker(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
public void onStart()
{
}
@Override
protected void onStop()
public void onStop()
{
}
@ -44,10 +36,9 @@ public class InteractBlocker extends FreedomService
break;
}
case LEFT_CLICK_AIR:
case LEFT_CLICK_BLOCK:
default:
{
//
// Do nothing
break;
}
}
@ -56,15 +47,20 @@ public class InteractBlocker extends FreedomService
@EventHandler(priority = EventPriority.HIGH)
public void onRightClickBell(PlayerInteractEvent event)
{
if (event.getClickedBlock() != null)
if (event.getClickedBlock() != null && event.getClickedBlock().getType().equals(Material.BELL) && !ConfigEntry.ALLOW_BELLS.getBoolean())
{
if (event.getClickedBlock().getType().equals(Material.BELL))
{
if (!ConfigEntry.ALLOW_BELLS.getBoolean())
{
event.setCancelled(true);
}
}
event.setCancelled(true);
}
}
@EventHandler
public void onBedEnter(PlayerBedEnterEvent event)
{
Player player = event.getPlayer();
if (Groups.EXPLOSIVE_BED_BIOMES.contains(event.getBed().getBiome()))
{
player.sendMessage(ChatColor.RED + "You may not sleep here.");
event.setCancelled(true);
}
}
@ -74,7 +70,7 @@ public class InteractBlocker extends FreedomService
if (event.getClickedBlock() != null)
{
if (event.getClickedBlock().getType().equals(Material.STRUCTURE_BLOCK) || event.getClickedBlock().getType().equals(Material.JIGSAW))
if (event.getClickedBlock().getType().equals(Material.STRUCTURE_BLOCK) || event.getClickedBlock().getType().equals(Material.JIGSAW) || event.getClickedBlock().getType().equals(Material.RESPAWN_ANCHOR))
{
event.setCancelled(true);
event.getPlayer().closeInventory();
@ -89,13 +85,6 @@ public class InteractBlocker extends FreedomService
return;
}
if (Groups.BED_COLORS.contains(event.getMaterial()) && event.getClickedBlock().getBiome().equals(Biome.NETHER))
{
player.sendMessage(ChatColor.RED + "You can't sleep in hell.");
event.setCancelled(true);
return;
}
switch (event.getMaterial())
{
case WATER_BUCKET:
@ -136,7 +125,7 @@ public class InteractBlocker extends FreedomService
event.setCancelled(true);
break;
}
case ARMOR_STAND:
{
if (ConfigEntry.ALLOW_ARMOR_STANDS.getBoolean())
@ -168,6 +157,11 @@ public class InteractBlocker extends FreedomService
event.setCancelled(true);
break;
}
default:
{
// Do nothing
break;
}
}
}
}
}

View file

@ -1,9 +1,8 @@
package me.totalfreedom.totalfreedommod.blocking;
import java.util.Objects;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.util.FLog;
import org.bukkit.attribute.Attributable;
import org.bukkit.attribute.Attribute;
import org.bukkit.entity.Bat;
@ -22,19 +21,13 @@ import org.bukkit.event.entity.EntitySpawnEvent;
public class MobBlocker extends FreedomService
{
public MobBlocker(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
public void onStart()
{
}
@Override
protected void onStop()
public void onStop()
{
}
@ -50,13 +43,13 @@ public class MobBlocker extends FreedomService
Entity entity = e.getEntity();
if (entity instanceof Attributable)
{
if (((Attributable)entity).getAttribute(Attribute.GENERIC_FOLLOW_RANGE).getBaseValue() > 255.0)
if (Objects.requireNonNull(((Attributable)entity).getAttribute(Attribute.GENERIC_FOLLOW_RANGE)).getBaseValue() > 255.0)
{
((Attributable)entity).getAttribute(Attribute.GENERIC_FOLLOW_RANGE).setBaseValue(255.0);
Objects.requireNonNull(((Attributable)entity).getAttribute(Attribute.GENERIC_FOLLOW_RANGE)).setBaseValue(255.0);
}
if (((Attributable)entity).getAttribute(Attribute.GENERIC_MOVEMENT_SPEED).getBaseValue() > 10.0)
if (Objects.requireNonNull(((Attributable)entity).getAttribute(Attribute.GENERIC_MOVEMENT_SPEED)).getBaseValue() > 10.0)
{
((Attributable)entity).getAttribute(Attribute.GENERIC_MOVEMENT_SPEED).setBaseValue(10.0);
Objects.requireNonNull(((Attributable)entity).getAttribute(Attribute.GENERIC_MOVEMENT_SPEED)).setBaseValue(10.0);
}
}
}
@ -125,7 +118,7 @@ public class MobBlocker extends FreedomService
}
int mobcount = 0;
for (Entity entity : event.getLocation().getWorld().getLivingEntities())
for (Entity entity : Objects.requireNonNull(event.getLocation().getWorld()).getLivingEntities())
{
if (!(entity instanceof HumanEntity) && entity instanceof LivingEntity)
{
@ -138,4 +131,4 @@ public class MobBlocker extends FreedomService
event.setCancelled(true);
}
}
}
}

View file

@ -1,32 +1,26 @@
package me.totalfreedom.totalfreedommod.blocking;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import org.bukkit.ChatColor;
import org.bukkit.GameMode;
import org.bukkit.entity.Arrow;
import org.bukkit.entity.Player;
import org.bukkit.entity.Trident;
import org.bukkit.entity.FishHook;
import org.bukkit.entity.Player;
import org.bukkit.entity.SpectralArrow;
import org.bukkit.entity.Trident;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
public class PVPBlocker extends FreedomService
{
public PVPBlocker(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
public void onStart()
{
}
@Override
protected void onStop()
public void onStop()
{
}
@ -50,6 +44,14 @@ public class PVPBlocker extends FreedomService
player = (Player)arrow.getShooter();
}
}
else if (event.getDamager() instanceof SpectralArrow)
{
SpectralArrow spectralArrow = (SpectralArrow)event.getDamager();
if (spectralArrow.getShooter() instanceof Player)
{
player = (Player)spectralArrow.getShooter();
}
}
else if (event.getDamager() instanceof Trident)
{
Trident trident = (Trident)event.getDamager();
@ -91,7 +93,5 @@ public class PVPBlocker extends FreedomService
event.setCancelled(true);
}
}
}
}
}

View file

@ -2,7 +2,6 @@ package me.totalfreedom.totalfreedommod.blocking;
import java.util.Collection;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.entity.ThrownPotion;
@ -19,18 +18,13 @@ public class PotionBlocker extends FreedomService
public static final int POTION_BLOCK_RADIUS_SQUARED = 20 * 20;
public PotionBlocker(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
public void onStart()
{
}
@Override
protected void onStop()
public void onStop()
{
}
@ -88,5 +82,4 @@ public class PotionBlocker extends FreedomService
}
return false;
}
}
}

View file

@ -1,12 +1,10 @@
package me.totalfreedom.totalfreedommod.blocking;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import net.minecraft.server.v1_15_R1.NBTTagCompound;
import net.minecraft.nbt.NBTTagCompound;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.Tag;
import org.bukkit.craftbukkit.v1_15_R1.inventory.CraftItemStack;
import org.bukkit.craftbukkit.v1_17_R1.inventory.CraftItemStack;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
@ -19,19 +17,13 @@ import org.bukkit.inventory.ItemStack;
public class SignBlocker extends FreedomService
{
public SignBlocker(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
public void onStart()
{
}
@Override
protected void onStop()
public void onStop()
{
}
@ -43,8 +35,9 @@ public class SignBlocker extends FreedomService
if (Tag.SIGNS.getValues().contains(event.getBlock().getType()))
{
ItemStack sign = event.getItemInHand();
net.minecraft.server.v1_15_R1.ItemStack nmsSign = CraftItemStack.asNMSCopy(sign);
net.minecraft.world.item.ItemStack nmsSign = CraftItemStack.asNMSCopy(sign);
NBTTagCompound compound = (nmsSign.hasTag()) ? nmsSign.getTag() : new NBTTagCompound();
assert compound != null;
NBTTagCompound bet = compound.getCompound("BlockEntityTag");
String line1 = bet.getString("Text1");
String line2 = bet.getString("Text2");
@ -55,16 +48,6 @@ public class SignBlocker extends FreedomService
player.sendMessage(ChatColor.GRAY + "You are not allowed to place command signs.");
event.setCancelled(true);
}
if (line1.contains("translate") || line2.contains("translate") || line3.contains("translate") || line4.contains("translate"))
{
player.sendMessage(ChatColor.GRAY + "You are not allowed to place broken strings that Mojang never fixed.");
event.setCancelled(true);
}
if (line1.contains("translation.test.") || line2.contains("translation.test.") || line3.contains("translation.test.") || line4.contains("translation.test."))
{
player.sendMessage(ChatColor.BOLD + "No.");
event.setCancelled(true);
}
}
}
@ -81,4 +64,4 @@ public class SignBlocker extends FreedomService
event.setCancelled(true);
}
}
}
}

View file

@ -2,24 +2,25 @@ package me.totalfreedom.totalfreedommod.blocking.command;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import java.lang.reflect.Field;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.pravian.aero.command.CommandReflection;
import org.apache.commons.lang.StringUtils;
import org.bukkit.ChatColor;
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandMap;
import org.bukkit.command.CommandSender;
import org.bukkit.command.SimpleCommandMap;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerCommandPreprocessEvent;
import org.bukkit.plugin.SimplePluginManager;
public class CommandBlocker extends FreedomService
{
@ -29,19 +30,32 @@ public class CommandBlocker extends FreedomService
private final Map<String, CommandBlockerEntry> entryList = Maps.newHashMap();
private final List<String> unknownCommands = Lists.newArrayList();
public CommandBlocker(TotalFreedomMod plugin)
public static CommandMap getCommandMap()
{
super(plugin);
try
{
SimplePluginManager simplePluginManager = (SimplePluginManager)Bukkit.getServer().getPluginManager();
Field commandMapField = SimplePluginManager.class.getDeclaredField("commandMap");
commandMapField.setAccessible(true);
return (SimpleCommandMap)commandMapField.get(simplePluginManager);
}
catch (NoSuchFieldException | IllegalArgumentException | IllegalAccessException e)
{
FLog.severe("Failed to get command map field (" + e.getMessage() + ")");
}
return null;
}
@Override
protected void onStart()
public void onStart()
{
load();
}
@Override
protected void onStop()
public void onStop()
{
entryList.clear();
}
@ -51,12 +65,7 @@ public class CommandBlocker extends FreedomService
entryList.clear();
unknownCommands.clear();
final CommandMap commandMap = CommandReflection.getCommandMap();
if (commandMap == null)
{
FLog.severe("Error loading commandMap.");
return;
}
final CommandMap commandMap = getCommandMap();
@SuppressWarnings("unchecked")
List<String> blockedCommands = (List<String>)ConfigEntry.BLOCKED_COMMANDS.getList();
@ -74,7 +83,7 @@ public class CommandBlocker extends FreedomService
String commandName = parts[2].toLowerCase().substring(1);
final String message = (parts.length > 3 ? parts[3] : null);
if (rank == null || action == null || commandName == null || commandName.isEmpty())
if (rank == null || action == null || commandName.isEmpty())
{
FLog.warning("Invalid command blocker entry: " + rawEntry);
continue;
@ -88,6 +97,7 @@ public class CommandBlocker extends FreedomService
subCommand = StringUtils.join(commandParts, " ", 1, commandParts.length).trim().toLowerCase();
}
assert commandMap != null;
final Command command = commandMap.getCommand(commandName);
// Obtain command from alias
@ -106,9 +116,9 @@ public class CommandBlocker extends FreedomService
continue;
}
final CommandBlockerEntry blockedCommandEntry = new CommandBlockerEntry(rank, action, commandName, subCommand, message);
entryList.put(blockedCommandEntry.getCommand(), blockedCommandEntry);
final CommandBlockerEntry blockedCommandEntry = new CommandBlockerEntry(rank, action, commandName, subCommand, message);
entryList.put(commandName, blockedCommandEntry);
if (command != null)
{
for (String alias : command.getAliases())
@ -130,12 +140,6 @@ public class CommandBlocker extends FreedomService
// CommandBlocker handles messages and broadcasts
event.setCancelled(true);
}
if (event.getMessage().contains("translation.test.invalid") || event.getMessage().contains("translation.test.invalid2"))
{
event.setCancelled(true);
FUtil.playerMsg(event.getPlayer(), ChatColor.RED + "No crishy crashy faggy");
}
}
public boolean isCommandBlocked(String command, CommandSender sender)

View file

@ -8,16 +8,11 @@ public enum CommandBlockerAction
BLOCK_UNKNOWN("u");
private final String token;
private CommandBlockerAction(String token)
CommandBlockerAction(String token)
{
this.token = token;
}
public String getToken()
{
return this.token;
}
public static CommandBlockerAction fromToken(String token)
{
for (CommandBlockerAction action : CommandBlockerAction.values())
@ -29,4 +24,9 @@ public enum CommandBlockerAction
}
return null;
}
}
public String getToken()
{
return this.token;
}
}

View file

@ -1,6 +1,5 @@
package me.totalfreedom.totalfreedommod.blocking.command;
import lombok.Getter;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.ChatColor;
@ -11,15 +10,15 @@ import org.spigotmc.SpigotConfig;
public class CommandBlockerEntry
{
@Getter
private final CommandBlockerRank rank;
@Getter
private final CommandBlockerAction action;
@Getter
private final String command;
@Getter
private final String subCommand;
@Getter
private final String message;
public CommandBlockerEntry(CommandBlockerRank rank, CommandBlockerAction action, String command, String message)
@ -40,7 +39,7 @@ public class CommandBlockerEntry
{
if (action == CommandBlockerAction.BLOCK_AND_EJECT && sender instanceof Player)
{
TotalFreedomMod.plugin().ae.autoEject((Player)sender, "You used a prohibited command: " + command);
TotalFreedomMod.getPlugin().ae.autoEject((Player)sender, "You used a prohibited command: " + command);
FUtil.bcastMsg(sender.getName() + " was automatically kicked for using harmful commands.", ChatColor.RED);
return;
}
@ -51,4 +50,29 @@ public class CommandBlockerEntry
}
FUtil.playerMsg(sender, FUtil.colorize(message));
}
public CommandBlockerRank getRank()
{
return rank;
}
public CommandBlockerAction getAction()
{
return action;
}
public String getCommand()
{
return command;
}
public String getSubCommand()
{
return subCommand;
}
public String getMessage()
{
return message;
}
}

View file

@ -4,50 +4,32 @@ import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.admin.Admin;
import me.totalfreedom.totalfreedommod.rank.Rank;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
public enum CommandBlockerRank
{
ANYONE("a"),
EVERYONE("e"),
OP("o"),
SUPER("s"),
TELNET("t"),
SENIOR("c"),
ADMIN("a"),
SENIOR_ADMIN("s"),
NOBODY("n");
//
private final String token;
private CommandBlockerRank(String token)
CommandBlockerRank(String token)
{
this.token = token;
}
public String getToken()
{
return this.token;
}
public boolean hasPermission(CommandSender sender)
{
return fromSender(sender).ordinal() >= ordinal();
}
public static CommandBlockerRank fromSender(CommandSender sender)
{
if (!(sender instanceof Player))
{
return TELNET;
}
Admin admin = TotalFreedomMod.plugin().al.getAdmin(sender);
Admin admin = TotalFreedomMod.getPlugin().al.getAdmin(sender);
if (admin != null)
{
if (admin.getRank() == Rank.SENIOR_ADMIN)
{
return SENIOR;
return SENIOR_ADMIN;
}
return SUPER;
return ADMIN;
}
if (sender.isOp())
@ -55,8 +37,7 @@ public enum CommandBlockerRank
return OP;
}
return ANYONE;
return EVERYONE;
}
public static CommandBlockerRank fromToken(String token)
@ -68,6 +49,16 @@ public enum CommandBlockerRank
return rank;
}
}
return ANYONE;
return EVERYONE;
}
}
public String getToken()
{
return this.token;
}
public boolean hasPermission(CommandSender sender)
{
return fromSender(sender).ordinal() >= ordinal();
}
}

View file

@ -1,7 +1,6 @@
package me.totalfreedom.totalfreedommod.bridge;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import me.totalfreedom.bukkittelnet.BukkitTelnet;
@ -10,7 +9,6 @@ import me.totalfreedom.bukkittelnet.api.TelnetPreLoginEvent;
import me.totalfreedom.bukkittelnet.api.TelnetRequestDataTagsEvent;
import me.totalfreedom.bukkittelnet.session.ClientSession;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.admin.Admin;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FLog;
@ -24,18 +22,13 @@ public class BukkitTelnetBridge extends FreedomService
private BukkitTelnet bukkitTelnetPlugin = null;
public BukkitTelnetBridge(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
public void onStart()
{
}
@Override
protected void onStop()
public void onStop()
{
}
@ -72,10 +65,8 @@ public class BukkitTelnetBridge extends FreedomService
@EventHandler(priority = EventPriority.NORMAL)
public void onTelnetRequestDataTags(TelnetRequestDataTagsEvent event)
{
final Iterator<Map.Entry<Player, Map<String, Object>>> it = event.getDataTags().entrySet().iterator();
while (it.hasNext())
for (Map.Entry<Player, Map<String, Object>> entry : event.getDataTags().entrySet())
{
final Map.Entry<Player, Map<String, Object>> entry = it.next();
final Player player = entry.getKey();
final Map<String, Object> playerTags = entry.getValue();
@ -90,7 +81,7 @@ public class BukkitTelnetBridge extends FreedomService
isAdmin = active;
isSeniorAdmin = active && admin.getRank() == Rank.SENIOR_ADMIN;
isTelnetAdmin = active && (isSeniorAdmin || admin.getRank() == Rank.TELNET_ADMIN);
isTelnetAdmin = active && (isSeniorAdmin || admin.getRank() == Rank.ADMIN);
}
playerTags.put("tfm.admin.isAdmin", isAdmin);
@ -154,10 +145,8 @@ public class BukkitTelnetBridge extends FreedomService
final BukkitTelnet telnet = getBukkitTelnetPlugin();
if (telnet != null)
{
final Iterator<ClientSession> it = telnet.appender.getSessions().iterator();
while (it.hasNext())
for (ClientSession session : telnet.appender.getSessions())
{
final ClientSession session = it.next();
if (name != null && name.equalsIgnoreCase(session.getUserName()))
{
sessionsToRemove.add(session);
@ -185,4 +174,4 @@ public class BukkitTelnetBridge extends FreedomService
FLog.severe("Error removing telnet sessions: " + ex.getMessage());
}
}
}
}

View file

@ -1,45 +1,85 @@
package me.totalfreedom.totalfreedommod.bridge;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.*;
import java.text.DecimalFormat;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.config.ConfigEntry;
import me.totalfreedom.totalfreedommod.player.PlayerData;
import me.totalfreedom.totalfreedommod.util.FLog;
import me.totalfreedom.totalfreedommod.util.FUtil;
import net.coreprotect.CoreProtect;
import net.coreprotect.CoreProtectAPI;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.World;
import org.bukkit.block.Block;
import org.bukkit.block.BlockState;
import org.bukkit.block.data.BlockData;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.plugin.Plugin;
import org.bukkit.scheduler.BukkitRunnable;
import org.bukkit.scheduler.BukkitTask;
public class CoreProtectBridge extends FreedomService
{
private CoreProtectAPI coreProtectAPI = null;
public static Map<Player, FUtil.PaginationList<String>> HISTORY_MAP = new HashMap<>();
private final List<String> tables = Arrays.asList("co_sign", "co_session", "co_container", "co_block");
private final HashMap<String, Long> cooldown = new HashMap<>();
private CoreProtectAPI coreProtectAPI = null;
private BukkitTask wiper;
public CoreProtectBridge(TotalFreedomMod plugin)
public static Long getSecondsLeft(long prevTime, int timeAdd)
{
super(plugin);
return prevTime / 1000L + timeAdd - System.currentTimeMillis() / 1000L;
}
// Unix timestamp converter taken from Functions class in CoreProtect, not my code
public static String getTimeAgo(int logTime, int currentTime)
{
StringBuilder message = new StringBuilder();
double timeSince = (double)currentTime - ((double)logTime + 0.0D);
timeSince /= 60.0D;
if (timeSince < 60.0D)
{
message.append((new DecimalFormat("0.00")).format(timeSince)).append("/m ago");
}
if (message.length() == 0)
{
timeSince /= 60.0D;
if (timeSince < 24.0D)
{
message.append((new DecimalFormat("0.00")).format(timeSince)).append("/h ago");
}
}
if (message.length() == 0)
{
timeSince /= 24.0D;
message.append((new DecimalFormat("0.00")).format(timeSince)).append("/d ago");
}
return message.toString();
}
@Override
protected void onStart()
public void onStart()
{
}
@Override
protected void onStop()
public void onStop()
{
}
@ -49,8 +89,8 @@ public class CoreProtectBridge extends FreedomService
try
{
final Plugin coreProtectPlugin = Bukkit.getServer().getPluginManager().getPlugin("CoreProtect");
if (coreProtectPlugin != null && coreProtectPlugin instanceof CoreProtect)
assert coreProtectPlugin != null;
if (coreProtectPlugin instanceof CoreProtect)
{
coreProtect = (CoreProtect)coreProtectPlugin;
}
@ -109,7 +149,7 @@ public class CoreProtectBridge extends FreedomService
@Override
public void run()
{
coreProtect.performRollback(86400, Arrays.asList(name), null, null, null, null, 0, null);
coreProtect.performRollback(86400, Collections.singletonList(name), null, null, null, null, 0, null);
}
}.runTaskAsynchronously(plugin);
}
@ -129,7 +169,7 @@ public class CoreProtectBridge extends FreedomService
@Override
public void run()
{
coreProtect.performRestore(86400, Arrays.asList(name), null, null, null, null, 0, null);
coreProtect.performRestore(86400, Collections.singletonList(name), null, null, null, null, 0, null);
}
}.runTaskAsynchronously(plugin);
}
@ -152,7 +192,6 @@ public class CoreProtectBridge extends FreedomService
return (megabytes / 1024);
}
// Wipes DB for the specified world
public void clearDatabase(World world)
{
clearDatabase(world, false);
@ -174,7 +213,7 @@ public class CoreProtectBridge extends FreedomService
/* As CoreProtect doesn't have an API method for deleting all of the data for a specific world
we have to do this manually via SQL */
Connection connection = null;
Connection connection;
try
{
String host = ConfigEntry.COREPROTECT_MYSQL_HOST.getString();
@ -184,11 +223,12 @@ public class CoreProtectBridge extends FreedomService
String database = ConfigEntry.COREPROTECT_MYSQL_DATABASE.getString();
String url = host + ":" + port + "/" + database + "?user=" + username + "&password=" + password + "&useSSL=false";
connection = DriverManager.getConnection("jdbc:sql://" + url);
final Statement statement = connection.createStatement();
final PreparedStatement statement = connection.prepareStatement("SELECT id FROM co_world WHERE world = ?");
statement.setQueryTimeout(30);
// Obtain world ID from CoreProtect database
ResultSet resultSet = statement.executeQuery("SELECT id FROM co_world WHERE world = '" + world.getName() + "'");
statement.setString(1, world.getName());
ResultSet resultSet = statement.executeQuery();
String worldID = null;
while (resultSet.next())
{
@ -206,7 +246,10 @@ public class CoreProtectBridge extends FreedomService
// Iterate through each table and delete their data if the world ID matches
for (String table : tables)
{
statement.executeQuery("DELETE FROM " + table + " WHERE wid = " + worldID);
final PreparedStatement statement1 = connection.prepareStatement("DELETE FROM ? WHERE wid = ?");
statement1.setString(1, table);
statement1.setString(2, worldID);
statement1.executeQuery();
}
connection.close();
@ -216,11 +259,180 @@ public class CoreProtectBridge extends FreedomService
{
FLog.warning("Failed to delete the CoreProtect data for the " + world.getName());
}
}
// This exits for flatlands wipes
if (shutdown)
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerInteract(PlayerInteractEvent event)
{
Player player = event.getPlayer();
PlayerData data = plugin.pl.getData(player);
Block block = event.getClickedBlock();
final CoreProtectAPI coreProtect = getCoreProtectAPI();
// TODO: Rewrite this
if (data.hasInspection())
{
server.shutdown();
int cooldownTime = 3;
// Cooldown check
if ((event.getAction() == Action.LEFT_CLICK_BLOCK || event.getAction() == Action.RIGHT_CLICK_BLOCK)
&& cooldown.containsKey(player.getName()))
{
long secondsLeft = getSecondsLeft(cooldown.get(player.getName()), cooldownTime);
if (secondsLeft > 0L)
{
event.setCancelled(true);
player.sendMessage(ChatColor.RED + String.valueOf(secondsLeft) + " seconds left before next query.");
return;
}
}
// Actual lookup time
if (event.getAction() == Action.LEFT_CLICK_BLOCK)
{
if (block != null)
{
event.setCancelled(true);
List<String[]> lookup = coreProtect.blockLookup(block, -1);
if (!plugin.al.isAdmin(player))
{
cooldown.put(player.getName(), System.currentTimeMillis());
}
if (lookup != null)
{
if (lookup.isEmpty())
{
player.sendMessage(net.md_5.bungee.api.ChatColor.of("#30ade4") + "Block Inspector " + ChatColor.WHITE + "- " + "No block data found for this location");
return;
}
HISTORY_MAP.remove(event.getPlayer());
HISTORY_MAP.put(event.getPlayer(), new FUtil.PaginationList<>(10));
FUtil.PaginationList<String> paged = HISTORY_MAP.get(event.getPlayer());
player.sendMessage("---- " + net.md_5.bungee.api.ChatColor.of("#30ade4") + "Block Inspector" + ChatColor.WHITE + " ---- " +
ChatColor.GRAY + "(x" + block.getX() + "/" + "y" + block.getY() + "/" + "z" + block.getZ() + ")");
for (String[] value : lookup)
{
CoreProtectAPI.ParseResult result = coreProtect.parseResult(value);
BlockData bl = result.getBlockData();
String s;
String st = "";
if (result.getActionString().equals("Placement"))
{
s = " placed ";
}
else if (result.getActionString().equals("Removal"))
{
s = " broke ";
}
else
{
s = " interacted with ";
}
if (result.isRolledBack())
{
st += "§m";
}
int time = (int)(System.currentTimeMillis() / 1000L);
paged.add(ChatColor.GRAY + getTimeAgo(result.getTime(), time) + ChatColor.WHITE + " - " + net.md_5.bungee.api.ChatColor.of("#30ade4") +
st + result.getPlayer() + ChatColor.WHITE + st + s + net.md_5.bungee.api.ChatColor.of("#30ade4") + st + bl.getMaterial().toString().toLowerCase());
}
List<String> page = paged.getPage(1);
for (String entries : page)
{
player.sendMessage(entries);
}
player.sendMessage("Page 1/" + paged.getPageCount() + " | To index through the pages, type " + net.md_5.bungee.api.ChatColor.of("#30ade4") + "/ins history <page>");
}
}
}
else if (event.getAction() == Action.RIGHT_CLICK_BLOCK)
{
if (block != null)
{
BlockState blockState = block.getRelative(event.getBlockFace()).getState();
Block placedBlock = blockState.getBlock();
event.setCancelled(true);
List<String[]> lookup = coreProtect.blockLookup(placedBlock, -1);
if (lookup.isEmpty())
{
lookup = coreProtect.blockLookup(block, -1);
}
if (!plugin.al.isAdmin(player))
{
cooldown.put(player.getName(), System.currentTimeMillis());
}
if (lookup != null)
{
if (lookup.isEmpty())
{
player.sendMessage(net.md_5.bungee.api.ChatColor.of("#30ade4") + "Block Inspector " + ChatColor.WHITE + "- " + "No block data found for this location");
return;
}
HISTORY_MAP.remove(event.getPlayer());
HISTORY_MAP.put(event.getPlayer(), new FUtil.PaginationList<>(10));
FUtil.PaginationList<String> paged = HISTORY_MAP.get(event.getPlayer());
player.sendMessage("---- " + net.md_5.bungee.api.ChatColor.of("#30ade4") + "Block Inspector" + ChatColor.WHITE + " ---- " +
ChatColor.GRAY + "(x" + block.getX() + "/" + "y" + block.getY() + "/" + "z" + block.getZ() + ")");
for (String[] value : lookup)
{
CoreProtectAPI.ParseResult result = coreProtect.parseResult(value);
BlockData bl = result.getBlockData();
String s;
String st = "";
if (result.getActionString().equals("Placement"))
{
s = " placed ";
}
else if (result.getActionString().equals("Removal"))
{
s = " broke ";
}
else
{
s = " interacted with ";
}
if (result.isRolledBack())
{
st += "§m";
}
int time = (int)(System.currentTimeMillis() / 1000L);
paged.add(ChatColor.GRAY + getTimeAgo(result.getTime(), time) + ChatColor.WHITE + " - " + net.md_5.bungee.api.ChatColor.of("#30ade4") +
st + result.getPlayer() + ChatColor.WHITE + st + s + net.md_5.bungee.api.ChatColor.of("#30ade4") + st + bl.getMaterial().toString().toLowerCase());
}
List<String> page = paged.getPage(1);
for (String entries : page)
{
player.sendMessage(entries);
}
player.sendMessage("Page 1/" + paged.getPageCount() + " | To index through the pages, type " + net.md_5.bungee.api.ChatColor.of("#30ade4") + "/ins history <page>");
}
}
}
}
}
}

View file

@ -3,7 +3,6 @@ package me.totalfreedom.totalfreedommod.bridge;
import com.earth2me.essentials.Essentials;
import com.earth2me.essentials.User;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FLog;
@ -26,18 +25,13 @@ public class EssentialsBridge extends FreedomService
private Essentials essentialsPlugin = null;
public EssentialsBridge(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
public void onStart()
{
}
@Override
protected void onStop()
public void onStop()
{
}
@ -48,7 +42,8 @@ public class EssentialsBridge extends FreedomService
try
{
final Plugin essentials = server.getPluginManager().getPlugin("Essentials");
if (essentials != null && essentials instanceof Essentials)
assert essentials != null;
if (essentials instanceof Essentials)
{
essentialsPlugin = (Essentials)essentials;
}
@ -119,7 +114,8 @@ public class EssentialsBridge extends FreedomService
User user = getEssentialsUser(username);
if (user != null)
{
return FUtil.getField(user, "lastActivity");
Long l = FUtil.getField(user, "lastActivity");
return (l != null) ? l : 0L;
}
}
catch (Exception ex)
@ -156,7 +152,7 @@ public class EssentialsBridge extends FreedomService
if (inventoryType == InventoryType.PLAYER && fPlayer.isInvSee())
{
final InventoryHolder inventoryHolder = inventory.getHolder();
if (inventoryHolder != null && inventoryHolder instanceof HumanEntity)
if (inventoryHolder instanceof HumanEntity)
{
Player invOwner = (Player)inventoryHolder;
Rank recieverRank = plugin.rm.getRank(player);
@ -209,6 +205,7 @@ public class EssentialsBridge extends FreedomService
}
}
// TODO: Actually use this for something or remove it.
@EventHandler(priority = EventPriority.MONITOR)
public void onPlayerQuit(PlayerQuitEvent event)
{
@ -221,4 +218,4 @@ public class EssentialsBridge extends FreedomService
return ess != null && ess.isEnabled();
}
}
}

View file

@ -1,31 +1,24 @@
package me.totalfreedom.totalfreedommod.bridge;
import me.libraryaddict.disguise.BlockedDisguises;
import me.libraryaddict.disguise.DisguiseAPI;
import me.libraryaddict.disguise.LibsDisguises;
import me.totalfreedom.libsdisguises.BlockedDisguises;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.util.FLog;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
public class LibsDisguisesBridge extends FreedomService
{
private LibsDisguises libsDisguisesPlugin = null;
public LibsDisguisesBridge(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
public void onStart()
{
}
@Override
protected void onStop()
public void onStop()
{
}
@ -53,24 +46,7 @@ public class LibsDisguisesBridge extends FreedomService
return libsDisguisesPlugin;
}
public Boolean isDisguised(Player player)
{
try
{
final LibsDisguises libsDisguises = getLibsDisguisesPlugin();
if (libsDisguises != null)
{
return DisguiseAPI.isDisguised(player);
}
}
catch (Exception ex)
{
FLog.severe(ex);
}
return null;
}
public void undisguiseAll(boolean admins)
public void undisguiseAll(boolean admin)
{
try
{
@ -85,7 +61,7 @@ public class LibsDisguisesBridge extends FreedomService
{
if (DisguiseAPI.isDisguised(player))
{
if (!admins && plugin.al.isAdmin(player))
if (!admin && plugin.al.isAdmin(player))
{
continue;
}
@ -99,6 +75,11 @@ public class LibsDisguisesBridge extends FreedomService
}
}
public boolean isDisguisesEnabled()
{
return !BlockedDisguises.disabled;
}
public void setDisguisesEnabled(boolean state)
{
final LibsDisguises libsDisguises = getLibsDisguisesPlugin();
@ -111,15 +92,10 @@ public class LibsDisguisesBridge extends FreedomService
BlockedDisguises.disabled = !state;
}
public boolean isDisguisesEnabled()
{
return !BlockedDisguises.disabled;
}
public boolean isEnabled()
{
final LibsDisguises libsDisguises = getLibsDisguisesPlugin();
return libsDisguises != null && libsDisguises.isEnabled();
return libsDisguises != null;
}
}

View file

@ -0,0 +1,58 @@
package me.totalfreedom.totalfreedommod.bridge;
import me.totalfreedom.tfguilds.Common;
import me.totalfreedom.tfguilds.TFGuilds;
import me.totalfreedom.totalfreedommod.FreedomService;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
public class TFGuildsBridge extends FreedomService
{
public boolean enabled = false;
@Override
public void onStart()
{
}
@Override
public void onStop()
{
}
public boolean isTFGuildsEnabled()
{
if (enabled)
{
return true;
}
try
{
final Plugin tfGuilds = server.getPluginManager().getPlugin("TFGuilds");
if (tfGuilds != null && tfGuilds.isEnabled())
{
if (tfGuilds instanceof TFGuilds)
{
enabled = true;
return true;
}
}
}
catch (NoClassDefFoundError ex)
{
return false;
}
return false;
}
public boolean inGuildChat(Player player)
{
if (!isTFGuildsEnabled())
{
return false;
}
return Common.GUILD_CHAT.contains(player);
}
}

View file

@ -4,7 +4,6 @@ import com.sk89q.worldedit.LocalSession;
import com.sk89q.worldedit.bukkit.BukkitPlayer;
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.util.FLog;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
@ -15,18 +14,13 @@ public class WorldEditBridge extends FreedomService
//
private WorldEditPlugin worldeditPlugin = null;
public WorldEditBridge(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
public void onStart()
{
}
@Override
protected void onStop()
public void onStop()
{
}
@ -66,8 +60,7 @@ public class WorldEditBridge extends FreedomService
{
for (int i = 0; i < count; i++)
{
com.sk89q.worldedit.entity.Player fuckyou = (com.sk89q.worldedit.entity.Player)bukkitPlayer;
session.undo(session.getBlockBag(fuckyou), fuckyou);
session.undo(session.getBlockBag(bukkitPlayer), bukkitPlayer);
}
}
}
@ -90,8 +83,7 @@ public class WorldEditBridge extends FreedomService
{
for (int i = 0; i < count; i++)
{
com.sk89q.worldedit.entity.Player fuckyou = (com.sk89q.worldedit.entity.Player)bukkitPlayer;
session.redo(session.getBlockBag(fuckyou), fuckyou);
session.redo(session.getBlockBag(bukkitPlayer), bukkitPlayer);
}
}
}

View file

@ -1,36 +1,45 @@
package me.totalfreedom.totalfreedommod.bridge;
import com.sk89q.worldedit.bukkit.BukkitAdapter;
import com.sk89q.worldedit.util.Location;
import com.sk89q.worldguard.LocalPlayer;
import com.sk89q.worldguard.WorldGuard;
import com.sk89q.worldguard.bukkit.WorldGuardPlugin;
import com.sk89q.worldguard.protection.flags.Flags;
import com.sk89q.worldguard.protection.managers.RegionManager;
import com.sk89q.worldguard.protection.regions.ProtectedRegion;
import com.sk89q.worldguard.protection.regions.RegionContainer;
import java.util.Map;
import com.sk89q.worldguard.protection.regions.RegionQuery;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
public class WorldGuardBridge extends FreedomService
{
public WorldGuardBridge(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
public void onStart()
{
plugin.wr.protectWorld(plugin.wm.hubworld.getWorld());
plugin.wr.protectWorld(plugin.wm.masterBuilderWorld.getWorld());
}
@Override
protected void onStop()
public void onStop()
{
}
public boolean canEditCurrentWorld(Player player)
{
LocalPlayer localPlayer = WorldGuardPlugin.inst().wrapPlayer(player);
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();
RegionQuery query = container.createQuery();
return query.testBuild(localPlayer.getLocation(), localPlayer);
}
public RegionManager getRegionManager(World world)
{
RegionContainer container = WorldGuard.getInstance().getPlatform().getRegionContainer();

View file

@ -2,8 +2,8 @@ package me.totalfreedom.totalfreedommod.caging;
import java.util.ArrayList;
import java.util.List;
import lombok.Getter;
import me.totalfreedom.totalfreedommod.player.FPlayer;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.block.Block;
@ -12,141 +12,21 @@ import org.bukkit.block.Skull;
public class CageData
{
private static String input = null;
private final FPlayer fPlayer;
//
private final List<BlockData> cageHistory = new ArrayList<>();
//
@Getter
private final List<BlockData> cageHistory = new ArrayList<>();
private boolean caged = false;
@Getter
private Location location;
@Getter
private Material outerMaterial = Material.GLASS;
@Getter
private Material innerMaterial = Material.AIR;
@Getter
private static String input = null;
public CageData(FPlayer player)
{
this.fPlayer = player;
}
public void setCaged(boolean cage)
{
if (cage)
{
cage(fPlayer.getPlayer().getLocation(), Material.GLASS, Material.GLASS);
}
else
{
this.caged = false;
regenerateHistory();
clearHistory();
}
}
public void cage(Location location, Material outer, Material inner)
{
if (isCaged())
{
setCaged(false);
}
this.caged = true;
this.location = location;
this.outerMaterial = outer;
this.innerMaterial = inner;
this.input = null;
buildHistory(location, 2, fPlayer);
regenerate();
}
public void cage(Location location, Material outer, Material inner, String input)
{
if (isCaged())
{
setCaged(false);
}
this.caged = true;
this.location = location;
this.outerMaterial = outer;
this.innerMaterial = inner;
this.input = input;
buildHistory(location, 2, fPlayer);
regenerate();
}
public void regenerate()
{
if (!caged
|| location == null
|| outerMaterial == null
|| innerMaterial == null)
{
return;
}
generateHollowCube(location, 2, outerMaterial);
generateCube(location, 1, innerMaterial);
}
// TODO: EventHandlerize this?
public void playerJoin()
{
if (!isCaged())
{
return;
}
cage(fPlayer.getPlayer().getLocation(), outerMaterial, innerMaterial, input);
}
public void playerQuit()
{
regenerateHistory();
clearHistory();
}
public void clearHistory()
{
cageHistory.clear();
}
private void insertHistoryBlock(Location location, Material material)
{
cageHistory.add(new BlockData(location, material));
}
private void regenerateHistory()
{
for (BlockData blockdata : this.cageHistory)
{
blockdata.location.getBlock().setType(blockdata.material);
}
}
private void buildHistory(Location location, int length, FPlayer playerdata)
{
final Block center = location.getBlock();
for (int xOffset = -length; xOffset <= length; xOffset++)
{
for (int yOffset = -length; yOffset <= length; yOffset++)
{
for (int zOffset = -length; zOffset <= length; zOffset++)
{
final Block block = center.getRelative(xOffset, yOffset, zOffset);
insertHistoryBlock(block.getLocation(), block.getType());
}
}
}
}
// Util methods
public static void generateCube(Location location, int length, Material material)
{
@ -167,6 +47,7 @@ public class CageData
}
}
@SuppressWarnings("deprecation")
public static void generateHollowCube(Location location, int length, Material material)
{
final Block center = location.getBlock();
@ -209,11 +90,10 @@ public class CageData
try
{
Skull skull = (Skull)block.getState();
// This may or may not work in future versions of spigot
skull.setOwner(input);
skull.setOwningPlayer(Bukkit.getOfflinePlayer(input));
skull.update();
}
catch (ClassCastException e)
catch (ClassCastException ignored)
{
}
}
@ -223,6 +103,176 @@ public class CageData
}
}
public static String getInput()
{
return input;
}
public static void setInput(String input)
{
CageData.input = input;
}
public void cage(Location location, Material outer, Material inner)
{
if (isCaged())
{
setCaged(false);
}
this.caged = true;
this.location = location;
this.outerMaterial = outer;
this.innerMaterial = inner;
input = null;
buildHistory(location);
regenerate();
}
public void cage(Location location, Material outer, Material inner, String input)
{
if (isCaged())
{
setCaged(false);
}
this.caged = true;
this.location = location;
this.outerMaterial = outer;
this.innerMaterial = inner;
CageData.input = input;
buildHistory(location);
regenerate();
}
public void regenerate()
{
if (!caged
|| location == null
|| outerMaterial == null
|| innerMaterial == null)
{
return;
}
generateHollowCube(location, 2, outerMaterial);
generateCube(location, 1, innerMaterial);
}
// TODO: EventHandler this?
public void playerJoin()
{
if (!isCaged())
{
return;
}
cage(fPlayer.getPlayer().getLocation(), outerMaterial, innerMaterial, input);
}
public void playerQuit()
{
regenerateHistory();
clearHistory();
}
public void clearHistory()
{
cageHistory.clear();
}
private void insertHistoryBlock(Location location, Material material)
{
cageHistory.add(new BlockData(location, material));
}
private void regenerateHistory()
{
for (BlockData blockdata : this.cageHistory)
{
blockdata.location.getBlock().setType(blockdata.material);
}
}
private void buildHistory(Location location)
{
final Block center = location.getBlock();
for (int xOffset = -2; xOffset <= 2; xOffset++)
{
for (int yOffset = -2; yOffset <= 2; yOffset++)
{
for (int zOffset = -2; zOffset <= 2; zOffset++)
{
final Block block = center.getRelative(xOffset, yOffset, zOffset);
insertHistoryBlock(block.getLocation(), block.getType());
}
}
}
}
public FPlayer getfPlayer()
{
return fPlayer;
}
public List<BlockData> getCageHistory()
{
return cageHistory;
}
public boolean isCaged()
{
return caged;
}
public void setCaged(boolean cage)
{
if (cage)
{
cage(fPlayer.getPlayer().getLocation(), Material.GLASS, Material.GLASS);
}
else
{
this.caged = false;
regenerateHistory();
clearHistory();
}
}
public Location getLocation()
{
return location;
}
public void setLocation(Location location)
{
this.location = location;
}
public Material getOuterMaterial()
{
return outerMaterial;
}
public void setOuterMaterial(Material outerMaterial)
{
this.outerMaterial = outerMaterial;
}
public Material getInnerMaterial()
{
return innerMaterial;
}
public void setInnerMaterial(Material innerMaterial)
{
this.innerMaterial = innerMaterial;
}
private static class BlockData
{

View file

@ -1,7 +1,8 @@
package me.totalfreedom.totalfreedommod.caging;
import io.papermc.lib.PaperLib;
import java.util.Objects;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.player.FPlayer;
import me.totalfreedom.totalfreedommod.util.FUtil;
import org.bukkit.ChatColor;
@ -17,19 +18,13 @@ import org.bukkit.event.player.PlayerQuitEvent;
public class Cager extends FreedomService
{
public Cager(TotalFreedomMod plugin)
{
super(plugin);
}
@Override
protected void onStart()
public void onStart()
{
}
@Override
protected void onStop()
public void onStop()
{
}
@ -37,8 +32,7 @@ public class Cager extends FreedomService
public void onBreakBlock(BlockBreakEvent event)
{
Player player = event.getPlayer();
if (player == null
|| plugin.al.isAdmin(player))
if (plugin.al.isAdmin(player))
{
return;
}
@ -67,7 +61,7 @@ public class Cager extends FreedomService
Location cageLoc = cage.getLocation();
final boolean outOfCage;
if (!playerLoc.getWorld().equals(cageLoc.getWorld()))
if (!Objects.equals(playerLoc.getWorld(), cageLoc.getWorld()))
{
outOfCage = true;
}
@ -78,7 +72,7 @@ public class Cager extends FreedomService
if (outOfCage)
{
player.getPlayer().teleport(cageLoc.subtract(0, 0.1, 0));
PaperLib.teleportAsync(player.getPlayer(), cageLoc.subtract(0, 0.1, 0));
FUtil.playerMsg(player.getPlayer(), "You may not leave your cage.", ChatColor.RED);
cage.regenerate();
}
@ -119,5 +113,4 @@ public class Cager extends FreedomService
cage.playerJoin();
}
}
}
}

View file

@ -1,45 +1,85 @@
package me.totalfreedom.totalfreedommod.command;
import lombok.Getter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import me.totalfreedom.totalfreedommod.FreedomService;
import me.totalfreedom.totalfreedommod.TotalFreedomMod;
import me.totalfreedom.totalfreedommod.util.FLog;
import net.pravian.aero.command.handler.SimpleCommandHandler;
import org.bukkit.ChatColor;
import org.reflections.Reflections;
public class CommandLoader extends FreedomService
{
private final List<FreedomCommand> commands;
@Getter
private final SimpleCommandHandler<TotalFreedomMod> handler;
public CommandLoader(TotalFreedomMod plugin)
public CommandLoader()
{
super(plugin);
handler = new SimpleCommandHandler<>(plugin);
commands = new ArrayList<>();
}
@Override
protected void onStart()
public void onStart()
{
handler.clearCommands();
handler.setExecutorFactory(new FreedomCommandExecutor.FreedomExecutorFactory(plugin));
handler.setCommandClassPrefix("Command_");
handler.setPermissionMessage(ChatColor.RED + "You do not have permission to use this command.");
handler.setOnlyConsoleMessage(ChatColor.RED + "This command can only be used from the console.");
handler.setOnlyPlayerMessage(ChatColor.RED + "This command can only be used by players.");
handler.loadFrom(FreedomCommand.class.getPackage());
handler.registerAll(plugin.getDescription().getName(), true);
FLog.info("Loaded " + handler.getExecutors().size() + " commands.");
}
@Override
protected void onStop()
public void onStop()
{
handler.clearCommands();
}
public void add(FreedomCommand command)
{
commands.add(command);
command.register();
}
public FreedomCommand getByName(String name)
{
for (FreedomCommand command : commands)
{
if (name.equals(command.getName()))
{
return command;
}
}
return null;
}
public boolean isAlias(String alias)
{
for (FreedomCommand command : commands)
{
if (Arrays.asList(command.getAliases().split(",")).contains(alias))
{
return true;
}
}
return false;
}
public void loadCommands()
{
Reflections commandDir = new Reflections("me.totalfreedom.totalfreedommod.command");
Set<Class<? extends FreedomCommand>> commandClasses = commandDir.getSubTypesOf(FreedomCommand.class);
for (Class<? extends FreedomCommand> commandClass : commandClasses)
{
try
{
add(commandClass.newInstance());
}
catch (InstantiationException | IllegalAccessException | ExceptionInInitializerError ex)
{
FLog.warning("Failed to register command: /" + commandClass.getSimpleName().replace("Command_", ""));
}
}
FLog.info("Loaded " + commands.size() + " commands");
}
public List<FreedomCommand> getCommands()
{
return commands;
}
}

View file

@ -8,9 +8,9 @@ import me.totalfreedom.totalfreedommod.rank.Rank;
public @interface CommandPermissions
{
Rank level();
Rank level() default Rank.NON_OP;
SourceType source();
SourceType source() default SourceType.BOTH;
boolean blockHostConsole() default false;

View file

@ -7,11 +7,8 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(level = Rank.SUPER_ADMIN, source = SourceType.BOTH)
@CommandParameters(
description = "Talk privately with other administrators on the server.",
usage = "/<command> [message...]",
aliases = "o,ac")
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH)
@CommandParameters(description = "Talk privately with other admins on the server.", usage = "/<command> [message]", aliases = "o,sc,ac,staffchat")
public class Command_adminchat extends FreedomCommand
{
@ -28,13 +25,12 @@ public class Command_adminchat extends FreedomCommand
FPlayer userinfo = plugin.pl.getPlayer(playerSender);
userinfo.setAdminChat(!userinfo.inAdminChat());
msg("Toggled your admin chat " + (userinfo.inAdminChat() ? "on" : "off") + ".");
msg("Admin chat turned " + (userinfo.inAdminChat() ? "on" : "off") + ".");
}
else
{
plugin.cm.adminChat(sender, StringUtils.join(args, " "));
}
return true;
}
}
}

View file

@ -11,7 +11,7 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(level = Rank.OP, source = SourceType.BOTH)
@CommandParameters(description = "Information on how to apply for admin.", usage = "/<command>", aliases = "ai")
@CommandParameters(description = "Information on how to apply for admin.", usage = "/<command>", aliases = "si,ai,staffinfo")
public class Command_admininfo extends FreedomCommand
{
@ -28,7 +28,6 @@ public class Command_admininfo extends FreedomCommand
{
msg(FUtil.colorize(StringUtils.join(adminInfo, "\n")));
}
return true;
}
}
}

View file

@ -10,8 +10,8 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(level = Rank.TELNET_ADMIN, source = SourceType.BOTH)
@CommandParameters(description = "Denies joining of operators and only allows admins to join.", usage = "/<command> [on | off]")
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH)
@CommandParameters(description = "Denies joining of operators and only allows admins to join.", usage = "/<command> [on | off]", aliases = "staffmode")
public class Command_adminmode extends FreedomCommand
{
@ -26,13 +26,13 @@ public class Command_adminmode extends FreedomCommand
if (args[0].equalsIgnoreCase("off"))
{
ConfigEntry.ADMIN_ONLY_MODE.setBoolean(false);
FUtil.adminAction(sender.getName(), "Opening the server to all players.", true);
FUtil.adminAction(sender.getName(), "Opening the server to all players", true);
return true;
}
else if (args[0].equalsIgnoreCase("on"))
{
ConfigEntry.ADMIN_ONLY_MODE.setBoolean(true);
FUtil.adminAction(sender.getName(), "Closing the server to non-admins.", true);
FUtil.adminAction(sender.getName(), "Closing the server to non-admins", true);
for (Player player : server.getOnlinePlayers())
{
if (!isAdmin(player))
@ -56,4 +56,4 @@ public class Command_adminmode extends FreedomCommand
return Collections.emptyList();
}
}
}

View file

@ -1,11 +1,10 @@
package me.totalfreedom.totalfreedommod.command;
import java.util.ArrayList;
import io.papermc.lib.PaperLib;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import me.totalfreedom.totalfreedommod.rank.Rank;
import me.totalfreedom.totalfreedommod.util.FUtil;
import me.totalfreedom.totalfreedommod.world.WorldTime;
import me.totalfreedom.totalfreedommod.world.WorldWeather;
import org.bukkit.World;
@ -14,17 +13,12 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(level = Rank.OP, source = SourceType.BOTH)
@CommandParameters(description = "Allows for admins to configure guests, time, and weather of the AdminWorld, and allows for admins and guests to go to the AdminWorld.",
usage = "/<command> [guest < list | purge | add <player> | remove <player> > | time <morning | noon | evening | night> | weather <off | rain | storm>]",
aliases = "aw")
@CommandParameters(description = "Allows for admins to configure time, and weather of the AdminWorld, and allows for admins and ops to go to the AdminWorld.",
usage = "/<command> [time <morning | noon | evening | night> | weather <off | rain | storm>]",
aliases = "sw,aw,staffworld")
public class Command_adminworld extends FreedomCommand
{
private enum CommandMode
{
TELEPORT, GUEST, TIME, WEATHER
}
@Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
@ -36,11 +30,7 @@ public class Command_adminworld extends FreedomCommand
}
else if (args.length >= 2)
{
if ("guest".equalsIgnoreCase(args[0]))
{
commandMode = CommandMode.GUEST;
}
else if ("time".equalsIgnoreCase(args[0]))
if ("time".equalsIgnoreCase(args[0]))
{
commandMode = CommandMode.TIME;
}
@ -63,7 +53,7 @@ public class Command_adminworld extends FreedomCommand
{
if (!(sender instanceof Player) || playerSender == null)
{
return true;
return false;
}
World adminWorld = null;
@ -71,90 +61,20 @@ public class Command_adminworld extends FreedomCommand
{
adminWorld = plugin.wm.adminworld.getWorld();
}
catch (Exception ex)
catch (Exception ignored)
{
}
if (adminWorld == null || playerSender.getWorld() == adminWorld)
{
msg("Going to the main world.");
playerSender.teleport(server.getWorlds().get(0).getSpawnLocation());
PaperLib.teleportAsync(playerSender, server.getWorlds().get(0).getSpawnLocation());
}
else
{
if (plugin.wm.adminworld.canAccessWorld(playerSender))
{
msg("Going to the AdminWorld.");
plugin.wm.adminworld.sendToWorld(playerSender);
}
else
{
msg("You don't have permission to access the AdminWorld.");
}
msg("Going to the AdminWorld.");
plugin.wm.adminworld.sendToWorld(playerSender);
}
break;
}
case GUEST:
{
if (args.length == 2)
{
if ("list".equalsIgnoreCase(args[1]))
{
msg("AdminWorld guest list: " + plugin.wm.adminworld.guestListToString());
}
else if ("purge".equalsIgnoreCase(args[1]))
{
assertCommandPerms(sender, playerSender);
plugin.wm.adminworld.purgeGuestList();
FUtil.adminAction(sender.getName(), "AdminWorld guest list purged.", false);
}
else
{
return false;
}
}
else if (args.length == 3)
{
assertCommandPerms(sender, playerSender);
if ("add".equalsIgnoreCase(args[1]))
{
final Player player = getPlayer(args[2]);
if (player == null)
{
sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND);
return true;
}
if (plugin.wm.adminworld.addGuest(player, playerSender))
{
FUtil.adminAction(sender.getName(), "AdminWorld guest added: " + player.getName(), false);
}
else
{
msg("Could not add player to guest list.");
}
}
else if ("remove".equals(args[1]))
{
final Player player = plugin.wm.adminworld.removeGuest(args[2]);
if (player != null)
{
FUtil.adminAction(sender.getName(), "AdminWorld guest removed: " + player.getName(), false);
}
else
{
msg("Can't find guest entry for: " + args[2]);
}
}
else
{
return false;
}
}
break;
}
case TIME:
@ -217,7 +137,7 @@ public class Command_adminworld extends FreedomCommand
{
return noPerms();
}
sender.sendMessage(ex.getMessage());
msg(ex.getMessage());
return true;
}
@ -233,7 +153,37 @@ public class Command_adminworld extends FreedomCommand
}
}
private class PermissionDeniedException extends Exception
@Override
public List<String> getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args)
{
if (!plugin.al.isAdmin(sender))
{
return Collections.emptyList();
}
if (args.length == 1)
{
return Arrays.asList("time", "weather");
}
else if (args.length == 2)
{
if (args[0].equals("time"))
{
return Arrays.asList("morning", "noon", "evening", "night");
}
else if (args[0].equals("weather"))
{
return Arrays.asList("off", "rain", "storm");
}
}
return Collections.emptyList();
}
private enum CommandMode
{
TELEPORT, TIME, WEATHER
}
private static class PermissionDeniedException extends Exception
{
private static final long serialVersionUID = 1L;
@ -248,48 +198,4 @@ public class Command_adminworld extends FreedomCommand
super(string);
}
}
@Override
public List<String> getTabCompleteOptions(CommandSender sender, Command command, String alias, String[] args)
{
if (!plugin.al.isAdmin(sender))
{
return Collections.emptyList();
}
if (args.length == 1)
{
return Arrays.asList("guest", "time", "weather");
}
else if (args.length == 2)
{
if (args[0].equals("guest"))
{
return Arrays.asList("add", "remove", "list", "purge");
}
else if (args[0].equals("time"))
{
return Arrays.asList("morning", "noon", "evening", "night");
}
else if (args[0].equals("weather"))
{
return Arrays.asList("off", "rain", "storm");
}
}
else if (args.length == 3)
{
if (args[0].equals("guest"))
{
if (args[1].equals("add"))
{
return FUtil.getPlayerList();
}
else if (args[1].equals("remove"))
{
return plugin.wm.adminworld.getGuestList();
}
}
}
return Collections.emptyList();
}
}
}

View file

@ -19,7 +19,7 @@ public class Command_adventure extends FreedomCommand
{
if (isConsole())
{
sender.sendMessage("When used from the console, you must define a target player.");
msg("When used from the console, you must define a target player.");
return true;
}
@ -28,7 +28,7 @@ public class Command_adventure extends FreedomCommand
return true;
}
checkRank(Rank.SUPER_ADMIN);
checkRank(Rank.ADMIN);
if (args[0].equals("-a"))
{
@ -46,7 +46,7 @@ public class Command_adventure extends FreedomCommand
if (player == null)
{
sender.sendMessage(FreedomCommand.PLAYER_NOT_FOUND);
msg(PLAYER_NOT_FOUND);
return true;
}
@ -55,4 +55,4 @@ public class Command_adventure extends FreedomCommand
player.setGameMode(GameMode.ADVENTURE);
return true;
}
}
}

View file

@ -9,7 +9,7 @@ import org.bukkit.entity.AreaEffectCloud;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;
@CommandPermissions(level = Rank.SUPER_ADMIN, source = SourceType.BOTH)
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH)
@CommandParameters(description = "Clears lingering potion area effect clouds.", usage = "/<command>", aliases = "aec")
public class Command_aeclear extends FreedomCommand
{
@ -17,7 +17,7 @@ public class Command_aeclear extends FreedomCommand
@Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
FUtil.adminAction(sender.getName(), "Removing all area effect clouds.", true);
FUtil.adminAction(sender.getName(), "Removing all area effect clouds", true);
int removed = 0;
for (World world : server.getWorlds())
{
@ -33,4 +33,4 @@ public class Command_aeclear extends FreedomCommand
msg(removed + " area effect clouds removed.");
return true;
}
}
}

View file

@ -6,13 +6,13 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@CommandPermissions(level = Rank.SUPER_ADMIN, source = SourceType.BOTH)
@CommandPermissions(level = Rank.ADMIN, source = SourceType.BOTH)
@CommandParameters(description = "Make an announcement anonymously to operators.", usage = "/<command> <message>")
public class Command_announce extends FreedomCommand
{
@Override
protected boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
if (args.length < 1)
{
@ -22,5 +22,4 @@ public class Command_announce extends FreedomCommand
plugin.an.announce(StringUtils.join(args, " "));
return true;
}
}
}

View file

@ -14,17 +14,17 @@ public class Command_attributelist extends FreedomCommand
@Override
public boolean run(CommandSender sender, Player playerSender, Command cmd, String commandLabel, String[] args, boolean senderIsConsole)
{
String list = "All possible attributes: ";
StringBuilder list = new StringBuilder("All possible attributes: ");
for (Attribute attribute : Attribute.values())
{
list += attribute.name() + ", ";
list.append(attribute.name()).append(", ");
}
// Remove extra comma at the end of the list
list = list.substring(0, list.length() - 2);
list = new StringBuilder(list.substring(0, list.length() - 2));
msg(list);
msg(list.toString());
return true;
}
}

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