Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Just nice improvements #1

Merged
merged 7 commits into from
Mar 26, 2023
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
20 changes: 14 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ plugins {
dependencies {
// Downloaded from Maven Central when the plugin is loaded
library 'com.google.code.gson:gson:2.8.7' // All platforms
bukkitLibrary 'com.google.code.gson:gson:2.8.7' // Bukkit only
paperLibrary 'com.google.code.gson:gson:2.8.7' // Bukkit only
}

bukkit {
Expand All @@ -189,7 +189,11 @@ bukkit {
// Optional dependency
dependency("Essentials")
]
loadBefore = [loader('BrokenPlugin', bootstrap: true)]
loadBefore {
'BrokenPlugin' {
bootstrap: true
}
}
prefix = 'TEST'
defaultPermission = 'OP' // 'TRUE', 'FALSE', 'OP' or 'NOT_OP'
provides = ['TestPluginOldName', 'TestPlug']
Expand Down Expand Up @@ -250,16 +254,20 @@ bukkit {
apiVersion = "1.13"

// Other possible properties from plugin.yml (optional)
load = BukkitPluginDescription.PluginLoadOrder.STARTUP // or POSTWORLD
load = PaperPluginDescription.PluginLoadOrder.STARTUP // or POSTWORLD
authors = listOf("Notch", "Notch2")
depend = listOf(
// Required dependency
dependency("WorldEdit", required = true, boostrap = true),
// Optional dependency
dependency("Essentials"))
loadBefore = listOf(loader("BrokenPlugin", boostrap = true))
loadBefore {
register("BrokenPlugin") {
bootstrap = true
}
}
prefix = "TEST"
defaultPermission = BukkitPluginDescription.Permission.Default.OP // TRUE, FALSE, OP or NOT_OP
defaultPermission = PaperPluginDescription.Permission.Default.OP // TRUE, FALSE, OP or NOT_OP
provides = listOf("TestPluginOldName", "TestPlug")

commands {
Expand All @@ -281,7 +289,7 @@ bukkit {
}
register("testplugin.test") {
description = "Allows you to run the test command"
default = BukkitPluginDescription.Permission.Default.OP // TRUE, FALSE, OP or NOT_OP
default = PaperPluginDescription.Permission.Default.OP // TRUE, FALSE, OP or NOT_OP
}
}
}
Expand Down
1 change: 1 addition & 0 deletions src/main/kotlin/net/minecrell/pluginyml/PlatformPlugin.kt
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,7 @@ abstract class PlatformPlugin<T : PluginDescription>(private val platformName: S

// Create task
val generateTask = tasks.register<GeneratePluginDescription>("generate${platformName}PluginDescription") {
group = "PluginYML"
fileName.set([email protected])
librariesRootComponent.set(libraries?.incoming?.resolutionResult?.root)
outputDirectory.set(generatedResourcesDirectory)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package net.minecrell.pluginyml.paper

import com.fasterxml.jackson.databind.util.StdConverter
import org.gradle.api.NamedDomainObjectCollection

object PaperNamedDomainObjectCollectionConverter : StdConverter<NamedDomainObjectCollection<Any>, List<Any>>() {
override fun convert(value: NamedDomainObjectCollection<Any>): List<Any> {
return value.toList()
}
}
10 changes: 7 additions & 3 deletions src/main/kotlin/net/minecrell/pluginyml/paper/PaperPlugin.kt
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,10 @@ class PaperPlugin : PlatformPlugin<PaperPluginDescription>("Paper", "paper-plugi
if (!VALID_NAME.matches(name)) throw InvalidPluginDescriptionException("Invalid plugin name: should match $VALID_NAME")

if (description.version.isNullOrEmpty()) throw InvalidPluginDescriptionException("Plugin version is not set")
description.apiVersion ?: throw InvalidPluginDescriptionException("Plugin API version is not set")
description.apiVersion?.let { apiVersion ->
if (apiVersion < "1.19") throw InvalidPluginDescriptionException("Plugin API version must be at least 1.19")
}

val main = description.main ?: throw InvalidPluginDescriptionException("Main class is not defined")
if (main.isEmpty()) throw InvalidPluginDescriptionException("Main class cannot be empty")
Expand All @@ -74,15 +78,15 @@ class PaperPlugin : PlatformPlugin<PaperPluginDescription>("Paper", "paper-plugi
}
}

for (before in description.loadBefore?: emptyList()) {
for (before in description.loadBefore) {
if (before.name.isEmpty()) throw InvalidPluginDescriptionException("Plugin name in loadBefore can not be empty")
}

for (after in description.loadAfter?: emptyList()) {
for (after in description.loadAfter) {
if (after.name.isEmpty()) throw InvalidPluginDescriptionException("Plugin name in loadAfter can not be empty")
}

for (depend in description.dependencies?: emptyList()) {
for (depend in description.dependencies) {
if (depend.name.isEmpty()) throw InvalidPluginDescriptionException("Plugin name in depends can not be empty")
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ package net.minecrell.pluginyml.paper

import com.fasterxml.jackson.annotation.JsonIgnore
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.databind.annotation.JsonSerialize
import groovy.lang.Closure
import net.minecrell.pluginyml.PluginDescription
import org.gradle.api.NamedDomainObjectContainer
Expand Down Expand Up @@ -53,23 +54,23 @@ class PaperPluginDescription(project: Project) : PluginDescription {
@Input @Optional @JsonProperty("default-permission") var defaultPermission: Permission.Default? = null
@Input @Optional var provides: List<String>? = null
@Input @Optional var libraries: List<String>? = null
@Nested @Optional @JsonProperty("dependencies") var dependencies: List<DependencyDefinition>? = null
@Nested @Optional @JsonProperty("load-before") var loadBefore: List<LoadDefinition>? = null
@Nested @Optional @JsonProperty("load-after") var loadAfter: List<LoadDefinition>? = null

@Nested @Optional @JsonProperty("dependencies") @JsonSerialize(converter = PaperNamedDomainObjectCollectionConverter::class)
var dependencies: NamedDomainObjectContainer<DependencyDefinition> = project.container(DependencyDefinition::class.java)
@Nested @Optional @JsonProperty("load-before")
@JsonSerialize(converter = PaperNamedDomainObjectCollectionConverter::class) var loadBefore: NamedDomainObjectContainer<LoadDefinition> = project.container(LoadDefinition::class.java)
@Nested @Optional @JsonProperty("load-after") @JsonSerialize(converter = PaperNamedDomainObjectCollectionConverter::class)
var loadAfter: NamedDomainObjectContainer<LoadDefinition> = project.container(LoadDefinition::class.java)

@Nested val commands: NamedDomainObjectContainer<Command> = project.container(Command::class.java)
@Nested val permissions: NamedDomainObjectContainer<Permission> = project.container(Permission::class.java)

// For Groovy DSL
fun commands(closure: Closure<Unit>) = commands.configure(closure)
fun permissions(closure: Closure<Unit>) = permissions.configure(closure)

fun dependency(name: String, required: Boolean = false, boostrap: Boolean = false): DependencyDefinition {
return DependencyDefinition(name, required, boostrap)
}
fun loader(name: String, boostrap: Boolean = false): LoadDefinition {
return LoadDefinition(name, boostrap)
}
fun dependencies(closure: Closure<Unit>) = dependencies.configure(closure)
fun loadBefore(closure: Closure<Unit>) = loadBefore.configure(closure)
fun loadAfter(closure: Closure<Unit>) = loadAfter.configure(closure)

enum class PluginLoadOrder {
STARTUP,
Expand All @@ -84,10 +85,13 @@ class PaperPluginDescription(project: Project) : PluginDescription {
@Input @Optional var usage: String? = null
}

data class DependencyDefinition(@Input val name: String, @Input val required: Boolean = false, @Input val bootstrap: Boolean = false) {
data class DependencyDefinition(@Input val name: String) {
@Input var required: Boolean = false
@Input var bootstrap: Boolean = false
}

data class LoadDefinition(@Input val name: String, @Input val bootstrap: Boolean = false) {
data class LoadDefinition(@Input val name: String) {
@Input var bootstrap: Boolean = false
}

data class Permission(@Input @JsonIgnore val name: String) {
Expand Down