Fixes to data loading

This commit is contained in:
DBotThePony 2023-12-31 22:43:02 +07:00
parent e5a982ae13
commit 65cf8bf9df
Signed by: DBot
GPG Key ID: DCC23B5715498507
3 changed files with 14 additions and 7 deletions

View File

@ -1,6 +1,7 @@
package ru.dbotthepony.mc.otm.data package ru.dbotthepony.mc.otm.data
import com.google.gson.JsonDeserializationContext import com.google.gson.JsonDeserializationContext
import com.google.gson.JsonNull
import com.google.gson.JsonObject import com.google.gson.JsonObject
import com.google.gson.JsonSerializationContext import com.google.gson.JsonSerializationContext
import com.google.gson.JsonSyntaxException import com.google.gson.JsonSyntaxException
@ -31,7 +32,7 @@ class Codec2Serializer<T : Any>(val codec: Codec<T>, val embed: Boolean = false)
if (embed) { if (embed) {
return codec.fromJsonStrict(data) return codec.fromJsonStrict(data)
} else { } else {
return codec.fromJsonStrict(data["value"] ?: throw JsonSyntaxException("Missing 'value' element")) return codec.fromJsonStrict(data["value"] ?: JsonNull.INSTANCE)
} }
} }
} }

View File

@ -17,7 +17,16 @@ val DoublesCodec: Codec<MinMaxBounds.Doubles> = RecordCodecBuilder.create {
it.group( it.group(
Codec.DOUBLE.optionalFieldOf("min").forGetter { Optional.ofNullable(it.min) }, Codec.DOUBLE.optionalFieldOf("min").forGetter { Optional.ofNullable(it.min) },
Codec.DOUBLE.optionalFieldOf("max").forGetter { Optional.ofNullable(it.max) }, Codec.DOUBLE.optionalFieldOf("max").forGetter { Optional.ofNullable(it.max) },
).apply(it) { a, b -> MinMaxBounds.Doubles.between(a.orElse(null), b.orElse(null)) } ).apply(it) { min, max ->
if (min.isEmpty && max.isEmpty)
MinMaxBounds.Doubles.ANY
else if (min.isEmpty)
MinMaxBounds.Doubles.atMost(max.get())
else if (max.isEmpty)
MinMaxBounds.Doubles.atLeast(min.get())
else
MinMaxBounds.Doubles.between(min.get(), max.get())
}
} }
private val dealtReceived: Codec<Pair<MinMaxBounds.Doubles, MinMaxBounds.Doubles>> = RecordCodecBuilder.create { private val dealtReceived: Codec<Pair<MinMaxBounds.Doubles, MinMaxBounds.Doubles>> = RecordCodecBuilder.create {

View File

@ -1,6 +1,5 @@
package ru.dbotthepony.mc.otm.data package ru.dbotthepony.mc.otm.data
import com.google.gson.JsonNull
import com.google.gson.JsonObject import com.google.gson.JsonObject
import com.mojang.datafixers.util.Pair import com.mojang.datafixers.util.Pair
import com.mojang.serialization.Codec import com.mojang.serialization.Codec
@ -9,10 +8,8 @@ import com.mojang.serialization.DynamicOps
import com.mojang.serialization.JsonOps import com.mojang.serialization.JsonOps
import io.netty.buffer.UnpooledByteBufAllocator import io.netty.buffer.UnpooledByteBufAllocator
import net.minecraft.network.FriendlyByteBuf import net.minecraft.network.FriendlyByteBuf
import net.minecraft.resources.ResourceLocation
import net.minecraft.world.item.crafting.Recipe import net.minecraft.world.item.crafting.Recipe
import net.minecraft.world.item.crafting.RecipeSerializer import net.minecraft.world.item.crafting.RecipeSerializer
import ru.dbotthepony.mc.otm.core.set
import java.nio.ByteBuffer import java.nio.ByteBuffer
data class RecipePair<R : Recipe<*>>(val recipe: R, val data: JsonObject) data class RecipePair<R : Recipe<*>>(val recipe: R, val data: JsonObject)
@ -31,7 +28,7 @@ fun <R : Recipe<*>> RecipeSerializer<R>.codec(context: Codec2RecipeSerializer<*>
array.position(0) array.position(0)
return DataResult.success(ops.createByteList(array)) return DataResult.success(ops.createByteList(array))
} else { } else {
return DataResult.success(JsonOps.INSTANCE.convertTo(ops, JsonObject().also { it["id"] = input.recipe.id.toString(); it["recipe"] = input.data })) return DataResult.success(JsonOps.INSTANCE.convertTo(ops, input.data))
} }
} }
@ -47,7 +44,7 @@ fun <R : Recipe<*>> RecipeSerializer<R>.codec(context: Codec2RecipeSerializer<*>
} }
} else { } else {
val getJson = ops.convertTo(JsonOps.INSTANCE, input) as JsonObject val getJson = ops.convertTo(JsonOps.INSTANCE, input) as JsonObject
return DataResult.success(Pair(RecipePair(fromJson(ResourceLocation(getJson["id"].asString), getJson["recipe"] as JsonObject), getJson["recipe"] as JsonObject), ops.empty())) return DataResult.success(Pair(RecipePair(fromJson(context.id, getJson), getJson), ops.empty()))
} }
} }
} }