
创建:交易大厅账本
一个用于“Create: Trading Floor”的插件,用于追踪每个玩家完成的交易数量。
交易大厅账本
交易大厅账本是 机械动力:交易大厅 的轻量级附属模组,用于追踪每位玩家通过交易站完成的交易次数,并提供与 FTB 任务及 KubeJS 的集成功能。
功能特性
- 使用 Mixin 技术检测通过交易站完成的交易。
- 按玩家记录交易次数,并持久化保存至磁盘。
- 即使玩家离线也能正常记录。
- 触发自定义 Forge 事件 (
TradingTradeEvent),KubeJS 可监听到此事件。 - 提供
/tf_trades命令,用于查看当前交易次数及距离下一个里程碑的进度。
运行机制
交易次数将归属于放置交易站的玩家。每成功完成一次交易,该玩家账户中的交易次数便会增加。
模组会在 Forge 事件总线上触发名为 TradingTradeEvent 的自定义事件。该事件会公开以下信息:
- 与交易站关联的玩家。
- 该玩家累计的交易次数。
利用 KubeJS 和 EventJS,您可以监听此事件,从而实现自定义任务、奖励、成就、排行榜或任何其他游戏机制。
命令
/tf_trades
显示您当前的交易次数以及距离下一个里程碑的进度。里程碑并非模组内置功能,需通过您的 KubeJS 脚本自行定义。
依赖要求
- Forge 1.20.1
- 机械动力:交易大厅
可选依赖
- KubeJS + EventJS — 监听
TradingTradeEvent并实现自定义逻辑。 - FTB 任务 — 将交易次数整合到任务进度系统中。
鸣谢与许可协议
本附属模组借鉴并改编了原 机械动力:交易大厅 项目(作者:CakeGit)的部分源代码,该项目基于 MIT 许可协议发布。
版权所有 (c) 2024 CakeGit
原始源代码:https://github.com/cakeGit/Create-Trading-Floor
本模组附带了所需的 MIT 版权声明及许可协议文本。
示例:使用 KubeJS 实现 FTB 任务集成
// kubejs/server_scripts/trading_floor_quests.js// 里程碑:[交易次数,任务任务 ID]
const MILESTONES = [
[5, '57F4FE71F78DFA05'],
[100, '33FCBCE23CA8214A'],
[500, '2372061A10003C77'],
];
NativeEvents.onEvent(
Java.loadClass('com.cak.tradingfloor.fix.TradingTradeEvent'),
event => {
const player = event.player;
const total = event.totalTrades;
for (const [required, taskId] of MILESTONES) {
if (total === required) {
player.server.runCommandSilent(
`ftbquests change_progress ${player.name.string} complete ${taskId}`
);
console.info(`[TradingFloorFix] 玩家 ${player.name.string} 已达到里程碑 ${required}`);
}
}
}
);
ServerEvents.commandRegistry(event => {
const { commands: Commands } = event;
event.register(
Commands.literal('tf_trades')
.executes(ctx => {
const player = ctx.source.playerOrException;
const TradeEventBridge = Java.loadClass('com.cak.tradingfloor.fix.TradeEventBridge');
const count = TradeEventBridge.getTradeCount(player.server, player.uuid);
const next = MILESTONES.find(([req]) => req > count);
const nextComponent = next
? Text.translatable('tradingfloorfix.trades.next', Text.of(`§e${next[0] - count}`))
: Text.translatable('tradingfloorfix.trades.done');
player.tell(
Text.translatable('tradingfloorfix.trades.count',
Text.of(`§e${count}`),
nextComponent
).withStyle('aqua')
);
return 1;
})
);
});
正在加载版本记录…
正在加载评论…
评论在新手盒子客户端中发表,这里同步展示。