Jump to content

[1.7.2]Ways to detect when a player successfully hits and damages an entity?


Recommended Posts

Posted

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!

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!

Posted

Sorry for the delay in response, but anyway when is this LivingHurtEvent Triggered

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!

Posted

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.

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!

Posted

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).

Posted
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.

Check out my tutorials here: http://jabelarminecraft.blogspot.com/

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



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • This is the last line before the crash: [ebwizardry]: Synchronising spell emitters for PixelTraveler But I have no idea what this means
    • What in particular? I barely used that mod this time around, and it's never been a problem in the past.
    • Im trying to build my mod using shade since i use the luaj library however i keep getting this error Reason: Task ':reobfJar' uses this output of task ':shadowJar' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed. So i try adding reobfJar.dependsOn shadowJar  Could not get unknown property 'reobfJar' for object of type org.gradle.api.internal.artifacts.dsl.dependencies.DefaultDependencyHandler. my gradle file plugins { id 'eclipse' id 'idea' id 'maven-publish' id 'net.minecraftforge.gradle' version '[6.0,6.2)' id 'com.github.johnrengelman.shadow' version '7.1.2' id 'org.spongepowered.mixin' version '0.7.+' } apply plugin: 'net.minecraftforge.gradle' apply plugin: 'org.spongepowered.mixin' apply plugin: 'com.github.johnrengelman.shadow' version = mod_version group = mod_group_id base { archivesName = mod_id } // Mojang ships Java 17 to end users in 1.18+, so your mod should target Java 17. java.toolchain.languageVersion = JavaLanguageVersion.of(17) //jarJar.enable() println "Java: ${System.getProperty 'java.version'}, JVM: ${System.getProperty 'java.vm.version'} (${System.getProperty 'java.vendor'}), Arch: ${System.getProperty 'os.arch'}" minecraft { mappings channel: mapping_channel, version: mapping_version copyIdeResources = true runs { configureEach { workingDirectory project.file('run') property 'forge.logging.markers', 'REGISTRIES' property 'forge.logging.console.level', 'debug' arg "-mixin.config=derp.mixin.json" mods { "${mod_id}" { source sourceSets.main } } } client { // Comma-separated list of namespaces to load gametests from. Empty = all namespaces. property 'forge.enabledGameTestNamespaces', mod_id } server { property 'forge.enabledGameTestNamespaces', mod_id args '--nogui' } gameTestServer { property 'forge.enabledGameTestNamespaces', mod_id } data { workingDirectory project.file('run-data') args '--mod', mod_id, '--all', '--output', file('src/generated/resources/'), '--existing', file('src/main/resources/') } } } sourceSets.main.resources { srcDir 'src/generated/resources' } repositories { flatDir { dirs './libs' } maven { url = "https://jitpack.io" } } configurations { shade implementation.extendsFrom shade } dependencies { minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" implementation 'org.luaj:luaj-jse-3.0.2' implementation fg.deobf("com.github.Virtuoel:Pehkui:${pehkui_version}") annotationProcessor 'org.spongepowered:mixin:0.8.5:processor' minecraftLibrary 'luaj:luaj-jse:3.0.2' shade 'luaj:luaj-jse:3.0.2' } // Example for how to get properties into the manifest for reading at runtime. tasks.named('jar', Jar).configure { manifest { attributes([ 'Specification-Title' : mod_id, 'Specification-Vendor' : mod_authors, 'Specification-Version' : '1', // We are version 1 of ourselves 'Implementation-Title' : project.name, 'Implementation-Version' : project.jar.archiveVersion, 'Implementation-Vendor' : mod_authors, 'Implementation-Timestamp': new Date().format("yyyy-MM-dd'T'HH:mm:ssZ"), "TweakClass" : "org.spongepowered.asm.launch.MixinTweaker", "TweakOrder" : 0, "MixinConfigs" : "derp.mixin.json" ]) } rename 'mixin.refmap.json', 'derp.mixin-refmap.json' } shadowJar { archiveClassifier = '' configurations = [project.configurations.shade] finalizedBy 'reobfShadowJar' } assemble.dependsOn shadowJar reobf { re shadowJar {} } publishing { publications { mavenJava(MavenPublication) { artifact jar } } repositories { maven { url "file://${project.projectDir}/mcmodsrepo" } } } my entire project:https://github.com/kevin051606/DERP-Mod/tree/Derp-1.0-1.20
    • All versions of Minecraft Forge suddenly black screen even without mods (tried reinstalling original Minecraft, Java, updating drivers doesn't work)
  • Topics

×
×
  • Create New...

Important Information

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