#Making Damage Reflection

26 messages · Page 1 of 1 (latest)

echo viper
#

I'm trying to make some reflection when I damage netherite_monstrosity 20 times.

EntityEvents.checkSpawn("cataclysm:netherite_monstrosity", event => {
    let monstrosity = event.getEntity();
    monstrosity.persistentData.rageStack = 0;
})

EntityEvents.hurt("cataclysm:netherite_monstrosity", event => {
    let monstrosity = event.getEntity();
    if (monstrosity.persistentData.rageStack == 20) {
        event.source.actual.attack('void', event.damage)
        monstrosity.persistentData.rageStack = 0;
    }
    else monstrosity.persistentData.rageStack += 1;
})

it crashed as


20:25:21.854
game
[20:25:21] [Server thread/ERROR] [KubeJS Server/]: mobs/bosses/boss_manager.js#9: Error in 'EntityEvents.hurt': Can't find method net.minecraft.server.level.ServerPlayer.m_5706_(string,number).
20:25:21.866
game
[20:25:21] [Server thread/ERROR] [KubeJS Server/]: ��rhino.EvaluatorException: Can't find method net.minecraft.server.level.ServerPlayer.m_5706_(string,number). (server_scripts:mobs/bosses/boss_manager.js#9)
leaden hornetBOT
#

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

balmy tusk
#

do you know how to import classes? @echo viper

#

you need to import net.minecraft.world.damagesource.DamageSources

and call fellOutOfWorld() instead of using "void"

#

this was changed on 1.20.1+

echo viper
#

thanks!!

#

So I tried this

let DamageSource = Java.loadClass('net.minecraft.world.damagesource.DamageSources')
DamageSource.IMPL()

EntityEvents.checkSpawn("cataclysm:netherite_monstrosity", event => {
    let monstrosity = event.getEntity();
    monstrosity.persistentData.rageStack = 0;
})

EntityEvents.hurt("cataclysm:netherite_monstrosity", event => {
    let damage = new DamageSource();
    let monstrosity = event.getEntity();
    if (monstrosity.persistentData.rageStack == 5) {
        let player = event.source.getActual()
        player.attack(event.damage)
        monstrosity.persistentData.rageStack = 0;
    }
    else monstrosity.persistentData.rageStack += 1;
})
#

I thought I know how to import classes

#

but i don't

balmy tusk
#

Don't name DamageSource, it is already used by KubeJS

name it $DamageSources

#

you don't need to instantiate anything just do what I said

#

load that class and use $DamageSources.fellOutOfWorld() instead of 'void'

echo viper
#

[21:26:30] [Server thread/ERROR] [KubeJS Server/]: mobs/bosses/boss_manager.js#12: Error in 'EntityEvents.hurt': Java class "net.minecraft.world.damagesource.DamageSources" has no public instance field or method named "fellOutOfWorld".

#
let $DamageSources = Java.loadClass('net.minecraft.world.damagesource.DamageSources')

EntityEvents.checkSpawn("cataclysm:netherite_monstrosity", event => {
    let monstrosity = event.getEntity();
    monstrosity.persistentData.rageStack = 0;
})

EntityEvents.hurt("cataclysm:netherite_monstrosity", event => {
    let monstrosity = event.getEntity();
    if (monstrosity.persistentData.rageStack == 5) {
        let player = event.source.getActual()
        player.attack($DamageSources.fellOutOfWorld(), event.damage)
        monstrosity.persistentData.rageStack = 0;
    }
    else monstrosity.persistentData.rageStack += 1;
})
balmy tusk
#

what am I missing?

#

are you on 1.20.1?

#

oih...

echo viper
#

yes im on 1.20.1

balmy tusk
#
let $DamageSources = Java.loadClass('net.minecraft.world.damagesource.DamageSources')
let voidDamage = Utils.lazy(() => new $DamageSources(Utils.server.registryAccess()).fellOutOfWorld())

EntityEvents.checkSpawn("cataclysm:netherite_monstrosity", event => {
    let monstrosity = event.getEntity();
    monstrosity.persistentData.rageStack = 0;
})

EntityEvents.hurt("cataclysm:netherite_monstrosity", event => {
    let monstrosity = event.getEntity();
    if (monstrosity.persistentData.rageStack == 5) {
        let player = event.source.getActual()
        player.attack(voidDamage.get(), event.damage)
        monstrosity.persistentData.rageStack = 0;
    }
    else monstrosity.persistentData.rageStack += 1;
})

can you try this?

echo viper
#

i'll try and report

#

thanks!

echo viper
#

it worked yes!

#

by the way. why Utils.lazy make this work?