Mecblader Posted May 30, 2014 Posted May 30, 2014 Hello, I am making a mod and I need to detect when a player successfully hit and damages an entity. In my mod I have a level system and one of the many lvls that are monitored are the player attack lvl. I am using the AttackEntityEvent to detect when the player hits the entity and I use this method to damage the entity by setting the players base damage attribute according to what lvl they are and what tool they are using. The player then get awarded xp when the player hits the entity. My problem is that I noticed that forge calls this method every time the player clicks the entity. This may be good in some cases, but that is breaking my system by giving the player xp even when they have not successfully damaged the entity because of the cool down. So I need a way to detect when the player success damages the entity, so I can have it reward the player with exp according to how much damage the player has done to the entity out of how much health the entity has. All help is appreciated, Thank You! Quote Don't be afraid to ask question when modding, there are no stupid question! Unless you don't know java then all your questions are stupid!
coolAlias Posted May 30, 2014 Posted May 30, 2014 Why not LivingHurtEvent? Quote http://i.imgur.com/NdrFdld.png[/img]
Mecblader Posted May 30, 2014 Author Posted May 30, 2014 Sorry for the delay in response, but anyway when is this LivingHurtEvent Triggered Quote Don't be afraid to ask question when modding, there are no stupid question! Unless you don't know java then all your questions are stupid!
coolAlias Posted May 30, 2014 Posted May 30, 2014 Sorry for the delay in response, but anyway when is this LivingHurtEvent Triggered Pretty much what you would expect from the name - any time any EntityLivingBase suffers any amount of damage. Quote http://i.imgur.com/NdrFdld.png[/img]
Mecblader Posted May 30, 2014 Author Posted May 30, 2014 Does it also give what entity caused the damage because there is an EntityLiving and an entity in the event. If not then is there a cool down variable in EntityPlayer or EntityLiving because I check, but I could not find it. Quote Don't be afraid to ask question when modding, there are no stupid question! Unless you don't know java then all your questions are stupid!
coolAlias Posted May 30, 2014 Posted May 30, 2014 Does it also give what entity caused the damage because there is an EntityLiving and an entity in the event. Those are the same entity; use the DamageSource provided to get the entity that caused the damage, if any. DamageSource#getSourceOfDamage() returns the entity directly responsible for the damage (e.g. the EntityArrow for an arrow, a mob that physically struck the player, etc.), whereas DamageSource#getEntity() returns the entity that is ultimately responsible for the damage (e.g. the player that shot the arrow). Sometimes both methods return the same entity (e.g. EntityDamageSource), sometimes they return null (e.g. fall damage has no entity), and sometimes the rules may be completely different (e.g. a mod with custom damage sources that was poorly designed to not follow the standard). Quote http://i.imgur.com/NdrFdld.png[/img]
jabelar Posted May 31, 2014 Posted May 31, 2014 is there a cool down variable in EntityPlayer or EntityLiving because I check, but I could not find it. I think there is hurtResistantTime which count until it reaches maxHurtResistantTime. The attackEntityFrom() method in each entity is (I believe) called on each attack, and whether damage happens is determined there (i.e. it will check if the entity is invulnerable, whether player is in creative mode, etc.) including checking for the hurt resistance cooldown. Anyway, you might want to look at the attackEntityFrom() method in some vanilla entity classes (and superclasses) to get ideas on how damage is determined). There is also the recentlyHit which (according to the comments) is set to 100 (the Javadoc says it's set to 60 but the code in EntityLiving sets it to 100) when an entity is hit by a player. There is also hurtTime, maxHurtTime, and lastDamage which are all used related to cooldowns and such. Quote Check out my tutorials here: http://jabelarminecraft.blogspot.com/
Recommended Posts
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.