11package dev.slne.surf.surfapi.gradle.generators.pluginfiles
22
33import dev.slne.surf.surfapi.gradle.platform.invalidPluginFile
4- import kotlinx.serialization.KSerializer
5- import kotlinx.serialization.SerialName
6- import kotlinx.serialization.Serializable
7- import kotlinx.serialization.builtins.ListSerializer
8- import kotlinx.serialization.builtins.MapSerializer
9- import kotlinx.serialization.builtins.serializer
10- import kotlinx.serialization.descriptors.SerialDescriptor
11- import kotlinx.serialization.descriptors.buildClassSerialDescriptor
12- import kotlinx.serialization.descriptors.element
13- import kotlinx.serialization.encoding.Decoder
14- import kotlinx.serialization.encoding.Encoder
15- import kotlinx.serialization.encoding.encodeStructure
16- import org.gradle.api.Project
4+ import org.gradle.api.provider.ListProperty
5+ import org.gradle.api.provider.MapProperty
6+ import org.gradle.api.provider.Property
177import org.gradle.api.tasks.Input
18- import org.gradle.api.tasks.Optional
8+ import javax.inject.Inject
199
20- @Serializable(with = HytalePluginFileSerializer ::class )
21- class HytalePluginFile (project : Project ) : CommonPluginFile() {
22- @Input
23- @SerialName(" Group" )
24- var group: String = " HYS"
10+ abstract class HytalePluginFile @Inject constructor() : CommonPluginFile() {
11+ @get:Input
12+ abstract val group: Property <String >
2513
26- @Input
27- @SerialName(" Id" )
28- var id: String? = null
14+ @get:Input
15+ abstract val id: Property <String >
2916
30- @Input
31- @SerialName(" Name" )
32- var name: String? = null
17+ @get:Input
18+ abstract val name: Property <String >
3319
34- @Input
35- @SerialName(" Version" )
36- var version: String? = null
20+ @get:Input
21+ abstract val version: Property <String >
3722
38- @Input
39- @SerialName(" Description" )
40- @Optional
41- var description: String = " "
23+ @get:Input
24+ abstract val description: Property <String >
4225
43- @Input
44- @SerialName(" Authors" )
45- var authors: List <Author > = mutableListOf ()
26+ @get:Input
27+ abstract val authors: ListProperty <String >
4628
47- @Input
48- @SerialName(" Website" )
49- @Optional
50- var website: String = " "
29+ @get:Input
30+ abstract val website: Property <String >
5131
52- @Input
53- @SerialName(" ServerVersion" )
54- var serverVersion: String = " *"
32+ @get:Input
33+ abstract val serverVersion: Property <String >
5534
56- @Input
57- @SerialName(" DisabledByDefault" )
58- var disabledByDefault: Boolean = false
35+ @get:Input
36+ abstract val disabledByDefault: Property <Boolean >
5937
60- @Input
61- @SerialName(" Main" )
62- var main: String? = null
38+ @get:Input
39+ abstract val main: Property <String >
6340
64- @Input
65- @SerialName(" IncludesAssetPack" )
66- var includesAssetPack: Boolean = false
41+ @get:Input
42+ abstract val includesAssetPack: Property <Boolean >
6743
68- @Input
69- @SerialName(" Dependencies" )
70- val dependencies: MutableMap <String , String > = mutableMapOf (" HYS:surf-api-hytale-server" to " *" )
44+ @get:Input
45+ abstract val dependencies: MapProperty <String , String >
7146
72- @Input
73- @SerialName(" OptionalDependencies" )
74- val optionalDependencies: MutableMap <String , String > = mutableMapOf ()
75-
76- @Serializable
77- data class Author (@SerialName(" Name" ) @Input val name : String )
47+ @get:Input
48+ abstract val optionalDependencies: MapProperty <String , String >
7849
7950 override fun isApplied (): Boolean {
80- return name != null && main != null
81- }
82-
83- override fun setDefaults (project : Project ) {
84- id = project.name
85- name = project.name
86- version = project.version.toString()
87- description = project.description ? : " "
88- website = project.findProperty(" url" ) as String? ? : " "
51+ return main.isPresent
8952 }
9053
9154 override fun validate () {
92- val id = name ? : invalidPluginFile(" Plugin name not set" )
55+ if ( name.orNull.isNullOrBlank()) invalidPluginFile(" Plugin name not set" )
9356
94- if (version.isNullOrBlank()) invalidPluginFile(" Plugin version not set" )
95- if (main.isNullOrBlank()) invalidPluginFile(" Main class not set" )
57+ if (version.orNull. isNullOrBlank()) invalidPluginFile(" Plugin version not set" )
58+ if (main.orNull. isNullOrBlank()) invalidPluginFile(" Main class not set" )
9659
97- for (( dependency, version) in optionalDependencies) {
60+ optionalDependencies.orNull?.forEach { ( dependency, version) ->
9861 if (dependency.isBlank()) invalidPluginFile(" Dependency id not set" )
9962 if (version.isBlank()) invalidPluginFile(" Dependency '$dependency ' version not set" )
10063 }
10164 }
102- }
103-
104- object HytalePluginFileSerializer : KSerializer<HytalePluginFile> {
105- override val descriptor: SerialDescriptor = buildClassSerialDescriptor(" HytalePluginFile" ) {
106- element<String >(" Group" )
107- element<String >(" Name" )
108- element<String >(" Version" )
109- element<String >(" Description" )
110- element<List <HytalePluginFile .Author >>(" Authors" )
111- element<String >(" Website" )
112- element<String >(" ServerVersion" )
113- element<Boolean >(" DisabledByDefault" )
114- element<String >(" Main" )
115- element<Boolean >(" IncludesAssetPack" )
116- element<Map <String , String >>(" Dependencies" )
117- element<Map <String , String >>(" PluginDependencies" )
118- }
119-
120- override fun serialize (encoder : Encoder , value : HytalePluginFile ) {
121- encoder.encodeStructure(descriptor) {
122- encodeStringElement(descriptor, 0 , value.group ? : " " )
123- encodeStringElement(descriptor, 1 , value.name ? : " " )
124- encodeStringElement(descriptor, 2 , value.version ? : " " )
125- encodeStringElement(descriptor, 3 , value.description ? : " " )
126- encodeSerializableElement(
127- descriptor,
128- 4 ,
129- ListSerializer (HytalePluginFile .Author .serializer()),
130- value.authors
131- )
132- encodeStringElement(descriptor, 5 , value.website ? : " " )
133- encodeStringElement(descriptor, 6 , value.serverVersion ? : " " )
134- encodeBooleanElement(descriptor, 7 , value.disabledByDefault)
135- encodeStringElement(descriptor, 8 , value.main ? : " " )
136- encodeBooleanElement(descriptor, 9 , value.includesAssetPack)
137- encodeSerializableElement(
138- descriptor,
139- 10 ,
140- MapSerializer (String .serializer(), String .serializer()),
141- value.dependencies
142- )
143- encodeSerializableElement(
144- descriptor,
145- 11 ,
146- MapSerializer (String .serializer(), String .serializer()),
147- value.optionalDependencies
148- )
149- }
150- }
151-
152- override fun deserialize (decoder : Decoder ): HytalePluginFile {
153- throw NotImplementedError (" Deserialization is not supported for HytalePluginFile" )
154- }
15565}
0 commit comments