Cara Membuat Menu Form UI | Plugin PocketMine #1
- Pembayaran aman
- Unduh instan
- Garansi 7 hari
Daftar isi

PocketMine-MP adalah software server untuk Minecraft Bedrock Edition, yang bisa dimainkan di Android, iOS, Windows, dan konsol. Kelebihannya, fungsi server bisa ditambah lewat plugin yang ditulis dengan bahasa PHP.
Di artikel ini kita membuat plugin sederhana bernama MenuUI. Saat pemain mengetik /menu, muncul jendela menu (Form UI) berisi judul, deskripsi, dan tombol. Kodenya sudah disesuaikan untuk PocketMine-MP 5, versi yang dipakai server sekarang.
pocketmine\Player sekarang pocketmine\player\Player, dan setiap perintah wajib punya permission. Kode di bawah memakai form bawaan PocketMine, jadi tidak perlu FormAPI.Yang perlu disiapkan
- Server PocketMine-MP 5. Kalau belum punya, ikuti cara membuat server PocketMine gratis.
- Aplikasi code editor, misalnya Acode di Android atau Visual Studio Code di komputer.
Langkah 1: Buat struktur folder
Buat folder dan file seperti di bawah. Nama folder di dalam src harus sama dengan namespace di kode (Rendii09\MenuUI).
MenuUI/
├── plugin.yml
├── resources/
│ └── config.yml
└── src/
└── Rendii09/
└── MenuUI/
├── Main.php
└── MenuForm.php

Rendii09 dengan nama Anda dan MenuUI dengan nama plugin. Kalau diganti, ubah juga nama foldernya, namespace di kedua file PHP, dan baris main di plugin.yml.Langkah 2: Isi plugin.yml
File ini berisi nama plugin, versi API PocketMine, perintah /menu, dan permission-nya. default: true artinya semua pemain boleh memakai perintah ini.
name: MenuUI
version: 1.0.0
main: Rendii09\MenuUI\Main
api: 5.0.0
author: Rendii09
description: "Menu Form UI sederhana untuk PocketMine-MP 5"
permissions:
menuui.command.menu:
description: "Membuka MenuUI"
default: true
commands:
menu:
description: "Membuka MenuUI"
usage: "/menu"
aliases: [menuui]
permission: menuui.command.menu
Langkah 3: Isi config.yml
Semua teks yang tampil di menu disimpan di sini, jadi bisa diubah tanpa menyentuh kode. Tanda § diikuti angka atau huruf dipakai untuk memberi warna, misalnya §e kuning dan §l tebal.
# MenuUI config.
# Gunakan "§" untuk memberi warna, dan "\n" untuk baris baru.
# Pesan yang muncul saat perintah dipakai.
messages:
use_in_game: "§l§7Error: §rGunakan perintah ini di dalam game"
close_plugin: "§l§aMenu! §r§fTerima kasih telah menggunakan"
# Judul dan deskripsi menu.
menu:
title: "§l§eMENU"
description: "§bTuliskan deskripsi tentang MenuUI di sini"
# Nama tombol penutup.
btn:
close: "§lTUTUP"
Langkah 4: Isi Main.php
Kelas utama plugin. Saat plugin aktif, config.yml disalin ke folder data server. Saat pemain mengetik /menu, menu dikirim ke pemain tersebut.
<?php
declare(strict_types=1);
namespace Rendii09\MenuUI;
use pocketmine\command\Command;
use pocketmine\command\CommandSender;
use pocketmine\player\Player;
use pocketmine\plugin\PluginBase;
class Main extends PluginBase {
protected function onEnable(): void {
// Copies resources/config.yml to the plugin's data folder on first run
$this->saveDefaultConfig();
}
public function onCommand(CommandSender $sender, Command $command, string $label, array $args): bool {
if ($command->getName() !== "menu") {
return false;
}
if (!$sender instanceof Player) {
$sender->sendMessage((string) $this->getConfig()->getNested("messages.use_in_game"));
return true;
}
$sender->sendForm(new MenuForm($this));
return true;
}
}
Langkah 5: Isi MenuForm.php
File ini membentuk jendela menunya. jsonSerialize() menentukan isi form, dan handleResponse() menangani tombol yang ditekan. Nilai $data adalah nomor tombol, dimulai dari 0, atau null kalau form ditutup lewat tombol ×.
<?php
declare(strict_types=1);
namespace Rendii09\MenuUI;
use pocketmine\form\Form;
use pocketmine\player\Player;
/**
* A simple form: a title, a description and buttons, read from config.yml.
*/
class MenuForm implements Form {
public function __construct(private Main $plugin) {}
public function jsonSerialize(): array {
$config = $this->plugin->getConfig();
return [
"type" => "form",
"title" => (string) $config->getNested("menu.title"),
"content" => (string) $config->getNested("menu.description"),
"buttons" => [
["text" => (string) $config->getNested("btn.close")]
]
];
}
/**
* @param mixed $data index of the pressed button, or null when the form is closed with X
*/
public function handleResponse(Player $player, $data): void {
if ($data === 0) {
$player->sendMessage((string) $this->plugin->getConfig()->getNested("messages.close_plugin"));
}
}
}
Langkah 6: Jadikan file .phar
PocketMine-MP 5 hanya memuat plugin dalam bentuk file .phar. Pilih salah satu cara:
- Lewat DevTools. Pasang plugin DevTools dari Poggit di server, unggah folder
MenuUIke folderplugins, lalu restart. Setelah itu jalankanmakeplugin MenuUIdi console server. Lokasi file .phar yang dihasilkan ditampilkan di console. - Lewat PHP di komputer. Simpan kode berikut sebagai
build.phpdi samping folderMenuUI, lalu jalankanphp -d phar.readonly=0 build.php.
<?php
// Run from the folder that contains MenuUI/: php -d phar.readonly=0 build.php
$phar = new Phar("MenuUI.phar");
$phar->buildFromDirectory(__DIR__ . "/MenuUI");
$phar->setStub("<?php __HALT_COMPILER();");
echo "MenuUI.phar selesai dibuat\n";
Unggah MenuUI.phar ke folder plugins di server, lalu restart server. Kalau berhasil, console menampilkan tulisan bahwa MenuUI sudah aktif.
Langkah 7: Coba di dalam game
Masuk ke server, lalu ketik /menu di chat. Jendela menu akan muncul. Tekan TUTUP, dan pesan terima kasih dari config.yml muncul di chat.

Menambah tombol
Untuk menambah tombol, tambahkan item di "buttons" pada MenuForm.php. Urutannya menentukan nomor tombol:
"buttons" => [
["text" => "Info Server"],
["text" => (string) $config->getNested("btn.close")]
]
Lalu tangani nomor tombolnya di handleResponse():
public function handleResponse(Player $player, $data): void {
if ($data === 0) {
$player->sendMessage("Selamat datang di server kami!");
} elseif ($data === 1) {
$player->sendMessage((string) $this->plugin->getConfig()->getNested("messages.close_plugin"));
}
}
Kalau menu tidak muncul
- Plugin tidak aktif. Cek console saat server menyala. Pesan error biasanya menyebutkan baris yang salah, misalnya namespace yang tidak cocok dengan nama folder.
- Muncul "Unknown command". Pastikan bagian
commandsdi plugin.yml tertulis rapi dengan spasi, bukan tab. - Versi API tidak cocok. Pastikan server memakai PocketMine-MP 5, sesuai baris
api: 5.0.0.
Penutup
Sekarang Anda punya plugin menu sendiri yang bisa dikembangkan, misalnya tombol teleport, info server, atau daftar aturan. Semua teks tetap bisa diubah lewat config.yml tanpa menyentuh kode.
Komentar 0
Tulis komentar