From aa5c411e5ae473319ddf53642b176396056b677b Mon Sep 17 00:00:00 2001
From: Christopher White <18whitechristop@gmail.com>
Date: Sun, 14 Jul 2024 15:22:48 -0700
Subject: [PATCH] Begin multiversion support
Signed-off-by: Christopher White <18whitechristop@gmail.com>
---
core/pom.xml | 239 ++++++++
.../java/dev/pgm/community/Community.java | 5 +-
.../dev/pgm/community/CommunityCommand.java | 70 +--
.../dev/pgm/community/CommunityConfig.java | 0
.../pgm/community/CommunityPermissions.java | 0
.../assistance/AssistanceRequest.java | 0
.../assistance/PlayerHelpRequest.java | 0
.../dev/pgm/community/assistance/Report.java | 0
.../community/assistance/ReportConfig.java | 0
.../commands/PlayerHelpCommand.java | 0
.../assistance/commands/ReportCommands.java | 63 +-
.../assistance/feature/AssistanceFeature.java | 0
.../feature/AssistanceFeatureBase.java | 0
.../feature/types/NoDBAssistanceFeature.java | 0
.../feature/types/SQLAssistanceFeature.java | 8 +-
.../assistance/menu/ReportCategory.java | 0
.../assistance/menu/ReportCategoryMenu.java | 0
.../assistance/menu/ReportReason.java | 0
.../assistance/menu/ReportReasonsMenu.java | 0
.../assistance/services/AssistanceQuery.java | 17 +
.../services/SQLAssistanceService.java | 0
.../community/broadcast/BroadcastCommand.java | 0
.../community/broadcast/BroadcastConfig.java | 7 +-
.../community/broadcast/BroadcastFeature.java | 0
.../management/ChatManagementCommand.java | 5 +-
.../chat/management/ChatManagementConfig.java | 5 +-
.../management/ChatManagementFeature.java | 40 +-
.../chat/network/NetworkChatConfig.java | 0
.../chat/network/NetworkChatFeature.java | 6 +-
.../chat/network/NetworkChatMessage.java | 0
.../commands/CommunityPluginCommand.java | 22 +-
.../community/commands/ContainerCommand.java | 7 +-
.../pgm/community/commands/FlightCommand.java | 31 +-
.../community/commands/GamemodeCommand.java | 33 +-
.../community/commands/ServerInfoCommand.java | 11 +-
.../pgm/community/commands/StaffCommand.java | 28 +-
.../pgm/community/commands/SudoCommand.java | 17 +-
.../community/commands/VanishedCommand.java | 20 +-
.../commands/graph/CommunityCommandGraph.java | 4 -
.../injectors/CommandAudienceProvider.java | 0
.../commands/player/TargetPlayer.java | 0
.../commands/providers/GameModeParser.java | 0
.../providers/TargetPlayerParser.java | 0
.../community/database/DatabaseConfig.java | 0
.../database/DatabaseConnection.java | 29 +-
.../dev/pgm/community/database/Query.java | 0
.../dev/pgm/community/database/Savable.java | 0
.../pgm/community/events/CommunityEvent.java | 0
.../events/PlayerHelpRequestEvent.java | 0
.../events/PlayerPunishmentEvent.java | 0
.../community/events/PlayerReportEvent.java | 0
.../events/UserProfileLoadEvent.java | 0
.../dev/pgm/community/feature/Feature.java | 0
.../pgm/community/feature/FeatureBase.java | 0
.../pgm/community/feature/FeatureManager.java | 9 -
.../dev/pgm/community/feature/SQLFeature.java | 0
.../pgm/community/feature/SQLFeatureBase.java | 0
.../feature/config/FeatureConfig.java | 0
.../feature/config/FeatureConfigImpl.java | 0
.../pgm/community/freeze/FreezeCommand.java | 16 +-
.../pgm/community/freeze/FreezeConfig.java | 0
.../pgm/community/freeze/FreezeFeature.java | 22 +-
.../pgm/community/freeze/FreezeManager.java | 34 +-
.../friends/FriendRequestStatus.java | 0
.../dev/pgm/community/friends/Friendship.java | 0
.../community/friends/FriendshipConfig.java | 0
.../friends/commands/FriendshipCommand.java | 481 +++++++++++++++
.../friends/feature/FriendshipFeature.java | 0
.../feature/FriendshipFeatureBase.java | 27 +-
.../friends/feature/PGMFriendIntegration.java | 0
.../feature/types/SQLFriendshipFeature.java | 168 ++++++
.../friends/services/FriendshipQuery.java | 22 +
.../services/SQLFriendshipService.java | 72 ++-
.../pgm/community/info/InfoCommandConfig.java | 7 +-
.../pgm/community/info/InfoCommandData.java | 0
.../community/info/InfoCommandsFeature.java | 12 +-
.../menu/CommunityInventoryProvider.java | 0
.../pgm/community/menu/MapSelectionMenu.java | 96 ++-
.../java/dev/pgm/community/menu/MenuItem.java | 0
.../pgm/community/menu/PageableInventory.java | 0
.../menu/PlayerSelectionProvider.java | 3 +-
.../pgm/community/menu/StaticMenuItem.java | 0
.../moderation/ModerationConfig.java | 0
.../moderation/commands/BanCommand.java | 100 ++--
.../moderation/commands/KickCommand.java | 30 +-
.../moderation/commands/MuteCommand.java | 139 +++++
.../commands/PunishmentCommand.java | 191 +++---
.../moderation/commands/ToolCommand.java | 0
.../moderation/commands/WarnCommand.java | 24 +-
.../moderation/feature/ModerationFeature.java | 0
.../feature/ModerationFeatureBase.java | 152 +++--
.../feature/PGMPunishmentIntegration.java | 20 +-
.../feature/types/SQLModerationFeature.java | 243 ++++----
.../punishments/NetworkPunishment.java | 0
.../moderation/punishments/Punishment.java | 64 +-
.../punishments/PunishmentFormats.java | 84 ++-
.../punishments/PunishmentType.java | 0
.../punishments/types/BanPunishment.java | 0
.../types/ExpirablePunishment.java | 0
.../punishments/types/KickPunishment.java | 0
.../punishments/types/MutePunishment.java | 59 +-
.../punishments/types/TempBanPunishment.java | 0
.../types/UsernameBanPunishment.java | 0
.../punishments/types/WarnPunishment.java | 0
.../moderation/services/ModerationQuery.java | 14 +-
.../services/SQLModerationService.java | 218 ++++---
.../moderation/tools/ModerationTools.java | 0
.../pgm/community/moderation/tools/Tool.java | 0
.../community/moderation/tools/ToolBase.java | 0
.../moderation/tools/buttons/ToolButton.java | 0
.../tools/buttons/ToolButtonBase.java | 0
.../tools/buttons/TranslatableToolButton.java | 0
.../tools/buttons/types/GamemodeButton.java | 15 +-
.../buttons/types/NightVisionButton.java | 7 +-
.../types/ObserverVisibilityButton.java | 3 +-
.../tools/buttons/types/SpeedButton.java | 0
.../tools/menu/ModerationToolsMenu.java | 41 +-
.../tools/menu/TeleportTargetMenu.java | 27 +-
.../moderation/tools/types/LookupSign.java | 3 +-
.../tools/types/ModerationMenuTool.java | 0
.../moderation/tools/types/TeleportHook.java | 23 +-
.../dev/pgm/community/motd/MotdConfig.java | 7 +-
.../dev/pgm/community/motd/MotdFeature.java | 0
.../dev/pgm/community/mutations/Mutation.java | 0
.../pgm/community/mutations/MutationBase.java | 0
.../community/mutations/MutationConfig.java | 0
.../pgm/community/mutations/MutationType.java | 31 +-
.../mutations/commands/MutationCommands.java | 53 +-
.../mutations/feature/MutationFeature.java | 29 +-
.../mutations/menu/MutationOptionsMenu.java | 23 +-
.../mutations/menu/MutationToggleMenu.java | 25 +-
.../options/MutationBooleanOption.java | 0
.../mutations/options/MutationListOption.java | 0
.../mutations/options/MutationOption.java | 0
.../options/MutationRangeOption.java | 0
.../mutations/types/BowMutation.java | 0
.../mutations/types/KitMutationBase.java | 9 +-
.../types/ScheduledMutationBase.java | 9 +-
.../types/arrows/EnderpearlMutation.java | 5 +-
.../types/arrows/FireballBowMutation.java | 5 +-
.../types/arrows/TNTBowMutation.java | 5 +-
.../types/arrows/WebSlingersMutation.java | 61 +-
.../types/gameplay/BlitzMutation.java | 22 +-
.../types/gameplay/GhostMutation.java | 5 +-
.../types/gameplay/RageMutation.java | 0
.../mutations/types/items/BreadMutation.java | 224 ++++---
.../types/items/CannonSuppliesMutation.java | 36 +-
.../types/items/ExplosionMutation.java | 140 +++--
.../types/items/FireworkMutation.java | 33 +-
.../types/items/GrapplingHookMutation.java | 35 +-
.../types/items/NoSpawnKitMutation.java | 27 +-
.../mutations/types/items/PotionMutation.java | 7 +-
.../mapdev/ProximityEffectsMutation.java | 62 +-
.../types/mechanics/BlindMutation.java | 0
.../types/mechanics/DoubleJumpMutation.java | 5 +-
.../types/mechanics/FlyMutation.java | 60 +-
.../types/mechanics/FriendlyFireMutation.java | 8 +-
.../types/mechanics/HealthMutation.java | 0
.../types/mechanics/KnockbackMutation.java | 2 +-
.../types/mechanics/MobMutation.java | 27 +-
.../types/world/BlockDecayMutation.java | 17 +-
.../mutations/types/world/StormMutation.java | 0
.../types/world/TNTRainMutation.java | 7 +-
.../dev/pgm/community/network/Channels.java | 0
.../pgm/community/network/NetworkConfig.java | 3 +-
.../network/feature/NetworkFeature.java | 4 +-
.../network/feature/NetworkFeatureBase.java | 0
.../network/subs/NetworkSubscriber.java | 0
.../subs/types/AssistanceSubscriber.java | 0
.../network/subs/types/ChatSubscriber.java | 0
.../subs/types/PunishmentSubscriber.java | 0
.../types/RefreshPunishmentSubscriber.java | 5 +-
.../network/types/RedisNetworkFeature.java | 53 +-
.../network/updates/NetworkUpdate.java | 0
.../network/updates/NetworkUpdateBase.java | 0
.../network/updates/types/AssistUpdate.java | 0
.../network/updates/types/ChatUpdate.java | 0
.../updates/types/PunishmentUpdate.java | 0
.../types/RefreshPunishmentUpdate.java | 0
.../java/dev/pgm/community/nick/Nick.java | 0
.../dev/pgm/community/nick/NickConfig.java | 0
.../java/dev/pgm/community/nick/NickImpl.java | 0
.../community/nick/commands/NickCommands.java | 431 ++++++++++++++
.../community/nick/data/NickSelection.java | 0
.../community/nick/feature/NickFeature.java | 0
.../nick/feature/NickFeatureBase.java | 113 ++--
.../nick/feature/PGMNickIntegration.java | 7 +-
.../nick/feature/types/SQLNickFeature.java | 79 +++
.../community/nick/services/NickQuery.java | 0
.../nick/services/SQLNickService.java | 56 +-
.../pgm/community/nick/skin/SkinCache.java | 40 +-
.../pgm/community/nick/skin/SkinManager.java | 2 +-
.../dev/pgm/community/party/MapParty.java | 0
.../dev/pgm/community/party/MapPartyBase.java | 0
.../pgm/community/party/MapPartyCommands.java | 45 +-
.../pgm/community/party/MapPartyConfig.java | 0
.../pgm/community/party/MapPartyMessages.java | 36 +-
.../community/party/MapPartyStatusType.java | 0
.../dev/pgm/community/party/MapPartyType.java | 2 +-
.../broadcasts/MapPartyBroadcastManager.java | 25 +-
.../party/events/MapPartyCreateEvent.java | 0
.../party/events/MapPartyEndEvent.java | 0
.../community/party/events/MapPartyEvent.java | 0
.../party/events/MapPartyRestartEvent.java | 0
.../party/events/MapPartyStartEvent.java | 0
.../party/exceptions/MapPartyException.java | 0
.../exceptions/MapPartySetupException.java | 0
.../party/feature/MapPartyFeature.java | 50 +-
.../community/party/hosts/MapPartyHosts.java | 9 +-
.../party/menu/MapPartyMainMenu.java | 104 ++--
.../community/party/menu/MapPartyMenu.java | 32 +-
.../party/menu/MapPartyTypeSelectionMenu.java | 11 +-
.../party/menu/hosts/HostAddMenu.java | 0
.../community/party/menu/hosts/HostMenu.java | 39 +-
.../community/party/menu/maps/MapAddMenu.java | 136 ++---
.../community/party/menu/maps/MapMenu.java | 43 +-
.../menu/modifiers/MapPartyModifierMenu.java | 18 +-
.../menu/settings/MapPartySettingsMenu.java | 192 +++---
.../party/presets/MapPartyPreset.java | 0
.../party/settings/MapPartySettings.java | 46 ++
.../party/settings/PartyBooleanSetting.java | 0
.../party/settings/PartySetting.java | 0
.../party/types/CustomPoolParty.java | 31 +-
.../party/types/RegularPoolParty.java | 0
.../java/dev/pgm/community/polls/Poll.java | 0
.../dev/pgm/community/polls/PollBuilder.java | 15 +-
.../pgm/community/polls/PollComponents.java | 240 ++++----
.../dev/pgm/community/polls/PollConfig.java | 0
.../pgm/community/polls/PollEditAlerter.java | 9 +-
.../pgm/community/polls/PollThreshold.java | 0
.../commands/PollManagementCommands.java | 42 +-
.../polls/commands/PollVoteCommands.java | 0
.../pgm/community/polls/ending/EndAction.java | 0
.../polls/ending/types/CommandEndAction.java | 0
.../ending/types/KickPlayerEndAction.java | 28 +-
.../polls/ending/types/MapEndAction.java | 18 +-
.../polls/ending/types/MutationEndAction.java | 0
.../polls/ending/types/NullEndAction.java | 5 +-
.../community/polls/events/PollEndEvent.java | 0
.../pgm/community/polls/events/PollEvent.java | 0
.../polls/events/PollStartEvent.java | 0
.../community/polls/events/PollVoteEvent.java | 0
.../community/polls/feature/PollFeature.java | 5 +-
.../MultiChoiceResponseConverter.java | 0
.../SingleChoiceResponseConverter.java | 0
.../pgm/community/polls/types/BasicPoll.java | 0
.../polls/types/MultiChoicePoll.java | 0
.../polls/types/SingleChoicePoll.java | 9 +-
.../pgm/community/requests/MapCooldown.java | 0
.../pgm/community/requests/RequestConfig.java | 0
.../community/requests/RequestProfile.java | 0
.../community/requests/SponsorRequest.java | 0
.../requests/commands/RequestCommands.java | 124 ++--
.../commands/sponsor/SponsorCommands.java | 0
.../commands/sponsor/TokenCommands.java | 0
.../supervotes/SuperVoteAdminCommands.java | 0
.../commands/supervotes/SuperVoteCommand.java | 0
.../requests/feature/RequestFeature.java | 0
.../requests/feature/RequestFeatureBase.java | 5 +-
.../feature/SponsorVotingBookCreator.java | 0
.../feature/types/NoDBRequestFeature.java | 16 +-
.../feature/types/SQLRequestFeature.java | 0
.../community/requests/menu/SponsorMenu.java | 24 +-
.../requests/services/RequestQuery.java | 0
.../requests/services/SQLRequestService.java | 0
.../supervotes/SuperVoteComponents.java | 0
.../requests/supervotes/SuperVoteManager.java | 0
.../dev/pgm/community/sessions/Session.java | 0
.../pgm/community/sessions/SessionQuery.java | 0
.../sessions/VanishedSessionListener.java | 11 +-
.../sessions/feature/SessionFeature.java | 0
.../sessions/feature/SessionFeatureBase.java | 0
.../feature/types/SQLSessionFeature.java | 0
.../sessions/services/SQLSessionService.java | 62 +-
.../sessions/services/SessionDataQuery.java | 14 +-
.../community/teleports/TeleportCommand.java | 6 +-
.../community/teleports/TeleportConfig.java | 0
.../community/teleports/TeleportFeature.java | 22 +-
.../teleports/TeleportFeatureBase.java | 32 +-
.../dev/pgm/community/users/UserProfile.java | 0
.../pgm/community/users/UserProfileImpl.java | 0
.../users/UserProfileWithSessionCallback.java | 0
.../dev/pgm/community/users/UsersConfig.java | 0
.../users/commands/UserInfoCommands.java | 460 +++++++++++++++
.../community/users/feature/UsersFeature.java | 18 +-
.../users/feature/UsersFeatureBase.java | 0
.../users/feature/types/NoDBUsersFeature.java | 9 +-
.../users/feature/types/SQLUsersFeature.java | 89 ++-
.../listeners/UserProfileLoginListener.java | 32 +-
.../users/services/AddressHistoryService.java | 309 ++++++++++
.../users/services/AddressQuery.java | 58 +-
.../users/services/SQLUserService.java | 83 ++-
.../community/users/services/UserQuery.java | 0
.../pgm/community/utils/BroadcastUtils.java | 89 ++-
.../dev/pgm/community/utils/CenterUtils.java | 9 +-
.../pgm/community/utils/CommandAudience.java | 0
.../dev/pgm/community/utils/ImportUtils.java | 0
.../dev/pgm/community/utils/MessageUtils.java | 0
.../dev/pgm/community/utils/NameUtils.java | 0
.../dev/pgm/community/utils/NetworkUtils.java | 12 +-
.../dev/pgm/community/utils/PGMUtils.java | 0
.../utils/PaginatedComponentResults.java | 0
.../dev/pgm/community/utils/SkullUtils.java | 4 +-
.../java/dev/pgm/community/utils/Sounds.java | 4 +
.../pgm/community/utils/VisibilityUtils.java | 0
.../dev/pgm/community/utils/WebUtils.java | 148 +++--
.../community/utils/gson/GsonProvider.java | 4 +-
.../utils/gson/types/DurationConverter.java | 0
.../utils/platform/CommunityMaterials.java | 34 ++
.../pgm/community/utils/ranks/RankUtils.java | 0
.../community/utils/ranks/RanksConfig.java | 0
{src => core/src}/main/resources/config.yml | 0
{src => core/src}/main/resources/plugin.yml | 0
platform/platform-all/pom.xml | 68 +++
platform/platform-modern/pom.xml | 52 ++
.../platform/modern/ModernEffects.java | 19 +
.../platform/modern/ModernEvents.java | 16 +
.../platform/modern/ModernPlayers.java | 23 +
platform/platform-sportpaper/pom.xml | 27 +
.../platform/sportpaper/SpEffects.java | 27 +
.../platform/sportpaper/SpEvents.java | 17 +
.../platform/sportpaper/SpPlayers.java | 27 +
platform/pom.xml | 16 +
pom.xml | 108 +---
.../assistance/services/AssistanceQuery.java | 19 -
.../friends/commands/FriendshipCommand.java | 551 ------------------
.../feature/types/SQLFriendshipFeature.java | 198 -------
.../friends/services/FriendshipQuery.java | 24 -
.../dev/pgm/community/mobs/MobCommand.java | 240 --------
.../dev/pgm/community/mobs/MobConfig.java | 13 -
.../dev/pgm/community/mobs/MobFeature.java | 217 -------
.../moderation/commands/MuteCommand.java | 164 ------
.../community/nick/commands/NickCommands.java | 519 -----------------
.../nick/feature/types/SQLNickFeature.java | 91 ---
.../party/settings/MapPartySettings.java | 47 --
.../users/commands/UserInfoCommands.java | 524 -----------------
.../users/services/AddressHistoryService.java | 330 -----------
util/pom.xml | 11 +
.../community/platform/CommunityEffects.java | 16 +
.../community/platform/CommunityEvents.java | 13 +
.../community/platform/CommunityPlayers.java | 16 +
.../pgm/community/platform/Reflections.java | 11 +
342 files changed, 5171 insertions(+), 5966 deletions(-)
create mode 100644 core/pom.xml
rename {src => core/src}/main/java/dev/pgm/community/Community.java (95%)
rename {src => core/src}/main/java/dev/pgm/community/CommunityCommand.java (85%)
rename {src => core/src}/main/java/dev/pgm/community/CommunityConfig.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/CommunityPermissions.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/assistance/AssistanceRequest.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/assistance/PlayerHelpRequest.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/assistance/Report.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/assistance/ReportConfig.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/assistance/commands/PlayerHelpCommand.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/assistance/commands/ReportCommands.java (77%)
rename {src => core/src}/main/java/dev/pgm/community/assistance/feature/AssistanceFeature.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/assistance/feature/AssistanceFeatureBase.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/assistance/feature/types/NoDBAssistanceFeature.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/assistance/feature/types/SQLAssistanceFeature.java (90%)
rename {src => core/src}/main/java/dev/pgm/community/assistance/menu/ReportCategory.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/assistance/menu/ReportCategoryMenu.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/assistance/menu/ReportReason.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/assistance/menu/ReportReasonsMenu.java (100%)
create mode 100644 core/src/main/java/dev/pgm/community/assistance/services/AssistanceQuery.java
rename {src => core/src}/main/java/dev/pgm/community/assistance/services/SQLAssistanceService.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/broadcast/BroadcastCommand.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/broadcast/BroadcastConfig.java (90%)
rename {src => core/src}/main/java/dev/pgm/community/broadcast/BroadcastFeature.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/chat/management/ChatManagementCommand.java (93%)
rename {src => core/src}/main/java/dev/pgm/community/chat/management/ChatManagementConfig.java (92%)
rename {src => core/src}/main/java/dev/pgm/community/chat/management/ChatManagementFeature.java (88%)
rename {src => core/src}/main/java/dev/pgm/community/chat/network/NetworkChatConfig.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/chat/network/NetworkChatFeature.java (93%)
rename {src => core/src}/main/java/dev/pgm/community/chat/network/NetworkChatMessage.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/commands/CommunityPluginCommand.java (77%)
rename {src => core/src}/main/java/dev/pgm/community/commands/ContainerCommand.java (96%)
rename {src => core/src}/main/java/dev/pgm/community/commands/FlightCommand.java (68%)
rename {src => core/src}/main/java/dev/pgm/community/commands/GamemodeCommand.java (73%)
rename {src => core/src}/main/java/dev/pgm/community/commands/ServerInfoCommand.java (78%)
rename {src => core/src}/main/java/dev/pgm/community/commands/StaffCommand.java (59%)
rename {src => core/src}/main/java/dev/pgm/community/commands/SudoCommand.java (80%)
rename {src => core/src}/main/java/dev/pgm/community/commands/VanishedCommand.java (74%)
rename {src => core/src}/main/java/dev/pgm/community/commands/graph/CommunityCommandGraph.java (98%)
rename {src => core/src}/main/java/dev/pgm/community/commands/injectors/CommandAudienceProvider.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/commands/player/TargetPlayer.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/commands/providers/GameModeParser.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/commands/providers/TargetPlayerParser.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/database/DatabaseConfig.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/database/DatabaseConnection.java (51%)
rename {src => core/src}/main/java/dev/pgm/community/database/Query.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/database/Savable.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/events/CommunityEvent.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/events/PlayerHelpRequestEvent.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/events/PlayerPunishmentEvent.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/events/PlayerReportEvent.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/events/UserProfileLoadEvent.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/feature/Feature.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/feature/FeatureBase.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/feature/FeatureManager.java (96%)
rename {src => core/src}/main/java/dev/pgm/community/feature/SQLFeature.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/feature/SQLFeatureBase.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/feature/config/FeatureConfig.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/feature/config/FeatureConfigImpl.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/freeze/FreezeCommand.java (84%)
rename {src => core/src}/main/java/dev/pgm/community/freeze/FreezeConfig.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/freeze/FreezeFeature.java (94%)
rename {src => core/src}/main/java/dev/pgm/community/freeze/FreezeManager.java (88%)
rename {src => core/src}/main/java/dev/pgm/community/friends/FriendRequestStatus.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/friends/Friendship.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/friends/FriendshipConfig.java (100%)
create mode 100644 core/src/main/java/dev/pgm/community/friends/commands/FriendshipCommand.java
rename {src => core/src}/main/java/dev/pgm/community/friends/feature/FriendshipFeature.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/friends/feature/FriendshipFeatureBase.java (76%)
rename {src => core/src}/main/java/dev/pgm/community/friends/feature/PGMFriendIntegration.java (100%)
create mode 100644 core/src/main/java/dev/pgm/community/friends/feature/types/SQLFriendshipFeature.java
create mode 100644 core/src/main/java/dev/pgm/community/friends/services/FriendshipQuery.java
rename {src => core/src}/main/java/dev/pgm/community/friends/services/SQLFriendshipService.java (69%)
rename {src => core/src}/main/java/dev/pgm/community/info/InfoCommandConfig.java (75%)
rename {src => core/src}/main/java/dev/pgm/community/info/InfoCommandData.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/info/InfoCommandsFeature.java (81%)
rename {src => core/src}/main/java/dev/pgm/community/menu/CommunityInventoryProvider.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/menu/MapSelectionMenu.java (77%)
rename {src => core/src}/main/java/dev/pgm/community/menu/MenuItem.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/menu/PageableInventory.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/menu/PlayerSelectionProvider.java (97%)
rename {src => core/src}/main/java/dev/pgm/community/menu/StaticMenuItem.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/ModerationConfig.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/commands/BanCommand.java (58%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/commands/KickCommand.java (74%)
create mode 100644 core/src/main/java/dev/pgm/community/moderation/commands/MuteCommand.java
rename {src => core/src}/main/java/dev/pgm/community/moderation/commands/PunishmentCommand.java (61%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/commands/ToolCommand.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/commands/WarnCommand.java (72%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/feature/ModerationFeature.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/feature/ModerationFeatureBase.java (76%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/feature/PGMPunishmentIntegration.java (83%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/feature/types/SQLModerationFeature.java (52%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/punishments/NetworkPunishment.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/punishments/Punishment.java (86%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/punishments/PunishmentFormats.java (57%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/punishments/PunishmentType.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/punishments/types/BanPunishment.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/punishments/types/ExpirablePunishment.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/punishments/types/KickPunishment.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/punishments/types/MutePunishment.java (58%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/punishments/types/TempBanPunishment.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/punishments/types/UsernameBanPunishment.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/punishments/types/WarnPunishment.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/services/ModerationQuery.java (67%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/services/SQLModerationService.java (55%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/tools/ModerationTools.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/tools/Tool.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/tools/ToolBase.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/tools/buttons/ToolButton.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/tools/buttons/ToolButtonBase.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/tools/buttons/TranslatableToolButton.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/tools/buttons/types/GamemodeButton.java (87%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/tools/buttons/types/NightVisionButton.java (89%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/tools/buttons/types/ObserverVisibilityButton.java (96%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/tools/buttons/types/SpeedButton.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/tools/menu/ModerationToolsMenu.java (70%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/tools/menu/TeleportTargetMenu.java (76%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/tools/types/LookupSign.java (92%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/tools/types/ModerationMenuTool.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/moderation/tools/types/TeleportHook.java (87%)
rename {src => core/src}/main/java/dev/pgm/community/motd/MotdConfig.java (79%)
rename {src => core/src}/main/java/dev/pgm/community/motd/MotdFeature.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/Mutation.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/MutationBase.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/MutationConfig.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/MutationType.java (78%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/commands/MutationCommands.java (76%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/feature/MutationFeature.java (93%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/menu/MutationOptionsMenu.java (92%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/menu/MutationToggleMenu.java (73%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/options/MutationBooleanOption.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/options/MutationListOption.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/options/MutationOption.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/options/MutationRangeOption.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/types/BowMutation.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/types/KitMutationBase.java (93%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/types/ScheduledMutationBase.java (82%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/types/arrows/EnderpearlMutation.java (89%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/types/arrows/FireballBowMutation.java (90%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/types/arrows/TNTBowMutation.java (89%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/types/arrows/WebSlingersMutation.java (75%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/types/gameplay/BlitzMutation.java (76%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/types/gameplay/GhostMutation.java (90%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/types/gameplay/RageMutation.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/types/items/BreadMutation.java (62%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/types/items/CannonSuppliesMutation.java (69%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/types/items/ExplosionMutation.java (78%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/types/items/FireworkMutation.java (89%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/types/items/GrapplingHookMutation.java (81%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/types/items/NoSpawnKitMutation.java (77%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/types/items/PotionMutation.java (94%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/types/mapdev/ProximityEffectsMutation.java (85%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/types/mechanics/BlindMutation.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/types/mechanics/DoubleJumpMutation.java (90%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/types/mechanics/FlyMutation.java (66%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/types/mechanics/FriendlyFireMutation.java (83%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/types/mechanics/HealthMutation.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/types/mechanics/KnockbackMutation.java (95%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/types/mechanics/MobMutation.java (87%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/types/world/BlockDecayMutation.java (89%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/types/world/StormMutation.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/mutations/types/world/TNTRainMutation.java (96%)
rename {src => core/src}/main/java/dev/pgm/community/network/Channels.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/network/NetworkConfig.java (93%)
rename {src => core/src}/main/java/dev/pgm/community/network/feature/NetworkFeature.java (93%)
rename {src => core/src}/main/java/dev/pgm/community/network/feature/NetworkFeatureBase.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/network/subs/NetworkSubscriber.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/network/subs/types/AssistanceSubscriber.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/network/subs/types/ChatSubscriber.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/network/subs/types/PunishmentSubscriber.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/network/subs/types/RefreshPunishmentSubscriber.java (86%)
rename {src => core/src}/main/java/dev/pgm/community/network/types/RedisNetworkFeature.java (66%)
rename {src => core/src}/main/java/dev/pgm/community/network/updates/NetworkUpdate.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/network/updates/NetworkUpdateBase.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/network/updates/types/AssistUpdate.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/network/updates/types/ChatUpdate.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/network/updates/types/PunishmentUpdate.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/network/updates/types/RefreshPunishmentUpdate.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/nick/Nick.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/nick/NickConfig.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/nick/NickImpl.java (100%)
create mode 100644 core/src/main/java/dev/pgm/community/nick/commands/NickCommands.java
rename {src => core/src}/main/java/dev/pgm/community/nick/data/NickSelection.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/nick/feature/NickFeature.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/nick/feature/NickFeatureBase.java (66%)
rename {src => core/src}/main/java/dev/pgm/community/nick/feature/PGMNickIntegration.java (89%)
create mode 100644 core/src/main/java/dev/pgm/community/nick/feature/types/SQLNickFeature.java
rename {src => core/src}/main/java/dev/pgm/community/nick/services/NickQuery.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/nick/services/SQLNickService.java (73%)
rename {src => core/src}/main/java/dev/pgm/community/nick/skin/SkinCache.java (79%)
rename {src => core/src}/main/java/dev/pgm/community/nick/skin/SkinManager.java (91%)
rename {src => core/src}/main/java/dev/pgm/community/party/MapParty.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/party/MapPartyBase.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/party/MapPartyCommands.java (89%)
rename {src => core/src}/main/java/dev/pgm/community/party/MapPartyConfig.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/party/MapPartyMessages.java (87%)
rename {src => core/src}/main/java/dev/pgm/community/party/MapPartyStatusType.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/party/MapPartyType.java (94%)
rename {src => core/src}/main/java/dev/pgm/community/party/broadcasts/MapPartyBroadcastManager.java (91%)
rename {src => core/src}/main/java/dev/pgm/community/party/events/MapPartyCreateEvent.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/party/events/MapPartyEndEvent.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/party/events/MapPartyEvent.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/party/events/MapPartyRestartEvent.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/party/events/MapPartyStartEvent.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/party/exceptions/MapPartyException.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/party/exceptions/MapPartySetupException.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/party/feature/MapPartyFeature.java (93%)
rename {src => core/src}/main/java/dev/pgm/community/party/hosts/MapPartyHosts.java (97%)
rename {src => core/src}/main/java/dev/pgm/community/party/menu/MapPartyMainMenu.java (74%)
rename {src => core/src}/main/java/dev/pgm/community/party/menu/MapPartyMenu.java (88%)
rename {src => core/src}/main/java/dev/pgm/community/party/menu/MapPartyTypeSelectionMenu.java (85%)
rename {src => core/src}/main/java/dev/pgm/community/party/menu/hosts/HostAddMenu.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/party/menu/hosts/HostMenu.java (81%)
rename {src => core/src}/main/java/dev/pgm/community/party/menu/maps/MapAddMenu.java (67%)
rename {src => core/src}/main/java/dev/pgm/community/party/menu/maps/MapMenu.java (82%)
rename {src => core/src}/main/java/dev/pgm/community/party/menu/modifiers/MapPartyModifierMenu.java (84%)
rename {src => core/src}/main/java/dev/pgm/community/party/menu/settings/MapPartySettingsMenu.java (51%)
rename {src => core/src}/main/java/dev/pgm/community/party/presets/MapPartyPreset.java (100%)
create mode 100644 core/src/main/java/dev/pgm/community/party/settings/MapPartySettings.java
rename {src => core/src}/main/java/dev/pgm/community/party/settings/PartyBooleanSetting.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/party/settings/PartySetting.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/party/types/CustomPoolParty.java (85%)
rename {src => core/src}/main/java/dev/pgm/community/party/types/RegularPoolParty.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/polls/Poll.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/polls/PollBuilder.java (95%)
rename {src => core/src}/main/java/dev/pgm/community/polls/PollComponents.java (71%)
rename {src => core/src}/main/java/dev/pgm/community/polls/PollConfig.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/polls/PollEditAlerter.java (93%)
rename {src => core/src}/main/java/dev/pgm/community/polls/PollThreshold.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/polls/commands/PollManagementCommands.java (80%)
rename {src => core/src}/main/java/dev/pgm/community/polls/commands/PollVoteCommands.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/polls/ending/EndAction.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/polls/ending/types/CommandEndAction.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/polls/ending/types/KickPlayerEndAction.java (80%)
rename {src => core/src}/main/java/dev/pgm/community/polls/ending/types/MapEndAction.java (86%)
rename {src => core/src}/main/java/dev/pgm/community/polls/ending/types/MutationEndAction.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/polls/ending/types/NullEndAction.java (92%)
rename {src => core/src}/main/java/dev/pgm/community/polls/events/PollEndEvent.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/polls/events/PollEvent.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/polls/events/PollStartEvent.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/polls/events/PollVoteEvent.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/polls/feature/PollFeature.java (97%)
rename {src => core/src}/main/java/dev/pgm/community/polls/response/MultiChoiceResponseConverter.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/polls/response/SingleChoiceResponseConverter.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/polls/types/BasicPoll.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/polls/types/MultiChoicePoll.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/polls/types/SingleChoicePoll.java (93%)
rename {src => core/src}/main/java/dev/pgm/community/requests/MapCooldown.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/requests/RequestConfig.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/requests/RequestProfile.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/requests/SponsorRequest.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/requests/commands/RequestCommands.java (68%)
rename {src => core/src}/main/java/dev/pgm/community/requests/commands/sponsor/SponsorCommands.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/requests/commands/sponsor/TokenCommands.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/requests/commands/supervotes/SuperVoteAdminCommands.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/requests/commands/supervotes/SuperVoteCommand.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/requests/feature/RequestFeature.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/requests/feature/RequestFeatureBase.java (99%)
rename {src => core/src}/main/java/dev/pgm/community/requests/feature/SponsorVotingBookCreator.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/requests/feature/types/NoDBRequestFeature.java (79%)
rename {src => core/src}/main/java/dev/pgm/community/requests/feature/types/SQLRequestFeature.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/requests/menu/SponsorMenu.java (79%)
rename {src => core/src}/main/java/dev/pgm/community/requests/services/RequestQuery.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/requests/services/SQLRequestService.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/requests/supervotes/SuperVoteComponents.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/requests/supervotes/SuperVoteManager.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/sessions/Session.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/sessions/SessionQuery.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/sessions/VanishedSessionListener.java (73%)
rename {src => core/src}/main/java/dev/pgm/community/sessions/feature/SessionFeature.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/sessions/feature/SessionFeatureBase.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/sessions/feature/types/SQLSessionFeature.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/sessions/services/SQLSessionService.java (71%)
rename {src => core/src}/main/java/dev/pgm/community/sessions/services/SessionDataQuery.java (65%)
rename {src => core/src}/main/java/dev/pgm/community/teleports/TeleportCommand.java (95%)
rename {src => core/src}/main/java/dev/pgm/community/teleports/TeleportConfig.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/teleports/TeleportFeature.java (82%)
rename {src => core/src}/main/java/dev/pgm/community/teleports/TeleportFeatureBase.java (70%)
rename {src => core/src}/main/java/dev/pgm/community/users/UserProfile.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/users/UserProfileImpl.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/users/UserProfileWithSessionCallback.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/users/UsersConfig.java (100%)
create mode 100644 core/src/main/java/dev/pgm/community/users/commands/UserInfoCommands.java
rename {src => core/src}/main/java/dev/pgm/community/users/feature/UsersFeature.java (93%)
rename {src => core/src}/main/java/dev/pgm/community/users/feature/UsersFeatureBase.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/users/feature/types/NoDBUsersFeature.java (91%)
rename {src => core/src}/main/java/dev/pgm/community/users/feature/types/SQLUsersFeature.java (63%)
rename {src => core/src}/main/java/dev/pgm/community/users/listeners/UserProfileLoginListener.java (59%)
create mode 100644 core/src/main/java/dev/pgm/community/users/services/AddressHistoryService.java
rename {src => core/src}/main/java/dev/pgm/community/users/services/AddressQuery.java (61%)
rename {src => core/src}/main/java/dev/pgm/community/users/services/SQLUserService.java (61%)
rename {src => core/src}/main/java/dev/pgm/community/users/services/UserQuery.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/utils/BroadcastUtils.java (70%)
rename {src => core/src}/main/java/dev/pgm/community/utils/CenterUtils.java (76%)
rename {src => core/src}/main/java/dev/pgm/community/utils/CommandAudience.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/utils/ImportUtils.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/utils/MessageUtils.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/utils/NameUtils.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/utils/NetworkUtils.java (81%)
rename {src => core/src}/main/java/dev/pgm/community/utils/PGMUtils.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/utils/PaginatedComponentResults.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/utils/SkullUtils.java (95%)
rename {src => core/src}/main/java/dev/pgm/community/utils/Sounds.java (93%)
rename {src => core/src}/main/java/dev/pgm/community/utils/VisibilityUtils.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/utils/WebUtils.java (50%)
rename {src => core/src}/main/java/dev/pgm/community/utils/gson/GsonProvider.java (68%)
rename {src => core/src}/main/java/dev/pgm/community/utils/gson/types/DurationConverter.java (100%)
create mode 100644 core/src/main/java/dev/pgm/community/utils/platform/CommunityMaterials.java
rename {src => core/src}/main/java/dev/pgm/community/utils/ranks/RankUtils.java (100%)
rename {src => core/src}/main/java/dev/pgm/community/utils/ranks/RanksConfig.java (100%)
rename {src => core/src}/main/resources/config.yml (100%)
rename {src => core/src}/main/resources/plugin.yml (100%)
create mode 100644 platform/platform-all/pom.xml
create mode 100644 platform/platform-modern/pom.xml
create mode 100644 platform/platform-modern/src/main/java/dev/pgm/community/platform/modern/ModernEffects.java
create mode 100644 platform/platform-modern/src/main/java/dev/pgm/community/platform/modern/ModernEvents.java
create mode 100644 platform/platform-modern/src/main/java/dev/pgm/community/platform/modern/ModernPlayers.java
create mode 100644 platform/platform-sportpaper/pom.xml
create mode 100644 platform/platform-sportpaper/src/main/java/dev/pgm/community/platform/sportpaper/SpEffects.java
create mode 100644 platform/platform-sportpaper/src/main/java/dev/pgm/community/platform/sportpaper/SpEvents.java
create mode 100644 platform/platform-sportpaper/src/main/java/dev/pgm/community/platform/sportpaper/SpPlayers.java
create mode 100644 platform/pom.xml
delete mode 100644 src/main/java/dev/pgm/community/assistance/services/AssistanceQuery.java
delete mode 100644 src/main/java/dev/pgm/community/friends/commands/FriendshipCommand.java
delete mode 100644 src/main/java/dev/pgm/community/friends/feature/types/SQLFriendshipFeature.java
delete mode 100644 src/main/java/dev/pgm/community/friends/services/FriendshipQuery.java
delete mode 100644 src/main/java/dev/pgm/community/mobs/MobCommand.java
delete mode 100644 src/main/java/dev/pgm/community/mobs/MobConfig.java
delete mode 100644 src/main/java/dev/pgm/community/mobs/MobFeature.java
delete mode 100644 src/main/java/dev/pgm/community/moderation/commands/MuteCommand.java
delete mode 100644 src/main/java/dev/pgm/community/nick/commands/NickCommands.java
delete mode 100644 src/main/java/dev/pgm/community/nick/feature/types/SQLNickFeature.java
delete mode 100644 src/main/java/dev/pgm/community/party/settings/MapPartySettings.java
delete mode 100644 src/main/java/dev/pgm/community/users/commands/UserInfoCommands.java
delete mode 100644 src/main/java/dev/pgm/community/users/services/AddressHistoryService.java
create mode 100644 util/pom.xml
create mode 100644 util/src/main/java/dev/pgm/community/platform/CommunityEffects.java
create mode 100644 util/src/main/java/dev/pgm/community/platform/CommunityEvents.java
create mode 100644 util/src/main/java/dev/pgm/community/platform/CommunityPlayers.java
create mode 100644 util/src/main/java/dev/pgm/community/platform/Reflections.java
diff --git a/core/pom.xml b/core/pom.xml
new file mode 100644
index 00000000..c990b45e
--- /dev/null
+++ b/core/pom.xml
@@ -0,0 +1,239 @@
+
+ 4.0.0
+
+ dev.pgm
+ Community
+ 0.2-SNAPSHOT
+
+ core
+
+
+
+ dev.pgm
+ platform-all
+ 0.2-SNAPSHOT
+ runtime
+
+
+
+ dev.pgm
+ util
+ 0.2-SNAPSHOT
+
+
+
+
+ dev.pgm.paper
+ paper-api
+ 1.8_1.21-SNAPSHOT
+ provided
+
+
+
+ com.mojang
+ authlib
+ 6.0.54
+ provided
+
+
+
+
+ co.aikar
+ idb-core
+ 1.0.0-SNAPSHOT
+
+
+ com.zaxxer
+ HikariCP
+ 2.4.1
+
+
+ co.aikar
+ idb-bukkit
+ 1.0.0-SNAPSHOT
+
+
+
+
+ redis.clients
+ jedis
+ 3.5.1
+ jar
+ compile
+
+
+
+
+ fr.minuskube.inv
+ smart-invs
+ 1.2.7
+
+
+
+
+ tc.oc.occ
+ Environment
+ 1.0.0-SNAPSHOT
+
+
+
+
+ commons-lang
+ commons-lang
+ 2.6
+ provided
+
+
+
+
+ Community
+
+
+
+ ${basedir}/src/main/resources
+ true
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.13.0
+
+
+
+ org.incendo
+ cloud-annotations
+ 2.0.0-rc.2
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 3.6.0
+
+ false
+ true
+
+
+ net.kyori:*:*
+ co.aikar:*
+ tc.oc.pgm:util
+ redis.clients:jedis
+ org.apache.commons:commons-pool2
+ fr.minuskube.inv:smart-invs
+ com.zaxxer:HikariCP
+ org.slf4j:*
+
+
+
+
+ *:*
+
+ META-INF/**
+
+
+
+ dev.pgm:platform-all:*
+
+ **
+
+
+
+ dev.pgm:util:*
+
+ **
+
+
+
+
+
+
+ package
+
+ shade
+
+
+
+
+
+
+
+ pl.project13.maven
+ git-commit-id-plugin
+ 4.0.0
+
+
+
+ revision
+
+
+
+
+ false
+ false
+
+
+
+
+
+ com.diffplug.spotless
+ spotless-maven-plugin
+ 2.43.0
+
+ origin/dev
+
+
+
+ 2.47.0
+
+ true
+
+
+
+
+
+
+ check
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-javadoc-plugin
+ 3.2.0
+
+ false
+ true
+
+
+
+
+ maven-antrun-plugin
+ 3.1.0
+
+
+ jar
+ package
+
+
+
+
+
+
+ run
+
+
+
+
+
+
+
diff --git a/src/main/java/dev/pgm/community/Community.java b/core/src/main/java/dev/pgm/community/Community.java
similarity index 95%
rename from src/main/java/dev/pgm/community/Community.java
rename to core/src/main/java/dev/pgm/community/Community.java
index 7c805784..c9ca4ada 100644
--- a/src/main/java/dev/pgm/community/Community.java
+++ b/core/src/main/java/dev/pgm/community/Community.java
@@ -126,8 +126,7 @@ public void callEvent(CommunityEvent event) {
// REMOVE WHEN NOT IN DEV
public static void log(String format, Object... objects) {
Bukkit.getConsoleSender()
- .sendMessage(
- ChatColor.translateAlternateColorCodes(
- '&', String.format("&7[&4Community&7]&r " + format, objects)));
+ .sendMessage(ChatColor.translateAlternateColorCodes(
+ '&', String.format("&7[&4Community&7]&r " + format, objects)));
}
}
diff --git a/src/main/java/dev/pgm/community/CommunityCommand.java b/core/src/main/java/dev/pgm/community/CommunityCommand.java
similarity index 85%
rename from src/main/java/dev/pgm/community/CommunityCommand.java
rename to core/src/main/java/dev/pgm/community/CommunityCommand.java
index 180c213a..eeec42ad 100644
--- a/src/main/java/dev/pgm/community/CommunityCommand.java
+++ b/core/src/main/java/dev/pgm/community/CommunityCommand.java
@@ -69,11 +69,10 @@ public Set getPlayers() {
}
public Component getText() {
- List names =
- players.stream()
- .map(p -> player(p, NameStyle.FANCY))
- .limit(Math.min(players.size(), 10))
- .collect(Collectors.toList());
+ List names = players.stream()
+ .map(p -> player(p, NameStyle.FANCY))
+ .limit(Math.min(players.size(), 10))
+ .collect(Collectors.toList());
Component hover = TextFormatter.list(names, NamedTextColor.GRAY);
if (getPlayers().size() > names.size()) {
@@ -101,10 +100,9 @@ protected PlayerSelection getPlayers(CommandAudience viewer, String input) {
input.equalsIgnoreCase("*") && viewer.hasPermission(CommunityPermissions.ALL_SELECTOR);
boolean isRandom =
input.startsWith("?") && viewer.hasPermission(CommunityPermissions.RANDOM_SELECTOR);
- boolean isTeam =
- input.startsWith("team=")
- && PGMUtils.isPGMEnabled()
- && viewer.hasPermission(CommunityPermissions.TEAM_SELECTOR);
+ boolean isTeam = input.startsWith("team=")
+ && PGMUtils.isPGMEnabled()
+ && viewer.hasPermission(CommunityPermissions.TEAM_SELECTOR);
String[] parts = input.split("=");
@@ -114,25 +112,23 @@ protected PlayerSelection getPlayers(CommandAudience viewer, String input) {
Component text;
if (isAll) {
targets.addAll(allOnline);
- text =
- text()
- .append(text("everyone "))
- .append(text("("))
- .append(text(targets.size(), NamedTextColor.GREEN))
- .append(text(")"))
- .color(NamedTextColor.GRAY)
- .build();
+ text = text()
+ .append(text("everyone "))
+ .append(text("("))
+ .append(text(targets.size(), NamedTextColor.GREEN))
+ .append(text(")"))
+ .color(NamedTextColor.GRAY)
+ .build();
} else if (isRandom) {
int randomCount = parts.length == 2 ? parseInputInt(input, 1) : 1;
for (int i = 0; i < randomCount; i++) {
targets.add(allOnline.get(Community.get().getRandom().nextInt(allOnline.size())));
}
String rdTxt = " randomly chosen player" + (targets.size() != 1 ? "s" : "");
- text =
- text()
- .append(text(targets.size(), NamedTextColor.GREEN))
- .append(text(rdTxt, NamedTextColor.GRAY))
- .build();
+ text = text()
+ .append(text(targets.size(), NamedTextColor.GREEN))
+ .append(text(rdTxt, NamedTextColor.GRAY))
+ .build();
} else if (isTeam) {
Match match = PGMUtils.getMatch();
if (match.getModule(TeamMatchModule.class) != null) {
@@ -145,10 +141,9 @@ protected PlayerSelection getPlayers(CommandAudience viewer, String input) {
// Allow Observers to be selected
if (teamName.toLowerCase().startsWith("obs")) {
text = text("Observers", NamedTextColor.AQUA);
- targets.addAll(
- match.getObservers().stream()
- .map(MatchPlayer::getBukkit)
- .collect(Collectors.toList()));
+ targets.addAll(match.getObservers().stream()
+ .map(MatchPlayer::getBukkit)
+ .collect(Collectors.toList()));
} else {
Team team = teams.bestFuzzyMatch(teamName);
if (team == null) {
@@ -156,10 +151,9 @@ protected PlayerSelection getPlayers(CommandAudience viewer, String input) {
}
targets.addAll(
team.getPlayers().stream().map(MatchPlayer::getBukkit).collect(Collectors.toList()));
- text =
- text()
- .append(text(team.getNameLegacy(), TextFormatter.convert(team.getColor())))
- .build();
+ text = text()
+ .append(text(team.getNameLegacy(), TextFormatter.convert(team.getColor())))
+ .build();
}
} else {
throw TextException.exception("There are no teams in this match to select");
@@ -172,12 +166,11 @@ protected PlayerSelection getPlayers(CommandAudience viewer, String input) {
targets.add(player);
}
}
- text =
- text()
- .append(text(targets.size(), NamedTextColor.GREEN))
- .append(text(" player" + (targets.size() != 1 ? "s" : "")))
- .color(NamedTextColor.GRAY)
- .build();
+ text = text()
+ .append(text(targets.size(), NamedTextColor.GREEN))
+ .append(text(" player" + (targets.size() != 1 ? "s" : "")))
+ .color(NamedTextColor.GRAY)
+ .build();
if (targets.size() > 1 && !viewer.hasPermission(CommunityPermissions.SELECTOR)) {
// If no permission for multiple, get a random single entry
@@ -239,9 +232,8 @@ protected UUID getOnlineTarget(String target, UsersFeature service) {
if (id == null) {
// TODO: Maybe use getStoredID and listen, that way we can account for EVERYONE. But not a
// priority now
- Optional cachedId =
- service.getId(
- target); // If user is online or was online recently, we will have their UUID.
+ Optional cachedId = service.getId(
+ target); // If user is online or was online recently, we will have their UUID.
if (!cachedId.isPresent()) {
throw TextException.exception(formatNotFoundMsg(target));
} else {
diff --git a/src/main/java/dev/pgm/community/CommunityConfig.java b/core/src/main/java/dev/pgm/community/CommunityConfig.java
similarity index 100%
rename from src/main/java/dev/pgm/community/CommunityConfig.java
rename to core/src/main/java/dev/pgm/community/CommunityConfig.java
diff --git a/src/main/java/dev/pgm/community/CommunityPermissions.java b/core/src/main/java/dev/pgm/community/CommunityPermissions.java
similarity index 100%
rename from src/main/java/dev/pgm/community/CommunityPermissions.java
rename to core/src/main/java/dev/pgm/community/CommunityPermissions.java
diff --git a/src/main/java/dev/pgm/community/assistance/AssistanceRequest.java b/core/src/main/java/dev/pgm/community/assistance/AssistanceRequest.java
similarity index 100%
rename from src/main/java/dev/pgm/community/assistance/AssistanceRequest.java
rename to core/src/main/java/dev/pgm/community/assistance/AssistanceRequest.java
diff --git a/src/main/java/dev/pgm/community/assistance/PlayerHelpRequest.java b/core/src/main/java/dev/pgm/community/assistance/PlayerHelpRequest.java
similarity index 100%
rename from src/main/java/dev/pgm/community/assistance/PlayerHelpRequest.java
rename to core/src/main/java/dev/pgm/community/assistance/PlayerHelpRequest.java
diff --git a/src/main/java/dev/pgm/community/assistance/Report.java b/core/src/main/java/dev/pgm/community/assistance/Report.java
similarity index 100%
rename from src/main/java/dev/pgm/community/assistance/Report.java
rename to core/src/main/java/dev/pgm/community/assistance/Report.java
diff --git a/src/main/java/dev/pgm/community/assistance/ReportConfig.java b/core/src/main/java/dev/pgm/community/assistance/ReportConfig.java
similarity index 100%
rename from src/main/java/dev/pgm/community/assistance/ReportConfig.java
rename to core/src/main/java/dev/pgm/community/assistance/ReportConfig.java
diff --git a/src/main/java/dev/pgm/community/assistance/commands/PlayerHelpCommand.java b/core/src/main/java/dev/pgm/community/assistance/commands/PlayerHelpCommand.java
similarity index 100%
rename from src/main/java/dev/pgm/community/assistance/commands/PlayerHelpCommand.java
rename to core/src/main/java/dev/pgm/community/assistance/commands/PlayerHelpCommand.java
diff --git a/src/main/java/dev/pgm/community/assistance/commands/ReportCommands.java b/core/src/main/java/dev/pgm/community/assistance/commands/ReportCommands.java
similarity index 77%
rename from src/main/java/dev/pgm/community/assistance/commands/ReportCommands.java
rename to core/src/main/java/dev/pgm/community/assistance/commands/ReportCommands.java
index 97f0d33b..d5452e68 100644
--- a/src/main/java/dev/pgm/community/assistance/commands/ReportCommands.java
+++ b/core/src/main/java/dev/pgm/community/assistance/commands/ReportCommands.java
@@ -89,17 +89,14 @@ public void recentReports(
checkEnabled();
if (player != null) {
- reports
- .query(player)
- .thenAcceptAsync(
- reports -> {
- if (reports.isEmpty()) {
- audience.sendWarning(
- text("No reports found for ").append(text(player, NamedTextColor.AQUA)));
- return;
- }
- sendReportHistory(audience, reports, page);
- });
+ reports.query(player).thenAcceptAsync(reports -> {
+ if (reports.isEmpty()) {
+ audience.sendWarning(
+ text("No reports found for ").append(text(player, NamedTextColor.AQUA)));
+ return;
+ }
+ sendReportHistory(audience, reports, page);
+ });
return;
}
@@ -113,16 +110,15 @@ public void sendReportHistory(CommandAudience audience, Collection repor
int pages = (reportData.size() + perPage - 1) / perPage;
page = Math.max(1, Math.min(page, pages));
- Component pageNum =
- translatable(
- "command.simplePageHeader",
- NamedTextColor.GRAY,
- text(Integer.toString(page), NamedTextColor.RED),
- text(Integer.toString(pages), NamedTextColor.RED));
+ Component pageNum = translatable(
+ "command.simplePageHeader",
+ NamedTextColor.GRAY,
+ text(Integer.toString(page), NamedTextColor.RED),
+ text(Integer.toString(pages), NamedTextColor.RED));
- Component header =
- translatable("moderation.reports.header", NamedTextColor.GRAY, headerResultCount, pageNum)
- .append(text(" (").append(headerResultCount).append(text(") ยป ")).append(pageNum));
+ Component header = translatable(
+ "moderation.reports.header", NamedTextColor.GRAY, headerResultCount, pageNum)
+ .append(text(" (").append(headerResultCount).append(text(") ยป ")).append(pageNum));
Component formattedHeader =
TextFormatter.horizontalLineHeading(audience.getSender(), header, NamedTextColor.DARK_GRAY);
@@ -132,23 +128,19 @@ public Component format(Report data, int index) {
Component reporterName = getReportFormatName(data.getSenderId()).join();
Component reportedName = getReportFormatName(data.getTargetId()).join();
- Component serverName =
- text("Server ", NamedTextColor.GRAY)
- .append(text(": ", NamedTextColor.DARK_GRAY))
- .append(text(data.getServer(), NamedTextColor.AQUA));
+ Component serverName = text("Server ", NamedTextColor.GRAY)
+ .append(text(": ", NamedTextColor.DARK_GRAY))
+ .append(text(data.getServer(), NamedTextColor.AQUA));
- TextComponent.Builder reporter =
- text()
- .append(
- translatable("moderation.reports.hover", NamedTextColor.GRAY, reporterName));
+ TextComponent.Builder reporter = text()
+ .append(translatable("moderation.reports.hover", NamedTextColor.GRAY, reporterName));
if (!data.getServer().equalsIgnoreCase(Community.get().getServerConfig().getServerId())) {
reporter.append(newline()).append(serverName);
}
- Component timeAgo =
- TemporalComponent.relativePastApproximate(data.getTime())
- .color(NamedTextColor.DARK_GREEN);
+ Component timeAgo = TemporalComponent.relativePastApproximate(data.getTime())
+ .color(NamedTextColor.DARK_GREEN);
return text()
.append(timeAgo.hoverEvent(HoverEvent.showText(reporter.build())))
@@ -168,12 +160,9 @@ public Component formatEmpty() {
}
private CompletableFuture getReportFormatName(UUID id) {
- return usernames
- .getStoredUsername(id)
- .thenApplyAsync(
- name -> {
- return PlayerComponent.player(Bukkit.getPlayer(id), name, NameStyle.FANCY);
- });
+ return usernames.getStoredUsername(id).thenApplyAsync(name -> {
+ return PlayerComponent.player(Bukkit.getPlayer(id), name, NameStyle.FANCY);
+ });
}
private void checkEnabled() {
diff --git a/src/main/java/dev/pgm/community/assistance/feature/AssistanceFeature.java b/core/src/main/java/dev/pgm/community/assistance/feature/AssistanceFeature.java
similarity index 100%
rename from src/main/java/dev/pgm/community/assistance/feature/AssistanceFeature.java
rename to core/src/main/java/dev/pgm/community/assistance/feature/AssistanceFeature.java
diff --git a/src/main/java/dev/pgm/community/assistance/feature/AssistanceFeatureBase.java b/core/src/main/java/dev/pgm/community/assistance/feature/AssistanceFeatureBase.java
similarity index 100%
rename from src/main/java/dev/pgm/community/assistance/feature/AssistanceFeatureBase.java
rename to core/src/main/java/dev/pgm/community/assistance/feature/AssistanceFeatureBase.java
diff --git a/src/main/java/dev/pgm/community/assistance/feature/types/NoDBAssistanceFeature.java b/core/src/main/java/dev/pgm/community/assistance/feature/types/NoDBAssistanceFeature.java
similarity index 100%
rename from src/main/java/dev/pgm/community/assistance/feature/types/NoDBAssistanceFeature.java
rename to core/src/main/java/dev/pgm/community/assistance/feature/types/NoDBAssistanceFeature.java
diff --git a/src/main/java/dev/pgm/community/assistance/feature/types/SQLAssistanceFeature.java b/core/src/main/java/dev/pgm/community/assistance/feature/types/SQLAssistanceFeature.java
similarity index 90%
rename from src/main/java/dev/pgm/community/assistance/feature/types/SQLAssistanceFeature.java
rename to core/src/main/java/dev/pgm/community/assistance/feature/types/SQLAssistanceFeature.java
index 5f4ff6db..bb526187 100644
--- a/src/main/java/dev/pgm/community/assistance/feature/types/SQLAssistanceFeature.java
+++ b/core/src/main/java/dev/pgm/community/assistance/feature/types/SQLAssistanceFeature.java
@@ -51,11 +51,9 @@ public CompletableFuture> query(String target) {
// CONVERT TO UUID if username
return users
.getStoredId(target)
- .thenApplyAsync(
- uuid ->
- uuid.isPresent()
- ? service.queryList(uuid.get().toString()).join()
- : Lists.newArrayList());
+ .thenApplyAsync(uuid -> uuid.isPresent()
+ ? service.queryList(uuid.get().toString()).join()
+ : Lists.newArrayList());
}
return service.queryList(target);
diff --git a/src/main/java/dev/pgm/community/assistance/menu/ReportCategory.java b/core/src/main/java/dev/pgm/community/assistance/menu/ReportCategory.java
similarity index 100%
rename from src/main/java/dev/pgm/community/assistance/menu/ReportCategory.java
rename to core/src/main/java/dev/pgm/community/assistance/menu/ReportCategory.java
diff --git a/src/main/java/dev/pgm/community/assistance/menu/ReportCategoryMenu.java b/core/src/main/java/dev/pgm/community/assistance/menu/ReportCategoryMenu.java
similarity index 100%
rename from src/main/java/dev/pgm/community/assistance/menu/ReportCategoryMenu.java
rename to core/src/main/java/dev/pgm/community/assistance/menu/ReportCategoryMenu.java
diff --git a/src/main/java/dev/pgm/community/assistance/menu/ReportReason.java b/core/src/main/java/dev/pgm/community/assistance/menu/ReportReason.java
similarity index 100%
rename from src/main/java/dev/pgm/community/assistance/menu/ReportReason.java
rename to core/src/main/java/dev/pgm/community/assistance/menu/ReportReason.java
diff --git a/src/main/java/dev/pgm/community/assistance/menu/ReportReasonsMenu.java b/core/src/main/java/dev/pgm/community/assistance/menu/ReportReasonsMenu.java
similarity index 100%
rename from src/main/java/dev/pgm/community/assistance/menu/ReportReasonsMenu.java
rename to core/src/main/java/dev/pgm/community/assistance/menu/ReportReasonsMenu.java
diff --git a/core/src/main/java/dev/pgm/community/assistance/services/AssistanceQuery.java b/core/src/main/java/dev/pgm/community/assistance/services/AssistanceQuery.java
new file mode 100644
index 00000000..93ccc7be
--- /dev/null
+++ b/core/src/main/java/dev/pgm/community/assistance/services/AssistanceQuery.java
@@ -0,0 +1,17 @@
+package dev.pgm.community.assistance.services;
+
+public interface AssistanceQuery {
+
+ static final String TABLE_NAME = "reports";
+ static final String TABLE_FIELDS = "(id VARCHAR(36) PRIMARY KEY, "
+ + "sender VARCHAR(36), "
+ + "reported VARCHAR(36), "
+ + "reason VARCHAR(255), "
+ + "time LONG, "
+ + "server VARCHAR(255))";
+ static final String INSERT_REPORT_QUERY = "INSERT INTO "
+ + TABLE_NAME
+ + "(id, sender, reported, reason, time, server) VALUES (?, ?, ?, ?, ?, ?)";
+ static final String SELECT_REPORT_QUERY =
+ "SELECT id, sender, reason, time FROM " + TABLE_NAME + " WHERE reported = ?";
+}
diff --git a/src/main/java/dev/pgm/community/assistance/services/SQLAssistanceService.java b/core/src/main/java/dev/pgm/community/assistance/services/SQLAssistanceService.java
similarity index 100%
rename from src/main/java/dev/pgm/community/assistance/services/SQLAssistanceService.java
rename to core/src/main/java/dev/pgm/community/assistance/services/SQLAssistanceService.java
diff --git a/src/main/java/dev/pgm/community/broadcast/BroadcastCommand.java b/core/src/main/java/dev/pgm/community/broadcast/BroadcastCommand.java
similarity index 100%
rename from src/main/java/dev/pgm/community/broadcast/BroadcastCommand.java
rename to core/src/main/java/dev/pgm/community/broadcast/BroadcastCommand.java
diff --git a/src/main/java/dev/pgm/community/broadcast/BroadcastConfig.java b/core/src/main/java/dev/pgm/community/broadcast/BroadcastConfig.java
similarity index 90%
rename from src/main/java/dev/pgm/community/broadcast/BroadcastConfig.java
rename to core/src/main/java/dev/pgm/community/broadcast/BroadcastConfig.java
index 497eac60..17506c9d 100644
--- a/src/main/java/dev/pgm/community/broadcast/BroadcastConfig.java
+++ b/core/src/main/java/dev/pgm/community/broadcast/BroadcastConfig.java
@@ -69,9 +69,8 @@ public void reload(Configuration config) {
this.announceEnabled = config.getBoolean(getAnnounceKey() + ".enabled");
this.announceDelay = config.getInt(getAnnounceKey() + ".delay-seconds");
this.announcePrefix = parseComponent(config.getString(getAnnounceKey() + ".prefix"));
- this.announceMessages =
- config.getStringList(getAnnounceKey() + ".messages").stream()
- .map(TextParser::parseComponent)
- .collect(Collectors.toList());
+ this.announceMessages = config.getStringList(getAnnounceKey() + ".messages").stream()
+ .map(TextParser::parseComponent)
+ .collect(Collectors.toList());
}
}
diff --git a/src/main/java/dev/pgm/community/broadcast/BroadcastFeature.java b/core/src/main/java/dev/pgm/community/broadcast/BroadcastFeature.java
similarity index 100%
rename from src/main/java/dev/pgm/community/broadcast/BroadcastFeature.java
rename to core/src/main/java/dev/pgm/community/broadcast/BroadcastFeature.java
diff --git a/src/main/java/dev/pgm/community/chat/management/ChatManagementCommand.java b/core/src/main/java/dev/pgm/community/chat/management/ChatManagementCommand.java
similarity index 93%
rename from src/main/java/dev/pgm/community/chat/management/ChatManagementCommand.java
rename to core/src/main/java/dev/pgm/community/chat/management/ChatManagementCommand.java
index 0fe5af95..facebc41 100644
--- a/src/main/java/dev/pgm/community/chat/management/ChatManagementCommand.java
+++ b/core/src/main/java/dev/pgm/community/chat/management/ChatManagementCommand.java
@@ -28,9 +28,8 @@ public ChatManagementCommand() {
@CommandDescription("View the current chat mode status")
@Permission(CommunityPermissions.CHAT_MANAGEMENT)
public void viewStatus(CommandAudience audience) {
- audience.sendMessage(
- TextFormatter.horizontalLineHeading(
- audience.getSender(), text("Chat Status", NamedTextColor.YELLOW), NamedTextColor.GRAY));
+ audience.sendMessage(TextFormatter.horizontalLineHeading(
+ audience.getSender(), text("Chat Status", NamedTextColor.YELLOW), NamedTextColor.GRAY));
audience.sendMessage(formatStatus(text("Chat Lockdown"), chat.isLockdown()));
audience.sendMessage(formatStatus(text("Chat Slowmode"), chat.isSlowmode()));
}
diff --git a/src/main/java/dev/pgm/community/chat/management/ChatManagementConfig.java b/core/src/main/java/dev/pgm/community/chat/management/ChatManagementConfig.java
similarity index 92%
rename from src/main/java/dev/pgm/community/chat/management/ChatManagementConfig.java
rename to core/src/main/java/dev/pgm/community/chat/management/ChatManagementConfig.java
index 9c811c7e..fe4e64ff 100644
--- a/src/main/java/dev/pgm/community/chat/management/ChatManagementConfig.java
+++ b/core/src/main/java/dev/pgm/community/chat/management/ChatManagementConfig.java
@@ -52,8 +52,9 @@ public void reload(Configuration config) {
super.reload(config);
this.slowmodeSpeed = config.getInt(KEY + ".slowmode-speed");
this.loginAlerts = config.getBoolean(KEY + ".login-alert");
- this.lastSentMessage =
- CacheBuilder.newBuilder().expireAfterWrite(slowmodeSpeed, TimeUnit.SECONDS).build();
+ this.lastSentMessage = CacheBuilder.newBuilder()
+ .expireAfterWrite(slowmodeSpeed, TimeUnit.SECONDS)
+ .build();
this.blockRepeatedMessages = config.getBoolean(KEY + ".block-repeated-messages");
this.expireRepeatedMessages =
parseDuration(config.getString(KEY + ".expire-repeated-messages"));
diff --git a/src/main/java/dev/pgm/community/chat/management/ChatManagementFeature.java b/core/src/main/java/dev/pgm/community/chat/management/ChatManagementFeature.java
similarity index 88%
rename from src/main/java/dev/pgm/community/chat/management/ChatManagementFeature.java
rename to core/src/main/java/dev/pgm/community/chat/management/ChatManagementFeature.java
index 9cd7f1f4..4ebb1b6e 100644
--- a/src/main/java/dev/pgm/community/chat/management/ChatManagementFeature.java
+++ b/core/src/main/java/dev/pgm/community/chat/management/ChatManagementFeature.java
@@ -38,12 +38,10 @@ public class ChatManagementFeature extends FeatureBase {
public ChatManagementFeature(Configuration config, Logger logger) {
super(new ChatManagementConfig(config), logger, "Chat Management");
- this.lastMessageCache =
- CacheBuilder.newBuilder()
- .expireAfterWrite(
- getChatConfig().getRepeatedMessagesExpireDuration().toMillis(),
- TimeUnit.MILLISECONDS)
- .build();
+ this.lastMessageCache = CacheBuilder.newBuilder()
+ .expireAfterWrite(
+ getChatConfig().getRepeatedMessagesExpireDuration().toMillis(), TimeUnit.MILLISECONDS)
+ .build();
if (getConfig().isEnabled()) {
enable();
}
@@ -70,17 +68,14 @@ public void toggleSlowmode(CommandSender sender) {
}
private void broadcastModeChange(Component modeName, Component hover, boolean enabled) {
- Component message =
- text()
- .append(modeName)
- .append(text(" has been "))
- .append(
- enabled
- ? text("enabled", NamedTextColor.GREEN)
- : text("disabled", NamedTextColor.RED))
- .color(NamedTextColor.GRAY)
- .hoverEvent(HoverEvent.showText(hover))
- .build();
+ Component message = text()
+ .append(modeName)
+ .append(text(" has been "))
+ .append(
+ enabled ? text("enabled", NamedTextColor.GREEN) : text("disabled", NamedTextColor.RED))
+ .color(NamedTextColor.GRAY)
+ .hoverEvent(HoverEvent.showText(hover))
+ .build();
BroadcastUtils.sendGlobalWarning(message);
}
@@ -166,12 +161,11 @@ public void onPlayerChat(AsyncPlayerChatEvent event) {
if (timeSince.getSeconds() < getChatConfig().getSlowmodeSpeed()) {
long seconds = (getChatConfig().getSlowmodeSpeed() - timeSince.getSeconds());
- Component cooldownMsg =
- text("Please wait ")
- .append(text(seconds, NamedTextColor.RED, TextDecoration.BOLD))
- .append(formatSeconds(seconds))
- .append(text(" before sending another message"))
- .color(NamedTextColor.GRAY);
+ Component cooldownMsg = text("Please wait ")
+ .append(text(seconds, NamedTextColor.RED, TextDecoration.BOLD))
+ .append(formatSeconds(seconds))
+ .append(text(" before sending another message"))
+ .color(NamedTextColor.GRAY);
viewer.sendWarning(cooldownMsg);
event.setCancelled(true);
diff --git a/src/main/java/dev/pgm/community/chat/network/NetworkChatConfig.java b/core/src/main/java/dev/pgm/community/chat/network/NetworkChatConfig.java
similarity index 100%
rename from src/main/java/dev/pgm/community/chat/network/NetworkChatConfig.java
rename to core/src/main/java/dev/pgm/community/chat/network/NetworkChatConfig.java
diff --git a/src/main/java/dev/pgm/community/chat/network/NetworkChatFeature.java b/core/src/main/java/dev/pgm/community/chat/network/NetworkChatFeature.java
similarity index 93%
rename from src/main/java/dev/pgm/community/chat/network/NetworkChatFeature.java
rename to core/src/main/java/dev/pgm/community/chat/network/NetworkChatFeature.java
index f81c3270..98635dde 100644
--- a/src/main/java/dev/pgm/community/chat/network/NetworkChatFeature.java
+++ b/core/src/main/java/dev/pgm/community/chat/network/NetworkChatFeature.java
@@ -52,6 +52,10 @@ public void recieveUpdate(NetworkChatMessage message) {
}
private Component formatMessage(Component sender, Component message) {
- return text().append(sender).append(text(": ", NamedTextColor.WHITE)).append(message).build();
+ return text()
+ .append(sender)
+ .append(text(": ", NamedTextColor.WHITE))
+ .append(message)
+ .build();
}
}
diff --git a/src/main/java/dev/pgm/community/chat/network/NetworkChatMessage.java b/core/src/main/java/dev/pgm/community/chat/network/NetworkChatMessage.java
similarity index 100%
rename from src/main/java/dev/pgm/community/chat/network/NetworkChatMessage.java
rename to core/src/main/java/dev/pgm/community/chat/network/NetworkChatMessage.java
diff --git a/src/main/java/dev/pgm/community/commands/CommunityPluginCommand.java b/core/src/main/java/dev/pgm/community/commands/CommunityPluginCommand.java
similarity index 77%
rename from src/main/java/dev/pgm/community/commands/CommunityPluginCommand.java
rename to core/src/main/java/dev/pgm/community/commands/CommunityPluginCommand.java
index 56c87e3c..7782b636 100644
--- a/src/main/java/dev/pgm/community/commands/CommunityPluginCommand.java
+++ b/core/src/main/java/dev/pgm/community/commands/CommunityPluginCommand.java
@@ -40,11 +40,10 @@ public void reload(CommandAudience audience) {
@CommandDescription("View database stats")
@Permission(CommunityPermissions.RELOAD)
public void stats(CommandAudience audience) {
- audience.sendMessage(
- TextFormatter.horizontalLineHeading(
- audience.getSender(),
- text("Community Database Stats", NamedTextColor.YELLOW),
- NamedTextColor.DARK_RED));
+ audience.sendMessage(TextFormatter.horizontalLineHeading(
+ audience.getSender(),
+ text("Community Database Stats", NamedTextColor.YELLOW),
+ NamedTextColor.DARK_RED));
sendTotalCount(users, "Total Users", audience);
sendTotalCount(moderation, "Total Punishments", audience);
sendTotalCount(reports, "Total Reports", audience);
@@ -53,13 +52,10 @@ public void stats(CommandAudience audience) {
private void sendTotalCount(Feature feature, String countName, CommandAudience audience) {
feature
.count()
- .thenAcceptAsync(
- total ->
- audience.sendMessage(
- text()
- .append(text(countName, NamedTextColor.GOLD))
- .append(text(": ", NamedTextColor.GRAY))
- .append(text(total, NamedTextColor.GREEN))
- .build()));
+ .thenAcceptAsync(total -> audience.sendMessage(text()
+ .append(text(countName, NamedTextColor.GOLD))
+ .append(text(": ", NamedTextColor.GRAY))
+ .append(text(total, NamedTextColor.GREEN))
+ .build()));
}
}
diff --git a/src/main/java/dev/pgm/community/commands/ContainerCommand.java b/core/src/main/java/dev/pgm/community/commands/ContainerCommand.java
similarity index 96%
rename from src/main/java/dev/pgm/community/commands/ContainerCommand.java
rename to core/src/main/java/dev/pgm/community/commands/ContainerCommand.java
index c2d7be6e..5c7a43a4 100644
--- a/src/main/java/dev/pgm/community/commands/ContainerCommand.java
+++ b/core/src/main/java/dev/pgm/community/commands/ContainerCommand.java
@@ -100,10 +100,9 @@ public void onContainerClick(PlayerInteractEvent event) {
if (isChoosing(player) && canOpen(block) && event.getAction() == Action.LEFT_CLICK_BLOCK) {
event.setCancelled(true);
- viewer.sendMessage(
- text()
- .append(text("Now opening container at ", NamedTextColor.GRAY))
- .append(formatCoords(block, NamedTextColor.GREEN)));
+ viewer.sendMessage(text()
+ .append(text("Now opening container at ", NamedTextColor.GRAY))
+ .append(formatCoords(block, NamedTextColor.GREEN)));
InventoryHolder container = (InventoryHolder) block.getState();
editingPlayers.add(player.getUniqueId());
diff --git a/src/main/java/dev/pgm/community/commands/FlightCommand.java b/core/src/main/java/dev/pgm/community/commands/FlightCommand.java
similarity index 68%
rename from src/main/java/dev/pgm/community/commands/FlightCommand.java
rename to core/src/main/java/dev/pgm/community/commands/FlightCommand.java
index e08f8e7d..8e15a3e2 100644
--- a/src/main/java/dev/pgm/community/commands/FlightCommand.java
+++ b/core/src/main/java/dev/pgm/community/commands/FlightCommand.java
@@ -26,12 +26,11 @@ public void fly(CommandAudience sender, @Argument("target") TargetPlayer target)
PlayerSelection selection = getPlayers(sender, target.getIdentifier());
if (!selection.getPlayers().isEmpty()) {
selection.getPlayers().forEach(this::toggleFlight);
- sender.sendMessage(
- text()
- .append(text("Flight has been toggled for "))
- .append(selection.getText())
- .color(NamedTextColor.GRAY)
- .build());
+ sender.sendMessage(text()
+ .append(text("Flight has been toggled for "))
+ .append(selection.getText())
+ .color(NamedTextColor.GRAY)
+ .build());
} else {
selection.sendNoPlayerComponent(sender);
}
@@ -43,15 +42,13 @@ public void fly(CommandAudience sender, @Argument("target") TargetPlayer target)
@Permission(CommunityPermissions.FLIGHT_SPEED)
public void flySpeed(CommandAudience audience, Player player, @Argument("speed") Float speed) {
if (speed == null) {
- audience.sendMessage(
- text("Your flight speed is ", NamedTextColor.GRAY)
- .append(text(player.getFlySpeed() * 100, NamedTextColor.GREEN)));
+ audience.sendMessage(text("Your flight speed is ", NamedTextColor.GRAY)
+ .append(text(player.getFlySpeed() * 100, NamedTextColor.GREEN)));
return;
}
player.setFlySpeed(Math.abs(Math.min(speed, 10) / 10));
- audience.sendMessage(
- text("Flight speed set to ", NamedTextColor.GRAY)
- .append(text(player.getFlySpeed() * 100, NamedTextColor.GREEN)));
+ audience.sendMessage(text("Flight speed set to ", NamedTextColor.GRAY)
+ .append(text(player.getFlySpeed() * 100, NamedTextColor.GREEN)));
}
private void toggleFlight(Player player) {
@@ -59,11 +56,9 @@ private void toggleFlight(Player player) {
player.setAllowFlight(!fly);
player.setFlying(!fly);
Audience.get(player)
- .sendMessage(
- text("Toggled flying mode ", NamedTextColor.GRAY)
- .append(
- text(
- player.isFlying() ? "On" : "Off",
- player.isFlying() ? NamedTextColor.GREEN : NamedTextColor.RED)));
+ .sendMessage(text("Toggled flying mode ", NamedTextColor.GRAY)
+ .append(text(
+ player.isFlying() ? "On" : "Off",
+ player.isFlying() ? NamedTextColor.GREEN : NamedTextColor.RED)));
}
}
diff --git a/src/main/java/dev/pgm/community/commands/GamemodeCommand.java b/core/src/main/java/dev/pgm/community/commands/GamemodeCommand.java
similarity index 73%
rename from src/main/java/dev/pgm/community/commands/GamemodeCommand.java
rename to core/src/main/java/dev/pgm/community/commands/GamemodeCommand.java
index bfb2d7ce..e717a296 100644
--- a/src/main/java/dev/pgm/community/commands/GamemodeCommand.java
+++ b/core/src/main/java/dev/pgm/community/commands/GamemodeCommand.java
@@ -30,33 +30,30 @@ public void gamemode(
// /gm
if (gamemode == null && target == null) {
// Send current gamemode
- viewer.sendMessage(
- text()
- .append(text("Your current gamemode is ", NamedTextColor.GRAY))
- .append(getGamemodeName(player.getGameMode()))
- .build());
+ viewer.sendMessage(text()
+ .append(text("Your current gamemode is ", NamedTextColor.GRAY))
+ .append(getGamemodeName(player.getGameMode()))
+ .build());
} else if (gamemode != null && target == null && !everyone) {
// /gm
player.setGameMode(gamemode);
- viewer.sendMessage(
- text()
- .append(text("Set your gamemode to ", NamedTextColor.GRAY))
- .append(getGamemodeName(player.getGameMode()))
- .build());
+ viewer.sendMessage(text()
+ .append(text("Set your gamemode to ", NamedTextColor.GRAY))
+ .append(getGamemodeName(player.getGameMode()))
+ .build());
} else {
// /gm
PlayerSelection selection = getPlayers(viewer, everyone ? "*" : target.getName());
if (!selection.getPlayers().isEmpty()) {
selection.getPlayers().forEach(pl -> pl.setGameMode(gamemode));
- viewer.sendMessage(
- text()
- .append(text("Gamemode has been set to "))
- .append(getGamemodeName(gamemode))
- .append(text(" for "))
- .append(selection.getText())
- .color(NamedTextColor.GRAY)
- .build());
+ viewer.sendMessage(text()
+ .append(text("Gamemode has been set to "))
+ .append(getGamemodeName(gamemode))
+ .append(text(" for "))
+ .append(selection.getText())
+ .color(NamedTextColor.GRAY)
+ .build());
} else {
selection.sendNoPlayerComponent(viewer);
}
diff --git a/src/main/java/dev/pgm/community/commands/ServerInfoCommand.java b/core/src/main/java/dev/pgm/community/commands/ServerInfoCommand.java
similarity index 78%
rename from src/main/java/dev/pgm/community/commands/ServerInfoCommand.java
rename to core/src/main/java/dev/pgm/community/commands/ServerInfoCommand.java
index dc952ecd..c5c88eab 100644
--- a/src/main/java/dev/pgm/community/commands/ServerInfoCommand.java
+++ b/core/src/main/java/dev/pgm/community/commands/ServerInfoCommand.java
@@ -23,11 +23,10 @@ public ServerInfoCommand() {
@CommandDescription("View how long the server has been online")
public void uptime(CommandAudience sender) {
Duration uptime = Duration.between(startTime, Instant.now());
- sender.sendMessage(
- text()
- .append(text("Server has been online for "))
- .append(TemporalComponent.duration(uptime, NamedTextColor.GREEN))
- .color(NamedTextColor.GRAY)
- .build());
+ sender.sendMessage(text()
+ .append(text("Server has been online for "))
+ .append(TemporalComponent.duration(uptime, NamedTextColor.GREEN))
+ .color(NamedTextColor.GRAY)
+ .build());
}
}
diff --git a/src/main/java/dev/pgm/community/commands/StaffCommand.java b/core/src/main/java/dev/pgm/community/commands/StaffCommand.java
similarity index 59%
rename from src/main/java/dev/pgm/community/commands/StaffCommand.java
rename to core/src/main/java/dev/pgm/community/commands/StaffCommand.java
index 4bbab7f8..4b2cab67 100644
--- a/src/main/java/dev/pgm/community/commands/StaffCommand.java
+++ b/core/src/main/java/dev/pgm/community/commands/StaffCommand.java
@@ -22,25 +22,19 @@ public class StaffCommand extends CommunityCommand {
@Command("staff|mods|admins|ops")
@CommandDescription("View a list of online staff members")
public void staff(CommandAudience viewer) {
- List onlineStaff =
- Bukkit.getOnlinePlayers().stream()
- .filter(
- player ->
- (player.hasPermission(CommunityPermissions.STAFF)
- && (!isDisguised(player)
- || viewer.hasPermission(CommunityPermissions.STAFF))))
- .map(player -> PlayerComponent.player(player, NameStyle.VERBOSE))
- .collect(Collectors.toList());
+ List onlineStaff = Bukkit.getOnlinePlayers().stream()
+ .filter(player -> (player.hasPermission(CommunityPermissions.STAFF)
+ && (!isDisguised(player) || viewer.hasPermission(CommunityPermissions.STAFF))))
+ .map(player -> PlayerComponent.player(player, NameStyle.VERBOSE))
+ .collect(Collectors.toList());
// FORMAT: Online Staff ({count}): {names}
- Component staffCount =
- text(Integer.toString(onlineStaff.size()))
- .color(onlineStaff.isEmpty() ? NamedTextColor.RED : NamedTextColor.AQUA);
-
- Component content =
- onlineStaff.isEmpty()
- ? translatable("moderation.staff.empty")
- : TextFormatter.list(onlineStaff, NamedTextColor.GRAY);
+ Component staffCount = text(Integer.toString(onlineStaff.size()))
+ .color(onlineStaff.isEmpty() ? NamedTextColor.RED : NamedTextColor.AQUA);
+
+ Component content = onlineStaff.isEmpty()
+ ? translatable("moderation.staff.empty")
+ : TextFormatter.list(onlineStaff, NamedTextColor.GRAY);
Component staff =
translatable("moderation.staff.name", NamedTextColor.GRAY, staffCount, content);
diff --git a/src/main/java/dev/pgm/community/commands/SudoCommand.java b/core/src/main/java/dev/pgm/community/commands/SudoCommand.java
similarity index 80%
rename from src/main/java/dev/pgm/community/commands/SudoCommand.java
rename to core/src/main/java/dev/pgm/community/commands/SudoCommand.java
index 3d08bda2..7dba3623 100644
--- a/src/main/java/dev/pgm/community/commands/SudoCommand.java
+++ b/core/src/main/java/dev/pgm/community/commands/SudoCommand.java
@@ -30,15 +30,14 @@ public void sudo(
if (!selection.getPlayers().isEmpty()) {
final String targetCommand = command.startsWith("/") ? command.substring(1) : command;
selection.getPlayers().forEach(player -> player.performCommand(targetCommand));
- sender.sendMessage(
- text()
- .append(text("Forcing "))
- .append(selection.getText())
- .append(text(" to run "))
- .append(text("/", NamedTextColor.AQUA))
- .append(text(targetCommand, NamedTextColor.AQUA))
- .color(NamedTextColor.GRAY)
- .build());
+ sender.sendMessage(text()
+ .append(text("Forcing "))
+ .append(selection.getText())
+ .append(text(" to run "))
+ .append(text("/", NamedTextColor.AQUA))
+ .append(text(targetCommand, NamedTextColor.AQUA))
+ .color(NamedTextColor.GRAY)
+ .build());
} else {
selection.sendNoPlayerComponent(sender);
}
diff --git a/src/main/java/dev/pgm/community/commands/VanishedCommand.java b/core/src/main/java/dev/pgm/community/commands/VanishedCommand.java
similarity index 74%
rename from src/main/java/dev/pgm/community/commands/VanishedCommand.java
rename to core/src/main/java/dev/pgm/community/commands/VanishedCommand.java
index 65cc7e35..c01bf4da 100644
--- a/src/main/java/dev/pgm/community/commands/VanishedCommand.java
+++ b/core/src/main/java/dev/pgm/community/commands/VanishedCommand.java
@@ -23,23 +23,21 @@ public class VanishedCommand extends CommunityCommand {
@CommandDescription("View a list of online vanished players")
@Permission(CommunityPermissions.VIEW_VANISHED)
public void viewVanished(CommandAudience viewer) {
- List vanishedNames =
- Bukkit.getOnlinePlayers().stream()
- .filter(Integration::isVanished)
- .map(player -> PlayerComponent.player(player, NameStyle.VERBOSE))
- .collect(Collectors.toList());
+ List vanishedNames = Bukkit.getOnlinePlayers().stream()
+ .filter(Integration::isVanished)
+ .map(player -> PlayerComponent.player(player, NameStyle.VERBOSE))
+ .collect(Collectors.toList());
if (vanishedNames.isEmpty()) {
viewer.sendWarning(text("No online players are vanished!"));
return;
}
- Component count =
- text()
- .append(text("Vanished", NamedTextColor.DARK_AQUA))
- .append(text(": "))
- .append(text(vanishedNames.size()))
- .build();
+ Component count = text()
+ .append(text("Vanished", NamedTextColor.DARK_AQUA))
+ .append(text(": "))
+ .append(text(vanishedNames.size()))
+ .build();
Component nameList = TextFormatter.list(vanishedNames, NamedTextColor.GRAY);
viewer.sendMessage(count);
diff --git a/src/main/java/dev/pgm/community/commands/graph/CommunityCommandGraph.java b/core/src/main/java/dev/pgm/community/commands/graph/CommunityCommandGraph.java
similarity index 98%
rename from src/main/java/dev/pgm/community/commands/graph/CommunityCommandGraph.java
rename to core/src/main/java/dev/pgm/community/commands/graph/CommunityCommandGraph.java
index 31efd31e..68a5a484 100644
--- a/src/main/java/dev/pgm/community/commands/graph/CommunityCommandGraph.java
+++ b/core/src/main/java/dev/pgm/community/commands/graph/CommunityCommandGraph.java
@@ -19,7 +19,6 @@
import dev.pgm.community.commands.providers.TargetPlayerParser;
import dev.pgm.community.freeze.FreezeCommand;
import dev.pgm.community.friends.commands.FriendshipCommand;
-import dev.pgm.community.mobs.MobCommand;
import dev.pgm.community.moderation.commands.BanCommand;
import dev.pgm.community.moderation.commands.KickCommand;
import dev.pgm.community.moderation.commands.MuteCommand;
@@ -112,9 +111,6 @@ protected void registerCommands() {
// Friends
register(new FriendshipCommand());
- // Mobs
- register(new MobCommand());
-
// Moderation
register(new BanCommand());
register(new KickCommand());
diff --git a/src/main/java/dev/pgm/community/commands/injectors/CommandAudienceProvider.java b/core/src/main/java/dev/pgm/community/commands/injectors/CommandAudienceProvider.java
similarity index 100%
rename from src/main/java/dev/pgm/community/commands/injectors/CommandAudienceProvider.java
rename to core/src/main/java/dev/pgm/community/commands/injectors/CommandAudienceProvider.java
diff --git a/src/main/java/dev/pgm/community/commands/player/TargetPlayer.java b/core/src/main/java/dev/pgm/community/commands/player/TargetPlayer.java
similarity index 100%
rename from src/main/java/dev/pgm/community/commands/player/TargetPlayer.java
rename to core/src/main/java/dev/pgm/community/commands/player/TargetPlayer.java
diff --git a/src/main/java/dev/pgm/community/commands/providers/GameModeParser.java b/core/src/main/java/dev/pgm/community/commands/providers/GameModeParser.java
similarity index 100%
rename from src/main/java/dev/pgm/community/commands/providers/GameModeParser.java
rename to core/src/main/java/dev/pgm/community/commands/providers/GameModeParser.java
diff --git a/src/main/java/dev/pgm/community/commands/providers/TargetPlayerParser.java b/core/src/main/java/dev/pgm/community/commands/providers/TargetPlayerParser.java
similarity index 100%
rename from src/main/java/dev/pgm/community/commands/providers/TargetPlayerParser.java
rename to core/src/main/java/dev/pgm/community/commands/providers/TargetPlayerParser.java
diff --git a/src/main/java/dev/pgm/community/database/DatabaseConfig.java b/core/src/main/java/dev/pgm/community/database/DatabaseConfig.java
similarity index 100%
rename from src/main/java/dev/pgm/community/database/DatabaseConfig.java
rename to core/src/main/java/dev/pgm/community/database/DatabaseConfig.java
diff --git a/src/main/java/dev/pgm/community/database/DatabaseConnection.java b/core/src/main/java/dev/pgm/community/database/DatabaseConnection.java
similarity index 51%
rename from src/main/java/dev/pgm/community/database/DatabaseConnection.java
rename to core/src/main/java/dev/pgm/community/database/DatabaseConnection.java
index 0772113e..dbf9f007 100644
--- a/src/main/java/dev/pgm/community/database/DatabaseConnection.java
+++ b/core/src/main/java/dev/pgm/community/database/DatabaseConnection.java
@@ -17,23 +17,18 @@ public DatabaseConnection(Community plugin) {
Map extraOptions = Maps.newHashMap();
extraOptions.put("serverTimezone", config.getTimezone());
- DatabaseOptions options =
- DatabaseOptions.builder()
- .poolName(plugin.getDescription().getName() + " DB")
- .logger(plugin.getLogger())
- .mysql(
- config.getUsername(),
- config.getPassword(),
- config.getDatabaseName(),
- config.getHost())
- .build();
-
- PooledDatabaseOptions poolOptions =
- PooledDatabaseOptions.builder()
- .options(options)
- .maxConnections(config.getMaxDatabaseConnections())
- .dataSourceProperties(extraOptions)
- .build();
+ DatabaseOptions options = DatabaseOptions.builder()
+ .poolName(plugin.getDescription().getName() + " DB")
+ .logger(plugin.getLogger())
+ .mysql(
+ config.getUsername(), config.getPassword(), config.getDatabaseName(), config.getHost())
+ .build();
+
+ PooledDatabaseOptions poolOptions = PooledDatabaseOptions.builder()
+ .options(options)
+ .maxConnections(config.getMaxDatabaseConnections())
+ .dataSourceProperties(extraOptions)
+ .build();
// Setup the main global DB
BukkitDB.createHikariDatabase(plugin, poolOptions);
diff --git a/src/main/java/dev/pgm/community/database/Query.java b/core/src/main/java/dev/pgm/community/database/Query.java
similarity index 100%
rename from src/main/java/dev/pgm/community/database/Query.java
rename to core/src/main/java/dev/pgm/community/database/Query.java
diff --git a/src/main/java/dev/pgm/community/database/Savable.java b/core/src/main/java/dev/pgm/community/database/Savable.java
similarity index 100%
rename from src/main/java/dev/pgm/community/database/Savable.java
rename to core/src/main/java/dev/pgm/community/database/Savable.java
diff --git a/src/main/java/dev/pgm/community/events/CommunityEvent.java b/core/src/main/java/dev/pgm/community/events/CommunityEvent.java
similarity index 100%
rename from src/main/java/dev/pgm/community/events/CommunityEvent.java
rename to core/src/main/java/dev/pgm/community/events/CommunityEvent.java
diff --git a/src/main/java/dev/pgm/community/events/PlayerHelpRequestEvent.java b/core/src/main/java/dev/pgm/community/events/PlayerHelpRequestEvent.java
similarity index 100%
rename from src/main/java/dev/pgm/community/events/PlayerHelpRequestEvent.java
rename to core/src/main/java/dev/pgm/community/events/PlayerHelpRequestEvent.java
diff --git a/src/main/java/dev/pgm/community/events/PlayerPunishmentEvent.java b/core/src/main/java/dev/pgm/community/events/PlayerPunishmentEvent.java
similarity index 100%
rename from src/main/java/dev/pgm/community/events/PlayerPunishmentEvent.java
rename to core/src/main/java/dev/pgm/community/events/PlayerPunishmentEvent.java
diff --git a/src/main/java/dev/pgm/community/events/PlayerReportEvent.java b/core/src/main/java/dev/pgm/community/events/PlayerReportEvent.java
similarity index 100%
rename from src/main/java/dev/pgm/community/events/PlayerReportEvent.java
rename to core/src/main/java/dev/pgm/community/events/PlayerReportEvent.java
diff --git a/src/main/java/dev/pgm/community/events/UserProfileLoadEvent.java b/core/src/main/java/dev/pgm/community/events/UserProfileLoadEvent.java
similarity index 100%
rename from src/main/java/dev/pgm/community/events/UserProfileLoadEvent.java
rename to core/src/main/java/dev/pgm/community/events/UserProfileLoadEvent.java
diff --git a/src/main/java/dev/pgm/community/feature/Feature.java b/core/src/main/java/dev/pgm/community/feature/Feature.java
similarity index 100%
rename from src/main/java/dev/pgm/community/feature/Feature.java
rename to core/src/main/java/dev/pgm/community/feature/Feature.java
diff --git a/src/main/java/dev/pgm/community/feature/FeatureBase.java b/core/src/main/java/dev/pgm/community/feature/FeatureBase.java
similarity index 100%
rename from src/main/java/dev/pgm/community/feature/FeatureBase.java
rename to core/src/main/java/dev/pgm/community/feature/FeatureBase.java
diff --git a/src/main/java/dev/pgm/community/feature/FeatureManager.java b/core/src/main/java/dev/pgm/community/feature/FeatureManager.java
similarity index 96%
rename from src/main/java/dev/pgm/community/feature/FeatureManager.java
rename to core/src/main/java/dev/pgm/community/feature/FeatureManager.java
index d3bd32ac..82465447 100644
--- a/src/main/java/dev/pgm/community/feature/FeatureManager.java
+++ b/core/src/main/java/dev/pgm/community/feature/FeatureManager.java
@@ -10,7 +10,6 @@
import dev.pgm.community.friends.feature.FriendshipFeature;
import dev.pgm.community.friends.feature.types.SQLFriendshipFeature;
import dev.pgm.community.info.InfoCommandsFeature;
-import dev.pgm.community.mobs.MobFeature;
import dev.pgm.community.moderation.feature.ModerationFeature;
import dev.pgm.community.moderation.feature.types.SQLModerationFeature;
import dev.pgm.community.motd.MotdFeature;
@@ -53,7 +52,6 @@ public class FeatureManager {
private final FreezeFeature freeze;
private final MutationFeature mutation;
private final BroadcastFeature broadcast;
- private final MobFeature mob;
private final MapPartyFeature party;
private final PollFeature polls;
@@ -88,7 +86,6 @@ public FeatureManager(
this.mutation = new MutationFeature(config, logger, inventory);
this.broadcast = new BroadcastFeature(config, logger);
this.chatNetwork = new NetworkChatFeature(config, logger, network);
- this.mob = new MobFeature(config, logger);
this.party = new MapPartyFeature(config, logger);
this.polls = new PollFeature(config, logger);
}
@@ -153,10 +150,6 @@ public RequestFeature getRequests() {
return requests;
}
- public MobFeature getMobs() {
- return mob;
- }
-
public MapPartyFeature getParty() {
return party;
}
@@ -181,7 +174,6 @@ public void reloadConfig(Configuration config) {
getNick().getConfig().reload(config);
getNetworkChat().getConfig().reload(config);
getRequests().getConfig().reload(config);
- getMobs().getConfig().reload(config);
getParty().getConfig().reload(config);
getPolls().getConfig().reload(config);
// TODO: Look into maybe unregister commands for features that have been disabled
@@ -204,7 +196,6 @@ public void disable() {
if (getNick().isEnabled()) getNick().disable();
if (getNetworkChat().isEnabled()) getNetworkChat().disable();
if (getRequests().isEnabled()) getRequests().disable();
- if (getMobs().isEnabled()) getMobs().disable();
if (getParty().isEnabled()) getParty().disable();
if (getPolls().isEnabled()) getPolls().disable();
}
diff --git a/src/main/java/dev/pgm/community/feature/SQLFeature.java b/core/src/main/java/dev/pgm/community/feature/SQLFeature.java
similarity index 100%
rename from src/main/java/dev/pgm/community/feature/SQLFeature.java
rename to core/src/main/java/dev/pgm/community/feature/SQLFeature.java
diff --git a/src/main/java/dev/pgm/community/feature/SQLFeatureBase.java b/core/src/main/java/dev/pgm/community/feature/SQLFeatureBase.java
similarity index 100%
rename from src/main/java/dev/pgm/community/feature/SQLFeatureBase.java
rename to core/src/main/java/dev/pgm/community/feature/SQLFeatureBase.java
diff --git a/src/main/java/dev/pgm/community/feature/config/FeatureConfig.java b/core/src/main/java/dev/pgm/community/feature/config/FeatureConfig.java
similarity index 100%
rename from src/main/java/dev/pgm/community/feature/config/FeatureConfig.java
rename to core/src/main/java/dev/pgm/community/feature/config/FeatureConfig.java
diff --git a/src/main/java/dev/pgm/community/feature/config/FeatureConfigImpl.java b/core/src/main/java/dev/pgm/community/feature/config/FeatureConfigImpl.java
similarity index 100%
rename from src/main/java/dev/pgm/community/feature/config/FeatureConfigImpl.java
rename to core/src/main/java/dev/pgm/community/feature/config/FeatureConfigImpl.java
diff --git a/src/main/java/dev/pgm/community/freeze/FreezeCommand.java b/core/src/main/java/dev/pgm/community/freeze/FreezeCommand.java
similarity index 84%
rename from src/main/java/dev/pgm/community/freeze/FreezeCommand.java
rename to core/src/main/java/dev/pgm/community/freeze/FreezeCommand.java
index 01e4f8f5..fc279fdb 100644
--- a/src/main/java/dev/pgm/community/freeze/FreezeCommand.java
+++ b/core/src/main/java/dev/pgm/community/freeze/FreezeCommand.java
@@ -46,12 +46,11 @@ public void sendFrozenList(CommandAudience sender) {
// Online Players
if (freeze.getOnlineCount() > 0) {
- Component names =
- join(
- text(", ", NamedTextColor.GRAY),
- freeze.getFrozenPlayers().stream()
- .map(p -> PlayerComponent.player(p, NameStyle.FANCY))
- .collect(Collectors.toList()));
+ Component names = join(
+ text(", ", NamedTextColor.GRAY),
+ freeze.getFrozenPlayers().stream()
+ .map(p -> PlayerComponent.player(p, NameStyle.FANCY))
+ .collect(Collectors.toList()));
sender.sendMessage(
formatFrozenList("moderation.freeze.frozenList.online", freeze.getOnlineCount(), names));
@@ -60,9 +59,8 @@ public void sendFrozenList(CommandAudience sender) {
// Offline Players
if (freeze.getOfflineCount() > 0) {
Component names = text(freeze.getOfflineFrozenNames());
- sender.sendMessage(
- formatFrozenList(
- "moderation.freeze.frozenList.offline", freeze.getOfflineCount(), names));
+ sender.sendMessage(formatFrozenList(
+ "moderation.freeze.frozenList.offline", freeze.getOfflineCount(), names));
}
}
diff --git a/src/main/java/dev/pgm/community/freeze/FreezeConfig.java b/core/src/main/java/dev/pgm/community/freeze/FreezeConfig.java
similarity index 100%
rename from src/main/java/dev/pgm/community/freeze/FreezeConfig.java
rename to core/src/main/java/dev/pgm/community/freeze/FreezeConfig.java
diff --git a/src/main/java/dev/pgm/community/freeze/FreezeFeature.java b/core/src/main/java/dev/pgm/community/freeze/FreezeFeature.java
similarity index 94%
rename from src/main/java/dev/pgm/community/freeze/FreezeFeature.java
rename to core/src/main/java/dev/pgm/community/freeze/FreezeFeature.java
index 724bad43..80b83759 100644
--- a/src/main/java/dev/pgm/community/freeze/FreezeFeature.java
+++ b/core/src/main/java/dev/pgm/community/freeze/FreezeFeature.java
@@ -101,15 +101,12 @@ public void setFrozen(CommandAudience sender, Player freezee, boolean frozen, bo
public static ItemStack getFreezeTool(CommandSender viewer) {
ItemStack stack = new ItemStack(TOOL_MATERIAL);
ItemMeta meta = stack.getItemMeta();
- meta.setDisplayName(
- ChatColor.WHITE
- + ChatColor.BOLD.toString()
- + TextTranslations.translate("moderation.freeze.itemName", viewer));
+ meta.setDisplayName(ChatColor.WHITE
+ + ChatColor.BOLD.toString()
+ + TextTranslations.translate("moderation.freeze.itemName", viewer));
meta.addItemFlags(ItemFlag.values());
- meta.setLore(
- Collections.singletonList(
- ChatColor.GRAY
- + TextTranslations.translate("moderation.freeze.itemDescription", viewer)));
+ meta.setLore(Collections.singletonList(
+ ChatColor.GRAY + TextTranslations.translate("moderation.freeze.itemDescription", viewer)));
stack.setItemMeta(meta);
return stack;
}
@@ -153,11 +150,10 @@ public void onObserverToolFreeze(final ObserverInteractEvent event) {
public void onPlayerCommand(final PlayerCommandPreprocessEvent event) {
if (freeze.isFrozen(event.getPlayer())
&& !event.getPlayer().hasPermission(CommunityPermissions.FREEZE)) {
- boolean allow =
- ALLOWED_CMDS.stream()
- .filter(cmd -> event.getMessage().startsWith(cmd))
- .findAny()
- .isPresent();
+ boolean allow = ALLOWED_CMDS.stream()
+ .filter(cmd -> event.getMessage().startsWith(cmd))
+ .findAny()
+ .isPresent();
if (!allow) {
// Don't allow commands except for those related to chat.
diff --git a/src/main/java/dev/pgm/community/freeze/FreezeManager.java b/core/src/main/java/dev/pgm/community/freeze/FreezeManager.java
similarity index 88%
rename from src/main/java/dev/pgm/community/freeze/FreezeManager.java
rename to core/src/main/java/dev/pgm/community/freeze/FreezeManager.java
index 8e2016fd..aaac5ced 100644
--- a/src/main/java/dev/pgm/community/freeze/FreezeManager.java
+++ b/core/src/main/java/dev/pgm/community/freeze/FreezeManager.java
@@ -95,11 +95,10 @@ public void setFrozen(
// Don't allow freezing if player is exempt
if (freezee.hasPermission(CommunityPermissions.FREEZE_EXEMPT)
&& !freezer.getSender().hasPermission(CommunityPermissions.FREEZE_FORCE)) {
- freezer.sendWarning(
- text()
- .append(PlayerComponent.player(freezee, NameStyle.FANCY))
- .append(text(" can not be frozen"))
- .build());
+ freezer.sendWarning(text()
+ .append(PlayerComponent.player(freezee, NameStyle.FANCY))
+ .append(text(" can not be frozen"))
+ .build());
return;
}
@@ -138,11 +137,10 @@ private void freeze(Player freezee, Component senderName, boolean silent) {
Audience.get(freezee).sendWarning(freezeTitle.build());
} else {
Audience.get(freezee)
- .showTitle(
- title(
- empty(),
- freezeTitle.build(),
- Times.of(Ticks.duration(5), Ticks.duration(9999), Ticks.duration(5))));
+ .showTitle(title(
+ empty(),
+ freezeTitle.build(),
+ Times.of(Ticks.duration(5), Ticks.duration(9999), Ticks.duration(5))));
}
Audience.get(freezee).playSound(FREEZE_SOUND);
@@ -172,15 +170,13 @@ private void thaw(Player freezee, Component senderName, boolean silent) {
private Component createInteractiveBroadcast(
Component senderName, Player freezee, boolean frozen) {
return text()
- .append(
- translatable(
- String.format("moderation.freeze.broadcast.%s", frozen ? "frozen" : "thaw"),
- NamedTextColor.GRAY,
- senderName,
- PlayerComponent.player(freezee, NameStyle.FANCY)))
- .hoverEvent(
- HoverEvent.showText(
- translatable("moderation.freeze.broadcast.hover", NamedTextColor.GRAY)))
+ .append(translatable(
+ String.format("moderation.freeze.broadcast.%s", frozen ? "frozen" : "thaw"),
+ NamedTextColor.GRAY,
+ senderName,
+ PlayerComponent.player(freezee, NameStyle.FANCY)))
+ .hoverEvent(HoverEvent.showText(
+ translatable("moderation.freeze.broadcast.hover", NamedTextColor.GRAY)))
.clickEvent(ClickEvent.runCommand("/f " + freezee.getName()))
.build();
}
diff --git a/src/main/java/dev/pgm/community/friends/FriendRequestStatus.java b/core/src/main/java/dev/pgm/community/friends/FriendRequestStatus.java
similarity index 100%
rename from src/main/java/dev/pgm/community/friends/FriendRequestStatus.java
rename to core/src/main/java/dev/pgm/community/friends/FriendRequestStatus.java
diff --git a/src/main/java/dev/pgm/community/friends/Friendship.java b/core/src/main/java/dev/pgm/community/friends/Friendship.java
similarity index 100%
rename from src/main/java/dev/pgm/community/friends/Friendship.java
rename to core/src/main/java/dev/pgm/community/friends/Friendship.java
diff --git a/src/main/java/dev/pgm/community/friends/FriendshipConfig.java b/core/src/main/java/dev/pgm/community/friends/FriendshipConfig.java
similarity index 100%
rename from src/main/java/dev/pgm/community/friends/FriendshipConfig.java
rename to core/src/main/java/dev/pgm/community/friends/FriendshipConfig.java
diff --git a/core/src/main/java/dev/pgm/community/friends/commands/FriendshipCommand.java b/core/src/main/java/dev/pgm/community/friends/commands/FriendshipCommand.java
new file mode 100644
index 00000000..1ecf235a
--- /dev/null
+++ b/core/src/main/java/dev/pgm/community/friends/commands/FriendshipCommand.java
@@ -0,0 +1,481 @@
+package dev.pgm.community.friends.commands;
+
+import static net.kyori.adventure.text.Component.space;
+import static net.kyori.adventure.text.Component.text;
+import static net.kyori.adventure.text.Component.translatable;
+import static tc.oc.pgm.util.text.TemporalComponent.duration;
+import static tc.oc.pgm.util.text.TemporalComponent.relativePastApproximate;
+
+import com.google.common.cache.CacheBuilder;
+import com.google.common.cache.CacheLoader;
+import com.google.common.cache.LoadingCache;
+import com.google.common.collect.Sets;
+import dev.pgm.community.Community;
+import dev.pgm.community.CommunityCommand;
+import dev.pgm.community.CommunityPermissions;
+import dev.pgm.community.commands.player.TargetPlayer;
+import dev.pgm.community.friends.Friendship;
+import dev.pgm.community.friends.feature.FriendshipFeature;
+import dev.pgm.community.nick.feature.NickFeature;
+import dev.pgm.community.sessions.Session;
+import dev.pgm.community.users.UserProfile;
+import dev.pgm.community.users.feature.UsersFeature;
+import dev.pgm.community.utils.BroadcastUtils;
+import dev.pgm.community.utils.CommandAudience;
+import dev.pgm.community.utils.PaginatedComponentResults;
+import dev.pgm.community.utils.VisibilityUtils;
+import java.time.Duration;
+import java.time.Instant;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Optional;
+import java.util.Set;
+import java.util.UUID;
+import java.util.concurrent.CompletableFuture;
+import java.util.concurrent.TimeUnit;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.TextComponent;
+import net.kyori.adventure.text.event.HoverEvent;
+import net.kyori.adventure.text.format.NamedTextColor;
+import org.bukkit.Bukkit;
+import org.bukkit.entity.Player;
+import tc.oc.pgm.lib.org.incendo.cloud.annotations.Argument;
+import tc.oc.pgm.lib.org.incendo.cloud.annotations.Command;
+import tc.oc.pgm.lib.org.incendo.cloud.annotations.CommandDescription;
+import tc.oc.pgm.lib.org.incendo.cloud.annotations.Default;
+import tc.oc.pgm.lib.org.incendo.cloud.annotations.Permission;
+import tc.oc.pgm.util.Audience;
+import tc.oc.pgm.util.named.NameStyle;
+import tc.oc.pgm.util.player.PlayerComponent;
+import tc.oc.pgm.util.text.TextFormatter;
+
+@Command("friend|friendship|fs|friends")
+public class FriendshipCommand extends CommunityCommand {
+
+ private final FriendshipFeature friends;
+ private final UsersFeature users;
+ private final NickFeature nicks;
+
+ public FriendshipCommand() {
+ this.friends = Community.get().getFeatures().getFriendships();
+ this.users = Community.get().getFeatures().getUsers();
+ this.nicks = Community.get().getFeatures().getNick();
+ }
+
+ @Command("[page]")
+ @CommandDescription("View a list of your friends")
+ @Permission(CommunityPermissions.FRIENDSHIP)
+ public void list(
+ CommandAudience sender, Player player, @Argument("page") @Default("1") int page) {
+ friends.getFriends(sender.getPlayer().getUniqueId()).thenAcceptAsync(frs -> {
+ sendFriendList(sender, frs, page);
+ });
+ }
+
+ @Command("requests [page]")
+ @CommandDescription("View a list of your pending friend requests")
+ @Permission(CommunityPermissions.FRIENDSHIP)
+ public void requests(
+ CommandAudience sender, Player player, @Argument("page") @Default("1") int page) {
+ friends.getIncomingRequests(sender.getPlayer().getUniqueId()).thenAcceptAsync(requests -> {
+ sendRequestsList(sender, requests, page);
+ });
+ }
+
+ @Command("add ")
+ @CommandDescription("Sends a friend request to another player")
+ @Permission(CommunityPermissions.FRIENDSHIP)
+ public void add(CommandAudience sender, Player player, @Argument("player") TargetPlayer target) {
+ // Handle disguised players with fake requests
+ Player nicked = nicks.getPlayerFromNick(target.getIdentifier());
+ if (nicked != null) {
+ FakeRequests fake = fakeRequests.getUnchecked(sender.getId().get());
+ String fullName = nicks.getOnlineNick(nicked.getUniqueId());
+ Component fancyName = PlayerComponent.player(nicked, NameStyle.FANCY);
+
+ if (fake.hasRequest(fullName)) {
+ sender.sendWarning(text("You have already sent a friend request to ")
+ .append(fancyName)
+ .color(NamedTextColor.GRAY));
+ return;
+ } else {
+ fake.addRequest(fullName);
+ sender.sendMessage(
+ text("Friend request sent to ").append(fancyName).color(NamedTextColor.GRAY));
+ return;
+ }
+ }
+
+ getTarget(target.getIdentifier(), users).thenAcceptAsync(storedId -> {
+ if (storedId.isPresent()) {
+ if (sender.getId().equals(storedId)) {
+ sender.sendWarning(text("You may not friend yourself..."));
+ return;
+ }
+
+ friends
+ .addFriend(sender.getPlayer().getUniqueId(), storedId.get())
+ .thenAcceptAsync(status -> {
+ users
+ .renderUsername(Optional.of(storedId.get()), NameStyle.FANCY)
+ .thenAcceptAsync(name -> {
+ switch (status) {
+ case ACCEPTED_EXISTING:
+ sender.sendMessage(text("You accepted ")
+ .append(name)
+ .append(text("'s friend request!"))
+ .color(NamedTextColor.GREEN));
+ break;
+ case EXISTING:
+ if (friends
+ .areFriends(sender.getPlayer().getUniqueId(), storedId.get())
+ .join()) {
+ sender.sendWarning(
+ text("You are already friends with ").append(name));
+ } else {
+ sender.sendWarning(text("You have already sent a friend request to ")
+ .append(name)
+ .color(NamedTextColor.GRAY));
+ }
+ break;
+ case PENDING:
+ sender.sendMessage(text("Friend request sent to ")
+ .append(name)
+ .color(NamedTextColor.GRAY));
+ break;
+ default:
+ sender.sendWarning(text("Could not send a friend request to ")
+ .append(name)
+ .color(NamedTextColor.GRAY));
+ break;
+ }
+ });
+ });
+ } else {
+ sender.sendWarning(formatNotFoundComponent(target.getIdentifier()));
+ }
+ });
+ }
+
+ @Command("remove ")
+ @CommandDescription("Unfriend the input user")
+ @Permission(CommunityPermissions.FRIENDSHIP)
+ public void remove(
+ CommandAudience sender, Player player, @Argument("player") TargetPlayer target) {
+ getTarget(target.getIdentifier(), users).thenAcceptAsync(storedId -> {
+ if (storedId.isPresent()) {
+ if (sender.getId().equals(storedId)) {
+ sender.sendWarning(text("You may not unfriend yourself..."));
+ return;
+ }
+
+ UUID targetId = storedId.get();
+ friends.getFriends(sender.getPlayer().getUniqueId()).thenAcceptAsync(friendList -> {
+ Optional existing =
+ friendList.stream().filter(fr -> fr.isInvolved(targetId)).findAny();
+ users.renderUsername(storedId, NameStyle.FANCY).thenAcceptAsync(name -> {
+ if (existing.isPresent()) {
+ friends.rejectFriendship(existing.get());
+ sender.sendMessage(text("You have removed ")
+ .append(name)
+ .append(text(" as a friend"))
+ .color(NamedTextColor.GRAY));
+ } else {
+ sender.sendWarning(text("You are not friends with ").append(name));
+ }
+ });
+ });
+ } else {
+ sender.sendWarning(formatNotFoundComponent(target.getIdentifier()));
+ }
+ });
+ }
+
+ @Command("accept ")
+ @CommandDescription("Accept an incoming friend request")
+ @Permission(CommunityPermissions.FRIENDSHIP)
+ public void acceptRequest(
+ CommandAudience sender, Player player, @Argument("username") String target) {
+ getTarget(target, users).thenAcceptAsync(storedId -> {
+ if (storedId.isPresent()) {
+ List requests =
+ friends.getIncomingRequests(sender.getPlayer().getUniqueId()).join();
+ if (requests.isEmpty()) {
+ sender.sendWarning(text("You have no pending friend requests"));
+ return;
+ }
+
+ Optional pending = requests.stream()
+ .filter(fr -> fr.getRequesterId().equals(storedId.get()))
+ .findAny();
+
+ users.renderUsername(storedId, NameStyle.FANCY).thenAcceptAsync(name -> {
+ if (pending.isPresent()) {
+ friends.acceptFriendship(pending.get());
+ sender.sendMessage(text("You accepted ")
+ .append(name)
+ .append(text("'s friend request!"))
+ .color(NamedTextColor.GREEN));
+
+ // Notify online requester
+ Player onlineFriend = Bukkit.getPlayer(storedId.get());
+ if (onlineFriend != null && !VisibilityUtils.isDisguised(sender.getPlayer())) {
+ Audience.get(onlineFriend)
+ .sendMessage(text()
+ .append(sender.getStyledName())
+ .append(text(" has accepted your friend request!", NamedTextColor.GREEN)));
+ }
+
+ } else {
+ sender.sendWarning(text("You don't have a pending friend request from ")
+ .append(name)
+ .color(NamedTextColor.GRAY));
+ }
+ });
+
+ } else {
+ sender.sendWarning(formatNotFoundComponent(target));
+ }
+ });
+ }
+
+ @Command("reject ")
+ @Permission(CommunityPermissions.FRIENDSHIP)
+ public void rejectRequest(
+ CommandAudience sender, Player player, @Argument("player") TargetPlayer target) {
+ getTarget(target.getIdentifier(), users).thenAcceptAsync(storedId -> {
+ if (storedId.isPresent()) {
+ List requests =
+ friends.getIncomingRequests(sender.getPlayer().getUniqueId()).join();
+ if (requests.isEmpty()) {
+ sender.sendWarning(text("You have no pending friend requests"));
+ return;
+ }
+
+ Optional pending = requests.stream()
+ .filter(fr -> fr.getRequesterId().equals(storedId.get()))
+ .findAny();
+ users.renderUsername(storedId, NameStyle.FANCY).thenAcceptAsync(name -> {
+ if (pending.isPresent()) {
+ friends.rejectFriendship(pending.get());
+ sender.sendMessage(text("You have rejected ")
+ .append(name)
+ .append(text("'s friend request"))
+ .color(NamedTextColor.GRAY));
+ return;
+ } else {
+ sender.sendWarning(text("You don't have a pending friend request from ")
+ .append(name)
+ .color(NamedTextColor.GRAY));
+ }
+ });
+ } else {
+ sender.sendWarning(formatNotFoundComponent(target.getIdentifier()));
+ }
+ });
+ }
+
+ private void sendRequestsList(CommandAudience audience, List requests, int page) {
+ Collections.sort(requests); // Sorted by most recent request
+
+ Component headerResultCount = text(Integer.toString(requests.size()), NamedTextColor.RED);
+
+ int perPage = 9;
+ int pages = (requests.size() + perPage - 1) / perPage;
+ page = Math.max(1, Math.min(page, pages));
+
+ NamedTextColor featureColor = NamedTextColor.YELLOW;
+
+ Component pageNum = translatable(
+ "command.simplePageHeader",
+ NamedTextColor.GRAY,
+ text(Integer.toString(page), featureColor),
+ text(Integer.toString(pages), featureColor));
+
+ Component header = text("Friend Requests", featureColor)
+ .append(text(" (")
+ .append(headerResultCount)
+ .append(text(") ยป "))
+ .append(pageNum)
+ .color(NamedTextColor.GRAY));
+
+ Component formattedHeader = TextFormatter.horizontalLineHeading(
+ audience.getSender(), header, NamedTextColor.DARK_GREEN);
+ new PaginatedComponentResults(formattedHeader, perPage) {
+
+ @Override
+ public Component format(Friendship data, int index) {
+ // [Name] > [ time since requested ] [buttons to accept/reject]
+ Component name = users
+ .renderUsername(
+ data.getOtherPlayer(audience.getPlayer().getUniqueId()), NameStyle.FANCY)
+ .join();
+
+ return text()
+ .append(name)
+ .append(space())
+ .append(BroadcastUtils.RIGHT_DIV.color(NamedTextColor.GOLD))
+ .append(text(" Sent "))
+ .append(relativePastApproximate(data.getRequestDate()).color(NamedTextColor.DARK_AQUA))
+ .append(space())
+ .append(FriendshipFeature.createAcceptButton(data.getRequesterId().toString()))
+ .append(space())
+ .append(FriendshipFeature.createRejectButton(data.getRequesterId().toString()))
+ .color(NamedTextColor.GRAY)
+ .build();
+ }
+
+ @Override
+ public Component formatEmpty() {
+ // TODO: Translate
+ return text("You have no pending friend requests", NamedTextColor.RED);
+ }
+ }.display(audience.getAudience(), requests, page);
+ }
+
+ private void sendFriendList(CommandAudience audience, List friends, int page) {
+ Collections.sort(friends, new Comparator() {
+ @Override
+ public int compare(Friendship o1, Friendship o2) {
+ UUID f1 = o1.getOtherPlayer(audience.getPlayer().getUniqueId());
+ UUID f2 = o2.getOtherPlayer(audience.getPlayer().getUniqueId());
+
+ UserProfile friend1 = users.getStoredProfile(f1).join();
+ UserProfile friend2 = users.getStoredProfile(f2).join();
+
+ boolean isStaff = audience.getSender().hasPermission(CommunityPermissions.STAFF);
+ Session session1 = friend1.getLatestSession(!isStaff).join();
+ Session session2 = friend2.getLatestSession(!isStaff).join();
+
+ Player online1 = Bukkit.getPlayer(f1);
+ Player online2 = Bukkit.getPlayer(f2);
+
+ boolean canSee1 = canSee(online1, audience);
+ boolean canSee2 = canSee(online2, audience);
+
+ // Sort online friends before offline friends
+ if (canSee1 && !canSee2) {
+ return -1;
+ } else if (canSee2 && !canSee1) {
+ return 1;
+ }
+
+ return -session1.getLatestUpdateDate().compareTo(session2.getLatestUpdateDate());
+ }
+ });
+
+ Component headerResultCount =
+ text(Integer.toString(friends.size()), NamedTextColor.LIGHT_PURPLE);
+
+ int perPage = 10;
+ int pages = (friends.size() + perPage - 1) / perPage;
+ page = Math.max(1, Math.min(page, pages));
+
+ NamedTextColor featureColor = NamedTextColor.DARK_PURPLE;
+
+ Component pageNum = translatable(
+ "command.simplePageHeader",
+ NamedTextColor.GRAY,
+ text(Integer.toString(page), featureColor),
+ text(Integer.toString(pages), featureColor));
+
+ Component header = text("Friends", featureColor)
+ .append(text(" (").append(headerResultCount).append(text(") ยป ")).append(pageNum))
+ .color(NamedTextColor.GRAY);
+
+ Component formattedHeader = TextFormatter.horizontalLineHeading(
+ audience.getSender(), header, NamedTextColor.DARK_GREEN);
+ new PaginatedComponentResults(formattedHeader, perPage) {
+
+ @Override
+ public Component format(Friendship data, int index) {
+ Component name = users
+ .renderUsername(
+ data.getOtherPlayer(audience.getPlayer().getUniqueId()), NameStyle.FANCY)
+ .join();
+
+ TextComponent.Builder builder = text()
+ .append(name)
+ .append(space())
+ .append(BroadcastUtils.RIGHT_DIV.color(NamedTextColor.GOLD))
+ .append(renderOnlineStatus(
+ data.getOtherPlayer(audience.getPlayer().getUniqueId()), audience)
+ .join());
+
+ if (data.getLastUpdated() != null) {
+ Component hover = text("Friends for ", NamedTextColor.GRAY)
+ .append(duration(Duration.between(data.getLastUpdated(), Instant.now()))
+ .color(NamedTextColor.AQUA));
+ builder.hoverEvent(HoverEvent.showText(hover));
+ }
+
+ return builder.build();
+ }
+
+ @Override
+ public Component formatEmpty() {
+ // TODO: Translate
+ return text("You have no friends yet... :(", NamedTextColor.RED);
+ }
+ }.display(audience.getAudience(), friends, page);
+ }
+
+ private CompletableFuture renderOnlineStatus(UUID playerId, CommandAudience viewer) {
+ boolean staff = viewer.getSender().hasPermission(CommunityPermissions.STAFF);
+ CompletableFuture future = new CompletableFuture();
+ users.findUserWithSession(playerId, !staff, (profile, session) -> {
+ boolean online = !session.hasEnded();
+ boolean vanished = session.isDisguised();
+ boolean visible = online && (!vanished || staff);
+
+ Component status = (visible
+ ? duration(Duration.between(session.getLatestUpdateDate(), Instant.now()))
+ : relativePastApproximate(session.getLatestUpdateDate()))
+ .color(visible ? NamedTextColor.GREEN : NamedTextColor.DARK_GREEN);
+ future.complete(text(visible ? " Online for " : " Last seen ")
+ .append(status)
+ .append(text(session.isOnThisServer() ? "" : " on "))
+ .append(text(session.isOnThisServer() ? "" : session.getServerName())
+ .color(online ? NamedTextColor.GREEN : NamedTextColor.DARK_GREEN))
+ .color(NamedTextColor.GRAY));
+ });
+
+ return future;
+ }
+
+ private boolean canSee(Player player, CommandAudience viewer) {
+ if (player == null) return false;
+ if (!viewer.isPlayer()) return true;
+ if (isDisguised(player)) {
+ if (Community.get().getFeatures().getNick().isNicked(player.getUniqueId())
+ && player.hasPermission(CommunityPermissions.OVERRIDE)) {
+ return viewer.hasPermission(CommunityPermissions.OVERRIDE);
+ }
+ return viewer.hasPermission(CommunityPermissions.STAFF);
+ }
+ return true;
+ }
+
+ private LoadingCache fakeRequests = CacheBuilder.newBuilder()
+ .expireAfterAccess(3, TimeUnit.HOURS)
+ .build(new CacheLoader() {
+ @Override
+ public FakeRequests load(UUID key) throws Exception {
+ return new FakeRequests();
+ }
+ });
+
+ private class FakeRequests {
+
+ private Set nicknames = Sets.newHashSet();
+
+ public boolean hasRequest(String nickname) {
+ return nicknames.contains(nickname);
+ }
+
+ public void addRequest(String nickname) {
+ nicknames.add(nickname);
+ }
+ }
+}
diff --git a/src/main/java/dev/pgm/community/friends/feature/FriendshipFeature.java b/core/src/main/java/dev/pgm/community/friends/feature/FriendshipFeature.java
similarity index 100%
rename from src/main/java/dev/pgm/community/friends/feature/FriendshipFeature.java
rename to core/src/main/java/dev/pgm/community/friends/feature/FriendshipFeature.java
diff --git a/src/main/java/dev/pgm/community/friends/feature/FriendshipFeatureBase.java b/core/src/main/java/dev/pgm/community/friends/feature/FriendshipFeatureBase.java
similarity index 76%
rename from src/main/java/dev/pgm/community/friends/feature/FriendshipFeatureBase.java
rename to core/src/main/java/dev/pgm/community/friends/feature/FriendshipFeatureBase.java
index 4dcfaddd..dcff1737 100644
--- a/src/main/java/dev/pgm/community/friends/feature/FriendshipFeatureBase.java
+++ b/core/src/main/java/dev/pgm/community/friends/feature/FriendshipFeatureBase.java
@@ -25,7 +25,8 @@
public abstract class FriendshipFeatureBase extends FeatureBase implements FriendshipFeature {
- @Nullable protected PGMFriendIntegration integration;
+ @Nullable
+ protected PGMFriendIntegration integration;
public FriendshipFeatureBase(Configuration config, Logger logger, String featureName) {
super(new FriendshipConfig(config), logger, featureName);
@@ -48,19 +49,17 @@ public void enable() {
}
public void sendFriendRequestLoginMessage(Player player, int requestCount) {
- Component requestsMessage =
- text()
- .append(BroadcastUtils.RIGHT_DIV.color(NamedTextColor.GOLD))
- .append(text(" You have "))
- .append(text(requestCount, NamedTextColor.DARK_AQUA, TextDecoration.BOLD))
- .append(text(" pending friend request" + (requestCount != 1 ? "s " : " ")))
- .append(BroadcastUtils.LEFT_DIV.color(NamedTextColor.GOLD))
- .color(NamedTextColor.DARK_GREEN)
- .hoverEvent(
- HoverEvent.showText(
- text("Click to view pending friend requests", NamedTextColor.GRAY)))
- .clickEvent(ClickEvent.runCommand("/friend requests"))
- .build();
+ Component requestsMessage = text()
+ .append(BroadcastUtils.RIGHT_DIV.color(NamedTextColor.GOLD))
+ .append(text(" You have "))
+ .append(text(requestCount, NamedTextColor.DARK_AQUA, TextDecoration.BOLD))
+ .append(text(" pending friend request" + (requestCount != 1 ? "s " : " ")))
+ .append(BroadcastUtils.LEFT_DIV.color(NamedTextColor.GOLD))
+ .color(NamedTextColor.DARK_GREEN)
+ .hoverEvent(
+ HoverEvent.showText(text("Click to view pending friend requests", NamedTextColor.GRAY)))
+ .clickEvent(ClickEvent.runCommand("/friend requests"))
+ .build();
Audience.get(player).sendMessage(requestsMessage);
Audience.get(player).playSound(Sounds.FRIEND_REQUEST_LOGIN);
diff --git a/src/main/java/dev/pgm/community/friends/feature/PGMFriendIntegration.java b/core/src/main/java/dev/pgm/community/friends/feature/PGMFriendIntegration.java
similarity index 100%
rename from src/main/java/dev/pgm/community/friends/feature/PGMFriendIntegration.java
rename to core/src/main/java/dev/pgm/community/friends/feature/PGMFriendIntegration.java
diff --git a/core/src/main/java/dev/pgm/community/friends/feature/types/SQLFriendshipFeature.java b/core/src/main/java/dev/pgm/community/friends/feature/types/SQLFriendshipFeature.java
new file mode 100644
index 00000000..bb4e4f1c
--- /dev/null
+++ b/core/src/main/java/dev/pgm/community/friends/feature/types/SQLFriendshipFeature.java
@@ -0,0 +1,168 @@
+package dev.pgm.community.friends.feature.types;
+
+import static net.kyori.adventure.text.Component.space;
+import static net.kyori.adventure.text.Component.text;
+
+import dev.pgm.community.friends.FriendRequestStatus;
+import dev.pgm.community.friends.Friendship;
+import dev.pgm.community.friends.Friendship.FriendshipStatus;
+import dev.pgm.community.friends.feature.FriendshipFeature;
+import dev.pgm.community.friends.feature.FriendshipFeatureBase;
+import dev.pgm.community.friends.services.SQLFriendshipService;
+import dev.pgm.community.users.feature.UsersFeature;
+import java.util.List;
+import java.util.Optional;
+import java.util.Set;
+import java.util.UUID;
+import java.util.concurrent.CompletableFuture;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
+import net.kyori.adventure.text.Component;
+import net.kyori.adventure.text.format.NamedTextColor;
+import org.bukkit.Bukkit;
+import org.bukkit.configuration.Configuration;
+import org.bukkit.entity.Player;
+import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
+import org.bukkit.event.player.PlayerJoinEvent;
+import tc.oc.pgm.util.Audience;
+import tc.oc.pgm.util.named.NameStyle;
+
+public class SQLFriendshipFeature extends FriendshipFeatureBase {
+
+ private final SQLFriendshipService service;
+ private final UsersFeature users;
+
+ public SQLFriendshipFeature(Configuration config, Logger logger, UsersFeature users) {
+ super(config, logger, "Friends (SQL)");
+ this.service = new SQLFriendshipService();
+ this.users = users;
+ }
+
+ @Override
+ public CompletableFuture> getFriends(UUID playerId) {
+ return service.queryList(playerId.toString()).thenApplyAsync(q -> q.stream()
+ .filter(fr -> fr.getStatus() == FriendshipStatus.ACCEPTED)
+ .collect(Collectors.toList()));
+ }
+
+ @Override
+ public CompletableFuture> getIncomingRequests(UUID playerId) {
+ return service.queryList(playerId.toString()).thenApplyAsync(q -> q.stream()
+ .filter(fr ->
+ fr.getRequestedId().equals(playerId) && fr.getStatus() == FriendshipStatus.PENDING)
+ .collect(Collectors.toList()));
+ }
+
+ @Override
+ public CompletableFuture addFriend(UUID sender, UUID target) {
+ return hasRequested(sender, target).thenApplyAsync(requested -> {
+ if (requested.isPresent()) {
+ Friendship pending = requested.get();
+ // If target has already requested you, just accept the friendship
+ if (pending.getRequesterId().equals(target)) {
+ acceptFriendship(pending);
+ return FriendRequestStatus.ACCEPTED_EXISTING;
+ }
+
+ return FriendRequestStatus.EXISTING; // Already requested
+ }
+
+ // Can't add an existing friend ;)
+ if (areFriends(sender, target).join()) {
+ return FriendRequestStatus.EXISTING;
+ }
+
+ Friendship request = new Friendship(sender, target);
+ service.save(request);
+
+ if (Bukkit.getPlayer(target) != null) {
+ Player targetPlayer = Bukkit.getPlayer(target);
+
+ Component senderName =
+ users.renderUsername(Optional.of(sender), NameStyle.FANCY).join();
+ Component accept = FriendshipFeature.createAcceptButton(sender.toString());
+ Component reject = FriendshipFeature.createRejectButton(sender.toString());
+
+ Component requestMsg = text()
+ .append(senderName)
+ .append(text(" has requested to be your friend. "))
+ .append(accept)
+ .append(space())
+ .append(reject)
+ .color(NamedTextColor.GOLD)
+ .build();
+
+ Audience.get(targetPlayer).sendMessage(requestMsg);
+ // TODO: play sound too?
+ }
+
+ return FriendRequestStatus.PENDING;
+ });
+ }
+
+ @Override
+ public CompletableFuture areFriends(UUID sender, UUID target) {
+ return service.queryList(sender.toString()).thenApplyAsync(frs -> frs.stream()
+ .anyMatch(
+ fr -> fr.areInvolved(sender, target) && fr.getStatus() == FriendshipStatus.ACCEPTED));
+ }
+
+ @Override
+ public CompletableFuture> hasRequested(UUID sender, UUID target) {
+ return service.queryList(target.toString()).thenApplyAsync(frs -> frs.stream()
+ .filter(fr -> fr.areInvolved(sender, target) && fr.getStatus() == FriendshipStatus.PENDING)
+ .findAny());
+ }
+
+ @Override
+ public void onPreLogin(AsyncPlayerPreLoginEvent event) {
+ updateFriendships(event.getUniqueId());
+ }
+
+ @Override
+ public void onDelayedLogin(PlayerJoinEvent event) {
+ getIncomingRequests(event.getPlayer().getUniqueId()).thenAcceptAsync(requests -> {
+ if (!requests.isEmpty()) {
+ sendFriendRequestLoginMessage(event.getPlayer(), requests.size());
+ }
+ });
+ }
+
+ @Override
+ public void acceptFriendship(Friendship friendship) {
+ service.updateFriendshipStatus(friendship, true);
+ update(friendship);
+ }
+
+ @Override
+ public void rejectFriendship(Friendship friendship) {
+ service.updateFriendshipStatus(friendship, false);
+ update(friendship);
+ }
+
+ public boolean isFriend(UUID sender, UUID target) {
+ return integration.isFriend(sender, target);
+ }
+
+ public void update(Friendship friendship) {
+ updateFriendships(friendship.getRequestedId());
+ updateFriendships(friendship.getRequesterId());
+ }
+
+ @Override
+ public void updateFriendships(UUID playerId) {
+ getFriends(playerId).thenAcceptAsync(friends -> {
+ Set friendIds =
+ friends.stream().map(f -> f.getOtherPlayer(playerId)).collect(Collectors.toSet());
+ // Sends updated friendship status to PGM for hook-in
+ if (integration != null) {
+ integration.setFriends(playerId, friendIds);
+ integration.callUpdateEvents(playerId, friendIds);
+ }
+ });
+ }
+
+ public CompletableFuture count() {
+ return service.count();
+ }
+}
diff --git a/core/src/main/java/dev/pgm/community/friends/services/FriendshipQuery.java b/core/src/main/java/dev/pgm/community/friends/services/FriendshipQuery.java
new file mode 100644
index 00000000..0d3a8453
--- /dev/null
+++ b/core/src/main/java/dev/pgm/community/friends/services/FriendshipQuery.java
@@ -0,0 +1,22 @@
+package dev.pgm.community.friends.services;
+
+public interface FriendshipQuery {
+
+ static final String TABLE_NAME = "friendships";
+ static final String TABLE_FIELDS = "(id VARCHAR(36) PRIMARY KEY, "
+ + "requester VARCHAR(36), "
+ + "requested VARCHAR(36), "
+ + "status VARCHAR(8), "
+ + "requestDate LONG, "
+ + "updateDate LONG)";
+
+ static final String INSERT_FRIENDSHIP_QUERY = "INSERT INTO "
+ + TABLE_NAME
+ + "(id, requester, requested, status, requestDate, updateDate) VALUES (?, ?, ?, ?, ?, ?)";
+
+ static final String SELECT_FRIENDSHIPS_QUERY =
+ "SELECT * from " + TABLE_NAME + " where (requester = ? OR requested = ?)";
+
+ static final String UPDATE_FRIENDSHIP_QUERY =
+ "UPDATE " + TABLE_NAME + " SET status = ?, updateDate = ? WHERE id = ? ";
+}
diff --git a/src/main/java/dev/pgm/community/friends/services/SQLFriendshipService.java b/core/src/main/java/dev/pgm/community/friends/services/SQLFriendshipService.java
similarity index 69%
rename from src/main/java/dev/pgm/community/friends/services/SQLFriendshipService.java
rename to core/src/main/java/dev/pgm/community/friends/services/SQLFriendshipService.java
index 6b14882c..ec87992b 100644
--- a/src/main/java/dev/pgm/community/friends/services/SQLFriendshipService.java
+++ b/core/src/main/java/dev/pgm/community/friends/services/SQLFriendshipService.java
@@ -23,15 +23,13 @@ public class SQLFriendshipService extends SQLFeatureBase
public SQLFriendshipService() {
super(TABLE_NAME, TABLE_FIELDS);
- this.friendshipCache =
- CacheBuilder.newBuilder()
- .build(
- new CacheLoader() {
- @Override
- public PlayerFriendships load(UUID key) throws Exception {
- return new PlayerFriendships(key);
- }
- });
+ this.friendshipCache = CacheBuilder.newBuilder()
+ .build(new CacheLoader() {
+ @Override
+ public PlayerFriendships load(UUID key) throws Exception {
+ return new PlayerFriendships(key);
+ }
+ });
}
@Override
@@ -97,35 +95,33 @@ public CompletableFuture> queryList(String target) {
return CompletableFuture.completedFuture(new ArrayList<>(playerFriendships.getFriendships()));
} else {
return DB.getResultsAsync(SELECT_FRIENDSHIPS_QUERY, playerId.toString(), playerId.toString())
- .thenApplyAsync(
- results -> {
- if (results != null) {
- for (DbRow row : results) {
- String id = row.getString("id");
- String requester = row.getString("requester");
- String requested = row.getString("requested");
- String status = row.getString("status");
- long requestDate = Long.parseLong(row.getString("requestDate"));
- long updateDate = Long.parseLong(row.getString("updateDate"));
-
- Instant requestInstant = Instant.ofEpochMilli(requestDate);
- Instant updateInstant = Instant.ofEpochMilli(updateDate);
-
- playerFriendships
- .getFriendships()
- .add(
- new Friendship(
- UUID.fromString(id),
- UUID.fromString(requester),
- UUID.fromString(requested),
- FriendshipStatus.valueOf(status.toUpperCase()),
- requestInstant,
- updateInstant));
- }
- }
- playerFriendships.setLoaded(true);
- return new ArrayList<>(playerFriendships.getFriendships());
- });
+ .thenApplyAsync(results -> {
+ if (results != null) {
+ for (DbRow row : results) {
+ String id = row.getString("id");
+ String requester = row.getString("requester");
+ String requested = row.getString("requested");
+ String status = row.getString("status");
+ long requestDate = Long.parseLong(row.getString("requestDate"));
+ long updateDate = Long.parseLong(row.getString("updateDate"));
+
+ Instant requestInstant = Instant.ofEpochMilli(requestDate);
+ Instant updateInstant = Instant.ofEpochMilli(updateDate);
+
+ playerFriendships
+ .getFriendships()
+ .add(new Friendship(
+ UUID.fromString(id),
+ UUID.fromString(requester),
+ UUID.fromString(requested),
+ FriendshipStatus.valueOf(status.toUpperCase()),
+ requestInstant,
+ updateInstant));
+ }
+ }
+ playerFriendships.setLoaded(true);
+ return new ArrayList<>(playerFriendships.getFriendships());
+ });
}
}
diff --git a/src/main/java/dev/pgm/community/info/InfoCommandConfig.java b/core/src/main/java/dev/pgm/community/info/InfoCommandConfig.java
similarity index 75%
rename from src/main/java/dev/pgm/community/info/InfoCommandConfig.java
rename to core/src/main/java/dev/pgm/community/info/InfoCommandConfig.java
index 2b30dde9..30184e3b 100644
--- a/src/main/java/dev/pgm/community/info/InfoCommandConfig.java
+++ b/core/src/main/java/dev/pgm/community/info/InfoCommandConfig.java
@@ -23,9 +23,8 @@ public Set getInfoCommands() {
@Override
public void reload(Configuration config) {
super.reload(config);
- this.commands =
- config.getConfigurationSection(KEY).getKeys(false).stream()
- .map(key -> InfoCommandData.of(config.getConfigurationSection(KEY + "." + key)))
- .collect(Collectors.toSet());
+ this.commands = config.getConfigurationSection(KEY).getKeys(false).stream()
+ .map(key -> InfoCommandData.of(config.getConfigurationSection(KEY + "." + key)))
+ .collect(Collectors.toSet());
}
}
diff --git a/src/main/java/dev/pgm/community/info/InfoCommandData.java b/core/src/main/java/dev/pgm/community/info/InfoCommandData.java
similarity index 100%
rename from src/main/java/dev/pgm/community/info/InfoCommandData.java
rename to core/src/main/java/dev/pgm/community/info/InfoCommandData.java
diff --git a/src/main/java/dev/pgm/community/info/InfoCommandsFeature.java b/core/src/main/java/dev/pgm/community/info/InfoCommandsFeature.java
similarity index 81%
rename from src/main/java/dev/pgm/community/info/InfoCommandsFeature.java
rename to core/src/main/java/dev/pgm/community/info/InfoCommandsFeature.java
index 577ce45d..0f573bff 100644
--- a/src/main/java/dev/pgm/community/info/InfoCommandsFeature.java
+++ b/core/src/main/java/dev/pgm/community/info/InfoCommandsFeature.java
@@ -23,13 +23,13 @@ public InfoCommandConfig getInfoConfig() {
public void onPlayerCommandProcess(PlayerCommandPreprocessEvent event) {
// We dynamically check for defined commands, and send the related feedback
getInfoConfig().getInfoCommands().stream()
- .filter(c -> event.getMessage().toLowerCase().startsWith("/" + c.getName().toLowerCase()))
+ .filter(
+ c -> event.getMessage().toLowerCase().startsWith("/" + c.getName().toLowerCase()))
.findAny()
- .ifPresent(
- command -> {
- command.sendCommand(event.getPlayer());
- event.setCancelled(true);
- });
+ .ifPresent(command -> {
+ command.sendCommand(event.getPlayer());
+ event.setCancelled(true);
+ });
}
@Override
diff --git a/src/main/java/dev/pgm/community/menu/CommunityInventoryProvider.java b/core/src/main/java/dev/pgm/community/menu/CommunityInventoryProvider.java
similarity index 100%
rename from src/main/java/dev/pgm/community/menu/CommunityInventoryProvider.java
rename to core/src/main/java/dev/pgm/community/menu/CommunityInventoryProvider.java
diff --git a/src/main/java/dev/pgm/community/menu/MapSelectionMenu.java b/core/src/main/java/dev/pgm/community/menu/MapSelectionMenu.java
similarity index 77%
rename from src/main/java/dev/pgm/community/menu/MapSelectionMenu.java
rename to core/src/main/java/dev/pgm/community/menu/MapSelectionMenu.java
index 8fd7ed19..de3cdaf2 100644
--- a/src/main/java/dev/pgm/community/menu/MapSelectionMenu.java
+++ b/core/src/main/java/dev/pgm/community/menu/MapSelectionMenu.java
@@ -6,6 +6,7 @@
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import dev.pgm.community.Community;
+import dev.pgm.community.utils.platform.CommunityMaterials;
import fr.minuskube.inv.ClickableItem;
import fr.minuskube.inv.SmartInventory;
import fr.minuskube.inv.content.InventoryContents;
@@ -20,13 +21,14 @@
import net.kyori.adventure.text.format.NamedTextColor;
import org.bukkit.DyeColor;
import org.bukkit.Material;
-import org.bukkit.enchantments.Enchantment;
import org.bukkit.entity.Player;
import org.bukkit.inventory.ItemFlag;
import org.bukkit.inventory.ItemStack;
import tc.oc.pgm.api.map.MapInfo;
import tc.oc.pgm.api.map.MapTag;
+import tc.oc.pgm.util.bukkit.Enchantments;
import tc.oc.pgm.util.inventory.ItemBuilder;
+import tc.oc.pgm.util.material.Materials;
import tc.oc.pgm.util.text.TextFormatter;
import tc.oc.pgm.util.text.TextTranslations;
@@ -57,12 +59,11 @@ public MapSelectionMenu(String title, List maps, Player viewer) {
}
public SmartInventory getInventory(SmartInventory parent) {
- SmartInventory.Builder builder =
- SmartInventory.builder()
- .title(colorize(title))
- .provider(this)
- .manager(Community.get().getInventory())
- .size(ROWS, 9);
+ SmartInventory.Builder builder = SmartInventory.builder()
+ .title(colorize(title))
+ .provider(this)
+ .manager(Community.get().getInventory())
+ .size(ROWS, 9);
if (parent != null) {
builder.parent(parent);
@@ -136,7 +137,8 @@ public Material getMapMaterial(MapInfo map) {
return map.getTags().isEmpty()
|| !map.getTags().stream().filter(tag -> tag.isGamemode()).findAny().isPresent()
? Material.MAP
- : getMapTagMaterial(map.getTags().stream().filter(tag -> tag.isGamemode()).findAny().get());
+ : getMapTagMaterial(
+ map.getTags().stream().filter(tag -> tag.isGamemode()).findAny().get());
}
private List getMapItems(List maps) {
@@ -144,47 +146,41 @@ private List getMapItems(List maps) {
}
private List getFilteredMapItems() {
- return getMapItems(
- maps.stream()
- .filter(
- map -> {
- if (viewAll) return true;
-
- Collection tags = map.getTags();
- return tags != null && tags.contains(getFilterTag());
- })
- .collect(Collectors.toList()));
+ return getMapItems(maps.stream()
+ .filter(map -> {
+ if (viewAll) return true;
+
+ Collection tags = map.getTags();
+ return tags != null && tags.contains(getFilterTag());
+ })
+ .collect(Collectors.toList()));
}
private ClickableItem getNoMapsIcon() {
- return ClickableItem.empty(
- new ItemBuilder()
- .material(Material.STAINED_GLASS_PANE)
- .color(DyeColor.RED)
- .name(colorize("&cNo Maps found"))
- .lore(colorize("&7Check &b/maps &7for details"))
- .flags(ItemFlag.values())
- .build());
+ return ClickableItem.empty(new ItemBuilder()
+ .material(Materials.STAINED_GLASS_PANE)
+ .color(DyeColor.RED)
+ .name(colorize("&cNo Maps found"))
+ .lore(colorize("&7Check &b/maps &7for details"))
+ .flags(ItemFlag.values())
+ .build());
}
private ClickableItem getAllIcon() {
- ItemBuilder allItemBuilder =
- new ItemBuilder()
- .material(Material.BOOKSHELF)
- .name(colorize((viewAll ? "&a" : "&c") + "View All"))
- .lore(colorize(viewAll ? "&7Click to filter by map tags" : "&7Click to view all maps"))
- .flags(ItemFlag.values());
+ ItemBuilder allItemBuilder = new ItemBuilder()
+ .material(Material.BOOKSHELF)
+ .name(colorize((viewAll ? "&a" : "&c") + "View All"))
+ .lore(colorize(viewAll ? "&7Click to filter by map tags" : "&7Click to view all maps"))
+ .flags(ItemFlag.values());
if (viewAll) {
- allItemBuilder.enchant(Enchantment.LUCK, 1);
+ allItemBuilder.enchant(Enchantments.LUCK_OF_THE_SEA, 1);
}
- return ClickableItem.of(
- allItemBuilder.build(),
- c -> {
- this.viewAll = !viewAll;
- getInventory().open(getViewer(), 0);
- });
+ return ClickableItem.of(allItemBuilder.build(), c -> {
+ this.viewAll = !viewAll;
+ getInventory().open(getViewer(), 0);
+ });
}
private ClickableItem getFilterIcon() {
@@ -200,7 +196,7 @@ private ClickableItem getFilterIcon() {
colorize("&7Filter: &b" + (filterIndex + 1) + " &7/&3 " + tags.size()),
colorize(
"&7Total Maps: &a" + getFilteredMapItems().size() + " &7/&2 " + maps.size()))
- .enchant(Enchantment.LUCK, 1)
+ .enchant(Enchantments.LUCK_OF_THE_SEA, 1)
.flags(ItemFlag.values())
.build(),
c -> {
@@ -240,13 +236,13 @@ private Material getMapTagMaterial(MapTag mapTag) {
case "ffa":
return Material.DIAMOND_SWORD;
case "border":
- return Material.IRON_BARDING;
+ return CommunityMaterials.IRON_BARDING;
case "wool":
- return Material.WOOL;
+ return Materials.WOOL;
case "controlpoint":
return Material.BEACON;
case "flag":
- return Material.BANNER;
+ return CommunityMaterials.BANNER;
case "classes":
return Material.FISHING_ROD;
case "deathmatch":
@@ -254,9 +250,9 @@ private Material getMapTagMaterial(MapTag mapTag) {
case "monument":
return Material.DIAMOND_PICKAXE;
case "4teams":
- return Material.TRAP_DOOR;
+ return CommunityMaterials.TRAP_DOOR;
case "timelimit":
- return Material.WATCH;
+ return Materials.WATCH;
case "autotnt":
return Material.TNT;
case "core":
@@ -264,17 +260,17 @@ private Material getMapTagMaterial(MapTag mapTag) {
case "blitz":
return Material.EGG;
case "scorebox":
- return Material.WEB;
+ return Materials.WEB;
case "6teams":
- return Material.BED;
+ return CommunityMaterials.BED;
case "rage":
return Material.BOW;
case "3teams":
- return Material.WORKBENCH;
+ return Materials.WORKBENCH;
case "terrain":
- return Material.GRASS;
+ return Materials.SHORT_GRASS;
case "8teams":
- return Material.INK_SACK;
+ return Materials.DYE;
default:
return Material.MAP;
}
diff --git a/src/main/java/dev/pgm/community/menu/MenuItem.java b/core/src/main/java/dev/pgm/community/menu/MenuItem.java
similarity index 100%
rename from src/main/java/dev/pgm/community/menu/MenuItem.java
rename to core/src/main/java/dev/pgm/community/menu/MenuItem.java
diff --git a/src/main/java/dev/pgm/community/menu/PageableInventory.java b/core/src/main/java/dev/pgm/community/menu/PageableInventory.java
similarity index 100%
rename from src/main/java/dev/pgm/community/menu/PageableInventory.java
rename to core/src/main/java/dev/pgm/community/menu/PageableInventory.java
diff --git a/src/main/java/dev/pgm/community/menu/PlayerSelectionProvider.java b/core/src/main/java/dev/pgm/community/menu/PlayerSelectionProvider.java
similarity index 97%
rename from src/main/java/dev/pgm/community/menu/PlayerSelectionProvider.java
rename to core/src/main/java/dev/pgm/community/menu/PlayerSelectionProvider.java
index a7d8efe3..fbb2e8c7 100644
--- a/src/main/java/dev/pgm/community/menu/PlayerSelectionProvider.java
+++ b/core/src/main/java/dev/pgm/community/menu/PlayerSelectionProvider.java
@@ -23,6 +23,7 @@
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import org.bukkit.inventory.meta.SkullMeta;
+import tc.oc.pgm.util.material.Materials;
public abstract class PlayerSelectionProvider implements InventoryProvider {
@@ -111,7 +112,7 @@ private ClickableItem getPlayerItem(
}
private ItemStack getPlayerHead(Player viewer, Player player) {
- ItemStack head = new ItemStack(Material.SKULL_ITEM, 1, (byte) 3);
+ ItemStack head = new ItemStack(Materials.SKULL, 1, (byte) 3);
SkullMeta meta = (SkullMeta) head.getItemMeta();
meta.setDisplayName(player.getDisplayName());
meta.setLore(getPlayerLore(viewer, player));
diff --git a/src/main/java/dev/pgm/community/menu/StaticMenuItem.java b/core/src/main/java/dev/pgm/community/menu/StaticMenuItem.java
similarity index 100%
rename from src/main/java/dev/pgm/community/menu/StaticMenuItem.java
rename to core/src/main/java/dev/pgm/community/menu/StaticMenuItem.java
diff --git a/src/main/java/dev/pgm/community/moderation/ModerationConfig.java b/core/src/main/java/dev/pgm/community/moderation/ModerationConfig.java
similarity index 100%
rename from src/main/java/dev/pgm/community/moderation/ModerationConfig.java
rename to core/src/main/java/dev/pgm/community/moderation/ModerationConfig.java
diff --git a/src/main/java/dev/pgm/community/moderation/commands/BanCommand.java b/core/src/main/java/dev/pgm/community/moderation/commands/BanCommand.java
similarity index 58%
rename from src/main/java/dev/pgm/community/moderation/commands/BanCommand.java
rename to core/src/main/java/dev/pgm/community/moderation/commands/BanCommand.java
index 26f30f88..ec98243d 100644
--- a/src/main/java/dev/pgm/community/moderation/commands/BanCommand.java
+++ b/core/src/main/java/dev/pgm/community/moderation/commands/BanCommand.java
@@ -51,22 +51,20 @@ public void permBan(
@Argument("target") TargetPlayer target,
@Argument("reason") @FlagYielding String reason,
@Flag(value = "silent", aliases = "s") boolean silent) {
- getTarget(target.getIdentifier(), usernames)
- .thenAccept(
- id -> {
- if (id.isPresent()) {
- moderation.punish(
- PunishmentType.BAN,
- id.get(),
- audience,
- reason,
- null,
- true,
- isDisguised(audience) || silent);
- } else {
- audience.sendWarning(formatNotFoundComponent(target.getIdentifier()));
- }
- });
+ getTarget(target.getIdentifier(), usernames).thenAccept(id -> {
+ if (id.isPresent()) {
+ moderation.punish(
+ PunishmentType.BAN,
+ id.get(),
+ audience,
+ reason,
+ null,
+ true,
+ isDisguised(audience) || silent);
+ } else {
+ audience.sendWarning(formatNotFoundComponent(target.getIdentifier()));
+ }
+ });
}
@Command("tempban|tb