Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion surf-api-gradle-plugin/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ plugins {
group = groupId
version = buildString {
append(mcVersion)
append("-1.11.8")
append("-1.12.0")
if (snapshot) append("-SNAPSHOT")
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,8 @@
package dev.slne.surf.surfapi.gradle.generators

import kotlinx.serialization.ExperimentalSerializationApi
import kotlinx.serialization.InternalSerializationApi
import kotlinx.serialization.KSerializer
import kotlinx.serialization.builtins.ListSerializer
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.json.Json
import org.gradle.api.DefaultTask
import org.gradle.api.NamedDomainObjectContainer
import org.gradle.api.file.RegularFileProperty
import org.gradle.api.provider.Property
import org.gradle.api.tasks.CacheableTask
Expand Down Expand Up @@ -48,27 +41,5 @@ abstract class GeneratePluginFile : DefaultTask() {
prettyPrint = true
prettyPrintIndent = " "
}

@OptIn(InternalSerializationApi::class)
class NamedDomainObjectContainerSerializer<T : Any>(
private val dataSerializer: KSerializer<T>,
) : KSerializer<NamedDomainObjectContainer<T>> {
override val descriptor: SerialDescriptor = SerialDescriptor(
"dev.slne.surf.surfapi.gradle.generators.GeneratePluginFile.NamedDomainObjectContainerSerializer",
dataSerializer.descriptor
)

override fun serialize(
encoder: Encoder,
value: NamedDomainObjectContainer<T>,
) {
val values = value.toList()
encoder.encodeSerializableValue(ListSerializer(dataSerializer), values)
}

override fun deserialize(decoder: Decoder): NamedDomainObjectContainer<T> {
throw UnsupportedOperationException("Deserialization is not supported")
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,19 +1,12 @@
package dev.slne.surf.surfapi.gradle.generators.pluginfiles

import kotlinx.serialization.Serializable
import org.gradle.api.Project
import org.gradle.api.tasks.Internal

@Serializable
sealed class CommonPluginFile {

@Internal
internal abstract fun isApplied(): Boolean

internal open fun setDefaults(project: Project) {

}

internal open fun validate() {
}
}
Original file line number Diff line number Diff line change
@@ -1,155 +1,65 @@
package dev.slne.surf.surfapi.gradle.generators.pluginfiles

import dev.slne.surf.surfapi.gradle.platform.invalidPluginFile
import kotlinx.serialization.KSerializer
import kotlinx.serialization.SerialName
import kotlinx.serialization.Serializable
import kotlinx.serialization.builtins.ListSerializer
import kotlinx.serialization.builtins.MapSerializer
import kotlinx.serialization.builtins.serializer
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.descriptors.buildClassSerialDescriptor
import kotlinx.serialization.descriptors.element
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import kotlinx.serialization.encoding.encodeStructure
import org.gradle.api.Project
import org.gradle.api.provider.ListProperty
import org.gradle.api.provider.MapProperty
import org.gradle.api.provider.Property
import org.gradle.api.tasks.Input
import org.gradle.api.tasks.Optional
import javax.inject.Inject

@Serializable(with = HytalePluginFileSerializer::class)
class HytalePluginFile(project: Project) : CommonPluginFile() {
@Input
@SerialName("Group")
var group: String = "HYS"
abstract class HytalePluginFile @Inject constructor() : CommonPluginFile() {
@get:Input
abstract val group: Property<String>

@Input
@SerialName("Id")
var id: String? = null
@get:Input
abstract val id: Property<String>

@Input
@SerialName("Name")
var name: String? = null
@get:Input
abstract val name: Property<String>

@Input
@SerialName("Version")
var version: String? = null
@get:Input
abstract val version: Property<String>

@Input
@SerialName("Description")
@Optional
var description: String = ""
@get:Input
abstract val description: Property<String>

@Input
@SerialName("Authors")
var authors: List<Author> = mutableListOf()
@get:Input
abstract val authors: ListProperty<String>

@Input
@SerialName("Website")
@Optional
var website: String = ""
@get:Input
abstract val website: Property<String>

@Input
@SerialName("ServerVersion")
var serverVersion: String = "*"
@get:Input
abstract val serverVersion: Property<String>

@Input
@SerialName("DisabledByDefault")
var disabledByDefault: Boolean = false
@get:Input
abstract val disabledByDefault: Property<Boolean>

@Input
@SerialName("Main")
var main: String? = null
@get:Input
abstract val main: Property<String>

@Input
@SerialName("IncludesAssetPack")
var includesAssetPack: Boolean = false
@get:Input
abstract val includesAssetPack: Property<Boolean>

@Input
@SerialName("Dependencies")
val dependencies: MutableMap<String, String> = mutableMapOf("HYS:surf-api-hytale-server" to "*")
@get:Input
abstract val dependencies: MapProperty<String, String>

@Input
@SerialName("OptionalDependencies")
val optionalDependencies: MutableMap<String, String> = mutableMapOf()

@Serializable
data class Author(@SerialName("Name") @Input val name: String)
@get:Input
abstract val optionalDependencies: MapProperty<String, String>

override fun isApplied(): Boolean {
return name != null && main != null
}

override fun setDefaults(project: Project) {
id = project.name
name = project.name
version = project.version.toString()
description = project.description ?: ""
website = project.findProperty("url") as String? ?: ""
return main.isPresent
}

override fun validate() {
val id = name ?: invalidPluginFile("Plugin name not set")
if (name.orNull.isNullOrBlank()) invalidPluginFile("Plugin name not set")

if (version.isNullOrBlank()) invalidPluginFile("Plugin version not set")
if (main.isNullOrBlank()) invalidPluginFile("Main class not set")
if (version.orNull.isNullOrBlank()) invalidPluginFile("Plugin version not set")
if (main.orNull.isNullOrBlank()) invalidPluginFile("Main class not set")

for ((dependency, version) in optionalDependencies) {
optionalDependencies.orNull?.forEach { (dependency, version) ->
if (dependency.isBlank()) invalidPluginFile("Dependency id not set")
if (version.isBlank()) invalidPluginFile("Dependency '$dependency' version not set")
}
}
}

object HytalePluginFileSerializer : KSerializer<HytalePluginFile> {
override val descriptor: SerialDescriptor = buildClassSerialDescriptor("HytalePluginFile") {
element<String>("Group")
element<String>("Name")
element<String>("Version")
element<String>("Description")
element<List<HytalePluginFile.Author>>("Authors")
element<String>("Website")
element<String>("ServerVersion")
element<Boolean>("DisabledByDefault")
element<String>("Main")
element<Boolean>("IncludesAssetPack")
element<Map<String, String>>("Dependencies")
element<Map<String, String>>("PluginDependencies")
}

override fun serialize(encoder: Encoder, value: HytalePluginFile) {
encoder.encodeStructure(descriptor) {
encodeStringElement(descriptor, 0, value.group ?: "")
encodeStringElement(descriptor, 1, value.name ?: "")
encodeStringElement(descriptor, 2, value.version ?: "")
encodeStringElement(descriptor, 3, value.description ?: "")
encodeSerializableElement(
descriptor,
4,
ListSerializer(HytalePluginFile.Author.serializer()),
value.authors
)
encodeStringElement(descriptor, 5, value.website ?: "")
encodeStringElement(descriptor, 6, value.serverVersion ?: "")
encodeBooleanElement(descriptor, 7, value.disabledByDefault)
encodeStringElement(descriptor, 8, value.main ?: "")
encodeBooleanElement(descriptor, 9, value.includesAssetPack)
encodeSerializableElement(
descriptor,
10,
MapSerializer(String.serializer(), String.serializer()),
value.dependencies
)
encodeSerializableElement(
descriptor,
11,
MapSerializer(String.serializer(), String.serializer()),
value.optionalDependencies
)
}
}

override fun deserialize(decoder: Decoder): HytalePluginFile {
throw NotImplementedError("Deserialization is not supported for HytalePluginFile")
}
}
Loading