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); }); }); });