Generation

generate functionWed, 08 Jan 2025

tengo un servidor de minecraft bedrock, pocketmine, quiero agregar un comando /rango que al usarlo te otorgue un rango en especifico, dentro del servidor, durante "x" tiempo

Para agregar un comando `/rango` que otorgue un rango específico durante un tiempo determinado en un servidor de Minecraft Bedrock con PocketMine, necesitarás crear un plugin personalizado. Aquí te muestro un ejemplo de cómo podrías hacerlo: **Crear un plugin** 1. Crea un nuevo archivo PHP en la carpeta `plugins` de tu servidor de Minecraft Bedrock. Por ejemplo, puedes llamarlo `rangos.php`. 2. Agrega el siguiente código al archivo `rangos.php`: ```php <?php use pocketmine\plugin\PluginBase; use pocketmine\command\CommandSender; use pocketmine\command\Command; use pocketmine\player\Player; use pocketmine\utils\TextFormat; class RangosPlugin extends PluginBase { private $rangos = [ "rango1" => [ "nombre" => "Rango 1", "permisos" => ["rango1.permiso1", "rango1.permiso2"], "tiempo" => 600 // 10 minutos ], "rango2" => [ "nombre" => "Rango 2", "permisos" => ["rango2.permiso1", "rango2.permiso2"], "tiempo" => 1800 // 30 minutos ] ]; public function onEnable() { $this->getServer()->getCommandMap()->register("rangos", new RangosCommand($this)); } public function onCommand(CommandSender $sender, Command $command, string $label, array $args) { if ($command->getName() === "rangos") { $this->handleRangosCommand($sender, $args); } } private function handleRangosCommand(CommandSender $sender, array $args) { if (count($args) < 1) { $sender->sendMessage(TextFormat::RED . "Uso: /rangos <rango>"); return; } $rango = $args[0]; if (!isset($this->rangos[$rango])) { $sender->sendMessage(TextFormat::RED . "Rango no encontrado"); return; } $rangos = $this->rangos[$rango]; $sender->sendMessage(TextFormat::GREEN . "Has obtenido el rango " . $rangos["nombre"]); // Agregar permisos al jugador foreach ($rangos["permisos"] as $permiso) { $sender->addPermission($permiso); } // Establecer tiempo de duración del rango $sender->setMetadata("rangos." . $rango, [ "tiempo" => $rangos["tiempo"], "inicio" => time() ]); } public function onPlayerMetadataChange(Player $player, string $metadata, mixed $value) { if ($metadata === "rangos") { $rangos = $value; if (isset($rangos["tiempo"]) && isset($rangos["inicio"])) { $tiempoRestante = $rangos["tiempo"] - (time() - $rangos["inicio"]); if ($tiempoRestante <= 0) { // Quitar permisos al jugador foreach ($this->rangos[$rangos["rango"]]["permisos"] as $permiso) { $player->removePermission($permiso); } // Eliminar metadata $player->removeMetadata("rangos." . $rangos["rango"], $this); } else { // Actualizar metadata $player->setMetadata("rangos." . $rangos["rango"], [ "tiempo" => $tiempoRestante, "inicio" => $rangos["inicio"] ]); } } } } } class RangosCommand extends Command { private $plugin; public function __construct(RangosPlugin $plugin) { parent::__construct("rangos", "Obtener un rango", "/rangos <rango>"); $this->plugin = $plugin; } public function execute(CommandSender $sender, array $args) { $this->plugin->onCommand($sender, $this, $this->getName(), $args); } } ``` **Explicación del código** Este código crea un plugin que registra un comando `/rangos` que acepta un argumento `rango`. Cuando se ejecuta el comando, el plugin verifica si el rango existe y, si es así, agrega los permisos correspondientes al jugador y establece un tiempo de duración para el rango. El plugin también utiliza la función `onPlayerMetadataChange` para verificar si el jugador aún tiene permisos para el rango. Si el tiempo de duración ha expirado, el plugin quita los permisos correspondientes al jugador. **Uso del comando** Para utilizar el comando `/rangos`, simplemente ejecuta el comando en el chat del servidor, seguido del nombre del rango que deseas obtener. Por ejemplo: ``` /rangos rango1 ``` **Notas** * Asegúrate de que el plugin esté habilitado en el servidor de Minecraft Bedrock. * Asegúrate de que los permisos estén configurados correctamente en el servidor. * Puedes agregar más rangos y permisos a la matriz `$rangos` en el plugin. * Puedes personalizar el comportamiento del plugin según tus necesidades.

Want to kickstart your project?Use the new AI Studio to create your code