From 1ca76964395ff0cb080518581cd9d021e95f36d2 Mon Sep 17 00:00:00 2001 From: Juuz <6596629+Juuxel@users.noreply.github.com> Date: Fri, 2 Aug 2024 03:36:10 +0300 Subject: [PATCH] Rewrite registrars in Java --- .../juuxel/adorn/lib/registry/Registered.java | 7 +++++++ .../juuxel/adorn/lib/registry/Registrar.java | 10 ++++++++++ .../adorn/lib/registry/RegistrarFactory.java | 16 ++++++++++++++++ .../juuxel/adorn/lib/registry/Registered.kt | 11 ----------- .../juuxel/adorn/lib/registry/Registrar.kt | 19 ------------------- .../adorn/lib/registry/RegistrarFactory.kt | 18 ------------------ .../adorn/platform/fabric/RegistrarImpl.java | 6 +++--- .../forge/registrar/DeferredRegistrar.java | 6 +++--- 8 files changed, 39 insertions(+), 54 deletions(-) create mode 100644 common/src/main/java/juuxel/adorn/lib/registry/Registered.java create mode 100644 common/src/main/java/juuxel/adorn/lib/registry/Registrar.java create mode 100644 common/src/main/java/juuxel/adorn/lib/registry/RegistrarFactory.java delete mode 100644 common/src/main/kotlin/juuxel/adorn/lib/registry/Registered.kt delete mode 100644 common/src/main/kotlin/juuxel/adorn/lib/registry/Registrar.kt delete mode 100644 common/src/main/kotlin/juuxel/adorn/lib/registry/RegistrarFactory.kt diff --git a/common/src/main/java/juuxel/adorn/lib/registry/Registered.java b/common/src/main/java/juuxel/adorn/lib/registry/Registered.java new file mode 100644 index 000000000..b018d7a97 --- /dev/null +++ b/common/src/main/java/juuxel/adorn/lib/registry/Registered.java @@ -0,0 +1,7 @@ +package juuxel.adorn.lib.registry; + +import java.util.function.Supplier; + +@FunctionalInterface +public interface Registered extends Supplier { +} diff --git a/common/src/main/java/juuxel/adorn/lib/registry/Registrar.java b/common/src/main/java/juuxel/adorn/lib/registry/Registrar.java new file mode 100644 index 000000000..8c5dce673 --- /dev/null +++ b/common/src/main/java/juuxel/adorn/lib/registry/Registrar.java @@ -0,0 +1,10 @@ +package juuxel.adorn.lib.registry; + +import java.util.function.Supplier; + +public interface Registrar extends Iterable { + /** + * Registers an object with the id. The object is created using the provider. + */ + Registered register(String id, Supplier provider); +} diff --git a/common/src/main/java/juuxel/adorn/lib/registry/RegistrarFactory.java b/common/src/main/java/juuxel/adorn/lib/registry/RegistrarFactory.java new file mode 100644 index 000000000..fa42d80fb --- /dev/null +++ b/common/src/main/java/juuxel/adorn/lib/registry/RegistrarFactory.java @@ -0,0 +1,16 @@ +package juuxel.adorn.lib.registry; + +import juuxel.adorn.util.InlineServices; +import juuxel.adorn.util.Services; +import net.minecraft.registry.Registry; +import net.minecraft.registry.RegistryKey; + +@InlineServices +public interface RegistrarFactory { + Registrar create(RegistryKey> registryKey); + + @InlineServices.Getter + static RegistrarFactory get() { + return Services.load(RegistrarFactory.class); + } +} diff --git a/common/src/main/kotlin/juuxel/adorn/lib/registry/Registered.kt b/common/src/main/kotlin/juuxel/adorn/lib/registry/Registered.kt deleted file mode 100644 index 9afac0e87..000000000 --- a/common/src/main/kotlin/juuxel/adorn/lib/registry/Registered.kt +++ /dev/null @@ -1,11 +0,0 @@ -package juuxel.adorn.lib.registry - -import java.util.function.Supplier -import kotlin.properties.ReadOnlyProperty -import kotlin.reflect.KProperty - -fun interface Registered : Supplier<@UnsafeVariance T>, ReadOnlyProperty { - override fun get(): T - - override fun getValue(thisRef: Any?, property: KProperty<*>): T = get() -} diff --git a/common/src/main/kotlin/juuxel/adorn/lib/registry/Registrar.kt b/common/src/main/kotlin/juuxel/adorn/lib/registry/Registrar.kt deleted file mode 100644 index 6ebf403bd..000000000 --- a/common/src/main/kotlin/juuxel/adorn/lib/registry/Registrar.kt +++ /dev/null @@ -1,19 +0,0 @@ -package juuxel.adorn.lib.registry - -interface Registrar : Iterable { - /** - * Registers an object with the [id]. The object is created using the [provider]. - */ - fun register(id: String, provider: () -> U): Registered - - /** - * Registers an optional object with the [id]. The [provider] can either create the object, - * or return null, in which case the return value contains null. - * - * Note that this, unlike the other methods, always invokes the provider eagerly even on Forge. - */ - fun registerOptional(id: String, provider: () -> U?): Registered { - val value: U = provider.invoke() ?: return Registered { null } - return register(id) { value } - } -} diff --git a/common/src/main/kotlin/juuxel/adorn/lib/registry/RegistrarFactory.kt b/common/src/main/kotlin/juuxel/adorn/lib/registry/RegistrarFactory.kt deleted file mode 100644 index 8dfd4366a..000000000 --- a/common/src/main/kotlin/juuxel/adorn/lib/registry/RegistrarFactory.kt +++ /dev/null @@ -1,18 +0,0 @@ -package juuxel.adorn.lib.registry - -import juuxel.adorn.util.InlineServices -import juuxel.adorn.util.loadService -import net.minecraft.registry.Registry -import net.minecraft.registry.RegistryKey - -interface RegistrarFactory { - fun create(registryKey: RegistryKey>): Registrar - - @InlineServices - companion object { - private val instance: RegistrarFactory by lazy { loadService() } - - @JvmStatic - fun get() = instance - } -} diff --git a/fabric/src/main/java/juuxel/adorn/platform/fabric/RegistrarImpl.java b/fabric/src/main/java/juuxel/adorn/platform/fabric/RegistrarImpl.java index 711cb7e47..f277b4ee6 100644 --- a/fabric/src/main/java/juuxel/adorn/platform/fabric/RegistrarImpl.java +++ b/fabric/src/main/java/juuxel/adorn/platform/fabric/RegistrarImpl.java @@ -3,12 +3,12 @@ import juuxel.adorn.AdornCommon; import juuxel.adorn.lib.registry.Registered; import juuxel.adorn.lib.registry.Registrar; -import kotlin.jvm.functions.Function0; import net.minecraft.registry.Registry; import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.function.Supplier; public final class RegistrarImpl implements Registrar { private final Registry registry; @@ -19,8 +19,8 @@ public RegistrarImpl(Registry registry) { } @Override - public Registered register(String id, Function0 provider) { - var registered = Registry.register(registry, AdornCommon.id(id), provider.invoke()); + public Registered register(String id, Supplier provider) { + var registered = Registry.register(registry, AdornCommon.id(id), provider.get()); objects.add(registered); return () -> registered; } diff --git a/forge/src/main/java/juuxel/adorn/platform/forge/registrar/DeferredRegistrar.java b/forge/src/main/java/juuxel/adorn/platform/forge/registrar/DeferredRegistrar.java index 1f9641189..2600a262a 100644 --- a/forge/src/main/java/juuxel/adorn/platform/forge/registrar/DeferredRegistrar.java +++ b/forge/src/main/java/juuxel/adorn/platform/forge/registrar/DeferredRegistrar.java @@ -3,7 +3,6 @@ import com.google.common.collect.Iterators; import juuxel.adorn.AdornCommon; import juuxel.adorn.lib.registry.Registered; -import kotlin.jvm.functions.Function0; import net.minecraft.registry.Registry; import net.minecraft.registry.RegistryKey; import net.neoforged.bus.api.IEventBus; @@ -13,6 +12,7 @@ import java.util.ArrayList; import java.util.Iterator; import java.util.List; +import java.util.function.Supplier; public final class DeferredRegistrar implements ForgeRegistrar { private final DeferredRegister register; @@ -28,8 +28,8 @@ public void hook(IEventBus modBus) { } @Override - public Registered register(String id, Function0 provider) { - var registryObject = register.register(id, provider::invoke); + public Registered register(String id, Supplier provider) { + var registryObject = register.register(id, provider); objects.add(registryObject); return registryObject::get; }