plugin_generateOfflineUUID
根据玩家名称生成离线模式的 UUID。
函数签名
javascript
plugin_generateOfflineUUID(playerName: string): string参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
playerName | string | 是 | 玩家名称 |
参数详解
- playerName:玩家的游戏名称,用于生成对应的离线 UUID
返回值
返回一个格式化的 UUID 字符串,格式为 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx。
功能描述
plugin_generateOfflineUUID 用于生成 Minecraft 离线模式下的玩家 UUID。在离线模式(offline-mode=false)的服务器中,玩家的 UUID 是根据玩家名称通过特定算法生成的,而不是从 Mojang 的认证服务器获取。
这个函数使用与 Minecraft 相同的算法生成 UUID,确保生成的 UUID 与服务器生成的 UUID 完全一致。这对于需要存储玩家数据、查询玩家信息等场景非常有用。
算法说明
UUID 生成算法:
- 将字符串
OfflinePlayer:与玩家名称拼接 - 使用 MD5 算法计算哈希值
- 设置版本号(版本 3)和变体标识
- 格式化为标准 UUID 格式
使用示例
基本用法
javascript
// 生成 Steve 的离线 UUID
const uuid = plugin_generateOfflineUUID("Steve");
plugin_log("INFO", `Steve 的 UUID: ${uuid}`);
// 输出: Steve 的 UUID: 8667ba71-b85a-4004-af54-457a9734eed7存储玩家数据
javascript
// 使用 UUID 作为键存储玩家数据
plugin_onEvent("playerJoin", (time, player) => {
const uuid = plugin_generateOfflineUUID(player);
// 存储玩家数据
const playerData = plugin_pull("playerData") || {};
if (!playerData[uuid]) {
playerData[uuid] = {
name: player,
firstJoin: new Date().toISOString(),
joinCount: 0
};
}
playerData[uuid].joinCount++;
playerData[uuid].lastJoin = new Date().toISOString();
plugin_push("playerData", playerData);
plugin_log("INFO", `${player} (${uuid}) 第 ${playerData[uuid].joinCount} 次加入`);
});查询玩家数据
javascript
// 根据玩家名查询数据
function getPlayerData(player) {
const uuid = plugin_generateOfflineUUID(player);
const playerData = plugin_pull("playerData") || {};
return playerData[uuid] || null;
}
// 使用示例
plugin_registerCommand("!stats", (player) => {
const data = getPlayerData(player);
if (data) {
plugin_executeCommand(`tellraw ${player} {"text":"你的数据:","color":"green"}`);
plugin_executeCommand(`tellraw ${player} {"text":"加入次数: ${data.joinCount}","color":"white"}`);
} else {
plugin_executeCommand(`tellraw ${player} {"text":"暂无数据","color":"yellow"}`);
}
});白名单管理
javascript
// 添加白名单
function addToWhitelist(player) {
const uuid = plugin_generateOfflineUUID(player);
const whitelist = plugin_pull("whitelist") || {};
whitelist[uuid] = {
name: player,
addedAt: new Date().toISOString()
};
plugin_push("whitelist", whitelist);
plugin_log("INFO", `已将 ${player} (${uuid}) 添加到白名单`);
}
// 检查白名单
function isInWhitelist(player) {
const uuid = plugin_generateOfflineUUID(player);
const whitelist = plugin_pull("whitelist") || {};
return !!whitelist[uuid];
}
// 使用示例
plugin_onEvent("playerJoin", (time, player) => {
if (!isInWhitelist(player)) {
plugin_executeCommand(`kick ${player} 你不在白名单中`);
}
});封禁系统
javascript
// 封禁玩家
function banPlayer(player, reason) {
const uuid = plugin_generateOfflineUUID(player);
const banList = plugin_pull("banList") || {};
banList[uuid] = {
name: player,
reason: reason,
bannedAt: new Date().toISOString()
};
plugin_push("banList", banList);
plugin_log("INFO", `已封禁 ${player} (${uuid}),原因: ${reason}`);
}
// 检查封禁
function isBanned(player) {
const uuid = plugin_generateOfflineUUID(player);
const banList = plugin_pull("banList") || {};
return banList[uuid] || null;
}
// 使用示例
plugin_onEvent("playerJoin", (time, player) => {
const banInfo = isBanned(player);
if (banInfo) {
plugin_executeCommand(`kick ${player} 你已被封禁: ${banInfo.reason}`);
}
});经济系统
javascript
// 初始化玩家账户
plugin_onEvent("playerJoin", (time, player) => {
const uuid = plugin_generateOfflineUUID(player);
const economy = plugin_pull("economy") || {};
if (!economy[uuid]) {
economy[uuid] = {
name: player,
balance: 1000, // 初始金币
createdAt: new Date().toISOString()
};
plugin_push("economy", economy);
plugin_log("INFO", `为 ${player} 创建账户,初始金币: 1000`);
}
});
// 查询余额
function getBalance(player) {
const uuid = plugin_generateOfflineUUID(player);
const economy = plugin_pull("economy") || {};
return economy[uuid]?.balance || 0;
}
// 转账
function transfer(from, to, amount) {
const fromUuid = plugin_generateOfflineUUID(from);
const toUuid = plugin_generateOfflineUUID(to);
const economy = plugin_pull("economy") || {};
if ((economy[fromUuid]?.balance || 0) >= amount) {
economy[fromUuid].balance -= amount;
economy[toUuid] = economy[toUuid] || { name: to, balance: 0 };
economy[toUuid].balance += amount;
plugin_push("economy", economy);
return true;
}
return false;
}注意事项
- 仅适用于离线模式:此函数生成的 UUID 仅适用于 offline-mode=false 的服务器
- 在线模式服务器:在线模式服务器的 UUID 由 Mojang 认证服务器提供,与此函数生成的不同
- 名称唯一性:相同的玩家名称总是生成相同的 UUID
- 大小写敏感:玩家名称区分大小写,
Steve和steve会生成不同的 UUID
相关 API
- plugin_push & plugin_pull - 存储玩家数据
相关指南
- 创建插件 - 学习如何创建插件