# 服务器精 Essentials – 新时代的 Minecraft 插件
**一个完全开源的 Minecraft 插件,包含您所需的一切。**
------------------------------------------------------------------------------------------------------------------------
# 依赖
## [Vault](https://www.spigotmc.org/resources/vault.34315/) | [Luckperms](https://luckperms.net/download) | [PlaceholderAPI](https://www.spigotmc.org/resources/placeholderapi.6245/)
-------------------------------------------------------------------------------------------------------------------------
## 统计 | 服务器 / 玩家

_______________________________________________________________________________________________________________
# 特性
________________________________________________________________________________________________________________________
- ### 全面的 *经济* 系统 ( 使用 [Vault](https://www.spigotmc.org/resources/vault.34315/) )
- ### 最大化的 *积分板* 系统
- ### 每一个 *QoL* 指令,例如 `spawn`、`rtp`、`shop` 以及更多更多...
- ### 超过 20+ *管理员* 指令来管理服务器 ( `vanish`、`ban`、`mute`、... )
- ### 100% 可定制性
<#2971FF>[ <#7AA7FF>玩家 <#2971FF] <#cc0000> 用法: /rename <名称>"
no-item: "<#2971FF>[ <#7AA7FF>玩家 <#2971FF] <#cc0000> 您没有持有任何物品。"
no-meta: "<#2971FF>[ <#7AA7FF>玩家 <#2971FF] <#cc0000> 无法获取物品元数据。"
renamed: "<#2971FF>[ <#7AA7FF>玩家 <#2971FF] <#ffffff> 物品已重命名为: {item}"
setlore:
usage: "<#2971FF>[ <#7AA7FF>玩家 <#2971FF] <#cc0000> 用法: /setloreline <文本>"
no-player: "<#2971FF>[ <#7AA7FF>玩家 <#2971FF] <#cc0000> 只有玩家可以使用此命令。"
no-item: "<#2971FF>[ <#7AA7FF>玩家 <#2971FF] <#cc0000> 您没有持有任何物品。"
lore-set: "<#2971FF>[ <#7AA7FF>玩家 <#2971FF] <#ffffff> Lore 设置为: {lore}"
Kill:
only-players: "<#2971FF>[ <#7AA7FF>玩家 <#2971FF] <#cc0000> 只有玩家可以使用此命令。"
kill-count: "<#2971FF>[ <#7AA7FF>玩家 <#2971FF] <#ffffff> 您有 {kills} 玩家 击杀。"
Rules:
no-permission: "<#2971FF>[ <#7AA7FF>玩家 <#2971FF] <#cc0000> 您没有权限执行此操作。"
reloaded: "<#2971FF>[ <#7AA7FF>玩家 <#2971FF] <#ffffff> 规则已重新加载。"
header: ">---- 服务器规则 ----<"
rule-line: "{rule}"
entry : balances.entrySet()) {
config.set(entry.getKey().toString(), entry.getValue());
}
try {
config.save(file);
} catch (IOException e) {
e.printStackTrace();
}
}
private double get(UUID uuid) {
return balances.getOrDefault(uuid, 0.0);
}
private void set(UUID uuid, double amount) {
balances.put(uuid, amount);
saveBalances();
}
private void add(UUID uuid, double amount) {
set(uuid, get(uuid) + amount);
}
private void take(UUID uuid, double amount) {
set(uuid, Math.max(0, get(uuid) - amount));
}
@Override
public boolean isEnabled() {
return true;
}
@Override
public String getName() {
return "ServerEssentialsEconomy";
}
@Override
public boolean hasBankSupport() {
return false; // 未实现
}
@Override
public int fractionalDigits() {
return 2;
}
@Override
public String format(double amount) {
return String.format("$%.2f", amount);
}
@Override
public String currencyNamePlural() {
return "美元";
}
@Override
public String currencyNameSingular() {
return "美元";
}
@Override
public boolean hasAccount(String s) {
return false;
}
@Override
public boolean hasAccount(OfflinePlayer player) {
return true;
}
@Override
public boolean hasAccount(String s, String s1) {
return false;
}
@Override
public boolean hasAccount(OfflinePlayer offlinePlayer, String s) {
return false;
}
@Override
public double getBalance(String s) {
return 0;
}
@Override
public double getBalance(OfflinePlayer player) {
return get(player.getUniqueId());
}
@Override
public double getBalance(String s, String s1) {
return 0;
}
@Override
public double getBalance(OfflinePlayer offlinePlayer, String s) {
return 0;
}
@Override
public boolean has(String s, double v) {
return false;
}
@Override
public boolean has(OfflinePlayer player, double amount) {
return get(player.getUniqueId()) >= amount;
}
@Override
public boolean has(String s, String s1, double v) {
return false;
}
@Override
public boolean has(OfflinePlayer offlinePlayer, String s, double v) {
return false;
}
@Override
public EconomyResponse withdrawPlayer(String s, double v) {
return null;
}
@Override
public EconomyResponse withdrawPlayer(OfflinePlayer player, double amount) {
if (amount < 0) return new EconomyResponse(0, get(player.getUniqueId()), EconomyResponse.ResponseType.FAILURE, "无法取出负数资金");
if (!has(player, amount)) return new EconomyResponse(0, get(player.getUniqueId()), EconomyResponse.ResponseType.FAILURE, "资金不足");
take(player.getUniqueId(), amount);
return new EconomyResponse(amount, get(player.getUniqueId()), EconomyResponse.ResponseType.SUCCESS, null);
}
@Override
public EconomyResponse withdrawPlayer(String s, String s1, double v) {
return null;
}
@Override
public EconomyResponse withdrawPlayer(OfflinePlayer offlinePlayer, String s, double v) {
return null;
}
@Override
public EconomyResponse depositPlayer(String s, double v) {
return null;
}
@Override
public EconomyResponse depositPlayer(OfflinePlayer player, double amount) {
if (amount < 0) return new EconomyResponse(0, get(player.getUniqueId()), EconomyResponse.ResponseType.FAILURE, "无法存款负数资金");
add(player.getUniqueId(), amount);
return new EconomyResponse(amount, get(player.getUniqueId()), EconomyResponse.ResponseType.SUCCESS, null);
}
@Override
public EconomyResponse depositPlayer(String s, String s1, double v) {
return null;
}
@Override
public EconomyResponse depositPlayer(OfflinePlayer offlinePlayer, String s, double v) {
return null;
}
@Override
public boolean createPlayerAccount(OfflinePlayer player) {
if (!balances.containsKey(player.getUniqueId())) {
set(player.getUniqueId(), 0.0);
}
return true;
}
@Override
public boolean createPlayerAccount(String s, String s1) {
return false;
}
@Override
public boolean createPlayerAccount(OfflinePlayer offlinePlayer, String s) {
return false;
}
@Override public EconomyResponse createBank(String name, String player) { return notSupported(); }
@Override
public EconomyResponse createBank(String s, OfflinePlayer offlinePlayer) {
return null;
}
@Override public EconomyResponse deleteBank(String name) { return notSupported(); }
@Override public EconomyResponse bankBalance(String name) { return notSupported(); }
@Override public EconomyResponse bankHas(String name, double amount) { return notSupported(); }
@Override public EconomyResponse bankWithdraw(String name, double amount) { return notSupported(); }
@Override public EconomyResponse bankDeposit(String name, double amount) { return notSupported(); }
@Override public EconomyResponse isBankOwner(String name, String playerName) { return notSupported(); }
@Override
public EconomyResponse isBankOwner(String s, OfflinePlayer offlinePlayer) {
return null;
}
@Override public EconomyResponse isBankMember(String name, String playerName) { return notSupported(); }
@Override
public EconomyResponse isBankMember(String s, OfflinePlayer offlinePlayer) {
return null;
}
@Override
public List getBanks() {
return List.of();
}
@Override
public boolean createPlayerAccount(String s) {
return false;
}
private EconomyResponse notSupported() {
return new EconomyResponse(0, 0, EconomyResponse.ResponseType.NOT_IMPLEMENTED, "银行功能未受支持");
}
}
--------------------------------------------------------------------------------------------------------------------
## 插件代码
---------------------------------------------------------------------------------------------------------------------------
## ⚙ 安装
1. 从 [Modrinth](https://modrinth.com/) 或 GitHub 下载最新的 `.jar` 文件。
2. 将其放置在您的 `plugins` 文件夹中。
3. 重新启动您的服务器。
4. 尽情享受吧!
----------------------------------------------------------------------------------------------------------------
## 💬 支持与社区
---------------------------------------------------------------------------------------------------------------
## ✅ 为什么选择服务器精 Essentials?
- 轻量级、高效且完全可配置
- 积极维护和开源
- 高度可定制的消息、权限和世界支持
- 友好的开发者社区和持续的支持