Compare commits

...
172 Commits
Author SHA1 Message Date
RoinujNosde 07be81b456 Merge branch 'dev'
# Conflicts:
#	.github/workflows/bintray-publish.yml
#	.github/workflows/brintray-publish-1.8.yml
#	pom.xml
2020-08-09 20:12:29 -03:00
RoinujNosde e7b088d833 Bump version 2020-08-09 20:04:18 -03:00
RoinujNosde 9ad41ee3d6 Added translations
Added setbanner to help command
Added German translation
Added Turkish translation
Added Dutch translation
2020-08-09 19:30:41 -03:00
RoinujNosde a053911f00 Added banner for clans
Added command to set banners
Fixed insufficient permissions message
2020-08-09 14:39:44 -03:00
Edson Passos 1a2cf1d3b9 GitBook: [master] 10 pages modified 2020-08-09 17:28:54 +00:00
srbedrock cc3d7f9502 Wiki 2 (#30) 2020-08-07 08:59:03 -03:00
srbedrock 4e0c123879 Merge branch 'master' into master 2020-08-07 08:31:22 -03:00
Edson Passos 3bf8e77133 GitBook: [master] 27 pages and 2 assets modified 2020-08-06 21:23:53 +00:00
srbedrock 11e0344181 Wiki (#1) 2020-08-06 15:33:33 -03:00
srbedrock 34d4590d7e Commit Inicial mudança da Wiki (#29) 2020-08-06 15:00:37 -03:00
Edson Passos d1c98f802c Added Bintray Publish Action (#28) 2020-08-06 14:24:08 -03:00
Lucas 8f4dbc9f28 PAPI hook improved (#23) 2020-08-06 14:05:07 -03:00
srbedrock a5510b98ad Update and rename maven-master.yml to maven.yml 2020-08-06 11:43:18 -03:00
srbedrock a7d11f763c Update and rename maven.yml to maven-master.yml 2020-08-06 11:35:15 -03:00
srbedrock c50f6dc931 Create maven.yml 2020-08-06 10:56:56 -03:00
xtomyserrax 2b4e335b14 Fixes issue with item-list for dropping when teleporting home (#22) 2020-08-05 20:23:53 -03:00
RoinujNosde 34b0f32f1b Added DENSE ranking type
Fixed demote command
Changed kdr-exempt permission from default false to op to try to prevent a bug where everyone has it
2020-08-05 20:02:11 -03:00
Edson Passos 9ebe483850 Create .gitbook.yaml 2020-08-05 19:52:30 -03:00
RoinujNosde 7757f712cd Added StaffFrame
Added ClanDetailsFrame (staff)
Added PlayerDetailsFrame (staff)
Added PlayerListFrame (staff)
Added ClanListFrame (staff)
Fixed some messages not using the player's locale

marcelo-mason/SimpleClans#600
marcelo-mason/SimpleClans#614
2020-07-31 18:28:37 -03:00
RoinujNosde 2b562ac466 Added ConfirmationFrame
marcelo-mason/SimpleClans#616
2020-07-29 20:37:05 -03:00
Edson Passos 9038f97403 Merge pull request #21 from SrBedrock/patch-1
Update README.md
2020-07-29 07:53:30 -03:00
srbedrock 0892545252 Update README.md 2020-07-29 02:10:15 -03:00
Edson Passos 554e5f25bb Experimenting with Travis 2020-07-28 19:59:10 -03:00
RoinujNosde a0114a517d Implemented async teleport #3 2020-07-28 19:43:15 -03:00
RoinujNosde 960e40b387 Changed separator in auto groups to underscore
Fixes incompatibility issues with storing groups in YAML config files
2020-07-28 18:58:59 -03:00
RoinujNosde 0ca66fb6a4 Fixed placeholder registration
Added metric for language_chooser

marcelo-mason/SimpleClans#639
2020-07-26 13:40:38 -03:00
RoinujNosde e2a083f09a Added minimum members to verify 2020-07-26 10:35:59 -03:00
RoinujNosde c825fdd7ab Finished the language update
Removed usage of deprecated getLang
Added translation status for every language
Added link to the crowdin project and for every language
2020-07-26 01:05:06 -03:00
RoinujNosde 7e12fa6d01 Merge xtomyserrax's master into dev 2020-07-21 20:43:33 -03:00
RoinujNosde 113ef19966 Removed wrong import 2020-07-20 21:11:33 -03:00
RoinujNosde 93cb11532a Created LanguageSelectorFrame frame 2020-07-20 21:08:04 -03:00
Edson Passos 7d5699d75e Update README.md
Updated badges
Added maven repo info
Added API examples
2020-07-05 15:03:54 -03:00
RoinujNosde ae09353ab4 Fixes Exception on ChatEvent
getHandlerList() was missing

marcelo-mason/SimpleClans#634
2020-07-03 18:42:53 -03:00
RoinujNosde 33f9ee7adc Fixes NPE thrown if a color in the config is empty or doesn't exist 2020-07-02 22:16:37 -03:00
Edson Passos 2ba027f89a Delete bintray-publish.yml 2020-07-02 20:23:31 -03:00
Edson Passos d2ed8ac366 Delete bintray-publish-mc-1.8.yml 2020-07-02 20:23:21 -03:00
RoinujNosde 5e03bf53e7 Added support for different alphabets on tags
marcelo-mason/SimpleClans#618
2020-07-02 19:49:29 -03:00
RoinujNosde 01dc9d2304 Implemented rank creation via Conversation
marcelo-mason/SimpleClans#606
2020-07-01 19:47:05 -03:00
RoinujNosde 4eafe9afa8 Implemented clan creation via Conversation
Changed the command to /clan create (no args)
Created TagValidator class to have tag validation logic in one place
2020-07-01 18:42:43 -03:00
Edson Passos f2ba4b8a5c Added issue templates 2020-07-01 10:47:13 -03:00
RoinujNosde 7ba439eafc Added support for line breaks in an item's lore marcelo-mason/SimpleClans#611 2020-06-28 19:26:02 -03:00
RoinujNosde 5781f64796 Implemented disable-messages settings marcelo-mason/SimpleClans#597
If enabled, server announcements will not be sent
2020-06-28 18:56:32 -03:00
RoinujNosde 4d634901b0 GUI items now show their prices marcelo-mason/SimpleClans#620 2020-06-28 13:16:47 -03:00
RoinujNosde c1c4a35b82 Merge remote-tracking branch 'origin/dev' into dev
# Conflicts:
#	.github/workflows/maven-publish-mc-1.8.yml
#	.github/workflows/maven-publish.yml
2020-06-28 11:39:37 -03:00
RoinujNosde fd0954b510 Added promote command for admins marcelo-mason/SimpleClans#628 2020-06-28 11:38:51 -03:00
Edson Passos 2e1339e08e Delete bintray-publish.yml 2020-06-27 18:51:20 -03:00
Edson Passos cec163add9 Delete bintray-publish-mc-1.8.yml 2020-06-27 18:51:09 -03:00
Edson Passos 43e21924ee Renaming workflows again... 2020-06-27 18:48:00 -03:00
RoinujNosde 2bfc37d780 Merge remote-tracking branch 'origin/master' 2020-06-27 18:24:46 -03:00
RoinujNosde 3e4a744fc3 Renaming the workflows 2020-06-27 18:24:30 -03:00
Edson Passos f203554a64 Renamed workflows 2020-06-26 21:25:41 -03:00
RoinujNosde 116e99104c Merge branch 'master' into dev 2020-06-26 21:02:10 -03:00
RoinujNosde b5f81ccf79 Merge remote-tracking branch 'origin/master' 2020-06-26 20:57:26 -03:00
RoinujNosde 1ee1c288bd Changed distributionManagement 2020-06-26 20:56:58 -03:00
Edson Passos 03b95bbedf Updated issues link 2020-06-26 18:40:23 -03:00
rafael59r2 37ea6fe665 Added AddKillEvent (#631) 2020-06-25 19:55:41 -03:00
RoinujNosde 23832888e0 Fixes NPE on killing a NPC #630 2020-06-25 19:28:04 -03:00
RoinujNosde 50666a222a Added Friendly Fire permission to ranks
#625
2020-06-22 19:39:07 -03:00
RoinujNosde 0c63974180 Add info about clan/ally on MenuCommand
Added usage of the clan/ally chat commands to the MenuCommand and to the Chat Button
#582
2020-06-21 13:18:59 -03:00
RoinujNosde aa95ce09a4 Fixed too long colored tag on ModTag #598 2020-06-20 18:50:02 -03:00
RoinujNosde 960200a45f Added limit to the number of alliances
-1 disables it
#609
2020-06-19 21:54:09 -03:00
RoinujNosde 6c7bfa1752 Fixes NPE on a PlayerDeathEvent fired by PvPManager
#623
2020-06-19 21:27:26 -03:00
RoinujNosde 6554a91800 Forgot to replace other uses of Arrow #619 2020-06-14 16:23:47 -03:00
RoinujNosde 73616ddef9 ResetKDR price is displayed on the button and changed its permission #616 2020-06-14 16:13:40 -03:00
RoinujNosde ef894a36df Fixed place command and EntityListener
Fixed place command Closes #621
Fixed friendly fire not blocked if using tridents Closes #619
Added authors to plugin.yml
2020-06-14 15:54:16 -03:00
Edson Passos 598e420fa6 Added link to Discord server 2020-06-09 18:30:33 -03:00
RoinujNosde 68065a3b79 Fixed massive lag when opening the Leaderboard Frame
Closes #617
Added loading message to the buttons lore
Previous and Next page buttons now hide if they have no use
2020-06-06 19:00:38 -03:00
RoinujNosde 6e255fc7cb Added top clans placeholders
%simpleclans_topclans_POSITION_color_tag%
%simpleclans_topclans_POSITION_kdr%
%simpleclans_topclans_POSITION_total_kills%
Closes #610
2020-06-02 20:44:20 -03:00
Edson Passos 36a3d3732a Fixed maven build action
Ref was in the wrong action
2020-05-31 23:30:21 -03:00
RoinujNosde 934263063e Added a workflow for 1.8 2020-05-31 22:59:57 -03:00
RoinujNosde af9e9539f9 Fixed lpp on bb messages 2020-05-30 21:00:52 -03:00
RoinujNosde 14be85a84c Added getLocale check for older MC versions 2020-05-29 23:54:23 -03:00
RoinujNosde 3a789adf61 Implemented lpp on RequestManager 2020-05-29 23:47:58 -03:00
RoinujNosde 2c39603da9 Merge remote-tracking branch 'origin/master' 2020-05-28 21:00:24 -03:00
RoinujNosde 6dddc64a95 Fixed clan command not working on older Minecraft versions
Added messages for join/leave/mute/unmute chat Closes #603
Fixed clan tag min length Closes #608
Added a check for too long colored tag Closes #598
2020-05-28 20:59:42 -03:00
RoinujNosde 82f94d1149 Fixed clan command not working on older Minecraft versions
Added messages for join/leave/mute/unmute chat Closes #603
Fixed clan tag min length Closes #608
Added a check for too long colored tag Closes #598
2020-05-28 20:55:39 -03:00
RoinujNosde edd19a42d6 Implemented lpp on TabCompleter and ResignPrompt 2020-05-28 19:39:48 -03:00
RoinujNosde 26d41c2d98 Implemented language per player on ClanPlayer and Dates 2020-05-27 20:47:25 -03:00
RoinujNosde d928cf8e39 Merge branch 'master' of https://github.com/xtomyserrax/SimpleClans into lang-pp 2020-05-27 20:12:50 -03:00
xtomyserrax 4e1d538ef2 Added support for per player language. 2020-05-26 00:11:21 -03:00
Edson Passos b4fbcdd0de Added resource page 2020-05-25 20:47:03 -03:00
xtomyserrax 0ead15ff25 Update .gitignore 2020-05-25 20:43:28 -03:00
Edson Passos 3db5a71bbe Added maven package badge
Change links
2020-05-25 20:32:46 -03:00
RoinujNosde ae86f5b68f Updated language files 2020-05-25 19:17:48 -03:00
Edson Passos 1ca26319db Added a GUI
The plugin accepts & as an alternative color code
Fixed PurgeCommand not purging players without clan
2020-05-25 19:02:24 -03:00
Edson Passos 0bb9fd5b53 Removed old repo 2020-05-24 15:50:38 -03:00
Edson Passos c548f7749e Added Maven Package workflow 2020-05-24 15:41:58 -03:00
Edson Passos 888366ce27 Added new distribution repo and changed vault repo 2020-05-24 15:40:50 -03:00
RoinujNosde dc7d414393 Fixed globalff usage
Fixed Russian translation for the ff commands ("allow", "block" and
"auto")
Closes #594
2020-05-13 20:38:26 -03:00
RoinujNosde f5c0920cc9 Fixed rank command and added new languages 2020-05-13 20:14:49 -03:00
RoinujNosde fe866d959a Now saving periodically to db
Added update checker
Removed usage of SimpleClans#getLog()
2020-05-08 18:31:06 -03:00
LucasandRoinujNosde 6083766a12 Added PlaceholderAPI support (#587)
Added PlaceholderAPI support
Refactored PlaceholderHook

Co-authored-by: RoinujNosde <edsonpassosjr@outlook.com>
2020-05-01 14:54:28 -03:00
14b663801d Added spanish translation
Removed the usage of Helper.capitalize()
Fixed some messages in English
Converted spanish file to properties

Co-authored-by: RoinujNosde <edsonpassosjr@outlook.com>
Co-authored-by: CrazyDev <hugosilvaf2@gmail.com>
2020-04-27 22:45:22 -03:00
RoinujNosde b331e2c236 Merge branch 'master' of https://github.com/marcelo-mason/SimpleClans.git 2020-04-27 20:18:18 -03:00
RoinujNosde b3d5be1ec0 Updated language system Closes #573
The language file format is now .properties
If a message is not present in the messages file in the plugin's folder,
the plugin will search inside the jar
You can switch languages in the config
Fixed the vote system
Added message "resign request cancelled" Closes #580
Chat command is on the Menu command
2020-04-27 20:17:33 -03:00
Edson Passos b6d9c3a605 Removed disclaimer 2020-04-27 11:32:22 -03:00
Edson Passos e2c7b109d9 Added translation badge 2020-04-27 07:32:52 -03:00
CrazyDev 6bb370facd Fix command /clan home regroup (#584)
Fix loc null in /clan home regroup
2020-04-23 11:05:42 -03:00
RoinujNosde b3c8131c96 Fixed confirmation for promote Closes #581
Refactored the code to process votes
2020-04-22 21:32:02 -03:00
RoinujNosde d4c9537296 Fixed KDR not recording
Changed the kdr-exempt permission to simpleclans.other.kdr-exempt Closes
#579
2020-04-21 19:32:56 -03:00
RoinujNosde f89d446ac0 Fixed confirmation for demote/promote still asking after voting
Closes #482
2020-04-21 19:29:19 -03:00
RoinujNosde 009564f732 Fixed leaders online to demote
Closes #575
2020-04-18 19:15:55 -03:00
RoinujNosde a6e10da510 Checking if connection is null or closed
Closes #572
2020-04-18 19:11:34 -03:00
RoinujNosde a9fe589794 Forgot to update table 2020-04-16 07:02:51 -03:00
RoinujNosde 2d0b524557 Removed forRemoval from @Deprecated 2020-04-15 21:43:19 -03:00
RoinujNosde ba66f16f54 Fixed last seen and menu command messages
Fixed last seen not updating Closes #566
Fixed weird space in Menu command Closes #483
Fixed Menu command messages getting cropped Closes #392
Fixed Mojang URL
Removed deprecated code
2020-04-15 21:32:57 -03:00
RoinujNosde 4d6a489b43 SQLite queries use threads if enabled
Fixes #568
2020-04-13 20:22:45 -03:00
xtomyserrax 92da40ca76 Small fixes on commands
Fixes a small issue when ally wasn't verified, it was sending a message but not returning the code.
Fixes NPE on Ban command.
ChatEvent is ignored if cancelled.
Menu command will show /clan fee only if member fee is enabled
Added disabled message to Fee command
2020-04-10 13:35:44 -03:00
Edson Passos f1d0741ac8 Corrected version number 2020-04-10 11:28:24 -03:00
RoinujNosde 03b2f73e74 Rank name is lowercase 2020-04-10 10:35:54 -03:00
Edson Passos 2a65295e8b Finalized ranks with permissions
Closes #544

Fixed config resetting. Closes #564
2020-04-10 01:37:07 -03:00
Edson Passos a7cb9ed171 Update pom.xml 2020-04-03 19:13:10 -03:00
RoinujNosde ac0a387198 Removed kdr-exempt from anyone.*
Closes #561
2020-04-02 07:35:59 -03:00
Edson Passos e3cd7d37a8 Merge pull request #559 from xtomyserrax/patch-1
Added check for null home on regroup
2020-03-31 07:58:22 -03:00
Edson Passos 63595258f4 Removed wrong message 2020-03-31 07:48:21 -03:00
xtomyserrax 0c866044df /clan home command fixes
- Fixes this error when there is no home set for the clan (I just copied and pasted the loc == null statement): https://pastebin.com/jiXneTvK

Also can you please fix this placeholder? I dont want to touch anything there as maybe it breaks some stuff or it meant to be something: https://imgur.com/a/KWPDTk7
It says: "Clan home-base set to: {0}" + Location. I guess the 0 meant to be the location? Maybe adding a replace would fix it, unless the idea was to make something else.

Thanks for the awesome plugin and sorry for making another merge for the same, I just noticed it! 

Also another idea, what if instead of saying Insufficient Permission when you write a command wrongly it sends a usage message? For example, if I type /clan home tp, I get a no permission message, if I write /clan home tp test, then I go to the home of test clan. 

Thanks!
2020-03-30 22:45:34 -03:00
Edson Passos 2217efa8a7 Merge pull request #558 from xtomyserrax/patch-1
Fix bypassing /clan home regroup
2020-03-30 21:22:49 -03:00
xtomyserrax df97e43c4d Fix bypassing /clan home regroup
Clan members can use /clan home regroup without being leaders and also without having the permission simpleclans.leader.home-regroup

Just added a return statement to both conditionals.
2020-03-30 21:05:03 -03:00
RoinujNosde 169b44e793 Added permission for using colors/formats on setrank
Closes #548
2020-03-26 20:19:45 -03:00
RoinujNosde f2303c5336 Allow server owners to edit the time to collect member fee and upkeep
Closes #543
2020-03-25 20:13:35 -03:00
RoinujNosde af8cd133c2 Added permission to prevent the player's kdr from being affected
Closes #549
2020-03-21 23:48:52 -03:00
RoinujNosde fa66424402 Prevents code &k to transform the spaces between columns on clan roster
Closes #554
2020-03-21 23:31:12 -03:00
RoinujNosde 2727203bed Fixed spy chat and banned list
- The remaining chat codes (k, m, n, o, r) are now stripped from the Spy
Chat messages. Closes #550
- The banned players list is now saved to the config. Closes #546
2020-02-07 19:48:26 -03:00
RoinujNosde eedc743d5b Created a full PT-BR language file 2019-09-20 22:07:49 -03:00
RoinujNosde 4e12e4d6f5 KDR grinding prevention
Added two ways to prevent players from grinding KDR. Closes #276
When a player joins a clan, they automatically receive the
"group.tagname permission". Closes #541
Removed the usage of SimpleClans#hasUUID()
2019-09-20 20:40:11 -03:00
RoinujNosde 32855c2611 Fixed database not being loaded #542 2019-09-10 21:34:08 -03:00
RoboMWM d7118aea82 Updated Bukkit dependency to 1.13
Now the plugin supports 1.13 and 1.14
2019-09-08 09:41:16 -03:00
RoinujNosde f472432eb6 Rejoin, clan list and member fee improved
- Cooldown on rejoining clans added. Closes #280
- You can now sort the clan list by name, size, etc. Closes #530
- Added a permission to bypass the member fee. Closes #540
2019-09-06 20:15:59 -03:00
RoinujNosde e07c8a9343 Updating download link 2019-08-26 22:02:05 -03:00
RoinujNosde b84e46d156 Clans can now have a description
It can be changed using the /clan description command
Its max and min length can be set in the config

Closes #537
2019-08-26 21:55:02 -03:00
RoinujNosde daba767a5a Charge upkeep if member fee is enabled
Closes #539
2019-08-26 19:27:25 -03:00
RoinujNosde e59a760776 Upkeep system implemented
Closes #524
2019-08-25 17:14:39 -03:00
RoinujNosde 6aa30a5d2d Closes #535 2019-08-14 19:42:29 -03:00
RoinujNosde 9fe944fe5b Fixing percentage formula + typos 2019-08-13 22:45:44 -03:00
RoinujNosde 178382e685 Purge command, percentage to demote & bb on purge
Command to purge a player was added, it can be used by the console or by an admin
Menu command edited to show the new command and the demote command for admins
When a player is purged, a message is added to the clan bb
The plugin now considers the percentage (set in the config) of online leaders to demote another player
Closes #528
Closes #526
Closes #517
2019-08-13 22:34:18 -03:00
RoinujNosde 2fcc765447 Players now can pay for setting the member fee
Closes #534
2019-08-13 20:30:10 -03:00
RoinujNosde 6d5dc79568 Fee on profile and feedback on wrong value
Fee status is now displayed on /clan profile
A message is sent to the player when he inserts an invalid value
Closes #529
2019-08-13 20:11:48 -03:00
RoinujNosde 29c8955f9d Fixed MySQL syntax error
Closes #525
2019-08-10 19:36:43 -03:00
RoinujNosde 62f69e0a1e Fixed messages not being sent on resign 2019-08-07 20:42:50 -03:00
RoinujNosde 3518024428 Improved resign confirmation
- the input is not case sensitive
- anything other than "yes", means "no"
- calling spigot() to send the hover message on bb to support 1.13
Closes #493
2019-08-07 20:25:17 -03:00
RoinujNosde ad7f6fd402 Member fee system implemented
- If enabled by the server and the clan, a fee set by the clan leader will be collected from non-leaders at 1am everyday; a player that doesn't have enough to pay it, will be kicked
Closes #254
2019-08-06 19:50:38 -03:00
RoinujNosde 732932763d Added messages related to the fee 2019-08-06 19:32:52 -03:00
RoinujNosde 6440e937bc Added login-size config node 2019-08-02 21:38:00 -03:00
RoinujNosde 72ffaaa7fe Fixed hardcoded messages 2019-08-02 21:17:27 -03:00
RoinujNosde 9b69020677 Merge branch 'better-bb' of https://github.com/MLG-Fortress/SimpleClans into MLG-Fortress-better-bb 2019-08-02 21:15:06 -03:00
RoinujNosde 50d25bb881 Merge origin/master 2019-08-01 20:10:53 -03:00
RoinujNosde 5fc0477e9f Admins can demote clan leaders
Permission added: "simpleclans.admin.demote"
3 new messages added as well
Closes #517
2019-08-01 19:58:01 -03:00
RoinujNosde 10482ecf23 Closes #519 2019-08-01 19:30:49 -03:00
Edson Passos 00158a3e3c Download link changed 2019-08-01 19:07:56 -03:00
RoinujNosde 96d65c2d8f Resign command now asks for confirmation
Closes #493
2019-08-01 18:56:20 -03:00
RoinujNosde 4036b13bad Added some missing messages 2019-08-01 18:50:15 -03:00
RoinujNosde 2abe64284b Instead of returning null, getLang will return a useful message 2019-08-01 18:49:10 -03:00
RoinujNosde 1b62ecf296 Verifying you want to leave a clan
Closes #493
2019-07-26 20:06:54 -03:00
RoinujNosde c59afd27b3 Updating version 2019-07-26 19:18:56 -03:00
RoinujNosde fecc50c083 Fixed clan and ally chats using the same format
Also removed unnecessary usage of replaceAll
Closes #516
2019-07-26 19:12:35 -03:00
Edson Passos 230a0e9ba5 Merge pull request #515 from marcelo-mason/patch-3
Fixing ChatEvent + Denying same IP kills
2019-07-21 10:23:08 -03:00
RoinujNosde 9f96f8c19f Merge branch 'ArtNRG-master' into patch-3
Deny calculating kills with the same IP
2019-07-21 10:15:31 -03:00
RoinujNosde 1b16fd3b2b Merge branch 'master' of https://github.com/ArtNRG/SimpleClans into ArtNRG-master
Testing
2019-07-21 10:10:26 -03:00
RoinujNosde 4e5461b533 ChatEvent is now triggered sync
Closes #514
2019-07-21 10:07:42 -03:00
ArtNRG 70f4a4a109 If some player is killed by another one, check both attacker and victim IP addresses.
If they are the same don't calculate that kill and send the message to the server console.
2018-05-04 11:33:15 +05:00
ArtNRG ae3ebee649 Add kill-weights.deny-same-ip-kills:false boolean to config.yml 2018-05-04 11:32:46 +05:00
ArtNRG 235a69cf15 Update SettingsManager to get kill-weights.deny-same-ip-kills boolean from config.yml 2018-05-04 11:31:31 +05:00
RoboMWM 2c18498f08 Have travis use Java 8
Since Minecraft requires Java 8 now anyways.
2018-04-12 15:31:36 -07:00
RoboMWM 2ac4085915 typod parenthesis 2018-03-26 09:06:10 -07:00
RoboMWM 9b5e727fed forgot that formatTime uses seconds, not milliseconds 2018-03-12 13:12:04 -07:00
RoboMWM dcf1659e6b and this one too 2018-03-12 13:04:25 -07:00
RoboMWM d64190cc8f typo 2018-03-12 13:03:19 -07:00
RoboMWM dc1c417222 refactor formatTime to Dates class 2018-03-12 12:47:50 -07:00
RoboMWM 3872790c25 rename config key bb.join-size to bb.login-size
This is to match the other key `show-on-login`
2018-03-12 12:42:05 -07:00
RoboMWM da1894e55d fix substring mistake 2018-03-12 12:38:53 -07:00
RoboMWM 63763e9afd Allow size of bb displayed on join to be configured
bb.join-size, defaults to value in bb.size
2018-03-12 12:25:49 -07:00
RoboMWM 756a30303e timestamp bb messages 2018-03-12 12:13:53 -07:00
173 changed files with 18829 additions and 5147 deletions

No files matched your search

+5
View File
@@ -0,0 +1,5 @@
root: ./wiki
structure:
readme: README.md
summary: SUMMARY.md
+30
View File
@@ -0,0 +1,30 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Run the command '...'
2. Click on a mob '....'
3. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Software (please complete the following information):**
- Server: [e.g. Spigot 1.12]
- Plugin version [e.g. 2.12.1]
**Additional context**
Add any other context about the problem here.
+20
View File
@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: enhancement
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.
+29
View File
@@ -0,0 +1,29 @@
name: Publish to Bintray (Spigot 1.13+)
on:
release:
types: [created]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
server-id: bintray-roinujnosde-bukkit-plugins # Value of the distributionManagement/repository/id field of the pom.xml
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
- name: Build with Maven
run: mvn -B package --file pom.xml
- name: Publish to Bintray
run: mvn -B deploy
env:
MAVEN_USERNAME: ${{ secrets.BINTRAY_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.BINTRAY_TOKEN }}
@@ -0,0 +1,31 @@
name: Publish to Bintray (for Spigot 1.8-1.12)
on:
release:
types: [created]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
ref: 1.8
- name: Set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
server-id: bintray-roinujnosde-bukkit-plugins # Value of the distributionManagement/repository/id field of the pom.xml
server-username: MAVEN_USERNAME
server-password: MAVEN_PASSWORD
- name: Build with Maven
run: mvn -B package --file pom.xml
- name: Publish to Bintray
run: mvn -B deploy
env:
MAVEN_USERNAME: ${{ secrets.BINTRAY_USERNAME }}
MAVEN_PASSWORD: ${{ secrets.BINTRAY_TOKEN }}
+31
View File
@@ -0,0 +1,31 @@
# This workflow will build a Java project with Maven
# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven
name: Java CI Dev Build
on:
push:
branches: [dev]
pull_request:
branches: [dev]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- 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
- name: Create Staging
run: mkdir staging && cp target/SimpleClans.jar staging
- name: Upload a Build Artifact
uses: actions/upload-artifact@v2
with:
name: SimpleClans
path: staging
+8 -1
View File
@@ -1,3 +1,10 @@
/target/
/.idea/
SimpleClans.iml
SimpleClans.iml
/bin/
/.classpath
/.project
/dependency-reduced-pom.xml
/simpleclans-mc1.8.iml
*.jar
.settings
+4 -1
View File
@@ -5,11 +5,14 @@ language: java
script: mvn install
jdk: [openjdk7]
jdk: [openjdk8]
# if one build failed, exit testing
matrix:
fast_finish: true
addons:
artifacts: true
# Disable caching in order to get notified if there are some repo/dependency issues
## Cache maven dependencies
+48 -15
View File
@@ -1,15 +1,48 @@
SimpleClans
==========
Full featured clan system for PVP Minecraft Servers
[![Build Status](https://travis-ci.org/marcelo-mason/SimpleClans.svg)](https://travis-ci.org/marcelo-mason/SimpleClans)
[![Download](https://img.shields.io/badge/snapshot-download-blue.svg)](http://104.236.246.108:8080/job/SimpleClans/)
[![Issues](https://img.shields.io/github/issues/marcelo-mason/SimpleClans.svg)](https://github.com/marcelo-mason/SimpleClans/issues)
[![ghit.me](https://ghit.me/badge.svg?repo=marcelo-mason/SimpleClans)](https://ghit.me/repo/marcelo-mason/SimpleClans)
## Disclaimer:
Active development for this plugin has stopped. It is in maintenance mode and will continue to be kept up to date as-is with any new Minecraft version indefinitely.
Pull-requests for bug fixes or new features are welcomed and will be merged in if they do not break existing functionalities.
SimpleClans
==========
Full featured clan system for PVP Minecraft Servers!
[![Build Status](https://travis-ci.com/RoinujNosde/SimpleClans.svg?branch=master)](https://travis-ci.com/RoinujNosde/SimpleClans)
[![Spiget Downloads](https://img.shields.io/spiget/downloads/71242)](https://www.spigotmc.org/resources/simpleclans.71242/)
[![Issues](https://img.shields.io/github/issues/RoinujNosde/SimpleClans.svg)](https://github.com/RoinujNosde/SimpleClans/issues)
[![Crowdin](https://badges.crowdin.net/simpleclans/localized.svg)](https://crowdin.com/project/simpleclans)
[![Discord](https://img.shields.io/discord/719557355917934613?label=discord&logo=discord)](https://discord.gg/CkNwgdE)
Spigot resource page: https://www.spigotmc.org/resources/simpleclans.71242/
Wiki page: https://github.com/RoinujNosde/SimpleClans/wiki
#### Developers
Including SimpleClans with Maven:
```xml
<repositories>
<repository>
<id>bintray-roinujnosde-bukkit-plugins</id>
<url>https://dl.bintray.com/roinujnosde/bukkit-plugins</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>net.sacredlabyrinth.phaed.simpleclans</groupId>
<artifactId>SimpleClans</artifactId>
<version>2.12.2</version>
<scope>provided</scope>
</dependency>
</dependencies>
```
Using Gradle:
```groovy
repositories {
maven {
url "https://dl.bintray.com/roinujnosde/bukkit-plugins"
}
}
dependencies {
compileOnly "net.sacredlabyrinth.phaed.simpleclans:SimpleClans:2.12.2"
}
```
Some examples on how to use the API: https://github.com/RoinujNosde/SimpleClans/wiki/SimpleClans-API-example
-28
View File
@@ -1,28 +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="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="false">
<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" />
<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-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:17.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.google.code.gson:gson:2.2.4" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.avaje:ebean:2.8.1" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: javax.persistence:persistence-api:1.0" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: org.yaml:snakeyaml:1.15" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.milkbowl.vault:VaultAPI:1.4" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: com.nijikokun.bukkit:Permissions:2.7.4" level="project" />
<orderEntry type="library" scope="PROVIDED" name="Maven: net.sacredlabyrinth.Phaed:PreciousStones:9.7.0" level="project" />
<orderEntry type="library" name="Maven: org.getspout:spoutplugin:dev-SNAPSHOT" level="project" />
</component>
</module>
+86 -24
View File
@@ -1,8 +1,9 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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>net.sacredlabyrinth.phaed.simpleclans</groupId>
<artifactId>SimpleClans</artifactId>
<version>2.7.12</version>
<version>2.13.0</version>
<name>SimpleClans</name>
<url>http://dev.bukkit.org/server-mods/simpleclans/</url>
@@ -18,9 +19,7 @@
<includes>
<include>plugin.yml</include>
<include>config.yml</include>
<include>language.yml</include>
<include>language-br.yml</include>
<include>language-zh.yml</include>
<include>*.properties</include>
</includes>
</resource>
</resources>
@@ -33,8 +32,8 @@
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<source>1.8</source>
<target>1.8</target>
<showDeprecation>true</showDeprecation>
<showWarnings>true</showWarnings>
<fork>true</fork>
@@ -54,39 +53,107 @@
<artifactId>maven-release-plugin</artifactId>
<version>2.3.2</version>
</plugin>
<!-- Shade plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<relocations>
<relocation>
<pattern>org.bstats.bukkit</pattern>
<shadedPattern>net.sacredlabyrinth.phaed.simpleclans.metrics</shadedPattern>
</relocation>
<relocation>
<pattern>io.papermc.lib</pattern>
<shadedPattern>net.sacredlabyrinth.phaed.simpleclans.paperlib</shadedPattern>
</relocation>
</relocations>
<artifactSet>
<excludes>
<exclude>org.jetbrains:annotations</exclude>
</excludes>
</artifactSet>
</configuration>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<!-- Dependencies -->
<dependencies>
<dependency>
<groupId>org.bukkit</groupId>
<artifactId>bukkit</artifactId>
<version>1.12-R0.1-SNAPSHOT</version>
<groupId>org.spigotmc</groupId>
<artifactId>spigot-api</artifactId>
<version>1.13.2-R0.1-SNAPSHOT</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>net.milkbowl.vault</groupId>
<groupId>com.github.MilkBowl</groupId>
<artifactId>VaultAPI</artifactId>
<version>1.6</version>
<version>1.7</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.googlecode.json-simple</groupId>
<artifactId>json-simple</artifactId>
<version>1.1.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.bstats</groupId>
<artifactId>bstats-bukkit</artifactId>
<version>1.7</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>me.clip</groupId>
<artifactId>placeholderapi</artifactId>
<version>2.10.9</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jetbrains</groupId>
<artifactId>annotations</artifactId>
<version>16.0.2</version>
</dependency>
<dependency>
<groupId>io.papermc</groupId>
<artifactId>paperlib</artifactId>
<version>1.0.5</version>
<scope>compile</scope>
</dependency>
</dependencies>
<!-- Repositories -->
<repositories>
<repository>
<id>vault-repo</id>
<url>http://nexus.hc.to/content/repositories/pub_releases</url>
</repository>
<repository>
<id>spigot-repo</id>
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
</repository>
<repository>
<id>placeholderapi-repo</id>
<url>https://repo.extendedclip.com/content/repositories/placeholderapi/</url>
</repository>
<repository>
<id>bstats-repo</id>
<url>https://repo.codemc.org/repository/maven-public</url>
</repository>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
<repository>
<id>papermc</id>
<url>https://papermc.io/repo/repository/maven-public/</url>
</repository>
</repositories>
<!-- GitHub/Jenkins -->
@@ -111,14 +178,9 @@
<distributionManagement>
<repository>
<id>SacredCoding</id>
<name>SacredCoding-releases</name>
<url>http://104.236.246.108:8081/artifactory/plugins-release-local</url>
<id>bintray-roinujnosde-bukkit-plugins</id>
<name>roinujnosde-bukkit-plugins</name>
<url>https://api.bintray.com/maven/roinujnosde/bukkit-plugins/SimpleClans/;publish=1</url>
</repository>
<snapshotRepository>
<id>SacredCoding</id>
<name>SacredCoding-snapshots</name>
<url>http://104.236.246.108:8081/artifactory/plugins-release-local</url>
</snapshotRepository>
</distributionManagement>
</project>
@@ -19,11 +19,23 @@ public class ChatBlock {
private final ArrayList<String> columnAlignments = new ArrayList<>();
private final LinkedList<String[]> rows = new LinkedList<>();
private String color = "";
private boolean cropRight = true;
private boolean padRight = true;
/**
*
*/
public static final Logger LOG = Logger.getLogger("Minecraft");
public void setCropRight(boolean cropRight) {
this.cropRight = cropRight;
}
public void setPadRight(boolean padRight) {
this.padRight = padRight;
}
/**
* @param columnAlignment
*/
@@ -182,15 +194,27 @@ public class ChatBlock {
}
} else if (align.equalsIgnoreCase("l")) {
if (msgLength(section) > colsize) {
col = cropRightToFit(section, colsize);
if (cropRight) {
col = cropRightToFit(section, colsize);
} else {
col = section;
}
} else if (msgLength(section) < colsize) {
col = paddRightToFit(section, colsize);
if (padRight) {
col = paddRightToFit(section, colsize);
} else {
col = section;
}
}
} else if (align.equalsIgnoreCase("c")) {
if (msgLength(section) > colsize) {
col = cropRightToFit(section, colsize);
if (cropRight) {
col = cropRightToFit(section, colsize);
} else {
col = section;
}
} else if (msgLength(section) < colsize) {
col = centerInLineOf(section, colsize);
col = centerInLineOf(section, colsize);
}
}
@@ -253,9 +277,10 @@ public class ChatBlock {
}
// crop and print out
String msg = cropRightToFit((prefix_used ? empty_prefix : prefix + " ") + finalString, LINE_LENGTH);
String msg = (prefix_used ? empty_prefix : prefix + " ") + finalString;
if (cropRight) {
msg = cropRightToFit(msg, LINE_LENGTH);
}
if (color.length() > 0) {
msg = color + msg;
}
@@ -638,6 +663,10 @@ public class ChatBlock {
public static String[] say(String message) {
return colorize(wordWrap(message));
}
public static String[] getColorizedMessage(String msg) {
return colorize(wordWrap(msg));
}
/**
* @param message
@@ -697,4 +726,4 @@ public class ChatBlock {
return message;
}
}
}
@@ -1,12 +1,21 @@
package net.sacredlabyrinth.phaed.simpleclans;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
import net.md_5.bungee.api.chat.HoverEvent;
import net.md_5.bungee.api.chat.TextComponent;
import net.sacredlabyrinth.phaed.simpleclans.events.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.OfflinePlayer;
import org.bukkit.World;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.jetbrains.annotations.Nullable;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;
@@ -15,6 +24,7 @@ import java.io.Serializable;
import java.sql.Timestamp;
import java.text.MessageFormat;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author phaed
@@ -26,7 +36,9 @@ public class Clan implements Serializable, Comparable<Clan> {
private String tag;
private String colorTag;
private String name;
private String description;
private double balance;
private double fee;
private boolean friendlyFire;
private long founded;
private long lastUsed;
@@ -34,14 +46,17 @@ public class Clan implements Serializable, Comparable<Clan> {
private List<String> allies = new ArrayList<>();
private List<String> rivals = new ArrayList<>();
private List<String> bb = new ArrayList<>();
private List<String> members = new ArrayList<>();
private HashMap<String, Clan> warringClans = new HashMap<>();
private final List<String> members = new ArrayList<>();
private final HashMap<String, Clan> warringClans = new HashMap<>();
private int homeX = 0;
private int homeY = 0;
private int homeZ = 0;
private String homeWorld = "";
private boolean allowWithdraw = false;
private boolean allowDeposit = true;
private boolean feeEnabled;
private List<Rank> ranks = new ArrayList<>();
private @Nullable ItemStack banner;
/**
*
@@ -104,15 +119,15 @@ public class Clan implements Serializable, Comparable<Clan> {
public void deposit(double amount, Player player) {
if (SimpleClans.getInstance().getPermissionsManager().playerHasMoney(player, amount)) {
if (SimpleClans.getInstance().getPermissionsManager().playerChargeMoney(player, amount)) {
player.sendMessage(ChatColor.AQUA + MessageFormat.format(SimpleClans.getInstance().getLang("player.clan.deposit"), amount));
addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(SimpleClans.getInstance().getLang("bb.clan.deposit"), amount));
player.sendMessage(ChatColor.AQUA + lang("player.clan.deposit", player, amount));
addBb(player.getName(), ChatColor.AQUA + lang("bb.clan.deposit", amount));
setBalance(getBalance() + amount);
SimpleClans.getInstance().getStorageManager().updateClan(this);
} else {
player.sendMessage(ChatColor.AQUA + SimpleClans.getInstance().getLang("not.sufficient.money"));
player.sendMessage(ChatColor.AQUA + lang("not.sufficient.money",player));
}
} else {
player.sendMessage(ChatColor.AQUA + SimpleClans.getInstance().getLang("not.sufficient.money"));
player.sendMessage(ChatColor.AQUA + lang("not.sufficient.money",player));
}
}
@@ -125,13 +140,13 @@ public class Clan implements Serializable, Comparable<Clan> {
public void withdraw(double amount, Player player) {
if (getBalance() >= amount) {
if (SimpleClans.getInstance().getPermissionsManager().playerGrantMoney(player, amount)) {
player.sendMessage(ChatColor.AQUA + MessageFormat.format(SimpleClans.getInstance().getLang("player.clan.withdraw"), amount));
addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(SimpleClans.getInstance().getLang("bb.clan.withdraw"), amount));
player.sendMessage(ChatColor.AQUA + lang("player.clan.withdraw", player, amount));
addBb(player.getName(), ChatColor.AQUA + lang("bb.clan.withdraw", amount));
setBalance(getBalance() - amount);
SimpleClans.getInstance().getStorageManager().updateClan(this);
}
} else {
player.sendMessage(ChatColor.AQUA + SimpleClans.getInstance().getLang("clan.bank.not.enough.money"));
player.sendMessage(ChatColor.AQUA + lang("clan.bank.not.enough.money",player));
}
}
@@ -152,7 +167,46 @@ public class Clan implements Serializable, Comparable<Clan> {
public void setName(String name) {
this.name = name;
}
/**
* Returns the clan's description
*
* @return the description or null if it doesn't have one
*/
public String getDescription() {
return description;
}
/**
* (used internally)
*
* @param description
*/
public void setDescription(String description) {
this.description = description;
}
/**
* Sets the clan's fee
*
* @param fee
*/
public void setMemberFee(double fee) {
if (fee < 0) {
fee = 0;
}
this.fee = fee;
}
/**
* Returns the clan's fee
*
* @return the fee
*/
public double getMemberFee() {
return fee;
}
/**
* Returns the clan's balance
*
@@ -249,31 +303,7 @@ public class Clan implements Serializable, Comparable<Clan> {
* @return confirmation
*/
public boolean isMember(Player player) {
if (SimpleClans.getInstance().hasUUID()) {
return this.members.contains(player.getUniqueId().toString());
} else {
return this.members.contains(player.getName().toLowerCase());
}
}
/**
* Check if the player is a member of this clan
*
* @param playerName
* @return confirmation
*/
@Deprecated
public boolean isMember(String playerName) {
if (SimpleClans.getInstance().hasUUID()) {
UUID PlayerUniqueId = UUIDMigration.getForcedPlayerUUID(playerName);
if (PlayerUniqueId != null) {
return this.members.contains(PlayerUniqueId.toString());
} else {
return false;
}
} else {
return this.members.contains(playerName.toLowerCase());
}
return this.members.contains(player.getUniqueId().toString());
}
/**
@@ -369,27 +399,33 @@ public class Clan implements Serializable, Comparable<Clan> {
* @param msg
*/
public void addBb(String msg) {
addBbWithoutSaving(msg);
SimpleClans.getInstance().getStorageManager().updateClan(this);
}
/**
* Adds a bulletin board message without saving it to the database
*
* @param msg
*/
public void addBbWithoutSaving(String msg) {
while (bb.size() > SimpleClans.getInstance().getSettingsManager().getBbSize()) {
bb.remove(0);
}
bb.add(msg);
SimpleClans.getInstance().getStorageManager().updateClan(this);
bb.add(System.currentTimeMillis() + "_" + msg);
}
/**
* Adds a bulletin board message without announcer
* Adds a bulletin board message without announcer and saves it to the database
*
* @param msg
*
* @param updateLastUsed should the clan's last used time be updated as well?
*/
public void addBb(String msg, boolean updateLastUsed) {
while (bb.size() > SimpleClans.getInstance().getSettingsManager().getBbSize()) {
bb.remove(0);
}
bb.add(msg);
addBbWithoutSaving(msg);
SimpleClans.getInstance().getStorageManager().updateClan(this, updateLastUsed);
}
@@ -407,35 +443,15 @@ public class Clan implements Serializable, Comparable<Clan> {
* @param cp
*/
public void importMember(ClanPlayer cp) {
String NameOrUUID;
if (SimpleClans.getInstance().hasUUID()) {
if (cp.getUniqueId() != null) {
NameOrUUID = cp.getUniqueId().toString();
} else {
return;
}
} else {
NameOrUUID = cp.getCleanName();
}
if (!this.members.contains(NameOrUUID)) {
this.members.add(NameOrUUID);
}
}
/**
* (used internally)
*
* @param playerName
*/
@Deprecated
public void removeMember(String playerName) {
if (SimpleClans.getInstance().hasUUID()) {
UUID PlayerUniqueId = UUIDMigration.getForcedPlayerUUID(playerName);
if (PlayerUniqueId != null) {
this.members.remove(PlayerUniqueId.toString());
}
} else {
this.members.remove(playerName.toLowerCase());
String uuid;
if (cp.getUniqueId() != null) {
uuid = cp.getUniqueId().toString();
} else {
return;
}
if (!this.members.contains(uuid)) {
this.members.add(uuid);
}
}
@@ -661,12 +677,7 @@ public class Clan implements Serializable, Comparable<Clan> {
String out = "";
for (String member : members) {
ClanPlayer cp;
if (SimpleClans.getInstance().hasUUID()) {
cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
} else {
cp = SimpleClans.getInstance().getClanManager().getClanPlayer(member.toLowerCase());
}
ClanPlayer cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
if (cp == null) {
continue;
}
@@ -686,31 +697,9 @@ public class Clan implements Serializable, Comparable<Clan> {
* @return the leaders
*/
public boolean isLeader(Player player) {
if (SimpleClans.getInstance().hasUUID()) {
return isLeader(player.getUniqueId());
} else {
return isLeader(player.getName());
}
return isLeader(player.getUniqueId());
}
/**
* Check if a player is a leader of a clan
*
* @param playerName
* @return the leaders
*/
@Deprecated
public boolean isLeader(String playerName) {
if (isMember(playerName)) {
ClanPlayer cp = SimpleClans.getInstance().getClanManager().getClanPlayer(playerName.toLowerCase());
if (cp != null && cp.isLeader()) {
return true;
}
}
return false;
}
/**
* Check if a player is a leader of a clan
@@ -730,6 +719,24 @@ public class Clan implements Serializable, Comparable<Clan> {
return false;
}
/**
* Get all members that must pay the fee (that excludes leaders and players with the permission to bypass it)
*
* @return the fee payers
*/
public Set<ClanPlayer> getFeePayers() {
Set<ClanPlayer> feePayers = new HashSet<>();
getNonLeaders().forEach(cp -> {
OfflinePlayer op= Bukkit.getOfflinePlayer(cp.getUniqueId());
if (!SimpleClans.getInstance().getPermissionsManager().has(null, op, "simpleclans.member.bypass-fee")) {
feePayers.add(cp);
}
});
return feePayers;
}
/**
* Get all members (leaders, and non-leaders) in the clan
*
@@ -739,12 +746,7 @@ public class Clan implements Serializable, Comparable<Clan> {
List<ClanPlayer> out = new ArrayList<>();
for (String member : members) {
ClanPlayer cp;
if (SimpleClans.getInstance().hasUUID()) {
cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
} else {
cp = SimpleClans.getInstance().getClanManager().getClanPlayer(member.toLowerCase());
}
ClanPlayer cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
if (cp == null) {
continue;
}
@@ -763,12 +765,7 @@ public class Clan implements Serializable, Comparable<Clan> {
List<ClanPlayer> out = new ArrayList<>();
for (String member : members) {
ClanPlayer cp;
if (SimpleClans.getInstance().hasUUID()) {
cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
} else {
cp = SimpleClans.getInstance().getClanManager().getClanPlayer(member.toLowerCase());
}
ClanPlayer cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
if (cp == null) {
continue;
}
@@ -789,12 +786,7 @@ public class Clan implements Serializable, Comparable<Clan> {
List<ClanPlayer> out = new ArrayList<>();
for (String member : members) {
ClanPlayer cp;
if (SimpleClans.getInstance().hasUUID()) {
cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
} else {
cp = SimpleClans.getInstance().getClanManager().getClanPlayer(member.toLowerCase());
}
ClanPlayer cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
if (cp == null) {
continue;
}
@@ -816,12 +808,7 @@ public class Clan implements Serializable, Comparable<Clan> {
List<ClanPlayer> out = new ArrayList<>();
for (String member : members) {
ClanPlayer cp;
if (SimpleClans.getInstance().hasUUID()) {
cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
} else {
cp = SimpleClans.getInstance().getClanManager().getClanPlayer(member.toLowerCase());
}
ClanPlayer cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
if (cp == null) {
continue;
}
@@ -845,12 +832,7 @@ public class Clan implements Serializable, Comparable<Clan> {
List<ClanPlayer> out = new ArrayList<>();
for (String member : members) {
ClanPlayer cp;
if (SimpleClans.getInstance().hasUUID()) {
cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
} else {
cp = SimpleClans.getInstance().getClanManager().getClanPlayer(member.toLowerCase());
}
ClanPlayer cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
if (cp == null) {
continue;
}
@@ -896,12 +878,7 @@ public class Clan implements Serializable, Comparable<Clan> {
int totalDeaths = 0;
for (String member : members) {
ClanPlayer cp;
if (SimpleClans.getInstance().hasUUID()) {
cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
} else {
cp = SimpleClans.getInstance().getClanManager().getClanPlayer(member.toLowerCase());
}
ClanPlayer cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
if (cp == null) {
continue;
}
@@ -930,12 +907,7 @@ public class Clan implements Serializable, Comparable<Clan> {
}
for (String member : members) {
ClanPlayer cp;
if (SimpleClans.getInstance().hasUUID()) {
cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
} else {
cp = SimpleClans.getInstance().getClanManager().getClanPlayer(member.toLowerCase());
}
ClanPlayer cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
if (cp == null) {
continue;
}
@@ -959,12 +931,7 @@ public class Clan implements Serializable, Comparable<Clan> {
}
for (String member : members) {
ClanPlayer cp;
if (SimpleClans.getInstance().hasUUID()) {
cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
} else {
cp = SimpleClans.getInstance().getClanManager().getClanPlayer(member.toLowerCase());
}
ClanPlayer cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
if (cp == null) {
continue;
}
@@ -988,12 +955,7 @@ public class Clan implements Serializable, Comparable<Clan> {
}
for (String member : members) {
ClanPlayer cp;
if (SimpleClans.getInstance().hasUUID()) {
cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
} else {
cp = SimpleClans.getInstance().getClanManager().getClanPlayer(member.toLowerCase());
}
ClanPlayer cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
if (cp == null) {
continue;
}
@@ -1017,12 +979,7 @@ public class Clan implements Serializable, Comparable<Clan> {
}
for (String member : members) {
ClanPlayer cp;
if (SimpleClans.getInstance().hasUUID()) {
cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
} else {
cp = SimpleClans.getInstance().getClanManager().getClanPlayer(member.toLowerCase());
}
ClanPlayer cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
if (cp == null) {
continue;
}
@@ -1046,12 +1003,7 @@ public class Clan implements Serializable, Comparable<Clan> {
}
for (String member : members) {
ClanPlayer cp;
if (SimpleClans.getInstance().hasUUID()) {
cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
} else {
cp = SimpleClans.getInstance().getClanManager().getClanPlayer(member.toLowerCase());
}
ClanPlayer cp = SimpleClans.getInstance().getClanManager().getClanPlayer(UUID.fromString(member));
if (cp == null) {
continue;
}
@@ -1095,13 +1047,9 @@ public class Clan implements Serializable, Comparable<Clan> {
// add clan permission
SimpleClans.getInstance().getPermissionsManager().addClanPermissions(cp);
SimpleClans.getInstance().getPermissionsManager().addPlayerPermissions(cp);
Player player;
if (SimpleClans.getInstance().hasUUID()) {
player = SimpleClans.getInstance().getServer().getPlayer(cp.getUniqueId());
} else {
player = SimpleClans.getInstance().getServer().getPlayerExact(cp.getName());
}
Player player = SimpleClans.getInstance().getServer().getPlayer(cp.getUniqueId());
if (player != null) {
SimpleClans.getInstance().getClanManager().updateDisplayName(player);
@@ -1109,39 +1057,6 @@ public class Clan implements Serializable, Comparable<Clan> {
SimpleClans.getInstance().getServer().getPluginManager().callEvent(new PlayerJoinedClanEvent(this, cp));
}
/**
* Remove a player from a clan
*
* @param playerName
*/
@Deprecated
public void removePlayerFromClan(String playerName) {
ClanPlayer cp = SimpleClans.getInstance().getClanManager().getClanPlayer(playerName);
// remove clan group-permission
SimpleClans.getInstance().getPermissionsManager().removeClanPermissions(cp);
// remove permissions
SimpleClans.getInstance().getPermissionsManager().removeClanPlayerPermissions(cp);
cp.setClan(null);
cp.addPastClan(getColorTag() + (cp.isLeader() ? ChatColor.DARK_RED + "*" : ""));
cp.setLeader(false);
cp.setTrusted(false);
cp.setJoinDate(0);
removeMember(playerName);
SimpleClans.getInstance().getStorageManager().updateClanPlayer(cp);
SimpleClans.getInstance().getStorageManager().updateClan(this);
Player matched = cp.toPlayer();
if (matched != null) {
SimpleClans.getInstance().getClanManager().updateDisplayName(matched);
}
SimpleClans.getInstance().getServer().getPluginManager().callEvent(new PlayerKickedClanEvent(this, cp));
}
/**
* Remove a player from a clan
*
@@ -1161,6 +1076,7 @@ public class Clan implements Serializable, Comparable<Clan> {
cp.setLeader(false);
cp.setTrusted(false);
cp.setJoinDate(0);
cp.setRank(null);
removeMember(playerUniqueId);
SimpleClans.getInstance().getStorageManager().updateClanPlayer(cp);
@@ -1174,27 +1090,6 @@ public class Clan implements Serializable, Comparable<Clan> {
SimpleClans.getInstance().getServer().getPluginManager().callEvent(new PlayerKickedClanEvent(this, cp));
}
/**
* Promote a member to a leader of a clan
*
* @param playerName
*/
@Deprecated
public void promote(String playerName) {
ClanPlayer cp = SimpleClans.getInstance().getClanManager().getClanPlayer(playerName);
cp.setLeader(true);
cp.setTrusted(true);
SimpleClans.getInstance().getStorageManager().updateClanPlayer(cp);
SimpleClans.getInstance().getStorageManager().updateClan(this);
// add clan permission
SimpleClans.getInstance().getPermissionsManager().addClanPermissions(cp);
SimpleClans.getInstance().getServer().getPluginManager().callEvent(new PlayerPromoteEvent(this, cp));
}
/**
* Promote a member to a leader of a clan
*
@@ -1214,25 +1109,6 @@ public class Clan implements Serializable, Comparable<Clan> {
SimpleClans.getInstance().getServer().getPluginManager().callEvent(new PlayerPromoteEvent(this, cp));
}
/**
* Demote a leader back to a member of a clan
*
* @param playerName
*/
@Deprecated
public void demote(String playerName) {
ClanPlayer cp = SimpleClans.getInstance().getClanManager().getClanPlayer(playerName);
cp.setLeader(false);
SimpleClans.getInstance().getStorageManager().updateClanPlayer(cp);
SimpleClans.getInstance().getStorageManager().updateClan(this);
// add clan permission
SimpleClans.getInstance().getPermissionsManager().addClanPermissions(cp);
SimpleClans.getInstance().getServer().getPluginManager().callEvent(new PlayerDemoteEvent(this, cp));
}
/**
* Demote a leader back to a member of a clan
*
@@ -1327,21 +1203,43 @@ public class Clan implements Serializable, Comparable<Clan> {
* @return
*/
public boolean isAnyOnline() {
for (String member : members) {
if (SimpleClans.getInstance().hasUUID()) {
if (Helper.isOnline(UUID.fromString(member))) {
return true;
}
} else {
if (Helper.isOnline(member)) {
return true;
}
}
}
for (String member : members) {
if (Helper.isOnline(UUID.fromString(member))) {
return true;
}
}
return false;
}
/**
* Checks if there are enough leaders online to vote
*
* @param cp the one to demote
* @return true if there are
*/
public boolean enoughLeadersOnlineToDemote(ClanPlayer cp) {
List<ClanPlayer> online = getOnlineLeaders();
online.remove(cp);
double minimum = SimpleClans.getInstance().getSettingsManager().getPercentageOnlineToDemote();
// all leaders minus the one being demoted
double totalLeaders = getLeaders().size() - 1;
double onlineLeaders = online.size();
return ((onlineLeaders / totalLeaders) * 100) >= minimum;
}
/**
* Gets the online leaders
*
* @return the online leaders
*/
public List<ClanPlayer> getOnlineLeaders() {
return getOnlineMembers().stream().filter(ClanPlayer::isLeader).collect(Collectors.toList());
}
/**
* Check whether all leaders of a clan are online
*
@@ -1350,17 +1248,11 @@ public class Clan implements Serializable, Comparable<Clan> {
public boolean allLeadersOnline() {
List<ClanPlayer> leaders = getLeaders();
for (ClanPlayer leader : leaders) {
if (SimpleClans.getInstance().hasUUID()) {
if (!Helper.isOnline(leader.getUniqueId())) {
return false;
}
} else {
if (!Helper.isOnline(leader.getName())) {
return false;
}
}
}
for (ClanPlayer leader : leaders) {
if (!Helper.isOnline(leader.getUniqueId())) {
return false;
}
}
return true;
}
@@ -1437,7 +1329,7 @@ public class Clan implements Serializable, Comparable<Clan> {
}
}
SimpleClans.getInstance().getServer().getConsoleSender().sendMessage(ChatColor.AQUA + "[" + SimpleClans.getInstance().getLang("clan.announce") + ChatColor.AQUA + "] " + ChatColor.AQUA + "[" + Helper.getColorName(playerName) + ChatColor.WHITE + "] " + message);
SimpleClans.getInstance().getServer().getConsoleSender().sendMessage(ChatColor.AQUA + "[" + lang("clan.announce") + ChatColor.AQUA + "] " + ChatColor.AQUA + "[" + Helper.getColorName(playerName) + ChatColor.WHITE + "] " + message);
}
/**
@@ -1457,7 +1349,7 @@ public class Clan implements Serializable, Comparable<Clan> {
ChatBlock.sendMessage(pl, message);
}
}
SimpleClans.getInstance().getServer().getConsoleSender().sendMessage(ChatColor.AQUA + "[" + SimpleClans.getInstance().getLang("leader.announce") + ChatColor.AQUA + "] " + ChatColor.WHITE + message);
SimpleClans.getInstance().getServer().getConsoleSender().sendMessage(ChatColor.AQUA + "[" + lang("leader.announce") + ChatColor.AQUA + "] " + ChatColor.WHITE + message);
}
/**
@@ -1495,7 +1387,7 @@ public class Clan implements Serializable, Comparable<Clan> {
public void displayBb(Player player) {
if (isVerified()) {
ChatBlock.sendBlank(player);
ChatBlock.saySingle(player, MessageFormat.format(SimpleClans.getInstance().getLang("bulletin.board.header"), SimpleClans.getInstance().getSettingsManager().getBbAccentColor(), SimpleClans.getInstance().getSettingsManager().getPageHeadingsColor(), Helper.capitalize(getName())));
ChatBlock.saySingle(player, lang("bulletin.board.header", SimpleClans.getInstance().getSettingsManager().getBbAccentColor(), SimpleClans.getInstance().getSettingsManager().getPageHeadingsColor(), getName()));
int maxSize = SimpleClans.getInstance().getSettingsManager().getBbSize();
@@ -1504,12 +1396,71 @@ public class Clan implements Serializable, Comparable<Clan> {
}
for (String msg : bb) {
ChatBlock.sendMessage(player, SimpleClans.getInstance().getSettingsManager().getBbAccentColor() + "* " + SimpleClans.getInstance().getSettingsManager().getBbColor() + Helper.parseColors(msg));
if (!sendBbTime(player, msg)) {
ChatBlock.sendMessage(player, SimpleClans.getInstance().getSettingsManager().getBbAccentColor() + "* " + SimpleClans.getInstance().getSettingsManager().getBbColor() + Helper.parseColors(msg));
}
}
ChatBlock.sendBlank(player);
}
}
/**
* Displays bb to a player
* @implNote may want to refactor displaybb(Player) to use this?
*
* @param player
* @param maxSize amount of lines to display
*/
public void displayBb(Player player, int maxSize) {
if (isVerified()) {
ChatBlock.sendBlank(player);
ChatBlock.saySingle(player, lang("bulletin.board.header", SimpleClans.getInstance().getSettingsManager().getBbAccentColor(), SimpleClans.getInstance().getSettingsManager().getPageHeadingsColor(), getName()));
List<String> localBb = new ArrayList<>(bb);
while (localBb.size() > maxSize) {
localBb.remove(0);
}
for (String msg : localBb) {
if (!sendBbTime(player, msg)) {
ChatBlock.sendMessage(player, SimpleClans.getInstance().getSettingsManager().getBbAccentColor() + "* " + SimpleClans.getInstance().getSettingsManager().getBbColor() + Helper.parseColors(msg));
}
}
ChatBlock.sendBlank(player);
}
}
/**
* Sends a bb message with the timestamp in a hover message, if the bb message is timestamped
* @param msg the bb message
* @return true if sent
*/
private boolean sendBbTime(Player player, String msg) {
try {
int index = msg.indexOf("_");
if (index < 1)
return false;
long time;
time = (System.currentTimeMillis()
- Long.parseLong(msg.substring(0, index))) / 1000L;
msg = String.join("", ChatBlock
.getColorizedMessage(SimpleClans.getInstance()
.getSettingsManager().getBbAccentColor() + "* " +
SimpleClans.getInstance().getSettingsManager()
.getBbColor() + Helper.parseColors(
msg.substring(++index, msg.length()))));
TextComponent textComponent = new TextComponent(msg);
textComponent.setHoverEvent(
new HoverEvent(HoverEvent.Action.SHOW_TEXT,
TextComponent.fromLegacyText(
Dates.formatTime(time, 1) + lang("bb.ago"))));
player.spigot().sendMessage(textComponent);
return true;
} catch (Throwable rock) {
return false;
}
}
/**
* Disband a clan
*/
@@ -1534,18 +1485,18 @@ public class Clan implements Serializable, Comparable<Clan> {
clans.remove(this);
for (Clan c : clans) {
String disbanded = SimpleClans.getInstance().getLang("clan.disbanded");
String disbanded = lang("clan.disbanded");
if (c.removeWarringClan(this)) {
c.addBb(disbanded, ChatColor.AQUA + MessageFormat.format(SimpleClans.getInstance().getLang("you.are.no.longer.at.war"), Helper.capitalize(c.getName()), getColorTag()));
c.addBb(disbanded, ChatColor.AQUA + MessageFormat.format(lang("you.are.no.longer.at.war"), c.getName(), getColorTag()));
}
if (c.removeRival(getTag())) {
c.addBb(disbanded, ChatColor.AQUA + MessageFormat.format(SimpleClans.getInstance().getLang("has.been.disbanded.rivalry.ended"), Helper.capitalize(getName())));
c.addBb(disbanded, ChatColor.AQUA + MessageFormat.format(lang("has.been.disbanded.rivalry.ended"), getName()));
}
if (c.removeAlly(getTag())) {
c.addBb(disbanded, ChatColor.AQUA + MessageFormat.format(SimpleClans.getInstance().getLang("has.been.disbanded.alliance.ended"), Helper.capitalize(getName())));
c.addBb(disbanded, ChatColor.AQUA + MessageFormat.format(lang("has.been.disbanded.alliance.ended"), getName()));
}
}
@@ -1633,7 +1584,8 @@ public class Clan implements Serializable, Comparable<Clan> {
*
* @return the flags
*/
public String getFlags() {
@SuppressWarnings("unchecked")
public String getFlags() {
JSONObject json = new JSONObject();
// writing the list of flags to json
@@ -1703,8 +1655,8 @@ public class Clan implements Serializable, Comparable<Clan> {
}
public void validateWarring() {
for (Iterator iter = warringClans.keySet().iterator(); iter.hasNext(); ) {
String clanName = (String) iter.next();
for (Iterator<String> iter = warringClans.keySet().iterator(); iter.hasNext(); ) {
String clanName = iter.next();
Clan clan = SimpleClans.getInstance().getClanManager().getClan(clanName);
@@ -1717,7 +1669,7 @@ public class Clan implements Serializable, Comparable<Clan> {
}
}
public void setHomeLocation(Location home) {
public void setHomeLocation(@Nullable Location home) {
if (home == null) {
homeY = 0;
homeX = 0;
@@ -1734,7 +1686,7 @@ public class Clan implements Serializable, Comparable<Clan> {
SimpleClans.getInstance().getStorageManager().updateClan(this);
}
public Location getHomeLocation() {
public @Nullable Location getHomeLocation() {
if (homeWorld == null) {
return null;
}
@@ -1776,6 +1728,24 @@ public class Clan implements Serializable, Comparable<Clan> {
}
}
/**
* Checks if the fee is enabled
*
* @return true if enabled
*/
public boolean isMemberFeeEnabled() {
return feeEnabled;
}
/**
* Enables or disables the fee
*
* @param enable
*/
public void setMemberFeeEnabled(boolean enable) {
feeEnabled = enable;
}
/**
* @return the allowWithdraw
*/
@@ -1803,4 +1773,104 @@ public class Clan implements Serializable, Comparable<Clan> {
public void setAllowDeposit(boolean allowDeposit) {
this.allowDeposit = allowDeposit;
}
/**
* Checks if the clan has the specified rank
*
* @param name the rank
* @return
*/
public boolean hasRank(String name) {
return getRank(name) != null;
}
/**
* Creates a rank
*
* @param name
*/
public void createRank(String name) {
ranks.add(new Rank(name));
}
/**
* Returns the clan's ranks
*
* @return the ranks
*/
public List<Rank> getRanks() {
return ranks;
}
/**
* Sets the clan's ranks
*
* @param ranks
*/
public void setRanks(List<Rank> ranks) {
if (ranks == null) {
ranks = new ArrayList<>();
}
this.ranks = ranks;
}
/**
* Deletes a rank with the specified name
*
* @param name
*/
public void deleteRank(String name) {
Rank r = getRank(name);
if (r != null) {
ranks.remove(r);
getMembers().forEach(cp -> {
if (cp.getRankId().equals(r.getName())) {
cp.setRank("");
SimpleClans.getInstance().getStorageManager().updateClanPlayer(cp);
}
});
}
}
/**
* Gets a rank with the specified name or null if not found
*
* @param name the rank name
* @return a rank or null
*/
public @Nullable Rank getRank(String name) {
if (name != null) {
for (Rank r : ranks) {
if (r.getName().equals(name)) {
return r;
}
}
}
return null;
}
public void setBanner(@Nullable ItemStack banner) {
if (banner == null) {
this.banner = null;
return;
}
banner = banner.clone();
banner.setAmount(1);
ItemMeta itemMeta = banner.getItemMeta();
if (itemMeta != null) {
// hides the banner patterns from the lore (I don't know why it's called POTION_EFFECTS)
itemMeta.addItemFlags(ItemFlag.HIDE_POTION_EFFECTS);
itemMeta.setLore(null);
itemMeta.setDisplayName(null);
banner.setItemMeta(itemMeta);
}
this.banner = banner;
}
public @Nullable ItemStack getBanner() {
if (banner != null) {
return banner.clone();
}
return null;
}
}
@@ -3,6 +3,8 @@ package net.sacredlabyrinth.phaed.simpleclans;
import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;
@@ -10,8 +12,12 @@ import org.json.simple.JSONValue;
import java.io.Serializable;
import java.sql.Timestamp;
import java.text.MessageFormat;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
/**
* @author phaed
*/
@@ -32,6 +38,7 @@ public class ClanPlayer implements Serializable, Comparable<ClanPlayer>
private long lastSeen;
private long joinDate;
private Set<String> pastClans = new HashSet<>();
private final Map<String, Long> resignTimes = new HashMap<>();
private VoteResult vote;
private Channel channel;
@@ -47,6 +54,7 @@ public class ClanPlayer implements Serializable, Comparable<ClanPlayer>
private boolean clanChatMute = false;
private String rank = "";
private @Nullable Locale locale;
/**
*
@@ -74,19 +82,19 @@ public class ClanPlayer implements Serializable, Comparable<ClanPlayer>
}
/**
* @param playerUniqueId
* @param uuid the Player's UUID
*/
public ClanPlayer(UUID playerUniqueId)
public ClanPlayer(UUID uuid)
{
this.uniqueId = playerUniqueId;
Player OnlinePlayer = SimpleClans.getInstance().getServer().getPlayer(playerUniqueId);
if (OnlinePlayer != null)
this.uniqueId = uuid;
Player onlinePlayer = SimpleClans.getInstance().getServer().getPlayer(uuid);
if (onlinePlayer != null)
{
this.displayName = OnlinePlayer.getName();
this.displayName = onlinePlayer.getName();
} else
{
OfflinePlayer OfflinePlayer = SimpleClans.getInstance().getServer().getOfflinePlayer(playerUniqueId);
this.displayName = OfflinePlayer.getName();
OfflinePlayer offlinePlayer = SimpleClans.getInstance().getServer().getOfflinePlayer(uuid);
this.displayName = offlinePlayer.getName() != null ? offlinePlayer.getName() : "null";
}
this.lastSeen = (new Date()).getTime();
this.joinDate = (new Date()).getTime();
@@ -116,15 +124,8 @@ public class ClanPlayer implements Serializable, Comparable<ClanPlayer>
}
@Override
public int compareTo(ClanPlayer other)
{
if (SimpleClans.getInstance().hasUUID())
{
return this.getUniqueId().compareTo(other.getUniqueId());
} else
{
return this.getName().compareToIgnoreCase(other.getName());
}
public int compareTo(ClanPlayer other) {
return this.getUniqueId().compareTo(other.getUniqueId());
}
@Override
@@ -274,25 +275,33 @@ public class ClanPlayer implements Serializable, Comparable<ClanPlayer>
}
/**
* Returns a verbal representation of how many days ago a player was last seen
*
* @return
* @return a verbal representation of how many days ago a player was last seen
*/
public String getLastSeenDaysString()
{
return getLastSeenDaysString(null);
}
/**
* @param viewer the Player viewing the last seen days
* @return a verbal representation of how many days ago a player was last seen
*/
public String getLastSeenDaysString(@Nullable Player viewer)
{
double days = Dates.differenceInDays(new Timestamp(lastSeen), new Timestamp((new Date()).getTime()));
if (days < 1)
{
return SimpleClans.getInstance().getLang("today");
return lang("today", viewer);
}
else if (Math.round(days) == 1)
{
return MessageFormat.format(SimpleClans.getInstance().getLang("1.color.day"), ChatColor.GRAY);
return lang("1.color.day", viewer, ChatColor.GRAY);
}
else
{
return MessageFormat.format(SimpleClans.getInstance().getLang("many.color.days"), Math.round(days), ChatColor.GRAY);
return lang("many.color.days", viewer, Math.round(days), ChatColor.GRAY);
}
}
@@ -329,6 +338,7 @@ public class ClanPlayer implements Serializable, Comparable<ClanPlayer>
/**
* Adds one rival kill to this player (does not update clanplayer to db)
*/
@Deprecated
public void addRivalKill()
{
setRivalKills(getRivalKills() + 1);
@@ -357,6 +367,7 @@ public class ClanPlayer implements Serializable, Comparable<ClanPlayer>
/**
* Adds one civilian kill to this player (does not update clanplayer to db)
*/
@Deprecated
public void addCivilianKill()
{
setCivilianKills(getCivilianKills() + 1);
@@ -385,10 +396,27 @@ public class ClanPlayer implements Serializable, Comparable<ClanPlayer>
/**
* Adds one civilian kill to this player (does not update clanplayer to db)
*/
@Deprecated
public void addNeutralKill()
{
setNeutralKills(getNeutralKills() + 1);
}
/**
* Adds one kill to this player (does not update to db)
*/
public void addKill(Kill.Type type) {
switch (type) {
case CIVILIAN:
civilianKills++;
break;
case NEUTRAL:
neutralKills++;
break;
case RIVAL:
rivalKills++;
}
}
/**
* Whether this player is allowing friendly fire
@@ -522,12 +550,24 @@ public class ClanPlayer implements Serializable, Comparable<ClanPlayer>
}
/**
* Returns a string representation of the last seen date
*
* @return
* @return a string representation of the last seen date
*/
@NotNull
public String getLastSeenString()
{
return getLastSeenString(null);
}
/**
*
* @param viewer the Player viewing the last seen
* @return a string representation of the last seen date
*/
public String getLastSeenString(@Nullable Player viewer) {
if (toPlayer() != null) {
return lang("online", viewer);
}
return new java.text.SimpleDateFormat("MMM dd, ''yy h:mm a").format(new Date(this.lastSeen));
}
@@ -549,16 +589,16 @@ public class ClanPlayer implements Serializable, Comparable<ClanPlayer>
*/
public String getPackedPastClans()
{
String PackedPastClans = "";
String packedPastClans = "";
Set<String> pt = getPastClans();
for (String pastClan : pt)
{
PackedPastClans += pastClan + "|";
packedPastClans += pastClan + "|";
}
return Helper.stripTrailing(PackedPastClans, "|");
return Helper.stripTrailing(packedPastClans, "|");
}
/**
@@ -592,28 +632,39 @@ public class ClanPlayer implements Serializable, Comparable<ClanPlayer>
}
/**
* Returns a separator delimited string with the color tags for all past clans this player has been in
*
* @param sep
* @return
* @param sep the separator
* @return a separator delimited string with the color tags for all past clans this player has been in
*/
public String getPastClansString(String sep)
@NotNull
public String getPastClansString(@NotNull String sep)
{
String out = "";
return getPastClansString(sep, null);
}
/**
*
* @param sep the separator
* @param viewer the Player viewing the clan's string
* @return a separator delimited string with the color tags for all past clans this player has been in
*/
@NotNull
public String getPastClansString(String sep, @Nullable Player viewer) {
StringBuilder out = new StringBuilder();
for (String pastClan : getPastClans())
{
out += pastClan + sep;
out.append(pastClan).append(sep);
}
out = Helper.stripTrailing(out, sep);
out = new StringBuilder(Helper.stripTrailing(out.toString(), sep));
if (out.trim().isEmpty())
if (out.toString().trim().isEmpty())
{
return SimpleClans.getInstance().getLang("none");
return lang("none", viewer);
}
return out;
return out.toString();
}
/**
@@ -628,12 +679,58 @@ public class ClanPlayer implements Serializable, Comparable<ClanPlayer>
// return pc;
return pastClans;
}
/**
* Returns a map containing the time the player resigned from certain clans
*
* @return the resign times
*/
public Map<String, Long> getResignTimes() {
return resignTimes;
}
/**
* Returns the time in millis when the player resigned from the clan
*
* @param tag
* @return the time in millis
*/
public Long getResignTime(String tag) {
return resignTimes.get(tag);
}
/**
* Sets the resign times (does not update to db)
*
* @param resignTimes
*/
public void setResignTimes(Map<String, Long> resignTimes) {
if (resignTimes != null) {
final int cooldown = SimpleClans.getInstance().getSettingsManager().getRejoinCooldown();
resignTimes.forEach((k, v) -> {
long timePassed = Instant.ofEpochMilli(v).until(Instant.now(), ChronoUnit.MINUTES);
if (timePassed < cooldown) {
this.resignTimes.put(k, v);
}
});
}
}
/**
* Adds the clan to the resign times map
*
* @param tag
*/
public void addResignTime(String tag) {
if (tag != null) resignTimes.put(tag, System.currentTimeMillis());
}
/**
* Returns this player's clan
*
* @return the clan
*/
@Nullable
public Clan getClan()
{
return clan;
@@ -708,7 +805,8 @@ public class ClanPlayer implements Serializable, Comparable<ClanPlayer>
*
* @return the flags
*/
public String getFlags()
@SuppressWarnings("unchecked")
public String getFlags()
{
JSONObject json = new JSONObject();
@@ -916,16 +1014,60 @@ public class ClanPlayer implements Serializable, Comparable<ClanPlayer>
return useChatShortcut;
}
public String getRankDisplayName() {
if (clan != null) {
Rank r = clan.getRank(rank);
if (r != null) {
return r.getDisplayName();
}
}
return "";
}
/**
* Gets the rank id
*
* @return
*/
public String getRankId() {
return rank;
}
/**
* Gets the rank displayname
*
* @return
*/
@Deprecated
public String getRank()
{
return rank;
return getRankDisplayName();
}
/**
* Sets the rank id
*
* @param rank the rank id
*/
public void setRank(String rank)
{
if (rank == null) {
rank = "";
}
this.rank = rank;
}
public @NotNull Locale getLocale() {
if (locale == null) {
return SimpleClans.getInstance().getSettingsManager().getLanguage();
}
return locale;
}
public void setLocale(@Nullable Locale locale) {
this.locale = locale;
}
public enum Channel
{
CLAN,
@@ -933,7 +1075,7 @@ public class ClanPlayer implements Serializable, Comparable<ClanPlayer>
NONE
}
public Player toPlayer()
public @Nullable Player toPlayer()
{
if (this.uniqueId != null)
{
@@ -1,138 +1,194 @@
package net.sacredlabyrinth.phaed.simpleclans;
import java.sql.Timestamp;
import java.util.Calendar;
import java.util.Date;
/**
* @author phaed
*/
public class Dates {
private Dates() {
}
/**
* @param date1
* @param date2
* @return
*/
public static double differenceInMonths(Timestamp date1, Timestamp date2) {
return differenceInMonths(new Date(date1.getTime()), new Date(date2.getTime()));
}
/**
* @param date1
* @param date2
* @return
*/
public static double differenceInYears(Timestamp date1, Timestamp date2) {
return differenceInYears(new Date(date1.getTime()), new Date(date2.getTime()));
}
/**
* @param date1
* @param date2
* @return
*/
public static double differenceInDays(Timestamp date1, Timestamp date2) {
return differenceInDays(new Date(date1.getTime()), new Date(date2.getTime()));
}
/**
* @param date1
* @param date2
* @return
*/
public static double differenceInHours(Timestamp date1, Timestamp date2) {
return differenceInHours(new Date(date1.getTime()), new Date(date2.getTime()));
}
/**
* @param date1
* @param date2
* @return
*/
public static double differenceInMinutes(Timestamp date1, Timestamp date2) {
return differenceInMinutes(new Date(date1.getTime()), new Date(date2.getTime()));
}
/**
* @param date1
* @param date2
* @return
*/
public static double differenceInSeconds(Timestamp date1, Timestamp date2) {
return differenceInSeconds(new Date(date1.getTime()), new Date(date2.getTime()));
}
private static double differenceInMilliseconds(Timestamp date1, Timestamp date2) {
return differenceInMilliseconds(new Date(date1.getTime()), new Date(date2.getTime()));
}
/**
* @param date1
* @param date2
* @return
*/
public static double differenceInMonths(Date date1, Date date2) {
return differenceInYears(date1, date2) * 12;
}
/**
* @param date1
* @param date2
* @return
*/
public static double differenceInYears(Date date1, Date date2) {
double days = differenceInDays(date1, date2);
return days / 365.2425;
}
/**
* @param date1
* @param date2
* @return
*/
public static double differenceInDays(Date date1, Date date2) {
return differenceInHours(date1, date2) / 24.0;
}
/**
* @param date1
* @param date2
* @return
*/
public static double differenceInHours(Date date1, Date date2) {
return differenceInMinutes(date1, date2) / 60.0;
}
/**
* @param date1
* @param date2
* @return
*/
public static double differenceInMinutes(Date date1, Date date2) {
return differenceInSeconds(date1, date2) / 60.0;
}
/**
* @param date1
* @param date2
* @return
*/
public static double differenceInSeconds(Date date1, Date date2) {
return differenceInMilliseconds(date1, date2) / 1000.0;
}
private static double differenceInMilliseconds(Date date1, Date date2) {
return Math.abs(getTimeInMilliseconds(date1) - getTimeInMilliseconds(date2));
}
private static long getTimeInMilliseconds(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.getTimeInMillis() + cal.getTimeZone().getOffset(cal.getTimeInMillis());
}
}
package net.sacredlabyrinth.phaed.simpleclans;
import java.sql.Timestamp;
import java.util.Calendar;
import java.util.Date;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
/**
* @author phaed
*/
public class Dates {
private Dates() {
}
/**
* @param date1
* @param date2
* @return
*/
public static double differenceInMonths(Timestamp date1, Timestamp date2) {
return differenceInMonths(new Date(date1.getTime()), new Date(date2.getTime()));
}
/**
* @param date1
* @param date2
* @return
*/
public static double differenceInYears(Timestamp date1, Timestamp date2) {
return differenceInYears(new Date(date1.getTime()), new Date(date2.getTime()));
}
/**
* @param date1
* @param date2
* @return
*/
public static double differenceInDays(Timestamp date1, Timestamp date2) {
return differenceInDays(new Date(date1.getTime()), new Date(date2.getTime()));
}
/**
* @param date1
* @param date2
* @return
*/
public static double differenceInHours(Timestamp date1, Timestamp date2) {
return differenceInHours(new Date(date1.getTime()), new Date(date2.getTime()));
}
/**
* @param date1
* @param date2
* @return
*/
public static double differenceInMinutes(Timestamp date1, Timestamp date2) {
return differenceInMinutes(new Date(date1.getTime()), new Date(date2.getTime()));
}
/**
* @param date1
* @param date2
* @return
*/
public static double differenceInSeconds(Timestamp date1, Timestamp date2) {
return differenceInSeconds(new Date(date1.getTime()), new Date(date2.getTime()));
}
/**
* @param date1
* @param date2
* @return
*/
public static double differenceInMonths(Date date1, Date date2) {
return differenceInYears(date1, date2) * 12;
}
/**
* @param date1
* @param date2
* @return
*/
public static double differenceInYears(Date date1, Date date2) {
double days = differenceInDays(date1, date2);
return days / 365.2425;
}
/**
* @param date1
* @param date2
* @return
*/
public static double differenceInDays(Date date1, Date date2) {
return differenceInHours(date1, date2) / 24.0;
}
/**
* @param date1
* @param date2
* @return
*/
public static double differenceInHours(Date date1, Date date2) {
return differenceInMinutes(date1, date2) / 60.0;
}
/**
* @param date1
* @param date2
* @return
*/
public static double differenceInMinutes(Date date1, Date date2) {
return differenceInSeconds(date1, date2) / 60.0;
}
/**
* @param date1
* @param date2
* @return
*/
public static double differenceInSeconds(Date date1, Date date2) {
return differenceInMilliseconds(date1, date2) / 1000.0;
}
private static double differenceInMilliseconds(Date date1, Date date2) {
return Math.abs(getTimeInMilliseconds(date1) - getTimeInMilliseconds(date2));
}
private static long getTimeInMilliseconds(Date date) {
Calendar cal = Calendar.getInstance();
cal.setTime(date);
return cal.getTimeInMillis() + cal.getTimeZone().getOffset(cal.getTimeInMillis());
}
/**
* Returns the string representation of the amount of time labeled as days, hours, minutes, seconds
* @author RoboMWM, LaxWasHere
* @param seconds the time in seconds
* @param depth Max amount of detail (e.g. only display days and hours if set to 1 and seconds > 1 day)
* @return
*/
public static String formatTime(Long seconds, int depth)
{
SimpleClans plugin = SimpleClans.getInstance();
if (seconds == null || seconds < 1) {
return lang("bb.moments");
}
if (seconds < 60) {
return seconds + lang("bb.seconds");
}
if (seconds < 3600) {
long count = (long) Math.ceil(seconds / 60f);
String res;
if (count > 1) {
res = count + lang("bb.minutes");
} else {
res = lang("bb.one.minute");
}
long remaining = seconds % 60;
if (depth > 0 && remaining >= 5) {
return res + ", " + formatTime(remaining, --depth);
}
return res;
}
if (seconds < 86400) {
long count = (long) Math.ceil(seconds / 3600f);
String res;
if (count > 1) {
res = count + lang("bb.hours");
} else {
res = lang("bb.one.hour");
}
if (depth > 0) {
return res + ", " + formatTime(seconds % 3600, --depth);
}
return res;
}
long count = (long) Math.ceil(seconds / 86400f);
String res;
if (count > 1) {
res = count + lang("bb.days");
} else {
res = lang("bb.one.day");
}
if (depth > 0) {
return res + ", " + formatTime(seconds % 86400, --depth);
}
return res;
}
}
@@ -1,18 +1,29 @@
package net.sacredlabyrinth.phaed.simpleclans;
import net.sacredlabyrinth.phaed.simpleclans.utils.KDRFormat;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
import java.io.IOException;
import java.lang.reflect.Method;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.DecimalFormat;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.temporal.ChronoUnit;
import java.util.*;
import java.util.Map.Entry;
import java.util.regex.Matcher;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
/**
@@ -32,6 +43,153 @@ public class Helper {
}
}
/**
* @deprecated use {@link KDRFormat}
*/
@Deprecated
public static String formatKDR(float kdr) {
DecimalFormat formatter = new DecimalFormat("#.#");
return formatter.format(kdr);
}
@NotNull
public static Locale forLanguageTag(@Nullable String languageTag) {
Locale defaultLanguage = SimpleClans.getInstance().getSettingsManager().getLanguage();
if (languageTag == null) {
return defaultLanguage;
}
return Locale.forLanguageTag(languageTag);
}
/**
* Gets the Player locale
*
* @param player the player
* @return the locale
*/
@Nullable
public static Locale getLocale(@NotNull Player player) {
ClanPlayer clanPlayer = SimpleClans.getInstance().getClanManager().getAnyClanPlayer(player.getUniqueId());
if (clanPlayer != null) {
return clanPlayer.getLocale();
}
return null;
}
/**
* Converts a JSON String to a list of Ranks
*
* @param json
* @return a list of ranks or null if the JSON String is null/empty
*/
public static List<Rank> ranksFromJson(String json) {
if (json != null && !json.isEmpty()) {
try {
JSONObject jo = (JSONObject) new JSONParser().parse(json);
Object ranks = jo.get("ranks");
if (ranks != null) {
JSONArray array = (JSONArray) ranks;
List<Rank> rankList = new ArrayList<>();
for (Object o : array) {
JSONObject r = (JSONObject) o;
String name = (String) r.get("name");
String displayName = (String) r.get("displayName");
Set<String> permissions = new HashSet<>();
for (Object p : (JSONArray) r.get("permissions")) {
permissions.add((String) p);
}
Rank rank = new Rank(name, displayName, permissions);
rankList.add(rank);
}
return rankList;
}
} catch (ParseException e) {
e.printStackTrace();
}
}
return null;
}
/**
* Converts a list of Ranks to a JSON String
*
* @param ranks
* @return a JSON String
*/
@SuppressWarnings("unchecked")
public static String ranksToJson(List<Rank> ranks) {
if (ranks == null)
ranks = new ArrayList<Rank>();
JSONArray array = new JSONArray();
for (Rank rank : ranks) {
JSONObject o = new JSONObject();
o.put("name", rank.getName());
o.put("displayName", rank.getDisplayName());
JSONArray permArray = new JSONArray();
for (String p : rank.getPermissions()) {
permArray.add(p);
}
o.put("permissions", permArray);
array.add(o);
}
JSONObject object = new JSONObject();
object.put("ranks", array);
return object.toJSONString();
}
/**
* Converts a resign times map to a JSON String
*
* @param resignTimes
* @return a JSON String
*/
public static String resignTimesToJson(Map<String, Long> resignTimes) {
return JSONObject.toJSONString(resignTimes);
}
/**
* Converts a JSON String to a resign times map
*
* @param json JSON String
* @return a map
*/
@SuppressWarnings("unchecked")
public static Map<String, Long> resignTimesFromJson(String json) {
if (json != null) {
try {
return (Map<String, Long>) new JSONParser().parse(json);
} catch (ParseException e) {
e.printStackTrace();
}
}
return null;
}
/**
* Returns the delay in seconds to the specified hour and minute.
*
* @param hour hour
* @param minute minute
* @return the delay in seconds
*/
public static long getDelayTo(int hour, int minute) {
if (hour < 0 || hour > 23) hour = 1;
if (minute < 0 || minute > 59) minute = 0;
LocalDateTime now = LocalDateTime.now();
LocalDateTime d = LocalDateTime.of(now.toLocalDate(), LocalTime.of(hour, minute));
long delay;
if (now.isAfter(d)) {
delay = now.until(d.plusDays(1), ChronoUnit.SECONDS);
} else {
delay = now.until(d, ChronoUnit.SECONDS);
}
return delay;
}
/**
* Get a players full color name if he is online
*
@@ -210,12 +368,17 @@ public class Helper {
* @param hexValue
* @return
*/
public static String toColor(String hexValue) {
@NotNull
public static String toColor(@Nullable String hexValue) {
if (hexValue == null) {
return "";
}
return ChatColor.getByChar(hexValue).toString();
ChatColor color = ChatColor.getByChar(hexValue);
if (color == null) {
return "";
}
return color.toString();
}
/**
@@ -265,6 +428,20 @@ public class Helper {
public static String[] toArray(List<String> list) {
return list.toArray(new String[list.size()]);
}
/**
* Converts the Permission values array to a String array
*
* @return
*/
public static String[] fromPermissionArray() {
RankPermission[] permissions = RankPermission.values();
String[] sa = new String[permissions.length];
for (int i = 0; i < permissions.length; i++) {
sa[i] = permissions[i].toString();
}
return sa;
}
/**
* Removes first item from a string array
@@ -348,9 +525,9 @@ public class Helper {
* @return
*/
public static String stripColors(String msg) {
String out = msg.replaceAll("[&][0-9a-f]", "");
String out = msg.replaceAll("[&][0-9a-fk-or]", "");
out = out.replaceAll(String.valueOf((char) 194), "");
return out.replaceAll("[\u00a7][0-9a-f]", "");
return out.replaceAll("[\u00a7][0-9a-fk-or]", "");
}
/*
@@ -405,7 +582,7 @@ public class Helper {
String out = msg;
String first = msg.substring(0, sep.length());
String last = msg.substring(msg.length() - sep.length(), msg.length());
String last = msg.substring(msg.length() - sep.length());
if (first.equals(sep)) {
out = msg.substring(sep.length());
@@ -516,7 +693,7 @@ public class Helper {
* @param str
* @return
*/
public static String escapeQuotes(String str) {
public static String escapeQuotes(@Nullable String str) {
if (str == null) {
return "";
}
@@ -579,7 +756,7 @@ public class Helper {
}
return result;
}
public static boolean isVanished(Player player) {
if (player != null && player.hasMetadata("vanished") && !player.getMetadata("vanished").isEmpty()) {
return player.getMetadata("vanished").get(0).asBoolean();
@@ -587,7 +764,8 @@ public class Helper {
return false;
}
public static Collection<Player> getOnlinePlayers() {
@SuppressWarnings("unchecked")
public static Collection<Player> getOnlinePlayers() {
try {
Method method = Bukkit.class.getDeclaredMethod("getOnlinePlayers");
Object players = method.invoke(null);
@@ -605,11 +783,7 @@ public class Helper {
}
public static Player getPlayer(String playerName) {
if (SimpleClans.getInstance().hasUUID()) {
return SimpleClans.getInstance().getServer().getPlayer(UUIDMigration.getForcedPlayerUUID(playerName));
}
return SimpleClans.getInstance().getServer().getPlayer(playerName);
return SimpleClans.getInstance().getServer().getPlayer(UUIDMigration.getForcedPlayerUUID(playerName));
}
/**
@@ -625,25 +799,25 @@ public class Helper {
String leaderColor = sm.getAllyChatLeaderColor();
String memberColor = sm.getAllyChatMemberColor();
String rank = cp.getRank().isEmpty() ? null : ChatColor.translateAlternateColorCodes('&', cp.getRank());
String rankFormat = rank != null ? ChatColor.translateAlternateColorCodes('&', sm.getAllyChatRank()).replaceAll("%rank%", rank) : "";
String rank = cp.getRankId().isEmpty() ? null : ChatColor.translateAlternateColorCodes('&', cp.getRankDisplayName());
String rankFormat = rank != null ? ChatColor.translateAlternateColorCodes('&', sm.getAllyChatRank()).replace("%rank%", rank) : "";
String message = replacePlaceholders(sm, cp, leaderColor, memberColor, rankFormat, msg);
String message = replacePlaceholders(sm.getAllyChatFormat(), cp, leaderColor, memberColor, rankFormat, msg);
if (placeholders != null) {
for (Entry<String, String> e : placeholders.entrySet()) {
message = message.replaceAll("%"+e.getKey()+"%", e.getValue());
message = message.replace("%"+e.getKey()+"%", e.getValue());
}
}
return message;
}
private static String replacePlaceholders(SettingsManager sm, ClanPlayer cp, String leaderColor, String memberColor, String rankFormat, String msg) {
String message = ChatColor.translateAlternateColorCodes('&', sm.getAllyChatFormat())
.replaceAll("%clan%", cp.getClan().getColorTag())
.replaceAll("%nick-color%", (cp.isLeader() ? leaderColor : memberColor))
.replaceAll("%player%", cp.getName())
.replaceAll("%rank%", rankFormat)
.replaceAll("%message%", Matcher.quoteReplacement(msg));
private static String replacePlaceholders(String messageFormat, ClanPlayer cp, String leaderColor, String memberColor, String rankFormat, String msg) {
String message = ChatColor.translateAlternateColorCodes('&', messageFormat)
.replace("%clan%", cp.getClan().getColorTag())
.replace("%nick-color%", (cp.isLeader() ? leaderColor : memberColor))
.replace("%player%", cp.getName())
.replace("%rank%", rankFormat)
.replace("%message%", msg);
return message;
}
@@ -660,14 +834,14 @@ public class Helper {
String leaderColor = sm.getClanChatLeaderColor();
String memberColor = sm.getClanChatMemberColor();
String rank = cp.getRank().isEmpty() ? null : ChatColor.translateAlternateColorCodes('&', cp.getRank());
String rankFormat = rank != null ? ChatColor.translateAlternateColorCodes('&', sm.getClanChatRank()).replaceAll("%rank%", rank) : "";
String rank = cp.getRankId().isEmpty() ? null : ChatColor.translateAlternateColorCodes('&', cp.getRankDisplayName());
String rankFormat = rank != null ? ChatColor.translateAlternateColorCodes('&', sm.getClanChatRank()).replace("%rank%", rank) : "";
String message = replacePlaceholders(sm, cp, leaderColor, memberColor, rankFormat, msg);
String message = replacePlaceholders(sm.getClanChatFormat(), cp, leaderColor, memberColor, rankFormat, msg);
if (placeholders != null) {
for (Entry<String, String> e : placeholders.entrySet()) {
message = message.replaceAll("%"+e.getKey()+"%", e.getValue());
message = message.replace("%"+e.getKey()+"%", e.getValue());
}
}
return message;
@@ -0,0 +1,42 @@
package net.sacredlabyrinth.phaed.simpleclans;
import java.time.LocalDateTime;
public class Kill {
private final ClanPlayer killer;
private final ClanPlayer victim;
private final LocalDateTime time;
public Kill(ClanPlayer killer, ClanPlayer victim, LocalDateTime time) {
this.killer = killer;
this.victim = victim;
this.time = time;
}
public ClanPlayer getKiller() {
return killer;
}
public ClanPlayer getVictim() {
return victim;
}
public LocalDateTime getTime() {
return time;
}
public enum Type {
CIVILIAN("c"), RIVAL("r"), NEUTRAL("n");
Type(String shortName) {
this.shortName = shortName;
}
private final String shortName;
public String getShortname() {
return shortName;
}
}
}
@@ -0,0 +1,5 @@
package net.sacredlabyrinth.phaed.simpleclans;
public enum PermissionLevel {
LEADER, TRUSTED
}
@@ -1,46 +1,53 @@
package net.sacredlabyrinth.phaed.simpleclans;
import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabCompleter;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
public class PlayerNameTabCompleter implements TabCompleter {
private SimpleClans plugin;
private final SimpleClans plugin;
public PlayerNameTabCompleter() {
plugin = SimpleClans.getInstance();
}
@Override
public List<String> onTabComplete(CommandSender commandSender, Command command, String s, String[] strings) {
public List<String> onTabComplete(@NotNull CommandSender commandSender, Command command, @NotNull String s, String[] strings) {
if (command.getName().equalsIgnoreCase(plugin.getSettingsManager().getCommandClan())) {
if (strings.length < 2) {
return null;
}
Player player = null;
if (commandSender instanceof Player) {
player = (Player) commandSender;
}
if (strings[0].equalsIgnoreCase(plugin.getLang("lookup.command")) ||
strings[0].equalsIgnoreCase(plugin.getLang("ban.command")) ||
strings[0].equalsIgnoreCase(plugin.getLang("unban.command")) ||
strings[0].equalsIgnoreCase(plugin.getLang("kick.command")) ||
strings[0].equalsIgnoreCase(plugin.getLang("trust.command")) ||
strings[0].equalsIgnoreCase(plugin.getLang("untrust.command")) ||
strings[0].equalsIgnoreCase(plugin.getLang("promote.command")) ||
strings[0].equalsIgnoreCase(plugin.getLang("demote.command")) ||
strings[0].equalsIgnoreCase(plugin.getLang("setrank.command")) ||
strings[0].equalsIgnoreCase(plugin.getLang("place.command")) ||
strings[0].equalsIgnoreCase(plugin.getLang("invite.command")) ||
strings[0].equalsIgnoreCase(plugin.getLang("kills.command"))) {
if (strings[0].equalsIgnoreCase(lang("lookup.command", player)) ||
strings[0].equalsIgnoreCase(lang("ban.command", player)) ||
strings[0].equalsIgnoreCase(lang("unban.command", player)) ||
strings[0].equalsIgnoreCase(lang("kick.command", player)) ||
strings[0].equalsIgnoreCase(lang("trust.command", player)) ||
strings[0].equalsIgnoreCase(lang("untrust.command", player)) ||
strings[0].equalsIgnoreCase(lang("promote.command", player)) ||
strings[0].equalsIgnoreCase(lang("demote.command", player)) ||
strings[0].equalsIgnoreCase(lang("setrank.command", player)) ||
strings[0].equalsIgnoreCase(lang("place.command", player)) ||
strings[0].equalsIgnoreCase(lang("invite.command", player)) ||
strings[0].equalsIgnoreCase(lang("kills.command", player))) {
List<String> list = new ArrayList<>();
for (OfflinePlayer player : plugin.getServer().getOnlinePlayers()) {
if (player.getName().startsWith(strings[1])) {
list.add(player.getName());
for (Player p : plugin.getServer().getOnlinePlayers()) {
if (p.getName().startsWith(strings[1])) {
list.add(p.getName());
}
}
@@ -0,0 +1,105 @@
package net.sacredlabyrinth.phaed.simpleclans;
import java.util.HashSet;
import java.util.Set;
/**
*
* @author RoinujNosde
*/
public class Rank implements Comparable<Rank> {
private String name;
private String displayName;
private Set<String> permissions;
public Rank(String name) {
setName(name);
permissions = new HashSet<String>();
setDisplayName(displayName);
}
public Rank(String name, String displayName, Set<String> permissions) {
setName(name);
setDisplayName(displayName);
setPermissions(permissions);
}
public void setName(String name) {
if (name == null || name.isEmpty()) {
throw new IllegalArgumentException("name cannot be null or empty");
}
this.name = name;
}
public void setDisplayName(String displayName) {
if (displayName == null || displayName.isEmpty()) {
displayName = name;
}
this.displayName = displayName;
}
public void setPermissions(Set<String> permissions) {
if (permissions == null) {
permissions = new HashSet<String>();
}
this.permissions = permissions;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Rank other = (Rank) obj;
if (name == null) {
if (other.name != null)
return false;
} else if (!name.equals(other.name))
return false;
return true;
}
/**
* Returns the rank's permissions
*
* @return
*/
public Set<String> getPermissions() {
return permissions;
}
/**
* Returns the rank's display name
*
* @return
*/
public String getDisplayName() {
return displayName;
}
/**
* Returns the rank's name
*
* @return
*/
public String getName() {
return name;
}
@Override
public int compareTo(Rank other) {
return Integer.compare(permissions.size(), other.permissions.size());
}
}
@@ -0,0 +1,88 @@
package net.sacredlabyrinth.phaed.simpleclans;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.Nullable;
/**
*
* @author RoinujNosde
*
*/
public enum RankPermission {
ALLY_ADD("simpleclans.leader.ally", PermissionLevel.LEADER),
ALLY_CHAT("simpleclans.member.ally", PermissionLevel.TRUSTED),
ALLY_REMOVE("simpleclans.leader.ally", PermissionLevel.LEADER),
BANK_BALANCE("simpleclans.member.bank", PermissionLevel.TRUSTED),
BANK_DEPOSIT("simpleclans.member.bank", PermissionLevel.LEADER),
BANK_WITHDRAW("simpleclans.member.bank", PermissionLevel.LEADER),
BB_ADD("simpleclans.member.bb-add", PermissionLevel.TRUSTED),
BB_CLEAR("simpleclans.leader.bb-clear", PermissionLevel.LEADER),
COORDS("simpleclans.member.coords", PermissionLevel.TRUSTED),
FEE_ENABLE("simpleclans.leader.fee", PermissionLevel.LEADER),
FEE_SET("simpleclans.leader.fee", PermissionLevel.LEADER),
HOME_REGROUP("simpleclans.leader.home-regroup", PermissionLevel.LEADER),
HOME_SET("simpleclans.leader.home-set", PermissionLevel.LEADER),
HOME_TP("simpleclans.member.home", PermissionLevel.TRUSTED),
INVITE("simpleclans.leader.invite", PermissionLevel.LEADER),
KICK("simpleclans.leader.kick", PermissionLevel.LEADER),
MODTAG("simpleclans.leader.modtag", PermissionLevel.LEADER),
RANK_DISPLAYNAME("simpleclans.leader.rank.setdisplayname", PermissionLevel.LEADER),
RANK_LIST("simpleclans.leader.rank.list", PermissionLevel.LEADER),
RIVAL_ADD("simpleclans.leader.rival", PermissionLevel.LEADER),
RIVAL_REMOVE("simpleclans.leader.rival", PermissionLevel.LEADER),
WAR_END("simpleclans.leader.war", PermissionLevel.LEADER),
WAR_START("simpleclans.leader.war", PermissionLevel.LEADER),
STATS("simpleclans.member.stats", PermissionLevel.TRUSTED),
VITALS("simpleclans.member.vitals", PermissionLevel.TRUSTED),
KILLS("simpleclans.member.kills", PermissionLevel.TRUSTED),
DESCRIPTION("simpleclans.leader.description", PermissionLevel.LEADER),
MOSTKILLED("simpleclans.mod.mostkilled", PermissionLevel.TRUSTED),
FRIENDLYFIRE("simpleclans.leader.ff", PermissionLevel.LEADER),
SETBANNER("simpleclans.leader.setbanner", PermissionLevel.LEADER);
private final String bukkitPermission;
private final PermissionLevel permissionLevel;
RankPermission(String bukkitPermission, PermissionLevel permissionLevel) {
this.bukkitPermission = bukkitPermission;
this.permissionLevel = permissionLevel;
}
/**
*
* @return the Bukkit equivalent to this rank permission
*/
public String getBukkitPermission() {
return bukkitPermission;
}
/**
*
* @return the PermissionLevel
*
*/
public PermissionLevel getPermissionLevel() {
return permissionLevel;
}
@Override
public String toString() {
return super.toString().replace("_", ".").toLowerCase();
}
/**
*
* @param permission the permission
* @return true if this is a valid rank permission
*/
@Contract("null -> false")
public static boolean isValid(@Nullable String permission) {
for (RankPermission p : values()) {
if (p.toString().equalsIgnoreCase(permission)) {
return true;
}
}
return false;
}
}
@@ -1,186 +1,298 @@
package net.sacredlabyrinth.phaed.simpleclans;
import net.sacredlabyrinth.phaed.simpleclans.executors.*;
import net.sacredlabyrinth.phaed.simpleclans.listeners.SCEntityListener;
import net.sacredlabyrinth.phaed.simpleclans.listeners.SCPlayerListener;
import net.sacredlabyrinth.phaed.simpleclans.managers.*;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
import org.bukkit.plugin.java.JavaPlugin;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* @author Phaed
*/
public class SimpleClans extends JavaPlugin {
private ArrayList<String> messages = new ArrayList<>();
private static SimpleClans instance;
private static final Logger logger = Logger.getLogger("Minecraft");
private ClanManager clanManager;
private RequestManager requestManager;
private StorageManager storageManager;
private SettingsManager settingsManager;
private PermissionsManager permissionsManager;
private TeleportManager teleportManager;
private LanguageManager languageManager;
private ChatFormatMigration chatFormatMigration;
private boolean hasUUID;
/**
* @return the logger
*/
public static Logger getLog() {
return logger;
}
/**
* @param msg
*/
public static void debug(String msg) {
if (getInstance().getSettingsManager().isDebugging()) {
logger.log(Level.INFO, msg);
}
}
/**
* @return the instance
*/
public static SimpleClans getInstance() {
return instance;
}
public static void log(String msg, Object... arg) {
if (arg == null || arg.length == 0) {
logger.log(Level.INFO, msg);
} else {
logger.log(Level.INFO, MessageFormat.format(msg, arg));
}
}
@Override
public void onEnable() {
instance = this;
settingsManager = new SettingsManager();
this.hasUUID = UUIDMigration.canReturnUUID();
languageManager = new LanguageManager();
permissionsManager = new PermissionsManager();
requestManager = new RequestManager();
clanManager = new ClanManager();
storageManager = new StorageManager();
teleportManager = new TeleportManager();
chatFormatMigration = new ChatFormatMigration();
chatFormatMigration.migrateAllyChat();
chatFormatMigration.migrateClanChat();
logger.info(MessageFormat.format(getLang("version.loaded"), getDescription().getName(), getDescription().getVersion()));
getServer().getPluginManager().registerEvents(new SCEntityListener(), this);
getServer().getPluginManager().registerEvents(new SCPlayerListener(), this);
permissionsManager.loadPermissions();
CommandHelper.registerCommand(getSettingsManager().getCommandClan());
CommandHelper.registerCommand(getSettingsManager().getCommandAccept());
CommandHelper.registerCommand(getSettingsManager().getCommandDeny());
CommandHelper.registerCommand(getSettingsManager().getCommandMore());
CommandHelper.registerCommand(getSettingsManager().getCommandAlly());
CommandHelper.registerCommand(getSettingsManager().getCommandGlobal());
getCommand(getSettingsManager().getCommandClan()).setExecutor(new ClanCommandExecutor());
getCommand(getSettingsManager().getCommandAccept()).setExecutor(new AcceptCommandExecutor());
getCommand(getSettingsManager().getCommandDeny()).setExecutor(new DenyCommandExecutor());
getCommand(getSettingsManager().getCommandMore()).setExecutor(new MoreCommandExecutor());
getCommand(getSettingsManager().getCommandAlly()).setExecutor(new AllyCommandExecutor());
getCommand(getSettingsManager().getCommandGlobal()).setExecutor(new GlobalCommandExecutor());
getCommand(getSettingsManager().getCommandClan()).setTabCompleter(new PlayerNameTabCompleter());
logger.info("[SimpleClans] Online Mode: " + hasUUID); //TODO: Is this necessary?
logger.info("[SimpleClans] Modo Multithreading: " + SimpleClans.getInstance().getSettingsManager().getUseThreads());
logger.info("[SimpleClans] Modo BungeeCord: " + SimpleClans.getInstance().getSettingsManager().getUseBungeeCord());
}
@Override
public void onDisable() {
getServer().getScheduler().cancelTasks(this);
getStorageManager().closeConnection();
getPermissionsManager().savePermissions();
}
/**
* @return the clanManager
*/
public ClanManager getClanManager() {
return clanManager;
}
/**
* @return the requestManager
*/
public RequestManager getRequestManager() {
return requestManager;
}
/**
* @return the storageManager
*/
public StorageManager getStorageManager() {
return storageManager;
}
/**
* @return the settingsManager
*/
public SettingsManager getSettingsManager() {
return settingsManager;
}
/**
* @return the permissionsManager
*/
public PermissionsManager getPermissionsManager() {
return permissionsManager;
}
/**
* @param msg the path within the language file
* @return the lang
*/
public String getLang(String msg) {
return languageManager.get(msg);
}
public TeleportManager getTeleportManager() {
return teleportManager;
}
public List<String> getMessages() {
return messages;
}
/**
* @return the hasUUID
*/
public boolean hasUUID() {
return this.hasUUID;
}
/**
* @param trueOrFalse
*/
public void setUUID(boolean trueOrFalse) {
this.hasUUID = trueOrFalse;
}
public LanguageManager getLanguageManager() {
return languageManager;
}
}
package net.sacredlabyrinth.phaed.simpleclans;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bstats.bukkit.Metrics;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import net.sacredlabyrinth.phaed.simpleclans.executors.AcceptCommandExecutor;
import net.sacredlabyrinth.phaed.simpleclans.executors.AllyCommandExecutor;
import net.sacredlabyrinth.phaed.simpleclans.executors.ClanCommandExecutor;
import net.sacredlabyrinth.phaed.simpleclans.executors.DenyCommandExecutor;
import net.sacredlabyrinth.phaed.simpleclans.executors.GlobalCommandExecutor;
import net.sacredlabyrinth.phaed.simpleclans.executors.MoreCommandExecutor;
import net.sacredlabyrinth.phaed.simpleclans.language.LanguageMigration;
import net.sacredlabyrinth.phaed.simpleclans.language.LanguageResource;
import net.sacredlabyrinth.phaed.simpleclans.listeners.SCEntityListener;
import net.sacredlabyrinth.phaed.simpleclans.listeners.SCPlayerListener;
import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.PermissionsManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.PlaceholdersManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.RequestManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.StorageManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.TeleportManager;
import net.sacredlabyrinth.phaed.simpleclans.tasks.CollectFeeTask;
import net.sacredlabyrinth.phaed.simpleclans.tasks.CollectUpkeepTask;
import net.sacredlabyrinth.phaed.simpleclans.tasks.SaveDataTask;
import net.sacredlabyrinth.phaed.simpleclans.tasks.UpkeepWarningTask;
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryController;
import net.sacredlabyrinth.phaed.simpleclans.utils.ChatFormatMigration;
import net.sacredlabyrinth.phaed.simpleclans.utils.UpdateChecker;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
* @author Phaed
*/
public class SimpleClans extends JavaPlugin {
private final ArrayList<String> messages = new ArrayList<>();
private static SimpleClans instance;
private static LanguageResource languageResource;
private static final Logger logger = Logger.getLogger("Minecraft");
private ClanManager clanManager;
private RequestManager requestManager;
private StorageManager storageManager;
private SettingsManager settingsManager;
private PermissionsManager permissionsManager;
private TeleportManager teleportManager;
private boolean hasUUID;
/**
* @return the logger
*/
@Deprecated
public static Logger getLog() {
return logger;
}
/**
* @param msg
*/
public static void debug(String msg) {
if (getInstance().getSettingsManager().isDebugging()) {
logger.log(Level.INFO, msg);
}
}
/**
* @return the instance
*/
public static SimpleClans getInstance() {
return instance;
}
@Deprecated
public static void log(String msg, Object... arg) {
if (arg == null || arg.length == 0) {
logger.log(Level.INFO, msg);
} else {
logger.log(Level.INFO, MessageFormat.format(msg, arg));
}
}
@Override
public void onEnable() {
instance = this;
new LanguageMigration(this).migrate();
settingsManager = new SettingsManager();
languageResource = new LanguageResource();
this.hasUUID = UUIDMigration.canReturnUUID();
permissionsManager = new PermissionsManager();
requestManager = new RequestManager();
clanManager = new ClanManager();
storageManager = new StorageManager();
teleportManager = new TeleportManager();
ChatFormatMigration chatFormatMigration = new ChatFormatMigration();
chatFormatMigration.migrateAllyChat();
chatFormatMigration.migrateClanChat();
getServer().getPluginManager().registerEvents(new SCEntityListener(), this);
getServer().getPluginManager().registerEvents(new SCPlayerListener(), this);
getServer().getPluginManager().registerEvents(new InventoryController(), this);
permissionsManager.loadPermissions();
CommandHelper.registerCommand(getSettingsManager().getCommandClan());
CommandHelper.registerCommand(getSettingsManager().getCommandAccept());
CommandHelper.registerCommand(getSettingsManager().getCommandDeny());
CommandHelper.registerCommand(getSettingsManager().getCommandMore());
CommandHelper.registerCommand(getSettingsManager().getCommandAlly());
CommandHelper.registerCommand(getSettingsManager().getCommandGlobal());
getCommand(getSettingsManager().getCommandClan()).setExecutor(new ClanCommandExecutor());
getCommand(getSettingsManager().getCommandAccept()).setExecutor(new AcceptCommandExecutor());
getCommand(getSettingsManager().getCommandDeny()).setExecutor(new DenyCommandExecutor());
getCommand(getSettingsManager().getCommandMore()).setExecutor(new MoreCommandExecutor());
getCommand(getSettingsManager().getCommandAlly()).setExecutor(new AllyCommandExecutor());
getCommand(getSettingsManager().getCommandGlobal()).setExecutor(new GlobalCommandExecutor());
getCommand(getSettingsManager().getCommandClan()).setTabCompleter(new PlayerNameTabCompleter());
getLogger().info("Multithreading: " + SimpleClans.getInstance().getSettingsManager().getUseThreads());
getLogger().info("BungeeCord: " + SimpleClans.getInstance().getSettingsManager().getUseBungeeCord());
getLogger().info("Help us translate SimpleClans to your language! Access https://crowdin.com/project/simpleclans/");
startTasks();
startMetrics();
hookIntoPAPI();
new UpdateChecker(this).check();
}
private void hookIntoPAPI() {
if (getServer().getPluginManager().getPlugin("PlaceholderAPI") != null) {
getLogger().info("PlaceholderAPI found. Registering hook...");
new PlaceholdersManager(this).register();
}
}
private void startMetrics() {
Metrics metrics = new Metrics(this, 7131);
SettingsManager sm = getSettingsManager();
ClanManager cm = getClanManager();
String on = "enabled";
String off = "disabled";
metrics.addCustomChart(new Metrics.SingleLineChart("clans", () -> cm.getClans().size()));
metrics.addCustomChart(new Metrics.SingleLineChart("clan_players", () -> cm.getAllClanPlayers().size()));
metrics.addCustomChart(new Metrics.SimplePie("language", () -> sm.getLanguage().toString()));
metrics.addCustomChart(new Metrics.SimplePie("machine_language", () -> Locale.getDefault().toString()));
metrics.addCustomChart(new Metrics.SimplePie("language_chooser", () -> sm.isLanguagePerPlayer() ? on : off));
metrics.addCustomChart(new Metrics.SimplePie("database", () -> sm.isUseMysql() ? "MySQL" : "SQLite"));
metrics.addCustomChart(new Metrics.SimplePie("save_periodically", () -> sm.isSavePeriodically() ? on : off));
metrics.addCustomChart(new Metrics.SimplePie("save_interval", () -> String.valueOf(sm.getSaveInterval())));
metrics.addCustomChart(new Metrics.SimplePie("upkeep", () -> sm.isClanUpkeep() ? on : off));
metrics.addCustomChart(new Metrics.SimplePie("member_fee", () -> sm.isMemberFee() ? on : off));
metrics.addCustomChart(new Metrics.SimplePie("rejoin_cooldown", () -> sm.isRejoinCooldown() ? on : off));
metrics.addCustomChart(new Metrics.SimplePie("clan_verification", () -> sm.isRequireVerification() ? on : off));
metrics.addCustomChart(new Metrics.SimplePie("money_per_kill", () -> sm.isMoneyPerKill() ? on : off));
metrics.addCustomChart(new Metrics.SimplePie("threads", () -> sm.getUseThreads() ? on : off));
metrics.addCustomChart(new Metrics.SimplePie("bungeecord", () -> sm.getUseBungeeCord() ? on : off));
}
private void startTasks() {
if (getSettingsManager().isSavePeriodically()) {
new SaveDataTask().start();
}
if (getSettingsManager().isMemberFee()) {
new CollectFeeTask().start();
}
if (getSettingsManager().isClanUpkeep()) {
new CollectUpkeepTask().start();
new UpkeepWarningTask().start();
}
}
@Override
public void onDisable() {
getServer().getScheduler().cancelTasks(this);
if (getSettingsManager().isSavePeriodically()) {
getStorageManager().saveModified();
}
getStorageManager().closeConnection();
getPermissionsManager().savePermissions();
}
/**
* @return the clanManager
*/
public ClanManager getClanManager() {
return clanManager;
}
/**
* @return the requestManager
*/
public RequestManager getRequestManager() {
return requestManager;
}
/**
* @return the storageManager
*/
public StorageManager getStorageManager() {
return storageManager;
}
/**
* @return the settingsManager
*/
public SettingsManager getSettingsManager() {
return settingsManager;
}
/**
* @return the permissionsManager
*/
@NotNull
public PermissionsManager getPermissionsManager() {
return permissionsManager;
}
/**
* @param key the path within the language file
* @return the lang
*/
@Deprecated
public String getLang(@NotNull String key) {
return getLang(key, null);
}
@Deprecated
public String getLang(@NotNull String key, @Nullable Player player) {
return lang(key, player);
}
@NotNull
public static String lang(@NotNull String key, @Nullable Player player, Object... arguments) {
Locale locale = getInstance().getSettingsManager().getLanguage();
if (player != null && instance.getSettingsManager().isLanguagePerPlayer()) {
Locale playerLocale = Helper.getLocale(player);
if (playerLocale != null) {
locale = playerLocale;
}
}
return MessageFormat.format(
ChatColor.translateAlternateColorCodes(
'&', languageResource.getLang(key, locale)), arguments);
}
@NotNull
public static String lang(@NotNull String key, @NotNull CommandSender sender, Object... arguments) {
if (sender instanceof Player) {
return lang(key, (Player) sender, arguments);
} else {
return lang(key, null, arguments);
}
}
@NotNull
public static String lang(@NotNull String key, Object... arguments) {
return lang(key, null, arguments);
}
public TeleportManager getTeleportManager() {
return teleportManager;
}
public List<String> getMessages() {
return messages;
}
/**
* @return the hasUUID
*/
@Deprecated
public boolean hasUUID() {
return this.hasUUID;
}
/**
* @param trueOrFalse
*/
public void setUUID(boolean trueOrFalse) {
this.hasUUID = trueOrFalse;
}
}
@@ -7,7 +7,6 @@ import java.util.UUID;
public class TeleportState {
private UUID playerUniqueId;
private String playerName;
private Location playerLocation;
private Location destination;
private int counter;
@@ -17,7 +16,6 @@ public class TeleportState {
public TeleportState(Player player, Location dest, String clanName) {
this.destination = dest;
this.playerLocation = player.getLocation();
this.playerName = player.getName();
this.clanName = clanName;
this.counter = SimpleClans.getInstance().getSettingsManager().getWaitSecs();
this.playerUniqueId = player.getUniqueId();
@@ -50,11 +48,7 @@ public class TeleportState {
* @return
*/
public Player getPlayer() {
if (SimpleClans.getInstance().hasUUID()) {
return SimpleClans.getInstance().getServer().getPlayer(this.playerUniqueId);
} else {
return SimpleClans.getInstance().getServer().getPlayer(this.playerName);
}
return SimpleClans.getInstance().getServer().getPlayer(this.playerUniqueId);
}
/**
@@ -4,6 +4,7 @@ import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
@@ -29,12 +30,12 @@ public class AlliancesCommand {
String subColor = plugin.getSettingsManager().getPageSubTitleColor();
if (arg.length != 0) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.clan.alliances"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.clan.alliances", player), plugin.getSettingsManager().getCommandClan()));
return;
}
if (!plugin.getPermissionsManager().has(player, "simpleclans.anyone.alliances")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions", player));
return;
}
@@ -44,11 +45,11 @@ public class AlliancesCommand {
ChatBlock chatBlock = new ChatBlock();
ChatBlock.sendBlank(player);
ChatBlock.saySingle(player, plugin.getSettingsManager().getServerName() + subColor + " " + plugin.getLang("alliances") + " " + headColor + Helper.generatePageSeparator(plugin.getSettingsManager().getPageSep()));
ChatBlock.saySingle(player, plugin.getSettingsManager().getServerName() + subColor + " " + lang("alliances",player) + " " + headColor + Helper.generatePageSeparator(plugin.getSettingsManager().getPageSep()));
ChatBlock.sendBlank(player);
chatBlock.setAlignment("l", "l");
chatBlock.addRow(" " + headColor + plugin.getLang("clan"), plugin.getLang("allies"));
chatBlock.addRow(" " + headColor + lang("clan",player), lang("allies",player));
for (Clan clan : clans) {
if (!clan.isVerified()) {
@@ -63,7 +64,7 @@ public class AlliancesCommand {
if (more) {
plugin.getStorageManager().addChatBlock(player, chatBlock);
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, headColor + MessageFormat.format(plugin.getLang("view.next.page"), plugin.getSettingsManager().getCommandMore()));
ChatBlock.sendMessage(player, headColor + MessageFormat.format(lang("view.next.page",player), plugin.getSettingsManager().getCommandMore()));
}
ChatBlock.sendBlank(player);
@@ -1,12 +1,15 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.text.MessageFormat;
import java.util.List;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
/**
* @author phaed
*/
@@ -24,36 +27,31 @@ public class AllyCommand {
SimpleClans plugin = SimpleClans.getInstance();
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.ally")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("not.a.member.of.any.clan"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan",player));
return;
}
Clan clan = cp.getClan();
if (!clan.isVerified()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("clan.is.not.verified"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("clan.is.not.verified",player));
return;
}
if (!clan.isLeader(player)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.leader.permissions"));
return;
}
}
if (arg.length != 2) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.ally"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.ally",player), plugin.getSettingsManager().getCommandClan()));
return;
}
if (clan.getSize() < plugin.getSettingsManager().getClanMinSizeToAlly()) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("minimum.to.make.alliance"), plugin.getSettingsManager().getClanMinSizeToAlly()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("minimum.to.make.alliance",player), plugin.getSettingsManager().getClanMinSizeToAlly()));
return;
}
@@ -61,40 +59,61 @@ public class AllyCommand {
Clan ally = plugin.getClanManager().getClan(arg[1]);
if (ally == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.clan.matched"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.clan.matched",player));
return;
}
if (!ally.isVerified()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("cannot.ally.with.an.unverified.clan"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("cannot.ally.with.an.unverified.clan",player));
return;
}
if (action.equals(plugin.getLang("add"))) {
if (action.equals(lang("add",player))) {
if (!plugin.getPermissionsManager().has(player, RankPermission.ALLY_ADD, PermissionLevel.LEADER, true)) {
return;
}
if (clan.isAlly(ally.getTag())) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("your.clans.are.already.allies"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("your.clans.are.already.allies",player));
return;
}
int maxAlliances = plugin.getSettingsManager().getClanMaxAlliances();
if (maxAlliances != -1) {
if (clan.getAllies().size() >= maxAlliances) {
ChatBlock.sendMessage(player, lang("your.clan.reached.max.alliances", player));
return;
}
if (ally.getAllies().size() >= maxAlliances) {
ChatBlock.sendMessage(player, lang("other.clan.reached.max.alliances", player));
return;
}
}
List<ClanPlayer> onlineLeaders = Helper.stripOffLinePlayers(clan.getLeaders());
if (onlineLeaders.isEmpty()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("at.least.one.leader.accept.the.alliance"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("at.least.one.leader.accept.the.alliance",player));
return;
}
plugin.getRequestManager().addAllyRequest(cp, ally, clan);
ChatBlock.sendMessage(player, ChatColor.AQUA + MessageFormat.format(plugin.getLang("leaders.have.been.asked.for.an.alliance"), Helper.capitalize(ally.getName())));
} else if (action.equals(plugin.getLang("remove"))) {
ChatBlock.sendMessage(player, ChatColor.AQUA + MessageFormat.format(lang("leaders.have.been.asked.for.an.alliance",player), ally.getName()));
} else if (action.equals(lang("remove",player))) {
if (!plugin.getPermissionsManager().has(player, RankPermission.ALLY_REMOVE, PermissionLevel.LEADER, true)) {
return;
}
if (!clan.isAlly(ally.getTag())) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("your.clans.are.not.allies"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("your.clans.are.not.allies",player));
return;
}
clan.removeAlly(ally);
ally.addBb(cp.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("has.broken.the.alliance"), Helper.capitalize(clan.getName()), ally.getName()), false);
clan.addBb(cp.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("has.broken.the.alliance"), Helper.capitalize(cp.getName()), Helper.capitalize(ally.getName())));
ally.addBb(cp.getName(), ChatColor.AQUA + MessageFormat.format(lang("has.broken.the.alliance"), clan.getName(), ally.getName()), false);
clan.addBb(cp.getName(), ChatColor.AQUA + MessageFormat.format(lang("has.broken.the.alliance"), cp.getName(), ally.getName()));
} else {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.ally"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.ally",player), plugin.getSettingsManager().getCommandClan()));
}
}
}
@@ -2,6 +2,7 @@ package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
@@ -27,47 +28,32 @@ public class BanCommand {
SimpleClans plugin = SimpleClans.getInstance();
if (!plugin.getPermissionsManager().has(player, "simpleclans.mod.ban")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
if (arg.length != 1) {
ChatBlock.sendMessage(player, MessageFormat.format(plugin.getLang("usage.ban.unban"), ChatColor.RED, plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, MessageFormat.format(lang("usage.ban.unban",player), ChatColor.RED, plugin.getSettingsManager().getCommandClan()));
return;
}
String banned = arg[0];
UUID uuid = UUIDMigration.getForcedPlayerUUID(arg[0]);
if (uuid == null) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.player.matched",player));
return;
}
if (plugin.getSettingsManager().isBanned(uuid)) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("this.player.is.already.banned",player));
return;
}
if (SimpleClans.getInstance().hasUUID()) {
UUID PlayerUniqueId = UUIDMigration.getForcedPlayerUUID(banned);
if (plugin.getSettingsManager().isBanned(PlayerUniqueId)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("this.player.is.already.banned"));
return;
}
Player pl = SimpleClans.getInstance().getServer().getPlayer(PlayerUniqueId);
if (pl != null) {
ChatBlock.sendMessage(pl, ChatColor.AQUA + plugin.getLang("you.banned"));
}
plugin.getClanManager().ban(banned);
ChatBlock.sendMessage(player, ChatColor.AQUA + plugin.getLang("player.added.to.banned.list"));
} else {
if (plugin.getSettingsManager().isBanned(banned)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("this.player.is.already.banned"));
return;
}
Player pl = SimpleClans.getInstance().getServer().getPlayerExact(banned);
if (pl != null) {
ChatBlock.sendMessage(pl, ChatColor.AQUA + plugin.getLang("you.banned"));
}
plugin.getClanManager().ban(banned);
ChatBlock.sendMessage(player, ChatColor.AQUA + plugin.getLang("player.added.to.banned.list"));
}
plugin.getClanManager().ban(uuid);
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("player.added.to.banned.list",player));
Player pl = SimpleClans.getInstance().getServer().getPlayer(uuid);
if (pl != null) {
ChatBlock.sendMessage(pl, ChatColor.AQUA + lang("you.banned",player));
}
}
}
@@ -3,7 +3,10 @@ package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.PermissionLevel;
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
@@ -27,7 +30,7 @@ public class BankCommand {
SimpleClans plugin = SimpleClans.getInstance();
if (!plugin.getPermissionsManager().has(player, "simpleclans.member.bank")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
@@ -36,7 +39,7 @@ public class BankCommand {
Clan clan = cp.getClan();
if (clan == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("not.a.member.of.any.clan"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan",player));
return;
}
@@ -44,47 +47,52 @@ public class BankCommand {
if (clan.isMember(player)) {
if (!clan.isVerified()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("clan.is.not.verified"));
return;
}
if (!cp.isTrusted()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("only.trusted.players.can.access.clan.stats"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("clan.is.not.verified",player));
return;
}
if (arg.length == 1) {
if (arg[0].equalsIgnoreCase("status")) {
player.sendMessage(ChatColor.AQUA + MessageFormat.format(plugin.getLang("clan.balance"), clanbalance));
if (!plugin.getPermissionsManager().has(player, RankPermission.BANK_BALANCE, PermissionLevel.TRUSTED, true)) {
return;
}
player.sendMessage(ChatColor.AQUA + MessageFormat.format(lang("clan.balance",player), clanbalance));
}
} else if (arg.length == 2) {
if (arg[1].matches("[0-9]+")) {
money = Double.parseDouble(arg[1]);
}
if (arg[0].equalsIgnoreCase("deposit")) {
if (!cp.getClan().isLeader(player) && !clan.isAllowDeposit()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.leader.permissions"));
if (!clan.isAllowDeposit()) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("deposit.not.allowed",player));
return;
}
if (!plugin.getPermissionsManager().has(player, RankPermission.BANK_DEPOSIT, PermissionLevel.LEADER, true)) {
return;
}
if (arg[1].equalsIgnoreCase("all")) {
clan.deposit(plmoney, player);
} else {
clan.deposit(money, player);
}
} else if (arg[0].equalsIgnoreCase("withdraw")) {
if (!cp.getClan().isLeader(player) && !clan.isAllowWithdraw()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.leader.permissions"));
if (!clan.isAllowWithdraw()) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("withdraw.not.allowed",player));
return;
}
if (!plugin.getPermissionsManager().has(player, RankPermission.BANK_WITHDRAW, PermissionLevel.LEADER, true)) {
return;
}
if (arg[1].equalsIgnoreCase("all")) {
clan.withdraw(clanbalance, player);
} else {
clan.withdraw(money, player);
}
} else {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.bank"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.bank",player), plugin.getSettingsManager().getCommandClan()));
}
} else {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.bank"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.bank",player), plugin.getSettingsManager().getCommandClan()));
}
}
@@ -1,6 +1,7 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
@@ -24,20 +25,20 @@ public class BbCommand {
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("not.a.member.of.any.clan"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan",player));
return;
}
Clan clan = cp.getClan();
if (!clan.isVerified()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("clan.is.not.verified"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("clan.is.not.verified",player));
return;
}
if (arg.length == 0) {
if (!plugin.getPermissionsManager().has(player, "simpleclans.member.bb")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
clan.displayBb(player);
@@ -45,26 +46,15 @@ public class BbCommand {
}
if (arg.length == 1 && arg[0].equalsIgnoreCase("clear")) {
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.bb-clear")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
return;
}
if (!cp.isTrusted() || !cp.isLeader()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.leader.permissions"));
if (!plugin.getPermissionsManager().has(player, RankPermission.BB_CLEAR, PermissionLevel.LEADER, true)) {
return;
}
cp.getClan().clearBb();
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("cleared.bb"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("cleared.bb",player));
return;
}
if (!plugin.getPermissionsManager().has(player, "simpleclans.member.bb-add")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
return;
}
if (!cp.isTrusted()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.leader.permissions"));
if (!plugin.getPermissionsManager().has(player, RankPermission.BB_ADD, PermissionLevel.TRUSTED, true)) {
return;
}
@@ -1,9 +1,7 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
@@ -26,43 +24,43 @@ public class ClanffCommand {
SimpleClans plugin = SimpleClans.getInstance();
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.ff")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions", player));
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("not.a.member.of.any.clan"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan", player));
return;
}
Clan clan = cp.getClan();
if (!clan.isLeader(player)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.leader.permissions"));
if (!plugin.getPermissionsManager().has(player, RankPermission.FRIENDLYFIRE, true)) {
return;
}
if (arg.length != 1) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.clanff"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.clanff", player), plugin.getSettingsManager().getCommandClan()));
return;
}
String action = arg[0];
if (action.equalsIgnoreCase(plugin.getLang("allow"))) {
clan.addBb(player.getName(), ChatColor.AQUA + plugin.getLang("clan.wide.friendly.fire.is.allowed"));
if (action.equalsIgnoreCase(lang("allow", player))) {
clan.addBb(player.getName(), ChatColor.AQUA + lang("clan.wide.friendly.fire.is.allowed"));
clan.setFriendlyFire(true);
plugin.getStorageManager().updateClan(clan);
return;
}
if (!action.equalsIgnoreCase(plugin.getLang("block"))) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.clanff"), plugin.getSettingsManager().getCommandClan()));
if (!action.equalsIgnoreCase(lang("block", player))) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("usage.clanff", player, plugin.getSettingsManager().getCommandClan()));
return;
}
clan.addBb(player.getName(), ChatColor.AQUA + plugin.getLang("clan.wide.friendly.fire.blocked"));
clan.addBb(player.getName(), ChatColor.AQUA + lang("clan.wide.friendly.fire.blocked"));
clan.setFriendlyFire(false);
plugin.getStorageManager().updateClan(clan);
}
@@ -1,6 +1,7 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.entity.Player;
@@ -30,29 +31,29 @@ public class CoordsCommand {
String subColor = plugin.getSettingsManager().getPageSubTitleColor();
if (!plugin.getPermissionsManager().has(player, "simpleclans.member.coords")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("not.a.member.of.any.clan"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan",player));
return;
}
Clan clan = cp.getClan();
if (!clan.isVerified()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("clan.is.not.verified"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("clan.is.not.verified",player));
return;
}
if (!cp.isTrusted()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("only.trusted.players.can.access.clan.coords"));
return;
if (!plugin.getPermissionsManager().has(player, RankPermission.COORDS, PermissionLevel.TRUSTED, true)) {
return;
}
if (arg.length != 0) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.0.coords"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.0.coords",player), plugin.getSettingsManager().getCommandClan()));
return;
}
@@ -61,7 +62,7 @@ public class CoordsCommand {
chatBlock.setFlexibility(true, false, false, false);
chatBlock.setAlignment("l", "c", "c", "c");
chatBlock.addRow(" " + headColor + plugin.getLang("name"), plugin.getLang("distance"), plugin.getLang("coords.upper"), plugin.getLang("world"));
chatBlock.addRow(" " + headColor + lang("name",player), lang("distance",player), lang("coords.upper",player), lang("world",player));
List<ClanPlayer> members = Helper.stripOffLinePlayers(clan.getMembers());
@@ -87,7 +88,7 @@ public class CoordsCommand {
}
if (rows.isEmpty()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("you.are.the.only.member.online"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("you.are.the.only.member.online",player));
return;
}
@@ -96,7 +97,7 @@ public class CoordsCommand {
}
ChatBlock.sendBlank(player);
ChatBlock.saySingle(player, plugin.getSettingsManager().getPageClanNameColor() + Helper.capitalize(clan.getName()) + subColor + " " + plugin.getLang("coords") + " " + headColor + Helper.generatePageSeparator(plugin.getSettingsManager().getPageSep()));
ChatBlock.saySingle(player, plugin.getSettingsManager().getPageClanNameColor() + clan.getName() + subColor + " " + lang("coords",player) + " " + headColor + Helper.generatePageSeparator(plugin.getSettingsManager().getPageSep()));
ChatBlock.sendBlank(player);
boolean more = chatBlock.sendBlock(player, plugin.getSettingsManager().getPageSize());
@@ -104,7 +105,7 @@ public class CoordsCommand {
if (more) {
plugin.getStorageManager().addChatBlock(player, chatBlock);
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, headColor + MessageFormat.format(plugin.getLang("view.next.page"), plugin.getSettingsManager().getCommandMore()));
ChatBlock.sendMessage(player, headColor + MessageFormat.format(lang("view.next.page",player), plugin.getSettingsManager().getCommandMore()));
}
ChatBlock.sendBlank(player);
@@ -1,15 +1,18 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.conversation.CreateClanTagPrompt;
import org.bukkit.ChatColor;
import org.bukkit.conversations.Conversation;
import org.bukkit.conversations.ConversationFactory;
import org.bukkit.entity.Player;
import java.text.MessageFormat;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
/**
* @author phaed
*/
@@ -27,86 +30,26 @@ public class CreateCommand {
SimpleClans plugin = SimpleClans.getInstance();
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.create")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
return;
}
if (arg.length < 2) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.create.tag"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("example.clan.create"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions", player));
return;
}
String tag = arg[0];
String cleanTag = Helper.cleanTag(arg[0]);
String name = Helper.toMessage(Helper.removeFirst(arg));
boolean bypass = plugin.getPermissionsManager().has(player, "simpleclans.mod.bypass");
if (!bypass) {
if (cleanTag.length() > plugin.getSettingsManager().getTagMaxLength()) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("your.clan.tag.cannot.be.longer.than.characters"), plugin.getSettingsManager().getTagMaxLength()));
return;
}
if (cleanTag.length() <= plugin.getSettingsManager().getTagMinLength()) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("your.clan.tag.must.be.longer.than.characters"), plugin.getSettingsManager().getTagMinLength()));
return;
}
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.coloredtag") && tag.contains("&")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("your.tag.cannot.contain.color.codes"));
return;
}
if (plugin.getSettingsManager().hasDisallowedColor(tag)) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("your.tag.cannot.contain.the.following.colors"), plugin.getSettingsManager().getDisallowedColorString()));
return;
}
if (Helper.stripColors(name).length() > plugin.getSettingsManager().getClanMaxLength()) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("your.clan.name.cannot.be.longer.than.characters"), plugin.getSettingsManager().getClanMaxLength()));
return;
}
if (Helper.stripColors(name).length() <= plugin.getSettingsManager().getClanMinLength()) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("your.clan.name.must.be.longer.than.characters"), plugin.getSettingsManager().getClanMinLength()));
return;
}
if (plugin.getSettingsManager().isDisallowedWord(cleanTag.toLowerCase())) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("that.tag.name.is.disallowed"));
return;
}
}
if (!cleanTag.matches("[0-9a-zA-Z]*")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("your.clan.tag.can.only.contain.letters.numbers.and.color.codes"));
return;
}
if (name.contains("&")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("your.clan.name.cannot.contain.color.codes"));
if (arg.length != 0) {
ChatBlock.sendMessage(player, ChatColor.RED +
lang("usage.create", player, plugin.getSettingsManager().getCommandClan()));
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp != null) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("you.must.first.resign"), cp.getClan().getName()));
ChatBlock.sendMessage(player, ChatColor.RED +
MessageFormat.format(lang("you.must.first.resign", player), cp.getClan().getName()));
return;
}
if (plugin.getClanManager().isClan(cleanTag)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("clan.with.this.tag.already.exists"));
return;
}
if (plugin.getClanManager().purchaseCreation(player)) {
plugin.getClanManager().createClan(player, tag, name);
Clan clan = plugin.getClanManager().getClan(tag);
clan.addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("clan.created"), name));
plugin.getStorageManager().updateClan(clan);
if (plugin.getSettingsManager().isRequireVerification()) {
boolean verified = !plugin.getSettingsManager().isRequireVerification() || plugin.getPermissionsManager().has(player, "simpleclans.mod.verify");
if (!verified) {
ChatBlock.sendMessage(player, ChatColor.AQUA + plugin.getLang("get.your.clan.verified.to.access.advanced.features"));
}
}
}
Conversation conversation = new ConversationFactory(plugin).withFirstPrompt(new CreateClanTagPrompt())
.withLocalEcho(true).buildConversation(player);
conversation.begin();
}
}
@@ -3,8 +3,8 @@ package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
@@ -17,6 +17,7 @@ import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
* @author phaed
*/
public class DemoteCommand {
public DemoteCommand() {
}
@@ -29,78 +30,76 @@ public class DemoteCommand {
public void execute(Player player, String[] arg) {
SimpleClans plugin = SimpleClans.getInstance();
if (arg.length != 1) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.demote.leader", player), plugin.getSettingsManager().getCommandClan()));
return;
}
String demotedName = arg[0];
UUID uuid = UUIDMigration.getForcedPlayerUUID(demotedName);
if (uuid == null) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.player.matched", player));
return;
}
ClanPlayer toDemote = plugin.getClanManager().getAnyClanPlayer(uuid);
if (toDemote == null || toDemote.getClan() == null) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("player.is.not.a.leader.of.any.clan", player));
return;
}
if (plugin.getPermissionsManager().has(player, "simpleclans.admin.demote")) {
final Clan clan = toDemote.getClan();
if (clan.getLeaders().size() == 1) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("you.cannot.demote.the.last.leader", player));
return;
}
clan.demote(toDemote.getUniqueId());
clan.addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(lang("demoted.back.to.member"), demotedName));
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("player.successfully.demoted", player));
return;
}
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.demote")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions", player));
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("not.a.member.of.any.clan"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan", player));
return;
}
Clan clan = cp.getClan();
//noinspection ConstantConditions
if (!clan.isLeader(player)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.leader.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.leader.permissions", player));
return;
}
if (arg.length != 1) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.demote.leader"), plugin.getSettingsManager().getCommandClan()));
}
if (!clan.enoughLeadersOnlineToDemote(toDemote)) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.enough.leaders.online.to.vote.on.demotion", player));
return;
}
String demotedName = arg[0];
boolean allOtherLeadersOnline;
if (demotedName == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.player.matched"));
return;
}
if (SimpleClans.getInstance().hasUUID()) {
UUID PlayerUniqueId = UUIDMigration.getForcedPlayerUUID(demotedName);
if (PlayerUniqueId == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.player.matched"));
return;
}
allOtherLeadersOnline = clan.allOtherLeadersOnline(PlayerUniqueId);
} else {
allOtherLeadersOnline = clan.allOtherLeadersOnline(demotedName);
}
if (!allOtherLeadersOnline) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("leaders.must.be.online.to.vote.on.demotion"));
return;
}
if (SimpleClans.getInstance().hasUUID()) {
UUID PlayerUniqueId = UUIDMigration.getForcedPlayerUUID(demotedName);
if (!clan.isLeader(PlayerUniqueId)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("player.is.not.a.leader.of.your.clan"));
return;
}
if (clan.getLeaders().size() != 1 && plugin.getSettingsManager().isConfirmationForDemote()) {
plugin.getRequestManager().addDemoteRequest(cp, demotedName, clan);
ChatBlock.sendMessage(player, ChatColor.AQUA + plugin.getLang("demotion.vote.has.been.requested.from.all.leaders"));
return;
}
clan.addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("demoted.back.to.member"), Helper.capitalize(demotedName)));
clan.demote(PlayerUniqueId);
} else {
if (!clan.isLeader(demotedName)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("player.is.not.a.leader.of.your.clan"));
return;
}
if (clan.getLeaders().size() != 1 && plugin.getSettingsManager().isConfirmationForDemote()) {
plugin.getRequestManager().addDemoteRequest(cp, demotedName, clan);
ChatBlock.sendMessage(player, ChatColor.AQUA + plugin.getLang("demotion.vote.has.been.requested.from.all.leaders"));
return;
}
clan.addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("demoted.back.to.member"), Helper.capitalize(demotedName)));
clan.demote(demotedName);
}
if (!clan.isLeader(uuid)) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("player.is.not.a.leader.of.your.clan", player));
return;
}
if (clan.getLeaders().size() > 2 && plugin.getSettingsManager().isConfirmationForDemote()) {
plugin.getRequestManager().addDemoteRequest(cp, demotedName, clan);
ChatBlock.sendMessage(player,
ChatColor.AQUA + lang("demotion.vote.has.been.requested.from.all.leaders", player));
return;
}
clan.addBb(player.getName(), ChatColor.AQUA
+ MessageFormat.format(lang("demoted.back.to.member",player), demotedName));
clan.demote(uuid);
}
}
@@ -0,0 +1,70 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import java.text.MessageFormat;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.PermissionLevel;
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
public class DescriptionCommand {
/**
* Execute the command
*
* @param player
* @param args
*/
public void execute(Player player, String[] args) {
final SimpleClans plugin = SimpleClans.getInstance();
final SettingsManager sm = plugin.getSettingsManager();
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.description")) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan",player));
return;
}
Clan clan = cp.getClan();
if (!clan.isVerified()) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("clan.is.not.verified",player));
return;
}
if (!plugin.getPermissionsManager().has(player, RankPermission.DESCRIPTION, PermissionLevel.LEADER, true)) {
return;
}
if (args.length < 1) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.description",player), plugin.getSettingsManager().getCommandClan()));
return;
}
String description = Helper.toMessage(args);
if (description.length() < sm.getClanMinDescriptionLength()) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("your.clan.description.must.be.longer.than",player), sm.getClanMinDescriptionLength()));
return;
}
if (description.length() > sm.getClanMaxDescriptionLength()) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("your.clan.description.cannot.be.longer.than",player), sm.getClanMaxDescriptionLength()));
return;
}
clan.setDescription(description);
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("description.changed",player));
plugin.getStorageManager().updateClan(clan);
}
}
@@ -4,6 +4,7 @@ import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
@@ -27,52 +28,52 @@ public class DisbandCommand {
if (arg.length == 0) {
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.disband")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("not.a.member.of.any.clan"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan",player));
return;
}
Clan clan = cp.getClan();
if (!clan.isLeader(player)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.leader.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.leader.permissions",player));
return;
}
if (clan.getLeaders().size() != 1) {
plugin.getRequestManager().addDisbandRequest(cp, clan);
ChatBlock.sendMessage(player, ChatColor.AQUA + plugin.getLang("clan.disband.vote.has.been.requested.from.all.leaders"));
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("clan.disband.vote.has.been.requested.from.all.leaders",player));
return;
}
clan.clanAnnounce(player.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("clan.has.been.disbanded"), clan.getName()));
clan.clanAnnounce(player.getName(), ChatColor.AQUA + MessageFormat.format(lang("clan.has.been.disbanded",player), clan.getName()));
clan.disband();
return;
}
if (arg.length > 1) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.0.disband"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.0.disband",player), plugin.getSettingsManager().getCommandClan()));
return;
}
if (!plugin.getPermissionsManager().has(player, "simpleclans.mod.disband")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
Clan clan = plugin.getClanManager().getClan(arg[0]);
if (clan == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.clan.matched"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.clan.matched",player));
return;
}
plugin.getClanManager().serverAnnounce(ChatColor.AQUA + MessageFormat.format(plugin.getLang("clan.has.been.disbanded"), clan.getName()));
plugin.getClanManager().serverAnnounce(ChatColor.AQUA + MessageFormat.format(lang("clan.has.been.disbanded",player), clan.getName()));
clan.disband();
}
}
@@ -0,0 +1,88 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import java.text.MessageFormat;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.PermissionLevel;
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
/**
*
* @author roinujnosde
*/
public class FeeCommand {
/**
* Executes the command
*
* @param player
* @param args
*/
public void execute(Player player, String[] args) {
SimpleClans plugin = SimpleClans.getInstance();
if (!plugin.getSettingsManager().isMemberFee()) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("disabled.command",player));
return;
}
if (args.length >= 1) {
ClanPlayer cp = plugin.getClanManager().getAnyClanPlayer(player.getUniqueId());
Clan clan = cp.getClan();
if (!clan.isVerified()) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("clan.is.not.verified",player));
return;
}
if (args[0].equalsIgnoreCase("check")) {
if (!plugin.getPermissionsManager().has(player, "simpleclans.member.fee-check")) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
ChatBlock.sendMessage(player, ChatColor.AQUA
+ MessageFormat.format(
lang("the.fee.is.0.and.its.current.value.is.1",player),
clan.isMemberFeeEnabled() ? lang("fee.enabled",player) : lang("fee.disabled",player),
clan.getMemberFee()
));
return;
}
if (args.length == 2 && args[0].equalsIgnoreCase("set")) {
if (!plugin.getPermissionsManager().has(player, RankPermission.FEE_SET, PermissionLevel.LEADER, true)) {
return;
}
if (!cp.isLeader()) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.leader.permissions",player));
return;
}
double newFee = 0;
try {
newFee = Double.parseDouble(args[1]);
} catch (NumberFormatException ignored) {
player.sendMessage(ChatColor.RED + lang("invalid.fee",player));
return;
}
double maxFee = plugin.getSettingsManager().getMaxMemberFee();
if (newFee > maxFee) {
ChatBlock.sendMessage(player, ChatColor.RED
+ MessageFormat.format(lang("max.fee.allowed.is.0",player), maxFee));
return;
}
if (plugin.getClanManager().purchaseMemberFeeSet(player)) {
clan.setMemberFee(newFee);
clan.addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(lang("bb.fee.set"), newFee));
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("fee.set",player));
plugin.getStorageManager().updateClan(clan);
}
return;
}
}
ChatBlock.sendMessage(player, ChatColor.RED
+ MessageFormat.format(lang("usage.fee",player), plugin.getSettingsManager().getCommandClan()));
}
}
@@ -3,6 +3,7 @@ package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
@@ -25,37 +26,37 @@ public class FfCommand {
SimpleClans plugin = SimpleClans.getInstance();
if (!plugin.getPermissionsManager().has(player, "simpleclans.member.ff")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("not.a.member.of.any.clan"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan",player));
return;
}
if (arg.length != 1) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.0.ff.allow.auto"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.0.ff.allow.auto",player), plugin.getSettingsManager().getCommandClan()));
return;
}
String action = arg[0];
if (action.equalsIgnoreCase(plugin.getLang("allow"))) {
if (action.equalsIgnoreCase(lang("allow",player))) {
cp.setFriendlyFire(true);
plugin.getStorageManager().updateClanPlayer(cp);
ChatBlock.sendMessage(player, ChatColor.AQUA + plugin.getLang("personal.friendly.fire.is.set.to.allowed"));
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("personal.friendly.fire.is.set.to.allowed",player));
return;
}
if (action.equalsIgnoreCase(plugin.getLang("auto"))) {
if (action.equalsIgnoreCase(lang("auto",player))) {
cp.setFriendlyFire(false);
plugin.getStorageManager().updateClanPlayer(cp);
ChatBlock.sendMessage(player, ChatColor.AQUA + plugin.getLang("friendy.fire.is.now.managed.by.your.clan"));
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("friendy.fire.is.now.managed.by.your.clan",player));
return;
}
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.0.ff.allow.auto"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.0.ff.allow.auto",player), plugin.getSettingsManager().getCommandClan()));
}
}
@@ -2,9 +2,9 @@ package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.text.MessageFormat;
@@ -25,31 +25,31 @@ public class GlobalffCommand {
SimpleClans plugin = SimpleClans.getInstance();
if (arg.length != 1) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.0.ff.allow.auto"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.0.globalff.allow.auto",player), plugin.getSettingsManager().getCommandClan()));
return;
}
String action = arg[0];
if (action.equalsIgnoreCase(plugin.getLang("allow"))) {
if (action.equalsIgnoreCase(lang("allow",player))) {
if (plugin.getSettingsManager().isGlobalff()) {
ChatBlock.sendMessage(player, ChatColor.AQUA + plugin.getLang("global.friendly.fire.is.already.being.allowed"));
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("global.friendly.fire.is.already.being.allowed",player));
} else {
plugin.getSettingsManager().setGlobalff(true);
ChatBlock.sendMessage(player, ChatColor.AQUA + plugin.getLang("global.friendly.fire.is.set.to.allowed"));
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("global.friendly.fire.is.set.to.allowed",player));
}
return;
}
if (action.equalsIgnoreCase(plugin.getLang("auto"))) {
if (action.equalsIgnoreCase(lang("auto",player))) {
if (!plugin.getSettingsManager().isGlobalff()) {
ChatBlock.sendMessage(player, ChatColor.AQUA + plugin.getLang("global.friendy.fire.is.already.being.managed.by.each.clan"));
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("global.friendy.fire.is.already.being.managed.by.each.clan",player));
} else {
plugin.getSettingsManager().setGlobalff(false);
ChatBlock.sendMessage(player, ChatColor.AQUA + plugin.getLang("global.friendy.fire.is.now.managed.by.each.clan"));
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("global.friendy.fire.is.now.managed.by.each.clan",player));
}
return;
}
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.0.globalff.allow.auto"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.0.globalff.allow.auto",player), plugin.getSettingsManager().getCommandClan()));
}
}
@@ -1,6 +1,8 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import io.papermc.lib.PaperLib;
import net.sacredlabyrinth.phaed.simpleclans.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
@@ -9,8 +11,11 @@ import org.bukkit.entity.Player;
import java.text.MessageFormat;
import java.util.List;
import java.util.Random;
import java.util.logging.Level;
import net.sacredlabyrinth.phaed.simpleclans.events.HomeRegroupEvent;
import net.sacredlabyrinth.phaed.simpleclans.events.PlayerHomeSetEvent;
import org.bukkit.event.player.PlayerTeleportEvent;
/**
* @author phaed
@@ -39,12 +44,12 @@ public class HomeCommand {
Clan clan = plugin.getClanManager().getClan(arg[1]);
if (clan == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("the.clan.does.not.exist"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("the.clan.does.not.exist",player));
return;
}
clan.setHomeLocation(loc);
ChatBlock.sendMessage(player, ChatColor.AQUA + MessageFormat.format(plugin.getLang("hombase.mod.set"), clan.getName()) + " " + ChatColor.YELLOW + Helper.toLocationString(loc));
ChatBlock.sendMessage(player, ChatColor.AQUA + MessageFormat.format(lang("hombase.mod.set",player), clan.getName()) + " " + ChatColor.YELLOW + Helper.toLocationString(loc));
return;
}
@@ -52,19 +57,24 @@ public class HomeCommand {
Clan clan = plugin.getClanManager().getClan(arg[1]);
if (clan == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("the.clan.does.not.exist"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("the.clan.does.not.exist",player));
return;
}
Location loc = clan.getHomeLocation();
if (loc == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("hombase.not.set"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("hombase.not.set",player));
return;
}
player.teleport(loc);
ChatBlock.sendMessage(player, ChatColor.AQUA + MessageFormat.format(plugin.getLang("now.at.homebase"), clan.getName()));
PaperLib.teleportAsync(player, loc, PlayerTeleportEvent.TeleportCause.COMMAND).thenAccept(result -> {
if (result) {
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("now.at.homebase", player, clan.getName()));
} else {
plugin.getLogger().log(Level.WARNING, "An error occurred while teleporting a player");
}
});
return;
}
}
@@ -72,31 +82,26 @@ public class HomeCommand {
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("not.a.member.of.any.clan"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan",player));
return;
}
Clan clan = cp.getClan();
if (!clan.isVerified()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("clan.is.not.verified"));
return;
}
if (!cp.isTrusted()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("only.trusted.players.can.access.clan.vitals"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("clan.is.not.verified",player));
return;
}
if (arg.length == 0) {
if (!plugin.getPermissionsManager().has(player, "simpleclans.member.home")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
if (!plugin.getPermissionsManager().has(player, RankPermission.HOME_TP, PermissionLevel.TRUSTED, true)) {
return;
}
Location loc = clan.getHomeLocation();
if (loc == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("hombase.not.set"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("hombase.not.set",player));
return;
}
@@ -107,16 +112,11 @@ public class HomeCommand {
}
if (arg[0].equalsIgnoreCase("set")) {
if (!cp.isLeader()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.leader.permissions"));
return;
}
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.home-set")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
if (!plugin.getPermissionsManager().has(player, RankPermission.HOME_SET, PermissionLevel.LEADER, true)) {
return;
}
if (plugin.getSettingsManager().isHomebaseSetOnce() && clan.getHomeLocation() != null && !plugin.getPermissionsManager().has(player, "simpleclans.mod.home")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("home.base.only.once"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("home.base.only.once",player));
return;
}
@@ -128,48 +128,46 @@ public class HomeCommand {
}
clan.setHomeLocation(player.getLocation());
ChatBlock.sendMessage(player, ChatColor.AQUA + MessageFormat.format(plugin.getLang("hombase.set"), ChatColor.YELLOW + Helper.toLocationString(player.getLocation())));
ChatBlock.sendMessage(player, ChatColor.AQUA + MessageFormat.format(lang("hombase.set",player), ChatColor.YELLOW + Helper.toLocationString(player.getLocation())));
return;
}
if (arg[0].equalsIgnoreCase("clear")) {
if (!cp.isLeader()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.leader.permissions"));
return;
}
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.home-set")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
if (!plugin.getPermissionsManager().has(player, RankPermission.HOME_SET, PermissionLevel.LEADER, true)) {
return;
}
if (plugin.getSettingsManager().isHomebaseSetOnce() && clan.getHomeLocation() != null && !plugin.getPermissionsManager().has(player, "simpleclans.mod.home")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("home.base.only.once"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("home.base.only.once",player));
return;
}
clan.setHomeLocation(null);
ChatBlock.sendMessage(player, ChatColor.AQUA + plugin.getLang("hombase.cleared"));
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("hombase.cleared",player));
return;
}
if (arg[0].equalsIgnoreCase("regroup")) {
if (!SimpleClans.getInstance().getSettingsManager().getAllowReGroupCommand()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
if (!plugin.getPermissionsManager().has(player, RankPermission.HOME_REGROUP, PermissionLevel.LEADER, true)) {
return;
}
Location loc;
if (arg.length >= 2 && arg[1].equalsIgnoreCase("me")) {
loc = player.getLocation();
} else {
loc = cp.getClan().getHomeLocation();
}
if (!cp.isLeader()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.leader.permissions"));
if(loc == null) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("hombase.not.set",player));
return;
}
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.home-regroup")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
}
HomeRegroupEvent homeRegroupEvent = new HomeRegroupEvent(clan, cp, clan.getOnlineMembers(), loc);
SimpleClans.getInstance().getServer().getPluginManager().callEvent(homeRegroupEvent);
@@ -200,10 +198,7 @@ public class HomeCommand {
plugin.getTeleportManager().addPlayer(player, new Location(loc.getWorld(), x + .5, loc.getBlockY(), z + .5), clan.getName());
}
ChatBlock.sendMessage(player, ChatColor.AQUA + plugin.getLang("hombase.set") + ChatColor.YELLOW + Helper.toLocationString(loc));
return;
}
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
}
}
@@ -1,11 +1,20 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.*;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
import java.text.MessageFormat;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.text.MessageFormat;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.PermissionLevel;
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
/**
* @author phaed
@@ -24,62 +33,76 @@ public class InviteCommand {
SimpleClans plugin = SimpleClans.getInstance();
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.invite")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("not.a.member.of.any.clan"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan",player));
return;
}
Clan clan = cp.getClan();
if (!clan.isLeader(player)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.leader.permissions"));
return;
if (!plugin.getPermissionsManager().has(player, RankPermission.INVITE, PermissionLevel.LEADER, true)) {
return;
}
if (arg.length != 1) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.0.invite.player"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.0.invite.player",player), plugin.getSettingsManager().getCommandClan()));
return;
}
Player invited = Helper.getPlayer(arg[0]);
if (invited == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.player.matched"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.player.matched",player));
return;
}
if (!plugin.getPermissionsManager().has(invited, "simpleclans.member.can-join")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("the.player.doesn.t.not.have.the.permissions.to.join.clans"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("the.player.doesn.t.not.have.the.permissions.to.join.clans",player));
return;
}
if (invited.getName().equals(player.getName())) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("you.cannot.invite.yourself"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("you.cannot.invite.yourself",player));
return;
}
if (plugin.getSettingsManager().isBanned(player.getName())) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("this.player.is.banned.from.using.clan.commands"));
if (plugin.getSettingsManager().isBanned(player.getUniqueId())) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("this.player.is.banned.from.using.clan.commands",player));
return;
}
ClanPlayer cpInv = plugin.getClanManager().getClanPlayer(invited);
ClanPlayer cpInv = plugin.getClanManager().getAnyClanPlayer(invited.getUniqueId());
if (cpInv != null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("the.player.is.already.member.of.another.clan"));
return;
if (cpInv.getClan() != null) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("the.player.is.already.member.of.another.clan",player));
return;
}
if (plugin.getSettingsManager().isRejoinCooldown()) {
Long resign = cpInv.getResignTime(clan.getTag());
if (resign != null) {
long timePassed = Instant.ofEpochMilli(resign).until(Instant.now(), ChronoUnit.MINUTES);
int cooldown = plugin.getSettingsManager().getRejoinCooldown();
if (timePassed < cooldown) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("the.player.must.wait.0.before.joining.your.clan.again",player), cooldown - timePassed));
return;
}
}
}
}
if (!plugin.getClanManager().purchaseInvite(player)) {
return;
}
if (clan.getSize() >= plugin.getSettingsManager().getMaxMembers()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("the.clan.members.reached.limit"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("the.clan.members.reached.limit",player));
return;
}
plugin.getRequestManager().addInviteRequest(cp, invited.getName(), clan);
ChatBlock.sendMessage(player, ChatColor.AQUA + MessageFormat.format(plugin.getLang("has.been.asked.to.join"), Helper.capitalize(invited.getName()), clan.getName()));
ChatBlock.sendMessage(player, ChatColor.AQUA + MessageFormat.format(lang("has.been.asked.to.join",player), invited.getName(), clan.getName()));
}
}
@@ -3,12 +3,15 @@ package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.PermissionLevel;
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.text.MessageFormat;
import java.util.UUID;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
@@ -29,53 +32,47 @@ public class KickCommand {
SimpleClans plugin = SimpleClans.getInstance();
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.kick")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("not.a.member.of.any.clan"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan",player));
return;
}
Clan clan = cp.getClan();
if (!clan.isLeader(player)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.leader.permissions"));
return;
if (!plugin.getPermissionsManager().has(player, RankPermission.KICK, PermissionLevel.LEADER, true)) {
return;
}
if (arg.length != 1) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.kick.player"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.kick.player",player), plugin.getSettingsManager().getCommandClan()));
return;
}
String kicked = arg[0];
UUID kicked = UUIDMigration.getForcedPlayerUUID(arg[0]);
if (kicked == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.player.matched"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.player.matched",player));
return;
}
if (kicked.equalsIgnoreCase(player.getName())) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("you.cannot.kick.yourself"));
if (kicked.equals(player.getUniqueId())) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("you.cannot.kick.yourself",player));
return;
}
if (!clan.isMember(kicked)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("the.player.is.not.a.member.of.your.clan"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("the.player.is.not.a.member.of.your.clan",player));
return;
}
if (clan.isLeader(kicked)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("you.cannot.kick.another.leader"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("you.cannot.kick.another.leader",player));
return;
}
clan.addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("has.been.kicked.by"), Helper.capitalize(kicked), player.getName()));
if (SimpleClans.getInstance().hasUUID()) {
clan.removePlayerFromClan(UUIDMigration.getForcedPlayerUUID(kicked));
} else {
clan.removePlayerFromClan(kicked);
}
clan.addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(lang("has.been.kicked.by"), arg[0], player.getName()));
clan.removePlayerFromClan(kicked);
}
}
@@ -1,90 +1,103 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.*;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
public class KillsCommand {
public KillsCommand() {
}
/**
* Execute the command
*
* @param player
* @param arg
*/
public void execute(Player player, String[] arg) {
SimpleClans plugin = SimpleClans.getInstance();
String headColor = plugin.getSettingsManager().getPageHeadingsColor();
String subColor = plugin.getSettingsManager().getPageSubTitleColor();
if (!plugin.getPermissionsManager().has(player, "simpleclans.member.kills")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("not.a.member.of.any.clan"));
return;
}
Clan clan = cp.getClan();
if (!clan.isVerified()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("clan.is.not.verified"));
return;
}
if (!cp.isTrusted()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("only.trusted.players.can.access.clan.stats"));
return;
}
String polledPlayerName = player.getName();
if (arg.length == 1) {
polledPlayerName = arg[0];
}
ChatBlock chatBlock = new ChatBlock();
chatBlock.setFlexibility(true, false);
chatBlock.setAlignment("l", "c");
chatBlock.addRow(" " + headColor + plugin.getLang("victim"), plugin.getLang("killcount"));
Map<String, Integer> killsPerPlayerUnordered = plugin.getStorageManager().getKillsPerPlayer(polledPlayerName);
if (killsPerPlayerUnordered.isEmpty()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("nokillsfound"));
return;
}
Map<String, Integer> killsPerPlayer = Helper.sortByValue(killsPerPlayerUnordered);
for (Entry<String, Integer> playerKills : killsPerPlayer.entrySet()) {
int count = playerKills.getValue();
chatBlock.addRow(" " + playerKills.getKey(), ChatColor.AQUA + "" + count);
}
ChatBlock.saySingle(player, plugin.getSettingsManager().getPageClanNameColor() + Helper.capitalize(polledPlayerName) + subColor + " " + plugin.getLang("kills") + " " + headColor + Helper.generatePageSeparator(plugin.getSettingsManager().getPageSep()));
ChatBlock.sendBlank(player);
boolean more = chatBlock.sendBlock(player, plugin.getSettingsManager().getPageSize());
if (more) {
plugin.getStorageManager().addChatBlock(player, chatBlock);
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, headColor + MessageFormat.format(plugin.getLang("view.next.page"), plugin.getSettingsManager().getCommandMore()));
}
ChatBlock.sendBlank(player);
}
}
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import net.sacredlabyrinth.phaed.simpleclans.managers.StorageManager.DataCallback;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import java.text.MessageFormat;
import java.util.Map;
import java.util.Map.Entry;
public class KillsCommand {
public KillsCommand() {
}
/**
* Execute the command
*
* @param player
* @param arg
*/
public void execute(Player player, String[] arg) {
SimpleClans plugin = SimpleClans.getInstance();
String headColor = plugin.getSettingsManager().getPageHeadingsColor();
String subColor = plugin.getSettingsManager().getPageSubTitleColor();
if (!plugin.getPermissionsManager().has(player, "simpleclans.member.kills")) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan",player));
return;
}
Clan clan = cp.getClan();
if (!clan.isVerified()) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("clan.is.not.verified",player));
return;
}
if (!plugin.getPermissionsManager().has(player, RankPermission.KILLS, PermissionLevel.TRUSTED, true)) {
return;
}
String polledPlayerName = player.getName();
if (arg.length == 1) {
polledPlayerName = arg[0];
}
final String name = polledPlayerName;
plugin.getStorageManager().getKillsPerPlayer(polledPlayerName, new DataCallback<Map<String, Integer>>() {
@Override
public void onResultReady(Map<String, Integer> data) {
new BukkitRunnable() {
@Override
public void run() {
ChatBlock chatBlock = new ChatBlock();
chatBlock.setFlexibility(true, false);
chatBlock.setAlignment("l", "c");
chatBlock.addRow(" " + headColor + lang("victim",player), lang("killcount",player));
if (data.isEmpty()) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("nokillsfound",player));
return;
}
Map<String, Integer> killsPerPlayer = Helper.sortByValue(data);
for (Entry<String, Integer> playerKills : killsPerPlayer.entrySet()) {
int count = playerKills.getValue();
chatBlock.addRow(" " + playerKills.getKey(), ChatColor.AQUA + "" + count);
}
ChatBlock.saySingle(player, plugin.getSettingsManager().getPageClanNameColor() + name + subColor + " " + lang("kills",player) + " " + headColor + Helper.generatePageSeparator(plugin.getSettingsManager().getPageSep()));
ChatBlock.sendBlank(player);
boolean more = chatBlock.sendBlock(player, plugin.getSettingsManager().getPageSize());
if (more) {
plugin.getStorageManager().addChatBlock(player, chatBlock);
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, headColor + MessageFormat.format(lang("view.next.page",player), plugin.getSettingsManager().getCommandMore()));
}
ChatBlock.sendBlank(player);
}
}.runTask(plugin);
}
});
}
}
@@ -4,14 +4,17 @@ import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.utils.KDRFormat;
import net.sacredlabyrinth.phaed.simpleclans.utils.RankingNumberResolver;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.text.DecimalFormat;
import java.math.BigDecimal;
import java.text.MessageFormat;
import java.text.NumberFormat;
import java.util.List;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
/**
* @author phaed
*/
@@ -29,33 +32,31 @@ public class LeaderboardCommand {
SimpleClans plugin = SimpleClans.getInstance();
String headColor = plugin.getSettingsManager().getPageHeadingsColor();
String subColor = plugin.getSettingsManager().getPageSubTitleColor();
NumberFormat formatter = new DecimalFormat("#.#");
if (arg.length != 0) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.0.leaderboard"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.0.leaderboard",player), plugin.getSettingsManager().getCommandClan()));
return;
}
if (!plugin.getPermissionsManager().has(player, "simpleclans.anyone.leaderboard")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
List<ClanPlayer> clanPlayers = plugin.getClanManager().getAllClanPlayers();
plugin.getClanManager().sortClanPlayersByKDR(clanPlayers);
ChatBlock chatBlock = new ChatBlock();
ChatBlock.sendBlank(player);
ChatBlock.saySingle(player, plugin.getSettingsManager().getServerName() + subColor + " " + plugin.getLang("leaderboard.command") + " " + headColor + Helper.generatePageSeparator(plugin.getSettingsManager().getPageSep()));
ChatBlock.saySingle(player, plugin.getSettingsManager().getServerName() + subColor + " " + lang("leaderboard.command",player) + " " + headColor + Helper.generatePageSeparator(plugin.getSettingsManager().getPageSep()));
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, headColor + MessageFormat.format(plugin.getLang("total.clan.players.0"), subColor + clanPlayers.size()));
ChatBlock.sendMessage(player, headColor + MessageFormat.format(lang("total.clan.players.0",player), subColor + clanPlayers.size()));
ChatBlock.sendBlank(player);
chatBlock.setAlignment("c", "l", "c", "c", "c", "c");
chatBlock.addRow(" " + headColor + plugin.getLang("rank"), plugin.getLang("player"), plugin.getLang("kdr"), plugin.getLang("clan"), plugin.getLang("seen"));
int rank = 1;
chatBlock.addRow(" " + headColor + lang("rank",player), lang("player",player), lang("kdr",player), lang("clan",player), lang("seen",player));
RankingNumberResolver<ClanPlayer, BigDecimal> rankingResolver = new RankingNumberResolver<>(clanPlayers,
c -> KDRFormat.toBigDecimal(c.getKDR()), false, plugin.getSettingsManager().getRankingType());
for (ClanPlayer cp : clanPlayers) {
Player p = cp.toPlayer();
@@ -66,16 +67,16 @@ public class LeaderboardCommand {
}
String name = (cp.isLeader() ? plugin.getSettingsManager().getPageLeaderColor() : (cp.isTrusted() ? plugin.getSettingsManager().getPageTrustedColor() : plugin.getSettingsManager().getPageUnTrustedColor())) + cp.getName();
String lastSeen = isOnline ? ChatColor.GREEN + plugin.getLang("online") : ChatColor.WHITE + cp.getLastSeenDaysString();
String lastSeen = isOnline ? ChatColor.GREEN + lang("online", player) : ChatColor.WHITE + cp.getLastSeenDaysString(player);
String clanTag = ChatColor.WHITE + plugin.getLang("free.agent");
String clanTag = ChatColor.WHITE + lang("free.agent", player);
if (cp.getClan() != null) {
clanTag = cp.getClan().getColorTag();
}
chatBlock.addRow(" " + rank, name, ChatColor.YELLOW + "" + formatter.format(cp.getKDR()), ChatColor.WHITE + clanTag, lastSeen);
rank++;
chatBlock.addRow(" " + rankingResolver.getRankingNumber(cp),
name, ChatColor.YELLOW + "" + KDRFormat.format(cp.getKDR()), ChatColor.WHITE + clanTag, lastSeen);
}
boolean more = chatBlock.sendBlock(player, plugin.getSettingsManager().getPageSize());
@@ -83,7 +84,7 @@ public class LeaderboardCommand {
if (more) {
plugin.getStorageManager().addChatBlock(player, chatBlock);
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, headColor + MessageFormat.format(plugin.getLang("view.next.page"), plugin.getSettingsManager().getCommandMore()));
ChatBlock.sendMessage(player, headColor + MessageFormat.format(lang("view.next.page",player), plugin.getSettingsManager().getCommandMore()));
}
ChatBlock.sendBlank(player);
@@ -1,92 +1,155 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.text.DecimalFormat;
import java.text.MessageFormat;
import java.text.NumberFormat;
import java.util.List;
/**
* @author phaed
*/
public class ListCommand {
public ListCommand() {
}
/**
* Execute the command
*
* @param player
* @param arg
*/
public void execute(Player player, String[] arg) {
SimpleClans plugin = SimpleClans.getInstance();
String headColor = plugin.getSettingsManager().getPageHeadingsColor();
String subColor = plugin.getSettingsManager().getPageSubTitleColor();
NumberFormat formatter = new DecimalFormat("#.#");
if (!plugin.getPermissionsManager().has(player, "simpleclans.anyone.list")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
return;
}
if (arg.length != 0) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.list"), plugin.getSettingsManager().getCommandClan()));
return;
}
List<Clan> clans = plugin.getClanManager().getClans();
plugin.getClanManager().sortClansByKDR(clans);
if (clans.isEmpty()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.clans.have.been.created"));
return;
}
ChatBlock chatBlock = new ChatBlock();
ChatBlock.sendBlank(player);
ChatBlock.saySingle(player, plugin.getSettingsManager().getServerName() + subColor + " " + plugin.getLang("clans.lower") + " " + headColor + Helper.generatePageSeparator(plugin.getSettingsManager().getPageSep()));
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, headColor + plugin.getLang("total.clans") + " " + subColor + clans.size());
ChatBlock.sendBlank(player);
chatBlock.setAlignment("c", "l", "c", "c");
chatBlock.setFlexibility(false, true, false, false);
chatBlock.addRow(" " + headColor + plugin.getLang("rank"), plugin.getLang("name"), plugin.getLang("kdr"), plugin.getLang("members"));
int rank = 1;
for (Clan clan : clans) {
if (!plugin.getSettingsManager().isShowUnverifiedOnList() && !clan.isVerified()) {
continue;
}
String tag = plugin.getSettingsManager().getClanChatBracketColor() + plugin.getSettingsManager().getClanChatTagBracketLeft() + plugin.getSettingsManager().getTagDefaultColor() + clan.getColorTag() + plugin.getSettingsManager().getClanChatBracketColor() + plugin.getSettingsManager().getClanChatTagBracketRight();
String name = (clan.isVerified() ? plugin.getSettingsManager().getPageClanNameColor() : ChatColor.GRAY) + clan.getName();
String fullname = tag + " " + name;
String size = ChatColor.WHITE + "" + clan.getSize();
String kdr = clan.isVerified() ? ChatColor.YELLOW + "" + formatter.format(clan.getTotalKDR()) : "";
chatBlock.addRow(" " + rank, fullname, kdr, size);
rank++;
}
boolean more = chatBlock.sendBlock(player, plugin.getSettingsManager().getPageSize());
if (more) {
plugin.getStorageManager().addChatBlock(player, chatBlock);
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, headColor + MessageFormat.format(plugin.getLang("view.next.page"), plugin.getSettingsManager().getCommandMore()));
}
ChatBlock.sendBlank(player);
}
}
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import net.sacredlabyrinth.phaed.simpleclans.utils.KDRFormat;
import net.sacredlabyrinth.phaed.simpleclans.utils.RankingNumberResolver;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.text.MessageFormat;
import java.util.List;
import java.util.stream.Collectors;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import static net.sacredlabyrinth.phaed.simpleclans.utils.RankingNumberResolver.RankingType.ORDINAL;
/**
* @author phaed
*/
public class ListCommand {
private final @NotNull SettingsManager sm;
private RankingNumberResolver<Clan, ? extends Comparable<?>> ranking;
private @Nullable String order;
private final @NotNull String asc;
public ListCommand() {
sm = SimpleClans.getInstance().getSettingsManager();
asc = sm.getListAsc();
}
/**
* Execute the command
*
* @param player
* @param args
*/
public void execute(Player player, String[] args) {
SimpleClans plugin = SimpleClans.getInstance();
String headColor = sm.getPageHeadingsColor();
String subColor = sm.getPageSubTitleColor();
if (!plugin.getPermissionsManager().has(player, "simpleclans.anyone.list")) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
if (args.length > 2) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.list",player), sm.getCommandClan()));
return;
}
List<Clan> clans = plugin.getClanManager().getClans();
clans = clans.stream().filter(clan -> clan.isVerified() || sm.isShowUnverifiedOnList())
.collect(Collectors.toList());
sort(clans, args);
if (clans.isEmpty()) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.clans.have.been.created",player));
return;
}
ChatBlock chatBlock = new ChatBlock();
sendHeader(player, headColor, subColor, clans, chatBlock);
for (Clan clan : clans) {
addLine(chatBlock, clan);
}
boolean more = chatBlock.sendBlock(player, sm.getPageSize());
if (more) {
plugin.getStorageManager().addChatBlock(player, chatBlock);
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, headColor + MessageFormat.format(lang("view.next.page",player), sm.getCommandMore()));
}
ChatBlock.sendBlank(player);
}
private void addLine(ChatBlock chatBlock, Clan clan) {
String tag = sm.getClanChatBracketColor() + sm.getClanChatTagBracketLeft() + sm.getTagDefaultColor() + clan.getColorTag() + sm.getClanChatBracketColor() + sm.getClanChatTagBracketRight();
String name = (clan.isVerified() ? sm.getPageClanNameColor() : ChatColor.GRAY) + clan.getName();
String fullname = tag + " " + name;
String size = ChatColor.WHITE + "" + clan.getSize();
String kdr = clan.isVerified() ? ChatColor.YELLOW + "" + KDRFormat.format(clan.getTotalKDR()) : "";
chatBlock.addRow(" " + ranking.getRankingNumber(clan), fullname, kdr, size);
}
private void sendHeader(Player player, String headColor, String subColor, List<Clan> clans, ChatBlock chatBlock) {
ChatBlock.sendBlank(player);
ChatBlock.saySingle(player, sm.getServerName() + subColor + " " + lang("clans.lower", player) + " " + headColor + Helper.generatePageSeparator(sm.getPageSep()));
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, headColor + lang("total.clans", player) + " " + subColor + clans.size());
ChatBlock.sendBlank(player);
chatBlock.setAlignment("c", "l", "c", "c");
chatBlock.setFlexibility(false, true, false, false);
chatBlock.addRow(" " + headColor + lang("rank", player), lang("name", player), lang("kdr", player), lang("members", player));
}
private void sort(@NotNull List<Clan> clans, @NotNull String[] args) {
String type = sm.getListDefault();
if (args.length > 0) {
type = args[0];
}
String desc = sm.getListDesc();
if (args.length == 2) {
order = args[1];
if (!order.equalsIgnoreCase(asc) && !order.equalsIgnoreCase(desc)) {
order = null;
}
}
if (type.equalsIgnoreCase(sm.getListActive())) {
ranking = new RankingNumberResolver<>(clans, Clan::getLastUsed, isAsc(), ORDINAL);
}
if (type.equalsIgnoreCase(sm.getListFounded())) {
if (order == null) {
order = asc;
}
ranking = new RankingNumberResolver<>(clans, Clan::getFounded, isAsc(), ORDINAL);
}
if (type.equalsIgnoreCase(sm.getListKdr())) {
ranking = new RankingNumberResolver<>(clans, clan -> KDRFormat.toBigDecimal(clan.getTotalKDR()),
isAsc(), sm.getRankingType());
}
if (type.equalsIgnoreCase(sm.getListName())) {
if (order == null) {
order = asc;
}
ranking = new RankingNumberResolver<>(clans, Clan::getName, isAsc(), ORDINAL);
}
if (type.equalsIgnoreCase(sm.getListSize())) {
ranking = new RankingNumberResolver<>(clans, Clan::getSize, isAsc(), ORDINAL);
}
//in case the default type is invalid
if (ranking == null) {
ranking = new RankingNumberResolver<>(clans, clan -> KDRFormat.toBigDecimal(clan.getTotalKDR()), false,
sm.getRankingType());
}
}
private boolean isAsc() {
return asc.equalsIgnoreCase(order);
}
}
@@ -1,111 +1,120 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.*;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.text.DecimalFormat;
import java.text.MessageFormat;
import java.text.NumberFormat;
/**
* @author phaed
*/
public class LookupCommand {
public LookupCommand() {
}
/**
* Execute the command
*
* @param player
* @param arg
*/
public void execute(Player player, String[] arg) {
SimpleClans plugin = SimpleClans.getInstance();
String headColor = plugin.getSettingsManager().getPageHeadingsColor();
String subColor = plugin.getSettingsManager().getPageSubTitleColor();
NumberFormat formatter = new DecimalFormat("#.#");
String playerName = null;
if (arg.length == 0) {
if (!plugin.getPermissionsManager().has(player, "simpleclans.member.lookup")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
return;
}
playerName = player.getName();
} else if (arg.length == 1) {
if (!plugin.getPermissionsManager().has(player, "simpleclans.anyone.lookup")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
return;
}
playerName = arg[0];
} else {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.lookup.tag"), plugin.getSettingsManager().getCommandClan()));
return;
}
ClanPlayer targetCp = plugin.getClanManager().getAnyClanPlayer(playerName);
ClanPlayer myCp = plugin.getClanManager().getClanPlayer(player.getName());
Clan myClan = myCp == null ? null : myCp.getClan();
if (targetCp != null) {
Clan targetClan = targetCp.getClan();
ChatBlock.sendBlank(player);
ChatBlock.saySingle(player, MessageFormat.format(plugin.getLang("s.player.info"), plugin.getSettingsManager().getPageClanNameColor() + targetCp.getName() + subColor) + " " + headColor + Helper.generatePageSeparator(plugin.getSettingsManager().getPageSep()));
ChatBlock.sendBlank(player);
String clanName = ChatColor.WHITE + plugin.getLang("none");
if (targetClan != null) {
clanName = plugin.getSettingsManager().getClanChatBracketColor() + plugin.getSettingsManager().getClanChatTagBracketLeft() + plugin.getSettingsManager().getTagDefaultColor() + targetClan.getColorTag() + plugin.getSettingsManager().getClanChatBracketColor() + plugin.getSettingsManager().getClanChatTagBracketRight() + " " + plugin.getSettingsManager().getPageClanNameColor() + targetClan.getName();
}
String status = targetClan == null ? ChatColor.WHITE + plugin.getLang("free.agent") : (targetCp.isLeader() ? plugin.getSettingsManager().getPageLeaderColor() + plugin.getLang("leader") : (targetCp.isTrusted() ? plugin.getSettingsManager().getPageTrustedColor() + plugin.getLang("trusted") : plugin.getSettingsManager().getPageUnTrustedColor() + plugin.getLang("untrusted")));
String rank = ChatColor.WHITE + "" + Helper.parseColors(targetCp.getRank());
String joinDate = ChatColor.WHITE + "" + targetCp.getJoinDateString();
String lastSeen = ChatColor.WHITE + "" + targetCp.getLastSeenString();
String inactive = ChatColor.WHITE + "" + targetCp.getInactiveDays() + subColor + "/" + ChatColor.WHITE + plugin.getSettingsManager().getPurgePlayers() + " days";
String rival = ChatColor.WHITE + "" + targetCp.getRivalKills();
String neutral = ChatColor.WHITE + "" + targetCp.getNeutralKills();
String civilian = ChatColor.WHITE + "" + targetCp.getCivilianKills();
String deaths = ChatColor.WHITE + "" + targetCp.getDeaths();
String kdr = ChatColor.YELLOW + "" + formatter.format(targetCp.getKDR());
String pastClans = ChatColor.WHITE + "" + targetCp.getPastClansString(headColor + ", ");
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(plugin.getLang("clan.0"), clanName));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(plugin.getLang("rank.0"), rank));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(plugin.getLang("status.0"), status));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(plugin.getLang("kdr.0"), kdr));
ChatBlock.sendMessage(player, " " + subColor + plugin.getLang("kill.totals") + " " + headColor + "[" + plugin.getLang("rival") + ":" + rival + " " + headColor + "" + plugin.getLang("neutral") + ":" + neutral + " " + headColor + "" + plugin.getLang("civilian") + ":" + civilian + headColor + "]");
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(plugin.getLang("deaths.0"), deaths));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(plugin.getLang("join.date.0"), joinDate));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(plugin.getLang("last.seen.0"), lastSeen));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(plugin.getLang("past.clans.0"), pastClans));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(plugin.getLang("inactive.0"), inactive));
if (arg.length == 1 && !targetCp.equals(myCp)) {
String killType = ChatColor.GRAY + plugin.getLang("neutral");
if (targetClan == null) {
killType = ChatColor.DARK_GRAY + plugin.getLang("civilian");
} else if (myClan != null && myClan.isRival(targetClan.getTag())) {
killType = ChatColor.WHITE + plugin.getLang("rival");
}
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(plugin.getLang("kill.type.0"), killType));
}
ChatBlock.sendBlank(player);
} else {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.player.data.found"));
if (arg.length == 1 && myClan != null) {
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, MessageFormat.format(plugin.getLang("kill.type.civilian"), ChatColor.DARK_GRAY));
}
}
}
}
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.text.DecimalFormat;
import java.text.MessageFormat;
import java.text.NumberFormat;
import java.util.UUID;
/**
* @author phaed
*/
public class LookupCommand {
public LookupCommand() {
}
/**
* Execute the command
*
* @param player
* @param arg
*/
public void execute(Player player, String[] arg) {
SimpleClans plugin = SimpleClans.getInstance();
String headColor = plugin.getSettingsManager().getPageHeadingsColor();
String subColor = plugin.getSettingsManager().getPageSubTitleColor();
NumberFormat formatter = new DecimalFormat("#.#");
String playerName = null;
if (arg.length == 0) {
if (!plugin.getPermissionsManager().has(player, "simpleclans.member.lookup")) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
playerName = player.getName();
} else if (arg.length == 1) {
if (!plugin.getPermissionsManager().has(player, "simpleclans.anyone.lookup")) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
playerName = arg[0];
} else {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.lookup.tag",player), plugin.getSettingsManager().getCommandClan()));
return;
}
UUID targetUuid = UUIDMigration.getForcedPlayerUUID(playerName);
if (targetUuid == null) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.player.matched",player));
return;
}
ClanPlayer targetCp = plugin.getClanManager().getAnyClanPlayer(targetUuid);
ClanPlayer myCp = plugin.getClanManager().getClanPlayer(player.getUniqueId());
Clan myClan = myCp == null ? null : myCp.getClan();
if (targetCp != null) {
Clan targetClan = targetCp.getClan();
ChatBlock.sendBlank(player);
ChatBlock.saySingle(player, MessageFormat.format(lang("s.player.info",player), plugin.getSettingsManager().getPageClanNameColor() + targetCp.getName() + subColor) + " " + headColor + Helper.generatePageSeparator(plugin.getSettingsManager().getPageSep()));
ChatBlock.sendBlank(player);
String clanName = ChatColor.WHITE + lang("none",player);
if (targetClan != null) {
clanName = plugin.getSettingsManager().getClanChatBracketColor() + plugin.getSettingsManager().getClanChatTagBracketLeft() + plugin.getSettingsManager().getTagDefaultColor() + targetClan.getColorTag() + plugin.getSettingsManager().getClanChatBracketColor() + plugin.getSettingsManager().getClanChatTagBracketRight() + " " + plugin.getSettingsManager().getPageClanNameColor() + targetClan.getName();
}
String status = targetClan == null ? ChatColor.WHITE + lang("free.agent",player) : (targetCp.isLeader() ? plugin.getSettingsManager().getPageLeaderColor() + lang("leader",player) : (targetCp.isTrusted() ? plugin.getSettingsManager().getPageTrustedColor() + lang("trusted",player) : plugin.getSettingsManager().getPageUnTrustedColor() + lang("untrusted",player)));
String rank = ChatColor.WHITE + "" + Helper.parseColors(targetCp.getRankDisplayName());
String joinDate = ChatColor.WHITE + "" + targetCp.getJoinDateString();
String lastSeen = ChatColor.WHITE + "" + targetCp.getLastSeenString(player);
String inactive = ChatColor.WHITE + "" + targetCp.getInactiveDays() + subColor + "/" + ChatColor.WHITE + plugin.getSettingsManager().getPurgePlayers() + " days";
String rival = ChatColor.WHITE + "" + targetCp.getRivalKills();
String neutral = ChatColor.WHITE + "" + targetCp.getNeutralKills();
String civilian = ChatColor.WHITE + "" + targetCp.getCivilianKills();
String deaths = ChatColor.WHITE + "" + targetCp.getDeaths();
String kdr = ChatColor.YELLOW + "" + formatter.format(targetCp.getKDR());
String pastClans = ChatColor.WHITE + "" + targetCp.getPastClansString(headColor + ", ");
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(lang("clan.0",player), clanName));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(lang("rank.0",player), rank));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(lang("status.0",player), status));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(lang("kdr.0",player), kdr));
ChatBlock.sendMessage(player, " " + subColor + lang("kill.totals",player) + " " + headColor + "[" + lang("rival",player) + ":" + rival + " " + headColor + "" + lang("neutral",player) + ":" + neutral + " " + headColor + "" + lang("civilian",player) + ":" + civilian + headColor + "]");
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(lang("deaths.0",player), deaths));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(lang("join.date.0",player), joinDate));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(lang("last.seen.0",player), lastSeen));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(lang("past.clans.0",player), pastClans));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(lang("inactive.0",player), inactive));
if (arg.length == 1 && !targetCp.equals(myCp)) {
String killType = ChatColor.GRAY + lang("neutral",player);
if (targetClan == null) {
killType = ChatColor.DARK_GRAY + lang("civilian",player);
} else if (myClan != null && myClan.isRival(targetClan.getTag())) {
killType = ChatColor.WHITE + lang("rival",player);
}
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(lang("kill.type.0",player), killType));
}
ChatBlock.sendBlank(player);
} else {
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.player.data.found",player));
if (arg.length == 1 && myClan != null) {
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, MessageFormat.format(lang("kill.type.civilian",player), ChatColor.DARK_GRAY));
}
}
}
}
@@ -1,6 +1,8 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -9,6 +11,8 @@ import java.text.MessageFormat;
import java.util.LinkedList;
import java.util.List;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
/**
* @author phaed
*/
@@ -25,7 +29,7 @@ public class MenuCommand {
*/
public void execute(Player player) {
SimpleClans plugin = SimpleClans.getInstance();
String headColor = plugin.getSettingsManager().getPageHeadingsColor();
String subColor = plugin.getSettingsManager().getPageSubTitleColor();
@@ -33,149 +37,206 @@ public class MenuCommand {
Clan clan = cp == null ? null : cp.getClan();
boolean isLeader = cp != null && cp.isLeader();
boolean isTrusted = cp != null && cp.isTrusted();
boolean isVerified = clan != null && clan.isVerified();
boolean isNonVerified = clan != null && !clan.isVerified();
String clanCommand = plugin.getSettingsManager().getCommandClan();
ChatBlock chatBlock = new ChatBlock();
chatBlock.setCropRight(false);
chatBlock.setPadRight(false);
if (clan == null && plugin.getPermissionsManager().has(player, "simpleclans.leader.create")) {
if (plugin.getSettingsManager().isePurchaseCreation()) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.create.tag.name.1.purchase.a.new.clan"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.create.1.purchase.a.new.clan", player), clanCommand, ChatColor.WHITE));
} else {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.create.tag.name.1.create.a.new.clan"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.create.1.create.a.new.clan", player), clanCommand, ChatColor.WHITE));
}
}
if (clan != null && plugin.getPermissionsManager().has(player, "simpleclans.member.chat")) {
String chatCommand = plugin.getSettingsManager().isTagBasedClanChat() ? clan.getTag() : plugin.getSettingsManager().getCommandClanChat();
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.message.1.send.a.message.to.clan.chat", player), chatCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.join.leave.3.join.leave.the.clan.chat", player), chatCommand, lang("join", player), lang("leave", player), ChatColor.WHITE));
}
if (clan != null && plugin.getPermissionsManager().has(player, "simpleclans.member.ally")) {
String allyCommand = plugin.getSettingsManager().getCommandAlly();
chatBlock.addRow(ChatColor.AQUA + " " + lang("0.message.1.send.a.message.to.ally.chat", player, allyCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.AQUA + " " + lang("0.join.leave.3.join.leave.the.ally.chat", player, allyCommand, lang("join", player), lang("leave", player), ChatColor.WHITE));
}
if (isNonVerified && plugin.getSettingsManager().isRequireVerification() && plugin.getSettingsManager().isePurchaseVerification()) {
chatBlock.addRow(ChatColor.DARK_RED + " " + MessageFormat.format(plugin.getLang("0.verify.1.purchase.verification.of.your.clan"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.DARK_RED + " " + MessageFormat.format(lang("0.verify.1.purchase.verification.of.your.clan",player), clanCommand, ChatColor.WHITE));
}
if (plugin.getPermissionsManager().has(player, "simpleclans.anyone.list")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.list.1.lists.all.clans"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.list.1.lists.all.clans",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && plugin.getPermissionsManager().has(player, "simpleclans.member.profile")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.profile.1.view.your.clan.s.profile"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.profile.1.view.your.clan.s.profile",player), clanCommand, ChatColor.WHITE));
}
if (plugin.getPermissionsManager().has(player, "simpleclans.anyone.profile")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.profile.tag.1.view.a.clan.s.profile"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.profile.tag.1.view.a.clan.s.profile",player), clanCommand, ChatColor.WHITE));
}
if (plugin.getPermissionsManager().has(player, "simpleclans.member.lookup")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.lookup.1.lookup.your.info"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.lookup.1.lookup.your.info",player), clanCommand, ChatColor.WHITE));
}
if (plugin.getPermissionsManager().has(player, "simpleclans.anyone.lookup")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.lookup.player.1.lookup.a.player.s.info"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.lookup.player.1.lookup.a.player.s.info",player), clanCommand, ChatColor.WHITE));
}
if (plugin.getPermissionsManager().has(player, "simpleclans.anyone.leaderboard")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.leaderboard.1.view.leaderboard"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.leaderboard.1.view.leaderboard",player), clanCommand, ChatColor.WHITE));
}
if (plugin.getPermissionsManager().has(player, "simpleclans.anyone.alliances")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.alliances.1.view.all.clan.alliances"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.alliances.1.view.all.clan.alliances",player), clanCommand, ChatColor.WHITE));
}
if (plugin.getPermissionsManager().has(player, "simpleclans.anyone.rivalries")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.rivalries.1.view.all.clan.rivalries"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.rivalries.1.view.all.clan.rivalries",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && plugin.getPermissionsManager().has(player, "simpleclans.member.roster")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.roster.1.view.your.clan.s.member.list"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.roster.1.view.your.clan.s.member.list",player), clanCommand, ChatColor.WHITE));
}
if (plugin.getPermissionsManager().has(player, "simpleclans.anyone.roster")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.roster.tag.1.view.a.clan.s.member.list"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.roster.tag.1.view.a.clan.s.member.list",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && isTrusted && plugin.getPermissionsManager().has(player, "simpleclans.member.vitals")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.vitals.1.view.your.clan.member.s.vitals"), clanCommand, ChatColor.WHITE));
if (isVerified && plugin.getPermissionsManager().has(player, RankPermission.VITALS, PermissionLevel.TRUSTED, false)) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.vitals.1.view.your.clan.member.s.vitals",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && isTrusted && plugin.getPermissionsManager().has(player, "simpleclans.member.coords")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.coords.1.view.your.clan.member.s.coordinates"), clanCommand, ChatColor.WHITE));
if (isVerified && plugin.getPermissionsManager().has(player, RankPermission.COORDS, PermissionLevel.TRUSTED, false)) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.coords.1.view.your.clan.member.s.coordinates",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && isTrusted && plugin.getPermissionsManager().has(player, "simpleclans.member.stats")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.stats.1.view.your.clan.member.s.stats"), clanCommand, ChatColor.WHITE));
if (isVerified && plugin.getPermissionsManager().has(player, RankPermission.STATS, PermissionLevel.TRUSTED, false)) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.stats.1.view.your.clan.member.s.stats",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && isTrusted && plugin.getPermissionsManager().has(player, "simpleclans.member.kills")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.kills"), clanCommand, ChatColor.WHITE));
if (isVerified && plugin.getPermissionsManager().has(player, RankPermission.KILLS, PermissionLevel.TRUSTED, false)) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.kills",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && isTrusted && plugin.getPermissionsManager().has(player, "simpleclans.member.kills")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.killsplayer"), clanCommand, ChatColor.WHITE));
if (isVerified && plugin.getPermissionsManager().has(player, RankPermission.KILLS, PermissionLevel.TRUSTED, false)) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.killsplayer",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && isLeader && plugin.getPermissionsManager().has(player, "simpleclans.leader.ally")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.ally.add.remove.tag.1.add.remove.an.ally.clan"), clanCommand, ChatColor.WHITE));
if (plugin.getSettingsManager().isMemberFee() && isVerified && plugin.getPermissionsManager().has(player, "simpleclans.member.fee-check")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.fee.check",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && isLeader && plugin.getPermissionsManager().has(player, "simpleclans.leader.rival")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.rival.add.remove.tag.1.add.remove.a.rival.clan"), clanCommand, ChatColor.WHITE));
if (plugin.getSettingsManager().isMemberFee() && isVerified && plugin.getPermissionsManager().has(player, RankPermission.FEE_SET, PermissionLevel.LEADER, false)) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.fee.set",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && plugin.getPermissionsManager().has(player, "simpleclans.member.home")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("home-menu"), clanCommand, ChatColor.WHITE));
if (isVerified && (plugin.getPermissionsManager().has(player, RankPermission.ALLY_ADD, PermissionLevel.LEADER, false)
|| plugin.getPermissionsManager().has(player, RankPermission.ALLY_REMOVE, PermissionLevel.LEADER, false))) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.ally.add.remove.tag.1.add.remove.an.ally.clan",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && isLeader && plugin.getPermissionsManager().has(player, "simpleclans.leader.home-set")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("home-set-menu"), clanCommand, ChatColor.WHITE));
if (isVerified && (plugin.getPermissionsManager().has(player, RankPermission.RIVAL_ADD, PermissionLevel.LEADER, false)
|| plugin.getPermissionsManager().has(player, RankPermission.RIVAL_REMOVE, PermissionLevel.LEADER, false))) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.rival.add.remove.tag.1.add.remove.a.rival.clan",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && isLeader && plugin.getPermissionsManager().has(player, "simpleclans.leader.home-set")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("home-clear-menu"), clanCommand, ChatColor.WHITE));
if (isVerified && plugin.getPermissionsManager().has(player, RankPermission.HOME_TP, PermissionLevel.TRUSTED, false)) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("home-menu",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && isLeader && plugin.getPermissionsManager().has(player, "simpleclans.leader.home-regroup")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("home-regroup-menu"), clanCommand, ChatColor.WHITE));
if (isVerified && plugin.getPermissionsManager().has(player, RankPermission.HOME_SET, PermissionLevel.LEADER, false)) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("home-set-menu",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && isLeader && plugin.getPermissionsManager().has(player, "simpleclans.leader.war")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.war"), clanCommand, ChatColor.WHITE));
if (isVerified && plugin.getPermissionsManager().has(player, RankPermission.HOME_SET, PermissionLevel.LEADER, false)) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("home-clear-menu",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && plugin.getPermissionsManager().has(player, RankPermission.HOME_REGROUP, PermissionLevel.LEADER, false)) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("home-regroup-menu",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && (plugin.getPermissionsManager().has(player, RankPermission.WAR_END, PermissionLevel.LEADER, false)
|| plugin.getPermissionsManager().has(player, RankPermission.WAR_START, PermissionLevel.LEADER, false))) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.war",player), clanCommand, ChatColor.WHITE));
}
if (plugin.getPermissionsManager().has(player, "simpleclans.member.resetkdr")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.resetkdr.1.resets.your.kdr"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.resetkdr.1.resets.your.kdr",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && plugin.getPermissionsManager().has(player, "simpleclans.member.bb")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.bb.1.display.bulletin.board"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.bb.1.display.bulletin.board",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && isTrusted && plugin.getPermissionsManager().has(player, "simpleclans.member.bb-add")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.bb.msg.1.add.a.message.to.the.bulletin.board"), clanCommand, ChatColor.WHITE));
if (isVerified && plugin.getPermissionsManager().has(player, RankPermission.BB_ADD, PermissionLevel.TRUSTED, false)) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.bb.msg.1.add.a.message.to.the.bulletin.board",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && isLeader && plugin.getPermissionsManager().has(player, "simpleclans.leader.modtag")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.modtag.tag.1.modify.the.clan.s.tag"), clanCommand, ChatColor.WHITE));
if (isVerified && plugin.getPermissionsManager().has(player, RankPermission.MODTAG, PermissionLevel.LEADER, false)) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.modtag.tag.1.modify.the.clan.s.tag",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && plugin.getPermissionsManager().has(player, RankPermission.DESCRIPTION, PermissionLevel.LEADER, false)) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.description.description.1.modify.the.clan.s.description",player), clanCommand, ChatColor.WHITE));
}
String toggles = "";
if (isVerified && isTrusted && plugin.getPermissionsManager().has(player, "simpleclans.member.bb-toggle")) {
if (isVerified && plugin.getPermissionsManager().has(player, "simpleclans.member.bb-toggle")) {
toggles += "bb/";
}
if (isVerified && isTrusted && plugin.getPermissionsManager().has(player, "simpleclans.member.tag-toggle")) {
if (isVerified && plugin.getPermissionsManager().has(player, "simpleclans.member.tag-toggle")) {
toggles += "tag/";
}
if (plugin.getSettingsManager().isMemberFee() && isVerified && plugin.getPermissionsManager().has(player, RankPermission.FEE_ENABLE, PermissionLevel.LEADER, false)) {
toggles += "fee/";
}
if (!toggles.isEmpty()) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.toggle.command"), clanCommand, ChatColor.WHITE, Helper.stripTrailing(toggles, "/")));
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.toggle.command",player), clanCommand, ChatColor.WHITE, Helper.stripTrailing(toggles, "/")));
}
if (isLeader && plugin.getPermissionsManager().has(player, "simpleclans.leader.invite")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.invite.player.1.invite.a.player"), clanCommand, ChatColor.WHITE));
if (plugin.getPermissionsManager().has(player, RankPermission.INVITE, PermissionLevel.LEADER, false)) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.invite.player.1.invite.a.player",player), clanCommand, ChatColor.WHITE));
}
if (isLeader && plugin.getPermissionsManager().has(player, "simpleclans.leader.kick")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.kick.player.1.kick.a.player.from.the.clan"), clanCommand, ChatColor.WHITE));
}
if (isVerified && isLeader && plugin.getPermissionsManager().has(player, "simpleclans.leader.setrank")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.trust.setrank"), clanCommand, ChatColor.WHITE));
if (plugin.getPermissionsManager().has(player, RankPermission.KICK, PermissionLevel.LEADER, false)) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.kick.player.1.kick.a.player.from.the.clan",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && isLeader && plugin.getPermissionsManager().has(player, "simpleclans.leader.settrust")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.trust.untrust.player.1.set.trust.level1"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.trust.untrust.player.1.set.trust.level1",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && isLeader && plugin.getPermissionsManager().has(player, "simpleclans.leader.settrust")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.trust.untrust.player.1.set.trust.level2"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.trust.untrust.player.1.set.trust.level2",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && isLeader && plugin.getPermissionsManager().has(player, "simpleclans.leader.rank.create")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.rank.create.1.create.rank",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && isLeader && plugin.getPermissionsManager().has(player, "simpleclans.leader.rank.assign")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.rank.assign.player.rank.1.assign.rank.to.player",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && isLeader && plugin.getPermissionsManager().has(player, "simpleclans.leader.rank.unassign")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.rank.unassign.player.1.unassign.player.from.rank",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && isLeader && plugin.getPermissionsManager().has(player, "simpleclans.leader.rank.delete")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.rank.delete.rank.1.delete.rank",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && plugin.getPermissionsManager().has(player, RankPermission.RANK_LIST, PermissionLevel.LEADER, false)) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.rank.list.1.list.ranks",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && plugin.getPermissionsManager().has(player, RankPermission.RANK_DISPLAYNAME, PermissionLevel.LEADER, false)) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.rank.setdisplayname.rank.displayname.1.set.rank.displayname",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && isLeader && plugin.getPermissionsManager().has(player, "simpleclans.leader.rank.permissions.available")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.rank.permissions.1.list.available.permissions",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && isLeader && plugin.getPermissionsManager().has(player, "simpleclans.leader.rank.permissions.list")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.rank.permissions.rank.1.list.rank.permissions",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && isLeader && plugin.getPermissionsManager().has(player, "simpleclans.leader.rank.permissions.add")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.rank.permissions.rank.add.permission.1.add.a.permission.to.rank",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && isLeader && plugin.getPermissionsManager().has(player, "simpleclans.leader.rank.permissions.remove")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.rank.permissions.rank.remove.permission.1.remove.a.permission.from.rank",player), clanCommand, ChatColor.WHITE));
}
if (isLeader && plugin.getPermissionsManager().has(player, "simpleclans.leader.promote")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.promote.member.1.promote.a.member.to.leader"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.promote.member.1.promote.a.member.to.leader",player), clanCommand, ChatColor.WHITE));
}
if (isLeader && plugin.getPermissionsManager().has(player, "simpleclans.leader.demote")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.demote.leader.1.demote.a.leader.to.member"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.demote.leader.1.demote.a.leader.to.member",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && plugin.getPermissionsManager().has(player, RankPermission.SETBANNER, false)) {
chatBlock.addRow(ChatColor.AQUA + " " + lang("0.setbanner.1.set.clan.banner", player, clanCommand, ChatColor.WHITE));
}
if (isLeader && plugin.getPermissionsManager().has(player, "simpleclans.leader.ff")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.clanff.allow.block.1.toggle.clan.s.friendly.fire"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.clanff.allow.block.1.toggle.clan.s.friendly.fire",player), clanCommand, ChatColor.WHITE));
}
if (isLeader && plugin.getPermissionsManager().has(player, "simpleclans.leader.disband")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.disband.1.disband.your.clan"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.disband.1.disband.your.clan",player), clanCommand, ChatColor.WHITE));
}
if (plugin.getPermissionsManager().has(player, "simpleclans.member.ff")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.ff.allow.auto.1.toggle.personal.friendly.fire"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.ff.allow.auto.1.toggle.personal.friendly.fire",player), clanCommand, ChatColor.WHITE));
}
if (plugin.getPermissionsManager().has(player, "simpleclans.member.resign")) {
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(plugin.getLang("0.resign.1.resign.from.the.clan"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.AQUA + " " + MessageFormat.format(lang("0.resign.1.resign.from.the.clan",player), clanCommand, ChatColor.WHITE));
}
for (String item : menuItems) {
@@ -183,39 +244,45 @@ public class MenuCommand {
}
if (plugin.getPermissionsManager().has(player, "simpleclans.mod.verify") && plugin.getSettingsManager().isRequireVerification()) {
chatBlock.addRow(ChatColor.DARK_RED + " " + MessageFormat.format(plugin.getLang("0.verify.tag.1.verify.an.unverified.clan"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.DARK_RED + " " + MessageFormat.format(lang("0.verify.tag.1.verify.an.unverified.clan",player), clanCommand, ChatColor.WHITE));
}
if (plugin.getPermissionsManager().has(player, "simpleclans.mod.place")) {
chatBlock.addRow(ChatColor.DARK_RED + " " + MessageFormat.format(plugin.getLang("0.place"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.DARK_RED + " " + MessageFormat.format(lang("0.place",player), clanCommand, ChatColor.WHITE));
}
if (isVerified && isTrusted && plugin.getPermissionsManager().has(player, "simpleclans.mod.mostkilled")) {
chatBlock.addRow(ChatColor.DARK_RED + " " + MessageFormat.format(plugin.getLang("0.mostkilled"), clanCommand, ChatColor.WHITE));
if (isVerified && plugin.getPermissionsManager().has(player, RankPermission.MOSTKILLED, PermissionLevel.TRUSTED, false)) {
chatBlock.addRow(ChatColor.DARK_RED + " " + MessageFormat.format(lang("0.mostkilled",player), clanCommand, ChatColor.WHITE));
}
if (plugin.getPermissionsManager().has(player, "simpleclans.mod.disband")) {
chatBlock.addRow(ChatColor.DARK_RED + " " + MessageFormat.format(plugin.getLang("0.disband.tag.1.disband.a.clan"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.DARK_RED + " " + MessageFormat.format(lang("0.disband.tag.1.disband.a.clan",player), clanCommand, ChatColor.WHITE));
}
if (plugin.getPermissionsManager().has(player, "simpleclans.mod.ban")) {
chatBlock.addRow(ChatColor.DARK_RED + " " + MessageFormat.format(plugin.getLang("0.ban.unban.player.1.ban.unban.a.player"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.DARK_RED + " " + MessageFormat.format(lang("0.ban.unban.player.1.ban.unban.a.player",player), clanCommand, ChatColor.WHITE));
}
if (plugin.getPermissionsManager().has(player, "simpleclans.mod.hometp")) {
chatBlock.addRow(ChatColor.DARK_RED + " " + MessageFormat.format(plugin.getLang("0.hometp.clan.1.tp.home.a.clan"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.DARK_RED + " " + MessageFormat.format(lang("0.hometp.clan.1.tp.home.a.clan",player), clanCommand, ChatColor.WHITE));
}
if (plugin.getPermissionsManager().has(player, "simpleclans.mod.globalff")) {
chatBlock.addRow(ChatColor.DARK_RED + " " + MessageFormat.format(plugin.getLang("0.globalff.allow.auto.1.set.global.friendly.fire"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.DARK_RED + " " + MessageFormat.format(lang("0.globalff.allow.auto.1.set.global.friendly.fire",player), clanCommand, ChatColor.WHITE));
}
if (plugin.getPermissionsManager().has(player, "simpleclans.admin.demote")) {
chatBlock.addRow(ChatColor.DARK_RED + " " + MessageFormat.format(lang("0.demote.leader.1.demote.a.leader.to.member",player), clanCommand, ChatColor.WHITE));
}
if (plugin.getPermissionsManager().has(player, "simpleclans.admin.purge")) {
chatBlock.addRow(ChatColor.DARK_RED + " " + MessageFormat.format(lang("0.purge.player.1.purge.a.player",player), clanCommand, ChatColor.WHITE));
}
if (plugin.getPermissionsManager().has(player, "simpleclans.admin.resetkdr")) {
chatBlock.addRow(ChatColor.DARK_RED + " " + MessageFormat.format(plugin.getLang("0.resetkdr.1.resets.kdr"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.DARK_RED + " " + MessageFormat.format(lang("0.resetkdr.1.resets.kdr",player), clanCommand, ChatColor.WHITE));
}
if (plugin.getPermissionsManager().has(player, "simpleclans.admin.reload")) {
chatBlock.addRow(ChatColor.DARK_RED + " " + MessageFormat.format(plugin.getLang("0.reload.1.reload.configuration"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.DARK_RED + " " + MessageFormat.format(lang("0.reload.1.reload.configuration",player), clanCommand, ChatColor.WHITE));
}
if (chatBlock.isEmpty()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
ChatBlock.sendBlank(player);
ChatBlock.saySingle(player, plugin.getSettingsManager().getServerName() + subColor + " " + plugin.getLang("clan.commands") + " " + headColor + Helper.generatePageSeparator(plugin.getSettingsManager().getPageSep()));
ChatBlock.saySingle(player, plugin.getSettingsManager().getServerName() + subColor + " " + lang("clan.commands",player) + " " + headColor + Helper.generatePageSeparator(plugin.getSettingsManager().getPageSep()));
ChatBlock.sendBlank(player);
boolean more = chatBlock.sendBlock(player, plugin.getSettingsManager().getPageSize());
@@ -223,7 +290,7 @@ public class MenuCommand {
if (more) {
plugin.getStorageManager().addChatBlock(player, chatBlock);
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, headColor + MessageFormat.format(plugin.getLang("view.next.page"), plugin.getSettingsManager().getCommandMore()));
ChatBlock.sendMessage(player, headColor + MessageFormat.format(lang("view.next.page",player), plugin.getSettingsManager().getCommandMore()));
}
ChatBlock.sendBlank(player);
@@ -244,11 +311,12 @@ public class MenuCommand {
ChatBlock chatBlock = new ChatBlock();
chatBlock.addRow(ChatColor.DARK_RED + " " + MessageFormat.format(plugin.getLang("0.verify.tag.1.verify.an.unverified.clan"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.DARK_RED + " " + MessageFormat.format(plugin.getLang("0.reload.1.reload.configuration"), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.DARK_RED + " " + MessageFormat.format(lang("0.purge.player.1.purge.a.player",sender), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.DARK_RED + " " + MessageFormat.format(lang("0.verify.tag.1.verify.an.unverified.clan",sender), clanCommand, ChatColor.WHITE));
chatBlock.addRow(ChatColor.DARK_RED + " " + MessageFormat.format(lang("0.reload.1.reload.configuration",sender), clanCommand, ChatColor.WHITE));
ChatBlock.sendBlank(sender);
ChatBlock.saySingle(sender, plugin.getSettingsManager().getServerName() + subColor + " " + plugin.getLang("clan.commands") + " " + headColor + Helper.generatePageSeparator(plugin.getSettingsManager().getPageSep()));
ChatBlock.saySingle(sender, plugin.getSettingsManager().getServerName() + subColor + " " + lang("clan.commands",sender) + " " + headColor + Helper.generatePageSeparator(plugin.getSettingsManager().getPageSep()));
ChatBlock.sendBlank(sender);
chatBlock.sendBlock(sender, plugin.getSettingsManager().getPageSize());
ChatBlock.sendBlank(sender);
@@ -4,7 +4,11 @@ import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.PermissionLevel;
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import net.sacredlabyrinth.phaed.simpleclans.utils.TagValidator;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
@@ -27,59 +31,48 @@ public class ModtagCommand {
SimpleClans plugin = SimpleClans.getInstance();
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.modtag")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("not.a.member.of.any.clan"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan",player));
return;
}
Clan clan = cp.getClan();
if (!clan.isVerified()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("clan.is.not.verified"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("clan.is.not.verified",player));
return;
}
if (!clan.isLeader(player)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.leader.permissions"));
return;
if (!plugin.getPermissionsManager().has(player, RankPermission.MODTAG, PermissionLevel.LEADER, true)) {
return;
}
if (arg.length != 1) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.0.modtag.tag"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("example.clan.modtag.4kfo.4l"));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.0.modtag.tag",player), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + lang("example.clan.modtag.4kfo.4l",player));
return;
}
String newtag = arg[0];
String cleantag = Helper.cleanTag(newtag);
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.coloredtag") && newtag.contains("&")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("your.tag.cannot.contain.color.codes"));
return;
}
if (Helper.stripColors(newtag).length() > plugin.getSettingsManager().getTagMaxLength()) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("your.clan.tag.cannot.be.longer.than.characters"), plugin.getSettingsManager().getTagMaxLength()));
return;
}
if (plugin.getSettingsManager().hasDisallowedColor(newtag)) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("your.tag.cannot.contain.the.following.colors"), plugin.getSettingsManager().getDisallowedColorString()));
return;
}
if (!Helper.stripColors(newtag).matches("[0-9a-zA-Z]*")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("your.clan.tag.can.only.contain.letters.numbers.and.color.codes"));
return;
}
if (!cleantag.equals(clan.getTag())) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("you.can.only.modify.the.color.and.case.of.the.tag"));
TagValidator validator = new TagValidator(plugin, player, newtag);
if (validator.getErrorMessage() != null) {
ChatBlock.sendMessage(player, validator.getErrorMessage());
return;
}
clan.addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("tag.changed.to.0"), Helper.parseColors(newtag)));
if (!cleantag.equals(clan.getTag())) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("you.can.only.modify.the.color.and.case.of.the.tag",player));
return;
}
clan.addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(lang("tag.changed.to.0"), Helper.parseColors(newtag)));
clan.changeClanTag(newtag);
plugin.getClanManager().updateDisplayName(player.getPlayer());
plugin.getClanManager().updateDisplayName(player);
}
}
@@ -1,93 +1,105 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.*;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
public class MostKilledCommand {
public MostKilledCommand() {
}
/**
* Execute the command
*
* @param player
* @param arg
*/
public void execute(Player player, String[] arg) {
SimpleClans plugin = SimpleClans.getInstance();
String headColor = plugin.getSettingsManager().getPageHeadingsColor();
String subColor = plugin.getSettingsManager().getPageSubTitleColor();
if (!plugin.getPermissionsManager().has(player, "simpleclans.mod.mostkilled")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("not.a.member.of.any.clan"));
return;
}
Clan clan = cp.getClan();
if (!clan.isVerified()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("clan.is.not.verified"));
return;
}
if (!cp.isTrusted()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("only.trusted.players.can.access.clan.stats"));
return;
}
ChatBlock chatBlock = new ChatBlock();
chatBlock.setFlexibility(true, false, false);
chatBlock.setAlignment("l", "c", "l");
chatBlock.addRow(" " + headColor + plugin.getLang("victim"), headColor + plugin.getLang("killcount"), headColor + plugin.getLang("attacker"));
Map<String, Integer> killsPerPlayerUnordered = plugin.getStorageManager().getMostKilled();
if (killsPerPlayerUnordered.isEmpty()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("nokillsfound"));
return;
}
Map<String, Integer> killsPerPlayer = Helper.sortByValue(killsPerPlayerUnordered);
for (Entry<String, Integer> attackerVictim : killsPerPlayer.entrySet()) {
String[] split = attackerVictim.getKey().split(" ");
if (split.length < 2) {
continue;
}
int count = attackerVictim.getValue();
String attacker = split[0];
String victim = split[1];
chatBlock.addRow(" " + ChatColor.WHITE + victim, ChatColor.AQUA + "" + count, ChatColor.YELLOW + attacker);
}
ChatBlock.saySingle(player, plugin.getSettingsManager().getServerName() + subColor + " " + plugin.getLang("mostkilled") + " " + headColor + Helper.generatePageSeparator(plugin.getSettingsManager().getPageSep()));
ChatBlock.sendBlank(player);
boolean more = chatBlock.sendBlock(player, plugin.getSettingsManager().getPageSize());
if (more) {
plugin.getStorageManager().addChatBlock(player, chatBlock);
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, headColor + MessageFormat.format(plugin.getLang("view.next.page"), plugin.getSettingsManager().getCommandMore()));
}
ChatBlock.sendBlank(player);
}
}
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import net.sacredlabyrinth.phaed.simpleclans.managers.StorageManager.DataCallback;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.scheduler.BukkitRunnable;
import java.text.MessageFormat;
import java.util.Map;
import java.util.Map.Entry;
public class MostKilledCommand {
public MostKilledCommand() {
}
/**
* Execute the command
*
* @param player
* @param arg
*/
public void execute(Player player, String[] arg) {
SimpleClans plugin = SimpleClans.getInstance();
String headColor = plugin.getSettingsManager().getPageHeadingsColor();
String subColor = plugin.getSettingsManager().getPageSubTitleColor();
if (!plugin.getPermissionsManager().has(player, "simpleclans.mod.mostkilled")) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan",player));
return;
}
Clan clan = cp.getClan();
if (!clan.isVerified()) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("clan.is.not.verified",player));
return;
}
if (!plugin.getPermissionsManager().has(player, RankPermission.MOSTKILLED, PermissionLevel.TRUSTED, true)) {
return;
}
plugin.getStorageManager().getMostKilled(new DataCallback<Map<String, Integer>>() {
@Override
public void onResultReady(Map<String, Integer> data) {
new BukkitRunnable() {
@Override
public void run() {
ChatBlock chatBlock = new ChatBlock();
chatBlock.setFlexibility(true, false, false);
chatBlock.setAlignment("l", "c", "l");
chatBlock.addRow(" " + headColor + lang("victim",player), headColor + lang("killcount",player), headColor + lang("attacker",player));
if (data.isEmpty()) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("nokillsfound",player));
return;
}
Map<String, Integer> killsPerPlayer = Helper.sortByValue(data);
for (Entry<String, Integer> attackerVictim : killsPerPlayer.entrySet()) {
String[] split = attackerVictim.getKey().split(" ");
if (split.length < 2) {
continue;
}
int count = attackerVictim.getValue();
String attacker = split[0];
String victim = split[1];
chatBlock.addRow(" " + ChatColor.WHITE + victim, ChatColor.AQUA + "" + count, ChatColor.YELLOW + attacker);
}
ChatBlock.saySingle(player, plugin.getSettingsManager().getServerName() + subColor + " " + lang("mostkilled",player) + " " + headColor + Helper.generatePageSeparator(plugin.getSettingsManager().getPageSep()));
ChatBlock.sendBlank(player);
boolean more = chatBlock.sendBlock(player, plugin.getSettingsManager().getPageSize());
if (more) {
plugin.getStorageManager().addChatBlock(player, chatBlock);
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, headColor + MessageFormat.format(lang("view.next.page",player), plugin.getSettingsManager().getCommandMore()));
}
ChatBlock.sendBlank(player);
}
}.runTask(plugin);
}
});
}
}
@@ -1,7 +1,7 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.*;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -25,27 +25,27 @@ public class PlaceCommand {
Player player = (Player) sender;
if (!plugin.getPermissionsManager().has(player, "simpleclans.mod.place")) {
ChatBlock.sendMessage(sender, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(sender, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
}
if (arg.length != 2) {
ChatBlock.sendMessage(sender, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.0.place"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(sender, ChatColor.RED + MessageFormat.format(lang("usage.0.place",sender), plugin.getSettingsManager().getCommandClan()));
return;
}
Player player = Helper.getPlayer(arg[0]);
if (player == null) {
ChatBlock.sendMessage(sender, ChatColor.RED + plugin.getLang("no.player.matched"));
ChatBlock.sendMessage(sender, ChatColor.RED + lang("no.player.matched",sender));
return;
}
Clan newClan = plugin.getClanManager().getClan(arg[1]);
if (newClan == null) {
ChatBlock.sendMessage(sender, ChatColor.RED + plugin.getLang("the.clan.does.not.exist"));
ChatBlock.sendMessage(sender, ChatColor.RED + lang("the.clan.does.not.exist", sender));
return;
}
@@ -54,17 +54,17 @@ public class PlaceCommand {
if (oldCp != null) {
Clan oldClan = oldCp.getClan();
if (oldClan.equals(newClan)) {
ChatBlock.sendMessage(sender, lang("player.already.in.this.clan", player));
return;
}
if (oldClan.isLeader(player) && oldClan.getLeaders().size() <= 1) {
oldClan.clanAnnounce(player.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("clan.has.been.disbanded"), oldClan.getName()));
oldClan.clanAnnounce(player.getName(), ChatColor.AQUA + MessageFormat.format(lang("clan.has.been.disbanded",sender), oldClan.getName()));
oldClan.disband();
} else {
oldClan.addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("0.has.resigned"), Helper.capitalize(player.getName())));
if (SimpleClans.getInstance().hasUUID()) {
oldClan.removePlayerFromClan(player.getUniqueId());
} else {
oldClan.removePlayerFromClan(player.getName());
}
oldClan.addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(lang("0.has.resigned"), player.getName()));
oldClan.removePlayerFromClan(player.getUniqueId());
}
}
@@ -74,8 +74,8 @@ public class PlaceCommand {
return;
}
newClan.addBb(ChatColor.AQUA + MessageFormat.format(plugin.getLang("joined.the.clan"), player.getName()));
plugin.getClanManager().serverAnnounce(MessageFormat.format(plugin.getLang("has.joined"), player.getName(), newClan.getName()));
newClan.addBb(ChatColor.AQUA + MessageFormat.format(lang("joined.the.clan", sender), player.getName()));
plugin.getClanManager().serverAnnounce(MessageFormat.format(lang("has.joined", sender), player.getName(), newClan.getName()));
newClan.addPlayerToClan(cp);
}
@@ -1,101 +1,107 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.*;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.text.DecimalFormat;
import java.text.MessageFormat;
import java.text.NumberFormat;
/**
* @author phaed
*/
public class ProfileCommand {
public ProfileCommand() {
}
/**
* Execute the command
*
* @param player
* @param arg
*/
public void execute(Player player, String[] arg) {
SimpleClans plugin = SimpleClans.getInstance();
String headColor = plugin.getSettingsManager().getPageHeadingsColor();
String subColor = plugin.getSettingsManager().getPageSubTitleColor();
NumberFormat formatter = new DecimalFormat("#.#");
Clan clan = null;
if (arg.length == 0) {
if (plugin.getPermissionsManager().has(player, "simpleclans.member.profile")) {
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("not.a.member.of.any.clan"));
} else {
if (cp.getClan().isVerified()) {
clan = cp.getClan();
} else {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("clan.is.not.verified"));
}
}
} else {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
}
} else if (arg.length == 1) {
if (plugin.getPermissionsManager().has(player, "simpleclans.anyone.profile")) {
clan = plugin.getClanManager().getClan(arg[0]);
if (clan == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.clan.matched"));
}
} else {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
}
} else {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.0.profile.tag"), plugin.getSettingsManager().getCommandClan()));
}
if (clan != null) {
if (clan.isVerified()) {
ChatBlock.sendBlank(player);
ChatBlock.saySingle(player, plugin.getSettingsManager().getPageClanNameColor() + Helper.capitalize(clan.getName()) + subColor + " " + plugin.getLang("profile") + " " + headColor + Helper.generatePageSeparator(plugin.getSettingsManager().getPageSep()));
ChatBlock.sendBlank(player);
String name = plugin.getSettingsManager().getClanChatBracketColor() + plugin.getSettingsManager().getClanChatTagBracketLeft() + plugin.getSettingsManager().getTagDefaultColor() + clan.getColorTag() + plugin.getSettingsManager().getClanChatBracketColor() + plugin.getSettingsManager().getClanChatTagBracketRight() + " " + plugin.getSettingsManager().getPageClanNameColor() + clan.getName();
String leaders = clan.getLeadersString(plugin.getSettingsManager().getPageLeaderColor(), subColor + ", ");
String onlineCount = ChatColor.WHITE + "" + Helper.stripOffLinePlayers(clan.getMembers()).size();
String membersOnline = onlineCount + subColor + "/" + ChatColor.WHITE + clan.getSize();
String inactive = ChatColor.WHITE + "" + clan.getInactiveDays() + subColor + "/" + ChatColor.WHITE + (clan.isVerified() ? plugin.getSettingsManager().getPurgeClan() : plugin.getSettingsManager().getPurgeUnverified()) + " " + plugin.getLang("days");
String founded = ChatColor.WHITE + "" + clan.getFoundedString();
String allies = ChatColor.WHITE + "" + clan.getAllyString(subColor + ", ");
String rivals = ChatColor.WHITE + "" + clan.getRivalString(subColor + ", ");
String kdr = ChatColor.YELLOW + "" + formatter.format(clan.getTotalKDR());
String deaths = ChatColor.WHITE + "" + clan.getTotalDeaths();
String rival = ChatColor.WHITE + "" + clan.getTotalRival();
String neutral = ChatColor.WHITE + "" + clan.getTotalNeutral();
String civ = ChatColor.WHITE + "" + clan.getTotalCivilian();
String status = ChatColor.WHITE + "" + (clan.isVerified() ? plugin.getSettingsManager().getPageTrustedColor() + plugin.getLang("verified") : plugin.getSettingsManager().getPageUnTrustedColor() + plugin.getLang("unverified"));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(plugin.getLang("name.0"), name));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(plugin.getLang("status.0"), status));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(plugin.getLang("leaders.0"), leaders));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(plugin.getLang("members.online.0"), membersOnline));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(plugin.getLang("kdr.0"), kdr));
ChatBlock.sendMessage(player, " " + subColor + plugin.getLang("kill.totals") + " " + headColor + "[" + plugin.getLang("rival") + ":" + rival + " " + headColor + "" + plugin.getLang("neutral") + ":" + neutral + " " + headColor + "" + plugin.getLang("civilian") + ":" + civ + headColor + "]");
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(plugin.getLang("deaths.0"), deaths));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(plugin.getLang("allies.0"), allies));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(plugin.getLang("rivals.0"), rivals));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(plugin.getLang("founded.0"), founded));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(plugin.getLang("inactive.0"), inactive));
ChatBlock.sendBlank(player);
} else {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("clan.is.not.verified"));
}
}
}
}
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.text.DecimalFormat;
import java.text.MessageFormat;
import java.text.NumberFormat;
/**
* @author phaed
*/
public class ProfileCommand {
public ProfileCommand() {
}
/**
* Execute the command
*
* @param player
* @param arg
*/
public void execute(Player player, String[] arg) {
SimpleClans plugin = SimpleClans.getInstance();
String headColor = plugin.getSettingsManager().getPageHeadingsColor();
String subColor = plugin.getSettingsManager().getPageSubTitleColor();
NumberFormat formatter = new DecimalFormat("#.#");
Clan clan = null;
if (arg.length == 0) {
if (plugin.getPermissionsManager().has(player, "simpleclans.member.profile")) {
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan",player));
} else {
if (cp.getClan().isVerified()) {
clan = cp.getClan();
} else {
ChatBlock.sendMessage(player, ChatColor.RED + lang("clan.is.not.verified",player));
}
}
} else {
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
}
} else if (arg.length == 1) {
if (plugin.getPermissionsManager().has(player, "simpleclans.anyone.profile")) {
clan = plugin.getClanManager().getClan(arg[0]);
if (clan == null) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.clan.matched",player));
}
} else {
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
}
} else {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.0.profile.tag",player), plugin.getSettingsManager().getCommandClan()));
}
if (clan != null) {
if (clan.isVerified()) {
ChatBlock.sendBlank(player);
ChatBlock.saySingle(player, plugin.getSettingsManager().getPageClanNameColor() + clan.getName() + subColor + " " + lang("profile",player) + " " + headColor + Helper.generatePageSeparator(plugin.getSettingsManager().getPageSep()));
ChatBlock.sendBlank(player);
String name = plugin.getSettingsManager().getClanChatBracketColor() + plugin.getSettingsManager().getClanChatTagBracketLeft() + plugin.getSettingsManager().getTagDefaultColor() + clan.getColorTag() + plugin.getSettingsManager().getClanChatBracketColor() + plugin.getSettingsManager().getClanChatTagBracketRight() + " " + plugin.getSettingsManager().getPageClanNameColor() + clan.getName();
String description = ChatColor.WHITE + (clan.getDescription() != null && !clan.getDescription().isEmpty() ? clan.getDescription() : lang("no.description",player));
String leaders = clan.getLeadersString(plugin.getSettingsManager().getPageLeaderColor(), subColor + ", ");
String onlineCount = ChatColor.WHITE + "" + Helper.stripOffLinePlayers(clan.getMembers()).size();
String membersOnline = onlineCount + subColor + "/" + ChatColor.WHITE + clan.getSize();
String inactive = ChatColor.WHITE + "" + clan.getInactiveDays() + subColor + "/" + ChatColor.WHITE + (clan.isVerified() ? plugin.getSettingsManager().getPurgeClan() : plugin.getSettingsManager().getPurgeUnverified()) + " " + lang("days",player);
String founded = ChatColor.WHITE + "" + clan.getFoundedString();
String allies = ChatColor.WHITE + "" + clan.getAllyString(subColor + ", ");
String rivals = ChatColor.WHITE + "" + clan.getRivalString(subColor + ", ");
String kdr = ChatColor.YELLOW + "" + formatter.format(clan.getTotalKDR());
String deaths = ChatColor.WHITE + "" + clan.getTotalDeaths();
String rival = ChatColor.WHITE + "" + clan.getTotalRival();
String neutral = ChatColor.WHITE + "" + clan.getTotalNeutral();
String civ = ChatColor.WHITE + "" + clan.getTotalCivilian();
String status = ChatColor.WHITE + "" + (clan.isVerified() ? plugin.getSettingsManager().getPageTrustedColor() + lang("verified",player) : plugin.getSettingsManager().getPageUnTrustedColor() + lang("unverified",player));
String feeEnabled = ChatColor.WHITE + (clan.isMemberFeeEnabled() ? lang("fee.enabled",player) : lang("fee.disabled",player));
String feeValue = ChatColor.WHITE + "" + clan.getMemberFee();
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(lang("name.0",player), name));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(lang("description.0",player), description));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(lang("status.0",player), status));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(lang("leaders.0",player), leaders));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(lang("members.online.0",player), membersOnline));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(lang("kdr.0",player), kdr));
ChatBlock.sendMessage(player, " " + subColor + lang("kill.totals",player) + " " + headColor + "[" + lang("rival",player) + ":" + rival + " " + headColor + "" + lang("neutral",player) + ":" + neutral + " " + headColor + "" + lang("civilian",player) + ":" + civ + headColor + "]");
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(lang("deaths.0",player), deaths));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(lang("fee.0.value.1",player), feeEnabled, feeValue));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(lang("allies.0",player), allies));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(lang("rivals.0",player), rivals));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(lang("founded.0",player), founded));
ChatBlock.sendMessage(player, " " + subColor + MessageFormat.format(lang("inactive.0",player), inactive));
ChatBlock.sendBlank(player);
} else {
ChatBlock.sendMessage(player, ChatColor.RED + lang("clan.is.not.verified",player));
}
}
}
}
@@ -1,7 +1,8 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.*;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import net.sacredlabyrinth.phaed.simpleclans.managers.PermissionsManager;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
@@ -23,58 +24,64 @@ public class PromoteCommand {
public void execute(Player player, String[] arg) {
SimpleClans plugin = SimpleClans.getInstance();
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.promote")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
PermissionsManager pm = plugin.getPermissionsManager();
boolean isAdmin = pm.has(player, "simpleclans.admin.promote");
if (!pm.has(player, "simpleclans.leader.promote") && !isAdmin) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions", player));
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("not.a.member.of.any.clan"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan",player));
return;
}
Clan clan = cp.getClan();
if (!clan.isLeader(player)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.leader.permissions"));
if (!clan.isLeader(player) && !isAdmin) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.leader.permissions",player));
return;
}
if (arg.length != 1) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.0.promote.member"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.0.promote.member",player), plugin.getSettingsManager().getCommandClan()));
return;
}
Player promoted = Helper.getPlayer(arg[0]);
if (promoted == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("the.member.to.be.promoted.must.be.online"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("the.member.to.be.promoted.must.be.online",player));
return;
}
if (!plugin.getPermissionsManager().has(promoted, "simpleclans.leader.promotable")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("the.player.does.not.have.the.permissions.to.lead.a.clan"));
if (!pm.has(promoted, "simpleclans.leader.promotable")) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("the.player.does.not.have.the.permissions.to.lead.a.clan",player));
return;
}
if (promoted.getName().equals(player.getName())) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("you.cannot.promote.yourself"));
if (promoted.getName().equals(player.getName()) && !isAdmin) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("you.cannot.promote.yourself",player));
return;
}
if (!clan.isMember(promoted)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("the.player.is.not.a.member.of.your.clan"));
if (!clan.isMember(promoted) && !isAdmin) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("the.player.is.not.a.member.of.your.clan",player));
return;
}
if (clan.isLeader(promoted) && plugin.getSettingsManager().isConfirmationForPromote()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("the.player.is.already.a.leader"));
if (clan.isLeader(promoted)) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("the.player.is.already.a.leader",player));
return;
}
if (plugin.getSettingsManager().isConfirmationForPromote() && clan.getLeaders().size() > 1 && !isAdmin) {
plugin.getRequestManager().addPromoteRequest(cp, promoted.getName(), clan);
ChatBlock.sendMessage(player,
ChatColor.AQUA + lang("promotion.vote.has.been.requested.from.all.leaders",player));
return;
}
clan.addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("promoted.to.leader"), Helper.capitalize(promoted.getName())));
if (SimpleClans.getInstance().hasUUID()) {
clan.promote(promoted.getUniqueId());
} else {
clan.promote(promoted.getName());
}
clan.addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(lang("promoted.to.leader"), promoted.getName()));
clan.promote(promoted.getUniqueId());
}
}
@@ -0,0 +1,64 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import java.text.MessageFormat;
import java.util.UUID;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryController;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
/**
*
* @author roinujnosde
*/
public class PurgeCommand {
/**
* Executes the command
*
* @param sender
* @param args
*/
public void execute(CommandSender sender, String args[]) {
SimpleClans plugin = SimpleClans.getInstance();
if (sender instanceof Player) {
if (!plugin.getPermissionsManager().has((Player) sender, "simpleclans.admin.purge")) {
ChatBlock.sendMessage(sender, ChatColor.RED + lang("insufficient.permissions",sender));
return;
}
}
if (args.length == 1) {
UUID uuid = UUIDMigration.getForcedPlayerUUID(args[0]);
if (uuid == null || plugin.getClanManager().getAnyClanPlayer(uuid) == null) {
ChatBlock.sendMessage(sender, ChatColor.RED + lang("no.player.matched",sender));
return;
}
Player player = plugin.getServer().getPlayer(uuid);
if (player != null && InventoryController.isRegistered(player)) {
player.closeInventory();
}
ClanPlayer cp = plugin.getClanManager().getAnyClanPlayer(uuid);
Clan clan = cp.getClan();
if (clan != null && clan.getMembers().size() == 1) {
clan.disband();
}
plugin.getClanManager().deleteClanPlayer(cp);
ChatBlock.sendMessage(sender, ChatColor.AQUA + lang("player.purged",sender));
return;
}
ChatBlock.sendMessage(sender, ChatColor.RED
+ MessageFormat.format(lang("usage.purge",sender), plugin.getSettingsManager().getCommandClan()));
}
}
@@ -0,0 +1,307 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import java.text.MessageFormat;
import java.util.*;
import net.sacredlabyrinth.phaed.simpleclans.conversation.CreateClanTagPrompt;
import net.sacredlabyrinth.phaed.simpleclans.conversation.CreateRankNamePrompt;
import org.bukkit.ChatColor;
import org.bukkit.conversations.Conversation;
import org.bukkit.conversations.ConversationFactory;
import org.bukkit.entity.Player;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
import net.sacredlabyrinth.phaed.simpleclans.Rank;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
/**
*
* @author RoinujNosde
*/
public class RankCommand {
private SimpleClans plugin;
private Player player;
private ClanPlayer clanPlayer;
private Clan clan;
/**
* Execute the command
*
* @param player
* @param args
*/
public void execute(Player player, String[] args) {
this.player = player;
plugin = SimpleClans.getInstance();
ClanManager clanManager = plugin.getClanManager();
clanPlayer = clanManager.getClanPlayer(player);
if (clanPlayer == null) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan",player));
return;
}
clan = clanPlayer.getClan();
if (!clan.isVerified()) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("clan.is.not.verified",player));
return;
}
if (!clanPlayer.isLeader()) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.leader.permissions",player));
return;
}
if (args.length > 0) {
String subCommand = args[0].toLowerCase();
args = Helper.removeFirst(args);
switch (subCommand) {
case "assign":
assignRank(args);
return;
case "unassign":
unassign(args);
return;
case "create":
createRank(args);
return;
case "list":
listRanks();
return;
case "delete":
deleteRank(args);
return;
case "permissions":
permissions(args);
return;
case "setdisplayname":
setDisplayName(args);
return;
}
}
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.0.rank",player),
plugin.getSettingsManager().getCommandClan()));
}
private void assignRank(String[] args) {
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.rank.assign")) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
if (args.length != 2) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.0.rank.assign",player),
plugin.getSettingsManager().getCommandClan()));
return;
}
UUID uuid = UUIDMigration.getForcedPlayerUUID(args[0]);
if (uuid == null || (!clan.isMember(uuid) && !clan.isLeader(uuid))) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.player.matched",player));
return;
}
String rank = args[1].toLowerCase();
if (!clan.hasRank(rank)) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("rank.0.does.not.exist",player));
return;
}
ClanPlayer cpTarget = Objects.requireNonNull(plugin.getClanManager().getClanPlayer(uuid));
if (cpTarget.getRankId().equals(rank)) {
ChatBlock.sendMessage(player, lang("player.already.has.that.rank",player));
return;
}
cpTarget.setRank(rank);
plugin.getStorageManager().updateClanPlayer(cpTarget);
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("player.rank.changed",player));
}
private void unassign(String[] args) {
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.rank.unassign")) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
if (args.length != 1) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.0.rank.unassign",player),
plugin.getSettingsManager().getCommandClan()));
return;
}
UUID uuid = UUIDMigration.getForcedPlayerUUID(args[0]);
if (uuid == null || (!clan.isMember(uuid) && !clan.isLeader(uuid))) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.player.matched",player));
return;
}
ClanPlayer cpTarget = plugin.getClanManager().getClanPlayer(uuid);
Objects.requireNonNull(cpTarget).setRank(null);
plugin.getStorageManager().updateClanPlayer(cpTarget);
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("player.unassigned.from.rank",player));
}
private void createRank(String[] args) {
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.rank.create")) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
if (args.length != 0) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.0.rank.create.noargs",player),
plugin.getSettingsManager().getCommandClan()));
return;
}
Conversation conversation = new ConversationFactory(plugin).withFirstPrompt(new CreateRankNamePrompt())
.withLocalEcho(true).buildConversation(player);
conversation.getContext().setSessionData("clan", clan);
conversation.begin();
}
private void listRanks() {
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.rank.list")) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
List<Rank> ranks = clan.getRanks();
if (ranks.isEmpty()) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.ranks",player));
return;
}
ranks.sort(Comparator.reverseOrder());
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("clans.ranks",player));
int count = 1;
for (Rank rank : ranks) {
ChatBlock.sendMessage(player, ChatColor.AQUA + MessageFormat.format(lang("ranks.list.item",player), count, Helper.parseColors(rank.getDisplayName()) + ChatColor.AQUA, rank.getName()));
count++;
}
}
private void deleteRank(String[] args) {
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.rank.delete")) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
if (args.length != 1) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.0.rank.delete",player),
plugin.getSettingsManager().getCommandClan()));
return;
}
String rank = args[0].toLowerCase();
if (!clan.hasRank(rank)) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("rank.0.does.not.exist",player));
return;
}
clan.deleteRank(rank);
plugin.getStorageManager().updateClan(clan, true);
ChatBlock.sendMessage(player, ChatColor.AQUA + MessageFormat.format(lang("rank.0.deleted",player), rank));
}
private void setDisplayName(String[] args) {
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.rank.setdisplayname")) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
if (args.length < 2) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.0.rank.setdisplayname",player),
plugin.getSettingsManager().getCommandClan()));
return;
}
String rankName = args[0].toLowerCase();
if (!clan.hasRank(rankName)) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("rank.0.does.not.exist",player), rankName));
return;
}
Rank rank = clan.getRank(rankName);
String dn = Helper.toMessage(Helper.removeFirst(args));
if (dn.contains("&") && !plugin.getPermissionsManager().has(player, "simpleclans.leader.coloredrank")) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("you.cannot.set.colored.ranks",player));
return;
}
rank.setDisplayName(dn);
plugin.getStorageManager().updateClan(clan, true);
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("rank.displayname.updated",player));
}
private void permissions(String[] args) {
String validPermissionsToMessage = Helper.toMessage(Helper.fromPermissionArray(), ",");
if (args.length == 0) {
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.rank.permissions.available")) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("available.rank.permissions",player));
ChatBlock.sendMessage(player, ChatColor.AQUA + validPermissionsToMessage);
return;
}
String rank = args[0].toLowerCase();
if (!clan.hasRank(rank)) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("rank.0.does.not.exist",player), rank));
return;
}
Set<String> permissions = clan.getRank(rank).getPermissions();
if (args.length == 1) {
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.rank.permissions.list")) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
if (permissions.isEmpty()) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("rank.no.permissions",player));
return;
}
ChatBlock.sendMessage(player, ChatColor.AQUA + MessageFormat.format(lang("rank.0.permissions",player), rank));
ChatBlock.sendMessage(player, ChatColor.AQUA + Helper.toMessage(permissions.toArray(new String[0]), ","));
return;
}
if (args.length == 3) {
String subCommand = args[1].toLowerCase();
String permission = args[2].toLowerCase();
boolean changed = false;
switch (subCommand) {
case "add":
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.rank.permissions.add")) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
if (!RankPermission.isValid(permission)) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("invalid.permission",player), permission, validPermissionsToMessage));
return;
}
permissions.add(permission);
ChatBlock.sendMessage(player, ChatColor.AQUA + MessageFormat.format(lang("permission.0.added.to.rank.1",player), permission, rank));
changed = true;
break;
case "remove":
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.rank.permissions.remove")) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
permissions.remove(permission);
ChatBlock.sendMessage(player, ChatColor.AQUA + MessageFormat.format(lang("permission.0.removed.from.rank.1",player), permission, rank));
changed = true;
break;
}
if (changed) {
plugin.getStorageManager().updateClan(clan, true);
return;
}
}
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.0.rank.permissions",player),
plugin.getSettingsManager().getCommandClan()));
}
}
@@ -3,6 +3,9 @@ package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import net.sacredlabyrinth.phaed.simpleclans.language.LanguageResource;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -31,9 +34,11 @@ public class ReloadCommand
ChatBlock.sendMessage(sender, ChatColor.RED + "Does not match a clan command");
return;
}
plugin.getStorageManager().saveModified();
plugin.reloadConfig();
LanguageResource.clearCache();
plugin.getSettingsManager().load();
plugin.getLanguageManager().load();
plugin.getStorageManager().importFromDatabase();
SimpleClans.getInstance().getPermissionsManager().loadPermissions();
@@ -41,7 +46,7 @@ public class ReloadCommand
{
SimpleClans.getInstance().getPermissionsManager().updateClanPermissions(clan);
}
ChatBlock.sendMessage(sender, ChatColor.AQUA + plugin.getLang("configuration.reloaded"));
ChatBlock.sendMessage(sender, ChatColor.AQUA + lang("configuration.reloaded",sender));
}
}
@@ -1,10 +1,13 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import java.text.MessageFormat;
import java.util.UUID;
import net.sacredlabyrinth.phaed.simpleclans.*;
import org.bukkit.Bukkit;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
/**
@@ -26,22 +29,22 @@ public class ResetKDRCommand {
if (arg == null || arg.length == 0) {
if (!plugin.getSettingsManager().isAllowResetKdr()) {
ChatBlock.sendMessage(player, ChatColor.RED
+ MessageFormat.format(plugin.getLang("usage.resetkdr"),
+ MessageFormat.format(lang("usage.resetkdr",player),
plugin.getSettingsManager().getCommandClan()));
return;
}
if (!plugin.getPermissionsManager().has(player, "simpleclans.member.resetkdr")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
if (!plugin.getPermissionsManager().has(player, "simpleclans.vip.resetkdr")) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("not.a.member.of.any.clan"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan",player));
return;
}
if (plugin.getClanManager().purchaseResetKdr(player)) {
plugin.getClanManager().resetKdr(cp);
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("you.have.reseted.your.kdr"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("you.have.reseted.your.kdr",player));
}
return;
}
@@ -50,23 +53,23 @@ public class ResetKDRCommand {
for (ClanPlayer cp : SimpleClans.getInstance().getClanManager().getAllClanPlayers()) {
plugin.getClanManager().resetKdr(cp);
}
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("you.have.reseted.kdr.of.all.players"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("you.have.reseted.kdr.of.all.players",player));
} else {
OfflinePlayer toReset = Bukkit.getOfflinePlayer(arg[0]);
if (toReset == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.player.matched"));
UUID uuid = UUIDMigration.getForcedPlayerUUID(arg[0]);
if (uuid == null) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.player.matched",player));
return;
}
ClanPlayer trcp = plugin.getClanManager().getClanPlayer(toReset);
ClanPlayer trcp = plugin.getClanManager().getClanPlayer(uuid);
if (trcp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.player.data.found"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.player.data.found",player));
return;
}
plugin.getClanManager().resetKdr(trcp);
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("you.have.reseted.0.kdr"), toReset.getName()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("you.have.reseted.0.kdr",player), trcp.getName()));
}
} else {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
}
}
}
@@ -1,14 +1,14 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.text.MessageFormat;
import net.sacredlabyrinth.phaed.simpleclans.conversation.ResignPrompt;
import org.bukkit.conversations.ConversationFactory;
/**
* @author phaed
@@ -27,29 +27,20 @@ public class ResignCommand {
SimpleClans plugin = SimpleClans.getInstance();
if (!plugin.getPermissionsManager().has(player, "simpleclans.member.resign")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("not.a.member.of.any.clan"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan",player));
return;
}
Clan clan = cp.getClan();
if (!clan.isLeader(player) || clan.getLeaders().size() > 1) {
clan.addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("0.has.resigned"), Helper.capitalize(player.getName())));
if (SimpleClans.getInstance().hasUUID()) {
clan.removePlayerFromClan(player.getUniqueId());
} else {
clan.removePlayerFromClan(player.getName());
}
} else if (clan.isLeader(player) && clan.getLeaders().size() == 1) {
plugin.getClanManager().serverAnnounce(ChatColor.AQUA + MessageFormat.format(plugin.getLang("clan.has.been.disbanded"), clan.getName()));
clan.disband();
} else {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("last.leader.cannot.resign.you.must.appoint.another.leader.or.disband.the.clan"));
}
new ConversationFactory(plugin)
.withFirstPrompt(new ResignPrompt())
.withLocalEcho(true)
.withTimeout(10)
.buildConversation(player).begin();
}
}
@@ -1,6 +1,7 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
@@ -23,38 +24,34 @@ public class RivalCommand {
SimpleClans plugin = SimpleClans.getInstance();
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.rival")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("not.a.member.of.any.clan"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan",player));
return;
}
Clan clan = cp.getClan();
if (!clan.isVerified()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("clan.is.not.verified"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("clan.is.not.verified",player));
return;
}
if (clan.isUnrivable()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("your.clan.cannot.create.rivals"));
return;
}
if (!clan.isLeader(player)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.leader.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("your.clan.cannot.create.rivals",player));
return;
}
if (arg.length != 2) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.rival"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.rival",player), plugin.getSettingsManager().getCommandClan()));
return;
}
if (clan.getSize() < plugin.getSettingsManager().getClanMinSizeToRival()) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("min.players.rivalries"), plugin.getSettingsManager().getClanMinSizeToRival()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("min.players.rivalries",player), plugin.getSettingsManager().getClanMinSizeToRival()));
return;
}
@@ -62,50 +59,56 @@ public class RivalCommand {
Clan rival = plugin.getClanManager().getClan(arg[1]);
if (rival == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.clan.matched"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.clan.matched",player));
return;
}
if (clan.getTag().equals(rival.getTag()))
{
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("you.cannot.rival.your.own.clan"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("you.cannot.rival.your.own.clan",player));
return;
}
if (plugin.getSettingsManager().isUnrivable(rival.getTag())) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("the.clan.cannot.be.rivaled"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("the.clan.cannot.be.rivaled",player));
return;
}
if (!rival.isVerified()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("cannot.rival.an.unverified.clan"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("cannot.rival.an.unverified.clan",player));
return;
}
if (action.equals(plugin.getLang("add"))) {
if (action.equals(lang("add",player))) {
if (!plugin.getPermissionsManager().has(player, RankPermission.RIVAL_ADD, PermissionLevel.LEADER, true)) {
return;
}
if (!clan.reachedRivalLimit()) {
if (!clan.isRival(rival.getTag())) {
clan.addRival(rival);
rival.addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("has.initiated.a.rivalry"), Helper.capitalize(clan.getName()), rival.getName()), false);
clan.addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("has.initiated.a.rivalry"), Helper.capitalize(player.getName()), Helper.capitalize(rival.getName())));
rival.addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(lang("has.initiated.a.rivalry"), clan.getName(), rival.getName()), false);
clan.addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(lang("has.initiated.a.rivalry"), player.getName(), rival.getName()));
} else {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("your.clans.are.already.rivals"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("your.clans.are.already.rivals",player));
}
} else {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("rival.limit.reached"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("rival.limit.reached",player));
}
return;
}
if (action.equals(plugin.getLang("remove"))) {
if (action.equals(lang("remove",player))) {
if (!plugin.getPermissionsManager().has(player, RankPermission.RIVAL_REMOVE, PermissionLevel.LEADER, true)) {
return;
}
if (clan.isRival(rival.getTag())) {
plugin.getRequestManager().addRivalryBreakRequest(cp, rival, clan);
ChatBlock.sendMessage(player, ChatColor.AQUA + MessageFormat.format(plugin.getLang("leaders.asked.to.end.rivalry"), Helper.capitalize(rival.getName())));
ChatBlock.sendMessage(player, ChatColor.AQUA + MessageFormat.format(lang("leaders.asked.to.end.rivalry",player), rival.getName()));
} else {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("your.clans.are.not.rivals"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("your.clans.are.not.rivals",player));
}
return;
}
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.rival"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.rival",player), plugin.getSettingsManager().getCommandClan()));
}
}
@@ -4,6 +4,7 @@ import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
@@ -29,11 +30,11 @@ public class RivalriesCommand {
String subColor = plugin.getSettingsManager().getPageSubTitleColor();
if (arg.length != 0) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.0.rivalries"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.0.rivalries",player), plugin.getSettingsManager().getCommandClan()));
return;
}
if (!plugin.getPermissionsManager().has(player, "simpleclans.anyone.rivalries")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
List<Clan> clans = plugin.getClanManager().getClans();
@@ -42,13 +43,13 @@ public class RivalriesCommand {
ChatBlock chatBlock = new ChatBlock();
ChatBlock.sendBlank(player);
ChatBlock.saySingle(player, plugin.getSettingsManager().getServerName() + subColor + " " + plugin.getLang("rivalries") + " " + headColor + Helper.generatePageSeparator(plugin.getSettingsManager().getPageSep()));
ChatBlock.saySingle(player, plugin.getSettingsManager().getServerName() + subColor + " " + lang("rivalries",player) + " " + headColor + Helper.generatePageSeparator(plugin.getSettingsManager().getPageSep()));
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, headColor + plugin.getLang("legend") + ChatColor.DARK_RED + " [" + plugin.getLang("war") + "]");
ChatBlock.sendMessage(player, headColor + lang("legend",player) + ChatColor.DARK_RED + " [" + lang("war",player) + "]");
ChatBlock.sendBlank(player);
chatBlock.setAlignment("l", "l");
chatBlock.addRow(plugin.getLang("clan"), plugin.getLang("rivals"));
chatBlock.addRow(lang("clan",player), lang("rivals",player));
for (Clan clan : clans) {
if (!clan.isVerified()) {
@@ -63,7 +64,7 @@ public class RivalriesCommand {
if (more) {
plugin.getStorageManager().addChatBlock(player, chatBlock);
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, headColor + MessageFormat.format(plugin.getLang("view.next.page"), plugin.getSettingsManager().getCommandMore()));
ChatBlock.sendMessage(player, headColor + MessageFormat.format(lang("view.next.page",player), plugin.getSettingsManager().getCommandMore()));
}
ChatBlock.sendBlank(player);
@@ -1,6 +1,7 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
@@ -33,25 +34,25 @@ public class RosterCommand {
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("not.a.member.of.any.clan"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan",player));
} else {
clan = cp.getClan();
}
} else {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
}
} else if (arg.length == 1) {
if (plugin.getPermissionsManager().has(player, "simpleclans.anyone.roster")) {
clan = plugin.getClanManager().getClan(arg[0]);
if (clan == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.clan.matched"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.clan.matched",player));
}
} else {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
}
} else {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.0.roster.tag"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.0.roster.tag",player), plugin.getSettingsManager().getCommandClan()));
}
if (clan != null) {
@@ -59,13 +60,13 @@ public class RosterCommand {
ChatBlock chatBlock = new ChatBlock();
ChatBlock.sendBlank(player);
ChatBlock.saySingle(player, plugin.getSettingsManager().getPageClanNameColor() + Helper.capitalize(clan.getName()) + subColor + " " + plugin.getLang("roster") + " " + headColor + Helper.generatePageSeparator(plugin.getSettingsManager().getPageSep()));
ChatBlock.saySingle(player, plugin.getSettingsManager().getPageClanNameColor() + clan.getName() + subColor + " " + lang("roster",player) + " " + headColor + Helper.generatePageSeparator(plugin.getSettingsManager().getPageSep()));
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, headColor + plugin.getLang("legend") + " " + plugin.getSettingsManager().getPageLeaderColor() + plugin.getLang("leader") + headColor + ", " + plugin.getSettingsManager().getPageTrustedColor() + plugin.getLang("trusted") + headColor + ", " + plugin.getSettingsManager().getPageUnTrustedColor() + plugin.getLang("untrusted"));
ChatBlock.sendMessage(player, headColor + lang("legend",player) + " " + plugin.getSettingsManager().getPageLeaderColor() + lang("leader",player) + headColor + ", " + plugin.getSettingsManager().getPageTrustedColor() + lang("trusted",player) + headColor + ", " + plugin.getSettingsManager().getPageUnTrustedColor() + lang("untrusted",player));
ChatBlock.sendBlank(player);
chatBlock.setFlexibility(false, true, false, true);
chatBlock.addRow(" " + headColor + plugin.getLang("player"), plugin.getLang("rank"), plugin.getLang("seen"));
chatBlock.addRow(" " + headColor + lang("player",player), lang("rank",player), lang("seen",player));
List<ClanPlayer> leaders = clan.getLeaders();
plugin.getClanManager().sortClanPlayersByLastSeen(leaders);
@@ -78,9 +79,9 @@ public class RosterCommand {
Player p = cp.toPlayer();
String name = plugin.getSettingsManager().getPageLeaderColor() + cp.getName();
String lastSeen = p != null && p.isOnline() && !Helper.isVanished(p) ? ChatColor.GREEN + plugin.getLang("online") : ChatColor.WHITE + cp.getLastSeenDaysString();
String lastSeen = p != null && p.isOnline() && !Helper.isVanished(p) ? ChatColor.GREEN + lang("online",player) : ChatColor.WHITE + cp.getLastSeenDaysString(player);
chatBlock.addRow(" " + name, ChatColor.YELLOW + Helper.parseColors(cp.getRank()), lastSeen);
chatBlock.addRow(" " + name, ChatColor.YELLOW + Helper.parseColors(cp.getRankDisplayName()) + ChatColor.RESET, lastSeen);
}
@@ -88,9 +89,9 @@ public class RosterCommand {
Player p = cp.toPlayer();
String name = (cp.isTrusted() ? plugin.getSettingsManager().getPageTrustedColor() : plugin.getSettingsManager().getPageUnTrustedColor()) + cp.getName();
String lastSeen = p != null && p.isOnline() && !Helper.isVanished(p) ? ChatColor.GREEN + plugin.getLang("online") : ChatColor.WHITE + cp.getLastSeenDaysString();
String lastSeen = p != null && p.isOnline() && !Helper.isVanished(p) ? ChatColor.GREEN + lang("online",player) : ChatColor.WHITE + cp.getLastSeenDaysString(player);
chatBlock.addRow(" " + name, ChatColor.YELLOW + Helper.parseColors(cp.getRank()), lastSeen);
chatBlock.addRow(" " + name, ChatColor.YELLOW + Helper.parseColors(cp.getRankDisplayName()) + ChatColor.RESET, lastSeen);
}
boolean more = chatBlock.sendBlock(player, plugin.getSettingsManager().getPageSize());
@@ -98,15 +99,15 @@ public class RosterCommand {
if (more) {
plugin.getStorageManager().addChatBlock(player, chatBlock);
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, headColor + MessageFormat.format(plugin.getLang("view.next.page"), plugin.getSettingsManager().getCommandMore()));
ChatBlock.sendMessage(player, headColor + MessageFormat.format(lang("view.next.page",player), plugin.getSettingsManager().getCommandMore()));
}
ChatBlock.sendBlank(player);
} else {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("clan.is.not.verified"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("clan.is.not.verified",player));
}
} else {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.0.roster.tag"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.0.roster.tag",player), plugin.getSettingsManager().getCommandClan()));
}
}
}
@@ -0,0 +1,42 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.*;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.jetbrains.annotations.NotNull;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
public class SetBannerCommand {
private final SimpleClans plugin = SimpleClans.getInstance();
public void execute(@NotNull Player player) {
ClanPlayer cp = plugin.getClanManager().getAnyClanPlayer(player.getUniqueId());
if (cp == null || cp.getClan() == null) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan", player));
return;
}
Clan clan = cp.getClan();
if (!clan.isVerified()) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("clan.is.not.verified", player));
return;
}
if (!plugin.getPermissionsManager().has(player, RankPermission.SETBANNER, true)) {
return;
}
ItemStack hand = player.getInventory().getItemInMainHand();
if (!hand.getType().toString().contains("BANNER")) {
ChatBlock.sendMessage(player, lang("you.must.hold.a.banner", player));
return;
}
clan.setBanner(hand);
plugin.getStorageManager().updateClan(clan);
ChatBlock.sendMessage(player, lang("you.changed.clan.banner", player));
}
}
@@ -1,68 +1,36 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.*;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.text.MessageFormat;
public class SetRankCommand {
public SetRankCommand() {
}
/**
* Execute the command
*
* @param player
* @param arg
*/
public void execute(Player player, String[] arg) {
SimpleClans plugin = SimpleClans.getInstance();
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.setrank")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("not.a.member.of.any.clan"));
return;
}
Clan clan = cp.getClan();
if (!clan.isVerified()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("clan.is.not.verified"));
return;
}
if (!clan.isLeader(player)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.leader.permissions"));
return;
}
if (arg.length < 1) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.setrank"), plugin.getSettingsManager().getCommandClan()));
return;
}
String playerName = arg[0];
String rank = Helper.toMessage(Helper.removeFirst(arg));
if (!clan.isMember(playerName) && !clan.isLeader(playerName)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.player.matched"));
return;
}
ClanPlayer cpm = plugin.getClanManager().getClanPlayer(playerName);
cpm.setRank(rank);
plugin.getStorageManager().updateClanPlayer(cpm);
ChatBlock.sendMessage(player, ChatColor.AQUA + plugin.getLang("player.rank.changed"));
}
}
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.text.MessageFormat;
public class SetRankCommand {
public SetRankCommand() {
}
/**
* Execute the command
*
* @param player
* @param arg
*/
public void execute(Player player, String[] arg) {
SimpleClans plugin = SimpleClans.getInstance();
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.0.rank.create",player),
plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.0.rank.assign",player),
plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.0.rank.setdisplayname",player),
plugin.getSettingsManager().getCommandClan()));
}
}
@@ -6,6 +6,7 @@ import java.text.NumberFormat;
import java.util.List;
import net.sacredlabyrinth.phaed.simpleclans.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
@@ -28,44 +29,43 @@ public class StatsCommand {
String subColor = plugin.getSettingsManager().getPageSubTitleColor();
if (!plugin.getPermissionsManager().has(player, "simpleclans.member.stats")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("not.a.member.of.any.clan"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan",player));
return;
}
Clan clan = cp.getClan();
if (!clan.isVerified()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("clan.is.not.verified"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("clan.is.not.verified",player));
return;
}
if (!cp.isTrusted()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("only.trusted.players.can.access.clan.stats"));
return;
if (!plugin.getPermissionsManager().has(player, RankPermission.STATS, PermissionLevel.TRUSTED, true)) {
return;
}
if (arg.length != 0) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.0.stats"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.0.stats",player), plugin.getSettingsManager().getCommandClan()));
return;
}
ChatBlock chatBlock = new ChatBlock();
ChatBlock.saySingle(player, plugin.getSettingsManager().getPageClanNameColor() + Helper.capitalize(clan.getName()) + subColor + " " + plugin.getLang("stats") + " " + headColor + Helper.generatePageSeparator(plugin.getSettingsManager().getPageSep()));
ChatBlock.saySingle(player, plugin.getSettingsManager().getPageClanNameColor() + clan.getName() + subColor + " " + lang("stats",player) + " " + headColor + Helper.generatePageSeparator(plugin.getSettingsManager().getPageSep()));
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, headColor + plugin.getLang("kdr") + " = " + subColor + plugin.getLang("kill.death.ratio"));
ChatBlock.sendMessage(player, headColor + plugin.getLang("weights") + " = " + plugin.getLang("rival") + ": " + subColor + plugin.getSettingsManager().getKwRival() + headColor + " " + plugin.getLang("neutral") + ": " + subColor + plugin.getSettingsManager().getKwNeutral() + headColor + " " + plugin.getLang("civilian") + ": " + subColor + plugin.getSettingsManager().getKwCivilian());
ChatBlock.sendMessage(player, headColor + lang("kdr",player) + " = " + subColor + lang("kill.death.ratio",player));
ChatBlock.sendMessage(player, headColor + lang("weights",player) + " = " + lang("rival",player) + ": " + subColor + plugin.getSettingsManager().getKwRival() + headColor + " " + lang("neutral",player) + ": " + subColor + plugin.getSettingsManager().getKwNeutral() + headColor + " " + lang("civilian",player) + ": " + subColor + plugin.getSettingsManager().getKwCivilian());
ChatBlock.sendBlank(player);
chatBlock.setFlexibility(true, false, false, false, false, false, false);
chatBlock.setAlignment("l", "c", "c", "c", "c", "c", "c");
chatBlock.addRow(" " + headColor + plugin.getLang("name"), plugin.getLang("kdr"), plugin.getLang("rival"), plugin.getLang("neutral"), plugin.getLang("civilian.abbreviation"), plugin.getLang("deaths"));
chatBlock.addRow(" " + headColor + lang("name", player), lang("kdr", player), lang("rival",player), lang("neutral",player), lang("civilian.abbreviation",player), lang("deaths",player));
List<ClanPlayer> leaders = clan.getLeaders();
plugin.getClanManager().sortClanPlayersByKDR(leaders);
@@ -81,7 +81,7 @@ public class StatsCommand {
if (more) {
plugin.getStorageManager().addChatBlock(player, chatBlock);
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, headColor + MessageFormat.format(plugin.getLang("view.next.page"), plugin.getSettingsManager().getCommandMore()));
ChatBlock.sendMessage(player, headColor + MessageFormat.format(lang("view.next.page",player), plugin.getSettingsManager().getCommandMore()));
}
ChatBlock.sendBlank(player);
@@ -1,138 +1,173 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
/**
* @author phaed
*/
public class ToggleCommand {
public ToggleCommand() {
}
/**
* Execute the command
*
* @param player
* @param arg
*/
public void execute(Player player, String[] arg) {
SimpleClans plugin = SimpleClans.getInstance();
if (arg.length == 0) {
return;
}
String cmd = arg[0];
if (cmd.equalsIgnoreCase("cape")) {
if (plugin.getPermissionsManager().has(player, "simpleclans.member.cape-toggle")) {
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp != null) {
Clan clan = cp.getClan();
if (clan.isVerified()) {
if (cp.isCapeEnabled()) {
ChatBlock.sendMessage(player, ChatColor.AQUA + plugin.getLang("capeoff"));
cp.setCapeEnabled(false);
} else {
ChatBlock.sendMessage(player, ChatColor.AQUA + plugin.getLang("capeon"));
cp.setCapeEnabled(true);
}
} else {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("clan.is.not.verified"));
}
} else {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("not.a.member.of.any.clan"));
}
} else {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
}
}
if (cmd.equalsIgnoreCase("bb") && plugin.getPermissionsManager().has(player, "simpleclans.member.bb-toggle")) {
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp != null) {
Clan clan = cp.getClan();
if (clan.isVerified()) {
if (cp.isBbEnabled()) {
ChatBlock.sendMessage(player, ChatColor.AQUA + plugin.getLang("bboff"));
cp.setBbEnabled(false);
} else {
ChatBlock.sendMessage(player, ChatColor.AQUA + plugin.getLang("bbon"));
cp.setBbEnabled(true);
}
plugin.getStorageManager().updateClanPlayer(cp);
}
}
}
if (cmd.equalsIgnoreCase("tag") && plugin.getPermissionsManager().has(player, "simpleclans.member.tag-toggle")) {
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp != null) {
Clan clan = cp.getClan();
if (clan.isVerified()) {
if (cp.isTagEnabled()) {
ChatBlock.sendMessage(player, ChatColor.AQUA + plugin.getLang("tagoff"));
cp.setTagEnabled(false);
} else {
ChatBlock.sendMessage(player, ChatColor.AQUA + plugin.getLang("tagon"));
cp.setTagEnabled(true);
}
plugin.getStorageManager().updateClanPlayer(cp);
}
}
}
if (cmd.equalsIgnoreCase("deposit") && plugin.getPermissionsManager().has(player, "simpleclans.leader.deposit-toggle")) {
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp != null) {
Clan clan = cp.getClan();
if (clan.isLeader(player)) {
if (clan.isVerified()) {
if (clan.isAllowDeposit()) {
ChatBlock.sendMessage(player, ChatColor.AQUA + plugin.getLang("depositoff"));
clan.setAllowDeposit(false);
} else {
ChatBlock.sendMessage(player, ChatColor.AQUA + plugin.getLang("depositon"));
clan.setAllowDeposit(true);
}
}
} else {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.leader.permissions"));
}
}
}
if (cmd.equalsIgnoreCase("withdraw") && plugin.getPermissionsManager().has(player, "simpleclans.leader.withdraw-toggle")) {
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp != null) {
Clan clan = cp.getClan();
if (clan.isVerified()) {
if (clan.isLeader(player)) {
if (clan.isAllowWithdraw()) {
ChatBlock.sendMessage(player, ChatColor.AQUA + plugin.getLang("withdrawoff"));
clan.setAllowWithdraw(false);
} else {
ChatBlock.sendMessage(player, ChatColor.AQUA + plugin.getLang("withdrawon"));
clan.setAllowWithdraw(true);
}
} else {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.leader.permissions"));
}
}
}
}
}
}
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
/**
* @author phaed
*/
public class ToggleCommand {
public ToggleCommand() {
}
/**
* Execute the command
*
* @param player
* @param arg
*/
public void execute(Player player, String[] arg) {
SimpleClans plugin = SimpleClans.getInstance();
if (arg.length == 0) {
return;
}
String cmd = arg[0];
if (cmd.equalsIgnoreCase("cape")) {
if (plugin.getPermissionsManager().has(player, "simpleclans.member.cape-toggle")) {
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp != null) {
Clan clan = cp.getClan();
if (clan.isVerified()) {
if (cp.isCapeEnabled()) {
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("capeoff",player));
cp.setCapeEnabled(false);
} else {
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("capeon",player));
cp.setCapeEnabled(true);
}
} else {
ChatBlock.sendMessage(player, ChatColor.RED + lang("clan.is.not.verified",player));
}
} else {
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan",player));
}
} else {
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
}
}
if (cmd.equalsIgnoreCase("bb")) {
if (!plugin.getPermissionsManager().has(player, "simpleclans.member.bb-toggle")) {
lang(ChatColor.RED + "insufficient.permissions",player);
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp != null) {
Clan clan = cp.getClan();
if (clan.isVerified()) {
if (cp.isBbEnabled()) {
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("bboff",player));
cp.setBbEnabled(false);
} else {
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("bbon",player));
cp.setBbEnabled(true);
}
plugin.getStorageManager().updateClanPlayer(cp);
}
}
}
if (cmd.equalsIgnoreCase("tag")) {
if (!plugin.getPermissionsManager().has(player, "simpleclans.member.tag-toggle")) {
lang(ChatColor.RED + "insufficient.permissions",player);
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp != null) {
Clan clan = cp.getClan();
if (clan.isVerified()) {
if (cp.isTagEnabled()) {
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("tagoff",player));
cp.setTagEnabled(false);
} else {
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("tagon",player));
cp.setTagEnabled(true);
}
plugin.getStorageManager().updateClanPlayer(cp);
}
}
}
if (cmd.equalsIgnoreCase("deposit")) {
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.deposit-toggle")) {
lang(ChatColor.RED + "insufficient.permissions",player);
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp != null) {
Clan clan = cp.getClan();
if (clan.isLeader(player)) {
if (clan.isVerified()) {
if (clan.isAllowDeposit()) {
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("depositoff",player));
clan.setAllowDeposit(false);
} else {
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("depositon",player));
clan.setAllowDeposit(true);
}
}
} else {
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.leader.permissions",player));
}
}
}
if (cmd.equalsIgnoreCase("fee") && plugin.getPermissionsManager().has(player, RankPermission.FEE_ENABLE,true)) {
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp != null) {
Clan clan = cp.getClan();
if (clan.isVerified()) {
if (clan.isMemberFeeEnabled()) {
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("feeoff",player));
clan.setMemberFeeEnabled(false);
} else {
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("feeon",player));
clan.setMemberFeeEnabled(true);
}
plugin.getStorageManager().updateClan(clan);
}
}
}
if (cmd.equalsIgnoreCase("withdraw")) {
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.withdraw-toggle")) {
lang(ChatColor.RED + "insufficient.permissions",player);
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp != null) {
Clan clan = cp.getClan();
if (clan.isVerified()) {
if (clan.isLeader(player)) {
if (clan.isAllowWithdraw()) {
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("withdrawoff",player));
clan.setAllowWithdraw(false);
} else {
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("withdrawon",player));
clan.setAllowWithdraw(true);
}
} else {
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.leader.permissions",player));
}
}
}
}
}
}
@@ -3,12 +3,15 @@ package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.text.MessageFormat;
import java.util.UUID;
/**
* @author phaed
@@ -27,60 +30,59 @@ public class TrustCommand {
SimpleClans plugin = SimpleClans.getInstance();
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.settrust")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("not.a.member.of.any.clan"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan",player));
return;
}
Clan clan = cp.getClan();
if (!clan.isLeader(player)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.leader.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.leader.permissions",player));
return;
}
if (arg.length != 1) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.0.trust.player"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.0.trust.player",player), plugin.getSettingsManager().getCommandClan()));
return;
}
String trusted = arg[0];
UUID trusted = UUIDMigration.getForcedPlayerUUID(arg[0]);
if (trusted == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.player.matched"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.player.matched",player));
return;
}
if (trusted.equals(player.getName())) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("you.cannot.trust.yourself"));
if (trusted.equals(player.getUniqueId())) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("you.cannot.trust.yourself",player));
return;
}
if (!clan.isMember(trusted)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("the.player.is.not.a.member.of.your.clan"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("the.player.is.not.a.member.of.your.clan",player));
return;
}
if (clan.isLeader(trusted)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("leaders.are.already.trusted"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("leaders.are.already.trusted",player));
return;
}
ClanPlayer tcp = plugin.getClanManager().getClanPlayer(trusted);
if (tcp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.player.matched"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.player.matched",player));
return;
}
if (tcp.isTrusted()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("this.player.is.already.trusted"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("this.player.is.already.trusted",player));
return;
}
clan.addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("has.been.given.trusted.status.by"), Helper.capitalize(trusted), player.getName()));
clan.addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(lang("has.been.given.trusted.status.by"), arg[0], player.getName()));
tcp.setTrusted(true);
plugin.getStorageManager().updateClanPlayer(tcp);
}
@@ -1,13 +1,16 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
import java.text.MessageFormat;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.text.MessageFormat;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
/**
* @author phaed
@@ -26,29 +29,32 @@ public class UnbanCommand {
SimpleClans plugin = SimpleClans.getInstance();
if (!plugin.getPermissionsManager().has(player, "simpleclans.mod.ban")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
if (arg.length != 1) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.ban.unban"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.ban.unban",player), plugin.getSettingsManager().getCommandClan()));
return;
}
String banned = arg[0];
if (!plugin.getSettingsManager().isBanned(banned)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("this.player.is.not.banned"));
UUID uuid = UUIDMigration.getForcedPlayerUUID(arg[0]);
if (uuid == null) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.player.matched",player));
return;
}
Player pl = Helper.getPlayer(banned);
if (!plugin.getSettingsManager().isBanned(uuid)) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("this.player.is.not.banned",player));
return;
}
Player pl = Bukkit.getPlayer(uuid);
if (pl != null) {
ChatBlock.sendMessage(pl, ChatColor.AQUA + plugin.getLang("you.have.been.unbanned.from.clan.commands"));
ChatBlock.sendMessage(pl, ChatColor.AQUA + lang("you.have.been.unbanned.from.clan.commands",player));
}
plugin.getSettingsManager().removeBanned(banned);
ChatBlock.sendMessage(player, ChatColor.AQUA + plugin.getLang("player.removed.from.the.banned.list"));
plugin.getSettingsManager().removeBanned(uuid);
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("player.removed.from.the.banned.list",player));
}
}
@@ -3,12 +3,15 @@ package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.text.MessageFormat;
import java.util.UUID;
/**
* @author phaed
@@ -27,59 +30,58 @@ public class UntrustCommand {
SimpleClans plugin = SimpleClans.getInstance();
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.settrust")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("not.a.member.of.any.clan"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan",player));
return;
}
Clan clan = cp.getClan();
if (!clan.isLeader(player)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.leader.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.leader.permissions",player));
return;
}
if (arg.length != 1) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.0.untrust.player"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.0.untrust.player",player), plugin.getSettingsManager().getCommandClan()));
return;
}
String trusted = arg[0];
if (trusted == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.player.matched"));
UUID trustedId = UUIDMigration.getForcedPlayerUUID(arg[0]);
if (trustedId == null) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.player.matched",player));
return;
}
if (trusted.equals(player.getName())) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("you.cannot.untrust.yourself"));
if (trustedId.equals(player.getUniqueId())) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("you.cannot.untrust.yourself",player));
return;
}
if (!clan.isMember(trusted)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("the.player.is.not.a.member.of.your.clan"));
if (!clan.isMember(trustedId)) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("the.player.is.not.a.member.of.your.clan",player));
return;
}
if (clan.isLeader(trusted)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("leaders.cannot.be.untrusted"));
if (clan.isLeader(trustedId)) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("leaders.cannot.be.untrusted",player));
return;
}
ClanPlayer tcp = plugin.getClanManager().getClanPlayer(trusted);
ClanPlayer tcp = plugin.getClanManager().getClanPlayer(trustedId);
if (tcp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.player.matched"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.player.matched",player));
return;
}
if (!tcp.isTrusted()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("this.player.is.already.untrusted"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("this.player.is.already.untrusted",player));
return;
}
clan.addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("has.been.given.untrusted.status.by"), Helper.capitalize(trusted), player.getName()));
clan.addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(lang("has.been.given.untrusted.status.by"), arg[0], player.getName()));
tcp.setTrusted(false);
plugin.getStorageManager().updateClanPlayer(tcp);
}
@@ -4,6 +4,7 @@ import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
@@ -40,26 +41,33 @@ public class VerifyCommand {
//if the player does specify a tag, but does not have mod permission to verify
//if the player does not specify a tag, but does not have leader permission to verify
if (arg.length != 0 || !plugin.getPermissionsManager().has(player, "simpleclans.leader.verify")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
if (isBuyer) {
if (arg.length == 0 && plugin.getClanManager().purchaseVerification(player)) {
clan.verifyClan();
clan.addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("clan.0.has.been.verified"), clan.getName()));
ChatBlock.sendMessage(player, ChatColor.AQUA + plugin.getLang("the.clan.has.been.verified"));
int minToVerify = plugin.getSettingsManager().getMinToVerify();
if (minToVerify > clan.getAllMembers().size()) {
ChatBlock.sendMessage(player, lang("your.clan.must.have.members.to.verify", player, minToVerify));
return;
}
if (plugin.getClanManager().purchaseVerification(player)) {
clan.verifyClan();
clan.addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(lang("clan.0.has.been.verified"), clan.getName()));
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("the.clan.has.been.verified", player));
}
return;
}
ChatBlock.sendMessage(player, lang("staff.member.verify.clan", player));
} else {
if (arg.length != 1) {
ChatBlock.sendMessage(sender, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.0.verify.tag"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(sender, ChatColor.RED + MessageFormat.format(lang("usage.0.verify.tag",player), plugin.getSettingsManager().getCommandClan()));
return;
}
verify(player, arg[0]);
}
} else {
if (arg.length != 1) {
ChatBlock.sendMessage(sender, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.0.verify.tag"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(sender, ChatColor.RED + MessageFormat.format(lang("usage.0.verify.tag",sender), plugin.getSettingsManager().getCommandClan()));
return;
}
verify(sender, arg[0]);
@@ -73,13 +81,13 @@ public class VerifyCommand {
if (clan != null) {
if (!clan.isVerified()) {
clan.verifyClan();
clan.addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("clan.0.has.been.verified"), clan.getName()));
ChatBlock.sendMessage(player, ChatColor.AQUA + plugin.getLang("the.clan.has.been.verified"));
clan.addBb(player.getName(), ChatColor.AQUA + MessageFormat.format(lang("clan.0.has.been.verified"), clan.getName()));
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("the.clan.has.been.verified",player));
} else {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("the.clan.is.already.verified"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("the.clan.is.already.verified",player));
}
} else {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("the.clan.does.not.exist"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("the.clan.does.not.exist",player));
}
}
}
@@ -1,13 +1,13 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.text.MessageFormat;
import java.util.Collection;
import java.util.List;
import java.util.Set;
/**
* @author phaed
@@ -28,42 +28,43 @@ public class VitalsCommand {
String subColor = plugin.getSettingsManager().getPageSubTitleColor();
if (!plugin.getPermissionsManager().has(player, "simpleclans.member.vitals")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("not.a.member.of.any.clan"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan",player));
return;
}
Clan clan = cp.getClan();
if (!clan.isVerified()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("clan.is.not.verified"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("clan.is.not.verified",player));
return;
}
if (!cp.isTrusted()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("only.trusted.players.can.access.clan.vitals"));
return;
if (!plugin.getPermissionsManager().has(player, RankPermission.VITALS, PermissionLevel.TRUSTED, true)) {
return;
}
if (arg.length != 0) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.0.vitals"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.0.vitals",player), plugin.getSettingsManager().getCommandClan()));
return;
}
ChatBlock chatBlock = new ChatBlock();
ChatBlock.sendBlank(player);
ChatBlock.saySingle(player, plugin.getSettingsManager().getPageClanNameColor() + Helper.capitalize(clan.getName()) + subColor + " " + plugin.getLang("vitals") + " " + headColor + Helper.generatePageSeparator(plugin.getSettingsManager().getPageSep()));
ChatBlock.saySingle(player, plugin.getSettingsManager().getPageClanNameColor() + clan.getName() + subColor + " " + lang("vitals",player) + " " + headColor + Helper.generatePageSeparator(plugin.getSettingsManager().getPageSep()));
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, headColor + plugin.getLang("weapons") + ": " + MessageFormat.format(plugin.getLang("0.s.sword.1.2.b.bow.3.4.a.arrow"), ChatColor.WHITE, ChatColor.DARK_GRAY, ChatColor.WHITE, ChatColor.DARK_GRAY, ChatColor.WHITE));
ChatBlock.sendMessage(player, headColor + plugin.getLang("materials") + ": " + ChatColor.AQUA + plugin.getLang("diamond") + ChatColor.DARK_GRAY + ", " + ChatColor.YELLOW + plugin.getLang("gold") + ChatColor.DARK_GRAY + ", " + ChatColor.GRAY + plugin.getLang("stone") + ChatColor.DARK_GRAY + ", " + ChatColor.WHITE + plugin.getLang("iron") + ChatColor.DARK_GRAY + ", " + ChatColor.GOLD + plugin.getLang("wood"));
ChatBlock.sendMessage(player, headColor + lang("weapons",player) + ": " + MessageFormat.format(lang("0.s.sword.1.2.b.bow.3.4.a.arrow",player), ChatColor.WHITE, ChatColor.DARK_GRAY, ChatColor.WHITE, ChatColor.DARK_GRAY, ChatColor.WHITE));
ChatBlock.sendMessage(player, headColor + lang("materials",player) + ": " + ChatColor.AQUA + lang("diamond",player) + ChatColor.DARK_GRAY + ", " + ChatColor.YELLOW + lang("gold",player) + ChatColor.DARK_GRAY + ", " + ChatColor.GRAY + lang("stone",player) + ChatColor.DARK_GRAY + ", " + ChatColor.WHITE + lang("iron",player) + ChatColor.DARK_GRAY + ", " + ChatColor.GOLD + lang("wood",player));
ChatBlock.sendBlank(player);
chatBlock.setFlexibility(true, false, false, false, false, false);
chatBlock.setAlignment("l", "l", "l", "c", "c", "c");
chatBlock.addRow(" " + headColor + plugin.getLang("name"), plugin.getLang("health"), plugin.getLang("hunger"), plugin.getLang("food"), plugin.getLang("armor"), plugin.getLang("weapons"));
chatBlock.addRow(" " + headColor + lang("name",player), lang("health",player), lang("hunger",player), lang("food",player), lang("armor",player), lang("weapons",player));
List<ClanPlayer> members = Helper.stripOffLinePlayers(clan.getLeaders());
members.addAll(Helper.stripOffLinePlayers(clan.getNonLeaders()));
@@ -79,7 +80,7 @@ public class VitalsCommand {
if (more) {
plugin.getStorageManager().addChatBlock(player, chatBlock);
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, headColor + MessageFormat.format(plugin.getLang("view.next.page"), plugin.getSettingsManager().getCommandMore()));
ChatBlock.sendMessage(player, headColor + MessageFormat.format(lang("view.next.page",player), plugin.getSettingsManager().getCommandMore()));
}
ChatBlock.sendBlank(player);
@@ -1,6 +1,7 @@
package net.sacredlabyrinth.phaed.simpleclans.commands;
import net.sacredlabyrinth.phaed.simpleclans.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
@@ -24,29 +25,25 @@ public class WarCommand {
SimpleClans plugin = SimpleClans.getInstance();
if (!plugin.getPermissionsManager().has(player, "simpleclans.leader.war")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("insufficient.permissions",player));
return;
}
ClanPlayer cp = plugin.getClanManager().getClanPlayer(player);
if (cp == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("not.a.member.of.any.clan"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("not.a.member.of.any.clan",player));
return;
}
Clan clan = cp.getClan();
if (!clan.isVerified()) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("clan.is.not.verified"));
return;
}
if (!clan.isLeader(player)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.leader.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("clan.is.not.verified",player));
return;
}
if (arg.length != 2) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.war"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.war",player), plugin.getSettingsManager().getCommandClan()));
return;
}
@@ -54,41 +51,47 @@ public class WarCommand {
Clan war = plugin.getClanManager().getClan(arg[1]);
if (war == null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.clan.matched"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.clan.matched",player));
return;
}
if (!clan.isRival(war.getTag())) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("you.can.only.start.war.with.rivals"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("you.can.only.start.war.with.rivals",player));
return;
}
if (action.equals(plugin.getLang("start"))) {
if (action.equals(lang("start",player))) {
if (!plugin.getPermissionsManager().has(player, RankPermission.WAR_START, PermissionLevel.LEADER, true)) {
return;
}
if (!clan.isWarring(war.getTag())) {
List<ClanPlayer> onlineLeaders = Helper.stripOffLinePlayers(clan.getLeaders());
if (!onlineLeaders.isEmpty()) {
plugin.getRequestManager().addWarStartRequest(cp, war, clan);
ChatBlock.sendMessage(player, ChatColor.AQUA + MessageFormat.format(plugin.getLang("leaders.have.been.asked.to.accept.the.war.request"), Helper.capitalize(war.getName())));
ChatBlock.sendMessage(player, ChatColor.AQUA + MessageFormat.format(lang("leaders.have.been.asked.to.accept.the.war.request",player), war.getName()));
} else {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("at.least.one.leader.accept.the.alliance"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("at.least.one.leader.accept.the.alliance",player));
}
} else {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("clans.already.at.war"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("clans.already.at.war",player));
}
return;
}
if (action.equals(plugin.getLang("end"))) {
if (action.equals(lang("end",player))) {
if (!plugin.getPermissionsManager().has(player, RankPermission.WAR_END, PermissionLevel.LEADER, true)) {
return;
}
if (clan.isWarring(war.getTag())) {
plugin.getRequestManager().addWarEndRequest(cp, war, clan);
ChatBlock.sendMessage(player, ChatColor.AQUA + MessageFormat.format(plugin.getLang("leaders.asked.to.end.rivalry"), Helper.capitalize(war.getName())));
ChatBlock.sendMessage(player, ChatColor.AQUA + MessageFormat.format(lang("leaders.asked.to.end.rivalry",player), war.getName()));
} else {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("clans.not.at.war"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("clans.not.at.war",player));
}
return;
}
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(plugin.getLang("usage.war"), plugin.getSettingsManager().getCommandClan()));
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("usage.war",player), plugin.getSettingsManager().getCommandClan()));
}
}
@@ -0,0 +1,85 @@
package net.sacredlabyrinth.phaed.simpleclans.conversation;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.conversations.Prompt;
import org.bukkit.conversations.StringPrompt;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
public class CreateClanNamePrompt extends StringPrompt {
@Override
public @NotNull String getPromptText(@NotNull ConversationContext context) {
return lang("insert.clan.name", (Player) context.getForWhom());
}
@Override
public @Nullable Prompt acceptInput(@NotNull ConversationContext context, @Nullable String clanName) {
SimpleClans plugin = (SimpleClans) context.getPlugin();
Player player = (Player) context.getForWhom();
if (plugin == null || clanName == null) return this;
Prompt errorPrompt = validateName(plugin, player, clanName);
if (errorPrompt != null) return errorPrompt;
Bukkit.getScheduler().runTask(plugin, () -> {
//noinspection ConstantConditions
processClanCreation(plugin, player, (String) context.getSessionData("tag"), clanName);
});
return END_OF_CONVERSATION;
}
private void processClanCreation(@NotNull SimpleClans plugin, @NotNull Player player, @NotNull String tag,
@NotNull String name) {
if (plugin.getClanManager().purchaseCreation(player)) {
plugin.getClanManager().createClan(player, tag, name);
Clan clan = plugin.getClanManager().getClan(tag);
clan.addBb(player.getName(), ChatColor.AQUA +
lang("clan.created", name));
plugin.getStorageManager().updateClan(clan);
if (plugin.getSettingsManager().isRequireVerification()) {
boolean verified = !plugin.getSettingsManager().isRequireVerification()
|| plugin.getPermissionsManager().has(player, "simpleclans.mod.verify");
if (!verified) {
ChatBlock.sendMessage(player, ChatColor.AQUA +
lang("get.your.clan.verified.to.access.advanced.features", player));
}
}
}
}
@Nullable
private Prompt validateName(@NotNull SimpleClans plugin, @NotNull Player player, @NotNull String input) {
boolean bypass = plugin.getPermissionsManager().has(player, "simpleclans.mod.bypass");
if (bypass) {
if (Helper.stripColors(input).length() > plugin.getSettingsManager().getClanMaxLength()) {
return new MessagePromptImpl(ChatColor.RED +
lang("your.clan.name.cannot.be.longer.than.characters", player,
plugin.getSettingsManager().getClanMaxLength()), this);
}
if (Helper.stripColors(input).length() <= plugin.getSettingsManager().getClanMinLength()) {
return new MessagePromptImpl(ChatColor.RED +
lang("your.clan.name.must.be.longer.than.characters", player,
plugin.getSettingsManager().getClanMinLength()), this);
}
}
if (input.contains("&")) {
return new MessagePromptImpl(ChatColor.RED +
lang("your.clan.name.cannot.contain.color.codes", player), this);
}
return null;
}
}
@@ -0,0 +1,51 @@
package net.sacredlabyrinth.phaed.simpleclans.conversation;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.utils.TagValidator;
import org.bukkit.ChatColor;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.conversations.Prompt;
import org.bukkit.conversations.StringPrompt;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
public class CreateClanTagPrompt extends StringPrompt {
@Override
public @NotNull String getPromptText(@NotNull ConversationContext context) {
return lang("insert.clan.tag", (Player) context.getForWhom());
}
@Override
public @Nullable Prompt acceptInput(@NotNull ConversationContext context, @Nullable String input) {
Player player = (Player) context.getForWhom();
SimpleClans plugin = (SimpleClans) context.getPlugin();
if (input == null || plugin == null) return this;
Prompt errorPrompt = validateTag(plugin, player, input);
if (errorPrompt != null) return errorPrompt;
context.setSessionData("tag", input);
return new CreateClanNamePrompt();
}
@Nullable
private Prompt validateTag(SimpleClans plugin, Player player, @NotNull String clanTag) {
String cleanTag = Helper.stripColors(clanTag);
if (plugin.getClanManager().isClan(cleanTag)) {
return new MessagePromptImpl(ChatColor.RED +
lang("clan.with.this.tag.already.exists", player), this);
}
TagValidator validator = new TagValidator(plugin, player, clanTag);
String errorMessage = validator.getErrorMessage();
if (errorMessage == null) {
return null;
} else {
return new MessagePromptImpl(errorMessage, this);
}
}
}
@@ -0,0 +1,38 @@
package net.sacredlabyrinth.phaed.simpleclans.conversation;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import org.bukkit.ChatColor;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.conversations.Prompt;
import org.bukkit.conversations.StringPrompt;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
public class CreateRankNamePrompt extends StringPrompt {
@Override
public @NotNull String getPromptText(@NotNull ConversationContext context) {
return lang("insert.rank.name", (Player) context.getForWhom());
}
@Override
public @Nullable Prompt acceptInput(@NotNull ConversationContext context, @Nullable String input) {
SimpleClans plugin = (SimpleClans) context.getPlugin();
Player player = (Player) context.getForWhom();
Clan clan = (Clan) context.getSessionData("clan");
if (clan == null || plugin == null) return END_OF_CONVERSATION;
if (input == null) return this;
String rank = input.toLowerCase();
if (clan.hasRank(rank)) {
return new MessagePromptImpl(ChatColor.RED + lang("rank.already.exists", player), this);
}
clan.createRank(rank);
plugin.getStorageManager().updateClan(clan, true);
return new MessagePromptImpl(ChatColor.AQUA + lang("rank.created", player));
}
}
@@ -0,0 +1,35 @@
package net.sacredlabyrinth.phaed.simpleclans.conversation;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.conversations.Prompt;
import org.jetbrains.annotations.NotNull;
/**
*
* @author roinujnosde
*/
public class MessagePromptImpl extends org.bukkit.conversations.MessagePrompt {
private final String message;
private Prompt nextPrompt;
public MessagePromptImpl(String message) {
this.message = message;
}
public MessagePromptImpl(String message, Prompt nextPrompt) {
this(message);
this.nextPrompt = nextPrompt;
}
@Override
protected Prompt getNextPrompt(@NotNull ConversationContext cc) {
return nextPrompt != null ? nextPrompt : END_OF_CONVERSATION;
}
@Override
public @NotNull String getPromptText(@NotNull ConversationContext cc) {
return message;
}
}
@@ -0,0 +1,68 @@
package net.sacredlabyrinth.phaed.simpleclans.conversation;
import java.text.MessageFormat;
import java.util.Arrays;
import java.util.Objects;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.managers.ClanManager;
import org.bukkit.ChatColor;
import org.bukkit.command.ConsoleCommandSender;
import org.bukkit.conversations.ConversationContext;
import org.bukkit.conversations.Prompt;
import org.bukkit.conversations.StringPrompt;
import org.bukkit.entity.Player;
import org.jetbrains.annotations.NotNull;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
/**
*
* @author roinujnosde
*/
public class ResignPrompt extends StringPrompt {
@Override
public Prompt acceptInput(ConversationContext cc, String input) {
final SimpleClans plugin = (SimpleClans) cc.getPlugin();
Player player = (Player) cc.getForWhom();
String yes = lang("resign.yes", player);
ClanManager cm = Objects.requireNonNull(plugin).getClanManager();
ClanPlayer cp = cm.getClanPlayer(player);
Clan clan = cp.getClan();
if (yes.equalsIgnoreCase(input)) {
if (!clan.isLeader(player) || clan.getLeaders().size() > 1) {
clan.addBb(player.getName(), ChatColor.AQUA + lang("0.has.resigned", player.getName()));
cp.addResignTime(clan.getTag());
clan.removePlayerFromClan(player.getUniqueId());
return new MessagePromptImpl(ChatColor.AQUA + lang("resign.success", player));
} else if (clan.isLeader(player) && clan.getLeaders().size() == 1) {
clan.disband();
String msgKey = "clan.has.been.disbanded";
//message for the server
plugin.getClanManager().serverAnnounce(ChatColor.AQUA + lang(msgKey, clan.getName()));
//message for the player
return new MessagePromptImpl(ChatColor.AQUA + lang(msgKey, player, clan.getName()));
} else {
return new MessagePromptImpl(ChatColor.RED + lang("last.leader.cannot.resign.you.must.appoint.another.leader.or.disband.the.clan", player));
}
} else {
return new MessagePromptImpl(ChatColor.RED + lang("resign.request.cancelled", player));
}
}
@Override
public @NotNull String getPromptText(@NotNull ConversationContext cc) {
Player player = (Player) cc.getForWhom();
return ChatColor.RED + MessageFormat.format(
lang("resign.confirmation", player), Arrays.asList(
lang("resign.yes", player), lang("resign.no", player)));
}
}
@@ -0,0 +1,46 @@
package net.sacredlabyrinth.phaed.simpleclans.events;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
public class AddKillEvent extends Event implements Cancellable {
private static final HandlerList handlers = new HandlerList();
private boolean cancelled = false;
private ClanPlayer victim;
private ClanPlayer attacker;
public AddKillEvent(ClanPlayer attacker, ClanPlayer victim){
this.attacker = attacker;
this.victim = victim;
}
@Override
public boolean isCancelled() {
return cancelled;
}
public ClanPlayer getAttacker() {
return attacker;
}
public ClanPlayer getVictim() {
return victim;
}
@Override
public void setCancelled(boolean value) {
cancelled = value;
}
@Override
public @NotNull HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
}
@@ -8,6 +8,7 @@ import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.jetbrains.annotations.NotNull;
/**
*
@@ -15,12 +16,12 @@ import org.bukkit.event.HandlerList;
*/
public class ChatEvent extends Event implements Cancellable {
private final HandlerList handlers = new HandlerList();
private static final HandlerList HANDLER_LIST = new HandlerList();
private String message;
private ClanPlayer sender;
private List<ClanPlayer> receivers;
private Map<String, String> placeholders = new HashMap<>();
private Type type;
private final ClanPlayer sender;
private final List<ClanPlayer> receivers;
private final Map<String, String> placeholders = new HashMap<>();
private final Type type;
private boolean cancelled;
public ChatEvent(String message, ClanPlayer sender, List<ClanPlayer> receivers, Type type) {
@@ -134,8 +135,12 @@ public class ChatEvent extends Event implements Cancellable {
}
@Override
public HandlerList getHandlers() {
return handlers;
public @NotNull HandlerList getHandlers() {
return HANDLER_LIST;
}
public static HandlerList getHandlerList() {
return HANDLER_LIST;
}
}
@@ -1,6 +1,7 @@
package net.sacredlabyrinth.phaed.simpleclans.executors;
import net.sacredlabyrinth.phaed.simpleclans.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
@@ -20,8 +21,8 @@ public class AcceptCommandExecutor implements CommandExecutor {
public boolean onCommand(CommandSender commandSender, Command command, String s, String[] strings) {
Player player = (Player) commandSender;
if (plugin.getSettingsManager().isBanned(player.getName())) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("banned"));
if (plugin.getSettingsManager().isBanned(player.getUniqueId())) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("banned",player));
return false;
}
@@ -31,30 +32,27 @@ public class AcceptCommandExecutor implements CommandExecutor {
Clan clan = cp.getClan();
if (!clan.isLeader(player)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.leader.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.leader.permissions",player));
return false;
}
if (!plugin.getRequestManager().hasRequest(clan.getTag())) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("nothing.to.accept"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("nothing.to.accept",player));
return false;
}
if (cp.getVote() != null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("you.have.already.voted"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("you.have.already.voted",player));
return false;
}
plugin.getRequestManager().accept(cp);
clan.leaderAnnounce(ChatColor.GREEN + MessageFormat.format(plugin.getLang("voted.to.accept"), Helper.capitalize(player.getName())));
clan.leaderAnnounce(ChatColor.GREEN + MessageFormat.format(lang("voted.to.accept",player), player.getName()));
plugin.getRequestManager().accept(cp);
} else {
if (!plugin.getRequestManager().hasRequest(player.getName().toLowerCase())) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("nothing.to.accept"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("nothing.to.accept",player));
return false;
}
if (SimpleClans.getInstance().hasUUID()) {
cp = plugin.getClanManager().getCreateClanPlayer(player.getUniqueId());
cp.setName(player.getName());
} else {
cp = plugin.getClanManager().getCreateClanPlayer(player.getName());
}
cp = plugin.getClanManager().getCreateClanPlayer(player.getUniqueId());
cp.setName(player.getName());
plugin.getRequestManager().accept(cp);
}
@@ -1,9 +1,9 @@
package net.sacredlabyrinth.phaed.simpleclans.executors;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.PermissionLevel;
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
@@ -25,8 +25,7 @@ public class AllyCommandExecutor implements CommandExecutor {
return false;
}
if (!plugin.getPermissionsManager().has(player, "simpleclans.member.ally")) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("insufficient.permissions"));
if (!plugin.getPermissionsManager().has(player, RankPermission.ALLY_CHAT, PermissionLevel.TRUSTED, true)) {
return true;
}
@@ -1,58 +1,72 @@
package net.sacredlabyrinth.phaed.simpleclans.executors;
import net.sacredlabyrinth.phaed.simpleclans.*;
import java.text.MessageFormat;
import net.sacredlabyrinth.phaed.simpleclans.commands.*;
import org.bukkit.ChatColor;
import org.bukkit.command.*;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import java.text.MessageFormat;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.ui.InventoryDrawer;
import net.sacredlabyrinth.phaed.simpleclans.ui.frames.MainFrame;
import org.jetbrains.annotations.NotNull;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
/**
* @author phaed
*/
public final class ClanCommandExecutor implements CommandExecutor {
private SimpleClans plugin;
private CreateCommand createCommand;
private ListCommand listCommand;
private ProfileCommand profileCommand;
private RosterCommand rosterCommand;
private LookupCommand lookupCommand;
private LeaderboardCommand leaderboardCommand;
private AlliancesCommand alliancesCommand;
private RivalriesCommand rivalriesCommand;
private VitalsCommand vitalsCommand;
private CoordsCommand coordsCommand;
private StatsCommand statsCommand;
private AllyCommand allyCommand;
private RivalCommand rivalCommand;
private BbCommand bbCommand;
private ModtagCommand modtagCommand;
private ToggleCommand toggleCommand;
private InviteCommand inviteCommand;
private KickCommand kickCommand;
private TrustCommand trustCommand;
private UntrustCommand untrustCommand;
private PromoteCommand promoteCommand;
private DemoteCommand demoteCommand;
private ClanffCommand clanffCommand;
private FfCommand ffCommand;
private ResignCommand resignCommand;
private DisbandCommand disbandCommand;
private VerifyCommand verifyCommand;
private BanCommand banCommand;
private UnbanCommand unbanCommand;
private ReloadCommand reloadCommand;
private GlobalffCommand globalffCommand;
private MenuCommand menuCommand;
private WarCommand warCommand;
private HomeCommand homeCommand;
private KillsCommand killsCommand;
private MostKilledCommand mostKilledCommand;
private SetRankCommand setRankCommand;
private BankCommand bankCommand;
private PlaceCommand placeCommand;
private ResetKDRCommand resetKDRCommand;
private final SimpleClans plugin;
private final CreateCommand createCommand;
private final ListCommand listCommand;
private final ProfileCommand profileCommand;
private final RosterCommand rosterCommand;
private final LookupCommand lookupCommand;
private final LeaderboardCommand leaderboardCommand;
private final AlliancesCommand alliancesCommand;
private final RivalriesCommand rivalriesCommand;
private final VitalsCommand vitalsCommand;
private final CoordsCommand coordsCommand;
private final StatsCommand statsCommand;
private final AllyCommand allyCommand;
private final RivalCommand rivalCommand;
private final BbCommand bbCommand;
private final ModtagCommand modtagCommand;
private final ToggleCommand toggleCommand;
private final InviteCommand inviteCommand;
private final KickCommand kickCommand;
private final TrustCommand trustCommand;
private final UntrustCommand untrustCommand;
private final PromoteCommand promoteCommand;
private final DemoteCommand demoteCommand;
private final ClanffCommand clanffCommand;
private final FfCommand ffCommand;
private final ResignCommand resignCommand;
private final DisbandCommand disbandCommand;
private final VerifyCommand verifyCommand;
private final BanCommand banCommand;
private final FeeCommand feeCommand;
private final UnbanCommand unbanCommand;
private final ReloadCommand reloadCommand;
private final GlobalffCommand globalffCommand;
private final MenuCommand menuCommand;
private final WarCommand warCommand;
private final HomeCommand homeCommand;
private final KillsCommand killsCommand;
private final MostKilledCommand mostKilledCommand;
private final SetRankCommand setRankCommand;
private final BankCommand bankCommand;
private final PlaceCommand placeCommand;
private final ResetKDRCommand resetKDRCommand;
private final PurgeCommand purgeCommand;
private final DescriptionCommand descriptionCommand;
private final RankCommand rankCommand;
/**
*
@@ -99,10 +113,14 @@ public final class ClanCommandExecutor implements CommandExecutor {
bankCommand = new BankCommand();
placeCommand = new PlaceCommand();
resetKDRCommand = new ResetKDRCommand();
feeCommand = new FeeCommand();
purgeCommand = new PurgeCommand();
descriptionCommand = new DescriptionCommand();
rankCommand = new RankCommand();
}
@Override
public boolean onCommand(CommandSender sender, Command command, String s, String[] args) {
public boolean onCommand(@NotNull CommandSender sender, Command command, String s, String[] args) {
try {
if (sender instanceof Player) {
Player player = (Player) sender;
@@ -111,97 +129,113 @@ public final class ClanCommandExecutor implements CommandExecutor {
return false;
}
if (plugin.getSettingsManager().isBanned(player.getName())) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("banned"));
if (plugin.getSettingsManager().isBanned(player.getUniqueId())) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("banned",player));
return false;
}
if (args.length == 0) {
menuCommand.execute(player);
if (plugin.getSettingsManager().isEnableGUI()) {
InventoryDrawer.open(new MainFrame(player));
} else {
menuCommand.execute(player);
}
} else {
String subcommand = args[0];
String[] subargs = Helper.removeFirst(args);
if (subcommand.equalsIgnoreCase(plugin.getLang("create.command"))) {
if (subcommand.equalsIgnoreCase(lang("create.command",player)) || subcommand.equalsIgnoreCase("create")) {
createCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("list.command")) || subcommand.equalsIgnoreCase("list")) {
} else if (subcommand.equalsIgnoreCase(lang("list.command",player)) || subcommand.equalsIgnoreCase("list")) {
listCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("bank.command")) || subcommand.equalsIgnoreCase("bank")) {
} else if (subcommand.equalsIgnoreCase(lang("bank.command",player)) || subcommand.equalsIgnoreCase("bank")) {
bankCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("profile.command")) || subcommand.equalsIgnoreCase("profile")) {
} else if (subcommand.equalsIgnoreCase(lang("profile.command",player)) || subcommand.equalsIgnoreCase("profile")) {
profileCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("roster.command")) || subcommand.equalsIgnoreCase("roster")) {
} else if (subcommand.equalsIgnoreCase(lang("roster.command",player)) || subcommand.equalsIgnoreCase("roster")) {
rosterCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("lookup.command")) || subcommand.equalsIgnoreCase("lookup")) {
} else if (subcommand.equalsIgnoreCase(lang("lookup.command",player)) || subcommand.equalsIgnoreCase("lookup")) {
lookupCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("home.command")) || subcommand.equalsIgnoreCase("home")) {
} else if (subcommand.equalsIgnoreCase(lang("home.command",player)) || subcommand.equalsIgnoreCase("home")) {
homeCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("leaderboard.command")) || subcommand.equalsIgnoreCase("leaderboard")) {
} else if (subcommand.equalsIgnoreCase(lang("leaderboard.command",player)) || subcommand.equalsIgnoreCase("leaderboard")) {
leaderboardCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("alliances.command")) || subcommand.equalsIgnoreCase("alliances")) {
} else if (subcommand.equalsIgnoreCase(lang("alliances.command",player)) || subcommand.equalsIgnoreCase("alliances")) {
alliancesCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("rivalries.command")) || subcommand.equalsIgnoreCase("rivalries")) {
} else if (subcommand.equalsIgnoreCase(lang("rivalries.command",player)) || subcommand.equalsIgnoreCase("rivalries")) {
rivalriesCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("vitals.command")) || subcommand.equalsIgnoreCase("vitals")) {
} else if (subcommand.equalsIgnoreCase(lang("vitals.command",player)) || subcommand.equalsIgnoreCase("vitals")) {
vitalsCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("coords.command")) || subcommand.equalsIgnoreCase("coords")) {
} else if (subcommand.equalsIgnoreCase(lang("coords.command",player)) || subcommand.equalsIgnoreCase("coords")) {
coordsCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("stats.command")) || subcommand.equalsIgnoreCase("stats")) {
} else if (subcommand.equalsIgnoreCase(lang("stats.command",player)) || subcommand.equalsIgnoreCase("stats")) {
statsCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("ally.command")) || subcommand.equalsIgnoreCase("ally")) {
} else if (subcommand.equalsIgnoreCase(lang("ally.command",player)) || subcommand.equalsIgnoreCase("ally")) {
allyCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("rival.command")) || subcommand.equalsIgnoreCase("rival")) {
} else if (subcommand.equalsIgnoreCase(lang("rival.command",player)) || subcommand.equalsIgnoreCase("rival")) {
rivalCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("bb.command")) || subcommand.equalsIgnoreCase("bb")) {
} else if (subcommand.equalsIgnoreCase(lang("bb.command",player)) || subcommand.equalsIgnoreCase("bb")) {
bbCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("modtag.command")) || subcommand.equalsIgnoreCase("modtag")) {
} else if (subcommand.equalsIgnoreCase(lang("modtag.command",player)) || subcommand.equalsIgnoreCase("modtag")) {
modtagCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("toggle.command")) || subcommand.equalsIgnoreCase("toggle")) {
} else if (subcommand.equalsIgnoreCase(lang("toggle.command",player)) || subcommand.equalsIgnoreCase("toggle")) {
toggleCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("invite.command")) || subcommand.equalsIgnoreCase("invite")) {
} else if (subcommand.equalsIgnoreCase(lang("invite.command",player)) || subcommand.equalsIgnoreCase("invite")) {
inviteCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("kick.command")) || subcommand.equalsIgnoreCase("kick")) {
} else if (subcommand.equalsIgnoreCase(lang("kick.command",player)) || subcommand.equalsIgnoreCase("kick")) {
kickCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("trust.command")) || subcommand.equalsIgnoreCase("trust")) {
} else if (subcommand.equalsIgnoreCase(lang("trust.command",player)) || subcommand.equalsIgnoreCase("trust")) {
trustCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("untrust.command")) || subcommand.equalsIgnoreCase("unstrust")) {
} else if (subcommand.equalsIgnoreCase(lang("untrust.command",player)) || subcommand.equalsIgnoreCase("unstrust")) {
untrustCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("promote.command")) || subcommand.equalsIgnoreCase("promote")) {
} else if (subcommand.equalsIgnoreCase(lang("promote.command",player)) || subcommand.equalsIgnoreCase("promote")) {
promoteCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("demote.command")) || subcommand.equalsIgnoreCase("demote")) {
} else if (subcommand.equalsIgnoreCase(lang("demote.command",player)) || subcommand.equalsIgnoreCase("demote")) {
demoteCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("clanff.command")) || subcommand.equalsIgnoreCase("canff")) {
} else if (subcommand.equalsIgnoreCase(lang("clanff.command",player)) || subcommand.equalsIgnoreCase("canff")) {
clanffCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("ff.command")) || subcommand.equalsIgnoreCase("ff")) {
} else if (subcommand.equalsIgnoreCase(lang("ff.command",player)) || subcommand.equalsIgnoreCase("ff")) {
ffCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("resign.command")) || subcommand.equalsIgnoreCase("resign")) {
} else if (subcommand.equalsIgnoreCase(lang("resign.command",player)) || subcommand.equalsIgnoreCase("resign")) {
resignCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("disband.command")) || subcommand.equalsIgnoreCase("disband")) {
} else if (subcommand.equalsIgnoreCase(lang("disband.command",player)) || subcommand.equalsIgnoreCase("disband")) {
disbandCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("verify.command")) || subcommand.equalsIgnoreCase("verify")) {
} else if (subcommand.equalsIgnoreCase(lang("verify.command",player)) || subcommand.equalsIgnoreCase("verify")) {
verifyCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("ban.command")) || subcommand.equalsIgnoreCase("ban")) {
} else if (subcommand.equalsIgnoreCase(lang("ban.command",player)) || subcommand.equalsIgnoreCase("ban")) {
banCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("unban.command")) || subcommand.equalsIgnoreCase("unban")) {
} else if (subcommand.equalsIgnoreCase(lang("unban.command",player)) || subcommand.equalsIgnoreCase("unban")) {
unbanCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("reload.command")) || subcommand.equalsIgnoreCase("reload")) {
} else if (subcommand.equalsIgnoreCase(lang("reload.command",player)) || subcommand.equalsIgnoreCase("reload")) {
reloadCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("globalff.command")) || subcommand.equalsIgnoreCase("globalff")) {
} else if (subcommand.equalsIgnoreCase(lang("globalff.command",player)) || subcommand.equalsIgnoreCase("globalff")) {
globalffCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("war.command")) || subcommand.equalsIgnoreCase("war")) {
} else if (subcommand.equalsIgnoreCase(lang("war.command",player)) || subcommand.equalsIgnoreCase("war")) {
warCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("kills.command")) || subcommand.equalsIgnoreCase("kills")) {
} else if (subcommand.equalsIgnoreCase(lang("kills.command",player)) || subcommand.equalsIgnoreCase("kills")) {
killsCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("mostkilled.command")) || subcommand.equalsIgnoreCase("mostkilled")) {
} else if (subcommand.equalsIgnoreCase(lang("mostkilled.command",player)) || subcommand.equalsIgnoreCase("mostkilled")) {
mostKilledCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("setrank.command")) || subcommand.equalsIgnoreCase("setrank")) {
} else if (subcommand.equalsIgnoreCase(lang("setrank.command",player)) || subcommand.equalsIgnoreCase("setrank")) {
setRankCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("place.command")) || subcommand.equalsIgnoreCase("place")) {
} else if (subcommand.equalsIgnoreCase(lang("place.command",player)) || subcommand.equalsIgnoreCase("place")) {
placeCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("resetkdr.command")) || subcommand.equalsIgnoreCase("resetkdr")) {
} else if (subcommand.equalsIgnoreCase(lang("resetkdr.command",player)) || subcommand.equalsIgnoreCase("resetkdr")) {
resetKDRCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(lang("fee.command",player)) || subcommand.equalsIgnoreCase("fee")) {
feeCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(lang("purge.command",player)) || subcommand.equalsIgnoreCase("purge")){
purgeCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(lang("description.command",player)) || subcommand.equalsIgnoreCase("description")) {
descriptionCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(lang("rank.command",player)) || subcommand.equalsIgnoreCase("rank")) {
rankCommand.execute(player, subargs);
} else if (subcommand.equalsIgnoreCase(lang("help.command",player)) || subcommand.equalsIgnoreCase("help")) {
menuCommand.execute(player);
} else if (subcommand.equalsIgnoreCase(lang("setbanner.command", player)) || subcommand.equalsIgnoreCase("setbanner")) {
new SetBannerCommand().execute(player);
} else {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("does.not.match"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("does.not.match",player));
}
}
} else {
@@ -211,22 +245,23 @@ public final class ClanCommandExecutor implements CommandExecutor {
String subcommand = args[0];
String[] subargs = Helper.removeFirst(args);
if (subcommand.equalsIgnoreCase(plugin.getLang("verify.command")) || subcommand.equalsIgnoreCase("verify")) {
if (subcommand.equalsIgnoreCase(lang("verify.command", sender)) || subcommand.equalsIgnoreCase("verify")) {
verifyCommand.execute(sender, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("reload.command")) || subcommand.equalsIgnoreCase("reload")) {
} else if (subcommand.equalsIgnoreCase(lang("reload.command", sender)) || subcommand.equalsIgnoreCase("reload")) {
reloadCommand.execute(sender, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("place.command")) || subcommand.equalsIgnoreCase("place")) {
} else if (subcommand.equalsIgnoreCase(lang("place.command", sender)) || subcommand.equalsIgnoreCase("place")) {
placeCommand.execute(sender, subargs);
} else if (subcommand.equalsIgnoreCase(plugin.getLang("globalff.command")) || subcommand.equalsIgnoreCase("globalff")) {
} else if (subcommand.equalsIgnoreCase(lang("globalff.command", sender)) || subcommand.equalsIgnoreCase("globalff")) {
globalffCommand.execute(sender, subargs);
}
else {
ChatBlock.sendMessage(sender, ChatColor.RED + plugin.getLang("does.not.match"));
} else if (subcommand.equalsIgnoreCase(lang("purge.command", sender)) || subcommand.equalsIgnoreCase("purge")) {
purgeCommand.execute(sender, subargs);
} else {
ChatBlock.sendMessage(sender, ChatColor.RED + lang("does.not.match", sender));
}
}
}
} catch (Exception ex) {
SimpleClans.getInstance().getServer().getConsoleSender().sendMessage(ChatColor.RED + MessageFormat.format(plugin.getLang("simpleclans.command.failure"), ex.getMessage()));
SimpleClans.getInstance().getServer().getConsoleSender().sendMessage(ChatColor.RED + MessageFormat.format(lang("simpleclans.command.failure"), ex.getMessage()));
for (StackTraceElement el : ex.getStackTrace()) {
System.out.print(el.toString());
}
@@ -1,6 +1,7 @@
package net.sacredlabyrinth.phaed.simpleclans.executors;
import net.sacredlabyrinth.phaed.simpleclans.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
@@ -20,8 +21,8 @@ public class DenyCommandExecutor implements CommandExecutor {
public boolean onCommand(CommandSender commandSender, Command command, String s, String[] strings) {
Player player = (Player) commandSender;
if (plugin.getSettingsManager().isBanned(player.getName())) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("banned"));
if (plugin.getSettingsManager().isBanned(player.getUniqueId())) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("banned",player));
return false;
}
@@ -31,30 +32,27 @@ public class DenyCommandExecutor implements CommandExecutor {
Clan clan = cp.getClan();
if (!clan.isLeader(player)) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("no.leader.permissions"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("no.leader.permissions",player));
return false;
}
if (!plugin.getRequestManager().hasRequest(clan.getTag())) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("nothing.to.deny"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("nothing.to.deny",player));
return false;
}
if (cp.getVote() != null) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("you.have.already.voted"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("you.have.already.voted",player));
return false;
}
plugin.getRequestManager().deny(cp);
clan.leaderAnnounce(ChatColor.RED + MessageFormat.format(plugin.getLang("has.voted.to.deny"), Helper.capitalize(player.getName())));
clan.leaderAnnounce(ChatColor.RED + MessageFormat.format(lang("has.voted.to.deny",player), player.getName()));
plugin.getRequestManager().deny(cp);
} else {
if (!plugin.getRequestManager().hasRequest(player.getName().toLowerCase())) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("nothing.to.deny"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("nothing.to.deny",player));
return false;
}
if (SimpleClans.getInstance().hasUUID()) {
cp = plugin.getClanManager().getCreateClanPlayer(player.getUniqueId());
} else {
cp = plugin.getClanManager().getCreateClanPlayer(player.getName());
}
cp = plugin.getClanManager().getCreateClanPlayer(player.getUniqueId());
plugin.getRequestManager().deny(cp);
}
@@ -1,9 +1,6 @@
package net.sacredlabyrinth.phaed.simpleclans.executors;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
@@ -2,6 +2,7 @@ package net.sacredlabyrinth.phaed.simpleclans.executors;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
@@ -21,15 +22,15 @@ public class MoreCommandExecutor implements CommandExecutor {
public boolean onCommand(CommandSender commandSender, Command command, String s, String[] strings) {
Player player = (Player) commandSender;
if (plugin.getSettingsManager().isBanned(player.getName())) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("banned"));
if (plugin.getSettingsManager().isBanned(player.getUniqueId())) {
ChatBlock.sendMessage(player, ChatColor.RED + lang("banned",player));
return false;
}
ChatBlock chatBlock = plugin.getStorageManager().getChatBlock(player);
if (chatBlock == null || chatBlock.size() <= 0) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("nothing.more.to.see"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("nothing.more.to.see",player));
return false;
}
@@ -37,7 +38,7 @@ public class MoreCommandExecutor implements CommandExecutor {
if (chatBlock.size() > 0) {
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, plugin.getSettingsManager().getPageHeadingsColor() + MessageFormat.format(plugin.getLang("view.next.page"), plugin.getSettingsManager().getCommandMore()));
ChatBlock.sendMessage(player, plugin.getSettingsManager().getPageHeadingsColor() + MessageFormat.format(lang("view.next.page",player), plugin.getSettingsManager().getCommandMore()));
}
ChatBlock.sendBlank(player);
return true;
@@ -0,0 +1,111 @@
package net.sacredlabyrinth.phaed.simpleclans.language;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
/**
* Utility class that migrates old language files (yaml) to the new format (properties)
*
* @author RoinujNosde
*
*/
public class LanguageMigration {
private SimpleClans plugin;
public LanguageMigration(SimpleClans plugin) {
this.plugin = plugin;
}
/**
* Migrates all language files in the plugin's data folder
*/
public void migrate() {
File dataFolder = plugin.getDataFolder();
if (!dataFolder.exists()) {
return;
}
File[] languageFiles = dataFolder.listFiles(f -> {
return f.getName().startsWith("language") && f.getName().endsWith(".yml");
});
for (File file : languageFiles) {
convert(file);
backup(file);
file.delete();
}
}
/**
* Copies the file to the backup folder
*
* @param file the file to backup
*/
private void backup(File file) {
File backupFolder = new File(plugin.getDataFolder(), "language_backup");
if (!backupFolder.exists()) {
backupFolder.mkdir();
}
file.renameTo(new File(backupFolder, file.getName()));
}
/**
* Converts the yaml file to properties
*
* @param file
*/
private void convert(File file) {
List<String> lines = null;
try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), StandardCharsets.UTF_8))) {
lines = reader.lines().collect(Collectors.toList());
} catch (IOException e) {
plugin.getLogger().severe("Error converting language file " + file.getName());
e.printStackTrace();
}
if (lines == null || lines.isEmpty()) {
return;
}
List<String> convertedLines = new ArrayList<>();
for (String line : lines) {
line = line.replaceFirst(":", "=")
.replaceAll("''''", "''")
.replaceAll("^'", "")
.replaceAll("= \'", "=")
.replaceAll("'$", "")
.replaceAll("^\"", "")
.replaceAll("\"$", "")
.replaceAll("= \"", "=");
convertedLines.add(line);
}
File converted = new File(file.getParentFile(), file.getName().replace("language", "messages").replace("yml", "properties").replace("-", "_"));
try (Writer writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(converted), StandardCharsets.UTF_8))) {
for (String line : convertedLines) {
writer.append(line);
writer.append(System.lineSeparator());
}
writer.flush();
} catch (IOException e) {
plugin.getLogger().severe("Error converting language file " + file.getName());
e.printStackTrace();
}
}
}
@@ -0,0 +1,233 @@
package net.sacredlabyrinth.phaed.simpleclans.language;
import java.io.*;
import java.net.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.util.*;
import java.util.logging.Level;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
/**
*
* @author RoinujNosde
*
*/
public class LanguageResource {
private static final ResourceLoader LOADER = new ResourceLoader(SimpleClans.getInstance().getDataFolder());
private final Locale defaultLocale;
private static List<Locale> availableLocales;
private static final Map<Locale, Integer> TRANSLATION_STATUS = new HashMap<>();
public LanguageResource() {
this.defaultLocale = SimpleClans.getInstance().getSettingsManager().getLanguage();
}
public String getLang(@NotNull String key, @NotNull Locale locale) {
try {
ResourceBundle bundle = ResourceBundle.getBundle("messages", locale, LOADER,
new ResourceControl(defaultLocale, false));
return bundle.getString(key);
} catch (MissingResourceException ignored) {}
if (locale.equals(Locale.ENGLISH)) {
// English is the root messages.properties inside the jar
locale = Locale.ROOT;
}
try {
ResourceBundle bundle = ResourceBundle.getBundle("messages", locale,
SimpleClans.getInstance().getClass().getClassLoader(), new ResourceControl(defaultLocale));
return bundle.getString(key);
} catch (MissingResourceException ignored) {}
return key;
}
public static int getTranslationStatus(@NotNull Locale locale) {
if (locale.equals(Locale.ENGLISH)) {
return 100;
}
Integer lines = TRANSLATION_STATUS.get(locale);
Integer englishLines = TRANSLATION_STATUS.get(Locale.ENGLISH);
if (lines == null || englishLines == null) {
return -1;
}
return Math.round((lines / englishLines.floatValue()) * 100);
}
public static void clearCache() {
ResourceBundle.clearCache(LOADER);
}
public static List<Locale> getAvailableLocales() {
if (availableLocales != null) {
return availableLocales;
}
loadAvailableLocales();
return availableLocales;
}
private static void loadAvailableLocales() {
ArrayList<Locale> locales = new ArrayList<>();
try {
URI uri = LanguageResource.class.getProtectionDomain().getCodeSource().getLocation().toURI();
FileSystem fileSystem = FileSystems.newFileSystem(URI.create("jar:" + uri.toString()), Collections.emptyMap());
Files.walk(fileSystem.getPath("/")).forEach(p -> {
String name = p.getFileName() == null ? "" : p.getFileName().toString();
if (name.startsWith("messages") && name.endsWith(".properties")) {
Locale locale = getLocaleByFileName(name);
locales.add(locale);
loadTranslationStatus(locale, name);
}
});
fileSystem.close();
} catch (URISyntaxException | IOException e) {
SimpleClans.getInstance().getLogger().log(Level.WARNING, "An error occurred while getting the available languages", e);
}
locales.sort(Comparator.comparing(Locale::toLanguageTag));
availableLocales = locales;
}
private static @NotNull Locale getLocaleByFileName(@NotNull String name) {
Locale locale;
if (name.equalsIgnoreCase("messages.properties")) {
locale = Locale.ENGLISH;
} else {
String[] extensionSplit = name.split(".properties");
String[] split = extensionSplit[0].split("_");
if (split.length == 2) {
locale = new Locale(split[1]);
} else {
locale = new Locale(split[1], split[2]);
}
}
return locale;
}
private static void loadTranslationStatus(@NotNull Locale locale, @NotNull String fileName) {
InputStream stream = SimpleClans.getInstance().getClass().getResourceAsStream("/" + fileName);
if (stream == null) return;
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
int lineCount = 0;
try {
while (reader.readLine() != null) {
lineCount++;
}
} catch (IOException ex) {
lineCount = -1;
}
TRANSLATION_STATUS.put(locale, lineCount);
}
static class ResourceLoader extends ClassLoader {
private final File dataFolder;
public ResourceLoader(File dataFolder) {
this.dataFolder = dataFolder;
}
@Override
public URL getResource(String name) {
File file = new File(dataFolder, name);
if (file.exists()) {
try {
return file.toURI().toURL();
} catch (MalformedURLException ignored) {
}
}
return null;
}
}
static class ResourceControl extends ResourceBundle.Control {
private final Locale defaultLocale;
private final boolean defaultAsFallback;
public ResourceControl(@NotNull Locale defaultLocale) {
this.defaultLocale = defaultLocale;
this.defaultAsFallback = true;
}
public ResourceControl(@NotNull Locale defaultLocale, boolean defaultAsFallback) {
this.defaultLocale = defaultLocale;
this.defaultAsFallback = defaultAsFallback;
}
@Override
public List<String> getFormats(String baseName) {
if (baseName == null) {
throw new NullPointerException();
}
return Collections.singletonList("java.properties");
}
@Override
public List<Locale> getCandidateLocales(String baseName, Locale locale) {
List<Locale> candidateLocales = new ArrayList<>(super.getCandidateLocales(baseName, locale));
if (!defaultAsFallback && candidateLocales.size() != 1) {
candidateLocales.remove(Locale.ROOT);
}
return candidateLocales;
}
@Override
@Nullable
public ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader,
boolean reload) throws IOException {
String bundleName = toBundleName(baseName, locale);
ResourceBundle bundle;
if (format.equals("java.properties")) {
String resourceName = toResourceName(bundleName, "properties");
URL url = loader.getResource(resourceName);
if (url == null) {
return null;
}
URLConnection connection = url.openConnection();
if (reload) {
connection.setUseCaches(false);
}
InputStreamReader reader = new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8);
bundle = new PropertyResourceBundle(reader);
reader.close();
} else {
throw new IllegalArgumentException("unknown format: " + format);
}
return bundle;
}
@Override
@Nullable
public Locale getFallbackLocale(String baseName, Locale locale) {
if (!defaultAsFallback) {
return null;
}
if (!locale.equals(defaultLocale) && !locale.equals(Locale.ROOT)) {
return defaultLocale;
}
if (locale.equals(defaultLocale) && !defaultLocale.equals(Locale.ROOT)) {
return Locale.ROOT;
}
return null;
}
}
}
@@ -2,7 +2,13 @@ package net.sacredlabyrinth.phaed.simpleclans.listeners;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.Kill;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.events.AddKillEvent;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import net.sacredlabyrinth.phaed.simpleclans.managers.PermissionsManager;
import net.sacredlabyrinth.phaed.simpleclans.managers.StorageManager.DataCallback;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.*;
import org.bukkit.event.EventHandler;
@@ -15,6 +21,9 @@ import org.bukkit.event.entity.EntityTargetLivingEntityEvent;
import org.bukkit.event.player.PlayerInteractEntityEvent;
import java.text.MessageFormat;
import java.time.LocalDateTime;
import java.util.Map;
import java.util.logging.Level;
/**
* @author phaed
@@ -65,77 +74,122 @@ public class SCEntityListener implements Listener
if (entityEvent.getDamager() instanceof Player)
{
attacker = (Player) entityEvent.getDamager();
} else if (entityEvent.getDamager() instanceof Arrow)
} else if (entityEvent.getDamager() instanceof Projectile)
{
Arrow arrow = (Arrow) entityEvent.getDamager();
Projectile projectile = (Projectile) entityEvent.getDamager();
if (arrow.getShooter() instanceof Player)
if (projectile.getShooter() instanceof Player)
{
attacker = (Player) arrow.getShooter();
attacker = (Player) projectile.getShooter();
}
}
}
if (attacker != null && victim != null)
if (attacker != null)
{
ClanPlayer acp;
ClanPlayer vcp;
if (SimpleClans.getInstance().hasUUID())
{
acp = plugin.getClanManager().getCreateClanPlayer(attacker.getUniqueId());
vcp = plugin.getClanManager().getCreateClanPlayer(victim.getUniqueId());
} else
{
acp = plugin.getClanManager().getCreateClanPlayer(attacker.getName());
vcp = plugin.getClanManager().getCreateClanPlayer(victim.getName());
}
if (SimpleClans.getInstance().getSettingsManager().isDenySameIPKills())
{
if (attacker.getAddress().getHostString().equals(victim.getAddress().getHostString()))
{
plugin.getLogger().log(Level.INFO, "Blocked same IP kill calculating: {0} killed {1}. IP: {2}", new Object[]{
attacker.getDisplayName(), victim.getDisplayName(), attacker.getAddress().getHostString()
});
return;
}
}
String kdrExempt = "simpleclans.other.kdr-exempt";
PermissionsManager pm = plugin.getPermissionsManager();
if (pm.has(attacker, kdrExempt) || pm.has(victim, kdrExempt)) {
return;
}
AddKillEvent addKillEvent = new AddKillEvent(plugin.getClanManager().getCreateClanPlayer(
attacker.getUniqueId()),plugin.getClanManager().getCreateClanPlayer(victim.getUniqueId()));
Bukkit.getServer().getPluginManager().callEvent(addKillEvent);
if(addKillEvent.isCancelled()) return;
ClanPlayer victimCp = addKillEvent.getVictim();
ClanPlayer attackerCp = addKillEvent.getAttacker();
double reward = 0;
double multipier = plugin.getSettingsManager().getKDRMultipliesPerKill();
float kdr = acp.getKDR();
float kdr = attackerCp.getKDR();
if (vcp.getClan() == null || acp.getClan() == null || !vcp.getClan().isVerified() || !acp.getClan().isVerified())
if (victimCp.getClan() == null || attackerCp.getClan() == null || !victimCp.getClan().isVerified() || !attackerCp.getClan().isVerified())
{
acp.addCivilianKill();
plugin.getStorageManager().insertKill(attacker, acp.getTag(), victim, "", "c");
} else if (acp.getClan().isRival(vcp.getTag()))
addKill(Kill.Type.CIVILIAN, attackerCp, victimCp);
} else if (attackerCp.getClan().isRival(victimCp.getTag()))
{
if (acp.getClan().isWarring(vcp.getClan()))
if (attackerCp.getClan().isWarring(victimCp.getClan()))
{
reward = (double) kdr * multipier * 4;
} else
{
reward = (double) kdr * multipier * 2;
}
acp.addRivalKill();
plugin.getStorageManager().insertKill(attacker, acp.getTag(), victim, vcp.getTag(), "r");
} else if (acp.getClan().isAlly(vcp.getTag()))
addKill(Kill.Type.RIVAL, attackerCp, victimCp);
} else if (attackerCp.getClan().isAlly(victimCp.getTag()))
{
reward = (double) kdr * multipier * -1;
} else
{
reward = (double) kdr * multipier;
acp.addNeutralKill();
plugin.getStorageManager().insertKill(attacker, acp.getTag(), victim, vcp.getTag(), "n");
addKill(Kill.Type.NEUTRAL, attackerCp, victimCp);
}
if (reward != 0 && plugin.getSettingsManager().isMoneyPerKill())
{
for (ClanPlayer cp : acp.getClan().getOnlineMembers())
for (ClanPlayer cp : attackerCp.getClan().getOnlineMembers())
{
double money = Math.round((reward / acp.getClan().getOnlineMembers().size()) * 100D) / 100D;
cp.toPlayer().sendMessage(ChatColor.AQUA + MessageFormat.format(plugin.getLang("player.got.money"), money, victim.getName(), kdr));
plugin.getPermissionsManager().playerGrantMoney(cp.getName(), money);
double money = Math.round((reward / attackerCp.getClan().getOnlineMembers().size()) * 100D) / 100D;
cp.toPlayer().sendMessage(ChatColor.AQUA + MessageFormat.format(lang("player.got.money",cp.toPlayer()), money, victim.getName(), kdr));
plugin.getPermissionsManager().playerGrantMoney(cp.toPlayer(), money);
}
}
// record death for victim
vcp.addDeath();
plugin.getStorageManager().updateClanPlayerAsync(vcp);
victimCp.addDeath();
plugin.getStorageManager().updateClanPlayer(victimCp);
}
}
}
private void addKill(Kill.Type type, ClanPlayer attacker, ClanPlayer victim) {
if (type == null || attacker == null || victim == null) {
return;
}
final Kill kill = new Kill(attacker, victim, LocalDateTime.now());
if (plugin.getSettingsManager().isDelayBetweenKills() && plugin.getClanManager().isKillBeforeDelay(kill)) {
return;
}
if (plugin.getSettingsManager().isMaxKillsPerVictim()) {
plugin.getStorageManager().getKillsPerPlayer(attacker.getName(), new DataCallback<Map<String,Integer>>() {
@Override
public void onResultReady(Map<String, Integer> data) {
final int max = plugin.getSettingsManager().getMaxKillsPerVictim();
Integer kills = data.get(kill.getVictim().getName());
if (kills != null) {
if (kills < max) {
saveKill(kill, type);
}
}
}
});
return;
}
saveKill(kill, type);
}
private void saveKill(Kill kill, Kill.Type type) {
plugin.getClanManager().addKill(kill);
ClanPlayer killer = kill.getKiller();
ClanPlayer victim = kill.getVictim();
killer.addKill(type);
plugin.getStorageManager().insertKill(killer, victim, type.getShortname());
}
/**
* @param event
*/
@@ -230,13 +284,13 @@ public class SCEntityListener implements Listener
}
}
if (sub.getEntity() instanceof Player && sub.getDamager() instanceof Arrow)
if (sub.getEntity() instanceof Player && sub.getDamager() instanceof Projectile)
{
Arrow arrow = (Arrow) sub.getDamager();
Projectile projectile = (Projectile) sub.getDamager();
if (arrow.getShooter() instanceof Player)
if (projectile.getShooter() instanceof Player)
{
attacker = (Player) arrow.getShooter();
attacker = (Player) projectile.getShooter();
victim = (Player) sub.getEntity();
}
}
@@ -3,6 +3,7 @@ package net.sacredlabyrinth.phaed.simpleclans.listeners;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import net.sacredlabyrinth.phaed.simpleclans.executors.*;
import org.bukkit.ChatColor;
import org.bukkit.Location;
@@ -74,7 +75,7 @@ public class SCPlayerListener implements Listener {
if (cp.getTag().equalsIgnoreCase(command)) {
event.setCancelled(true);
if (!plugin.getPermissionsManager().has(cp.toPlayer(), "simpleclans.member.chat")) {
ChatBlock.sendMessage(cp.toPlayer(), ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(cp.toPlayer(), ChatColor.RED + lang("insufficient.permissions",cp.toPlayer()));
return;
}
@@ -97,7 +98,7 @@ public class SCPlayerListener implements Listener {
event.setCancelled(true);
if (!plugin.getPermissionsManager().has(cp.toPlayer(), "simpleclans.member.chat")) {
ChatBlock.sendMessage(cp.toPlayer(), ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(cp.toPlayer(), ChatColor.RED + lang("insufficient.permissions",cp.toPlayer()));
return;
}
if (split.length > 1) {
@@ -156,12 +157,11 @@ public class SCPlayerListener implements Listener {
String message = event.getMessage();
ClanPlayer cp = plugin.getClanManager().getClanPlayer(event.getPlayer());
if (cp != null) {
if (cp != null && !event.isCancelled()) {
if (cp.getChannel().equals(ClanPlayer.Channel.CLAN)) {
event.setCancelled(true);
//TODO: Document this permission
if (!plugin.getPermissionsManager().has(cp.toPlayer(), "simpleclans.member.chat")) {
ChatBlock.sendMessage(cp.toPlayer(), ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(cp.toPlayer(), ChatColor.RED + lang("insufficient.permissions",cp.toPlayer()));
return;
}
@@ -169,7 +169,7 @@ public class SCPlayerListener implements Listener {
} else if (cp.getChannel().equals(ClanPlayer.Channel.ALLY)) {
event.setCancelled(true);
if (!plugin.getPermissionsManager().has(cp.toPlayer(), "simpleclans.member.ally")) {
ChatBlock.sendMessage(cp.toPlayer(), ChatColor.RED + plugin.getLang("insufficient.permissions"));
ChatBlock.sendMessage(cp.toPlayer(), ChatColor.RED + lang("insufficient.permissions",cp.toPlayer()));
return;
}
@@ -181,8 +181,8 @@ public class SCPlayerListener implements Listener {
boolean isClanChat = event.getMessage().contains("" + ChatColor.RED + ChatColor.WHITE + ChatColor.RED + ChatColor.BLACK);
boolean isAllyChat = event.getMessage().contains("" + ChatColor.AQUA + ChatColor.WHITE + ChatColor.AQUA + ChatColor.BLACK);
for (Iterator iter = event.getRecipients().iterator(); iter.hasNext();) {
Player player = (Player) iter.next();
for (Iterator<Player> iter = event.getRecipients().iterator(); iter.hasNext();) {
Player player = iter.next();
ClanPlayer rcp = plugin.getClanManager().getClanPlayer(player);
@@ -244,7 +244,7 @@ public class SCPlayerListener implements Listener {
if (SimpleClans.getInstance().getSettingsManager().getUseBungeeCord()) {
cp = SimpleClans.getInstance().getClanManager().getClanPlayerJoinEvent(player);
} else {
cp = SimpleClans.getInstance().getClanManager().getClanPlayer(player);
cp = SimpleClans.getInstance().getClanManager().getAnyClanPlayer(player.getUniqueId());
}
SimpleClans.getInstance().getStorageManager().updatePlayerNameAsync(player);
@@ -258,8 +258,8 @@ public class SCPlayerListener implements Listener {
SimpleClans.getInstance().getPermissionsManager().addPlayerPermissions(cp);
if (plugin.getSettingsManager().isBbShowOnLogin() && cp.isBbEnabled()) {
cp.getClan().displayBb(player);
if (plugin.getSettingsManager().isBbShowOnLogin() && cp.isBbEnabled() && cp.getClan() != null) {
cp.getClan().displayBb(player, plugin.getSettingsManager().getBbLoginSize());
}
SimpleClans.getInstance().getPermissionsManager().addClanPermissions(cp);
File diff suppressed because it is too large. Load diff
@@ -7,16 +7,16 @@ import org.yaml.snakeyaml.Yaml;
import java.io.*;
import java.util.HashMap;
import java.util.TreeMap;
@SuppressWarnings("unchecked")
@Deprecated
public class LanguageManager {
private File file;
private HashMap<String, String> language;
private String[] comments = new String[]{};
public LanguageManager() {
load();
//load();
}
public void load() {
@@ -85,6 +85,6 @@ public class LanguageManager {
return o.toString();
}
return null;
return "Missing language for "+key;
}
}
@@ -3,18 +3,27 @@ package net.sacredlabyrinth.phaed.simpleclans.managers;
import net.milkbowl.vault.chat.Chat;
import net.milkbowl.vault.economy.Economy;
import net.milkbowl.vault.permission.Permission;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.PermissionLevel;
import net.sacredlabyrinth.phaed.simpleclans.RankPermission;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import org.bukkit.entity.Player;
import org.bukkit.permissions.PermissionAttachment;
import org.bukkit.plugin.RegisteredServiceProvider;
import java.text.MessageFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.bukkit.ChatColor;
import org.bukkit.OfflinePlayer;
import org.jetbrains.annotations.Nullable;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
/**
* @author phaed
@@ -24,14 +33,14 @@ public final class PermissionsManager {
/**
*
*/
private SimpleClans plugin;
private final SimpleClans plugin;
private static Permission permission = null;
private static Economy economy = null;
private static Chat chat = null;
private HashMap<String, List<String>> permissions = new HashMap<>();
private HashMap<Player, PermissionAttachment> permAttaches = new HashMap<>();
private final HashMap<String, List<String>> permissions = new HashMap<>();
private final HashMap<Player, PermissionAttachment> permAttaches = new HashMap<>();
/**
*
@@ -46,12 +55,12 @@ public final class PermissionsManager {
setupEconomy();
setupPermissions();
} catch (ClassNotFoundException e) {
SimpleClans.log("[SimpleClans] Vault not found. No economy or extended Permissions support.");
SimpleClans.getInstance().getLogger().info("Vault not found. No economy or extended Permissions support.");
}
}
/**
* Whether exonomy plugin exists and is enabled
* Whether economy plugin exists and is enabled
*
* @return
*/
@@ -71,7 +80,7 @@ public final class PermissionsManager {
}
/**
* Saves the permissions for earch clan from the config
* Saves the permissions for each clan from the config
*/
public void savePermissions() {
for (Clan clan : plugin.getClanManager().getClans()) {
@@ -79,11 +88,12 @@ public final class PermissionsManager {
SimpleClans.getInstance().getSettingsManager().getConfig().set("permissions." + clan.getTag(), getPermissions(clan));
}
}
SimpleClans.getInstance().getSettingsManager().load();
SimpleClans.getInstance().getSettingsManager().save();
}
/**
* Adds all pemrissions for a clan
* Adds all permissions for a clan
*
* @param clan
*/
@@ -98,19 +108,26 @@ public final class PermissionsManager {
*
* @param cp
*/
public void addPlayerPermissions(ClanPlayer cp) {
if (cp != null && cp.toPlayer() != null) {
Player player = cp.toPlayer();
if (permissions.containsKey(cp.getClan().getTag())) {
if (!permAttaches.containsKey(cp.toPlayer())) {
permAttaches.put(cp.toPlayer(), cp.toPlayer().addAttachment(SimpleClans.getInstance()));
public void addPlayerPermissions(@Nullable ClanPlayer cp) {
if (cp == null) {
return;
}
Clan clan = cp.getClan();
if (clan == null) {
return;
}
Player player = cp.toPlayer();
if (player != null) {
if (permissions.containsKey(clan.getTag())) {
if (!permAttaches.containsKey(player)) {
permAttaches.put(player, player.addAttachment(SimpleClans.getInstance()));
}
//Adds all permisisons from his clan
for (String perm : getPermissions(cp.getClan())) {
permAttaches.get(cp.toPlayer()).setPermission(perm, true);
//Adds all permissions from his clan
for (String perm : getPermissions(clan)) {
permAttaches.get(player).setPermission(perm, true);
}
if (plugin.getSettingsManager().isAutoGroupGroupName()) {
permAttaches.get(cp.toPlayer()).setPermission("group." + cp.getClan().getTag(), true);
permAttaches.get(player).setPermission("group." + clan.getTag(), true);
}
player.recalculatePermissions();
}
@@ -157,6 +174,29 @@ public final class PermissionsManager {
public Map<Player, PermissionAttachment> getPermAttaches() {
return permAttaches;
}
/**
* Charge a player some money
*
* @param player
* @param money
* @return
*/
@Deprecated
public boolean playerChargeMoney(String player, double money) {
return economy.withdrawPlayer(player, money).transactionSuccess();
}
/**
* Charge a player some money
*
* @param player
* @param money
* @return
*/
public boolean playerChargeMoney(OfflinePlayer player, double money) {
return economy.withdrawPlayer(player, money).transactionSuccess();
}
/**
* Charge a player some money
@@ -166,7 +206,7 @@ public final class PermissionsManager {
* @return
*/
public boolean playerChargeMoney(Player player, double money) {
return economy.withdrawPlayer(player, money).transactionSuccess();
return playerChargeMoney((OfflinePlayer) player, money);
}
/**
@@ -224,6 +264,22 @@ public final class PermissionsManager {
return economy.getBalance(player);
}
/**
* Check if a player has permissions
*
* @param world the world
* @param player the player
* @param perm the permission
* @return whether he has the permission
*/
public boolean has(String world, OfflinePlayer player, String perm) {
if (player != null && permission != null) {
return permission.playerHas(world, player, perm);
}
return false;
}
/**
* Check if a player has permissions
*
@@ -242,6 +298,116 @@ public final class PermissionsManager {
return player.hasPermission(perm);
}
}
/**
* Checks if the player has the rank permission or the permission level, and the equivalent Bukkit permission
*
* @param player the player
* @param permission the rank permission
* @param notify notify the player if they don't have permission
* @return
*/
@Deprecated
public boolean has(Player player, RankPermission permission, PermissionLevel level, boolean notify) {
if (player == null || permission == null) {
return false;
}
ClanPlayer clanPlayer = plugin.getClanManager().getClanPlayer(player);
if (clanPlayer == null) {
return false;
}
boolean hasBukkitPermission = has(player, permission.getBukkitPermission());
if (!hasBukkitPermission) {
return false;
}
boolean hasLevel = false;
if (level != null) {
switch (level) {
case LEADER:
hasLevel = clanPlayer.isLeader();
break;
case TRUSTED:
hasLevel = clanPlayer.isTrusted();
break;
}
}
boolean hasRankPermission = false;
String rankName = clanPlayer.getRankId();
Clan clan = clanPlayer.getClan();
if (clan.hasRank(rankName)) {
hasRankPermission = clan.getRank(rankName).getPermissions().contains(permission.toString());
} else {
if (rankName != null && !rankName.isEmpty()) {
clanPlayer.setRank(null);
}
}
if (notify && !hasLevel && !hasRankPermission) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("you.must.be.0.or.have.the.permission.1.to.use.this", player),
level == PermissionLevel.LEADER ? lang("leader", player) : lang("trusted", player), permission.toString()));
}
return hasLevel || hasRankPermission;
}
/**
* Checks if the player has the rank permission or the permission level, and the equivalent Bukkit permission
*
* @param player the player
* @param permission the rank permission
* @param notify notify the player if they don't have permission
* @return
*/
public boolean has(Player player, RankPermission permission, boolean notify) {
if (player == null || permission == null) {
return false;
}
ClanPlayer clanPlayer = plugin.getClanManager().getClanPlayer(player);
if (clanPlayer == null) {
return false;
}
boolean hasBukkitPermission = has(player, permission.getBukkitPermission());
if (!hasBukkitPermission) {
if (notify) {
ChatBlock.sendMessage(player,ChatColor.RED + lang("insufficient.permissions", player));
}
return false;
}
boolean hasLevel = false;
switch (permission.getPermissionLevel()) {
case LEADER:
hasLevel = clanPlayer.isLeader();
break;
case TRUSTED:
hasLevel = clanPlayer.isTrusted();
break;
}
boolean hasRankPermission = false;
String rankName = clanPlayer.getRankId();
Clan clan = clanPlayer.getClan();
if (clan.hasRank(rankName)) {
hasRankPermission = clan.getRank(rankName).getPermissions().contains(permission.toString());
} else {
if (rankName != null && !rankName.isEmpty()) {
clanPlayer.setRank(null);
}
}
if (notify && !hasLevel && !hasRankPermission) {
ChatBlock.sendMessage(player, ChatColor.RED + MessageFormat.format(lang("you.must.be.0.or.have.the.permission.1.to.use.this",player),
permission.getPermissionLevel() == PermissionLevel.LEADER ? lang("leader",player) : lang("trusted",player), permission.toString()));
}
return hasLevel || hasRankPermission;
}
/**
* Gives the player permissions linked to a clan
@@ -256,37 +422,37 @@ public final class PermissionsManager {
if (permission != null) {
if (cp != null && cp.toPlayer() != null) {
if (cp.getClan() != null) {
if (!permission.playerInGroup(cp.toPlayer(), "clan." + cp.getTag())) {
permission.playerAddGroup(cp.toPlayer(), "clan." + cp.getTag());
if (!permission.playerInGroup(cp.toPlayer(), "clan_" + cp.getTag())) {
permission.playerAddGroup(cp.toPlayer(), "clan_" + cp.getTag());
}
if (cp.isLeader()) {
if (!permission.playerInGroup(cp.toPlayer(), "sc.leader")) {
permission.playerAddGroup(cp.toPlayer(), "sc.leader");
if (!permission.playerInGroup(cp.toPlayer(), "sc_leader")) {
permission.playerAddGroup(cp.toPlayer(), "sc_leader");
}
permission.playerRemoveGroup(cp.toPlayer(), "sc.untrusted");
permission.playerRemoveGroup(cp.toPlayer(), "sc.trusted");
permission.playerRemoveGroup(cp.toPlayer(), "sc_untrusted");
permission.playerRemoveGroup(cp.toPlayer(), "sc_trusted");
return;
}
if (cp.isTrusted()) {
if (!permission.playerInGroup(cp.toPlayer(), "sc.trusted")) {
permission.playerAddGroup(cp.toPlayer(), "sc.trusted");
if (!permission.playerInGroup(cp.toPlayer(), "sc_trusted")) {
permission.playerAddGroup(cp.toPlayer(), "sc_trusted");
}
permission.playerRemoveGroup(cp.toPlayer(), "sc.untrusted");
permission.playerRemoveGroup(cp.toPlayer(), "sc.leader");
permission.playerRemoveGroup(cp.toPlayer(), "sc_untrusted");
permission.playerRemoveGroup(cp.toPlayer(), "sc_leader");
return;
}
if (!permission.playerInGroup(cp.toPlayer(), "sc.untrusted")) {
permission.playerAddGroup(cp.toPlayer(), "sc.untrusted");
if (!permission.playerInGroup(cp.toPlayer(), "sc_untrusted")) {
permission.playerAddGroup(cp.toPlayer(), "sc_untrusted");
}
permission.playerRemoveGroup(cp.toPlayer(), "sc.trusted");
permission.playerRemoveGroup(cp.toPlayer(), "sc.leader");
permission.playerRemoveGroup(cp.toPlayer(), "sc_trusted");
permission.playerRemoveGroup(cp.toPlayer(), "sc_leader");
} else {
permission.playerRemoveGroup(cp.toPlayer(), "sc.untrusted");
permission.playerRemoveGroup(cp.toPlayer(), "sc.trusted");
permission.playerRemoveGroup(cp.toPlayer(), "sc.leader");
permission.playerRemoveGroup(cp.toPlayer(), "sc_untrusted");
permission.playerRemoveGroup(cp.toPlayer(), "sc_trusted");
permission.playerRemoveGroup(cp.toPlayer(), "sc_leader");
}
}
}
@@ -303,10 +469,10 @@ public final class PermissionsManager {
}
if (permission != null && cp.toPlayer() != null) {
permission.playerRemoveGroup(cp.toPlayer(), "clan." + cp.getTag());
permission.playerRemoveGroup(cp.toPlayer(), "sc.untrusted");
permission.playerRemoveGroup(cp.toPlayer(), "sc.trusted");
permission.playerRemoveGroup(cp.toPlayer(), "sc.leader");
permission.playerRemoveGroup(cp.toPlayer(), "clan_" + cp.getTag());
permission.playerRemoveGroup(cp.toPlayer(), "sc_untrusted");
permission.playerRemoveGroup(cp.toPlayer(), "sc_trusted");
permission.playerRemoveGroup(cp.toPlayer(), "sc_leader");
}
}
@@ -0,0 +1,440 @@
package net.sacredlabyrinth.phaed.simpleclans.managers;
import me.clip.placeholderapi.PlaceholderAPI;
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import org.bukkit.OfflinePlayer;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;
import static me.clip.placeholderapi.PlaceholderAPIPlugin.booleanFalse;
import static me.clip.placeholderapi.PlaceholderAPIPlugin.booleanTrue;
/**
* {@link Class} to manage and hook {@link SimpleClans} into {@link PlaceholderAPI}
*
* @since 2.10.1
*
* @author Peng1104
*/
public final class PlaceholdersManager extends PlaceholderExpansion {
/**
* The {@link Pattern} that identifies the top {@link Clan}s placeholder
*
* @since 1.12.3
*/
private static final Pattern TOP_CLANS_PATTERN = Pattern.compile("^topclans_\\d+_clan_");
/**
* The {@link List} containing all the placeholders of the {@link SimpleClans} {@link Plugin}
*
* @since 1.12.3
*/
private static final List<String> PLACEHOLDERS_LIST = new ArrayList<>();
static {
PLACEHOLDERS_LIST.add("%simpleclans_neutral_kills%");
PLACEHOLDERS_LIST.add("%simpleclans_rival_kills%");
PLACEHOLDERS_LIST.add("%simpleclans_civilian_kills%");
PLACEHOLDERS_LIST.add("%simpleclans_total_kills%");
PLACEHOLDERS_LIST.add("%simpleclans_weighted_kills%");
PLACEHOLDERS_LIST.add("%simpleclans_deaths%");
PLACEHOLDERS_LIST.add("%simpleclans_kdr%");
PLACEHOLDERS_LIST.add("%simpleclans_in_clan%");
PLACEHOLDERS_LIST.add("%simpleclans_is_leader%");
PLACEHOLDERS_LIST.add("%simpleclans_is_trusted%");
PLACEHOLDERS_LIST.add("%simpleclans_is_member%");
PLACEHOLDERS_LIST.add("%simpleclans_is_bb_enabled%");
PLACEHOLDERS_LIST.add("%simpleclans_is_usechatshortcut%");
PLACEHOLDERS_LIST.add("%simpleclans_is_allychat%");
PLACEHOLDERS_LIST.add("%simpleclans_is_clanchat%");
PLACEHOLDERS_LIST.add("%simpleclans_is_globalchat%");
PLACEHOLDERS_LIST.add("%simpleclans_is_cape_enabled%");
PLACEHOLDERS_LIST.add("%simpleclans_is_tag_enabled%");
PLACEHOLDERS_LIST.add("%simpleclans_is_friendlyfire_on%");
PLACEHOLDERS_LIST.add("%simpleclans_is_muted%");
PLACEHOLDERS_LIST.add("%simpleclans_is_mutedally%");
PLACEHOLDERS_LIST.add("%simpleclans_join_date%");
PLACEHOLDERS_LIST.add("%simpleclans_inactive_days%");
PLACEHOLDERS_LIST.add("%simpleclans_lastseen%");
PLACEHOLDERS_LIST.add("%simpleclans_lastseendays%");
PLACEHOLDERS_LIST.add("%simpleclans_tag%");
PLACEHOLDERS_LIST.add("%simpleclans_tag_label%");
PLACEHOLDERS_LIST.add("%simpleclans_rank%");
PLACEHOLDERS_LIST.add("%simpleclans_rank_displayname%");
PLACEHOLDERS_LIST.add("%simpleclans_clanchat_player_color%");
PLACEHOLDERS_LIST.add("%simpleclans_allychat_player_color%");
PLACEHOLDERS_LIST.add("%simpleclans_clan_total_neutral%");
PLACEHOLDERS_LIST.add("%simpleclans_clan_total_civilian%");
PLACEHOLDERS_LIST.add("%simpleclans_clan_total_rival%");
PLACEHOLDERS_LIST.add("%simpleclans_clan_total_kills%");
PLACEHOLDERS_LIST.add("%simpleclans_clan_total_deaths%");
PLACEHOLDERS_LIST.add("%simpleclans_clan_total_kdr%");
PLACEHOLDERS_LIST.add("%simpleclans_clan_average_wk%");
PLACEHOLDERS_LIST.add("%simpleclans_clan_leader_size%");
PLACEHOLDERS_LIST.add("%simpleclans_clan_balance%");
PLACEHOLDERS_LIST.add("%simpleclans_clan_allow_withdraw%");
PLACEHOLDERS_LIST.add("%simpleclans_clan_allow_deposit%");
PLACEHOLDERS_LIST.add("%simpleclans_clan_size%");
PLACEHOLDERS_LIST.add("%simpleclans_clan_name%");
PLACEHOLDERS_LIST.add("%simpleclans_clan_color_tag%");
PLACEHOLDERS_LIST.add("%simpleclans_clan_tag%");
PLACEHOLDERS_LIST.add("%simpleclans_clan_founded%");
PLACEHOLDERS_LIST.add("%simpleclans_clan_friendly_fire%");
PLACEHOLDERS_LIST.add("%simpleclans_clan_is_unrivable%");
PLACEHOLDERS_LIST.add("%simpleclans_clan_is_anyonline%");
PLACEHOLDERS_LIST.add("%simpleclans_clan_is_verified%");
PLACEHOLDERS_LIST.add("%simpleclans_clan_capeurl%");
PLACEHOLDERS_LIST.add("%simpleclans_clan_inactivedays%");
PLACEHOLDERS_LIST.add("%simpleclans_clan_onlinemembers_count%");
PLACEHOLDERS_LIST.add("%simpleclans_clan_allies_count%");
PLACEHOLDERS_LIST.add("%simpleclans_clan_rivals_count%");
PLACEHOLDERS_LIST.add("%simpleclans_clan_topclans_position%");
PLACEHOLDERS_LIST.add("%simpleclans_topclans_<Number>_clan_total_neutral%");
PLACEHOLDERS_LIST.add("%simpleclans_topclans_<Number>_clan_total_civilian%");
PLACEHOLDERS_LIST.add("%simpleclans_topclans_<Number>_clan_total_rival%");
PLACEHOLDERS_LIST.add("%simpleclans_topclans_<Number>_clan_total_kills%");
PLACEHOLDERS_LIST.add("%simpleclans_topclans_<Number>_clan_total_deaths%");
PLACEHOLDERS_LIST.add("%simpleclans_topclans_<Number>_clan_total_kdr%");
PLACEHOLDERS_LIST.add("%simpleclans_topclans_<Number>_clan_average_wk%");
PLACEHOLDERS_LIST.add("%simpleclans_topclans_<Number>_clan_leader_size%");
PLACEHOLDERS_LIST.add("%simpleclans_topclans_<Number>_clan_balance%");
PLACEHOLDERS_LIST.add("%simpleclans_topclans_<Number>_clan_allow_withdraw%");
PLACEHOLDERS_LIST.add("%simpleclans_topclans_<Number>_clan_allow_deposit%");
PLACEHOLDERS_LIST.add("%simpleclans_topclans_<Number>_clan_size%");
PLACEHOLDERS_LIST.add("%simpleclans_topclans_<Number>_clan_name%");
PLACEHOLDERS_LIST.add("%simpleclans_topclans_<Number>_clan_color_tag%");
PLACEHOLDERS_LIST.add("%simpleclans_topclans_<Number>_clan_tag%");
PLACEHOLDERS_LIST.add("%simpleclans_topclans_<Number>_clan_founded%");
PLACEHOLDERS_LIST.add("%simpleclans_topclans_<Number>_clan_friendly_fire%");
PLACEHOLDERS_LIST.add("%simpleclans_topclans_<Number>_clan_is_unrivable%");
PLACEHOLDERS_LIST.add("%simpleclans_topclans_<Number>_clan_is_anyonline%");
PLACEHOLDERS_LIST.add("%simpleclans_topclans_<Number>_clan_is_verified%");
PLACEHOLDERS_LIST.add("%simpleclans_topclans_<Number>_clan_capeurl%");
PLACEHOLDERS_LIST.add("%simpleclans_topclans_<Number>_clan_inactivedays%");
PLACEHOLDERS_LIST.add("%simpleclans_topclans_<Number>_clan_onlinemembers_count%");
PLACEHOLDERS_LIST.add("%simpleclans_topclans_<Number>_clan_allies_count%");
PLACEHOLDERS_LIST.add("%simpleclans_topclans_<Number>_clan_rivals_count%");
PLACEHOLDERS_LIST.add("%simpleclans_topclans_<Number>_clan_topclans_position%");
}
/**
* The {@link SimpleClans} {@link Plugin} instance
*
* @since 2.10.1
*/
private final SimpleClans simpleClans;
/**
* The {@link PlaceholdersManager} constructor
*
* @param simpleClans The {@link SimpleClans} {@link Plugin}
*
* @since 2.10.1
*/
public PlaceholdersManager(@NotNull SimpleClans simpleClans) {
this.simpleClans = simpleClans;
}
/**
* Gets a value for the requested {@link ClanPlayer} and identifier
*
* @param player The {@link ClanPlayer} to request the placeholders value for
* @param identifier String that determine what value to return
*
* @return value for the requested {@link ClanPlayer} and params
*
* @since 2.10.1
*/
@NotNull
public String getPlaceholderValue(@Nullable ClanPlayer player, @NotNull String identifier) {
Clan clan = null;
if (TOP_CLANS_PATTERN.matcher(identifier).find()) {
// getting the position
int position = Integer.parseInt(identifier.substring(9, identifier.indexOf('_', 9)));
List<Clan> clans = simpleClans.getClanManager().getClans();
// validating position
if (position < 1 || position > clans.size()) {
return "";
}
simpleClans.getClanManager().sortClansByKDR(clans);
clan = clans.get(position - 1);
identifier = identifier.substring(identifier.indexOf('_', 9) + 1);
}
if (clan == null) {
if (player == null) {
return "";
}
clan = player.getClan();
switch (identifier) {
case "neutral_kills": {
return String.valueOf(player.getNeutralKills());
}
case "rival_kills": {
return String.valueOf(player.getRivalKills());
}
case "civilian_kills": {
return String.valueOf(player.getCivilianKills());
}
case "total_kills": {
return String.valueOf(player.getNeutralKills() + player.getRivalKills()
+ player.getCivilianKills());
}
case "weighted_kills": {
return String.valueOf(player.getWeightedKills());
}
case "deaths": {
return String.valueOf(player.getDeaths());
}
case "kdr": {
return String.valueOf(player.getKDR());
}
case "in_clan": {
return (clan != null) ? booleanTrue() : booleanFalse();
}
case "is_leader": {
return player.isLeader() ? booleanTrue() : booleanFalse();
}
case "is_trusted": {
return (!player.isLeader() && player.isTrusted()) ? booleanTrue()
: booleanFalse();
}
case "is_member": {
return (!player.isTrusted() && !player.isLeader() && clan != null)
? booleanTrue()
: booleanFalse();
}
case "is_bb_enabled": {
return player.isBbEnabled() ? booleanTrue() : booleanFalse();
}
case "is_usechatshortcut": {
return player.isUseChatShortcut() ? booleanTrue() : booleanFalse();
}
case "is_allychat": {
return player.isAllyChat() ? booleanTrue() : booleanFalse();
}
case "is_clanchat": {
return player.isClanChat() ? booleanTrue() : booleanFalse();
}
case "is_globalchat": {
return player.isGlobalChat() ? booleanTrue() : booleanFalse();
}
case "is_cape_enabled": {
return player.isCapeEnabled() ? booleanTrue() : booleanFalse();
}
case "is_tag_enabled": {
return player.isTagEnabled() ? booleanTrue() : booleanFalse();
}
case "is_friendlyfire_on": {
return player.isFriendlyFire() ? booleanTrue() : booleanFalse();
}
case "is_muted": {
return player.isMuted() ? booleanTrue() : booleanFalse();
}
case "is_mutedally": {
return player.isMutedAlly() ? booleanTrue() : booleanFalse();
}
case "join_date": {
return player.getJoinDateString();
}
case "inactive_days": {
return String.valueOf(player.getInactiveDays());
}
case "lastseen": {
return player.getLastSeenString();
}
case "lastseendays": {
return player.getLastSeenDaysString();
}
case "tag": {
return player.getTag();
}
case "tag_label": {
return player.getTagLabel();
}
case "rank": {
return player.getRankId();
}
case "rank_displayname": {
return player.getRankDisplayName();
}
case "clanchat_player_color": {
if (player.isLeader()) {
return simpleClans.getSettingsManager().getClanChatLeaderColor();
}
if (player.isTrusted()) {
return simpleClans.getSettingsManager().getClanChatTrustedColor();
}
if (clan != null) {
return simpleClans.getSettingsManager().getClanChatMemberColor();
}
return "";
}
case "allychat_player_color": {
if (player.isLeader()) {
return simpleClans.getSettingsManager().getAllyChatLeaderColor();
}
if (player.isTrusted()) {
return simpleClans.getSettingsManager().getAllyChatTrustedColor();
}
if (clan != null) {
return simpleClans.getSettingsManager().getAllyChatMemberColor();
}
return "";
}
default:
break;
}
if (clan == null) {
return "";
}
}
switch (identifier) {
case "clan_total_neutral": {
return String.valueOf(clan.getTotalNeutral());
}
case "clan_total_civilian": {
return String.valueOf(clan.getTotalCivilian());
}
case "clan_total_rival": {
return String.valueOf(clan.getTotalRival());
}
case "clan_total_kills": {
return String.valueOf(
clan.getTotalRival() + clan.getTotalNeutral() + clan.getTotalCivilian());
}
case "clan_total_deaths": {
return String.valueOf(clan.getTotalDeaths());
}
case "clan_total_kdr": {
return String.valueOf(clan.getTotalKDR());
}
case "clan_average_wk": {
return String.valueOf(clan.getAverageWK());
}
case "clan_leader_size": {
return String.valueOf(clan.getLeaders().size());
}
case "clan_balance": {
return String.valueOf(clan.getBalance());
}
case "clan_allow_withdraw": {
return clan.isAllowWithdraw() ? booleanTrue() : booleanFalse();
}
case "clan_allow_deposit": {
return clan.isAllowDeposit() ? booleanTrue() : booleanFalse();
}
case "clan_size": {
return String.valueOf(clan.getSize());
}
case "clan_name": {
return clan.getName();
}
case "clan_color_tag": {
return clan.getColorTag();
}
case "clan_tag": {
return clan.getTag();
}
case "clan_founded": {
return clan.getFoundedString();
}
case "clan_friendly_fire": {
return clan.isFriendlyFire() ? booleanTrue() : booleanFalse();
}
case "clan_is_unrivable": {
return clan.isUnrivable() ? booleanTrue() : booleanFalse();
}
case "clan_is_anyonline": {
return clan.isAnyOnline() ? booleanTrue() : booleanFalse();
}
case "clan_is_verified": {
return clan.isVerified() ? booleanTrue() : booleanFalse();
}
case "clan_capeurl": {
return clan.getCapeUrl();
}
case "clan_inactivedays": {
return String.valueOf(clan.getInactiveDays());
}
case "clan_onlinemembers_count": {
return String.valueOf(clan.getOnlineMembers().size());
}
case "clan_allies_count": {
return String.valueOf(clan.getAllies().size());
}
case "clan_rivals_count": {
return String.valueOf(clan.getRivals().size());
}
case "clan_topclans_position": {
List<Clan> clans = simpleClans.getClanManager().getClans();
simpleClans.getClanManager().sortClansByKDR(clans);
return String.valueOf(clans.indexOf(clan) + 1);
}
default:
break;
}
return "";
}
@Override
public String getIdentifier() {
return getName().toLowerCase();
}
@Override
public @NotNull String getAuthor() {
List<String> authors = new ArrayList<>(simpleClans.getDescription().getAuthors());
authors.add("Peng1104");
return authors.toString();
}
@Override
public String getVersion() {
return simpleClans.getDescription().getVersion();
}
@Override
public String onRequest(@Nullable OfflinePlayer player, @NotNull String params) {
ClanPlayer clanPlayer = null;
if (player != null) {
clanPlayer = simpleClans.getClanManager().getAnyClanPlayer(player.getUniqueId());
}
return getPlaceholderValue(clanPlayer, params);
}
@Override
public String getName() {
return simpleClans.getName();
}
@Override
public @NotNull List<String> getPlaceholders() {
return PLACEHOLDERS_LIST;
}
@Override
public boolean persist() {
return true;
}
@Override
public boolean canRegister() {
return true;
}
}
@@ -4,11 +4,15 @@ import net.sacredlabyrinth.phaed.simpleclans.*;
import net.sacredlabyrinth.phaed.simpleclans.events.RequestEvent;
import net.sacredlabyrinth.phaed.simpleclans.events.RequestFinishedEvent;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import java.text.MessageFormat;
import java.util.*;
import org.bukkit.scheduler.BukkitRunnable;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
/**
* @author phaed
@@ -43,15 +47,19 @@ public final class RequestManager {
* @param clan
*/
public void addDemoteRequest(ClanPlayer requester, String demotedName, Clan clan) {
String msg = MessageFormat.format(plugin.getLang("asking.for.the.demotion"), Helper.capitalize(requester.getName()), demotedName);
if (requests.containsKey(clan.getTag())) {
return;
}
String msg = MessageFormat.format(lang("asking.for.the.demotion"), requester.getName(), demotedName);
ClanPlayer demotedTp = plugin.getClanManager().getClanPlayer(demotedName.toLowerCase());
ClanPlayer demotedTp = plugin.getClanManager().getClanPlayer(UUIDMigration.getForcedPlayerUUID(demotedName));
List<ClanPlayer> acceptors = Helper.stripOffLinePlayers(clan.getLeaders());
acceptors.remove(demotedTp);
Request req = new Request(plugin, ClanRequest.DEMOTE, acceptors, requester, demotedName, clan, msg);
requests.put(clan.getTag(), req);
req.vote(requester.getName(), VoteResult.ACCEPT);
requests.put(req.getClan().getTag(), req);
ask(req);
}
@@ -63,13 +71,16 @@ public final class RequestManager {
* @param clan
*/
public void addPromoteRequest(ClanPlayer requester, String promotedName, Clan clan) {
String msg = MessageFormat.format(plugin.getLang("asking.for.the.promotion"), Helper.capitalize(requester.getName()), promotedName);
if (requests.containsKey(clan.getTag())) {
return;
}
String msg = MessageFormat.format(lang("asking.for.the.promotion"), requester.getName(), promotedName);
List<ClanPlayer> acceptors = Helper.stripOffLinePlayers(clan.getLeaders());
acceptors.remove(requester);
Request req = new Request(plugin, ClanRequest.PROMOTE, acceptors, requester, promotedName, clan, msg);
requests.put(clan.getTag(), req);
requests.put(req.getClan().getTag(), req);
req.vote(requester.getName(), VoteResult.ACCEPT);
ask(req);
}
@@ -80,25 +91,36 @@ public final class RequestManager {
* @param clan
*/
public void addDisbandRequest(ClanPlayer requester, Clan clan) {
String msg = MessageFormat.format(plugin.getLang("asking.for.the.deletion"), Helper.capitalize(requester.getName()));
if (requests.containsKey(clan.getTag())) {
return;
}
String msg = MessageFormat.format(lang("asking.for.the.deletion"), requester.getName());
List<ClanPlayer> acceptors = Helper.stripOffLinePlayers(clan.getLeaders());
acceptors.remove(requester);
Request req = new Request(plugin, ClanRequest.DISBAND, acceptors, requester, clan.getTag(), clan, msg);
requests.put(clan.getTag(), req);
requests.put(req.getTarget(), req);
req.vote(requester.getName(), VoteResult.ACCEPT);
ask(req);
}
/**
* Add a member invite request
*
* @param requester
* @param invitedName
* @param clan
* @param requester the requester
* @param invitedName the invited Player
* @param clan the Clan
*/
public void addInviteRequest(ClanPlayer requester, String invitedName, Clan clan) {
String msg = MessageFormat.format(plugin.getLang("inviting.you.to.join"), Helper.capitalize(requester.getName()), clan.getName());
if (requests.containsKey(invitedName.toLowerCase())) {
return;
}
Player player = Bukkit.getPlayer(invitedName);
if (player == null) {
return;
}
String msg = lang("inviting.you.to.join", player, requester.getName(), clan.getName());
Request req = new Request(plugin, ClanRequest.INVITE, null, requester, invitedName, clan, msg);
requests.put(invitedName.toLowerCase(), req);
ask(req);
@@ -112,13 +134,16 @@ public final class RequestManager {
* @param requestingClan
*/
public void addWarStartRequest(ClanPlayer requester, Clan warClan, Clan requestingClan) {
String msg = MessageFormat.format(plugin.getLang("proposing.war"), Helper.capitalize(requestingClan.getName()), Helper.stripColors(warClan.getColorTag()));
if (requests.containsKey(warClan.getTag())) {
return;
}
String msg = MessageFormat.format(lang("proposing.war"), requestingClan.getName(), Helper.stripColors(warClan.getColorTag()));
List<ClanPlayer> acceptors = Helper.stripOffLinePlayers(warClan.getLeaders());
acceptors.remove(requester);
Request req = new Request(plugin, ClanRequest.START_WAR, acceptors, requester, warClan.getTag(), requestingClan, msg);
requests.put(warClan.getTag(), req);
requests.put(req.getTarget(), req);
ask(req);
}
@@ -130,13 +155,16 @@ public final class RequestManager {
* @param requestingClan
*/
public void addWarEndRequest(ClanPlayer requester, Clan warClan, Clan requestingClan) {
String msg = MessageFormat.format(plugin.getLang("proposing.to.end.the.war"), Helper.capitalize(requestingClan.getName()), Helper.stripColors(warClan.getColorTag()));
if (requests.containsKey(warClan.getTag())) {
return;
}
String msg = MessageFormat.format(lang("proposing.to.end.the.war"), requestingClan.getName(), Helper.stripColors(warClan.getColorTag()));
List<ClanPlayer> acceptors = Helper.stripOffLinePlayers(warClan.getLeaders());
acceptors.remove(requester);
Request req = new Request(plugin, ClanRequest.END_WAR, acceptors, requester, warClan.getTag(), requestingClan, msg);
requests.put(warClan.getTag(), req);
requests.put(req.getTarget(), req);
ask(req);
}
@@ -148,13 +176,16 @@ public final class RequestManager {
* @param requestingClan
*/
public void addAllyRequest(ClanPlayer requester, Clan allyClan, Clan requestingClan) {
String msg = MessageFormat.format(plugin.getLang("proposing.an.alliance"), Helper.capitalize(requestingClan.getName()), Helper.stripColors(allyClan.getColorTag()));
if (requests.containsKey(allyClan.getTag())) {
return;
}
String msg = MessageFormat.format(lang("proposing.an.alliance"), requestingClan.getName(), Helper.stripColors(allyClan.getColorTag()));
List<ClanPlayer> acceptors = Helper.stripOffLinePlayers(allyClan.getLeaders());
acceptors.remove(requester);
Request req = new Request(plugin, ClanRequest.CREATE_ALLY, acceptors, requester, allyClan.getTag(), requestingClan, msg);
requests.put(allyClan.getTag(), req);
requests.put(req.getTarget(), req);
ask(req);
}
@@ -166,13 +197,16 @@ public final class RequestManager {
* @param requestingClan
*/
public void addRivalryBreakRequest(ClanPlayer requester, Clan rivalClan, Clan requestingClan) {
String msg = MessageFormat.format(plugin.getLang("proposing.to.end.the.rivalry"), Helper.capitalize(requestingClan.getName()), Helper.stripColors(rivalClan.getColorTag()));
if (requests.containsKey(rivalClan.getTag())) {
return;
}
String msg = MessageFormat.format(lang("proposing.to.end.the.rivalry"), requestingClan.getName(), Helper.stripColors(rivalClan.getColorTag()));
List<ClanPlayer> acceptors = Helper.stripOffLinePlayers(rivalClan.getLeaders());
acceptors.remove(requester);
Request req = new Request(plugin, ClanRequest.BREAK_RIVALRY, acceptors, requester, rivalClan.getTag(), requestingClan, msg);
requests.put(rivalClan.getTag(), req);
requests.put(req.getTarget(), req);
ask(req);
}
@@ -232,187 +266,197 @@ public final class RequestManager {
return;
}
clan.addBb(ChatColor.AQUA + MessageFormat.format(plugin.getLang("joined.the.clan"), Helper.capitalize(invited)));
plugin.getClanManager().serverAnnounce(MessageFormat.format(plugin.getLang("has.joined"), Helper.capitalize(invited), clan.getName()));
clan.addBb(ChatColor.AQUA + lang("joined.the.clan", invited));
plugin.getClanManager().serverAnnounce(lang("has.joined", invited, clan.getName()));
clan.addPlayerToClan(cp);
} else {
clan.leaderAnnounce(ChatColor.RED + MessageFormat.format(plugin.getLang("membership.invitation"), Helper.capitalize(invited)));
clan.leaderAnnounce(ChatColor.RED + lang("membership.invitation", invited));
}
requests.remove(req.getTarget().toLowerCase());
}
/**
* Check to see if votes are complete and process the result
*
* @param req
*/
public void processResults(Request req) {
if (req.getType().equals(ClanRequest.START_WAR)) {
Clan clan = req.getClan();
Clan war = plugin.getClanManager().getClan(req.getTarget());
ClanPlayer cp = req.getRequester();
if (war != null && clan != null) {
List<String> accepts = req.getAccepts();
List<String> denies = req.getDenies();
if (!accepts.isEmpty()) {
clan.addWarringClan(war);
war.addWarringClan(clan);
war.addBb(cp.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("you.are.at.war"), Helper.capitalize(war.getName()), clan.getColorTag()));
clan.addBb(cp.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("you.are.at.war"), Helper.capitalize(clan.getName()), war.getColorTag()));
} else {
war.addBb(cp.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("denied.war.req"), Helper.capitalize(denies.get(0)), clan.getName()));
clan.addBb(cp.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("end.war.denied"), Helper.capitalize(war.getName())));
}
}
} else if (req.getType().equals(ClanRequest.END_WAR)) {
Clan clan = req.getClan();
Clan war = plugin.getClanManager().getClan(req.getTarget());
ClanPlayer cp = req.getRequester();
if (war != null && clan != null) {
List<String> accepts = req.getAccepts();
List<String> denies = req.getDenies();
if (!accepts.isEmpty()) {
clan.removeWarringClan(war);
war.removeWarringClan(clan);
war.addBb(cp.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("you.are.no.longer.at.war"), Helper.capitalize(accepts.get(0)), clan.getColorTag()));
clan.addBb(cp.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("you.are.no.longer.at.war"), Helper.capitalize(clan.getName()), Helper.capitalize(war.getColorTag())));
} else {
war.addBb(cp.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("denied.war.end"), Helper.capitalize(denies.get(0)), clan.getName()));
clan.addBb(cp.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("end.war.denied"), Helper.capitalize(war.getName())));
}
}
} else if (req.getType().equals(ClanRequest.CREATE_ALLY)) {
Clan clan = req.getClan();
Clan ally = plugin.getClanManager().getClan(req.getTarget());
ClanPlayer cp = req.getRequester();
if (ally != null && clan != null) {
List<String> accepts = req.getAccepts();
List<String> denies = req.getDenies();
if (!accepts.isEmpty()) {
clan.addAlly(ally);
ally.addBb(cp.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("accepted.an.alliance"), Helper.capitalize(accepts.get(0)), clan.getName()));
clan.addBb(cp.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("created.an.alliance"), Helper.capitalize(cp.getName()), Helper.capitalize(ally.getName())));
} else {
ally.addBb(cp.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("denied.an.alliance"), Helper.capitalize(denies.get(0)), clan.getName()));
clan.addBb(cp.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("the.alliance.was.denied"), Helper.capitalize(ally.getName())));
}
}
} else if (req.getType().equals(ClanRequest.BREAK_RIVALRY)) {
Clan clan = req.getClan();
Clan rival = plugin.getClanManager().getClan(req.getTarget());
ClanPlayer cp = req.getRequester();
if (rival != null && clan != null) {
List<String> accepts = req.getAccepts();
List<String> denies = req.getDenies();
if (!accepts.isEmpty()) {
clan.removeRival(rival);
rival.addBb(cp.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("broken.the.rivalry"), Helper.capitalize(accepts.get(0)), clan.getName()));
clan.addBb(cp.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("broken.the.rivalry.with"), Helper.capitalize(cp.getName()), Helper.capitalize(rival.getName())));
} else {
rival.addBb(cp.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("denied.to.make.peace"), Helper.capitalize(denies.get(0)), clan.getName()));
clan.addBb(cp.getName(), ChatColor.AQUA + MessageFormat.format(plugin.getLang("peace.agreement.denied"), Helper.capitalize(rival.getName())));
}
}
} else if (req.votingFinished()) {
List<String> denies = req.getDenies();
if (req.getType().equals(ClanRequest.DEMOTE)) {
Clan clan = req.getClan();
String demoted = req.getTarget();
UUID demotedUniqueId = UUIDMigration.getForcedPlayerUUID(demoted);
if (SimpleClans.getInstance().hasUUID() && demotedUniqueId != null) {
return;
}
if (denies.isEmpty()) {
clan.addBb(plugin.getLang("leaders"), ChatColor.AQUA + MessageFormat.format(plugin.getLang("demoted.back.to.member"), Helper.capitalize(demoted)));
if (SimpleClans.getInstance().hasUUID()) {
clan.demote(demotedUniqueId);
} else {
clan.demote(demoted);
}
} else {
String deniers = Helper.capitalize(Helper.toMessage(Helper.toArray(denies), ", "));
clan.leaderAnnounce(ChatColor.RED + MessageFormat.format(plugin.getLang("denied.demotion"), deniers, demoted));
}
} else if (req.getType().equals(ClanRequest.PROMOTE)) {
Clan clan = req.getClan();
String promoted = req.getTarget();
UUID promotedUniqueId = UUIDMigration.getForcedPlayerUUID(promoted);
if (SimpleClans.getInstance().hasUUID() && promotedUniqueId == null) {
return;
}
if (denies.isEmpty()) {
clan.addBb(plugin.getLang("leaders"), ChatColor.AQUA + MessageFormat.format(plugin.getLang("promoted.to.leader"), Helper.capitalize(promoted)));
if (SimpleClans.getInstance().hasUUID()) {
clan.promote(promotedUniqueId);
} else {
clan.promote(promoted);
}
} else {
String deniers = Helper.capitalize(Helper.toMessage(Helper.toArray(denies), ", "));
clan.leaderAnnounce(ChatColor.RED + MessageFormat.format(plugin.getLang("denied.the.promotion"), deniers, promoted));
}
} else if (req.getType().equals(ClanRequest.DISBAND)) {
Clan clan = req.getClan();
if (denies.isEmpty()) {
clan.addBb(plugin.getLang("leaders"), ChatColor.AQUA + MessageFormat.format(plugin.getLang("has.been.disbanded"), clan.getName()));
clan.disband();
} else {
String deniers = Helper.capitalize(Helper.toMessage(Helper.toArray(denies), ", "));
clan.leaderAnnounce(ChatColor.RED + MessageFormat.format(plugin.getLang("clan.deletion"), deniers));
}
}
req.cleanVotes();
}
requests.remove(req.getTarget());
Clan requesterClan = req.getClan();
ClanPlayer requesterCp = req.getRequester();
String target = req.getTarget();
//may be null
Clan targetClan = plugin.getClanManager().getClan(target);
//may be null
UUID targetPlayer = UUIDMigration.getForcedPlayerUUID(target);
List<String> accepts = req.getAccepts();
List<String> denies = req.getDenies();
switch (req.getType()) {
case START_WAR:
processStartWar(requesterClan, requesterCp, targetClan, accepts, denies);
break;
case END_WAR:
processEndWar(requesterClan, requesterCp, targetClan, accepts, denies);
break;
case CREATE_ALLY:
processCreateAlly(requesterClan, requesterCp, targetClan, accepts, denies);
break;
case BREAK_RIVALRY:
processBreakRivalry(requesterClan, requesterCp, targetClan, accepts, denies);
break;
case DEMOTE: case PROMOTE:
if (!req.votingFinished() || targetPlayer == null) {
return;
}
target = requesterClan.getTag();
if (req.getType() == ClanRequest.DEMOTE) {
processDemote(req, requesterClan, targetPlayer, denies);
}
if (req.getType() == ClanRequest.PROMOTE) {
processPromote(req, requesterClan, targetPlayer, denies);
}
break;
case DISBAND:
if (!req.votingFinished()) {
return;
}
processDisband(requesterClan, denies);
break;
default:
return;
}
requests.remove(target);
SimpleClans.getInstance().getServer().getPluginManager().callEvent(new RequestFinishedEvent(req));
req.cleanVotes();
}
private void processDisband(Clan requesterClan, List<String> denies) {
if (denies.isEmpty()) {
requesterClan.addBb(lang("leaders"), ChatColor.AQUA + lang("has.been.disbanded", requesterClan.getName()));
requesterClan.disband();
} else {
String deniers = Helper.toMessage(Helper.toArray(denies), ", ");
requesterClan.leaderAnnounce(ChatColor.RED + lang("clan.deletion", deniers));
}
}
private void processPromote(Request req, Clan requesterClan, UUID targetPlayer, List<String> denies) {
String promotedName = req.getTarget();
if (denies.isEmpty()) {
requesterClan.addBb(lang("leaders"), ChatColor.AQUA + lang("promoted.to.leader", promotedName));
requesterClan.promote(targetPlayer);
} else {
String deniers = Helper.toMessage(Helper.toArray(denies), ", ");
requesterClan.leaderAnnounce(ChatColor.RED + lang("denied.the.promotion", deniers, promotedName));
}
}
private void processDemote(Request req, Clan requesterClan, UUID targetPlayer, List<String> denies) {
String demotedName = req.getTarget();
if (denies.isEmpty()) {
requesterClan.addBb(lang("leaders"), ChatColor.AQUA
+ lang("demoted.back.to.member", demotedName));
requesterClan.demote(targetPlayer);
} else {
String deniers = Helper.toMessage(Helper.toArray(denies), ", ");
requesterClan.leaderAnnounce(
ChatColor.RED + lang("denied.demotion", deniers, demotedName));
}
}
private void processBreakRivalry(Clan requesterClan, ClanPlayer requesterCp, Clan targetClan, List<String> accepts,
List<String> denies) {
if (targetClan != null && requesterClan != null) {
if (!accepts.isEmpty()) {
requesterClan.removeRival(targetClan);
targetClan.addBb(requesterCp.getName(), ChatColor.AQUA + lang("broken.the.rivalry", accepts.get(0), requesterClan.getName()));
requesterClan.addBb(requesterCp.getName(), ChatColor.AQUA + lang("broken.the.rivalry.with", requesterCp.getName(), targetClan.getName()));
} else {
targetClan.addBb(requesterCp.getName(), ChatColor.AQUA + lang("denied.to.make.peace", denies.get(0), requesterClan.getName()));
requesterClan.addBb(requesterCp.getName(), ChatColor.AQUA + lang("peace.agreement.denied", targetClan.getName()));
}
}
}
private void processCreateAlly(Clan requesterClan, ClanPlayer requesterCp, Clan targetClan, List<String> accepts,
List<String> denies) {
if (targetClan != null && requesterClan != null) {
if (!accepts.isEmpty()) {
requesterClan.addAlly(targetClan);
targetClan.addBb(requesterCp.getName(), ChatColor.AQUA + lang("accepted.an.alliance", accepts.get(0), requesterClan.getName()));
requesterClan.addBb(requesterCp.getName(), ChatColor.AQUA + lang("created.an.alliance", requesterCp.getName(), targetClan.getName()));
} else {
targetClan.addBb(requesterCp.getName(), ChatColor.AQUA + lang("denied.an.alliance", denies.get(0), requesterClan.getName()));
requesterClan.addBb(requesterCp.getName(), ChatColor.AQUA + lang("the.alliance.was.denied", targetClan.getName()));
}
}
}
private void processEndWar(Clan requesterClan, ClanPlayer requesterCp, Clan targetClan, List<String> accepts,
List<String> denies) {
if (requesterClan != null && targetClan != null) {
if (!accepts.isEmpty()) {
requesterClan.removeWarringClan(targetClan);
targetClan.removeWarringClan(requesterClan);
targetClan.addBb(requesterCp.getName(), ChatColor.AQUA + lang("you.are.no.longer.at.war", accepts.get(0), requesterClan.getColorTag()));
requesterClan.addBb(requesterCp.getName(), ChatColor.AQUA + lang("you.are.no.longer.at.war", requesterClan.getName(), targetClan.getColorTag()));
} else {
targetClan.addBb(requesterCp.getName(), ChatColor.AQUA + lang("denied.war.end", denies.get(0), requesterClan.getName()));
requesterClan.addBb(requesterCp.getName(), ChatColor.AQUA + lang("end.war.denied", targetClan.getName()));
}
}
}
private void processStartWar(Clan requesterClan, ClanPlayer requesterCp, Clan targetClan, List<String> accepts,
List<String> denies) {
if (requesterClan != null && targetClan != null) {
if (!accepts.isEmpty()) {
requesterClan.addWarringClan(targetClan);
targetClan.addWarringClan(requesterClan);
targetClan.addBb(requesterCp.getName(), ChatColor.AQUA + lang("you.are.at.war", targetClan.getName(), requesterClan.getColorTag()));
requesterClan.addBb(requesterCp.getName(), ChatColor.AQUA + lang("you.are.at.war", requesterClan.getName(), targetClan.getColorTag()));
} else {
targetClan.addBb(requesterCp.getName(), ChatColor.AQUA + lang("denied.war.req", denies.get(0), requesterClan.getName()));
requesterClan.addBb(requesterCp.getName(), ChatColor.AQUA + lang("end.war.denied", targetClan.getName()));
}
}
}
/**
* End a pending request prematurely
*
* @param playerName
* @return
* @param playerName the Player signing off
*/
public boolean endPendingRequest(String playerName) {
for (Request req : new LinkedList<Request>(requests.values())) {
public void endPendingRequest(String playerName) {
for (Request req : new LinkedList<>(requests.values())) {
for (ClanPlayer cp : req.getAcceptors()) {
if (cp.getName().equalsIgnoreCase(playerName)) {
req.getClan().leaderAnnounce(MessageFormat.format(plugin.getLang("signed.off.request.cancelled"), ChatColor.RED + Helper.capitalize(playerName), req.getType()));
req.getClan().leaderAnnounce(lang("signed.off.request.cancelled", ChatColor.RED + playerName, req.getType()));
requests.remove(req.getClan().getTag());
break;
}
}
}
return false;
}
/**
* Starts the task that asks for the votes of all requests
*/
public void askerTask() {
plugin.getServer().getScheduler().scheduleAsyncRepeatingTask(plugin, new Runnable() {
@Override
public void run() {
new BukkitRunnable() {
@Override
public void run() {
for (Iterator<Map.Entry<String, Request>> iter = requests.entrySet().iterator(); iter.hasNext(); ) {
Request req = iter.next().getValue();
@@ -425,26 +469,26 @@ public final class RequestManager {
}
ask(req);
req.incrementAskCount();
}
}
}, 0, plugin.getSettingsManager().getRequestFreqencySecs() * 20L);
req.incrementAskCount();
}
}}.runTaskTimerAsynchronously(plugin, 0, plugin.getSettingsManager().getRequestFreqencySecs() * 20L);
}
/**
* Asks a request to players for votes
*
* @param req
* @param req the Request
*/
public void ask(Request req) {
public void ask(final Request req) {
final String tag = plugin.getSettingsManager().getClanChatBracketColor() + plugin.getSettingsManager().getClanChatTagBracketLeft() + plugin.getSettingsManager().getTagDefaultColor() + req.getClan().getColorTag() + plugin.getSettingsManager().getClanChatBracketColor() + plugin.getSettingsManager().getClanChatTagBracketRight();
final String message = tag + " " + plugin.getSettingsManager().getRequestMessageColor() + req.getMsg();
final String options = MessageFormat.format(plugin.getLang("accept.or.deny"), ChatBlock.makeEmpty(Helper.stripColors(tag)) + " " + ChatColor.DARK_GREEN + "/" + plugin.getSettingsManager().getCommandAccept() + plugin.getSettingsManager().getPageHeadingsColor(), ChatColor.DARK_RED + "/" + plugin.getSettingsManager().getCommandDeny());
if (req.getType().equals(ClanRequest.INVITE)) {
Player player = Helper.getPlayer(req.getTarget());
if (player != null) {
String options = lang("accept.or.deny", player, ChatBlock.makeEmpty(Helper.stripColors(tag)) + " " + ChatColor.DARK_GREEN + "/" + plugin.getSettingsManager().getCommandAccept() + plugin.getSettingsManager().getPageHeadingsColor(), ChatColor.DARK_RED + "/" + plugin.getSettingsManager().getCommandDeny());
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, message);
ChatBlock.sendMessage(player, options);
@@ -456,6 +500,8 @@ public final class RequestManager {
Player player = cp.toPlayer();
if (player != null) {
String options = lang("accept.or.deny", player, ChatBlock.makeEmpty(Helper.stripColors(tag)) + " " + ChatColor.DARK_GREEN + "/" + plugin.getSettingsManager().getCommandAccept() + plugin.getSettingsManager().getPageHeadingsColor(), ChatColor.DARK_RED + "/" + plugin.getSettingsManager().getCommandDeny());
ChatBlock.sendBlank(player);
ChatBlock.sendMessage(player, message);
ChatBlock.sendMessage(player, options);
@@ -465,6 +511,11 @@ public final class RequestManager {
}
}
SimpleClans.getInstance().getServer().getPluginManager().callEvent(new RequestEvent(req));
new BukkitRunnable() {
@Override
public void run() {
SimpleClans.getInstance().getServer().getPluginManager().callEvent(new RequestEvent(req));
}
}.runTask(plugin);
}
}
@@ -1,21 +1,27 @@
package net.sacredlabyrinth.phaed.simpleclans.managers;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
import org.bukkit.configuration.file.FileConfiguration;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.UUID;
import org.bukkit.Bukkit;
import org.bukkit.Material;
import net.sacredlabyrinth.phaed.simpleclans.utils.RankingNumberResolver.RankingType;
import org.bukkit.configuration.file.FileConfiguration;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import org.jetbrains.annotations.NotNull;
/**
* @author phaed
*/
public final class SettingsManager {
private boolean onlineMode;
private boolean enableGUI;
private boolean disableMessages;
private String clanChatRankColor;
private boolean tagBasedClanChat;
@@ -23,18 +29,30 @@ public final class SettingsManager {
private boolean dropOnHome;
private boolean keepOnHome;
private boolean debugging;
@SuppressWarnings("FieldMayBeFinal")
private SimpleClans plugin;
private final SimpleClans plugin;
private boolean mChatIntegration;
private boolean pvpOnlywhileInWar;
private boolean useColorCodeFromPrefix;
private boolean confirmationForPromote;
private boolean confirmationForDemote;
private double percentageOnlineToDemote;
private boolean globalff;
private boolean allowResetKdr;
private boolean showUnverifiedOnList;
private boolean requireVerification;
private List<Integer> itemsList;
private boolean rejoinCooldownEnabled;
private boolean acceptOtherAlphabetsLettersOnTag;
private int minToVerify;
private int rejoinCooldown;
private String listDefault;
private String listSize;
private String listKdr;
private String listName;
private String listFounded;
private String listActive;
private String listAsc;
private String listDesc;
private List<Material> itemsList = new ArrayList<Material>();
private List<String> blacklistedWorlds;
private List<String> bannedPlayers;
private List<String> disallowedWords;
@@ -50,6 +68,11 @@ public final class SettingsManager {
private boolean eIssuerPaysRegroup;
private boolean ePurchaseHomeTeleportSet;
private boolean ePurchaseResetKdr;
private boolean eMemberFee;
private boolean ePurchaseMemberFeeSet;
private boolean eClanUpkeepEnabled;
private boolean eMultiplyUpkeepBySize;
private boolean eChargeUpkeepOnlyIfMemberFeeEnabled;
private double eCreationPrice;
private double eVerificationPrice;
private double eInvitePrice;
@@ -57,6 +80,9 @@ public final class SettingsManager {
private double eHomeRegroupPrice;
private double eHomeTeleportPriceSet;
private double eResetKdr;
private double eMaxMemberFee;
private double eMemberFeeSetPrice;
private double eClanUpkeep;
private String serverName;
private boolean chatTags;
private int purgeClan;
@@ -73,6 +99,7 @@ public final class SettingsManager {
private String pageUnTrustedColor;
private boolean bbShowOnLogin;
private int bbSize;
private int bbLoginSize;
private String bbColor;
private String bbAccentColor;
private String commandClan;
@@ -85,7 +112,10 @@ public final class SettingsManager {
private int clanMinSizeToAlly;
private int clanMinSizeToRival;
private int clanMinLength;
private int clanMaxAlliances;
private int clanMaxLength;
private int clanMaxDescriptionLength;
private int clanMinDescriptionLength;
private String pageClanNameColor;
private int tagMinLength;
private int tagMaxLength;
@@ -102,6 +132,7 @@ public final class SettingsManager {
private String allyChatFormat;
private String allyChatRank;
private String allyChatLeaderColor;
private String allyChatTrustedColor;
private String allyChatMemberColor;
private String allyChatMessageColor;
private String allyChatNameColor;
@@ -115,6 +146,7 @@ public final class SettingsManager {
private String clanChatFormat;
private String clanChatRank;
private String clanChatLeaderColor;
private String clanChatTrustedColor;
private String clanChatMemberColor;
private String clanChatAnnouncementColor;
private String clanChatMessageColor;
@@ -124,6 +156,12 @@ public final class SettingsManager {
private String clanChatBracketColor;
private String clanChatPlayerBracketLeft;
private String clanChatPlayerBracketRight;
private int tasksCollectUpkeepHour;
private int tasksCollectUpkeepMinute;
private int tasksCollectUpkeepWarningHour;
private int tasksCollectUpkeepWarningMinute;
private int tasksCollectFeeHour;
private int tasksCollectFeeMinute;
private boolean clanFFOnByDefault;
private double kwRival;
private double kwNeutral;
@@ -135,14 +173,13 @@ public final class SettingsManager {
private String username;
private String password;
private boolean safeCivilians;
@SuppressWarnings("FieldMayBeFinal")
private File main;
@SuppressWarnings("FieldMayBeFinal")
private FileConfiguration config;
private final File main;
private final FileConfiguration config;
private boolean compatMode;
private boolean homebaseSetOnce;
private int waitSecs;
private boolean enableAutoGroups;
private boolean denySameIPKills;
private boolean moneyperkill;
private double KDRMultipliesPerKill;
private boolean teleportBlocks;
@@ -154,6 +191,15 @@ public final class SettingsManager {
private boolean forceCommandPriority;
private int maxAsksPerRequest;
private int maxMembers;
private boolean maxKillsPerVictimEnabled;
private int maxKillsPerVictim;
private boolean delayBetweenKillsEnabled;
private int delayBetweenKills;
private String language;
private boolean languagePerPlayer;
private boolean savePeriodically;
private int saveInterval;
private String rankingType;
/**
*
@@ -184,12 +230,19 @@ public final class SettingsManager {
getConfig().options().copyDefaults(true);
}
onlineMode = getConfig().getBoolean("settings.online-mode");
enableGUI = getConfig().getBoolean("settings.enable-gui");
disableMessages = getConfig().getBoolean("settings.disable-messages");
teleportOnSpawn = getConfig().getBoolean("settings.teleport-home-on-spawn");
dropOnHome = getConfig().getBoolean("settings.drop-items-on-clan-home");
keepOnHome = getConfig().getBoolean("settings.keep-items-on-clan-home");
itemsList = getConfig().getIntegerList("settings.item-list");
for (String material : getConfig().getStringList("settings.item-list")) {
Material type = Material.getMaterial(material);
if (type != null) {
itemsList.add(type);
} else {
plugin.getLogger().warning("Error with Material: " + material);
}
}
debugging = getConfig().getBoolean("settings.show-debug-info");
mChatIntegration = getConfig().getBoolean("settings.mchat-integration");
pvpOnlywhileInWar = getConfig().getBoolean("settings.pvp-only-while-at-war");
@@ -204,6 +257,19 @@ public final class SettingsManager {
unRivableClans = getConfig().getStringList("settings.unrivable-clans");
showUnverifiedOnList = getConfig().getBoolean("settings.show-unverified-on-list");
requireVerification = getConfig().getBoolean("settings.new-clan-verification-required");
rejoinCooldown = getConfig().getInt("settings.rejoin-cooldown");
rejoinCooldownEnabled = getConfig().getBoolean("settings.rejoin-cooldown-enabled");
acceptOtherAlphabetsLettersOnTag = getConfig().getBoolean("settings.accept-other-alphabets-letters-on-tag");
minToVerify = getConfig().getInt("settings.min-to-verify", 1);
rankingType = getConfig().getString("settings.ranking-type", "DENSE");
listActive = getConfig().getString("list.active", "active");
listKdr = getConfig().getString("list.kdr", "kdr");
listDefault = getConfig().getString("list.default", listKdr);
listSize = getConfig().getString("list.size", "size");
listName = getConfig().getString("list.name", "name");
listFounded = getConfig().getString("list.founded", "founded");
listAsc = getConfig().getString("list.asc", "asc");
listDesc = getConfig().getString("list.desc", "desc");
serverName = getConfig().getString("settings.server-name");
chatTags = getConfig().getBoolean("settings.display-chat-tags");
rivalLimitPercent = getConfig().getInt("settings.rival-limit-percent");
@@ -214,6 +280,8 @@ public final class SettingsManager {
ePurchaseHomeRegroup = getConfig().getBoolean("economy.purchase-home-regroup");
ePurchaseHomeTeleportSet = getConfig().getBoolean("economy.purchase-home-teleport-set");
ePurchaseResetKdr = getConfig().getBoolean("economy.purchase-reset-kdr");
ePurchaseMemberFeeSet = getConfig().getBoolean("economy.purchase-member-fee-set");
eMemberFeeSetPrice = getConfig().getDouble("economy.member-fee-set-price");
eResetKdr = getConfig().getDouble("economy.reset-kdr-price");
eCreationPrice = getConfig().getDouble("economy.creation-price");
eVerificationPrice = getConfig().getDouble("economy.verification-price");
@@ -223,6 +291,12 @@ public final class SettingsManager {
eUniqueTaxOnRegroup = getConfig().getBoolean("economy.unique-tax-on-regroup");
eIssuerPaysRegroup = getConfig().getBoolean("economy.issuer-pays-regroup");
eHomeTeleportPriceSet = getConfig().getDouble("economy.home-teleport-set-price");
eMaxMemberFee = getConfig().getDouble("economy.max-member-fee");
eClanUpkeep = getConfig().getDouble("economy.upkeep");
eClanUpkeepEnabled = getConfig().getBoolean("economy.upkeep-enabled");
eChargeUpkeepOnlyIfMemberFeeEnabled = getConfig().getBoolean("economy.charge-upkeep-only-if-member-fee-enabled");
eMultiplyUpkeepBySize = getConfig().getBoolean("economy.multiply-upkeep-by-clan-size");
eMemberFee = getConfig().getBoolean("economy.member-fee-enabled");
purgeClan = getConfig().getInt("purge.inactive-clan-days");
purgeUnverified = getConfig().getInt("purge.unverified-clan-days");
purgePlayers = getConfig().getInt("purge.inactive-player-data-days");
@@ -239,6 +313,7 @@ public final class SettingsManager {
pageClanNameColor = getConfig().getString("page.clan-name-color");
bbShowOnLogin = getConfig().getBoolean("bb.show-on-login");
bbSize = getConfig().getInt("bb.size");
bbLoginSize = getConfig().getInt("bb.login-size", bbSize);
bbColor = getConfig().getString("bb.color");
bbAccentColor = getConfig().getString("bb.accent-color");
commandClan = getConfig().getString("commands.clan");
@@ -253,11 +328,15 @@ public final class SettingsManager {
waitSecs = getConfig().getInt("clan.homebase-teleport-wait-secs");
confirmationForPromote = getConfig().getBoolean("clan.confirmation-for-demote");
confirmationForDemote = getConfig().getBoolean("clan.confirmation-for-promote");
percentageOnlineToDemote = getConfig().getDouble("clan.percentage-online-to-demote");
clanTrustByDefault = getConfig().getBoolean("clan.trust-members-by-default");
clanMinSizeToAlly = getConfig().getInt("clan.min-size-to-set-ally");
clanMinSizeToRival = getConfig().getInt("clan.min-size-to-set-rival");
clanMinLength = getConfig().getInt("clan.min-length");
clanMaxAlliances = getConfig().getInt("clan.max-alliances");
clanMaxLength = getConfig().getInt("clan.max-length");
clanMaxDescriptionLength = getConfig().getInt("clan.max-description-length");
clanMinDescriptionLength = getConfig().getInt("clan.min-description-length");
clanFFOnByDefault = getConfig().getBoolean("clan.ff-on-by-default");
tagMinLength = getConfig().getInt("tag.min-length");
tagMaxLength = getConfig().getInt("tag.max-length");
@@ -273,6 +352,7 @@ public final class SettingsManager {
allyChatFormat = getConfig().getString("allychat.format");
allyChatRank = getConfig().getString("allychat.rank");
allyChatLeaderColor = getConfig().getString("allychat.leader-color");
allyChatTrustedColor = getConfig().getString("allychat.trusted-color");
allyChatMemberColor = getConfig().getString("allychat.member-color");
allyChatMessageColor = getConfig().getString("allychat.message-color");
allyChatTagColor = getConfig().getString("allychat.tag-color");
@@ -286,6 +366,7 @@ public final class SettingsManager {
clanChatFormat = getConfig().getString("clanchat.format");
clanChatRank = getConfig().getString("clanchat.rank");
clanChatLeaderColor = getConfig().getString("clanchat.leader-color");
clanChatTrustedColor = getConfig().getString("clanchat.trusted-color");
clanChatMemberColor = getConfig().getString("clanchat.member-color");
tagBasedClanChat = getConfig().getBoolean("clanchat.tag-based-clan-chat");
clanChatAnnouncementColor = getConfig().getString("clanchat.announcement-color");
@@ -297,9 +378,16 @@ public final class SettingsManager {
clanChatTagBracketRight = getConfig().getString("clanchat.tag-bracket.right");
clanChatPlayerBracketLeft = getConfig().getString("clanchat.player-bracket.left");
clanChatPlayerBracketRight = getConfig().getString("clanchat.player-bracket.right");
tasksCollectFeeHour = getConfig().getInt("tasks.collect-fee.hour");
tasksCollectFeeMinute = getConfig().getInt("tasks.collect-fee.minute");
tasksCollectUpkeepHour = getConfig().getInt("tasks.collect-upkeep.hour");
tasksCollectUpkeepMinute = getConfig().getInt("tasks.collect-upkeep.minute");
tasksCollectUpkeepWarningHour = getConfig().getInt("tasks.collect-upkeep-warning.hour");
tasksCollectUpkeepWarningMinute = getConfig().getInt("tasks.collect-upkeep-warning.minute");
kwRival = getConfig().getDouble("kill-weights.rival");
kwNeutral = getConfig().getDouble("kill-weights.neutral");
kwCivilian = getConfig().getDouble("kill-weights.civilian");
denySameIPKills = getConfig().getBoolean("kill-weights.deny-same-ip-kills");
useMysql = getConfig().getBoolean("mysql.enable");
host = getConfig().getString("mysql.host");
port = getConfig().getInt("mysql.port");
@@ -311,13 +399,21 @@ public final class SettingsManager {
moneyperkill = getConfig().getBoolean("economy.money-per-kill");
KDRMultipliesPerKill = getConfig().getDouble("economy.money-per-kill-kdr-multipier");
teleportBlocks = getConfig().getBoolean("settings.teleport-blocks");
language = getConfig().getString("settings.language", "");
languagePerPlayer = getConfig().getBoolean("settings.user-language-selector", true);
AutoGroupGroupName = getConfig().getBoolean("permissions.auto-group-groupname");
tamableMobsSharing = getConfig().getBoolean("settings.tameable-mobs-sharing");
allowReGroupCommand = getConfig().getBoolean("settings.allow-regroup-command");
savePeriodically = getConfig().getBoolean("performance.save-periodically");
saveInterval = getConfig().getInt("performance.save-interval");
useThreads = getConfig().getBoolean("performance.use-threads");
useBungeeCord = getConfig().getBoolean("performance.use-bungeecord");
maxMembers = getConfig().getInt("clan.max-members");
maxKillsPerVictim = getConfig().getInt("kdr-grinding-prevention.max-kills-per-victim");
maxKillsPerVictimEnabled = getConfig().getBoolean("kdr-grinding-prevention.enable-max-kills");
delayBetweenKills = getConfig().getInt("kdr-grinding-prevention.delay-between-kills");
delayBetweenKillsEnabled = getConfig().getBoolean("kdr-grinding-prevention.enable-kill-delay");
// migrate from old way of adding ports
if (database.contains(":")) {
String[] strings = database.split(":");
@@ -336,6 +432,135 @@ public final class SettingsManager {
e.printStackTrace();
}
}
public boolean isEnableGUI() {
return enableGUI;
}
public void setEnableGUI(boolean enableGUI) {
this.enableGUI = enableGUI;
getConfig().set("settings.enable-gui", enableGUI);
save();
}
/**
*
* @return if the tag can contain letters from other alphabets
*/
public boolean isAcceptOtherAlphabetsLettersOnTag() {
return acceptOtherAlphabetsLettersOnTag;
}
public Locale getLanguage() {
String[] split = language.split("_");
if (split.length == 2) {
return new Locale(split[0], split[1]);
}
return new Locale(language);
}
@NotNull
public RankingType getRankingType() {
try {
return RankingType.valueOf(rankingType);
} catch (IllegalArgumentException ex) {
return RankingType.DENSE;
}
}
public boolean isLanguagePerPlayer() {
return languagePerPlayer;
}
public int getTasksCollectUpkeepHour() {
return tasksCollectUpkeepHour;
}
public void setTasksCollectUpkeepHour(int tasksCollectUpkeepHour) {
this.tasksCollectUpkeepHour = tasksCollectUpkeepHour;
}
public int getTasksCollectUpkeepMinute() {
return tasksCollectUpkeepMinute;
}
public void setTasksCollectUpkeepMinute(int tasksCollectUpkeepMinute) {
this.tasksCollectUpkeepMinute = tasksCollectUpkeepMinute;
}
public int getTasksCollectUpkeepWarningHour() {
return tasksCollectUpkeepWarningHour;
}
public void setTasksCollectUpkeepWarningHour(int tasksCollectUpkeepWarningHour) {
this.tasksCollectUpkeepWarningHour = tasksCollectUpkeepWarningHour;
}
public int getTasksCollectUpkeepWarningMinute() {
return tasksCollectUpkeepWarningMinute;
}
public void setTasksCollectUpkeepWarningMinute(int tasksCollectUpkeepWarningMinute) {
this.tasksCollectUpkeepWarningMinute = tasksCollectUpkeepWarningMinute;
}
public int getTasksCollectFeeHour() {
return tasksCollectFeeHour;
}
public void setTasksCollectFeeHour(int tasksCollectFeeHour) {
this.tasksCollectFeeHour = tasksCollectFeeHour;
}
public int getTasksCollectFeeMinute() {
return tasksCollectFeeMinute;
}
public void setTasksCollectFeeMinute(int tasksCollectFeeMinute) {
this.tasksCollectFeeMinute = tasksCollectFeeMinute;
}
public int getMinToVerify() {
return minToVerify;
}
/**
* Returns the delay between kills
*
* @return
*/
public int getDelayBetweenKills() {
return delayBetweenKills;
}
/**
* Checks if the delay between kills is enabled
*
* @return
*/
public boolean isDelayBetweenKills() {
return delayBetweenKillsEnabled;
}
/**
* Returns the max number of kills per victim
*
* @return
*/
public int getMaxKillsPerVictim() {
return maxKillsPerVictim;
}
/**
* Checks if there is a max number of kills per victim
*
* @return
*/
public boolean isMaxKillsPerVictim() {
return maxKillsPerVictimEnabled;
}
/**
* Check whether an item is in the list
@@ -343,7 +568,7 @@ public final class SettingsManager {
* @param typeId the type
* @return whether the world is blacklisted
*/
public boolean isItemInList(int typeId) {
public boolean isItemInList(Material typeId) {
return itemsList.contains(typeId);
}
@@ -388,6 +613,62 @@ public final class SettingsManager {
return word.equalsIgnoreCase("clan") || word.equalsIgnoreCase(commandMore) || word.equalsIgnoreCase(commandDeny) || word.equalsIgnoreCase(commandAccept);
}
/**
* Checks if the upkeep is to be charged only from clans with the member fee enabled
*
* @return
*/
public boolean isChargeUpkeepOnlyIfMemberFeeEnabled() {
return eChargeUpkeepOnlyIfMemberFeeEnabled;
}
/**
* Checks if the upkeep should be multiplied by the clan size
*
* @return
*/
public boolean isMultiplyUpkeepBySize() {
return eMultiplyUpkeepBySize;
}
/**
* Checks if the upkeep is enabled
*
* @return
*/
public boolean isClanUpkeep() {
return eClanUpkeepEnabled;
}
/**
* Returns the upkeep
*
* @return
*/
public double getClanUpkeep() {
if (eClanUpkeep < 0) {
eClanUpkeep = 0;
}
return eClanUpkeep;
}
/**
* Returns the max member fee allowed
* @return
*/
public double getMaxMemberFee() {
return eMaxMemberFee;
}
/**
* Checks if the member fee is enabled
* @return
*/
public boolean isMemberFee() {
return eMemberFee;
}
public boolean isAllowResetKdr() {
return allowResetKdr;
@@ -396,6 +677,23 @@ public final class SettingsManager {
public boolean isePurchaseResetKdr() {
return ePurchaseResetKdr;
}
/**
* Gets the price to pay for setting the member fee
*
* @return the price
*/
public double geteMemberFeeSetPrice() {
return eMemberFeeSetPrice;
}
/**
* Do leaders need to pay for setting the member fee?
* @return true if so
*/
public boolean isePurchaseMemberFeeSet() {
return ePurchaseMemberFeeSet;
}
/**
* Gets the price to reset the KDR
@@ -450,60 +748,6 @@ public final class SettingsManager {
return false;
}
/**
* Check whether a player is banned
*
* @param playerName the player's name
* @return whether player is banned
*/
@Deprecated
public boolean isBanned(String playerName) {
if (SimpleClans.getInstance().hasUUID()) {
playerName = UUIDMigration.getForcedPlayerUUID(playerName).toString();
}
for (String pl : getBannedPlayers()) {
if (pl.equalsIgnoreCase(playerName)) {
return true;
}
}
return false;
}
/**
* Add a player to the banned list
*
* @param playerName the player's name
*/
@Deprecated
public void addBanned(String playerName) {
if (SimpleClans.getInstance().hasUUID()) {
playerName = UUIDMigration.getForcedPlayerUUID(playerName).toString();
}
if (!bannedPlayers.contains(playerName)) {
bannedPlayers.add(playerName);
}
save();
}
/**
* Remove a player from the banned list
*
* @param playerName the player's name
*/
@Deprecated
public void removeBanned(String playerName) {
if (SimpleClans.getInstance().hasUUID()) {
playerName = UUIDMigration.getForcedPlayerUUID(playerName).toString();
}
if (bannedPlayers.contains(playerName)) {
bannedPlayers.remove(playerName);
}
save();
}
/**
* Check whether a player is banned
*
@@ -529,7 +773,8 @@ public final class SettingsManager {
if (!bannedPlayers.contains(playerUniqueId.toString())) {
bannedPlayers.add(playerUniqueId.toString());
}
getConfig().set("settings.banned-players", bannedPlayers);
save();
}
@@ -539,10 +784,9 @@ public final class SettingsManager {
* @param playerUniqueId the player's name
*/
public void removeBanned(UUID playerUniqueId) {
if (bannedPlayers.contains(playerUniqueId.toString())) {
bannedPlayers.remove(playerUniqueId.toString());
}
bannedPlayers.remove(playerUniqueId.toString());
getConfig().set("settings.banned-players", bannedPlayers);
save();
}
@@ -559,8 +803,48 @@ public final class SettingsManager {
public boolean isRequireVerification() {
return requireVerification;
}
public boolean isRejoinCooldown() {
return rejoinCooldownEnabled;
}
public int getRejoinCooldown() {
return rejoinCooldown;
}
public String getListDefault() {
return listDefault;
}
/**
public String getListSize() {
return listSize;
}
public String getListKdr() {
return listKdr;
}
public String getListName() {
return listName;
}
public String getListFounded() {
return listFounded;
}
public String getListActive() {
return listActive;
}
public String getListAsc() {
return listAsc;
}
public String getListDesc() {
return listDesc;
}
/**
* @return the bannedPlayers
*/
public List<String> getBannedPlayers() {
@@ -679,6 +963,13 @@ public final class SettingsManager {
return bbSize;
}
/**
* @return the bbLoginSize
*/
public int getBbLoginSize() {
return bbLoginSize;
}
/**
* @return the bbColor
*/
@@ -734,14 +1025,46 @@ public final class SettingsManager {
public int getClanMinSizeToRival() {
return clanMinSizeToRival;
}
/**
* Returns the max length of the clan description
*
* @return the max length
*/
public int getClanMaxDescriptionLength() {
if (clanMaxDescriptionLength > 255 || clanMaxDescriptionLength < 0) {
clanMaxDescriptionLength = 255;
}
return clanMaxDescriptionLength;
}
/**
* Returns the min length of the clan description
*
* @return the min length
*/
public int getClanMinDescriptionLength() {
if (clanMinDescriptionLength < 0 || clanMinDescriptionLength > getClanMaxDescriptionLength()) {
clanMinDescriptionLength = 0;
}
return clanMinDescriptionLength;
}
/**
* @return the clanMinLength
*/
public int getClanMinLength() {
return clanMinLength;
}
/**
*
* @return the max number of alliances a clan can have
*/
public int getClanMaxAlliances() {
return clanMaxAlliances;
}
/**
* @return the clanMaxLength
*/
@@ -781,14 +1104,14 @@ public final class SettingsManager {
* @return the tagSeparator
*/
public String getTagSeparator() {
if (tagSeparator.equals(" .")) {
return ".";
}
if (tagSeparator == null) {
return "";
}
if (tagSeparator.equals(" .")) {
return ".";
}
return tagSeparator;
}
@@ -811,6 +1134,10 @@ public final class SettingsManager {
return Helper.toColor(clanChatLeaderColor);
}
public String getClanChatTrustedColor() {
return Helper.toColor(clanChatTrustedColor);
}
public String getClanChatMemberColor() {
return Helper.toColor(clanChatMemberColor);
}
@@ -1068,6 +1395,22 @@ public final class SettingsManager {
public boolean isConfirmationForDemote() {
return confirmationForDemote;
}
/**
* Returns the min percentage of leaders online required to demote someone
*
* @return the percentage
*/
public double getPercentageOnlineToDemote() {
if (percentageOnlineToDemote <= 0 || percentageOnlineToDemote > 100) {
percentageOnlineToDemote = 100;
}
return percentageOnlineToDemote;
}
public boolean isDenySameIPKills() {
return denySameIPKills;
}
public boolean isUseColorCodeFromPrefix() {
return useColorCodeFromPrefix;
@@ -1098,6 +1441,10 @@ public final class SettingsManager {
return Helper.toColor(allyChatLeaderColor);
}
public String getAllyChatTrustedColor() {
return Helper.toColor(allyChatTrustedColor);
}
public String getAllyChatMemberColor() {
return Helper.toColor(allyChatMemberColor);
}
@@ -1189,7 +1536,7 @@ public final class SettingsManager {
return dropOnHome;
}
public List<Integer> getItemsList() {
public List<Material> getItemsList() {
return Collections.unmodifiableList(itemsList);
}
@@ -1304,10 +1651,16 @@ public final class SettingsManager {
return tamableMobsSharing;
}
@Deprecated
public boolean isOnlineMode() {
return onlineMode;
return true;
}
/**
* Checks if server announcements are disabled
*
* @return if they are disabled
*/
public boolean isDisableMessages() {
return disableMessages;
}
@@ -1360,4 +1713,21 @@ public final class SettingsManager {
public int getMaxMembers() {
return this.maxMembers;
}
public boolean isSavePeriodically() {
return savePeriodically;
}
/**
* Gets the interval to save the data
*
* @return the interval in seconds
*/
public int getSaveInterval() {
if (saveInterval < 1) {
saveInterval = 5;
}
return saveInterval * 60;
}
}
@@ -3,18 +3,24 @@ package net.sacredlabyrinth.phaed.simpleclans.managers;
import com.google.common.base.Charsets;
import net.sacredlabyrinth.phaed.simpleclans.*;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import net.sacredlabyrinth.phaed.simpleclans.storage.DBCore;
import net.sacredlabyrinth.phaed.simpleclans.storage.MySQLCore;
import net.sacredlabyrinth.phaed.simpleclans.storage.SQLiteCore;
import net.sacredlabyrinth.phaed.simpleclans.utils.YAMLSerializer;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDFetcher;
import net.sacredlabyrinth.phaed.simpleclans.uuid.UUIDMigration;
import org.bukkit.ChatColor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemStack;
import org.bukkit.scheduler.BukkitRunnable;
import org.jetbrains.annotations.NotNull;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.MessageFormat;
import java.util.*;
import java.util.logging.Level;
@@ -24,9 +30,11 @@ import java.util.logging.Level;
*/
public final class StorageManager {
private SimpleClans plugin;
private final SimpleClans plugin;
private DBCore core;
private HashMap<String, ChatBlock> chatBlocks = new HashMap<>();
private final HashMap<String, ChatBlock> chatBlocks = new HashMap<>();
private final Set<Clan> modifiedClans = new HashSet<>();
private final Set<ClanPlayer> modifiedClanPlayers = new HashSet<>();
/**
*
@@ -45,11 +53,7 @@ public final class StorageManager {
* @return
*/
public ChatBlock getChatBlock(Player player) {
if (SimpleClans.getInstance().hasUUID()) {
return chatBlocks.get(player.getUniqueId().toString());
} else {
return chatBlocks.get(player.getName());
}
return chatBlocks.get(player.getUniqueId().toString());
}
/**
@@ -59,17 +63,13 @@ public final class StorageManager {
* @param cb
*/
public void addChatBlock(CommandSender player, ChatBlock cb) {
if (SimpleClans.getInstance().hasUUID()) {
UUID uuid = UUIDMigration.getForcedPlayerUUID(player.getName());
UUID uuid = UUIDMigration.getForcedPlayerUUID(player.getName());
if (uuid == null) {
return;
}
if (uuid == null) {
return;
}
chatBlocks.put(uuid.toString(), cb);
} else {
chatBlocks.put(player.getName(), cb);
}
chatBlocks.put(uuid.toString(), cb);
}
/**
@@ -80,59 +80,152 @@ public final class StorageManager {
core = new MySQLCore(plugin.getSettingsManager().getHost(), plugin.getSettingsManager().getDatabase(), plugin.getSettingsManager().getPort(), plugin.getSettingsManager().getUsername(), plugin.getSettingsManager().getPassword());
if (core.checkConnection()) {
SimpleClans.log("[SimpleClans] " + plugin.getLang("mysql.connection.successful"));
plugin.getLogger().info(lang("mysql.connection.successful"));
if (!core.existsTable("sc_clans")) {
SimpleClans.log("Creating table: sc_clans");
plugin.getLogger().info("Creating table: sc_clans");
String query = "CREATE TABLE IF NOT EXISTS `sc_clans` ( `id` bigint(20) NOT NULL auto_increment, `verified` tinyint(1) default '0', `tag` varchar(25) NOT NULL, `color_tag` varchar(25) NOT NULL, `name` varchar(100) NOT NULL, `friendly_fire` tinyint(1) default '0', `founded` bigint NOT NULL, `last_used` bigint NOT NULL, `packed_allies` text NOT NULL, `packed_rivals` text NOT NULL, `packed_bb` mediumtext NOT NULL, `cape_url` varchar(255) NOT NULL, `flags` text NOT NULL, `balance` double(64,2), PRIMARY KEY (`id`), UNIQUE KEY `uq_simpleclans_1` (`tag`));";
String query = "CREATE TABLE IF NOT EXISTS `sc_clans` ("
+ " `id` bigint(20) NOT NULL auto_increment,"
+ " `verified` tinyint(1) default '0',"
+ " `tag` varchar(25) NOT NULL,"
+ " `color_tag` varchar(25) NOT NULL,"
+ " `name` varchar(100) NOT NULL,"
+ " `description` varchar(255),"
+ " `friendly_fire` tinyint(1) default '0',"
+ " `founded` bigint NOT NULL,"
+ " `last_used` bigint NOT NULL,"
+ " `packed_allies` text NOT NULL,"
+ " `packed_rivals` text NOT NULL,"
+ " `packed_bb` mediumtext NOT NULL,"
+ " `cape_url` varchar(255) NOT NULL,"
+ " `flags` text NOT NULL,"
+ " `balance` double(64,2),"
+ " `fee_enabled` tinyint(1) default '0',"
+ " `fee_value` double(64,2),"
+ " `ranks` text NOT NULL,"
+ " `banner` text,"
+ " PRIMARY KEY (`id`),"
+ " UNIQUE KEY `uq_simpleclans_1` (`tag`));";
core.execute(query);
}
if (!core.existsTable("sc_players")) {
SimpleClans.log("Creating table: sc_players");
plugin.getLogger().info("Creating table: sc_players");
String query = "CREATE TABLE IF NOT EXISTS `sc_players` ( `id` bigint(20) NOT NULL auto_increment, `name` varchar(16) NOT NULL, `leader` tinyint(1) default '0', `tag` varchar(25) NOT NULL, `friendly_fire` tinyint(1) default '0', `neutral_kills` int(11) default NULL, `rival_kills` int(11) default NULL, `civilian_kills` int(11) default NULL, `deaths` int(11) default NULL, `last_seen` bigint NOT NULL, `join_date` bigint NOT NULL, `trusted` tinyint(1) default '0', `flags` text NOT NULL, `packed_past_clans` text, PRIMARY KEY (`id`), UNIQUE KEY `uq_sc_players_1` (`name`));";
String query = "CREATE TABLE IF NOT EXISTS `sc_players` ("
+ " `id` bigint(20) NOT NULL auto_increment,"
+ " `name` varchar(16) NOT NULL,"
+ " `leader` tinyint(1) default '0',"
+ " `tag` varchar(25) NOT NULL,"
+ " `friendly_fire` tinyint(1) default '0',"
+ " `neutral_kills` int(11) default NULL,"
+ " `rival_kills` int(11) default NULL,"
+ " `civilian_kills` int(11) default NULL,"
+ " `deaths` int(11) default NULL,"
+ " `last_seen` bigint NOT NULL,"
+ " `join_date` bigint NOT NULL,"
+ " `trusted` tinyint(1) default '0',"
+ " `flags` text NOT NULL,"
+ " `packed_past_clans` text,"
+ " `resign_times` text,"
+ " `locale` varchar(10),"
+ " PRIMARY KEY (`id`),"
+ " UNIQUE KEY `uq_sc_players_1` (`name`));";
core.execute(query);
}
if (!core.existsTable("sc_kills")) {
SimpleClans.log("Creating table: sc_kills");
plugin.getLogger().info("Creating table: sc_kills");
String query = "CREATE TABLE IF NOT EXISTS `sc_kills` ( `kill_id` bigint(20) NOT NULL auto_increment, `attacker` varchar(16) NOT NULL, `attacker_tag` varchar(16) NOT NULL, `victim` varchar(16) NOT NULL, `victim_tag` varchar(16) NOT NULL, `kill_type` varchar(1) NOT NULL, PRIMARY KEY (`kill_id`));";
String query = "CREATE TABLE IF NOT EXISTS `sc_kills` ("
+ " `kill_id` bigint(20) NOT NULL auto_increment,"
+ " `attacker` varchar(16) NOT NULL,"
+ " `attacker_tag` varchar(16) NOT NULL,"
+ " `victim` varchar(16) NOT NULL,"
+ " `victim_tag` varchar(16) NOT NULL,"
+ " `kill_type` varchar(1) NOT NULL,"
+ " PRIMARY KEY (`kill_id`));";
core.execute(query);
}
} else {
SimpleClans.getInstance().getServer().getConsoleSender().sendMessage("[SimpleClans] " + ChatColor.RED + plugin.getLang("mysql.connection.failed"));
SimpleClans.getInstance().getServer().getConsoleSender().sendMessage("[SimpleClans] " + ChatColor.RED + lang("mysql.connection.failed"));
}
} else {
core = new SQLiteCore(plugin.getDataFolder().getPath());
if (core.checkConnection()) {
SimpleClans.log("[SimpleClans] " + plugin.getLang("sqlite.connection.successful"));
plugin.getLogger().info(lang("sqlite.connection.successful"));
if (!core.existsTable("sc_clans")) {
SimpleClans.log("Creating table: sc_clans");
plugin.getLogger().info("Creating table: sc_clans");
String query = "CREATE TABLE IF NOT EXISTS `sc_clans` ( `id` bigint(20), `verified` tinyint(1) default '0', `tag` varchar(25) NOT NULL, `color_tag` varchar(25) NOT NULL, `name` varchar(100) NOT NULL, `friendly_fire` tinyint(1) default '0', `founded` bigint NOT NULL, `last_used` bigint NOT NULL, `packed_allies` text NOT NULL, `packed_rivals` text NOT NULL, `packed_bb` mediumtext NOT NULL, `cape_url` varchar(255) NOT NULL, `flags` text NOT NULL, `balance` double(64,2) default 0.0, PRIMARY KEY (`id`), UNIQUE (`tag`));";
String query = "CREATE TABLE IF NOT EXISTS `sc_clans` ("
+ " `id` bigint(20),"
+ " `verified` tinyint(1) default '0',"
+ " `tag` varchar(25) NOT NULL,"
+ " `color_tag` varchar(25) NOT NULL,"
+ " `name` varchar(100) NOT NULL,"
+ " `description` varchar(255),"
+ " `friendly_fire` tinyint(1) default '0',"
+ " `founded` bigint NOT NULL,"
+ " `last_used` bigint NOT NULL,"
+ " `packed_allies` text NOT NULL,"
+ " `packed_rivals` text NOT NULL,"
+ " `packed_bb` mediumtext NOT NULL,"
+ " `cape_url` varchar(255) NOT NULL,"
+ " `flags` text NOT NULL,"
+ " `balance` double(64,2) default 0.0,"
+ " `fee_enabled` tinyint(1) default '0',"
+ " `fee_value` double(64,2),"
+ " `ranks` text NOT NULL,"
+ " `banner` text,"
+ " PRIMARY KEY (`id`),"
+ " UNIQUE (`tag`));";
core.execute(query);
}
if (!core.existsTable("sc_players")) {
SimpleClans.log("Creating table: sc_players");
plugin.getLogger().info("Creating table: sc_players");
String query = "CREATE TABLE IF NOT EXISTS `sc_players` ( `id` bigint(20), `name` varchar(16) NOT NULL, `leader` tinyint(1) default '0', `tag` varchar(25) NOT NULL, `friendly_fire` tinyint(1) default '0', `neutral_kills` int(11) default NULL, `rival_kills` int(11) default NULL, `civilian_kills` int(11) default NULL, `deaths` int(11) default NULL, `last_seen` bigint NOT NULL, `join_date` bigint NOT NULL, `trusted` tinyint(1) default '0', `flags` text NOT NULL, `packed_past_clans` text, PRIMARY KEY (`id`), UNIQUE (`name`));";
String query = "CREATE TABLE IF NOT EXISTS `sc_players` ("
+ " `id` bigint(20),"
+ " `name` varchar(16) NOT NULL,"
+ " `leader` tinyint(1) default '0',"
+ " `tag` varchar(25) NOT NULL,"
+ " `friendly_fire` tinyint(1) default '0',"
+ " `neutral_kills` int(11) default NULL,"
+ " `rival_kills` int(11) default NULL,"
+ " `civilian_kills` int(11) default NULL,"
+ " `deaths` int(11) default NULL,"
+ " `last_seen` bigint NOT NULL,"
+ " `join_date` bigint NOT NULL,"
+ " `trusted` tinyint(1) default '0',"
+ " `flags` text NOT NULL,"
+ " `packed_past_clans` text,"
+ " `resign_times` text,"
+ " `locale` varchar(10),"
+ " PRIMARY KEY (`id`),"
+ " UNIQUE (`name`));";
core.execute(query);
}
if (!core.existsTable("sc_kills")) {
SimpleClans.log("Creating table: sc_kills");
plugin.getLogger().info("Creating table: sc_kills");
String query = "CREATE TABLE IF NOT EXISTS `sc_kills` ( `kill_id` bigint(20), `attacker` varchar(16) NOT NULL, `attacker_tag` varchar(16) NOT NULL, `victim` varchar(16) NOT NULL, `victim_tag` varchar(16) NOT NULL, `kill_type` varchar(1) NOT NULL, PRIMARY KEY (`kill_id`));";
String query = "CREATE TABLE IF NOT EXISTS `sc_kills` ("
+ " `kill_id` bigint(20),"
+ " `attacker` varchar(16) NOT NULL,"
+ " `attacker_tag` varchar(16) NOT NULL,"
+ " `victim` varchar(16) NOT NULL,"
+ " `victim_tag` varchar(16) NOT NULL,"
+ " `kill_type` varchar(1) NOT NULL,"
+ " PRIMARY KEY (`kill_id`));";
core.execute(query);
}
} else {
SimpleClans.getInstance().getServer().getConsoleSender().sendMessage("[SimpleClans] " + ChatColor.RED + plugin.getLang("sqlite.connection.failed"));
SimpleClans.getInstance().getServer().getConsoleSender().sendMessage("[SimpleClans] " + ChatColor.RED + lang("sqlite.connection.failed"));
}
}
}
@@ -162,7 +255,7 @@ public final class StorageManager {
}
if (!clans.isEmpty()) {
SimpleClans.log(MessageFormat.format("[SimpleClans] " + plugin.getLang("clans"), clans.size()));
plugin.getLogger().info(MessageFormat.format(lang("clans"), clans.size()));
}
List<ClanPlayer> cps = retrieveClanPlayers();
@@ -178,7 +271,7 @@ public final class StorageManager {
}
if (!cps.isEmpty()) {
SimpleClans.log(MessageFormat.format("[SimpleClans] " + plugin.getLang("clan.players"), cps.size()));
plugin.getLogger().info(MessageFormat.format(lang("clan.players"), cps.size()));
}
}
@@ -200,8 +293,8 @@ public final class StorageManager {
tm.importMember(cp);
}
plugin.getClanManager().importClanPlayer(cp);
SimpleClans.log("[SimpleClans] ClanPlayer Reloaded: " + player.getName() + ", UUID: " + player.getUniqueId().toString());
plugin.getLogger().info("ClanPlayer Reloaded: " + player.getName() + ", UUID: " + player.getUniqueId().toString());
}
}
@@ -221,7 +314,7 @@ public final class StorageManager {
}
for (Clan clan : purge) {
SimpleClans.log("[SimpleClans] " + MessageFormat.format(plugin.getLang("purging.clan"), clan.getName()));
plugin.getLogger().info(MessageFormat.format(lang("purging.clan"), clan.getName()));
deleteClan(clan);
clans.remove(clan);
}
@@ -237,7 +330,7 @@ public final class StorageManager {
}
for (ClanPlayer cp : purge) {
SimpleClans.log("[SimpleClans] " + MessageFormat.format(plugin.getLang("purging.player.data"), cp.getName()));
plugin.getLogger().info(MessageFormat.format(lang("purging.player.data"), cp.getName()));
deleteClanPlayer(cp);
cps.remove(cp);
}
@@ -263,14 +356,19 @@ public final class StorageManager {
String tag = res.getString("tag");
String color_tag = Helper.parseColors(res.getString("color_tag"));
String name = res.getString("name");
String description = res.getString("description");
String packed_allies = res.getString("packed_allies");
String packed_rivals = res.getString("packed_rivals");
String packed_bb = res.getString("packed_bb");
String cape_url = res.getString("cape_url");
String flags = res.getString("flags");
String ranks = res.getString("ranks");
long founded = res.getLong("founded");
long last_used = res.getLong("last_used");
double balance = res.getDouble("balance");
double feeValue = res.getDouble("fee_value");
boolean feeEnabled = res.getBoolean("fee_enabled");
ItemStack banner = YAMLSerializer.deserialize(res.getString("banner"), ItemStack.class);
if (founded == 0) {
founded = (new Date()).getTime();
@@ -287,6 +385,7 @@ public final class StorageManager {
clan.setTag(tag);
clan.setColorTag(color_tag);
clan.setName(name);
clan.setDescription(description);
clan.setPackedAllies(packed_allies);
clan.setPackedRivals(packed_rivals);
clan.setPackedBb(packed_bb);
@@ -294,6 +393,10 @@ public final class StorageManager {
clan.setFounded(founded);
clan.setLastUsed(last_used);
clan.setBalance(balance);
clan.setMemberFee(feeValue);
clan.setMemberFeeEnabled(feeEnabled);
clan.setRanks(Helper.ranksFromJson(ranks));
clan.setBanner(banner);
out.add(clan);
} catch (Exception ex) {
@@ -303,8 +406,8 @@ public final class StorageManager {
}
}
} catch (SQLException ex) {
SimpleClans.getLog().severe(String.format("An Error occurred: %s", ex.getErrorCode()));
SimpleClans.getLog().log(Level.SEVERE, null, ex);
plugin.getLogger().severe(String.format("An Error occurred: %s", ex.getErrorCode()));
plugin.getLogger().log(Level.SEVERE, null, ex);
}
}
@@ -333,14 +436,19 @@ public final class StorageManager {
String tag = res.getString("tag");
String color_tag = Helper.parseColors(res.getString("color_tag"));
String name = res.getString("name");
String description = res.getString("description");
String packed_allies = res.getString("packed_allies");
String packed_rivals = res.getString("packed_rivals");
String packed_bb = res.getString("packed_bb");
String cape_url = res.getString("cape_url");
String flags = res.getString("flags");
String ranks = res.getString("ranks");
long founded = res.getLong("founded");
long last_used = res.getLong("last_used");
double balance = res.getDouble("balance");
double feeValue = res.getDouble("fee_value");
boolean feeEnabled = res.getBoolean("fee_enabled");
ItemStack banner = YAMLSerializer.deserialize(res.getString("banner"), ItemStack.class);
if (founded == 0) {
founded = (new Date()).getTime();
@@ -357,6 +465,7 @@ public final class StorageManager {
clan.setTag(tag);
clan.setColorTag(color_tag);
clan.setName(name);
clan.setDescription(description);
clan.setPackedAllies(packed_allies);
clan.setPackedRivals(packed_rivals);
clan.setPackedBb(packed_bb);
@@ -364,6 +473,10 @@ public final class StorageManager {
clan.setFounded(founded);
clan.setLastUsed(last_used);
clan.setBalance(balance);
clan.setMemberFee(feeValue);
clan.setMemberFeeEnabled(feeEnabled);
clan.setRanks(Helper.ranksFromJson(ranks));
clan.setBanner(banner);
out = clan;
} catch (Exception ex) {
@@ -373,8 +486,8 @@ public final class StorageManager {
}
}
} catch (SQLException ex) {
SimpleClans.getLog().severe(String.format("An Error occurred: %s", ex.getErrorCode()));
SimpleClans.getLog().log(Level.SEVERE, null, ex);
plugin.getLogger().severe(String.format("An Error occurred: %s", ex.getErrorCode()));
plugin.getLogger().log(Level.SEVERE, null, ex);
}
}
@@ -410,6 +523,8 @@ public final class StorageManager {
long join_date = res.getLong("join_date");
String flags = res.getString("flags");
String packed_past_clans = Helper.parseColors(res.getString("packed_past_clans"));
String resign_times = res.getString("resign_times");
Locale locale = Helper.forLanguageTag(res.getString("locale"));
if (last_seen == 0) {
last_seen = (new Date()).getTime();
@@ -435,6 +550,8 @@ public final class StorageManager {
cp.setJoinDate(join_date);
cp.setPackedPastClans(packed_past_clans);
cp.setTrusted(leader || trusted);
cp.setResignTimes(Helper.resignTimesFromJson(resign_times));
cp.setLocale(locale);
if (!tag.isEmpty()) {
Clan clan = SimpleClans.getInstance().getClanManager().getClan(tag);
@@ -452,8 +569,8 @@ public final class StorageManager {
}
}
} catch (SQLException ex) {
SimpleClans.getLog().severe(String.format("An Error occurred: %s", ex.getErrorCode()));
SimpleClans.getLog().log(Level.SEVERE, null, ex);
plugin.getLogger().severe(String.format("An Error occurred: %s", ex.getErrorCode()));
plugin.getLogger().log(Level.SEVERE, null, ex);
}
}
@@ -491,6 +608,8 @@ public final class StorageManager {
long join_date = res.getLong("join_date");
String flags = res.getString("flags");
String packed_past_clans = Helper.parseColors(res.getString("packed_past_clans"));
String resign_times = res.getString("resign_times");
Locale locale = Helper.forLanguageTag(res.getString("locale"));
if (last_seen == 0) {
last_seen = (new Date()).getTime();
@@ -516,6 +635,8 @@ public final class StorageManager {
cp.setJoinDate(join_date);
cp.setPackedPastClans(packed_past_clans);
cp.setTrusted(leader || trusted);
cp.setResignTimes(Helper.resignTimesFromJson(resign_times));
cp.setLocale(locale);
if (!tag.isEmpty()) {
Clan clanDB = retrieveOneClan(tag);
@@ -553,8 +674,8 @@ public final class StorageManager {
}
}
} catch (SQLException ex) {
SimpleClans.getLog().severe(String.format("An Error occurred: %s", ex.getErrorCode()));
SimpleClans.getLog().log(Level.SEVERE, null, ex);
plugin.getLogger().severe(String.format("An Error occurred: %s", ex.getErrorCode()));
plugin.getLogger().log(Level.SEVERE, null, ex);
}
}
@@ -567,8 +688,28 @@ public final class StorageManager {
* @param clan
*/
public void insertClan(Clan clan) {
String query = "INSERT INTO `sc_clans` ( `verified`, `tag`, `color_tag`, `name`, `friendly_fire`, `founded`, `last_used`, `packed_allies`, `packed_rivals`, `packed_bb`, `cape_url`, `flags`, `balance`) ";
String values = "VALUES ( " + (clan.isVerified() ? 1 : 0) + ",'" + Helper.escapeQuotes(clan.getTag()) + "','" + Helper.escapeQuotes(clan.getColorTag()) + "','" + Helper.escapeQuotes(clan.getName()) + "'," + (clan.isFriendlyFire() ? 1 : 0) + ",'" + clan.getFounded() + "','" + clan.getLastUsed() + "','" + Helper.escapeQuotes(clan.getPackedAllies()) + "','" + Helper.escapeQuotes(clan.getPackedRivals()) + "','" + Helper.escapeQuotes(clan.getPackedBb()) + "','" + Helper.escapeQuotes(clan.getCapeUrl()) + "','" + Helper.escapeQuotes(clan.getFlags()) + "','" + Helper.escapeQuotes(String.valueOf(clan.getBalance())) + "');";
String query = "INSERT INTO `sc_clans` (`banner`, `ranks`, `description`, `fee_enabled`, `fee_value`, `verified`, `tag`," +
" `color_tag`, `name`, `friendly_fire`, `founded`, `last_used`, `packed_allies`, `packed_rivals`, " +
"`packed_bb`, `cape_url`, `flags`, `balance`) ";
String values = "VALUES ( '"
+ Helper.escapeQuotes(YAMLSerializer.serialize(clan.getBanner())) + "','"
+ Helper.escapeQuotes(Helper.ranksToJson(clan.getRanks())) + "','"
+ Helper.escapeQuotes(clan.getDescription())+ "',"
+ (clan.isMemberFeeEnabled() ? 1 : 0) +","
+ Helper.escapeQuotes(String.valueOf(clan.getMemberFee())) + ","
+ (clan.isVerified() ? 1 : 0) + ",'"
+ Helper.escapeQuotes(clan.getTag()) + "','"
+ Helper.escapeQuotes(clan.getColorTag()) + "','"
+ Helper.escapeQuotes(clan.getName()) + "',"
+ (clan.isFriendlyFire() ? 1 : 0) + ",'"
+ clan.getFounded() + "','"
+ clan.getLastUsed() + "','"
+ Helper.escapeQuotes(clan.getPackedAllies()) + "','"
+ Helper.escapeQuotes(clan.getPackedRivals()) + "','"
+ Helper.escapeQuotes(clan.getPackedBb()) + "','"
+ Helper.escapeQuotes(clan.getCapeUrl()) + "','"
+ Helper.escapeQuotes(clan.getFlags()) + "','"
+ Helper.escapeQuotes(String.valueOf(clan.getBalance())) + "');";
core.insert(query + values);
}
@@ -577,14 +718,14 @@ public final class StorageManager {
*
* @param clan
*/
@SuppressWarnings("deprecation")
@Deprecated
public void updateClanAsync(final Clan clan) {
plugin.getServer().getScheduler().scheduleAsyncDelayedTask(plugin, new Runnable() {
new BukkitRunnable() {
@Override
public void run() {
updateClan(clan);
}
});
}.runTaskAsynchronously(plugin);
}
/**
@@ -592,18 +733,17 @@ public final class StorageManager {
*
* @param p to update
*/
@SuppressWarnings("deprecation")
public void updatePlayerNameAsync(final Player p) {
plugin.getServer().getScheduler().scheduleAsyncDelayedTask(plugin, new Runnable() {
@Override
public void run() {
new BukkitRunnable() {
@Override
public void run() {
updatePlayerName(p);
}
});
}
}.runTaskAsynchronously(plugin);
}
/**
* Change the name of a player in the database asynchronously
* Change the name of a player in the database
*
* @param p to update
*/
@@ -618,9 +758,7 @@ public final class StorageManager {
* @param clan
*/
public void updateClan(Clan clan) {
clan.updateLastUsed();
String query = "UPDATE `sc_clans` SET verified = " + (clan.isVerified() ? 1 : 0) + ", tag = '" + Helper.escapeQuotes(clan.getTag()) + "', color_tag = '" + Helper.escapeQuotes(clan.getColorTag()) + "', name = '" + Helper.escapeQuotes(clan.getName()) + "', friendly_fire = " + (clan.isFriendlyFire() ? 1 : 0) + ", founded = '" + clan.getFounded() + "', last_used = '" + clan.getLastUsed() + "', packed_allies = '" + Helper.escapeQuotes(clan.getPackedAllies()) + "', packed_rivals = '" + Helper.escapeQuotes(clan.getPackedRivals()) + "', packed_bb = '" + Helper.escapeQuotes(clan.getPackedBb()) + "', cape_url = '" + Helper.escapeQuotes(clan.getCapeUrl()) + "', cape_url = '" + Helper.escapeQuotes(String.valueOf(clan.getCapeUrl())) + "', balance = '" + clan.getBalance() + "', flags = '" + Helper.escapeQuotes(clan.getFlags()) + "' WHERE tag = '" + Helper.escapeQuotes(clan.getTag()) + "';";
core.update(query);
updateClan(clan, true);
}
/**
@@ -633,9 +771,37 @@ public final class StorageManager {
public void updateClan(Clan clan, boolean updateLastUsed) {
if (updateLastUsed) {
clan.updateLastUsed();
}
String query = "UPDATE `sc_clans` SET verified = " + (clan.isVerified() ? 1 : 0) + ", tag = '" + Helper.escapeQuotes(clan.getTag()) + "', color_tag = '" + Helper.escapeQuotes(clan.getColorTag()) + "', name = '" + Helper.escapeQuotes(clan.getName()) + "', friendly_fire = " + (clan.isFriendlyFire() ? 1 : 0) + ", founded = '" + clan.getFounded() + "', last_used = '" + clan.getLastUsed() + "', packed_allies = '" + Helper.escapeQuotes(clan.getPackedAllies()) + "', packed_rivals = '" + Helper.escapeQuotes(clan.getPackedRivals()) + "', packed_bb = '" + Helper.escapeQuotes(clan.getPackedBb()) + "', cape_url = '" + Helper.escapeQuotes(clan.getCapeUrl()) + "', cape_url = '" + Helper.escapeQuotes(String.valueOf(clan.getCapeUrl())) + "', balance = '" + clan.getBalance() + "', flags = '" + Helper.escapeQuotes(clan.getFlags()) + "' WHERE tag = '" + Helper.escapeQuotes(clan.getTag()) + "';";
core.update(query);
}
if (plugin.getSettingsManager().isSavePeriodically()) {
modifiedClans.add(clan);
return;
}
core.update(getUpdateClanQuery(clan));
}
private String getUpdateClanQuery(Clan clan) {
String query = "UPDATE `sc_clans`" +
" SET ranks = '"+ Helper.escapeQuotes(Helper.ranksToJson(clan.getRanks())) +"'," +
" banner = '" + Helper.escapeQuotes(YAMLSerializer.serialize(clan.getBanner())) + "'," +
" description = '" + Helper.escapeQuotes(clan.getDescription())+ "'," +
" fee_enabled = "+ (clan.isMemberFeeEnabled() ? 1 : 0) +"," +
" fee_value = '" + clan.getMemberFee() + "'," +
" verified = " + (clan.isVerified() ? 1 : 0) + "," +
" tag = '" + Helper.escapeQuotes(clan.getTag()) + "'," +
" color_tag = '" + Helper.escapeQuotes(clan.getColorTag()) + "'," +
" name = '" + Helper.escapeQuotes(clan.getName()) + "'," +
" friendly_fire = " + (clan.isFriendlyFire() ? 1 : 0) + "," +
" founded = '" + clan.getFounded() + "'," +
" last_used = '" + clan.getLastUsed() + "'," +
" packed_allies = '" + Helper.escapeQuotes(clan.getPackedAllies()) + "'," +
" packed_rivals = '" + Helper.escapeQuotes(clan.getPackedRivals()) + "'," +
" packed_bb = '" + Helper.escapeQuotes(clan.getPackedBb()) + "'," +
" cape_url = '" + Helper.escapeQuotes(clan.getCapeUrl()) + "'," +
" cape_url = '" + Helper.escapeQuotes(String.valueOf(clan.getCapeUrl())) + "'," +
" balance = '" + clan.getBalance() + "'," +
" flags = '" + Helper.escapeQuotes(clan.getFlags())
+ "' WHERE tag = '" + Helper.escapeQuotes(clan.getTag()) + "';";
return query;
}
/**
@@ -654,15 +820,9 @@ public final class StorageManager {
* @param cp
*/
public void insertClanPlayer(ClanPlayer cp) {
if (SimpleClans.getInstance().hasUUID()) {
String query = "INSERT INTO `sc_players` ( `uuid`, `name`, `leader`, `tag`, `friendly_fire`, `neutral_kills`, `rival_kills`, `civilian_kills`, `deaths`, `last_seen`, `join_date`, `packed_past_clans`, `flags`) ";
String values = "VALUES ( '" + cp.getUniqueId().toString() + "', '" + cp.getName() + "'," + (cp.isLeader() ? 1 : 0) + ",'" + Helper.escapeQuotes(cp.getTag()) + "'," + (cp.isFriendlyFire() ? 1 : 0) + "," + cp.getNeutralKills() + "," + cp.getRivalKills() + "," + cp.getCivilianKills() + "," + cp.getDeaths() + ",'" + cp.getLastSeen() + "',' " + cp.getJoinDate() + "','" + Helper.escapeQuotes(cp.getPackedPastClans()) + "','" + Helper.escapeQuotes(cp.getFlags()) + "');";
core.insert(query + values);
} else {
String query = "INSERT INTO `sc_players` ( `name`, `leader`, `tag`, `friendly_fire`, `neutral_kills`, `rival_kills`, `civilian_kills`, `deaths`, `last_seen`, `join_date`, `packed_past_clans`, `flags`) ";
String values = "VALUES ( '" + cp.getName() + "'," + (cp.isLeader() ? 1 : 0) + ",'" + Helper.escapeQuotes(cp.getTag()) + "'," + (cp.isFriendlyFire() ? 1 : 0) + "," + cp.getNeutralKills() + "," + cp.getRivalKills() + "," + cp.getCivilianKills() + "," + cp.getDeaths() + ",'" + cp.getLastSeen() + "',' " + cp.getJoinDate() + "','" + Helper.escapeQuotes(cp.getPackedPastClans()) + "','" + Helper.escapeQuotes(cp.getFlags()) + "');";
core.insert(query + values);
}
String query = "INSERT INTO `sc_players` (`locale`, `resign_times`, `uuid`, `name`, `leader`, `tag`, `friendly_fire`, `neutral_kills`, `rival_kills`, `civilian_kills`, `deaths`, `last_seen`, `join_date`, `packed_past_clans`, `flags`) ";
String values = "VALUES ('"+cp.getLocale().toLanguageTag()+"', '"+ Helper.escapeQuotes(Helper.resignTimesToJson(cp.getResignTimes()))+ "', '" + cp.getUniqueId().toString() + "', '" + cp.getName() + "'," + (cp.isLeader() ? 1 : 0) + ",'" + Helper.escapeQuotes(cp.getTag()) + "'," + (cp.isFriendlyFire() ? 1 : 0) + "," + cp.getNeutralKills() + "," + cp.getRivalKills() + "," + cp.getCivilianKills() + "," + cp.getDeaths() + ",'" + cp.getLastSeen() + "',' " + cp.getJoinDate() + "','" + Helper.escapeQuotes(cp.getPackedPastClans()) + "','" + Helper.escapeQuotes(cp.getFlags()) + "');";
core.insert(query + values);
}
/**
@@ -670,14 +830,14 @@ public final class StorageManager {
*
* @param cp
*/
@SuppressWarnings("deprecation")
@Deprecated
public void updateClanPlayerAsync(final ClanPlayer cp) {
plugin.getServer().getScheduler().scheduleAsyncDelayedTask(plugin, new Runnable() {
@Override
public void run() {
new BukkitRunnable() {
@Override
public void run() {
updateClanPlayer(cp);
}
});
}
}.runTaskAsynchronously(plugin);
}
/**
@@ -687,13 +847,24 @@ public final class StorageManager {
*/
public void updateClanPlayer(ClanPlayer cp) {
cp.updateLastSeen();
if (SimpleClans.getInstance().hasUUID()) {
String query = "UPDATE `sc_players` SET leader = " + (cp.isLeader() ? 1 : 0) + ", tag = '" + Helper.escapeQuotes(cp.getTag()) + "' , friendly_fire = " + (cp.isFriendlyFire() ? 1 : 0) + ", neutral_kills = " + cp.getNeutralKills() + ", rival_kills = " + cp.getRivalKills() + ", civilian_kills = " + cp.getCivilianKills() + ", deaths = " + cp.getDeaths() + ", last_seen = '" + cp.getLastSeen() + "', packed_past_clans = '" + Helper.escapeQuotes(cp.getPackedPastClans()) + "', trusted = " + (cp.isTrusted() ? 1 : 0) + ", flags = '" + Helper.escapeQuotes(cp.getFlags()) + "', name = '" + cp.getName() + "' WHERE `uuid` = '" + cp.getUniqueId().toString() + "';";
core.update(query);
} else {
String query = "UPDATE `sc_players` SET leader = " + (cp.isLeader() ? 1 : 0) + ", tag = '" + Helper.escapeQuotes(cp.getTag()) + "' , friendly_fire = " + (cp.isFriendlyFire() ? 1 : 0) + ", neutral_kills = " + cp.getNeutralKills() + ", rival_kills = " + cp.getRivalKills() + ", civilian_kills = " + cp.getCivilianKills() + ", deaths = " + cp.getDeaths() + ", last_seen = '" + cp.getLastSeen() + "', packed_past_clans = '" + Helper.escapeQuotes(cp.getPackedPastClans()) + "', trusted = " + (cp.isTrusted() ? 1 : 0) + ", flags = '" + Helper.escapeQuotes(cp.getFlags()) + "' WHERE name = '" + cp.getName() + "';";
core.update(query);
if (plugin.getSettingsManager().isSavePeriodically()) {
modifiedClanPlayers.add(cp);
return;
}
core.update(getUpdateClanPlayerQuery(cp));
}
private String getUpdateClanPlayerQuery(ClanPlayer cp) {
return "UPDATE `sc_players` SET" +
" locale = '" + cp.getLocale().toLanguageTag() + "'," +
" resign_times = '"+ Helper.escapeQuotes(Helper.resignTimesToJson(cp.getResignTimes())) +"'," +
" leader = " + (cp.isLeader() ? 1 : 0) + ", tag = '" + Helper.escapeQuotes(cp.getTag()) + "'," +
" friendly_fire = " + (cp.isFriendlyFire() ? 1 : 0) + ", neutral_kills = " + cp.getNeutralKills() + "," +
" rival_kills = " + cp.getRivalKills() + ", civilian_kills = " + cp.getCivilianKills() + "," +
" deaths = " + cp.getDeaths() + ", last_seen = '" + cp.getLastSeen() + "'," +
" packed_past_clans = '" + Helper.escapeQuotes(cp.getPackedPastClans()) + "'," +
" trusted = " + (cp.isTrusted() ? 1 : 0) + ", flags = '" + Helper.escapeQuotes(cp.getFlags()) + "'," +
" name = '" + cp.getName() + "' WHERE `uuid` = '" + cp.getUniqueId().toString() + "';";
}
/**
@@ -702,17 +873,16 @@ public final class StorageManager {
* @param cp
*/
public void deleteClanPlayer(ClanPlayer cp) {
if (SimpleClans.getInstance().hasUUID()) {
String query = "DELETE FROM `sc_players` WHERE uuid = '" + cp.getUniqueId() + "';";
core.delete(query);
deleteKills(cp.getUniqueId());
} else {
String query = "DELETE FROM `sc_players` WHERE name = '" + cp.getName() + "';";
core.delete(query);
deleteKills(cp.getName());
final Clan clan = cp.getClan();
if (clan != null) {
clan.addBbWithoutSaving(ChatColor.AQUA + MessageFormat.format(lang("has.been.purged"), cp.getName()));
updateClan(clan, false);
}
String query = "DELETE FROM `sc_players` WHERE uuid = '" + cp.getUniqueId() + "';";
core.delete(query);
deleteKills(cp.getUniqueId());
}
/**
* Insert a kill into the database
*
@@ -722,16 +892,26 @@ public final class StorageManager {
* @param victimTag
* @param type
*/
@Deprecated
public void insertKill(Player attacker, String attackerTag, Player victim, String victimTag, String type) {
if (SimpleClans.getInstance().hasUUID()) {
String query = "INSERT INTO `sc_kills` ( `attacker_uuid`, `attacker`, `attacker_tag`, `victim_uuid`, `victim`, `victim_tag`, `kill_type`) ";
String values = "VALUES ( '" + attacker.getUniqueId() + "','" + attacker.getName() + "','" + attackerTag + "','" + victim.getUniqueId() + "','" + victim.getName() + "','" + victimTag + "','" + type + "');";
core.insert(query + values);
} else {
String query = "INSERT INTO `sc_kills` ( `attacker`, `attacker_tag`, `victim`, `victim_tag`, `kill_type`) ";
String values = "VALUES ( '" + attacker.getName() + "','" + attackerTag + "','" + victim.getName() + "','" + victimTag + "','" + type + "');";
core.insert(query + values);
}
String query = "INSERT INTO `sc_kills` ( `attacker_uuid`, `attacker`, `attacker_tag`, `victim_uuid`, `victim`, `victim_tag`, `kill_type`) ";
String values = "VALUES ( '" + attacker.getUniqueId() + "','" + attacker.getName() + "','" + attackerTag + "','" + victim.getUniqueId() + "','" + victim.getName() + "','" + victimTag + "','" + type + "');";
core.insert(query + values);
}
/**
* Insert a kill into the database
*
* @param attacker the attacker
* @param victim the victim
* @param type the kill type
*/
public void insertKill(@NotNull ClanPlayer attacker, @NotNull ClanPlayer victim, @NotNull String type) {
String query = "INSERT INTO `sc_kills` ( `attacker_uuid`, `attacker`, `attacker_tag`, `victim_uuid`, " +
"`victim`, `victim_tag`, `kill_type`) ";
String values = "VALUES ( '" + attacker.getUniqueId() + "','" + attacker.getName() + "','" + attacker.getTag()
+ "','" + victim.getUniqueId() + "','" + victim.getName() + "','" + victim.getTag() + "','" + type + "');";
core.insert(query + values);
}
/**
@@ -775,14 +955,14 @@ public final class StorageManager {
int kills = res.getInt("kills");
out.put(victim, kills);
} catch (Exception ex) {
SimpleClans.getLog().info(ex.getMessage());
plugin.getLogger().info(ex.getMessage());
}
}
} catch (SQLException ex) {
SimpleClans.getLog().severe(String.format("An Error occurred: %s", ex.getErrorCode()));
SimpleClans.getLog().log(Level.SEVERE, null, ex);
plugin.getLogger().severe(String.format("An Error occurred: %s", ex.getErrorCode()));
plugin.getLogger().log(Level.SEVERE, null, ex);
}
}
@@ -809,20 +989,65 @@ public final class StorageManager {
int kills = res.getInt("kills");
out.put(attacker + " " + victim, kills);
} catch (Exception ex) {
SimpleClans.getLog().info(ex.getMessage());
plugin.getLogger().info(ex.getMessage());
}
}
} catch (SQLException ex) {
SimpleClans.getLog().severe(String.format("An Error occurred: %s", ex.getErrorCode()));
SimpleClans.getLog().log(Level.SEVERE, null, ex);
plugin.getLogger().severe(String.format("An Error occurred: %s", ex.getErrorCode()));
plugin.getLogger().log(Level.SEVERE, null, ex);
}
}
return out;
}
/**
* Gets, asynchronously, a map of tag->count of all kills and notifies via callback when it's ready
*
* @param callback
*/
public void getMostKilled(DataCallback<Map<String, Integer>> callback) {
new BukkitRunnable() {
@Override
public void run() {
callback.onResultReady(getMostKilled());
}
}.runTaskAsynchronously(plugin);
}
/**
* Gets, asynchronously, a map of victim->count of all kills that specific player did and notifies via callback when it's ready
*
* @param playerName
* @param callback
*/
public void getKillsPerPlayer(final String playerName, final DataCallback<Map<String, Integer>> callback) {
new BukkitRunnable() {
@Override
public void run() {
callback.onResultReady(getKillsPerPlayer(playerName));
}
}.runTaskAsynchronously(plugin);
}
/**
* Callback that returns some data
*
* @author roinujnosde
*
*/
public interface DataCallback<T> {
/**
* Notifies when the result is ready
*
* @param data
*/
void onResultReady(T data);
}
/**
* Updates the database to the latest version
*
@@ -838,6 +1063,51 @@ public final class StorageManager {
query = "ALTER TABLE sc_clans ADD COLUMN `balance` double(64,2);";
core.execute(query);
}
/**
* From 2.7.16 to 2.7.17
*/
if (!core.existsColumn("sc_clans", "fee_enabled")) {
query = "ALTER TABLE sc_clans ADD COLUMN `fee_enabled` tinyint(1) default '0';";
core.execute(query);
}
if (!core.existsColumn("sc_clans", "fee_value")) {
query = "ALTER TABLE sc_clans ADD COLUMN `fee_value` double(64,2);";
core.execute(query);
}
/**
* From 2.7.21 to 2.7.22
*/
if (!core.existsColumn("sc_clans", "description")) {
query = "ALTER TABLE sc_clans ADD COLUMN `description` varchar(255);";
core.execute(query);
}
/**
* From 2.7.22 to 2.7.23
*/
if (!core.existsColumn("sc_players", "resign_times")) {
query = "ALTER TABLE sc_players ADD COLUMN `resign_times` text;";
core.execute(query);
}
/**
* From 2.8.2 to 2.9
*/
if (!core.existsColumn("sc_clans", "ranks")) {
query = "ALTER TABLE sc_clans ADD COLUMN `ranks` text;";
core.execute(query);
}
// From 2.12.1 to 2.13.0
if (!core.existsColumn("sc_players", "locale")) {
query = "ALTER TABLE sc_players ADD COLUMN `locale` varchar(10);";
core.execute(query);
}
if (!core.existsColumn("sc_clans", "banner")) {
core.execute("ALTER TABLE sc_clans ADD COLUMN `banner` text;");
}
/**
* Bukkit 1.7.5+ UUID Migration
@@ -876,11 +1146,12 @@ public final class StorageManager {
*
* @param
*/
private void updatePlayersToUUID() {
SimpleClans.log("[SimpleClans] Starting Migration to UUID Players !");
SimpleClans.log("[SimpleClans] ==================== ATTENTION DONT STOP BUKKIT ! ==================== ");
SimpleClans.log("[SimpleClans] ==================== ATTENTION DONT STOP BUKKIT ! ==================== ");
SimpleClans.log("[SimpleClans] ==================== ATTENTION DONT STOP BUKKIT ! ==================== ");
private void updatePlayersToUUID() {
plugin.getLogger().log(Level.WARNING, "Starting Migration to UUID Players !");
plugin.getLogger().log(Level.WARNING, "==================== ATTENTION DONT STOP BUKKIT ! ==================== ");
plugin.getLogger().log(Level.WARNING, "==================== ATTENTION DONT STOP BUKKIT ! ==================== ");
plugin.getLogger().log(Level.WARNING, "==================== ATTENTION DONT STOP BUKKIT ! ==================== ");
SimpleClans.getInstance().setUUID(false);
List<ClanPlayer> cps = retrieveClanPlayers();
@@ -901,20 +1172,53 @@ public final class StorageManager {
String query3 = "UPDATE `sc_kills` SET victim_uuid = '" + uuidPlayer.toString() + "' WHERE victim = '" + cp.getName() + "';";
core.update(query3);
SimpleClans.log("[" + i + " / " + cps.size() + "] Success: " + cp.getName() + "; UUID: " + uuidPlayer.toString());
plugin.getLogger().info("[" + i + " / " + cps.size() + "] Success: " + cp.getName() + "; UUID: " + uuidPlayer.toString());
} catch (Exception ex) {
SimpleClans.log("[" + i + " / " + cps.size() + "] Failed [ERRO]: " + cp.getName() + "; UUID: ???");
plugin.getLogger().log(Level.WARNING, "[" + i + " / " + cps.size() + "] Failed [ERRO]: " + cp.getName() + "; UUID: ???");
}
i++;
}
SimpleClans.log("[SimpleClans] ==================== END OF MIGRATION ====================");
SimpleClans.log("[SimpleClans] ==================== END OF MIGRATION ====================");
SimpleClans.log("[SimpleClans] ==================== END OF MIGRATION ====================");
plugin.getLogger().log(Level.WARNING, "==================== END OF MIGRATION ====================");
plugin.getLogger().log(Level.WARNING, "==================== END OF MIGRATION ====================");
plugin.getLogger().log(Level.WARNING, "==================== END OF MIGRATION ====================");
if (!cps.isEmpty()) {
SimpleClans.log(MessageFormat.format("[SimpleClans] " + plugin.getLang("clan.players"), cps.size()));
plugin.getLogger().info(MessageFormat.format(lang("clan.players"), cps.size()));
}
SimpleClans.getInstance().setUUID(true);
}
/**
* Saves modified Clans and ClanPlayers to the database
*
* @author RoinujNosde
* @since 2.10.2
*/
public void saveModified() {
try (Statement statement = core.getConnection().createStatement()) {
List<Clan> allClans = plugin.getClanManager().getClans();
for (Clan clan : modifiedClans) {
if (!allClans.contains(clan)) {
continue;
}
statement.addBatch(getUpdateClanQuery(clan));
}
List<ClanPlayer> allClanPlayers = plugin.getClanManager().getAllClanPlayers();
for (ClanPlayer cp : modifiedClanPlayers) {
if (!allClanPlayers.contains(cp)) {
continue;
}
statement.addBatch(getUpdateClanPlayerQuery(cp));
}
statement.executeBatch();
modifiedClans.clear();
modifiedClanPlayers.clear();
} catch (SQLException e) {
plugin.getLogger().severe("Error saving modified Clans and ClanPlayers:");
e.printStackTrace();
}
}
}
@@ -1,13 +1,16 @@
package net.sacredlabyrinth.phaed.simpleclans.managers;
import io.papermc.lib.PaperLib;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import net.sacredlabyrinth.phaed.simpleclans.TeleportState;
import org.bukkit.ChatColor;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.player.PlayerTeleportEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.PlayerInventory;
@@ -15,6 +18,7 @@ import java.text.MessageFormat;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
public final class TeleportManager {
private SimpleClans plugin;
@@ -36,17 +40,13 @@ public final class TeleportManager {
* @param clanName
*/
public void addPlayer(Player player, Location dest, String clanName) {
int secs = SimpleClans.getInstance().getSettingsManager().getWaitSecs();
int secs = SimpleClans.getInstance().getSettingsManager().getWaitSecs();
waitingPlayers.put(player.getUniqueId().toString(), new TeleportState(player, dest, clanName));
if (SimpleClans.getInstance().hasUUID()) {
waitingPlayers.put(player.getUniqueId().toString(), new TeleportState(player, dest, clanName));
} else {
waitingPlayers.put(player.getName(), new TeleportState(player, dest, clanName));
}
if (secs > 0) {
ChatBlock.sendMessage(player, ChatColor.AQUA + MessageFormat.format(plugin.getLang("waiting.for.teleport.stand.still.for.0.seconds"), secs));
}
if (secs > 0) {
ChatBlock.sendMessage(player, ChatColor.AQUA
+ MessageFormat.format(lang("waiting.for.teleport.stand.still.for.0.seconds",player), secs));
}
}
private void dropItems(Player player) {
@@ -59,9 +59,9 @@ public final class TeleportManager {
continue;
}
List<Integer> itemsList = plugin.getSettingsManager().getItemsList();
List<Material> itemsList = plugin.getSettingsManager().getItemsList();
if (itemsList.contains(item.getTypeId())) {
if (itemsList.contains(item.getType())) {
player.getWorld().dropItemNaturally(player.getLocation(), item);
inv.remove(item);
}
@@ -76,9 +76,9 @@ public final class TeleportManager {
continue;
}
List<Integer> itemsList = plugin.getSettingsManager().getItemsList();
List<Material> itemsList = plugin.getSettingsManager().getItemsList();
if (!itemsList.contains(item.getTypeId())) {
if (!itemsList.contains(item.getType())) {
player.getWorld().dropItemNaturally(player.getLocation(), item);
inv.remove(item);
}
@@ -124,17 +124,23 @@ public final class TeleportManager {
SimpleClans.debug("teleporting");
player.teleport(new Location(loc.getWorld(), loc.getBlockX() + .5, loc.getBlockY(), loc.getBlockZ() + .5));
Location location = new Location(loc.getWorld(), loc.getBlockX() + .5, loc.getBlockY(), loc.getBlockZ() + .5);
PaperLib.teleportAsync(player, location, PlayerTeleportEvent.TeleportCause.COMMAND).thenAccept(result -> {
if (result) {
ChatBlock.sendMessage(player, ChatColor.AQUA + lang("now.at.homebase", player, state.getClanName()));
} else {
plugin.getLogger().log(Level.WARNING, "An error occurred while teleporting a player");
}
});
ChatBlock.sendMessage(player, ChatColor.AQUA + MessageFormat.format(plugin.getLang("now.at.homebase"), state.getClanName()));
} else {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("you.moved.teleport.cancelled"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("you.moved.teleport.cancelled",player));
}
iter.remove();
} else {
if (!Helper.isSameBlock(player.getLocation(), state.getLocation())) {
ChatBlock.sendMessage(player, ChatColor.RED + plugin.getLang("you.moved.teleport.cancelled"));
ChatBlock.sendMessage(player, ChatColor.RED + lang("you.moved.teleport.cancelled",player));
iter.remove();
} else {
ChatBlock.sendMessage(player, ChatColor.AQUA + "" + state.getCounter());
@@ -34,7 +34,7 @@ public class MySQLCore implements DBCore {
this.host = host;
this.username = username;
this.password = password;
this.log = SimpleClans.getLog();
this.log = SimpleClans.getInstance().getLogger();
initialize();
}
@@ -7,6 +7,8 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Logger;
import org.bukkit.scheduler.BukkitRunnable;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
/**
@@ -25,29 +27,33 @@ public class SQLiteCore implements DBCore {
public SQLiteCore(String dbLocation) {
this.dbName = "SimpleClans";
this.dbLocation = dbLocation;
this.log = SimpleClans.getLog();
this.log = SimpleClans.getInstance().getLogger();
initialize();
}
private void initialize() {
if (file == null) {
File dbFolder = new File(dbLocation);
if (dbName.contains("/") || dbName.contains("\\") || dbName.endsWith(".db")) {
log.severe("The database name can not contain: /, \\, or .db");
return;
}
if (!dbFolder.exists()) {
dbFolder.mkdir();
}
file = new File(dbFolder.getAbsolutePath() + File.separator + dbName + ".db");
}
try {
Class.forName("org.sqlite.JDBC");
connection = DriverManager.getConnection("jdbc:sqlite:" + file.getAbsolutePath());
} catch (SQLException ex) {
log.severe("SQLite exception on initialize " + ex);
} catch (ClassNotFoundException ex) {
@@ -98,7 +104,6 @@ public class SQLiteCore implements DBCore {
@Override
public ResultSet select(String query) {
try {
return getConnection().createStatement().executeQuery(query);
} catch (SQLException ex) {
log.severe("Error at SQL Query: " + ex.getMessage());
@@ -114,14 +119,18 @@ public class SQLiteCore implements DBCore {
*/
@Override
public void insert(String query) {
try {
getConnection().createStatement().executeQuery(query);
} catch (SQLException ex) {
if (!ex.toString().contains("not return ResultSet")) {
log.severe("Error at SQL INSERT Query: " + ex);
log.severe("Query: " + query);
}
}
if (SimpleClans.getInstance().getSettingsManager().getUseThreads()) {
executeAsync(query, "INSERT");
} else {
try {
getConnection().createStatement().executeQuery(query);
} catch (SQLException ex) {
if (!ex.toString().contains("not return ResultSet")) {
log.severe("Error at SQL INSERT Query: " + ex);
log.severe("Query: " + query);
}
}
}
}
/**
@@ -131,13 +140,17 @@ public class SQLiteCore implements DBCore {
*/
@Override
public void update(String query) {
try {
getConnection().createStatement().executeQuery(query);
} catch (SQLException ex) {
if (!ex.toString().contains("not return ResultSet")) {
log.severe("Error at SQL UPDATE Query: " + ex);
log.severe("Query: " + query);
}
if (SimpleClans.getInstance().getSettingsManager().getUseThreads()) {
executeAsync(query, "UPDATE");
} else {
try {
getConnection().createStatement().executeQuery(query);
} catch (SQLException ex) {
if (!ex.toString().contains("not return ResultSet")) {
log.severe("Error at SQL UPDATE Query: " + ex);
log.severe("Query: " + query);
}
}
}
}
@@ -148,13 +161,17 @@ public class SQLiteCore implements DBCore {
*/
@Override
public void delete(String query) {
try {
getConnection().createStatement().executeQuery(query);
} catch (SQLException ex) {
if (!ex.toString().contains("not return ResultSet")) {
log.severe("Error at SQL DELETE Query: " + ex);
log.severe("Query: " + query);
}
if (SimpleClans.getInstance().getSettingsManager().getUseThreads()) {
executeAsync(query, "DELETE");
} else {
try {
getConnection().createStatement().executeQuery(query);
} catch (SQLException ex) {
if (!ex.toString().contains("not return ResultSet")) {
log.severe("Error at SQL DELETE Query: " + ex);
log.severe("Query: " + query);
}
}
}
}
@@ -208,4 +225,25 @@ public class SQLiteCore implements DBCore {
return false;
}
}
private void executeAsync(String query, String sqlType) {
new BukkitRunnable() {
@Override
public void run() {
try {
if (connection != null && !connection.isClosed()) {
connection.createStatement().executeUpdate(query);
}
}
catch (SQLException ex) {
if (!ex.toString().contains("not return ResultSet"))
{
log.severe("[Thread] Error at SQL " + sqlType + " Query: " + ex);
log.severe("[Thread] Query: " + query);
}
}
}
}.runTaskAsynchronously(SimpleClans.getInstance());
}
}
@@ -0,0 +1,73 @@
package net.sacredlabyrinth.phaed.simpleclans.tasks;
import java.text.MessageFormat;
import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.scheduler.BukkitRunnable;
import net.sacredlabyrinth.phaed.simpleclans.ChatBlock;
import net.sacredlabyrinth.phaed.simpleclans.Clan;
import net.sacredlabyrinth.phaed.simpleclans.ClanPlayer;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
/**
*
* @author roinujnosde
*/
public class CollectFeeTask extends BukkitRunnable {
private final SimpleClans plugin;
public CollectFeeTask() {
plugin = SimpleClans.getInstance();
}
/**
* Starts the repetitive task
*/
public void start() {
SettingsManager sm = plugin.getSettingsManager();
int hour = sm.getTasksCollectFeeHour();
int minute = sm.getTasksCollectFeeMinute();
long delay = Helper.getDelayTo(hour, minute);
this.runTaskTimerAsynchronously(SimpleClans.getInstance(), delay * 20, 86400 * 20);
}
/**
* (used internally)
*/
@Override
public void run() {
for (Clan clan : plugin.getClanManager().getClans()) {
final double memberFee = clan.getMemberFee();
if (clan.isMemberFeeEnabled() && memberFee > 0) {
for (ClanPlayer cp : clan.getFeePayers()) {
final boolean success = plugin.getPermissionsManager()
.playerChargeMoney(Bukkit.getOfflinePlayer(cp.getUniqueId()), memberFee);
new BukkitRunnable() {
@Override
public void run() {
if (success) {
ChatBlock.sendMessage(cp.toPlayer(), ChatColor.AQUA +
MessageFormat.format(lang("fee.collected",cp.toPlayer()), memberFee));
clan.setBalance(clan.getBalance() + memberFee);
plugin.getStorageManager().updateClan(clan);
} else {
clan.removePlayerFromClan(cp.getUniqueId());
clan.addBb(ChatColor.AQUA +
MessageFormat.format(lang("bb.fee.player.kicked"), cp.getName()));
}
}
}.runTask(plugin);
}
}
}
}
}
@@ -0,0 +1,61 @@
package net.sacredlabyrinth.phaed.simpleclans.tasks;
import java.text.MessageFormat;
import net.md_5.bungee.api.ChatColor;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import org.bukkit.scheduler.BukkitRunnable;
/**
*
* @author roinujnosde
*/
public class CollectUpkeepTask extends BukkitRunnable {
private final SimpleClans plugin;
private final SettingsManager settingsManager;
public CollectUpkeepTask() {
plugin = SimpleClans.getInstance();
settingsManager = plugin.getSettingsManager();
}
/**
* Starts the repetitive task
*/
public void start() {
int hour = settingsManager.getTasksCollectUpkeepHour();
int minute = settingsManager.getTasksCollectUpkeepMinute();
long delay = Helper.getDelayTo(hour, minute);
this.runTaskTimerAsynchronously(SimpleClans.getInstance(), delay * 20, 86400 * 20);
}
/**
* (used internally)
*/
@Override
public void run() {
if (plugin == null) {
throw new IllegalStateException("Use the start() method!");
}
plugin.getClanManager().getClans().forEach((clan) -> {
if (settingsManager.isChargeUpkeepOnlyIfMemberFeeEnabled() && !clan.isMemberFeeEnabled()) {
return;
}
double upkeep = settingsManager.getClanUpkeep();
if (settingsManager.isMultiplyUpkeepBySize()) {
upkeep = upkeep * clan.getSize();
}
final double balance = clan.getBalance();
if (balance >= upkeep) {
clan.setBalance(balance - upkeep);
clan.addBb(ChatColor.AQUA + MessageFormat.format(lang("upkeep.collected"), upkeep), false);
} else {
clan.disband();
}
});
}
}
@@ -0,0 +1,28 @@
package net.sacredlabyrinth.phaed.simpleclans.tasks;
import org.bukkit.scheduler.BukkitRunnable;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
/**
*
* @author RoinujNosde
* @since 2.10.2
*
*/
public class SaveDataTask extends BukkitRunnable {
SimpleClans plugin = SimpleClans.getInstance();
/**
* Starts the repetitive task
*/
public void start() {
long interval = plugin.getSettingsManager().getSaveInterval() * 20;
runTaskTimerAsynchronously(plugin, interval, interval);
}
@Override
public void run() {
plugin.getStorageManager().saveModified();
}
}
@@ -0,0 +1,58 @@
package net.sacredlabyrinth.phaed.simpleclans.tasks;
import java.text.MessageFormat;
import net.sacredlabyrinth.phaed.simpleclans.Helper;
import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
import static net.sacredlabyrinth.phaed.simpleclans.SimpleClans.lang;
import net.sacredlabyrinth.phaed.simpleclans.managers.SettingsManager;
import org.bukkit.scheduler.BukkitRunnable;
/**
*
* @author roinujnosde
*/
public class UpkeepWarningTask extends BukkitRunnable {
private final SimpleClans plugin;
private final SettingsManager sm;
public UpkeepWarningTask() {
plugin = SimpleClans.getInstance();
sm = plugin.getSettingsManager();
}
/**
* Starts the repetitive task
*
*/
public void start() {
int hour = sm.getTasksCollectUpkeepWarningHour();
int minute = sm.getTasksCollectUpkeepWarningMinute();
long delay = Helper.getDelayTo(hour, minute);
this.runTaskTimerAsynchronously(plugin, delay * 20, 86400 * 20);
}
/**
* (used internally)
*/
@Override
public void run() {
if (plugin == null) {
throw new IllegalStateException("Use the start() method!");
}
plugin.getClanManager().getClans().forEach((clan) -> {
if (sm.isChargeUpkeepOnlyIfMemberFeeEnabled() && !clan.isMemberFeeEnabled()) {
return;
}
final double balance = clan.getBalance();
double upkeep = sm.getClanUpkeep();
if (sm.isMultiplyUpkeepBySize()) {
upkeep = upkeep * clan.getSize();
}
if (balance < upkeep) {
clan.addBb(MessageFormat.format(lang("balance.is.not.enough.for.upkeep"), upkeep), false);
}
});
}
}
@@ -10,15 +10,15 @@ import net.sacredlabyrinth.phaed.simpleclans.SimpleClans;
*/
public class ThreadUpdateSQL extends Thread {
Connection Connection;
String Query;
String TypeSQL;
Connection connection;
String query;
String sqlType;
public ThreadUpdateSQL(Connection Connection, String Query, String TypeSQL)
public ThreadUpdateSQL(Connection connection, String query, String sqlType)
{
this.Query = Query;
this.Connection = Connection;
this.TypeSQL = TypeSQL;
this.query = query;
this.connection = connection;
this.sqlType = sqlType;
}
@Override
@@ -26,14 +26,16 @@ public class ThreadUpdateSQL extends Thread {
{
try
{
this.Connection.createStatement().executeUpdate(this.Query);
if (!connection.isClosed()) {
this.connection.createStatement().executeUpdate(this.query);
}
}
catch (SQLException ex)
{
if (!ex.toString().contains("not return ResultSet"))
{
SimpleClans.getLog().severe("[Thread] Error at SQL " + this.TypeSQL + " Query: " + ex);
SimpleClans.getLog().severe("[Thread] Query: " + this.Query);
SimpleClans.getInstance().getLogger().severe("[Thread] Error at SQL " + this.sqlType + " Query: " + ex);
SimpleClans.getInstance().getLogger().severe("[Thread] Query: " + this.query);
}
}
}
Loaded 100 of 173 files, more files were not shown because too many files have changed in this diff. Show more