aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/moe/nea/potatocrime/registry/PotatoRegistry.kt
blob: 2e5fa5fce4118a0524aca39cd98b7c906ad1e202 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package moe.nea.potatocrime.registry

import com.mojang.serialization.Codec
import moe.nea.potatocrime.PotatoCrime
import moe.nea.potatocrime.item.ContrabandItem
import net.minecraft.component.DataComponentType
import net.minecraft.item.Item
import net.minecraft.network.codec.PacketCodecs
import net.minecraft.registry.Registries
import net.minecraft.registry.Registry
import net.minecraft.util.Identifier

object PotatoRegistry {
    private val delayedRegistries = mutableListOf<() -> Unit>()
    fun registerAll() {
        delayedRegistries.forEach { it.invoke() }
    }

    private fun <U, T : U> register(registry: Registry<U>, name: String, t: T): T {
        delayedRegistries.add {
            Registry.register(registry, Identifier(PotatoCrime.modId, name), t)
        }
        return t
    }

    private fun <T : Item> item(name: String, t: T): T = register(Registries.ITEM, name, t)
    private fun <T> dataComponent(name: String, block: (DataComponentType.Builder<T>) -> DataComponentType.Builder<T>) =
        register(
            Registries.DATA_COMPONENT_TYPE, name,
            block(DataComponentType.builder()).build()
        )

    val contraband = item("contraband", ContrabandItem())
    val contrabandData = dataComponent("contraband_data") {
        it.codec(Codec.INT).packetCodec(PacketCodecs.VAR_INT)
    }
}