summary refs log tree commit diff stats
path: root/src/main/kotlin/space/autistic/radio/antenna
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/space/autistic/radio/antenna')
-rw-r--r--src/main/kotlin/space/autistic/radio/antenna/Antenna.kt9
-rw-r--r--src/main/kotlin/space/autistic/radio/antenna/AntennaSerializer.kt8
-rw-r--r--src/main/kotlin/space/autistic/radio/antenna/ConstAntenna.kt7
-rw-r--r--src/main/kotlin/space/autistic/radio/antenna/PirateRadioAntennaSerializers.kt18
-rw-r--r--src/main/kotlin/space/autistic/radio/antenna/WasmAntenna.kt7
5 files changed, 49 insertions, 0 deletions
diff --git a/src/main/kotlin/space/autistic/radio/antenna/Antenna.kt b/src/main/kotlin/space/autistic/radio/antenna/Antenna.kt
new file mode 100644
index 0000000..c403081
--- /dev/null
+++ b/src/main/kotlin/space/autistic/radio/antenna/Antenna.kt
@@ -0,0 +1,9 @@
+package space.autistic.radio.antenna
+
+import space.autistic.radio.PirateRadioRegistries
+
+data class Antenna<T>(val type: AntennaSerializer<T>, val data: T) {
+    companion object {
+        val CODEC = PirateRadioRegistries.ANTENNA_SERIALIZER.codec.dispatch({ it.type }, AntennaSerializer<*>::codec)
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/space/autistic/radio/antenna/AntennaSerializer.kt b/src/main/kotlin/space/autistic/radio/antenna/AntennaSerializer.kt
new file mode 100644
index 0000000..11d0234
--- /dev/null
+++ b/src/main/kotlin/space/autistic/radio/antenna/AntennaSerializer.kt
@@ -0,0 +1,8 @@
+package space.autistic.radio.antenna
+
+import com.mojang.serialization.MapCodec
+
+interface AntennaSerializer<T> {
+    val codec: MapCodec<Antenna<T>>
+        get
+}
diff --git a/src/main/kotlin/space/autistic/radio/antenna/ConstAntenna.kt b/src/main/kotlin/space/autistic/radio/antenna/ConstAntenna.kt
new file mode 100644
index 0000000..401972c
--- /dev/null
+++ b/src/main/kotlin/space/autistic/radio/antenna/ConstAntenna.kt
@@ -0,0 +1,7 @@
+package space.autistic.radio.antenna
+
+import com.mojang.serialization.Codec
+
+object ConstAntenna : AntennaSerializer<Float> {
+    override val codec = Codec.FLOAT.fieldOf("level").xmap({ Antenna(this, it) }, { it.data })
+}
\ No newline at end of file
diff --git a/src/main/kotlin/space/autistic/radio/antenna/PirateRadioAntennaSerializers.kt b/src/main/kotlin/space/autistic/radio/antenna/PirateRadioAntennaSerializers.kt
new file mode 100644
index 0000000..19cfff8
--- /dev/null
+++ b/src/main/kotlin/space/autistic/radio/antenna/PirateRadioAntennaSerializers.kt
@@ -0,0 +1,18 @@
+package space.autistic.radio.antenna
+
+import net.minecraft.registry.Registry
+import net.minecraft.util.Identifier
+import space.autistic.radio.PirateRadio
+import space.autistic.radio.PirateRadioRegistries
+
+object PirateRadioAntennaSerializers {
+    val CONST = register(Identifier.of(PirateRadio.MOD_ID, "const"), ConstAntenna)
+    val WASM = register(Identifier.of(PirateRadio.MOD_ID, "wasm"), WasmAntenna)
+
+    private fun <T> register(id: Identifier, antennaSerializer: AntennaSerializer<T>): AntennaSerializer<T> {
+        return Registry.register(PirateRadioRegistries.ANTENNA_SERIALIZER, id, antennaSerializer)
+    }
+
+    fun initialize() {
+    }
+}
\ No newline at end of file
diff --git a/src/main/kotlin/space/autistic/radio/antenna/WasmAntenna.kt b/src/main/kotlin/space/autistic/radio/antenna/WasmAntenna.kt
new file mode 100644
index 0000000..32c96bb
--- /dev/null
+++ b/src/main/kotlin/space/autistic/radio/antenna/WasmAntenna.kt
@@ -0,0 +1,7 @@
+package space.autistic.radio.antenna
+
+import net.minecraft.util.Identifier
+
+object WasmAntenna : AntennaSerializer<Identifier> {
+    override val codec = Identifier.CODEC.fieldOf("model").xmap({ Antenna(this, it) }, { it.data })
+}
\ No newline at end of file