Jump to content

[1.7.10]Turning off auto health regeneration - please no console commands!


Frontsalat

Recommended Posts

The title says it already...I've come so far to find this inside the EntityPlayerSP...

 

 

   public void setPlayerSPHealth(float p_71150_1_)
    {
        float f1 = this.getHealth() - p_71150_1_;

        if (f1 <= 0.0F)
        {
            this.setHealth(p_71150_1_);

            if (f1 < 0.0F)
            {
                this.hurtResistantTime = this.maxHurtResistantTime / 2;
            }
        }
        else
        {
            this.lastDamage = f1;
            this.setHealth(this.getHealth());
            this.hurtResistantTime = this.maxHurtResistantTime;
            this.damageEntity(DamageSource.generic, f1);
            this.hurtTime = this.maxHurtTime = 10;
        }
    }

 

 

I'm just unsure how to manipulate it so health will not automatically regenerate.

 

A much better solution would be to turn off auto health regen without editing base files. Is this possible via player.capabilities? Or any Forge event for this?

Link to comment
Share on other sites

Looks like the code to determine whether or not the player should heal is in FoodStats/onUpdate

        if (p_75118_1_.worldObj.getGameRules().getGameRuleBooleanValue("naturalRegeneration") && this.foodLevel >= 18 && p_75118_1_.shouldHeal())
        {
            ++this.foodTimer;

            if (this.foodTimer >= 80)
            {
                p_75118_1_.heal(1.0F);
                this.addExhaustion(3.0F);
                this.foodTimer = 0;
            }
        }

 

That's called from EntityPlayer/onUpdate, the foodTimer field is private, however you could use ASM/Reflection to get access to the field, then on the PlayerTickEvent.Pre just keep it at 0

Link to comment
Share on other sites

I'd disagree with changing the game rule as that would affect every single player. If that is your goal then go for it, however if there's going to be conditions to this, like the player has to have some certain potion effect or be in a certain area, you don't want to use the gamerule but rather what I suggested.

Link to comment
Share on other sites

I agree that the original question isn't quite clear on what is to be achieved. It does sound like they mean just one of the players and not all players, so yeah changing the game rules is probably not the way to go.

 

Like 61352151511 said, the best way is to record the foodTimer value at the time the effect starts and then in the player tick event use reflection to keep the foodTimer set to that amount.

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

Link to comment
Share on other sites

It's ok, the Mod I'm creating is supposed to be played like that...no auto health regen...to be honest I think turning off auto health should've been an option in Minceraft to beginn with.

 

Btw., are you the Jabelar from the tutorial website? If so, I'd like to point out my gratitude to all your tutorial efforts... :)

Link to comment
Share on other sites

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.