also make implement lazy
This commit is contained in:
parent
bdb2e85bcd
commit
745979d101
@ -12,14 +12,21 @@ import java.util.function.Supplier
|
||||
import kotlin.properties.ReadOnlyProperty
|
||||
import kotlin.reflect.KProperty
|
||||
|
||||
class RegistryDelegate<T>(key: String) : ReadOnlyProperty<Any, ForgeRegistry<T>>, Supplier<ForgeRegistry<T>> {
|
||||
private var value: Supplier<IForgeRegistry<T>?>? = null
|
||||
class RegistryDelegate<T>(key: String) : ReadOnlyProperty<Any, ForgeRegistry<T>>, Supplier<ForgeRegistry<T>>, Lazy<ForgeRegistry<T>> {
|
||||
private var _value: Supplier<IForgeRegistry<T>?>? = null
|
||||
|
||||
override val value: ForgeRegistry<T>
|
||||
get() = get()
|
||||
|
||||
override fun isInitialized(): Boolean {
|
||||
return _value != null
|
||||
}
|
||||
|
||||
val location = ResourceLocation(OverdriveThatMatters.MOD_ID, key)
|
||||
val key: ResourceKey<Registry<T>> = ResourceKey.createRegistryKey(location)
|
||||
|
||||
override fun get(): ForgeRegistry<T> {
|
||||
val supp = value ?: throw IllegalStateException("Tried to access uninitialized registry $location")
|
||||
val supp = _value ?: throw IllegalStateException("Tried to access uninitialized registry $location")
|
||||
return supp.get() as ForgeRegistry<T>? ?: throw IllegalStateException("Accessing registry $location too early")
|
||||
}
|
||||
|
||||
@ -28,11 +35,11 @@ class RegistryDelegate<T>(key: String) : ReadOnlyProperty<Any, ForgeRegistry<T>>
|
||||
}
|
||||
|
||||
fun build(event: NewRegistryEvent) {
|
||||
if (value != null) {
|
||||
if (_value != null) {
|
||||
throw IllegalStateException("Already built registry $location!")
|
||||
}
|
||||
|
||||
value = RegistryBuilder<T>().let {
|
||||
_value = RegistryBuilder<T>().let {
|
||||
it.setName(location)
|
||||
// it.type = AndroidFeatureType::class.java
|
||||
event.create(it)
|
||||
|
Loading…
Reference in New Issue
Block a user