Jump to content

Recommended Posts

Posted

What I am trying to do:

Add an effect that gets stored in nbttagcompound to any item that extends ItemSword.

This effect adds additional damage based on the tier of effect when that sword is used to attack.

 

How I am trying to do this:

I am trying to hook into the LivingAttackEvent

Read the event.source.getSourceOfDamage().

if it is a player/using an extended class of sword/sword has the effect

then cancel this event and create a new event with additional damage.

 

there is an nbt flag that gets updated to stop this from looping.

 

I can add the effect to any sword, checking output has shown that this part works properly.

 

But I crash when calling event.source.getSourceOfDamage()

So I looked into the method and found that it simply returns null.

 

Is there another event that I can hook into that would let me do a similar thing, or is there a different way I should go about getting the (player/damageSource entity) while still using LivingAttackEvent?

 

If you want the logs I can post them, but it seems irrelevant to do so, since I know the source of the problem.

Current Project: Armerger 

Planned mods: Light Drafter  | Ore Swords

Looking for help getting a mod off the ground? Coding  | Textures

Posted

I guess I was just up too late working on this.

I made a stupid mistake and forgot to switch something.

 

For Anyone that looks at this thread, using event.source.getSourceOfDamage(), does work!

 

So new addition for this post:

Is this the correct way to "restart" an event?

 

DamageSource newSource = new EntityDamageSource(event.source.damageType, attackSource);

LivingAttackEvent remade = new LivingAttackEvent(event.entityLiving, newSource, event.ammount + (float)damage);

event.setCanceled(true);

MinecraftForge.EVENT_BUS.post(remade);

 

When I put a breakpoint in my code it does make it back with the altered values but it doesn't apply damage to the event.entity.

Is there another event I need to post first?

 

 

Current Project: Armerger 

Planned mods: Light Drafter  | Ore Swords

Looking for help getting a mod off the ground? Coding  | Textures

Posted

You should now about damage sources that:

1) There are passive sources, such as fire, and event my contain those. In this case, getSourceOfDamage returns null.

2) There are indirect entity sources, such as arrow, and event my contain those. In this case, getSourceOfDamage returns entity that damaged directly and getEntity entity that indirectly damaged entity.

3) There are direct entity sources, such as hitting with sword, and event may contain those. In this case, getSourceOfDamage and getEntity return entity that damaged entity.

Posted

You should now about damage sources that:

1) There are passive sources, such as fire, and event my contain those. In this case, getSourceOfDamage returns null.

2) There are indirect entity sources, such as arrow, and event my contain those. In this case, getSourceOfDamage returns entity that damaged directly and getEntity entity that indirectly damaged entity.

3) There are direct entity sources, such as hitting with sword, and event may contain those. In this case, getSourceOfDamage and getEntity return entity that damaged entity.

 

I hadn't meant to post that yet, it was edited while you posted this, and I did find those implementations, but thanks for the quick response!

And looking at the edited response I have an additional question.

Current Project: Armerger 

Planned mods: Light Drafter  | Ore Swords

Looking for help getting a mod off the ground? Coding  | Textures

Posted

The event itself does not damage entity. But it allows you to change damage value or cancel it. This is how events work. They are hooked by forge in to methods, where they are called in begining/end of method, which allows cancellation, changing parameters or doing anything else. So if you want to hurt entity, call attckEntityFrom... And don't forget that new event with your damage source will be posted on top of first one...

Posted

Just found this post http://www.minecraftforge.net/forum/index.php?topic=10794.0

 

Which if the LivingHurtEvent still works the same way, I can avoid having to cancel and send new information.

I'll have to test when I get home but I should just be able to alter the damage amount parameter and let everything continue.

 

 

BTW, this is what I had been doing:

read event information,

create altered parameters,

cancel the event,

post new event with altered parameters.

Current Project: Armerger 

Planned mods: Light Drafter  | Ore Swords

Looking for help getting a mod off the ground? Coding  | Textures

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.