Files
CraftBank/src/main/java/com/craftbank/hooks/CraftBankExpansion.java
T
Purpur Build eddc706c9a feat: CraftBank Folia 1.21.8 经济与银行核心插件初始实现
实现完整的现金/钱包、银行卡、支票、活期储蓄与定期存款系统,
实现并以 Highest 优先级注册 Vault Economy 接口,接入 PlaceholderAPI。
全程遵循 Folia 调度模型(AsyncScheduler / 实体区域线程),
数据缓存线程安全,支票兑现与定期领取做防刷处理。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-29 18:16:15 +08:00

65 lines
2.0 KiB
Java

package com.craftbank.hooks;
import com.craftbank.CraftBank;
import com.craftbank.model.PlayerAccount;
import me.clip.placeholderapi.expansion.PlaceholderExpansion;
import org.bukkit.OfflinePlayer;
import org.jetbrains.annotations.NotNull;
/**
* PlaceholderAPI 扩展, 提供:
* <ul>
* <li>%craftbank_cash% —— 现金余额</li>
* <li>%craftbank_bank_saving% —— 活期余额</li>
* <li>%craftbank_cash_formatted% —— 带货币符号的现金</li>
* <li>%craftbank_bank_saving_formatted% —— 带货币符号的活期</li>
* </ul>
*/
public class CraftBankExpansion extends PlaceholderExpansion {
private final CraftBank plugin;
public CraftBankExpansion(CraftBank plugin) {
this.plugin = plugin;
}
@Override
public @NotNull String getIdentifier() {
return "craftbank";
}
@Override
public @NotNull String getAuthor() {
return "CraftBank";
}
@Override
public @NotNull String getVersion() {
return plugin.getDescription().getVersion();
}
@Override
public boolean persist() {
return true;
}
@Override
public String onRequest(OfflinePlayer player, @NotNull String params) {
if (player == null) {
return "";
}
// 占位符在主线程被解析: 仅读取已缓存数据, 不触发阻塞式数据库查询。
PlayerAccount account = plugin.getEconomyManager().getCached(player.getUniqueId());
double cash = account != null ? account.getCash() : 0.0;
double saving = account != null ? account.getBankSaving() : 0.0;
return switch (params.toLowerCase()) {
case "cash" -> plugin.getEconomyManager().formatNumber(cash);
case "cash_formatted" -> plugin.getEconomyManager().format(cash);
case "bank_saving" -> plugin.getEconomyManager().formatNumber(saving);
case "bank_saving_formatted" -> plugin.getEconomyManager().format(saving);
default -> null;
};
}
}