Skip to content

Commit

Permalink
new api
Browse files Browse the repository at this point in the history
  • Loading branch information
Kris-Driv committed Jan 5, 2017
1 parent 157d145 commit bf79b71
Show file tree
Hide file tree
Showing 2 changed files with 87 additions and 35 deletions.
46 changes: 43 additions & 3 deletions src/dominate/Command.php
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,13 @@ public function getParameterIndex(Parameter $arg) : int {
return -1;
}

public function getParameter(string $name) {
foreach ($this->parameters as $param) {
if($param->getName() === $name) return $param;
}
return null;
}

public function getArgument(int $index) {
if(isset($this->parameters[$index])) {
return $this->parameters[$index]->getValue();
Expand Down Expand Up @@ -333,11 +340,18 @@ public function sendUsage(CommandSender $sender = null) {
* ----------------------------------------------------------
*/

public function prepare(CommandSender $sender, $label, array $args) : bool {
return true;
}

public function execute(CommandSender $sender, $label, array $args) {
$this->sender = $sender;
$this->label = $label;
$this->args = $args;

if(!$this->prepare($sender, $label, $args)) {
return false;
}
if(!$this->testPermission($sender)) {
return false;
}
Expand All @@ -357,9 +371,17 @@ public function execute(CommandSender $sender, $label, array $args) {

$value = isset($args[$i]) ? $args[$i] : $param->getDefaultValue();
if($param->getType() !== Parameter::TYPE_NULL && $value !== null) {
if($param->isPermissionSet()) {
if(!$param->testPermission($sender)) {
$sender->sendMessage(Localizer::translatable("parameter.permission-denied", [
"param" => $param->getName()
]));
return false;
}
}
$param->setValue($param->read($value, $sender));
if(!$param->isValid($param->getValue(), $sender)){
echo "Parameter ".$param->getName()." is invalid".PHP_EOL;
if(!$param->isValid($param->getValue(), $sender)) {
$sender->sendMessage($param->createErrorMessage($sender, $value));
return false;
}
}
Expand Down Expand Up @@ -400,7 +422,25 @@ public function execute(CommandSender $sender, $label, array $args) {
}

try {
$this->perform($sender, $label, $args);
$return = $this->perform($sender, $label, $args);
if(is_string($return)) {
$sender->sendMessage(Localizer::translatable($return));
} elseif(is_array($return)) {
switch (count($return)) {
case 0:
break;
case 1:
$msg = $return[0];
$params = [];
default:
$msg = $return[0];
$params = array_pop($return);
if(!is_array($params)) $params = [$params];
}
if(isset($msg)) {
$sender->sendMessage(Localizer::translatable($msg, $params));
}
}
} catch(\Message $e) {
$sender->sendMessage($e->getMessage());
}
Expand Down
76 changes: 44 additions & 32 deletions src/dominate/parameter/Parameter.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,9 @@

use pocketmine\command\CommandSender;
use pocketmine\Player;

use localizer\Translatable;
use localizer\Localizer;

class Parameter {

Expand All @@ -35,12 +37,12 @@ class Parameter {
const TYPE_NULL = 0x5;

/** @var string[] */
public static $ERROR_MESSAGES = [
self::TYPE_STRING => "parameter.type-string-error",
self::TYPE_INTEGER => "parameter.type-integer-error",
self::TYPE_FLOAT => "parameter.type-float-error",
self::TYPE_BOOLEAN => "parameter.type-boolean-error",
self::TYPE_NULL => "parameter.type-null-error"
public $ERROR_MESSAGES = [
self::TYPE_STRING => "type-string",
self::TYPE_INTEGER => "type-integer",
self::TYPE_FLOAT => "type-float",
self::TYPE_BOOLEAN => "type-boolean",
self::TYPE_NULL => "type-null"
];

const PRIMITIVE_TYPES = [
Expand Down Expand Up @@ -68,10 +70,37 @@ class Parameter {
/** @var mixed */
protected $value;

/** @var string */
protected $permission;

public function __construct(string $name, int $type = null, int $index = null) {
$this->type = $type ?? $this->type;
$this->name = $name;
$this->index = $index ?? $this->index;

$this->setup();
}

/**
* Set error messages and other stuff.
*/
public function setup() {}

public function setPermission(string $permission) : Parameter {
$this->permission = $permission;
return $this;
}

public function getPermission() {
return $this->permission;
}

public function testPermission(CommandSender $sender) {
return $sender->hasPermission($this->getPermission());
}

public function isPermissionSet() : bool {
return $this->permission !== null;
}

public function getIndex() : int {
Expand Down Expand Up @@ -174,19 +203,15 @@ public function getTemplate(CommandSender $sender = null) {
}

public function createErrorMessage(CommandSender $sender, string $value) : Translatable {
if(isset(self::$ERROR_MESSAGES[$this->type])) {
return new Translatable(self::$ERROR_MESSAGES[$this->type], [
"sender" => ($sender instanceof Player ? $sender->getDisplayName() : $sender->getName()),
"value" => $value,
"n" => $this->getIndex() + 1 // Must make this readable, not everyone can program
]);
} else {
return new Translatable("argument.generic-error", [
"sender" => ($sender instanceof Player ? $sender->getDisplayName() : $sender->getName()),
"value" => $value,
"n" => $this->getIndex() + 1
]);
$error = $this->ERROR_MESSAGES;
if(is_array($error)) {
$error = $this->ERROR_MESSAGES[$this->type] ?? "generic-error";
}
return Localizer::translatable("".$error, [
"sender" => ($sender instanceof Player ? $sender->getDisplayName() : $sender->getName()),
"value" => $value,
"n" => $this->getIndex() + 1
]);
}

public function isPrimitive() : bool {
Expand All @@ -204,15 +229,6 @@ public function isPrimitive() : bool {
* @return mixed
*/
public function read(string $input, CommandSender $sender = null) {
$silent = $sender ? false : true;
if($this->isPrimitive()) {
if(!$this->isValid($input, $sender)) {
if(!$silent) {
$sender->sendMessage($this->createErrorMessage($sender, $input));
}
return null;
}
}
switch ($this->type) {
case self::TYPE_STRING:
return (string) $input;
Expand All @@ -236,12 +252,8 @@ public function read(string $input, CommandSender $sender = null) {
return null;
}
default:
break;
}
if(!$silent) {
$sender->sendMessage($this->createErrorMessage($sender, $input));
return null;
}
return null;
}

public function isValid($input, CommandSender $sender = null) : bool {
Expand Down

4 comments on commit bf79b71

@TheDiamondYT1
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are you @PrimusLV?

@Kris-Driv
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes

@TheDiamondYT1
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why the change

@Kris-Driv
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I wanted a fresh start and username included my country code which I added in case I found someone from my country doing what I do. And I didn't.

Please sign in to comment.