Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

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?
27 minutes ago, lisilew said:

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

Yes.

28 minutes ago, lisilew said:

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

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

Some tips:

Spoiler

Modder Support:

Spoiler

1. Do not follow tutorials on YouTube, especially TechnoVision (previously called Loremaster) and HarryTalks, due to their promotion of bad practice and usage of outdated code.

2. Always post your code.

3. Never copy and paste code. You won't learn anything from doing that.

4. 

Quote

Programming via Eclipse's hotfixes will get you nowhere

5. Learn to use your IDE, especially the debugger.

6.

Quote

The "picture that's worth 1000 words" only works if there's an obvious problem or a freehand red circle around it.

Support & Bug Reports:

Spoiler

1. Read the EAQ before asking for help. Remember to provide the appropriate log(s).

2. Versions below 1.11 are no longer supported due to their age. Update to a modern version of Minecraft to receive support.

 

 

  • Author
13 hours ago, poopoodice said:

Potion effect might be a easier way to do this

 

13 hours ago, DavidM said:

potion effects might be better.

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?

2 hours ago, diesieben07 said:

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

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?

  • Author
1 hour ago, diesieben07 said:

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

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

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.