Banner

PocketMine School

Tutorial Completo: Cómo Crear Plugins para PocketMine 5.0.0

  1. Introducción
  2. Preparativos
  3. Estructura Básica de un Plugin
  4. Primer Plugin: Hola Mundo
  5. Comandos Personalizados
  6. Eventos y Listeners
  7. Configuración del Plugin
  8. Pruebas y Depuración
  9. Publicación del Plugin
  10. Recursos Adicionales

Introducción

PocketMine-MP es un software de servidor para Minecraft: Bedrock Edition, desarrollado en PHP. Este tutorial te guiará paso a paso en la creación de plugins para PocketMine 5.0.0 y versiones posteriores.

Preparativos

Requisitos

Instalación de PocketMine-MP

  1. Descarga la última versión de PocketMine-MP desde el sitio oficial.
  2. Sigue las instrucciones para instalar PocketMine en tu sistema operativo.

Estructura Básica de un Plugin

Un plugin de PocketMine-MP consta de varios archivos, pero el más importante es plugin.yml, que describe el plugin, y el archivo PHP que contiene la lógica del plugin.

Estructura de Carpetas

MyFirstPlugin/
├── src/
│ └── MyFirstPlugin/
│ └── Main.php
└── plugin.yml
view raw cmd hosted with ❤ by GitHub

Primer Plugin: Hola Mundo

Archivo plugin.yml

name: MyFirstPlugin
icon: icon.png
main: MyFirstPlugin\Main
version: 1.0.0
api: 5.0.0
author: TuNombre
description: Mi primer plugin para PocketMine-MP 5.0.0
view raw plugin.yml hosted with ❤ by GitHub

Archivo Main.php

<?php
namespace MyFirstPlugin;
use pocketmine\plugin\PluginBase;
class Main extends PluginBase {
public function onEnable(): void {
$this->getLogger()->info("¡Hola, mundo! Mi primer plugin ha sido habilitado.");
}
}
view raw Main.php hosted with ❤ by GitHub

Comandos Personalizados

Para añadir comandos personalizados, se debe definir en plugin.yml y crear la lógica en el archivo PHP.

Modificación de plugin.yml

commands:
hello:
description: Saluda al jugador
usage: "/hello"
view raw plugin.yml hosted with ❤ by GitHub

Modificación de Main.php

<?php
namespace MyFirstPlugin;
use pocketmine\plugin\PluginBase;
use pocketmine\command\Command;
use pocketmine\command\CommandSender;
use pocketmine\player\Player;
class Main extends PluginBase {
public function onEnable(): void {
$this->getLogger()->info("¡Hola, mundo! Mi primer plugin ha sido habilitado.");
}
public function onCommand(CommandSender $sender, Command $command, string $label, array $args): bool {
if ($command->getName() === "hello") {
if ($sender instanceof Player) {
$sender->sendMessage("¡Hola, " . $sender->getName() . "!");
return true;
} else {
$sender->sendMessage("Este comando solo puede ser usado en el juego.");
return false;
}
}
return false;
}
}
view raw Main.php hosted with ❤ by GitHub

Eventos y Listeners

Los eventos permiten a los plugins reaccionar a ciertas acciones dentro del servidor.

Ejemplo: Listener de Evento

<?php
namespace MyFirstPlugin;
use pocketmine\plugin\PluginBase;
use pocketmine\event\Listener;
use pocketmine\event\player\PlayerJoinEvent;
class Main extends PluginBase implements Listener {
public function onEnable(): void {
$this->getLogger()->info("¡Hola, mundo! Mi primer plugin ha sido habilitado.");
$this->getServer()->getPluginManager()->registerEvents($this, $this);
}
public function onPlayerJoin(PlayerJoinEvent $event): void {
$player = $event->getPlayer();
$player->sendMessage("¡Bienvenido, " . $player->getName() . " al servidor!");
}
}
view raw Main.php hosted with ❤ by GitHub

Configuración del Plugin

Para permitir la configuración de plugins, se puede crear un archivo config.yml.

Archivo config.yml

mensaje_bienvenida: "¡Bienvenido al servidor, %player%!"
view raw config.yml hosted with ❤ by GitHub

Modificación de Main.php

<?php
namespace MyFirstPlugin;
use pocketmine\plugin\PluginBase;
use pocketmine\event\Listener;
use pocketmine\event\player\PlayerJoinEvent;
class Main extends PluginBase implements Listener {
public function onEnable(): void {
$this->saveDefaultConfig();
$this->getLogger()->info("¡Hola, mundo! Mi primer plugin ha sido habilitado.");
$this->getServer()->getPluginManager()->registerEvents($this, $this);
}
public function onPlayerJoin(PlayerJoinEvent $event): void {
$player = $event->getPlayer();
$message = str_replace("%player%", $player->getName(), $this->getConfig()->get("mensaje_bienvenida"));
$player->sendMessage($message);
}
}
view raw Main.php hosted with ❤ by GitHub

Pruebas y Depuración

Publicación del Plugin

Recursos Adicionales