Skip to content

Commit

Permalink
Use xenondevs-configurate fork
Browse files Browse the repository at this point in the history
  • Loading branch information
NichtStudioCode committed Aug 1, 2023
1 parent d19fdcf commit 8a45edd
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 9 deletions.
7 changes: 5 additions & 2 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ format.version = "1.1"

[versions]
cbf = "0.7"
configurate = "4.2.0-SNAPSHOT"
invui = "1.12"
kotlin = "1.9.0"
ktor = "2.3.1"
Expand All @@ -24,7 +25,8 @@ commons-collections = { group = "xyz.xenondevs.commons", name = "commons-collect
commons-gson = { group = "xyz.xenondevs.commons", name = "commons-gson", version.ref = "xenondevs-commons" }
commons-provider = { group = "xyz.xenondevs.commons", name = "commons-provider", version.ref = "xenondevs-commons" }
commons-reflection = { group = "xyz.xenondevs.commons", name = "commons-reflection", version.ref = "xenondevs-commons" }
configurate-kotlin = { group = "org.spongepowered", name = "configurate-extra-kotlin", version = "4.1.2"}
configurate-yaml = { group = "xyz.xenondevs.configurate", name = "configurate-yaml", version.ref = "configurate" }
configurate-extra-kotlin = { group = "xyz.xenondevs.configurate", name = "configurate-extra-kotlin", version.ref = "configurate" }
cosmic-binary-format = { group = "xyz.xenondevs.cbf", name = "cosmic-binary-format", version.ref = "cbf" }
cosmic-binary-format-netty-adapter = { group = "xyz.xenondevs.cbf", name = "cosmic-binary-format-netty-adapter", version.ref = "cbf" }
fuzzywuzzy = { group = "me.xdrop", name = "fuzzywuzzy", version = "1.4.0" }
Expand All @@ -51,11 +53,12 @@ nmsutilities = { group = "xyz.xenondevs", name = "nms-utilities", version = "0.1
paper-api = { group = "io.papermc.paper", name = "paper-api", version.ref = "paper" }
resource-pack-obfuscator = { group = "xyz.xenondevs", name = "resource-pack-obfuscator", version = "0.4.1" }
specialsource = { group = "net.md-5", name = "SpecialSource", version = "1.11.0" }
stringremapper = { group = "xyz.xenondevs.string-remapper", name = "string-remapper-core", version.ref = "stringremapper"}
stringremapper = { group = "xyz.xenondevs.string-remapper", name = "string-remapper-core", version.ref = "stringremapper" }
zip4j = { group = "net.lingala.zip4j", name = "zip4j", version = "2.11.2" }

[bundles]
cbf = ["cosmic-binary-format", "cosmic-binary-format-netty-adapter"]
configurate = ["configurate-yaml", "configurate-extra-kotlin"]
kotlin = ["kotlin-stdlib", "kotlin-reflect"]
ktor = ["ktor-server-core-jvm", "ktor-server-cio-jvm", "ktor-client-core-jvm", "ktor-client-cio-jvm", "ktor-client-content-negotiation", "ktor-serialization-gson-jvm"]
kyori-adventure = ["adventure-api", "adventure-text-serializer-gson", "adventure-text-serializer-plain", "adventure-platform-bukkit"]
Expand Down
1 change: 1 addition & 0 deletions nova/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ dependencies {
paperweight.paperDevBundle(libs.versions.paper)

// api dependencies
prioritizedNovaLoaderApi(libs.bundles.configurate)
novaLoaderApi(variantOf(libs.nmsutilities) { classifier("remapped-mojang") })
novaLoaderApi(libs.bundles.kotlin)
novaLoaderApi(libs.bundles.cbf)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package xyz.xenondevs.nova.data.serialization.configurate

import net.kyori.adventure.text.Component
import net.kyori.adventure.text.minimessage.MiniMessage
import org.spongepowered.configurate.serialize.ScalarSerializer
import java.lang.reflect.Type
import java.util.function.Predicate

internal object ComponentSerializer : ScalarSerializer<Component>(Component::class.java) {

override fun deserialize(type: Type, obj: Any): Component {
val message = obj.toString().replace("§", "")
return MiniMessage.miniMessage().deserialize(message)
}

override fun serialize(item: Component, typeSupported: Predicate<Class<*>>?): Any {
return MiniMessage.miniMessage().serialize(item)
}

}

Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package xyz.xenondevs.nova.data.serialization.configurate

import io.leangen.geantyref.GenericTypeReflector
import org.spongepowered.configurate.serialize.ScalarSerializer
import org.spongepowered.configurate.serialize.SerializationException
import org.spongepowered.configurate.util.EnumLookup
import java.lang.reflect.Type
import java.util.function.Predicate
import kotlin.Enum

/**
* An alternative enum serializer that lists available entries on failure.
*/
internal object EnumSerializer : ScalarSerializer<Enum<*>>(geantyrefTypeTokenOf<Enum<*>>()) {

override fun deserialize(type: Type, obj: Any): Enum<*> {
val entryName = obj.toString()
val enumClass = GenericTypeReflector.erase(type).asSubclass(Enum::class.java)

return EnumLookup.lookupEnum(enumClass, entryName)
?: throw SerializationException("Invalid enum constant: $entryName. Possible values: [${enumClass.enumConstants.joinToString { it.name }}]")
}

override fun serialize(item: Enum<*>, typeSupported: Predicate<Class<*>>): Any {
return item.name
}

}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package xyz.xenondevs.nova.data.serialization.configurate

import io.papermc.paper.configuration.serializer.ComponentSerializer
import io.papermc.paper.configuration.serializer.EnumValueSerializer
import io.leangen.geantyref.TypeToken
import net.minecraft.core.registries.BuiltInRegistries
import org.spongepowered.configurate.serialize.TypeSerializer
import org.spongepowered.configurate.serialize.TypeSerializerCollection
Expand All @@ -10,14 +9,13 @@ import xyz.xenondevs.nova.registry.NovaRegistries
import xyz.xenondevs.nova.util.byNameTypeSerializer

val NOVA_CONFIGURATE_SERIALIZERS: TypeSerializerCollection = TypeSerializerCollection.builder()
// -- Paper Serializers --
.register(ComponentSerializer()) // serializes components using MiniMessage
.register(EnumValueSerializer()) // lists available entries on failure
// -- Nova Serializers --
.register(BarMatcherSerializer)
.register(BarMatcherCombinedAnySerializer)
.register(BarMatcherCombinedAllSerializer)
.register(BlockLimiterSerializer)
.register(ComponentSerializer)
.register(EnumSerializer)
.register(NamespacedKeySerializer)
.register(ResourceLocationSerializer)
.register(ResourcePathSerializer)
Expand All @@ -42,6 +40,10 @@ val NOVA_CONFIGURATE_SERIALIZERS: TypeSerializerCollection = TypeSerializerColle

private inline fun <reified T> TypeSerializerCollection.Builder.register(serializer: TypeSerializer<T>): TypeSerializerCollection.Builder {
val type = javaTypeOf<T>()
register({it == type}, serializer)
register({ it == type }, serializer)
return this
}
}

@Suppress("UNCHECKED_CAST")
internal inline fun <reified T> geantyrefTypeTokenOf(): TypeToken<T> =
TypeToken.get(javaTypeOf<T>()) as TypeToken<T>

0 comments on commit 8a45edd

Please sign in to comment.