itsmeow / whisperwoods

Minecraft mod for Spooky Jam adding a few fearsome forest critters
Other
7 stars 10 forks source link

Hidebehind isn't recognized as an entity by KubeJS #71

Closed katubug closed 1 month ago

katubug commented 1 month ago

Describe the bug

I'm trying to write a script for the Hidebehind, where when you click on him with a certain item, he despawns. The script works on all other entities, but for some reason, clicking on the HideBehind isn't being logged as an entity. For example, my script looks like this:

ItemEvents.entityInteracted('minecraft:oak_planks', (event) => {
    const {
        player,
        hand,
        item,
        target,
        target: {
            x,
            y,
            z
        },
        server,
        level
    } = event;

    console.log(target.type)
    if (target.type != 'whisperwoods:hidebehind') return
    player.swing(hand, true);
    item.count--
    server.runCommandSilent(`particle heart ${target.x} ${target.y+1} ${target.z} 1 1 1 0 10 normal`)
    target.discard()
    server.runCommandSilent(`playsound minecraft:block.bubble_column.upwards_inside master @a ${target.x} ${target.y+1} ${target.z} 100000`)
    const itemEntity = level.createEntity('item');
    itemEntity.item = Item.of('kubejs:hidebehind_note')
    itemEntity.setPos(x + 1, y, z);
    itemEntity.spawn();
});

And the console log looks like this:

[10:41:16] [INFO] story_resolution.js#147: net.minecraft.world.entity.EntityType type() [dev.latvian.mods.rhino.NativeJavaMethod]
[10:41:46] [INFO] story_resolution.js#147: aquamirae:maze_mother

First line is me clicking on the Hidebehind. Second is me clicking on the Mother of the Maze from Aquamirae.

To Reproduce

Steps to reproduce the behavior:

  1. With KubeJS, install the above script in server_scripts
  2. Spawn Hidebehind
  3. Click on Hidebehind with Oak Planks in hand
  4. Nothing happens

Log output/error (if present)

Get your minecraft log and paste it here.

Expected behavior

I expect the console output to say "whisperwoods:hidebehind" and for the script to execute on the entity.

Versions

Additional context

I'm guessing there's something about the Hidebehind's behavior that makes it not a true entity somehow? It was spawned via spawn egg, if that makes a difference. But if this is intended design and can't be altered, then I have a lot of changes to make to my pack haha. So any help is very appreciated! Thank you!

itsmeow commented 1 month ago

No it's a real entity. I'm not sure what the "type" variable KubeJS is using is. WW has complex entity type logic so it may be that the type isn't fully resolved in the same way? It looks like the type field there is a method rather than an actual type object. To me it seems more like a bug with KubeJS interacting with my atypical type system?

itsmeow commented 1 month ago

Try using type() instead of type

katubug commented 1 month ago

Hmm, okay, so tentatively that works?

[17:07:12] [ERROR] ! story_resolution.js#147: Error in 'ItemEvents.entityInteracted': TypeError: Cannot call property type in object PosCow['Possessed Cow'/1227, l='ServerLevel[New New Testing Final For Real]', x=236.50, y=64.00, z=-1736.50]. It is not a function, it is "object".
[17:07:36] [INFO] story_resolution.js#147: entity.whisperwoods.hidebehind [net.minecraft.world.entity.EntityType]

The console.log part of the script breaks if I try to use it on another entity, but it works for HideBehind. Sorta, I'm just not sure how to edit the next part of the script to work with this. I'll poke around at it but any help would be appreciated.

Edit: Okay actually it was super easy to make the script work properly lol. I'm not sure how to check for other entities though, I'll have to figure that out. Thanks for your help!

itsmeow commented 1 month ago

you can use "typeof" in JavaScript to verify the type of something (it will be "function" for functions lol)