Release candidate 1.0.0.0

This commit is contained in:
redtea committed 2023-08-29 16:43:56 +03:00
1 parent 51ae06d7cd
commit 339ac366e9
284 files changed
+361 -2784

No files matched your search

@@ -1,3 +0,0 @@
package tech.carcadex.kotlinbukkitkit.commands
open class CommandBase{}
@@ -1,3 +0,0 @@
package tech.carcadex.kotlinbukkitkit.commands.annotations
annotation class Aliases(val aliases: Array<String>)
@@ -1,4 +0,0 @@
package tech.carcadex.kotlinbukkitkit.commands.annotations
@Retention(AnnotationRetention.RUNTIME)
annotation class Default()
@@ -1,4 +0,0 @@
package tech.carcadex.kotlinbukkitkit.commands.annotations
@Retention(AnnotationRetention.RUNTIME)
annotation class Optional()
@@ -0,0 +1,43 @@
package tech.carcadex.kotlinbukkitkit.commands.dsl
import org.bukkit.command.CommandSender
import tech.carcadex.kotlinbukkitkit.commands.service.MessagesService
/**
* Interface for SubCommand and Command
* @author itzRedTea
* @since 1.0.0
*/
interface Command {
/**
* Context of this command
* @author itzRedTea
* @since 1.0.0
*/
val context: CommandContext
/**
* Invokes when command must be executed
* @author itzRedTea
* @since 1.0.0
*/
fun execute(invoker: ExecutorContext)
/**
* Invokes when command must be executed
* @param sender who executes this command
* @param args arguments that sender typed in chat
* (if this is subcommand args did not contains
* name of sub command)
* @author itzRedTea
* @since 1.0.0
*/
fun tabComplete(sender: CommandSender, args: Array<String>): List<String>
fun hasNotPermission(sender: CommandSender): Boolean =
context.permission != "" && !sender.hasPermission(context.permission).also {
if(it) MessagesService.byTag("#no-perm")(sender)
}
}
@@ -0,0 +1,19 @@
package tech.carcadex.kotlinbukkitkit.commands.dsl
/**
* Class that contains command data
* @param name name of command
* @param aliases array of aliases of this command (includes name of command)
* @param usage usage message of command
* @param description description message of command
* @param permission permission that requires to use this command (set empty string if
* command did not requires any permissions)
*
* @author itzRedTea
* @since 1.0.0
*/
class CommandContext(val name: String,
var aliases: Array<String> = arrayOf(name),
var usage: String = "",
var description: String = "",
var permission: String = "")
@@ -0,0 +1,7 @@
package tech.carcadex.kotlinbukkitkit.commands.dsl
import tech.carcadex.kotlinbukkitkit.commands.dsl.Command
interface CommandNode : Command {
fun add(command: Command)
}
@@ -0,0 +1,19 @@
package tech.carcadex.kotlinbukkitkit.commands.dsl
import org.bukkit.command.CommandSender
import tech.carcadex.kotlinbukkitkit.commands.exceptions.ArgumentNotFoundException
import tech.carcadex.kotlinbukkitkit.commands.exceptions.TypeParseException
import tech.carcadex.kotlinbukkitkit.commands.service.MessagesService
class ExecutorContext(var sender: CommandSender, val args: Array<String>) {
fun argument(index: Int): String? = if (args.size <= index) null else args[index]
fun string(index: Int): String = argument(index) ?: throw ArgumentNotFoundException(index)
fun stringOrNull(index: Int): String? = argument(index)
fun integer(index: Int): Int = try {
argument(index)?.toInt()
} catch (e: NumberFormatException) {
MessagesService.byTag("#not-a-number")(sender)
throw TypeParseException()
} ?: throw ArgumentNotFoundException(index)
fun integerOrNull(index: Int): Int? = argument(index)?.toIntOrNull()
}
@@ -0,0 +1,69 @@
package tech.carcadex.kotlinbukkitkit.commands.dsl.builder
import org.bukkit.plugin.Plugin
import tech.carcadex.kotlinbukkitkit.commands.dsl.Command
import tech.carcadex.kotlinbukkitkit.commands.dsl.CommandContext
import tech.carcadex.kotlinbukkitkit.commands.dsl.ExecutorContext
import tech.carcadex.kotlinbukkitkit.commands.dsl.leaf.CommandLeaf
import tech.carcadex.kotlinbukkitkit.commands.dsl.node.CommandNodeImpl
import tech.carcadex.kotlinbukkitkit.commands.exceptions.LeafCommandHasNotExecutorException
import tech.carcadex.kotlinbukkitkit.commands.register.CommandRegister
class CommandBuilder(
val context: CommandContext,
var tabComplete: Collection<String> = emptyList(),
val subs: MutableMap<String, Command> = mutableMapOf(),
var executor: (ExecutorContext.() -> Unit)? = null
) {
var aliases by context::aliases
var usage by context::usage
var description by context::description
var permission by context::permission
}
fun CommandBuilder.subCommand(name: String, permission: String, tabComplete: Collection<String>, invoke: CommandBuilder.() -> Unit) {
subs[name.lowercase()] = createCommand(name, permission, tabComplete, invoke)
}
fun CommandBuilder.executor(executor: ExecutorContext.() -> Unit) {
this.executor = executor
}
private fun createCommand(name: String, permission: String, tabComplete: Collection<String>, invoke: CommandBuilder.() -> Unit): Command {
val builder = CommandBuilder(CommandContext(name))
builder.permission = permission
builder.tabComplete = tabComplete
builder.invoke()
return createCommand(builder)
}
private fun createCommand(builder: CommandBuilder): Command {
return if (builder.subs.isEmpty()) {
if (builder.executor == null) throw LeafCommandHasNotExecutorException(builder.context.name)
CommandLeaf(builder.context, builder.executor!!, builder.tabComplete.toList())
} else {
CommandNodeImpl(builder.context, builder.subs)
}
}
fun Plugin.simpleCommand(name: String, permission: String, tabComplete: Collection<String>, executor: ExecutorContext.() -> Unit) {
val command = createCommand(CommandBuilder(CommandContext(name),
executor = executor).apply {
this.permission = permission
this.tabComplete = tabComplete
})
CommandRegister.register(this, { sender, _, _, args -> command.execute(ExecutorContext(sender, args)); true },
command.context.aliases, command.context.description, command.context.usage, { sender, _, _, args ->
command.tabComplete(sender, args)
}
)
}
fun Plugin.command(name: String, permission: String, tabComplete: Collection<String>, invoke: CommandBuilder.() -> Unit) {
val command = createCommand(name, permission, tabComplete, invoke)
CommandRegister.register(this, { sender, _, _, args -> command.execute(ExecutorContext(sender, args)); true },
command.context.aliases, command.context.description, command.context.usage, { sender, _, _, args ->
command.tabComplete(sender, args)
}
)
}
@@ -0,0 +1,42 @@
package tech.carcadex.kotlinbukkitkit.commands.dsl.builder
import org.bukkit.plugin.Plugin
import tech.carcadex.kotlinbukkitkit.commands.dsl.ExecutorContext
import tech.carcadex.kotlinbukkitkit.commands.register.CommandRegister
fun Plugin.command(name: String, invoke: CommandBuilder.() -> Unit) {
command(name, "", listOf(), invoke)
}
fun Plugin.command(name: String, permission: String, invoke: CommandBuilder.() -> Unit) {
command(name, permission, listOf(), invoke)
}
fun Plugin.command(name: String, tabComplete: Collection<String>, invoke: CommandBuilder.() -> Unit) {
command(name, "", tabComplete, invoke)
}
fun CommandBuilder.subCommand(name: String, invoke: CommandBuilder.() -> Unit) {
subCommand(name, "", listOf(), invoke)
}
fun CommandBuilder.subCommand(name: String, permission: String, invoke: CommandBuilder.() -> Unit) {
subCommand(name, permission, listOf(), invoke)
}
fun CommandBuilder.subCommand(name: String, tabComplete: Collection<String>, invoke: CommandBuilder.() -> Unit) {
subCommand(name, "", tabComplete, invoke)
}
fun Plugin.simpleCommand(name: String, executor: ExecutorContext.() -> Unit) {
simpleCommand(name, "", listOf(), executor)
}
fun Plugin.simpleCommand(name: String, permission: String, executor: ExecutorContext.() -> Unit) {
simpleCommand(name, permission, listOf(), executor)
}
fun Plugin.simpleCommand(name: String, tabComplete: Collection<String>, executor: ExecutorContext.() -> Unit) {
simpleCommand(name, "", tabComplete, executor)
}
@@ -0,0 +1,31 @@
package tech.carcadex.kotlinbukkitkit.commands.dsl.leaf
import org.bukkit.command.CommandSender
import tech.carcadex.kotlinbukkitkit.commands.dsl.Command
import tech.carcadex.kotlinbukkitkit.commands.dsl.CommandContext
import tech.carcadex.kotlinbukkitkit.commands.dsl.ExecutorContext
import tech.carcadex.kotlinbukkitkit.commands.exceptions.ArgumentNotFoundException
import tech.carcadex.kotlinbukkitkit.commands.service.MessagesService
import tech.carcadex.kotlinbukkitkit.commands.service.TabCompleteService
class CommandLeaf(
override val context: CommandContext,
private val executor: (ExecutorContext.() -> Unit),
completeTags: List<String> = emptyList()
) : Command {
private val completer = TabCompleteService.parseTags(completeTags)
override fun execute(context: ExecutorContext) {
if(hasNotPermission(context.sender)) return
try {
executor(context)
} catch (e: ArgumentNotFoundException) {
MessagesService.byTag("#wrong-usage")(context.sender)
}
}
override fun tabComplete(sender: CommandSender, args: Array<String>): List<String> {
if(args.isEmpty() || completer.size < args.size || hasNotPermission(sender)) return emptyList()
return completer[args.size-1](sender)
}
}
@@ -0,0 +1,35 @@
package tech.carcadex.kotlinbukkitkit.commands.dsl.node
import org.bukkit.command.CommandSender
import tech.carcadex.kotlinbukkitkit.commands.dsl.Command
import tech.carcadex.kotlinbukkitkit.commands.dsl.CommandContext
import tech.carcadex.kotlinbukkitkit.commands.dsl.CommandNode
import tech.carcadex.kotlinbukkitkit.commands.dsl.ExecutorContext
import tech.carcadex.kotlinbukkitkit.commands.service.MessagesService
class CommandNodeImpl(
override val context: CommandContext,
private val subs: MutableMap<String, Command> = mutableMapOf()
) : CommandNode {
private var default: Command? = null
override fun execute(context: ExecutorContext) {
if(hasNotPermission(context.sender)) return
if(context.args.isNotEmpty() && context.args[0].lowercase() in subs) subs[context.args[0].lowercase()]?.execute(
ExecutorContext(context.sender, context.args.copyOfRange(1, context.args.size)))
else {
if(default != null) {
default!!.execute(ExecutorContext(context.sender, context.args))
} else MessagesService.byTag("#wrong-usage")(context.sender)
}
}
override fun tabComplete(sender: CommandSender, args: Array<String>): List<String> {
if(hasNotPermission(sender)) return emptyList()
return if(args.isNotEmpty() && args[0].lowercase() in subs) subs[args[0].lowercase()]?.tabComplete(sender, args.copyOfRange(1, args.size)) ?: emptyList()
else subs.keys.toList()
}
override fun add(command: Command) {
subs[command.context.name] = command
}
}
@@ -0,0 +1,4 @@
package tech.carcadex.kotlinbukkitkit.commands.exceptions
class ArgumentNotFoundException(index: Int) : NoSuchElementException("Argument with index $index not found! Args array out of bounds") {
}
@@ -0,0 +1,5 @@
package tech.carcadex.kotlinbukkitkit.commands.exceptions
class LeafCommandHasNotExecutorException(commandName: String)
: IllegalArgumentException("Command $commandName has not subcommands or default executor!") {
}
@@ -0,0 +1,20 @@
package tech.carcadex.kotlinbukkitkit.commands.manager
import org.bukkit.command.CommandSender
import org.bukkit.plugin.Plugin
import kotlin.reflect.KFunction
interface CommandManager {
fun register(commandClass: Any)
fun register(func: KFunction<Unit>)
fun tabComplete(tag: String, func: (CommandSender) -> List<String>)
fun message(tag: String, func: (CommandSender) -> Unit)
companion object {
@JvmStatic
fun get(plugin: Plugin): CommandManager = CommandManagerImpl(plugin)
}
}
fun Plugin.commandManager(): CommandManager = CommandManagerImpl(this)
@@ -4,14 +4,14 @@ import org.bukkit.command.CommandExecutor
import org.bukkit.command.CommandSender import org.bukkit.command.CommandSender
import org.bukkit.command.TabCompleter import org.bukkit.command.TabCompleter
import org.bukkit.plugin.Plugin import org.bukkit.plugin.Plugin
import tech.carcadex.kotlinbukkitkit.commands.CommandParams import tech.carcadex.kotlinbukkitkit.commands.reflection.CommandParams
import tech.carcadex.kotlinbukkitkit.commands.Parser import tech.carcadex.kotlinbukkitkit.commands.reflection.Parser
import tech.carcadex.kotlinbukkitkit.commands.Parser.paramsFromAnnotations import tech.carcadex.kotlinbukkitkit.commands.reflection.Parser.paramsFromAnnotations
import tech.carcadex.kotlinbukkitkit.commands.annotations.Command import tech.carcadex.kotlinbukkitkit.commands.reflection.annotations.Command
import tech.carcadex.kotlinbukkitkit.commands.exceptions.TypeParseException import tech.carcadex.kotlinbukkitkit.commands.exceptions.TypeParseException
import tech.carcadex.kotlinbukkitkit.commands.register.CommandRegister import tech.carcadex.kotlinbukkitkit.commands.register.CommandRegister
import tech.carcadex.kotlinbukkitkit.commands.service.MessagesService import tech.carcadex.kotlinbukkitkit.commands.service.MessagesService
import tech.carcadex.kotlinbukkitkit.commands.service.SubCommandsService import tech.carcadex.kotlinbukkitkit.commands.reflection.service.SubCommandsService
import tech.carcadex.kotlinbukkitkit.commands.service.TabCompleteService import tech.carcadex.kotlinbukkitkit.commands.service.TabCompleteService
import kotlin.reflect.KFunction import kotlin.reflect.KFunction
import kotlin.reflect.full.createType import kotlin.reflect.full.createType
@@ -19,7 +19,9 @@ import kotlin.reflect.full.hasAnnotation
import kotlin.reflect.full.isSubtypeOf import kotlin.reflect.full.isSubtypeOf
import kotlin.reflect.jvm.javaType import kotlin.reflect.jvm.javaType
class ReflectionCommandManager(private val plugin: Plugin) {
class CommandManagerImpl(private val plugin: Plugin) : CommandManager {
private fun register( private fun register(
commandExecutor: CommandExecutor, commandParams: CommandParams, tabCompleter: TabCompleter = commandExecutor: CommandExecutor, commandParams: CommandParams, tabCompleter: TabCompleter =
@@ -35,7 +37,10 @@ class ReflectionCommandManager(private val plugin: Plugin) {
); );
} }
fun register(commandClass: Any) { override fun register(commandClass: Any) {
if(commandClass::class.objectInstance == null) {
throw IllegalArgumentException("commandClass is not a object!")
}
val (name, subs) = SubCommandsService.registerRootCommand(commandClass) val (name, subs) = SubCommandsService.registerRootCommand(commandClass)
val subsNames = mutableListOf<String>() val subsNames = mutableListOf<String>()
subs.forEach { subs.forEach {
@@ -65,7 +70,7 @@ class ReflectionCommandManager(private val plugin: Plugin) {
}) })
} }
fun register(func: KFunction<Unit>) { override fun register(func: KFunction<Unit>) {
if (func.hasAnnotation<Command>()) { if (func.hasAnnotation<Command>()) {
val cmd = paramsFromAnnotations(func) val cmd = paramsFromAnnotations(func)
var argsSize = func.parameters.size var argsSize = func.parameters.size
@@ -108,12 +113,12 @@ class ReflectionCommandManager(private val plugin: Plugin) {
} else throw IllegalArgumentException("It must be a command!") } else throw IllegalArgumentException("It must be a command!")
} }
fun tabComplete(tag: String, func: (CommandSender) -> List<String>) { override fun tabComplete(tag: String, func: (CommandSender) -> List<String>) {
TabCompleteService.register(tag, func) TabCompleteService.register(tag, func)
} }
fun message(tag: String, func: (CommandSender) -> Unit) { override fun message(tag: String, func: (CommandSender) -> Unit) {
MessagesService.register(tag, func) MessagesService.register(tag, func)
} }
} }
@@ -1,4 +1,4 @@
package tech.carcadex.kotlinbukkitkit.commands package tech.carcadex.kotlinbukkitkit.commands.reflection
data class CommandParams( data class CommandParams(
val name: String, val name: String,
@@ -1,11 +1,11 @@
package tech.carcadex.kotlinbukkitkit.commands package tech.carcadex.kotlinbukkitkit.commands.reflection
import org.bukkit.command.CommandSender import org.bukkit.command.CommandSender
import tech.carcadex.kotlinbukkitkit.commands.annotations.*
import tech.carcadex.kotlinbukkitkit.commands.exceptions.TypeParseException import tech.carcadex.kotlinbukkitkit.commands.exceptions.TypeParseException
import tech.carcadex.kotlinbukkitkit.commands.exceptions.UnsupportedTypeException import tech.carcadex.kotlinbukkitkit.commands.exceptions.UnsupportedTypeException
import tech.carcadex.kotlinbukkitkit.commands.reflection.annotations.*
import tech.carcadex.kotlinbukkitkit.commands.service.MessagesService import tech.carcadex.kotlinbukkitkit.commands.service.MessagesService
import tech.carcadex.kotlinbukkitkit.commands.service.TypeService import tech.carcadex.kotlinbukkitkit.commands.reflection.service.TypeService
import kotlin.reflect.KClass import kotlin.reflect.KClass
import kotlin.reflect.KFunction import kotlin.reflect.KFunction
import kotlin.reflect.KParameter import kotlin.reflect.KParameter
@@ -0,0 +1,3 @@
package tech.carcadex.kotlinbukkitkit.commands.reflection.annotations
annotation class Aliases(val aliases: Array<String>)
@@ -1,4 +1,4 @@
package tech.carcadex.kotlinbukkitkit.commands.annotations package tech.carcadex.kotlinbukkitkit.commands.reflection.annotations
@Retention(AnnotationRetention.RUNTIME) @Retention(AnnotationRetention.RUNTIME)
annotation class Command(val name: String) annotation class Command(val name: String)
@@ -0,0 +1,4 @@
package tech.carcadex.kotlinbukkitkit.commands.reflection.annotations
@Retention(AnnotationRetention.RUNTIME)
annotation class Default()
@@ -1,4 +1,4 @@
package tech.carcadex.kotlinbukkitkit.commands.annotations package tech.carcadex.kotlinbukkitkit.commands.reflection.annotations
@Retention(AnnotationRetention.RUNTIME) @Retention(AnnotationRetention.RUNTIME)
annotation class Description(val desc: String) annotation class Description(val desc: String)
@@ -0,0 +1,4 @@
package tech.carcadex.kotlinbukkitkit.commands.reflection.annotations
@Retention(AnnotationRetention.RUNTIME)
annotation class Optional()
@@ -1,4 +1,4 @@
package tech.carcadex.kotlinbukkitkit.commands.annotations package tech.carcadex.kotlinbukkitkit.commands.reflection.annotations
@Retention(AnnotationRetention.RUNTIME) @Retention(AnnotationRetention.RUNTIME)
annotation class Permission(val perm: String) annotation class Permission(val perm: String)
@@ -1,4 +1,4 @@
package tech.carcadex.kotlinbukkitkit.commands.annotations package tech.carcadex.kotlinbukkitkit.commands.reflection.annotations
@Retention(AnnotationRetention.RUNTIME) @Retention(AnnotationRetention.RUNTIME)
annotation class SubCommand(val name: String) annotation class SubCommand(val name: String)
@@ -1,4 +1,4 @@
package tech.carcadex.kotlinbukkitkit.commands.annotations package tech.carcadex.kotlinbukkitkit.commands.reflection.annotations
@Retention(AnnotationRetention.RUNTIME) @Retention(AnnotationRetention.RUNTIME)
annotation class TabComplete(val complete: Array<String>) annotation class TabComplete(val complete: Array<String>)
@@ -1,4 +1,4 @@
package tech.carcadex.kotlinbukkitkit.commands.annotations package tech.carcadex.kotlinbukkitkit.commands.reflection.annotations
@Retention(AnnotationRetention.RUNTIME) @Retention(AnnotationRetention.RUNTIME)
annotation class Usage(val usage: String) annotation class Usage(val usage: String)
@@ -1,21 +1,21 @@
package tech.carcadex.kotlinbukkitkit.commands.service package tech.carcadex.kotlinbukkitkit.commands.reflection.service
import org.bukkit.command.CommandSender import org.bukkit.command.CommandSender
import org.bukkit.command.TabCompleter import org.bukkit.command.TabCompleter
import tech.carcadex.kotlinbukkitkit.commands.CommandParams import tech.carcadex.kotlinbukkitkit.commands.service.MessagesService
import tech.carcadex.kotlinbukkitkit.commands.Parser import tech.carcadex.kotlinbukkitkit.commands.service.TabCompleteService
import tech.carcadex.kotlinbukkitkit.commands.annotations.Command import tech.carcadex.kotlinbukkitkit.commands.reflection.CommandParams
import tech.carcadex.kotlinbukkitkit.commands.annotations.Default import tech.carcadex.kotlinbukkitkit.commands.reflection.Parser
import tech.carcadex.kotlinbukkitkit.commands.reflection.annotations.Command
import tech.carcadex.kotlinbukkitkit.commands.reflection.annotations.Default
import tech.carcadex.kotlinbukkitkit.commands.exceptions.TypeParseException import tech.carcadex.kotlinbukkitkit.commands.exceptions.TypeParseException
import kotlin.reflect.KClass
import kotlin.reflect.KFunction import kotlin.reflect.KFunction
import kotlin.reflect.KParameter
import kotlin.reflect.full.* import kotlin.reflect.full.*
import kotlin.reflect.jvm.javaType import kotlin.reflect.jvm.javaType
object SubCommandsService { object SubCommandsService {
data class SubCommand(val name: String, val context: CommandParams, data class SubCommand(val name: String, val context: CommandParams,
val executor: (sender: CommandSender, args: Array<String>) -> Boolean, val tabCompleter: TabCompleter) val executor: (sender: CommandSender, args: Array<String>) -> Boolean, val tabCompleter: TabCompleter)
private val subs = mutableMapOf<String, List<SubCommand>>() private val subs = mutableMapOf<String, List<SubCommand>>()
@@ -28,7 +28,7 @@ object SubCommandsService {
val res = mutableListOf<SubCommand>() val res = mutableListOf<SubCommand>()
for(func in clazz.functions) { for(func in clazz.functions) {
if(func.hasAnnotation<tech.carcadex.kotlinbukkitkit.commands.annotations.SubCommand>()) { if(func.hasAnnotation<tech.carcadex.kotlinbukkitkit.commands.reflection.annotations.SubCommand>()) {
res.add(parseSubCommand(func, command)) res.add(parseSubCommand(func, command))
} else if(func.hasAnnotation<Default>()) { } else if(func.hasAnnotation<Default>()) {
defaults[name] = parseSubCommand(func, command) defaults[name] = parseSubCommand(func, command)
@@ -42,6 +42,10 @@ object SubCommandsService {
if(rootCommand.lowercase() in subs) { if(rootCommand.lowercase() in subs) {
if(args.isNotEmpty()) for(sub in subs[rootCommand.lowercase()]!!) { if(args.isNotEmpty()) for(sub in subs[rootCommand.lowercase()]!!) {
if(sub.name == args[0]) { if(sub.name == args[0]) {
if (sub.context.perm != null && sub.context.perm != "" && !sender.hasPermission(sub.context.perm)) {
MessagesService.byTag("#no-perm")(sender)
return
}
sub.executor(sender, args.copyOfRange(1, args.size)) sub.executor(sender, args.copyOfRange(1, args.size))
return return
} }
@@ -53,7 +57,7 @@ object SubCommandsService {
private fun parseSubCommand(func: KFunction<*>, rootCommand: Any): SubCommand { private fun parseSubCommand(func: KFunction<*>, rootCommand: Any): SubCommand {
val name = if(func.hasAnnotation<Default>()) "default" else func.findAnnotations(tech.carcadex.kotlinbukkitkit.commands.annotations.SubCommand::class).first().name val name = if(func.hasAnnotation<Default>()) "default" else func.findAnnotations(tech.carcadex.kotlinbukkitkit.commands.reflection.annotations.SubCommand::class).first().name
val context = Parser.paramsFromAnnotations(func) val context = Parser.paramsFromAnnotations(func)
val argsParsers = Parser.parseParam(func.parameters.toTypedArray().copyOfRange(1, func.parameters.size).toList()) val argsParsers = Parser.parseParam(func.parameters.toTypedArray().copyOfRange(1, func.parameters.size).toList())
var argsSize = func.parameters.size var argsSize = func.parameters.size
@@ -1,4 +1,4 @@
package tech.carcadex.kotlinbukkitkit.commands.service package tech.carcadex.kotlinbukkitkit.commands.reflection.service
import org.bukkit.Bukkit import org.bukkit.Bukkit
import org.bukkit.Material import org.bukkit.Material
@@ -9,8 +9,8 @@ class CommandRegister(
aliases: Array<String>, aliases: Array<String>,
desc: String?, desc: String?,
usage: String?, usage: String?,
private val executor: CommandExecutor, var executor: CommandExecutor,
private val tabCompleter: TabCompleter, var tabCompleter: TabCompleter,
private val pl: Plugin private val pl: Plugin
) : Command(aliases[0], desc!!, usage!!, listOf(*aliases)), PluginIdentifiableCommand { ) : Command(aliases[0], desc!!, usage!!, listOf(*aliases)), PluginIdentifiableCommand {
@@ -28,17 +28,15 @@ class CommandRegister(
} }
companion object { companion object {
fun register(plugin: Plugin, executor: CommandExecutor, aliases: Array<String>, desc: String?, usage: String?, tabCompleter: TabCompleter) { fun register(plugin: Plugin, executor: CommandExecutor, aliases: Array<String>,
desc: String?, usage: String?, tabCompleter: TabCompleter): CommandRegister {
if(aliases.size < 1) throw IllegalArgumentException("Could not found name") if(aliases.size < 1) throw IllegalArgumentException("Could not found name")
try { val reg = CommandRegister(aliases, desc, usage, executor, tabCompleter, plugin)
val reg = CommandRegister(aliases, desc, usage, executor, tabCompleter, plugin) val field = Bukkit.getServer().javaClass.getDeclaredField("commandMap")
val field = Bukkit.getServer().javaClass.getDeclaredField("commandMap") field.isAccessible = true
field.isAccessible = true val map = field[Bukkit.getServer()] as CommandMap
val map = field[Bukkit.getServer()] as CommandMap map.register(plugin.description.name, reg)
map.register(plugin.description.name, reg) return reg
} catch (e: Exception) {
e.printStackTrace()
}
} }
} }
@@ -28,6 +28,12 @@ object TabCompleteService {
return createTabCompleter(complete) return createTabCompleter(complete)
} }
fun completer(list: List<String>): TabCompleter {
return createTabCompleter(parseTags(list))
}
fun parseTags(list: List<String>): List<(CommandSender) -> List<String>> = list.map { defaultCompleteParse(it) }
private fun createTabCompleter(completes: List<(CommandSender) -> List<String>>): TabCompleter = private fun createTabCompleter(completes: List<(CommandSender) -> List<String>>): TabCompleter =
TabCompleter { sender, _, _, args -> TabCompleter { sender, _, _, args ->
if(args.size <= completes.size) if(args.size <= completes.size)
-42
View File
@@ -1,42 +0,0 @@
.gradle
build/
!gradle/wrapper/gradle-wrapper.jar
!**/src/main/**/build/
!**/src/test/**/build/
### IntelliJ IDEA ###
.idea/modules.xml
.idea/jarRepositories.xml
.idea/compiler.xml
.idea/libraries/
*.iws
*.iml
*.ipr
out/
!**/src/main/**/out/
!**/src/test/**/out/
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
bin/
!**/src/main/**/bin/
!**/src/test/**/bin/
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store
-89
View File
@@ -1,89 +0,0 @@
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
kotlin("jvm") version "1.9.0"
id("com.google.devtools.ksp") version "1.9.0-1.0.11"
id("java")
id("net.minecrell.plugin-yml.bukkit") version "0.6.0"
id("org.jetbrains.kotlin.plugin.serialization") version "1.8.21"
id("com.github.johnrengelman.shadow") version "7.1.2"
id("xyz.jpenilla.run-paper") version "2.1.0"
}
group = "me.redtea"
version = "1.0.0-SNAPSHOT"
val carcadeXVersion = project.findProperty("carcadexversion").toString()
repositories {
mavenCentral()
maven {
name = "spigotmc-repo"
url = uri("https://hub.spigotmc.org/nexus/content/repositories/snapshots/")
}
maven {
name = "sonatype"
url = uri("https://oss.sonatype.org/content/groups/public/")
}
maven {
name = "kotlinminecraft"
url = uri("https://raw.githubusercontent.com/KotlinMinecraft/KotlinBukkitAPI-Repository/main")
}
}
dependencies {
//Spigot 1.16.5 API
compileOnly("org.spigotmc:spigot-api:1.16.5-R0.1-SNAPSHOT")
implementation(parent!!)
//Kotlin modubles
library("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
library("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.2")
library("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1")
library("org.jetbrains.kotlin:kotlin-reflect:1.9.0")
library("org.jetbrains:annotations:24.0.0")
//XSeries
library("com.github.cryptomorin:XSeries:9.2.0")
//CarcadeX modules
implementation(project(":architecture"))
compileOnly(project(":genref"))
ksp(project(":genref"))
//implementation files('libs/MiniMessages-0.1.0.jar')
}
bukkit {
main = "me.redtea.test.TestPlugin"
author = "itzRedTea"
apiVersion = "1.13"
}
tasks {
runServer {
minecraftVersion("1.16.5")
}
}
tasks {
shadowJar {
dependencies {
exclude {
it.moduleGroup.startsWith("org.jetbrains")
}
exclude(dependency("io.github.iredtea:carcadex:*"))
exclude(dependency("com.github.cryptomorin:XSeries:9.2.0"))
exclude(dependency("net.kyori:adventure-api:4.14.0"))
}
}
}
tasks.withType<KotlinCompile> {
kotlinOptions.jvmTarget = "1.8"
}
-1
View File
@@ -1 +0,0 @@
[]
-1
View File
@@ -1 +0,0 @@
[]
-41
View File
@@ -1,41 +0,0 @@
# This is the main configuration file for Bukkit.
# As you can see, there's actually not that much to configure without any plugins.
# For a reference for any variable inside this file, check out the Bukkit Wiki at
# https://www.spigotmc.org/go/bukkit-yml
#
# If you need help on this file, feel free to join us on irc or leave a message
# on the forums asking for advice.
#
# IRC: #spigot @ irc.spi.gt
# (If this means nothing to you, just go to https://www.spigotmc.org/go/irc )
# Forums: https://www.spigotmc.org/
# Bug tracker: https://www.spigotmc.org/go/bugs
settings:
allow-end: true
warn-on-overload: true
permissions-file: permissions.yml
update-folder: update
plugin-profiling: false
connection-throttle: 4000
query-plugins: true
deprecated-verbose: default
shutdown-message: Server closed
minimum-api: none
spawn-limits:
monsters: 70
animals: 10
water-animals: 5
water-ambient: 20
ambient: 15
chunk-gc:
period-in-ticks: 600
ticks-per:
animal-spawns: 400
monster-spawns: 1
water-spawns: 1
water-ambient-spawns: 1
ambient-spawns: 1
autosave: 6000
aliases: now-in-commands.yml
Binary file not shown.
-17
View File
@@ -1,17 +0,0 @@
# This is the commands configuration file for Bukkit.
# For documentation on how to make use of this file, check out the Bukkit Wiki at
# https://www.spigotmc.org/go/commands-yml
#
# If you need help on this file, feel free to join us on irc or leave a message
# on the forums asking for advice.
#
# IRC: #spigot @ irc.spi.gt
# (If this means nothing to you, just go to https://www.spigotmc.org/go/irc )
# Forums: https://www.spigotmc.org/
# Bug tracker: https://www.spigotmc.org/go/bugs
command-block-overrides: []
ignore-vanilla-permissions: false
aliases:
icanhasbukkit:
- version $1-
-4
View File
@@ -1,4 +0,0 @@
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula).
#You also agree that tacos are tasty, and the best food in the world.
#Tue Aug 22 13:05:52 MSK 2023
eula=true
-56
View File
@@ -1,56 +0,0 @@
# This is the help configuration file for Bukkit.
#
# By default you do not need to modify this file. Help topics for all plugin commands are automatically provided by
# or extracted from your installed plugins. You only need to modify this file if you wish to add new help pages to
# your server or override the help pages of existing plugin commands.
#
# This file is divided up into the following parts:
# -- general-topics: lists admin defined help topics
# -- index-topics: lists admin defined index topics
# -- amend-topics: lists topic amendments to apply to existing help topics
# -- ignore-plugins: lists any plugins that should be excluded from help
#
# Examples are given below. When amending command topic, the string <text> will be replaced with the existing value
# in the help topic. Color codes can be used in topic text. The color code character is & followed by 0-F.
# ================================================================
#
# Set this to true to list the individual command help topics in the master help.
# command-topics-in-master-index: true
#
# Each general topic will show up as a separate topic in the help index along with all the plugin command topics.
# general-topics:
# Rules:
# shortText: Rules of the server
# fullText: |
# &61. Be kind to your fellow players.
# &B2. No griefing.
# &D3. No swearing.
# permission: topics.rules
#
# Each index topic will show up as a separate sub-index in the help index along with all the plugin command topics.
# To override the default help index (displayed when the user executes /help), name the index topic "Default".
# index-topics:
# Ban Commands:
# shortText: Player banning commands
# preamble: Moderator - do not abuse these commands
# permission: op
# commands:
# - /ban
# - /ban-ip
# - /banlist
#
# Topic amendments are used to change the content of automatically generated plugin command topics.
# amended-topics:
# /stop:
# shortText: Stops the server cold....in its tracks!
# fullText: <text> - This kills the server.
# permission: you.dont.have
#
# Any plugin in the ignored plugins list will be excluded from help. The name must match the name displayed by
# the /plugins command. Ignore "Bukkit" to remove the standard bukkit commands from the index. Ignore "All"
# to completely disable automatic help topic generation.
# ignore-plugins:
# - PluginNameOne
# - PluginNameTwo
# - PluginNameThree
@@ -1 +0,0 @@
aa3d386edc9fd5d223103ad1170c941a9b794fa3
@@ -1,272 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.github.cryptomorin</groupId>
<artifactId>XSeries</artifactId>
<version>9.2.0</version>
<name>XSeries</name>
<description>A set of utilities for Minecraft plugins</description>
<url>https://www.spigotmc.org/threads/378136/</url>
<issueManagement>
<system>GitHub Issues</system>
<url>https://github.com/CryptoMorin/XSeries/issues</url>
</issueManagement>
<inceptionYear>2019</inceptionYear>
<developers>
<developer>
<id>CryptoMorin</id>
<name>Crypto Morin</name>
<roles>
<role>Owner</role>
</roles>
</developer>
</developers>
<licenses>
<license>
<name>MIT License</name>
<url>https://opensource.org/licenses/MIT</url>
<distribution>repo</distribution>
</license>
</licenses>
<parent>
<groupId>org.sonatype.oss</groupId>
<artifactId>oss-parent</artifactId>
<version>9</version>
</parent>
<distributionManagement>
<snapshotRepository>
<id>ossrh</id>
<url>https://oss.sonatype.org/content/repositories/snapshots</url>
</snapshotRepository>
<repository>
<id>ossrh</id>
<url>https://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
</distributionManagement>
<repositories>
<repository>
<id>nms-repo</id>
<url>https://repo.codemc.org/repository/nms/</url>
</repository>
</repositories>
<properties>
<!-- Latest version -->
<spigotVersion>1.19.3-R0.1-SNAPSHOT</spigotVersion>
</properties>
<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot</artifactId>
<version>${spigotVersion}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.0</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>3.2.0</version>
<configuration>
<!--all,-missing-->
<doclint>none</doclint>
<release>8</release>
<excludePackageNames>com.cryptomorin.xseries.unused:com.cryptomorin.xseries.particles</excludePackageNames>
<!-- Apparently this is needed because it's a bug with maven JavaDoc plugin not being able to find the exe by itself. -->
<javadocExecutable>${java.home}/bin/javadoc</javadocExecutable>
</configuration>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>1.6.8</version>
<extensions>true</extensions>
<configuration>
<serverId>ossrh</serverId>
<nexusUrl>https://oss.sonatype.org/</nexusUrl>
<autoReleaseAfterClose>true</autoReleaseAfterClose>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<proc>none</proc>
<source>8</source>
<target>8</target>
<compilerArgs>
<!-- Fails to build the JAR if one of the excluded classes are being used inside an included class. -->
<arg>-sourcepath</arg>
<arg>doesnotexist</arg>
</compilerArgs>
<excludes>
<exclude>com/cryptomorin/xseries/unused/</exclude>
<exclude>com/cryptomorin/xseries/SkullCacheListener.java</exclude>
</excludes>
</configuration>
<executions>
<execution>
<id>default-testCompile</id>
<phase>test-compile</phase>
<goals>
<goal>testCompile</goal>
</goals>
<configuration>
<skip>true</skip>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>3.0.0-M5</version>
<configuration>
<!--<failIfNoTests>true</failIfNoTests>-->
<trimStackTrace>false</trimStackTrace>
<workingDirectory>${basedir}/target/tests</workingDirectory>
<!-- <dependenciesToScan>-->
<!-- <dependency>*:spigot:*:*:1.16.5-R0.1-SNAPSHOT</dependency>-->
<!-- </dependenciesToScan>-->
<includes>
<include>**/DummySpigot.java</include>
</includes>
</configuration>
</plugin>
</plugins>
<testSourceDirectory>src/test</testSourceDirectory>
<testResources>
<testResource>
<directory>src/test/resources</directory>
<filtering>true</filtering>
</testResource>
</testResources>
</build>
<profiles>
<profile>
<id>tester</id>
<dependencies>
<dependency>
<groupId>org.spigotmc</groupId>
<artifactId>spigot</artifactId>
<version>${spigotVersion}</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>17</source>
<target>17</target>
</configuration>
<executions>
<execution>
<id>default-testCompile</id>
<phase>test-compile</phase>
<goals>
<goal>testCompile</goal>
</goals>
<configuration>
<skip>false</skip>
<testIncludes>
<include>*/**DummySpigot.java</include>
</testIncludes>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
<profile>
<id>latest</id>
<properties>
<nms>19_R0</nms>
</properties>
</profile>
<profile>
<id>18</id>
<properties>
<nms>18_R1</nms>
<spigotVersion>1.18.1-R0.1-SNAPSHOT</spigotVersion>
</properties>
</profile>
<profile>
<id>17</id>
<properties>
<nms>17_R1</nms>
<spigotVersion>1.17.1-R0.1-SNAPSHOT</spigotVersion>
</properties>
</profile>
<profile>
<!-- Doens't seem to work. I can't find a way to compile with one dependency and test with another -->
<id>16</id>
<properties>
<nms>16_R3</nms>
<spigotVersion>1.16.5-R0.1-SNAPSHOT</spigotVersion>
</properties>
</profile>
</profiles>
</project>
@@ -1 +0,0 @@
b3a48024a3315906810a4f5c81cc26da5d1abc07
@@ -1,4 +0,0 @@
#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
#Tue Aug 22 13:06:54 MSK 2023
XSeries-9.2.0.jar>central=
XSeries-9.2.0.pom>central=
@@ -1,3 +0,0 @@
#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
#Tue Aug 22 13:06:50 MSK 2023
annotations-13.0.pom>central=
@@ -1,139 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.jetbrains</groupId>
<artifactId>annotations</artifactId>
<version>13.0</version>
<packaging>jar</packaging>
<name>IntelliJ IDEA Annotations</name>
<description>A set of annotations used for code inspection support and code documentation.</description>
<url>http://www.jetbrains.org</url>
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
<comments>A business-friendly OSS license</comments>
</license>
</licenses>
<scm>
<url>https://github.com/JetBrains/intellij-community</url>
<connection>scm:git:https://github.com/JetBrains/intellij-community.git</connection>
</scm>
<developers>
<developer>
<id>JetBrains</id>
<name>JetBrains Team</name>
<organization>JetBrains</organization>
<organizationUrl>http://www.jetbrains.com</organizationUrl>
</developer>
</developers>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.7</version>
<executions>
<execution>
<phase>generate-sources</phase>
<configuration>
<tasks>
<delete dir="${basedir}/src/main/java" />
<mkdir dir="${basedir}/src/main/java" />
<copy todir="${basedir}/src/main/java">
<fileset dir="${basedir}/../../../community/platform/annotations/src" />
</copy>
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>2.1.2</version>
<executions>
<execution>
<id>attach-sources</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-javadoc-plugin</artifactId>
<version>2.9.1</version>
<executions>
<execution>
<id>attach-javadocs</id>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-gpg-plugin</artifactId>
<version>1.4</version>
<configuration>
<keyname>66770193</keyname>
<homedir>${basedir}/.gnupg</homedir>
</configuration>
<executions>
<execution>
<id>sign-artifacts</id>
<phase>verify</phase>
<goals>
<goal>sign</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
<distributionManagement>
<repository>
<id>sonatype-nexus-staging</id>
<url>http://oss.sonatype.org/service/local/staging/deploy/maven2/</url>
</repository>
<snapshotRepository>
<id>sonatype-nexus-snapshots</id>
<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
</project>
@@ -1 +0,0 @@
fa7d3d07cc80547e2d15bf4839d3267c637c642f
@@ -1,3 +0,0 @@
#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
#Tue Aug 22 13:06:50 MSK 2023
annotations-23.0.0.pom>central=
@@ -1,30 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.jetbrains</groupId>
<artifactId>annotations</artifactId>
<version>23.0.0</version>
<name>JetBrains Java Annotations</name>
<description>A set of annotations used for code inspection support and code documentation.</description>
<url>https://github.com/JetBrains/java-annotations</url>
<scm>
<url>https://github.com/JetBrains/java-annotations</url>
<connection>scm:git:git://github.com/JetBrains/java-annotations.git</connection>
<developerConnection>scm:git:ssh://github.com:JetBrains/java-annotations.git</developerConnection>
</scm>
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
</license>
</licenses>
<developers>
<developer>
<id>JetBrains</id>
<name>JetBrains Team</name>
<organization>JetBrains</organization>
<organizationUrl>https://www.jetbrains.com</organizationUrl>
</developer>
</developers>
</project>
@@ -1 +0,0 @@
deb853be3c9e05ed99fbbf83e49d349d08a6d10e
@@ -1,4 +0,0 @@
#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
#Tue Aug 22 13:06:54 MSK 2023
annotations-24.0.0.jar>central=
annotations-24.0.0.pom>central=
@@ -1 +0,0 @@
69b8b443c437fdeefa8d20c18d257b94836a92b9
@@ -1,30 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.jetbrains</groupId>
<artifactId>annotations</artifactId>
<version>24.0.0</version>
<name>JetBrains Java Annotations</name>
<description>A set of annotations used for code inspection support and code documentation.</description>
<url>https://github.com/JetBrains/java-annotations</url>
<scm>
<url>https://github.com/JetBrains/java-annotations</url>
<connection>scm:git:git://github.com/JetBrains/java-annotations.git</connection>
<developerConnection>scm:git:ssh://github.com:JetBrains/java-annotations.git</developerConnection>
</scm>
<licenses>
<license>
<name>The Apache Software License, Version 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
<distribution>repo</distribution>
</license>
</licenses>
<developers>
<developer>
<id>JetBrains</id>
<name>JetBrains Team</name>
<organization>JetBrains</organization>
<organizationUrl>https://www.jetbrains.com</organizationUrl>
</developer>
</developers>
</project>
@@ -1 +0,0 @@
bfce1521c40f705e9fe25e1b86301035fb72d129
@@ -1,4 +0,0 @@
#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
#Tue Aug 22 13:06:54 MSK 2023
kotlin-reflect-1.8.21.pom>central=
kotlin-reflect-1.8.21.jar>central=
@@ -1 +0,0 @@
662838019bc1141f8a311180d93b9e13765c7f55
@@ -1,37 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-reflect</artifactId>
<version>1.8.21</version>
<name>Kotlin Reflect</name>
<description>Kotlin Full Reflection Library</description>
<url>https://kotlinlang.org/</url>
<licenses>
<license>
<name>The Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<developers>
<developer>
<name>Kotlin Team</name>
<organization>JetBrains</organization>
<organizationUrl>https://www.jetbrains.com</organizationUrl>
</developer>
</developers>
<scm>
<connection>scm:git:https://github.com/JetBrains/kotlin.git</connection>
<developerConnection>scm:git:https://github.com/JetBrains/kotlin.git</developerConnection>
<url>https://github.com/JetBrains/kotlin</url>
</scm>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>1.8.21</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
@@ -1 +0,0 @@
988a6739315c721d0fa76a517ee314e4b6e29cfb
@@ -1,4 +0,0 @@
#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
#Tue Aug 22 23:22:39 MSK 2023
kotlin-reflect-1.9.0.pom>central=
kotlin-reflect-1.9.0.jar>central=
@@ -1 +0,0 @@
2891f552979d4bf4d4ec516acb9df769fb62dbe9
@@ -1,37 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-reflect</artifactId>
<version>1.9.0</version>
<name>Kotlin Reflect</name>
<description>Kotlin Full Reflection Library</description>
<url>https://kotlinlang.org/</url>
<licenses>
<license>
<name>The Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<developers>
<developer>
<name>Kotlin Team</name>
<organization>JetBrains</organization>
<organizationUrl>https://www.jetbrains.com</organizationUrl>
</developer>
</developers>
<scm>
<connection>scm:git:https://github.com/JetBrains/kotlin.git</connection>
<developerConnection>scm:git:https://github.com/JetBrains/kotlin.git</developerConnection>
<url>https://github.com/JetBrains/kotlin</url>
</scm>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>1.9.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
@@ -1 +0,0 @@
eb198069ed7e9e8458d900c47325475ec581507a
@@ -1,3 +0,0 @@
#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
#Tue Aug 22 13:06:51 MSK 2023
kotlin-stdlib-common-1.8.20.pom>central=
@@ -1,28 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-common</artifactId>
<version>1.8.20</version>
<name>Kotlin Stdlib Common</name>
<description>Kotlin Common Standard Library</description>
<url>https://kotlinlang.org/</url>
<licenses>
<license>
<name>The Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<developers>
<developer>
<name>Kotlin Team</name>
<organization>JetBrains</organization>
<organizationUrl>https://www.jetbrains.com</organizationUrl>
</developer>
</developers>
<scm>
<connection>scm:git:https://github.com/JetBrains/kotlin.git</connection>
<developerConnection>scm:git:https://github.com/JetBrains/kotlin.git</developerConnection>
<url>https://github.com/JetBrains/kotlin</url>
</scm>
</project>
@@ -1 +0,0 @@
c8bc98db3b7220e49408922137dbd44fc458708c
@@ -1,4 +0,0 @@
#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
#Tue Aug 22 13:06:54 MSK 2023
kotlin-stdlib-common-1.8.21.jar>central=
kotlin-stdlib-common-1.8.21.pom>central=
@@ -1 +0,0 @@
d749cd5ae25da36d06e5028785038e24f9d37976
@@ -1,28 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-common</artifactId>
<version>1.8.21</version>
<name>Kotlin Stdlib Common</name>
<description>Kotlin Common Standard Library</description>
<url>https://kotlinlang.org/</url>
<licenses>
<license>
<name>The Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<developers>
<developer>
<name>Kotlin Team</name>
<organization>JetBrains</organization>
<organizationUrl>https://www.jetbrains.com</organizationUrl>
</developer>
</developers>
<scm>
<connection>scm:git:https://github.com/JetBrains/kotlin.git</connection>
<developerConnection>scm:git:https://github.com/JetBrains/kotlin.git</developerConnection>
<url>https://github.com/JetBrains/kotlin</url>
</scm>
</project>
@@ -1 +0,0 @@
8f1a58d8fd44b0f34359325b9b47c95df2c7ea9e
@@ -1,4 +0,0 @@
#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
#Tue Aug 22 23:22:39 MSK 2023
kotlin-stdlib-common-1.9.0.pom>central=
kotlin-stdlib-common-1.9.0.jar>central=
@@ -1 +0,0 @@
cd65c21cfd1eec4d44ef09f9f52b6d9f8a720636
@@ -1,28 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-common</artifactId>
<version>1.9.0</version>
<name>Kotlin Stdlib Common</name>
<description>Kotlin Common Standard Library</description>
<url>https://kotlinlang.org/</url>
<licenses>
<license>
<name>The Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<developers>
<developer>
<name>Kotlin Team</name>
<organization>JetBrains</organization>
<organizationUrl>https://www.jetbrains.com</organizationUrl>
</developer>
</developers>
<scm>
<connection>scm:git:https://github.com/JetBrains/kotlin.git</connection>
<developerConnection>scm:git:https://github.com/JetBrains/kotlin.git</developerConnection>
<url>https://github.com/JetBrains/kotlin</url>
</scm>
</project>
@@ -1 +0,0 @@
0a865a0c5a64618fd1dcca13d05dea4cba44c832
@@ -1,3 +0,0 @@
#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
#Tue Aug 22 13:06:51 MSK 2023
kotlin-stdlib-jdk7-1.8.20.pom>central=
@@ -1,36 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jdk7</artifactId>
<version>1.8.20</version>
<name>Kotlin Stdlib Jdk7</name>
<description>Kotlin Standard Library JDK 7 extension</description>
<url>https://kotlinlang.org/</url>
<licenses>
<license>
<name>The Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<developers>
<developer>
<name>Kotlin Team</name>
<organization>JetBrains</organization>
<organizationUrl>https://www.jetbrains.com</organizationUrl>
</developer>
</developers>
<scm>
<connection>scm:git:https://github.com/JetBrains/kotlin.git</connection>
<developerConnection>scm:git:https://github.com/JetBrains/kotlin.git</developerConnection>
<url>https://github.com/JetBrains/kotlin</url>
</scm>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>1.8.20</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
@@ -1 +0,0 @@
e613a7635e90125d25b100b636a85639b4487ac4
@@ -1,4 +0,0 @@
#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
#Tue Aug 22 13:06:54 MSK 2023
kotlin-stdlib-jdk7-1.8.21.jar>central=
kotlin-stdlib-jdk7-1.8.21.pom>central=
@@ -1 +0,0 @@
7473b8cd3c0ef9932345baf569bc398e8a717046
@@ -1,36 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jdk7</artifactId>
<version>1.8.21</version>
<name>Kotlin Stdlib Jdk7</name>
<description>Kotlin Standard Library JDK 7 extension</description>
<url>https://kotlinlang.org/</url>
<licenses>
<license>
<name>The Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<developers>
<developer>
<name>Kotlin Team</name>
<organization>JetBrains</organization>
<organizationUrl>https://www.jetbrains.com</organizationUrl>
</developer>
</developers>
<scm>
<connection>scm:git:https://github.com/JetBrains/kotlin.git</connection>
<developerConnection>scm:git:https://github.com/JetBrains/kotlin.git</developerConnection>
<url>https://github.com/JetBrains/kotlin</url>
</scm>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>1.8.21</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
@@ -1 +0,0 @@
d23a31049e8289c21e78078e888f3968c82ad0ac
@@ -1,4 +0,0 @@
#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
#Tue Aug 22 23:22:39 MSK 2023
kotlin-stdlib-jdk7-1.9.0.jar>central=
kotlin-stdlib-jdk7-1.9.0.pom>central=
@@ -1 +0,0 @@
f320478990d05e0cfaadd74f9619fd6027adbf37
@@ -1,36 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jdk7</artifactId>
<version>1.9.0</version>
<name>Kotlin Stdlib Jdk7</name>
<description>Kotlin Standard Library JDK 7 extension</description>
<url>https://kotlinlang.org/</url>
<licenses>
<license>
<name>The Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<developers>
<developer>
<name>Kotlin Team</name>
<organization>JetBrains</organization>
<organizationUrl>https://www.jetbrains.com</organizationUrl>
</developer>
</developers>
<scm>
<connection>scm:git:https://github.com/JetBrains/kotlin.git</connection>
<developerConnection>scm:git:https://github.com/JetBrains/kotlin.git</developerConnection>
<url>https://github.com/JetBrains/kotlin</url>
</scm>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>1.9.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
@@ -1 +0,0 @@
5ce6c5278ef6e342507a96372ee534ed0b830e54
@@ -1,3 +0,0 @@
#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
#Tue Aug 22 13:06:51 MSK 2023
kotlin-stdlib-jdk8-1.8.20.pom>central=
@@ -1,42 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jdk8</artifactId>
<version>1.8.20</version>
<name>Kotlin Stdlib Jdk8</name>
<description>Kotlin Standard Library JDK 8 extension</description>
<url>https://kotlinlang.org/</url>
<licenses>
<license>
<name>The Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<developers>
<developer>
<name>Kotlin Team</name>
<organization>JetBrains</organization>
<organizationUrl>https://www.jetbrains.com</organizationUrl>
</developer>
</developers>
<scm>
<connection>scm:git:https://github.com/JetBrains/kotlin.git</connection>
<developerConnection>scm:git:https://github.com/JetBrains/kotlin.git</developerConnection>
<url>https://github.com/JetBrains/kotlin</url>
</scm>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>1.8.20</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jdk7</artifactId>
<version>1.8.20</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
@@ -1 +0,0 @@
f9dac9f21106bd224ea78c78b56f4e401d7df56f
@@ -1,4 +0,0 @@
#NOTE: This is a Maven Resolver internal implementation file, its format can be changed without prior notice.
#Tue Aug 22 13:06:54 MSK 2023
kotlin-stdlib-jdk8-1.8.21.jar>central=
kotlin-stdlib-jdk8-1.8.21.pom>central=
@@ -1 +0,0 @@
67f57e154437cd9e6e9cf368394b95814836ff88
@@ -1,42 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jdk8</artifactId>
<version>1.8.21</version>
<name>Kotlin Stdlib Jdk8</name>
<description>Kotlin Standard Library JDK 8 extension</description>
<url>https://kotlinlang.org/</url>
<licenses>
<license>
<name>The Apache License, Version 2.0</name>
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
</license>
</licenses>
<developers>
<developer>
<name>Kotlin Team</name>
<organization>JetBrains</organization>
<organizationUrl>https://www.jetbrains.com</organizationUrl>
</developer>
</developers>
<scm>
<connection>scm:git:https://github.com/JetBrains/kotlin.git</connection>
<developerConnection>scm:git:https://github.com/JetBrains/kotlin.git</developerConnection>
<url>https://github.com/JetBrains/kotlin</url>
</scm>
<dependencies>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>1.8.21</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jdk7</artifactId>
<version>1.8.21</version>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
@@ -1 +0,0 @@
3e5d957c0d7c874093cdf22483d4fc024476479a
Loaded 100 of 284 files, more files were not shown because too many files have changed in this diff. Show more