Jump to content

Calling a swing?


GravityWolf

Recommended Posts

I was wondering if anyone knew the event that calls a swing that (possibly) does a certain amount of damage. I want it so when you right click with a weapon you swing. Also, I need some help ignoring armor with the swing. Thanks! Also, I have looked around a lot in EntityLivingBase, but I couldn't find the call for a swing. Also, when I search online I mostly get "I CAN SWING MY SWORD!" xP

Link to comment
Share on other sites

I haven't actually tested it and am fairly new at modding, however I believe in order to deal damage you call the following:

 

EntityWeWantToDamage.damageEntity(DamageSource par1DamageSource, float par2);

 

Where EntityWeWantToDamage is replaced by whatever entity you're damaging, and par2 is the amount of damage dealt.

Link to comment
Share on other sites

I haven't actually tested it and am fairly new at modding, however I believe in order to deal damage you call the following:

 

EntityWeWantToDamage.damageEntity(DamageSource par1DamageSource, float par2);

 

Where EntityWeWantToDamage is replaced by whatever entity you're damaging, and par2 is the amount of damage dealt.

 

Wait a minute, so um, what do I put in EntityWeWantToDamage? I add the par EntityLivingBase, but it gives me an error. And this is all supposed to go in  onRightClick(), right?

Link to comment
Share on other sites

Pretty sure I got the code right now, but I am having trouble registering it with Forge. Here is my attempt at registering:

 

MinecraftForge.EVENT_BUS.register(new ItemKatana.EntityInteractEvent());

 

And here is my ItemKatana class:

 

package NoctusRealm.Items;

import net.minecraft.client.Minecraft;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.EnumToolMaterial;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemSword;
import net.minecraft.util.DamageSource;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
import net.minecraftforge.event.ForgeSubscribe;
import net.minecraftforge.event.entity.player.EntityInteractEvent;

public class ItemKatana extends ItemSword {

public ItemKatana(int id, EnumToolMaterial material) {

		super(id, material);
		setMaxStackSize(1);
		setCreativeTab(CreativeTabs.tabCombat);

}

@Override
public ItemStack onItemRightClick(ItemStack itemStack, World world, EntityPlayer player) {

	Minecraft.getMinecraft().thePlayer.swingItem();

	double calculatedX = 0.2 * (double) (-MathHelper.sin(player.rotationYaw/ 180.0F * (float) Math.PI)* MathHelper.cos(player.rotationPitch / 180.0F* (float) Math.PI) * 0.4f);
	double calculatedZ = 0.2 * (double) (MathHelper.cos(player.rotationYaw	/ 180.0F * (float) Math.PI)* MathHelper.cos(player.rotationPitch / 180.0F* (float) Math.PI) * 0.4f);

	player.motionX = calculatedX;
	player.motionZ = calculatedZ;
	player.motionY = 0.1;

	return itemStack;
}

@ForgeSubscribe
public void EntityInteractEvent(EntityInteractEvent event, Entity entity) {
	if(entity instanceof EntityLiving)
	{
		((EntityLiving)entity).attackEntityFrom(DamageSource.causePlayerDamage((EntityPlayer)entity), 1);
	}
}

}

 

Anyone know why I am getting this error? It is:

 

ItemKatana.EntityInteractEvent cannot be resolved to a type

Link to comment
Share on other sites

I'm a noob modder but I do at least know enough to create that piece of code.  Like Hydro said it would be good to investigate entity interact events.  I'm sorry I wish I could help you more, I'm just not an expert though.

 

Oh, it's ok. I'm a huge noob too xD

Link to comment
Share on other sites

About ignoring armour:

Create new DamageSources:

package xxx
import net.minecraft.util.DamageSource;
public class MyDamageSource extends DamageSource
{
public MyDamageSource(String par1Str)
{
	super(par1Str);
}
public static MyDamageSource ArmorPiercing = new MyDamageSource("MyMod.ArmorPiercing").setDamageBypassesArmor();
public static MyDamageSource Magic = new MyDamageSource("MyMod.Magic").setMagicDamage();

public MyDamageSource setDamageBypassesArmor()
{
	return (MyDamageSource) super.setDamageBypassesArmor();
}

public MyDamageSource setMagicDamage()
{
	return (MyDamageSource) super.setMagicDamage();
}
}

Here you got two lol (I just wrote it). You can also use EXISTING damage sources from net.minecraft.util.DamageSource;

 

Hope it will help :)

1.7.10 is no longer supported by forge, you are on your own.

Link to comment
Share on other sites

About ignoring armour:

Create new DamageSources:

package xxx
import net.minecraft.util.DamageSource;
public class MyDamageSource extends DamageSource
{
public MyDamageSource(String par1Str)
{
	super(par1Str);
}
public static MyDamageSource ArmorPiercing = new MyDamageSource("MyMod.ArmorPiercing").setDamageBypassesArmor();
public static MyDamageSource Magic = new MyDamageSource("MyMod.Magic").setMagicDamage();

public MyDamageSource setDamageBypassesArmor()
{
	return (MyDamageSource) super.setDamageBypassesArmor();
}

public MyDamageSource setMagicDamage()
{
	return (MyDamageSource) super.setMagicDamage();
}
}

Here you got two lol (I just wrote it). You can also use EXISTING damage sources from net.minecraft.util.DamageSource;

 

Hope it will help :)

 

Thanks, but how/where do I apply this to my weapon? And for MyMod.xxx do I change MyMod to the package I am in?

Link to comment
Share on other sites

Oh god... I don't have code but maybe my memory is good enough.

 

if(entity instanceof EntityPlayer)
     {
          entity.attackEntityFrom(MyDamageSource.MyDamage, damagevalue);
     }

Normally I would use it in hitEntity() (where you have attacker and target), but here you have only attacker, so this will be wrong (but you can always try implementing it).

In this case you have to replace your:

((EntityLiving)entity).attackEntityFrom(DamageSource.causePlayerDamage((EntityPlayer)entity), 1);

I really can't do anything now but this should work (i mean - try doing stuff with it).

 

 

1.7.10 is no longer supported by forge, you are on your own.

Link to comment
Share on other sites

For giving damage, just do mc.thePlayer.attackEntity (I believe that's what it's called)

 

Thanks, but I get an error under

mc

 

and you fail to mention which error.

Although I'm guessing you are not only new to modding minecraft but also new to programming in general as well?

If you guys dont get it.. then well ya.. try harder...

Link to comment
Share on other sites

Pretty sure I got the code right now, but I am having trouble registering it with Forge. Here is my attempt at registering:

 

MinecraftForge.EVENT_BUS.register(new ItemKatana.EntityInteractEvent());

You have to register the entire class, so it could be:

MinecraftForge.EVENT_BUS.register(new ItemKatana());

But you'd better create a new class containing all event you need, instead of putting into your item class.

public class MyEventHandler()
{
@ForgeSubscribe
*first event

@ForgeSuscribe
*second event

etc
}

then

MinecraftForge.EVENT_BUS.register(new MyEventHandler());

Link to comment
Share on other sites

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.