├── .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 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 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 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 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 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 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