Skip to content

Commit b182bd3

Browse files
committed
Houston we have success logging into single player world!
1 parent b913d73 commit b182bd3

11 files changed

Lines changed: 56 additions & 26 deletions

File tree

common/src/main/java/generations/gg/generations/core/generationscore/common/recipe/GenerationsIngredidents.kt

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,52 @@
11
package generations.gg.generations.core.generationscore.common.recipe
22

3+
import com.google.common.collect.BiMap
4+
import com.google.common.collect.HashBiMap
35
import com.mojang.serialization.MapCodec
46
import dev.architectury.registry.registries.DeferredRegister
57
import dev.architectury.registry.registries.Registrar
68
import dev.architectury.registry.registries.RegistrarManager
79
import dev.architectury.registry.registries.RegistrySupplier
810
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
913
import generations.gg.generations.core.generationscore.common.world.recipe.*
14+
import net.minecraft.network.FriendlyByteBuf
1015
import net.minecraft.network.RegistryFriendlyByteBuf
1116
import net.minecraft.network.codec.ByteBufCodecs
1217
import net.minecraft.network.codec.StreamCodec
1318
import net.minecraft.resources.ResourceKey
1419
import net.minecraft.resources.ResourceLocation
1520

1621
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<*>>()
1824

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)
2127

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)
2737
val EMPTY = register("empty", MapCodec.unit(EmptyIngredient), StreamCodec.unit(EmptyIngredient));
2838

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+
}
3050

3151
@JvmStatic fun init() {
3252
}

common/src/main/java/generations/gg/generations/core/generationscore/common/recipe/GenerationsIngredientType.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@ import com.mojang.serialization.MapCodec
44
import generations.gg.generations.core.generationscore.common.world.recipe.GenerationsIngredient
55
import net.minecraft.network.RegistryFriendlyByteBuf
66
import net.minecraft.network.codec.StreamCodec
7+
import net.minecraft.resources.ResourceLocation
78

89
@JvmRecord
910
data class GenerationsIngredientType<T : GenerationsIngredient>(
11+
val id: ResourceLocation,
1012
val codec: MapCodec<T>,
1113
val streamCodec: StreamCodec<RegistryFriendlyByteBuf, T>
1214
)

common/src/main/java/generations/gg/generations/core/generationscore/common/util/StreamCodecs.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ object StreamCodecs {
2323
}
2424

2525
fun <V> StreamCodec<ByteBuf, V>.asRegistryFriendly(): StreamCodec<RegistryFriendlyByteBuf, V> = mapStream({ it as RegistryFriendlyByteBuf })
26+
fun <V> StreamCodec<ByteBuf, V>.asFriendly(): StreamCodec<FriendlyByteBuf, V> = mapStream({ it as FriendlyByteBuf })
2627

2728
fun <B, V : Any> StreamCodec<B, V>.optional(): StreamCodec<B, Optional<V>> where B : ByteBuf = ByteBufCodecs.optional(this)
2829

common/src/main/java/generations/gg/generations/core/generationscore/common/world/recipe/DamageIngrident.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class DamageIngredient(var item: Item, var damage: Int) : GenerationsIngredient
2424
override fun matchingStacks(): List<ItemStack> = listOf(item.defaultInstance)
2525

2626
override val type: GenerationsIngredientType<*>
27-
get() = GenerationsIngredidents.DAMAGE.get()
27+
get() = GenerationsIngredidents.DAMAGE
2828

2929
companion object {
3030
val ID = "damage"

common/src/main/java/generations/gg/generations/core/generationscore/common/world/recipe/EmptyIngredient.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import net.minecraft.world.item.ItemStack
77
object EmptyIngredient : GenerationsIngredient {
88
override val id: String = "empty"
99
override val type: GenerationsIngredientType<*>
10-
get() = GenerationsIngredidents.EMPTY.get()
10+
get() = GenerationsIngredidents.EMPTY
1111

1212
override val isEmpty: Boolean
1313
get() = true

common/src/main/java/generations/gg/generations/core/generationscore/common/world/recipe/ItemIngredient.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ class ItemIngredient(val itemKey: ResourceKey<Item>) : GenerationsIngredient {
2222
}
2323

2424
override val type: GenerationsIngredientType<*>
25-
get() = GenerationsIngredidents.ITEM.get()
25+
get() = GenerationsIngredidents.ITEM
2626

2727
override fun matchingStacks(): List<ItemStack> {
2828
return listOf(BuiltInRegistries.ITEM.get(itemKey)!!.defaultInstance)

common/src/main/java/generations/gg/generations/core/generationscore/common/world/recipe/ItemTagIngredient.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class ItemTagIngredient(val itemKey: TagKey<Item>) : GenerationsIngredient {
1717
override val id = ID
1818

1919
override val type: GenerationsIngredientType<*>
20-
get() = GenerationsIngredidents.ITEM_TAG.get()
20+
get() = GenerationsIngredidents.ITEM_TAG
2121

2222
override fun matches(stack: ItemStack): Boolean {
2323
return stack.`is` { it.`is`(itemKey) }

common/src/main/java/generations/gg/generations/core/generationscore/common/world/recipe/PokemonItemIngredient.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ class PokemonItemIngredient(val species: Optional<ResourceLocation>, val aspects
2424
override val id = ID
2525

2626
override val type: GenerationsIngredientType<*>
27-
get() = GenerationsIngredidents.POKEMON_ITEM.get()
27+
get() = GenerationsIngredidents.POKEMON_ITEM
2828

2929
override fun matches(stack: ItemStack): Boolean =
3030
if (stack.`is`(CobblemonItems.POKEMON_MODEL)) {

common/src/main/java/generations/gg/generations/core/generationscore/common/world/recipe/ShapedRecipePattern.kt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ class ShapedRecipePattern(
7373

7474
buffer.writeVarInt(ingredients.size)
7575

76-
ingredients.forEach(Consumer { ingredient: GenerationsIngredient ->
76+
ingredients.forEach({ ingredient ->
7777
GenerationsIngredidents.STREAM_CODEC.encode(
7878
buffer,
7979
ingredient
@@ -275,7 +275,7 @@ class ShapedRecipePattern(
275275
private fun fromNetwork(buffer: RegistryFriendlyByteBuf): ShapedRecipePattern {
276276
val i = buffer.readVarInt()
277277
val j = buffer.readVarInt()
278-
val nonNullList = NonNullList.withSize<GenerationsIngredient>(i * j, EmptyIngredient)
278+
val nonNullList = NonNullList.withSize<GenerationsIngredient>(buffer.readVarInt(), EmptyIngredient)
279279
nonNullList.replaceAll { ingredient: GenerationsIngredient? ->
280280
GenerationsIngredidents.STREAM_CODEC.decode(
281281
buffer
@@ -294,9 +294,8 @@ class ShapedRecipePattern(
294294
)
295295
}.orElseGet { DataResult.error { "Cannot encode unpacked recipe" } }
296296
})
297-
STREAM_CODEC = StreamCodec.ofMember(
298-
{ obj: ShapedRecipePattern, buffer: RegistryFriendlyByteBuf -> obj.toNetwork(buffer) },
299-
{ buffer: RegistryFriendlyByteBuf -> fromNetwork(buffer) })
297+
STREAM_CODEC = StreamCodec.ofMember(ShapedRecipePattern::toNetwork, ::fromNetwork
298+
)
300299
}
301300
}
302301
}

common/src/main/java/generations/gg/generations/core/generationscore/common/world/recipe/ShapelessRksRecipe.kt

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package generations.gg.generations.core.generationscore.common.world.recipe
22

3-
import com.cobblemon.mod.common.util.codec.kotlinOptionalFieldOf
43
import com.mojang.serialization.Codec
54
import com.mojang.serialization.MapCodec
65
import com.mojang.serialization.codecs.RecordCodecBuilder
@@ -44,8 +43,6 @@ class ShapelessRksRecipe(
4443
companion object {
4544
val STREAM_CODEC: StreamCodec<RegistryFriendlyByteBuf, ShapelessRksRecipe> = StreamCodec.of(ShapelessRksRecipe::toNetwork, ShapelessRksRecipe::fromNetwork)
4645

47-
val INGREDIENT_LIST: StreamCodec<RegistryFriendlyByteBuf, NonNullList<GenerationsIngredient>> = GenerationsIngredidents.STREAM_CODEC.apply(ByteBufCodecs.collection { NonNullList.withSize(it, EmptyIngredient) })
48-
4946
private fun toNetwork(buffer: RegistryFriendlyByteBuf, value: ShapelessRksRecipe) {
5047
ByteBufCodecs.STRING_UTF8.encode(buffer, value.group)
5148
RksResultType.STREAM_CODEC.encode(buffer, value.result)
@@ -54,8 +51,14 @@ class ShapelessRksRecipe(
5451
ByteBufCodecs.FLOAT.encode(buffer, value.experience)
5552
ByteBufCodecs.INT.encode(buffer, value.processingTime)
5653
ByteBufCodecs.BOOL.encode(buffer, value.showNotification)
57-
INGREDIENT_LIST.encode(buffer, value.recipeItems)
58-
}
54+
buffer.writeVarInt(value.recipeItems.size)
55+
56+
value.recipeItems.forEach({ ingredient ->
57+
GenerationsIngredidents.STREAM_CODEC.encode(
58+
buffer,
59+
ingredient
60+
)
61+
}) }
5962

6063
private fun fromNetwork(buffer: RegistryFriendlyByteBuf): ShapelessRksRecipe {
6164
val group = ByteBufCodecs.STRING_UTF8.decode(buffer)
@@ -65,7 +68,12 @@ class ShapelessRksRecipe(
6568
val experience = ByteBufCodecs.FLOAT.decode(buffer)
6669
val processingTime = ByteBufCodecs.INT.decode(buffer)
6770
val showNotification = ByteBufCodecs.BOOL.decode(buffer)
68-
val items = INGREDIENT_LIST.decode(buffer)
71+
val items = NonNullList.withSize<GenerationsIngredient>(buffer.readVarInt(), EmptyIngredient)
72+
items.replaceAll { ingredient: GenerationsIngredient? ->
73+
GenerationsIngredidents.STREAM_CODEC.decode(
74+
buffer
75+
)
76+
}
6977

7078
return ShapelessRksRecipe(group, result, consumesTimeCapsules, key, experience, processingTime, showNotification, items)
7179
}

0 commit comments

Comments
 (0)