Is there a way to place particles along a ray trace line

Started by Planqqc on

Topic category: Help with Minecraft modding (Java Edition)

Joined Dec 2022
Points:

User statistics:

  • Modifications:
  • Forum topics:
  • Wiki pages:
  • MCreator plugins:
  • Comments:
Is there a way to place particles along a ray trace line

I'm trying to make a laser attack weapon, the damage system works just fine but I want to spawn particles along the line cast from my sight to my target. Does anyone know of a way to do this?

Joined Jun 2022
Points:

User statistics:

  • Modifications:
  • Forum topics:
  • Wiki pages:
  • MCreator plugins:
  • Comments:
you could make a variable…
Mon, 01/02/2023 - 03:56

you could make a variable and shift it forwards in a loop and check if the block at the location is not air

Joined Dec 2022
Points:

User statistics:

  • Modifications:
  • Forum topics:
  • Wiki pages:
  • MCreator plugins:
  • Comments:
When you think about moving…
Mon, 01/02/2023 - 17:03

When you think about moving in 3D, you use something called a vector.

3D vectors are usually written with x, y, z coordinates.

To move forward in a direction, you want what's called a "normalized" or "unit" vector, which takes the direction you are facing and shortens it down to a single "unit". Usually these are exactly 1 meter/block/etc long, so if you add 2 of them together you get a distance of 2 meters/blocks/whatever in that direction.

To make particles in a straight line, you would use the unit vector of the direction the player is facing, and just keep adding 1 unit to it and making more particles until you hit a solid block, like what redwoodsteve mentioned above.

To get a unit vector:

Step 1 - get the position you are looking at and subtract the player's position from it. This is your delta vector.
Step 2 - we need to get the magnitude of the delta. You can do that with this formula: mag = sqrt( (x * x) + (y * y) + (z * z))
Step 3 - divide the x, y, and z values of your delta vector by the magnitude - this new vector is your unit vector

Here's a super simple example:
If the player is looking straight forward on the x axis, maybe they are looking at a block at X12, Y0, Z0
We'll pretend they are standing at X2, Y0, Z0

We subtract 2, 0, 0 from 12, 0, 0 and get a result of 10, 0, 0. This is our delta
Next we do some math: 
mag = sqrt( ( 10 * 10 ) + ( 0 * 0 ) + ( 0 * 0 ) ) 
which means mag = sqrt( 100 )
which means mag = 10. Wow, it's 10 blocks away - that's neat

So now we divide 10, 0, 0 by 10 and get 1, 0, 0 as our unit vector
This means if we keep adding this value, we'll keep moving 1 block forward
Since "forward" in our example is a straight line on the x axis, hopefully it makes sense that adding 1 block on x moves you forward 1 block on x lol

This math also works for angles that are a bit harder to visualize or quickmaths, though

Joined Dec 2022
Points:

User statistics:

  • Modifications:
  • Forum topics:
  • Wiki pages:
  • MCreator plugins:
  • Comments:
This is working really well,…
Tue, 01/03/2023 - 17:26

This is working really well, however the particles are only generated when the player is aiming at an entity with in the positive X and Positive Y quadrants, when aiming at an entity in the double negative quadrants the beam will fire at the correct Y value but be "moving" behind the player. I tried to make a fix to this as I had the assumption that it was due to losing the negative value within step 2 "mag = sqrt( (x * x) + (y * y) + (z * z))". After making a statement to check if the value was previously negative, then reconfirming it to a negative value then implementing that it still doesn't work. It simply does not generate particles in any of the other 3 quadrants now. I hope I explained my problem well enough. If not I can upload a screenshot of the procedure I made. Many thanks to the help so far!

Joined May 2022
Points:

User statistics:

  • Modifications:
  • Forum topics:
  • Wiki pages:
  • MCreator plugins:
  • Comments:
will someone send screenshot
Mon, 01/29/2024 - 16:08

will someone send screenshot