Jump to content

Recommended Posts

Posted

I'm trying to kill a mob on right-click with an item, but without "hurting" the mob because that would make it drop items (and I don't want that as you can probably guess).

entityLiving.setDead() and entityLiving.kill() don't seem to work. Any ideas?

public boolean itemInteractionForEntity(ItemStack itemStack, EntityLiving entityLiving, EntityPlayer entityPlayer) {
	entityLiving.kill();
	itemStack.damageItem(1, entityPlayer);
	return true;
}

Posted

Try using world.removeEntity(Entity par1);

 

Doesn't seem to work either.

If removeEntity says this:

public void removeEntity(Entity par1Entity)
    {
        if (par1Entity.riddenByEntity != null)
        {
            par1Entity.riddenByEntity.mountEntity((Entity)null);
        }

        if (par1Entity.ridingEntity != null)
        {
            par1Entity.mountEntity((Entity)null);
        }

        par1Entity.setDead();

        if (par1Entity instanceof EntityPlayer)
        {
            this.playerEntities.remove(par1Entity);
            this.updateAllPlayersSleepingFlag();
        }
    }

then basically is doing the same as setDead(), but being just a bit more specific about what the entity is doing, right?

Posted

setDead() works fine, but in this case, I think that the whole method is not working because I didn't override it. Doing that would not allow me to use EntityPlayer as a parameter. Any ideas on how I can use entityPlayer in the method?

@Override
public boolean itemInteractionForEntity(ItemStack itemStack, EntityLiving entityLiving  /*, EntityPlayer entityPlayer*/) {
entityLiving.setDead();
itemStack.damageItem(1, entityPlayer);  << I need entityPlayer
return true;
}

Posted

setDead() works fine, but in this case, I think that the whole method is not working because I didn't override it. Doing that would not allow me to use EntityPlayer as a parameter. Any ideas on how I can use entityPlayer in the method?

@Override
public boolean itemInteractionForEntity(ItemStack itemStack, EntityLiving entityLiving  /*, EntityPlayer entityPlayer*/) {
entityLiving.setDead();
itemStack.damageItem(1, entityPlayer);  << I need entityPlayer
return true;
}

 

You don't understand how overrides work.

Just because a function has the same name doesn't mean it's going to be called in the same instances as the original function, but magically pull additional parameters.  The @Override annotation does nothing but throw errors when the function you have isn't actually overriding anything.

 

Because that's what it is.  An annotation.  A clue to the IDE that "hey, error check this in this special way please."

 

In any case, you actually don't need a reference to the player there.  If you open up ItemStack.java and look at that function, you'll find the only thing it needs the player for is to prevent item damage while in creative mode.  If you pass null, the item will work and take damage JUST FINE.

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.

Posted

You don't understand how overrides work.

Just because a function has the same name doesn't mean it's going to be called in the same instances as the original function, but magically pull additional parameters.  The @Override annotation does nothing but throw errors when the function you have isn't actually overriding anything.

 

Because that's what it is.  An annotation.  A clue to the IDE that "hey, error check this in this special way please."

 

In any case, you actually don't need a reference to the player there.  If you open up ItemStack.java and look at that function, you'll find the only thing it needs the player for is to prevent item damage while in creative mode.  If you pass null, the item will work and take damage JUST FINE.

 

Do you mean itemInteractionForEntity is going to be the same, even if I add another parameter like World?

Also, passing null for the itemStack damage crashes the game, when in survival and creative. I don't know if it is my fault or null just cannot be used.

Posted
Do you mean itemInteractionForEntity is going to be the same, even if I add another parameter like World?

 

function void f (int a, int b) {}

 

function void f (int a, int b, int c) {}

 

These are two different functions.  The second will only be called if the call passes three parameters, this is what's called an Overloaded Function.

 

Specifying a new overload and not changing the caller isn't going to magically run the new function: the call is not passing those parameters!

 

(I.e. specifying those parameters in your function will insure that it is NEVER called, unless you call it yourself).

 

Also, passing null for the itemStack damage crashes the game, when in survival and creative. I don't know if it is my fault or null just cannot be used.

 

This is at the top of the damageItem function

 

if (!(par2EntityLiving instanceof EntityPlayer) || !((EntityPlayer)par2EntityLiving).capabilities.isCreativeMode)

 

If par2EntityLiving is not an instance of EntityPlayer it should bypass the block.

 

In any case, you can use this instead:

 

stack.setItemDamage(stack.getItemDamage() - 1)

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.

Posted

If you use the AttackEntityEvent from forge, you can use:

event.target.attackEntityFrom(DamageSource.wither, 1000);

This is much better than setDead() because this will

a). drop the mob's items

b). preform the death animation

Otherwise, the entity will just disappear to another dimension.

Posted

If you use the AttackEntityEvent from forge, you can use:

event.target.attackEntityFrom(DamageSource.wither, 1000);

This is much better than setDead() because this will

a). drop the mob's items

b). preform the death animation

Otherwise, the entity will just disappear to another dimension.

 

I'm pretty sure he didn't want it to drop items.  Oh wait.

 

I'm trying to kill a mob on right-click with an item, but without "hurting" the mob because that would make it drop items (and I don't want that as you can probably guess).

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.

Posted

Thanks everyone for the help :) Everything works as it should, except the item getting damaged. I was probably going to make it a one-use item anyway.

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.