Added admin commands for getting and setting attributes
::getattribute [playername] attributename ::setattribute [playername] attributename value
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
package core.game.system.command.sets
|
||||
|
||||
import core.api.getAttribute
|
||||
import core.api.setAttribute
|
||||
import core.game.node.entity.player.Player
|
||||
import core.game.system.command.Privilege
|
||||
import core.game.world.repository.Repository
|
||||
import core.plugin.Initializable
|
||||
|
||||
/**
|
||||
* In game setting of simple attributes. Not for complex objects or enums.
|
||||
* @author ovenbread
|
||||
*/
|
||||
@Initializable
|
||||
class PlayerAttributeCommandSet : CommandSet(Privilege.ADMIN) {
|
||||
override fun defineCommands() {
|
||||
|
||||
/**
|
||||
* Gets the value of an attribute on a player.
|
||||
*/
|
||||
define("getattribute") { player, args ->
|
||||
if (args.size < 2) {
|
||||
reject(player, "Usage ::getattribute [playername] attributename")
|
||||
}
|
||||
var attributeName = ""
|
||||
|
||||
// If stats is called without a username, return self.
|
||||
var queryPlayer: Player? = null
|
||||
if(args.size == 2){
|
||||
queryPlayer = player
|
||||
attributeName = args[1]
|
||||
}
|
||||
// If stats is called with a username, find the player or set to null.
|
||||
if(args.size == 3) {
|
||||
queryPlayer = Repository.getPlayerByName(args[1])
|
||||
attributeName = args[2]
|
||||
}
|
||||
// If player is not found, return error.
|
||||
if(queryPlayer == null){
|
||||
reject(player,"Invalid player or player not online.")
|
||||
return@define
|
||||
}
|
||||
|
||||
notify(player,"Attribute: " + attributeName + " Value: " + getAttribute(queryPlayer!!, attributeName, "").toString())
|
||||
return@define
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the value of an attribute on a player.
|
||||
*/
|
||||
define("setattribute") { player, args ->
|
||||
if (args.size < 2) {
|
||||
reject(player, "Usage ::setattribute [playername] attributename value")
|
||||
}
|
||||
var attributeName = ""
|
||||
var value = ""
|
||||
|
||||
// If stats is called without a username, return self.
|
||||
var queryPlayer: Player? = null
|
||||
if(args.size == 3){
|
||||
queryPlayer = player
|
||||
attributeName = args[1]
|
||||
value = args[2]
|
||||
}
|
||||
// If stats is called with a username, find the player or set to null.
|
||||
if(args.size == 4) {
|
||||
queryPlayer = Repository.getPlayerByName(args[1])
|
||||
attributeName = args[2]
|
||||
value = args[3]
|
||||
}
|
||||
// If player is not found, return error.
|
||||
if(queryPlayer == null){
|
||||
reject(player,"Invalid player or player not online.")
|
||||
return@define
|
||||
}
|
||||
// Please be careful when editing attributes.
|
||||
// If string input is an integer, convert to an integer and set it to the attribute.
|
||||
if (value.toIntOrNull() != null){
|
||||
setAttribute(queryPlayer!!, attributeName, value.toIntOrNull())
|
||||
return@define
|
||||
}
|
||||
// If string input is a float(decimal number), convert to a float and set it to the attribute.
|
||||
if (value.toFloatOrNull() != null){
|
||||
setAttribute(queryPlayer!!, attributeName, value.toFloatOrNull())
|
||||
return@define
|
||||
}
|
||||
// If string matches the text "true", set the attribute value to the boolean true.
|
||||
if (value == "true"){
|
||||
setAttribute(queryPlayer!!, attributeName, true)
|
||||
return@define
|
||||
}
|
||||
// If string matches the text "false", set the attribute value to the boolean false.
|
||||
if (value == "false"){
|
||||
setAttribute(queryPlayer!!, attributeName, false)
|
||||
return@define
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user