agentsclimarketplace

Generate permission system

Skill MrPippi/MJP-Claude-Skills/.cursor/skills/generate-permission-system

Minecraft Java Plugin Claude Skills

Install
npx -y skills add MrPippi/MJP-Claude-Skills --skill generate-permission-system

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its author says it does

Copied from the file, not written here

依使用者提供的權限節點清單,產生完整的 Bukkit PermissionManager 工具類別、plugin.yml permissions 區段宣告,含繼承樹設計、預設值設定、OP 判斷。當使用者說「幫我建立權限系統」、「PermissionManager」、「permission node」、「權限節點」時自動應用。

SKILL.md

5.0 KB, as published. Nobody here has run it

Generate Permission System Skill

目標

依使用者提供的插件名稱與權限節點清單,自動產生:

  • PermissionManager.java 工具類別(靜態方法封裝)
  • plugin.ymlpermissions: 區段(含描述、default、children 繼承)

使用流程

  1. 詢問基本資訊:插件名稱、權限節點清單、預設是否僅 OP 可用
  2. 推導節點樹:自動生成根萬用節點 pluginid.*,將所有節點列為 children
  3. 產生 plugin.yml permissions 區段(YAML)
  4. 產生 PermissionManager.java(靜態工具類,含每個節點的常數與便捷方法)
  5. 說明如何在主類與指令中調用

輸入參數說明

參數說明範例
plugin_name插件名稱(CamelCase)MyPlugin
permission_nodes權限節點清單(可含子節點)myplugin.admin, myplugin.use
default_op_only預設是否僅 OP 可用(true/false)true

代碼範本

1. plugin.yml permissions 區段

permissions:
  myplugin.*:
    description: MyPlugin 所有權限
    default: op
    children:
      myplugin.admin: true
      myplugin.use: true

  myplugin.admin:
    description: MyPlugin 管理員權限
    default: op

  myplugin.use:
    description: MyPlugin 一般使用權限
    default: true

規則:

  • 根節點(pluginid.*)使用 children 聚合所有子節點
  • default 值:op(僅 OP)、true(所有人)、false(無人)、not op(非 OP)
  • default_op_only 決定葉節點預設值

2. PermissionManager.java

package com.example.myplugin.manager;

import org.bukkit.entity.Player;
import org.bukkit.permissions.Permission;
import org.bukkit.permissions.PermissionDefault;
import org.bukkit.plugin.PluginManager;

/**
 * MyPlugin 權限管理工具類別
 * 所有節點已在 plugin.yml 宣告,此類提供便捷的檢查方法。
 */
public final class PermissionManager {

    // 權限節點常數
    public static final String PERM_ALL   = "myplugin.*";
    public static final String PERM_ADMIN = "myplugin.admin";
    public static final String PERM_USE   = "myplugin.use";

    private PermissionManager() {}

    /** 檢查玩家是否擁有指定節點 */
    public static boolean has(Player player, String node) {
        return player.hasPermission(node);
    }

    /** 檢查玩家是否為管理員 */
    public static boolean isAdmin(Player player) {
        return player.hasPermission(PERM_ADMIN);
    }

    /** 檢查玩家是否可使用基本功能 */
    public static boolean canUse(Player player) {
        return player.hasPermission(PERM_USE);
    }

    /**
     * 在 plugin.yml 未宣告時,於執行期動態注冊權限(補救方案,一般不需要)。
     * 建議優先在 plugin.yml 宣告。
     */
    public static void registerDynamic(PluginManager pm) {
        Permission all = new Permission(PERM_ALL, "MyPlugin 所有權限", PermissionDefault.OP);
        safeRegister(pm, all);

        Permission admin = new Permission(PERM_ADMIN, "MyPlugin 管理員權限", PermissionDefault.OP);
        safeRegister(pm, admin);

        Permission use = new Permission(PERM_USE, "MyPlugin 一般使用權限", PermissionDefault.TRUE);
        safeRegister(pm, use);
    }

    private static void safeRegister(PluginManager pm, Permission perm) {
        try {
            pm.addPermission(perm);
        } catch (IllegalArgumentException ignored) {
            // 已存在,忽略
        }
    }
}

在主類中使用

// onEnable()
// 若需要動態注冊(通常不需要,plugin.yml 已宣告):
// PermissionManager.registerDynamic(getServer().getPluginManager());

// 在 CommandExecutor 中檢查:
if (!PermissionManager.isAdmin(player)) {
    player.sendMessage("§c你沒有執行此指令的權限。");
    return true;
}

常見錯誤與修正

錯誤原因修正
hasPermission() 永遠回傳 falseplugin.yml 未宣告該權限節點permissions: 區段加入對應節點
OP 玩家沒有子節點權限根節點 default: op 但子節點未列入 children確認根節點 children 包含所有子節點
default: true 設定沒效果伺服器權限插件(如 LuckPerms)覆蓋了預設值在權限插件中手動設定或使用 isOp() 作為備援
動態注冊拋出 IllegalArgumentException該節點名稱已被另一個插件注冊使用 safeRegister() 包裝忽略重複注冊的例外
節點名稱大小寫不符Bukkit 權限節點大小寫敏感統一使用全小寫,並在 hasPermission() 前不做大小寫轉換

Keep looking

Skills are one crate of 328,083. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.