Skip to content

Commit

Permalink
feat(blocks): Add accessors to Mimic interface
Browse files Browse the repository at this point in the history
  • Loading branch information
osipxd committed Nov 30, 2023
1 parent f914483 commit 2bd87bd
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 0 deletions.
62 changes: 62 additions & 0 deletions mimic-bukkit-api/src/main/kotlin/Mimic.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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<String, BukkitBlocksRegistry>
// endregion

// region Class System
/**
* Registers the given [provider] for [BukkitClassSystem] with normal priority.
Expand Down
21 changes: 21 additions & 0 deletions mimic-bukkit/src/main/kotlin/MimicImpl.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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<BukkitBlocksRegistry>(apiLevel, plugin, priority) {
TODO("Not implemented yet")
// WrappedBlocksRegistry(registry, config, plugin)
}

@ExperimentalMimicApi
override fun getBlocksRegistry(): BukkitBlocksRegistry = loadService()

@ExperimentalMimicApi
override fun getAllBlocksRegistries(): Map<String, BukkitBlocksRegistry> = loadAllServices()
// endregion

// region Class System
override fun registerClassSystem(
provider: BukkitClassSystem.Provider,
Expand Down Expand Up @@ -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}")
}
}

0 comments on commit 2bd87bd

Please sign in to comment.