├── .github ├── CODEOWNERS ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.yml │ ├── feature_request.yml │ └── question.yml ├── PULL_REQUEST_TEMPLATE.md ├── dependabot.yml └── workflows │ ├── closelabel.yml │ ├── codeql-analysis.yml │ ├── maven.yml │ └── qodana-analysis.yml ├── .gitignore ├── CODE_OF_CONDUCT.md ├── KPMAlias ├── pom.xml └── src │ └── main │ └── java │ └── org │ └── kunlab │ └── kpm │ └── alias │ ├── AliasImpl.java │ ├── AliasProviderImpl.java │ ├── AliasSourceImpl.java │ └── AliasUpdaterImpl.java ├── KPMCommon ├── pom.xml └── src │ └── main │ └── java │ └── org │ └── kunlab │ └── kpm │ ├── DebugConstants.java │ ├── ExceptionHandler.java │ ├── TokenStore.java │ ├── db │ ├── ResultRow.java │ └── Transaction.java │ ├── http │ ├── DownloadProgress.java │ ├── HTTPResponse.java │ ├── RequestContext.java │ ├── RequestMethod.java │ ├── Requests.java │ └── StatusCode.java │ ├── signal │ ├── Signal.java │ ├── SignalHandleManager.java │ ├── SignalHandler.java │ └── SignalHandlerList.java │ ├── utils │ ├── APIUtils.java │ ├── PluginUtil.java │ └── ReflectionUtils.java │ └── versioning │ ├── InvalidVersionSyntaxException.java │ ├── Version.java │ ├── VersionComparator.java │ └── VersionElement.java ├── KPMDaemon ├── pom.xml └── src │ └── main │ └── java │ └── org │ └── kunlab │ └── kpm │ ├── BasicExceptionHandler.java │ ├── KPMDaemon.java │ └── KPMEnvironmentImpl.java ├── KPMHooks ├── pom.xml └── src │ └── main │ └── java │ └── org │ └── kunlab │ └── kpm │ └── hook │ ├── HookExecutorImpl.java │ ├── HookRecipientListImpl.java │ ├── KPMHookRecipientBase.java │ └── hooks │ ├── PluginInstalledHook.java │ ├── PluginUninstallHook.java │ └── RecipesUnregisteringHook.java ├── KPMInfo ├── pom.xml └── src │ └── main │ └── java │ └── org │ └── kunlab │ └── kpm │ └── kpminfo │ ├── KPMInfoManagerImpl.java │ ├── KPMInfoParser.java │ └── KPMInformationFileImpl.java ├── KPMMeta ├── pom.xml └── src │ └── main │ └── java │ └── org │ └── kunlab │ └── kpm │ └── meta │ ├── DependencyNodeImpl.java │ ├── MetaSQLUtil.java │ ├── PluginMetaImpl.java │ ├── PluginMetaIteratorImpl.java │ ├── PluginMetaManagerImpl.java │ └── PluginMetaProviderImpl.java ├── KPMModels ├── pom.xml └── src │ └── main │ └── java │ └── org │ └── kunlab │ └── kpm │ ├── alias │ ├── AliasSourceType.java │ └── interfaces │ │ ├── Alias.java │ │ ├── AliasProvider.java │ │ ├── AliasSource.java │ │ └── AliasUpdater.java │ ├── hook │ ├── HookListener.java │ └── interfaces │ │ ├── HookExecutor.java │ │ ├── HookRecipientList.java │ │ ├── KPMHook.java │ │ └── KPMHookRecipient.java │ ├── installer │ ├── interfaces │ │ ├── InstallManager.java │ │ ├── InstallProgress.java │ │ ├── InstallResult.java │ │ ├── Installer.java │ │ ├── InstallerArgument.java │ │ └── loader │ │ │ └── PluginLoader.java │ └── signals │ │ ├── InstallFinishedSignal.java │ │ ├── InvalidKPMInfoFileSignal.java │ │ ├── PluginModifiedSignal.java │ │ └── assertion │ │ └── IgnoredPluginSignal.java │ ├── interfaces │ ├── KPMEnvironment.java │ └── KPMRegistry.java │ ├── kpminfo │ ├── InvalidInformationFileException.java │ ├── KPMInformationFile.java │ └── interfaces │ │ └── KPMInfoManager.java │ ├── meta │ ├── DependType.java │ ├── InstallOperator.java │ └── interfaces │ │ ├── DependencyNode.java │ │ ├── PluginMeta.java │ │ ├── PluginMetaIterator.java │ │ ├── PluginMetaManager.java │ │ └── PluginMetaProvider.java │ ├── pluginloader │ └── PluginLoadResult.java │ ├── resolver │ ├── ErrorCause.java │ └── interfaces │ │ ├── BaseResolver.java │ │ ├── PluginResolver.java │ │ ├── QueryContext.java │ │ ├── URLResolver.java │ │ └── result │ │ ├── ErrorResult.java │ │ ├── MarketplaceResult.java │ │ ├── MultiResult.java │ │ ├── ResolveResult.java │ │ ├── SuccessResult.java │ │ └── VersionedResult.java │ ├── task │ └── interfaces │ │ ├── CommandsPatcher.java │ │ ├── InstallTask.java │ │ ├── TaskArgument.java │ │ ├── TaskResult.java │ │ └── dependencies │ │ ├── DependencyElement.java │ │ └── collector │ │ └── DependsCollectStatus.java │ └── utils │ └── interfaces │ └── ServerConditionChecker.java ├── KPMPlugin ├── pom.xml └── src │ └── main │ ├── java │ └── org │ │ └── kunlab │ │ └── kpm │ │ ├── HeadInstallers.java │ │ ├── Notices.java │ │ ├── TeamKunPluginManager.java │ │ ├── Utils.java │ │ ├── commands │ │ ├── CommandAutoRemove.java │ │ ├── CommandClean.java │ │ ├── CommandDebug.java │ │ ├── CommandInfo.java │ │ ├── CommandInstall.java │ │ ├── CommandRegister.java │ │ ├── CommandResolve.java │ │ ├── CommandUninstall.java │ │ ├── CommandUpdate.java │ │ ├── CommandUpgrade.java │ │ ├── CommandUpgradeKPM.java │ │ ├── CommandVersion.java │ │ ├── PluginInfoWriter.java │ │ ├── ResolveResultWriter.java │ │ └── debug │ │ │ ├── CommandDepTreeDebug.java │ │ │ ├── CommandInstallDebug.java │ │ │ ├── CommandUninstallDebug.java │ │ │ ├── DebugSignalHandler.java │ │ │ └── deptree │ │ │ ├── CommandMarkAsDependency.java │ │ │ ├── CommandPurge.java │ │ │ ├── CommandRelation.java │ │ │ └── DependencyNodeMock.java │ │ ├── signal │ │ ├── HeadSignalHandlers.java │ │ ├── SignalHandlingUtils.java │ │ └── handlers │ │ │ ├── autoremove │ │ │ ├── AutoRemoveFinishedSignalHandler.java │ │ │ └── AutoRemoveReadySignalHandler.java │ │ │ ├── clean │ │ │ ├── GarbageCleanFinishedSignalHandler.java │ │ │ └── GarbageCleanSignalHandler.java │ │ │ ├── common │ │ │ ├── CheckEnvSignalHandler.java │ │ │ ├── DownloadingSignalHandler.java │ │ │ ├── InstallFinishedSignalBase.java │ │ │ └── ModifySignalHandler.java │ │ │ ├── intall │ │ │ ├── DependenciesSignalHandler.java │ │ │ ├── InstallFinishedSignalHandler.java │ │ │ ├── InstallerSignalHandler.java │ │ │ └── ResolverSignalHandler.java │ │ │ ├── kpmupgrade │ │ │ └── KPMUpgradeSignalHandler.java │ │ │ ├── register │ │ │ ├── TokenGenerateSignalHandler.java │ │ │ └── TokenRegisterSignalHandler.java │ │ │ ├── uninstall │ │ │ ├── PluginIsDependencySignalHandler.java │ │ │ ├── UninstallFinishedSignalHandler.java │ │ │ ├── UninstallReadySignalHandler.java │ │ │ └── UninstallerSignalHandler.java │ │ │ ├── update │ │ │ └── UpdateAliasesSignalHandler.java │ │ │ └── upgrade │ │ │ ├── UpgradeFinishedSignalHandler.java │ │ │ └── UpgradeSignalHandler.java │ │ ├── upgrader │ │ ├── KPMFetcher.java │ │ ├── KPMUpgrader.java │ │ └── signals │ │ │ ├── AlreadyUpgradingSignal.java │ │ │ ├── KPMUpgradeReadySignal.java │ │ │ ├── LatestFetchSignal.java │ │ │ └── UpgraderDeploySignal.java │ │ └── utils │ │ ├── TerminalWriter.java │ │ └── Utils.java │ └── resources │ ├── config.yml │ ├── lang │ ├── en_US.lang │ ├── ja_JP.lang │ └── ja_KS.lang │ ├── plugin.yml │ └── versions.properties ├── KPMPluginInstaller ├── pom.xml └── src │ └── main │ └── java │ └── org │ └── kunlab │ └── kpm │ └── installer │ ├── AbstractInstaller.java │ ├── InstallFailedInstallResult.java │ ├── InstallManagerImpl.java │ ├── InstallProgressImpl.java │ ├── InstallResultImpl.java │ ├── exceptions │ ├── InstallerRunningException.java │ └── TokenNotAvailableException.java │ └── impls │ ├── autoremove │ ├── AutoRemoveArgument.java │ ├── AutoRemoveErrorCause.java │ ├── AutoRemoveSucceedResult.java │ ├── AutoRemoveTasks.java │ ├── PluginAutoRemover.java │ └── signals │ │ ├── PluginEnumeratedSignal.java │ │ └── PluginUninstallFailedSignal.java │ ├── clean │ ├── CleanArgument.java │ ├── CleanErrorCause.java │ ├── CleanTasks.java │ ├── GarbageCleanSucceedResult.java │ └── GarbageCleaner.java │ ├── install │ ├── InstallArgument.java │ ├── InstallErrorCause.java │ ├── InstallTasks.java │ ├── PluginInstaller.java │ └── signals │ │ └── AlreadyInstalledPluginSignal.java │ ├── register │ ├── RegisterArgument.java │ ├── RegisterErrorCause.java │ ├── RegisterTasks.java │ ├── TokenRegisterer.java │ ├── pojos │ │ ├── UserVerificationCodeResponse.java │ │ └── VerificationSubmitPollingResponse.java │ └── signals │ │ ├── TokenCheckingSignal.java │ │ ├── TokenGenerateStartingSignal.java │ │ ├── TokenStoredSignal.java │ │ ├── UserDoesntCompleteVerifySignal.java │ │ ├── UserVerificationSuccessSignal.java │ │ ├── UserVerifyDeniedSignal.java │ │ ├── VerificationCodeExpiredSignal.java │ │ ├── VerificationCodeReceivedSignal.java │ │ ├── VerificationCodeRequestFailedSignal.java │ │ └── VerificationCodeRequestingSignal.java │ ├── uninstall │ ├── PluginUninstallSucceedResult.java │ ├── PluginUninstaller.java │ ├── UnInstallErrorCause.java │ ├── UnInstallTasks.java │ ├── UninstallArgument.java │ └── signals │ │ ├── SearchingPluginSignal.java │ │ └── UninstallReadySignal.java │ ├── update │ ├── AliasUpdater.java │ ├── UpdateArgument.java │ ├── UpdateErrorCause.java │ ├── UpdateTasks.java │ └── signals │ │ └── UpdateFinishedSignal.java │ └── upgrade │ ├── PluginUpgrader.java │ ├── UpgradeArgument.java │ ├── UpgradeErrorCause.java │ ├── UpgradeTasks.java │ └── signals │ ├── InstallFailedSignal.java │ ├── InvalidPluginVersionSignal.java │ ├── PluginNotFoundSignal.java │ ├── ResolveFailedSignal.java │ ├── UpdateQueryRetrievedSignal.java │ └── UpgradeReadySignal.java ├── KPMResolver ├── pom.xml └── src │ └── main │ └── java │ └── org │ └── kunlab │ └── kpm │ └── resolver │ ├── PluginResolverImpl.java │ ├── QueryContextImpl.java │ ├── QueryContextParser.java │ ├── impl │ ├── AliasPluginResolver.java │ ├── CurseBukkitResolver.java │ ├── CurseBukkitSuccessResult.java │ ├── GitHubSuccessResult.java │ ├── RawURLResolver.java │ ├── SpigotMCResolver.java │ ├── SpigotMCSuccessResult.java │ └── github │ │ ├── BruteforceGitHubResolver.java │ │ ├── GHURLParseResult.java │ │ ├── GHURLParser.java │ │ ├── GitHubURLResolver.java │ │ └── OmittedGitHubResolver.java │ ├── result │ ├── AbstractSuccessResult.java │ ├── ErrorResultImpl.java │ ├── MultiResultImpl.java │ └── PipeResult.java │ └── utils │ └── URLResolveUtil.java ├── KPMTasks ├── pom.xml └── src │ └── main │ └── java │ └── org │ └── kunlab │ └── kpm │ └── task │ ├── AbstractInstallTask.java │ ├── AbstractTaskResult.java │ ├── TaskChain.java │ ├── TaskFailedException.java │ ├── loader │ ├── CommandsPatcherBridge.java │ └── PluginLoaderImpl.java │ └── tasks │ ├── alias │ ├── source │ │ └── download │ │ │ ├── SourceDownloadArgument.java │ │ │ ├── SourceDownloadErrorCause.java │ │ │ ├── SourceDownloadResult.java │ │ │ ├── SourceDownloadState.java │ │ │ ├── SourceDownloadTask.java │ │ │ └── signals │ │ │ ├── InvalidRemoteSignal.java │ │ │ ├── MalformedURLSignal.java │ │ │ ├── SourceDownloadFailedSignal.java │ │ │ └── UnsupportedProtocolSignal.java │ └── update │ │ ├── UpdateAliasesArgument.java │ │ ├── UpdateAliasesErrorCause.java │ │ ├── UpdateAliasesResult.java │ │ ├── UpdateAliasesState.java │ │ ├── UpdateAliasesTask.java │ │ └── signals │ │ ├── AliasUpdateSignal.java │ │ ├── InvalidSourceSignal.java │ │ ├── SourcePreparedSignal.java │ │ └── SourceSignal.java │ ├── dependencies │ ├── DependencyElementImpl.java │ ├── collector │ │ ├── DependsCollectArgument.java │ │ ├── DependsCollectErrorCause.java │ │ ├── DependsCollectResult.java │ │ ├── DependsCollectState.java │ │ ├── DependsCollectStatusImpl.java │ │ ├── DependsCollectTask.java │ │ └── signals │ │ │ ├── DependencyCollectDependencysDependsFailedSignal.java │ │ │ ├── DependencyCollectFailedSignalBase.java │ │ │ ├── DependencyDownloadFailedSignal.java │ │ │ ├── DependencyLoadDescriptionFailedSignal.java │ │ │ ├── DependencyNameMismatchSignal.java │ │ │ ├── DependencyResolveFailedSignal.java │ │ │ ├── DependsCollectFailedSignal.java │ │ │ ├── DependsDownloadFinishedSignal.java │ │ │ └── DependsEnumeratedSignal.java │ └── computer │ │ ├── DependsComputeOrderArgument.java │ │ ├── DependsComputeOrderErrorCause.java │ │ ├── DependsComputeOrderResult.java │ │ ├── DependsComputeOrderState.java │ │ ├── DependsComputeOrderTask.java │ │ └── signals │ │ └── DependsLoadOrderComputingSignal.java │ ├── description │ ├── DescriptionLoadArgument.java │ ├── DescriptionLoadErrorCause.java │ ├── DescriptionLoadResult.java │ ├── DescriptionLoadState.java │ ├── DescriptionLoadTask.java │ └── signals │ │ └── LoadPluginDescriptionSignal.java │ ├── download │ ├── DownloadArgument.java │ ├── DownloadErrorCause.java │ ├── DownloadResult.java │ ├── DownloadState.java │ ├── DownloadTask.java │ └── signals │ │ ├── DownloadErrorSignal.java │ │ ├── DownloadProgressSignal.java │ │ ├── DownloadSignal.java │ │ ├── DownloadStartingSignal.java │ │ └── DownloadSucceedSignal.java │ ├── garbage │ ├── clean │ │ ├── GarbageCleanArgument.java │ │ ├── GarbageCleanErrorCause.java │ │ ├── GarbageCleanResult.java │ │ ├── GarbageCleanState.java │ │ ├── GarbageCleanTask.java │ │ └── signal │ │ │ ├── GarbageDeleteSkippedSignal.java │ │ │ ├── GarbageDeletingSignal.java │ │ │ ├── GarbageEnumeratedSignal.java │ │ │ └── InvalidIntegritySignal.java │ └── search │ │ ├── GarbageSearchArgument.java │ │ ├── GarbageSearchErrorCause.java │ │ ├── GarbageSearchResult.java │ │ ├── GarbageSearchState.java │ │ ├── GarbageSearchTask.java │ │ └── signals │ │ └── GarbageSearchingSignal.java │ ├── install │ ├── PluginsInstallArgument.java │ ├── PluginsInstallErrorCause.java │ ├── PluginsInstallResult.java │ ├── PluginsInstallState.java │ ├── PluginsInstallTask.java │ └── signals │ │ ├── PluginEnablingSignal.java │ │ ├── PluginIncompatibleWithKPMSignal.java │ │ ├── PluginInstallingSignal.java │ │ ├── PluginLoadSignal.java │ │ ├── PluginOnLoadRunningSignal.java │ │ └── PluginRelocatingSignal.java │ ├── lookup │ ├── LookupArgument.java │ ├── LookupErrorCause.java │ ├── LookupResult.java │ ├── LookupState.java │ └── PluginLookupTask.java │ ├── resolve │ ├── PluginResolveArgument.java │ ├── PluginResolveErrorCause.java │ ├── PluginResolveResult.java │ ├── PluginResolveState.java │ ├── PluginResolveTask.java │ └── signals │ │ ├── MultiplePluginResolvedSignal.java │ │ ├── PluginResolveErrorSignal.java │ │ ├── PluginResolvedSuccessfulSignal.java │ │ └── PluginResolvingSignal.java │ └── uninstall │ ├── UnInstallResult.java │ ├── UnInstallTask.java │ ├── UninstallArgument.java │ ├── UninstallErrorCause.java │ ├── UninstallState.java │ └── signals │ ├── PluginDisablingSignal.java │ ├── PluginIsDependencySignal.java │ ├── PluginRegisteredRecipeSignal.java │ ├── PluginUninstallErrorSignal.java │ ├── PluginUninstallingSignal.java │ ├── PluginUnloadingSignal.java │ └── StartingGCSignal.java ├── LICENSE ├── README.md ├── images ├── clean.png ├── pl-info.png ├── pl-install.png └── pl-upgrade.png ├── kpm-info.json ├── nms_v1_16 ├── pom.xml └── src │ └── main │ └── java │ └── org │ └── kunlab │ └── kpm │ └── nms │ └── v1_16 │ ├── task │ └── CommandsPatcherImpl.java │ └── utils │ └── ServerConditionCheckerImpl.java ├── nms_v1_19 ├── pom.xml └── src │ └── main │ └── java │ └── org │ └── kunlab │ └── kpm │ └── nms │ └── v1_19 │ ├── task │ └── CommandsPatcherImpl.java │ └── utils │ └── ServerConditionCheckerImpl.java ├── pom.xml └── qodana.yaml /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @PeyaPeyaPeyang 2 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: PeyaPeyaPeyang 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question.yml: -------------------------------------------------------------------------------- 1 | name: KPMに関する質問 2 | description: なにか質問がある場合はこちら 3 | title: "【質問】" 4 | labels: ["Type: Question"] 5 | assignees: ["peyang-Celeron"] 6 | body: 7 | - type: markdown 8 | attributes: 9 | value: | 10 | TeamKUNPluginManager でなにか分からないことがあります?以下のフォームを記入し提出してください! 11 | - type: textarea 12 | id: description 13 | attributes: 14 | label: "詳細" 15 | description: "質問の詳細について明確で簡潔な説明を記入してください。" 16 | validations: 17 | required: true 18 | - type: input 19 | id: kpm_version 20 | attributes: 21 | label: "TeamKUNPluginManager のバージョン" 22 | description: "現在使用している TeamKUNPluginManager のバージョンを記入してください。" 23 | validations: 24 | required: true 25 | - type: input 26 | id: server_description 27 | attributes: 28 | label: "サーバーの詳細" 29 | description: "/version コマンドで取得できるサーバーの詳細を**正確に**記入してください。" 30 | validations: 31 | required: true 32 | - type: textarea 33 | id: other 34 | attributes: 35 | label: "その他" 36 | description: | 37 | ログ、スクリーンショット等その他お好きなように添付してください。 38 | このエリアに画像をドラッグ&ドロップすることでも添付できます。 39 | validations: 40 | required: false 41 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 10 | 11 | 15 | 16 | ## (Required) 対応するIssue番号 17 | 18 | - Close # 19 | 20 | 23 | 24 | ## (Required) 変更内容と理由 25 | 26 | 34 | 35 | 38 | 39 | ## (Required) チェックリスト 40 | 41 | - [ ] (Optional) 破壊的な変更をもたらしますか? 42 | 45 | - [ ] これらの変更をテストしましたか? 46 | - [ ] ドキュメントを更新しましたか? 47 | 48 | 51 | 52 | ## (Optional) 確認/検証事項 53 | 54 | 57 | 58 | ## (Optional) その他 59 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | 3 | updates: 4 | - package-ecosystem: maven 5 | directory: "/" 6 | schedule: 7 | interval: daily 8 | time: "20:00" 9 | open-pull-requests-limit: 10 10 | target-branch: develop 11 | -------------------------------------------------------------------------------- /.github/workflows/maven.yml: -------------------------------------------------------------------------------- 1 | # This workflow will build a Java project with Maven 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven 3 | 4 | name: Java CI with Maven 5 | 6 | on: 7 | push: 8 | branches: [develop, stable] 9 | pull_request: 10 | branches: [develop, stable] 11 | 12 | jobs: 13 | build: 14 | runs-on: ubuntu-latest 15 | steps: 16 | - uses: actions/checkout@v3 17 | - name: Set up JDK 17 18 | id: sj 19 | uses: actions/setup-java@v3 20 | with: 21 | distribution: "zulu" 22 | java-version: 17 23 | cache: maven 24 | - uses: PeyaPeyaPeyang/nmsaction@v3 25 | if: "steps.sj.outputs.cache-hit != 'true'" 26 | with: 27 | rev: 1.16.5 28 | - uses: PeyaPeyaPeyang/nmsaction@v3 29 | if: "steps.sj.outputs.cache-hit != 'true'" 30 | with: 31 | rev: 1.19 32 | - name: Install nms into m2 33 | if: "steps.sj.outputs.cache-hit != 'true'" 34 | run: | 35 | mkdir -p $HOME/.m2/repository 36 | cp -a nms-build/.m2/repository/. $HOME/.m2/repository 37 | - uses: actions/cache@v1 38 | with: 39 | path: ~/.m2/repository 40 | key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} 41 | restore-keys: | 42 | ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} 43 | - name: Build with Maven 44 | run: mvn -B package --file pom.xml 45 | 46 | -------------------------------------------------------------------------------- /.github/workflows/qodana-analysis.yml: -------------------------------------------------------------------------------- 1 | name: Qodana 2 | on: 3 | workflow_dispatch: 4 | pull_request: 5 | push: 6 | branches: 7 | - stable 8 | - develop 9 | 10 | jobs: 11 | qodana: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v3 15 | with: 16 | fetch-depth: 0 17 | - name: 'Qodana Scan' 18 | uses: JetBrains/qodana-action@main 19 | env: 20 | QODANA_TOKEN: ${{ secrets.QODANA_TOKEN }} 21 | -------------------------------------------------------------------------------- /KPMAlias/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | org.kunlab.kpm 8 | TeamKunPluginManager 9 | 3.1.0 10 | ../pom.xml 11 | 12 | 13 | KPMAlias 14 | 15 | 16 | 8 17 | 8 18 | UTF-8 19 | 20 | 21 | 22 | 23 | org.kunlab.kpm 24 | KPMCommon 25 | 3.1.0 26 | provided 27 | 28 | 29 | org.kunlab.kpm 30 | KPMModels 31 | 3.1.0 32 | provided 33 | 34 | 35 | org.kunlab.kpm 36 | KPMResolver 37 | 3.1.0 38 | provided 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /KPMAlias/src/main/java/org/kunlab/kpm/alias/AliasImpl.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.alias; 2 | 3 | import lombok.Value; 4 | import org.jetbrains.annotations.NotNull; 5 | import org.kunlab.kpm.alias.interfaces.Alias; 6 | 7 | @Value 8 | class AliasImpl implements Alias 9 | { 10 | @NotNull 11 | String alias; 12 | @NotNull 13 | String query; 14 | @NotNull 15 | String source; 16 | 17 | } 18 | -------------------------------------------------------------------------------- /KPMAlias/src/main/java/org/kunlab/kpm/alias/AliasSourceImpl.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.alias; 2 | 3 | import lombok.Value; 4 | import org.jetbrains.annotations.NotNull; 5 | import org.kunlab.kpm.alias.interfaces.AliasSource; 6 | 7 | @Value 8 | class AliasSourceImpl implements AliasSource 9 | { 10 | @NotNull 11 | String name; 12 | @NotNull 13 | String source; 14 | 15 | @NotNull 16 | AliasSourceType type; 17 | } 18 | -------------------------------------------------------------------------------- /KPMCommon/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | org.kunlab.kpm 8 | TeamKunPluginManager 9 | 3.1.0 10 | ../pom.xml 11 | 12 | 13 | KPMCommon 14 | 15 | 16 | 8 17 | 8 18 | UTF-8 19 | 20 | 21 | 22 | 23 | com.github.TeamKUN 24 | PeyangPaperUtils 25 | ${pyglib.version} 26 | compile 27 | 28 | 29 | com.zaxxer 30 | HikariCP 31 | 4.0.3 32 | compile 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /KPMCommon/src/main/java/org/kunlab/kpm/ExceptionHandler.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm; 2 | 3 | /** 4 | * KPM 内部で発生した例外を全てキャッチする機能のインターフェースです。 5 | */ 6 | public interface ExceptionHandler 7 | { 8 | /** 9 | * 例外をキャッチします。 10 | * 11 | * @param e 例外 12 | */ 13 | void report(Throwable e); 14 | } 15 | -------------------------------------------------------------------------------- /KPMCommon/src/main/java/org/kunlab/kpm/http/DownloadProgress.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.http; 2 | 3 | import lombok.Value; 4 | 5 | /** 6 | * ダウンロードの進捗を表すクラスです。 7 | */ 8 | @Value 9 | public class DownloadProgress 10 | { 11 | /** 12 | * ファイルのサイズです。 13 | */ 14 | long totalSize; 15 | /** 16 | * ダウンロード済みのサイズです。 17 | */ 18 | long downloaded; 19 | 20 | /** 21 | * ダウンロード済みのサイズをパーセントで表した値です。 22 | */ 23 | double percentage; 24 | } 25 | -------------------------------------------------------------------------------- /KPMCommon/src/main/java/org/kunlab/kpm/http/RequestContext.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.http; 2 | 3 | import lombok.Builder; 4 | import lombok.Singular; 5 | import lombok.Value; 6 | 7 | import java.util.Map; 8 | 9 | /** 10 | * リクエストのコンテキストを表すクラスです。 11 | */ 12 | @Value 13 | @Builder 14 | public class RequestContext 15 | { 16 | /** 17 | * URLです。 18 | */ 19 | String url; 20 | 21 | /** 22 | * リクエストのメソッドです。 23 | * デフォルトはGETです。 24 | */ 25 | @Builder.Default 26 | RequestMethod method = RequestMethod.GET; 27 | 28 | /** 29 | * 追加のリクエスト・ヘッダーです。 30 | */ 31 | @Singular("header") 32 | Map extraHeaders; 33 | 34 | /** 35 | * レスポンスがキャッシュ可能かどうかを表すフラグです。 36 | */ 37 | @Builder.Default 38 | boolean cacheable = false; 39 | /** 40 | * リダイレクトに従うかどうかを表すフラグです。 41 | */ 42 | @Builder.Default 43 | boolean followRedirects = true; 44 | /** 45 | * タイムアウト時間です。 46 | */ 47 | @Builder.Default 48 | int timeout = -1; 49 | 50 | /** 51 | * リクエストボディです。 52 | */ 53 | @Builder.Default 54 | byte[] body = null; 55 | 56 | } 57 | -------------------------------------------------------------------------------- /KPMCommon/src/main/java/org/kunlab/kpm/http/RequestMethod.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.http; 2 | 3 | /** 4 | * HTTPリクエストのメソッドを表す列挙型です。 5 | */ 6 | public enum RequestMethod 7 | { 8 | /** 9 | * GETメソッドです。 10 | */ 11 | GET, 12 | /** 13 | * POSTメソッドです。 14 | */ 15 | POST, 16 | /** 17 | * PUTメソッドです。 18 | */ 19 | PUT, 20 | /** 21 | * DELETEメソッドです。 22 | */ 23 | DELETE, 24 | /** 25 | * HEADメソッドです。 26 | */ 27 | HEAD, 28 | /** 29 | * OPTIONSメソッドです。 30 | */ 31 | OPTIONS, 32 | /** 33 | * TRACEメソッドです。 34 | */ 35 | TRACE 36 | } 37 | -------------------------------------------------------------------------------- /KPMCommon/src/main/java/org/kunlab/kpm/signal/Signal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.signal; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | 6 | /** 7 | * インストーラやタスクなどからスローされるシグナルです。 8 | * シグナルは、主に次のことに使用されます: 9 | * 14 | *

15 | * このシグナルは、フロントエンドとバックエンドの隔離のために作成されました。 16 | */ 17 | @Getter 18 | @Setter 19 | public abstract class Signal 20 | { 21 | /** 22 | * シグナルがハンドルされたかどうかを示すフラグです。 23 | * このフラグが {@code true} の場合, ハンドルマネージャはこれ以降のハンドラを呼び出しません。 24 | */ 25 | private boolean handled; 26 | } 27 | -------------------------------------------------------------------------------- /KPMCommon/src/main/java/org/kunlab/kpm/signal/SignalHandler.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.signal; 2 | 3 | import java.lang.annotation.Documented; 4 | import java.lang.annotation.ElementType; 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | import java.lang.annotation.Target; 8 | 9 | /** 10 | * シグナルを受け取るメソッドに付与するアノテーションです。 11 | * このアノテーションが付与されたメソッドは、シグナルを受け取ることができます。 12 | */ 13 | @Documented 14 | @Target({ElementType.METHOD}) 15 | @Retention(RetentionPolicy.RUNTIME) 16 | public @interface SignalHandler 17 | { 18 | } 19 | -------------------------------------------------------------------------------- /KPMCommon/src/main/java/org/kunlab/kpm/utils/APIUtils.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.utils; 2 | 3 | public class APIUtils 4 | { 5 | public static String getAPIVersion() 6 | { 7 | String version = org.bukkit.Bukkit.getServer().getMinecraftVersion(); 8 | String[] split = version.split("\\."); 9 | return split[0] + "." + split[1]; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /KPMCommon/src/main/java/org/kunlab/kpm/versioning/InvalidVersionSyntaxException.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.versioning; 2 | 3 | /** 4 | * バージョンの構文が不正な場合に投げられる例外です。 5 | */ 6 | public class InvalidVersionSyntaxException extends IllegalArgumentException 7 | { 8 | public InvalidVersionSyntaxException(String message) 9 | { 10 | super(message); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /KPMCommon/src/main/java/org/kunlab/kpm/versioning/VersionComparator.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.versioning; 2 | 3 | import java.util.Comparator; 4 | 5 | public class VersionComparator implements Comparator 6 | { 7 | @Override 8 | public int compare(Version o1, Version o2) 9 | { 10 | return o1.compareTo(o2); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /KPMDaemon/src/main/java/org/kunlab/kpm/BasicExceptionHandler.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm; 2 | 3 | import java.util.logging.Level; 4 | import java.util.logging.Logger; 5 | 6 | public class BasicExceptionHandler implements ExceptionHandler 7 | { 8 | private final Logger logger; 9 | 10 | public BasicExceptionHandler(Logger logger) 11 | { 12 | this.logger = logger; 13 | } 14 | 15 | @Override 16 | public void report(Throwable e) 17 | { 18 | this.logger.log(Level.WARNING, "An exception has occurred while operating KPMDaemon.", e); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /KPMHooks/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | org.kunlab.kpm 8 | TeamKunPluginManager 9 | 3.1.0 10 | ../pom.xml 11 | 12 | 13 | KPMHooks 14 | 15 | 16 | 8 17 | 8 18 | UTF-8 19 | 20 | 21 | 22 | 23 | org.kunlab.kpm 24 | KPMModels 25 | 3.1.0 26 | compile 27 | 28 | 29 | org.kunlab.kpm 30 | KPMCommon 31 | 3.1.0 32 | provided 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /KPMHooks/src/main/java/org/kunlab/kpm/hook/HookExecutorImpl.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.hook; 2 | 3 | import lombok.Getter; 4 | import org.kunlab.kpm.hook.interfaces.HookExecutor; 5 | import org.kunlab.kpm.hook.interfaces.HookRecipientList; 6 | import org.kunlab.kpm.hook.interfaces.KPMHook; 7 | import org.kunlab.kpm.hook.interfaces.KPMHookRecipient; 8 | import org.kunlab.kpm.interfaces.KPMRegistry; 9 | 10 | import java.lang.reflect.Method; 11 | 12 | public class HookExecutorImpl implements HookExecutor 13 | { 14 | @Getter 15 | private final KPMRegistry registry; 16 | 17 | public HookExecutorImpl(KPMRegistry registry) 18 | { 19 | this.registry = registry; 20 | } 21 | 22 | @Override 23 | public void runHook(KPMHookRecipient recipient, KPMHook hook) 24 | { 25 | Method hookMethod = recipient.getHookListener(hook.getClass()); 26 | 27 | if (hookMethod == null) 28 | throw new IllegalStateException("Hook method not found: " + hook.getClass().getName()); 29 | 30 | try 31 | { 32 | hookMethod.invoke(recipient, hook); 33 | } 34 | catch (Exception e) 35 | { 36 | this.registry.getExceptionHandler().report(e); 37 | } 38 | } 39 | 40 | @Override 41 | public void runHook(HookRecipientList recipients, KPMHook hook) 42 | { 43 | for (KPMHookRecipient recipient : recipients) 44 | this.runHook(recipient, hook); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /KPMHooks/src/main/java/org/kunlab/kpm/hook/hooks/PluginInstalledHook.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.hook.hooks; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.jetbrains.annotations.Nullable; 7 | import org.kunlab.kpm.hook.interfaces.KPMHook; 8 | import org.kunlab.kpm.meta.InstallOperator; 9 | 10 | /** 11 | * プラグインがインストールされたときに呼び出されるフックです。 12 | */ 13 | @Data 14 | @AllArgsConstructor 15 | public class PluginInstalledHook implements KPMHook 16 | { 17 | /** 18 | * プラグインのインストール者です。 19 | */ 20 | @NotNull 21 | private final InstallOperator operator; 22 | /** 23 | * プラグインが依存関係であるかどうかを表します。 24 | */ 25 | boolean isDependency; 26 | /** 27 | * プラグインのインストールに使用した解決クエリです。 28 | */ 29 | @Nullable 30 | String resolveQuery; 31 | } 32 | -------------------------------------------------------------------------------- /KPMInfo/src/main/java/org/kunlab/kpm/kpminfo/KPMInformationFileImpl.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.kpminfo; 2 | 3 | import lombok.AccessLevel; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Value; 6 | import org.jetbrains.annotations.NotNull; 7 | import org.jetbrains.annotations.Nullable; 8 | import org.kunlab.kpm.hook.interfaces.HookRecipientList; 9 | import org.kunlab.kpm.resolver.interfaces.QueryContext; 10 | import org.kunlab.kpm.versioning.Version; 11 | 12 | import java.util.Map; 13 | 14 | @Value 15 | @AllArgsConstructor(access = AccessLevel.PACKAGE) 16 | class KPMInformationFileImpl implements KPMInformationFile 17 | { 18 | @NotNull 19 | Version kpmVersion; 20 | @Nullable 21 | QueryContext updateQuery; 22 | @NotNull 23 | HookRecipientList hooks; 24 | @NotNull 25 | String[] recipes; 26 | @NotNull 27 | Map dependencies; 28 | boolean allowManuallyInstall; 29 | } 30 | -------------------------------------------------------------------------------- /KPMMeta/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | org.kunlab.kpm 8 | TeamKunPluginManager 9 | 3.1.0 10 | ../pom.xml 11 | 12 | 13 | KPMMeta 14 | 15 | 16 | 8 17 | 8 18 | UTF-8 19 | 20 | 21 | 22 | 23 | org.kunlab.kpm 24 | KPMCommon 25 | 3.1.0 26 | provided 27 | 28 | 29 | org.kunlab.kpm 30 | KPMModels 31 | 3.1.0 32 | provided 33 | 34 | 35 | org.kunlab.kpm 36 | KPMResolver 37 | 3.1.0 38 | provided 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /KPMMeta/src/main/java/org/kunlab/kpm/meta/DependencyNodeImpl.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.meta; 2 | 3 | import lombok.Value; 4 | import org.kunlab.kpm.meta.interfaces.DependencyNode; 5 | 6 | @Value 7 | class DependencyNodeImpl implements DependencyNode 8 | { 9 | String plugin; 10 | 11 | String dependsOn; 12 | 13 | DependType dependType; 14 | } 15 | -------------------------------------------------------------------------------- /KPMMeta/src/main/java/org/kunlab/kpm/meta/PluginMetaImpl.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.meta; 2 | 3 | import lombok.Value; 4 | import org.bukkit.plugin.PluginLoadOrder; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.jetbrains.annotations.Nullable; 7 | import org.kunlab.kpm.meta.interfaces.DependencyNode; 8 | import org.kunlab.kpm.meta.interfaces.PluginMeta; 9 | 10 | import java.util.List; 11 | 12 | @Value 13 | class PluginMetaImpl implements PluginMeta 14 | { 15 | @NotNull 16 | String name; 17 | @NotNull 18 | String version; 19 | @NotNull 20 | PluginLoadOrder loadTiming; 21 | 22 | @NotNull 23 | InstallOperator installedBy; 24 | boolean isDependency; 25 | @Nullable 26 | String resolveQuery; 27 | 28 | long installedAt; 29 | @NotNull 30 | List authors; 31 | 32 | @NotNull 33 | List dependedBy; 34 | @NotNull 35 | List dependsOn; 36 | } 37 | -------------------------------------------------------------------------------- /KPMModels/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | org.kunlab.kpm 8 | TeamKunPluginManager 9 | 3.1.0 10 | ../pom.xml 11 | 12 | 13 | KPMModels 14 | 15 | 16 | 8 17 | 8 18 | UTF-8 19 | 20 | 21 | 22 | 23 | 24 | src/main/resources 25 | true 26 | 27 | 28 | 29 | 30 | 31 | 32 | org.kunlab.kpm 33 | KPMCommon 34 | 3.1.0 35 | provided 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/alias/AliasSourceType.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.alias; 2 | 3 | /** 4 | * ソースの種類を表す列挙型です。 5 | */ 6 | public enum AliasSourceType 7 | { 8 | /** 9 | * Webサーバがソースです。 10 | */ 11 | WEB_SERVER, 12 | /** 13 | * ローカルで定義されたソースです。 14 | */ 15 | LOCAL_DEFINITIONS, 16 | /** 17 | * 動的に追加されたソースです。 18 | */ 19 | DYNAMIC 20 | } 21 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/alias/interfaces/Alias.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.alias.interfaces; 2 | 3 | /** 4 | * プラグインのエイリアスです。 5 | */ 6 | public interface Alias 7 | { 8 | /** 9 | * エイリアスです。 10 | */ 11 | String getAlias(); 12 | 13 | /** 14 | * クエリです。 15 | */ 16 | String getQuery(); 17 | 18 | /** 19 | * エイリアスのソースです。 20 | */ 21 | String getSource(); 22 | } 23 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/alias/interfaces/AliasProvider.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.alias.interfaces; 2 | 3 | import org.jetbrains.annotations.NotNull; 4 | import org.jetbrains.annotations.Nullable; 5 | 6 | /** 7 | * プラグインのエイリアスを提供するクラスです。 8 | */ 9 | public interface AliasProvider 10 | { 11 | /** 12 | * このクラスを破棄します。 13 | */ 14 | void close(); 15 | 16 | /** 17 | * アップデータを作成します。 18 | * 19 | * @param sourceName ソースの名前 20 | * @param sourceURL ソースのURL 21 | * @return アップデータ 22 | */ 23 | AliasUpdater createUpdater(@NotNull String sourceName, @NotNull String sourceURL); 24 | 25 | /** 26 | * エイリアスが存在するかどうかを返します。 27 | * 28 | * @param query エイリアス対象のkueri 29 | * @return エイリアスが存在するかどうか 30 | */ 31 | boolean hasAlias(@NotNull String query); 32 | 33 | /** 34 | * ソースが存在するかどうかを返します。 35 | * 36 | * @param id ソースのID 37 | * @return ソースが存在するかどうか 38 | */ 39 | boolean hasSource(String id); 40 | 41 | /** 42 | * ソースを取得します。 43 | * 44 | * @param id ソースのID 45 | * @return ソース 46 | */ 47 | AliasSource getSource(String id); 48 | 49 | /** 50 | * エイリアスからクエリを取得します。 51 | * 52 | * @param alias エイリアス 53 | * @return 名前 54 | */ 55 | @Nullable Alias getQueryByAlias(String alias); 56 | 57 | /** 58 | * エイリアスの数を取得します。 59 | * 60 | * @return エイリアスの数 61 | */ 62 | int countAliases(); 63 | } 64 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/alias/interfaces/AliasSource.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.alias.interfaces; 2 | 3 | import org.kunlab.kpm.alias.AliasSourceType; 4 | 5 | /** 6 | * エイリアスのソースを表すクラスです。 7 | */ 8 | public interface AliasSource 9 | { 10 | /** 11 | * 人間が読めるエイリアスの名前です。 12 | */ 13 | String getName(); 14 | 15 | /** 16 | * エイリアスのソースです。 17 | */ 18 | String getSource(); 19 | 20 | /** 21 | * ソースの種類です。 22 | */ 23 | AliasSourceType getType(); 24 | } 25 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/alias/interfaces/AliasUpdater.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.alias.interfaces; 2 | 3 | /** 4 | * エイリアスを更新するトランザクションを補助するクラスです。 5 | */ 6 | public interface AliasUpdater 7 | { 8 | /** 9 | * エイリアスのアップデートを行います。 10 | * 11 | * @param alias エイリアス 12 | * @param query クエリ 13 | */ 14 | void update(String alias, String query); 15 | 16 | /** 17 | * すべてのアップデートを終了し、データベースの更新を行います。 18 | */ 19 | void done(); 20 | 21 | /** 22 | * アップデートをキャンセルし、データベースをロールバックします。 23 | */ 24 | void cancel(); 25 | 26 | long getAliasesCount(); 27 | } 28 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/hook/HookListener.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.hook; 2 | 3 | import java.lang.annotation.Documented; 4 | import java.lang.annotation.ElementType; 5 | import java.lang.annotation.Retention; 6 | import java.lang.annotation.RetentionPolicy; 7 | import java.lang.annotation.Target; 8 | 9 | /** 10 | * KPMフックを受け取るメソッドを宣言するためのアノテーションです。 11 | */ 12 | @Documented 13 | @Target(ElementType.METHOD) 14 | @Retention(RetentionPolicy.RUNTIME) 15 | public @interface HookListener 16 | { 17 | 18 | } 19 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/hook/interfaces/HookExecutor.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.hook.interfaces; 2 | 3 | import org.kunlab.kpm.interfaces.KPMRegistry; 4 | 5 | /** 6 | * KPMフックを実行するクラスです。 7 | */ 8 | public interface HookExecutor 9 | { 10 | /** 11 | * フックを実行します。 12 | * 13 | * @param recipient フックを受け取るクラス 14 | * @param hook フック 15 | */ 16 | void runHook(KPMHookRecipient recipient, KPMHook hook); 17 | 18 | /** 19 | * フックを実行します。 20 | * 21 | * @param recipients フックを受け取るクラスのリスト 22 | * @param hook フック 23 | */ 24 | void runHook(HookRecipientList recipients, KPMHook hook); 25 | 26 | KPMRegistry getRegistry(); 27 | } 28 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/hook/interfaces/HookRecipientList.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.hook.interfaces; 2 | 3 | import org.jetbrains.annotations.NotNull; 4 | import org.kunlab.kpm.interfaces.KPMRegistry; 5 | import org.kunlab.kpm.kpminfo.InvalidInformationFileException; 6 | 7 | import java.io.Serializable; 8 | import java.util.Collection; 9 | import java.util.List; 10 | import java.util.RandomAccess; 11 | 12 | /** 13 | * KPMフックの受け取りを行うクラスを管理するクラスです。 14 | */ 15 | public interface HookRecipientList extends Collection, List, RandomAccess, Cloneable, Serializable 16 | { 17 | /** 18 | * フックを実行します。 19 | * 20 | * @param hook フック 21 | */ 22 | void runHook(KPMHook hook); 23 | 24 | void add(@NotNull String className); 25 | 26 | /** 27 | * 予約クラス名からフックを作成します。 28 | * 29 | * @param registry KPM レジストリのインスタンス 30 | * @throws InvalidInformationFileException 予約クラス名が無効な場合 31 | */ 32 | void bakeHooks(@NotNull KPMRegistry registry) throws InvalidInformationFileException; 33 | 34 | KPMRegistry getRegistry(); 35 | } 36 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/hook/interfaces/KPMHook.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.hook.interfaces; 2 | 3 | /** 4 | * KPMフックのインタフェースです。 5 | */ 6 | public interface KPMHook 7 | { 8 | 9 | } 10 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/hook/interfaces/KPMHookRecipient.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.hook.interfaces; 2 | 3 | import org.kunlab.kpm.interfaces.KPMRegistry; 4 | 5 | import java.lang.reflect.Method; 6 | 7 | /** 8 | * KPMフックを受け取るためのインターフェースです。 9 | * このクラスを継承し、KPMフックを受け取るクラスであることを宣言します。 10 | */ 11 | public interface KPMHookRecipient 12 | { 13 | /** 14 | * KPMフックを受け取るメソッドを取得します。 15 | * 16 | * @param hook 受け取るKPMフックのクラス 17 | * @return 受け取るメソッド 18 | */ 19 | Method getHookListener(Class hook); 20 | 21 | /** 22 | * KPMデーモンのインスタンスです。 23 | */ 24 | KPMRegistry getRegistry(); 25 | } 26 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/installer/interfaces/InstallManager.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.interfaces; 2 | 3 | import org.jetbrains.annotations.NotNull; 4 | import org.jetbrains.annotations.Nullable; 5 | 6 | import java.util.function.Consumer; 7 | 8 | /** 9 | * インストールを管理するクラスです。 10 | */ 11 | public interface InstallManager 12 | { 13 | /** 14 | * インストールが進行中かどうかを返します。 15 | * 16 | * @return インストールが進行中かどうか 17 | */ 18 | boolean isRunning(); 19 | 20 | /** 21 | * インストーラを実行します。 22 | * 23 | * @param installer インストーラ 24 | * @param arguments インストーラに渡す引数 25 | * @param onFinished インストールが終了したときに呼び出されるコールバック 26 | * @param インストーラの引数の型 27 | * @param インストールのタスクの型 28 | * @param インストーラの型 29 | * @return インストールの結果 30 | */ 31 | , I extends Installer> InstallProgress runInstallerAsync( 32 | @NotNull I installer, 33 | @NotNull A arguments, 34 | boolean tokenRequired, 35 | @Nullable Consumer> onFinished 36 | ); 37 | } 38 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/installer/interfaces/InstallResult.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.interfaces; 2 | 3 | import net.kunmc.lab.peyangpaperutils.lib.terminal.Terminal; 4 | import org.jetbrains.annotations.NotNull; 5 | 6 | /** 7 | * インストールの結果を表します。 8 | * 9 | * @param

インストールの進捗状況の型 10 | */ 11 | public interface InstallResult

> 12 | { 13 | /** 14 | * アップグレードされたプラグインの数を取得します。 15 | * 16 | * @return アップグレードされたプラグインの数 17 | */ 18 | int getUpgradedCount(); 19 | 20 | /** 21 | * インストールされたプラグインの数を取得します。 22 | * 23 | * @return インストールされたプラグインの数 24 | */ 25 | int getInstalledCount(); 26 | 27 | /** 28 | * 削除されたプラグインの数を取得します。 29 | * 30 | * @return 削除されたプラグインの数 31 | */ 32 | int getRemovedCount(); 33 | 34 | /** 35 | * 保留中としてマークされたプラグインの数を取得します。 36 | * 37 | * @return 保留中としてマークされたプラグインの数 38 | */ 39 | int getPendingCount(); 40 | 41 | /** 42 | * アップグレードされたプラグインの名前を取得します。 43 | * 44 | * @return アップグレードされたプラグインの名前 45 | */ 46 | String[] getUpgraded(); 47 | 48 | /** 49 | * インストールされたプラグインの名前を取得します。 50 | * 51 | * @return インストールされたプラグインの名前 52 | */ 53 | String[] getInstalled(); 54 | 55 | /** 56 | * 削除されたプラグインの名前を取得します。 57 | * 58 | * @return 削除されたプラグインの名前 59 | */ 60 | String[] getRemoved(); 61 | 62 | /** 63 | * 保留中としてマークされたプラグインの名前を取得します。 64 | * 65 | * @return 保留中としてマークされたプラグインの名前 66 | */ 67 | String[] getPending(); 68 | 69 | /** 70 | * インストールの結果をコンソールに出力します。 71 | * 72 | * @param terminal 出力先のターミナル 73 | */ 74 | void printResultStatus(@NotNull Terminal terminal); 75 | 76 | boolean isSuccess(); 77 | 78 | InstallProgress getProgress(); 79 | } 80 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/installer/interfaces/Installer.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.interfaces; 2 | 3 | import org.kunlab.kpm.interfaces.KPMRegistry; 4 | 5 | /** 6 | * インストーラの基底クラスです。 7 | * 8 | * @param インストーラの引数の型 9 | * @param インストールのタスクの列挙型 10 | * @param

インストールのタスクの引数の型 11 | */ 12 | public interface Installer, P extends Enum

> 13 | { 14 | /** 15 | * インストーラを実行します。 16 | * 17 | * @param arguments インストーラに渡す引数 18 | * @return インストールの結果 19 | */ 20 | InstallResult

run(A arguments); 21 | 22 | KPMRegistry getRegistry(); 23 | 24 | InstallProgress> getProgress(); 25 | } 26 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/installer/interfaces/InstallerArgument.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.interfaces; 2 | 3 | /** 4 | * インストーラの引数の基底クラスです。 5 | */ 6 | public interface InstallerArgument 7 | { 8 | } 9 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/installer/interfaces/loader/PluginLoader.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.interfaces.loader; 2 | 3 | import org.bukkit.plugin.Plugin; 4 | import org.jetbrains.annotations.NotNull; 5 | import org.kunlab.kpm.pluginloader.PluginLoadResult; 6 | 7 | import java.nio.file.Path; 8 | 9 | public interface PluginLoader 10 | { 11 | /** 12 | * プラグインを読み込みます。 13 | * 14 | * @param pluginPath プラグインのパス 15 | * @return プラグインの読み込み結果 16 | */ 17 | PluginLoadResult loadPlugin(@NotNull Path pluginPath); 18 | 19 | /** 20 | * プラグインをアンロードします。 21 | * 22 | * @param plugin アンロードするプラグイン 23 | */ 24 | void unloadPlugin(@NotNull Plugin plugin); 25 | 26 | /** 27 | * プラグインを再読み込みします。 28 | * 29 | * @param plugin 再読み込みするプラグイン 30 | */ 31 | void reloadPlugin(Plugin plugin); 32 | } 33 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/installer/signals/InstallFinishedSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.signals; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.kunlab.kpm.installer.interfaces.InstallResult; 6 | import org.kunlab.kpm.signal.Signal; 7 | 8 | /** 9 | * インストールが完了したことを表すシグナルです。 10 | */ 11 | @Value 12 | @EqualsAndHashCode(callSuper = false) 13 | public class InstallFinishedSignal extends Signal 14 | { 15 | /** 16 | * インストール結果 17 | */ 18 | InstallResult> result; 19 | } 20 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/installer/signals/InvalidKPMInfoFileSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.signals; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import org.bukkit.plugin.PluginDescriptionFile; 6 | import org.jetbrains.annotations.NotNull; 7 | import org.kunlab.kpm.signal.Signal; 8 | 9 | import java.nio.file.Path; 10 | 11 | /** 12 | * プラグインのKPM情報ファイルが不正な場合に投げられるシグナルです。 13 | */ 14 | @Data 15 | @EqualsAndHashCode(callSuper = false) 16 | public class InvalidKPMInfoFileSignal extends Signal 17 | { 18 | /** 19 | * プラグインの名前です。 20 | */ 21 | @NotNull 22 | private final Path plugin; 23 | /** 24 | * プラグインの {@link org.bukkit.plugin.PluginDescriptionFile} です。 25 | */ 26 | @NotNull 27 | private final PluginDescriptionFile descriptionFile; 28 | 29 | /** 30 | * プラグインのKPM情報ファイルを無視するかどうかを示すフラグです。 31 | * {@code true} の場合、プラグインの持つKPM情報ファイルは無視されます。 32 | * {@code false} の場合、KPM情報ファイルが不正なため、プラグインのインストールが中断される可能性があります。 33 | */ 34 | private boolean ignore; 35 | 36 | public InvalidKPMInfoFileSignal(@NotNull Path plugin, @NotNull PluginDescriptionFile descriptionFile) 37 | { 38 | this.plugin = plugin; 39 | this.descriptionFile = descriptionFile; 40 | this.ignore = false; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/installer/signals/PluginModifiedSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.signals; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.bukkit.plugin.PluginDescriptionFile; 6 | import org.jetbrains.annotations.NotNull; 7 | import org.kunlab.kpm.signal.Signal; 8 | 9 | /** 10 | * サーバ上のプラグインが変更されたことを示すシグナルです。 11 | * 新規にインストールされた場合、削除された場合、更新された場合にスローされます。 12 | */ 13 | @Value 14 | @EqualsAndHashCode(callSuper = false) 15 | public class PluginModifiedSignal extends Signal 16 | { 17 | /** 18 | * 変更され他プラグインの情報です。 19 | * 20 | * @see PluginDescriptionFile 21 | */ 22 | @NotNull 23 | PluginDescriptionFile pluginDescription; 24 | /** 25 | * 変更の種類です。 26 | */ 27 | @NotNull 28 | ModifyType modifyType; 29 | 30 | /** 31 | * 変更の種類を表す列挙型です。 32 | */ 33 | public enum ModifyType 34 | { 35 | /** 36 | * プラグインが新規にインストールされたことを示します。 37 | */ 38 | ADD, 39 | /** 40 | * プラグインが削除されたことを示します。 41 | */ 42 | REMOVE, 43 | /** 44 | * プラグインが更新されたことを示します。 45 | */ 46 | UPGRADE 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/installer/signals/assertion/IgnoredPluginSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.signals.assertion; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import org.bukkit.plugin.PluginDescriptionFile; 6 | import org.jetbrains.annotations.NotNull; 7 | import org.kunlab.kpm.signal.Signal; 8 | 9 | /** 10 | * 指定されたプラグインが無視リストに登録されていることを示すシグナルです。 11 | * {@link IgnoredPluginSignal#setContinueInstall(boolean)} を変更することで、インストールのキャンセルを設定できます。 12 | */ 13 | @Data 14 | @EqualsAndHashCode(callSuper = false) 15 | public class IgnoredPluginSignal extends Signal 16 | { 17 | @NotNull 18 | private final String pluginName; 19 | @NotNull 20 | private final PluginDescriptionFile pluginDescription; 21 | 22 | private boolean continueInstall; 23 | 24 | public IgnoredPluginSignal(@NotNull PluginDescriptionFile pluginDescription) 25 | { 26 | this.pluginDescription = pluginDescription; 27 | this.pluginName = pluginDescription.getName(); 28 | 29 | this.continueInstall = false; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/kpminfo/InvalidInformationFileException.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.kpminfo; 2 | 3 | public class InvalidInformationFileException extends Exception 4 | { 5 | public InvalidInformationFileException(String message) 6 | { 7 | super(message); 8 | } 9 | 10 | public InvalidInformationFileException(String message, Throwable cause) 11 | { 12 | super(message, cause); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/meta/DependType.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.meta; 2 | 3 | /** 4 | * 依存の種類です。 5 | */ 6 | public enum DependType 7 | { 8 | /** 9 | * ハードな依存です。 10 | * 依存先のプラグインが存在しない場合、依存元のプラグインはロードされません。 11 | */ 12 | HARD_DEPEND, 13 | /** 14 | * ソフトな依存です。 15 | * 依存先のプラグインが存在しない場合でも、依存元のプラグインはロードされます。 16 | */ 17 | SOFT_DEPEND, 18 | /** 19 | * 自プラグインのロード前にロードする必要がある依存です。 20 | */ 21 | LOAD_BEFORE 22 | } 23 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/meta/InstallOperator.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.meta; 2 | 3 | /** 4 | * プラグインが誰によってインストールされたかを表します。 5 | */ 6 | public enum InstallOperator 7 | { 8 | /** 9 | * サーバの管理者によって手動でインストールされたことを表します。 10 | */ 11 | SERVER_ADMIN, 12 | /** 13 | * プラグイン依存関係リゾルバによって自動でインストールされたことを表します。 14 | */ 15 | KPM_DEPENDENCY_RESOLVER, 16 | /** 17 | * プラグインアップデータによって自動でインストールされたことを表します。 18 | */ 19 | KPM_PLUGIN_UPDATER, 20 | /** 21 | * その他の方法でインストールされたことを表します。 22 | */ 23 | OTHER, 24 | /** 25 | * 未知の方法でインストールされたことを表します。 26 | */ 27 | UNKNOWN 28 | } 29 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/meta/interfaces/DependencyNode.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.meta.interfaces; 2 | 3 | import org.kunlab.kpm.meta.DependType; 4 | 5 | /** 6 | * 依存関係のノードです。 7 | */ 8 | public interface DependencyNode 9 | { 10 | /** 11 | * 依存しているプラグインの名前です。 12 | * 13 | * @return 依存しているプラグインの名前 14 | */ 15 | String getPlugin(); 16 | 17 | /** 18 | * 依存先のプラグインの名前です。 19 | * 20 | * @return 依存先のプラグインの名前 21 | */ 22 | String getDependsOn(); 23 | 24 | /** 25 | * 依存の種類です。 26 | * 27 | * @return 依存の種類 28 | */ 29 | DependType getDependType(); 30 | } 31 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/meta/interfaces/PluginMetaIterator.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.meta.interfaces; 2 | 3 | import java.util.Iterator; 4 | 5 | public interface PluginMetaIterator extends Iterator, AutoCloseable 6 | { 7 | @Override 8 | boolean hasNext(); 9 | 10 | @Override 11 | PluginMeta next(); 12 | 13 | @Override 14 | void close(); 15 | 16 | @Override 17 | void remove(); 18 | } 19 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/pluginloader/PluginLoadResult.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.pluginloader; 2 | 3 | import lombok.Getter; 4 | import org.bukkit.plugin.Plugin; 5 | import org.jetbrains.annotations.NotNull; 6 | 7 | /** 8 | * プラグイン読込結果を表すクラスです。 9 | */ 10 | public enum PluginLoadResult 11 | { 12 | /** 13 | * 正常 14 | */ 15 | OK, 16 | 17 | // Errors 18 | /** 19 | * ファイルが存在しない 20 | */ 21 | FILE_NOT_FOUND, 22 | /** 23 | * {@code plugin.yml} が不適切 24 | */ 25 | INVALID_PLUGIN_DESCRIPTION, 26 | /** 27 | * プラグインのファイルが間違っている(メインクラスが存在しない等) 28 | */ 29 | INVALID_PLUGIN_FILE, 30 | /** 31 | * プラグインの依存関係が読み込まれていない 32 | */ 33 | DEPENDENCY_NOT_FOUND, 34 | /** 35 | * {@link Plugin#onLoad()} の実行中に例外が発生した 36 | */ 37 | EXCEPTION_ON_ONLOAD_HANDLING, 38 | /** 39 | * その他のエラーでプラグインを有効にできなかった 40 | */ 41 | ENABLE_PLUGIN_FAILED; 42 | 43 | @Getter 44 | private Exception exception; // implicitly final 45 | 46 | public PluginLoadResult withException(@NotNull Exception exception) 47 | { 48 | if (this.exception != null) 49 | this.exception = exception; 50 | return this; 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/resolver/ErrorCause.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.resolver; 2 | 3 | /** 4 | * エラーのかんたんな理由を表す列挙型です。 5 | */ 6 | public enum ErrorCause 7 | { 8 | /** 9 | * クエリに対応するリゾルバが見つかりませんでした。 10 | */ 11 | RESOLVER_MISMATCH, 12 | /** 13 | * 不正なクエリが指定されました。 14 | */ 15 | INVALID_QUERY, 16 | /** 17 | * ホストの解決に失敗しました。 18 | */ 19 | HOST_RESOLVE_FAILED, 20 | /** 21 | * プラグインが見つかりませんでした。 22 | */ 23 | PLUGIN_NOT_FOUND, 24 | /** 25 | * この Minecraft サーバに適合するプラグインが見つかりませんでした。 26 | */ 27 | VERSION_MISMATCH, 28 | /** 29 | * プラグインは見つかりましたが、 .jar や .zip などのファイルが見つかりませんでした。 30 | */ 31 | ASSET_NOT_FOUND, 32 | /** 33 | * サーバが不正なレスポンスを返しました。 34 | */ 35 | SERVER_RESPONSE_MALFORMED, 36 | /** 37 | * サーバがエラーを返しました。 38 | */ 39 | SERVER_RESPONSE_ERROR, 40 | /** 41 | * サーバに接続するための資格情報が不正です。 42 | */ 43 | INVALID_CREDENTIAL, 44 | /** 45 | * 不明なエラーが発生しました。 46 | */ 47 | UNKNOWN_ERROR 48 | } 49 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/resolver/interfaces/BaseResolver.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.resolver.interfaces; 2 | 3 | import org.kunlab.kpm.resolver.interfaces.result.MultiResult; 4 | import org.kunlab.kpm.resolver.interfaces.result.ResolveResult; 5 | 6 | /** 7 | * プラグインの解決を行うクラスのインターフェースです。 8 | */ 9 | public interface BaseResolver 10 | { 11 | /** 12 | * クエリを解決します。 13 | * 14 | * @param query クエリ 15 | * @return クエリの解決結果 16 | */ 17 | ResolveResult resolve(QueryContext query); 18 | 19 | /** 20 | * 複数のリソースを自動で一意に特定します。 21 | * 22 | * @param multiResult リソースのリスト。 23 | * @return プラグイン。 24 | */ 25 | ResolveResult autoPickOnePlugin(MultiResult multiResult); 26 | 27 | /** 28 | * 与えられたクエリがこのリゾルバで解決可能かどうかを返します。 29 | * 30 | * @param query クエリ 31 | * @return クエリが解決可能ならばtrue 32 | */ 33 | boolean isValidResolver(QueryContext query); 34 | } 35 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/resolver/interfaces/PluginResolver.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.resolver.interfaces; 2 | 3 | import org.kunlab.kpm.resolver.interfaces.result.MultiResult; 4 | import org.kunlab.kpm.resolver.interfaces.result.ResolveResult; 5 | 6 | /** 7 | * プラグインを解決するクラスです。 8 | */ 9 | public interface PluginResolver 10 | { 11 | /** 12 | * リゾルバを追加します。 13 | * 14 | * @param resolver 追加するリゾルバ 15 | * @param names リゾルバの名前とエイリアス 16 | */ 17 | void addResolver(BaseResolver resolver, String... names); 18 | 19 | /** 20 | * フォールバックリゾルバを追加します。 21 | * フォールバックリゾルバは、プラグインが見つからなかった場合にフォールバックとして使用されるリゾルバです。 22 | * 23 | * @param resolver 追加するリゾルバ 24 | */ 25 | void addFallbackResolver(BaseResolver resolver); 26 | 27 | /** 28 | * クエリを使用してプラグインを解決します。 29 | * 30 | * @param query クエリ 31 | */ 32 | ResolveResult resolve(String query); 33 | 34 | /** 35 | * 複数の結果({@link MultiResult})を一つの結果にピックアップします。 36 | * 37 | * @param multiResult 複数の結果 38 | * @return 一つの結果 39 | */ 40 | ResolveResult pickUpOne(MultiResult multiResult); 41 | } 42 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/resolver/interfaces/QueryContext.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.resolver.interfaces; 2 | 3 | import org.kunlab.kpm.versioning.Version; 4 | 5 | /** 6 | * 依存関係の解決に使用される文字列(クエリ)のインタフェースです。 7 | */ 8 | public interface QueryContext 9 | { 10 | /** 11 | * リゾルバ名とクエリの区切り文字です。 12 | */ 13 | String resolverNameQuerySeparator = ">"; 14 | /** 15 | * クエリとバージョンの区切り文字です。 16 | */ 17 | String versionEqualQuerySeparator = "=="; 18 | 19 | /** 20 | * バージョンを指定する指定子です。 21 | */ 22 | String versionChooseSpecifier = "?"; 23 | 24 | /** 25 | * 指定するリゾルバの名前を取得します。 26 | * 27 | * @return リゾルバの名前 28 | */ 29 | String getResolverName(); 30 | 31 | /** 32 | * 指定するリゾルバの名前を設定します。 33 | * 34 | * @param resolverName リゾルバの名前 35 | */ 36 | void setResolverName(String resolverName); 37 | 38 | /** 39 | * 指定するクエリを取得します。 40 | * 41 | * @return クエリ 42 | */ 43 | String getQuery(); 44 | 45 | /** 46 | * 指定するクエリを設定します。 47 | * 48 | * @param query クエリ 49 | */ 50 | void setQuery(String query); 51 | 52 | /** 53 | * 指定するバージョンを取得します。 54 | * 55 | * @return バージョン 56 | */ 57 | Version getVersion(); 58 | 59 | /** 60 | * 指定するバージョンを設定します。 61 | * 62 | * @param version バージョン 63 | */ 64 | void setVersion(Version version); 65 | 66 | /** 67 | * バージョンを選択するかどうかを取得します。 68 | * 69 | * @return バージョンを選択するかどうか 70 | */ 71 | boolean isChooseVersion(); 72 | } 73 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/resolver/interfaces/URLResolver.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.resolver.interfaces; 2 | 3 | import java.net.MalformedURLException; 4 | import java.net.URL; 5 | import java.util.regex.Matcher; 6 | import java.util.regex.Pattern; 7 | 8 | /** 9 | * URL を解決するリゾルバのインターフェースです。 10 | */ 11 | public interface URLResolver extends BaseResolver 12 | { 13 | 14 | /** 15 | * このリゾルバが対応してるURLのホスト名を返します。 16 | * 17 | * @return このリゾルバが対応してるURLのホスト名 18 | */ 19 | String[] getHosts(); 20 | 21 | /** 22 | * このリゾルバがクエリに対応しているかを返します。 23 | * 24 | * @param query クエリ (URL) 25 | * @return このリゾルバがクエリに対応しているか 26 | */ 27 | @Override 28 | default boolean isValidResolver(QueryContext query) 29 | { 30 | try 31 | { 32 | URL url = new URL(query.getQuery()); 33 | 34 | if (this.getHosts().length == 0) 35 | return true; 36 | 37 | for (String host : this.getHosts()) 38 | if (url.getHost().equalsIgnoreCase(host)) 39 | return true; 40 | } 41 | catch (MalformedURLException e) 42 | { 43 | return false; 44 | } 45 | return false; 46 | } 47 | 48 | default Matcher urlMatcher(Pattern pattern, String urlString) 49 | { 50 | URL url; 51 | try 52 | { 53 | url = new URL(urlString); 54 | } 55 | catch (MalformedURLException e) 56 | { 57 | return null; 58 | } 59 | 60 | return pattern.matcher(url.getPath()); 61 | } 62 | } 63 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/resolver/interfaces/result/ErrorResult.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.resolver.interfaces.result; 2 | 3 | import org.kunlab.kpm.resolver.ErrorCause; 4 | import org.kunlab.kpm.resolver.interfaces.BaseResolver; 5 | 6 | /** 7 | * 解決に失敗したことを表すクエリ解決結果です。 8 | */ 9 | public interface ErrorResult extends ResolveResult 10 | { 11 | /** 12 | * この解決を提供したリゾルバです。 13 | */ 14 | BaseResolver getResolver(); 15 | 16 | /** 17 | * エラーのかんたんな理由です。 18 | */ 19 | ErrorCause getCause(); 20 | 21 | /** 22 | * プラグインの提供元です。 23 | */ 24 | ResolveResult.Source getSource(); 25 | 26 | /** 27 | * エラーの詳細な理由です。 28 | */ 29 | String getMessage(); 30 | } 31 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/resolver/interfaces/result/MarketplaceResult.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.resolver.interfaces.result; 2 | 3 | import org.jetbrains.annotations.NotNull; 4 | 5 | /** 6 | * プラグインの説明等が掲載されいる場合に返されるクラスです。 7 | */ 8 | public interface MarketplaceResult 9 | { 10 | /** 11 | * 掲載されているタイトル/名前を返します。 12 | * 13 | * @return 掲載されているタイトル/名前 14 | */ 15 | @NotNull 16 | String getTitle(); 17 | 18 | /** 19 | * 掲載先のURLを返します. 20 | * 21 | * @return 掲載先のURL 22 | */ 23 | @NotNull 24 | String getUrl(); 25 | 26 | /** 27 | * 掲載されている紹介文を返します。 28 | * 29 | * @return 掲載されている紹介文 30 | */ 31 | @NotNull 32 | String getDescription(); 33 | } 34 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/resolver/interfaces/result/MultiResult.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.resolver.interfaces.result; 2 | 3 | import org.kunlab.kpm.resolver.interfaces.BaseResolver; 4 | 5 | /** 6 | * プラグインが一意に決定できなかった場合に返される結果です。 7 | */ 8 | public interface MultiResult extends ResolveResult 9 | { 10 | BaseResolver getResolver(); 11 | 12 | ResolveResult[] getResults(); 13 | } 14 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/resolver/interfaces/result/ResolveResult.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.resolver.interfaces.result; 2 | 3 | import lombok.AllArgsConstructor; 4 | import org.kunlab.kpm.resolver.interfaces.BaseResolver; 5 | 6 | /** 7 | * プラグイン解決結果のインタフェースです。 8 | */ 9 | public interface ResolveResult 10 | { 11 | /** 12 | * この解決を提供したリゾルバです。 13 | * 14 | * @return リゾルバ 15 | */ 16 | BaseResolver getResolver(); 17 | 18 | /** 19 | * プラグイン供給元です。 20 | */ 21 | @AllArgsConstructor 22 | enum Source 23 | { 24 | /** 25 | * GitHub 26 | */ 27 | GITHUB, 28 | /** 29 | * ... 30 | */ 31 | SPIGOT_MC, 32 | /** 33 | * ... 34 | */ 35 | DEV_BUKKIT, 36 | /** 37 | * ... 38 | */ 39 | CURSE_FORGE, 40 | /** 41 | * ローカルの既知プラグイン 42 | */ 43 | LOCAL_KNOWN, 44 | /** 45 | * 直リンク 46 | */ 47 | DIRECT, 48 | /** 49 | * 不明 50 | */ 51 | UNKNOWN 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/resolver/interfaces/result/SuccessResult.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.resolver.interfaces.result; 2 | 3 | /** 4 | * 解決に成功したことを表すクエリ解決結果です。 5 | */ 6 | public interface SuccessResult extends ResolveResult 7 | { 8 | /** 9 | * プラグインのダウンロードリンクです。 10 | */ 11 | String getDownloadUrl(); 12 | 13 | /** 14 | * プラグインのファイル名です。 15 | */ 16 | String getFileName(); 17 | 18 | /** 19 | * プラグインのバージョンです。 20 | */ 21 | String getVersion(); 22 | } 23 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/resolver/interfaces/result/VersionedResult.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.resolver.interfaces.result; 2 | 3 | import java.util.List; 4 | 5 | /** 6 | * プラグインの対応するバージョンを格納するインターフェースです。 7 | */ 8 | public interface VersionedResult 9 | { 10 | /** 11 | * プラグインが対応するバージョン一覧です。 12 | */ 13 | List getVersions(); 14 | } 15 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/task/interfaces/InstallTask.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.interfaces; 2 | 3 | /** 4 | * インストールに使用するタスクの基底クラスです。 5 | * 6 | * @param タスクの引数の型 7 | * @param タスクの結果の型 8 | */ 9 | public interface InstallTask, ? extends Enum>> 10 | { 11 | /** 12 | * タスクを実行します。 13 | * 14 | * @param arguments タスクの引数です。 15 | * @return タスクの結果です。 16 | */ 17 | R runTask(A arguments); 18 | } 19 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/task/interfaces/TaskArgument.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.interfaces; 2 | 3 | /** 4 | * タスクの引数の基底クラスです。 5 | */ 6 | public interface TaskArgument 7 | { 8 | } 9 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/task/interfaces/TaskResult.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.interfaces; 2 | 3 | /** 4 | * 実行したタスクの結果を表します。 5 | * 6 | * @param タスクの状態の型 7 | * @param タスクのエラー原因の型 8 | */ 9 | public interface TaskResult, E extends Enum> 10 | { 11 | /** 12 | * タスクが成功したかどうかです。 13 | */ 14 | boolean isSuccess(); 15 | 16 | /** 17 | * タスクの状態です。 18 | */ 19 | S getState(); 20 | 21 | /** 22 | * タスクのエラー原因です。 23 | * タスクが成功した場合は {@code null} です。 24 | */ 25 | E getErrorCause(); 26 | } 27 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/task/interfaces/dependencies/DependencyElement.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.interfaces.dependencies; 2 | 3 | import org.bukkit.plugin.PluginDescriptionFile; 4 | import org.kunlab.kpm.kpminfo.KPMInformationFile; 5 | 6 | import java.nio.file.Path; 7 | 8 | /** 9 | * 依存関係 系のタスクで使用される、概念的な依存関係を表すクラスです。 10 | */ 11 | public interface DependencyElement 12 | { 13 | /** 14 | * 依存関係の名前です。 15 | */ 16 | String getPluginName(); 17 | 18 | /** 19 | * 依存関係プラグインがあるのパスです。 20 | */ 21 | Path getPluginPath(); 22 | 23 | /** 24 | * 依存関係のプラグイン情報ファイルです。 25 | */ 26 | PluginDescriptionFile getPluginDescription(); 27 | 28 | /** 29 | * 依存関係のKPM情報ファイルです。 30 | */ 31 | KPMInformationFile getKpmInfoFile(); 32 | 33 | /** 34 | * 依存関係の解決に使用したクエリです。 35 | */ 36 | String getQuery(); 37 | } 38 | -------------------------------------------------------------------------------- /KPMModels/src/main/java/org/kunlab/kpm/utils/interfaces/ServerConditionChecker.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.utils.interfaces; 2 | 3 | /** 4 | * サーバの状態を確認します。 5 | */ 6 | public interface ServerConditionChecker 7 | { 8 | /** 9 | * サーバが終了中かどうか取得します。 10 | * 11 | * @return サーバが終了中かどうか 12 | */ 13 | boolean isStopping(); 14 | 15 | /** 16 | * サーバがリロード中かどうか取得します。 17 | * 18 | * @return サーバがリロード中かどうか 19 | */ 20 | boolean isReloading(); 21 | } 22 | -------------------------------------------------------------------------------- /KPMPlugin/src/main/java/org/kunlab/kpm/commands/CommandAutoRemove.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.commands; 2 | 3 | import lombok.AllArgsConstructor; 4 | import net.kunmc.lab.peyangpaperutils.lang.LangProvider; 5 | import net.kunmc.lab.peyangpaperutils.lib.command.CommandBase; 6 | import net.kunmc.lab.peyangpaperutils.lib.terminal.Terminal; 7 | import net.kunmc.lab.peyangpaperutils.lib.utils.Runner; 8 | import net.kyori.adventure.text.TextComponent; 9 | import org.bukkit.command.CommandSender; 10 | import org.jetbrains.annotations.NotNull; 11 | import org.jetbrains.annotations.Nullable; 12 | import org.kunlab.kpm.TeamKunPluginManager; 13 | import org.kunlab.kpm.installer.impls.autoremove.AutoRemoveArgument; 14 | 15 | import java.util.List; 16 | 17 | @AllArgsConstructor 18 | public class CommandAutoRemove extends CommandBase 19 | { 20 | private final TeamKunPluginManager plugin; 21 | 22 | @Override 23 | public void onCommand(@NotNull CommandSender sender, @NotNull Terminal terminal, String[] args) 24 | { 25 | Runner.runAsync(() -> 26 | this.plugin.getHeadInstallers().runAutoRemove(terminal, new AutoRemoveArgument()) 27 | ); 28 | } 29 | 30 | @Override 31 | public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Terminal terminal, String[] args) 32 | { 33 | return null; 34 | } 35 | 36 | @Override 37 | public @Nullable String getPermission() 38 | { 39 | return "kpm.autoremove"; 40 | } 41 | 42 | @Override 43 | public TextComponent getHelpOneLine() 44 | { 45 | return (TextComponent) LangProvider.getComponent("command.autoremove"); 46 | } 47 | 48 | @Override 49 | public String[] getArguments() 50 | { 51 | return new String[0]; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /KPMPlugin/src/main/java/org/kunlab/kpm/commands/CommandClean.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.commands; 2 | 3 | import lombok.AllArgsConstructor; 4 | import net.kunmc.lab.peyangpaperutils.lang.LangProvider; 5 | import net.kunmc.lab.peyangpaperutils.lib.command.CommandBase; 6 | import net.kunmc.lab.peyangpaperutils.lib.terminal.Terminal; 7 | import net.kunmc.lab.peyangpaperutils.lib.utils.Runner; 8 | import net.kyori.adventure.text.TextComponent; 9 | import org.bukkit.command.CommandSender; 10 | import org.jetbrains.annotations.NotNull; 11 | import org.jetbrains.annotations.Nullable; 12 | import org.kunlab.kpm.TeamKunPluginManager; 13 | import org.kunlab.kpm.installer.impls.clean.CleanArgument; 14 | 15 | import java.util.List; 16 | 17 | @AllArgsConstructor 18 | public class CommandClean extends CommandBase 19 | { 20 | private final TeamKunPluginManager plugin; 21 | 22 | @Override 23 | public void onCommand(@NotNull CommandSender sender, @NotNull Terminal terminal, String[] args) 24 | { 25 | Runner.runAsync(() -> 26 | this.plugin.getHeadInstallers().runGarbageClean(terminal, new CleanArgument()) 27 | ); 28 | } 29 | 30 | @Override 31 | public @Nullable List onTabComplete(@NotNull CommandSender sender, @NotNull Terminal terminal, String[] args) 32 | { 33 | return null; 34 | } 35 | 36 | @Override 37 | public @Nullable String getPermission() 38 | { 39 | return "kpm.clean"; 40 | } 41 | 42 | @Override 43 | public TextComponent getHelpOneLine() 44 | { 45 | return (TextComponent) LangProvider.getComponent("command.clean"); 46 | } 47 | 48 | @Override 49 | public String[] getArguments() 50 | { 51 | return new String[0]; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /KPMPlugin/src/main/java/org/kunlab/kpm/commands/CommandDebug.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.commands; 2 | 3 | import net.kunmc.lab.peyangpaperutils.lib.command.CommandBase; 4 | import net.kunmc.lab.peyangpaperutils.lib.command.SubCommandWith; 5 | import net.kyori.adventure.text.TextComponent; 6 | import org.bukkit.command.CommandSender; 7 | import org.jetbrains.annotations.NotNull; 8 | import org.jetbrains.annotations.Nullable; 9 | import org.kunlab.kpm.commands.debug.CommandDepTreeDebug; 10 | import org.kunlab.kpm.commands.debug.CommandInstallDebug; 11 | import org.kunlab.kpm.commands.debug.CommandUninstallDebug; 12 | import org.kunlab.kpm.interfaces.KPMRegistry; 13 | 14 | import java.util.HashMap; 15 | import java.util.Map; 16 | 17 | public class CommandDebug extends SubCommandWith 18 | { 19 | private final Map commands; 20 | 21 | public CommandDebug(KPMRegistry registry) 22 | { 23 | this.commands = new HashMap<>(); 24 | 25 | 26 | this.commands.put("installDebug", new CommandInstallDebug(registry)); 27 | this.commands.put("uninstallDebug", new CommandUninstallDebug(registry)); 28 | this.commands.put("depTree", new CommandDepTreeDebug(registry.getPluginMetaManager())); 29 | } 30 | 31 | @Override 32 | protected String getName() 33 | { 34 | return "debug"; 35 | } 36 | 37 | @Override 38 | protected Map getSubCommands(@NotNull CommandSender sender) 39 | { 40 | return this.commands; 41 | } 42 | 43 | @Override 44 | public @Nullable String getPermission() 45 | { 46 | return "kpm.debug"; 47 | } 48 | 49 | @Override 50 | public TextComponent getHelpOneLine() 51 | { 52 | return of("KPMのデバッグに使用します。"); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /KPMPlugin/src/main/java/org/kunlab/kpm/commands/debug/deptree/DependencyNodeMock.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.commands.debug.deptree; 2 | 3 | import lombok.Data; 4 | import org.kunlab.kpm.meta.DependType; 5 | import org.kunlab.kpm.meta.interfaces.DependencyNode; 6 | 7 | @Data 8 | class DependencyNodeMock implements DependencyNode 9 | { 10 | private final String plugin; 11 | 12 | private final String dependsOn; 13 | 14 | private final DependType dependType; 15 | } 16 | -------------------------------------------------------------------------------- /KPMPlugin/src/main/java/org/kunlab/kpm/signal/SignalHandlingUtils.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.signal; 2 | 3 | import net.kunmc.lab.peyangpaperutils.lang.LangProvider; 4 | import net.kunmc.lab.peyangpaperutils.lib.terminal.QuestionAttribute; 5 | import net.kunmc.lab.peyangpaperutils.lib.terminal.QuestionResult; 6 | import net.kunmc.lab.peyangpaperutils.lib.terminal.Terminal; 7 | 8 | public class SignalHandlingUtils 9 | { 10 | public static boolean askContinue(Terminal terminal) 11 | { 12 | try 13 | { 14 | QuestionResult result = terminal.getInput() 15 | .showYNQuestion(LangProvider.get("general.chat.continue")) 16 | .waitAndGetResult(); 17 | return result.test(QuestionAttribute.YES); 18 | } 19 | catch (InterruptedException e) 20 | { 21 | terminal.error(LangProvider.get("general.errors.unknown") + ":%s", e.getMessage()); 22 | return false; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/autoremove/AutoRemoveReadySignalHandler.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.signal.handlers.autoremove; 2 | 3 | import net.kunmc.lab.peyangpaperutils.lang.LangProvider; 4 | import net.kunmc.lab.peyangpaperutils.lib.terminal.Terminal; 5 | import org.kunlab.kpm.Utils; 6 | import org.kunlab.kpm.installer.impls.autoremove.signals.PluginEnumeratedSignal; 7 | import org.kunlab.kpm.signal.SignalHandler; 8 | import org.kunlab.kpm.signal.SignalHandlingUtils; 9 | 10 | import java.util.List; 11 | import java.util.stream.Collectors; 12 | 13 | public class AutoRemoveReadySignalHandler 14 | { 15 | private final Terminal terminal; 16 | 17 | public AutoRemoveReadySignalHandler(Terminal terminal) 18 | { 19 | this.terminal = terminal; 20 | } 21 | 22 | private void printUninstallInfo(List uninstallTargets) 23 | { 24 | this.terminal.successImplicit(LangProvider.get("installer.autoremove.unneeded")); 25 | this.terminal.successImplicit(LangProvider.get("installer.autoremove.remove")); 26 | this.terminal.writeLine(" " + uninstallTargets.stream() 27 | .sorted() 28 | .collect(Collectors.joining(" "))); 29 | Utils.printInstallStatistics(this.terminal, 0, uninstallTargets.size(), 0, 0); 30 | } 31 | 32 | @SignalHandler 33 | public void onPluginEnumerated(PluginEnumeratedSignal signal) 34 | { 35 | this.printUninstallInfo(signal.getTargetPlugins()); 36 | signal.setCancel(!SignalHandlingUtils.askContinue(this.terminal)); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/clean/GarbageCleanSignalHandler.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.signal.handlers.clean; 2 | 3 | import net.kunmc.lab.peyangpaperutils.lang.LangProvider; 4 | import net.kunmc.lab.peyangpaperutils.lib.terminal.Terminal; 5 | import org.kunlab.kpm.signal.SignalHandler; 6 | import org.kunlab.kpm.signal.SignalHandlingUtils; 7 | import org.kunlab.kpm.task.tasks.garbage.clean.signal.GarbageEnumeratedSignal; 8 | import org.kunlab.kpm.task.tasks.garbage.search.signals.GarbageSearchingSignal; 9 | 10 | import java.util.stream.Collectors; 11 | 12 | public class GarbageCleanSignalHandler 13 | { 14 | // ignore GarbageDeleteSkippedSignal 15 | 16 | private final Terminal terminal; 17 | 18 | public GarbageCleanSignalHandler(Terminal terminal) 19 | { 20 | this.terminal = terminal; 21 | } 22 | 23 | @SignalHandler 24 | public void onGarbageEnumerated(GarbageEnumeratedSignal signal) 25 | { 26 | this.terminal.successImplicit(LangProvider.get("installer.clean.remove")); 27 | this.terminal.writeLine(" " + signal.getGarbageDatas().stream() 28 | .sorted() 29 | .map(path -> path.getFileName().toString()) 30 | .map(path -> path + "/") 31 | .collect(Collectors.joining(" "))); 32 | 33 | signal.setCancel(!SignalHandlingUtils.askContinue(this.terminal)); 34 | } 35 | 36 | @SignalHandler 37 | public void onGarbageSearching(GarbageSearchingSignal signal) 38 | { 39 | this.terminal.info(LangProvider.get("installer.clean.searching")); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/common/ModifySignalHandler.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.signal.handlers.common; 2 | 3 | import net.kunmc.lab.peyangpaperutils.lang.LangProvider; 4 | import net.kunmc.lab.peyangpaperutils.lang.MsgArgs; 5 | import net.kunmc.lab.peyangpaperutils.lib.terminal.Terminal; 6 | import org.kunlab.kpm.installer.signals.PluginModifiedSignal; 7 | import org.kunlab.kpm.signal.SignalHandler; 8 | import org.kunlab.kpm.utils.Utils; 9 | 10 | /** 11 | * プラグインの変更のシグナルをハンドルするハンドラです. 12 | */ 13 | public class ModifySignalHandler 14 | { 15 | private final Terminal terminal; 16 | 17 | public ModifySignalHandler(Terminal terminal) 18 | { 19 | this.terminal = terminal; 20 | } 21 | 22 | @SignalHandler 23 | public void onPluginModify(PluginModifiedSignal signal) 24 | { 25 | String pluginName = Utils.getPluginString(signal.getPluginDescription()); 26 | String key = "installer.common.mod." + signal.getModifyType().name().toLowerCase(); 27 | this.terminal.writeLine(LangProvider.get(key, MsgArgs.of("name", pluginName))); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /KPMPlugin/src/main/java/org/kunlab/kpm/signal/handlers/uninstall/UninstallReadySignalHandler.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.signal.handlers.uninstall; 2 | 3 | import net.kunmc.lab.peyangpaperutils.lang.LangProvider; 4 | import net.kunmc.lab.peyangpaperutils.lib.terminal.Terminal; 5 | import org.bukkit.plugin.Plugin; 6 | import org.kunlab.kpm.Utils; 7 | import org.kunlab.kpm.installer.impls.uninstall.signals.UninstallReadySignal; 8 | import org.kunlab.kpm.signal.SignalHandler; 9 | import org.kunlab.kpm.signal.SignalHandlingUtils; 10 | 11 | import java.util.List; 12 | import java.util.stream.Collectors; 13 | 14 | public class UninstallReadySignalHandler 15 | { 16 | private final Terminal terminal; 17 | 18 | public UninstallReadySignalHandler(Terminal terminal) 19 | { 20 | this.terminal = terminal; 21 | } 22 | 23 | private void printUninstallInfo(List uninstallTargets) 24 | { 25 | this.terminal.successImplicit(LangProvider.get("installer.uninstall.ready")); 26 | this.terminal.writeLine(" " + uninstallTargets.stream() 27 | .map(Plugin::getName) 28 | .sorted() 29 | .collect(Collectors.joining(" "))); 30 | Utils.printInstallStatistics(this.terminal, 0, uninstallTargets.size(), 0, 0); 31 | } 32 | 33 | @SignalHandler 34 | public void onPluginsEnumerated(UninstallReadySignal signal) 35 | { 36 | this.printUninstallInfo(signal.getPlugins()); 37 | if (!signal.isAutoConfirm()) 38 | signal.setContinueUninstall(SignalHandlingUtils.askContinue(this.terminal)); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /KPMPlugin/src/main/java/org/kunlab/kpm/upgrader/signals/AlreadyUpgradingSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.upgrader.signals; 2 | 3 | import org.kunlab.kpm.signal.Signal; 4 | 5 | public class AlreadyUpgradingSignal extends Signal 6 | { 7 | } 8 | -------------------------------------------------------------------------------- /KPMPlugin/src/main/java/org/kunlab/kpm/upgrader/signals/KPMUpgradeReadySignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.upgrader.signals; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import org.kunlab.kpm.signal.Signal; 6 | import org.kunlab.kpm.versioning.Version; 7 | 8 | @Data 9 | @EqualsAndHashCode(callSuper = true) 10 | public class KPMUpgradeReadySignal extends Signal 11 | { 12 | private final Version currentKPMVersion; 13 | private final Version toKPMVersion; 14 | 15 | private boolean continueUpgrade; 16 | 17 | } 18 | -------------------------------------------------------------------------------- /KPMPlugin/src/main/java/org/kunlab/kpm/upgrader/signals/UpgraderDeploySignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.upgrader.signals; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import org.kunlab.kpm.signal.Signal; 6 | 7 | import java.nio.file.Path; 8 | 9 | public class UpgraderDeploySignal extends Signal 10 | { 11 | @Getter 12 | @AllArgsConstructor 13 | public static class Pre extends UpgraderDeploySignal 14 | { 15 | private final Path path; 16 | } 17 | 18 | public static class Post extends UpgraderDeploySignal 19 | { 20 | } 21 | 22 | @Getter 23 | @AllArgsConstructor 24 | public static class Error extends UpgraderDeploySignal 25 | { 26 | ErrorCause cause; 27 | 28 | public enum ErrorCause 29 | { 30 | ALREADY_DEPLOYED, 31 | DEPLOYER_NOT_EXISTS, 32 | IO_EXCEPTION_OCCURRED, 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /KPMPlugin/src/main/java/org/kunlab/kpm/utils/Utils.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.utils; 2 | 3 | import lombok.experimental.UtilityClass; 4 | import org.bukkit.plugin.Plugin; 5 | import org.bukkit.plugin.PluginDescriptionFile; 6 | 7 | @UtilityClass 8 | public class Utils 9 | { 10 | public static String getPluginString(Plugin plugin) 11 | { 12 | return getPluginString(plugin.getDescription()); 13 | } 14 | 15 | public static String getPluginString(PluginDescriptionFile description) 16 | { 17 | return String.format("%s (%s)", description.getName(), description.getVersion()); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /KPMPlugin/src/main/resources/plugin.yml: -------------------------------------------------------------------------------- 1 | name: TeamKunPluginManager 2 | version: ${project.version} 3 | main: org.kunlab.kpm.TeamKunPluginManager 4 | authors: [Peyang] 5 | api-version: 1.16 6 | description: Manage your plugin! 7 | website: https://kunmc.net/ 8 | 9 | loadbefore: [KPMUpgrader] 10 | 11 | commands: 12 | kunpluginmanager: 13 | aliases: [pm, kpm, kunpm, kunmgmt] #devicemgmt.mscへの恨み 14 | usage: "/kpm [Plugin name | URL | Repository Name]" 15 | 16 | 17 | permissions: 18 | kpm: 19 | description: "このプラグインを使用できます。" 20 | default: op 21 | children: 22 | kpm.install: true 23 | kpm.reload: true 24 | kpm.uninstall: true 25 | kpm.info: true 26 | kpm.autoremove: true 27 | kpm.clean: true 28 | kpm.fix: true 29 | kpm.status: true 30 | kpm.update: true 31 | kpm.install: 32 | description: "プラグインをインストールできます。" 33 | kpm.uninstall: 34 | description: "プラグインをアンインストールします。" 35 | kpm.reload: 36 | description: "プラグインを再起動します。" 37 | kpm.info: 38 | description: "プラグインの情報を閲覧します。" 39 | kpm.autoremove: 40 | description: "不要になったプラグインを削除します。" 41 | kpm.clean: 42 | description: "アンインストールされたプラグインのデータファイルを削除します。" 43 | kpm.fix: 44 | description: "プラグインのエラーを修復します。" 45 | kpm.status: 46 | description: "プラグインの状態を閲覧します。" 47 | kpm.update: 48 | description: "エイリアス定義データベースを更新します。" 49 | kpm.help: 50 | description: "プラグインのヘルプを表示します。" 51 | 52 | kpm.debug: 53 | description: "プラグインのデバッグを行います。" 54 | default: op 55 | children: 56 | kpm.debug.install: 57 | description: "プラグインをインストールします。" 58 | default: op 59 | 60 | -------------------------------------------------------------------------------- /KPMPlugin/src/main/resources/versions.properties: -------------------------------------------------------------------------------- 1 | kpm=${project.version} 2 | pyglib=${pyglib.version} 3 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/exceptions/InstallerRunningException.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.exceptions; 2 | 3 | /** 4 | * インストーラが既に実行中であることを表す例外です。 5 | */ 6 | public class InstallerRunningException extends IllegalStateException 7 | { 8 | public InstallerRunningException(String s) 9 | { 10 | super(s); 11 | } 12 | 13 | public InstallerRunningException(String message, Throwable cause) 14 | { 15 | super(message, cause); 16 | } 17 | 18 | public InstallerRunningException(Throwable cause) 19 | { 20 | super(cause); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/exceptions/TokenNotAvailableException.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.exceptions; 2 | 3 | /** 4 | * トークンが設定されていないことを表す例外です。 5 | */ 6 | public class TokenNotAvailableException extends IllegalStateException 7 | { 8 | public TokenNotAvailableException(String s) 9 | { 10 | super(s); 11 | } 12 | 13 | public TokenNotAvailableException(String message, Throwable cause) 14 | { 15 | super(message, cause); 16 | } 17 | 18 | public TokenNotAvailableException(Throwable cause) 19 | { 20 | super(cause); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/autoremove/AutoRemoveArgument.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.autoremove; 2 | 3 | import lombok.Builder; 4 | import lombok.Data; 5 | import lombok.Singular; 6 | import org.bukkit.plugin.Plugin; 7 | import org.jetbrains.annotations.NotNull; 8 | import org.kunlab.kpm.installer.interfaces.InstallerArgument; 9 | 10 | import java.util.ArrayList; 11 | import java.util.List; 12 | 13 | /** 14 | * 自動削除の引数を格納するクラスです。 15 | */ 16 | @Data 17 | @Builder 18 | public class AutoRemoveArgument implements InstallerArgument 19 | { 20 | /** 21 | * 自動削除から除外するプラグインのリストです。 22 | */ 23 | @NotNull 24 | @Singular("exclude") 25 | private final List excludePlugins; 26 | 27 | private AutoRemoveArgument(@NotNull List excludePlugins) 28 | { 29 | this.excludePlugins = excludePlugins; 30 | } 31 | 32 | public AutoRemoveArgument() 33 | { 34 | this(new ArrayList<>()); 35 | } 36 | 37 | /** 38 | * 除外するプラグインを追加します。 39 | * 40 | * @param plugin 除外するプラグイン 41 | * @return このインスタンス 42 | */ 43 | public AutoRemoveArgument addExcludePlugin(@NotNull Plugin plugin) 44 | { 45 | this.excludePlugins.add(plugin.getName()); 46 | return this; 47 | } 48 | 49 | 50 | } 51 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/autoremove/AutoRemoveErrorCause.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.autoremove; 2 | 3 | /** 4 | * 自動削除のエラーを表す列挙型です。 5 | */ 6 | public enum AutoRemoveErrorCause 7 | { 8 | /** 9 | * 自動削除が可能なプラグインが見つかりませんでした。 10 | */ 11 | NO_AUTO_REMOVABLE_PLUGIN_FOUND, 12 | 13 | /** 14 | * アンインストーラの初期化に失敗しました。 15 | */ 16 | UNINSTALLER_INIT_FAILED, 17 | /** 18 | * アンインストールに失敗しました。 19 | */ 20 | UNINSTALL_FAILED, 21 | /** 22 | * 自動削除がキャンセルされました。 23 | */ 24 | CANCELLED, 25 | } 26 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/autoremove/AutoRemoveSucceedResult.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.autoremove; 2 | 3 | import lombok.Getter; 4 | import org.kunlab.kpm.installer.InstallResultImpl; 5 | import org.kunlab.kpm.installer.interfaces.InstallProgress; 6 | import org.kunlab.kpm.installer.interfaces.Installer; 7 | import org.kunlab.kpm.task.tasks.uninstall.UnInstallResult; 8 | 9 | /** 10 | * プラグインのアンインストールの結果を表すクラスです。 11 | */ 12 | @Getter 13 | public class AutoRemoveSucceedResult extends InstallResultImpl 14 | { 15 | private final UnInstallResult result; 16 | 17 | public AutoRemoveSucceedResult(InstallProgress> progress, UnInstallResult result) 18 | { 19 | super(true, progress); 20 | this.result = result; 21 | } 22 | 23 | 24 | } 25 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/autoremove/AutoRemoveTasks.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.autoremove; 2 | 3 | /** 4 | * 自動削除のタスクを表す列挙型です。 5 | */ 6 | public enum AutoRemoveTasks 7 | { 8 | /** 9 | * 削除対象のプラグインを取得します。 10 | */ 11 | SEARCHING_REMOVABLES, 12 | /** 13 | * 削除対象のプラグインを削除します。 14 | */ 15 | UNINSTALLING_PLUGINS 16 | } 17 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/autoremove/signals/PluginEnumeratedSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.autoremove.signals; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.kunlab.kpm.signal.Signal; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * 自動削除するプラグインが列挙された場合に送信されるシグナルです。 12 | */ 13 | @Data 14 | @EqualsAndHashCode(callSuper = false) 15 | public class PluginEnumeratedSignal extends Signal 16 | { 17 | /** 18 | * 自動削除するプラグインのリストです。 19 | * このリストを変更すると、自動削除の対象を変更できます。 20 | */ 21 | @NotNull 22 | private final List targetPlugins; 23 | 24 | /** 25 | * 自動削除をキャンセルするかどうかを示すフラグです。 26 | * このフラグがtrueの場合、自動削除はキャンセルされます。 27 | */ 28 | private boolean cancel; 29 | 30 | public PluginEnumeratedSignal(@NotNull List targetPlugins) 31 | { 32 | this.targetPlugins = targetPlugins; 33 | this.cancel = false; 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/autoremove/signals/PluginUninstallFailedSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.autoremove.signals; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.kunlab.kpm.installer.impls.uninstall.UnInstallTasks; 6 | import org.kunlab.kpm.installer.interfaces.InstallResult; 7 | import org.kunlab.kpm.signal.Signal; 8 | 9 | /** 10 | * アンインストールに失敗したときに送信されるシグナルです。 11 | */ 12 | @Value 13 | @EqualsAndHashCode(callSuper = false) 14 | public class PluginUninstallFailedSignal extends Signal 15 | { 16 | /** 17 | * アンインストールに失敗したときの結果です。 18 | */ 19 | InstallResult result; 20 | } 21 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/clean/CleanArgument.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.clean; 2 | 3 | import lombok.Data; 4 | import org.jetbrains.annotations.NotNull; 5 | import org.kunlab.kpm.installer.interfaces.InstallerArgument; 6 | 7 | import java.util.ArrayList; 8 | import java.util.List; 9 | 10 | /** 11 | * 不要なデータ削除の引数を格納するクラスです。 12 | */ 13 | @Data 14 | public class CleanArgument implements InstallerArgument 15 | { 16 | /** 17 | * 自動削除から除外するデータ名のリストです。 18 | */ 19 | @NotNull 20 | private final List excludeDataNames; 21 | 22 | public CleanArgument(List excludeDataNames) 23 | { 24 | this.excludeDataNames = new ArrayList<>(excludeDataNames); 25 | } 26 | 27 | public CleanArgument() 28 | { 29 | this.excludeDataNames = new ArrayList<>(); 30 | this.excludeDataNames.add("bStats"); 31 | } 32 | 33 | /** 34 | * 除外するデータを追加します。 35 | * 36 | * @param dataName 除外するデータの名前 37 | * @return このインスタンス 38 | */ 39 | public CleanArgument addExcludeDataName(@NotNull String dataName) 40 | { 41 | this.excludeDataNames.add(dataName); 42 | return this; 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/clean/CleanErrorCause.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.clean; 2 | 3 | /** 4 | * 不要なデータの削除エラーを表す列挙型です。 5 | */ 6 | public enum CleanErrorCause 7 | { 8 | } 9 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/clean/CleanTasks.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.clean; 2 | 3 | /** 4 | * 不要なデータの削除タスクを表す列挙型です。 5 | */ 6 | public enum CleanTasks 7 | { 8 | /** 9 | * 不要なデータを検索します。 10 | */ 11 | SEARCHING_GARBAGE, 12 | /** 13 | * 不要なデータの削除中です。 14 | */ 15 | DELETING_GARBAGE, 16 | } 17 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/clean/GarbageCleanSucceedResult.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.clean; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.kunlab.kpm.installer.InstallResultImpl; 7 | import org.kunlab.kpm.installer.interfaces.InstallProgress; 8 | import org.kunlab.kpm.installer.interfaces.Installer; 9 | import org.kunlab.kpm.installer.interfaces.InstallerArgument; 10 | 11 | import java.nio.file.Path; 12 | import java.util.List; 13 | 14 | /** 15 | * 不要なデータの削除に成功したことを表す結果です。 16 | */ 17 | @Value 18 | @EqualsAndHashCode(callSuper = false) 19 | public class GarbageCleanSucceedResult extends InstallResultImpl 20 | { 21 | /** 22 | * 削除された不要なデータのパスのリストです。 23 | */ 24 | @NotNull 25 | List deletedFiles; 26 | /** 27 | * 削除に失敗した不要なデータのパスのリストです。 28 | */ 29 | @NotNull 30 | List deleteFailedFiles; 31 | 32 | public GarbageCleanSucceedResult(InstallProgress, CleanTasks>> progress, 33 | @NotNull List deletedFiles, @NotNull List deleteFailedFiles) 34 | { 35 | super(true, progress); 36 | this.deletedFiles = deletedFiles; 37 | this.deleteFailedFiles = deleteFailedFiles; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/install/InstallErrorCause.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.install; 2 | 3 | import org.kunlab.kpm.installer.impls.install.signals.AlreadyInstalledPluginSignal; 4 | import org.kunlab.kpm.installer.signals.InvalidKPMInfoFileSignal; 5 | import org.kunlab.kpm.installer.signals.assertion.IgnoredPluginSignal; 6 | 7 | /** 8 | * インストールのエラーを表す列挙型です。 9 | */ 10 | public enum InstallErrorCause 11 | { 12 | // Environment errors 13 | /** 14 | * 変更しようとしているプラグインが、無視リストに登録されており、 15 | * {@link IgnoredPluginSignal} でも強制インストールが選択されませんでした。 16 | */ 17 | PLUGIN_IGNORED, 18 | /** 19 | * インストールしようとしているプラグインが、既にインストールされており、 20 | * {@link AlreadyInstalledPluginSignal} でも置換が選択されませんでした。 21 | */ 22 | PLUGIN_ALREADY_INSTALLED, 23 | /** 24 | * プラグインの持つKPM情報ファイルが不正であり、 25 | * {@link InvalidKPMInfoFileSignal} でも無視が選択されませんでした。 26 | */ 27 | INVALID_KPM_INFO_FILE, 28 | /** 29 | * 手動インストールに対応していないプラグインです。 30 | */ 31 | PLUGIN_NOT_MANUALLY_INSTALLABLE 32 | } 33 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/install/signals/AlreadyInstalledPluginSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.install.signals; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import org.bukkit.plugin.PluginDescriptionFile; 6 | import org.jetbrains.annotations.NotNull; 7 | import org.kunlab.kpm.signal.Signal; 8 | 9 | /** 10 | * プラグインが既にインストールされていることを示すシグナルです。 11 | * {@link AlreadyInstalledPluginSignal#setReplacePlugin(boolean)} を用いて、既存のプラグインを新規プラグインに置換するかどうかを設定できます。 12 | */ 13 | @Data 14 | @EqualsAndHashCode(callSuper = false) 15 | public class AlreadyInstalledPluginSignal extends Signal 16 | { 17 | /** 18 | * インストールされたプラグインの種類 19 | */ 20 | @NotNull 21 | private final PluginDescriptionFile installedPlugin; 22 | 23 | @NotNull 24 | private final PluginDescriptionFile installingPlugin; 25 | 26 | private boolean replacePlugin; 27 | 28 | /** 29 | * コンストラクタです。 30 | * 31 | * @param installedPlugin 既にインストールされているプラグインの {@link PluginDescriptionFile} 32 | * @param installingPlugin インストールしようとしているプラグインの {@link PluginDescriptionFile} 33 | */ 34 | public AlreadyInstalledPluginSignal(@NotNull PluginDescriptionFile installedPlugin, @NotNull PluginDescriptionFile installingPlugin) 35 | { 36 | this.installedPlugin = installedPlugin; 37 | this.installingPlugin = installingPlugin; 38 | this.replacePlugin = false; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/register/RegisterArgument.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.register; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import org.jetbrains.annotations.Nullable; 6 | import org.kunlab.kpm.installer.interfaces.InstallerArgument; 7 | 8 | /** 9 | * トークン登録の引数を格納するクラスです。 10 | */ 11 | @Data 12 | @AllArgsConstructor 13 | public class RegisterArgument implements InstallerArgument 14 | { 15 | /** 16 | * GitHubのアクセストークンです。 17 | */ 18 | @Nullable 19 | private final String token; 20 | } 21 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/register/RegisterErrorCause.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.register; 2 | 3 | /** 4 | * トークン登録のエラーを表す列挙型です。 5 | */ 6 | public enum RegisterErrorCause 7 | { 8 | /** 9 | * I/Oエラーが発生したことを示します。 10 | */ 11 | IO_EXCEPTION_OCCURRED, 12 | /** 13 | * トークンが無効であることを示します。 14 | */ 15 | INVALID_TOKEN, 16 | /** 17 | * キャンセルされたことを示します。 18 | */ 19 | GENERATE_CANCELLED, 20 | /** 21 | * ユーザ検証コードの要求に失敗したことを示します。 22 | */ 23 | VERIFICATION_CODE_REQUEST_FAILED, 24 | /** 25 | * コードの検証に失敗したことを示します。 26 | */ 27 | VERIFICATION_FAILED, 28 | } 29 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/register/RegisterTasks.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.register; 2 | 3 | /** 4 | * トークン登録のタスクを表す列挙型です。 5 | */ 6 | public enum RegisterTasks 7 | { 8 | /** 9 | * トークンの登録が初期化されたことを示します。 10 | */ 11 | INITIALIZED, 12 | /** 13 | * トークンの登録中であることを示します。 14 | */ 15 | REGISTERING_TOKEN, 16 | /** 17 | * ユーザ検証コードの要求中であることを示します。 18 | */ 19 | REQUESTING_USER_VERIFICATION_CODE, 20 | /** 21 | * ユーザの検証コードの入力を待機していることを示します。 22 | */ 23 | POLLING_USER_VERIFICATION, 24 | } 25 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/register/pojos/UserVerificationCodeResponse.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.register.pojos; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | import lombok.Value; 5 | import org.jetbrains.annotations.NotNull; 6 | 7 | /** 8 | * ユーザ検証コード要求のレスポンスです。 9 | */ 10 | @Value 11 | public class UserVerificationCodeResponse 12 | { 13 | /** 14 | * デバイスコードです。 15 | */ 16 | @NotNull 17 | @SerializedName("device_code") 18 | String deviceCode; 19 | 20 | /** 21 | * ユーザコードです。 22 | */ 23 | @NotNull 24 | @SerializedName("user_code") 25 | String userCode; 26 | 27 | /** 28 | * 認証URLです。 29 | */ 30 | @NotNull 31 | @SerializedName("verification_uri") 32 | String verificationUrl; 33 | 34 | /** 35 | * 認証コードの有効期限です。 36 | */ 37 | @SerializedName("expires_in") 38 | long expiresIn; 39 | 40 | /** 41 | * ポーリング間隔です。 42 | */ 43 | @SerializedName("interval") 44 | long interval; 45 | } 46 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/register/pojos/VerificationSubmitPollingResponse.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.register.pojos; 2 | 3 | import com.google.gson.annotations.SerializedName; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.Value; 6 | import org.jetbrains.annotations.NotNull; 7 | 8 | /** 9 | * ユーザが検証コードを入力し、トークンの取得が完了したことを示すレスポンスです。 10 | */ 11 | @Value 12 | @EqualsAndHashCode(callSuper = false) 13 | public class VerificationSubmitPollingResponse 14 | { 15 | /** 16 | * アクセストークンです。 17 | */ 18 | @NotNull 19 | @SerializedName("access_token") 20 | String accessToken; 21 | 22 | /** 23 | * トークンの種類です。 24 | */ 25 | @NotNull 26 | @SerializedName("token_type") 27 | String tokenType; 28 | 29 | /** 30 | * トークンのスコープです。 31 | */ 32 | @NotNull 33 | @SerializedName("scope") 34 | String scope; 35 | } 36 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/register/signals/TokenCheckingSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.register.signals; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import org.kunlab.kpm.signal.Signal; 6 | 7 | /** 8 | * 指定されたトークンが有効であるか、チェック中であることを示すシグナルです。 9 | */ 10 | @Data 11 | @EqualsAndHashCode(callSuper = false) 12 | public class TokenCheckingSignal extends Signal 13 | { 14 | } 15 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/register/signals/TokenGenerateStartingSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.register.signals; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import org.kunlab.kpm.signal.Signal; 6 | 7 | /** 8 | * トークンの生成の開始中であることを示すシグナルです。 9 | */ 10 | @Data 11 | @EqualsAndHashCode(callSuper = false) 12 | public class TokenGenerateStartingSignal extends Signal 13 | { 14 | /** 15 | * 生成を続けるかどうかを示すフラグです。 16 | */ 17 | private boolean continueGenerate; 18 | 19 | public TokenGenerateStartingSignal() 20 | { 21 | this.continueGenerate = true; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/register/signals/TokenStoredSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.register.signals; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.kunlab.kpm.signal.Signal; 7 | 8 | /** 9 | * トークンが登録されたことを示すシグナルです。 10 | */ 11 | @Value 12 | @EqualsAndHashCode(callSuper = false) 13 | public class TokenStoredSignal extends Signal 14 | { 15 | /** 16 | * 登録されたトークンです。 17 | */ 18 | @NotNull 19 | String token; 20 | } 21 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/register/signals/UserDoesntCompleteVerifySignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.register.signals; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.kunlab.kpm.signal.Signal; 7 | 8 | /** 9 | * ユーザが検証コードの入力を完了していないことを示すシグナルです。 10 | */ 11 | @Value 12 | @EqualsAndHashCode(callSuper = false) 13 | public class UserDoesntCompleteVerifySignal extends Signal 14 | { 15 | /** 16 | * ユーザが入力するコードです。 17 | */ 18 | @NotNull 19 | String userCode; 20 | 21 | /** 22 | * 認証URLです。 23 | */ 24 | @NotNull 25 | String verificationUrl; 26 | 27 | /** 28 | * コードが期限切れになる時間です。 29 | */ 30 | long expiresIn; 31 | 32 | /** 33 | * コードの残り有効期限です。 34 | */ 35 | long remainTime; 36 | } 37 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/register/signals/UserVerificationSuccessSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.register.signals; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.kunlab.kpm.signal.Signal; 7 | 8 | /** 9 | * ユーザ検証に成功したことを示すシグナルです。 10 | */ 11 | @Value 12 | @EqualsAndHashCode(callSuper = false) 13 | public class UserVerificationSuccessSignal extends Signal 14 | { 15 | /** 16 | * アクセストークンです。 17 | */ 18 | @NotNull 19 | String accessToken; 20 | 21 | /** 22 | * トークンのタイプです。(例:{@code Bearer}) 23 | */ 24 | @NotNull 25 | String tokenType; 26 | 27 | /** 28 | * トークンのスコープです。 29 | */ 30 | @NotNull 31 | String scope; 32 | } 33 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/register/signals/UserVerifyDeniedSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.register.signals; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.kunlab.kpm.signal.Signal; 7 | 8 | /** 9 | * ユーザがキャンセルをクリックしたことを示すシグナルです。 10 | */ 11 | @Value 12 | @EqualsAndHashCode(callSuper = false) 13 | public class UserVerifyDeniedSignal extends Signal 14 | { 15 | @NotNull 16 | String userCode; 17 | } 18 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/register/signals/VerificationCodeExpiredSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.register.signals; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.kunlab.kpm.signal.Signal; 7 | 8 | /** 9 | * ユーザの検証コードの有効期限が切れたことを示すシグナルです。 10 | */ 11 | @Value 12 | @EqualsAndHashCode(callSuper = false) 13 | public class VerificationCodeExpiredSignal extends Signal 14 | { 15 | /** 16 | * ユーザが入力するべきだった検証コードです。 17 | */ 18 | @NotNull 19 | String userCode; 20 | } 21 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/register/signals/VerificationCodeReceivedSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.register.signals; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.kunlab.kpm.installer.impls.register.pojos.UserVerificationCodeResponse; 7 | import org.kunlab.kpm.signal.Signal; 8 | 9 | /** 10 | * ユーザ検証コードを受信したことを示すシグナルです。 11 | */ 12 | @Value 13 | @EqualsAndHashCode(callSuper = false) 14 | public class VerificationCodeReceivedSignal extends Signal 15 | { 16 | /** 17 | * ユーザが入力する検証コードです。 18 | */ 19 | @NotNull 20 | String userCode; 21 | 22 | /** 23 | * ユーザが検証コードを入力するURLです。 24 | */ 25 | @NotNull 26 | String verificationUrl; 27 | 28 | /** 29 | * 認証コードの有効期限(秒)です。 30 | */ 31 | long expiresIn; 32 | 33 | /** 34 | * 認証コードの有効期限のUNIX時間です。 35 | */ 36 | long expiresAt; 37 | 38 | public VerificationCodeReceivedSignal(@NotNull UserVerificationCodeResponse apiResponse) 39 | { 40 | this.userCode = apiResponse.getUserCode(); 41 | this.verificationUrl = apiResponse.getVerificationUrl(); 42 | this.expiresIn = apiResponse.getExpiresIn(); // Unit: seconds 43 | this.expiresAt = System.currentTimeMillis() + (apiResponse.getExpiresIn() * 1000); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/register/signals/VerificationCodeRequestFailedSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.register.signals; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.kunlab.kpm.signal.Signal; 7 | 8 | /** 9 | * ユーザ検証コード要求に失敗したときに発行されるシグナルです。 10 | */ 11 | @Value 12 | @EqualsAndHashCode(callSuper = false) 13 | public class VerificationCodeRequestFailedSignal extends Signal 14 | { 15 | /** 16 | * HTTPステータスコードです。 17 | */ 18 | int httpStatusCode; 19 | /** 20 | * エラーメッセージです。 21 | */ 22 | @NotNull 23 | String errorMessage; 24 | } 25 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/register/signals/VerificationCodeRequestingSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.register.signals; 2 | 3 | import org.kunlab.kpm.signal.Signal; 4 | 5 | /** 6 | * ユーザ検証コードの要求中であることを示すシグナルです。 7 | */ 8 | public class VerificationCodeRequestingSignal extends Signal 9 | { 10 | } 11 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/uninstall/PluginUninstallSucceedResult.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.uninstall; 2 | 3 | import lombok.Getter; 4 | import org.kunlab.kpm.installer.InstallResultImpl; 5 | import org.kunlab.kpm.installer.interfaces.InstallProgress; 6 | import org.kunlab.kpm.installer.interfaces.Installer; 7 | import org.kunlab.kpm.installer.interfaces.InstallerArgument; 8 | import org.kunlab.kpm.task.tasks.uninstall.UnInstallResult; 9 | 10 | /** 11 | * プラグインのアンインストールの結果を表すクラスです。 12 | */ 13 | @Getter 14 | public class PluginUninstallSucceedResult extends InstallResultImpl 15 | { 16 | private final UnInstallResult result; 17 | 18 | public PluginUninstallSucceedResult(InstallProgress, UnInstallTasks>> progress, UnInstallResult result) 19 | { 20 | super(true, progress); 21 | this.result = result; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/uninstall/UnInstallErrorCause.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.uninstall; 2 | 3 | import org.kunlab.kpm.installer.signals.assertion.IgnoredPluginSignal; 4 | import org.kunlab.kpm.task.tasks.uninstall.signals.PluginIsDependencySignal; 5 | 6 | /** 7 | * アンインストールのエラーを表す列挙型です。 8 | */ 9 | public enum UnInstallErrorCause 10 | { 11 | /** 12 | * 指定されたプラグインが見つかりませんでした。 13 | */ 14 | PLUGIN_NOT_FOUND, 15 | /** 16 | * 指定されたプラグインが無視リストに登録されており、 17 | * {@link IgnoredPluginSignal} でも強制アンインストールが選択されませんでした。 18 | */ 19 | PLUGIN_IGNORED, 20 | /** 21 | * 指定されたプラグインが他のプラグインの依存関係に含まれており、 22 | * {@link PluginIsDependencySignal} でも強制アンインストールが選択されませんでした。 23 | */ 24 | PLUGIN_IS_DEPENDENCY, 25 | /** 26 | * アンインストールがユーザまたはシグナルによってキャンセルされました。 27 | */ 28 | CANCELLED, 29 | } 30 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/uninstall/UnInstallTasks.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.uninstall; 2 | 3 | /** 4 | * アンインストールのタスクを表す列挙型です。 5 | */ 6 | public enum UnInstallTasks 7 | { 8 | /** 9 | * アンインストーラが初期化されたことを示します。 10 | */ 11 | INITIALIZED, 12 | /** 13 | * プラグインの検索中を示します。 14 | */ 15 | SEARCHING_PLUGIN, 16 | /** 17 | * 環境の状態の確認中を示します。 18 | * 例えば、プラグインが存在するかや、無視リストに登録されていないかなどを確認します。 19 | */ 20 | CHECKING_ENVIRONMENT, 21 | 22 | /** 23 | * アンインストール順序の計算中を示します。 24 | */ 25 | COMPUTING_UNINSTALL_ORDER, 26 | /** 27 | * プラグインをアンインストール中を示します。 28 | */ 29 | UNINSTALLING_PLUGINS, 30 | } 31 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/uninstall/signals/SearchingPluginSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.uninstall.signals; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.kunlab.kpm.signal.Signal; 7 | 8 | /** 9 | * プラグインを検索中であることを示すシグナルです。 10 | */ 11 | @Data 12 | @EqualsAndHashCode(callSuper = false) 13 | public class SearchingPluginSignal extends Signal 14 | { 15 | @NotNull 16 | private String query; 17 | } 18 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/uninstall/signals/UninstallReadySignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.uninstall.signals; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | import org.bukkit.plugin.Plugin; 6 | import org.kunlab.kpm.signal.Signal; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * プラグインの列挙が完了したことを通知するシグナルです。 12 | */ 13 | @Getter 14 | public class UninstallReadySignal extends Signal 15 | { 16 | /** 17 | * アンインストール対象のプラグインのリストです。 18 | */ 19 | private final List plugins; 20 | /** 21 | * 自動でアンインストールを行うかどうかのフラグです。 22 | */ 23 | private final boolean autoConfirm; 24 | /** 25 | * アンインストールを続行するかどうかです。 26 | */ 27 | @Setter 28 | private boolean continueUninstall; 29 | 30 | public UninstallReadySignal(List plugins, boolean autoConfirm) 31 | { 32 | this.plugins = plugins; 33 | this.autoConfirm = autoConfirm; 34 | this.continueUninstall = true; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/update/UpdateArgument.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.update; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import org.kunlab.kpm.installer.interfaces.InstallerArgument; 6 | 7 | import java.util.Map; 8 | 9 | /** 10 | * エイリアスのアップデートの引数を格納するクラスです。 11 | */ 12 | @Data 13 | @AllArgsConstructor 14 | public class UpdateArgument implements InstallerArgument 15 | { 16 | /** 17 | * エイリアスのソースのURLです。 18 | */ 19 | Map remotes; 20 | } 21 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/update/UpdateErrorCause.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.update; 2 | 3 | /** 4 | * エイリアスのアップデートのエラーを表す列挙型です。 5 | */ 6 | public enum UpdateErrorCause 7 | { 8 | } 9 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/update/UpdateTasks.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.update; 2 | 3 | /** 4 | * エイリアスのアップデートのタスクを表す列挙型です。 5 | */ 6 | public enum UpdateTasks 7 | { 8 | /** 9 | * エイリアスのアップデートが初期化されたことを示します。 10 | */ 11 | INITIALIZED, 12 | /** 13 | * ソースのダウンロードを行います。 14 | */ 15 | DOWNLOADING_SOURCES, 16 | /** 17 | * エイリアスのアップデートを行います。 18 | */ 19 | UPDATING_ALIASES, 20 | } 21 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/update/signals/UpdateFinishedSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.update.signals; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.kunlab.kpm.signal.Signal; 6 | 7 | import java.util.Map; 8 | 9 | /** 10 | * エイリアスのアップデートが完了したことを示すシグナルです。 11 | */ 12 | @Value 13 | @EqualsAndHashCode(callSuper = false) 14 | public class UpdateFinishedSignal extends Signal 15 | { 16 | /** 17 | * エイリアスの数です。 18 | */ 19 | long aliases; 20 | /** 21 | * エイリアスとソースのペアの数です。 22 | */ 23 | Map aliasesBySources; 24 | } 25 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/upgrade/UpgradeArgument.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.upgrade; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import org.jetbrains.annotations.Nullable; 6 | import org.kunlab.kpm.installer.interfaces.InstallerArgument; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * アップグレードの引数を格納するクラスです。 12 | */ 13 | @Data 14 | @AllArgsConstructor 15 | public class UpgradeArgument implements InstallerArgument 16 | { 17 | /** 18 | * アップグレード対象のプラグインの名前のリストです。 19 | * これをnullにすると、全てのプラグインをアップグレードします。 20 | */ 21 | @Nullable 22 | private List targetPlugins; 23 | } 24 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/upgrade/UpgradeErrorCause.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.upgrade; 2 | 3 | /** 4 | * アップグレードのエラーを表す列挙型です。 5 | */ 6 | public enum UpgradeErrorCause 7 | { 8 | /** 9 | * 指定されたプラグインが見つかりませんでした。 10 | */ 11 | PLUGIN_NOT_FOUND, 12 | /** 13 | * KPM 自体のアップグレードをしようとしました。 14 | * また、他にアップグレードできるプラグインも存在しません。 15 | */ 16 | SELF_UPGRADE_ATTEMPTED, 17 | /** 18 | * プラグインの解決に失敗しました。 19 | */ 20 | PLUGIN_RESOLVE_FAILED, 21 | /** 22 | * プラグインのバージョンが定義されていません。 23 | */ 24 | PLUGIN_VERSION_NOT_DEFINED, 25 | /** 26 | * プラグインが定義してるバージョンの形式が不正です。 27 | */ 28 | PLUGIN_VERSION_FORMAT_MALFORMED, 29 | /** 30 | * プラグインのバージョンがサーバのバージョンと変わらないか、古いです。 31 | */ 32 | PLUGIN_IS_OLDER_OR_EQUAL, 33 | /** 34 | * アップグレードできるプラグインが見つかりませんでした。 35 | * このエラーは, 明確なエラーではない可能性があります。 36 | */ 37 | UP_TO_DATE, 38 | /** 39 | * アップグレードがキャンセルされました。 40 | */ 41 | CANCELLED, 42 | /** 43 | * プラグインが構成等で除外されています。 44 | */ 45 | PLUGIN_EXCLUDED, 46 | /** 47 | * アンインストーラのインスタンス化に失敗しました。 48 | */ 49 | UNINSTALLER_INSTANTIATION_FAILED, 50 | /** 51 | * アンインストールに失敗しました。 52 | */ 53 | UNINSTALL_FAILED, 54 | /** 55 | * インストーラのインスタンス化に失敗しました。 56 | */ 57 | INSTALLER_INSTANTIATION_FAILED, 58 | /** 59 | * インストールに失敗しました。 60 | */ 61 | INSTALL_FAILED, 62 | /** 63 | * 依存関係の読み込み順序計算に失敗しました。 64 | */ 65 | DEPENDENCY_LOAD_ORDER_COMPUTE_FAILED, 66 | } 67 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/upgrade/UpgradeTasks.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.upgrade; 2 | 3 | /** 4 | * アップグレードのタスクを表す列挙型です。 5 | */ 6 | public enum UpgradeTasks 7 | { 8 | /** 9 | * アップグレードが初期化されたことを示します。 10 | */ 11 | INITIALIZED, 12 | /** 13 | * アップグレード対象の検索中であることを示します。 14 | */ 15 | SEARCHING_PLUGIN, 16 | /** 17 | * 環境の状態を確認中であることを示します。 18 | */ 19 | CHECKING_ENVIRONMENT, 20 | /** 21 | * アップグレード対象のメタデータの取得中であることを示します。 22 | */ 23 | RETRIEVING_METADATA, 24 | /** 25 | * アップグレード対象のクエリの取得中であることを示します。 26 | */ 27 | RETRIEVING_UPDATE_QUERY, 28 | /** 29 | * プラグインの解決中であることを示します。 30 | */ 31 | RESOLVING_PLUGIN, 32 | /** 33 | * プラグインのアンインストール中であることを示します。 34 | */ 35 | UNINSTALLING_PLUGIN, 36 | /** 37 | * プラグインのインストール中であることを示します。 38 | */ 39 | INSTALLING_PLUGIN, 40 | /** 41 | * 無効化した依存関係のプラグインの読み込み順の再設定中であることを示します。 42 | */ 43 | COMPUTING_DEPENDENCY_LOAD_ORDER, 44 | /** 45 | * 無効化した依存関係のプラグインの再有効化中であることを示します。 46 | */ 47 | RE_LOADING_DEPENDENCIES, 48 | } 49 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/upgrade/signals/InstallFailedSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.upgrade.signals; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import org.kunlab.kpm.installer.impls.install.InstallTasks; 6 | import org.kunlab.kpm.installer.interfaces.InstallResult; 7 | import org.kunlab.kpm.signal.Signal; 8 | 9 | /** 10 | * インストールに失敗したことを表すシグナルです。 11 | */ 12 | @Data 13 | @EqualsAndHashCode(callSuper = false) 14 | public class InstallFailedSignal extends Signal 15 | { 16 | /** 17 | * 失敗した原因の特定のためのインストール失敗結果です。 18 | */ 19 | private final InstallResult failedResult; 20 | 21 | /** 22 | * このままアップグレードを続けるかどうかのフラグです。 23 | */ 24 | private boolean continueUpgrade; 25 | } 26 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/upgrade/signals/PluginNotFoundSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.upgrade.signals; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.kunlab.kpm.installer.impls.upgrade.PluginUpgrader; 7 | import org.kunlab.kpm.signal.Signal; 8 | 9 | /** 10 | * 指定されたプラグインが見つからなかったことを示すシグナルです。 11 | */ 12 | @Data 13 | @EqualsAndHashCode(callSuper = false) 14 | public class PluginNotFoundSignal extends Signal 15 | { 16 | /** 17 | * 指定されたプラグインの名前です。 18 | */ 19 | @NotNull 20 | private final String specifiedPluginName; 21 | 22 | /** 23 | * アップグレードを続けるかどうかのフラグです。 24 | * このフラグをfalseにすると、アップグレードは中断され、{@link PluginUpgrader}は失敗します。 25 | */ 26 | private boolean continueUpgrade; 27 | 28 | public PluginNotFoundSignal(@NotNull String specifiedPluginName) 29 | { 30 | this.specifiedPluginName = specifiedPluginName; 31 | this.continueUpgrade = true; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/upgrade/signals/ResolveFailedSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.upgrade.signals; 2 | 3 | import lombok.Getter; 4 | import org.bukkit.plugin.Plugin; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.kunlab.kpm.task.tasks.resolve.PluginResolveErrorCause; 7 | import org.kunlab.kpm.task.tasks.resolve.PluginResolveState; 8 | 9 | /** 10 | * 依存関係の解決に失敗したことを示すシグナルです。 11 | */ 12 | @Getter 13 | public class ResolveFailedSignal extends PluginNotFoundSignal 14 | { 15 | /** 16 | * 依存関係の解決に失敗したプラグインです。 17 | */ 18 | @NotNull 19 | private final Plugin plugin; 20 | 21 | /** 22 | * 依存関係の解決に失敗した理由です。 23 | */ 24 | @NotNull 25 | private final PluginResolveErrorCause errorCause; 26 | 27 | /** 28 | * 依存関係の解決に失敗したときの状態です。 29 | */ 30 | @NotNull 31 | private final PluginResolveState resolveStateState; 32 | 33 | public ResolveFailedSignal(@NotNull Plugin plugin, @NotNull PluginResolveErrorCause errorCause, @NotNull PluginResolveState resolveStateState) 34 | { 35 | super(plugin.getDescription().getName()); 36 | this.plugin = plugin; 37 | this.errorCause = errorCause; 38 | this.resolveStateState = resolveStateState; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/upgrade/signals/UpdateQueryRetrievedSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.upgrade.signals; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import org.bukkit.plugin.Plugin; 6 | import org.jetbrains.annotations.NotNull; 7 | import org.jetbrains.annotations.Nullable; 8 | import org.kunlab.kpm.signal.Signal; 9 | 10 | /** 11 | * アップグレードのクエリを取得したことを示すシグナルです。 12 | */ 13 | @Data 14 | @EqualsAndHashCode(callSuper = false) 15 | public class UpdateQueryRetrievedSignal extends Signal 16 | { 17 | /** 18 | * アップグレード対象のプラグインです。 19 | */ 20 | @NotNull 21 | private final Plugin plugin; 22 | 23 | /** 24 | * アップグレードに使用するクエリです。 25 | */ 26 | @Nullable 27 | private String query; 28 | } 29 | -------------------------------------------------------------------------------- /KPMPluginInstaller/src/main/java/org/kunlab/kpm/installer/impls/upgrade/signals/UpgradeReadySignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.installer.impls.upgrade.signals; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import org.bukkit.plugin.Plugin; 7 | import org.kunlab.kpm.resolver.interfaces.result.SuccessResult; 8 | import org.kunlab.kpm.signal.Signal; 9 | 10 | import java.util.List; 11 | import java.util.Map; 12 | import java.util.stream.Collectors; 13 | 14 | /** 15 | * アップグレードの準備が完了したことを示すシグナルです。 16 | */ 17 | @Data 18 | @EqualsAndHashCode(callSuper = false) 19 | public class UpgradeReadySignal extends Signal 20 | { 21 | private final List plugins; 22 | 23 | public UpgradeReadySignal(Map resolveResult) 24 | { 25 | this.plugins = resolveResult.entrySet().stream() 26 | .map(e -> new ResolvedPluginElement(e.getKey(), e.getValue())) 27 | .collect(Collectors.toList()); 28 | } 29 | 30 | public void setContinueUpgrade(boolean value) 31 | { 32 | this.plugins.forEach(e -> e.setContinueUpgrade(value)); 33 | } 34 | 35 | @Data 36 | @AllArgsConstructor 37 | public static class ResolvedPluginElement 38 | { 39 | /** 40 | * アップグレード対象のプラグインです。 41 | */ 42 | private final Plugin plugin; 43 | /** 44 | * アップグレードのために解決された解決結果です。 45 | */ 46 | private final SuccessResult resolveResult; 47 | 48 | private boolean continueUpgrade; 49 | 50 | public ResolvedPluginElement(Plugin plugin, SuccessResult resolveResult) 51 | { 52 | this(plugin, resolveResult, true); 53 | } 54 | } 55 | } 56 | -------------------------------------------------------------------------------- /KPMResolver/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | org.kunlab.kpm 8 | TeamKunPluginManager 9 | 3.1.0 10 | ../pom.xml 11 | 12 | 13 | KPMResolver 14 | 15 | 16 | 8 17 | 8 18 | UTF-8 19 | 20 | 21 | 22 | 23 | org.kunlab.kpm 24 | KPMCommon 25 | 3.1.0 26 | provided 27 | 28 | 29 | org.kunlab.kpm 30 | KPMModels 31 | 3.1.0 32 | provided 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /KPMResolver/src/main/java/org/kunlab/kpm/resolver/QueryContextImpl.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.resolver; 2 | 3 | import lombok.Builder; 4 | import lombok.Data; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.jetbrains.annotations.Nullable; 7 | import org.kunlab.kpm.resolver.interfaces.QueryContext; 8 | import org.kunlab.kpm.versioning.Version; 9 | 10 | @Data 11 | @Builder 12 | class QueryContextImpl implements QueryContext 13 | { 14 | @Nullable 15 | String resolverName; 16 | @NotNull 17 | String query; 18 | @Nullable 19 | Version version; 20 | boolean chooseVersion; 21 | 22 | @Override 23 | public String toString() 24 | { 25 | StringBuilder sb = new StringBuilder(); 26 | 27 | if (this.resolverName != null) 28 | sb.append(this.resolverName).append(resolverNameQuerySeparator); 29 | sb.append(this.query); 30 | if (this.version != null) 31 | sb.append(versionEqualQuerySeparator).append(this.version); 32 | 33 | return sb.toString(); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /KPMResolver/src/main/java/org/kunlab/kpm/resolver/impl/AliasPluginResolver.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.resolver.impl; 2 | 3 | import org.jetbrains.annotations.NotNull; 4 | import org.kunlab.kpm.alias.interfaces.Alias; 5 | import org.kunlab.kpm.alias.interfaces.AliasProvider; 6 | import org.kunlab.kpm.interfaces.KPMRegistry; 7 | import org.kunlab.kpm.resolver.ErrorCause; 8 | import org.kunlab.kpm.resolver.interfaces.BaseResolver; 9 | import org.kunlab.kpm.resolver.interfaces.QueryContext; 10 | import org.kunlab.kpm.resolver.interfaces.result.MultiResult; 11 | import org.kunlab.kpm.resolver.interfaces.result.ResolveResult; 12 | import org.kunlab.kpm.resolver.result.ErrorResultImpl; 13 | import org.kunlab.kpm.resolver.result.PipeResult; 14 | 15 | /** 16 | * エイリアスを使用してプラグインを解決するクラスです。 17 | */ 18 | public class AliasPluginResolver implements BaseResolver 19 | { 20 | private final AliasProvider aliasProvider; 21 | 22 | public AliasPluginResolver(@NotNull KPMRegistry registry) 23 | { 24 | this.aliasProvider = registry.getAliasProvider(); 25 | } 26 | 27 | @Override 28 | public ResolveResult resolve(QueryContext query) 29 | { 30 | Alias alias = this.aliasProvider.getQueryByAlias(query.getQuery()); 31 | 32 | if (alias == null) 33 | return new ErrorResultImpl(this, ErrorCause.RESOLVER_MISMATCH, ResolveResult.Source.LOCAL_KNOWN); 34 | 35 | query.setQuery(alias.getQuery()); 36 | return new PipeResult(this, query); 37 | } 38 | 39 | @Override 40 | public ResolveResult autoPickOnePlugin(MultiResult multiResult) 41 | { 42 | throw new UnsupportedOperationException(); 43 | } 44 | 45 | @Override 46 | public boolean isValidResolver(QueryContext query) 47 | { 48 | return true; 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /KPMResolver/src/main/java/org/kunlab/kpm/resolver/impl/RawURLResolver.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.resolver.impl; 2 | 3 | import org.kunlab.kpm.resolver.interfaces.QueryContext; 4 | import org.kunlab.kpm.resolver.interfaces.URLResolver; 5 | import org.kunlab.kpm.resolver.interfaces.result.MultiResult; 6 | import org.kunlab.kpm.resolver.interfaces.result.ResolveResult; 7 | import org.kunlab.kpm.resolver.result.AbstractSuccessResult; 8 | 9 | public class RawURLResolver implements URLResolver 10 | { 11 | 12 | @Override 13 | public ResolveResult resolve(QueryContext query) 14 | { 15 | return new RawSuccessResult(query.getQuery()); 16 | } 17 | 18 | @Override 19 | public ResolveResult autoPickOnePlugin(MultiResult multiResult) 20 | { 21 | throw new UnsupportedOperationException(); 22 | } 23 | 24 | @Override 25 | public String[] getHosts() 26 | { 27 | return new String[0]; 28 | } 29 | 30 | private class RawSuccessResult extends AbstractSuccessResult 31 | { 32 | public RawSuccessResult(String downloadUrl) 33 | { 34 | super(RawURLResolver.this, downloadUrl, null, null, ResolveResult.Source.DIRECT); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /KPMResolver/src/main/java/org/kunlab/kpm/resolver/impl/SpigotMCSuccessResult.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.resolver.impl; 2 | 3 | import lombok.Getter; 4 | import org.jetbrains.annotations.NotNull; 5 | import org.jetbrains.annotations.Nullable; 6 | import org.kunlab.kpm.resolver.interfaces.BaseResolver; 7 | import org.kunlab.kpm.resolver.interfaces.result.MarketplaceResult; 8 | import org.kunlab.kpm.resolver.interfaces.result.VersionedResult; 9 | import org.kunlab.kpm.resolver.result.AbstractSuccessResult; 10 | 11 | import java.util.List; 12 | 13 | @Getter 14 | public class SpigotMCSuccessResult extends AbstractSuccessResult implements MarketplaceResult, VersionedResult 15 | { 16 | @NotNull 17 | private final String title; 18 | 19 | @NotNull 20 | private final String url; 21 | 22 | @NotNull 23 | private final String description; 24 | 25 | @NotNull 26 | private final List versions; 27 | 28 | public SpigotMCSuccessResult(@NotNull BaseResolver resolver, @Nullable String version, @NotNull String title, long id, @NotNull String description, @NotNull List versions) 29 | { 30 | super(resolver, "https://apple.api.spiget.org/v2/resources/" + id + 31 | (version != null ? "/versions/" + version: "") + "/download", 32 | null, version, Source.SPIGOT_MC 33 | ); 34 | this.title = title; 35 | this.description = description; 36 | this.url = "https://www.spigotmc.org/resources/" + id; 37 | this.versions = versions; 38 | 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /KPMResolver/src/main/java/org/kunlab/kpm/resolver/impl/github/GHURLParseResult.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.resolver.impl.github; 2 | 3 | import lombok.Value; 4 | import org.jetbrains.annotations.NotNull; 5 | import org.jetbrains.annotations.Nullable; 6 | 7 | @Value 8 | class GHURLParseResult 9 | { 10 | @NotNull 11 | String owner; 12 | @NotNull 13 | String repositoryName; 14 | @NotNull 15 | String repository; 16 | @Nullable 17 | String tag; 18 | @Nullable 19 | String finalName; 20 | } 21 | -------------------------------------------------------------------------------- /KPMResolver/src/main/java/org/kunlab/kpm/resolver/result/AbstractSuccessResult.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.resolver.result; 2 | 3 | import lombok.Data; 4 | import org.jetbrains.annotations.NotNull; 5 | import org.jetbrains.annotations.Nullable; 6 | import org.kunlab.kpm.resolver.interfaces.BaseResolver; 7 | import org.kunlab.kpm.resolver.interfaces.result.SuccessResult; 8 | 9 | /** 10 | * 解決に成功したことを表すクエリ解決結果です。 11 | */ 12 | @Data 13 | public abstract class AbstractSuccessResult implements SuccessResult 14 | { 15 | @NotNull 16 | private final String downloadUrl; 17 | 18 | @Nullable 19 | private final String fileName; 20 | 21 | @Nullable 22 | private final String version; 23 | 24 | @NotNull 25 | private final Source source; 26 | 27 | @NotNull 28 | private final BaseResolver resolver; 29 | 30 | public AbstractSuccessResult(BaseResolver resolver, @NotNull String downloadUrl, @NotNull Source source) 31 | { 32 | this(resolver, downloadUrl, null, null, source); 33 | } 34 | 35 | public AbstractSuccessResult(@NotNull BaseResolver resolver, @NotNull String downloadUrl, @Nullable String fileName, @Nullable String version, @NotNull Source source) 36 | { 37 | this.resolver = resolver; 38 | this.downloadUrl = downloadUrl; 39 | this.fileName = fileName; 40 | this.version = version; 41 | this.source = source; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /KPMResolver/src/main/java/org/kunlab/kpm/resolver/result/ErrorResultImpl.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.resolver.result; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.Getter; 6 | import org.jetbrains.annotations.NotNull; 7 | import org.jetbrains.annotations.Nullable; 8 | import org.kunlab.kpm.resolver.ErrorCause; 9 | import org.kunlab.kpm.resolver.interfaces.BaseResolver; 10 | import org.kunlab.kpm.resolver.interfaces.result.ErrorResult; 11 | import org.kunlab.kpm.resolver.interfaces.result.ResolveResult; 12 | 13 | @AllArgsConstructor 14 | @EqualsAndHashCode 15 | @Getter 16 | public class ErrorResultImpl implements ErrorResult 17 | { 18 | @Nullable 19 | private final BaseResolver resolver; 20 | @NotNull 21 | private final ErrorCause cause; 22 | @NotNull 23 | private final ResolveResult.Source source; 24 | @Nullable 25 | private final String message; 26 | 27 | public ErrorResultImpl(@Nullable BaseResolver resolver, @NotNull ErrorCause cause, @NotNull Source source) 28 | { 29 | this(resolver, cause, source, null); 30 | } 31 | 32 | } 33 | -------------------------------------------------------------------------------- /KPMResolver/src/main/java/org/kunlab/kpm/resolver/result/MultiResultImpl.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.resolver.result; 2 | 3 | import lombok.Value; 4 | import org.kunlab.kpm.resolver.interfaces.BaseResolver; 5 | import org.kunlab.kpm.resolver.interfaces.result.MultiResult; 6 | import org.kunlab.kpm.resolver.interfaces.result.ResolveResult; 7 | 8 | /** 9 | * 解決結果が複数ある場合に返されるクラスです。 10 | */ 11 | @Value 12 | public class MultiResultImpl implements MultiResult 13 | { 14 | /** 15 | * この解決を提供したリゾルバです。 16 | */ 17 | BaseResolver resolver; 18 | /** 19 | * 解決結果の配列です。 20 | */ 21 | ResolveResult[] results; 22 | } 23 | -------------------------------------------------------------------------------- /KPMResolver/src/main/java/org/kunlab/kpm/resolver/result/PipeResult.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.resolver.result; 2 | 3 | import lombok.Value; 4 | import org.jetbrains.annotations.NotNull; 5 | import org.kunlab.kpm.resolver.PluginResolverImpl; 6 | import org.kunlab.kpm.resolver.interfaces.BaseResolver; 7 | import org.kunlab.kpm.resolver.interfaces.QueryContext; 8 | import org.kunlab.kpm.resolver.interfaces.result.ResolveResult; 9 | 10 | /** 11 | * 他のリゾルバに解決を委譲することを表す解決結果です。 12 | * 通常は内部でのみで使用され、{@link PluginResolverImpl#resolve(String)} から返されることはありません。 13 | */ 14 | @Value 15 | public class PipeResult implements ResolveResult 16 | { 17 | /** 18 | * この解決を提供したリゾルバです。 19 | */ 20 | @NotNull 21 | BaseResolver resolver; 22 | /** 23 | * リゾルバがクエリを改変する場合に使用されるクエリです。 24 | */ 25 | @NotNull 26 | QueryContext query; 27 | } 28 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/AbstractTaskResult.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.jetbrains.annotations.Nullable; 7 | import org.kunlab.kpm.task.interfaces.TaskResult; 8 | 9 | /** 10 | * 実行したタスクの結果を表します。 11 | * 12 | * @param タスクの状態の型 13 | * @param タスクのエラー原因の型 14 | */ 15 | @AllArgsConstructor 16 | @Getter 17 | public abstract class AbstractTaskResult, EC extends Enum> implements TaskResult 18 | { 19 | /** 20 | * タスクが成功したかどうかです。 21 | */ 22 | private final boolean success; 23 | /** 24 | * タスクの状態です。 25 | */ 26 | @NotNull 27 | private final S state; 28 | 29 | /** 30 | * タスクのエラー原因です。 31 | * タスクが成功した場合は {@code null} です。 32 | */ 33 | @Nullable 34 | private final EC errorCause; 35 | } 36 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/TaskFailedException.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task; 2 | 3 | import lombok.Getter; 4 | import org.kunlab.kpm.task.interfaces.TaskResult; 5 | 6 | /** 7 | * タスクが失敗したことを表すクラスです。 8 | */ 9 | public class TaskFailedException extends Exception 10 | { 11 | @Getter 12 | private final TaskResult, ? extends Enum> result; 13 | 14 | public TaskFailedException(TaskResult, ? extends Enum> result) 15 | { 16 | this.result = result; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/source/download/SourceDownloadArgument.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.alias.source.download; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.kunlab.kpm.task.interfaces.TaskArgument; 6 | 7 | import java.util.Map; 8 | 9 | /** 10 | * ソースファイルのダウンロードを行うタスクの引数です。 11 | */ 12 | @Value 13 | @EqualsAndHashCode(callSuper = false) 14 | public class SourceDownloadArgument implements TaskArgument 15 | { 16 | /** 17 | * エイリアスのソースのURLです。 18 | * キーはリモートの名前、値はHTTP(S)サーバのURLです。 19 | */ 20 | Map remotes; 21 | } 22 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/source/download/SourceDownloadErrorCause.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.alias.source.download; 2 | 3 | /** 4 | * ソースファイルのダウンロードに失敗した理由を表します。 5 | */ 6 | public enum SourceDownloadErrorCause 7 | { 8 | /** 9 | * すべてのダウンロードに失敗しました。 10 | */ 11 | ALL_DOWNLOAD_FAILED, 12 | } 13 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/source/download/SourceDownloadResult.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.alias.source.download; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import net.kunmc.lab.peyangpaperutils.lib.utils.Pair; 6 | import org.jetbrains.annotations.NotNull; 7 | import org.jetbrains.annotations.Nullable; 8 | import org.kunlab.kpm.task.AbstractTaskResult; 9 | 10 | import java.net.URI; 11 | import java.nio.file.Path; 12 | import java.util.Map; 13 | 14 | /** 15 | * ソースファイルのダウンロードを行うタスクの結果です。 16 | */ 17 | @Value 18 | @EqualsAndHashCode(callSuper = true) 19 | public class SourceDownloadResult extends AbstractTaskResult 20 | { 21 | /** 22 | * ダウンロードしたソースの名前とパスのマップです。 23 | */ 24 | Map> downloadedSources; 25 | 26 | public SourceDownloadResult(boolean success, @NotNull SourceDownloadState state, 27 | @Nullable SourceDownloadErrorCause errorCause, Map> downloadedSources) 28 | { 29 | super(success, state, errorCause); 30 | this.downloadedSources = downloadedSources; 31 | } 32 | 33 | public SourceDownloadResult(boolean success, @NotNull SourceDownloadState state, @Nullable SourceDownloadErrorCause errorCause) 34 | { 35 | this(success, state, errorCause, null); 36 | } 37 | 38 | public SourceDownloadResult(boolean success, @NotNull SourceDownloadState state, Map> downloadedSources) 39 | { 40 | this(success, state, null, downloadedSources); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/source/download/SourceDownloadState.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.alias.source.download; 2 | 3 | /** 4 | * ソースファイルのダウンロードの状態を表します。 5 | */ 6 | public enum SourceDownloadState 7 | { 8 | /** 9 | * ソースファイルのダウンロードが初期化されたことを示します。 10 | */ 11 | INITIALIZED, 12 | /** 13 | * URLの解析中であることを示します。 14 | */ 15 | ANALYZING_URLS, 16 | /** 17 | * ソースをダウンロード中であることを示します。 18 | */ 19 | DOWNLOADING_SOURCES, 20 | } 21 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/source/download/signals/InvalidRemoteSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.alias.source.download.signals; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.jetbrains.annotations.Nullable; 7 | import org.kunlab.kpm.signal.Signal; 8 | 9 | import java.net.URL; 10 | 11 | /** 12 | * リモートが不正だった場合に送信されるシグナルです。 13 | */ 14 | @AllArgsConstructor 15 | @Getter 16 | public abstract class InvalidRemoteSignal extends Signal 17 | { 18 | /** 19 | * リモートの名前です。 20 | */ 21 | @NotNull 22 | private final String remoteName; 23 | /** 24 | * リモートのURLです。 25 | */ 26 | @NotNull 27 | private final String remoteURL; 28 | 29 | /** 30 | * URLのオブジェクトです。 31 | */ 32 | @Nullable 33 | private final URL urlObject; 34 | 35 | public InvalidRemoteSignal(@NotNull String remoteName, @NotNull String remoteURL) 36 | { 37 | this(remoteName, remoteURL, null); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/source/download/signals/MalformedURLSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.alias.source.download.signals; 2 | 3 | /** 4 | * 不正なURLが指定された場合に送信されるシグナルです。 5 | */ 6 | public class MalformedURLSignal extends InvalidRemoteSignal 7 | { 8 | public MalformedURLSignal(String remoteName, String remoteURL) 9 | { 10 | super(remoteName, remoteURL); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/source/download/signals/SourceDownloadFailedSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.alias.source.download.signals; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.kunlab.kpm.signal.Signal; 6 | import org.kunlab.kpm.task.tasks.download.DownloadResult; 7 | 8 | /** 9 | * ソースファイルのダウンロードに失敗したことを示すシグナルです。 10 | */ 11 | @Value 12 | @EqualsAndHashCode(callSuper = false) 13 | public class SourceDownloadFailedSignal extends Signal 14 | { 15 | String remoteName; 16 | DownloadResult downloadResult; 17 | } 18 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/source/download/signals/UnsupportedProtocolSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.alias.source.download.signals; 2 | 3 | import lombok.Getter; 4 | 5 | import java.net.URL; 6 | 7 | /** 8 | * サポートされていないプロトコルが指定された場合に送信されるシグナルです。 9 | */ 10 | @Getter 11 | public class UnsupportedProtocolSignal extends InvalidRemoteSignal 12 | { 13 | /** 14 | * プロトコル名です。 15 | */ 16 | private final String protocol; 17 | 18 | public UnsupportedProtocolSignal(String remoteName, URL remoteURL) 19 | { 20 | super(remoteName, remoteURL.toString(), remoteURL); 21 | this.protocol = remoteURL.getProtocol(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/update/UpdateAliasesArgument.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.alias.update; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import net.kunmc.lab.peyangpaperutils.lib.utils.Pair; 6 | import org.kunlab.kpm.task.interfaces.TaskArgument; 7 | 8 | import java.net.URI; 9 | import java.nio.file.Path; 10 | import java.util.Map; 11 | 12 | /** 13 | * エイリアスのアップデートを行うタスクの引数です。 14 | */ 15 | @Value 16 | @EqualsAndHashCode(callSuper = false) 17 | public class UpdateAliasesArgument implements TaskArgument 18 | { 19 | /** 20 | * エイリアスのソースファイルの名前とペアのマップです。 21 | * ペアの左辺はリモートのURL、右辺はローカルのパスです。 22 | */ 23 | Map> sources; 24 | } 25 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/update/UpdateAliasesErrorCause.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.alias.update; 2 | 3 | /** 4 | * エイリアスのアップデートに失敗した理由を表します。 5 | */ 6 | public enum UpdateAliasesErrorCause 7 | { 8 | /** 9 | * すべてのアップデートに失敗しました。 10 | */ 11 | ALL_UPDATE_FAILED, 12 | } 13 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/update/UpdateAliasesResult.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.alias.update; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.jetbrains.annotations.Nullable; 7 | import org.kunlab.kpm.task.AbstractTaskResult; 8 | 9 | import java.util.Map; 10 | 11 | /** 12 | * エイリアスのアップデートを行うタスクの結果です。 13 | */ 14 | @Value 15 | @EqualsAndHashCode(callSuper = true) 16 | public class UpdateAliasesResult extends AbstractTaskResult 17 | { 18 | boolean warn; 19 | long aliasesCount; 20 | Map aliasesCountBySource; 21 | 22 | public UpdateAliasesResult(boolean success, @NotNull UpdateAliasesState state, @Nullable UpdateAliasesErrorCause errorCause, 23 | boolean warn, long aliasesCount, Map aliasesCountBySource) 24 | { 25 | super(success, state, errorCause); 26 | this.warn = warn; 27 | this.aliasesCount = aliasesCount; 28 | this.aliasesCountBySource = aliasesCountBySource; 29 | } 30 | 31 | public UpdateAliasesResult(boolean success, @NotNull UpdateAliasesState state, 32 | boolean warn, long aliasesCount, Map aliasesCountBySource) 33 | { 34 | this(success, state, null, warn, aliasesCount, aliasesCountBySource); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/update/UpdateAliasesState.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.alias.update; 2 | 3 | /** 4 | * エイリアスのアップデートの状態を表します。 5 | */ 6 | public enum UpdateAliasesState 7 | { 8 | /** 9 | * エイリアスのアップデートが初期化されたことを示します。 10 | */ 11 | INITIALIZED, 12 | /** 13 | * エイリアスのアップデート中であることを示します。 14 | */ 15 | UPDATING, 16 | } 17 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/update/signals/AliasUpdateSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.alias.update.signals; 2 | 3 | import lombok.AccessLevel; 4 | import lombok.AllArgsConstructor; 5 | import lombok.Data; 6 | import lombok.EqualsAndHashCode; 7 | import org.jetbrains.annotations.NotNull; 8 | import org.kunlab.kpm.signal.Signal; 9 | 10 | import java.io.UncheckedIOException; 11 | import java.net.MalformedURLException; 12 | import java.net.URI; 13 | import java.net.URL; 14 | 15 | @Data 16 | @EqualsAndHashCode(callSuper = false) 17 | @AllArgsConstructor(access = AccessLevel.PRIVATE) 18 | public class AliasUpdateSignal extends Signal 19 | { 20 | @NotNull 21 | private final String source; 22 | @NotNull 23 | private final URL sourceURL; 24 | @NotNull 25 | private final String name; 26 | 27 | private boolean skip; 28 | private String alias; 29 | 30 | public AliasUpdateSignal(@NotNull String source, @NotNull URI sourceURI, @NotNull String name, 31 | @NotNull String alias) 32 | { 33 | this.source = source; 34 | this.name = name; 35 | 36 | this.skip = false; 37 | this.alias = alias; 38 | 39 | try 40 | { 41 | this.sourceURL = sourceURI.toURL(); 42 | } 43 | catch (MalformedURLException e) 44 | { 45 | throw new UncheckedIOException("Invalid source URI", e); 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/update/signals/InvalidSourceSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.alias.update.signals; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.jetbrains.annotations.Nullable; 7 | 8 | import java.nio.file.Path; 9 | 10 | /** 11 | * ソースファイルが不正だった場合に送信されるシグナルです。 12 | */ 13 | @Value 14 | @EqualsAndHashCode(callSuper = true) 15 | public class InvalidSourceSignal extends SourceSignal 16 | { 17 | /** 18 | * エラーの原因です。 19 | */ 20 | ErrorCause errorCause; 21 | 22 | public InvalidSourceSignal(@NotNull String sourceName, @NotNull Path sourcePath, @Nullable String sourceURL, ErrorCause errorCause) 23 | { 24 | super(sourceName, sourcePath, sourceURL); 25 | this.errorCause = errorCause; 26 | } 27 | 28 | /** 29 | * エラーの理由です。 30 | */ 31 | public enum ErrorCause 32 | { 33 | /** 34 | * ソースファイルが不正な形式です。 35 | */ 36 | SOURCE_FILE_MALFORMED, 37 | /** 38 | * I/Oエラーが発生しました。 39 | */ 40 | IO_ERROR, 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/update/signals/SourcePreparedSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.alias.update.signals; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.jetbrains.annotations.Nullable; 7 | 8 | import java.nio.file.Path; 9 | 10 | /** 11 | * ソースが準備されたことを示すシグナルです。 12 | */ 13 | @Getter 14 | @Setter 15 | public class SourcePreparedSignal extends SourceSignal 16 | { 17 | private boolean skip; 18 | 19 | public SourcePreparedSignal(@NotNull String sourceName, @NotNull Path sourcePath, @Nullable String sourceURL) 20 | { 21 | super(sourceName, sourcePath, sourceURL); 22 | 23 | this.skip = true; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/alias/update/signals/SourceSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.alias.update.signals; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.jetbrains.annotations.Nullable; 7 | import org.kunlab.kpm.signal.Signal; 8 | 9 | import java.nio.file.Path; 10 | 11 | @Data 12 | @EqualsAndHashCode(callSuper = false) 13 | abstract class SourceSignal extends Signal 14 | { 15 | /** 16 | * ソースの名前です。 17 | */ 18 | @NotNull 19 | private final String sourceName; 20 | /** 21 | * ソースファイルのパスです。 22 | */ 23 | @NotNull 24 | private final Path sourcePath; 25 | /** 26 | * ソースファイルのURLです。 27 | */ 28 | @Nullable 29 | private final String sourceURL; 30 | } 31 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/DependencyElementImpl.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.dependencies; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Value; 5 | import org.bukkit.plugin.PluginDescriptionFile; 6 | import org.jetbrains.annotations.NotNull; 7 | import org.jetbrains.annotations.Nullable; 8 | import org.kunlab.kpm.kpminfo.KPMInformationFile; 9 | import org.kunlab.kpm.task.interfaces.dependencies.DependencyElement; 10 | 11 | import java.nio.file.Path; 12 | 13 | @Value 14 | @AllArgsConstructor 15 | public class DependencyElementImpl implements DependencyElement 16 | { 17 | @NotNull 18 | String pluginName; 19 | @NotNull 20 | Path pluginPath; 21 | @NotNull 22 | PluginDescriptionFile pluginDescription; 23 | @Nullable 24 | KPMInformationFile kpmInfoFile; 25 | @Nullable 26 | String query; 27 | } 28 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/DependsCollectErrorCause.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.dependencies.collector; 2 | 3 | /** 4 | * 依存関係の取得に失敗した理由を表します。 5 | */ 6 | public enum DependsCollectErrorCause 7 | { 8 | /** 9 | * いくつかの依存関係の解決に失敗しました。 10 | */ 11 | SOME_DEPENDENCIES_COLLECT_FAILED, 12 | } 13 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/DependsCollectResult.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.dependencies.collector; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.jetbrains.annotations.Nullable; 7 | import org.kunlab.kpm.task.AbstractTaskResult; 8 | import org.kunlab.kpm.task.interfaces.dependencies.DependencyElement; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | * 依存関係の解決結果を表します。 14 | */ 15 | @Value 16 | @EqualsAndHashCode(callSuper = true) 17 | public class DependsCollectResult extends AbstractTaskResult 18 | { 19 | /** 20 | * 依存関係解決対象のプラグインです。 21 | */ 22 | @NotNull 23 | String targetPlugin; 24 | 25 | /** 26 | * 依存関係の要素のリストです。解決に失敗した場合は空のリストです。 27 | * 28 | * @see #isSuccess() 29 | */ 30 | @NotNull 31 | List collectedPlugins; 32 | 33 | /** 34 | * 解決に失敗した依存関係の要素のリストです。解決に成功した場合は空のリストです。 35 | * 36 | * @see #isSuccess() 37 | */ 38 | @NotNull 39 | List collectFailedPlugins; 40 | 41 | public DependsCollectResult(@NotNull DependsCollectState taskState, 42 | @Nullable DependsCollectErrorCause errorCause, @NotNull String targetPlugin, 43 | @NotNull List collectedPlugins, 44 | @NotNull List collectFailedPlugins) 45 | { 46 | super(collectFailedPlugins.isEmpty(), taskState, errorCause); 47 | this.targetPlugin = targetPlugin; 48 | this.collectedPlugins = collectedPlugins; 49 | this.collectFailedPlugins = collectFailedPlugins; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/DependsCollectState.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.dependencies.collector; 2 | 3 | /** 4 | * 依存関係取得の状態を表す列挙型です。 5 | */ 6 | public enum DependsCollectState 7 | { 8 | /** 9 | * 依存関係の取得が初期化されたことを示します。 10 | */ 11 | INITIALIZED, 12 | 13 | /** 14 | * 依存関係の解決中であることを示します。 15 | */ 16 | RESOLVING_DEPENDS, 17 | /** 18 | * 依存関係のダウンロード中であることを示します。 19 | */ 20 | DOWNLOADING_DEPENDS, 21 | 22 | /** 23 | * 依存関係の依存関係が検出された場合、再帰的に解決していることを示します。 24 | */ 25 | COLLECTING_DEPENDS_DEPENDS // Dependency's depends. 26 | } 27 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependencyCollectDependencysDependsFailedSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.dependencies.collector.signals; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.kunlab.kpm.signal.Signal; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * 依存関係の依存関係を取得する際に失敗したことを示すシグナルです。 12 | */ 13 | @Value 14 | @EqualsAndHashCode(callSuper = false) 15 | public class DependencyCollectDependencysDependsFailedSignal extends Signal 16 | { 17 | /** 18 | * 対象のプラグインの名前です。 19 | */ 20 | @NotNull 21 | String pluginName; 22 | /** 23 | * 取得に失敗した依存関係の名前です。 24 | */ 25 | @NotNull 26 | List collectFailedDependencies; 27 | } 28 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependencyCollectFailedSignalBase.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.dependencies.collector.signals; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import org.kunlab.kpm.signal.Signal; 6 | 7 | /** 8 | * 依存関係の取得に失敗したことを示すシグナルです。 9 | * このシグナルは基礎的なものであり、具体的な失敗の理由はサブクラスによって表現されます。 10 | */ 11 | @AllArgsConstructor 12 | @Getter 13 | public abstract class DependencyCollectFailedSignalBase extends Signal 14 | { 15 | /** 16 | * 取得に失敗した依存関係の名前です。 17 | */ 18 | private final String failedDependency; 19 | } 20 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependencyDownloadFailedSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.dependencies.collector.signals; 2 | 3 | import lombok.Getter; 4 | import org.jetbrains.annotations.NotNull; 5 | 6 | /** 7 | * 依存関係のダウンロードに失敗したことを示すシグナルです。 8 | */ 9 | public class DependencyDownloadFailedSignal extends DependencyCollectFailedSignalBase 10 | { 11 | /** 12 | * ダウンロード元のURLです。 13 | */ 14 | @NotNull 15 | @Getter 16 | private final String url; 17 | 18 | public DependencyDownloadFailedSignal(@NotNull String failedDependency, @NotNull String url) 19 | { 20 | super(failedDependency); 21 | 22 | this.url = url; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependencyLoadDescriptionFailedSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.dependencies.collector.signals; 2 | 3 | /** 4 | * 依存関係のプラグイン情報ファイルの読み込みに失敗したことを示すシグナルです。 5 | */ 6 | public class DependencyLoadDescriptionFailedSignal extends DependencyCollectFailedSignalBase 7 | { 8 | public DependencyLoadDescriptionFailedSignal(String failedDependency) 9 | { 10 | super(failedDependency); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependencyNameMismatchSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.dependencies.collector.signals; 2 | 3 | import lombok.Getter; 4 | 5 | /** 6 | * 依存関係解決時に使用された名前と、プラグインが開示している名前が一致しなかったことを示すシグナルです。 7 | */ 8 | public class DependencyNameMismatchSignal extends DependencyCollectFailedSignalBase 9 | { 10 | /** 11 | * 期待されたプラグインの名前です。 12 | */ 13 | @Getter 14 | private final String exceptedDependencyName; 15 | 16 | public DependencyNameMismatchSignal(String actualDependencyName, String exceptedDependencyName) 17 | { 18 | super(actualDependencyName); 19 | this.exceptedDependencyName = exceptedDependencyName; 20 | } 21 | 22 | /** 23 | * 実際の依存関係の名前を取得します。 24 | * 25 | * @return 実際の依存関係の名前 26 | */ 27 | public String getActualDependencyName() 28 | { 29 | return this.getFailedDependency(); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependencyResolveFailedSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.dependencies.collector.signals; 2 | 3 | /** 4 | * 依存関係の解決に失敗したことを示すシグナルです。 5 | */ 6 | public class DependencyResolveFailedSignal extends DependencyCollectFailedSignalBase 7 | { 8 | public DependencyResolveFailedSignal(String failedDependency) 9 | { 10 | super(failedDependency); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependsCollectFailedSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.dependencies.collector.signals; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.kunlab.kpm.signal.Signal; 6 | 7 | import java.util.List; 8 | 9 | /** 10 | * 依存関係の取得に失敗したことを示すシグナルです。 11 | * 注意:このシグナルは {@link DependencyCollectFailedSignalBase} とは違い個別には送信されず、依存関係の解決タスク終了後に一度送信されます。 12 | */ 13 | @Value 14 | @EqualsAndHashCode(callSuper = false) 15 | public class DependsCollectFailedSignal extends Signal 16 | { 17 | /** 18 | * 取得に失敗した依存関係の名前です。 19 | */ 20 | List collectFailedPlugins; 21 | } 22 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependsDownloadFinishedSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.dependencies.collector.signals; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.kunlab.kpm.signal.Signal; 7 | import org.kunlab.kpm.task.tasks.download.DownloadResult; 8 | 9 | import java.util.Map; 10 | 11 | /** 12 | * 依存関係のダウンロードがすべて完了したことを示すシグナルです。 13 | */ 14 | @Value 15 | @EqualsAndHashCode(callSuper = false) 16 | public class DependsDownloadFinishedSignal extends Signal 17 | { 18 | /** 19 | * ダウンロード結果です。 20 | */ 21 | @NotNull 22 | Map downloads; 23 | } 24 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/collector/signals/DependsEnumeratedSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.dependencies.collector.signals; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.Value; 6 | import org.kunlab.kpm.resolver.interfaces.QueryContext; 7 | import org.kunlab.kpm.signal.Signal; 8 | 9 | import java.util.List; 10 | import java.util.Map; 11 | 12 | /** 13 | * 依存関係が列挙されたことを示すシグナルです。 14 | */ 15 | @AllArgsConstructor 16 | @Value 17 | @EqualsAndHashCode(callSuper = false) 18 | public class DependsEnumeratedSignal extends Signal 19 | { 20 | /** 21 | * 列挙された依存関係。 22 | */ 23 | Map dependencies; 24 | /** 25 | * 既にサーバーにインストールされている依存関係。 26 | */ 27 | List ignoredDependencies; // it means already installed or already collected 28 | } 29 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/computer/DependsComputeOrderArgument.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.dependencies.computer; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Getter; 5 | import org.kunlab.kpm.task.interfaces.TaskArgument; 6 | import org.kunlab.kpm.task.interfaces.dependencies.DependencyElement; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * 依存関係の読み込み順序を計算する際に使用される引数を表します。 12 | */ 13 | @AllArgsConstructor 14 | public class DependsComputeOrderArgument implements TaskArgument 15 | { 16 | /** 17 | * 計算対象の依存関係のリストです。 18 | */ 19 | @Getter 20 | private final List collectedDependencies; 21 | } 22 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/computer/DependsComputeOrderErrorCause.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.dependencies.computer; 2 | 3 | /** 4 | * 依存関係の読み込み順序を計算する際に発生したエラーの原因を表します。 5 | */ 6 | public enum DependsComputeOrderErrorCause 7 | { 8 | } 9 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/computer/DependsComputeOrderResult.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.dependencies.computer; 2 | 3 | import lombok.Getter; 4 | import org.jetbrains.annotations.NotNull; 5 | import org.jetbrains.annotations.Nullable; 6 | import org.kunlab.kpm.task.AbstractTaskResult; 7 | import org.kunlab.kpm.task.interfaces.dependencies.DependencyElement; 8 | 9 | import java.util.List; 10 | 11 | /** 12 | * 依存関係の読み込み順序を計算した結果を表します。 13 | */ 14 | public class DependsComputeOrderResult extends AbstractTaskResult 15 | { 16 | /** 17 | * 計算された依存関係の読み込み順序リストです。 18 | */ 19 | @Getter 20 | @NotNull 21 | private final List order; 22 | 23 | public DependsComputeOrderResult(boolean success, @NotNull DependsComputeOrderState taskState, 24 | @Nullable DependsComputeOrderErrorCause errorCause, 25 | @NotNull List order) 26 | { 27 | super(success, taskState, errorCause); 28 | this.order = order; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/computer/DependsComputeOrderState.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.dependencies.computer; 2 | 3 | /** 4 | * 依存関係の読み込み順序計算の状態を表す列挙型です。 5 | */ 6 | public enum DependsComputeOrderState 7 | { 8 | /** 9 | * 依存関係の読み込み順序計算の初期化が完了したことを示します。 10 | */ 11 | INITIALIZED, 12 | 13 | /** 14 | * 依存関係マップの構築中であることを示します。 15 | */ 16 | CREATING_DEPENDENCY_MAP, 17 | /** 18 | * 依存関係の読み込み順序の計算中であることを示します。 19 | */ 20 | COMPUTING_DEPENDENCY_LOAD_ORDER 21 | } 22 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/dependencies/computer/signals/DependsLoadOrderComputingSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.dependencies.computer.signals; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.kunlab.kpm.signal.Signal; 7 | import org.kunlab.kpm.task.interfaces.dependencies.DependencyElement; 8 | 9 | import java.util.Collections; 10 | import java.util.List; 11 | 12 | /** 13 | * 依存関係の読み込み順序を計算する際に発生するシグナルを表します。 14 | */ 15 | @Data 16 | @EqualsAndHashCode(callSuper = false) 17 | public class DependsLoadOrderComputingSignal extends Signal 18 | { 19 | /** 20 | * 指定された依存関係のリストです。 21 | */ 22 | @NotNull 23 | private final List dependencies; 24 | 25 | /** 26 | * 順序の計算前に発生するシグナルです。 27 | * 注意: {@link #getDependencies()} から取得される依存関係リストは、{@link Collections#unmodifiableList(List)} でラップされています。 28 | */ 29 | public static class Pre extends DependsLoadOrderComputingSignal 30 | { 31 | public Pre(final List dependencies) 32 | { 33 | super(Collections.unmodifiableList(dependencies)); 34 | } 35 | } 36 | 37 | /** 38 | * 順序の計算に成功したことを示すシグナルです。 39 | * 計算結果を書き換えることで、読み込み順序を変更できます。 40 | */ 41 | public static class Post extends DependsLoadOrderComputingSignal 42 | { 43 | public Post(final List dependencies) 44 | { 45 | super(dependencies); 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/description/DescriptionLoadArgument.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.description; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.kunlab.kpm.task.interfaces.TaskArgument; 7 | 8 | import java.nio.file.Path; 9 | 10 | /** 11 | * プラグイン情報ファイルを読み込む際に使用される引数を表します。 12 | */ 13 | @Value 14 | @EqualsAndHashCode(callSuper = false) 15 | public class DescriptionLoadArgument implements TaskArgument 16 | { 17 | /** 18 | * プラグイン情報ファイルのパスです。 19 | */ 20 | @NotNull 21 | Path pluginFile; 22 | 23 | public DescriptionLoadArgument(@NotNull Path pluginFile) 24 | { 25 | this.pluginFile = pluginFile; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/description/DescriptionLoadErrorCause.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.description; 2 | 3 | /** 4 | * プラグイン情報ファイルの読み込みに失敗した際のエラーの原因を表します。 5 | */ 6 | public enum DescriptionLoadErrorCause 7 | { 8 | /** 9 | * 指定されたファイルがプラグインではないか、 plugin.yml が存在しません。 10 | */ 11 | NOT_A_PLUGIN, 12 | /** 13 | * 不正なプラグイン情報ファイルです。 14 | */ 15 | INVALID_DESCRIPTION, 16 | /** 17 | * {@link java.io.IOException} が発生しました。 18 | */ 19 | IO_EXCEPTION 20 | } 21 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/description/DescriptionLoadResult.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.description; 2 | 3 | import lombok.Getter; 4 | import org.bukkit.plugin.PluginDescriptionFile; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.jetbrains.annotations.Nullable; 7 | import org.kunlab.kpm.task.AbstractTaskResult; 8 | 9 | import java.nio.file.Path; 10 | 11 | /** 12 | * プラグイン情報ファイルの読み込み結果を表します。 13 | */ 14 | @Getter // TODO: make @Value 15 | public class DescriptionLoadResult extends AbstractTaskResult 16 | { 17 | /** 18 | * プラグインファイルの場所です。 19 | */ 20 | @NotNull 21 | private final Path pluginFile; 22 | /** 23 | * 読み込まれた、プラグイン情報ファイルの概念的なオブジェクトです。 24 | */ 25 | @Nullable 26 | private final PluginDescriptionFile description; 27 | 28 | public DescriptionLoadResult(boolean success, @NotNull DescriptionLoadState taskState, 29 | @Nullable DescriptionLoadErrorCause errorCause, 30 | @NotNull Path pluginFile, @Nullable PluginDescriptionFile description) 31 | { 32 | super(success, taskState, errorCause); 33 | 34 | this.pluginFile = pluginFile; 35 | this.description = description; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/description/DescriptionLoadState.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.description; 2 | 3 | /** 4 | * プラグイン情報ファイルの読み込みの状態を表します。 5 | */ 6 | public enum DescriptionLoadState 7 | { 8 | /** 9 | * プラグイン情報ファイルの読み込みが初期化されたことを示します。 10 | */ 11 | INITIALIZED, 12 | 13 | /** 14 | * プラグイン情報ファイルの読み込み中であることを示します。 15 | */ 16 | LOADING_PLUGIN_DESCRIPTION 17 | } 18 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/description/signals/LoadPluginDescriptionSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.description.signals; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import org.jetbrains.annotations.NotNull; 7 | import org.kunlab.kpm.signal.Signal; 8 | 9 | import java.nio.file.Path; 10 | 11 | /** 12 | * プラグイン情報ファイルを読み込むときに発生するシグナルです。 13 | */ 14 | @Data 15 | @AllArgsConstructor 16 | @EqualsAndHashCode(callSuper = false) 17 | public class LoadPluginDescriptionSignal extends Signal 18 | { 19 | /** 20 | * プラグイン情報ファイルのパスです。 21 | * これを変更すると、読み込まれるプラグインを変更できます。 22 | */ 23 | @NotNull 24 | private Path pluginFile; 25 | } 26 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/download/DownloadArgument.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.download; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.jetbrains.annotations.Nullable; 7 | import org.kunlab.kpm.task.interfaces.TaskArgument; 8 | 9 | import java.nio.file.Path; 10 | 11 | /** 12 | * ダウンロードの引数です。 13 | */ 14 | @Value 15 | @EqualsAndHashCode(callSuper = false) 16 | public class DownloadArgument implements TaskArgument 17 | { 18 | /** 19 | * ダウンロードするURLです。 20 | */ 21 | @NotNull 22 | String url; 23 | 24 | /** 25 | * ダウンロード先のパスです。 26 | */ 27 | @Nullable 28 | Path path; 29 | 30 | public DownloadArgument(@NotNull String url) 31 | { 32 | this.url = url; 33 | this.path = null; 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/download/DownloadErrorCause.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.download; 2 | 3 | /** 4 | * ダウンロードに失敗した際のエラーの原因を表します。 5 | */ 6 | public enum DownloadErrorCause 7 | { 8 | /** 9 | * サーバから、無効なレスポンスを受け取りました。 10 | */ 11 | ILLEGAL_HTTP_RESPONSE, 12 | /** 13 | * Body が空でした。 14 | */ 15 | NO_BODY_IN_RESPONSE, 16 | /** 17 | * {@link java.io.IOException} が発生しました。 18 | */ 19 | IO_EXCEPTION, 20 | /** 21 | * 不明なエラーが発生しました。 22 | */ 23 | UNKNOWN_ERROR 24 | } 25 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/download/DownloadResult.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.download; 2 | 3 | import lombok.Getter; 4 | import org.jetbrains.annotations.NotNull; 5 | import org.jetbrains.annotations.Nullable; 6 | import org.kunlab.kpm.task.AbstractTaskResult; 7 | 8 | import java.nio.file.Path; 9 | 10 | /** 11 | * ダウンロードの結果を表すクラスです。 12 | */ 13 | @Getter 14 | public class DownloadResult extends AbstractTaskResult 15 | { 16 | /** 17 | * ダウンロード元のURLです。 18 | */ 19 | @NotNull 20 | private final String url; 21 | 22 | /** 23 | * ダウンロード先のファイルのパスです。 24 | */ 25 | @NotNull 26 | private final Path path; 27 | /** 28 | * ダウンロードしたファイルのサイズです。 29 | */ 30 | private final long totalSize; 31 | 32 | /** 33 | * ダウンロードごとに発行される一意なIDです。 34 | */ 35 | @NotNull 36 | private final String downloadID; 37 | 38 | public DownloadResult(boolean success, @NotNull DownloadState taskState, @NotNull String url, @NotNull Path path, 39 | long totalSize, @NotNull String downloadID, @Nullable DownloadErrorCause errorCause) 40 | { 41 | super(success, taskState, errorCause); 42 | this.url = url; 43 | this.path = path; 44 | this.totalSize = totalSize; 45 | this.downloadID = downloadID; 46 | } 47 | 48 | public DownloadResult(boolean success, @NotNull DownloadState taskState, @NotNull String url, @NotNull Path path, long totalSize, 49 | @NotNull String downloadID) 50 | { 51 | this(success, taskState, url, path, totalSize, downloadID, null); 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/download/DownloadState.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.download; 2 | 3 | /** 4 | * ダウンロードの状態を表します。 5 | */ 6 | public enum DownloadState 7 | { 8 | /** 9 | * ダウンロードが初期化されたことを示します。 10 | */ 11 | INITIALIZED, 12 | 13 | /** 14 | * ダウンロードが開始中であることを示します。 15 | */ 16 | START_DOWNLOADING, 17 | /** 18 | * ダウンロード中であることを示します。 19 | */ 20 | DOWNLOADING, 21 | } 22 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/download/signals/DownloadErrorSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.download.signals; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.jetbrains.annotations.Nullable; 7 | import org.kunlab.kpm.task.tasks.download.DownloadErrorCause; 8 | 9 | /** 10 | * ダウンロードに失敗したことを示すシグナルです。 11 | */ 12 | @Value 13 | @EqualsAndHashCode(callSuper = true) 14 | public class DownloadErrorSignal extends DownloadSignal 15 | { 16 | /** 17 | * 失敗したURLです。 18 | */ 19 | @NotNull 20 | String url; 21 | 22 | /** 23 | * 失敗した理由です。 24 | */ 25 | @NotNull 26 | DownloadErrorCause cause; 27 | /** 28 | * 失敗した理由の詳細です。 29 | * 失敗した原因が、 30 | * {@link DownloadErrorCause#ILLEGAL_HTTP_RESPONSE} 出会った場合は、{@code 404 Not Found} のような{@link String}が、 31 | * {@link DownloadErrorCause#IO_EXCEPTION} 出会った場合は {@link Exception}が格納されます。 32 | */ 33 | @Nullable 34 | Object value; 35 | 36 | public DownloadErrorSignal(@NotNull String downloadId, @NotNull String url, @NotNull DownloadErrorCause cause, @Nullable Object value) 37 | { 38 | super(downloadId); 39 | this.url = url; 40 | this.cause = cause; 41 | this.value = value; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/download/signals/DownloadProgressSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.download.signals; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.jetbrains.annotations.NotNull; 6 | 7 | /** 8 | * ダウンロードの進捗を表すシグナルです。 9 | */ 10 | @Value 11 | @EqualsAndHashCode(callSuper = true) 12 | public class DownloadProgressSignal extends DownloadSignal 13 | { 14 | /** 15 | * ダウンロードしようとしているファイルのURLです。 16 | */ 17 | @NotNull 18 | String url; 19 | 20 | /** 21 | * ダウンロードしようとしているファイルのサイズです。 22 | */ 23 | long totalSize; 24 | /** 25 | * ダウンロードしたファイルのサイズです。 26 | */ 27 | long downloaded; 28 | 29 | /** 30 | * ダウンロードの進捗を表す値で、 {@code 0.0} から {@code 1.0} の間の値です。 31 | * {@code 0.5}は、ダウンロードが半分完了したことを表します。 32 | */ 33 | double percentage; 34 | 35 | public DownloadProgressSignal(@NotNull String downloadId, @NotNull String url, long totalSize, long downloaded, double percentage) 36 | { 37 | super(downloadId); 38 | this.url = url; 39 | this.totalSize = totalSize; 40 | this.downloaded = downloaded; 41 | this.percentage = percentage; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/download/signals/DownloadSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.download.signals; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.kunlab.kpm.signal.Signal; 7 | 8 | /** 9 | * ダウンロード時に発生するシグナルを表す、抽象クラスです。 10 | */ 11 | @Data 12 | @EqualsAndHashCode(callSuper = false) 13 | public abstract class DownloadSignal extends Signal 14 | { 15 | /** 16 | * ダウンロードごとに発行される一意のIDです。 17 | */ 18 | @NotNull 19 | private final String downloadId; 20 | } 21 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/download/signals/DownloadStartingSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.download.signals; 2 | 3 | import lombok.Getter; 4 | import lombok.Setter; 5 | import org.jetbrains.annotations.NotNull; 6 | 7 | import java.nio.file.Path; 8 | 9 | /** 10 | * ダウンロードの開始中であることを示すシグナルです。 11 | */ 12 | @Getter 13 | @Setter 14 | public class DownloadStartingSignal extends DownloadSignal 15 | { 16 | /** 17 | * ダウンロード先のパスです。 18 | */ 19 | @NotNull 20 | private Path downloadPath; 21 | /** 22 | * ダウンロードを行うURLです。 23 | */ 24 | @NotNull 25 | private String url; 26 | 27 | public DownloadStartingSignal(@NotNull String downloadId, @NotNull Path downloadPath, @NotNull String url) 28 | { 29 | super(downloadId); 30 | this.downloadPath = downloadPath; 31 | this.url = url; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/download/signals/DownloadSucceedSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.download.signals; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.jetbrains.annotations.NotNull; 6 | 7 | import java.nio.file.Path; 8 | 9 | /** 10 | * ダウンロードが完了したことを示すシグナルです。 11 | */ 12 | @Value 13 | @EqualsAndHashCode(callSuper = true) 14 | public class DownloadSucceedSignal extends DownloadSignal 15 | { 16 | /** 17 | * ダウンロードしたファイルのパスです。 18 | */ 19 | @NotNull 20 | Path downloadPath; 21 | /** 22 | * ダウンロードしたファイルのサイズです。 23 | */ 24 | long totalSize; 25 | 26 | public DownloadSucceedSignal(@NotNull String downloadId, @NotNull Path downloadPath, long totalSize) 27 | { 28 | super(downloadId); 29 | this.downloadPath = downloadPath; 30 | this.totalSize = totalSize; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/garbage/clean/GarbageCleanArgument.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.garbage.clean; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.kunlab.kpm.task.interfaces.TaskArgument; 7 | 8 | import java.nio.file.Path; 9 | import java.util.List; 10 | 11 | /** 12 | * 不要なデータの削除を行うタスクの引数です。 13 | */ 14 | @Value 15 | @EqualsAndHashCode(callSuper = false) 16 | public class GarbageCleanArgument implements TaskArgument 17 | { 18 | /** 19 | * 不要なデータとして削除するディレクトリ・ファイルのパスです。 20 | */ 21 | @NotNull 22 | List paths; 23 | } 24 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/garbage/clean/GarbageCleanErrorCause.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.garbage.clean; 2 | 3 | /** 4 | * 不要なデータの削除エラーを表す列挙型です。 5 | */ 6 | public enum GarbageCleanErrorCause 7 | { 8 | /** 9 | * キャンセルされました。 10 | */ 11 | CANCELLED, 12 | /** 13 | * 不要なデータが存在しません。 14 | */ 15 | NO_GARBAGE, 16 | 17 | /** 18 | * すべての削除に失敗しました。 19 | */ 20 | ALL_DELETE_FAILED, 21 | /** 22 | * ファイル・システムとの整合性が取れなく、スキップされました。 23 | */ 24 | INVALID_INTEGRITY, 25 | } 26 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/garbage/clean/GarbageCleanResult.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.garbage.clean; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.jetbrains.annotations.Nullable; 7 | import org.kunlab.kpm.task.AbstractTaskResult; 8 | 9 | import java.nio.file.Path; 10 | import java.util.Map; 11 | 12 | /** 13 | * 不要なデータの削除を行うタスクの結果です。 14 | */ 15 | @Value 16 | @EqualsAndHashCode(callSuper = true) 17 | public class GarbageCleanResult extends AbstractTaskResult 18 | { 19 | /** 20 | * 削除の結果と不要なデータのパスです。 21 | */ 22 | Map deletedGarbage; 23 | 24 | public GarbageCleanResult(boolean success, @NotNull GarbageCleanState state, @Nullable GarbageCleanErrorCause errorCause, Map deletedGarbage) 25 | { 26 | super(success, state, errorCause); 27 | this.deletedGarbage = deletedGarbage; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/garbage/clean/GarbageCleanState.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.garbage.clean; 2 | 3 | /** 4 | * 不要なデータの削除状態を表します。 5 | */ 6 | public enum GarbageCleanState 7 | { 8 | /** 9 | * 不要なデータの削除が初期化されたことを示します。 10 | */ 11 | INITIALIZED, 12 | /** 13 | * 不要なデータをの削除中であることを示します。 14 | */ 15 | DELETING_GARBAGE, 16 | } 17 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/garbage/clean/signal/GarbageDeleteSkippedSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.garbage.clean.signal; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.kunlab.kpm.signal.Signal; 7 | 8 | import java.nio.file.Path; 9 | 10 | /** 11 | * 不要なデータの削除がスキップされたことを示すシグナルです。 12 | */ 13 | @Value 14 | @EqualsAndHashCode(callSuper = false) 15 | public class GarbageDeleteSkippedSignal extends Signal 16 | { 17 | /** 18 | * スキップされた不要なデータのパスです。 19 | */ 20 | @NotNull 21 | Path garbageData; 22 | } 23 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/garbage/clean/signal/GarbageDeletingSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.garbage.clean.signal; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.Getter; 6 | import lombok.Setter; 7 | import org.jetbrains.annotations.NotNull; 8 | import org.kunlab.kpm.signal.Signal; 9 | 10 | import java.nio.file.Path; 11 | 12 | /** 13 | * 不要なデータの削除中であることを示すシグナルです。 14 | */ 15 | @Data 16 | @EqualsAndHashCode(callSuper = false) 17 | public class GarbageDeletingSignal extends Signal 18 | { 19 | /** 20 | * 不要なデータのパスです。 21 | */ 22 | @NotNull 23 | private final Path garbageData; 24 | 25 | /** 26 | * 削除前に呼ばれるシグナルです。 27 | */ 28 | public static class Pre extends GarbageDeletingSignal 29 | { 30 | /** 31 | * 削除をスキップするかどうかです。 32 | */ 33 | @Getter 34 | @Setter 35 | private boolean skip; 36 | 37 | public Pre(Path garbageData) 38 | { 39 | super(garbageData); 40 | this.skip = false; 41 | } 42 | } 43 | 44 | /** 45 | * 削除後に呼ばれるシグナルです。 46 | */ 47 | public static class Post extends GarbageDeletingSignal 48 | { 49 | public Post(Path garbageData) 50 | { 51 | super(garbageData); 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/garbage/clean/signal/GarbageEnumeratedSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.garbage.clean.signal; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import org.kunlab.kpm.signal.Signal; 6 | 7 | import java.nio.file.Path; 8 | import java.util.List; 9 | 10 | /** 11 | * 不要なデータが列挙されたことを示すシグナルです。 12 | */ 13 | @Data 14 | @EqualsAndHashCode(callSuper = false) 15 | public class GarbageEnumeratedSignal extends Signal 16 | { 17 | /** 18 | * 不要なデータのパスのリストです。 19 | */ 20 | private final List garbageDatas; 21 | /** 22 | * 削除をキャンセルするかどうかです。 23 | */ 24 | private boolean cancel; 25 | } 26 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/garbage/clean/signal/InvalidIntegritySignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.garbage.clean.signal; 2 | 3 | import org.kunlab.kpm.signal.Signal; 4 | 5 | /** 6 | * 整合性がとれなく、システムが保護されたことを示すシグナルです。 7 | * 不要なデータの削除はスキップされます。 8 | */ 9 | public class InvalidIntegritySignal extends Signal 10 | { 11 | } 12 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/garbage/search/GarbageSearchArgument.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.garbage.search; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.Value; 6 | import org.jetbrains.annotations.NotNull; 7 | import org.kunlab.kpm.task.interfaces.TaskArgument; 8 | 9 | import java.nio.file.Path; 10 | import java.util.List; 11 | 12 | /** 13 | * 不要なデータの検索を行うタスクの引数です。 14 | */ 15 | @Value 16 | @EqualsAndHashCode(callSuper = false) 17 | @AllArgsConstructor 18 | public class GarbageSearchArgument implements TaskArgument 19 | { 20 | /** 21 | * 検索から除外するデータのリストです。 22 | */ 23 | @NotNull 24 | List excludes; 25 | 26 | /** 27 | * 検索するディレクトリのパスです。 28 | */ 29 | @NotNull 30 | Path dataFolder; 31 | 32 | /** 33 | * サーバに存在するプラグインのリストです。 34 | */ 35 | @NotNull 36 | List plugins; 37 | } 38 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/garbage/search/GarbageSearchErrorCause.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.garbage.search; 2 | 3 | /** 4 | * 不要なデータの検索のエラーを表す列挙型です。 5 | */ 6 | public enum GarbageSearchErrorCause 7 | { 8 | /** 9 | * I/Oエラーが発生しました。 10 | */ 11 | IO_EXCEPTION_OCCURRED, 12 | } 13 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/garbage/search/GarbageSearchResult.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.garbage.search; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.jetbrains.annotations.Nullable; 7 | import org.kunlab.kpm.task.AbstractTaskResult; 8 | 9 | import java.nio.file.Path; 10 | import java.util.List; 11 | 12 | /** 13 | * 不要なデータの検索を行うタスクの結果です。 14 | */ 15 | @Value 16 | @EqualsAndHashCode(callSuper = true) 17 | public class GarbageSearchResult extends AbstractTaskResult 18 | { 19 | /** 20 | * 見つかった不要なデータのパスのリストです。 21 | */ 22 | List garbageFiles; 23 | 24 | public GarbageSearchResult(boolean success, @NotNull GarbageSearchState state, @Nullable GarbageSearchErrorCause errorCause, List garbageFiles) 25 | { 26 | super(success, state, errorCause); 27 | this.garbageFiles = garbageFiles; 28 | } 29 | 30 | public GarbageSearchResult(@NotNull GarbageSearchState state, List garbageFiles) 31 | { 32 | this(true, state, null, garbageFiles); 33 | } 34 | 35 | public GarbageSearchResult(boolean success, @NotNull GarbageSearchState state, @Nullable GarbageSearchErrorCause errorCause) 36 | { 37 | this(success, state, errorCause, null); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/garbage/search/GarbageSearchState.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.garbage.search; 2 | 3 | /** 4 | * 不要なデータの検索の状態を表します。 5 | */ 6 | public enum GarbageSearchState 7 | { 8 | /** 9 | * 不要なデータの検索が初期化されたことを示します。 10 | */ 11 | INITIALIZED, 12 | /** 13 | * 不要なデータの検索中であることを示します。 14 | */ 15 | SEARCHING_GARBAGE, 16 | } 17 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/garbage/search/signals/GarbageSearchingSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.garbage.search.signals; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import org.kunlab.kpm.signal.Signal; 6 | 7 | import java.nio.file.Path; 8 | 9 | /** 10 | * 不要なデータの検索を開始したことを示すシグナルです。 11 | */ 12 | @Data 13 | @EqualsAndHashCode(callSuper = false) 14 | public class GarbageSearchingSignal extends Signal 15 | { 16 | /** 17 | * 検索対象のディレクトリです。 18 | */ 19 | private final Path dataFolder; 20 | } 21 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/install/PluginsInstallErrorCause.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.install; 2 | 3 | /** 4 | * プラグインのインストール時に発生したエラーの原因を表します。 5 | */ 6 | public enum PluginsInstallErrorCause 7 | { 8 | /** 9 | * プラグインの再配置に失敗しました。 10 | */ 11 | RELOCATE_FAILED, 12 | /** 13 | * 無効なプラグインが指定されました。 14 | */ 15 | INVALID_PLUGIN, 16 | /** 17 | * 無効なプラグイン情報ファイルが指定されました。 18 | */ 19 | INVALID_PLUGIN_DESCRIPTION, 20 | /** 21 | * プラグインがこのサーバに互換性がありません。 22 | */ 23 | INCOMPATIBLE_WITH_BUKKIT_VERSION, 24 | /** 25 | * プラグインがこのKPMに互換性がありません。 26 | */ 27 | INCOMPATIBLE_WITH_KPM_VERSION, 28 | 29 | /** 30 | * {@link java.io.IOException} が発生しました。 31 | */ 32 | IO_EXCEPTION_OCCURRED, 33 | /** 34 | * 不明な例外が発生しました。 35 | */ 36 | EXCEPTION_OCCURRED 37 | } 38 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/install/PluginsInstallResult.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.install; 2 | 3 | import lombok.Getter; 4 | import org.bukkit.plugin.Plugin; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.jetbrains.annotations.Nullable; 7 | import org.kunlab.kpm.task.AbstractTaskResult; 8 | 9 | import java.util.ArrayList; 10 | import java.util.List; 11 | 12 | /** 13 | * プラグインのインストール結果を表すクラスです。 14 | */ 15 | public class PluginsInstallResult extends AbstractTaskResult 16 | { 17 | /** 18 | * インストールに失敗した場合、そのプラグインの名前が格納されます。 19 | */ 20 | @Getter 21 | @Nullable 22 | private final String failedPluginName; 23 | 24 | /** 25 | * インストールに成功した場合、そのプラグインが格納されます。 26 | */ 27 | @Getter 28 | @Nullable 29 | private final Plugin installedPlugin; 30 | /** 31 | * インストールされたプラグインの依存関係が格納されます。 32 | */ 33 | @Getter 34 | @NotNull 35 | private final List collectedDependencies; 36 | 37 | public PluginsInstallResult(boolean success, @NotNull PluginsInstallState state, @Nullable PluginsInstallErrorCause errorCause) 38 | { 39 | this(success, state, errorCause, null, null, new ArrayList<>()); 40 | } 41 | 42 | public PluginsInstallResult(boolean success, @NotNull PluginsInstallState state, @Nullable PluginsInstallErrorCause errorCause, @Nullable String failedPluginName, @Nullable Plugin installedPlugin, @NotNull List collectedDependencies) 43 | { 44 | super(success, state, errorCause); 45 | this.failedPluginName = failedPluginName; 46 | this.installedPlugin = installedPlugin; 47 | this.collectedDependencies = collectedDependencies; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/install/PluginsInstallState.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.install; 2 | 3 | /** 4 | * プラグインのインストールの状態を表します。 5 | */ 6 | public enum PluginsInstallState 7 | { 8 | /** 9 | * プラグインのインストールが初期化されたことを示します。 10 | */ 11 | INITIALIZED, 12 | 13 | /** 14 | * プラグインの再配置中であることを示します。 15 | */ 16 | PLUGIN_RELOCATING, 17 | /** 18 | * プラグインの読み込み中であることを示します。 19 | */ 20 | PLUGIN_LOADING, 21 | /** 22 | * プラグインの{@link org.bukkit.plugin.Plugin#onLoad()} の実行中であることを示します。 23 | */ 24 | ONLOAD_RUNNING, 25 | /** 26 | * プラグインの有効化中であることを示します。 27 | */ 28 | PLUGIN_ENABLING, 29 | } 30 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/install/signals/PluginEnablingSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.install.signals; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import org.bukkit.plugin.Plugin; 6 | import org.jetbrains.annotations.NotNull; 7 | import org.kunlab.kpm.signal.Signal; 8 | 9 | /** 10 | * プラグインの有効化中であることを示すシグナルです。 11 | * {@link org.bukkit.plugin.java.JavaPlugin#onEnable()} の呼び出しの前後にスローされます。 12 | * このシグナルより先に {@link PluginOnLoadRunningSignal} が呼ばれます。 13 | */ 14 | @Data 15 | @EqualsAndHashCode(callSuper = false) 16 | public class PluginEnablingSignal extends Signal 17 | { 18 | /** 19 | * 対象のプラグインです。 20 | */ 21 | @NotNull 22 | private final Plugin plugin; 23 | 24 | /** 25 | * 有効化を行う前に送信されるシグナルです。 26 | */ 27 | public static class Pre extends PluginEnablingSignal 28 | { 29 | public Pre(@NotNull Plugin plugin) 30 | { 31 | super(plugin); 32 | } 33 | } 34 | 35 | /** 36 | * 有効化中に失敗した場合に送信されるシグナルです。 37 | */ 38 | public static class Failed extends PluginEnablingSignal 39 | { 40 | public Failed(@NotNull Plugin plugin) 41 | { 42 | super(plugin); 43 | } 44 | } 45 | 46 | /** 47 | * 有効化を行った後に送信されるシグナルです。 48 | */ 49 | public static class Post extends PluginEnablingSignal 50 | { 51 | public Post(@NotNull Plugin plugin) 52 | { 53 | super(plugin); 54 | } 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/install/signals/PluginIncompatibleWithKPMSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.install.signals; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import org.bukkit.plugin.PluginDescriptionFile; 6 | import org.jetbrains.annotations.NotNull; 7 | import org.kunlab.kpm.kpminfo.KPMInformationFile; 8 | import org.kunlab.kpm.signal.Signal; 9 | import org.kunlab.kpm.versioning.Version; 10 | 11 | /** 12 | * プラグインがこのKPMと互換性がない場合に投げられるシグナルです。 13 | */ 14 | @Data 15 | @EqualsAndHashCode(callSuper = false) 16 | public class PluginIncompatibleWithKPMSignal extends Signal 17 | { 18 | /** 19 | * プラグインの説明ファイルです。 20 | */ 21 | @NotNull 22 | private final PluginDescriptionFile pluginDescription; 23 | /** 24 | * プラグインのKPM情報です。 25 | */ 26 | @NotNull 27 | private final KPMInformationFile kpmInformation; 28 | /** 29 | * このKPMのバージョンです。 30 | */ 31 | @NotNull 32 | private final Version kpmVersion; 33 | 34 | /** 35 | * 強制的にインストールするかどうかを示すフラグです。 36 | */ 37 | private boolean forceInstall; 38 | 39 | public PluginIncompatibleWithKPMSignal(@NotNull PluginDescriptionFile pluginDescription, @NotNull KPMInformationFile kpmInformation, @NotNull Version kpmVersion) 40 | { 41 | this.pluginDescription = pluginDescription; 42 | this.kpmInformation = kpmInformation; 43 | this.kpmVersion = kpmVersion; 44 | 45 | this.forceInstall = false; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/install/signals/PluginInstallingSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.install.signals; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.bukkit.plugin.PluginDescriptionFile; 6 | import org.jetbrains.annotations.NotNull; 7 | import org.kunlab.kpm.signal.Signal; 8 | 9 | import java.nio.file.Path; 10 | 11 | /** 12 | * プラグインのインストール中であることを示すシグナルです。 13 | */ 14 | @Value 15 | @EqualsAndHashCode(callSuper = false) 16 | public class PluginInstallingSignal extends Signal 17 | { 18 | /** 19 | * 対象のプラグインのパスです。 20 | */ 21 | @NotNull 22 | Path path; 23 | /** 24 | * 対象のプラグインの プラグイン情報ファイルです。 25 | */ 26 | @NotNull 27 | PluginDescriptionFile pluginDescription; 28 | } 29 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/install/signals/PluginOnLoadRunningSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.install.signals; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import org.bukkit.plugin.Plugin; 6 | import org.jetbrains.annotations.NotNull; 7 | import org.kunlab.kpm.signal.Signal; 8 | 9 | /** 10 | * プラグインの {@link Plugin#onLoad()} の実行の前後にスローされるシグナルです。 11 | */ 12 | @Data 13 | @EqualsAndHashCode(callSuper = false) 14 | public class PluginOnLoadRunningSignal extends Signal 15 | { 16 | /** 17 | * 対象のプラグインです。 18 | */ 19 | @NotNull 20 | private final Plugin plugin; 21 | 22 | /** 23 | * {@link Plugin#onLoad()} の実行を行う前に送信されるシグナルです。 24 | */ 25 | public static class Pre extends PluginOnLoadRunningSignal 26 | { 27 | public Pre(@NotNull Plugin plugin) 28 | { 29 | super(plugin); 30 | } 31 | } 32 | 33 | /** 34 | * {@link Plugin#onLoad()} の実行を行った後に送信されるシグナルです。 35 | */ 36 | public static class Post extends PluginOnLoadRunningSignal 37 | { 38 | public Post(@NotNull Plugin plugin) 39 | { 40 | super(plugin); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/install/signals/PluginRelocatingSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.install.signals; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.kunlab.kpm.signal.Signal; 7 | 8 | import java.nio.file.Path; 9 | 10 | /** 11 | * プラグインを、ダウンロードの仮ディレクトリからプラグインディレクトリに移動する際に送信されるシグナルです。 12 | */ 13 | @Data 14 | @EqualsAndHashCode(callSuper = false) 15 | public class PluginRelocatingSignal extends Signal 16 | { 17 | /** 18 | * プラグインのパスです。 19 | */ 20 | @NotNull 21 | private final Path source; 22 | /** 23 | * 移動先のパスです。 24 | * デフォルトは {@code plugins/} です。 25 | */ 26 | @NotNull 27 | private Path target; 28 | } 29 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/lookup/LookupArgument.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.lookup; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.kunlab.kpm.task.interfaces.TaskArgument; 7 | 8 | /** 9 | * プラグインの検索を行うタスクの引数です。 10 | */ 11 | @Value 12 | @EqualsAndHashCode(callSuper = false) 13 | public class LookupArgument implements TaskArgument 14 | { 15 | /** 16 | * 検索するクエリです。 17 | */ 18 | @NotNull 19 | String[] queries; 20 | } 21 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/lookup/LookupErrorCause.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.lookup; 2 | 3 | /** 4 | * プラグインの検索のエラーを表す列挙型です。 5 | */ 6 | public enum LookupErrorCause 7 | { 8 | /** 9 | * 不正なクエリが指定されたことを示します。 10 | */ 11 | INVALID_QUERY 12 | } 13 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/lookup/LookupResult.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.lookup; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.bukkit.plugin.Plugin; 6 | import org.jetbrains.annotations.NotNull; 7 | import org.jetbrains.annotations.Nullable; 8 | import org.kunlab.kpm.task.AbstractTaskResult; 9 | 10 | import java.util.Map; 11 | 12 | /** 13 | * プラグインの検索を行うタスクの結果です。 14 | */ 15 | @Value 16 | @EqualsAndHashCode(callSuper = true) 17 | public class LookupResult extends AbstractTaskResult 18 | { 19 | /** 20 | * 検索に成功した場合、そのプラグインらが格納されます。 21 | * {@link #isSuccess()}がfalseの場合や、クエリが間違っている場合などにこの値はnullになります。 22 | */ 23 | @Nullable 24 | Map<@NotNull String, @Nullable Plugin> plugins; 25 | 26 | public LookupResult(boolean success, @NotNull LookupState state, @NotNull Map plugins) 27 | { 28 | super(success, state, null); 29 | this.plugins = plugins; 30 | } 31 | 32 | public LookupResult(boolean success, @NotNull LookupState state, @Nullable LookupErrorCause errorCause) 33 | { 34 | super(success, state, errorCause); 35 | this.plugins = null; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/lookup/LookupState.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.lookup; 2 | 3 | /** 4 | * プラグインの検索の状態を表します。 5 | */ 6 | public enum LookupState 7 | { 8 | /** 9 | * プラグインの検索が初期化されたことを示します。 10 | */ 11 | INITIALIZED, 12 | /** 13 | * クエリの解析中であることを示します。 14 | */ 15 | QUERY_PARSING, 16 | /** 17 | * プラグインの検索中であることを示します。 18 | */ 19 | PLUGIN_LOOKUP 20 | } 21 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/resolve/PluginResolveArgument.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.resolve; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.kunlab.kpm.task.interfaces.TaskArgument; 7 | 8 | /** 9 | * プラグインの解決を行うタスクの引数です。 10 | */ 11 | @Data 12 | @EqualsAndHashCode(callSuper = false) 13 | public class PluginResolveArgument implements TaskArgument 14 | { 15 | /** 16 | * 解決する際に使用されるクエリです。 17 | */ 18 | @NotNull 19 | String query; 20 | 21 | public PluginResolveArgument(@NotNull String query) 22 | { 23 | this.query = query; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/resolve/PluginResolveErrorCause.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.resolve; 2 | 3 | import org.kunlab.kpm.resolver.interfaces.result.ErrorResult; 4 | 5 | /** 6 | * プラグインの解決に失敗した理由を表します。 7 | */ 8 | public enum PluginResolveErrorCause 9 | { 10 | /** 11 | * 無効なクエリが指定されたことを示します。 12 | */ 13 | INVALID_QUERY, 14 | /** 15 | * 予期しない内部エラーが発生したことを示します。 16 | */ 17 | ILLEGAL_INTERNAL_STATE, 18 | /** 19 | * {@link ErrorResult} が サーバまたはプラグインリゾルバから返されたことを示します。 20 | */ 21 | GOT_ERROR_RESULT, 22 | /** 23 | * ユーザがキャンセルしたことを示します。 24 | */ 25 | CANCELLED, 26 | } 27 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/resolve/PluginResolveResult.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.resolve; 2 | 3 | import lombok.Getter; 4 | import org.jetbrains.annotations.NotNull; 5 | import org.jetbrains.annotations.Nullable; 6 | import org.kunlab.kpm.resolver.interfaces.result.SuccessResult; 7 | import org.kunlab.kpm.task.AbstractTaskResult; 8 | 9 | /** 10 | * プラグインの解決を行うタスクの結果です。 11 | */ 12 | public class PluginResolveResult extends AbstractTaskResult 13 | { 14 | /** 15 | * 解決されたプラグインの解決結果です。 16 | */ 17 | @Getter 18 | @Nullable 19 | private final SuccessResult resolveResult; 20 | 21 | public PluginResolveResult(boolean success, @NotNull PluginResolveState taskState, 22 | @NotNull PluginResolveErrorCause errorCause, @Nullable SuccessResult resolveResult) 23 | { 24 | super(success, taskState, errorCause); 25 | this.resolveResult = resolveResult; 26 | } 27 | 28 | public PluginResolveResult(boolean success, @NotNull PluginResolveState taskState, @NotNull SuccessResult resolveResult) 29 | { 30 | super(success, taskState, null); 31 | this.resolveResult = resolveResult; 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/resolve/PluginResolveState.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.resolve; 2 | 3 | /** 4 | * プラグインの解決の状態を表します。 5 | */ 6 | public enum PluginResolveState 7 | { 8 | /** 9 | * プラグインの解決が初期化されたことを示します。 10 | */ 11 | INITIALIZED, 12 | 13 | /** 14 | * プラグインの解決が開始されたことを示します。 15 | */ 16 | PRE_RESOLVING, 17 | /** 18 | * プラグインの解決が完了したことを示します。 19 | */ 20 | PRE_RESOLVE_FINISHED, 21 | 22 | /** 23 | * 複数結果があった場合、どれを選択するかの選択中であることを示します。 24 | */ 25 | MULTI_RESOLVING, 26 | 27 | /** 28 | * プラグインの解決が完了したことを示します。 29 | */ 30 | RESOLVE_FINISHED 31 | } 32 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/resolve/signals/MultiplePluginResolvedSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.resolve.signals; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.jetbrains.annotations.Nullable; 7 | import org.kunlab.kpm.resolver.interfaces.result.MultiResult; 8 | import org.kunlab.kpm.resolver.interfaces.result.ResolveResult; 9 | import org.kunlab.kpm.resolver.interfaces.result.SuccessResult; 10 | import org.kunlab.kpm.signal.Signal; 11 | 12 | /** 13 | * 複数のプラグインが解決されたことを示すシグナルです。 14 | */ 15 | @Data 16 | @EqualsAndHashCode(callSuper = false) 17 | public class MultiplePluginResolvedSignal extends Signal 18 | { 19 | /** 20 | * 解決する際に使用されたクエリです。 21 | */ 22 | @NotNull 23 | private final String query; 24 | 25 | /** 26 | * 解決された複数のプラグインの結果です。 27 | */ 28 | @NotNull 29 | private final MultiResult results; 30 | 31 | /** 32 | * 明示的に指定するプラグインの解決結果です。 33 | * これに{@link SuccessResult}を格納すると、使用するプラグインを一意に特定できます. 34 | * {@code null} の場合は、自動的に選択されます。 35 | */ 36 | @Nullable 37 | private ResolveResult specifiedResult; 38 | 39 | /** 40 | * インストールをキャンセルするかどうかを示すフラグです。 41 | */ 42 | private boolean cancel; 43 | } 44 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/resolve/signals/PluginResolveErrorSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.resolve.signals; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import lombok.NonNull; 6 | import org.jetbrains.annotations.NotNull; 7 | import org.kunlab.kpm.resolver.interfaces.result.ErrorResult; 8 | import org.kunlab.kpm.signal.Signal; 9 | 10 | /** 11 | * プラグインの解決に失敗したことを示すシグナルです。 12 | */ 13 | @Data 14 | @EqualsAndHashCode(callSuper = false) 15 | public class PluginResolveErrorSignal extends Signal 16 | { 17 | /** 18 | * 失敗したプラグインの解決結果です。 19 | */ 20 | @NonNull 21 | private final ErrorResult error; 22 | /** 23 | * 解決しようとしたクエリです。 24 | */ 25 | @NotNull 26 | private final String query; 27 | } 28 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/resolve/signals/PluginResolvedSuccessfulSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.resolve.signals; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import org.jetbrains.annotations.NotNull; 6 | import org.kunlab.kpm.resolver.interfaces.result.SuccessResult; 7 | import org.kunlab.kpm.signal.Signal; 8 | 9 | /** 10 | * プラグインが正常に解決されたことを示すシグナルです。 11 | */ 12 | @Data 13 | @EqualsAndHashCode(callSuper = false) 14 | public class PluginResolvedSuccessfulSignal extends Signal 15 | { 16 | /** 17 | * 解決する際に使用されたクエリです。 18 | * 値を変更すると、解決されたプラグインが変更されます。 19 | */ 20 | @NotNull 21 | private SuccessResult resolvedPlugin; 22 | } 23 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/resolve/signals/PluginResolvingSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.resolve.signals; 2 | 3 | import lombok.AllArgsConstructor; 4 | import lombok.Data; 5 | import lombok.EqualsAndHashCode; 6 | import org.kunlab.kpm.resolver.interfaces.PluginResolver; 7 | import org.kunlab.kpm.signal.Signal; 8 | 9 | /** 10 | * プラグインの解決中であることを示すシグナルです。 11 | */ 12 | @Data 13 | @AllArgsConstructor 14 | @EqualsAndHashCode(callSuper = false) 15 | public class PluginResolvingSignal extends Signal 16 | { 17 | /** 18 | * 解決に使用されるプラグインリゾルバです。 19 | */ 20 | private final PluginResolver resolver; 21 | /** 22 | * 解決する際に使用されるクエリです。 23 | */ 24 | private String query; 25 | } 26 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/uninstall/UninstallErrorCause.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.uninstall; 2 | 3 | /** 4 | * アンインストールに失敗した理由を表します。 5 | */ 6 | public enum UninstallErrorCause 7 | { 8 | /** 9 | * いくつかのプラグインのアンインストールに失敗しました。 10 | */ 11 | SOME_UNINSTALL_FAILED, 12 | 13 | /** 14 | * 内部:1つのプラグインのアンインストールに成功しました。 15 | */ 16 | INTERNAL_UNINSTALL_OK, 17 | /** 18 | * 內部:1つのプラグインの無効化に成功し、アンインストール処理を完了しました。 19 | */ 20 | INTERNAL_DISABLE_AND_UNINSTALL_OK, 21 | 22 | /** 23 | * 内部:1つのプラグインの無効化に失敗しました。 24 | */ 25 | INTERNAL_PLUGIN_DISABLE_FAILED, 26 | /** 27 | * 内部:1つのプラグインのクラスのアンロードに失敗しました。 28 | */ 29 | INTERNAL_CLASS_UNLOAD_FAILED, 30 | } 31 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/uninstall/UninstallState.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.uninstall; 2 | 3 | /** 4 | * アンインストールの状態を表します。 5 | */ 6 | public enum UninstallState 7 | { 8 | /** 9 | * アンインストールが初期化されたことを示します。 10 | */ 11 | INITIALIZED, 12 | /** 13 | * アンインストールが開始されたことを示します。 14 | */ 15 | UNINSTALLING, 16 | 17 | /** 18 | * レシピの登録解除中であることを示します。 19 | */ 20 | RECIPES_UNREGISTERING, 21 | /** 22 | * コマンドのアンパッチ中であることを示します。 23 | */ 24 | COMMANDS_UNPATCHING, 25 | /** 26 | * プラグインの無効化中であることを示します。 27 | */ 28 | PLUGIN_DISABLING, 29 | 30 | /** 31 | * Bukkit からプラグインをアンロード中であることを示します。 32 | */ 33 | REMOVING_FROM_BUKKIT, 34 | /** 35 | * クラスのアンロード中であることを示します。 36 | */ 37 | CLASSES_UNLOADING 38 | } 39 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/uninstall/signals/PluginDisablingSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.uninstall.signals; 2 | 3 | import lombok.Data; 4 | import lombok.EqualsAndHashCode; 5 | import org.bukkit.plugin.Plugin; 6 | import org.jetbrains.annotations.NotNull; 7 | import org.kunlab.kpm.signal.Signal; 8 | 9 | /** 10 | * プラグインの無効化の前後にスローされるシグナルです。 11 | */ 12 | @Data 13 | @EqualsAndHashCode(callSuper = false) 14 | public class PluginDisablingSignal extends Signal 15 | { 16 | /** 17 | * 無効化されるプラグインです。 18 | */ 19 | @NotNull 20 | private final Plugin plugin; 21 | 22 | /** 23 | * 無効化の前にスローされるシグナルです。 24 | */ 25 | public static class Pre extends PluginDisablingSignal 26 | { 27 | public Pre(@NotNull Plugin plugin) 28 | { 29 | super(plugin); 30 | } 31 | } 32 | 33 | /** 34 | * 無効化の後にスローされるシグナルです。 35 | */ 36 | public static class Post extends PluginDisablingSignal 37 | { 38 | public Post(@NotNull Plugin plugin) 39 | { 40 | super(plugin); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/uninstall/signals/PluginUninstallErrorSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.uninstall.signals; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.bukkit.plugin.PluginDescriptionFile; 6 | import org.kunlab.kpm.signal.Signal; 7 | import org.kunlab.kpm.task.tasks.uninstall.UninstallErrorCause; 8 | 9 | /** 10 | * プラグインのアンインストール中にエラーが発生したことを通知するシグナルです。 11 | */ 12 | @Value 13 | @EqualsAndHashCode(callSuper = false) 14 | public class PluginUninstallErrorSignal extends Signal 15 | { 16 | /** 17 | * エラーの原因です。 18 | */ 19 | UninstallErrorCause cause; 20 | /** 21 | * エラーが発生したプラグインのプラグイン情報ファイルです。 22 | */ 23 | PluginDescriptionFile description; 24 | } 25 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/uninstall/signals/PluginUninstallingSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.uninstall.signals; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.bukkit.plugin.Plugin; 6 | import org.kunlab.kpm.signal.Signal; 7 | 8 | /** 9 | * プラグインのアンインストールのシグナルです。 10 | */ 11 | @Value 12 | @EqualsAndHashCode(callSuper = false) 13 | public class PluginUninstallingSignal extends Signal 14 | { 15 | /** 16 | * アンインストールされるプラグインです。 17 | */ 18 | Plugin plugin; 19 | } 20 | 21 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/uninstall/signals/PluginUnloadingSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.uninstall.signals; 2 | 3 | import lombok.EqualsAndHashCode; 4 | import lombok.Value; 5 | import org.bukkit.plugin.Plugin; 6 | import org.jetbrains.annotations.NotNull; 7 | import org.kunlab.kpm.signal.Signal; 8 | 9 | /** 10 | * プラグインのアンロードの前後にスローされるシグナルです。 11 | */ 12 | public class PluginUnloadingSignal extends Signal 13 | { 14 | /** 15 | * アンロードの前にスローされるシグナルです。 16 | */ 17 | @Value 18 | @EqualsAndHashCode(callSuper = false) 19 | public static class Pre extends PluginUnloadingSignal 20 | { 21 | /** 22 | * アンロードされるプラグインです。 23 | */ 24 | @NotNull 25 | Plugin plugin; 26 | } 27 | 28 | /** 29 | * アンロードの後にスローされるシグナルです。 30 | */ 31 | @Value 32 | @EqualsAndHashCode(callSuper = false) 33 | public static class Post extends PluginUnloadingSignal 34 | { 35 | /** 36 | * アンロードされるプラグインの名前です。 37 | * 注意:アンロード後なので、{@link Plugin}のインスタンスは取得できません(VMから削除されています)。 38 | */ 39 | @NotNull 40 | String pluginName; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /KPMTasks/src/main/java/org/kunlab/kpm/task/tasks/uninstall/signals/StartingGCSignal.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.task.tasks.uninstall.signals; 2 | 3 | import org.kunlab.kpm.signal.Signal; 4 | 5 | /** 6 | * VMのGCを実行することを通知するシグナルです。 7 | */ 8 | public class StartingGCSignal extends Signal 9 | { 10 | } 11 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021-2023 TeamKun., Peyang 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /images/clean.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TeamKun/TeamKUNPluginManager/7763e73051767773644051fadac9384586742bb1/images/clean.png -------------------------------------------------------------------------------- /images/pl-info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TeamKun/TeamKUNPluginManager/7763e73051767773644051fadac9384586742bb1/images/pl-info.png -------------------------------------------------------------------------------- /images/pl-install.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TeamKun/TeamKUNPluginManager/7763e73051767773644051fadac9384586742bb1/images/pl-install.png -------------------------------------------------------------------------------- /images/pl-upgrade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TeamKun/TeamKUNPluginManager/7763e73051767773644051fadac9384586742bb1/images/pl-upgrade.png -------------------------------------------------------------------------------- /nms_v1_16/src/main/java/org/kunlab/kpm/nms/v1_16/utils/ServerConditionCheckerImpl.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.nms.v1_16.utils; 2 | 3 | import org.bukkit.Bukkit; 4 | import org.bukkit.craftbukkit.v1_16_R3.CraftServer; 5 | import org.kunlab.kpm.utils.interfaces.ServerConditionChecker; 6 | 7 | public class ServerConditionCheckerImpl implements ServerConditionChecker 8 | { 9 | private final CraftServer craftServer; 10 | private final int currentSessionReloadCount; 11 | 12 | public ServerConditionCheckerImpl() 13 | { 14 | this.craftServer = (CraftServer) Bukkit.getServer(); 15 | this.currentSessionReloadCount = this.craftServer.reloadCount; 16 | } 17 | 18 | @Override 19 | public boolean isStopping() 20 | { 21 | return this.craftServer.getServer().isRunning(); 22 | } 23 | 24 | @Override 25 | public boolean isReloading() 26 | { 27 | return this.craftServer.reloadCount != this.currentSessionReloadCount; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /nms_v1_19/src/main/java/org/kunlab/kpm/nms/v1_19/utils/ServerConditionCheckerImpl.java: -------------------------------------------------------------------------------- 1 | package org.kunlab.kpm.nms.v1_19.utils; 2 | 3 | import org.bukkit.Bukkit; 4 | import org.bukkit.craftbukkit.v1_19_R1.CraftServer; 5 | import org.kunlab.kpm.utils.interfaces.ServerConditionChecker; 6 | 7 | public class ServerConditionCheckerImpl implements ServerConditionChecker 8 | { 9 | private final CraftServer craftServer; 10 | private final int currentSessionReloadCount; 11 | 12 | public ServerConditionCheckerImpl() 13 | { 14 | this.craftServer = (CraftServer) Bukkit.getServer(); 15 | this.currentSessionReloadCount = this.craftServer.reloadCount; 16 | } 17 | 18 | @Override 19 | public boolean isStopping() 20 | { 21 | return !this.craftServer.getServer().u(); 22 | } 23 | 24 | @Override 25 | public boolean isReloading() 26 | { 27 | return this.craftServer.reloadCount != this.currentSessionReloadCount; 28 | } 29 | } 30 | --------------------------------------------------------------------------------