Added admin commands for getting and setting attributes

::getattribute [playername] attributename
::setattribute [playername] attributename value
This commit is contained in:
Oven Bread
2023-07-29 04:25:23 +00:00
committed by Ryan
parent af3ee7fe09
commit bda000f220
@@ -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
}
}
}
}