001package com.ericlam.mc.bungee.hnmc.managers; 002 003import com.ericlam.mc.bungee.hnmc.exceptions.PluginNotFoundException; 004import com.ericlam.mc.bungee.hnmc.exceptions.ResourceNotFoundException; 005 006import java.io.File; 007import java.util.concurrent.CompletableFuture; 008import java.util.function.Consumer; 009 010/** 011 * 插件資源管理器 012 */ 013public interface ResourceManager { 014 015 /** 016 * 插件資源類別 017 */ 018 enum Type { 019 /** 020 * Spigot 插件 021 */ 022 SPIGOT, 023 /** 024 * HyperNiteMC 專用插件 025 */ 026 HYPERNITE 027 } 028 029 /** 030 * 獲取該插件的最新版本 031 * 032 * @param plugin 插件名稱 033 * @return 版本名稱 034 * @throws PluginNotFoundException 找不到插件 035 * @throws ResourceNotFoundException 找不到遠端資源 036 */ 037 String getLatestVersion(String plugin) throws PluginNotFoundException, ResourceNotFoundException; 038 039 /** 040 * 檢查該插件版本是否為最新版本 041 * 042 * @param plugin 插件名稱 043 * @return 是否為最新版本 044 * @throws PluginNotFoundException 找不到插件 045 * @throws ResourceNotFoundException 找不到遠端資源 046 */ 047 boolean isLatestVersion(String plugin) throws PluginNotFoundException, ResourceNotFoundException; 048 049 /** 050 * 刷新該插件的最新版本到快取 051 * @param plugin 插件名稱 052 * @param afterRun 運行成功時 053 * @param errorRun 出現錯誤時 054 */ 055 void fetchLatestVersion(String plugin, Consumer<String> afterRun, Consumer<Exception> errorRun); 056 057 /** 058 * 下載該插件的最新版本 059 * 060 * @param plugin 插件名稱 061 * @return 插件檔案, 找不到遠端資源時為 null 062 * @throws PluginNotFoundException 找不到插件 063 */ 064 CompletableFuture<File> downloadLatestVersion(String plugin) throws PluginNotFoundException; 065 066}