@@ -20,9 +20,12 @@ import org.spongepowered.configurate.yaml.NodeStyle
20
20
import xyz.jpenilla.resourcefactory.ConfigurateSingleFileResourceFactory
21
21
import xyz.jpenilla.resourcefactory.ResourceFactory
22
22
import xyz.jpenilla.resourcefactory.bukkit.Permission
23
+ import xyz.jpenilla.resourcefactory.util.Pattern
23
24
import xyz.jpenilla.resourcefactory.util.ProjectMetaConventions
25
+ import xyz.jpenilla.resourcefactory.util.getValidating
24
26
import xyz.jpenilla.resourcefactory.util.nullAction
25
27
import xyz.jpenilla.resourcefactory.util.nullIfEmpty
28
+ import xyz.jpenilla.resourcefactory.util.orNullValidating
26
29
import javax.inject.Inject
27
30
28
31
fun Project.paperPluginYml (configure : Action <PaperPluginYml > = nullAction()): PaperPluginYml {
@@ -36,23 +39,30 @@ class PaperPluginYml constructor(
36
39
@Transient
37
40
private val objects : ObjectFactory
38
41
) : ConfigurateSingleFileResourceFactory.ObjectMapper.ValueProvider, ProjectMetaConventions, ResourceFactory.Provider {
42
+ companion object {
43
+ private const val PLUGIN_CLASS_PATTERN : String = " ^(?!io\\ .papermc\\ .)([a-zA-Z_$][a-zA-Z\\ d_$]*\\ .)*[a-zA-Z_$][a-zA-Z\\ d_$]*$"
44
+ }
39
45
40
46
@get:Input
41
47
val apiVersion: Property <String > = objects.property()
42
48
49
+ @Pattern(" ^[A-Za-z0-9_\\ .-]+$" , " Paper plugin name" )
43
50
@get:Input
44
51
val name: Property <String > = objects.property()
45
52
46
53
@get:Input
47
54
val version: Property <String > = objects.property()
48
55
56
+ @Pattern(PLUGIN_CLASS_PATTERN , " Paper plugin main class name" )
49
57
@get:Input
50
58
val main: Property <String > = objects.property()
51
59
60
+ @Pattern(PLUGIN_CLASS_PATTERN , " Paper plugin loader class name" )
52
61
@get:Input
53
62
@get:Optional
54
63
val loader: Property <String > = objects.property()
55
64
65
+ @Pattern(PLUGIN_CLASS_PATTERN , " Paper plugin bootstrapper class name" )
56
66
@get:Input
57
67
@get:Optional
58
68
val bootstrapper: Property <String > = objects.property()
@@ -178,11 +188,11 @@ class PaperPluginYml constructor(
178
188
@ConfigSerializable
179
189
class Serializable (yml : PaperPluginYml ) {
180
190
val apiVersion = yml.apiVersion.get()
181
- val name = yml. name.get ()
191
+ val name = yml:: name.getValidating ()
182
192
val version = yml.version.get()
183
- val main = yml. main.get ()
184
- val loader = yml. loader.orNull
185
- val bootstrapper = yml. bootstrapper.orNull
193
+ val main = yml:: main.getValidating ()
194
+ val loader = yml:: loader.orNullValidating()
195
+ val bootstrapper = yml:: bootstrapper.orNullValidating()
186
196
val description = yml.description.orNull
187
197
val author = yml.author.orNull
188
198
val authors = yml.authors.nullIfEmpty()
0 commit comments