项目作者: TheFrontier

项目描述 :
A general-purpose, type-safe, tree-based command library.
高级语言: Kotlin
项目地址: git://github.com/TheFrontier/director.git
创建时间: 2020-02-15T20:21:30Z
项目社区:https://github.com/TheFrontier/director

开源协议:MIT License

下载


director Release

A general-purpose, type-safe, tree-based command library.

Gradle

Current Version: Release

  1. repositories {
  2. maven("https://jitpack.io")
  3. }
  4. dependencies {
  5. // Just the core stuff.
  6. implementation("com.github.TheFrontier.director:director-core:<latest-version>")
  7. // Sponge Integration
  8. implementation("com.github.TheFrontier.director:director-sponge:<latest-version>")
  9. // COMING SOON: Velocity Integration
  10. implementation("com.github.TheFrontier.director:director-velocity:<latest-version>")
  11. // COMING SOON: Spigot Integration
  12. implementation("com.github.TheFrontier.director:director-spigot:<latest-version>")
  13. // COMING SOON: BungeeCord Integration
  14. implementation("com.github.TheFrontier.director:director-bungee:<latest-version>")
  15. }

A Long Example

The following example uses none of the shorthands available in the library. We quickly see that this becomes cumbersome.

  1. import org.spongepowered.api.Sponge
  2. import org.spongepowered.api.command.CommandResult
  3. import org.spongepowered.api.command.CommandSource
  4. import org.spongepowered.api.entity.living.player.Player
  5. import org.spongepowered.api.text.Text
  6. import pw.dotdash.director.core.HCons
  7. import pw.dotdash.director.core.HNil
  8. import pw.dotdash.director.core.component1
  9. import pw.dotdash.director.core.component2
  10. import pw.dotdash.director.core.parameter.optional
  11. import pw.dotdash.director.core.parameter.string
  12. import pw.dotdash.director.core.tree.ArgumentCommandTree
  13. import pw.dotdash.director.core.tree.ChildCommandTree
  14. import pw.dotdash.director.core.tree.RootCommandTree
  15. import pw.dotdash.director.sponge.CommandTreeCallable
  16. import pw.dotdash.director.sponge.parameter.player
  17. fun longExample(plugin: Any) {
  18. fun warpCreate(): ChildCommandTree<CommandSource, HNil, CommandResult> {
  19. val executor: (CommandSource, HCons<String, HNil>) -> CommandResult =
  20. { source, args ->
  21. val (name: String) = args
  22. source.sendMessage(Text.of("Created warp: $name"))
  23. CommandResult.success()
  24. }
  25. val nameArgument =
  26. ArgumentCommandTree.builder<CommandSource, HNil, String, CommandResult>()
  27. .setParameter(string().key("name"))
  28. .setExecutor(executor)
  29. .build()
  30. return ChildCommandTree.builder<CommandSource, HNil, CommandResult>()
  31. .setAliases("create")
  32. .setArgument(nameArgument)
  33. .build()
  34. }
  35. fun warpTeleport(): ChildCommandTree<CommandSource, HNil, CommandResult> {
  36. val executor: (CommandSource, HCons<Player?, HCons<String, HNil>>) -> CommandResult =
  37. { source, args ->
  38. val (player: Player?, name: String) = args
  39. source.sendMessage(Text.of("${(player ?: source).name} teleported to warp $name"))
  40. CommandResult.success()
  41. }
  42. val playerArgument =
  43. ArgumentCommandTree.builder<CommandSource, HCons<String, HNil>, Player?, CommandResult>()
  44. .setParameter(player().optional().key("player"))
  45. .setExecutor(executor)
  46. .build()
  47. val nameArgument =
  48. ArgumentCommandTree.builder<CommandSource, HNil, String, CommandResult>()
  49. .setParameter(string().key("warp"))
  50. .setArgument(playerArgument)
  51. .build()
  52. return ChildCommandTree.builder<CommandSource, HNil, CommandResult>()
  53. .setAliases("create")
  54. .setArgument(nameArgument)
  55. .build()
  56. }
  57. val warp =
  58. RootCommandTree.builder<CommandSource, CommandResult>("warp")
  59. .addChild(warpCreate())
  60. .addChild(warpTeleport())
  61. .build()
  62. Sponge.getCommandManager().register(plugin, CommandTreeCallable(warp), "warp")
  63. }

A More Streamlined Example

By utilizing all the shorthands available in the library, we can greatly reduce the verbosity required to create a tree of commands.

  1. import org.spongepowered.api.Sponge
  2. import org.spongepowered.api.command.CommandResult
  3. import org.spongepowered.api.command.CommandSource
  4. import org.spongepowered.api.entity.living.player.Player
  5. import org.spongepowered.api.text.Text
  6. import pw.dotdash.director.core.HCons
  7. import pw.dotdash.director.core.HNil
  8. import pw.dotdash.director.core.component1
  9. import pw.dotdash.director.core.component2
  10. import pw.dotdash.director.core.parameter.optional
  11. import pw.dotdash.director.core.parameter.string
  12. import pw.dotdash.director.core.tree.RootCommandTree
  13. import pw.dotdash.director.sponge.CommandTreeCallable
  14. import pw.dotdash.director.sponge.SpongeCommandTree
  15. import pw.dotdash.director.sponge.parameter.player
  16. fun streamlinedExample(plugin: Any) {
  17. fun warpCreate(source: CommandSource, args: HCons<String, HNil>): CommandResult {
  18. val (name: String) = args
  19. source.sendMessage(Text.of("Created warp: $name"))
  20. return CommandResult.success()
  21. }
  22. fun warpTeleport(source: CommandSource, args: HCons<Player?, HCons<String, HNil>>): CommandResult {
  23. val (player: Player?, name: String) = args
  24. source.sendMessage(Text.of("${(player ?: source).name} teleported to warp $name"))
  25. return CommandResult.success()
  26. }
  27. val warp: RootCommandTree<CommandSource, HNil, CommandResult> =
  28. SpongeCommandTree.root("warp")
  29. .addChild("create") {
  30. setArgument(string() key "name") {
  31. setExecutor(::warpCreate)
  32. }
  33. }
  34. .addChild("teleport") {
  35. setArgument(string() key "warp") {
  36. setArgument(player().optional() key "player") {
  37. setExecutor(::warpTeleport)
  38. }
  39. }
  40. }
  41. .build()
  42. Sponge.getCommandManager().register(plugin, CommandTreeCallable(warp), "warp")
  43. }