X66Herobrine66X Posted January 4, 2018 Posted January 4, 2018 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. Quote
Draco18s Posted January 4, 2018 Posted January 4, 2018 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) Quote 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.
ArmamentHaki Posted January 4, 2018 Posted January 4, 2018 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. Quote
larsgerrits Posted January 4, 2018 Posted January 4, 2018 52 minutes ago, ArmamentHaki said: par2 is probably a parameter. Spoiler 1 Quote 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/
hiotewdew Posted January 4, 2018 Posted January 4, 2018 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. Quote All Projects found here: Website Main Programmer for: Better Animals Plus, Better Animal Models Created independently: QuickHomes, ClaimIt, ClaimIt API, CloneLand, DerpCats, QuickTeleports, QuickSpawns, MCMusicPlayer, MCDevDate, [SBM] Fluid Gun, OpenScreens Work on/Contribute to: Bewitchment Commissioned for: [SBM] Breadstone, [SBM] Infinite Falling, [SBM] Dead Man's Satchel, [SBM] Handheld Piston
Draco18s Posted January 4, 2018 Posted January 4, 2018 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) Quote 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.
hiotewdew Posted January 5, 2018 Posted January 5, 2018 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... Quote All Projects found here: Website Main Programmer for: Better Animals Plus, Better Animal Models Created independently: QuickHomes, ClaimIt, ClaimIt API, CloneLand, DerpCats, QuickTeleports, QuickSpawns, MCMusicPlayer, MCDevDate, [SBM] Fluid Gun, OpenScreens Work on/Contribute to: Bewitchment Commissioned for: [SBM] Breadstone, [SBM] Infinite Falling, [SBM] Dead Man's Satchel, [SBM] Handheld Piston
Draco18s Posted January 5, 2018 Posted January 5, 2018 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) ... Quote 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.
hiotewdew Posted January 5, 2018 Posted January 5, 2018 So you have to convert the method to some sort of format that excludes partial ticks so it can run serverside. Quote All Projects found here: Website Main Programmer for: Better Animals Plus, Better Animal Models Created independently: QuickHomes, ClaimIt, ClaimIt API, CloneLand, DerpCats, QuickTeleports, QuickSpawns, MCMusicPlayer, MCDevDate, [SBM] Fluid Gun, OpenScreens Work on/Contribute to: Bewitchment Commissioned for: [SBM] Breadstone, [SBM] Infinite Falling, [SBM] Dead Man's Satchel, [SBM] Handheld Piston
Draco18s Posted January 5, 2018 Posted January 5, 2018 4 hours ago, Draco18s said: There's a raytrace method in the World class that will work (look for a method that returns MovingObjectPosition) Quote 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.
Recommended Posts
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.