Posted July 9, 201312 yr I can't seem to figure out how to make my enchantment fire when it should. It's a sword enchantment, so it should fire when the player attacks something. I can make things happen when the player attacks things, but I can't figure out how to only fire when the player is using a sword with the proper enchantment. I've got it at this point doing things only when the player has a sword in hand. How can I restrict this further to only do things when the sword is properly enchanted? I'm probably approaching this from the entire wrong direction. Here's my event hook package quyzi.mod.common; import net.minecraft.client.Minecraft; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagList; import net.minecraft.util.DamageSource; import net.minecraft.world.World; import net.minecraftforge.event.ForgeSubscribe; import net.minecraftforge.event.entity.living.LivingAttackEvent; import quyzi.mod.enchants public class EventHook { @ForgeSubscribe public void entityAttacked(LivingAttackEvent event) { EntityLiving attacked = event.entityLiving; DamageSource attacker = event.source; if ( attacker.getEntity() instanceof EntityPlayer ) { EntityPlayer player = Minecraft.getMinecraft().thePlayer; ItemStack itemHeld = player.inventory.getCurrentItem(); if( swordIDS.contains(itemHeld.itemID) ) { // Player attacks ~ with sword NBTTagList enchlist = itemHeld.getEnchantmentTagList(); for(int i = 0; i < enchlist.tagCount(); i++) { System.out.println(enchlist.tagAt(i)); } } else if( bowIDS.contains(itemHeld.itemID) ) { // Player attacks ~ with bow } } } } And it's registered in init: @Init public void init(FMLInitializationEvent event) { enchantShocking = new EnchantShocking(enchID); LanguageRegistry.instance().addStringLocalization("enchantment.damage.Shocking", "Shocking"); MinecraftForge.EVENT_BUS.register(new EventHook()); }
July 9, 201312 yr NBTTagList enchlist = itemHeld.getEnchantmentTagList(); for(int i = 0; i < enchlist.tagCount(); i++) { System.out.println(enchlist.tagAt(i)); } In this, you just have to add a check if enchlist.tagAt(I) is equal to your custom enchant NBTTagList enchlist = itemHeld.getEnchantmentTagList(); for(int i = 0; i < enchlist.tagCount(); i++) { if (enchlist.tagAt(i).getInteger("id") == MainModFile.enchantShocking.enchID) { //Do what you want your enchant to do, probably shock someone. } System.out.println(enchlist.tagAt(i)); }
July 9, 201312 yr What personally like to use is this int strikeLvl = EnchantmentHelper.getEnchantmentLevel( WeaponsCore.enchStrike.effectId, player.getCurrentEquippedItem()); if (strikeLvl > 0) { code here... } There you also get access to the enchantment level, but that's really just a personal preference.
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.