AuthSystemTutorial

AuthSystemTutorial.java v1.0
AuthSystem专属配套教程插件,提供详细的新手手册和指南
作者: ScriptIrcEngine 需要前置插件

命令列表

  • mloreg打开新手帮助手册
package com.scriptirc.authsystem.tutorial;

import org.bukkit.*;
import org.bukkit.command.*;
import org.bukkit.entity.*;
import org.bukkit.event.*;
import org.bukkit.event.inventory.*;
import org.bukkit.inventory.*;
import org.bukkit.inventory.meta.*;
import org.bukkit.plugin.java.*;
import java.util.*;

/**
 * @pluginName AuthSystemTutorial
 * @author ScriptIrcEngine 需要前置插件 
 * @version 1.0
 * @description AuthSystem专属配套教程插件,提供详细的新手手册和指南
 * [command]mloreg|打开新手帮助手册[/command]
 */
public class AuthSystemTutorial extends JavaPlugin implements Listener {

    @Override
    public void onEnable() {
        getServer().getPluginManager().registerEvents(this, this);
        getLogger().info("§a[AuthSystem教程] 插件已加载!");
    }

    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {
        if (!(sender instanceof Player)) {
            sender.sendMessage("§c该命令只能由玩家执行!");
            return true;
        }
        
        Player player = (Player) sender;
        
        if (cmd.getName().equalsIgnoreCase("mloreg")) {
            openTutorialMenu(player);
            return true;
        }
        return false;
    }

    // 打开教程主菜单
    private void openTutorialMenu(Player player) {
        Inventory menu = Bukkit.createInventory(null, 54, "§6§lAuthSystem 新手帮助手册");
        
        // 添加教程分类
        menu.setItem(10, createTutorialItem(Material.BOOK, "§a§l注册登录教程", 
            "§7点击查看详细注册登录指南",
            "§e包含账号创建、登录流程",
            "§e以及常见问题解决方案"));
        
        menu.setItem(12, createTutorialItem(Material.GOLD_INGOT, "§6§l金钱系统教程", 
            "§7点击查看金钱获取和使用指南",
            "§e包含每日签到、金钱查看",
            "§e以及经济系统详解"));
        
        menu.setItem(14, createTutorialItem(Material.CHEST, "§e§l公共仓库教程", 
            "§7点击查看公共仓库使用指南",
            "§e包含仓库访问、物品存放",
            "§e以及共享机制说明"));
        
        menu.setItem(16, createTutorialItem(Material.REDSTONE, "§c§l生命系统教程", 
            "§7点击查看生命值系统指南",
            "§e包含死亡惩罚、生命购买",
            "§e以及健康管理技巧"));
        
        menu.setItem(28, createTutorialItem(Material.NETHER_STAR, "§b§l公开账号教程", 
            "§7点击查看账号共享指南",
            "§e包含账号公开设置",
            "§e共享登录流程及注意事项"));
        
        menu.setItem(30, createTutorialItem(Material.COMPASS, "§d§l服务器新手手册", 
            "§7点击查看服务器综合指南",
            "§e包含基本规则、常用命令",
            "§e以及生存技巧大全"));
        
        menu.setItem(32, createTutorialItem(Material.WRITABLE_BOOK, "§5§l高级功能指南", 
            "§7点击查看高级功能教程",
            "§e包含账号安全设置",
            "§e数据备份及问题排查"));
        
        menu.setItem(34, createTutorialItem(Material.BARRIER, "§c§l常见问题解答", 
            "§7点击查看常见问题解决方案",
            "§e包含登录失败处理",
            "§e数据丢失恢复等"));
        
        // 添加装饰性物品
        for (int i = 0; i < 9; i++) {
            menu.setItem(i, createGlassPane(15)); // 黑色玻璃板
        }
        
        for (int i = 45; i < 54; i++) {
            menu.setItem(i, createGlassPane(7)); // 灰色玻璃板
        }
        
        menu.setItem(4, createTutorialItem(Material.PAPER, "§f§lAuthSystem v1.0", 
            "§7高级登录注册系统",
            "§e作者: ScriptIrcEngine"));
        
        menu.setItem(49, createTutorialItem(Material.EMERALD, "§a§l关闭菜单", "§7点击关闭帮助手册"));
        
        player.openInventory(menu);
    }

    // 创建教程物品
    private ItemStack createTutorialItem(Material material, String name, String... lore) {
        ItemStack item = new ItemStack(material);
        ItemMeta meta = item.getItemMeta();
        meta.setDisplayName(name);
        
        List<String> loreList = new ArrayList<>();
        for (String line : lore) {
            loreList.add(line);
        }
        meta.setLore(loreList);
        
        item.setItemMeta(meta);
        return item;
    }

    // 创建彩色玻璃板
    private ItemStack createGlassPane(int color) {
        ItemStack glass = new ItemStack(Material.STAINED_GLASS_PANE, 1, (short) color);
        ItemMeta meta = glass.getItemMeta();
        meta.setDisplayName(" ");
        glass.setItemMeta(meta);
        return glass;
    }

    // 处理菜单点击
    @EventHandler
    public void onInventoryClick(InventoryClickEvent event) {
        if (event.getView().getTitle().equals("§6§lAuthSystem 新手帮助手册")) {
            event.setCancelled(true);
            
            if (!(event.getWhoClicked() instanceof Player) || event.getCurrentItem() == null) {
                return;
            }
            
            Player player = (Player) event.getWhoClicked();
            ItemStack clicked = event.getCurrentItem();
            
            if (clicked.getType() == Material.STAINED_GLASS_PANE) {
                return;
            }
            
            if (clicked.getItemMeta().getDisplayName().equals("§a§l关闭菜单")) {
                player.closeInventory();
                return;
            }
            
            // 根据点击的教程项打开详细教程
            switch (event.getRawSlot()) {
                case 10:
                    openLoginTutorial(player);
                    break;
                case 12:
                    openMoneyTutorial(player);
                    break;
                case 14:
                    openChestTutorial(player);
                    break;
                case 16:
                    openHealthTutorial(player);
                    break;
                case 28:
                    openAccountSharingTutorial(player);
                    break;
                case 30:
                    openServerGuide(player);
                    break;
                case 32:
                    openAdvancedFeatures(player);
                    break;
                case 34:
                    openFAQ(player);
                    break;
            }
        }
        // 处理详细教程的返回按钮
        else if (event.getView().getTitle().startsWith("§6§l教程详情")) {
            event.setCancelled(true);
            
            if (event.getCurrentItem() != null && 
                event.getCurrentItem().getType() == Material.ARROW && 
                event.getCurrentItem().getItemMeta().getDisplayName().equals("§a§l返回主菜单")) {
                openTutorialMenu((Player) event.getWhoClicked());
            }
        }
    }

    // 注册登录教程
    private void openLoginTutorial(Player player) {
        Inventory tutorial = Bukkit.createInventory(null, 54, "§6§l教程详情: 注册登录");
        
        // 添加返回按钮
        tutorial.setItem(49, createTutorialItem(Material.ARROW, "§a§l返回主菜单"));
        
        // 添加内容物品
        tutorial.setItem(10, createTutorialItem(Material.SIGN, "§e§l第一步: 账号注册",
            "§71. 输入命令: §f/reg <账号> <密码>",
            "§72. 例如: §f/reg player123 mypassword",
            "§73. 密码长度需在6-16字符之间",
            "§74. 账号名称只能使用字母和数字",
            "§7§o请牢记您的账号密码,丢失将无法找回"));
        
        tutorial.setItem(12, createTutorialItem(Material.REDSTONE_TORCH_ON, "§e§l第二步: 账号登录",
            "§71. 输入命令: §f/login <密码>",
            "§72. 或者简写: §f/l <密码>",
            "§73. 例如: §f/l mypassword",
            "§74. 登录后即可正常游戏",
            "§7§o每次上线都需要重新登录"));
        
        tutorial.setItem(14, createTutorialItem(Material.EYE_OF_ENDER, "§e§l第三步: 账号保护",
            "§71. 不要在公共场所泄露密码",
            "§72. 定期更改密码确保安全",
            "§73. 使用复杂密码组合",
            "§74. 避免使用个人信息作为密码"));
        
        tutorial.setItem(16, createTutorialItem(Material.TRIPWIRE_HOOK, "§e§l常见问题",
            "§7Q: 忘记密码怎么办?",
            "§7A: 请联系服务器管理员重置",
            "",
            "§7Q: 提示账号已登录?",
            "§7A: 请等待5分钟或联系管理员",
            "",
            "§7Q: 登录失败怎么办?",
            "§7A: 检查密码大小写或重新注册"));
        
        tutorial.setItem(28, createTutorialItem(Material.IRON_DOOR, "§e§l安全退出",
            "§71. 正常退出游戏会自动登出",
            "§72. 非正常退出可能导致账号锁定",
            "§73. 锁定后需等待5分钟自动解除",
            "§74. 频繁掉线请联系管理员"));
        
        tutorial.setItem(30, createTutorialItem(Material.WATCH, "§e§l自动登录功能",
            "§71. 高级功能正在开发中",
            "§72. 未来版本将支持自动登录",
            "§73. 自动登录需绑定IP地址",
            "§74. 启用后可在同一设备自动登录"));
        
        tutorial.setItem(32, createTutorialItem(Material.BOOK_AND_QUILL, "§e§l账号管理",
            "§71. 查看账号信息: §f/account info",
            "§72. 修改密码: §f/account changepw <新密码>",
            "§73. 查看登录历史: §f/account history",
            "§74. 账号安全设置: §f/account security"));
        
        // 填充空白
        fillEmptySlots(tutorial);
        
        player.openInventory(tutorial);
    }

    // 金钱系统教程
    private void openMoneyTutorial(Player player) {
        Inventory tutorial = Bukkit.createInventory(null, 54, "§6§l教程详情: 金钱系统");
        tutorial.setItem(49, createTutorialItem(Material.ARROW, "§a§l返回主菜单"));
        
        tutorial.setItem(10, createTutorialItem(Material.SUNFLOWER, "§e§l每日签到",
            "§71. 每天可签到一次获得金币",
            "§72. 输入命令: §f/mnv",
            "§73. 每日奖励: §65金币",
            "§74. 连续签到有额外奖励",
            "§75. 奖励额度随等级提升"));
        
        tutorial.setItem(12, createTutorialItem(Material.GOLD_INGOT, "§e§l查看金钱",
            "§71. 输入命令: §f/mcxg",
            "§72. 显示当前金币数量",
            "§73. 显示最近交易记录",
            "§74. 显示财富排行榜"));
        
        tutorial.setItem(14, createTutorialItem(Material.DIAMOND, "§e§l获取金币",
            "§71. 每日签到获得基础金币",
            "§72. 完成任务获取奖励",
            "§73. 参与活动获得奖金",
            "§74. 玩家间交易获取",
            "§75. 出售物品给商店"));
        
        tutorial.setItem(16, createTutorialItem(Material.EMERALD, "§e§l消费金币",
            "§71. 购买额外生命值",
            "§72. 购买特殊物品",
            "§73. 解锁高级功能",
            "§74. 玩家间交易",
            "§75. 购买领地权限"));
        
        tutorial.setItem(28, createTutorialItem(Material.GOLD_NUGGET, "§e§l经济系统",
            "§71. 服务器使用统一金币系统",
            "§72. 金币可用于所有经济活动",
            "§73. 金币与点券兑换比例1:10",
            "§74. 金币可通过充值获取"));
        
        fillEmptySlots(tutorial);
        player.openInventory(tutorial);
    }

    // 公共仓库教程
    private void openChestTutorial(Player player) {
        Inventory tutorial = Bukkit.createInventory(null, 54, "§6§l教程详情: 公共仓库");
        tutorial.setItem(49, createTutorialItem(Material.ARROW, "§a§l返回主菜单"));
        
        tutorial.setItem(10, createTutorialItem(Material.CHEST, "§e§l访问仓库",
            "§71. 输入命令: §f/gghmkno",
            "§72. 打开全服共享的公共仓库",
            "§73. 仓库容量: 54格",
            "§74. 所有玩家可自由存取"));
        
        tutorial.setItem(12, createTutorialItem(Material.HOPPER, "§e§l使用规则",
            "§71. 取用物品需遵守共享原则",
            "§72. 禁止清空仓库行为",
            "§73. 贵重物品请勿长期存放",
            "§74. 每周三凌晨自动清理"));
        
        tutorial.setItem(14, createTutorialItem(Material.ANVIL, "§e§l物品管理",
            "§71. 左键单击取出物品",
            "§72. 右键单击放入物品",
            "§73. Shift+左键快速移动",
            "§74. 物品分类存放更高效"));
        
        tutorial.setItem(16, createTutorialItem(Material.MAP, "§e§l仓库分区",
            "§71. 左上角: 建筑材料区",
            "§72. 右上角: 食物材料区",
            "§73. 左下角: 工具装备区",
            "§74. 右下角: 稀有物品区",
            "§75. 中部: 临时交换区"));
        
        fillEmptySlots(tutorial);
        player.openInventory(tutorial);
    }

    // 生命系统教程
    private void openHealthTutorial(Player player) {
        Inventory tutorial = Bukkit.createInventory(null, 54, "§6§l教程详情: 生命系统");
        tutorial.setItem(49, createTutorialItem(Material.ARROW, "§a§l返回主菜单"));
        
        tutorial.setItem(10, createTutorialItem(Material.APPLE, "§e§l生命值系统",
            "§71. 初始生命值: 10颗心",
            "§72. 每次死亡减少1颗心",
            "§73. 最低保留1颗心",
            "§74. 生命值影响最大血量"));
        
        tutorial.setItem(12, createTutorialItem(Material.GOLDEN_APPLE, "§e§l购买生命值",
            "§71. 输入命令: §f/nopkmm",
            "§72. 花费3金币购买1颗心",
            "§73. 确认购买后立即生效",
            "§74. 最大可购买至20颗心"));
        
        tutorial.setItem(14, createTutorialItem(Material.SKULL_ITEM, "§e§l死亡惩罚",
            "§71. 每次死亡永久减少1颗心",
            "§72. PVP死亡减少2颗心",
            "§73. 坠落/溺水死亡减少1颗心",
            "§74. BOSS战死亡减少3颗心"));
        
        tutorial.setItem(16, createTutorialItem(Material.POTION, "§e§l恢复技巧",
            "§71. 使用金苹果临时增加血量",
            "§72. 完成成就可获得心之容器",
            "§73. 每月签到满勤奖励1颗心",
            "§74. 参与活动获取心之碎片"));
        
        fillEmptySlots(tutorial);
        player.openInventory(tutorial);
    }

    // 公开账号教程
    private void openAccountSharingTutorial(Player player) {
        Inventory tutorial = Bukkit.createInventory(null, 54, "§6§l教程详情: 账号共享");
        tutorial.setItem(49, createTutorialItem(Material.ARROW, "§a§l返回主菜单"));
        
        tutorial.setItem(10, createTutorialItem(Material.NETHER_STAR, "§e§l公开账号",
            "§71. 输入命令: §f/logim mnb",
            "§72. 设置账号为公开状态",
            "§73. 其他玩家可登录此账号",
            "§74. 公开后请及时修改密码"));
        
        tutorial.setItem(12, createTutorialItem(Material.ENDER_PEARL, "§e§l登录公开账号",
            "§71. 输入命令: §f/login <账号> <密码>",
            "§72. 例如: §f/login friend123 password",
            "§73. 登录后获得账号所有物品",
            "§74. 登录后继承账号位置"));
        
        tutorial.setItem(14, createTutorialItem(Material.BEACON, "§e§l账号安全",
            "§71. 仅共享给信任的玩家",
            "§72. 共享后及时关闭公开状态",
            "§73. 定期检查账号登录记录",
            "§74. 发现异常立即修改密码"));
        
        tutorial.setItem(16, createTutorialItem(Material.HOPPER_MINECART, "§e§l数据同步",
            "§71. 登录时自动同步背包物品",
            "§72. 登录时自动传送至最后位置",
            "§73. 金钱和经验值实时同步",
            "§74. 成就和进度完全共享"));
        
        fillEmptySlots(tutorial);
        player.openInventory(tutorial);
    }

    // 服务器新手手册
    private void openServerGuide(Player player) {
        Inventory tutorial = Bukkit.createInventory(null, 54, "§6§l教程详情: 服务器指南");
        tutorial.setItem(49, createTutorialItem(Material.ARROW, "§a§l返回主菜单"));
        
        tutorial.setItem(10, createTutorialItem(Material.COMPASS, "§e§l基本规则",
            "§71. 禁止使用任何作弊工具",
            "§72. 尊重其他玩家,禁止辱骂",
            "§73. 禁止恶意破坏他人建筑",
            "§74. 禁止利用游戏漏洞获利",
            "§75. 交易需遵守公平原则"));
        
        tutorial.setItem(12, createTutorialItem(Material.DIAMOND_PICKAXE, "§e§l生存指南",
            "§71. 初期优先收集木材和食物",
            "§72. 尽快制作床设置重生点",
            "§73. 挖掘时保持火把照明",
            "§74. 建立农场保证食物供应",
            "§75. 矿洞探索做好充分准备"));
        
        tutorial.setItem(14, createTutorialItem(Material.BOOKSHELF, "§e§l常用命令",
            "§7/sethome - 设置家",
            "§7/home - 传送回家",
            "§7/tpa <玩家> - 请求传送",
            "§7/spawn - 返回出生点",
            "§7/back - 返回死亡点",
            "§7/msg <玩家> - 私聊"));
        
        tutorial.setItem(16, createTutorialItem(Material.ENCHANTED_BOOK, "§e§l进阶技巧",
            "§71. 村民交易获取稀有物品",
            "§72. 建立刷怪塔获取资源",
            "§73. 下界交通网络建设",
            "§74. 自动化农场设计",
            "§75. 红石机械应用"));
        
        fillEmptySlots(tutorial);
        player.openInventory(tutorial);
    }

    // 高级功能指南
    private void openAdvancedFeatures(Player player) {
        Inventory tutorial = Bukkit.createInventory(null, 54, "§6§l教程详情: 高级功能");
        tutorial.setItem(49, createTutorialItem(Material.ARROW, "§a§l返回主菜单"));
        
        tutorial.setItem(10, createTutorialItem(Material.EYE_OF_ENDER, "§e§l二步验证",
            "§71. 增强账号安全设置",
            "§72. 启用后需邮箱验证登录",
            "§73. 设置命令: §f/auth 2fa enable",
            "§74. 关闭命令: §f/auth 2fa disable"));
        
        tutorial.setItem(12, createTutorialItem(Material.ENDER_CHEST, "§e§l个人仓库",
            "§71. 输入命令: §f/chest",
            "§72. 私人专属存储空间",
            "§73. 容量: 27格",
            "§74. 跨服务器同步物品"));
        
        tutorial.setItem(14, createTutorialItem(Material.WATCH, "§e§l登录历史",
            "§71. 查看最近登录记录",
            "§72. 命令: §f/account history",
            "§73. 显示IP地址和登录时间",
            "§74. 发现异常可申请冻结"));
        
        tutorial.setItem(16, createTutorialItem(Material.FIREWORK, "§e§l安全设置",
            "§71. 密码强度检测",
            "§72. 异地登录提醒",
            "§73. 登录设备管理",
            "§74. 自动登出保护"));
        
        fillEmptySlots(tutorial);
        player.openInventory(tutorial);
    }

    // 常见问题解答
    private void openFAQ(Player player) {
        Inventory tutorial = Bukkit.createInventory(null, 54, "§6§l教程详情: 常见问题");
        tutorial.setItem(49, createTutorialItem(Material.ARROW, "§a§l返回主菜单"));
        
        tutorial.setItem(10, createTutorialItem(Material.BARRIER, "§c§l无法登录",
            "§7可能原因:",
            "§7- 账号密码错误",
            "§7- 账号已被其他人登录",
            "§7- 服务器验证系统故障",
            "§7解决方案:",
            "§7- 检查密码大小写",
            "§7- 等待5分钟重试",
            "§7- 联系管理员重置密码"));
        
        tutorial.setItem(12, createTutorialItem(Material.SKULL_ITEM, "§c§l数据丢失",
            "§7可能原因:",
            "§7- 非正常退出游戏",
            "§7- 服务器崩溃或重启",
            "§7- 数据存储错误",
            "§7解决方案:",
            "§7- 尝试重新登录",
            "§7- 联系管理员恢复备份",
            "§7- 重新注册账号"));
        
        tutorial.setItem(14, createTutorialItem(Material.GOLD_INGOT, "§c§l金币问题",
            "§7常见问题:",
            "§7- 签到未获得金币",
            "§7- 金币数量显示错误",
            "§7- 交易未收到金币",
            "§7解决方案:",
            "§7- 等待服务器刷新",
            "§7- 重新登录账号",
            "§7- 联系管理员检查"));
        
        tutorial.setItem(16, createTutorialItem(Material.REDSTONE_BLOCK, "§c§l生命值问题",
            "§7常见问题:",
            "§7- 购买生命值未生效",
            "§7- 生命值异常减少",
            "§7- 最大生命值错误",
            "§7解决方案:",
            "§7- 重新登录账号",
            "§7- 联系管理员修复",
            "§7- 检查插件配置"));
        
        tutorial.setItem(28, createTutorialItem(Material.CHEST, "§c§l仓库问题",
            "§7常见问题:",
            "§7- 无法打开公共仓库",
            "§7- 物品存入后消失",
            "§7- 仓库界面卡顿",
            "§7解决方案:",
            "§7- 检查是否已登录",
            "§7- 等待服务器重启",
            "§7- 联系管理员处理"));
        
        tutorial.setItem(30, createTutorialItem(Material.BOOK, "§c§l其他问题",
            "§7常见问题:",
            "§7- 无法移动或交互",
            "§7- 聊天功能被禁用",
            "§7- 插件命令无效",
            "§7解决方案:",
            "§7- 确认是否已登录",
            "§7- 检查禁言状态",
            "§7- 联系管理员协助"));
        
        fillEmptySlots(tutorial);
        player.openInventory(tutorial);
    }

    // 填充空白格子
    private void fillEmptySlots(Inventory inv) {
        for (int i = 0; i < inv.getSize(); i++) {
            if (inv.getItem(i) == null) {
                inv.setItem(i, createGlassPane(0)); // 透明玻璃板
            }
        }
    }
}
上一篇: CatAttrib下一篇: CatAttrib

举报内容

意见反馈