83 lines
2.6 KiB
JavaScript
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);
|
|
});
|
|
});
|
|
});
|