AuthSystemTutorial.java v1.0
AuthSystem专属配套教程插件,提供详细的新手手册和指南
命令列表
- 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)); // 透明玻璃板
}
}
}
}