By continuing to use this site, you agree to the Terms of Service of this website, including usage of cookies.
OK, Don't show this again
An ultimate Permission Management plugin for PocketMine-MP
✅ Sistema de Permisos Contextual — Permisos que varían según el mundo o gamemode
✅ Grupos con Jerarquía — Herencia lineal con detección de ciclos
✅ Rangos Temporales — Expiración automática de permisos y rangos
✅ Múltiples Rangos por Jugador — Combinación de varios grupos
✅ Chat Formatter Personalizado — Prefijos, sufijos y colores dinámicos
✅ 4 Backends de Almacenamiento — YAML, JSON, SQLite, MySQL
✅ Eventos de Expiración — RankExpireEvent, PermissionExpireEvent, GroupPermExpireEvent
✅ Wildcard Support — Permisos con comodines (essentials.*) y negación específica
✅ Metadata Personalizada — Key-value libre para extensibilidad
✅ API Pública — Integración fácil con otros plugins
plugins/
config.yml automáticamente/uperms
# ── Chat & Display ────────────────────────────────────────────────────
# Placeholders: {prefix} {suffix} {name} {displayname}
# {message} {group} {group_display} {chat_color}
chat:
enabled: true
format: "{prefix}{name}{suffix}§r: {chat_color}{message}"
nametag:
enabled: true
format: "{prefix}{name}{suffix}"
displayName:
enabled: true
locale: en_US
# ── Storage ──────────────────────────────────────────────────────────
storage:
# Opciones: yaml | json | sqlite | mysql
type: json
# Solo necesario si type: mysql
mysql:
host: 127.0.0.1
port: 3306
user: root
password: ""
database: ultimatepermsJSON (por defecto)
storage:
type: jsonMySQL (recomendado para servidores grandes)
storage:
type: mysql
mysql:
host: tu-servidor.com
port: 3306
user: ultimateperms
password: tu-contraseña
database: ultimateperms# Información del jugador
/uperms user <jugador> info
# Gestión de rangos
/uperms user <jugador> group set <grupo> [duración] # Reemplaza todos los rangos
/uperms user <jugador> group add <grupo> [duración] # Agrega rango adicional
/uperms user <jugador> group remove <grupo> # Quita un rango
# Permisos personales (overrides)
/uperms user <jugador> perm set <nodo> [true|false] [duración] [ctx=valor...]
/uperms user <jugador> perm unset <nodo>
/uperms user <jugador> perm check <nodo>
# Auditoría de permisos resueltos
/uperms user <jugador> audit [página]
# Prefix / Suffix personal
/uperms user <jugador> prefix set <texto>
/uperms user <jugador> prefix unset
/uperms user <jugador> prefix get
/uperms user <jugador> suffix set <texto>
/uperms user <jugador> suffix unset
/uperms user <jugador> suffix get
# Metadata
/uperms user <jugador> meta set <clave> <valor>
/uperms user <jugador> meta unset <clave>
/uperms user <jugador> meta get <clave># Listar todos los grupos (ordenados por weight)
/uperms group list
# Crear / info / eliminar / clonar
/uperms group <nombre> create [displayName] [weight]
/uperms group <nombre> info
/uperms group <nombre> delete [confirm]
/uperms group <nombre> clone <nuevoId> [displayName]
# Permisos del grupo
/uperms group <nombre> perm set <nodo> [true|false] [duración] [ctx=valor...]
/uperms group <nombre> perm unset <nodo>
/uperms group <nombre> perm list [página]
# Herencia (un solo padre por grupo)
/uperms group <nombre> parent set <grupoPadre>
/uperms group <nombre> parent unset
# Display
/uperms group <nombre> setweight <número>
/uperms group <nombre> setprefix <texto>
/uperms group <nombre> setsuffix <texto>
# Metadata
/uperms group <nombre> meta set <clave> <valor>
/uperms group <nombre> meta unset <clave>
/uperms group <nombre> meta get <clave># Verificar origen de un permiso con trazabilidad
/uperms check <jugador> <permiso>
# Simular permiso con contexto personalizado (sin aplicar)
/uperms simulate <jugador> <permiso> [ctx=valor...]
# alias: /uperms sim
# Listar permisos registrados por un plugin
/uperms inspect <nombrePlugin>
# Recargar config.yml y recalcular permisos de todos los jugadores online
/uperms reload
# Abrir interfaz gráfica (experimental)
/uperms ui| Sufijo | Unidad | Ejemplo |
|---|---|---|
Y |
Años | 1Y |
M |
Meses | 2M |
w |
Semanas | 3w |
d |
Días | 7d |
h |
Horas | 24h |
m |
Minutos | 30m |
s |
Segundos | 3600s |
Se pueden combinar: 1d12h = 36 horas. Omitir duración = permanente.
# Crear rango YouTuber
/uperms group youtuber create "§c§lYouTuber" 65
# Establecer herencia
/uperms group youtuber parent set vip
# Agregar permisos
/uperms group youtuber perm set essentials.fly true
# Prohibir fly solo en PvP
/uperms group youtuber perm set essentials.fly false world=pvp
# Asignar a jugador permanente (reemplaza rangos anteriores)
/uperms user John group set youtuber
# Asignar temporalmente 7 días (sin reemplazar)
/uperms user John group add youtuber 7d
# Verificar origen de un permiso
/uperms check John essentials.fly
# Simular en otro contexto
/uperms simulate John essentials.fly world=pvpEl plugin resuelve permisos en este orden de prioridad:
essentials.* cubre essentials.fly, essentials.nick, etc.Los permisos pueden condicionarse a contextos. Los contextos disponibles son world y gamemode, calculados automáticamente cuando el jugador cambia de mundo o modo de juego.
# Permiso global (sin contexto = siempre aplica)
/uperms group vip perm set essentials.fly true
# Solo en mundo específico
/uperms group vip perm set essentials.fly true world=creative
# Solo en gamemode específico
/uperms group vip perm set essentials.nick true gamemode=survival
# Negación en contexto (sobreescribe herencia)
/uperms group vip perm set essentials.fly false world=pvp
# Múltiples contextos en un mismo nodo
/uperms user John perm set mycommand.use true world=spawn gamemode=survival# Otorgar todos los permisos bajo essentials
/uperms group admin perm set essentials.* true
# Negar uno específico dentro del wildcard
/uperms group admin perm set essentials.ban false
# Resultado: tiene todo de essentials EXCEPTO essentials.ban/uperms group youtuber create "§c§lYouTuber" 65Parámetros:
youtuber — ID único e inmutable del grupo (lowercase)"§c§lYouTuber" — Nombre mostrado (soporta códigos de color §)65 — Weight: mayor = más prioritario en resolución y para el prefijo visibleCada grupo puede tener un único padre. La herencia es lineal y el plugin detecta y bloquea ciclos automáticamente:
default (weight=0)
↑
vip (weight=30)
↑
youtuber (weight=65)
↑
admin (weight=100)
# Establecer padre
/uperms group youtuber parent set vip
# Quitar herencia
/uperms group youtuber parent unsetProtecciones automáticas:
Un jugador puede tener varios rangos simultáneamente:
/uperms user John group set vip # Asigna vip, elimina otros rangos
/uperms user John group add helper 7d # Agrega helper temporal, mantiene vip
# Permisos = unión de todos los grupos + overrides personales
# Prefijo = del grupo con mayor weight/uperms group youtuber setprefix "§7[§c§lYT§7] §f"
/uperms group youtuber setsuffix " §c♦"
# Override personal para un jugador específico
/uperms user John prefix set "§b[CUSTOM] "
/uperms user John suffix set " §b⭐"
# Volver al prefijo del grupo
/uperms user John prefix unset| Placeholder | Valor |
|---|---|
{prefix} |
Prefijo resuelto (personal > grupo primario > herencia) |
{suffix} |
Sufijo resuelto (misma lógica) |
{name} |
Nombre del jugador |
{displayname} |
Display name actual (nametag) |
{message} |
Mensaje del chat |
{group} |
ID del grupo primario |
{group_display} |
DisplayName del grupo primario |
{chat_color} |
Meta chat-color (personal > grupo) |
| Tipo | Descripción | Recomendado para |
|---|---|---|
json |
Un archivo JSON por jugador, grupos en un archivo separado | Inicio, desarrollo |
yaml |
Equivalente en formato YAML | Desarrollo |
sqlite |
Base de datos SQLite local | Servidores medianos |
mysql |
Base de datos MySQL remota | Servidores grandes |
Setup MySQL:
CREATE DATABASE ultimateperms;
CREATE USER 'ultimateperms'@'localhost' IDENTIFIED BY 'contraseña';
GRANT ALL PRIVILEGES ON ultimateperms.* TO 'ultimateperms'@'localhost';
FLUSH PRIVILEGES;Otros plugins pueden acceder a UltimatePerms declarando la dependencia en plugin.yml:
depend:
- UltimatePermsuse appgallery\uperms\Loader;
$loader = Loader::getInstance();
$sessionManager = $loader->getSessionManager();
$groupManager = $loader->getGroupManager();
$storage = $loader->getStorage();Nota: Los métodos de sesión solo funcionan con jugadores online.
// Por nombre de jugador
$session = $sessionManager->getByName("PlayerName");
// Por XUID
$session = $sessionManager->get($player->getXuid());
if ($session !== null) {
// Verificar permiso (usa el caché resuelto)
$session->hasPermission("essentials.fly");
// Obtener rangos: [groupId => expiresAt|null]
$groups = $session->getGroups();
// Rango primario (mayor weight)
$primary = $sessionManager->getPrimaryGroup($session); // Group|null
// Prefix / suffix actuales
$prefix = $session->getPrefix();
$suffix = $session->getSuffix();
// Metadata
$value = $session->getMeta("max-homes");
// Contexto actual
$context = $session->getContext(); // ["world" => "...", "gamemode" => "..."]
// Todos los permisos resueltos
$all = $session->getResolvedPermissions(); // [permission => bool]
}// Asignar rango — elimina todos los rangos anteriores excepto el default
$sessionManager->setGroup($player, "vip");
// Asignar temporal
$expiresAt = time() + 7 * 86400; // 7 días
$sessionManager->setGroup($player, "vip", $expiresAt);
// Agregar rango sin reemplazar otros
$sessionManager->addGroup($player, "event-bonus", $expiresAt);
// Quitar rango (si el jugador se queda sin rangos, se asigna el grupo default)
$sessionManager->removeGroup($player, "event-bonus");use appgallery\uperms\permission\node\Node;
// Permiso permanente
$node = new Node(permission: "essentials.fly", state: true);
$sessionManager->addNode($player, $node);
// Permiso temporal con contexto
$node = new Node(
permission: "mycommand.use",
state: true,
expiresAt: time() + 86400, // 1 día
context: ["world" => "spawn"],
);
$sessionManager->addNode($player, $node);
// Quitar override personal
$sessionManager->removeNode($player, "essentials.fly");$group = $groupManager->get("youtuber"); // Group|null
if ($group !== null) {
$group->getId(); // "youtuber"
$group->getDisplayName(); // "§c§lYouTuber"
$group->getWeight(); // 65
$group->getParent(); // "vip" | null
$group->getPrefix(); // "§7[§c§lYT§7] §f"
$group->getSuffix(); // " §c♦"
$group->getMetaValue("max-homes"); // string|null
$group->getNodes(); // Node[]
}
// Grupo por defecto
$default = $groupManager->getDefault(); // siempre existe| Clase | Cuándo se dispara |
|---|---|
appgallery\uperms\event\GroupExpireEvent |
Un rango temporal de un jugador expira |
appgallery\uperms\event\PermissionExpireEvent |
Un nodo personal temporal de un jugador expira |
appgallery\uperms\event\GroupPermExpireEvent |
Un nodo temporal de un grupo expira |
use appgallery\uperms\event\GroupExpireEvent;
use appgallery\uperms\event\PermissionExpireEvent;
use appgallery\uperms\event\GroupPermExpireEvent;
use pocketmine\event\Listener;
class MyListener implements Listener {
// Cuando expira el rango de un jugador
public function onGroupExpire(GroupExpireEvent $event): void {
$player = $event->getPlayer();
$groupId = $event->getGroupId();
$player->sendMessage("§cTu rango $groupId ha expirado.");
}
// Cuando expira un permiso personal de un jugador
public function onPermExpire(PermissionExpireEvent $event): void {
$player = $event->getPlayer();
$node = $event->getNode(); // Node
$permission = $event->getPermission(); // string
}
// Cuando expira un nodo temporal en un grupo
public function onGroupPermExpire(GroupPermExpireEvent $event): void {
$group = $event->getGroup(); // Group
$node = $event->getNode(); // Node
$permission = $event->getPermission(); // string
}
}Todos los permisos tienen default: op.
| Nodo | Descripción |
|---|---|
ultimateperms.admin |
Acceso total al plugin |
ultimateperms.notify.expire |
Recibir notificaciones cuando expiran permisos o rangos |
ultimateperms.command |
Acceso a la ayuda general |
ultimateperms.command.check |
Verificar permisos de jugadores |
ultimateperms.command.inspect |
Inspeccionar permisos de plugins |
ultimateperms.command.reload |
Recargar configuración |
ultimateperms.command.simulate |
Simular permisos con contexto |
ultimateperms.command.ui |
Interfaz gráfica (experimental) |
ultimateperms.command.group |
Comandos de gestión de grupos |
ultimateperms.command.group.create |
Crear grupos |
ultimateperms.command.group.delete |
Eliminar grupos |
ultimateperms.command.group.info |
Ver información de grupos |
ultimateperms.command.group.edit |
Editar grupos |
ultimateperms.command.user |
Comandos de gestión de usuarios |
ultimateperms.command.user.audit |
Ver auditoría de permisos |
ultimateperms.command.user.info |
Ver información de jugadores |
ultimateperms.command.user.perm |
Gestionar overrides personales |
ultimateperms.command.user.meta |
Gestionar metadata de jugadores |
ultimateperms.command.user.group |
Asignar/quitar rangos a jugadores |
Desarrollado por AppGallery
You can leave one review per plugin release, and delete or update your review at any time