├── .editorconfig ├── .github └── workflows │ ├── backwards_merge.yml │ ├── maven-1.11.0.yml │ ├── maven-publish.yml │ ├── maven.yml │ ├── maven_1.12.1.yml │ ├── maven_1.13.0.yml │ ├── maven_1.14.0.yml │ ├── maven_1.15.0.yml │ ├── maven_1.16.0.yml │ ├── maven_1.17.0.yml │ ├── maven_1.18.0.yml │ ├── maven_1.19.0.yml │ ├── maven_1.20.0.yml │ └── maven_1.21.0.yml ├── .gitignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── bump_version.sh ├── pom.xml └── src ├── main ├── java │ └── net │ │ └── shortninja │ │ └── staffplus │ │ └── core │ │ ├── StaffPlusPlus.java │ │ ├── StaffPlusPlusConfigurationProvider.java │ │ ├── Tasks.java │ │ ├── application │ │ ├── PlayerCommandPreprocess.java │ │ ├── SppInteractorBuilder.java │ │ ├── StaffPlusPlusCmd.java │ │ ├── StaffPlusPlusConfiguration.java │ │ ├── bootstrap │ │ │ ├── DiscordSrvHook.java │ │ │ ├── LuckPermsHook.java │ │ │ ├── PluginDisable.java │ │ │ └── VaultHook.java │ │ ├── config │ │ │ ├── AbstractConfigLoader.java │ │ │ ├── ConfigurationUtil.java │ │ │ ├── MessageMultiLineTransformer.java │ │ │ ├── Options.java │ │ │ ├── SoundsConfigTransformer.java │ │ │ ├── SplitByComma.java │ │ │ ├── SplitBySemicolon.java │ │ │ ├── TimeUnitDurationTransformer.java │ │ │ ├── messages │ │ │ │ ├── AbstractMessageSender.java │ │ │ │ ├── BukkitMessageSender.java │ │ │ │ ├── JsonMessageSender.java │ │ │ │ ├── MessageSender.java │ │ │ │ ├── MessageSenderFactory.java │ │ │ │ └── Messages.java │ │ │ └── migrators │ │ │ │ ├── AltersPermissionsMigrator.java │ │ │ │ ├── BlacklistModuleMigrator.java │ │ │ │ ├── CommandsMigrator.java │ │ │ │ ├── CommandsMultipleAliasesMigrator.java │ │ │ │ ├── CommandsV2Migrator.java │ │ │ │ ├── CustomStaffModeModuleCommandMigrator.java │ │ │ │ ├── FlatFileStorageTypeMigrator.java │ │ │ │ ├── FreezeModuleMigrator.java │ │ │ │ ├── PermissionsMigrator.java │ │ │ │ ├── PermissionsV2Migrator.java │ │ │ │ ├── PhraseDetectionToGroupsMigrator.java │ │ │ │ ├── ReportMessagesMigrator.java │ │ │ │ ├── ServerSyncBooleanMigrator.java │ │ │ │ ├── SoundOrbPickupMigrator.java │ │ │ │ ├── StaffChatChannelMigrator.java │ │ │ │ ├── StaffChatMessageFormatMigrator.java │ │ │ │ ├── StaffCustomModulesCommandMigrator.java │ │ │ │ ├── StaffCustomModulesItemMigrator.java │ │ │ │ ├── StaffCustomModulesRemoveKeyMigrator.java │ │ │ │ ├── StaffModeCommandMigrator.java │ │ │ │ ├── StaffModeModulesMigrator.java │ │ │ │ ├── StaffModeNewConfiguredCommandsMigrator.java │ │ │ │ ├── StaffModesMigrator.java │ │ │ │ ├── StaffModulesItemMigrator.java │ │ │ │ ├── StaffPlusPlusConfigMigrator.java │ │ │ │ ├── ThresholdCommandsMigrator.java │ │ │ │ └── WarningCommandsMigrator.java │ │ ├── database │ │ │ ├── DatabaseInitializer.java │ │ │ └── migrations │ │ │ │ ├── MigrationsProvider.java │ │ │ │ ├── common │ │ │ │ ├── V10_AlterReportTableAddStaffNameMigration.java │ │ │ │ ├── V11_AlterReportTableAddStaffUuidMigration.java │ │ │ │ ├── V13_AlterWarningsTableAddScoreMigration.java │ │ │ │ ├── V14_AlterWarningsTableAddSeverityMigration.java │ │ │ │ ├── V16_AlterDelayedActionsTableAddTimestampMigration.java │ │ │ │ ├── V17_AlterReportTableAddCloseReasonMigration.java │ │ │ │ ├── V23_AlterWarningTableAddReadMigration.java │ │ │ │ ├── V24_AlterWarningTableAddTimestampMigration.java │ │ │ │ ├── V25_AlterReportsTableAddDeletedMigration.java │ │ │ │ ├── V29_AlterBansTableAddServerColumnMigration.java │ │ │ │ ├── V30_AlterDelayedActionsTableAddServerColumnMigration.java │ │ │ │ ├── V31_AlterKickedPlayersTableAddServerColumnMigration.java │ │ │ │ ├── V32_AlterLocationsTableAddServerColumnMigration.java │ │ │ │ ├── V33_AlterMutedPlayersTableAddServerColumnMigration.java │ │ │ │ ├── V34_AlterReportsTableAddServerColumnMigration.java │ │ │ │ ├── V35_AlterWarningsTableAddServerColumnMigration.java │ │ │ │ ├── V37_AlterDelayedActionsTableAddExecutableActionIdMigration.java │ │ │ │ ├── V38_AlterDelayedActionsTableAddRollbackMigration.java │ │ │ │ ├── V40_AlterReportsTableAddLocationColumnMigration.java │ │ │ │ ├── V41_AlterWarningTableAddExpiredMigration.java │ │ │ │ ├── V42_AlterDelayedActionsTableAddExecutorMigration.java │ │ │ │ ├── V43_AlterReportsTableAddTypeMigration.java │ │ │ │ ├── V44_AlterSessionsTableAddStaffChatMutedMigration.java │ │ │ │ ├── V49_AlterSessionTableAddStaffModeNameColumnMigration.java │ │ │ │ ├── V52_AddNamesToBanTableMigration.java │ │ │ │ ├── V53_AddNamesToMutesTableMigration.java │ │ │ │ ├── V54_AddNamesToWarningsTableMigration.java │ │ │ │ ├── V55_AddNamesToReportsTableMigration.java │ │ │ │ ├── V56_UpdateNamesReportsTableMigration.java │ │ │ │ ├── V57_AlterSessionTableAddMutedStaffChatChannelsColumnMigration.java │ │ │ │ ├── V58_AlterBansTableAddSilentMigration.java │ │ │ │ ├── V60_AlterPlayerIpTableAddIpNumericMigration.java │ │ │ │ ├── V61_AddNameToPlayerIpsTableMigration.java │ │ │ │ ├── V63_AlterPlayerIpTableSetIpNumericMigration.java │ │ │ │ ├── V64_AlterPlayerIpsTableAddServerColumnMigration.java │ │ │ │ ├── V67_AlterMutesTableAddSoftMuteColumnMigration.java │ │ │ │ ├── V69_MigrateNotesToSqlMigration.java │ │ │ │ ├── V70_RemoveOldCommandsTableSqlMigration.java │ │ │ │ ├── V72_MigrateOldActionableActionsTableMigration.java │ │ │ │ ├── V73_RemoveOldActionsTableSqlMigration.java │ │ │ │ ├── V74_AlterBansTableAddBanMessageMigration.java │ │ │ │ ├── V75_AlterIpBansTableAddBanMessageMigration.java │ │ │ │ ├── V76_AddNamesToInvestigationsTableMigration.java │ │ │ │ ├── V80_AddNamesToAppealsTableMigration.java │ │ │ │ ├── V81_AddNamesToInvestigationsTableFixMigration.java │ │ │ │ ├── V83_AlterSessionTableAddSoundDisabledStaffChatChannelsColumnMigration.java │ │ │ │ ├── V86_AlterStaffLocationsTableAddIconColumnMigration.java │ │ │ │ ├── V8_AlterReportTableAddStatusMigration.java │ │ │ │ └── V9_AlterReportTableAddTimestampMigration.java │ │ │ │ ├── mysql │ │ │ │ ├── MySQLConnectionProvider.java │ │ │ │ ├── V12_AlterReportTablePlayerUuidNullableMigration.java │ │ │ │ ├── V15_CreateDelayedActionsTableMigration.java │ │ │ │ ├── V18_CreateLocationsTableMigration.java │ │ │ │ ├── V19_CreateProtectedAreasTableMigration.java │ │ │ │ ├── V1_CreateReportsTableMigration.java │ │ │ │ ├── V20_CreateBannedPlayersTableMigration.java │ │ │ │ ├── V21_CreatePlayerIpsTableMigration.java │ │ │ │ ├── V22_CreateAltDetectWhitelistTableMigration.java │ │ │ │ ├── V26_CreateMutedPlayersTableMigration.java │ │ │ │ ├── V27_CreateKickedPlayersTableMigration.java │ │ │ │ ├── V28_CreateSessionsTableMigration.java │ │ │ │ ├── V2_CreateWarningsTableMigration.java │ │ │ │ ├── V36_CreateWarningAppealsTableMigration.java │ │ │ │ ├── V39_CreateActionableActionsTableMigration.java │ │ │ │ ├── V3_CreateAlertOptionsTableMigration.java │ │ │ │ ├── V45_CreateInvestigationsTableMigration.java │ │ │ │ ├── V46_CreateInvestigationEvidenceTableMigration.java │ │ │ │ ├── V47_AlterInvestigationEvidenceTableAddDescriptionColumnMigration.java │ │ │ │ ├── V48_CreateInvestigationNotesTableMigration.java │ │ │ │ ├── V4_CreatePlayerDataTableMigration.java │ │ │ │ ├── V50_AlterInvestigationsTableMakeInvestigatedNullableMigration.java │ │ │ │ ├── V51_CreateWebUiRegistrationTableMigration.java │ │ │ │ ├── V59_AlterPlayerIpTableAddTimestampMigration.java │ │ │ │ ├── V5_CreateTicketsTableMigration.java │ │ │ │ ├── V62_CreateBannedIpsTableMigration.java │ │ │ │ ├── V65_IncreaseIpColumnsTableMigration.java │ │ │ │ ├── V68_CreatePlayerNotesTableMigration.java │ │ │ │ ├── V6_CreateCommandsTableMigration.java │ │ │ │ ├── V71_CreateCommandsTableMigration.java │ │ │ │ ├── V77_CreateQueueTableMigration.java │ │ │ │ ├── V78_CreatePlayersTableMigration.java │ │ │ │ ├── V79_ReworkAppealsTableColumnMigration.java │ │ │ │ ├── V7_AlterPlayerDataTableAddPasswordMigration.java │ │ │ │ ├── V82_CreateChatChannelsTableMigration.java │ │ │ │ └── V85_CreateStaffLocationsTableMigration.java │ │ │ │ └── sqlite │ │ │ │ ├── SqlLiteConnectionProvider.java │ │ │ │ ├── V15_CreateDelayedActionsTableMigration.java │ │ │ │ ├── V18_CreateLocationsTableMigration.java │ │ │ │ ├── V19_CreateProtectedAreasTableMigration.java │ │ │ │ ├── V1_CreateReportsTableMigration.java │ │ │ │ ├── V20_CreateBannedPlayersTableMigration.java │ │ │ │ ├── V21_CreatePlayerIpsTableMigration.java │ │ │ │ ├── V22_CreateAltDetectWhitelistTableMigration.java │ │ │ │ ├── V26_CreateMutedPlayersTableMigration.java │ │ │ │ ├── V27_CreateKickedPlayersTableMigration.java │ │ │ │ ├── V28_CreateSessionsTableMigration.java │ │ │ │ ├── V2_CreateWarningsTableMigration.java │ │ │ │ ├── V36_CreateWarningAppealsTableMigration.java │ │ │ │ ├── V39_CreateActionableActionsTableMigration.java │ │ │ │ ├── V3_CreateAlertOptionsTableMigration.java │ │ │ │ ├── V45_CreateInvestigationsTableMigration.java │ │ │ │ ├── V46_CreateInvestigationEvidenceTableMigration.java │ │ │ │ ├── V47_AlterInvestigationEvidenceTableAddDescriptionColumnMigration.java │ │ │ │ ├── V48_CreateInvestigationNotesTableMigration.java │ │ │ │ ├── V4_CreatePlayerDataTableMigration.java │ │ │ │ ├── V50_AlterInvestigationsTableMakeInvestigatedNullableMigration.java │ │ │ │ ├── V51_CreateWebUiRegistrationTableMigration.java │ │ │ │ ├── V59_AlterPlayerIpTableAddTimestampMigration.java │ │ │ │ ├── V5_CreateTicketsTableMigration.java │ │ │ │ ├── V62_CreateBannedIpsTableMigration.java │ │ │ │ ├── V65_AlterPlayerIpsTableMakeIncreaseIpColumnMigration.java │ │ │ │ ├── V66_AlterBannedPlayerIpsTableIncreaseIpColumnMigration.java │ │ │ │ ├── V68_CreatePlayerNotesTableMigration.java │ │ │ │ ├── V6_CreateCommandsTableMigration.java │ │ │ │ ├── V71_CreateActionableActionsTableMigration.java │ │ │ │ ├── V77_UpdateDeletedReportsTableMigration.java │ │ │ │ ├── V78_CreatePlayersTableMigration.java │ │ │ │ ├── V79_ReworkAppealsTableColumnMigration.java │ │ │ │ ├── V82_CreateChatChannelsTableMigration.java │ │ │ │ ├── V84_AlterWarningsTableMakeFixBooleanColumns.java │ │ │ │ └── V85_CreateStaffLocationsTableMigration.java │ │ ├── metrics │ │ │ ├── Metrics.java │ │ │ └── MetricsService.java │ │ ├── queue │ │ │ ├── QueueMessage.java │ │ │ ├── QueueMessageListener.java │ │ │ ├── QueueMessageProcessor.java │ │ │ ├── QueueRepository.java │ │ │ └── QueueStatus.java │ │ ├── session │ │ │ ├── OnlinePlayerSession.java │ │ │ ├── OnlineSessionsManager.java │ │ │ ├── PlayerSession.java │ │ │ ├── SessionCleanupOnPlayerQuit.java │ │ │ ├── SessionEnhancer.java │ │ │ ├── SessionLoader.java │ │ │ ├── database │ │ │ │ ├── PlayerSettingsEntity.java │ │ │ │ ├── PlayerSettingsSqlRepository.java │ │ │ │ └── PlayerSettingsSqlRepositoryImpl.java │ │ │ ├── enhancers │ │ │ │ ├── InvestigationSessionEnhancer.java │ │ │ │ ├── MuteSessionEnhancer.java │ │ │ │ └── PlayerSettingsSessionEnhancer.java │ │ │ └── synchronizers │ │ │ │ ├── FreezeSessionSynchronizer.java │ │ │ │ ├── InvestigationSessionSynchronizer.java │ │ │ │ ├── MuteSessionSynchronizer.java │ │ │ │ ├── NameChangeSessionSynchronizer.java │ │ │ │ ├── StaffModeSessionSynchronizer.java │ │ │ │ └── VanishSessionSynchronizer.java │ │ └── updates │ │ │ ├── ResourceVersion.java │ │ │ ├── SpigetClient.java │ │ │ └── UpdateNotifier.java │ │ ├── authentication │ │ ├── AuthenticationException.java │ │ ├── AuthenticationProvider.java │ │ ├── AuthenticationService.java │ │ └── authme │ │ │ ├── AuthMeAuthenticationService.java │ │ │ └── NoopAuthenticationService.java │ │ ├── common │ │ ├── BukkitInventorySerialization.java │ │ ├── Constants.java │ │ ├── IProtocolService.java │ │ ├── Items.java │ │ ├── JavaUtils.java │ │ ├── JsonSenderService.java │ │ ├── PlaceholderService.java │ │ ├── Sounds.java │ │ ├── StaffPlusPlusJoinedEvent.java │ │ ├── UpdatableGui.java │ │ ├── bungee │ │ │ ├── BungeeAction.java │ │ │ ├── BungeeClient.java │ │ │ ├── BungeeContext.java │ │ │ ├── BungeeMessage.java │ │ │ ├── GsonParser.java │ │ │ ├── OptionalTypeAdapter.java │ │ │ └── ServerSwitcher.java │ │ ├── cmd │ │ │ ├── AbstractCmd.java │ │ │ ├── BaseCmd.java │ │ │ ├── CmdHandler.java │ │ │ ├── Command.java │ │ │ ├── CommandPlayerRetriever.java │ │ │ ├── CommandService.java │ │ │ ├── CommandUtil.java │ │ │ ├── PlayerActionInterface.java │ │ │ ├── PlayerRetrievalStrategy.java │ │ │ ├── SppCommand.java │ │ │ └── arguments │ │ │ │ ├── ArgumentExecutor.java │ │ │ │ ├── ArgumentProcessor.java │ │ │ │ ├── ArgumentTabCompletion.java │ │ │ │ └── ArgumentType.java │ │ ├── exceptions │ │ │ ├── BusinessException.java │ │ │ ├── ConfigurationException.java │ │ │ ├── DatabaseException.java │ │ │ ├── NoDurationPermissionException.java │ │ │ ├── NoPermissionException.java │ │ │ ├── PlayerNotFoundException.java │ │ │ └── PlayerOfflineException.java │ │ ├── gui │ │ │ ├── AbstractGui.java │ │ │ ├── GuiItemConfig.java │ │ │ ├── GuiUpdateTask.java │ │ │ ├── GuiUtils.java │ │ │ ├── IAction.java │ │ │ ├── IGui.java │ │ │ ├── IGuiItemConfig.java │ │ │ ├── LoreBuilder.java │ │ │ ├── PagedGuiBuilder.java │ │ │ ├── PassThroughClickAction.java │ │ │ ├── gradient │ │ │ │ └── GradientColorProcessor.java │ │ │ ├── selector │ │ │ │ ├── OnSelect.java │ │ │ │ └── PageItemsRetriever.java │ │ │ └── style │ │ │ │ ├── ShowStyleInfoCommand.java │ │ │ │ └── StaffTubingGuiStyleIdViewProvider.java │ │ ├── permissions │ │ │ ├── DefaultPermissionHandler.java │ │ │ ├── GroupManagerPermissionHandler.java │ │ │ ├── PermissionHandler.java │ │ │ └── VaultPermissionHandler.java │ │ ├── time │ │ │ ├── TimeParsingException.java │ │ │ ├── TimeUnit.java │ │ │ └── TimeUnitShort.java │ │ └── utils │ │ │ ├── BukkitUtils.java │ │ │ ├── DatabaseUtil.java │ │ │ ├── GlassData.java │ │ │ ├── InventoryFactory.java │ │ │ ├── Materials.java │ │ │ ├── Strings.java │ │ │ └── Validator.java │ │ └── domain │ │ ├── actions │ │ ├── ActionFilter.java │ │ ├── ActionRunStrategy.java │ │ ├── ActionService.java │ │ ├── CommandExecutedEvent.java │ │ ├── CreateStoredCommandRequest.java │ │ ├── PermissionActionFilter.java │ │ ├── StoredCommandEntity.java │ │ ├── config │ │ │ ├── ConfiguredCommand.java │ │ │ ├── ConfiguredCommandMapper.java │ │ │ └── FiltersTransformer.java │ │ ├── database │ │ │ ├── CommandCleanupTask.java │ │ │ ├── SqlStoredCommandRepository.java │ │ │ ├── StoredCommandRepository.java │ │ │ └── StoredCommandSqlMapper.java │ │ ├── delayedactions │ │ │ ├── DelayArgumentExecutor.java │ │ │ ├── DelayedActionJoinListener.java │ │ │ └── DelayedActionService.java │ │ └── gui │ │ │ └── CommandExecutedListener.java │ │ ├── blacklist │ │ ├── BlackListConfiguration.java │ │ ├── BlacklistService.java │ │ ├── bungee │ │ │ ├── ChatMessageCensoredBungeeDto.java │ │ │ ├── ChatMessageCensoredBungeeEvent.java │ │ │ ├── ChatMessageCensoredBungeeReceiver.java │ │ │ └── ChatMessageCensoredNotifyBungeeSender.java │ │ ├── censors │ │ │ ├── BlacklistCensor.java │ │ │ ├── DomainBlacklistCensor.java │ │ │ ├── IllegalCharactersBlacklistCensor.java │ │ │ └── IllegalWordsBlacklistCensor.java │ │ └── listeners │ │ │ ├── BlacklistAnvilListener.java │ │ │ ├── BlacklistBookListener.java │ │ │ ├── BlacklistChatListener.java │ │ │ └── BlacklistSignListener.java │ │ ├── chat │ │ ├── ChatAction.java │ │ ├── ChatCmd.java │ │ ├── ChatHandler.java │ │ ├── ChatInterceptor.java │ │ ├── GeneralChatInterceptor.java │ │ ├── PhraseDetectionChatInterceptor.java │ │ ├── bungee │ │ │ ├── PhraseDetectedBungeeDto.java │ │ │ ├── PhraseDetectedBungeeEvent.java │ │ │ ├── PhraseDetectedBungeeReceiver.java │ │ │ └── PhraseDetectedNotifyBungeeSender.java │ │ ├── configuration │ │ │ ├── ChatConfiguration.java │ │ │ └── PhraseDetectionGroupConfiguration.java │ │ └── mention │ │ │ ├── PlayerMentionedChatListener.java │ │ │ └── bungee │ │ │ ├── MentionBungeeDto.java │ │ │ ├── MentionBungeeReceiver.java │ │ │ ├── MentionNotifyBungeeSender.java │ │ │ └── PlayerMentionedBungeeEvent.java │ │ ├── chatchannels │ │ ├── ChatChannel.java │ │ ├── ChatChannelRepository.java │ │ ├── ChatChannelService.java │ │ ├── bungee │ │ │ ├── ChatChannelBungeeSender.java │ │ │ ├── dto │ │ │ │ ├── ChatChannelBungeeDto.java │ │ │ │ ├── ChatChannelCreatedBungeeDto.java │ │ │ │ ├── ChatChannelMessageBungeeDto.java │ │ │ │ ├── ChatChannelPlayerJoinedBungeeDto.java │ │ │ │ └── ChatChannelPlayerLeftBungeeDto.java │ │ │ ├── events │ │ │ │ ├── ChatChannelClosedBungeeEvent.java │ │ │ │ ├── ChatChannelCreatedBungeeEvent.java │ │ │ │ ├── ChatChannelMessageReceivedBungeeEvent.java │ │ │ │ ├── ChatChannelPlayerJoinedBungeeEvent.java │ │ │ │ └── ChatChannelPlayerLeftBungeeEvent.java │ │ │ └── receive │ │ │ │ ├── ChatChannelClosedBungeeListener.java │ │ │ │ ├── ChatChannelCreatedBungeeListener.java │ │ │ │ ├── ChatChannelMessageBungeeListener.java │ │ │ │ ├── ChatChannelPlayerJoinedBungeeListener.java │ │ │ │ └── ChatChannelPlayerLeftBungeeListener.java │ │ ├── config │ │ │ └── ChatChannelConfiguration.java │ │ └── gui │ │ │ ├── ChatChannelChatNotifier.java │ │ │ ├── CloseChatChannelCmd.java │ │ │ ├── JoinChatChannelCmd.java │ │ │ └── LeaveChatChannelCmd.java │ │ ├── commanddetection │ │ ├── CommandDetectionGroupConfiguration.java │ │ └── CommandDetectionListener.java │ │ ├── confirmation │ │ ├── ChoiceAction.java │ │ ├── ChoiceActionCmd.java │ │ ├── ChoiceChatService.java │ │ ├── ConfirmationConfig.java │ │ ├── ConfirmationGui.java │ │ └── ConfirmationService.java │ │ ├── location │ │ ├── LocationRepository.java │ │ ├── LocationRepositoryImpl.java │ │ └── SppLocation.java │ │ ├── player │ │ ├── ChatActionChatInterceptor.java │ │ ├── PlayerManager.java │ │ ├── StripService.java │ │ ├── database │ │ │ ├── PlayerRepository.java │ │ │ └── StoredPlayer.java │ │ ├── gui │ │ │ ├── PlayersCmd.java │ │ │ ├── PlayersGuiController.java │ │ │ ├── StaffMembersGuiController.java │ │ │ ├── hub │ │ │ │ ├── HubGuiController.java │ │ │ │ ├── MinerGuiController.java │ │ │ │ └── views │ │ │ │ │ └── ColorViewBuilder.java │ │ │ └── model │ │ │ │ └── PlayerOverviewModel.java │ │ ├── ip │ │ │ ├── PlayerIpRecord.java │ │ │ ├── PlayerIpService.java │ │ │ ├── UpdateIpListener.java │ │ │ ├── cmd │ │ │ │ └── ClearIpsCommand.java │ │ │ ├── database │ │ │ │ ├── PlayerIpRepository.java │ │ │ │ └── PlayerIpRepositoryImpl.java │ │ │ └── gui │ │ │ │ └── IpsChatNotifier.java │ │ ├── listeners │ │ │ ├── AsyncPlayerChat.java │ │ │ ├── BlockBreak.java │ │ │ ├── BlockPlace.java │ │ │ ├── EntityChangeBlock.java │ │ │ ├── EntityDamage.java │ │ │ ├── EntityDamageByEntity.java │ │ │ ├── FoodLevelChange.java │ │ │ ├── InventoryClick.java │ │ │ ├── InventoryClose.java │ │ │ ├── InventoryOpen.java │ │ │ ├── PlayerDeath.java │ │ │ ├── PlayerDropItem.java │ │ │ ├── PlayerInteract.java │ │ │ ├── PlayerJoin.java │ │ │ ├── PlayerPickupArrow.java │ │ │ ├── PlayerPickupItem.java │ │ │ └── PlayerQuit.java │ │ ├── namechanged │ │ │ ├── NameChangeJoinListener.java │ │ │ └── bungee │ │ │ │ ├── NameChangeBungeeDto.java │ │ │ │ ├── NameChangeNotifyBungeeSender.java │ │ │ │ ├── NameChangedBungeeEvent.java │ │ │ │ └── NameChangedBungeeReceiver.java │ │ ├── potioneffects │ │ │ └── PotionEffectService.java │ │ ├── providers │ │ │ ├── BukkitOfflinePlayerProvider.java │ │ │ ├── NoopOfflinePlayerProvider.java │ │ │ └── OfflinePlayerProvider.java │ │ ├── queue │ │ │ ├── PlayersQueueMessageProcessor.java │ │ │ └── listeners │ │ │ │ └── PlayersUpdateListener.java │ │ └── settings │ │ │ ├── PlayerSettingCreationException.java │ │ │ ├── PlayerSettings.java │ │ │ ├── PlayerSettingsDataFile.java │ │ │ └── PlayerSettingsRepository.java │ │ ├── staff │ │ ├── PersonnelCmd.java │ │ ├── StaffHubCmd.java │ │ ├── alerts │ │ │ ├── AlertsCmd.java │ │ │ ├── config │ │ │ │ ├── AlertsConfiguration.java │ │ │ │ ├── AltDetectTrustLevelConfigTransformer.java │ │ │ │ ├── XrayBlockConfigTransformer.java │ │ │ │ └── XrayConfiguration.java │ │ │ ├── handlers │ │ │ │ ├── AlertsHandler.java │ │ │ │ ├── AltDetectAlertConsoleHandler.java │ │ │ │ ├── AltDetectAlertHandler.java │ │ │ │ ├── BlacklistAlertConsoleHandler.java │ │ │ │ ├── BlacklistAlertHandler.java │ │ │ │ ├── ChatPhraseDetectedAlertConsoleHandler.java │ │ │ │ ├── ChatPhraseDetectedAlertHandler.java │ │ │ │ ├── CommandDetectedAlertConsoleHandler.java │ │ │ │ ├── CommandDetectedAlertHandler.java │ │ │ │ ├── NameChangeAlertConsoleHandler.java │ │ │ │ ├── NameChangeAlertHandler.java │ │ │ │ ├── PlayerMentionAlertConsoleHandler.java │ │ │ │ ├── PlayerMentionAlertHandler.java │ │ │ │ ├── XrayAlertConsoleHandler.java │ │ │ │ ├── XrayAlertHandler.java │ │ │ │ └── XrayLogger.java │ │ │ └── xray │ │ │ │ ├── AmountAndDurationXrayStrategy.java │ │ │ │ ├── AmountXrayStrategy.java │ │ │ │ ├── DefaultXrayStrategy.java │ │ │ │ ├── XrayBlockConfig.java │ │ │ │ ├── XrayService.java │ │ │ │ ├── XrayStrategy.java │ │ │ │ ├── XrayTrace.java │ │ │ │ └── bungee │ │ │ │ ├── XrayAlertBungeeDto.java │ │ │ │ ├── XrayAlertBungeeEvent.java │ │ │ │ ├── XrayAlertBungeeReceiver.java │ │ │ │ └── XrayAlertBungeeSender.java │ │ ├── altaccountdetect │ │ │ ├── AltDetectResult.java │ │ │ ├── AltDetectWhitelistedItem.java │ │ │ ├── AltDetectionListener.java │ │ │ ├── AltDetectionService.java │ │ │ ├── checks │ │ │ │ ├── AltDetectInfo.java │ │ │ │ ├── AltDetector.java │ │ │ │ ├── IpDetector.java │ │ │ │ └── UsernameDetector.java │ │ │ ├── cmd │ │ │ │ ├── AltDetectCheckCmd.java │ │ │ │ └── AltDetectWhitelistCmd.java │ │ │ ├── config │ │ │ │ └── AltDetectConfiguration.java │ │ │ └── database │ │ │ │ ├── AltDetectWhitelistRepository.java │ │ │ │ └── AltDetectWhitelistRepositoryImpl.java │ │ ├── appeals │ │ │ ├── Appeal.java │ │ │ ├── AppealService.java │ │ │ └── database │ │ │ │ ├── AppealRepository.java │ │ │ │ └── AppealRepositoryImpl.java │ │ ├── ban │ │ │ ├── appeals │ │ │ │ ├── BanAppealConfiguration.java │ │ │ │ ├── BanAppealGuiController.java │ │ │ │ ├── BanAppealedListener.java │ │ │ │ ├── ManageAppealedBansGuiCmd.java │ │ │ │ ├── gui │ │ │ │ │ ├── BanAppealChatNotifier.java │ │ │ │ │ └── BanUnresolvedAppealsNotifier.java │ │ │ │ └── queue │ │ │ │ │ ├── BanAppealQueueMessageProcessor.java │ │ │ │ │ ├── dto │ │ │ │ │ ├── ApproveBanAppealQueueMessage.java │ │ │ │ │ ├── BanAppealQueueMessage.java │ │ │ │ │ └── RejectBanAppealQueueMessage.java │ │ │ │ │ └── listeners │ │ │ │ │ ├── ApproveBanAppealListener.java │ │ │ │ │ ├── BanAppealListener.java │ │ │ │ │ └── RejectBanAppealListener.java │ │ │ ├── ipbans │ │ │ │ ├── IpBan.java │ │ │ │ ├── IpBanConfiguration.java │ │ │ │ ├── IpBanKickPlayerListener.java │ │ │ │ ├── IpBanMessageStringUtil.java │ │ │ │ ├── IpBanPreventJoinListener.java │ │ │ │ ├── IpBanService.java │ │ │ │ ├── IpBanTemplateResolver.java │ │ │ │ ├── bungee │ │ │ │ │ ├── IpBanBungeeNotifier.java │ │ │ │ │ ├── dto │ │ │ │ │ │ └── IpBanBungeeDto.java │ │ │ │ │ ├── events │ │ │ │ │ │ ├── IpBanBungeeEvent.java │ │ │ │ │ │ └── IpUnbanBungeeEvent.java │ │ │ │ │ └── receive │ │ │ │ │ │ ├── IpBanBungeeListener.java │ │ │ │ │ │ └── IpUnbanBungeeListener.java │ │ │ │ ├── database │ │ │ │ │ ├── IpBanRepository.java │ │ │ │ │ └── IpBanRepositoryImpl.java │ │ │ │ └── gui │ │ │ │ │ ├── IpBanChatNotifier.java │ │ │ │ │ ├── IpBanGuiController.java │ │ │ │ │ └── cmd │ │ │ │ │ ├── IpBanCheckCmd.java │ │ │ │ │ ├── IpBanCmd.java │ │ │ │ │ ├── IpBanCmdUtil.java │ │ │ │ │ ├── IpBansViewCmd.java │ │ │ │ │ ├── IpTempBanCmd.java │ │ │ │ │ ├── IpUnBanCmd.java │ │ │ │ │ └── MigrateIpBansCmd.java │ │ │ └── playerbans │ │ │ │ ├── Ban.java │ │ │ │ ├── BanKickListener.java │ │ │ │ ├── BanMessageStringUtil.java │ │ │ │ ├── BanReasonResolver.java │ │ │ │ ├── BanService.java │ │ │ │ ├── BanTemplateResolver.java │ │ │ │ ├── BanType.java │ │ │ │ ├── PlayerRanks.java │ │ │ │ ├── bungee │ │ │ │ ├── BanBungeeNotifier.java │ │ │ │ ├── dto │ │ │ │ │ └── BanBungeeDto.java │ │ │ │ ├── events │ │ │ │ │ ├── BanBungeeEvent.java │ │ │ │ │ └── UnbanBungeeEvent.java │ │ │ │ └── receive │ │ │ │ │ ├── BanBungeeListener.java │ │ │ │ │ └── UnbanBungeeListener.java │ │ │ │ ├── config │ │ │ │ ├── BanConfiguration.java │ │ │ │ ├── BanGuiItemConfig.java │ │ │ │ ├── BanReasonConfiguration.java │ │ │ │ └── BanTemplateLoader.java │ │ │ │ ├── database │ │ │ │ ├── BansRepository.java │ │ │ │ └── BansRepositoryImpl.java │ │ │ │ └── gui │ │ │ │ ├── BanChatNotifier.java │ │ │ │ ├── BanEvidenceDetailGuiProvider.java │ │ │ │ ├── BanGuiController.java │ │ │ │ ├── cmd │ │ │ │ ├── BanCmd.java │ │ │ │ ├── ExtendBanCmd.java │ │ │ │ ├── ManageBansGuiCmd.java │ │ │ │ ├── MigrateBansCmd.java │ │ │ │ ├── ReduceBanCmd.java │ │ │ │ ├── TempBanCmd.java │ │ │ │ └── UnbanCmd.java │ │ │ │ └── views │ │ │ │ └── BannedPlayerItemBuilder.java │ │ ├── broadcast │ │ │ ├── BroadcastService.java │ │ │ ├── BungeeBroadcastListener.java │ │ │ ├── cmd │ │ │ │ └── BroadcastCmd.java │ │ │ └── config │ │ │ │ ├── BroadcastConfiguration.java │ │ │ │ └── BroadcastSelector.java │ │ ├── chests │ │ │ ├── ChestGUI.java │ │ │ ├── ChestGuiBuilder.java │ │ │ ├── ChestGuiMove.java │ │ │ ├── ChestGuiType.java │ │ │ ├── EnderChestService.java │ │ │ ├── EnderchestGuiController.java │ │ │ ├── InventoryGuiController.java │ │ │ └── config │ │ │ │ └── EnderchestsConfiguration.java │ │ ├── examine │ │ │ ├── ClearInvCmd.java │ │ │ ├── EChestView.java │ │ │ ├── ExamineCmd.java │ │ │ ├── config │ │ │ │ └── ExamineConfiguration.java │ │ │ ├── gui │ │ │ │ ├── ExamineGuiController.java │ │ │ │ ├── ExamineGuiItemProvider.java │ │ │ │ └── ExamineGuiViewBuilder.java │ │ │ └── items │ │ │ │ ├── EnderchestExamineGuiProvider.java │ │ │ │ ├── FoodExamineGuiProvider.java │ │ │ │ ├── FreezeExamineGuiProvider.java │ │ │ │ ├── GamemodeExamineGuiProvider.java │ │ │ │ ├── InfractionsExamineGuiProvider.java │ │ │ │ ├── InventoryExamineGuiProvider.java │ │ │ │ ├── IpExamineGuiProvider.java │ │ │ │ ├── LocationExamineGuiProvider.java │ │ │ │ ├── NotesExamineGuiProvider.java │ │ │ │ └── WarnExamineGuiProvider.java │ │ ├── freeze │ │ │ ├── FreezeActionHook.java │ │ │ ├── FreezeChatInterceptor.java │ │ │ ├── FreezeCmd.java │ │ │ ├── FreezeGui.java │ │ │ ├── FreezeHandler.java │ │ │ ├── FreezeLuckPermsContextCalculator.java │ │ │ ├── FreezePlayerInteractListener.java │ │ │ ├── FreezeRequest.java │ │ │ ├── chatchannels │ │ │ │ ├── FreezeChatChannelCmd.java │ │ │ │ └── FreezeChatChannelListener.java │ │ │ ├── config │ │ │ │ └── FreezeConfiguration.java │ │ │ └── gui │ │ │ │ ├── FreezeBlockedCommandsListener.java │ │ │ │ ├── FreezeGuiController.java │ │ │ │ ├── FreezeListener.java │ │ │ │ ├── FreezePlayerMovementListener.java │ │ │ │ └── UnFreezeListener.java │ │ ├── infractions │ │ │ ├── Infraction.java │ │ │ ├── InfractionInfo.java │ │ │ ├── InfractionOverview.java │ │ │ ├── InfractionProvider.java │ │ │ ├── InfractionType.java │ │ │ ├── InfractionsService.java │ │ │ ├── cmd │ │ │ │ ├── InfractionsCmd.java │ │ │ │ └── InfractionsTopCmd.java │ │ │ ├── config │ │ │ │ └── InfractionsConfiguration.java │ │ │ └── gui │ │ │ │ ├── InfractionsGuiController.java │ │ │ │ └── views │ │ │ │ ├── InfractionGuiProvider.java │ │ │ │ ├── InfractionOverviewGuiProvider.java │ │ │ │ ├── InfractionsOverviewViewBuilder.java │ │ │ │ └── InfractionsTopViewBuilder.java │ │ ├── investigate │ │ │ ├── EvidenceEntity.java │ │ │ ├── Investigation.java │ │ │ ├── InvestigationEvidenceService.java │ │ │ ├── InvestigationNoteEntity.java │ │ │ ├── InvestigationNoteService.java │ │ │ ├── InvestigationPauseListener.java │ │ │ ├── InvestigationService.java │ │ │ ├── PauseInvestigationOnQuit.java │ │ │ ├── StaffModeHook.java │ │ │ ├── actions │ │ │ │ ├── InvestigationActionsHook.java │ │ │ │ └── InvestigationInvestigatedActionFilter.java │ │ │ ├── bungee │ │ │ │ ├── InvestigationBungee.java │ │ │ │ ├── InvestigationBungeeSender.java │ │ │ │ ├── events │ │ │ │ │ ├── InvestigationConcludedBungeeEvent.java │ │ │ │ │ ├── InvestigationPausedBungeeEvent.java │ │ │ │ │ └── InvestigationStartedBungeeEvent.java │ │ │ │ └── receive │ │ │ │ │ ├── InvestigationConcludedBungeeReceiver.java │ │ │ │ │ ├── InvestigationPausedBungeeReceiver.java │ │ │ │ │ └── InvestigationStartedBungeeReceiver.java │ │ │ ├── config │ │ │ │ └── InvestigationConfiguration.java │ │ │ ├── database │ │ │ │ ├── evidence │ │ │ │ │ ├── InvestigationEvidenceRepository.java │ │ │ │ │ └── InvestigationEvidenceRepositoryImpl.java │ │ │ │ ├── investigation │ │ │ │ │ ├── InvestigationsRepository.java │ │ │ │ │ └── InvestigationsRepositoryImpl.java │ │ │ │ └── notes │ │ │ │ │ ├── InvestigationNotesRepository.java │ │ │ │ │ └── InvestigationNotesRepositoryImpl.java │ │ │ └── gui │ │ │ │ ├── InvestigationActionBarService.java │ │ │ │ ├── InvestigationChatNotifier.java │ │ │ │ ├── cmd │ │ │ │ ├── AddNoteInvestigationCmd.java │ │ │ │ ├── ConcludeInvestigationCmd.java │ │ │ │ ├── ManageInvestigationsGuiCmd.java │ │ │ │ ├── PauseInvestigationCmd.java │ │ │ │ └── StartInvestigationCmd.java │ │ │ │ ├── evidence │ │ │ │ ├── EvidenceDto.java │ │ │ │ ├── InvestigationEvidenceChatNotifier.java │ │ │ │ └── InvestigationEvidenceGuiController.java │ │ │ │ ├── investigation │ │ │ │ └── InvestigationGuiController.java │ │ │ │ ├── notes │ │ │ │ ├── InvestigationNoteChatNotifier.java │ │ │ │ └── InvestigationNotesGuiController.java │ │ │ │ └── views │ │ │ │ ├── EvidenceOverviewViewBuilder.java │ │ │ │ ├── InvestigationEvidenceItemBuilder.java │ │ │ │ ├── InvestigationItemBuilder.java │ │ │ │ └── InvestigationLinkEvidenceSelectionViewBuilder.java │ │ ├── joinmessages │ │ │ ├── JoinMessageGroup.java │ │ │ ├── JoinMessageListener.java │ │ │ └── JoinMessagesConfiguration.java │ │ ├── kick │ │ │ ├── Kick.java │ │ │ ├── KickListener.java │ │ │ ├── KickService.java │ │ │ ├── cmd │ │ │ │ └── KickCmd.java │ │ │ ├── config │ │ │ │ ├── KickConfiguration.java │ │ │ │ └── KickReasonConfiguration.java │ │ │ ├── database │ │ │ │ ├── KicksRepository.java │ │ │ │ └── KicksRepositoryImpl.java │ │ │ └── gui │ │ │ │ ├── KickChatNotifier.java │ │ │ │ ├── KickGuiController.java │ │ │ │ └── KickedPlayerItemBuilder.java │ │ ├── location │ │ │ ├── StaffLocation.java │ │ │ ├── StaffLocationNote.java │ │ │ ├── StaffLocationNotesRepository.java │ │ │ ├── StaffLocationRepository.java │ │ │ ├── StaffLocationService.java │ │ │ ├── config │ │ │ │ └── StaffLocationIconConfig.java │ │ │ └── gui │ │ │ │ ├── StaffLocationFiltersMapper.java │ │ │ │ ├── StaffLocationsChatNotifier.java │ │ │ │ ├── StaffLocationsGuiController.java │ │ │ │ ├── StaffLocationsNotesGuiController.java │ │ │ │ └── cmd │ │ │ │ ├── CreateStaffLocationCmd.java │ │ │ │ └── ViewStaffLocationsCmd.java │ │ ├── mode │ │ │ ├── ModeData.java │ │ │ ├── ModeDataRepository.java │ │ │ ├── ModeDataSerializer.java │ │ │ ├── ModeJoinListener.java │ │ │ ├── ModeProvider.java │ │ │ ├── StaffModeDiscordSrvListener.java │ │ │ ├── StaffModeGuiController.java │ │ │ ├── StaffModeItemsService.java │ │ │ ├── StaffModeLuckPermsContextCalculator.java │ │ │ ├── StaffModePluginDisable.java │ │ │ ├── StaffModeService.java │ │ │ ├── StaffModeWorldChangeListener.java │ │ │ ├── StaffModule.java │ │ │ ├── actions │ │ │ │ └── StaffModeActionHook.java │ │ │ ├── cmd │ │ │ │ ├── CpsCmd.java │ │ │ │ ├── FollowCmd.java │ │ │ │ ├── HealthArgumentExecutor.java │ │ │ │ ├── ModeCmd.java │ │ │ │ ├── StaffFlyCmd.java │ │ │ │ ├── StripArgumentExecutor.java │ │ │ │ └── StripCmd.java │ │ │ ├── config │ │ │ │ ├── GeneralModeConfiguration.java │ │ │ │ ├── ModeItemConfigTransformer.java │ │ │ │ ├── ModeItemConfiguration.java │ │ │ │ ├── ModeItemLoader.java │ │ │ │ ├── StaffItemsConfiguration.java │ │ │ │ ├── StaffModesLoader.java │ │ │ │ └── modeitems │ │ │ │ │ ├── compass │ │ │ │ │ └── CompassModeConfiguration.java │ │ │ │ │ ├── counter │ │ │ │ │ └── CounterModeConfiguration.java │ │ │ │ │ ├── cps │ │ │ │ │ └── CpsModeConfiguration.java │ │ │ │ │ ├── examine │ │ │ │ │ ├── ExamineModeConfiguration.java │ │ │ │ │ └── ExamineModeItemLocationConfigTransformer.java │ │ │ │ │ ├── follow │ │ │ │ │ └── FollowModeConfiguration.java │ │ │ │ │ ├── freeze │ │ │ │ │ └── FreezeModeStaffModuleConfiguration.java │ │ │ │ │ ├── gui │ │ │ │ │ └── GuiModeConfiguration.java │ │ │ │ │ ├── playerdetails │ │ │ │ │ └── PlayerDetailsModeConfiguration.java │ │ │ │ │ ├── randomteleport │ │ │ │ │ └── RandomTeleportModeConfiguration.java │ │ │ │ │ └── vanish │ │ │ │ │ └── VanishModeConfiguration.java │ │ │ ├── custommodules │ │ │ │ ├── CustomModuleConfiguration.java │ │ │ │ ├── CustomModuleExecutor.java │ │ │ │ ├── CustomModuleHandler.java │ │ │ │ ├── preprocessors │ │ │ │ │ ├── ConfirmationCustomModulePreprocessor.java │ │ │ │ │ ├── CustomModulePreProcessor.java │ │ │ │ │ └── InputCustomModulePreprocessor.java │ │ │ │ └── state │ │ │ │ │ ├── CustomModuleStateMachine.java │ │ │ │ │ └── ModuleStateChangedEvent.java │ │ │ ├── handler │ │ │ │ ├── CpsHandler.java │ │ │ │ ├── GadgetHandler.java │ │ │ │ └── GadgetType.java │ │ │ ├── item │ │ │ │ ├── ConfirmationType.java │ │ │ │ └── VanishItemUpdater.java │ │ │ └── listeners │ │ │ │ ├── CreativeOnStaffMode.java │ │ │ │ ├── FlightOnStaffMode.java │ │ │ │ ├── ModeAdvancementListener.java │ │ │ │ ├── ModeKeepItemsOnDeath.java │ │ │ │ ├── ModeRecipeUnlockListener.java │ │ │ │ ├── NightVisionOnStaffMode.java │ │ │ │ ├── PlayerStateOnStaffMode.java │ │ │ │ ├── StaffItemsOnStaffMode.java │ │ │ │ ├── TeleportOnStaffMode.java │ │ │ │ └── VanishOnStaffMode.java │ │ ├── mute │ │ │ ├── Mute.java │ │ │ ├── MuteMessageStringUtil.java │ │ │ ├── MuteService.java │ │ │ ├── MuteSessionTask.java │ │ │ ├── appeals │ │ │ │ ├── ManageAppealedMutesGuiCmd.java │ │ │ │ ├── MuteAppealConfiguration.java │ │ │ │ ├── MuteAppealGuiController.java │ │ │ │ ├── MuteAppealNotifierListener.java │ │ │ │ ├── MuteAppealedListener.java │ │ │ │ ├── actions │ │ │ │ │ └── MuteAppealActionHook.java │ │ │ │ ├── gui │ │ │ │ │ └── MuteAppealChatNotifier.java │ │ │ │ └── queue │ │ │ │ │ ├── MuteAppealQueueMessageProcessor.java │ │ │ │ │ ├── dto │ │ │ │ │ ├── ApproveMuteAppealQueueMessage.java │ │ │ │ │ ├── MuteAppealQueueMessage.java │ │ │ │ │ └── RejectMuteAppealQueueMessage.java │ │ │ │ │ └── listeners │ │ │ │ │ ├── ApproveMuteAppealListener.java │ │ │ │ │ ├── MuteAppealListener.java │ │ │ │ │ └── RejectMuteAppealListener.java │ │ │ ├── config │ │ │ │ ├── MuteConfiguration.java │ │ │ │ └── MuteGuiItemConfig.java │ │ │ ├── database │ │ │ │ ├── MuteRepository.java │ │ │ │ └── MuteRepositoryImpl.java │ │ │ └── gui │ │ │ │ ├── MuteChatInterceptor.java │ │ │ │ ├── MuteChatNotifier.java │ │ │ │ ├── MuteEvidenceDetailGuiProvider.java │ │ │ │ ├── MuteGuiController.java │ │ │ │ ├── MuteNotifierListener.java │ │ │ │ ├── MutedPlayerItemBuilder.java │ │ │ │ └── cmd │ │ │ │ ├── AbstractMuteCmd.java │ │ │ │ ├── ExtendMuteCmd.java │ │ │ │ ├── ManageMutesGuiCmd.java │ │ │ │ ├── MuteCmd.java │ │ │ │ ├── MuteCommandInterceptor.java │ │ │ │ ├── MyMutesCmd.java │ │ │ │ ├── ReduceMuteCmd.java │ │ │ │ ├── TempMuteCmd.java │ │ │ │ └── UnmuteCmd.java │ │ ├── nightvision │ │ │ ├── NightVisionListener.java │ │ │ ├── NightVisionService.java │ │ │ └── gui │ │ │ │ └── NightvisionCmd.java │ │ ├── playernotes │ │ │ ├── PlayerNote.java │ │ │ ├── PlayerNoteService.java │ │ │ ├── database │ │ │ │ ├── PlayerNoteRepository.java │ │ │ │ └── PlayerNoteRepositoryImpl.java │ │ │ ├── gui │ │ │ │ ├── PlayerNoteChatNotifier.java │ │ │ │ ├── PlayerNotesGuiController.java │ │ │ │ └── cmd │ │ │ │ │ ├── NoteCmd.java │ │ │ │ │ ├── NotesCmd.java │ │ │ │ │ ├── PlayerNoteFiltersMapper.java │ │ │ │ │ └── PrivateNoteCmd.java │ │ │ └── queue │ │ │ │ ├── PlayerNoteQueueMessageProcessor.java │ │ │ │ ├── dto │ │ │ │ ├── PlayerNoteCreateQueueMessage.java │ │ │ │ └── PlayerNoteQueueMessage.java │ │ │ │ └── listeners │ │ │ │ ├── PlayerNoteCreateListener.java │ │ │ │ └── PlayerNoteDeleteListener.java │ │ ├── protect │ │ │ ├── ProtectListener.java │ │ │ ├── ProtectService.java │ │ │ ├── ProtectedArea.java │ │ │ ├── cmd │ │ │ │ ├── ProtectAreaCmd.java │ │ │ │ └── ProtectPlayerCmd.java │ │ │ ├── config │ │ │ │ └── ProtectConfiguration.java │ │ │ ├── database │ │ │ │ ├── ProtectedAreaRepository.java │ │ │ │ └── ProtectedAreaRepositoryImpl.java │ │ │ └── gui │ │ │ │ ├── ProtectedAreasGuiController.java │ │ │ │ └── ProtectedPlayersGuiController.java │ │ ├── reporting │ │ │ ├── CloseReportRequest.java │ │ │ ├── ManageReportService.java │ │ │ ├── Report.java │ │ │ ├── ReportListener.java │ │ │ ├── ReportService.java │ │ │ ├── actions │ │ │ │ ├── ReportActionsHook.java │ │ │ │ ├── ReportCulpritActionFilter.java │ │ │ │ └── ReportTypeActionFilter.java │ │ │ ├── bungee │ │ │ │ ├── ReportBungeeNotifier.java │ │ │ │ ├── dto │ │ │ │ │ ├── ReportBungeeDto.java │ │ │ │ │ ├── ReportDeletedBungeeDto.java │ │ │ │ │ └── ReportReopenedBungeeDto.java │ │ │ │ ├── events │ │ │ │ │ ├── ReportAcceptedBungeeEvent.java │ │ │ │ │ ├── ReportClosedBungeeEvent.java │ │ │ │ │ ├── ReportCreatedBungeeEvent.java │ │ │ │ │ ├── ReportDeletedBungeeEvent.java │ │ │ │ │ └── ReportReopenedBungeeEvent.java │ │ │ │ └── receive │ │ │ │ │ ├── ReportAcceptedBungeeListener.java │ │ │ │ │ ├── ReportClosedBungeeListener.java │ │ │ │ │ ├── ReportCreatedBungeeListener.java │ │ │ │ │ ├── ReportDeletedBungeeListener.java │ │ │ │ │ └── ReportReopenBungeeListener.java │ │ │ ├── chatchannels │ │ │ │ ├── ReportChatChannelCmd.java │ │ │ │ ├── ReportChatChannelListener.java │ │ │ │ └── ReportChatChannelService.java │ │ │ ├── config │ │ │ │ ├── CulpritFilterPredicate.java │ │ │ │ ├── ManageReportConfiguration.java │ │ │ │ ├── ReportConfiguration.java │ │ │ │ ├── ReportReasonConfiguration.java │ │ │ │ ├── ReportStatusesConfigTransformer.java │ │ │ │ └── ReportTypeConfiguration.java │ │ │ ├── database │ │ │ │ ├── ReportRepository.java │ │ │ │ └── ReportRepositoryImpl.java │ │ │ ├── gui │ │ │ │ ├── CreateReportsGuiController.java │ │ │ │ ├── ManageReportsGuiController.java │ │ │ │ ├── ReportEvidenceDetailGuiProvider.java │ │ │ │ ├── chat │ │ │ │ │ ├── ReportChatNotifier.java │ │ │ │ │ └── ReportMessageUtil.java │ │ │ │ └── cmd │ │ │ │ │ ├── FindReportsCmd.java │ │ │ │ │ ├── ManageReportsGuiCmd.java │ │ │ │ │ ├── MyReportsCmd.java │ │ │ │ │ ├── ReportCmd.java │ │ │ │ │ ├── ReportFiltersMapper.java │ │ │ │ │ ├── ReportPlayerCmd.java │ │ │ │ │ ├── ReportsCmd.java │ │ │ │ │ └── TeleportToReportLocationCmd.java │ │ │ └── queue │ │ │ │ ├── ReportQueueMessageProcessor.java │ │ │ │ ├── dto │ │ │ │ ├── ReportClosedQueueMessage.java │ │ │ │ └── ReportQueueMessage.java │ │ │ │ └── listeners │ │ │ │ ├── ReportAcceptListener.java │ │ │ │ ├── ReportClosedListener.java │ │ │ │ ├── ReportDeleteListener.java │ │ │ │ └── ReportReopenListener.java │ │ ├── revive │ │ │ ├── InventoryVault.java │ │ │ ├── ReviveCmd.java │ │ │ └── ReviveHandler.java │ │ ├── staffchat │ │ │ ├── StaffChatChannelConfiguration.java │ │ │ ├── StaffChatChatInterceptor.java │ │ │ ├── StaffChatMessageFormatter.java │ │ │ ├── StaffChatServiceImpl.java │ │ │ ├── bungee │ │ │ │ ├── StaffChatBungeeMessage.java │ │ │ │ ├── StaffChatBungeeReceiver.java │ │ │ │ ├── StaffChatBungeeSender.java │ │ │ │ └── StaffChatReceivedBungeeEvent.java │ │ │ ├── cmd │ │ │ │ ├── StaffChatChannelCmd.java │ │ │ │ ├── StaffChatMuteChannelCmd.java │ │ │ │ ├── StaffChatSoundChannelCmd.java │ │ │ │ └── StaffChatTubingCommandLoader.java │ │ │ └── config │ │ │ │ └── StaffChatConfiguration.java │ │ ├── teleport │ │ │ ├── TeleportArgumentExecutor.java │ │ │ ├── TeleportService.java │ │ │ ├── cmd │ │ │ │ ├── TeleportBackCmd.java │ │ │ │ ├── TeleportHereCmd.java │ │ │ │ ├── TeleportToLocationCmd.java │ │ │ │ └── TeleportToPlayerCmd.java │ │ │ ├── config │ │ │ │ ├── LocationsConfigTransformer.java │ │ │ │ └── TeleportConfiguration.java │ │ │ └── gui │ │ │ │ └── TeleportGuiController.java │ │ ├── tracing │ │ │ ├── ChatTraceWriter.java │ │ │ ├── FileTraceWriter.java │ │ │ ├── Trace.java │ │ │ ├── TraceChatInterceptor.java │ │ │ ├── TraceCmd.java │ │ │ ├── TraceService.java │ │ │ ├── TraceType.java │ │ │ ├── TraceWorldChangeListener.java │ │ │ ├── TraceWriterFactory.java │ │ │ └── config │ │ │ │ ├── TraceConfiguration.java │ │ │ │ └── TraceOutputChannelConfigTransformer.java │ │ ├── vanish │ │ │ ├── ListVanishStrategy.java │ │ │ ├── NoneVanishStrategy.java │ │ │ ├── PlayerVanishStrategy.java │ │ │ ├── TotalVanishStrategy.java │ │ │ ├── VanishConfiguration.java │ │ │ ├── VanishLuckPermsContextCalculator.java │ │ │ ├── VanishService.java │ │ │ ├── VanishStrategy.java │ │ │ ├── gui │ │ │ │ ├── VanishActionBarTask.java │ │ │ │ ├── VanishBossBarTask.java │ │ │ │ ├── VanishChatInterceptor.java │ │ │ │ ├── VanishChatNotifier.java │ │ │ │ ├── VanishCmd.java │ │ │ │ ├── VanishNightVisionListener.java │ │ │ │ └── VanishPlayersBukkitService.java │ │ │ └── listeners │ │ │ │ ├── CancelWhisperToVanished.java │ │ │ │ ├── ExperienceTargetListener.java │ │ │ │ ├── MobsAttackingVanishedListener.java │ │ │ │ ├── TabCompleteListener.java │ │ │ │ ├── VanishCancelArrowPickup.java │ │ │ │ ├── VanishCancelBlockBreak.java │ │ │ │ ├── VanishCancelBlockPlace.java │ │ │ │ ├── VanishCancelDamageTaken.java │ │ │ │ ├── VanishCancelDropItem.java │ │ │ │ ├── VanishCancelGiveDamage.java │ │ │ │ ├── VanishCancelInteraction.java │ │ │ │ ├── VanishCancelPickupItem.java │ │ │ │ ├── VanishJoinLeaveDiscordSrvMessageListener.java │ │ │ │ ├── VanishJoinLeaveMessageListener.java │ │ │ │ ├── VanishJoinListener.java │ │ │ │ ├── VanishNormalChestOpening.java │ │ │ │ ├── VanishQuitListener.java │ │ │ │ ├── VanishSculkSensorListener.java │ │ │ │ └── VanishSilentChestOpening.java │ │ └── warn │ │ │ ├── appeals │ │ │ ├── ManageAppealedWarningsGuiCmd.java │ │ │ ├── WarningAppealConfiguration.java │ │ │ ├── WarningAppealGuiController.java │ │ │ ├── WarningAppealNotifierListener.java │ │ │ └── WarningAppealedListener.java │ │ │ ├── threshold │ │ │ └── ThresholdService.java │ │ │ └── warnings │ │ │ ├── WarnService.java │ │ │ ├── Warning.java │ │ │ ├── WarningActionFilter.java │ │ │ ├── WarningExpireTask.java │ │ │ ├── WarningListener.java │ │ │ ├── WarningNotifierListener.java │ │ │ ├── cmd │ │ │ ├── ManageWarningsGuiCmd.java │ │ │ ├── MyWarningsCmd.java │ │ │ ├── WarnCmd.java │ │ │ └── WarnsCmd.java │ │ │ ├── config │ │ │ ├── ManageWarningsConfiguration.java │ │ │ ├── WarningConfiguration.java │ │ │ ├── WarningSeverityConfiguration.java │ │ │ └── WarningThresholdConfiguration.java │ │ │ ├── database │ │ │ ├── SqlWarnRepository.java │ │ │ └── WarnRepository.java │ │ │ └── gui │ │ │ ├── MyWarningsViewBuilder.java │ │ │ ├── WarnMessageStringUtil.java │ │ │ ├── WarningChatNotifier.java │ │ │ ├── WarningEvidenceDetailGuiProvider.java │ │ │ ├── WarningItemBuilder.java │ │ │ └── WarningsGuiController.java │ │ ├── synchronization │ │ ├── ServerSyncConfig.java │ │ ├── ServerSyncConfigTransformer.java │ │ └── ServerSyncConfiguration.java │ │ └── webui │ │ ├── SqlWebUiRegistrationRepository.java │ │ ├── WebUiRegisterCmd.java │ │ ├── WebUiRegistrationRepository.java │ │ └── config │ │ └── WebUiConfiguration.java └── resources │ ├── changelog.txt │ ├── config.yml │ ├── configuration │ ├── commands.yml │ ├── permissions.yml │ └── staffmode │ │ ├── custom-modules.yml │ │ ├── modes.yml │ │ └── modules.yml │ ├── data.yml │ ├── gui │ ├── appeals │ │ ├── appeal-commons.ftl │ │ └── appeal-reason-select.ftl │ ├── bans │ │ ├── appeal-detail.ftl │ │ ├── appealed-bans-overview.ftl │ │ ├── ban-commons.ftl │ │ ├── ban-detail.ftl │ │ ├── bans-history-overview.ftl │ │ └── bans-overview.ftl │ ├── commons │ │ ├── commons.ftl │ │ ├── confirmation.ftl │ │ └── translate.ftl │ ├── evidence │ │ └── evidence-commons.ftl │ ├── hub │ │ └── hub.ftl │ ├── investigations │ │ ├── investigation-commons.ftl │ │ ├── investigation-detail.ftl │ │ ├── investigations-overview.ftl │ │ ├── investigations-resume-select.ftl │ │ └── notes-overview.ftl │ ├── kicks │ │ ├── kick-overview.ftl │ │ └── kick-reason-selection.ftl │ ├── mutes │ │ ├── appeal-detail.ftl │ │ ├── appealed-mutes-overview.ftl │ │ ├── manage-mute.ftl │ │ ├── mute-commons.ftl │ │ └── mute-overview.ftl │ ├── player-notes │ │ ├── note-commons.ftl │ │ └── note-overview.ftl │ ├── player │ │ ├── miners-overview.ftl │ │ ├── player-commons.ftl │ │ ├── player-detail.ftl │ │ ├── player-overview-select.ftl │ │ └── player-overview.ftl │ ├── protect │ │ ├── area-detail.ftl │ │ ├── area-overview.ftl │ │ ├── player-overview.ftl │ │ └── protected-areas-commons.ftl │ ├── reports │ │ ├── assigned-reports.ftl │ │ ├── closed-reports.ftl │ │ ├── find-reports.ftl │ │ ├── manage-reports.ftl │ │ ├── my-assigned-reports.ftl │ │ ├── my-reports.ftl │ │ ├── open-reports.ftl │ │ ├── report-commons.ftl │ │ ├── report-detail.ftl │ │ ├── report-reason-selection.ftl │ │ └── report-type-selection.ftl │ ├── staff-locations │ │ ├── notes-overview.ftl │ │ ├── options.ftl │ │ ├── overview.ftl │ │ ├── select-icon-create.ftl │ │ ├── select-icon-edit.ftl │ │ ├── staff-location-detail.ftl │ │ └── staff-locations-commons.ftl │ └── warnings │ │ ├── appeal-detail.ftl │ │ ├── appealed-warnings-overview.ftl │ │ ├── my-warnings-overview.ftl │ │ ├── severity-selection.ftl │ │ ├── warning-commons.ftl │ │ ├── warning-detail.ftl │ │ └── warnings-overview.ftl │ ├── lang │ ├── lang_de.yml │ ├── lang_en.yml │ ├── lang_es.yml │ ├── lang_fr.yml │ ├── lang_hr.yml │ ├── lang_hu.yml │ ├── lang_id.yml │ ├── lang_it.yml │ ├── lang_lt.yml │ ├── lang_nl.yml │ ├── lang_no.yml │ ├── lang_pl.yml │ ├── lang_pt.yml │ ├── lang_ru.yml │ ├── lang_sv.yml │ └── lang_zh.yml │ ├── license.txt │ ├── plugin.yml │ └── project.properties └── test ├── java └── net │ └── shortninja │ └── staffplus │ └── core │ ├── LangFileTest.java │ ├── RunPluginIT.java │ ├── TubingBukkitUtilStub.java │ ├── common │ └── gui │ │ └── AbstractTubingGuiTemplateTest.java │ └── domain │ ├── player │ └── gui │ │ ├── PlayersGuiControllerTest.java │ │ └── hub │ │ └── HubGuiControllerTest.java │ ├── protect │ └── ProtectedAreasGuiControllerTest.java │ ├── report │ └── ReportsGuiControllerTest.java │ └── staff │ ├── bans │ └── gui │ │ ├── BanAppealGuiControllerTest.java │ │ └── BanGuiControllerTest.java │ ├── investigation │ └── gui │ │ └── InvestigationGuiControllerTest.java │ ├── location │ └── gui │ │ └── StaffLocationGuiControllerTest.java │ ├── mute │ └── gui │ │ ├── MuteAppealGuiControllerTest.java │ │ └── MuteGuiControllerTest.java │ └── warnings │ ├── WarningAppealGuiControllerTest.java │ └── WarningGuiControllerTest.java └── resources ├── docker ├── Dockerfile ├── eula.txt ├── mysql-config.yml ├── server.properties ├── spigot-1.21.3.jar └── sqlite-config.yml └── guitemplates ├── bans ├── appeal-detail.xml ├── appeal-reason-select.xml ├── appealed-bans.xml ├── ban-detail-with-appeal.xml ├── ban-detail.xml └── bans-overview.xml ├── hub.xml ├── investigations ├── investigation-detail.xml └── investigations-overview.xml ├── mutes ├── active-mutes.xml ├── appeal-detail.xml ├── appeal-reason-select.xml ├── appealed-mutes.xml ├── history-player-mutes.xml ├── mute-detail-with-appeal.xml └── mute-detail.xml ├── players ├── offlineplayeroverview.xml ├── onlineplayeroverview.xml └── player-detail.xml ├── protect ├── area-detail.xml └── areas-overview.xml ├── report └── report-detail.xml ├── stafflocations ├── stafflocations-detail.xml ├── stafflocations-options.xml ├── stafflocations-overview-no-permission.xml └── stafflocations-overview.xml └── warnings ├── appeal-reason-select.xml ├── appealed-warnings.xml ├── my-warnings-overview.xml ├── severity-select.xml ├── warning-detail.xml └── warnings-overview.xml /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = crlf 6 | indent_style = space 7 | indent_size = 4 8 | insert_final_newline = false 9 | -------------------------------------------------------------------------------- /.github/workflows/maven-1.11.0.yml: -------------------------------------------------------------------------------- 1 | # This workflow will build a Java project with Maven 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven 3 | 4 | name: Release_1.11.0 5 | 6 | on: 7 | push: 8 | branches: [ release/1.11.0 ] 9 | pull_request: 10 | branches: [ release/1.11.0 ] 11 | 12 | jobs: 13 | build: 14 | 15 | runs-on: ubuntu-latest 16 | 17 | steps: 18 | - uses: actions/checkout@v4 19 | - name: Set up JDK 1.8 20 | uses: actions/setup-java@v1 21 | with: 22 | java-version: 1.8 23 | - name: Cache local Maven repository 24 | uses: actions/cache@v4 25 | with: 26 | path: ~/.m2/repository 27 | key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} 28 | restore-keys: | 29 | ${{ runner.os }}-maven- 30 | - name: Build with Maven 31 | run: mvn -B verify --file pom.xml 32 | -------------------------------------------------------------------------------- /.github/workflows/maven_1.12.1.yml: -------------------------------------------------------------------------------- 1 | # This workflow will build a Java project with Maven 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven 3 | 4 | name: Release_1.12.0 5 | 6 | on: 7 | push: 8 | branches: [ release/1.12.0 ] 9 | pull_request: 10 | branches: [ release/1.12.0 ] 11 | workflow_dispatch: 12 | 13 | jobs: 14 | build: 15 | 16 | runs-on: ubuntu-latest 17 | 18 | steps: 19 | - uses: actions/checkout@v4 20 | - name: Set up JDK 8 21 | uses: actions/setup-java@v4 22 | with: 23 | java-version: 8 24 | distribution: zulu 25 | - name: Cache local Maven repository 26 | uses: actions/cache@v4 27 | with: 28 | path: ~/.m2/repository 29 | key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} 30 | restore-keys: | 31 | ${{ runner.os }}-maven- 32 | - name: Build with Maven 33 | run: mvn -B verify --file pom.xml 34 | -------------------------------------------------------------------------------- /.github/workflows/maven_1.13.0.yml: -------------------------------------------------------------------------------- 1 | # This workflow will build a Java project with Maven 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven 3 | 4 | name: Release_1.13.0 5 | 6 | on: 7 | push: 8 | branches: [ release/1.13.0 ] 9 | pull_request: 10 | branches: [ release/1.13.0 ] 11 | workflow_dispatch: 12 | jobs: 13 | build: 14 | 15 | runs-on: ubuntu-latest 16 | 17 | steps: 18 | - uses: actions/checkout@v4 19 | - name: Set up JDK 8 20 | uses: actions/setup-java@v4 21 | with: 22 | java-version: 8 23 | distribution: zulu 24 | - name: Cache local Maven repository 25 | uses: actions/cache@v4 26 | with: 27 | path: ~/.m2/repository 28 | key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} 29 | restore-keys: | 30 | ${{ runner.os }}-maven- 31 | - name: Build with Maven 32 | run: mvn -B clean verify --file pom.xml 33 | -------------------------------------------------------------------------------- /.github/workflows/maven_1.14.0.yml: -------------------------------------------------------------------------------- 1 | # This workflow will build a Java project with Maven 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven 3 | 4 | name: Release_1.14.0 5 | 6 | on: 7 | push: 8 | branches: [ release/1.14.0 ] 9 | pull_request: 10 | branches: [ release/1.14.0 ] 11 | workflow_dispatch: 12 | jobs: 13 | build: 14 | 15 | runs-on: ubuntu-latest 16 | 17 | steps: 18 | - uses: actions/checkout@v4 19 | - name: Set up JDK 8 20 | uses: actions/setup-java@v4 21 | with: 22 | java-version: 8 23 | distribution: zulu 24 | - name: Cache local Maven repository 25 | uses: actions/cache@v4 26 | with: 27 | path: ~/.m2/repository 28 | key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} 29 | restore-keys: | 30 | ${{ runner.os }}-maven- 31 | - name: Build with Maven 32 | run: mvn -B clean verify --file pom.xml 33 | -------------------------------------------------------------------------------- /.github/workflows/maven_1.15.0.yml: -------------------------------------------------------------------------------- 1 | # This workflow will build a Java project with Maven 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven 3 | 4 | name: Release_1.15.0 5 | 6 | on: 7 | push: 8 | branches: [ release/1.15.0 ] 9 | pull_request: 10 | branches: [ release/1.15.0 ] 11 | workflow_dispatch: 12 | jobs: 13 | build: 14 | 15 | runs-on: ubuntu-latest 16 | 17 | steps: 18 | - uses: actions/checkout@v4 19 | - name: Set up JDK 8 20 | uses: actions/setup-java@v4 21 | with: 22 | java-version: 8 23 | distribution: zulu 24 | - name: Cache local Maven repository 25 | uses: actions/cache@v4 26 | with: 27 | path: ~/.m2/repository 28 | key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} 29 | restore-keys: | 30 | ${{ runner.os }}-maven- 31 | - name: Build with Maven 32 | run: mvn -B clean verify --file pom.xml 33 | -------------------------------------------------------------------------------- /.github/workflows/maven_1.16.0.yml: -------------------------------------------------------------------------------- 1 | # This workflow will build a Java project with Maven 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven 3 | 4 | name: Release_1.16.0 5 | 6 | on: 7 | push: 8 | branches: [ release/1.16.0 ] 9 | pull_request: 10 | branches: [ release/1.16.0 ] 11 | workflow_dispatch: 12 | jobs: 13 | build: 14 | 15 | runs-on: ubuntu-latest 16 | 17 | steps: 18 | - uses: actions/checkout@v4 19 | - name: Set up JDK 8 20 | uses: actions/setup-java@v4 21 | with: 22 | java-version: 8 23 | distribution: zulu 24 | - name: Cache local Maven repository 25 | uses: actions/cache@v4 26 | with: 27 | path: ~/.m2/repository 28 | key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} 29 | restore-keys: | 30 | ${{ runner.os }}-maven- 31 | - name: Build with Maven 32 | run: mvn -B clean verify --file pom.xml 33 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea/ 2 | target/ 3 | lib/ 4 | out/ 5 | *.iml -------------------------------------------------------------------------------- /bump_version.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Advances the last number of the given version string by one. 3 | function advance_version () { 4 | local v=$1 5 | # Get the last number. First remove any suffixes (such as '-SNAPSHOT'). 6 | local cleaned; 7 | local last_num; 8 | cleaned=$(echo $v | sed -e 's/[^0-9][^0-9]*$//') 9 | last_num=$(echo $cleaned | sed -e 's/[0-9]*\.//g') 10 | local next_num=$(($last_num+1)) 11 | # Finally replace the last number in version string with the new one. 12 | echo $v | sed -e "s/[0-9][0-9]*\([^0-9]*\)$/$next_num/" 13 | } 14 | 15 | new_version="$(advance_version "$(mvn org.apache.maven.plugins:maven-help-plugin:3.2.0:evaluate -Dexpression=project.version -q -DforceStdout)")" 16 | mvn versions:set -DnewVersion="$new_version" -DgenerateBackupPoms=false -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/SppInteractorBuilder.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application; 2 | 3 | import net.shortninja.staffplus.core.common.Constants; 4 | import net.shortninja.staffplusplus.session.SppInteractor; 5 | import org.bukkit.command.CommandSender; 6 | import org.bukkit.entity.Player; 7 | 8 | import java.util.UUID; 9 | 10 | public class SppInteractorBuilder { 11 | 12 | public static SppInteractor fromSender(CommandSender sender) { 13 | UUID senderUuid = sender instanceof Player ? ((Player) sender).getUniqueId() : Constants.CONSOLE_UUID; 14 | String senderName = sender instanceof Player ? sender.getName() : "Console"; 15 | return new SppInteractor(senderUuid, senderName, sender); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/bootstrap/PluginDisable.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.bootstrap; 2 | 3 | import net.shortninja.staffplus.core.StaffPlusPlus; 4 | 5 | public interface PluginDisable { 6 | 7 | void disable(StaffPlusPlus staffPlusPlus); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/config/ConfigurationUtil.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.config; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | public class ConfigurationUtil { 7 | 8 | private ConfigurationUtil() { 9 | } 10 | 11 | public static Map loadFilters(String filtersString) { 12 | Map filterMap = new HashMap<>(); 13 | if (filtersString != null) { 14 | String[] split = filtersString.split(";"); 15 | for (String filter : split) { 16 | String[] filterPair = filter.split("="); 17 | filterMap.put(filterPair[0].toLowerCase(), filterPair[1].toLowerCase()); 18 | } 19 | } 20 | return filterMap; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/config/MessageMultiLineTransformer.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.config; 2 | 3 | import be.garagepoort.mcioc.configuration.IConfigTransformer; 4 | import net.shortninja.staffplus.core.common.JavaUtils; 5 | 6 | import java.util.List; 7 | 8 | public class MessageMultiLineTransformer implements IConfigTransformer, String> { 9 | @Override 10 | public List mapConfig(String value) { 11 | return JavaUtils.stringToList(value); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/config/SplitByComma.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.config; 2 | 3 | import be.garagepoort.mcioc.configuration.IConfigTransformer; 4 | 5 | import java.util.Arrays; 6 | import java.util.List; 7 | 8 | public class SplitByComma implements IConfigTransformer, String> { 9 | @Override 10 | public List mapConfig(String s) { 11 | return Arrays.asList(s.split("\\s*,\\s*")); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/config/SplitBySemicolon.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.config; 2 | 3 | import be.garagepoort.mcioc.configuration.IConfigTransformer; 4 | 5 | import java.util.Arrays; 6 | import java.util.List; 7 | 8 | public class SplitBySemicolon implements IConfigTransformer, String> { 9 | @Override 10 | public List mapConfig(String s) { 11 | return Arrays.asList(s.split(";")); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/config/TimeUnitDurationTransformer.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.config; 2 | 3 | import be.garagepoort.mcioc.configuration.IConfigTransformer; 4 | import net.shortninja.staffplus.core.common.time.TimeUnit; 5 | 6 | public class TimeUnitDurationTransformer implements IConfigTransformer { 7 | 8 | @Override 9 | public Long mapConfig(String s) { 10 | return TimeUnit.getDuration(s); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/config/messages/BukkitMessageSender.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.config.messages; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import org.apache.commons.lang.StringUtils; 6 | import org.bukkit.command.CommandSender; 7 | 8 | @IocBean 9 | @IocMultiProvider(MessageSender.class) 10 | public class BukkitMessageSender extends AbstractMessageSender { 11 | @Override 12 | public void sendMessage(CommandSender receiver, String message, String prefix) { 13 | for (String s : message.split("\\n")) { 14 | receiver.sendMessage(buildLine(prefix, s)); 15 | } 16 | } 17 | 18 | private String buildLine(String prefix, String message) { 19 | if (StringUtils.isEmpty(prefix)) { 20 | return colorize(message); 21 | } else { 22 | return colorize(prefix + " " + message); 23 | } 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/config/messages/MessageSender.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.config.messages; 2 | 3 | import org.bukkit.command.CommandSender; 4 | 5 | public interface MessageSender { 6 | 7 | void sendMessage(CommandSender receiver, String message, String prefix); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/config/messages/MessageSenderFactory.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.config.messages; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import org.bukkit.command.CommandSender; 5 | import org.bukkit.entity.Player; 6 | 7 | @IocBean 8 | public class MessageSenderFactory { 9 | 10 | private final BukkitMessageSender bukkitMessageSender; 11 | private final JsonMessageSender jsonMessageSender; 12 | 13 | public MessageSenderFactory(BukkitMessageSender bukkitMessageSender, JsonMessageSender jsonMessageSender) { 14 | this.bukkitMessageSender = bukkitMessageSender; 15 | this.jsonMessageSender = jsonMessageSender; 16 | } 17 | 18 | public MessageSender getSender(CommandSender receiver, String message) { 19 | if(receiver instanceof Player && message.contains("[tooltip|")) { 20 | return jsonMessageSender; 21 | }else{ 22 | return bukkitMessageSender; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/config/migrators/FlatFileStorageTypeMigrator.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.config.migrators; 2 | 3 | import be.garagepoort.mcioc.configuration.files.ConfigurationFile; 4 | import be.garagepoort.mcioc.configuration.yaml.configuration.file.FileConfiguration; 5 | 6 | import java.util.List; 7 | 8 | public class FlatFileStorageTypeMigrator implements StaffPlusPlusConfigMigrator { 9 | @Override 10 | public void migrate(List configs) { 11 | FileConfiguration config = getConfig(configs, "config"); 12 | 13 | if (config.getString("storage.type", "sqlite").equalsIgnoreCase("flatfile")) { 14 | config.set("storage.type", "sqlite"); 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/config/migrators/StaffPlusPlusConfigMigrator.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.config.migrators; 2 | 3 | import be.garagepoort.mcioc.configuration.files.ConfigMigrator; 4 | import be.garagepoort.mcioc.configuration.files.ConfigurationFile; 5 | import be.garagepoort.mcioc.configuration.yaml.configuration.file.FileConfiguration; 6 | import net.shortninja.staffplus.core.application.config.messages.Messages; 7 | 8 | import java.util.List; 9 | import java.util.stream.Collectors; 10 | 11 | public interface StaffPlusPlusConfigMigrator extends ConfigMigrator { 12 | 13 | default List getLangFiles(List configs) { 14 | return configs.stream() 15 | .filter(c -> Messages.LANG_FILES.contains(c.getIdentifier())) 16 | .map(ConfigurationFile::getFileConfiguration) 17 | .collect(Collectors.toList()); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/DatabaseInitializer.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.configuration.ConfigProperty; 5 | import be.garagepoort.mcsqlmigrations.Migrations; 6 | import be.garagepoort.mcsqlmigrations.MigrationsProvider; 7 | import be.garagepoort.mcsqlmigrations.SqlConnectionProvider; 8 | 9 | @IocBean(priority = true) 10 | public class DatabaseInitializer { 11 | 12 | public DatabaseInitializer(SqlConnectionProvider sqlConnectionProvider, 13 | MigrationsProvider migrationsProvider, 14 | @ConfigProperty("storage.migrations-table-name") String migrationsTable) { 15 | new Migrations(sqlConnectionProvider, migrationsProvider).run(migrationsTable); 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/MigrationsProvider.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMulti; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.util.List; 8 | 9 | @IocBean 10 | public class MigrationsProvider implements be.garagepoort.mcsqlmigrations.MigrationsProvider { 11 | private final List migrations; 12 | 13 | public MigrationsProvider(@IocMulti(Migration.class) List migrations) { 14 | this.migrations = migrations; 15 | } 16 | 17 | @Override 18 | public List getMigrations() { 19 | return migrations; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V10_AlterReportTableAddStaffNameMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V10_AlterReportTableAddStaffNameMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "ALTER TABLE sp_reports ADD COLUMN staff_name varchar(16);"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 10; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V11_AlterReportTableAddStaffUuidMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V11_AlterReportTableAddStaffUuidMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "ALTER TABLE sp_reports ADD COLUMN staff_uuid varchar(36);"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 11; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V13_AlterWarningsTableAddScoreMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V13_AlterWarningsTableAddScoreMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "ALTER TABLE sp_warnings ADD COLUMN score SMALLINT NOT NULL DEFAULT 0;"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 13; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V14_AlterWarningsTableAddSeverityMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V14_AlterWarningsTableAddSeverityMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "ALTER TABLE sp_warnings ADD COLUMN severity VARCHAR(36);"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 14; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V16_AlterDelayedActionsTableAddTimestampMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V16_AlterDelayedActionsTableAddTimestampMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "ALTER TABLE sp_delayed_actions ADD COLUMN timestamp BIGINT;"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 16; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V17_AlterReportTableAddCloseReasonMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V17_AlterReportTableAddCloseReasonMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "ALTER TABLE sp_reports ADD COLUMN close_reason text;"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 17; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V23_AlterWarningTableAddReadMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V23_AlterWarningTableAddReadMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "ALTER TABLE sp_warnings ADD COLUMN is_read boolean NOT NULL default 0;"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 23; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V24_AlterWarningTableAddTimestampMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V24_AlterWarningTableAddTimestampMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "ALTER TABLE sp_warnings ADD COLUMN timestamp BIGINT NOT NULL DEFAULT 1602696006000;"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 24; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V25_AlterReportsTableAddDeletedMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V25_AlterReportsTableAddDeletedMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "ALTER TABLE sp_reports ADD COLUMN deleted boolean not null default 0;"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 25; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V29_AlterBansTableAddServerColumnMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V29_AlterBansTableAddServerColumnMigration implements Migration { 12 | 13 | @Override 14 | public String getStatement(Connection connection) { 15 | return "ALTER TABLE sp_banned_players ADD COLUMN server_name VARCHAR(255) null;"; 16 | } 17 | 18 | @Override 19 | public int getVersion() { 20 | return 29; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V30_AlterDelayedActionsTableAddServerColumnMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V30_AlterDelayedActionsTableAddServerColumnMigration implements Migration { 12 | 13 | @Override 14 | public String getStatement(Connection connection) { 15 | return "ALTER TABLE sp_delayed_actions ADD COLUMN server_name VARCHAR(255) null;"; 16 | } 17 | 18 | @Override 19 | public int getVersion() { 20 | return 30; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V31_AlterKickedPlayersTableAddServerColumnMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V31_AlterKickedPlayersTableAddServerColumnMigration implements Migration { 12 | 13 | @Override 14 | public String getStatement(Connection connection) { 15 | return "ALTER TABLE sp_kicked_players ADD COLUMN server_name VARCHAR(255) null;"; 16 | } 17 | 18 | @Override 19 | public int getVersion() { 20 | return 31; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V32_AlterLocationsTableAddServerColumnMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V32_AlterLocationsTableAddServerColumnMigration implements Migration { 12 | 13 | @Override 14 | public String getStatement(Connection connection) { 15 | return "ALTER TABLE sp_locations ADD COLUMN server_name VARCHAR(255) null;"; 16 | } 17 | 18 | @Override 19 | public int getVersion() { 20 | return 32; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V33_AlterMutedPlayersTableAddServerColumnMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V33_AlterMutedPlayersTableAddServerColumnMigration implements Migration { 12 | 13 | @Override 14 | public String getStatement(Connection connection) { 15 | return "ALTER TABLE sp_muted_players ADD COLUMN server_name VARCHAR(255) null;"; 16 | } 17 | 18 | @Override 19 | public int getVersion() { 20 | return 33; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V34_AlterReportsTableAddServerColumnMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V34_AlterReportsTableAddServerColumnMigration implements Migration { 12 | 13 | @Override 14 | public String getStatement(Connection connection) { 15 | return "ALTER TABLE sp_reports ADD COLUMN server_name VARCHAR(255) null;"; 16 | } 17 | 18 | @Override 19 | public int getVersion() { 20 | return 34; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V35_AlterWarningsTableAddServerColumnMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V35_AlterWarningsTableAddServerColumnMigration implements Migration { 12 | 13 | @Override 14 | public String getStatement(Connection connection) { 15 | return "ALTER TABLE sp_warnings ADD COLUMN server_name VARCHAR(255) null;"; 16 | } 17 | 18 | @Override 19 | public int getVersion() { 20 | return 35; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V37_AlterDelayedActionsTableAddExecutableActionIdMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V37_AlterDelayedActionsTableAddExecutableActionIdMigration implements Migration { 12 | 13 | @Override 14 | public String getStatement(Connection connection) { 15 | return "ALTER TABLE sp_delayed_actions ADD COLUMN executable_action_id INT null;"; 16 | } 17 | 18 | @Override 19 | public int getVersion() { 20 | return 37; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V38_AlterDelayedActionsTableAddRollbackMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V38_AlterDelayedActionsTableAddRollbackMigration implements Migration { 12 | 13 | @Override 14 | public String getStatement(Connection connection) { 15 | return "ALTER TABLE sp_delayed_actions ADD COLUMN rollback boolean default 0;"; 16 | } 17 | 18 | @Override 19 | public int getVersion() { 20 | return 38; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V40_AlterReportsTableAddLocationColumnMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V40_AlterReportsTableAddLocationColumnMigration implements Migration { 12 | 13 | @Override 14 | public String getStatement(Connection connection) { 15 | return "ALTER TABLE sp_reports ADD COLUMN location_id INT null;"; 16 | } 17 | 18 | @Override 19 | public int getVersion() { 20 | return 40; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V41_AlterWarningTableAddExpiredMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V41_AlterWarningTableAddExpiredMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "ALTER TABLE sp_warnings ADD COLUMN is_expired boolean NOT NULL default 0;"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 41; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V42_AlterDelayedActionsTableAddExecutorMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V42_AlterDelayedActionsTableAddExecutorMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "ALTER TABLE sp_delayed_actions ADD COLUMN executor VARCHAR(12) NOT NULL DEFAULT 'CONSOLE';"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 42; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V43_AlterReportsTableAddTypeMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V43_AlterReportsTableAddTypeMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "ALTER TABLE sp_reports ADD COLUMN type VARCHAR(36) NULL;"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 43; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V44_AlterSessionsTableAddStaffChatMutedMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V44_AlterSessionsTableAddStaffChatMutedMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "ALTER TABLE sp_sessions ADD COLUMN staff_chat_muted boolean NOT NULL default 0;"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 44; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V49_AlterSessionTableAddStaffModeNameColumnMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V49_AlterSessionTableAddStaffModeNameColumnMigration implements Migration { 12 | 13 | @Override 14 | public String getStatement(Connection connection) { 15 | return "ALTER TABLE sp_sessions ADD COLUMN staff_mode_name VARCHAR(128) NULL;"; 16 | } 17 | 18 | @Override 19 | public int getVersion() { 20 | return 49; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V57_AlterSessionTableAddMutedStaffChatChannelsColumnMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V57_AlterSessionTableAddMutedStaffChatChannelsColumnMigration implements Migration { 12 | 13 | @Override 14 | public String getStatement(Connection connection) { 15 | return "ALTER TABLE sp_sessions ADD COLUMN muted_staff_chat_channels VARCHAR(255) null;"; 16 | } 17 | 18 | @Override 19 | public int getVersion() { 20 | return 57; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V58_AlterBansTableAddSilentMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | import java.util.Arrays; 9 | import java.util.List; 10 | 11 | @IocBean 12 | @IocMultiProvider(Migration.class) 13 | public class V58_AlterBansTableAddSilentMigration implements Migration { 14 | 15 | @Override 16 | public List getStatements(Connection connection) { 17 | return Arrays.asList( 18 | "ALTER TABLE sp_banned_players ADD COLUMN silent_ban boolean default 0;", 19 | "ALTER TABLE sp_banned_players ADD COLUMN silent_unban boolean default 0;" 20 | ); 21 | } 22 | 23 | @Override 24 | public int getVersion() { 25 | return 58; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V60_AlterPlayerIpTableAddIpNumericMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | import java.util.Arrays; 9 | import java.util.List; 10 | 11 | @IocBean 12 | @IocMultiProvider(Migration.class) 13 | public class V60_AlterPlayerIpTableAddIpNumericMigration implements Migration { 14 | @Override 15 | public List getStatements(Connection connection) { 16 | return Arrays.asList("ALTER TABLE sp_player_ips ADD COLUMN ip_numeric BIGINT; CREATE INDEX sp_player_ips_ipnumeric ON sp_player_ips(ip_numeric);"); 17 | } 18 | 19 | @Override 20 | public int getVersion() { 21 | return 60; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V64_AlterPlayerIpsTableAddServerColumnMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V64_AlterPlayerIpsTableAddServerColumnMigration implements Migration { 12 | 13 | @Override 14 | public String getStatement(Connection connection) { 15 | return "ALTER TABLE sp_player_ips ADD COLUMN server_name VARCHAR(255) null;"; 16 | } 17 | 18 | @Override 19 | public int getVersion() { 20 | return 64; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V67_AlterMutesTableAddSoftMuteColumnMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V67_AlterMutesTableAddSoftMuteColumnMigration implements Migration { 12 | 13 | @Override 14 | public String getStatement(Connection connection) { 15 | return "ALTER TABLE sp_muted_players ADD COLUMN soft_mute boolean default 0;"; 16 | } 17 | 18 | @Override 19 | public int getVersion() { 20 | return 67; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V70_RemoveOldCommandsTableSqlMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V70_RemoveOldCommandsTableSqlMigration implements Migration { 12 | 13 | @Override 14 | public String getStatement(Connection connection) { 15 | return "DROP TABLE IF EXISTS sp_commands"; 16 | } 17 | 18 | @Override 19 | public int getVersion() { 20 | return 70; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V73_RemoveOldActionsTableSqlMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V73_RemoveOldActionsTableSqlMigration implements Migration { 12 | 13 | @Override 14 | public String getStatement(Connection connection) { 15 | return "DROP TABLE IF EXISTS sp_actionable_actions"; 16 | } 17 | 18 | @Override 19 | public int getVersion() { 20 | return 73; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V74_AlterBansTableAddBanMessageMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V74_AlterBansTableAddBanMessageMigration implements Migration { 12 | 13 | @Override 14 | public String getStatement(Connection connection) { 15 | return "ALTER TABLE sp_banned_players ADD COLUMN template VARCHAR(255);"; 16 | } 17 | 18 | @Override 19 | public int getVersion() { 20 | return 74; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V75_AlterIpBansTableAddBanMessageMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V75_AlterIpBansTableAddBanMessageMigration implements Migration { 12 | 13 | @Override 14 | public String getStatement(Connection connection) { 15 | return "ALTER TABLE sp_banned_ips ADD COLUMN template VARCHAR(255);"; 16 | } 17 | 18 | @Override 19 | public int getVersion() { 20 | return 75; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V83_AlterSessionTableAddSoundDisabledStaffChatChannelsColumnMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V83_AlterSessionTableAddSoundDisabledStaffChatChannelsColumnMigration implements Migration { 12 | 13 | @Override 14 | public String getStatement(Connection connection) { 15 | return "ALTER TABLE sp_sessions ADD COLUMN sound_disabled_staff_chat_channels VARCHAR(255) null;"; 16 | } 17 | 18 | @Override 19 | public int getVersion() { 20 | return 83; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V86_AlterStaffLocationsTableAddIconColumnMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V86_AlterStaffLocationsTableAddIconColumnMigration implements Migration { 12 | 13 | @Override 14 | public String getStatement(Connection connection) { 15 | return "ALTER TABLE sp_staff_locations ADD COLUMN icon VARCHAR(255) not null default 'PAPER';"; 16 | } 17 | 18 | @Override 19 | public int getVersion() { 20 | return 86; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V8_AlterReportTableAddStatusMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V8_AlterReportTableAddStatusMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "ALTER TABLE sp_reports ADD COLUMN status VARCHAR(16) NOT NULL DEFAULT 'OPEN';"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 8; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/common/V9_AlterReportTableAddTimestampMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean 10 | @IocMultiProvider(Migration.class) 11 | public class V9_AlterReportTableAddTimestampMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "ALTER TABLE sp_reports ADD COLUMN timestamp BIGINT;"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 9; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/mysql/V12_AlterReportTablePlayerUuidNullableMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.mysql; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean(conditionalOnProperty = "storage.type=mysql") 10 | @IocMultiProvider(Migration.class) 11 | public class V12_AlterReportTablePlayerUuidNullableMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "ALTER TABLE sp_reports MODIFY COLUMN Player_UUID varchar(36);"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 12; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/mysql/V15_CreateDelayedActionsTableMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.mysql; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean(conditionalOnProperty = "storage.type=mysql") 10 | @IocMultiProvider(Migration.class) 11 | public class V15_CreateDelayedActionsTableMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "CREATE TABLE IF NOT EXISTS sp_delayed_actions (ID INT NOT NULL AUTO_INCREMENT, command VARCHAR(255) NOT NULL, Player_UUID VARCHAR(36) NOT NULL, PRIMARY KEY (ID)) ENGINE = InnoDB;"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 15; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/mysql/V18_CreateLocationsTableMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.mysql; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean(conditionalOnProperty = "storage.type=mysql") 10 | @IocMultiProvider(Migration.class) 11 | public class V18_CreateLocationsTableMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "CREATE TABLE IF NOT EXISTS sp_locations ( ID INT NOT NULL AUTO_INCREMENT, x INTEGER NOT NULL, y INTEGER NOT NULL, z INTEGER NOT NULL, world VARCHAR(128) NOT NULL, PRIMARY KEY (ID)) ENGINE = InnoDB;"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 18; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/mysql/V1_CreateReportsTableMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.mysql; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean(conditionalOnProperty = "storage.type=mysql") 10 | @IocMultiProvider(Migration.class) 11 | public class V1_CreateReportsTableMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "CREATE TABLE IF NOT EXISTS sp_reports ( ID INT NOT NULL AUTO_INCREMENT, Reason VARCHAR(255) NULL, Reporter_UUID VARCHAR(36) NULL, Player_UUID VARCHAR(36) NOT NULL, PRIMARY KEY (ID)) ENGINE = InnoDB;"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 1; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/mysql/V21_CreatePlayerIpsTableMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.mysql; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean(conditionalOnProperty = "storage.type=mysql") 10 | @IocMultiProvider(Migration.class) 11 | public class V21_CreatePlayerIpsTableMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "CREATE TABLE IF NOT EXISTS sp_player_ips ( " + 15 | "player_uuid VARCHAR(36) NOT NULL, " + 16 | "ip VARCHAR(15) NOT NULL, " + 17 | "PRIMARY KEY (player_uuid, ip)) ENGINE = InnoDB;"; 18 | } 19 | 20 | @Override 21 | public int getVersion() { 22 | return 21; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/mysql/V2_CreateWarningsTableMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.mysql; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean(conditionalOnProperty = "storage.type=mysql") 10 | @IocMultiProvider(Migration.class) 11 | public class V2_CreateWarningsTableMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "CREATE TABLE IF NOT EXISTS sp_warnings (ID INT NOT NULL AUTO_INCREMENT, Reason VARCHAR(255) NULL, Warner_UUID VARCHAR(36) NULL, Player_UUID VARCHAR(36) NOT NULL, PRIMARY KEY (ID)) ENGINE = InnoDB;"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 2; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/mysql/V3_CreateAlertOptionsTableMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.mysql; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean(conditionalOnProperty = "storage.type=mysql") 10 | @IocMultiProvider(Migration.class) 11 | public class V3_CreateAlertOptionsTableMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "CREATE TABLE IF NOT EXISTS sp_alert_options ( Name_Change VARCHAR(5) NULL, Mention VARCHAR(5) NULL, Xray VARCHAR(5) NULL, Player_UUID VARCHAR(36) NOT NULL, PRIMARY KEY (Player_UUID)) ENGINE = InnoDB;"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 3; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/mysql/V47_AlterInvestigationEvidenceTableAddDescriptionColumnMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.mysql; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean(conditionalOnProperty = "storage.type=mysql") 10 | @IocMultiProvider(Migration.class) 11 | public class V47_AlterInvestigationEvidenceTableAddDescriptionColumnMigration implements Migration { 12 | 13 | @Override 14 | public String getStatement(Connection connection) { 15 | return "ALTER TABLE sp_investigation_evidence ADD COLUMN description TEXT NOT NULL;"; 16 | } 17 | 18 | @Override 19 | public int getVersion() { 20 | return 47; 21 | } 22 | } -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/mysql/V4_CreatePlayerDataTableMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.mysql; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean(conditionalOnProperty = "storage.type=mysql") 10 | @IocMultiProvider(Migration.class) 11 | public class V4_CreatePlayerDataTableMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "CREATE TABLE IF NOT EXISTS sp_playerdata ( GlassColor INT NOT NULL DEFAULT 0, Password VARCHAR(255) NOT NULL DEFAULT '', Player_UUID VARCHAR(36) NOT NULL, Name VARCHAR(18) NOT NULL, PRIMARY KEY (Player_UUID)) ENGINE = InnoDB;"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 4; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/mysql/V50_AlterInvestigationsTableMakeInvestigatedNullableMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.mysql; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean(conditionalOnProperty = "storage.type=mysql") 10 | @IocMultiProvider(Migration.class) 11 | public class V50_AlterInvestigationsTableMakeInvestigatedNullableMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "ALTER TABLE sp_investigations MODIFY investigated_uuid VARCHAR(36);"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 50; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/mysql/V59_AlterPlayerIpTableAddTimestampMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.mysql; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | import java.util.Arrays; 9 | import java.util.List; 10 | 11 | @IocBean(conditionalOnProperty = "storage.type=mysql") 12 | @IocMultiProvider(Migration.class) 13 | public class V59_AlterPlayerIpTableAddTimestampMigration implements Migration { 14 | @Override 15 | public List getStatements(Connection connection) { 16 | return Arrays.asList( 17 | "ALTER TABLE sp_player_ips ADD COLUMN timestamp BIGINT;", 18 | "UPDATE sp_player_ips SET timestamp = UNIX_TIMESTAMP() * 1000;"); 19 | } 20 | 21 | @Override 22 | public int getVersion() { 23 | return 59; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/mysql/V5_CreateTicketsTableMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.mysql; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean(conditionalOnProperty = "storage.type=mysql") 10 | @IocMultiProvider(Migration.class) 11 | public class V5_CreateTicketsTableMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "CREATE TABLE IF NOT EXISTS sp_tickets ( UUID VARCHAR(36) NOT NULL, ID INT NOT NULL, Inquiry VARCHAR(255) NOT NULL, PRIMARY KEY (UUID)) ENGINE = InnoDB;"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 5; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/mysql/V65_IncreaseIpColumnsTableMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.mysql; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | import java.util.Arrays; 9 | import java.util.List; 10 | 11 | @IocBean(conditionalOnProperty = "storage.type=mysql") 12 | @IocMultiProvider(Migration.class) 13 | public class V65_IncreaseIpColumnsTableMigration implements Migration { 14 | @Override 15 | public List getStatements(Connection connection) { 16 | return Arrays.asList("ALTER TABLE sp_player_ips MODIFY ip VARCHAR(40) NOT NULL;", 17 | "ALTER TABLE sp_banned_ips MODIFY ip VARCHAR(40) NOT NULL;"); 18 | } 19 | 20 | @Override 21 | public int getVersion() { 22 | return 65; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/mysql/V6_CreateCommandsTableMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.mysql; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean(conditionalOnProperty = "storage.type=mysql") 10 | @IocMultiProvider(Migration.class) 11 | public class V6_CreateCommandsTableMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "CREATE TABLE IF NOT EXISTS sp_commands (Command_Name VARCHAR(36) NOT NULL, Command VARCHAR(36) NOT NULL, PRIMARY KEY (Command_Name)) ENGINE = InnoDB;"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 6; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/mysql/V7_AlterPlayerDataTableAddPasswordMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.mysql; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean(conditionalOnProperty = "storage.type=mysql") 10 | @IocMultiProvider(Migration.class) 11 | public class V7_AlterPlayerDataTableAddPasswordMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "ALTER TABLE sp_playerdata CHANGE Password Password VARCHAR(255) NOT NULL DEFAULT '';"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 7; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/sqlite/V15_CreateDelayedActionsTableMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.sqlite; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean(conditionalOnProperty = "storage.type=sqlite") 10 | @IocMultiProvider(Migration.class) 11 | public class V15_CreateDelayedActionsTableMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "CREATE TABLE IF NOT EXISTS sp_delayed_actions (ID INTEGER PRIMARY KEY, command VARCHAR(255) NOT NULL, Player_UUID VARCHAR(36) NOT NULL);"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 15; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/sqlite/V18_CreateLocationsTableMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.sqlite; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean(conditionalOnProperty = "storage.type=sqlite") 10 | @IocMultiProvider(Migration.class) 11 | public class V18_CreateLocationsTableMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "CREATE TABLE IF NOT EXISTS sp_locations ( ID integer PRIMARY KEY, x INTEGER NOT NULL, y INTEGER NOT NULL, z INTEGER NOT NULL, world VARCHAR(128) NOT NULL)"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 18; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/sqlite/V1_CreateReportsTableMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.sqlite; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean(conditionalOnProperty = "storage.type=sqlite") 10 | @IocMultiProvider(Migration.class) 11 | public class V1_CreateReportsTableMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "CREATE TABLE IF NOT EXISTS sp_reports ( ID integer PRIMARY KEY, Reason VARCHAR(255) NULL, Reporter_UUID VARCHAR(36) NULL, Player_UUID VARCHAR(36) NULL)"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 1; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/sqlite/V21_CreatePlayerIpsTableMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.sqlite; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean(conditionalOnProperty = "storage.type=sqlite") 10 | @IocMultiProvider(Migration.class) 11 | public class V21_CreatePlayerIpsTableMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "CREATE TABLE IF NOT EXISTS sp_player_ips ( " + 15 | "player_uuid VARCHAR(36) NOT NULL, " + 16 | "ip VARCHAR(15) NOT NULL, " + 17 | "PRIMARY KEY (player_uuid, ip));"; 18 | } 19 | 20 | @Override 21 | public int getVersion() { 22 | return 21; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/sqlite/V22_CreateAltDetectWhitelistTableMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.sqlite; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean(conditionalOnProperty = "storage.type=sqlite") 10 | @IocMultiProvider(Migration.class) 11 | public class V22_CreateAltDetectWhitelistTableMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "CREATE TABLE IF NOT EXISTS sp_alt_detect_whitelist ( " + 15 | "player_uuid_1 VARCHAR(36) NOT NULL, " + 16 | "player_uuid_2 VARCHAR(36) NOT NULL, " + 17 | "PRIMARY KEY (player_uuid_1, player_uuid_2));"; 18 | } 19 | 20 | @Override 21 | public int getVersion() { 22 | return 22; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/sqlite/V2_CreateWarningsTableMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.sqlite; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean(conditionalOnProperty = "storage.type=sqlite") 10 | @IocMultiProvider(Migration.class) 11 | public class V2_CreateWarningsTableMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "CREATE TABLE IF NOT EXISTS sp_warnings (ID INTEGER PRIMARY KEY, Reason VARCHAR(255) NULL, Warner_UUID VARCHAR(36) NULL, Player_UUID VARCHAR(36) NOT NULL);"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 2; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/sqlite/V3_CreateAlertOptionsTableMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.sqlite; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean(conditionalOnProperty = "storage.type=sqlite") 10 | @IocMultiProvider(Migration.class) 11 | public class V3_CreateAlertOptionsTableMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "CREATE TABLE IF NOT EXISTS sp_alert_options ( Name_Change VARCHAR(5) NULL, Mention VARCHAR(5) NULL, Xray VARCHAR(5) NULL, Player_UUID VARCHAR(36) PRIMARY KEY);"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 3; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/sqlite/V47_AlterInvestigationEvidenceTableAddDescriptionColumnMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.sqlite; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean(conditionalOnProperty = "storage.type=sqlite") 10 | @IocMultiProvider(Migration.class) 11 | public class V47_AlterInvestigationEvidenceTableAddDescriptionColumnMigration implements Migration { 12 | 13 | @Override 14 | public String getStatement(Connection connection) { 15 | return "ALTER TABLE sp_investigation_evidence ADD COLUMN description TEXT NOT NULL DEFAULT '';"; 16 | } 17 | 18 | @Override 19 | public int getVersion() { 20 | return 47; 21 | } 22 | } -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/sqlite/V4_CreatePlayerDataTableMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.sqlite; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean(conditionalOnProperty = "storage.type=sqlite") 10 | @IocMultiProvider(Migration.class) 11 | public class V4_CreatePlayerDataTableMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "CREATE TABLE IF NOT EXISTS sp_playerdata ( GlassColor INTEGER NOT NULL DEFAULT 0, Password VARCHAR(255) NOT NULL DEFAULT '', Player_UUID VARCHAR(36) PRIMARY KEY, Name VARCHAR(18) NOT NULL);"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 4; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/sqlite/V59_AlterPlayerIpTableAddTimestampMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.sqlite; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | import java.util.Arrays; 9 | import java.util.List; 10 | 11 | @IocBean(conditionalOnProperty = "storage.type=sqlite") 12 | @IocMultiProvider(Migration.class) 13 | public class V59_AlterPlayerIpTableAddTimestampMigration implements Migration { 14 | @Override 15 | public List getStatements(Connection connection) { 16 | return Arrays.asList( 17 | "ALTER TABLE sp_player_ips ADD COLUMN timestamp BIGINT;", 18 | "UPDATE sp_player_ips SET timestamp = CURRENT_TIMESTAMP;"); 19 | } 20 | 21 | @Override 22 | public int getVersion() { 23 | return 59; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/sqlite/V5_CreateTicketsTableMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.sqlite; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean(conditionalOnProperty = "storage.type=sqlite") 10 | @IocMultiProvider(Migration.class) 11 | public class V5_CreateTicketsTableMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "CREATE TABLE IF NOT EXISTS sp_tickets ( UUID VARCHAR(36) PRIMARY KEY, ID INT NOT NULL, Inquiry VARCHAR(255) NOT NULL);"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 5; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/sqlite/V6_CreateCommandsTableMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.sqlite; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | 9 | @IocBean(conditionalOnProperty = "storage.type=sqlite") 10 | @IocMultiProvider(Migration.class) 11 | public class V6_CreateCommandsTableMigration implements Migration { 12 | @Override 13 | public String getStatement(Connection connection) { 14 | return "CREATE TABLE IF NOT EXISTS sp_commands (Command_Name VARCHAR(36) PRIMARY KEY, Command VARCHAR(36) NOT NULL);"; 15 | } 16 | 17 | @Override 18 | public int getVersion() { 19 | return 6; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/database/migrations/sqlite/V77_UpdateDeletedReportsTableMigration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.database.migrations.sqlite; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcsqlmigrations.Migration; 6 | 7 | import java.sql.Connection; 8 | import java.util.Arrays; 9 | import java.util.List; 10 | 11 | @IocBean(conditionalOnProperty = "storage.type=sqlite") 12 | @IocMultiProvider(Migration.class) 13 | public class V77_UpdateDeletedReportsTableMigration implements Migration { 14 | @Override 15 | public List getStatements(Connection connection) { 16 | return Arrays.asList("UPDATE sp_reports set deleted=0 WHERE deleted='false';","UPDATE sp_reports set deleted=1 WHERE deleted='true';"); 17 | } 18 | 19 | @Override 20 | public int getVersion() { 21 | return 77; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/queue/QueueMessageListener.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.queue; 2 | 3 | public interface QueueMessageListener { 4 | String handleMessage(T message); 5 | 6 | String getType(); 7 | 8 | Class getMessageClass(); 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/queue/QueueStatus.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.queue; 2 | 3 | public enum QueueStatus { 4 | FAILED, TO_PROCESS, PROCESSED 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/session/SessionCleanupOnPlayerQuit.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.session; 2 | 3 | import be.garagepoort.mcioc.tubingbukkit.annotations.IocBukkitListener; 4 | import org.bukkit.event.EventHandler; 5 | import org.bukkit.event.EventPriority; 6 | import org.bukkit.event.Listener; 7 | import org.bukkit.event.player.PlayerQuitEvent; 8 | 9 | @IocBukkitListener 10 | public class SessionCleanupOnPlayerQuit implements Listener { 11 | 12 | private final OnlineSessionsManager sessionManager; 13 | 14 | public SessionCleanupOnPlayerQuit(OnlineSessionsManager sessionManager) { 15 | this.sessionManager = sessionManager; 16 | } 17 | 18 | @EventHandler(priority = EventPriority.HIGHEST) 19 | public void playerQuit(PlayerQuitEvent playerQuitEvent) { 20 | sessionManager.remove(playerQuitEvent.getPlayer()); 21 | } 22 | } -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/session/SessionEnhancer.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.session; 2 | 3 | public interface SessionEnhancer { 4 | 5 | void enhance(PlayerSession playerSession); 6 | } 7 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/session/SessionLoader.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.session; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMulti; 5 | import org.bukkit.entity.Player; 6 | 7 | import java.util.List; 8 | 9 | @IocBean 10 | public class SessionLoader { 11 | 12 | private final List sessionEnhancers; 13 | 14 | public SessionLoader(@IocMulti(SessionEnhancer.class) List sessionEnhancers) { 15 | this.sessionEnhancers = sessionEnhancers; 16 | } 17 | 18 | public PlayerSession loadSession(Player player) { 19 | PlayerSession playerSession = new PlayerSession(player.getUniqueId(), player.getName()); 20 | sessionEnhancers.forEach(s -> s.enhance(playerSession)); 21 | return playerSession; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/session/database/PlayerSettingsSqlRepository.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.session.database; 2 | 3 | import java.util.Optional; 4 | import java.util.UUID; 5 | 6 | public interface PlayerSettingsSqlRepository { 7 | 8 | int saveSessions(PlayerSettingsEntity playerSettingsEntity); 9 | 10 | void update(PlayerSettingsEntity playerSettingsEntity); 11 | 12 | Optional findSettings(UUID uuid); 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/updates/ResourceVersion.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.updates; 2 | 3 | public class ResourceVersion { 4 | private String name; 5 | 6 | public String getName() { 7 | return name; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/application/updates/SpigetClient.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.application.updates; 2 | 3 | import com.google.gson.JsonObject; 4 | import retrofit2.Call; 5 | import retrofit2.http.GET; 6 | import retrofit2.http.Headers; 7 | 8 | public interface SpigetClient { 9 | 10 | @GET("latest_versions.json") 11 | @Headers("Content-Type: application/json") 12 | Call getVersions(); 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/authentication/AuthenticationException.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.authentication; 2 | 3 | import net.shortninja.staffplus.core.common.exceptions.BusinessException; 4 | 5 | public class AuthenticationException extends BusinessException { 6 | 7 | public AuthenticationException() { 8 | super("You are not authorized to use this command. Please log in"); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/authentication/AuthenticationProvider.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.authentication; 2 | 3 | public enum AuthenticationProvider { 4 | AUTHME, 5 | NOOP 6 | } 7 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/authentication/AuthenticationService.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.authentication; 2 | 3 | import org.bukkit.entity.Player; 4 | 5 | public interface AuthenticationService { 6 | 7 | void checkAuthentication(Player player); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/authentication/authme/AuthMeAuthenticationService.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.authentication.authme; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import fr.xephi.authme.api.v3.AuthMeApi; 5 | import net.shortninja.staffplus.core.authentication.AuthenticationException; 6 | import net.shortninja.staffplus.core.authentication.AuthenticationService; 7 | import org.bukkit.entity.Player; 8 | 9 | @IocBean(conditionalOnProperty = "authentication.provider=authme") 10 | public class AuthMeAuthenticationService implements AuthenticationService { 11 | 12 | @Override 13 | public void checkAuthentication(Player player) { 14 | if(!AuthMeApi.getInstance().isAuthenticated(player)) { 15 | throw new AuthenticationException(); 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/authentication/authme/NoopAuthenticationService.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.authentication.authme; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import net.shortninja.staffplus.core.authentication.AuthenticationService; 5 | import org.bukkit.entity.Player; 6 | 7 | 8 | @IocBean(conditionalOnProperty = "authentication.provider=noop") 9 | public class NoopAuthenticationService implements AuthenticationService { 10 | 11 | @Override 12 | public void checkAuthentication(Player player) { 13 | // No authentication supported 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/IProtocolService.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.staffplusplus.craftbukkit.api.ProtocolFactory; 5 | import be.garagepoort.staffplusplus.craftbukkit.common.IProtocol; 6 | 7 | @IocBean 8 | public class IProtocolService { 9 | 10 | private final IProtocol versionProtocol; 11 | 12 | public IProtocolService() { 13 | versionProtocol = ProtocolFactory.getProtocol(); 14 | } 15 | 16 | public IProtocol getVersionProtocol() { 17 | return versionProtocol; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/UpdatableGui.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common; 2 | 3 | public interface UpdatableGui { 4 | public void update(); 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/bungee/BungeeAction.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common.bungee; 2 | 3 | public enum BungeeAction { 4 | FORWARD("Forward"); 5 | 6 | private final String actionString; 7 | 8 | BungeeAction(String actionString) { 9 | this.actionString = actionString; 10 | } 11 | 12 | public String getActionString() { 13 | return actionString; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/bungee/BungeeContext.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common.bungee; 2 | 3 | public enum BungeeContext { 4 | BROADCAST("StaffPlusPlusBroadcast"); 5 | 6 | private final String contextString; 7 | 8 | BungeeContext(String contextString) { 9 | this.contextString = contextString; 10 | } 11 | 12 | public String getContextString() { 13 | return contextString; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/bungee/BungeeMessage.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common.bungee; 2 | 3 | public class BungeeMessage { 4 | 5 | private final String serverName; 6 | private Long timestamp; 7 | 8 | public BungeeMessage(String serverName) { 9 | this.serverName = serverName; 10 | this.timestamp = System.currentTimeMillis(); 11 | } 12 | 13 | public Long getTimestamp() { 14 | return timestamp; 15 | } 16 | 17 | public String getServerName() { 18 | return serverName; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/bungee/ServerSwitcher.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common.bungee; 2 | 3 | import com.google.common.io.ByteArrayDataOutput; 4 | import net.shortninja.staffplus.core.StaffPlusPlus; 5 | import org.bukkit.entity.Player; 6 | 7 | import static com.google.common.io.ByteStreams.newDataOutput; 8 | 9 | public class ServerSwitcher { 10 | 11 | public static void switchServer(Player player, String serverName) { 12 | ByteArrayDataOutput out = newDataOutput(); 13 | out.writeUTF("Connect"); 14 | out.writeUTF(serverName); 15 | player.sendPluginMessage(StaffPlusPlus.get(), "BungeeCord", out.toByteArray()); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/cmd/Command.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common.cmd; 2 | 3 | import java.lang.annotation.ElementType; 4 | import java.lang.annotation.Retention; 5 | import java.lang.annotation.RetentionPolicy; 6 | import java.lang.annotation.Target; 7 | 8 | @Retention(RetentionPolicy.RUNTIME) 9 | @Target({ElementType.TYPE}) 10 | public @interface Command { 11 | String[] permissions() default ""; 12 | String description() default ""; 13 | String usage() default ""; 14 | boolean delayable() default false; 15 | boolean async() default false; 16 | boolean replaceDoubleQuotes() default true; 17 | String command(); 18 | PlayerRetrievalStrategy playerRetrievalStrategy() default PlayerRetrievalStrategy.NONE; 19 | } -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/cmd/CommandUtil.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common.cmd; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import net.shortninja.staffplus.core.application.config.messages.Messages; 5 | import net.shortninja.staffplus.core.common.exceptions.BusinessException; 6 | import org.bukkit.entity.Player; 7 | 8 | @IocBean 9 | public class CommandUtil { 10 | 11 | private final Messages messages; 12 | 13 | public CommandUtil(Messages messages) { 14 | this.messages = messages; 15 | } 16 | 17 | public void playerAction(Player player, PlayerActionInterface commandInterface) { 18 | try { 19 | commandInterface.execute(); 20 | } catch (BusinessException e) { 21 | messages.send(player, e.getMessage(), e.getPrefix()); 22 | } 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/cmd/PlayerActionInterface.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common.cmd; 2 | 3 | public interface PlayerActionInterface { 4 | 5 | void execute(); 6 | } 7 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/cmd/SppCommand.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common.cmd; 2 | 3 | public interface SppCommand { 4 | } 5 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/cmd/arguments/ArgumentExecutor.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common.cmd.arguments; 2 | 3 | import org.bukkit.command.CommandSender; 4 | 5 | public interface ArgumentExecutor extends ArgumentTabCompletion { 6 | 7 | boolean execute(CommandSender commandSender, String playerName, String value); 8 | 9 | ArgumentType getType(); 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/cmd/arguments/ArgumentTabCompletion.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common.cmd.arguments; 2 | 3 | import java.util.List; 4 | 5 | public interface ArgumentTabCompletion { 6 | 7 | List complete(String currentArg); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/cmd/arguments/ArgumentType.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common.cmd.arguments; 2 | 3 | public enum ArgumentType { 4 | 5 | DELAY("-D"), 6 | TELEPORT("-T"), 7 | HEALTH("-H"), 8 | STRIP("-S"); 9 | 10 | private String prefix; 11 | 12 | ArgumentType(String prefix) { 13 | this.prefix = prefix; 14 | } 15 | 16 | public String getPrefix() { 17 | return prefix; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/exceptions/BusinessException.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common.exceptions; 2 | 3 | import net.shortninja.staffplus.core.StaffPlusPlus; 4 | import net.shortninja.staffplus.core.application.config.messages.Messages; 5 | 6 | public class BusinessException extends RuntimeException { 7 | private final String prefix; 8 | 9 | public BusinessException(String message) { 10 | super(message); 11 | this.prefix = StaffPlusPlus.get().getIocContainer().get(Messages.class).prefixGeneral; 12 | } 13 | 14 | public BusinessException(String message, String prefix) { 15 | super(message); 16 | this.prefix = prefix; 17 | } 18 | 19 | public String getPrefix() { 20 | return prefix; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/exceptions/ConfigurationException.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common.exceptions; 2 | 3 | public class ConfigurationException extends RuntimeException { 4 | 5 | public ConfigurationException(String message) { 6 | super("Invalid S++ configuration: [" + message + "]"); 7 | } 8 | 9 | public ConfigurationException(String message, Throwable e) { 10 | super(message, e); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/exceptions/DatabaseException.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common.exceptions; 2 | 3 | public class DatabaseException extends RuntimeException { 4 | public DatabaseException(Throwable cause) { 5 | super(cause); 6 | } 7 | 8 | public DatabaseException(String error, Throwable e) { 9 | super(error, e); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/exceptions/NoDurationPermissionException.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common.exceptions; 2 | 3 | public class NoDurationPermissionException extends BusinessException { 4 | 5 | public NoDurationPermissionException() { 6 | super("&CYou are not allowed to use this command with this duration"); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/exceptions/NoPermissionException.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common.exceptions; 2 | 3 | import net.shortninja.staffplus.core.StaffPlusPlus; 4 | import net.shortninja.staffplus.core.application.config.messages.Messages; 5 | 6 | public class NoPermissionException extends BusinessException { 7 | public NoPermissionException(String prefix) { 8 | super(StaffPlusPlus.get().getIocContainer().get(Messages.class).noPermission, prefix); 9 | } 10 | 11 | public NoPermissionException() { 12 | super(StaffPlusPlus.get().getIocContainer().get(Messages.class).noPermission); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/exceptions/PlayerNotFoundException.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common.exceptions; 2 | 3 | public class PlayerNotFoundException extends BusinessException { 4 | public PlayerNotFoundException(String name) { 5 | super("No player found with name ["+name+"]"); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/exceptions/PlayerOfflineException.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common.exceptions; 2 | 3 | import net.shortninja.staffplus.core.StaffPlusPlus; 4 | import net.shortninja.staffplus.core.application.config.messages.Messages; 5 | 6 | public class PlayerOfflineException extends BusinessException { 7 | public PlayerOfflineException() { 8 | super(StaffPlusPlus.get().getIocContainer().get(Messages.class).playerOffline); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/gui/GuiItemConfig.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common.gui; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.configuration.ConfigProperty; 5 | 6 | @IocBean 7 | public class GuiItemConfig implements IGuiItemConfig{ 8 | @ConfigProperty("modules.gui-module.investigation-gui") 9 | private boolean enabled; 10 | @ConfigProperty("modules.gui-module.investigation-title") 11 | private String title; 12 | 13 | public boolean isEnabled() { 14 | return enabled; 15 | } 16 | 17 | public String getTitle() { 18 | return title; 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/gui/IAction.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common.gui; 2 | 3 | import org.bukkit.entity.Player; 4 | import org.bukkit.event.inventory.ClickType; 5 | import org.bukkit.inventory.ItemStack; 6 | 7 | public interface IAction { 8 | 9 | 10 | void click(Player player, ItemStack item, int slot, ClickType clickType); 11 | 12 | boolean shouldClose(Player player); 13 | 14 | } -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/gui/IGui.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common.gui; 2 | 3 | import org.bukkit.inventory.Inventory; 4 | import org.bukkit.inventory.ItemStack; 5 | 6 | public interface IGui { 7 | 8 | String getTitle(); 9 | 10 | Inventory getInventory(); 11 | 12 | IAction getAction(int slot); 13 | 14 | void setItem(int slot, ItemStack item, IAction action); 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/gui/IGuiItemConfig.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common.gui; 2 | 3 | public interface IGuiItemConfig { 4 | 5 | boolean isEnabled(); 6 | String getTitle(); 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/gui/PassThroughClickAction.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common.gui; 2 | 3 | import org.bukkit.entity.Player; 4 | import org.bukkit.event.inventory.ClickType; 5 | import org.bukkit.inventory.ItemStack; 6 | 7 | public class PassThroughClickAction implements IAction { 8 | @Override 9 | public void click(Player player, ItemStack item, int slot, ClickType clickType) { 10 | //dummy 11 | } 12 | 13 | @Override 14 | public boolean shouldClose(Player player) { 15 | return false; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/gui/selector/OnSelect.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common.gui.selector; 2 | 3 | import org.bukkit.inventory.ItemStack; 4 | 5 | public interface OnSelect { 6 | 7 | void onSelect(ItemStack selected); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/gui/selector/PageItemsRetriever.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common.gui.selector; 2 | 3 | import net.shortninja.staffplusplus.session.SppPlayer; 4 | import org.bukkit.entity.Player; 5 | import org.bukkit.inventory.ItemStack; 6 | 7 | import java.util.List; 8 | 9 | public interface PageItemsRetriever { 10 | List getItems(Player player, SppPlayer target, int offset, int amount); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/gui/style/StaffTubingGuiStyleIdViewProvider.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common.gui.style; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.tubinggui.style.TubingGuiStyleIdViewProvider; 5 | import net.shortninja.staffplus.core.application.session.OnlineSessionsManager; 6 | import org.bukkit.entity.Player; 7 | 8 | @IocBean 9 | public class StaffTubingGuiStyleIdViewProvider implements TubingGuiStyleIdViewProvider { 10 | 11 | private final OnlineSessionsManager onlineSessionsManager; 12 | 13 | public StaffTubingGuiStyleIdViewProvider(OnlineSessionsManager onlineSessionsManager) { 14 | this.onlineSessionsManager = onlineSessionsManager; 15 | } 16 | 17 | @Override 18 | public boolean canView(Player player) { 19 | return onlineSessionsManager.get(player).isCanViewStyleIds(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/time/TimeParsingException.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common.time; 2 | 3 | import net.shortninja.staffplus.core.common.exceptions.BusinessException; 4 | 5 | public class TimeParsingException extends BusinessException { 6 | public TimeParsingException(String message) { 7 | super(message); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/common/utils/Materials.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.common.utils; 2 | 3 | 4 | import net.shortninja.staffplus.core.common.JavaUtils; 5 | import org.bukkit.Bukkit; 6 | 7 | public enum Materials { 8 | SPAWNER("MOB_SPAWNER", "SPAWNER"), 9 | HEAD("SKULL_ITEM", "PLAYER_HEAD"), 10 | ENDEREYE("EYE_OF_ENDER", "ENDER_EYE"), 11 | CLOCK("WATCH", "CLOCK"), 12 | LEAD("LEASH", "LEAD"), 13 | INK("INK_SACK", "INK_SAC"); 14 | 15 | private final String oldName, newName; 16 | 17 | Materials(String oldName, String newName) { 18 | this.oldName = oldName; 19 | this.newName = newName; 20 | } 21 | 22 | public String getName() { 23 | String[] tmp = Bukkit.getVersion().split("MC: "); 24 | String version = tmp[tmp.length - 1].substring(0, 4); 25 | int ver = JavaUtils.parseMcVer(version); 26 | if(ver>=13) { 27 | return newName; 28 | } else 29 | return oldName; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/actions/ActionFilter.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.actions; 2 | 3 | import java.util.Map; 4 | 5 | public interface ActionFilter { 6 | 7 | boolean isValidAction(CreateStoredCommandRequest createStoredCommandRequest, Map filters); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/actions/ActionRunStrategy.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.actions; 2 | 3 | public enum ActionRunStrategy { 4 | DELAY, 5 | ONLINE, 6 | ALWAYS 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/actions/CommandExecutedEvent.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.actions; 2 | 3 | import org.bukkit.command.CommandSender; 4 | import org.bukkit.event.Event; 5 | import org.bukkit.event.HandlerList; 6 | 7 | public class CommandExecutedEvent extends Event { 8 | private static final HandlerList HANDLERS = new HandlerList(); 9 | 10 | private final CommandSender executor; 11 | private final String command; 12 | 13 | public CommandExecutedEvent(CommandSender executor, String command) { 14 | this.executor = executor; 15 | this.command = command; 16 | } 17 | 18 | public CommandSender getExecutor() { 19 | return executor; 20 | } 21 | 22 | public String getCommand() { 23 | return command; 24 | } 25 | 26 | @Override 27 | public HandlerList getHandlers() { 28 | return HANDLERS; 29 | } 30 | 31 | public static HandlerList getHandlerList() { 32 | return HANDLERS; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/actions/config/FiltersTransformer.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.actions.config; 2 | 3 | import be.garagepoort.mcioc.configuration.IConfigTransformer; 4 | import net.shortninja.staffplus.core.application.config.ConfigurationUtil; 5 | 6 | import java.util.Map; 7 | 8 | public class FiltersTransformer implements IConfigTransformer, String> { 9 | @Override 10 | public Map mapConfig(String filterString) { 11 | return ConfigurationUtil.loadFilters(filterString); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/actions/database/CommandCleanupTask.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.actions.database; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.load.InjectTubingPlugin; 5 | import net.shortninja.staffplus.core.StaffPlusPlus; 6 | import org.bukkit.scheduler.BukkitRunnable; 7 | 8 | @IocBean 9 | public class CommandCleanupTask extends BukkitRunnable { 10 | private static final int TIMER = 1800; 11 | 12 | private final StoredCommandRepository storedCommandRepository; 13 | 14 | public CommandCleanupTask(StoredCommandRepository storedCommandRepository, @InjectTubingPlugin StaffPlusPlus staffPlusPlus) { 15 | this.storedCommandRepository = storedCommandRepository; 16 | runTaskTimerAsynchronously(staffPlusPlus, TIMER * 20, TIMER * 20); 17 | } 18 | 19 | @Override 20 | public void run() { 21 | storedCommandRepository.deleteExecutedCommands(); 22 | } 23 | } -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/actions/database/StoredCommandRepository.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.actions.database; 2 | 3 | import net.shortninja.staffplus.core.domain.actions.StoredCommandEntity; 4 | import net.shortninja.staffplusplus.Actionable; 5 | 6 | import java.sql.Connection; 7 | import java.util.List; 8 | import java.util.UUID; 9 | 10 | public interface StoredCommandRepository { 11 | 12 | void save(Connection connection, List commandEntities); 13 | 14 | List getCommandsFor(Actionable actionable); 15 | 16 | int saveCommand(StoredCommandEntity storedCommandEntity); 17 | 18 | List getDelayedActions(UUID uuid); 19 | 20 | void markExecuted(int id); 21 | 22 | void markDelayed(int id); 23 | 24 | void markRollbacked(int id); 25 | 26 | void deleteExecutedCommands(); 27 | 28 | void deleteAllFromActionable(int actionable_id); 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/actions/gui/CommandExecutedListener.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.actions.gui; 2 | 3 | import be.garagepoort.mcioc.tubingbukkit.annotations.IocBukkitListener; 4 | import net.shortninja.staffplus.core.domain.actions.CommandExecutedEvent; 5 | import org.bukkit.Bukkit; 6 | import org.bukkit.event.EventHandler; 7 | import org.bukkit.event.Listener; 8 | 9 | @IocBukkitListener 10 | public class CommandExecutedListener implements Listener { 11 | 12 | @EventHandler 13 | public void handleDelayedActions(CommandExecutedEvent event) { 14 | Bukkit.dispatchCommand(event.getExecutor(), event.getCommand()); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/blacklist/BlacklistService.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.blacklist; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMulti; 5 | import net.shortninja.staffplus.core.domain.blacklist.censors.BlacklistCensor; 6 | 7 | import java.util.List; 8 | 9 | @IocBean 10 | public class BlacklistService { 11 | 12 | private final List blacklistCensors; 13 | 14 | public BlacklistService(@IocMulti(BlacklistCensor.class) List blacklistCensors) { 15 | this.blacklistCensors = blacklistCensors; 16 | } 17 | 18 | public String censorMessage(String originalMessage) { 19 | String censoredMessage = originalMessage; 20 | for (BlacklistCensor blacklistCensor : blacklistCensors) { 21 | censoredMessage = blacklistCensor.censor(censoredMessage); 22 | } 23 | return censoredMessage; 24 | } 25 | } -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/blacklist/censors/BlacklistCensor.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.blacklist.censors; 2 | 3 | public interface BlacklistCensor { 4 | 5 | String censor(String message); 6 | 7 | default String censor(String message, String word, String censorCharacter) { 8 | String stars = word.replaceAll(".", censorCharacter); 9 | return message.replace(word, stars); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/chat/ChatAction.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.chat; 2 | 3 | import org.bukkit.entity.Player; 4 | 5 | public interface ChatAction { 6 | 7 | void execute(Player player, String message); 8 | 9 | } -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/chat/ChatInterceptor.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.chat; 2 | 3 | import org.bukkit.event.player.AsyncPlayerChatEvent; 4 | 5 | public interface ChatInterceptor { 6 | 7 | /** 8 | * @param event The AsyncPlayerChatEvent 9 | * @return boolean indicating if this interceptor cancels the event. If true the event is cancelled immediately 10 | * and no other interceptors will be executed. 11 | */ 12 | boolean intercept(AsyncPlayerChatEvent event); 13 | 14 | int getPriority(); 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/chat/bungee/PhraseDetectedBungeeEvent.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.chat.bungee; 2 | 3 | import org.bukkit.event.Event; 4 | import org.bukkit.event.HandlerList; 5 | 6 | public class PhraseDetectedBungeeEvent extends Event { 7 | 8 | private static final HandlerList HANDLERS = new HandlerList(); 9 | private final PhraseDetectedBungeeDto phraseDetectedBungeeDto; 10 | 11 | public PhraseDetectedBungeeEvent(PhraseDetectedBungeeDto phraseDetectedBungeeDto) { 12 | this.phraseDetectedBungeeDto = phraseDetectedBungeeDto; 13 | } 14 | 15 | public PhraseDetectedBungeeDto getPhraseDetectedBungeeDto() { 16 | return phraseDetectedBungeeDto; 17 | } 18 | 19 | @Override 20 | public HandlerList getHandlers() { 21 | return HANDLERS; 22 | } 23 | 24 | public static HandlerList getHandlerList() { 25 | return HANDLERS; 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/chat/configuration/ChatConfiguration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.chat.configuration; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.configuration.ConfigObjectList; 5 | import be.garagepoort.mcioc.configuration.ConfigProperty; 6 | 7 | import java.util.List; 8 | 9 | @IocBean 10 | public class ChatConfiguration { 11 | 12 | @ConfigProperty("chat-module.lines") 13 | public int chatLines; 14 | @ConfigProperty("chat-module.slow") 15 | public int chatSlow; 16 | @ConfigProperty("chat-module.detection.phrase-groups") 17 | @ConfigObjectList(PhraseDetectionGroupConfiguration.class) 18 | public List detectionPhrases; 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/chat/configuration/PhraseDetectionGroupConfiguration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.chat.configuration; 2 | 3 | import be.garagepoort.mcioc.configuration.ConfigObjectList; 4 | import be.garagepoort.mcioc.configuration.ConfigProperty; 5 | import net.shortninja.staffplus.core.domain.actions.config.ConfiguredCommand; 6 | 7 | import java.util.ArrayList; 8 | import java.util.List; 9 | 10 | public class PhraseDetectionGroupConfiguration { 11 | 12 | @ConfigProperty("phrases") 13 | public List phrases; 14 | @ConfigProperty("actions") 15 | @ConfigObjectList(ConfiguredCommand.class) 16 | public List actions = new ArrayList<>(); 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/chat/mention/bungee/PlayerMentionedBungeeEvent.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.chat.mention.bungee; 2 | 3 | import org.bukkit.event.Event; 4 | import org.bukkit.event.HandlerList; 5 | 6 | public class PlayerMentionedBungeeEvent extends Event { 7 | 8 | private static final HandlerList HANDLERS = new HandlerList(); 9 | private final MentionBungeeDto mentionBungeeDto; 10 | 11 | public PlayerMentionedBungeeEvent(MentionBungeeDto mentionBungeeDto) { 12 | this.mentionBungeeDto = mentionBungeeDto; 13 | } 14 | 15 | public MentionBungeeDto getMentionBungeeDto() { 16 | return mentionBungeeDto; 17 | } 18 | 19 | @Override 20 | public HandlerList getHandlers() { 21 | return HANDLERS; 22 | } 23 | 24 | public static HandlerList getHandlerList() { 25 | return HANDLERS; 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/chatchannels/bungee/dto/ChatChannelCreatedBungeeDto.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.chatchannels.bungee.dto; 2 | 3 | import net.shortninja.staffplusplus.chatchannels.ChatChannelCreatedEvent; 4 | 5 | public class ChatChannelCreatedBungeeDto extends ChatChannelBungeeDto { 6 | 7 | private final String openingMessage; 8 | 9 | public ChatChannelCreatedBungeeDto(String openingMessage, ChatChannelCreatedEvent event) { 10 | super(event.getChannel()); 11 | this.openingMessage = openingMessage; 12 | } 13 | 14 | public String getOpeningMessage() { 15 | return openingMessage; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/chatchannels/bungee/dto/ChatChannelPlayerJoinedBungeeDto.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.chatchannels.bungee.dto; 2 | 3 | import net.shortninja.staffplusplus.chatchannels.ChatChannelPlayerJoinedEvent; 4 | 5 | import java.util.UUID; 6 | 7 | public class ChatChannelPlayerJoinedBungeeDto extends ChatChannelBungeeDto { 8 | 9 | private final String playerName; 10 | private final UUID playerUuid; 11 | 12 | public ChatChannelPlayerJoinedBungeeDto(ChatChannelPlayerJoinedEvent event) { 13 | super(event.getChannel()); 14 | this.playerName = event.getPlayer().getUsername(); 15 | this.playerUuid = event.getPlayer().getId(); 16 | } 17 | 18 | public String getPlayerName() { 19 | return playerName; 20 | } 21 | 22 | public UUID getPlayerUuid() { 23 | return playerUuid; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/chatchannels/bungee/dto/ChatChannelPlayerLeftBungeeDto.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.chatchannels.bungee.dto; 2 | 3 | import net.shortninja.staffplusplus.chatchannels.ChatChannelPlayerLeftEvent; 4 | 5 | import java.util.UUID; 6 | 7 | public class ChatChannelPlayerLeftBungeeDto extends ChatChannelBungeeDto { 8 | 9 | private final String playerName; 10 | private final UUID playerUuid; 11 | 12 | public ChatChannelPlayerLeftBungeeDto(ChatChannelPlayerLeftEvent event) { 13 | super(event.getChannel()); 14 | this.playerName = event.getPlayer().getUsername(); 15 | this.playerUuid = event.getPlayer().getId(); 16 | } 17 | 18 | public String getPlayerName() { 19 | return playerName; 20 | } 21 | 22 | public UUID getPlayerUuid() { 23 | return playerUuid; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/commanddetection/CommandDetectionGroupConfiguration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.commanddetection; 2 | 3 | import be.garagepoort.mcioc.configuration.ConfigObjectList; 4 | import be.garagepoort.mcioc.configuration.ConfigProperty; 5 | import net.shortninja.staffplus.core.domain.actions.config.ConfiguredCommand; 6 | 7 | import java.util.ArrayList; 8 | import java.util.List; 9 | 10 | public class CommandDetectionGroupConfiguration { 11 | 12 | @ConfigProperty("commands") 13 | public List commands; 14 | 15 | @ConfigProperty("actions") 16 | @ConfigObjectList(ConfiguredCommand.class) 17 | public List actions = new ArrayList<>(); 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/confirmation/ChoiceAction.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.confirmation; 2 | 3 | import org.bukkit.entity.Player; 4 | 5 | public interface ChoiceAction { 6 | void execute(Player player); 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/confirmation/ConfirmationConfig.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.confirmation; 2 | 3 | import net.shortninja.staffplus.core.domain.staff.mode.item.ConfirmationType; 4 | 5 | public class ConfirmationConfig { 6 | 7 | private final ConfirmationType confirmationType; 8 | private final String confirmationMessage; 9 | 10 | public ConfirmationConfig(ConfirmationType confirmationType, String confirmationMessage) { 11 | this.confirmationType = confirmationType; 12 | this.confirmationMessage = confirmationMessage; 13 | } 14 | 15 | public ConfirmationType getConfirmationType() { 16 | return confirmationType; 17 | } 18 | 19 | public String getConfirmationMessage() { 20 | return confirmationMessage; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/location/LocationRepository.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.location; 2 | 3 | import org.bukkit.Location; 4 | 5 | import java.util.Optional; 6 | 7 | public interface LocationRepository { 8 | 9 | int addLocation(SppLocation location); 10 | 11 | int addLocation(Location location); 12 | 13 | void removeLocation(int id); 14 | 15 | Optional findLocation(int id); 16 | 17 | void updateLocation(SppLocation sppLocation); 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/player/ip/PlayerIpRecord.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.player.ip; 2 | 3 | import java.util.UUID; 4 | 5 | public class PlayerIpRecord { 6 | 7 | private String ip; 8 | private UUID playerUuid; 9 | private String playerName; 10 | 11 | public PlayerIpRecord(String ip, UUID playerUuid, String playerName) { 12 | this.ip = ip; 13 | this.playerUuid = playerUuid; 14 | this.playerName = playerName; 15 | } 16 | 17 | public String getIp() { 18 | return ip; 19 | } 20 | 21 | public UUID getPlayerUuid() { 22 | return playerUuid; 23 | } 24 | 25 | public String getPlayerName() { 26 | return playerName; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/player/ip/database/PlayerIpRepository.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.player.ip.database; 2 | 3 | import net.shortninja.staffplus.core.domain.player.ip.PlayerIpRecord; 4 | import net.shortninja.staffplusplus.session.SppPlayer; 5 | 6 | import java.sql.Connection; 7 | import java.util.List; 8 | import java.util.Optional; 9 | import java.util.UUID; 10 | 11 | public interface PlayerIpRepository { 12 | 13 | List getIps(UUID playerUuid); 14 | 15 | List getAllIpRecords(Connection connection); 16 | 17 | void save(UUID playerUuid, String playerName, String ip, String server); 18 | 19 | Optional getLastIp(UUID playerUuid); 20 | 21 | List findInSubnet(long lower, long upper); 22 | 23 | List findWithIp(long ip); 24 | 25 | void deleteRecordsFor(SppPlayer player); 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/player/namechanged/bungee/NameChangedBungeeEvent.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.player.namechanged.bungee; 2 | 3 | import org.bukkit.event.Event; 4 | import org.bukkit.event.HandlerList; 5 | 6 | public class NameChangedBungeeEvent extends Event { 7 | 8 | private static final HandlerList HANDLERS = new HandlerList(); 9 | private final NameChangeBungeeDto nameChangeBungeeDto; 10 | 11 | public NameChangedBungeeEvent(NameChangeBungeeDto nameChangeBungeeDto) { 12 | this.nameChangeBungeeDto = nameChangeBungeeDto; 13 | } 14 | 15 | public NameChangeBungeeDto getNameChangeBungeeDto() { 16 | return nameChangeBungeeDto; 17 | } 18 | 19 | @Override 20 | public HandlerList getHandlers() { 21 | return HANDLERS; 22 | } 23 | 24 | public static HandlerList getHandlerList() { 25 | return HANDLERS; 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/player/providers/NoopOfflinePlayerProvider.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.player.providers; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import net.shortninja.staffplusplus.session.SppPlayer; 5 | 6 | import java.util.Optional; 7 | import java.util.UUID; 8 | 9 | @IocBean(conditionalOnProperty = "offline-players-mode=false") 10 | public class NoopOfflinePlayerProvider implements OfflinePlayerProvider { 11 | 12 | @Override 13 | public Optional findUser(String username) { 14 | return Optional.empty(); 15 | } 16 | 17 | @Override 18 | public Optional findUser(UUID playerUuid) { 19 | return Optional.empty(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/player/providers/OfflinePlayerProvider.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.player.providers; 2 | 3 | import net.shortninja.staffplusplus.session.SppPlayer; 4 | 5 | import java.util.Optional; 6 | import java.util.UUID; 7 | 8 | public interface OfflinePlayerProvider { 9 | 10 | Optional findUser(String username); 11 | 12 | Optional findUser(UUID playerUuid); 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/player/settings/PlayerSettingCreationException.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.player.settings; 2 | 3 | import net.shortninja.staffplus.core.common.exceptions.BusinessException; 4 | 5 | public class PlayerSettingCreationException extends BusinessException { 6 | public PlayerSettingCreationException(String message) { 7 | super(message); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/alerts/config/AltDetectTrustLevelConfigTransformer.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.alerts.config; 2 | 3 | import be.garagepoort.mcioc.configuration.IConfigTransformer; 4 | import net.shortninja.staffplusplus.altdetect.AltDetectTrustLevel; 5 | import org.apache.commons.lang.StringUtils; 6 | 7 | import java.util.Arrays; 8 | import java.util.Collections; 9 | import java.util.List; 10 | import java.util.stream.Collectors; 11 | 12 | public class AltDetectTrustLevelConfigTransformer implements IConfigTransformer, String> { 13 | @Override 14 | public List mapConfig(String s) { 15 | if(StringUtils.isBlank(s)) { 16 | return Collections.emptyList(); 17 | } 18 | return Arrays.stream(s.split(";")) 19 | .map(AltDetectTrustLevel::valueOf) 20 | .collect(Collectors.toList()); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/alerts/config/XrayBlockConfigTransformer.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.alerts.config; 2 | 3 | import be.garagepoort.mcioc.configuration.IConfigTransformer; 4 | import net.shortninja.staffplus.core.domain.staff.alerts.xray.XrayBlockConfig; 5 | import org.apache.commons.lang.StringUtils; 6 | 7 | import java.util.Arrays; 8 | import java.util.Collections; 9 | import java.util.List; 10 | import java.util.stream.Collectors; 11 | 12 | public class XrayBlockConfigTransformer implements IConfigTransformer, String> { 13 | @Override 14 | public List mapConfig(String s) { 15 | if(StringUtils.isBlank(s)) { 16 | return Collections.emptyList(); 17 | } 18 | return Arrays.stream(s.split("\\s*,\\s*")) 19 | .map(XrayBlockConfig::new) 20 | .collect(Collectors.toList()); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/alerts/xray/XrayStrategy.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.alerts.xray; 2 | 3 | import org.bukkit.block.Block; 4 | import org.bukkit.entity.Player; 5 | 6 | public interface XrayStrategy { 7 | 8 | boolean handleBlockBreak(XrayBlockConfig xrayBlockConfig, XrayTrace xrayTrace, Player player, Block block); 9 | 10 | boolean shouldHandle(XrayBlockConfig xrayBlockConfig); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/alerts/xray/bungee/XrayAlertBungeeEvent.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.alerts.xray.bungee; 2 | 3 | import org.bukkit.event.Event; 4 | import org.bukkit.event.HandlerList; 5 | 6 | public class XrayAlertBungeeEvent extends Event { 7 | 8 | private static final HandlerList HANDLERS = new HandlerList(); 9 | private final XrayAlertBungeeDto xrayAlertBungeeDto; 10 | 11 | public XrayAlertBungeeEvent(XrayAlertBungeeDto xrayAlertBungeeDto) { 12 | this.xrayAlertBungeeDto = xrayAlertBungeeDto; 13 | } 14 | 15 | public XrayAlertBungeeDto getXrayAlertBungeeDto() { 16 | return xrayAlertBungeeDto; 17 | } 18 | 19 | @Override 20 | public HandlerList getHandlers() { 21 | return HANDLERS; 22 | } 23 | 24 | public static HandlerList getHandlerList() { 25 | return HANDLERS; 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/altaccountdetect/AltDetectWhitelistedItem.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.altaccountdetect; 2 | 3 | import java.util.UUID; 4 | 5 | public class AltDetectWhitelistedItem { 6 | 7 | private UUID playerUuid1; 8 | private UUID playerUuid2; 9 | 10 | public AltDetectWhitelistedItem(UUID playerUuid1, UUID playerUuid2) { 11 | this.playerUuid1 = playerUuid1; 12 | this.playerUuid2 = playerUuid2; 13 | } 14 | 15 | public boolean isWhitelisted(UUID playerUuid1, UUID playerUuid2) { 16 | return (this.playerUuid1.equals(playerUuid1) && this.playerUuid2.equals(playerUuid2)) 17 | || (this.playerUuid1.equals(playerUuid2) && this.playerUuid2.equals(playerUuid1)); 18 | } 19 | 20 | public UUID getPlayerUuid1() { 21 | return playerUuid1; 22 | } 23 | 24 | public UUID getPlayerUuid2() { 25 | return playerUuid2; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/altaccountdetect/checks/AltDetectInfo.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.altaccountdetect.checks; 2 | 3 | public class AltDetectInfo { 4 | private String username; 5 | private String ip; 6 | 7 | public AltDetectInfo(String username, String ip) { 8 | this.username = username; 9 | this.ip = ip; 10 | } 11 | 12 | public String getUsername() { 13 | return username; 14 | } 15 | 16 | public String getIp() { 17 | return ip; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/altaccountdetect/checks/AltDetector.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.altaccountdetect.checks; 2 | 3 | import net.shortninja.staffplusplus.altdetect.AltDetectResultType; 4 | import net.shortninja.staffplusplus.session.SppPlayer; 5 | 6 | public interface AltDetector { 7 | 8 | AltDetectResultType getResult(AltDetectInfo altDetectInfo, SppPlayer sppPlayer); 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/altaccountdetect/config/AltDetectConfiguration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.altaccountdetect.config; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.configuration.ConfigProperty; 5 | 6 | @IocBean 7 | public class AltDetectConfiguration { 8 | 9 | @ConfigProperty("alt-detect-module.enabled") 10 | public boolean enabled; 11 | @ConfigProperty("alt-detect-module.same-ip-required") 12 | public boolean sameIpRequired; 13 | 14 | @ConfigProperty("permissions:alt-detect-bypass") 15 | public String bypassPermission; 16 | @ConfigProperty("permissions:alt-detect-whitelist") 17 | public String whitelistPermission; 18 | 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/altaccountdetect/database/AltDetectWhitelistRepository.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.altaccountdetect.database; 2 | 3 | import net.shortninja.staffplus.core.domain.staff.altaccountdetect.AltDetectWhitelistedItem; 4 | 5 | import java.util.List; 6 | import java.util.UUID; 7 | 8 | public interface AltDetectWhitelistRepository { 9 | 10 | void addWhitelistedItem(UUID playerUuid1, UUID playerUuid2); 11 | 12 | void removeWhitelistedItem(UUID playerUuid1, UUID playerUuid2); 13 | 14 | List getWhitelistedItems(UUID playerUuid1); 15 | 16 | List getAllPAgedWhitelistedItems(int offset, int amount); 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/ban/appeals/queue/dto/BanAppealQueueMessage.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.ban.appeals.queue.dto; 2 | 3 | import java.util.UUID; 4 | 5 | public class BanAppealQueueMessage { 6 | 7 | private final UUID playerUuid; 8 | private final String playerName; 9 | private final int banId; 10 | private final String reason; 11 | 12 | public BanAppealQueueMessage(UUID playerUuid, String playerName, int banId, String reason) { 13 | this.playerUuid = playerUuid; 14 | this.playerName = playerName; 15 | this.banId = banId; 16 | this.reason = reason; 17 | } 18 | 19 | public String getReason() { 20 | return reason; 21 | } 22 | 23 | public UUID getPlayerUuid() { 24 | return playerUuid; 25 | } 26 | 27 | public String getPlayerName() { 28 | return playerName; 29 | } 30 | 31 | public int getBanId() { 32 | return banId; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/ban/ipbans/bungee/events/IpUnbanBungeeEvent.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.ban.ipbans.bungee.events; 2 | 3 | import net.shortninja.staffplus.core.domain.staff.ban.ipbans.bungee.dto.IpBanBungeeDto; 4 | import org.bukkit.event.Event; 5 | import org.bukkit.event.HandlerList; 6 | 7 | public class IpUnbanBungeeEvent extends Event { 8 | 9 | private static final HandlerList HANDLERS = new HandlerList(); 10 | private final IpBanBungeeDto ban; 11 | 12 | public IpUnbanBungeeEvent(IpBanBungeeDto ban) { 13 | this.ban = ban; 14 | } 15 | 16 | public IpBanBungeeDto getBan() { 17 | return ban; 18 | } 19 | 20 | @Override 21 | public HandlerList getHandlers() { 22 | return HANDLERS; 23 | } 24 | 25 | public static HandlerList getHandlerList() { 26 | return HANDLERS; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/ban/ipbans/database/IpBanRepository.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.ban.ipbans.database; 2 | 3 | import net.shortninja.staffplus.core.domain.staff.ban.ipbans.IpBan; 4 | 5 | import java.util.List; 6 | import java.util.Optional; 7 | 8 | public interface IpBanRepository { 9 | 10 | List getBannedIps(); 11 | 12 | Long saveBan(IpBan ipBan); 13 | 14 | Optional getActiveBannedRule(String ipAddress); 15 | 16 | void deleteBan(IpBan ipBan); 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/ban/playerbans/BanType.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.ban.playerbans; 2 | 3 | public enum BanType { 4 | PERM_BAN, 5 | TEMP_BAN 6 | } 7 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/ban/playerbans/bungee/events/BanBungeeEvent.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.ban.playerbans.bungee.events; 2 | 3 | import net.shortninja.staffplus.core.domain.staff.ban.playerbans.bungee.dto.BanBungeeDto; 4 | import org.bukkit.event.Event; 5 | import org.bukkit.event.HandlerList; 6 | 7 | public class BanBungeeEvent extends Event { 8 | 9 | private static final HandlerList HANDLERS = new HandlerList(); 10 | private final BanBungeeDto ban; 11 | 12 | public BanBungeeEvent(BanBungeeDto ban) { 13 | this.ban = ban; 14 | } 15 | 16 | public BanBungeeDto getBan() { 17 | return ban; 18 | } 19 | 20 | @Override 21 | public HandlerList getHandlers() { 22 | return HANDLERS; 23 | } 24 | 25 | public static HandlerList getHandlerList() { 26 | return HANDLERS; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/ban/playerbans/bungee/events/UnbanBungeeEvent.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.ban.playerbans.bungee.events; 2 | 3 | import net.shortninja.staffplus.core.domain.staff.ban.playerbans.bungee.dto.BanBungeeDto; 4 | import org.bukkit.event.Event; 5 | import org.bukkit.event.HandlerList; 6 | 7 | public class UnbanBungeeEvent extends Event { 8 | 9 | private static final HandlerList HANDLERS = new HandlerList(); 10 | private final BanBungeeDto ban; 11 | 12 | public UnbanBungeeEvent(BanBungeeDto ban) { 13 | this.ban = ban; 14 | } 15 | 16 | public BanBungeeDto getBan() { 17 | return ban; 18 | } 19 | 20 | @Override 21 | public HandlerList getHandlers() { 22 | return HANDLERS; 23 | } 24 | 25 | public static HandlerList getHandlerList() { 26 | return HANDLERS; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/ban/playerbans/config/BanGuiItemConfig.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.ban.playerbans.config; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.configuration.ConfigProperty; 5 | import net.shortninja.staffplus.core.common.gui.IGuiItemConfig; 6 | 7 | @IocBean 8 | public class BanGuiItemConfig implements IGuiItemConfig { 9 | @ConfigProperty("staffmode-modules:modules.gui-module.ban-gui") 10 | private boolean enabled; 11 | @ConfigProperty("staffmode-modules:modules.gui-module.ban-title") 12 | private String title; 13 | 14 | @Override 15 | public boolean isEnabled() { 16 | return enabled; 17 | } 18 | 19 | @Override 20 | public String getTitle() { 21 | return title; 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/ban/playerbans/gui/BanEvidenceDetailGuiProvider.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.ban.playerbans.gui; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcioc.tubinggui.GuiActionBuilder; 6 | import net.shortninja.staffplusplus.investigate.evidence.EvidenceGuiClick; 7 | import org.bukkit.entity.Player; 8 | 9 | @IocBean 10 | @IocMultiProvider(EvidenceGuiClick.class) 11 | public class BanEvidenceDetailGuiProvider implements EvidenceGuiClick { 12 | 13 | @Override 14 | public String getType() { 15 | return "BAN"; 16 | } 17 | 18 | @Override 19 | public String getAction(Player player, int id, String backAction) { 20 | return GuiActionBuilder.builder() 21 | .action("manage-bans/view/detail") 22 | .param("banId", String.valueOf(id)) 23 | .build(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/broadcast/config/BroadcastSelector.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.broadcast.config; 2 | 3 | public enum BroadcastSelector { 4 | ALL, 5 | CURRENT 6 | } 7 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/chests/ChestGuiType.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.chests; 2 | 3 | public enum ChestGuiType { 4 | 5 | CONTAINER, 6 | ENDER_CHEST_EXAMINE, 7 | PLAYER_INVENTORY_EXAMINE, 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/chests/config/EnderchestsConfiguration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.chests.config; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.configuration.ConfigProperty; 5 | 6 | @IocBean 7 | public class EnderchestsConfiguration { 8 | 9 | @ConfigProperty("permissions:enderchests.view.online") 10 | public String permissionViewOnline; 11 | @ConfigProperty("permissions:enderchests.view.offline") 12 | public String permissionViewOffline; 13 | @ConfigProperty("permissions:enderchests.interact") 14 | public String permissionInteract; 15 | 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/examine/gui/ExamineGuiItemProvider.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.examine.gui; 2 | 3 | import net.shortninja.staffplusplus.session.SppPlayer; 4 | import org.bukkit.entity.Player; 5 | import org.bukkit.inventory.ItemStack; 6 | 7 | public interface ExamineGuiItemProvider { 8 | 9 | ItemStack getItem(Player player1, SppPlayer player); 10 | 11 | String getClickAction(Player staff, SppPlayer targetPlayer); 12 | 13 | boolean enabled(Player staff, SppPlayer player); 14 | 15 | int getSlot(); 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/freeze/FreezeRequest.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.freeze; 2 | 3 | import org.bukkit.command.CommandSender; 4 | import org.bukkit.entity.Player; 5 | 6 | public class FreezeRequest { 7 | 8 | private final CommandSender commandSender; 9 | private final Player player; 10 | private final boolean enableFreeze; 11 | 12 | public FreezeRequest(CommandSender commandSender, Player player, boolean enableFreeze) { 13 | this.commandSender = commandSender; 14 | this.player = player; 15 | this.enableFreeze = enableFreeze; 16 | } 17 | 18 | public CommandSender getCommandSender() { 19 | return commandSender; 20 | } 21 | 22 | public Player getPlayer() { 23 | return player; 24 | } 25 | 26 | public boolean isEnableFreeze() { 27 | return enableFreeze; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/infractions/Infraction.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.infractions; 2 | 3 | public interface Infraction { 4 | InfractionType getInfractionType(); 5 | 6 | Long getCreationTimestamp(); 7 | } 8 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/infractions/InfractionProvider.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.infractions; 2 | 3 | import org.bukkit.entity.Player; 4 | 5 | import java.util.List; 6 | import java.util.Optional; 7 | import java.util.UUID; 8 | 9 | public interface InfractionProvider { 10 | 11 | List getInfractions(Player executor, UUID playerUUID); 12 | 13 | Optional getInfractionsInfo(); 14 | 15 | InfractionType getType(); 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/infractions/InfractionType.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.infractions; 2 | 3 | public enum InfractionType { 4 | MUTE("Mutes"), 5 | BAN("Bans"), 6 | REPORTED("Reported"), 7 | WARNING("Warns"), 8 | KICK("Kicks"); 9 | 10 | private final String guiTitle; 11 | 12 | InfractionType(String guiTitle) { 13 | this.guiTitle = guiTitle; 14 | } 15 | 16 | public String getGuiTitle() { 17 | return guiTitle; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/infractions/gui/views/InfractionGuiProvider.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.infractions.gui.views; 2 | 3 | import net.shortninja.staffplus.core.domain.staff.infractions.Infraction; 4 | import net.shortninja.staffplus.core.domain.staff.infractions.InfractionType; 5 | import org.bukkit.inventory.ItemStack; 6 | 7 | public interface InfractionGuiProvider { 8 | 9 | InfractionType getType(); 10 | 11 | ItemStack getMenuItem(T i); 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/investigate/bungee/events/InvestigationPausedBungeeEvent.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.investigate.bungee.events; 2 | 3 | import net.shortninja.staffplus.core.domain.staff.investigate.bungee.InvestigationBungee; 4 | import org.bukkit.event.Event; 5 | import org.bukkit.event.HandlerList; 6 | 7 | public class InvestigationPausedBungeeEvent extends Event { 8 | 9 | private static final HandlerList HANDLERS = new HandlerList(); 10 | private final InvestigationBungee investigation; 11 | 12 | public InvestigationPausedBungeeEvent(InvestigationBungee investigation) { 13 | this.investigation = investigation; 14 | } 15 | 16 | public InvestigationBungee getInvestigation() { 17 | return investigation; 18 | } 19 | 20 | @Override 21 | public HandlerList getHandlers() { 22 | return HANDLERS; 23 | } 24 | 25 | public static HandlerList getHandlerList() { 26 | return HANDLERS; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/investigate/database/evidence/InvestigationEvidenceRepository.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.investigate.database.evidence; 2 | 3 | import net.shortninja.staffplus.core.domain.staff.investigate.EvidenceEntity; 4 | import net.shortninja.staffplus.core.domain.staff.investigate.Investigation; 5 | import net.shortninja.staffplusplus.investigate.evidence.Evidence; 6 | 7 | import java.util.List; 8 | import java.util.Optional; 9 | 10 | public interface InvestigationEvidenceRepository { 11 | 12 | void addEvidence(EvidenceEntity evidenceEntity); 13 | 14 | List getAllEvidence(int investigationId); 15 | 16 | List getAllEvidence(int investigationId, int offset, int amount); 17 | 18 | void removeEvidence(int id); 19 | 20 | Optional findLinkedEvidence(Investigation investigation, Evidence evidence); 21 | 22 | Optional find(int id); 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/investigate/database/notes/InvestigationNotesRepository.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.investigate.database.notes; 2 | 3 | import net.shortninja.staffplus.core.domain.staff.investigate.InvestigationNoteEntity; 4 | 5 | import java.util.List; 6 | import java.util.Optional; 7 | 8 | public interface InvestigationNotesRepository { 9 | 10 | void addNote(InvestigationNoteEntity investigationNoteEntity); 11 | 12 | List getAllNotes(int investigationId); 13 | 14 | List getAllNotes(int investigationId, int offset, int amount); 15 | 16 | void removeNote(int id); 17 | 18 | Optional find(int id); 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/investigate/gui/evidence/EvidenceDto.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.investigate.gui.evidence; 2 | 3 | import net.shortninja.staffplusplus.investigate.evidence.Evidence; 4 | 5 | public class EvidenceDto implements Evidence { 6 | private int id; 7 | private String evidenceType; 8 | private String description; 9 | 10 | public EvidenceDto(int id, String evidenceType, String description) { 11 | this.id = id; 12 | this.evidenceType = evidenceType; 13 | this.description = description; 14 | } 15 | 16 | @Override 17 | public int getId() { 18 | return id; 19 | } 20 | 21 | @Override 22 | public String getEvidenceType() { 23 | return evidenceType; 24 | } 25 | 26 | @Override 27 | public String getDescription() { 28 | return description; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/joinmessages/JoinMessageGroup.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.joinmessages; 2 | 3 | import be.garagepoort.mcioc.configuration.ConfigProperty; 4 | 5 | public class JoinMessageGroup { 6 | 7 | @ConfigProperty("permission") 8 | private String permission; 9 | @ConfigProperty("message") 10 | private String message; 11 | @ConfigProperty("weight") 12 | private int weight; 13 | 14 | public String getPermission() { 15 | return permission; 16 | } 17 | 18 | public String getMessage() { 19 | return message; 20 | } 21 | 22 | public int getWeight() { 23 | return weight; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/kick/config/KickConfiguration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.kick.config; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.configuration.ConfigObjectList; 5 | import be.garagepoort.mcioc.configuration.ConfigProperty; 6 | 7 | import java.util.List; 8 | 9 | @IocBean 10 | public class KickConfiguration { 11 | 12 | @ConfigProperty("kick-module.enabled") 13 | public boolean kickEnabled; 14 | 15 | @ConfigProperty("permissions:kick") 16 | public String permissionKickPlayer; 17 | 18 | @ConfigProperty("permissions:kick-bypass") 19 | public String permissionKickByPass; 20 | 21 | @ConfigProperty("kick-module.fixed-reason") 22 | public boolean fixedReason; 23 | 24 | @ConfigProperty("kick-module.reasons") 25 | @ConfigObjectList(KickReasonConfiguration.class) 26 | public List kickReasons; 27 | 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/kick/config/KickReasonConfiguration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.kick.config; 2 | 3 | import be.garagepoort.mcioc.configuration.ConfigProperty; 4 | import be.garagepoort.mcioc.configuration.ConfigTransformer; 5 | import be.garagepoort.mcioc.configuration.transformers.ToEnum; 6 | import org.bukkit.Material; 7 | 8 | public class KickReasonConfiguration { 9 | 10 | @ConfigProperty("reason") 11 | public String reason; 12 | @ConfigProperty("material") 13 | @ConfigTransformer(ToEnum.class) 14 | public Material material = Material.PAPER; 15 | @ConfigProperty("info") 16 | public String lore; 17 | 18 | public String getReason() { 19 | return reason; 20 | } 21 | 22 | public Material getMaterial() { 23 | return material; 24 | } 25 | 26 | public String getLore() { 27 | return lore; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/kick/database/KicksRepository.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.kick.database; 2 | 3 | import net.shortninja.staffplus.core.domain.staff.kick.Kick; 4 | 5 | import java.util.List; 6 | import java.util.Map; 7 | import java.util.UUID; 8 | 9 | public interface KicksRepository { 10 | 11 | int addKick(Kick kick); 12 | 13 | List getKicksForPlayer(UUID playerUUID); 14 | 15 | Map getCountByPlayer(); 16 | 17 | List getKicksForPlayer(UUID playerKicked, int offset, int amount); 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/location/config/StaffLocationIconConfig.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.location.config; 2 | 3 | import be.garagepoort.mcioc.configuration.ConfigProperty; 4 | 5 | public class StaffLocationIconConfig { 6 | 7 | @ConfigProperty("icon") 8 | private String material; 9 | @ConfigProperty("text") 10 | private String iconText; 11 | 12 | // Empty constructor needed for Tubing initialization 13 | public StaffLocationIconConfig() { 14 | } 15 | 16 | public StaffLocationIconConfig(String material, String iconText) { 17 | this.material = material; 18 | this.iconText = iconText; 19 | } 20 | 21 | public String getMaterial() { 22 | return material; 23 | } 24 | 25 | public String getIconText() { 26 | return iconText; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/mode/StaffModule.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.mode; 2 | 3 | public enum StaffModule { 4 | 5 | VANISH_MODULE("vanish-module"); 6 | 7 | private String key; 8 | 9 | StaffModule(String key) { 10 | this.key = key; 11 | } 12 | 13 | public String getKey() { 14 | return key; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/mode/config/modeitems/compass/CompassModeConfiguration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.mode.config.modeitems.compass; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.configuration.ConfigProperties; 5 | import be.garagepoort.mcioc.configuration.ConfigProperty; 6 | import net.shortninja.staffplus.core.domain.staff.mode.config.ModeItemConfiguration; 7 | 8 | @IocBean 9 | @ConfigProperties("staffmode-modules:modules.compass-module") 10 | public class CompassModeConfiguration extends ModeItemConfiguration { 11 | 12 | @ConfigProperty("velocity") 13 | private int velocity; 14 | 15 | public int getVelocity() { 16 | return velocity; 17 | } 18 | 19 | @Override 20 | public String getIdentifier() { 21 | return "compass-module"; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/mode/config/modeitems/examine/ExamineModeItemLocationConfigTransformer.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.mode.config.modeitems.examine; 2 | 3 | import be.garagepoort.mcioc.configuration.IConfigTransformer; 4 | 5 | public class ExamineModeItemLocationConfigTransformer implements IConfigTransformer { 6 | @Override 7 | public Integer mapConfig(Integer value) { 8 | return value <= 0 ? -1 : value; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/mode/config/modeitems/follow/FollowModeConfiguration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.mode.config.modeitems.follow; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.configuration.ConfigProperties; 5 | import net.shortninja.staffplus.core.domain.staff.mode.config.ModeItemConfiguration; 6 | 7 | @IocBean 8 | @ConfigProperties("staffmode-modules:modules.follow-module") 9 | public class FollowModeConfiguration extends ModeItemConfiguration { 10 | 11 | @Override 12 | public String getIdentifier() { 13 | return "follow-module"; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/mode/config/modeitems/freeze/FreezeModeStaffModuleConfiguration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.mode.config.modeitems.freeze; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.configuration.ConfigProperties; 5 | import net.shortninja.staffplus.core.domain.staff.mode.config.ModeItemConfiguration; 6 | 7 | @IocBean 8 | @ConfigProperties("staffmode-modules:modules.freeze-module") 9 | public class FreezeModeStaffModuleConfiguration extends ModeItemConfiguration { 10 | @Override 11 | public String getIdentifier() { 12 | return "freeze-module"; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/mode/config/modeitems/gui/GuiModeConfiguration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.mode.config.modeitems.gui; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.configuration.ConfigProperties; 5 | import be.garagepoort.mcioc.configuration.ConfigProperty; 6 | import net.shortninja.staffplus.core.domain.staff.mode.config.ModeItemConfiguration; 7 | 8 | @IocBean 9 | @ConfigProperties("staffmode-modules:modules.gui-module") 10 | public class GuiModeConfiguration extends ModeItemConfiguration { 11 | @ConfigProperty("xray-level") 12 | public int modeGuiMinerLevel; 13 | 14 | @Override 15 | public String getIdentifier() { 16 | return "gui-module"; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/mode/config/modeitems/playerdetails/PlayerDetailsModeConfiguration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.mode.config.modeitems.playerdetails; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.configuration.ConfigProperties; 5 | import net.shortninja.staffplus.core.domain.staff.mode.config.ModeItemConfiguration; 6 | 7 | @IocBean 8 | @ConfigProperties("staffmode-modules:modules.player-details-module") 9 | public class PlayerDetailsModeConfiguration extends ModeItemConfiguration { 10 | @Override 11 | public String getIdentifier() { 12 | return "player-details-module"; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/mode/config/modeitems/randomteleport/RandomTeleportModeConfiguration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.mode.config.modeitems.randomteleport; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.configuration.ConfigProperties; 5 | import be.garagepoort.mcioc.configuration.ConfigProperty; 6 | import net.shortninja.staffplus.core.domain.staff.mode.config.ModeItemConfiguration; 7 | 8 | @IocBean 9 | @ConfigProperties("staffmode-modules:modules.random-teleport-module") 10 | public class RandomTeleportModeConfiguration extends ModeItemConfiguration { 11 | 12 | @ConfigProperty("random") 13 | private boolean random; 14 | 15 | public boolean isRandom() { 16 | return random; 17 | } 18 | 19 | @Override 20 | public String getIdentifier() { 21 | return "random-teleport-module"; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/mode/custommodules/CustomModuleExecutor.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.mode.custommodules; 2 | 3 | import org.bukkit.entity.Player; 4 | 5 | import java.util.Map; 6 | 7 | @FunctionalInterface 8 | public interface CustomModuleExecutor { 9 | 10 | void execute(Player player, Map placeholders); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/mode/custommodules/preprocessors/CustomModulePreProcessor.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.mode.custommodules.preprocessors; 2 | 3 | import net.shortninja.staffplus.core.domain.staff.mode.custommodules.CustomModuleConfiguration; 4 | import net.shortninja.staffplus.core.domain.staff.mode.custommodules.CustomModuleExecutor; 5 | 6 | import java.util.Map; 7 | 8 | public interface CustomModulePreProcessor { 9 | 10 | CustomModuleExecutor process(CustomModuleExecutor action, CustomModuleConfiguration customModuleConfiguration, Map placeholders); 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/mode/custommodules/state/ModuleStateChangedEvent.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.mode.custommodules.state; 2 | 3 | import org.bukkit.event.Event; 4 | import org.bukkit.event.HandlerList; 5 | 6 | import java.util.UUID; 7 | 8 | public class ModuleStateChangedEvent extends Event { 9 | 10 | private static final HandlerList HANDLERS = new HandlerList(); 11 | 12 | private final UUID playerUuid; 13 | 14 | public ModuleStateChangedEvent(UUID playerUuid) { 15 | this.playerUuid = playerUuid; 16 | } 17 | 18 | public UUID getPlayerUuid() { 19 | return playerUuid; 20 | } 21 | 22 | @Override 23 | public HandlerList getHandlers() { 24 | return HANDLERS; 25 | } 26 | 27 | public static HandlerList getHandlerList() { 28 | return HANDLERS; 29 | } 30 | 31 | } 32 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/mode/handler/GadgetType.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.mode.handler; 2 | 3 | public enum GadgetType { 4 | COMPASS, 5 | RANDOM_TELEPORT, 6 | VANISH, 7 | GUI_HUB, 8 | COUNTER, 9 | FREEZE, 10 | CPS, 11 | EXAMINE, 12 | FOLLOW, 13 | CUSTOM, 14 | NO_GADGET, 15 | PLAYER_DETAILS; 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/mode/item/ConfirmationType.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.mode.item; 2 | 3 | public enum ConfirmationType { 4 | GUI, CHAT 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/mute/MuteMessageStringUtil.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.mute; 2 | 3 | import net.shortninja.staffplusplus.mute.IMute; 4 | 5 | public class MuteMessageStringUtil { 6 | 7 | public static String replaceMutePlaceholders(String message, IMute mute) { 8 | String result = message; 9 | if (mute.getTargetName() != null) result = result.replace("%target%", mute.getTargetName()); 10 | if (mute.getIssuerName() != null) result = result.replace("%issuer%", mute.getIssuerName()); 11 | if (mute.getReason() != null) result = result.replace("%reason%", mute.getReason()); 12 | if (mute.getEndTimestamp() != null) result = result.replace("%duration%", mute.getHumanReadableDuration()); 13 | return result; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/mute/config/MuteGuiItemConfig.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.mute.config; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.configuration.ConfigProperty; 5 | import net.shortninja.staffplus.core.common.gui.IGuiItemConfig; 6 | 7 | @IocBean 8 | public class MuteGuiItemConfig implements IGuiItemConfig { 9 | @ConfigProperty("staffmode-modules:modules.gui-module.mute-gui") 10 | private boolean enabled; 11 | @ConfigProperty("staffmode-modules:modules.gui-module.mute-title") 12 | private String title; 13 | 14 | @Override 15 | public boolean isEnabled() { 16 | return enabled; 17 | } 18 | 19 | @Override 20 | public String getTitle() { 21 | return title; 22 | } 23 | 24 | } 25 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/mute/gui/MuteEvidenceDetailGuiProvider.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.mute.gui; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcioc.tubinggui.GuiActionBuilder; 6 | import net.shortninja.staffplusplus.investigate.evidence.EvidenceGuiClick; 7 | import org.bukkit.entity.Player; 8 | 9 | @IocBean 10 | @IocMultiProvider(EvidenceGuiClick.class) 11 | public class MuteEvidenceDetailGuiProvider implements EvidenceGuiClick { 12 | 13 | @Override 14 | public String getType() { 15 | return "MUTE"; 16 | } 17 | 18 | @Override 19 | public String getAction(Player player, int id, String backAction) { 20 | return GuiActionBuilder.builder() 21 | .action("manage-mutes/view/detail") 22 | .param("muteId", String.valueOf(id)) 23 | .build(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/playernotes/database/PlayerNoteRepository.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.playernotes.database; 2 | 3 | import net.shortninja.staffplus.core.domain.staff.playernotes.PlayerNote; 4 | import net.shortninja.staffplusplus.playernotes.PlayerNoteFilters; 5 | 6 | import java.util.List; 7 | import java.util.Optional; 8 | import java.util.UUID; 9 | 10 | public interface PlayerNoteRepository { 11 | 12 | long createPlayerNote(PlayerNote playerNote); 13 | 14 | List getPlayerNotesForTarget(UUID notedByUuid, UUID targetUuid, int offset, int amount); 15 | 16 | Optional findNote(int noteId); 17 | 18 | void deleteNote(int noteId); 19 | 20 | List findPlayerNotes(UUID notedByUuid, PlayerNoteFilters playerNoteFilters, int offset, int amount); 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/playernotes/queue/dto/PlayerNoteQueueMessage.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.playernotes.queue.dto; 2 | 3 | import java.util.UUID; 4 | 5 | public class PlayerNoteQueueMessage { 6 | 7 | private final UUID playerUuid; 8 | private final String playerName; 9 | private final int noteId; 10 | 11 | public PlayerNoteQueueMessage(UUID playerUuid, String playerName, int noteId) { 12 | this.playerUuid = playerUuid; 13 | this.playerName = playerName; 14 | this.noteId = noteId; 15 | } 16 | 17 | public UUID getPlayerUuid() { 18 | return playerUuid; 19 | } 20 | 21 | public String getPlayerName() { 22 | return playerName; 23 | } 24 | 25 | public int getNoteId() { 26 | return noteId; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/protect/database/ProtectedAreaRepository.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.protect.database; 2 | 3 | import net.shortninja.staffplus.core.domain.staff.protect.ProtectedArea; 4 | import org.bukkit.entity.Player; 5 | 6 | import java.util.List; 7 | import java.util.Optional; 8 | 9 | public interface ProtectedAreaRepository { 10 | 11 | void addProtectedArea(Player player, ProtectedArea protectedArea); 12 | 13 | List getProtectedAreas(); 14 | 15 | Optional findById(int id); 16 | 17 | Optional findByName(String name); 18 | 19 | void deleteProtectedArea(int id); 20 | 21 | List getProtectedAreasPaginated(int offset, int amount); 22 | 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/reporting/CloseReportRequest.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.reporting; 2 | 3 | import net.shortninja.staffplusplus.reports.ReportStatus; 4 | 5 | public class CloseReportRequest { 6 | 7 | private final int reportId; 8 | private final ReportStatus status; 9 | private String closeReason; 10 | 11 | public CloseReportRequest(int reportId, ReportStatus status, String closeReason) { 12 | this.reportId = reportId; 13 | this.status = status; 14 | this.closeReason = closeReason; 15 | } 16 | 17 | public int getReportId() { 18 | return reportId; 19 | } 20 | 21 | public ReportStatus getStatus() { 22 | return status; 23 | } 24 | 25 | public String getCloseReason() { 26 | return closeReason; 27 | } 28 | 29 | public void setCloseReason(String closeReason) { 30 | this.closeReason = closeReason; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/reporting/bungee/dto/ReportDeletedBungeeDto.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.reporting.bungee.dto; 2 | 3 | import net.shortninja.staffplusplus.reports.IReport; 4 | 5 | public class ReportDeletedBungeeDto extends ReportBungeeDto { 6 | 7 | private String deletedByName; 8 | 9 | public ReportDeletedBungeeDto(IReport report, String deletedByName) { 10 | super(report); 11 | this.deletedByName = deletedByName; 12 | } 13 | 14 | public String getDeletedByName() { 15 | return deletedByName; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/reporting/bungee/dto/ReportReopenedBungeeDto.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.reporting.bungee.dto; 2 | 3 | import net.shortninja.staffplusplus.reports.IReport; 4 | 5 | public class ReportReopenedBungeeDto extends ReportBungeeDto { 6 | 7 | private String reopenByName; 8 | 9 | public ReportReopenedBungeeDto(IReport report, String reopenByName) { 10 | super(report); 11 | this.reopenByName = reopenByName; 12 | } 13 | 14 | public String getReopenByName() { 15 | return reopenByName; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/reporting/bungee/events/ReportAcceptedBungeeEvent.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.reporting.bungee.events; 2 | 3 | import net.shortninja.staffplus.core.domain.staff.reporting.bungee.dto.ReportBungeeDto; 4 | import org.bukkit.event.Event; 5 | import org.bukkit.event.HandlerList; 6 | 7 | public class ReportAcceptedBungeeEvent extends Event { 8 | 9 | private static final HandlerList HANDLERS = new HandlerList(); 10 | private final ReportBungeeDto report; 11 | 12 | public ReportAcceptedBungeeEvent(ReportBungeeDto report) { 13 | this.report = report; 14 | } 15 | 16 | public ReportBungeeDto getReport() { 17 | return report; 18 | } 19 | 20 | @Override 21 | public HandlerList getHandlers() { 22 | return HANDLERS; 23 | } 24 | 25 | public static HandlerList getHandlerList() { 26 | return HANDLERS; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/reporting/bungee/events/ReportClosedBungeeEvent.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.reporting.bungee.events; 2 | 3 | import net.shortninja.staffplus.core.domain.staff.reporting.bungee.dto.ReportBungeeDto; 4 | import org.bukkit.event.Event; 5 | import org.bukkit.event.HandlerList; 6 | 7 | public class ReportClosedBungeeEvent extends Event { 8 | 9 | private static final HandlerList HANDLERS = new HandlerList(); 10 | private final ReportBungeeDto report; 11 | 12 | public ReportClosedBungeeEvent(ReportBungeeDto report) { 13 | this.report = report; 14 | } 15 | 16 | public ReportBungeeDto getReport() { 17 | return report; 18 | } 19 | 20 | @Override 21 | public HandlerList getHandlers() { 22 | return HANDLERS; 23 | } 24 | 25 | public static HandlerList getHandlerList() { 26 | return HANDLERS; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/reporting/bungee/events/ReportCreatedBungeeEvent.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.reporting.bungee.events; 2 | 3 | import net.shortninja.staffplus.core.domain.staff.reporting.bungee.dto.ReportBungeeDto; 4 | import org.bukkit.event.Event; 5 | import org.bukkit.event.HandlerList; 6 | 7 | public class ReportCreatedBungeeEvent extends Event { 8 | 9 | private static final HandlerList HANDLERS = new HandlerList(); 10 | private final ReportBungeeDto report; 11 | 12 | public ReportCreatedBungeeEvent(ReportBungeeDto report) { 13 | this.report = report; 14 | } 15 | 16 | public ReportBungeeDto getReport() { 17 | return report; 18 | } 19 | 20 | @Override 21 | public HandlerList getHandlers() { 22 | return HANDLERS; 23 | } 24 | 25 | public static HandlerList getHandlerList() { 26 | return HANDLERS; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/reporting/bungee/events/ReportDeletedBungeeEvent.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.reporting.bungee.events; 2 | 3 | import net.shortninja.staffplus.core.domain.staff.reporting.bungee.dto.ReportDeletedBungeeDto; 4 | import org.bukkit.event.Event; 5 | import org.bukkit.event.HandlerList; 6 | 7 | public class ReportDeletedBungeeEvent extends Event { 8 | 9 | private static final HandlerList HANDLERS = new HandlerList(); 10 | private final ReportDeletedBungeeDto reportDeleted; 11 | 12 | public ReportDeletedBungeeEvent(ReportDeletedBungeeDto reportDeleted) { 13 | this.reportDeleted = reportDeleted; 14 | } 15 | 16 | public ReportDeletedBungeeDto getReportDeleted() { 17 | return reportDeleted; 18 | } 19 | 20 | @Override 21 | public HandlerList getHandlers() { 22 | return HANDLERS; 23 | } 24 | 25 | public static HandlerList getHandlerList() { 26 | return HANDLERS; 27 | } 28 | 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/reporting/config/CulpritFilterPredicate.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.reporting.config; 2 | 3 | import java.util.Map; 4 | import java.util.function.Predicate; 5 | 6 | public class CulpritFilterPredicate implements Predicate> { 7 | private static final String CULPRIT = "culprit"; 8 | private final boolean hasCulprit; 9 | 10 | public CulpritFilterPredicate(boolean hasCulprit) { 11 | this.hasCulprit = hasCulprit; 12 | } 13 | 14 | @Override 15 | public boolean test(Map filters) { 16 | if(!filters.containsKey(CULPRIT)) { 17 | return true; 18 | } 19 | return filters.get(CULPRIT).equalsIgnoreCase(String.valueOf(hasCulprit)); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/reporting/config/ReportStatusesConfigTransformer.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.reporting.config; 2 | 3 | import be.garagepoort.mcioc.configuration.IConfigTransformer; 4 | import net.shortninja.staffplusplus.reports.ReportStatus; 5 | 6 | import java.util.List; 7 | import java.util.stream.Collectors; 8 | 9 | import static java.util.Arrays.stream; 10 | 11 | public class ReportStatusesConfigTransformer implements IConfigTransformer, String> { 12 | @Override 13 | public List mapConfig(String value) { 14 | return stream(value.split(";")) 15 | .filter(s -> !s.isEmpty()) 16 | .map(ReportStatus::valueOf) 17 | .collect(Collectors.toList()); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/reporting/gui/ReportEvidenceDetailGuiProvider.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.reporting.gui; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcioc.tubinggui.GuiActionBuilder; 6 | import net.shortninja.staffplusplus.investigate.evidence.EvidenceGuiClick; 7 | import org.bukkit.entity.Player; 8 | 9 | @IocBean 10 | @IocMultiProvider(EvidenceGuiClick.class) 11 | public class ReportEvidenceDetailGuiProvider implements EvidenceGuiClick { 12 | 13 | @Override 14 | public String getType() { 15 | return "REPORT"; 16 | } 17 | 18 | @Override 19 | public String getAction(Player player, int id, String backAction) { 20 | return GuiActionBuilder.builder() 21 | .action("manage-reports/view/detail") 22 | .param("reportId", String.valueOf(id)) 23 | .build(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/reporting/queue/dto/ReportQueueMessage.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.reporting.queue.dto; 2 | 3 | import java.util.UUID; 4 | 5 | public class ReportQueueMessage { 6 | 7 | private final UUID playerUuid; 8 | private final String playerName; 9 | private final int reportId; 10 | 11 | public ReportQueueMessage(UUID playerUuid, String playerName, int reportId) { 12 | this.playerUuid = playerUuid; 13 | this.playerName = playerName; 14 | this.reportId = reportId; 15 | } 16 | 17 | public UUID getPlayerUuid() { 18 | return playerUuid; 19 | } 20 | 21 | public String getPlayerName() { 22 | return playerName; 23 | } 24 | 25 | public int getReportId() { 26 | return reportId; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/revive/InventoryVault.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.revive; 2 | 3 | import org.bukkit.inventory.ItemStack; 4 | 5 | import java.util.UUID; 6 | 7 | public class InventoryVault { 8 | private UUID uuid; 9 | private ItemStack[] items; 10 | private ItemStack[] armor; 11 | private ItemStack[] offHand; 12 | 13 | public InventoryVault(UUID uuid, ItemStack[] items, ItemStack[] armor, ItemStack[] offHand) { 14 | this.items = items; 15 | this.armor = armor; 16 | this.offHand = offHand; 17 | this.uuid = uuid; 18 | } 19 | 20 | public UUID getUuid() { 21 | return uuid; 22 | } 23 | 24 | public ItemStack[] getInventory(){ 25 | return items; 26 | } 27 | 28 | public ItemStack[] getArmor() { 29 | return armor; 30 | } 31 | 32 | public ItemStack[] getOffHand() { 33 | return offHand; 34 | } 35 | 36 | } -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/staffchat/bungee/StaffChatBungeeMessage.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.staffchat.bungee; 2 | 3 | import net.shortninja.staffplus.core.common.bungee.BungeeMessage; 4 | 5 | public class StaffChatBungeeMessage extends BungeeMessage { 6 | 7 | private String channel; 8 | private String message; 9 | private String playerName; 10 | 11 | public StaffChatBungeeMessage(String serverName, String channel, String message, String playerName) { 12 | super(serverName); 13 | this.channel = channel; 14 | this.message = message; 15 | this.playerName = playerName; 16 | } 17 | 18 | public String getChannel() { 19 | return channel; 20 | } 21 | 22 | public String getMessage() { 23 | return message; 24 | } 25 | 26 | public String getPlayerName() { 27 | return playerName; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/staffchat/bungee/StaffChatReceivedBungeeEvent.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.staffchat.bungee; 2 | 3 | import org.bukkit.event.Event; 4 | import org.bukkit.event.HandlerList; 5 | 6 | public class StaffChatReceivedBungeeEvent extends Event { 7 | private static final HandlerList HANDLERS = new HandlerList(); 8 | private final StaffChatBungeeMessage staffChatMessage; 9 | 10 | public StaffChatReceivedBungeeEvent(StaffChatBungeeMessage staffChatMessage) { 11 | this.staffChatMessage = staffChatMessage; 12 | } 13 | 14 | public StaffChatBungeeMessage getStaffChatMessage() { 15 | return staffChatMessage; 16 | } 17 | 18 | @Override 19 | public HandlerList getHandlers() { 20 | return HANDLERS; 21 | } 22 | 23 | public static HandlerList getHandlerList() { 24 | return HANDLERS; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/teleport/config/TeleportConfiguration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.teleport.config; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.configuration.ConfigProperty; 5 | import be.garagepoort.mcioc.configuration.ConfigTransformer; 6 | import org.bukkit.Location; 7 | 8 | import java.util.Map; 9 | 10 | @IocBean 11 | public class TeleportConfiguration { 12 | 13 | @ConfigProperty("locations") 14 | @ConfigTransformer(LocationsConfigTransformer.class) 15 | public Map locations; 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/tracing/TraceType.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.tracing; 2 | 3 | public enum TraceType { 4 | PICKUP_ITEM, 5 | DROP_ITEM, 6 | BLOCK_BREAK, 7 | BLOCK_PLACE, 8 | COMMANDS, 9 | CHAT, 10 | WORLD_CHANGE, INVENTORY, DAMAGE; 11 | } 12 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/tracing/config/TraceOutputChannelConfigTransformer.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.tracing.config; 2 | 3 | import be.garagepoort.mcioc.configuration.IConfigTransformer; 4 | import net.shortninja.staffplusplus.trace.TraceOutputChannel; 5 | 6 | import java.util.List; 7 | import java.util.stream.Collectors; 8 | 9 | public class TraceOutputChannelConfigTransformer implements IConfigTransformer, List> { 10 | @Override 11 | public List mapConfig(List strings) { 12 | return strings.stream() 13 | .map(TraceOutputChannel::valueOf) 14 | .collect(Collectors.toList()); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/vanish/NoneVanishStrategy.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.vanish; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import net.shortninja.staffplusplus.session.SppPlayer; 6 | import net.shortninja.staffplusplus.vanish.VanishType; 7 | 8 | @IocBean 9 | @IocMultiProvider(VanishStrategy.class) 10 | public class NoneVanishStrategy implements VanishStrategy { 11 | 12 | 13 | @Override 14 | public void vanish(SppPlayer player) { 15 | } 16 | 17 | @Override 18 | public void updateVanish(SppPlayer player) { 19 | } 20 | 21 | @Override 22 | public void unvanish(SppPlayer player) { 23 | } 24 | 25 | @Override 26 | public VanishType getVanishType() { 27 | return VanishType.NONE; 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/vanish/VanishStrategy.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.vanish; 2 | 3 | import net.shortninja.staffplusplus.session.SppPlayer; 4 | import net.shortninja.staffplusplus.vanish.VanishType; 5 | 6 | public interface VanishStrategy { 7 | 8 | void vanish(SppPlayer player); 9 | 10 | void unvanish(SppPlayer player); 11 | 12 | /** 13 | * Triggered when a new player joins. 14 | * Make sure all currently vanished players are not visible for the given recently join player 15 | * @param player 16 | */ 17 | void updateVanish(SppPlayer player); 18 | 19 | VanishType getVanishType(); 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/vanish/listeners/VanishQuitListener.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.vanish.listeners; 2 | 3 | import be.garagepoort.mcioc.tubingbukkit.annotations.IocBukkitListener; 4 | import net.shortninja.staffplus.core.domain.staff.vanish.VanishService; 5 | import org.bukkit.event.EventHandler; 6 | import org.bukkit.event.EventPriority; 7 | import org.bukkit.event.Listener; 8 | import org.bukkit.event.player.PlayerQuitEvent; 9 | 10 | @IocBukkitListener(conditionalOnProperty = "vanish-module.enabled=true") 11 | public class VanishQuitListener implements Listener { 12 | 13 | private final VanishService vanishService; 14 | 15 | public VanishQuitListener(VanishService vanishService) { 16 | this.vanishService = vanishService; 17 | } 18 | 19 | @EventHandler(priority = EventPriority.HIGHEST) 20 | public void removeFromCache(PlayerQuitEvent event) { 21 | vanishService.clearCache(event.getPlayer()); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/warn/warnings/config/ManageWarningsConfiguration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.warn.warnings.config; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.configuration.ConfigProperty; 5 | 6 | import java.util.List; 7 | 8 | @IocBean 9 | public class ManageWarningsConfiguration { 10 | 11 | @ConfigProperty("commands:warnings.manage.gui") 12 | public List commandManageWarningsGui; 13 | @ConfigProperty("commands:warnings.manage.appealed-gui") 14 | public List commandManageAppealedWarningsGui; 15 | @ConfigProperty("permissions:warnings.manage.view") 16 | public String permissionView; 17 | @ConfigProperty("permissions:warnings.manage.delete") 18 | public String permissionDelete; 19 | @ConfigProperty("permissions:warnings.manage.expire") 20 | public String permissionExpire; 21 | 22 | } 23 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/warn/warnings/gui/WarnMessageStringUtil.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.warn.warnings.gui; 2 | 3 | import net.shortninja.staffplusplus.warnings.IWarning; 4 | 5 | public class WarnMessageStringUtil { 6 | 7 | public static String replaceWarningPlaceholders(String message, IWarning warning) { 8 | String result = message; 9 | if (warning.getTargetName() != null) result = result.replace("%target%", warning.getTargetName()); 10 | if (warning.getIssuerName() != null) result = result.replace("%issuer%", warning.getIssuerName()); 11 | if (warning.getReason() != null) result = result.replace("%reason%", warning.getReason()); 12 | if (warning.getSeverity() != null) result = result.replace("%severity%", warning.getSeverity()); 13 | if (warning.getServerName() != null) result = result.replace("%server%", warning.getServerName()); 14 | return result; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/staff/warn/warnings/gui/WarningEvidenceDetailGuiProvider.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.staff.warn.warnings.gui; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.IocMultiProvider; 5 | import be.garagepoort.mcioc.tubinggui.GuiActionBuilder; 6 | import net.shortninja.staffplusplus.investigate.evidence.EvidenceGuiClick; 7 | import org.bukkit.entity.Player; 8 | 9 | @IocBean 10 | @IocMultiProvider(EvidenceGuiClick.class) 11 | public class WarningEvidenceDetailGuiProvider implements EvidenceGuiClick { 12 | 13 | @Override 14 | public String getType() { 15 | return "WARNING"; 16 | } 17 | 18 | @Override 19 | public String getAction(Player player, int id, String backAction) { 20 | return GuiActionBuilder.builder() 21 | .action("manage-warnings/view/detail") 22 | .param("warningId", String.valueOf(id)) 23 | .build(); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/synchronization/ServerSyncConfig.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.synchronization; 2 | 3 | import java.util.List; 4 | 5 | public class ServerSyncConfig { 6 | 7 | private final List servers; 8 | private final boolean matchesAll; 9 | private final boolean disabled; 10 | 11 | public ServerSyncConfig(List servers) { 12 | this.servers = servers; 13 | this.disabled = servers.size() <= 1; 14 | this.matchesAll = servers.contains("[ALL]"); 15 | } 16 | 17 | public boolean isEnabled() { 18 | return !disabled; 19 | } 20 | 21 | public List getServers() { 22 | return servers; 23 | } 24 | 25 | public boolean isMatchesAll() { 26 | return matchesAll; 27 | } 28 | 29 | public boolean matchesServer(String serverName) { 30 | return matchesAll || servers.contains(serverName); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/webui/WebUiRegistrationRepository.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.webui; 2 | 3 | import java.util.UUID; 4 | 5 | public interface WebUiRegistrationRepository { 6 | 7 | void addRegistrationRequest(String playerName, UUID playerUuid, String authenticationKey, String role); 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/net/shortninja/staffplus/core/domain/webui/config/WebUiConfiguration.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core.domain.webui.config; 2 | 3 | import be.garagepoort.mcioc.IocBean; 4 | import be.garagepoort.mcioc.configuration.ConfigProperty; 5 | 6 | @IocBean 7 | public class WebUiConfiguration { 8 | 9 | @ConfigProperty("webui-module.enabled") 10 | public boolean enabled; 11 | @ConfigProperty("webui-module.host") 12 | public String host; 13 | @ConfigProperty("webui-module.application-key") 14 | public String applicationKey; 15 | @ConfigProperty("webui-module.role") 16 | public String role; 17 | 18 | } 19 | -------------------------------------------------------------------------------- /src/main/resources/configuration/staffmode/custom-modules.yml: -------------------------------------------------------------------------------- 1 | ############################################################ 2 | # +------------------------------------------------------+ # 3 | # | Custom | # 4 | # +------------------------------------------------------+ # 5 | ############################################################ 6 | # Add custom actions to your staff mode items 7 | # When clicked, this will execute the custom action. 8 | # For more information: https://staffplusplus-minecraft.gitbook.io/staffplusplus/features/staff-mode/custom-staff-modules 9 | custom-modules: [] -------------------------------------------------------------------------------- /src/main/resources/data.yml: -------------------------------------------------------------------------------- 1 | # All saved data for Staff+. Only modify this file if you know what you're doing! -------------------------------------------------------------------------------- /src/main/resources/gui/appeals/appeal-reason-select.ftl: -------------------------------------------------------------------------------- 1 | <#import "/gui/commons/commons.ftl" as commons/> 2 | <#assign URLEncoder=statics['java.net.URLEncoder']> 3 | 4 | Select appeal reason 5 | 6 | <#list reasons as reason > 7 | 12 | ${reason} 13 | 14 | 15 | 16 | <@commons.backButton/> 17 | -------------------------------------------------------------------------------- /src/main/resources/gui/bans/appealed-bans-overview.ftl: -------------------------------------------------------------------------------- 1 | <#import "ban-commons.ftl" as banCommons/> 2 | <#import "/gui/commons/commons.ftl" as commons/> 3 | <#assign URLEncoder=statics['java.net.URLEncoder']> 4 | 5 | Appealed bans 6 | 7 | <#list bans as ban> 8 | <@banCommons.banitem itemId="ban-info-${ban?index}" 9 | slot="${ban?index}" 10 | ban=ban 11 | onLeftClick="manage-bans/view/detail?banId=${ban.id}"/> 12 | 13 | 14 | <@commons.pageFooter currentAction="${currentAction}" page=page /> 15 | -------------------------------------------------------------------------------- /src/main/resources/gui/bans/bans-history-overview.ftl: -------------------------------------------------------------------------------- 1 | <#import "ban-commons.ftl" as banCommons/> 2 | <#import "/gui/commons/commons.ftl" as commons/> 3 | <#assign URLEncoder=statics['java.net.URLEncoder']> 4 | 5 | Ban history for: &C${target.username} 6 | 7 | <#list bans as ban> 8 | <@banCommons.banitem itemId="ban-info-${ban?index}" 9 | slot="${ban?index}" 10 | ban=ban 11 | onLeftClick="manage-bans/view/detail?banId=${ban.id}"/> 12 | 13 | 14 | <@commons.pageFooter currentAction="${currentAction}" page=page /> 15 | -------------------------------------------------------------------------------- /src/main/resources/gui/bans/bans-overview.ftl: -------------------------------------------------------------------------------- 1 | <#import "ban-commons.ftl" as banCommons/> 2 | <#import "/gui/commons/commons.ftl" as commons/> 3 | <#assign URLEncoder=statics['java.net.URLEncoder']> 4 | 5 | Bans 6 | 7 | <#list bans as ban> 8 | <@banCommons.banitem itemId="ban-info-${ban?index}" 9 | slot="${ban?index}" 10 | ban=ban 11 | onLeftClick="manage-bans/view/detail?banId=${ban.id}"/> 12 | 13 | 14 | <@commons.pageFooter currentAction="${currentAction}" page=page /> 15 | -------------------------------------------------------------------------------- /src/main/resources/gui/commons/translate.ftl: -------------------------------------------------------------------------------- 1 | <#macro translate key>${$config.get("%lang%:" + key)} -------------------------------------------------------------------------------- /src/main/resources/gui/investigations/investigations-overview.ftl: -------------------------------------------------------------------------------- 1 | <#import "investigation-commons.ftl" as investigationCommons/> 2 | <#import "/gui/commons/commons.ftl" as commons/> 3 | <#assign URLEncoder=statics['java.net.URLEncoder']> 4 | 5 | Investigations 6 | 7 | <#list investigations as investigation> 8 | <@investigationCommons.investigationItem itemId="investigation-info-${investigation?index}" 9 | slot="${investigation?index}" 10 | investigation=investigation 11 | onLeftClick="manage-investigations/view/detail?investigationId=${investigation.id}"/> 12 | 13 | 14 | <@commons.pageFooter currentAction="${currentAction}" page=page /> 15 | -------------------------------------------------------------------------------- /src/main/resources/gui/investigations/investigations-resume-select.ftl: -------------------------------------------------------------------------------- 1 | <#import "investigation-commons.ftl" as investigationCommons/> 2 | <#import "/gui/commons/commons.ftl" as commons/> 3 | <#assign URLEncoder=statics['java.net.URLEncoder']> 4 | 5 | Select investigation to resume 6 | 7 | <#list investigations as investigation> 8 | <@investigationCommons.investigationItem itemId="investigation-info-${investigation?index}" 9 | slot="${investigation?index}" 10 | investigation=investigation 11 | onLeftClick="manage-investigations/resume?investigationId=${investigation.id}"/> 12 | 13 | 14 | <@commons.pageFooter currentAction="${currentAction}" page=page /> 15 | -------------------------------------------------------------------------------- /src/main/resources/gui/kicks/kick-reason-selection.ftl: -------------------------------------------------------------------------------- 1 | <#import "/gui/commons/commons.ftl" as commons/> 2 | <#assign URLEncoder=statics['java.net.URLEncoder']> 3 | 4 | Select reason 5 | 6 | <#list reasons as reason > 7 | 12 | ${reason.reason} 13 | 14 | 15 | ${reason.lore} 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /src/main/resources/gui/mutes/appealed-mutes-overview.ftl: -------------------------------------------------------------------------------- 1 | <#import "mute-commons.ftl" as muteCommons/> 2 | <#import "/gui/commons/commons.ftl" as commons/> 3 | <#assign URLEncoder=statics['java.net.URLEncoder']> 4 | 5 | Appealed mutes 6 | 7 | <#list mutes as mute> 8 | <@muteCommons.muteitem itemId="mute-info-${mute?index}" 9 | slot="${mute?index}" 10 | mute=mute 11 | onLeftClick="manage-mutes/view/detail?muteId=${mute.id}"/> 12 | 13 | 14 | <@commons.pageFooter currentAction="${currentAction}" page=page /> 15 | -------------------------------------------------------------------------------- /src/main/resources/gui/mutes/mute-overview.ftl: -------------------------------------------------------------------------------- 1 | <#import "mute-commons.ftl" as muteCommons/> 2 | <#import "/gui/commons/commons.ftl" as commons/> 3 | <#assign URLEncoder=statics['java.net.URLEncoder']> 4 | 5 | ${title} 6 | 7 | <#list mutes as mute> 8 | 14 | Mute 15 | 16 | <@muteCommons.mutelorelines mute=mute /> 17 | 18 | 19 | 20 | 21 | <@commons.pageFooter currentAction="${currentAction}" page=page /> 22 | -------------------------------------------------------------------------------- /src/main/resources/gui/player/miners-overview.ftl: -------------------------------------------------------------------------------- 1 | <#import "player-commons.ftl" as playercommons/> 2 | <#import "/gui/commons/commons.ftl" as commons/> 3 | <#assign URLEncoder=statics['java.net.URLEncoder']> 4 | 5 | ${$config.get("staffmode-modules:modules.gui-module.miner-title")} 6 | 7 | <#list players as p> 8 | <@playercommons.playerhead itemId="player-info-${p?index}" slot="${p?index}" sppPlayer=p 9 | onLeftClick="miners/teleport?to=${p.id}" 10 | actions=['&7Left click to &6teleport to player'] /> 11 | 12 | 13 | <@commons.pageFooter currentAction="${currentAction}" page=page /> 14 | -------------------------------------------------------------------------------- /src/main/resources/gui/player/player-overview.ftl: -------------------------------------------------------------------------------- 1 | <#import "player-commons.ftl" as playercommons/> 2 | <#import "/gui/commons/commons.ftl" as commons/> 3 | <#assign URLEncoder=statics['java.net.URLEncoder']> 4 | 5 | ${title} 6 | 7 | <#list players as p> 8 | <@playercommons.playerhead itemId="player-info-${p?index}" slot="${p?index}" sppPlayer=p 9 | onLeftClick="players/view/detail?targetPlayerName=${p.username}" 10 | actions=['&7Left click to &6view players details'] /> 11 | 12 | 13 | <@commons.pageFooter currentAction="${currentAction}" page=page /> 14 | -------------------------------------------------------------------------------- /src/main/resources/gui/protect/area-overview.ftl: -------------------------------------------------------------------------------- 1 | <#import "/gui/protect/protected-areas-commons.ftl" as areacommons/> 2 | <#import "/gui/commons/commons.ftl" as commons/> 3 | <#assign URLEncoder=statics['java.net.URLEncoder']> 4 | 5 | ${title} 6 | 7 | <#list areas as area> 8 | <@areacommons.areaitem 9 | itemId="protected-area-info-${area?index}" 10 | slot="${area?index}" 11 | area=area 12 | onLeftClick="protected-areas/view/detail?areaId=${area.id}" /> 13 | 14 | 15 | <@commons.pageFooter currentAction="${currentAction}" page=page /> 16 | -------------------------------------------------------------------------------- /src/main/resources/gui/protect/player-overview.ftl: -------------------------------------------------------------------------------- 1 | <#import "/gui/player/player-commons.ftl" as playercommons/> 2 | <#import "/gui/commons/commons.ftl" as commons/> 3 | <#assign URLEncoder=statics['java.net.URLEncoder']> 4 | 5 | Protected players 6 | 7 | <#list players as p> 8 | <@playercommons.playerhead itemId="player-info-${p?index}" slot="${p?index}" sppPlayer=p onLeftClick="players/view/detail?targetPlayerName=${p.username}" /> 9 | 10 | 11 | <@commons.pageFooter currentAction="${currentAction}" page=page /> 12 | -------------------------------------------------------------------------------- /src/main/resources/gui/reports/assigned-reports.ftl: -------------------------------------------------------------------------------- 1 | <#import "report-commons.ftl" as reportcommon/> 2 | <#import "/gui/commons/commons.ftl" as commons/> 3 | <#assign URLEncoder=statics['java.net.URLEncoder']> 4 | <#include "/gui/commons/translate.ftl"/> 5 | 6 | <@translate key="gui.reports.assigned-reports.title"/> 7 | 8 | <#list reports as report> 9 | <@reportcommon.reportitem slot="${report?index}" 10 | itemId="report-info-${report?index}" 11 | report=report 12 | onLeftClick="manage-reports/view/detail?reportId=${report.id}"/> 13 | 14 | 15 | <@commons.pageFooter currentAction="${currentAction}" page=page /> 16 | -------------------------------------------------------------------------------- /src/main/resources/gui/reports/closed-reports.ftl: -------------------------------------------------------------------------------- 1 | <#import "report-commons.ftl" as reportcommon/> 2 | <#import "/gui/commons/commons.ftl" as commons/> 3 | <#assign URLEncoder=statics['java.net.URLEncoder']> 4 | <#include "/gui/commons/translate.ftl"/> 5 | 6 | <@translate key="gui.reports.closed-reports.title"/> 7 | 8 | <#list reports as report> 9 | <@reportcommon.reportitem 10 | itemId="report-info-${report?index}" 11 | slot="${report?index}" report=report onLeftClick="manage-reports/view/detail?reportId=${report.id}" /> 12 | 13 | 14 | <@commons.pageFooter currentAction="${currentAction}" page=page /> 15 | -------------------------------------------------------------------------------- /src/main/resources/gui/reports/find-reports.ftl: -------------------------------------------------------------------------------- 1 | <#import "report-commons.ftl" as reportcommon/> 2 | <#import "/gui/commons/commons.ftl" as commons/> 3 | <#assign URLEncoder=statics['java.net.URLEncoder']> 4 | <#include "/gui/commons/translate.ftl"/> 5 | 6 | <@translate key="gui.reports.find-reports.title"/> 7 | 8 | <#list reports as report> 9 | <@reportcommon.reportitem 10 | itemId="report-info-${report?index}" 11 | slot="${report?index}" report=report onLeftClick="manage-reports/view/detail?reportId=${report.id}" /> 12 | 13 | 14 | <@commons.pageFooter currentAction="${currentAction}" page=page /> 15 | -------------------------------------------------------------------------------- /src/main/resources/gui/reports/my-reports.ftl: -------------------------------------------------------------------------------- 1 | <#import "report-commons.ftl" as reportcommon/> 2 | <#import "/gui/commons/commons.ftl" as commons/> 3 | <#include "/gui/commons/translate.ftl"/> 4 | <#assign URLEncoder=statics['java.net.URLEncoder']> 5 | 6 | <@translate key="gui.reports.my-reports.title"/> 7 | 8 | <#list reports as report> 9 | <@reportcommon.reportitem itemId="report-info-${report?index}" slot="${report?index}" report=report /> 10 | 11 | 12 | <@commons.pageFooter currentAction="${currentAction}" page=page /> 13 | -------------------------------------------------------------------------------- /src/main/resources/gui/staff-locations/select-icon-create.ftl: -------------------------------------------------------------------------------- 1 | <#import "/gui/staff-locations/staff-locations-commons.ftl" as stafflocationcommons/> 2 | <#import "/gui/commons/commons.ftl" as commons/> 3 | <#assign URLEncoder=statics['java.net.URLEncoder']> 4 | 5 | <@stafflocationcommons.stafflocationsSelectIcon 6 | action="staff-locations/create-flow/save?locationName=${URLEncoder.encode(locationName)}" 7 | icons=icons/> -------------------------------------------------------------------------------- /src/main/resources/gui/staff-locations/select-icon-edit.ftl: -------------------------------------------------------------------------------- 1 | <#import "/gui/staff-locations/staff-locations-commons.ftl" as stafflocationcommons/> 2 | <#import "/gui/commons/commons.ftl" as commons/> 3 | <#assign URLEncoder=statics['java.net.URLEncoder']> 4 | 5 | <@stafflocationcommons.stafflocationsSelectIcon 6 | action="staff-locations/edit/icon?locationId=${locationId}" 7 | icons=icons/> -------------------------------------------------------------------------------- /src/main/resources/gui/warnings/appealed-warnings-overview.ftl: -------------------------------------------------------------------------------- 1 | <#import "warning-commons.ftl" as warningCommons/> 2 | <#import "/gui/commons/commons.ftl" as commons/> 3 | <#assign URLEncoder=statics['java.net.URLEncoder']> 4 | 5 | Appealed Warnings 6 | 7 | <#list warnings as warning> 8 | 14 | Warning 15 | 16 | <@warningCommons.warninglorelines warning=warning /> 17 | 18 | 19 | 20 | 21 | <@commons.pageFooter currentAction="${currentAction}" page=page /> 22 | -------------------------------------------------------------------------------- /src/main/resources/gui/warnings/warnings-overview.ftl: -------------------------------------------------------------------------------- 1 | <#import "warning-commons.ftl" as warningCommons/> 2 | <#import "/gui/commons/commons.ftl" as commons/> 3 | <#assign URLEncoder=statics['java.net.URLEncoder']> 4 | 5 | Warnings 6 | 7 | <#list warnings as warning> 8 | 14 | Warning 15 | 16 | <@warningCommons.warninglorelines warning=warning /> 17 | 18 | 19 | 20 | 21 | <@commons.pageFooter currentAction="${currentAction}" page=page /> 22 | -------------------------------------------------------------------------------- /src/main/resources/license.txt: -------------------------------------------------------------------------------- 1 | Copyright | 2016 Gavin Lutz 2 | All rights reserved. 3 | 4 | Email: Shortninja66@gmail.com 5 | Copyright | 2016 Gavin Lutz 6 | All rights reserved. 7 | 8 | 9 | Skype: nodus_v2 -------------------------------------------------------------------------------- /src/main/resources/plugin.yml: -------------------------------------------------------------------------------- 1 | main: net.shortninja.staffplus.core.StaffPlusPlus 2 | name: StaffPlusPlus 3 | version: ${project.version} 4 | description: The ultimate moderation plugin! 5 | author: Shortninja,Qball,Garagepoort 6 | softdepend: [PacketListenerApi, PlaceholderAPI, LuckPerms, Vault, GroupManager, AuthMe, DiscordSRV] 7 | api-version: 1.13 -------------------------------------------------------------------------------- /src/main/resources/project.properties: -------------------------------------------------------------------------------- 1 | plugin.version=${project.version} 2 | java.version=${maven.compiler.source} 3 | mc.version=1.21.3 -------------------------------------------------------------------------------- /src/test/java/net/shortninja/staffplus/core/TubingBukkitUtilStub.java: -------------------------------------------------------------------------------- 1 | package net.shortninja.staffplus.core; 2 | 3 | import be.garagepoort.mcioc.tubingbukkit.common.ITubingBukkitUtil; 4 | 5 | public class TubingBukkitUtilStub implements ITubingBukkitUtil { 6 | @Override 7 | public void runAsync(Runnable runnable) { 8 | runnable.run(); 9 | } 10 | 11 | @Override 12 | public void runTaskLater(Runnable runnable, int i) { 13 | runnable.run(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/test/resources/docker/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM openjdk:17 2 | ARG SPIGOT_VERSION=1.18 3 | COPY spigot-${SPIGOT_VERSION}.jar . 4 | RUN chmod 777 spigot-${SPIGOT_VERSION}.jar 5 | RUN mkdir plugins 6 | COPY staffplusplus-core-1.20.0-SNAPSHOT.jar /plugins 7 | RUN echo "eula=true" > eula.txt 8 | #COPY ../../../../target/staffplusplus-core-1.18.0-SNAPSHOT.jar /server/plugins 9 | RUN java -jar spigot-1.18.jar nogui -------------------------------------------------------------------------------- /src/test/resources/docker/eula.txt: -------------------------------------------------------------------------------- 1 | eula=true -------------------------------------------------------------------------------- /src/test/resources/docker/spigot-1.21.3.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/garagepoort/StaffPlusPlus/170c3ce30b6a4203384297ab6dc1a8fe7103b8bd/src/test/resources/docker/spigot-1.21.3.jar --------------------------------------------------------------------------------