Skip to content

Nested events are passed as parent event #18

Open
@Dico200

Description

@Dico200

If an event nests another event, for example PlayerDeathEvent, which extends EntityDeathEvent, an instance of EntityDeathEvent is passed to the plugin.

hooking into "entity.PlayerDeathEvent" is fine, however an error is thrown on load. I'm printing exc_info here:

[02:27:34 ERROR]: [RedstonerUtils] Traceback (most recent call last):
  File "C:\Users\Dico\Documents\Servers\Test Server\plugins\redstoner-utils.py.dir\deathmessages.py", lin
    broadcastToWorlds(normal_survival_worlds, event.getDeathMessage())
AttributeError: 'org.bukkit.event.entity.EntityDeathEvent' object has no attribute 'getDeathMessage'

Here's the code I'm using:

from helpers import *

normal_survival_worlds = ("Survival_1", "Survival_1_nether", "Survival_1_the_end", "world")
trusted_survival_worlds = ("TrustedSurvival_1", "TrustedSurvival_1_nether", "TrustedSurvival_1_the_end")

@hook.event("entity.PlayerDeathEvent", "low")
def on_death(event):
    try:
        info("someone died")
        world = event.getEntity().getWorld()
        if world.getGameRuleValue("showDeathMessages") == "true":
            name = world.getName()
            if name in normal_survival_worlds:
                broadcastToWorlds(normal_survival_worlds, event.getDeathMessage())    
            elif name in trusted_survival_worlds:
                broadcastToWorlds(trusted_survival_worlds, event.getDeathMessage())
    except:
        error(trace())

def broadcastToWorlds(worlds, message):
    info("broadcasting...")
    try:
        for player in (list(world.getPlayers()) for world in (server.getWorld(name) for name in worlds) if world != None):
            msg(player, message)
    except:
        error(trace())

You're not able to see all imported functions but you should be able to read everything.

Note that an instance of EntityDeathEvent is passed to the function while PlayerDeathEvent is listened for.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions