write/read json -> write/read binary json
This commit is contained in:
parent
48fe9ada79
commit
662801df7d
@ -11,10 +11,8 @@ import net.minecraft.resources.ResourceLocation
|
|||||||
import net.minecraft.server.packs.resources.ResourceManager
|
import net.minecraft.server.packs.resources.ResourceManager
|
||||||
import net.minecraft.server.packs.resources.SimpleJsonResourceReloadListener
|
import net.minecraft.server.packs.resources.SimpleJsonResourceReloadListener
|
||||||
import net.minecraft.util.profiling.ProfilerFiller
|
import net.minecraft.util.profiling.ProfilerFiller
|
||||||
import net.minecraftforge.common.MinecraftForge
|
|
||||||
import net.minecraftforge.event.AddReloadListenerEvent
|
import net.minecraftforge.event.AddReloadListenerEvent
|
||||||
import net.minecraftforge.event.OnDatapackSyncEvent
|
import net.minecraftforge.event.OnDatapackSyncEvent
|
||||||
import net.minecraftforge.eventbus.api.Event
|
|
||||||
import net.minecraftforge.network.NetworkEvent
|
import net.minecraftforge.network.NetworkEvent
|
||||||
import net.minecraftforge.network.PacketDistributor
|
import net.minecraftforge.network.PacketDistributor
|
||||||
import org.apache.logging.log4j.LogManager
|
import org.apache.logging.log4j.LogManager
|
||||||
@ -26,10 +24,7 @@ import ru.dbotthepony.mc.otm.client.minecraft
|
|||||||
import ru.dbotthepony.mc.otm.core.fromJsonStrict
|
import ru.dbotthepony.mc.otm.core.fromJsonStrict
|
||||||
import ru.dbotthepony.mc.otm.core.fromNetwork
|
import ru.dbotthepony.mc.otm.core.fromNetwork
|
||||||
import ru.dbotthepony.mc.otm.core.set
|
import ru.dbotthepony.mc.otm.core.set
|
||||||
import ru.dbotthepony.mc.otm.core.toJsonStrict
|
|
||||||
import ru.dbotthepony.mc.otm.core.toNetwork
|
import ru.dbotthepony.mc.otm.core.toNetwork
|
||||||
import ru.dbotthepony.mc.otm.core.util.readJson
|
|
||||||
import ru.dbotthepony.mc.otm.matter.MatterManager
|
|
||||||
import ru.dbotthepony.mc.otm.network.MatteryPacket
|
import ru.dbotthepony.mc.otm.network.MatteryPacket
|
||||||
import ru.dbotthepony.mc.otm.network.RegistryNetworkChannel
|
import ru.dbotthepony.mc.otm.network.RegistryNetworkChannel
|
||||||
import ru.dbotthepony.mc.otm.network.enqueueWork
|
import ru.dbotthepony.mc.otm.network.enqueueWork
|
||||||
|
@ -4,7 +4,6 @@ import com.google.gson.JsonElement
|
|||||||
import com.google.gson.JsonSyntaxException
|
import com.google.gson.JsonSyntaxException
|
||||||
import com.mojang.serialization.Codec
|
import com.mojang.serialization.Codec
|
||||||
import com.mojang.serialization.JsonOps
|
import com.mojang.serialization.JsonOps
|
||||||
import net.minecraft.core.BlockPos
|
|
||||||
import net.minecraft.core.Holder
|
import net.minecraft.core.Holder
|
||||||
import net.minecraft.core.RegistryAccess
|
import net.minecraft.core.RegistryAccess
|
||||||
import net.minecraft.core.registries.Registries
|
import net.minecraft.core.registries.Registries
|
||||||
@ -23,11 +22,10 @@ import net.minecraft.world.damagesource.DamageType
|
|||||||
import net.minecraft.world.item.Item
|
import net.minecraft.world.item.Item
|
||||||
import net.minecraft.world.level.block.Block
|
import net.minecraft.world.level.block.Block
|
||||||
import net.minecraft.world.level.material.Fluid
|
import net.minecraft.world.level.material.Fluid
|
||||||
import net.minecraft.world.phys.Vec3
|
|
||||||
import net.minecraftforge.registries.ForgeRegistries
|
import net.minecraftforge.registries.ForgeRegistries
|
||||||
import net.minecraftforge.registries.IForgeRegistry
|
import net.minecraftforge.registries.IForgeRegistry
|
||||||
import ru.dbotthepony.mc.otm.core.util.readJson
|
import ru.dbotthepony.mc.otm.core.util.readBinaryJson
|
||||||
import ru.dbotthepony.mc.otm.core.util.writeJson
|
import ru.dbotthepony.mc.otm.core.util.writeBinaryJson
|
||||||
|
|
||||||
// because doing it inline is ugly
|
// because doing it inline is ugly
|
||||||
fun <V : Any> Codec<V>.fromJson(value: JsonElement): V? {
|
fun <V : Any> Codec<V>.fromJson(value: JsonElement): V? {
|
||||||
@ -63,11 +61,11 @@ fun <V : Any> Codec<V>.toNbtStrict(value: V, prefix: Tag = NbtOps.INSTANCE.empty
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun <V : Any> Codec<V>.toNetwork(buff: FriendlyByteBuf, value: V) {
|
fun <V : Any> Codec<V>.toNetwork(buff: FriendlyByteBuf, value: V) {
|
||||||
buff.writeJson(toJsonStrict(value))
|
buff.writeBinaryJson(toJsonStrict(value))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <V : Any> Codec<V>.fromNetwork(buff: FriendlyByteBuf): V {
|
fun <V : Any> Codec<V>.fromNetwork(buff: FriendlyByteBuf): V {
|
||||||
return fromJsonStrict(buff.readJson())
|
return fromJsonStrict(buff.readBinaryJson())
|
||||||
}
|
}
|
||||||
|
|
||||||
// 1.19 being 1.19
|
// 1.19 being 1.19
|
||||||
|
@ -20,8 +20,8 @@ import net.minecraft.nbt.ShortTag
|
|||||||
import net.minecraft.nbt.StringTag
|
import net.minecraft.nbt.StringTag
|
||||||
import net.minecraft.nbt.Tag
|
import net.minecraft.nbt.Tag
|
||||||
import net.minecraft.world.item.ItemStack
|
import net.minecraft.world.item.ItemStack
|
||||||
import ru.dbotthepony.mc.otm.core.util.readJson
|
import ru.dbotthepony.mc.otm.core.util.readBinaryJson
|
||||||
import ru.dbotthepony.mc.otm.core.util.writeJson
|
import ru.dbotthepony.mc.otm.core.util.writeBinaryJson
|
||||||
import java.util.UUID
|
import java.util.UUID
|
||||||
|
|
||||||
operator fun CompoundTag.set(index: String, value: Tag) = put(index, value)
|
operator fun CompoundTag.set(index: String, value: Tag) = put(index, value)
|
||||||
@ -108,7 +108,7 @@ fun CompoundTag.getUUIDSafe(key: String): UUID? {
|
|||||||
|
|
||||||
fun CompoundTag.putJson(key: String, json: JsonElement) {
|
fun CompoundTag.putJson(key: String, json: JsonElement) {
|
||||||
val bytes = FastByteArrayOutputStream()
|
val bytes = FastByteArrayOutputStream()
|
||||||
bytes.writeJson(json)
|
bytes.writeBinaryJson(json)
|
||||||
putByteArray(key, bytes.array.copyOfRange(0, bytes.length))
|
putByteArray(key, bytes.array.copyOfRange(0, bytes.length))
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,7 +118,7 @@ fun CompoundTag.getJson(key: String, sizeLimit: NbtAccounter = NbtAccounter.UNLI
|
|||||||
if (bytes.isEmpty())
|
if (bytes.isEmpty())
|
||||||
return null
|
return null
|
||||||
|
|
||||||
return FastByteArrayInputStream(bytes).readJson(sizeLimit)
|
return FastByteArrayInputStream(bytes).readBinaryJson(sizeLimit)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun CompoundTag.getBoolean(index: String, orElse: Boolean): Boolean {
|
fun CompoundTag.getBoolean(index: String, orElse: Boolean): Boolean {
|
||||||
|
@ -24,7 +24,6 @@ import net.minecraftforge.registries.ForgeRegistry
|
|||||||
import java.io.*
|
import java.io.*
|
||||||
import java.math.BigDecimal
|
import java.math.BigDecimal
|
||||||
import java.math.BigInteger
|
import java.math.BigInteger
|
||||||
import kotlin.math.absoluteValue
|
|
||||||
|
|
||||||
// But seriously, Mojang, why would you need to derive from ByteBuf directly, when you can implement
|
// But seriously, Mojang, why would you need to derive from ByteBuf directly, when you can implement
|
||||||
// your own InputStream and OutputStream, since ByteBuf is meant to be operated on most time like a stream anyway?
|
// your own InputStream and OutputStream, since ByteBuf is meant to be operated on most time like a stream anyway?
|
||||||
@ -154,21 +153,21 @@ private const val TYPE_OBJECT = 0x07
|
|||||||
*
|
*
|
||||||
* just copy pasted this code from my another project because i was lazy
|
* just copy pasted this code from my another project because i was lazy
|
||||||
*/
|
*/
|
||||||
fun OutputStream.writeJson(element: JsonElement) {
|
fun OutputStream.writeBinaryJson(element: JsonElement) {
|
||||||
if (element is JsonObject) {
|
if (element is JsonObject) {
|
||||||
write(TYPE_OBJECT)
|
write(TYPE_OBJECT)
|
||||||
writeVarIntLE(element.size())
|
writeVarIntLE(element.size())
|
||||||
|
|
||||||
for ((k, v) in element.entrySet()) {
|
for ((k, v) in element.entrySet()) {
|
||||||
writeBinaryString(k)
|
writeBinaryString(k)
|
||||||
writeJson(v)
|
writeBinaryJson(v)
|
||||||
}
|
}
|
||||||
} else if (element is JsonArray) {
|
} else if (element is JsonArray) {
|
||||||
write(TYPE_ARRAY)
|
write(TYPE_ARRAY)
|
||||||
writeVarIntLE(element.size())
|
writeVarIntLE(element.size())
|
||||||
|
|
||||||
for (v in element) {
|
for (v in element) {
|
||||||
writeJson(v)
|
writeBinaryJson(v)
|
||||||
}
|
}
|
||||||
} else if (element is JsonPrimitive) {
|
} else if (element is JsonPrimitive) {
|
||||||
if (element.isNumber) {
|
if (element.isNumber) {
|
||||||
@ -204,7 +203,7 @@ fun OutputStream.writeJson(element: JsonElement) {
|
|||||||
*
|
*
|
||||||
* just copy pasted this code from my another project because i was lazy
|
* just copy pasted this code from my another project because i was lazy
|
||||||
*/
|
*/
|
||||||
fun InputStream.readJson(sizeLimit: NbtAccounter = NbtAccounter(1L shl 18 /* 256 KiB */)): JsonElement {
|
fun InputStream.readBinaryJson(sizeLimit: NbtAccounter = NbtAccounter(1L shl 18 /* 256 KiB */)): JsonElement {
|
||||||
sizeLimit.accountBytes(1L)
|
sizeLimit.accountBytes(1L)
|
||||||
|
|
||||||
return when (val id = read()) {
|
return when (val id = read()) {
|
||||||
@ -226,7 +225,7 @@ fun InputStream.readJson(sizeLimit: NbtAccounter = NbtAccounter(1L shl 18 /* 256
|
|||||||
if (values < 0) throw JsonSyntaxException("Tried to read json array with $values elements in it")
|
if (values < 0) throw JsonSyntaxException("Tried to read json array with $values elements in it")
|
||||||
|
|
||||||
val build = JsonArray(values)
|
val build = JsonArray(values)
|
||||||
for (i in 0 until values) build.add(readJson(sizeLimit))
|
for (i in 0 until values) build.add(readBinaryJson(sizeLimit))
|
||||||
return build
|
return build
|
||||||
}
|
}
|
||||||
TYPE_OBJECT -> {
|
TYPE_OBJECT -> {
|
||||||
@ -246,7 +245,7 @@ fun InputStream.readJson(sizeLimit: NbtAccounter = NbtAccounter(1L shl 18 /* 256
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
build.add(key, readJson(sizeLimit))
|
build.add(key, readBinaryJson(sizeLimit))
|
||||||
} catch(err: Throwable) {
|
} catch(err: Throwable) {
|
||||||
throw JsonSyntaxException("Reading json object at $i with name $key", err)
|
throw JsonSyntaxException("Reading json object at $i with name $key", err)
|
||||||
}
|
}
|
||||||
@ -259,27 +258,27 @@ fun InputStream.readJson(sizeLimit: NbtAccounter = NbtAccounter(1L shl 18 /* 256
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun InputStream.readBinaryComponent(): Component? {
|
fun InputStream.readBinaryComponent(): Component? {
|
||||||
return Component.Serializer.fromJson(readJson())
|
return Component.Serializer.fromJson(readBinaryJson())
|
||||||
}
|
}
|
||||||
|
|
||||||
fun OutputStream.writeBinaryComponent(component: Component) {
|
fun OutputStream.writeBinaryComponent(component: Component) {
|
||||||
writeJson(Component.Serializer.toJsonTree(component))
|
writeBinaryJson(Component.Serializer.toJsonTree(component))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FriendlyByteBuf.readJson(sizeLimit: NbtAccounter = NbtAccounter(1L shl 18)): JsonElement {
|
fun FriendlyByteBuf.readBinaryJson(sizeLimit: NbtAccounter = NbtAccounter(1L shl 18)): JsonElement {
|
||||||
return ByteBufInputStream(this).readJson(sizeLimit)
|
return ByteBufInputStream(this).readBinaryJson(sizeLimit)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FriendlyByteBuf.writeJson(value: JsonElement) {
|
fun FriendlyByteBuf.writeBinaryJson(value: JsonElement) {
|
||||||
ByteBufOutputStream(this).writeJson(value)
|
ByteBufOutputStream(this).writeBinaryJson(value)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FriendlyByteBuf.readBinaryComponent(): Component {
|
fun FriendlyByteBuf.readBinaryComponent(): Component {
|
||||||
return Component.Serializer.fromJson(readJson()) ?: throw NullPointerException("Received null component")
|
return Component.Serializer.fromJson(readBinaryJson()) ?: throw NullPointerException("Received null component")
|
||||||
}
|
}
|
||||||
|
|
||||||
fun FriendlyByteBuf.writeBinaryComponent(component: Component) {
|
fun FriendlyByteBuf.writeBinaryComponent(component: Component) {
|
||||||
writeJson(Component.Serializer.toJsonTree(component))
|
writeBinaryJson(Component.Serializer.toJsonTree(component))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun <S : OutputStream, V> S.writeCollection(collection: Collection<V>, writer: S.(V) -> Unit) {
|
fun <S : OutputStream, V> S.writeCollection(collection: Collection<V>, writer: S.(V) -> Unit) {
|
||||||
|
@ -17,15 +17,14 @@ import net.minecraft.world.item.crafting.RecipeType
|
|||||||
import net.minecraft.world.level.Level
|
import net.minecraft.world.level.Level
|
||||||
import org.apache.logging.log4j.LogManager
|
import org.apache.logging.log4j.LogManager
|
||||||
import ru.dbotthepony.mc.otm.OverdriveThatMatters
|
import ru.dbotthepony.mc.otm.OverdriveThatMatters
|
||||||
import ru.dbotthepony.mc.otm.block.entity.tech.PlatePressBlockEntity
|
|
||||||
import ru.dbotthepony.mc.otm.container.get
|
import ru.dbotthepony.mc.otm.container.get
|
||||||
import ru.dbotthepony.mc.otm.core.fromJsonStrict
|
import ru.dbotthepony.mc.otm.core.fromJsonStrict
|
||||||
import ru.dbotthepony.mc.otm.core.isActuallyEmpty
|
import ru.dbotthepony.mc.otm.core.isActuallyEmpty
|
||||||
import ru.dbotthepony.mc.otm.registry.MRecipes
|
import ru.dbotthepony.mc.otm.registry.MRecipes
|
||||||
import ru.dbotthepony.mc.otm.core.registryName
|
import ru.dbotthepony.mc.otm.core.registryName
|
||||||
import ru.dbotthepony.mc.otm.core.toJsonStrict
|
import ru.dbotthepony.mc.otm.core.toJsonStrict
|
||||||
import ru.dbotthepony.mc.otm.core.util.readJson
|
import ru.dbotthepony.mc.otm.core.util.readBinaryJson
|
||||||
import ru.dbotthepony.mc.otm.core.util.writeJson
|
import ru.dbotthepony.mc.otm.core.util.writeBinaryJson
|
||||||
|
|
||||||
class PlatePressRecipe(
|
class PlatePressRecipe(
|
||||||
private val id: ResourceLocation,
|
private val id: ResourceLocation,
|
||||||
@ -122,7 +121,7 @@ class PlatePressRecipe(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun fromNetwork(loc: ResourceLocation, buff: FriendlyByteBuf): PlatePressRecipe {
|
override fun fromNetwork(loc: ResourceLocation, buff: FriendlyByteBuf): PlatePressRecipe {
|
||||||
return PlatePressRecipe(loc, Ingredient.fromNetwork(buff), Ingredient.fromNetwork(buff), buff.readInt(), buff.readInt(), FloatProvider.CODEC.fromJsonStrict(buff.readJson()))
|
return PlatePressRecipe(loc, Ingredient.fromNetwork(buff), Ingredient.fromNetwork(buff), buff.readInt(), buff.readInt(), FloatProvider.CODEC.fromJsonStrict(buff.readBinaryJson()))
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun toNetwork(buff: FriendlyByteBuf, recipe: PlatePressRecipe) {
|
override fun toNetwork(buff: FriendlyByteBuf, recipe: PlatePressRecipe) {
|
||||||
@ -130,7 +129,7 @@ class PlatePressRecipe(
|
|||||||
recipe.output.toNetwork(buff)
|
recipe.output.toNetwork(buff)
|
||||||
buff.writeInt(recipe.count)
|
buff.writeInt(recipe.count)
|
||||||
buff.writeInt(recipe.workTime)
|
buff.writeInt(recipe.workTime)
|
||||||
buff.writeJson(FloatProvider.CODEC.toJsonStrict(recipe.experience))
|
buff.writeBinaryJson(FloatProvider.CODEC.toJsonStrict(recipe.experience))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,7 +14,6 @@ import net.minecraft.world.item.ItemStack
|
|||||||
import net.minecraft.world.item.crafting.CraftingBookCategory
|
import net.minecraft.world.item.crafting.CraftingBookCategory
|
||||||
import net.minecraft.world.item.crafting.CraftingRecipe
|
import net.minecraft.world.item.crafting.CraftingRecipe
|
||||||
import net.minecraft.world.item.crafting.Ingredient
|
import net.minecraft.world.item.crafting.Ingredient
|
||||||
import net.minecraft.world.item.crafting.Recipe
|
|
||||||
import net.minecraft.world.item.crafting.RecipeSerializer
|
import net.minecraft.world.item.crafting.RecipeSerializer
|
||||||
import net.minecraft.world.item.crafting.RecipeType
|
import net.minecraft.world.item.crafting.RecipeType
|
||||||
import net.minecraft.world.item.crafting.ShapedRecipe
|
import net.minecraft.world.item.crafting.ShapedRecipe
|
||||||
@ -25,8 +24,8 @@ import ru.dbotthepony.mc.otm.core.nbt.set
|
|||||||
import ru.dbotthepony.mc.otm.core.registryName
|
import ru.dbotthepony.mc.otm.core.registryName
|
||||||
import ru.dbotthepony.mc.otm.core.set
|
import ru.dbotthepony.mc.otm.core.set
|
||||||
import ru.dbotthepony.mc.otm.core.tagNotNull
|
import ru.dbotthepony.mc.otm.core.tagNotNull
|
||||||
import ru.dbotthepony.mc.otm.core.util.readJson
|
import ru.dbotthepony.mc.otm.core.util.readBinaryJson
|
||||||
import ru.dbotthepony.mc.otm.core.util.writeJson
|
import ru.dbotthepony.mc.otm.core.util.writeBinaryJson
|
||||||
import ru.dbotthepony.mc.otm.core.collect.stream
|
import ru.dbotthepony.mc.otm.core.collect.stream
|
||||||
import java.util.stream.Stream
|
import java.util.stream.Stream
|
||||||
|
|
||||||
@ -241,14 +240,14 @@ class UpgradeRecipe(
|
|||||||
|
|
||||||
return UpgradeRecipe(
|
return UpgradeRecipe(
|
||||||
recipe,
|
recipe,
|
||||||
buff.readCollection({ ArrayList<Op>(it) }, { deserializeOp(it.readJson() as JsonObject) }).stream(),
|
buff.readCollection({ ArrayList<Op>(it) }, { deserializeOp(it.readBinaryJson() as JsonObject) }).stream(),
|
||||||
buff.readResourceLocation()
|
buff.readResourceLocation()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun toNetwork(buff: FriendlyByteBuf, value: UpgradeRecipe) {
|
override fun toNetwork(buff: FriendlyByteBuf, value: UpgradeRecipe) {
|
||||||
ShapedRecipe.Serializer.SHAPED_RECIPE.toNetwork(buff, value.parent)
|
ShapedRecipe.Serializer.SHAPED_RECIPE.toNetwork(buff, value.parent)
|
||||||
buff.writeCollection(value.copyPaths) { it, v -> it.writeJson(v.serialize()) }
|
buff.writeCollection(value.copyPaths) { it, v -> it.writeBinaryJson(v.serialize()) }
|
||||||
buff.writeResourceLocation(value.source)
|
buff.writeResourceLocation(value.source)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user