fix: fixed saving issues

This commit is contained in:
2026-09-19 11:30:49 +02:00
parent 177a96e733
commit dc4ce9c7d3
2 changed files with 1432 additions and 1394 deletions
+118 -93
View File
@@ -12,21 +12,21 @@
*/ */
// Dependencies: LuckPerms // Dependencies: LuckPerms
(function () {
var DAILY_QUESTS_FILE = "kubejs/data/dailyquests/players.json";
var DAILY_QUESTS_CONFIG = "config/dailyquests.json";
var DAILY_QUESTS_FILE = "kubejs/data/dailyquests/players.json"; var data = null;
var DAILY_QUESTS_CONFIG = "config/dailyquests.json"; var config = null;
var lastResetCheckTick = 0;
var data = null; var LuckPermsApiProvider = Java.loadClass(
var config = null;
var lastResetCheckTick = 0;
var LuckPermsApiProvider = Java.loadClass(
"net.luckperms.api.LuckPermsProvider", "net.luckperms.api.LuckPermsProvider",
); );
var luckPermsApi = null; var luckPermsApi = null;
function getDefaultConfig() { function getDefaultConfig() {
return { return {
resetCheckInterval: 20, resetCheckInterval: 20,
questPermissionReroll: "dailyquests.command.reroll", questPermissionReroll: "dailyquests.command.reroll",
@@ -218,9 +218,9 @@ function getDefaultConfig() {
], ],
}, },
}; };
} }
function loadConfig() { function loadConfig() {
var defaults = getDefaultConfig(); var defaults = getDefaultConfig();
try { try {
@@ -307,9 +307,9 @@ function loadConfig() {
); );
} }
} }
} }
function getLuckPerms() { function getLuckPerms() {
if (luckPermsApi) { if (luckPermsApi) {
return luckPermsApi; return luckPermsApi;
} }
@@ -325,9 +325,9 @@ function getLuckPerms() {
return null; return null;
} }
} }
function hasPermission(player, permission) { function hasPermission(player, permission) {
var api = getLuckPerms(); var api = getLuckPerms();
if (!api || !player) { if (!api || !player) {
@@ -349,13 +349,13 @@ function hasPermission(player, permission) {
return false; return false;
} }
} }
function pad2(value) { function pad2(value) {
return String(value).padStart(2, "0"); return String(value).padStart(2, "0");
} }
function getToday() { function getToday() {
var now = new Date(); var now = new Date();
return ( return (
@@ -365,9 +365,9 @@ function getToday() {
"-" + "-" +
pad2(now.getDate()) pad2(now.getDate())
); );
} }
function getResetCountdown() { function getResetCountdown() {
var now = new Date(); var now = new Date();
var nextMidnight = new Date(now); var nextMidnight = new Date(now);
@@ -394,16 +394,16 @@ function getResetCountdown() {
} }
return seconds + "s"; return seconds + "s";
} }
function createEmptyData() { function createEmptyData() {
return { return {
lastReset: getToday(), lastReset: getToday(),
players: {}, players: {},
}; };
} }
function loadData() { function loadData() {
try { try {
var loaded = JsonIO.read(DAILY_QUESTS_FILE); var loaded = JsonIO.read(DAILY_QUESTS_FILE);
@@ -426,9 +426,9 @@ function loadData() {
data = createEmptyData(); data = createEmptyData();
saveData(); saveData();
} }
} }
function saveData() { function saveData() {
if (!data) { if (!data) {
return; return;
} }
@@ -436,11 +436,13 @@ function saveData() {
try { try {
JsonIO.write(DAILY_QUESTS_FILE, data); JsonIO.write(DAILY_QUESTS_FILE, data);
} catch (error) { } catch (error) {
console.error("[DailyQuests] Failed to save data: " + String(error)); console.error(
"[DailyQuests] Failed to save data: " + String(error),
);
}
} }
}
function randomQuest(category) { function randomQuest(category) {
var pool = config.quests[category]; var pool = config.quests[category];
if (!Array.isArray(pool) || pool.length === 0) { if (!Array.isArray(pool) || pool.length === 0) {
@@ -448,9 +450,9 @@ function randomQuest(category) {
} }
return pool[Math.floor(Math.random() * pool.length)]; return pool[Math.floor(Math.random() * pool.length)];
} }
function getQuestById(id) { function getQuestById(id) {
if (!id) { if (!id) {
return null; return null;
} }
@@ -468,9 +470,9 @@ function getQuestById(id) {
} }
return null; return null;
} }
function getQuestReward(quest) { function getQuestReward(quest) {
if (!quest) { if (!quest) {
return null; return null;
} }
@@ -484,13 +486,13 @@ function getQuestReward(quest) {
} }
return null; return null;
} }
function getPlayerUuid(player) { function getPlayerUuid(player) {
return String(player.uuid); return String(player.uuid);
} }
function createPlayerData(player) { function createPlayerData(player) {
var easy = randomQuest("easy"); var easy = randomQuest("easy");
var medium = randomQuest("medium"); var medium = randomQuest("medium");
var hard = randomQuest("hard"); var hard = randomQuest("hard");
@@ -504,9 +506,9 @@ function createPlayerData(player) {
mediumClaimed: false, mediumClaimed: false,
hardClaimed: false, hardClaimed: false,
}; };
} }
function createOfflinePlayerData(name) { function createOfflinePlayerData(name) {
var easy = randomQuest("easy"); var easy = randomQuest("easy");
var medium = randomQuest("medium"); var medium = randomQuest("medium");
var hard = randomQuest("hard"); var hard = randomQuest("hard");
@@ -520,9 +522,9 @@ function createOfflinePlayerData(name) {
mediumClaimed: false, mediumClaimed: false,
hardClaimed: false, hardClaimed: false,
}; };
} }
function repairPlayerData(player, playerData) { function repairPlayerData(player, playerData) {
var changed = false; var changed = false;
if (!playerData.name) { if (!playerData.name) {
@@ -565,9 +567,9 @@ function repairPlayerData(player, playerData) {
} }
return changed; return changed;
} }
function getPlayerData(player) { function getPlayerData(player) {
var uuid = getPlayerUuid(player); var uuid = getPlayerUuid(player);
if (!data.players[uuid]) { if (!data.players[uuid]) {
@@ -589,9 +591,9 @@ function getPlayerData(player) {
} }
return playerData; return playerData;
} }
function countItem(player, itemId) { function countItem(player, itemId) {
var total = 0; var total = 0;
try { try {
@@ -617,15 +619,17 @@ function countItem(player, itemId) {
total += stack.count; total += stack.count;
} }
} catch (error) { } catch (error) {
console.error("[DailyQuests] Inventory count error: " + String(error)); console.error(
"[DailyQuests] Inventory count error: " + String(error),
);
return 0; return 0;
} }
return total; return total;
} }
function removeItems(player, itemId, amount) { function removeItems(player, itemId, amount) {
var remaining = amount; var remaining = amount;
try { try {
@@ -667,9 +671,9 @@ function removeItems(player, itemId, amount) {
} }
return remaining <= 0; return remaining <= 0;
} }
function giveReward(player, reward) { function giveReward(player, reward) {
if ( if (
!reward || !reward ||
!reward.item || !reward.item ||
@@ -688,21 +692,21 @@ function giveReward(player, reward) {
return false; return false;
} }
} }
function getProgress(player, quest) { function getProgress(player, quest) {
if (!quest) { if (!quest) {
return 0; return 0;
} }
return Math.min(countItem(player, quest.item), quest.amount); return Math.min(countItem(player, quest.item), quest.amount);
} }
function separator(player) { function separator(player) {
player.tell(Text.of("───────────────────────────────────").gray()); player.tell(Text.of("───────────────────────────────────").gray());
} }
function getCategoryColor(category) { function getCategoryColor(category) {
if (category === "medium") { if (category === "medium") {
return "yellow"; return "yellow";
} }
@@ -712,9 +716,9 @@ function getCategoryColor(category) {
} }
return "green"; return "green";
} }
function tellQuest(player, category, quest, claimed) { function tellQuest(player, category, quest, claimed) {
if (!quest) { if (!quest) {
player.tell(Text.of("Quest data is unavailable.").red()); player.tell(Text.of("Quest data is unavailable.").red());
@@ -726,7 +730,8 @@ function tellQuest(player, category, quest, claimed) {
var progress = getProgress(player, quest); var progress = getProgress(player, quest);
var itemName = var itemName =
quest.itemName || quest.description.replace(/^Collect\s+\d+\s+/i, ""); quest.itemName ||
quest.description.replace(/^Collect\s+\d+\s+/i, "");
var rewardName = reward && reward.name ? reward.name : reward.item; var rewardName = reward && reward.name ? reward.name : reward.item;
@@ -765,9 +770,9 @@ function tellQuest(player, category, quest, claimed) {
} }
player.tell(""); player.tell("");
} }
function openDailyQuests(player) { function openDailyQuests(player) {
if (!player) { if (!player) {
return; return;
} }
@@ -800,17 +805,23 @@ function openDailyQuests(player) {
tellQuest(player, "hard", hardQuest, playerData.hardClaimed); tellQuest(player, "hard", hardQuest, playerData.hardClaimed);
player.tell(Text.of("[ REFRESH ]").aqua().clickRunCommand("/dailyquests")); player.tell(
Text.of("[ REFRESH ]").aqua().clickRunCommand("/dailyquests"),
);
separator(player); separator(player);
} }
function claimQuest(player, category) { function claimQuest(player, category) {
if (!player) { if (!player) {
return 0; return 0;
} }
if (category !== "easy" && category !== "medium" && category !== "hard") { if (
category !== "easy" &&
category !== "medium" &&
category !== "hard"
) {
return 0; return 0;
} }
@@ -848,7 +859,9 @@ function claimQuest(player, category) {
if (!reward) { if (!reward) {
player.tell( player.tell(
Text.of("This quest has an invalid reward configuration.").red(), Text.of(
"This quest has an invalid reward configuration.",
).red(),
); );
return 0; return 0;
@@ -861,7 +874,10 @@ function claimQuest(player, category) {
player.tell( player.tell(
Text.of( Text.of(
"Required: " + quest.amount + " | You have: " + currentAmount, "Required: " +
quest.amount +
" | You have: " +
currentAmount,
).gray(), ).gray(),
); );
@@ -870,7 +886,9 @@ function claimQuest(player, category) {
if (countItem(player, quest.item) < quest.amount) { if (countItem(player, quest.item) < quest.amount) {
player.tell( player.tell(
Text.of("Your inventory changed. The claim was cancelled.").red(), Text.of(
"Your inventory changed. The claim was cancelled.",
).red(),
); );
return 0; return 0;
@@ -913,9 +931,9 @@ function claimQuest(player, category) {
openDailyQuests(player); openDailyQuests(player);
return 1; return 1;
} }
function findOnlinePlayer(server, name) { function findOnlinePlayer(server, name) {
var target = String(name).toLowerCase(); var target = String(name).toLowerCase();
var players = server.players; var players = server.players;
@@ -929,9 +947,9 @@ function findOnlinePlayer(server, name) {
} }
return null; return null;
} }
function findSavedPlayer(name) { function findSavedPlayer(name) {
var target = String(name).toLowerCase(); var target = String(name).toLowerCase();
for (var uuid in data.players) { for (var uuid in data.players) {
@@ -950,9 +968,9 @@ function findSavedPlayer(name) {
} }
return null; return null;
} }
function rerollPlayer(server, name) { function rerollPlayer(server, name) {
checkDailyReset(server); checkDailyReset(server);
var onlinePlayer = findOnlinePlayer(server, name); var onlinePlayer = findOnlinePlayer(server, name);
@@ -981,14 +999,16 @@ function rerollPlayer(server, name) {
return false; return false;
} }
data.players[savedPlayer.uuid] = createOfflinePlayerData(savedPlayer.name); data.players[savedPlayer.uuid] = createOfflinePlayerData(
savedPlayer.name,
);
saveData(); saveData();
return true; return true;
} }
function resetDailyQuests(server) { function resetDailyQuests(server) {
var today = getToday(); var today = getToday();
console.log("[DailyQuests] Resetting daily quests for " + today); console.log("[DailyQuests] Resetting daily quests for " + today);
@@ -1015,9 +1035,9 @@ function resetDailyQuests(server) {
} }
console.log("[DailyQuests] Daily reset complete."); console.log("[DailyQuests] Daily reset complete.");
} }
function checkDailyReset(server) { function checkDailyReset(server) {
if (!data) { if (!data) {
loadData(); loadData();
} }
@@ -1027,9 +1047,9 @@ function checkDailyReset(server) {
if (data.lastReset !== today) { if (data.lastReset !== today) {
resetDailyQuests(server); resetDailyQuests(server);
} }
} }
ServerEvents.commandRegistry(function (event) { ServerEvents.commandRegistry(function (event) {
var Commands = event.commands; var Commands = event.commands;
var Arguments = event.arguments; var Arguments = event.arguments;
@@ -1055,7 +1075,8 @@ ServerEvents.commandRegistry(function (event) {
return 1; return 1;
} catch (error) { } catch (error) {
console.error( console.error(
"[DailyQuests] /dailyquests error: " + String(error), "[DailyQuests] /dailyquests error: " +
String(error),
); );
ctx.source.sendFailure( ctx.source.sendFailure(
@@ -1104,7 +1125,10 @@ ServerEvents.commandRegistry(function (event) {
Arguments.PLAYER.create(event), Arguments.PLAYER.create(event),
).executes((ctx) => { ).executes((ctx) => {
try { try {
var target = Arguments.PLAYER.getResult(ctx, "player"); var target = Arguments.PLAYER.getResult(
ctx,
"player",
);
if (!target) { if (!target) {
ctx.source.sendFailure( ctx.source.sendFailure(
@@ -1156,9 +1180,9 @@ ServerEvents.commandRegistry(function (event) {
}), }),
), ),
); );
}); });
PlayerEvents.loggedIn(function (event) { PlayerEvents.loggedIn(function (event) {
try { try {
checkDailyReset(event.server); checkDailyReset(event.server);
@@ -1172,9 +1196,9 @@ PlayerEvents.loggedIn(function (event) {
).red(), ).red(),
); );
} }
}); });
ServerEvents.tick(function (event) { ServerEvents.tick(function (event) {
try { try {
var currentTick = event.server.tickCount; var currentTick = event.server.tickCount;
@@ -1188,9 +1212,10 @@ ServerEvents.tick(function (event) {
} catch (error) { } catch (error) {
console.error("[DailyQuests] Tick error: " + String(error)); console.error("[DailyQuests] Tick error: " + String(error));
} }
}); });
loadConfig(); loadConfig();
loadData(); loadData();
console.log("[DailyQuests] Loaded successfully."); console.log("[DailyQuests] Loaded successfully.");
})();
+65 -52
View File
@@ -12,22 +12,23 @@
*/ */
// Dependencies: LuckPerms, KubeJSHTTP // Dependencies: LuckPerms, KubeJSHTTP
(function () {
var DISCORD_WEBHOOK_URL =
"https://discord.com/api/webhooks/1544442801247494226/A-1JQpkeJ2jFFik63uEWPIV0Vd-fOcJV9KoySseGu8LO5SpkxZ23okWXxd-IMkD_tQDP";
var DISCORD_WEBHOOK_URL = "REPLACE_ME"; var MULTIACCOUNT_PERMISSION_CHECKIP = "multiaccount.command.checkip";
var MULTIACCOUNT_PERMISSION_ALERT = "multiaccount.alert";
var MULTIACCOUNT_PERMISSION_CHECKIP = "multiaccount.command.checkip"; var LuckPermsApiProvider = Java.loadClass(
var MULTIACCOUNT_PERMISSION_ALERT = "multiaccount.alert";
var LuckPermsApiProvider = Java.loadClass(
"net.luckperms.api.LuckPermsProvider", "net.luckperms.api.LuckPermsProvider",
); );
var HttpAPI = Java.loadClass("com.awizo.KubeJSHTTP.HttpAPI"); var HttpAPI = Java.loadClass("com.awizo.KubeJSHTTP.HttpAPI");
var luckPermsApi = null; var luckPermsApi = null;
var playerIPMap = new Map(); var playerIPMap = new Map();
function getLuckPerms() { function getLuckPerms() {
if (luckPermsApi) { if (luckPermsApi) {
return luckPermsApi; return luckPermsApi;
} }
@@ -35,15 +36,17 @@ function getLuckPerms() {
try { try {
luckPermsApi = LuckPermsApiProvider.get(); luckPermsApi = LuckPermsApiProvider.get();
console.log("[Multi-Account] luckPermsApi API loaded successfully!"); console.log(
"[Multi-Account] luckPermsApi API loaded successfully!",
);
return luckPermsApi; return luckPermsApi;
} catch (error) { } catch (error) {
return null; return null;
} }
} }
function hasPermission(player, permission) { function hasPermission(player, permission) {
var api = getLuckPerms(); var api = getLuckPerms();
if (!api || !player) { if (!api || !player) {
@@ -70,9 +73,9 @@ function hasPermission(player, permission) {
return false; return false;
} }
} }
function getPlayerIP(player) { function getPlayerIP(player) {
try { try {
var ip = player.ipAddress; var ip = player.ipAddress;
@@ -99,16 +102,16 @@ function getPlayerIP(player) {
return null; return null;
} }
} }
function sendPlayerNotification(player, otherPlayers) { function sendPlayerNotification(player, otherPlayers) {
player.tell( player.tell(
"§c[ALERT] §fMulti-account detected! Other accounts on your IP: §e" + "§c[ALERT] §fMulti-account detected! Other accounts on your IP: §e" +
otherPlayers.join(", "), otherPlayers.join(", "),
); );
} }
function notifyStaff(server, playerName, otherPlayers) { function notifyStaff(server, playerName, otherPlayers) {
var message = var message =
"§c[ADMIN] §fPlayer §6" + "§c[ADMIN] §fPlayer §6" +
playerName + playerName +
@@ -120,9 +123,9 @@ function notifyStaff(server, playerName, otherPlayers) {
player.tell(message); player.tell(message);
} }
}); });
} }
function sendDiscordNotification(player, otherPlayers) { function sendDiscordNotification(player, otherPlayers) {
var playerName = var playerName =
player && typeof player.getName === "function" player && typeof player.getName === "function"
? player.getName().getString() ? player.getName().getString()
@@ -147,18 +150,18 @@ function sendDiscordNotification(player, otherPlayers) {
":S>", ":S>",
color: 3447003, color: 3447003,
footer: { footer: {
text: "Multi-Account Watch", text: "Sputnik watch",
}, },
}, },
], ],
}), }),
); );
} catch (e) { } catch (e) {
console.error("[Multi-Account Watch] Failed to send webhook: " + e); console.error("[SputnikWatch] Failed to send webhook: " + e);
}
} }
}
function rebuildPlayerIPMap(server) { function rebuildPlayerIPMap(server) {
playerIPMap.clear(); playerIPMap.clear();
server.players.forEach((player) => { server.players.forEach((player) => {
@@ -181,9 +184,9 @@ function rebuildPlayerIPMap(server) {
playerIPMap.size + playerIPMap.size +
" IP(s).", " IP(s).",
); );
} }
function sendCheckIPWebhook(player, groups) { function sendCheckIPWebhook(player, groups) {
var playerName = var playerName =
player && typeof player.getName === "function" player && typeof player.getName === "function"
? player.getName().getString() ? player.getName().getString()
@@ -217,7 +220,7 @@ function sendCheckIPWebhook(player, groups) {
":S>", ":S>",
color: 3447003, color: 3447003,
footer: { footer: {
text: "Multi-Account watch", text: "Sputnik watch",
}, },
}, },
], ],
@@ -226,11 +229,13 @@ function sendCheckIPWebhook(player, groups) {
console.log("[Multi-Account] /checkip results sent to Discord."); console.log("[Multi-Account] /checkip results sent to Discord.");
} catch (e) { } catch (e) {
console.error("[Multi-Account Watch] Failed to send /checkip webhook: " + e); console.error(
"[SputnikWatch] Failed to send /checkip webhook: " + e,
);
}
} }
}
function checkMultiAccount(server, player) { function checkMultiAccount(server, player) {
var name = player.username; var name = player.username;
var ip = getPlayerIP(player); var ip = getPlayerIP(player);
@@ -264,9 +269,9 @@ function checkMultiAccount(server, player) {
} }
players.add(name); players.add(name);
} }
function removePlayer(name) { function removePlayer(name) {
for (var [ip, players] of playerIPMap) { for (var [ip, players] of playerIPMap) {
if (!players.delete(name)) { if (!players.delete(name)) {
continue; continue;
@@ -286,9 +291,9 @@ function removePlayer(name) {
break; break;
} }
} }
PlayerEvents.loggedIn((event) => { PlayerEvents.loggedIn((event) => {
var player = event.player; var player = event.player;
var server = event.server; var server = event.server;
@@ -302,17 +307,17 @@ PlayerEvents.loggedIn((event) => {
server.schedule(10, () => { server.schedule(10, () => {
checkMultiAccount(server, player); checkMultiAccount(server, player);
}); });
}); });
PlayerEvents.loggedOut((event) => { PlayerEvents.loggedOut((event) => {
var name = event.player.username; var name = event.player.username;
console.log("[Multi-Account] " + name + " left the server"); console.log("[Multi-Account] " + name + " left the server");
removePlayer(name); removePlayer(name);
}); });
ServerEvents.commandRegistry((event) => { ServerEvents.commandRegistry((event) => {
const { commands: Commands } = event; const { commands: Commands } = event;
event.register( event.register(
@@ -336,7 +341,10 @@ ServerEvents.commandRegistry((event) => {
rebuildPlayerIPMap(server); rebuildPlayerIPMap(server);
source.sendSuccess(Text.of("§6Players sharing an IP:"), false); source.sendSuccess(
Text.of("§6Players sharing an IP:"),
false,
);
for (var players of playerIPMap.values()) { for (var players of playerIPMap.values()) {
if (players.size <= 1) { if (players.size <= 1) {
@@ -350,7 +358,9 @@ ServerEvents.commandRegistry((event) => {
groups.push(playerList); groups.push(playerList);
source.sendSuccess( source.sendSuccess(
Text.of(`§7Group ${group}: §e${playerList.join(", ")}`), Text.of(
`§7Group ${group}: §e${playerList.join(", ")}`,
),
false, false,
); );
@@ -369,23 +379,26 @@ ServerEvents.commandRegistry((event) => {
return 1; return 1;
}), }),
); );
}); });
console.log("[Multi-Account] Script loaded successfully!"); console.log("[Multi-Account] Script loaded successfully!");
console.log( console.log(
"[Multi-Account] /checkip permission: " + MULTIACCOUNT_PERMISSION_CHECKIP, "[Multi-Account] /checkip permission: " +
); MULTIACCOUNT_PERMISSION_CHECKIP,
);
console.log( console.log(
"[Multi-Account] Chat alert permission: " + MULTIACCOUNT_PERMISSION_ALERT, "[Multi-Account] Chat alert permission: " +
); MULTIACCOUNT_PERMISSION_ALERT,
);
console.log("[Multi-Account] Commands: /checkip"); console.log("[Multi-Account] Commands: /checkip");
console.log( console.log(
"[Multi-Account] Webhook: " + "[Multi-Account] Webhook: " +
(DISCORD_WEBHOOK_URL !== "REPLACE_ME" (DISCORD_WEBHOOK_URL !== "REPLACE_ME"
? "✓ Configured" ? "✓ Configured"
: "✗ Not configured"), : "✗ Not configured"),
); );
})();