Skip to content

Commit

Permalink
Merge branch 'master' into mc1.12.2-we6
Browse files Browse the repository at this point in the history
# Conflicts:
#	build.gradle
#	src/main/java/io/github/mdsimmo/bomberman/game/Game.kt
#	src/main/java/io/github/mdsimmo/bomberman/game/GameSettings.kt
  • Loading branch information
BuildTools committed Apr 27, 2020
2 parents 922feb7 + 79aceb7 commit 96d46c4
Show file tree
Hide file tree
Showing 36 changed files with 976 additions and 1,054 deletions.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8

group = 'io.github.mdsimmo'
version = '0.4.6-1.12.2-R1'
version = '0.4.11-1.12.2-R1'

repositories {
mavenCentral()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package io.github.mdsimmo.bomberman.commands

import io.github.mdsimmo.bomberman.commands.game.*
import io.github.mdsimmo.bomberman.commands.game.set.Set
import io.github.mdsimmo.bomberman.messaging.Message
import io.github.mdsimmo.bomberman.messaging.Text
import org.bukkit.command.Command
Expand All @@ -14,8 +13,8 @@ class BaseCommand : CommandGroup(null), TabCompleter, CommandExecutor {

init {
addChildren(
//DevInfo(this),
Set(this),
DevInfo(this),
Configure(this),
GameCreate(this),
GameInfo(this),
GameJoin(this),
Expand All @@ -33,7 +32,7 @@ class BaseCommand : CommandGroup(null), TabCompleter, CommandExecutor {
}

override fun permission(): Permission {
return Permission.PLAYER
return Permissions.BASE
}

override fun description(): Message {
Expand All @@ -56,10 +55,10 @@ class BaseCommand : CommandGroup(null), TabCompleter, CommandExecutor {
val allOptions = if (currentlyTyping.startsWith("-")) {
val splitIndex = currentlyTyping.indexOf('=')
if (splitIndex == -1) {
flags(arguments, flags).map { "-$it" } + "-?"
flags(sender, arguments, flags).map { "-$it" } + "-?"
} else {
val key = currentlyTyping.substring(1, splitIndex)
flagOptions(key, arguments, flags)
flagOptions(sender, key, arguments, flags)
.map { "-$key=$it" }
}
} else {
Expand Down
31 changes: 6 additions & 25 deletions src/main/java/io/github/mdsimmo/bomberman/commands/Cmd.kt
Original file line number Diff line number Diff line change
@@ -1,20 +1,11 @@
package io.github.mdsimmo.bomberman.commands

import io.github.mdsimmo.bomberman.messaging.*
import org.bukkit.Bukkit
import org.bukkit.command.CommandSender

// TODO Cmd shouldn't require knowing its parent
abstract class Cmd(protected var parent: Cmd?) : Formattable {
enum class Permission(val permission: String) {
PLAYER("bomberman.player"),
GAME_OPERATE("bomberman.operator"),
GAME_DICTATE("bomberman.dictator");

fun isAllowedBy(sender: CommandSender): Boolean {
return sender.hasPermission(permission)
}

}

/**
* Gets the commands name.
Expand All @@ -33,9 +24,9 @@ abstract class Cmd(protected var parent: Cmd?) : Formattable {
*/
abstract fun options(sender: CommandSender, args: List<String>): List<String>

open fun flags(args: List<String>, flags: Map<String, String>): Set<String> = emptySet()
open fun flags(sender: CommandSender, args: List<String>, flags: Map<String, String>): Set<String> = emptySet()

open fun flagOptions(flag: String, args: List<String>, flags: Map<String, String>): Set<String> = emptySet()
open fun flagOptions(sender: CommandSender, flag: String, args: List<String>, flags: Map<String, String>): Set<String> = emptySet()

/**
* Execute the command
Expand All @@ -51,7 +42,7 @@ abstract class Cmd(protected var parent: Cmd?) : Formattable {
* @return true if success. false to show usage
*/
fun execute(sender: CommandSender, args: List<String>, flags: Map<String, String>) {
if (isAllowedBy(sender)) {
if (permission().isAllowedBy(sender)) {
if (!run(sender, args, flags)) {
incorrectUsage(sender, args)
help(sender, args, flags)
Expand Down Expand Up @@ -80,16 +71,6 @@ abstract class Cmd(protected var parent: Cmd?) : Formattable {
*/
abstract fun permission(): Permission

/**
* gets if the given sender has permission to run this command
*
* @param sender the sender
* @return true if they have permission
*/
fun isAllowedBy(sender: CommandSender): Boolean {
return permission().isAllowedBy(sender)
}

/**
* gets the path to the command
*
Expand All @@ -107,7 +88,7 @@ abstract class Cmd(protected var parent: Cmd?) : Formattable {

fun incorrectUsage(sender: CommandSender, args: List<String>) {
context(Text.INCORRECT_USAGE)
.with("attempt", CollectionWrapper<Message>(
.with("attempt", CollectionWrapper(
args.map { Message.of(it) }
))
.sendTo(sender)
Expand All @@ -125,7 +106,7 @@ abstract class Cmd(protected var parent: Cmd?) : Formattable {
"extra" -> extra()
"example" -> example()
"description" -> description()
"flags" -> CollectionWrapper(flags(listOf(), mapOf())
"flags" -> CollectionWrapper(flags(Bukkit.getConsoleSender(), listOf(), mapOf())
.map { flag -> object: Formattable {
override fun format(args: List<Message>): Message {
return when ((args.firstOrNull() ?: "name").toString()) {
Expand Down
29 changes: 17 additions & 12 deletions src/main/java/io/github/mdsimmo/bomberman/commands/CommandGroup.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,35 +18,40 @@ abstract class CommandGroup(parent: Cmd?) : Cmd(parent) {
this.children.addAll(listOf(*children))
}

private fun child(args: List<String>): Cmd? {
private fun child(sender: CommandSender, args: List<String>): Cmd? {
return args.firstOrNull()?.let {arg ->
children.firstOrNull { c -> c.name().toString().equals(arg, ignoreCase = true) }
children.filter { it.permission().isAllowedBy(sender) }
.firstOrNull { c -> c.name().toString().equals(arg, ignoreCase = true) }
}
}

override fun options(sender: CommandSender, args: List<String>): List<String> {
return when (val c = child(args)) {
null -> children.map { it.name().toString() }
else -> c.options(sender, args.drop(1))
return when (val c = child(sender, args)) {
null -> children
.filter { it.permission().isAllowedBy(sender) }
.map { it.name().toString() }
else -> {
c.options(sender, args.drop(1))
}
}
}

override fun flags(args: List<String>, flags: Map<String, String>): Set<String> {
return when (val c = child(args)) {
override fun flags(sender: CommandSender, args: List<String>, flags: Map<String, String>): Set<String> {
return when (val c = child(sender, args)) {
null -> emptySet()
else -> c.flags(args.drop(1), flags)
else -> c.flags(sender, args.drop(1), flags)
}
}

override fun flagOptions(flag: String, args: List<String>, flags: Map<String, String>): Set<String> {
return when (val c = child(args)) {
override fun flagOptions(sender: CommandSender, flag: String, args: List<String>, flags: Map<String, String>): Set<String> {
return when (val c = child(sender, args)) {
null -> emptySet()
else -> c.flagOptions(flag, args.drop(1), flags)
else -> c.flagOptions(sender, flag, args.drop(1), flags)
}
}

override fun help(sender: CommandSender, args: List<String>, flags: Map<String, String>) {
when (val c = child(args)) {
when (val c = child(sender, args)) {
null -> context(Text.COMMAND_GROUP_HELP).sendTo(sender)
else -> c.help(sender, args.drop(1), flags)
}
Expand Down
25 changes: 25 additions & 0 deletions src/main/java/io/github/mdsimmo/bomberman/commands/Permissions.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package io.github.mdsimmo.bomberman.commands

import org.bukkit.command.CommandSender

interface Permission {
fun isAllowedBy(sender: CommandSender): Boolean
}

enum class Permissions(val permission: String) : Permission {
BASE("bomberman.bm"),
CREATE("bomberman.create"),
DELETE("bomberman.delete"),
RELOAD("bomberman.reload"),
CONFIGURE("bomberman.configure"),
START("bomberman.start"),
STOP("bomberman.stop"),
INFO("bomberman.info"),
LIST("bomberman.list"),
JOIN("bomberman.join"),
LEAVE("bomberman.leave");

override fun isAllowedBy(sender: CommandSender): Boolean {
return sender.hasPermission(permission)
}
}
Loading

0 comments on commit 96d46c4

Please sign in to comment.