From 2bd87bd906c6862768528edd302c7cbbbf9ac7d6 Mon Sep 17 00:00:00 2001 From: Osip Fatkullin Date: Thu, 30 Nov 2023 02:24:16 +0100 Subject: [PATCH] feat(blocks): Add accessors to Mimic interface --- mimic-bukkit-api/src/main/kotlin/Mimic.kt | 62 +++++++++++++++++++++++ mimic-bukkit/src/main/kotlin/MimicImpl.kt | 21 ++++++++ 2 files changed, 83 insertions(+) diff --git a/mimic-bukkit-api/src/main/kotlin/Mimic.kt b/mimic-bukkit-api/src/main/kotlin/Mimic.kt index bbb6534..b39abe2 100644 --- a/mimic-bukkit-api/src/main/kotlin/Mimic.kt +++ b/mimic-bukkit-api/src/main/kotlin/Mimic.kt @@ -5,6 +5,7 @@ import org.bukkit.entity.Player import org.bukkit.plugin.Plugin import org.bukkit.plugin.ServicePriority import org.jetbrains.annotations.ApiStatus +import ru.endlesscode.mimic.blocks.BukkitBlocksRegistry import ru.endlesscode.mimic.bukkit.load import ru.endlesscode.mimic.classes.BukkitClassSystem import ru.endlesscode.mimic.inventory.BukkitPlayerInventory @@ -14,6 +15,67 @@ import ru.endlesscode.mimic.level.BukkitLevelSystem /** Mimic provides access to abstraction APIs. */ public interface Mimic { + // region Blocks Registry + /** + * Registers the given [registry] with normal priority. + * + * @param registry The [BukkitBlocksRegistry] implementation + * @param apiLevel Minimal required API level for this item registry implementation: + * - if required API level is higher than installed Mimic, provider will not be registered, + * - if required API level is lower - will be enabled compatibility mode. + * Specify `MimicApiLevel.CURRENT` to use API level of Mimic dependency used on compile time. + * @param plugin The plugin implementing this item registry. + * @return registered registry or `null` if it was not registered. + * @since 0.9.0 + */ + @ExperimentalMimicApi + @ApiStatus.Experimental + public fun registerBlocksRegistry( + registry: BukkitBlocksRegistry, + apiLevel: Int, + plugin: Plugin, + ): BukkitBlocksRegistry? = registerBlocksRegistry(registry, apiLevel, plugin, ServicePriority.Normal) + + /** + * Registers the given [registry]. + * + * @param registry The [BukkitBlocksRegistry] implementation + * @param apiLevel Minimal required API level for this item registry implementation: + * - if required API level is higher than installed Mimic, provider will not be registered, + * - if required API level is lower - will be enabled compatibility mode. + * Specify `MimicApiLevel.CURRENT` to use API level of Mimic dependency used on compile time. + * @param plugin The plugin implementing this item registry. + * @param priority Default priority. Service with higher priority will be used if user have not configured + * preferred service in config. + * @return registered registry or `null` if it was not registered. + * @since 0.9.0 + */ + @ExperimentalMimicApi + @ApiStatus.Experimental + public fun registerBlocksRegistry( + registry: BukkitBlocksRegistry, + apiLevel: Int, + plugin: Plugin, + priority: ServicePriority, + ): BukkitBlocksRegistry? + + /** + * Returns [BukkitBlocksRegistry] implementation. + * @since 0.9.0 + */ + @ExperimentalMimicApi + @ApiStatus.Experimental + public fun getBlocksRegistry(): BukkitBlocksRegistry + + /** + * Returns map containing all known [BukkitBlocksRegistry], where key is an item registry ID. + * @since 0.9.0 + */ + @ExperimentalMimicApi + @ApiStatus.Experimental + public fun getAllBlocksRegistries(): Map + // endregion + // region Class System /** * Registers the given [provider] for [BukkitClassSystem] with normal priority. diff --git a/mimic-bukkit/src/main/kotlin/MimicImpl.kt b/mimic-bukkit/src/main/kotlin/MimicImpl.kt index b661e77..f7f743a 100644 --- a/mimic-bukkit/src/main/kotlin/MimicImpl.kt +++ b/mimic-bukkit/src/main/kotlin/MimicImpl.kt @@ -3,6 +3,7 @@ package ru.endlesscode.mimic import org.bukkit.plugin.Plugin import org.bukkit.plugin.ServicePriority import org.bukkit.plugin.ServicesManager +import ru.endlesscode.mimic.blocks.BukkitBlocksRegistry import ru.endlesscode.mimic.bukkit.loadAll import ru.endlesscode.mimic.bukkit.register import ru.endlesscode.mimic.classes.BukkitClassSystem @@ -23,6 +24,25 @@ internal class MimicImpl( private val config: MimicConfig, ) : Mimic { + // region Blocks Registry + @ExperimentalMimicApi + override fun registerBlocksRegistry( + registry: BukkitBlocksRegistry, + apiLevel: Int, + plugin: Plugin, + priority: ServicePriority + ): BukkitBlocksRegistry? = tryRegisterService(apiLevel, plugin, priority) { + TODO("Not implemented yet") + // WrappedBlocksRegistry(registry, config, plugin) + } + + @ExperimentalMimicApi + override fun getBlocksRegistry(): BukkitBlocksRegistry = loadService() + + @ExperimentalMimicApi + override fun getAllBlocksRegistries(): Map = loadAllServices() + // endregion + // region Class System override fun registerClassSystem( provider: BukkitClassSystem.Provider, @@ -146,6 +166,7 @@ internal class MimicImpl( BukkitLevelSystem.Provider::class -> "LevelSystem" BukkitPlayerInventory.Provider::class -> "PlayerInventory" BukkitItemsRegistry::class -> "ItemsRegistry" + BukkitBlocksRegistry::class -> "BlocksRegistry" else -> error("Unknown service: ${this.java.name}") } }