diff --git a/gradle.properties b/gradle.properties index c59aaec..8502fb1 100644 --- a/gradle.properties +++ b/gradle.properties @@ -18,7 +18,7 @@ loader_version_range=[2,) mod_id=l2core mod_name=L2Core mod_license=LGPL-2.1 -mod_version=3.0.2-pre6 +mod_version=3.0.2 mod_group_id=dev.xkmc mod_authors=lcy0x1 mod_description=Core Library mod for all L2 mods diff --git a/src/main/java/dev/xkmc/l2core/init/reg/simple/Reg.java b/src/main/java/dev/xkmc/l2core/init/reg/simple/Reg.java index 5427b23..27f2622 100644 --- a/src/main/java/dev/xkmc/l2core/init/reg/simple/Reg.java +++ b/src/main/java/dev/xkmc/l2core/init/reg/simple/Reg.java @@ -4,7 +4,6 @@ import com.mojang.serialization.Codec; import dev.xkmc.l2core.init.reg.datapack.DataMapReg; import dev.xkmc.l2core.init.reg.datapack.DatapackReg; import dev.xkmc.l2serial.serialization.codec.CodecAdaptor; -import dev.xkmc.l2serial.util.Wrappers; import net.minecraft.core.Registry; import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceLocation; @@ -13,58 +12,70 @@ import net.neoforged.neoforge.registries.DeferredRegister; import net.neoforged.neoforge.registries.datamaps.DataMapType; import java.util.ArrayList; -import java.util.LinkedHashMap; import java.util.List; -import java.util.Map; import java.util.function.Consumer; public final class Reg { - private final String modid; + private final String modid; - private final Map, DeferredRegister> map = new LinkedHashMap<>(); - private final List> list = new ArrayList<>(); + public Reg(String modid) { + this.modid = modid; + } - public Reg(String modid) { - this.modid = modid; - } + public DeferredRegister make(Registry reg) { + var ans = DeferredRegister.create(reg, modid); + listen(ans::register); + return ans; + } - public DeferredRegister make(Registry reg) { - return Wrappers.cast(map.computeIfAbsent(reg, r -> DeferredRegister.create(r, modid))); - } + public DeferredRegister make(ResourceKey> reg) { + var ans = DeferredRegister.create(reg, modid); + listen(ans::register); + return ans; + } - public DatapackReg dataReg(String id, Codec codec) { - var ans = new DatapackReg<>(ResourceKey.createRegistryKey(id(id)), codec); - list.add(bus -> bus.addListener(ans::onRegister)); - return ans; - } + public DatapackReg dataReg(String id, Codec codec) { + var ans = new DatapackReg<>(ResourceKey.createRegistryKey(loc(id)), codec); + listen(bus -> bus.addListener(ans::onRegister)); + return ans; + } - public DatapackReg dataReg(String id, Class cls) { - return dataReg(id, new CodecAdaptor<>(cls)); - } + public DatapackReg dataReg(String id, Class cls) { + return dataReg(id, new CodecAdaptor<>(cls)); + } - public DataMapReg dataMap(DataMapType type) { - var ans = new DataMapReg<>(type); - list.add(bus -> bus.addListener(ans::register)); - return ans; - } + public DataMapReg dataMap(DataMapType type) { + var ans = new DataMapReg<>(type); + listen(bus -> bus.addListener(ans::register)); + return ans; + } - public DataMapReg dataMap(String id, ResourceKey> k, Codec codec, Codec network) { - return dataMap(DataMapType.builder(id(id), k, codec).synced(network, true).build()); - } + public DataMapReg dataMap(String id, ResourceKey> k, Codec codec, Codec network) { + return dataMap(DataMapType.builder(loc(id), k, codec).synced(network, true).build()); + } - public DataMapReg dataMap(String id, ResourceKey> k, Class cls) { - CodecAdaptor codec = new CodecAdaptor<>(cls); - return dataMap(id, k, codec, codec); - } + public DataMapReg dataMap(String id, ResourceKey> k, Class cls) { + CodecAdaptor codec = new CodecAdaptor<>(cls); + return dataMap(id, k, codec, codec); + } - public void register(IEventBus bus) { - for (var e : map.values()) e.register(bus); - for (var e : list) e.accept(bus); - } + public ResourceLocation loc(String id) { + return ResourceLocation.fromNamespaceAndPath(modid, id); + } - public ResourceLocation id(String id) { - return ResourceLocation.fromNamespaceAndPath(modid, id); - } + private final List> list = new ArrayList<>(); + private IEventBus bus; + + private void listen(Consumer cons) { + if (bus == null) list.add(cons); + else cons.accept(bus); + } + + public void register(IEventBus bus) { + for (var e : list) e.accept(bus); + list.clear(); + this.bus = bus; + } } diff --git a/src/main/java/dev/xkmc/l2core/init/reg/simple/SR.java b/src/main/java/dev/xkmc/l2core/init/reg/simple/SR.java index b600f70..b34ff78 100644 --- a/src/main/java/dev/xkmc/l2core/init/reg/simple/SR.java +++ b/src/main/java/dev/xkmc/l2core/init/reg/simple/SR.java @@ -1,6 +1,7 @@ package dev.xkmc.l2core.init.reg.simple; import net.minecraft.core.Registry; +import net.minecraft.resources.ResourceKey; import net.neoforged.neoforge.registries.DeferredHolder; import net.neoforged.neoforge.registries.DeferredRegister; @@ -8,21 +9,25 @@ import java.util.function.Supplier; public record SR(DeferredRegister reg) { - public static SR of(Reg parent, Registry reg) { - return new SR<>(parent.make(reg)); - } + public static SR of(Reg parent, Registry reg) { + return new SR<>(parent.make(reg)); + } - public Val reg(String id, Supplier sup) { - return new ValImpl<>(reg.register(id, sup)); - } + public static SR of(Reg parent, ResourceKey> reg) { + return new SR<>(parent.make(reg)); + } - private record ValImpl(DeferredHolder val) implements Val { + public Val reg(String id, Supplier sup) { + return new ValImpl<>(reg.register(id, sup)); + } - @Override - public T get() { - return val.get(); - } + private record ValImpl(DeferredHolder val) implements Val { - } + @Override + public T get() { + return val.get(); + } + + } }