#server.scheduleInTicks and delayed server operations

20 messages · Page 1 of 1 (latest)

slim zodiac
#
    // Only proceed if a player was the source of damage
    if (event.source.player) {
        let playerSource = event.source.player;
        let target = event.entity;      // victim of the damage
        let damageAmount = event.amount;      // damage value
        let server = event.server
        let playerId = event.source.player.id;
        let entityId = event.entity.id;

        // Example: notify the player when they hit a zombie
        if (target.type === 'minecraft:zombie') {
            playerSource.tell(`You dealt ${damageAmount} damage to ${target}!`);
        }
        if (playerSource.getMainHandItem() === 'kubejs:spider_charm' || playerSource.getOffhandItem() === 'kubejs:spider_charm') {
            playerSource.tell(`spider charm activated`);
            // target.attack(player, 10)

        }

        server.scheduleInTicks(20, event => { // seems to require all vars in main method to be redeclarable
            // Make sure the target is still alive
            let playerClosure = event.server.getPlayer(playerId);
            let entityClosure = event.server.getEntity(entityId);
            if (entityClosure.alive) {
                entityClosure.damage('player', 10, playerClosure); // deal 2 extra damage, source: player
            }
        });

        playerSource.tell(`event.damage is now: ${event.damage}`);
    }
});```
dull ermineBOT
#

Once your ticket has been resolved, please close it with </ticket close:1054771505520717835> command!

gilded timber
#

logs?

slim zodiac
#

The intent here is a delayed damage effect. IE: Hit someone with sword. 1 second later they take additional damage

gilded timber
#

probably best to show logs first thing

slim zodiac
#
[00:29:09] [INIT] Loaded plugins:
[00:29:09] [INIT] - dev.latvian.mods.kubejs.forge.BuiltinKubeJSForgePlugin
[00:29:09] [INIT] - dev.latvian.mods.kubejs.forge.BuiltinKubeJSForgeClientPlugin
[00:29:09] [INIT] - com.probejs.ProbeJSPlugin
[00:29:09] [INIT] - net.liopyu.entityjs.EntityJSPlugin
[00:29:09] [INFO] example.js#5: Hello, World! (Loaded server scripts)
[00:29:09] [INFO] Loaded script server_scripts:example.js in 0.003 s
[00:29:09] [INFO] Loaded 1/1 KubeJS server scripts in 0.009 s with 0 errors and 0 warnings
[00:29:09] [INFO] Scripts loaded
[00:29:10] [INFO] [minecraft:block] Found 275 tags, added 5 objects, removed 0 objects
[00:29:11] [INFO] Server resource reload complete!
[00:29:16] [INFO] example.js#16: right clicked with spider charm
[00:29:19] [ERROR] ! example.js#49: Error occurred while handling scheduled event callback: TypeError: Cannot call method "getPlayer" of undefined
#

Ok yeah fair

gilded timber
#

i think i see the issue

#

you have conflicting callback variables

slim zodiac
#

event?

gilded timber
#

in your scheduler you define the callback as event

#

when the hurt event is also event

#

so it's thinking you're calling <scheduler>.getPlayer

slim zodiac
#

right, good catch

#

ill test rn

gilded timber
#

but also you can just use playerSource without having to use the player ID

#

same for the entity being hurt

slim zodiac
#

Ok yeah that was a chatgpt thing

#

Sick, that works now. I guess event.entity.damage() isn't a thing either. Any idea how make an attack on an entity?

#

As in, create an instance of damage through event.entity