#Combat log system having issues

1 messages · Page 1 of 1 (latest)

mossy mortar
#
import { world, system } from "@minecraft/server";

const combatDB = new Map();
const COMBAT_TIMER = 30000; //(30s) 

world.beforeEvents.playerLeave.subscribe(({player}) => {
    if (!combatDB.get(player.id) || player.id == -4294967295) return;

    const dim = player.dimension;
    const loc = player.location;

    const inventory = player.getComponent("inventory")?.container;
    for (let i=0; i < inventory.size; i++) {
        const item = inventory.getItem(i);
        if (item) {
            system.run(() => {
                dim.spawnItem(item, loc);
            })
        }
    }

    const slots = ["Head", "Chest", "Legs", "Feet"];
    const armour = player.getComponent("equippable");
    for (const slot of slots) {
        const check = armour.getEquipment(slot);
        if (check) {
            system.run(() => {
                dim.spawnItem(check, loc);
            })
        }
    }

    world.sendMessage(`§l§4${player.name} §cHas Combat Logged!`);
})

world.afterEvents.playerSpawn.subscribe(({initialSpawn, player}) => {
    if (!initialSpawn) return;

    if (combatDB.get(player.id)) {
        combatDB.delete(player.id);
        player.runCommand("clear @s");
        player.sendMessage(`§o§7Your inventory was cleared for combat logging!`);
    }
})

world.afterEvents.entityHitEntity.subscribe(({ hitEntity: hit, damagingEntity: attacker}) => {
    if (hit.typeId !== "minecraft:player" || attacker.typeId !== "minecraft:player") return;
    setCombat(hit);
    setCombat(attacker);
}) 
#
function setCombat(player) {
    const timer = Date.now() + COMBAT_TIMER;
    combatDB.set(player.id, timer);
}

system.runInterval(() => {
    for (const player of world.getAllPlayers()) {
        if (combatDB.get(player.id)) {

            const timeLeft = combatDB.get(player.id) - Date.now();
            if (timeLeft < 0) {
                player.sendMessage("Your combat timer ran out!");
                combatDB.delete(player.id);
            } else {
                const timeLeft = combatDB.get(player.id) - Date.now();
                player.onScreenDisplay.setActionBar(`${Math.floor((timeLeft / 1000) % 60)}s`)
            }
        }
    }
}) 
#

sometimes when the player joins back after combat logging it doesn't clear them does anyone know why?