├── .github
└── workflows
│ └── maven.yml
├── .gitignore
├── .idea
├── .gitignore
├── compiler.xml
├── encodings.xml
├── jarRepositories.xml
├── misc.xml
├── uiDesigner.xml
└── vcs.xml
├── API
├── pom.xml
└── src
│ └── main
│ └── java
│ └── dev
│ └── lrxh
│ └── api
│ ├── NeptuneAPI.java
│ ├── NeptuneAPIImpl.java
│ ├── NeptuneAPIProvider.java
│ ├── arena
│ ├── IArena.java
│ └── IArenaService.java
│ ├── data
│ ├── IDivision.java
│ ├── IGameData.java
│ ├── IGlobalStats.java
│ └── IKitData.java
│ ├── events
│ ├── MatchEndEvent.java
│ ├── MatchNewRoundStartEvent.java
│ ├── MatchParticipantDeathEvent.java
│ ├── MatchParticipantRespawnEvent.java
│ ├── MatchReadyEvent.java
│ ├── MatchSpectatorAddEvent.java
│ ├── MatchSpectatorRemoveEvent.java
│ ├── MatchStartEvent.java
│ ├── PlayerLeaveEvent.java
│ ├── QueueJoinEvent.java
│ ├── SoloMatchBedDestroyEvent.java
│ └── TeamMatchBedDestroyEvent.java
│ ├── features
│ ├── ICosmeticService.java
│ ├── IDivisionService.java
│ ├── IItemBrowserService.java
│ └── IKillMessagePackage.java
│ ├── kit
│ ├── IKit.java
│ ├── IKitRule.java
│ └── IKitService.java
│ ├── match
│ ├── IFffaFightMatch.java
│ ├── IMatch.java
│ ├── IMatchService.java
│ ├── IMatchState.java
│ ├── ISoloFightMatch.java
│ ├── ITeamFightMatch.java
│ ├── participant
│ │ ├── IParticipant.java
│ │ └── IParticipantColor.java
│ └── team
│ │ └── IMatchTeam.java
│ ├── profile
│ ├── IProfile.java
│ ├── IProfileService.java
│ └── IProfileState.java
│ ├── queue
│ ├── IQueueEntry.java
│ └── IQueueService.java
│ ├── scoreboard
│ └── IScoreboardService.java
│ └── utils
│ └── ITime.java
├── LICENSE
├── Plugin
├── pom.xml
└── src
│ └── main
│ ├── java
│ ├── com
│ │ └── jonahseguin
│ │ │ └── drink
│ │ │ ├── CommandService.java
│ │ │ ├── Drink.java
│ │ │ ├── annotation
│ │ │ ├── Classifier.java
│ │ │ ├── Command.java
│ │ │ ├── Duration.java
│ │ │ ├── Flag.java
│ │ │ ├── LastArg.java
│ │ │ ├── Modifier.java
│ │ │ ├── OptArg.java
│ │ │ ├── Require.java
│ │ │ ├── Sender.java
│ │ │ └── Text.java
│ │ │ ├── argument
│ │ │ ├── ArgumentParser.java
│ │ │ ├── CommandArg.java
│ │ │ └── CommandArgs.java
│ │ │ ├── command
│ │ │ ├── CommandExecution.java
│ │ │ ├── CommandExtractor.java
│ │ │ ├── CommandFlag.java
│ │ │ ├── DrinkAuthorizer.java
│ │ │ ├── DrinkCommand.java
│ │ │ ├── DrinkCommandContainer.java
│ │ │ ├── DrinkCommandExecutor.java
│ │ │ ├── DrinkCommandService.java
│ │ │ ├── DrinkHelpService.java
│ │ │ ├── DrinkSpigotRegistry.java
│ │ │ ├── DrinkTabCompleter.java
│ │ │ ├── FlagExtractor.java
│ │ │ └── HelpFormatter.java
│ │ │ ├── exception
│ │ │ ├── CommandArgumentException.java
│ │ │ ├── CommandExitMessage.java
│ │ │ ├── CommandRegistrationException.java
│ │ │ ├── CommandStructureException.java
│ │ │ ├── DrinkException.java
│ │ │ └── MissingProviderException.java
│ │ │ ├── modifier
│ │ │ ├── DrinkModifier.java
│ │ │ ├── ModifierContainer.java
│ │ │ └── ModifierService.java
│ │ │ ├── parametric
│ │ │ ├── BindingContainer.java
│ │ │ ├── CommandParameter.java
│ │ │ ├── CommandParameters.java
│ │ │ ├── DrinkBinding.java
│ │ │ ├── DrinkProvider.java
│ │ │ ├── ProviderAssigner.java
│ │ │ └── binder
│ │ │ │ └── DrinkBinder.java
│ │ │ └── provider
│ │ │ ├── BooleanProvider.java
│ │ │ ├── CommandArgsProvider.java
│ │ │ ├── DateProvider.java
│ │ │ ├── DoubleProvider.java
│ │ │ ├── DurationProvider.java
│ │ │ ├── EnumProvider.java
│ │ │ ├── InstanceProvider.java
│ │ │ ├── IntegerProvider.java
│ │ │ ├── LongProvider.java
│ │ │ ├── StringProvider.java
│ │ │ ├── TextProvider.java
│ │ │ └── spigot
│ │ │ ├── CommandSenderProvider.java
│ │ │ ├── ConsoleCommandSenderProvider.java
│ │ │ ├── PlayerProvider.java
│ │ │ ├── PlayerSenderProvider.java
│ │ │ └── UUIDProvider.java
│ ├── dev
│ │ └── lrxh
│ │ │ └── neptune
│ │ │ ├── API.java
│ │ │ ├── Neptune.java
│ │ │ ├── cache
│ │ │ └── Cache.java
│ │ │ ├── commands
│ │ │ ├── FollowCommand.java
│ │ │ └── LeaveCommand.java
│ │ │ ├── configs
│ │ │ ├── ConfigService.java
│ │ │ └── impl
│ │ │ │ ├── CosmeticsLocale.java
│ │ │ │ ├── HotbarLocale.java
│ │ │ │ ├── MenusLocale.java
│ │ │ │ ├── MessagesLocale.java
│ │ │ │ ├── ScoreboardLocale.java
│ │ │ │ ├── SettingsLocale.java
│ │ │ │ └── handler
│ │ │ │ ├── DataType.java
│ │ │ │ └── IDataAccessor.java
│ │ │ ├── feature
│ │ │ ├── cosmetics
│ │ │ │ ├── CosmeticService.java
│ │ │ │ ├── command
│ │ │ │ │ └── CosmeticsCommand.java
│ │ │ │ ├── impl
│ │ │ │ │ ├── KillEffect.java
│ │ │ │ │ └── KillMessagePackage.java
│ │ │ │ └── menu
│ │ │ │ │ ├── CosmeticsManageMenu.java
│ │ │ │ │ ├── CosmeticsManagementButton.java
│ │ │ │ │ ├── killEffects
│ │ │ │ │ ├── KillEffectButton.java
│ │ │ │ │ └── KillEffectsMenu.java
│ │ │ │ │ └── killMessages
│ │ │ │ │ ├── KillMessageButton.java
│ │ │ │ │ └── KillMessagesMenu.java
│ │ │ ├── divisions
│ │ │ │ ├── DivisionService.java
│ │ │ │ ├── impl
│ │ │ │ │ └── Division.java
│ │ │ │ └── menu
│ │ │ │ │ └── DivisionsMenu.java
│ │ │ ├── hotbar
│ │ │ │ ├── HotbarService.java
│ │ │ │ ├── impl
│ │ │ │ │ ├── CustomItem.java
│ │ │ │ │ ├── Hotbar.java
│ │ │ │ │ ├── Item.java
│ │ │ │ │ └── ItemAction.java
│ │ │ │ └── listener
│ │ │ │ │ └── ItemListener.java
│ │ │ ├── itembrowser
│ │ │ │ ├── ItemBrowserListener.java
│ │ │ │ ├── ItemBrowserMenu.java
│ │ │ │ └── ItemBrowserService.java
│ │ │ ├── leaderboard
│ │ │ │ ├── LeaderboardService.java
│ │ │ │ ├── command
│ │ │ │ │ └── LeaderboardCommand.java
│ │ │ │ ├── impl
│ │ │ │ │ ├── LeaderboardEntry.java
│ │ │ │ │ ├── LeaderboardPlayerEntry.java
│ │ │ │ │ ├── LeaderboardType.java
│ │ │ │ │ └── PlayerEntry.java
│ │ │ │ ├── menu
│ │ │ │ │ ├── LeaderboardMenu.java
│ │ │ │ │ └── button
│ │ │ │ │ │ ├── LeaderboardButton.java
│ │ │ │ │ │ └── LeaderboardSwitchButton.java
│ │ │ │ └── task
│ │ │ │ │ └── LeaderboardTask.java
│ │ │ ├── party
│ │ │ │ ├── Party.java
│ │ │ │ ├── PartyService.java
│ │ │ │ ├── command
│ │ │ │ │ └── PartyCommand.java
│ │ │ │ ├── impl
│ │ │ │ │ ├── EventType.java
│ │ │ │ │ └── PartyRequest.java
│ │ │ │ └── menu
│ │ │ │ │ ├── PartyEventsKitMenu.java
│ │ │ │ │ ├── PartySettingsMenu.java
│ │ │ │ │ └── buttons
│ │ │ │ │ ├── events
│ │ │ │ │ ├── PartyDuelButton.java
│ │ │ │ │ ├── PartyDuelMenu.java
│ │ │ │ │ ├── PartyEventsMenu.java
│ │ │ │ │ ├── PartyFightButton.java
│ │ │ │ │ └── PartyTeamKitButton.java
│ │ │ │ │ └── settings
│ │ │ │ │ ├── PartyAdvertisementButton.java
│ │ │ │ │ ├── PartyLimitButton.java
│ │ │ │ │ └── PartyPrivacyButton.java
│ │ │ ├── queue
│ │ │ │ ├── QueueEntry.java
│ │ │ │ ├── QueueService.java
│ │ │ │ ├── command
│ │ │ │ │ ├── QueueCommand.java
│ │ │ │ │ ├── QueueMenuCommand.java
│ │ │ │ │ └── QuickQueueCommand.java
│ │ │ │ ├── menu
│ │ │ │ │ ├── QueueMenu.java
│ │ │ │ │ └── QueueSelectButton.java
│ │ │ │ └── tasks
│ │ │ │ │ ├── QueueCheckTask.java
│ │ │ │ │ └── QueueMessageTask.java
│ │ │ └── settings
│ │ │ │ ├── Setting.java
│ │ │ │ ├── command
│ │ │ │ ├── SettingProvider.java
│ │ │ │ └── SettingsCommand.java
│ │ │ │ └── menu
│ │ │ │ ├── SettingsButton.java
│ │ │ │ └── SettingsMenu.java
│ │ │ ├── game
│ │ │ ├── arena
│ │ │ │ ├── Arena.java
│ │ │ │ ├── ArenaService.java
│ │ │ │ ├── allocator
│ │ │ │ │ ├── Allocation.java
│ │ │ │ │ └── SpatialAllocator.java
│ │ │ │ ├── command
│ │ │ │ │ └── ArenaProvider.java
│ │ │ │ ├── impl
│ │ │ │ │ └── EdgeType.java
│ │ │ │ ├── menu
│ │ │ │ │ ├── ArenaManagementMenu.java
│ │ │ │ │ ├── ArenasManagementMenu.java
│ │ │ │ │ ├── WhitelistedBlocksMenu.java
│ │ │ │ │ └── button
│ │ │ │ │ │ ├── AddWhitelistBlockButton.java
│ │ │ │ │ │ ├── ArenaCreateButton.java
│ │ │ │ │ │ ├── ArenaDeleteButton.java
│ │ │ │ │ │ ├── ArenaEnableButton.java
│ │ │ │ │ │ ├── ArenaRenameButton.java
│ │ │ │ │ │ ├── ArenaSelectButton.java
│ │ │ │ │ │ ├── ArenaSetDeathYButton.java
│ │ │ │ │ │ ├── ArenaSetEdgeButton.java
│ │ │ │ │ │ ├── ArenaSetLimitButton.java
│ │ │ │ │ │ ├── ArenaSetSpawnButton.java
│ │ │ │ │ │ ├── ArenaSetupButton.java
│ │ │ │ │ │ └── WhitelistedBlockButton.java
│ │ │ │ └── procedure
│ │ │ │ │ ├── ArenaProcedure.java
│ │ │ │ │ ├── ArenaProcedureListener.java
│ │ │ │ │ └── ArenaProcedureType.java
│ │ │ ├── duel
│ │ │ │ ├── DuelRequest.java
│ │ │ │ ├── command
│ │ │ │ │ └── DuelCommand.java
│ │ │ │ └── menu
│ │ │ │ │ ├── ArenaSelectMenu.java
│ │ │ │ │ ├── KitSelectButton.java
│ │ │ │ │ ├── KitSelectMenu.java
│ │ │ │ │ ├── RoundSelectButton.java
│ │ │ │ │ └── RoundsSelectMenu.java
│ │ │ ├── kit
│ │ │ │ ├── Kit.java
│ │ │ │ ├── KitService.java
│ │ │ │ ├── command
│ │ │ │ │ ├── KitEditorCommand.java
│ │ │ │ │ ├── KitProvider.java
│ │ │ │ │ └── StatsCommand.java
│ │ │ │ ├── impl
│ │ │ │ │ └── KitRule.java
│ │ │ │ ├── menu
│ │ │ │ │ ├── KitArenaManagementMenu.java
│ │ │ │ │ ├── KitManagementMenu.java
│ │ │ │ │ ├── KitRulesMenu.java
│ │ │ │ │ ├── KitSelectKitEditorSlotMenu.java
│ │ │ │ │ ├── KitSelectSlotMenu.java
│ │ │ │ │ ├── KitsManagementMenu.java
│ │ │ │ │ ├── StatsMenu.java
│ │ │ │ │ ├── button
│ │ │ │ │ │ ├── KitArenaButton.java
│ │ │ │ │ │ ├── KitArenaManageButton.java
│ │ │ │ │ │ ├── KitCreateButton.java
│ │ │ │ │ │ ├── KitDeleteButton.java
│ │ │ │ │ │ ├── KitRenameButton.java
│ │ │ │ │ │ ├── KitRuleButton.java
│ │ │ │ │ │ ├── KitRulesButton.java
│ │ │ │ │ │ ├── KitSelectButton.java
│ │ │ │ │ │ ├── KitSelectKitEditorSlotButton.java
│ │ │ │ │ │ ├── KitSelectSlotButton.java
│ │ │ │ │ │ ├── KitSetDamageMultiplierButton.java
│ │ │ │ │ │ ├── KitSetIconButton.java
│ │ │ │ │ │ ├── KitSetInvButton.java
│ │ │ │ │ │ ├── KitSetKitEditorSlotButton.java
│ │ │ │ │ │ ├── KitSetSlotButton.java
│ │ │ │ │ │ └── StatButton.java
│ │ │ │ │ └── editor
│ │ │ │ │ │ ├── KitEditorMenu.java
│ │ │ │ │ │ └── button
│ │ │ │ │ │ └── KitEditorSelectButton.java
│ │ │ │ └── procedure
│ │ │ │ │ ├── KitProcedure.java
│ │ │ │ │ ├── KitProcedureListener.java
│ │ │ │ │ └── KitProcedureType.java
│ │ │ └── match
│ │ │ │ ├── Match.java
│ │ │ │ ├── MatchService.java
│ │ │ │ ├── commands
│ │ │ │ ├── MatchHistoryCommand.java
│ │ │ │ └── SpectateCommand.java
│ │ │ │ ├── impl
│ │ │ │ ├── MatchState.java
│ │ │ │ ├── ffa
│ │ │ │ │ └── FfaFightMatch.java
│ │ │ │ ├── participant
│ │ │ │ │ ├── DeathCause.java
│ │ │ │ │ ├── Participant.java
│ │ │ │ │ └── ParticipantColor.java
│ │ │ │ ├── solo
│ │ │ │ │ └── SoloFightMatch.java
│ │ │ │ └── team
│ │ │ │ │ ├── MatchTeam.java
│ │ │ │ │ └── TeamFightMatch.java
│ │ │ │ ├── listener
│ │ │ │ └── MatchListener.java
│ │ │ │ ├── menu
│ │ │ │ ├── MatchHistoryMenu.java
│ │ │ │ ├── MatchListMenu.java
│ │ │ │ ├── MatchSpectateTeleportMenu.java
│ │ │ │ └── button
│ │ │ │ │ ├── MatchSpectateButton.java
│ │ │ │ │ └── MatchSpectateTeleportButton.java
│ │ │ │ └── tasks
│ │ │ │ ├── ArenaBoundaryCheckTask.java
│ │ │ │ ├── MatchEndRunnable.java
│ │ │ │ ├── MatchRespawnRunnable.java
│ │ │ │ ├── MatchSecondRoundRunnable.java
│ │ │ │ └── MatchStartRunnable.java
│ │ │ ├── main
│ │ │ ├── ArenasManagementButton.java
│ │ │ ├── KitsManagementButton.java
│ │ │ ├── MainCommand.java
│ │ │ └── MainMenu.java
│ │ │ ├── profile
│ │ │ ├── ProfileService.java
│ │ │ ├── data
│ │ │ │ ├── GameData.java
│ │ │ │ ├── GlobalStats.java
│ │ │ │ ├── KitData.java
│ │ │ │ ├── MatchHistory.java
│ │ │ │ ├── ProfileState.java
│ │ │ │ ├── SettingData.java
│ │ │ │ └── Visibility.java
│ │ │ ├── impl
│ │ │ │ └── Profile.java
│ │ │ └── listener
│ │ │ │ └── ProfileListener.java
│ │ │ ├── providers
│ │ │ ├── clickable
│ │ │ │ ├── ClickableComponent.java
│ │ │ │ └── Replacement.java
│ │ │ ├── database
│ │ │ │ ├── DatabaseService.java
│ │ │ │ └── impl
│ │ │ │ │ ├── DataDocument.java
│ │ │ │ │ ├── DatabaseType.java
│ │ │ │ │ ├── IDatabase.java
│ │ │ │ │ ├── MongoDatabase.java
│ │ │ │ │ └── SQLiteDatabase.java
│ │ │ ├── listeners
│ │ │ │ └── GlobalListener.java
│ │ │ ├── manager
│ │ │ │ ├── IService.java
│ │ │ │ └── Value.java
│ │ │ ├── material
│ │ │ │ └── NMaterial.java
│ │ │ ├── placeholder
│ │ │ │ ├── Placeholder.java
│ │ │ │ ├── PlaceholderImpl.java
│ │ │ │ ├── PlaceholderManager.java
│ │ │ │ ├── PlaceholderUtil.java
│ │ │ │ └── impl
│ │ │ │ │ ├── AlivePlaceholder.java
│ │ │ │ │ ├── ArenaPlaceholder.java
│ │ │ │ │ ├── BedBrokenPlaceholder.java
│ │ │ │ │ ├── BestStreakPlaceholder.java
│ │ │ │ │ ├── BlueAlivePlaceholder.java
│ │ │ │ │ ├── BlueBedBrokenPlaceholder.java
│ │ │ │ │ ├── BlueMaxPlaceholder.java
│ │ │ │ │ ├── ColorPlaceholder.java
│ │ │ │ │ ├── ComboPlaceholder.java
│ │ │ │ │ ├── CurrentStreakPlaceholder.java
│ │ │ │ │ ├── DivisionPlaceholder.java
│ │ │ │ │ ├── EloPlaceholder.java
│ │ │ │ │ ├── HitDifferencePlaceholder.java
│ │ │ │ │ ├── HitsPlaceholder.java
│ │ │ │ │ ├── InMatchPlaceholder.java
│ │ │ │ │ ├── InQueuePlaceholder.java
│ │ │ │ │ ├── IsTeamMatchPlaceholder.java
│ │ │ │ │ ├── KitBestStreakPlaceholder.java
│ │ │ │ │ ├── KitCurrentStreakPlaceholder.java
│ │ │ │ │ ├── KitDivisionPlaceholder.java
│ │ │ │ │ ├── KitEloPlaceholder.java
│ │ │ │ │ ├── KitInMatchPlaceholder.java
│ │ │ │ │ ├── KitLossesPlaceholder.java
│ │ │ │ │ ├── KitPlaceholder.java
│ │ │ │ │ ├── KitQueuedPlaceholder.java
│ │ │ │ │ ├── KitWinsPlaceholder.java
│ │ │ │ │ ├── LastKitPlaceholder.java
│ │ │ │ │ ├── LeaderPlaceholder.java
│ │ │ │ │ ├── LeaderboardPlaceholder.java
│ │ │ │ │ ├── LossesPlaceholder.java
│ │ │ │ │ ├── MaxPingPlaceholder.java
│ │ │ │ │ ├── MaxPlaceholder.java
│ │ │ │ │ ├── MaxPointsPlaceholder.java
│ │ │ │ │ ├── OpponentAlivePlaceholder.java
│ │ │ │ │ ├── OpponentBedBrokenPlaceholder.java
│ │ │ │ │ ├── OpponentComboPlaceholder.java
│ │ │ │ │ ├── OpponentHitsPlaceholder.java
│ │ │ │ │ ├── OpponentMaxPlaceholder.java
│ │ │ │ │ ├── OpponentPingPlaceholder.java
│ │ │ │ │ ├── OpponentPlaceholder.java
│ │ │ │ │ ├── OpponentPointsPlaceholder.java
│ │ │ │ │ ├── PartyMaxPlaceholder.java
│ │ │ │ │ ├── PingPlaceholder.java
│ │ │ │ │ ├── PlayerBlueNamePlaceholder.java
│ │ │ │ │ ├── PlayerBluePingPlaceholder.java
│ │ │ │ │ ├── PlayerRedNamePlaceholder.java
│ │ │ │ │ ├── PlayerRedPingPlaceholder.java
│ │ │ │ │ ├── PointsPlaceholder.java
│ │ │ │ │ ├── QueuedPlaceholder.java
│ │ │ │ │ ├── RecentMatchPlaceholder.java
│ │ │ │ │ ├── RedAlivePlaceholder.java
│ │ │ │ │ ├── RedBedBrokenPlaceholder.java
│ │ │ │ │ ├── RedMaxPlaceholder.java
│ │ │ │ │ ├── SizePlaceholder.java
│ │ │ │ │ ├── StatePlaceholder.java
│ │ │ │ │ ├── TimePlaceholder.java
│ │ │ │ │ ├── WinRatePlaceholder.java
│ │ │ │ │ └── WinsPlaceholder.java
│ │ │ └── request
│ │ │ │ └── Request.java
│ │ │ ├── scoreboard
│ │ │ ├── ScoreboardAdapter.java
│ │ │ └── ScoreboardService.java
│ │ │ └── utils
│ │ │ ├── CC.java
│ │ │ ├── ComponentUtils.java
│ │ │ ├── ConfigFile.java
│ │ │ ├── Cooldown.java
│ │ │ ├── DateUtils.java
│ │ │ ├── EntityUtils.java
│ │ │ ├── GithubUtils.java
│ │ │ ├── ItemBuilder.java
│ │ │ ├── ItemUtils.java
│ │ │ ├── LocationUtil.java
│ │ │ ├── PlayerUtil.java
│ │ │ ├── PotionEffectUtils.java
│ │ │ ├── RandomUtils.java
│ │ │ ├── ServerUtils.java
│ │ │ ├── Time.java
│ │ │ ├── TtlAction.java
│ │ │ ├── TtlHashMap.java
│ │ │ ├── WorldUtils.java
│ │ │ ├── menu
│ │ │ ├── Button.java
│ │ │ ├── Filter.java
│ │ │ ├── Menu.java
│ │ │ ├── MenuListener.java
│ │ │ ├── MenuManager.java
│ │ │ ├── MenuRunnable.java
│ │ │ ├── MenuService.java
│ │ │ ├── PageButton.java
│ │ │ ├── PaginatedMenu.java
│ │ │ └── impl
│ │ │ │ ├── CloseMenuButton.java
│ │ │ │ ├── DisplayButton.java
│ │ │ │ └── ReturnButton.java
│ │ │ └── tasks
│ │ │ ├── NeptuneRunnable.java
│ │ │ ├── TaskListener.java
│ │ │ └── TaskScheduler.java
│ └── fr
│ │ └── mrmicky
│ │ └── fastboard
│ │ ├── FastAdapter.java
│ │ ├── FastBoardBase.java
│ │ ├── FastListener.java
│ │ ├── FastManager.java
│ │ ├── FastReflection.java
│ │ ├── FastRunnable.java
│ │ └── adventure
│ │ └── FastBoard.java
│ └── resources
│ ├── divisions.yml
│ ├── kill-messages.yml
│ └── plugin.yml
├── README.md
├── docs
├── README.md
├── api.md
├── permissions.md
└── placeholders.md
├── jitpack.yml
└── pom.xml
/.github/workflows/maven.yml:
--------------------------------------------------------------------------------
1 | # This workflow will build a Java project with Maven, and cache/restore any dependencies to improve the workflow execution time
2 | # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-java-with-maven
3 |
4 | # This workflow uses actions that are not certified by GitHub.
5 | # They are provided by a third-party and are governed by
6 | # separate terms of service, privacy policy, and support
7 | # documentation.
8 |
9 | name: Java CI with Maven
10 |
11 | on:
12 | push:
13 | branches: [ "master" ]
14 | pull_request:
15 | branches: [ "master" ]
16 |
17 | jobs:
18 | build:
19 |
20 | runs-on: ubuntu-latest
21 |
22 | steps:
23 | - uses: actions/checkout@v4
24 | - name: Set up JDK 21
25 | uses: actions/setup-java@v4
26 | with:
27 | java-version: '21'
28 | distribution: 'temurin'
29 | cache: maven
30 | - name: Build with Maven
31 | run: mvn -B package --file pom.xml
32 | - name: Upload a Build Artifact
33 | uses: actions/upload-artifact@v4
34 | with:
35 | name: Plugin
36 | path: ${{ github.workspace }}/Plugin/target/Neptune.jar
37 | if-no-files-found: error
38 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Mobile Tools for Java (J2ME)
2 | .mtj.tmp/
3 |
4 | # Package Files #
5 | *.war
6 | *.ear
7 |
8 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
9 | hs_err_pid*
10 |
11 | # Eclipse
12 | .classpath
13 | .project
14 | .settings/
15 |
16 | # Intellij
17 | .idea/
18 | *.iml
19 | *.iws
20 |
21 | # Mac
22 | .DS_Store
23 |
24 | # Maven
25 | log/
26 | target/
27 |
28 | # Compiled Files
29 | *.class
30 | bin/
31 | build/
32 | /bin1/
33 | java/build/**
34 | /.idea
35 | .idea/vcs.xml
36 |
37 | # vscode
38 | .vscode
39 | web
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 |
--------------------------------------------------------------------------------
/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/NeptuneAPI.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api;
2 |
3 | import dev.lrxh.api.arena.IArenaService;
4 | import dev.lrxh.api.features.ICosmeticService;
5 | import dev.lrxh.api.features.IDivisionService;
6 | import dev.lrxh.api.features.IItemBrowserService;
7 | import dev.lrxh.api.kit.IKitService;
8 | import dev.lrxh.api.match.IMatchService;
9 | import dev.lrxh.api.profile.IProfileService;
10 | import dev.lrxh.api.scoreboard.IScoreboardService;
11 |
12 | public interface NeptuneAPI {
13 | IProfileService getProfileService();
14 |
15 | IMatchService getMatchService();
16 |
17 | IKitService getKitService();
18 |
19 | IScoreboardService getScoreboardService();
20 |
21 | IArenaService getArenaService();
22 |
23 | IDivisionService getDivisionService();
24 |
25 | ICosmeticService getCosmeticService();
26 |
27 | IItemBrowserService getItemBrowserService();
28 | }
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/NeptuneAPIImpl.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api;
2 |
3 | import dev.lrxh.api.arena.IArenaService;
4 | import dev.lrxh.api.features.ICosmeticService;
5 | import dev.lrxh.api.features.IDivisionService;
6 | import dev.lrxh.api.features.IItemBrowserService;
7 | import dev.lrxh.api.kit.IKitService;
8 | import dev.lrxh.api.match.IMatchService;
9 | import dev.lrxh.api.profile.IProfileService;
10 | import dev.lrxh.api.scoreboard.IScoreboardService;
11 | import lombok.AllArgsConstructor;
12 | import lombok.Getter;
13 |
14 | @Getter
15 | @AllArgsConstructor
16 | public class NeptuneAPIImpl implements NeptuneAPI {
17 | private final IProfileService profileService;
18 | private final IMatchService matchService;
19 | private final IKitService kitService;
20 | private final IScoreboardService scoreboardService;
21 | private final IArenaService arenaService;
22 | private final IDivisionService divisionService;
23 | private final ICosmeticService cosmeticService;
24 | private final IItemBrowserService itemBrowserService;
25 | }
26 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/NeptuneAPIProvider.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api;
2 |
3 | import org.bukkit.Bukkit;
4 | import org.bukkit.plugin.RegisteredServiceProvider;
5 |
6 | public class NeptuneAPIProvider {
7 |
8 | private static NeptuneAPI api;
9 |
10 | public static NeptuneAPI getAPI() {
11 | if (api == null) {
12 | setupAPI();
13 | }
14 | return api;
15 | }
16 |
17 | private static void setupAPI() {
18 | RegisteredServiceProvider provider =
19 | Bukkit.getServer().getServicesManager().getRegistration(NeptuneAPI.class);
20 | if (provider != null) {
21 | api = provider.getProvider();
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/arena/IArena.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.arena;
2 |
3 | import org.bukkit.Location;
4 | import org.bukkit.Material;
5 |
6 | import java.util.List;
7 |
8 | public interface IArena {
9 | String getName();
10 |
11 | String getDisplayName();
12 |
13 | Location getRedSpawn();
14 |
15 | void setRedSpawn(Location redSpawn);
16 |
17 | Location getBlueSpawn();
18 |
19 | void setBlueSpawn(Location blueSpawn);
20 |
21 | boolean isEnabled();
22 |
23 | int getDeathY();
24 |
25 | Location getMin();
26 |
27 | void setMin(Location min);
28 |
29 | Location getMax();
30 |
31 | void setMax(Location max);
32 |
33 | double getBuildLimit();
34 |
35 | List getWhitelistedBlocks();
36 |
37 | IArena getOwner();
38 |
39 | boolean isSetup();
40 |
41 | void remove();
42 |
43 | void restore();
44 |
45 | void delete(boolean save);
46 |
47 | boolean equals(Object o);
48 | }
49 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/arena/IArenaService.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.arena;
2 |
3 | import java.util.LinkedHashSet;
4 |
5 | public interface IArenaService {
6 | LinkedHashSet getAllArenas();
7 |
8 | IArena getArenaByName(String name);
9 | }
10 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/data/IDivision.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.data;
2 |
3 | import org.bukkit.Material;
4 |
5 | public interface IDivision {
6 | String getName();
7 |
8 | String getDisplayName();
9 |
10 | int getEloRequired();
11 |
12 | Material getMaterial();
13 |
14 | int getSlot();
15 | }
16 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/data/IGameData.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.data;
2 |
3 | import dev.lrxh.api.kit.IKit;
4 |
5 | import java.util.HashMap;
6 |
7 | public interface IGameData {
8 | HashMap getKitData();
9 |
10 | IGlobalStats getGlobalStats();
11 |
12 | void setCustomData(String key, Object value);
13 |
14 | Object getCustomData(String key);
15 |
16 | void setPersistentData(String key, Object value);
17 |
18 | Object getPersistentData(String key);
19 | }
20 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/data/IGlobalStats.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.data;
2 |
3 | public interface IGlobalStats {
4 | int getWins();
5 |
6 | void setWins(int amount);
7 |
8 | int getLosses();
9 |
10 | void setLosses(int amount);
11 |
12 | int getCurrentStreak();
13 |
14 | void setCurrentStreak(int amount);
15 |
16 | int getBestStreak();
17 |
18 | void setBestStreak(int amount);
19 |
20 | int getElo();
21 |
22 | void setElo(int elo);
23 |
24 | IDivision getDivision();
25 |
26 | void setDivision(IDivision division);
27 |
28 | double getWinRatio();
29 | }
30 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/data/IKitData.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.data;
2 |
3 |
4 | public interface IKitData {
5 |
6 | int getKills();
7 |
8 | void setKills(int amount);
9 |
10 | int getDeaths();
11 |
12 | void setDeaths(int amount);
13 |
14 | int getCurrentStreak();
15 |
16 | void setCurrentStreak(int amount);
17 |
18 | int getBestStreak();
19 |
20 | void setBestStreak(int amount);
21 |
22 | double getKdr();
23 |
24 | void setCustomData(String key, Object value);
25 |
26 | Object getCustomData(String key);
27 |
28 | void setPersistentData(String key, Object value);
29 |
30 | Object getPersistentData(String key);
31 | }
32 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/events/MatchEndEvent.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.events;
2 |
3 | import dev.lrxh.api.match.IMatch;
4 | import lombok.Getter;
5 | import org.bukkit.event.Event;
6 | import org.bukkit.event.HandlerList;
7 |
8 | public class MatchEndEvent extends Event {
9 | private static final HandlerList handlers = new HandlerList();
10 | @Getter
11 | private final IMatch match;
12 |
13 | public MatchEndEvent(IMatch match) {
14 | this.match = match;
15 | }
16 |
17 | public static HandlerList getHandlerList() {
18 | return handlers;
19 | }
20 |
21 | @Override
22 | public HandlerList getHandlers() {
23 | return handlers;
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/events/MatchNewRoundStartEvent.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.events;
2 |
3 |
4 | import dev.lrxh.api.match.IMatch;
5 | import lombok.Getter;
6 | import org.bukkit.event.Event;
7 | import org.bukkit.event.HandlerList;
8 |
9 | public class MatchNewRoundStartEvent extends Event {
10 | private static final HandlerList handlers = new HandlerList();
11 | @Getter
12 | private final IMatch match;
13 |
14 | public MatchNewRoundStartEvent(IMatch match) {
15 | this.match = match;
16 | }
17 |
18 | public static HandlerList getHandlerList() {
19 | return handlers;
20 | }
21 |
22 | @Override
23 | public HandlerList getHandlers() {
24 | return handlers;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/events/MatchParticipantDeathEvent.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.events;
2 |
3 |
4 | import dev.lrxh.api.match.IMatch;
5 | import dev.lrxh.api.match.participant.IParticipant;
6 | import lombok.Getter;
7 | import org.bukkit.event.Event;
8 | import org.bukkit.event.HandlerList;
9 |
10 | public class MatchParticipantDeathEvent extends Event {
11 | private static final HandlerList handlers = new HandlerList();
12 | @Getter
13 | private final IMatch match;
14 | @Getter
15 | private final IParticipant participant;
16 | @Getter
17 | private final String deathMessage;
18 |
19 | public MatchParticipantDeathEvent(IMatch match, IParticipant participant, String deathMessage) {
20 | this.match = match;
21 | this.participant = participant;
22 | this.deathMessage = deathMessage;
23 | }
24 |
25 | public static HandlerList getHandlerList() {
26 | return handlers;
27 | }
28 |
29 | @Override
30 | public HandlerList getHandlers() {
31 | return handlers;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/events/MatchParticipantRespawnEvent.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.events;
2 |
3 |
4 | import dev.lrxh.api.match.IMatch;
5 | import dev.lrxh.api.match.participant.IParticipant;
6 | import lombok.Getter;
7 | import org.bukkit.event.Event;
8 | import org.bukkit.event.HandlerList;
9 |
10 | public class MatchParticipantRespawnEvent extends Event {
11 | private static final HandlerList handlers = new HandlerList();
12 | @Getter
13 | private final IMatch match;
14 | @Getter
15 | private final IParticipant participant;
16 |
17 | public MatchParticipantRespawnEvent(IMatch match, IParticipant participant) {
18 | this.match = match;
19 | this.participant = participant;
20 | }
21 |
22 | public static HandlerList getHandlerList() {
23 | return handlers;
24 | }
25 |
26 | @Override
27 | public HandlerList getHandlers() {
28 | return handlers;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/events/MatchReadyEvent.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.events;
2 |
3 |
4 | import dev.lrxh.api.match.IMatch;
5 | import lombok.Getter;
6 | import lombok.Setter;
7 | import org.bukkit.event.Cancellable;
8 | import org.bukkit.event.Event;
9 | import org.bukkit.event.HandlerList;
10 |
11 | public class MatchReadyEvent extends Event implements Cancellable {
12 | private static final HandlerList handlers = new HandlerList();
13 | @Getter
14 | private final IMatch match;
15 | @Setter
16 | private boolean cancelled;
17 |
18 | public MatchReadyEvent(IMatch match) {
19 | this.match = match;
20 | }
21 |
22 | public static HandlerList getHandlerList() {
23 | return handlers;
24 | }
25 |
26 | @Override
27 | public boolean isCancelled() {
28 | return cancelled;
29 | }
30 |
31 | @Override
32 | public HandlerList getHandlers() {
33 | return handlers;
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/events/MatchSpectatorAddEvent.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.events;
2 |
3 |
4 | import dev.lrxh.api.match.IMatch;
5 | import lombok.Getter;
6 | import org.bukkit.entity.Player;
7 | import org.bukkit.event.Event;
8 | import org.bukkit.event.HandlerList;
9 |
10 | public class MatchSpectatorAddEvent extends Event {
11 | private static final HandlerList handlers = new HandlerList();
12 | @Getter
13 | private final IMatch match;
14 | @Getter
15 | private final Player player;
16 |
17 | public MatchSpectatorAddEvent(IMatch match, Player player) {
18 | this.match = match;
19 | this.player = player;
20 | }
21 |
22 | public static HandlerList getHandlerList() {
23 | return handlers;
24 | }
25 |
26 | @Override
27 | public HandlerList getHandlers() {
28 | return handlers;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/events/MatchSpectatorRemoveEvent.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.events;
2 |
3 |
4 | import dev.lrxh.api.match.IMatch;
5 | import lombok.Getter;
6 | import org.bukkit.entity.Player;
7 | import org.bukkit.event.Event;
8 | import org.bukkit.event.HandlerList;
9 |
10 | public class MatchSpectatorRemoveEvent extends Event {
11 | private static final HandlerList handlers = new HandlerList();
12 | @Getter
13 | private final IMatch match;
14 | @Getter
15 | private final Player player;
16 |
17 | public MatchSpectatorRemoveEvent(IMatch match, Player player) {
18 | this.match = match;
19 | this.player = player;
20 | }
21 |
22 | public static HandlerList getHandlerList() {
23 | return handlers;
24 | }
25 |
26 | @Override
27 | public HandlerList getHandlers() {
28 | return handlers;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/events/MatchStartEvent.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.events;
2 |
3 |
4 | import dev.lrxh.api.match.IMatch;
5 | import lombok.Getter;
6 | import org.bukkit.event.Event;
7 | import org.bukkit.event.HandlerList;
8 |
9 | public class MatchStartEvent extends Event {
10 | private static final HandlerList handlers = new HandlerList();
11 | @Getter
12 | private final IMatch match;
13 |
14 | public MatchStartEvent(IMatch match) {
15 | this.match = match;
16 | }
17 |
18 | public static HandlerList getHandlerList() {
19 | return handlers;
20 | }
21 |
22 | @Override
23 | public HandlerList getHandlers() {
24 | return handlers;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/events/PlayerLeaveEvent.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.events;
2 |
3 | import dev.lrxh.api.profile.IProfile;
4 | import lombok.Getter;
5 | import org.bukkit.event.Event;
6 | import org.bukkit.event.HandlerList;
7 |
8 | public class PlayerLeaveEvent extends Event {
9 | private static final HandlerList handlers = new HandlerList();
10 | @Getter
11 | private final IProfile profile;
12 | @Getter
13 | private final String previousStatus;
14 |
15 | public PlayerLeaveEvent(IProfile profile, String previousStatus) {
16 | this.profile = profile;
17 | this.previousStatus = previousStatus;
18 | }
19 |
20 | public static HandlerList getHandlerList() {
21 | return handlers;
22 | }
23 |
24 | @Override
25 | public HandlerList getHandlers() {
26 | return handlers;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/events/QueueJoinEvent.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.events;
2 |
3 | import dev.lrxh.api.kit.IKit;
4 | import dev.lrxh.api.queue.IQueueEntry;
5 | import org.bukkit.Bukkit;
6 | import org.bukkit.entity.Player;
7 | import org.bukkit.event.Cancellable;
8 | import org.bukkit.event.Event;
9 | import org.bukkit.event.HandlerList;
10 |
11 | public class QueueJoinEvent extends Event implements Cancellable {
12 | private static final HandlerList handlers = new HandlerList();
13 | private final IQueueEntry queueEntry;
14 | private boolean cancelled = false;
15 |
16 | public QueueJoinEvent(IQueueEntry queueEntry) {
17 | this.queueEntry = queueEntry;
18 | }
19 |
20 | public static HandlerList getHandlerList() {
21 | return handlers;
22 | }
23 |
24 | public Player getPlayer() {
25 | return Bukkit.getPlayer(queueEntry.getUuid());
26 | }
27 |
28 | public IKit getKit() {
29 | return queueEntry.getKit();
30 | }
31 |
32 | @Override
33 | public boolean isCancelled() {
34 | return cancelled;
35 | }
36 |
37 | @Override
38 | public void setCancelled(boolean cancelled) {
39 | this.cancelled = cancelled;
40 | }
41 |
42 | @Override
43 | public HandlerList getHandlers() {
44 | return handlers;
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/events/SoloMatchBedDestroyEvent.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.events;
2 |
3 |
4 | import dev.lrxh.api.match.IMatch;
5 | import dev.lrxh.api.match.participant.IParticipant;
6 | import lombok.Getter;
7 | import org.bukkit.event.Event;
8 | import org.bukkit.event.HandlerList;
9 |
10 | public class SoloMatchBedDestroyEvent extends Event {
11 | private static final HandlerList handlers = new HandlerList();
12 | @Getter
13 | private final IMatch match;
14 | @Getter
15 | private final IParticipant bedOwner;
16 | @Getter
17 | private final IParticipant bedBreaker;
18 |
19 | public SoloMatchBedDestroyEvent(IMatch match, IParticipant bedOwner, IParticipant bedBreaker) {
20 | this.match = match;
21 | this.bedOwner = bedOwner;
22 | this.bedBreaker = bedBreaker;
23 | }
24 |
25 | public static HandlerList getHandlerList() {
26 | return handlers;
27 | }
28 |
29 | @Override
30 | public HandlerList getHandlers() {
31 | return handlers;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/events/TeamMatchBedDestroyEvent.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.events;
2 |
3 |
4 | import dev.lrxh.api.match.IMatch;
5 | import dev.lrxh.api.match.participant.IParticipant;
6 | import dev.lrxh.api.match.team.IMatchTeam;
7 | import lombok.Getter;
8 | import org.bukkit.event.Event;
9 | import org.bukkit.event.HandlerList;
10 |
11 | public class TeamMatchBedDestroyEvent extends Event {
12 | private static final HandlerList handlers = new HandlerList();
13 | @Getter
14 | private final IMatch match;
15 | @Getter
16 | private final IMatchTeam bedOwner;
17 | @Getter
18 | private final IParticipant bedBreaker;
19 |
20 | public TeamMatchBedDestroyEvent(IMatch match, IMatchTeam bedOwner, IParticipant bedBreaker) {
21 | this.match = match;
22 | this.bedOwner = bedOwner;
23 | this.bedBreaker = bedBreaker;
24 | }
25 |
26 | public static HandlerList getHandlerList() {
27 | return handlers;
28 | }
29 |
30 | @Override
31 | public HandlerList getHandlers() {
32 | return handlers;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/features/ICosmeticService.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.features;
2 |
3 | import java.util.Map;
4 |
5 | public interface ICosmeticService {
6 | Map getDeathMessages();
7 |
8 | void registerKillMessage(IKillMessagePackage killMessagePackage);
9 | }
10 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/features/IDivisionService.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.features;
2 |
3 | import dev.lrxh.api.data.IDivision;
4 |
5 | import java.util.LinkedHashSet;
6 |
7 | public interface IDivisionService {
8 | LinkedHashSet getDivisions();
9 |
10 | IDivision getDivisionByElo(int elo);
11 |
12 | void registerDivision(IDivision division);
13 | }
14 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/features/IItemBrowserService.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.features;
2 |
3 | import org.bukkit.Material;
4 | import org.bukkit.entity.Player;
5 |
6 | import java.util.List;
7 | import java.util.function.Consumer;
8 |
9 | public interface IItemBrowserService {
10 | /**
11 | * Get all items for a section (e.g. "weapons", "tools")
12 | */
13 | List getItems(String section);
14 |
15 | /**
16 | * Open browser for a section
17 | */
18 | void openBrowser(Player player, String section, Consumer itemConsumer, Runnable returnConsumer);
19 |
20 | /**
21 | * Register new items for a section (for dynamic loading)
22 | */
23 | void registerSection(String section, List materialNames);
24 | }
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/features/IKillMessagePackage.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.features;
2 |
3 | import org.bukkit.Material;
4 |
5 | import java.util.List;
6 |
7 | public interface IKillMessagePackage {
8 | String getName();
9 |
10 | String getDisplayName();
11 |
12 | Material getMaterial();
13 |
14 | List getDescription();
15 |
16 | int getSlot();
17 |
18 | List getMessages();
19 |
20 | String getRandomMessage();
21 |
22 | String permission();
23 | }
24 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/kit/IKit.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.kit;
2 |
3 | import dev.lrxh.api.arena.IArena;
4 | import org.bukkit.inventory.ItemStack;
5 | import org.bukkit.potion.PotionEffect;
6 |
7 | import java.util.HashMap;
8 | import java.util.HashSet;
9 | import java.util.List;
10 | import java.util.UUID;
11 |
12 | public interface IKit {
13 | String getName();
14 |
15 | String getDisplayName();
16 |
17 | List getItems();
18 |
19 | ItemStack getIcon();
20 |
21 | int getQueue();
22 |
23 | int getPlaying();
24 |
25 | int getSlot();
26 |
27 | int getKitEditorSlot();
28 |
29 | double getHealth();
30 |
31 | List getPotionEffects();
32 |
33 | double getDamageMultiplier();
34 |
35 | HashMap getRule();
36 |
37 | HashSet getAllArenas();
38 |
39 | void giveLoadout(UUID uuid);
40 | }
41 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/kit/IKitRule.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.kit;
2 |
3 | import org.bukkit.Material;
4 |
5 | public interface IKitRule {
6 | String getName();
7 |
8 | String getDescription();
9 |
10 | Material getIcon();
11 |
12 | String getSaveName();
13 | }
14 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/kit/IKitService.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.kit;
2 |
3 | import dev.lrxh.api.arena.IArena;
4 |
5 | import java.util.LinkedHashSet;
6 |
7 | public interface IKitService {
8 | LinkedHashSet getAllKits();
9 |
10 | IKit getKitByName(String name);
11 |
12 | IKit getKitByDisplay(String displayName);
13 |
14 | void removeArena(IArena arena);
15 |
16 | boolean addKit(IKit kit);
17 | }
18 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/match/IFffaFightMatch.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.match;
2 |
3 | import dev.lrxh.api.match.participant.IParticipant;
4 |
5 | import java.util.List;
6 |
7 | public interface IFffaFightMatch extends IMatch {
8 | List getDeadParticipants();
9 |
10 | List getParticipants();
11 |
12 | IParticipant getWinner();
13 | }
14 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/match/IMatch.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.match;
2 |
3 | import dev.lrxh.api.arena.IArena;
4 | import dev.lrxh.api.kit.IKit;
5 | import dev.lrxh.api.match.participant.IParticipant;
6 | import org.bukkit.entity.Player;
7 |
8 | import java.util.List;
9 | import java.util.UUID;
10 |
11 | public interface IMatch {
12 |
13 | List getSpectators();
14 |
15 | UUID getUuid();
16 |
17 | IMatchState getState();
18 |
19 | IArena getArena();
20 |
21 | IKit getKit();
22 |
23 | List getParticipants();
24 |
25 | int getRounds();
26 |
27 | boolean isDuel();
28 |
29 | boolean isEnded();
30 |
31 | IParticipant getParticipant(Player player);
32 |
33 | void broadcast(String message);
34 | }
35 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/match/IMatchService.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.match;
2 |
3 | public interface IMatchService {
4 | void startMatch(IMatch match);
5 | }
6 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/match/IMatchState.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.match;
2 |
3 | public interface IMatchState {
4 | }
5 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/match/ISoloFightMatch.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.match;
2 |
3 | import dev.lrxh.api.match.participant.IParticipant;
4 |
5 | public interface ISoloFightMatch extends IMatch {
6 | IParticipant getLoser();
7 |
8 | IParticipant getWinner();
9 |
10 | IParticipant getRedParticipant();
11 |
12 | IParticipant getBlueParticipant();
13 | }
14 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/match/ITeamFightMatch.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.match;
2 |
3 | import dev.lrxh.api.match.participant.IParticipant;
4 | import dev.lrxh.api.match.team.IMatchTeam;
5 |
6 | import java.util.List;
7 | import java.util.UUID;
8 |
9 | public interface ITeamFightMatch extends IMatch {
10 | List getParticipants();
11 |
12 | IMatchTeam getTeamA();
13 |
14 | IMatchTeam getTeamB();
15 |
16 | IMatchTeam getWinner();
17 |
18 | IMatchTeam getLoser();
19 |
20 | IMatchTeam getParticipantTeam(IParticipant participant);
21 |
22 | boolean onSameTeam(UUID playerUUID, UUID otherUUID);
23 | }
24 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/match/participant/IParticipantColor.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.match.participant;
2 |
3 | import org.bukkit.Color;
4 |
5 | public interface IParticipantColor {
6 | String getColor();
7 |
8 | Color getContentColor();
9 | }
10 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/match/team/IMatchTeam.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.match.team;
2 |
3 | import dev.lrxh.api.match.participant.IParticipant;
4 |
5 | import java.util.List;
6 |
7 | public interface IMatchTeam {
8 | boolean isLoser();
9 |
10 | List getParticipants();
11 |
12 | List getDeadParticipants();
13 |
14 | IMatchTeam getOpponentTeam();
15 |
16 | int getPoints();
17 |
18 | void setPoints(int points);
19 |
20 | void addPoint();
21 |
22 | String getTeamNames();
23 | }
24 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/profile/IProfile.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.profile;
2 |
3 | import dev.lrxh.api.data.IGameData;
4 | import org.bukkit.entity.Player;
5 |
6 | import java.util.UUID;
7 |
8 | public interface IProfile {
9 | Player getPlayer();
10 |
11 | UUID getPlayerUUID();
12 |
13 | IGameData getGameData();
14 |
15 | void setState(String customState);
16 |
17 | String getProfileState();
18 |
19 | void toLobby();
20 |
21 | boolean hasState(String state);
22 |
23 | void addCooldown(String name, int millis);
24 |
25 | boolean hasCooldownEnded(String name);
26 | }
27 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/profile/IProfileService.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.profile;
2 |
3 |
4 | import java.util.UUID;
5 | import java.util.concurrent.CompletableFuture;
6 |
7 | public interface IProfileService {
8 | CompletableFuture getProfile(UUID uuid);
9 | }
10 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/profile/IProfileState.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.profile;
2 |
3 | public interface IProfileState {
4 | }
5 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/queue/IQueueEntry.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.queue;
2 |
3 | import dev.lrxh.api.kit.IKit;
4 |
5 | import java.util.UUID;
6 |
7 | public interface IQueueEntry {
8 | UUID getUuid();
9 |
10 | IKit getKit();
11 | }
12 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/queue/IQueueService.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.queue;
2 |
3 | import dev.lrxh.api.kit.IKit;
4 |
5 | import java.util.Map;
6 | import java.util.Queue;
7 | import java.util.UUID;
8 |
9 | public interface IQueueService {
10 | int getQueueSize();
11 |
12 | Map> getQueues();
13 |
14 | IQueueEntry remove(UUID playerUUID);
15 |
16 | IQueueEntry get(UUID playerUUID);
17 | }
18 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/scoreboard/IScoreboardService.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.scoreboard;
2 |
3 | import dev.lrxh.api.profile.IProfile;
4 |
5 | import java.util.List;
6 | import java.util.function.Function;
7 |
8 | public interface IScoreboardService {
9 |
10 | void registerScoreboard(String state, Function> scoreboardFunction);
11 |
12 | List getScoreboardLines(String state, IProfile profile);
13 | }
14 |
--------------------------------------------------------------------------------
/API/src/main/java/dev/lrxh/api/utils/ITime.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.api.utils;
2 |
3 | public interface ITime {
4 | String formatTime();
5 |
6 | String formatSecondsMillis();
7 | }
8 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/annotation/Classifier.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.annotation;
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 | @Target(ElementType.TYPE)
9 | @Retention(RetentionPolicy.RUNTIME)
10 | public @interface Classifier {
11 | }
12 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/annotation/Command.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.annotation;
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.METHOD)
10 | public @interface Command {
11 |
12 | String name();
13 |
14 | String[] aliases() default {};
15 |
16 | String desc();
17 |
18 | String usage() default "";
19 |
20 | boolean async() default false;
21 |
22 | boolean hidden() default false;
23 | }
24 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/annotation/Duration.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.annotation;
2 |
3 | @Classifier
4 | public @interface Duration {
5 | }
6 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/annotation/Flag.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.annotation;
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.PARAMETER)
10 | public @interface Flag {
11 |
12 | char value();
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/annotation/LastArg.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.annotation;
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 LastArg {
11 | }
12 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/annotation/Modifier.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.annotation;
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 | @Target(ElementType.TYPE)
9 | @Retention(RetentionPolicy.RUNTIME)
10 | public @interface Modifier {
11 | }
12 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/annotation/OptArg.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.annotation;
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 | @Target(ElementType.PARAMETER)
9 | @Retention(RetentionPolicy.RUNTIME)
10 | public @interface OptArg {
11 |
12 | String value() default "";
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/annotation/Require.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.annotation;
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.METHOD, ElementType.TYPE})
10 | public @interface Require {
11 |
12 | String value();
13 |
14 | }
15 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/annotation/Sender.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.annotation;
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 | @Classifier
9 | @Retention(RetentionPolicy.RUNTIME)
10 | @Target(ElementType.PARAMETER)
11 | public @interface Sender {
12 | }
13 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/annotation/Text.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.annotation;
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.PARAMETER)
10 | @Classifier
11 | @LastArg
12 | public @interface Text {
13 | }
14 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/argument/CommandArg.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.argument;
2 |
3 | import org.bukkit.command.CommandSender;
4 | import org.bukkit.entity.Player;
5 |
6 | public class CommandArg {
7 |
8 | private final CommandSender sender;
9 | private final String value;
10 | private final String label;
11 | private final CommandArgs args;
12 |
13 | public CommandArg(CommandSender sender, String value, CommandArgs args) {
14 | this.sender = sender;
15 | this.value = value;
16 | this.label = args.getLabel();
17 | this.args = args;
18 | }
19 |
20 | public CommandSender getSender() {
21 | return sender;
22 | }
23 |
24 | public String get() {
25 | return value;
26 | }
27 |
28 | public String getLabel() {
29 | return label;
30 | }
31 |
32 | public boolean isSenderPlayer() {
33 | return sender instanceof Player;
34 | }
35 |
36 | public Player getSenderAsPlayer() {
37 | return (Player) sender;
38 | }
39 |
40 | public CommandArgs getArgs() {
41 | return args;
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/command/CommandExecution.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.command;
2 |
3 | import com.jonahseguin.drink.argument.CommandArgs;
4 | import lombok.Getter;
5 | import org.bukkit.command.CommandSender;
6 |
7 | import java.util.List;
8 |
9 | @Getter
10 | public class CommandExecution {
11 |
12 | private final DrinkCommandService commandService;
13 | private final CommandSender sender;
14 | private final List args;
15 | private final CommandArgs commandArgs;
16 | private final DrinkCommand command;
17 | private boolean canExecute = true;
18 |
19 | public CommandExecution(DrinkCommandService commandService, CommandSender sender, List args, CommandArgs commandArgs, DrinkCommand command) {
20 | this.commandService = commandService;
21 | this.sender = sender;
22 | this.args = args;
23 | this.commandArgs = commandArgs;
24 | this.command = command;
25 | }
26 |
27 | public void preventExecution() {
28 | canExecute = false;
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/command/CommandFlag.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.command;
2 |
3 | import javax.annotation.Nullable;
4 |
5 | public class CommandFlag {
6 |
7 | public static final char FLAG_PREFIX = '-';
8 | private final char character;
9 | @Nullable
10 | private final String value;
11 |
12 | public CommandFlag(char character) {
13 | this(character, null);
14 | }
15 |
16 | public CommandFlag(char character, @Nullable String value) {
17 | this.character = character;
18 | this.value = value;
19 | }
20 |
21 | public char getCharacter() {
22 | return character;
23 | }
24 |
25 | @Nullable
26 | public String getValue() {
27 | return value;
28 | }
29 |
30 | public String flagPrefixToString() {
31 | return String.valueOf(new char[]{FLAG_PREFIX, character});
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/command/DrinkAuthorizer.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.command;
2 |
3 | import lombok.Getter;
4 | import lombok.Setter;
5 | import org.bukkit.ChatColor;
6 | import org.bukkit.command.CommandSender;
7 |
8 | import javax.annotation.Nonnull;
9 |
10 | @Getter
11 | @Setter
12 | public class DrinkAuthorizer {
13 |
14 | private String noPermissionMessage = ChatColor.RED + "You do not have permission to perform this command.";
15 |
16 | public boolean isAuthorized(@Nonnull CommandSender sender, @Nonnull DrinkCommand command) {
17 | if (command.getPermission() != null && command.getPermission().length() > 0) {
18 | if (!sender.hasPermission(command.getPermission())) {
19 | sender.sendMessage(noPermissionMessage);
20 | return false;
21 | }
22 | }
23 | return true;
24 | }
25 |
26 | }
27 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/command/HelpFormatter.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.command;
2 |
3 | import org.bukkit.command.CommandSender;
4 |
5 | public interface HelpFormatter {
6 |
7 | void sendHelpFor(CommandSender sender, DrinkCommandContainer container);
8 | }
9 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/exception/CommandArgumentException.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.exception;
2 |
3 | public class CommandArgumentException extends Exception {
4 |
5 | public CommandArgumentException() {
6 | }
7 |
8 | public CommandArgumentException(String message) {
9 | super(message);
10 | }
11 |
12 | public CommandArgumentException(String message, Throwable cause) {
13 | super(message, cause);
14 | }
15 |
16 | public CommandArgumentException(Throwable cause) {
17 | super(cause);
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/exception/CommandExitMessage.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.exception;
2 |
3 | import org.bukkit.ChatColor;
4 | import org.bukkit.command.CommandSender;
5 |
6 | public class CommandExitMessage extends Exception {
7 |
8 | public CommandExitMessage(String message) {
9 | super(message);
10 | }
11 |
12 | public void print(CommandSender sender) {
13 | sender.sendMessage(ChatColor.RED + getMessage());
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/exception/CommandRegistrationException.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.exception;
2 |
3 | public class CommandRegistrationException extends RuntimeException {
4 |
5 | public CommandRegistrationException() {
6 | }
7 |
8 | public CommandRegistrationException(String message) {
9 | super(message);
10 | }
11 |
12 | public CommandRegistrationException(String message, Throwable cause) {
13 | super(message, cause);
14 | }
15 |
16 | public CommandRegistrationException(Throwable cause) {
17 | super(cause);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/exception/CommandStructureException.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.exception;
2 |
3 | public class CommandStructureException extends Exception {
4 |
5 | public CommandStructureException() {
6 | }
7 |
8 | public CommandStructureException(String message) {
9 | super(message);
10 | }
11 |
12 | public CommandStructureException(String message, Throwable cause) {
13 | super(message, cause);
14 | }
15 |
16 | public CommandStructureException(Throwable cause) {
17 | super(cause);
18 | }
19 |
20 | public CommandStructureException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
21 | super(message, cause, enableSuppression, writableStackTrace);
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/exception/DrinkException.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.exception;
2 |
3 | public class DrinkException extends RuntimeException {
4 |
5 | public DrinkException() {
6 | }
7 |
8 | public DrinkException(String message) {
9 | super(message);
10 | }
11 |
12 | public DrinkException(String message, Throwable cause) {
13 | super(message, cause);
14 | }
15 |
16 | public DrinkException(Throwable cause) {
17 | super(cause);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/exception/MissingProviderException.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.exception;
2 |
3 | public class MissingProviderException extends Exception {
4 |
5 | public MissingProviderException(String message) {
6 | super(message);
7 | }
8 |
9 | public MissingProviderException(String message, Throwable cause) {
10 | super(message, cause);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/modifier/DrinkModifier.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.modifier;
2 |
3 | import com.jonahseguin.drink.command.CommandExecution;
4 | import com.jonahseguin.drink.exception.CommandExitMessage;
5 | import com.jonahseguin.drink.parametric.CommandParameter;
6 |
7 | import javax.annotation.Nonnull;
8 | import javax.annotation.Nullable;
9 | import java.util.Optional;
10 |
11 | public interface DrinkModifier {
12 |
13 | Optional modify(@Nonnull CommandExecution execution, @Nonnull CommandParameter commandParameter, @Nullable T argument) throws CommandExitMessage;
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/modifier/ModifierContainer.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.modifier;
2 |
3 | import lombok.Getter;
4 |
5 | import javax.annotation.Nullable;
6 | import java.util.Set;
7 | import java.util.concurrent.ConcurrentHashMap;
8 | import java.util.concurrent.ConcurrentMap;
9 |
10 | @Getter
11 | public class ModifierContainer {
12 |
13 | private final ConcurrentMap, Set>> modifiers = new ConcurrentHashMap<>();
14 |
15 | @Nullable
16 | public Set> getModifiersFor(Class> type) {
17 | if (modifiers.containsKey(type)) {
18 | return modifiers.get(type);
19 | }
20 | for (Class> modifierType : modifiers.keySet()) {
21 | if (modifierType.isAssignableFrom(type) || type.isAssignableFrom(modifierType)) {
22 | return modifiers.get(modifierType);
23 | }
24 | }
25 | return null;
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/parametric/BindingContainer.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.parametric;
2 |
3 | import lombok.Getter;
4 |
5 | import java.util.HashSet;
6 | import java.util.Set;
7 |
8 | @Getter
9 | public class BindingContainer {
10 |
11 | private final Class type;
12 | private final Set> bindings;
13 |
14 | public BindingContainer(Class type) {
15 | this.type = type;
16 | this.bindings = new HashSet<>();
17 | }
18 |
19 | public BindingContainer(Class type, Set> bindings) {
20 | this.type = type;
21 | this.bindings = bindings;
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/provider/CommandArgsProvider.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.provider;
2 |
3 | import com.jonahseguin.drink.argument.CommandArg;
4 | import com.jonahseguin.drink.argument.CommandArgs;
5 | import com.jonahseguin.drink.exception.CommandExitMessage;
6 | import com.jonahseguin.drink.parametric.DrinkProvider;
7 |
8 | import javax.annotation.Nonnull;
9 | import javax.annotation.Nullable;
10 | import java.lang.annotation.Annotation;
11 | import java.util.List;
12 |
13 | public class CommandArgsProvider extends DrinkProvider {
14 |
15 | public static final CommandArgsProvider INSTANCE = new CommandArgsProvider();
16 |
17 | @Override
18 | public boolean doesConsumeArgument() {
19 | return false;
20 | }
21 |
22 | @Override
23 | public boolean isAsync() {
24 | return false;
25 | }
26 |
27 | @Nullable
28 | @Override
29 | public CommandArgs provide(@Nonnull CommandArg arg, @Nonnull List extends Annotation> annotations) throws CommandExitMessage {
30 | return arg.getArgs();
31 | }
32 |
33 | @Override
34 | public String argumentDescription() {
35 | return "args";
36 | }
37 |
38 | }
39 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/provider/InstanceProvider.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.provider;
2 |
3 | import com.jonahseguin.drink.argument.CommandArg;
4 | import com.jonahseguin.drink.exception.CommandExitMessage;
5 | import com.jonahseguin.drink.parametric.DrinkProvider;
6 |
7 | import javax.annotation.Nonnull;
8 | import java.lang.annotation.Annotation;
9 | import java.util.List;
10 |
11 | public class InstanceProvider extends DrinkProvider {
12 |
13 | private final T instance;
14 |
15 | public InstanceProvider(T instance) {
16 | this.instance = instance;
17 | }
18 |
19 | @Override
20 | public boolean doesConsumeArgument() {
21 | return false;
22 | }
23 |
24 | @Override
25 | public boolean isAsync() {
26 | return false;
27 | }
28 |
29 | @Override
30 | public T provide(@Nonnull CommandArg arg, @Nonnull List extends Annotation> annotations) throws CommandExitMessage {
31 | return instance;
32 | }
33 |
34 | @Override
35 | public String argumentDescription() {
36 | return instance.getClass().getSimpleName() + " (provided)";
37 | }
38 |
39 | }
40 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/provider/StringProvider.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.provider;
2 |
3 | import com.jonahseguin.drink.argument.CommandArg;
4 | import com.jonahseguin.drink.exception.CommandExitMessage;
5 | import com.jonahseguin.drink.parametric.DrinkProvider;
6 |
7 | import javax.annotation.Nonnull;
8 | import javax.annotation.Nullable;
9 | import java.lang.annotation.Annotation;
10 | import java.util.List;
11 |
12 | public class StringProvider extends DrinkProvider {
13 |
14 | public static final StringProvider INSTANCE = new StringProvider();
15 |
16 | @Override
17 | public boolean doesConsumeArgument() {
18 | return true;
19 | }
20 |
21 | @Override
22 | public boolean isAsync() {
23 | return false;
24 | }
25 |
26 | @Override
27 | public boolean allowNullArgument() {
28 | return true;
29 | }
30 |
31 | @Nullable
32 | @Override
33 | public String defaultNullValue() {
34 | return null;
35 | }
36 |
37 | @Override
38 | public String provide(@Nonnull CommandArg arg, @Nonnull List extends Annotation> annotations) throws CommandExitMessage {
39 | return arg.get();
40 | }
41 |
42 | @Override
43 | public String argumentDescription() {
44 | return "string";
45 | }
46 |
47 | }
48 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/provider/TextProvider.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.provider;
2 |
3 | import com.jonahseguin.drink.argument.CommandArg;
4 | import com.jonahseguin.drink.exception.CommandExitMessage;
5 | import com.jonahseguin.drink.parametric.DrinkProvider;
6 |
7 | import javax.annotation.Nonnull;
8 | import javax.annotation.Nullable;
9 | import java.lang.annotation.Annotation;
10 | import java.util.List;
11 |
12 | public class TextProvider extends DrinkProvider {
13 |
14 | public static final TextProvider INSTANCE = new TextProvider();
15 |
16 | @Override
17 | public boolean doesConsumeArgument() {
18 | return true;
19 | }
20 |
21 | @Override
22 | public boolean allowNullArgument() {
23 | return false;
24 | }
25 |
26 | @Override
27 | public boolean isAsync() {
28 | return false;
29 | }
30 |
31 | @Nullable
32 | @Override
33 | public String provide(@Nonnull CommandArg arg, @Nonnull List extends Annotation> annotations) throws CommandExitMessage {
34 | StringBuilder builder = new StringBuilder(arg.get());
35 | while (arg.getArgs().hasNext()) {
36 | builder.append(" ").append(arg.getArgs().next());
37 | }
38 | return builder.toString();
39 | }
40 |
41 | @Override
42 | public String argumentDescription() {
43 | return "text";
44 | }
45 |
46 | }
47 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/provider/spigot/ConsoleCommandSenderProvider.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.provider.spigot;
2 |
3 | import com.jonahseguin.drink.argument.CommandArg;
4 | import com.jonahseguin.drink.exception.CommandExitMessage;
5 | import com.jonahseguin.drink.parametric.DrinkProvider;
6 | import org.bukkit.command.ConsoleCommandSender;
7 |
8 | import javax.annotation.Nonnull;
9 | import javax.annotation.Nullable;
10 | import java.lang.annotation.Annotation;
11 | import java.util.List;
12 |
13 | public class ConsoleCommandSenderProvider extends DrinkProvider {
14 | public static final ConsoleCommandSenderProvider INSTANCE = new ConsoleCommandSenderProvider();
15 |
16 | @Override
17 | public boolean doesConsumeArgument() {
18 | return false;
19 | }
20 |
21 | @Override
22 | public boolean isAsync() {
23 | return false;
24 | }
25 |
26 | @Nullable
27 | @Override
28 | public ConsoleCommandSender provide(@Nonnull CommandArg arg, @Nonnull List extends Annotation> annotations) throws CommandExitMessage {
29 | if (arg.isSenderPlayer()) {
30 | throw new CommandExitMessage("This is a console-only command.");
31 | }
32 |
33 | return null;
34 | }
35 |
36 | @Override
37 | public String argumentDescription() {
38 | return "console sender";
39 | }
40 |
41 | }
42 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/com/jonahseguin/drink/provider/spigot/PlayerSenderProvider.java:
--------------------------------------------------------------------------------
1 | package com.jonahseguin.drink.provider.spigot;
2 |
3 | import com.jonahseguin.drink.argument.CommandArg;
4 | import com.jonahseguin.drink.exception.CommandExitMessage;
5 | import com.jonahseguin.drink.parametric.DrinkProvider;
6 | import org.bukkit.entity.Player;
7 |
8 | import javax.annotation.Nonnull;
9 | import javax.annotation.Nullable;
10 | import java.lang.annotation.Annotation;
11 | import java.util.List;
12 |
13 | public class PlayerSenderProvider extends DrinkProvider {
14 |
15 | public static final PlayerSenderProvider INSTANCE = new PlayerSenderProvider();
16 |
17 | @Override
18 | public boolean doesConsumeArgument() {
19 | return false;
20 | }
21 |
22 | @Override
23 | public boolean isAsync() {
24 | return false;
25 | }
26 |
27 | @Override
28 | @Nullable
29 | public Player provide(@Nonnull CommandArg arg, @Nonnull List extends Annotation> annotations) throws CommandExitMessage {
30 | if (arg.isSenderPlayer()) {
31 | return arg.getSenderAsPlayer();
32 | }
33 | throw new CommandExitMessage("This is a player-only command.");
34 | }
35 |
36 | @Override
37 | public String argumentDescription() {
38 | return "player sender";
39 | }
40 |
41 | }
42 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/dev/lrxh/neptune/API.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.neptune;
2 |
3 | import dev.lrxh.neptune.profile.ProfileService;
4 | import dev.lrxh.neptune.profile.impl.Profile;
5 | import org.bukkit.OfflinePlayer;
6 | import org.bukkit.entity.Player;
7 |
8 | import java.util.UUID;
9 |
10 | public class API {
11 |
12 | public static Profile getProfile(UUID playerUUID) {
13 | return ProfileService.get().getByUUID(playerUUID);
14 | }
15 |
16 | public static Profile getProfile(Player player) {
17 | return ProfileService.get().getByUUID(player.getUniqueId());
18 | }
19 |
20 | public static Profile getProfile(OfflinePlayer player) {
21 | return getProfile(player.getUniqueId());
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/dev/lrxh/neptune/cache/Cache.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.neptune.cache;
2 |
3 | import dev.lrxh.neptune.configs.impl.SettingsLocale;
4 | import dev.lrxh.neptune.utils.LocationUtil;
5 | import lombok.Getter;
6 | import lombok.Setter;
7 | import org.bukkit.Location;
8 |
9 |
10 | @Getter
11 | @Setter
12 | public class Cache {
13 | private Location spawn;
14 |
15 | public Cache() {
16 | load();
17 | }
18 |
19 | public void setSpawn(Location location) {
20 | spawn = location;
21 | save();
22 | }
23 |
24 | public void load() {
25 | spawn = LocationUtil.deserialize(SettingsLocale.SPAWN_LOCATION.getString());
26 | }
27 |
28 | public void save() {
29 | SettingsLocale.SPAWN_LOCATION.set(LocationUtil.serialize(spawn));
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/dev/lrxh/neptune/configs/impl/handler/DataType.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.neptune.configs.impl.handler;
2 |
3 | public enum DataType {
4 | BOOLEAN,
5 | STRING,
6 | STRING_LIST,
7 | INT
8 | }
9 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/command/CosmeticsCommand.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.neptune.feature.cosmetics.command;
2 |
3 | import com.jonahseguin.drink.annotation.Command;
4 | import com.jonahseguin.drink.annotation.Sender;
5 | import dev.lrxh.neptune.feature.cosmetics.menu.CosmeticsManageMenu;
6 | import dev.lrxh.neptune.feature.cosmetics.menu.killEffects.KillEffectsMenu;
7 | import dev.lrxh.neptune.feature.cosmetics.menu.killMessages.KillMessagesMenu;
8 | import org.bukkit.entity.Player;
9 |
10 | public class CosmeticsCommand {
11 |
12 | @Command(name = "", desc = "")
13 | public void cosmeticsMenu(@Sender Player player) {
14 | new CosmeticsManageMenu().open(player);
15 | }
16 |
17 | @Command(name = "killEffects", desc = "")
18 | public void killEffects(@Sender Player player) {
19 | new KillEffectsMenu().open(player);
20 | }
21 |
22 | @Command(name = "killMessages", desc = "")
23 | public void killMessages(@Sender Player player) {
24 | new KillMessagesMenu().open(player);
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/impl/KillMessagePackage.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.neptune.feature.cosmetics.impl;
2 |
3 | import dev.lrxh.api.features.IKillMessagePackage;
4 | import dev.lrxh.neptune.utils.RandomUtils;
5 | import lombok.AllArgsConstructor;
6 | import lombok.Getter;
7 | import org.bukkit.Material;
8 |
9 | import java.util.List;
10 |
11 | @Getter
12 | @AllArgsConstructor
13 | public class KillMessagePackage implements IKillMessagePackage {
14 | private String name;
15 | private String displayName;
16 | private Material material;
17 | private List description;
18 | private int slot;
19 | private List messages;
20 |
21 | public String getRandomMessage() {
22 | return messages.get(RandomUtils.getRandInt(messages.size()));
23 | }
24 |
25 | public String permission() {
26 | return "neptune.cosmetics.killmessages." + name.toLowerCase();
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/Plugin/src/main/java/dev/lrxh/neptune/feature/cosmetics/menu/killEffects/KillEffectsMenu.java:
--------------------------------------------------------------------------------
1 | package dev.lrxh.neptune.feature.cosmetics.menu.killEffects;
2 |
3 | import dev.lrxh.neptune.configs.impl.MenusLocale;
4 | import dev.lrxh.neptune.feature.cosmetics.impl.KillEffect;
5 | import dev.lrxh.neptune.utils.menu.Button;
6 | import dev.lrxh.neptune.utils.menu.Filter;
7 | import dev.lrxh.neptune.utils.menu.Menu;
8 | import org.bukkit.entity.Player;
9 |
10 | import java.util.ArrayList;
11 | import java.util.List;
12 |
13 | public class KillEffectsMenu extends Menu {
14 | public KillEffectsMenu() {
15 | super(MenusLocale.KILL_EFFECTS_TITLE.getString(), MenusLocale.KILL_EFFECTS_SIZE.getInt(), Filter.valueOf(MenusLocale.KILL_EFFECTS_FILTER.getString()), true);
16 | }
17 |
18 | @Override
19 | public List