Advertisement
Guest User

Untitled

a guest
Jan 25th, 2020
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.68 KB | None | 0 0
  1. <?php
  2.  
  3. namespace jkorn\pvpcore\commands;
  4.  
  5.  
  6. use jkorn\pvpcore\commands\parameters\Parameter;
  7. use jkorn\pvpcore\commands\parameters\SimpleParameter;
  8. use jkorn\pvpcore\commands\parameters\BaseParameter;
  9. use jkorn\pvpcore\PvPCore;
  10. use pocketmine\command\CommandSender;
  11. use pocketmine\utils\TextFormat;
  12.  
  13. class PvPCommand extends BaseCommand
  14. {
  15.  
  16. /**
  17. * PvPCommand constructor.
  18. */
  19. public function __construct()
  20. {
  21. parent::__construct("pvp", "The base command of PvPCore.", "/pvp help");
  22.  
  23. $param = new SimpleParameter(Parameter::NO_PERMISSION, "knockback|attackdelay", Parameter::PARAMTYPE_STRING);
  24. $param = $param->setExactValues(true);
  25.  
  26. $params = array(
  27. 0 => array(
  28. new BaseParameter("help", parent::getPermission(), "See all pvp commands.", true)
  29. ),
  30.  
  31. 1 => array(
  32. new BaseParameter("set", parent::getPermission(), "Configures the knockback settings of a level.", true),
  33. new SimpleParameter(Parameter::NO_PERMISSION, "level", Parameter::PARAMTYPE_STRING),
  34. $param,
  35. new SimpleParameter(Parameter::NO_PERMISSION, "value", Parameter::PARAMTYPE_ANY)
  36. ),
  37. 2 => array(
  38. new BaseParameter("enable", parent::getPermission(), "Enables custom knockback in the specified level.", true),
  39. new SimpleParameter(Parameter::NO_PERMISSION, "level", Parameter::PARAMTYPE_STRING)
  40. ),
  41. 3 => array(
  42. new BaseParameter("disable", parent::getPermission(), "Disables custom knockback in the specified level"),
  43. new SimpleParameter(Parameter::NO_PERMISSION, "level", Parameter::PARAMTYPE_STRING)
  44. )
  45. );
  46. $this->setParameters($params);
  47. }
  48.  
  49. /**
  50. * @param CommandSender $sender
  51. * @param string $label
  52. * @param array $args
  53. * @return bool|mixed
  54. */
  55. public function execute(CommandSender $sender, string $label, array $args)
  56. {
  57. $msg = null;
  58.  
  59. if (parent::canExecute($sender, $label, $args)) {
  60. $param = $args[0];
  61. switch ($param) {
  62. case "help":
  63. $msg = $this->getFullUsage();
  64. break;
  65. case "set":
  66. $this->executeSetWorld($sender, $args[1], $args[2], $args[3]);
  67. break;
  68. case "enable":
  69. $level = $args[1];
  70. $this->executeCustomKB($sender, $level, true);
  71. break;
  72. case "disable":
  73. $level = $args[1];
  74. $this->executeCustomKB($sender, $level, false);
  75. break;
  76. default:
  77. }
  78. }
  79. if ($msg !== null) {
  80. $sender->sendMessage($msg);
  81. }
  82. return true;
  83. }
  84.  
  85. /**
  86. * @param CommandSender $sender
  87. * @param string $level
  88. * @param bool $enable
  89. */
  90. protected function executeCustomKB(CommandSender $sender, string $level, bool $enable): void
  91. {
  92. $msg = null;
  93.  
  94. $worldManager = PvPCore::getWorldHandler();
  95.  
  96. if ($worldManager->isWorld($level)) {
  97.  
  98. $world = PvPCore::getWorldHandler()->getWorld($level);
  99.  
  100. $format = $enable ? TextFormat::GREEN : TextFormat::RED;
  101.  
  102. $enabled = $enable ? "enabled" : "disabled";
  103.  
  104. $world = $world->setHasCustomKB($enable);
  105.  
  106. $worldManager->updateWorld($world);
  107.  
  108. $msg = $format . "Custom Knockback has been successfully " . $enabled . "!";
  109.  
  110. } else {
  111. $msg = TextFormat::RED . "Level '$level' does not exist!";
  112. }
  113.  
  114. if ($msg !== null) {
  115.  
  116. $sender->sendMessage($msg);
  117. }
  118. }
  119.  
  120. /**
  121. * @param CommandSender $sender
  122. * @param $level
  123. * @param $setting
  124. * @param $value
  125. */
  126. protected function executeSetWorld(CommandSender $sender, $level, $setting, $value)
  127. {
  128. $msg = null;
  129.  
  130. $worldManager = PvPCore::getWorldHandler();
  131.  
  132. if ($worldManager->isWorld($level)) {
  133.  
  134. $hasUpdated = false;
  135. $updatedVal = "None";
  136.  
  137. switch ($setting) {
  138. case "kb":
  139. case "knockback":
  140. $updatedVal = "knockback";
  141. $value = floatval($value);
  142. break;
  143. case "delay":
  144. case "attackdelay":
  145. $updatedVal = "attack-delay";
  146. $value = intval($value);
  147. break;
  148. default:
  149. }
  150.  
  151. $world = $worldManager->getWorld($level);
  152.  
  153. if ($updatedVal !== "None") {
  154.  
  155. if ($updatedVal === "attack-delay" and PvPCore::canParse($value, true)) {
  156. $world = $world->setAttackDelayTime($value);
  157. $hasUpdated = true;
  158. }
  159. if ($updatedVal === "knockback" and PvPCore::canParse($value, false)) {
  160. $world = $world->setKB($value);
  161. $hasUpdated = true;
  162. }
  163. }
  164.  
  165. if ($hasUpdated === true) {
  166. $worldManager->updateWorld($world);
  167. $msg = TextFormat::GREEN . "The level '{$level}' has been successfully updated!";
  168. } else {
  169. $msg = TextFormat::RED . "The level '{$level}' failed to update!";
  170. }
  171.  
  172. } else $msg = TextFormat::RED . "Level '{$level}' does not exist!";
  173.  
  174. if($msg !== null){
  175. $sender->sendMessage($msg);
  176. }
  177.  
  178. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement