mirror of
https://github.com/ZareMate/kubejs.git
synced 2026-11-12 14:20:29 +00:00
fix: fixed saving issues
This commit is contained in:
+118
-93
@@ -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
@@ -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"),
|
||||||
);
|
);
|
||||||
|
})();
|
||||||
|
|||||||
Reference in New Issue
Block a user