diff --git a/build.gradle.kts b/build.gradle.kts index 691a0c2..2ad12d8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,7 +7,7 @@ plugins { } group = "me.uni0305" -version = "0.1.1" +version = "0.1.2" repositories { mavenCentral() diff --git a/src/main/kotlin/me/uni0305/oraxen/OraxenExtrasCommand.kt b/src/main/kotlin/me/uni0305/oraxen/OraxenExtrasCommand.kt index d42bac5..0d827b7 100644 --- a/src/main/kotlin/me/uni0305/oraxen/OraxenExtrasCommand.kt +++ b/src/main/kotlin/me/uni0305/oraxen/OraxenExtrasCommand.kt @@ -33,9 +33,11 @@ class OraxenExtrasCommand(private val plugin: JavaPlugin) : BukkitCommand("oraxe when (args[1].lowercase()) { "reload" -> { - OraxenExtrasPlugin.externalPackImportService.importPacks() - OraxenPack.reloadPack() - sender.sendRichMessage("Reloaded Oraxen pack.") + sender.sendRichMessage("Reloading Oraxen pack...") + OraxenExtrasPlugin.externalPackImportService.importPacks().thenAcceptAsync { + OraxenPack.reloadPack() + sender.sendRichMessage("Reloaded Oraxen pack.") + } return true } "upload" -> { diff --git a/src/main/kotlin/me/uni0305/oraxen/config/ExternalPackImportConfig.kt b/src/main/kotlin/me/uni0305/oraxen/config/ExternalPackImportConfig.kt index 2268951..da47569 100644 --- a/src/main/kotlin/me/uni0305/oraxen/config/ExternalPackImportConfig.kt +++ b/src/main/kotlin/me/uni0305/oraxen/config/ExternalPackImportConfig.kt @@ -12,6 +12,6 @@ class ExternalPackImportConfig(private val config: FileConfiguration) { fun isEnabled() = config.getBoolean("$SECTION_PATH.enabled", false) fun getPacks(): List = config.getStringList("$SECTION_PATH.packs") - .map { File(Bukkit.getServer().pluginsFolder, it).resolve("assets") } - .filter { it.exists() } + .map { File(Bukkit.getServer().pluginsFolder, it) } + .filter { it.isDirectory && it.exists() } } \ No newline at end of file diff --git a/src/main/kotlin/me/uni0305/oraxen/service/ExternalPackImportService.kt b/src/main/kotlin/me/uni0305/oraxen/service/ExternalPackImportService.kt index 8935839..2283cb2 100644 --- a/src/main/kotlin/me/uni0305/oraxen/service/ExternalPackImportService.kt +++ b/src/main/kotlin/me/uni0305/oraxen/service/ExternalPackImportService.kt @@ -1,9 +1,10 @@ package me.uni0305.oraxen.service -import io.th0rgal.oraxen.api.OraxenPack +import io.th0rgal.oraxen.OraxenPlugin import me.uni0305.oraxen.config.ExternalPackImportConfig import org.bukkit.plugin.java.JavaPlugin import org.slf4j.LoggerFactory +import java.util.concurrent.CompletableFuture class ExternalPackImportService(private val plugin: JavaPlugin) { private val logger = LoggerFactory.getLogger(this.javaClass) @@ -12,21 +13,30 @@ class ExternalPackImportService(private val plugin: JavaPlugin) { fun getPacks() = if (config.isEnabled()) config.getPacks() else emptyList() - fun importPacks() { + fun importPacks(): CompletableFuture = CompletableFuture.runAsync { if (!config.isEnabled()) { logger.warn("External pack import is disabled") - return + return@runAsync } - val packs = config.getPacks() - if (packs.isEmpty()) { + val directories = config.getPacks() + if (directories.isEmpty()) { logger.warn("No external packs to import") - return + return@runAsync } try { - OraxenPack.addFilesToPack(packs.toTypedArray()) - logger.info("Imported ${packs.size} external packs") + val packFolder = OraxenPlugin.get().resourcePack.packFolder + for (directory in directories) { + val files = directory.walkTopDown().filter { it.isFile && it.exists() } + for (file in files) { + val relativePath = directory.toPath().relativize(file.toPath()).toString() + val targetFile = packFolder.resolve(relativePath) + if (targetFile.exists() && targetFile.readBytes().contentEquals(file.readBytes())) continue + file.copyTo(targetFile, true) + } + } + logger.info("Successfully imported external packs") } catch (e: Exception) { logger.error("Failed to import external packs", e) }