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

Hello,

 

I have been having trouble figuring out how to make my sword spawn lightning on right click where I look. I have basic knowledge of java, I am currently taking mod design 2 on youth digital. I still don't know what vectors, and par2 and all that means, Im not very advanced.

This is what I have so far:

package mymod.items;

import library.items.LibItemSword;
import library.util.Actions;
import mymod.Main;
import net.minecraft.block.material.Material;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.potion.PotionHealth;
import net.minecraft.util.ActionResult;
import net.minecraft.util.EnumHand;
import net.minecraft.world.World;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;

public class MySword2 extends LibItemSword {

	public MySword2(String registryName, ToolMaterial material) {
		super(registryName, material);
		this.setCreativeTab(Main.my_creative_tab_1);
		this.setScale(0.5F);
	}

	
	@Override
	public boolean hitEntity(ItemStack stack, EntityLivingBase hitEntity, EntityLivingBase attackingEntity)
	{
	hitEntity.addPotionEffect(new PotionEffect(Potion.getPotionById(2), 100, 10));
	return true;
	}
	
	@Override
	public ActionResult<ItemStack> onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) {
		//Actions.summonLightningAtPosition(worldIn, playerIn.get, 5);
		
		return super.onItemRightClick(worldIn, playerIn, handIn);
	}
}

If you could help that would be greatly appreciated.

You need to create a new lightning entity and spawn it in the world at the desired postiion.

You can get that by doing a ray trace from the player's eye position and look vector and getting the point that that ray collides with something.

There's a raytrace method in the World class that will work (look for a method that returns MovingObjectPosition)

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

A Vector is a Way in the world. It can start at any point and end at any point 

That means it has a X, a Y and a Z amount of units.

It is more simple than it sounds, really.

 

par2 is probably a parameter.

52 minutes ago, ArmamentHaki said:

par2 is probably a parameter.

Spoiler

Afbeeldingsresultaat voor you don't say meme

 

Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support.

 

1.12 -> 1.13 primer by williewillus.

 

1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support.

 

http://www.howoldisminecraft1710.today/

A Vector is a list of three numbers. It has an X value, a Y value, and a Z value. In Minecraft, X, Y, and Z refer to the position a block/tile/entity is located at.

So if you have a Vector and desire a BlockPos, you can create a BlockPos with a vector via

new BlockPos(Vector)

Draco referenced the rayTrace function.

You can use the EntityPlayer rayTrace to find the Vector (Block Position) that the play is currently looking at.

So you can use

RayTraceResult rayResult = playerIn.rayTrace(howFarThePlayerCanReachinBlocks, partialTicksnotSurewhatthisIs);
BlockPos lookingPosition = new BlockPos(rayResult.hitVec);
// Summon your lightning at lookingPosition

I haven't tested but if that doesn't work try adding the hitVec to the player position like this:

BlockPos lookingPosition = rayResult.hitVec.add(player.getPositionVector());

 

Pursue your modding course and make sure you understand Java and not just Minecraft code.

Java is a useful skill and a powerful tool.

32 minutes ago, hiotewdew said:

RayTraceResult rayResult = playerIn.rayTrace(howFarThePlayerCanReachinBlocks, partialTicksnotSurewhatthisIs);

Partial Ticks is what fraction of a game-tick the current render frame is on (if the game runs at 20 ticks a second and the application is rendering at 60 frames a second, then each frame is 0.3333 of a tick). Partial ticks only make sense client side, so please double check that that rayTrace method is not marked @SideOnly(Side.CLIENT)

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

43 minutes ago, Draco18s said:

Partial Ticks is what fraction of a game-tick the current render frame is on (if the game runs at 20 ticks a second and the application is rendering at 60 frames a second, then each frame is 0.3333 of a tick). Partial ticks only make sense client side, so please double check that that rayTrace method is not marked @SideOnly(Side.CLIENT)

 @Nullable
    @SideOnly(Side.CLIENT)
    public RayTraceResult rayTrace(double blockReachDistance, float partialTicks)
    {
        Vec3d vec3d = this.getPositionEyes(partialTicks);
        Vec3d vec3d1 = this.getLook(partialTicks);
        Vec3d vec3d2 = vec3d.addVector(vec3d1.x * blockReachDistance, vec3d1.y * blockReachDistance, vec3d1.z * blockReachDistance);
        return this.world.rayTraceBlocks(vec3d, vec3d2, false, false, true);
    }

This is the method...

46 minutes ago, Draco18s said:

so please double check that that rayTrace method is not marked @SideOnly(Side.CLIENT)

Just now, hiotewdew said:

@SideOnly(Side.CLIENT)

...

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

So you have to convert the method to some sort of format that excludes partial ticks so it can run serverside.

4 hours ago, Draco18s said:

There's a raytrace method in the World class that will work (look for a method that returns MovingObjectPosition)

 

Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable.  If you think this is the case, JUST REPORT ME.  Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice.

 

Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked.

 

DO NOT PM ME WITH PROBLEMS. No help will be given.

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.