Jump to content

Recommended Posts

Posted

I have an enchantment that deals certain damage to an entity every second over certain amount of time.

I attach a capability that contains current state (active or not), player id, duration and damage to the entity.

Then, I use LivingUpdateEvent to decrease duration every tick and damage the entity every 20 ticks passed.

I have two questions related to this implementation.

  1. What happens when no one is tracking the entity? Will the entity still get damaged?
  2. Is this considered a bad practice in terms of performance? If so, what method would you recommend?
Posted
  On 5/2/2020 at 12:26 AM, lisilew said:

What happens when no one is tracking the entity? Will the entity still get damaged?

Expand  

Yes.

  On 5/2/2020 at 12:26 AM, lisilew said:

Is this considered a bad practice in terms of performance? If so, what method would you recommend?

Expand  

It's fine, but stuff like potion effects might be better.

Some tips:

  Reveal hidden contents

 

Posted
  On 5/2/2020 at 12:52 AM, poopoodice said:

Potion effect might be a easier way to do this

Expand  

 

  On 5/2/2020 at 12:55 AM, DavidM said:

potion effects might be better.

Expand  

Potion effect sounds good as it has a method that gets called every tick but I want to damage the entity using DamageSource.cuasePlayerDamage, thus, I save player id in the capability.

As far as I know, Effect is constructed only once so how can I store extra data?

  On 5/2/2020 at 12:19 PM, diesieben07 said:

You could also use World#getGameTime, which is incremented every tick

Expand  

Do you mean I put start time in the capability and check every tick if difference between current game time and start time is multiple of 20 instead of decrementing duration? Or is there a different way to use it?

Posted
  On 5/2/2020 at 2:36 PM, diesieben07 said:

attach a capability to players and in that capability store the entity that is being damaged.

Expand  

Actually, I attach the capability to the entity that is being damaged so only one player can affect the entity at the same time but one player can affect many entities at the same time.

Player's unique id is stored in the capability and when LivingUpdateEvent is fired, I get Player object from World#getPlayerByUuid.

How would this approach work when the entity is not tracked by any players and despawns?

Is this approach wrong and should I flip it like you said and attach the capability to players?

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.