Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

[1.7.10] EventHandler; Poison Enchantment


Guest Abrynos

Recommended Posts

Guest Abrynos

Hey guys; i made an enchantment that should poison the enemy hit by the player... the code for the eventhandler is this:

@SubscribeEvent
public void giftSchwert(LivingHurtEvent event){
	if(event.source.getEntity() != null){
		if(event.source.getEntity() instanceof EntityPlayer){
			EntityPlayer player = (EntityPlayer)event.source.getEntity();

			boolean poison = false;

			ItemStack stack = player.getCurrentEquippedItem();
			if(stack != null){
				NBTTagList ench = stack.getEnchantmentTagList();
				if (ench != null){
					for (int x = 0; x < ench.tagCount(); x++){
						NBTTagCompound nbt = (NBTTagCompound)(ench).getCompoundTagAt(x);
						int id = nbt.getInteger("id");
						if (id == EnchantmentGift.effectid){
							poison = true;
						}
					}
					if(event.entity instanceof EntityLiving){
						if(poison){
							EntityLiving entity = (EntityLiving)event.entity;
							entity.addPotionEffect(new PotionEffect(Potion.poison.getId(), 200, 1));
						}
					}
				}
			}
		}	
	}
}

 

it doesn't work very well; u know what the problem is? please help me, because i dont know why it isnt working; :D

Link to post
Share on other sites

1. Just checking EnchantmentHelper#getEnchantmentLevel(int enchid, ItemStack is) would greatly simplify your code.

 

2. Your EnchantmentGift class would be needed, so please post it.

I. Stellarium for Minecraft: Configurable Universe for Minecraft! (WIP)

II. Stellar Sky, Better Star Rendering&Sky Utility mod, had separated from Stellarium.

Link to post
Share on other sites
Guest Abrynos

ok i changed the code a bit:

@SubscribeEvent
public void giftSchwert(LivingHurtEvent event){
	if(event.source.getEntity() != null){
		if(event.source.getEntity() instanceof EntityPlayer){
			EntityPlayer player = (EntityPlayer)event.source.getEntity();
			ItemStack stack = player.getCurrentEquippedItem();

			if(stack != null){
				int p = EnchantmentHelper.getEnchantmentLevel(EnchantmentGift.effectid, stack);
				if(p > 0){
					EntityLiving entity = (EntityLiving)event.entity;
					entity.addPotionEffect(new PotionEffect(Potion.poison.getId(), 200, 1));
				}
			}
		}	
	}
}

 

my enchantmentgift.class:

public class EnchantmentGift extends Enchantment {
public static int effectid;

public EnchantmentGift(int id, int rarity){
	super(id, rarity, EnumEnchantmentType.weapon);
	this.effectid = id;
	this.setName("Gift");
}

public int getMinEnchantability(int par1){
	return 5 + (par1 - 1) * 10;
}

public int getMaxEnchantability(int par1){
	return this.getMinEnchantability(par1) + 20;
}

public int getMaxLevel(){
	return 1;
}
}

Link to post
Share on other sites

ok i changed the code a bit:

@SubscribeEvent
public void giftSchwert(LivingHurtEvent event){
	if(event.source.getEntity() != null){
		if(event.source.getEntity() instanceof EntityPlayer){
			EntityPlayer player = (EntityPlayer)event.source.getEntity();
			ItemStack stack = player.getCurrentEquippedItem();

			if(stack != null){
				int p = EnchantmentHelper.getEnchantmentLevel(EnchantmentGift.effectid, stack);
				if(p > 0){
					EntityLiving entity = (EntityLiving)event.entity;
					entity.addPotionEffect(new PotionEffect(Potion.poison.getId(), 200, 1));
				}
			}
		}	
	}
}

 

my enchantmentgift.class:

public class EnchantmentGift extends Enchantment {
public static int effectid;

public EnchantmentGift(int id, int rarity){
	super(id, rarity, EnumEnchantmentType.weapon);
	this.effectid = id;
	this.setName("Gift");
}

public int getMinEnchantability(int par1){
	return 5 + (par1 - 1) * 10;
}

public int getMaxEnchantability(int par1){
	return this.getMinEnchantability(par1) + 20;
}

public int getMaxLevel(){
	return 1;
}
}

Don't make effect ID static! You don't even need it. Just create a new instance of the enchantment (in the main mod class) and use that instance's effectId, as it is already a field in Enchantment.class.

Maker of the Craft++ mod.

Link to post
Share on other sites
Guest Abrynos

I found out what the problem was. I only tested the sword on aggressive mobs. somehow the potion effect poison doesn't damage them. it works quite fine, if i test it on other mobs.

 

How could i make it, that zombies, skeletons, etc. get damage too?

Link to post
Share on other sites
  • 1 month later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
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.



×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.