Files
jgl_sunlit_patch/kubejs/startup_scripts/customMachines/coinLeaderboard.js
T
2026-07-31 10:34:32 +09:00

83 lines
2.6 KiB
JavaScript

console.info("[SOCIETY] coinLeaderboard.js loaded");
const updateLeaderboardMap = (server) => {
let accountName;
let playerList = server.persistentData.playerList;
let overflowList = server.persistentData.overflowList;
if (!playerList) return undefined;
let leaderboardMap = new Map();
global.GLOBAL_BANK.accounts.forEach((playerUUID, bankAccount) => {
accountName = playerList[playerUUID];
if (overflowList != null && overflowList[playerUUID] != null) {
leaderboardMap.set(
accountName,
bankAccount.getBalance() + overflowList[playerUUID] * 1006632960
);
} else {
if (!accountName) {
accountName = "";
Object.keys(server.persistentData.playerList).forEach((playerUUID) => {
if (accountName !== "" &&bankAccount.isAuthorized(playerUUID)) {
if (accountName !== "") accountName += playerList[playerUUID] +"'s Team"
}
})
}
leaderboardMap.set(accountName, bankAccount.getBalance());
}
});
return Array.from(leaderboardMap)
.sort((a, b) => b[1] - a[1])
.slice(0, 10);
};
global.updateLeaderboard = (block, level, server) => {
let calcY = block.y + 3;
let leaderboardMap = updateLeaderboardMap(server);
if (!leaderboardMap) return;
if (global.susFunctionLogging)
console.log("[SOCIETY-SUSFN] coinLeaderboard.js");
global.clearOldTextDisplay(block, level, "leaderboard");
// Display leaderboard name
global.spawnTextDisplay(
block,
calcY,
"leaderboard",
Text.translatable("block.society.coin_leaderboard.title")
);
// Display leaderboard accounts
leaderboardMap.forEach((playerName) => {
const balanceStr = playerName.toString().split(`,`);
if (balanceStr[0].length <= 1) return;
calcY -= 0.3;
global.spawnTextDisplay(
block,
calcY,
"leaderboard",
Text.of(`§6${balanceStr[0]} §7- §f● §6${balanceStr[1].replace(/\B(?=(\d{3})+(?!\d))/g, ",")}`)
);
});
};
StartupEvents.registry("block", (e) => {
e.create("society:coin_leaderboard", "cardinal")
.box(2, 0, 2, 14, 2, 14)
.defaultCutout()
.tagBlock("minecraft:mineable/pickaxe")
.tagBlock("minecraft:needs_stone_tool")
.model("society:block/kubejs/coin_leaderboard")
.item((item) => {
item.tooltip(
Text.translatable("block.society.coin_leaderboard.description").gray()
);
item.modelJson({
parent: "society:block/kubejs/coin_leaderboard",
});
})
.blockEntity((be) => {
be.serverTick(600, 0, (tick) => {
global.updateLeaderboard(tick.block, tick.level, tick.level.server);
});
});
});