|
1 | 1 | package generations.gg.generations.core.generationscore.common.recipe |
2 | 2 |
|
| 3 | +import com.google.common.collect.BiMap |
| 4 | +import com.google.common.collect.HashBiMap |
3 | 5 | import com.mojang.serialization.MapCodec |
4 | 6 | import dev.architectury.registry.registries.DeferredRegister |
5 | 7 | import dev.architectury.registry.registries.Registrar |
6 | 8 | import dev.architectury.registry.registries.RegistrarManager |
7 | 9 | import dev.architectury.registry.registries.RegistrySupplier |
8 | 10 | import generations.gg.generations.core.generationscore.common.GenerationsCore |
| 11 | +import generations.gg.generations.core.generationscore.common.util.StreamCodecs.asFriendly |
| 12 | +import generations.gg.generations.core.generationscore.common.util.StreamCodecs.asRegistryFriendly |
9 | 13 | import generations.gg.generations.core.generationscore.common.world.recipe.* |
| 14 | +import net.minecraft.network.FriendlyByteBuf |
10 | 15 | import net.minecraft.network.RegistryFriendlyByteBuf |
11 | 16 | import net.minecraft.network.codec.ByteBufCodecs |
12 | 17 | import net.minecraft.network.codec.StreamCodec |
13 | 18 | import net.minecraft.resources.ResourceKey |
14 | 19 | import net.minecraft.resources.ResourceLocation |
15 | 20 |
|
16 | 21 | object GenerationsIngredidents { |
17 | | - val REGISTER: Registrar<GenerationsIngredientType<*>> = RegistrarManager.get(GenerationsCore.MOD_ID).builder<GenerationsIngredientType<*>>(GenerationsCore.id("rks_ingredients")).build() |
| 22 | +// val REGISTER: Registrar<GenerationsIngredientType<*>> = RegistrarManager.get(GenerationsCore.MOD_ID).builder<GenerationsIngredientType<*>>(GenerationsCore.id("rks_ingredients")).build() |
| 23 | + val MAP = mutableMapOf<ResourceLocation, GenerationsIngredientType<*>>() |
18 | 24 |
|
19 | | - @JvmField val CODEC = ResourceLocation.CODEC.xmap(REGISTER::get, REGISTER::getId).xmap({ it!! }, { it }).dispatch(GenerationsIngredient::type, GenerationsIngredientType<*>::codec) |
20 | | - @JvmField val STREAM_CODEC: StreamCodec<RegistryFriendlyByteBuf, GenerationsIngredient> = ByteBufCodecs.registry(REGISTER.key()).dispatch(GenerationsIngredient::type, GenerationsIngredientType<*>::streamCodec) |
| 25 | +// @JvmField val CODEC = ResourceLocation.CODEC.xmap(REGISTER::get, REGISTER::getId).xmap({ it!! }, { it }).dispatch(GenerationsIngredient::type, GenerationsIngredientType<*>::codec) |
| 26 | +// @JvmField val STREAM_CODEC: StreamCodec<RegistryFriendlyByteBuf, GenerationsIngredient> = ByteBufCodecs.registry(REGISTER.key()).dispatch(GenerationsIngredient::type, GenerationsIngredientType<*>::streamCodec) |
21 | 27 |
|
22 | | - val DAMAGE: RegistrySupplier<GenerationsIngredientType<DamageIngredient>> = register(DamageIngredient.ID, DamageIngredient.CODEC, DamageIngredient.STREAM_CODEC) |
23 | | - val ITEM: RegistrySupplier<GenerationsIngredientType<ItemIngredient>> = register(ItemIngredient.ID, ItemIngredient.CODEC, ItemIngredient.STREAM_CODEC) |
24 | | - val ITEM_TAG: RegistrySupplier<GenerationsIngredientType<ItemTagIngredient>> = register(ItemTagIngredient.ID, ItemTagIngredient.CODEC, ItemTagIngredient.STREAM_CODEC) |
25 | | - val POKEMON_ITEM: RegistrySupplier<GenerationsIngredientType<PokemonItemIngredient>> = register(PokemonItemIngredient.ID, PokemonItemIngredient.CODEC, PokemonItemIngredient.STREAM_CODEC) |
26 | | - val TIME_CAPSULE: RegistrySupplier<GenerationsIngredientType<TimeCapsuleIngredient>> = register(TimeCapsuleIngredient.ID, TimeCapsuleIngredient.CODEC, TimeCapsuleIngredient.STREAM_CODEC) |
| 28 | + @JvmField val CODEC = ResourceLocation.CODEC.xmap(MAP::get, { it?.id }).xmap({ it!! }, { it }).dispatch(GenerationsIngredient::type, GenerationsIngredientType<*>::codec) |
| 29 | + @JvmField val INGREDIENT_TYPE_STREAM_CODEC = ResourceLocation.STREAM_CODEC.asRegistryFriendly().map(MAP::get, { (it ?: EMPTY).id }) |
| 30 | + @JvmField val STREAM_CODEC: StreamCodec<RegistryFriendlyByteBuf, GenerationsIngredient> = INGREDIENT_TYPE_STREAM_CODEC.dispatch({ it.type }, { it?.streamCodec }) |
| 31 | + |
| 32 | + val DAMAGE = register(DamageIngredient.ID, DamageIngredient.CODEC, DamageIngredient.STREAM_CODEC) |
| 33 | + val ITEM = register(ItemIngredient.ID, ItemIngredient.CODEC, ItemIngredient.STREAM_CODEC) |
| 34 | + val ITEM_TAG = register(ItemTagIngredient.ID, ItemTagIngredient.CODEC, ItemTagIngredient.STREAM_CODEC) |
| 35 | + val POKEMON_ITEM = register(PokemonItemIngredient.ID, PokemonItemIngredient.CODEC, PokemonItemIngredient.STREAM_CODEC) |
| 36 | + val TIME_CAPSULE = register(TimeCapsuleIngredient.ID, TimeCapsuleIngredient.CODEC, TimeCapsuleIngredient.STREAM_CODEC) |
27 | 37 | val EMPTY = register("empty", MapCodec.unit(EmptyIngredient), StreamCodec.unit(EmptyIngredient)); |
28 | 38 |
|
29 | | - public fun <T> register(name: String, codec: MapCodec<T>, streamCodec: StreamCodec<RegistryFriendlyByteBuf, T>): RegistrySupplier<GenerationsIngredientType<T>> where T: GenerationsIngredient = REGISTER.register(GenerationsCore.id(name)) { GenerationsIngredientType<T>(codec, streamCodec) } |
| 39 | +// public fun <T> register(name: String, codec: MapCodec<T>, streamCodec: StreamCodec<RegistryFriendlyByteBuf, T>): RegistrySupplier<GenerationsIngredientType<T>> where T: GenerationsIngredient = { |
| 40 | +// REGISTER.register(GenerationsCore.id(name)) { GenerationsIngredientType<T>(codec, streamCodec) } |
| 41 | +// } |
| 42 | + |
| 43 | + public fun <T> register(name: String, codec: MapCodec<T>, streamCodec: StreamCodec<RegistryFriendlyByteBuf, T>): GenerationsIngredientType<T> where T: GenerationsIngredient { |
| 44 | + val id = GenerationsCore.id(name) |
| 45 | + val type = GenerationsIngredientType<T>(id, codec, streamCodec) |
| 46 | + |
| 47 | + MAP.put(id, type) |
| 48 | + return type |
| 49 | + } |
30 | 50 |
|
31 | 51 | @JvmStatic fun init() { |
32 | 52 | } |
|
0 commit comments