Jump to content

Applying a potion effect through armor?


SureenInk

Recommended Posts

I've been struggling with how to make it so that when you equip all 4 pieces of a set of armor, you get a potion effect. I had it working back in 1.7.10, but the updates in 1.8 and up have changed the way things work. I tried a few other ideas, but it just doesn't seem to work. Can anyone help? This is my armor class:

 

package sureen.core.armor;

import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.inventory.EntityEquipmentSlot;
import net.minecraft.item.ItemArmor;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.world.World;
import sureen.core.SureenCore;
import sureen.core.registry.SureenItems;

public class CrystalArmor extends ItemArmor {

public CrystalArmor(int renderIndex, EntityEquipmentSlot slot){
	super(SureenCore.CrystalArmor, renderIndex, slot);		
}

public void OnUpdate(ItemStack item, World world, Entity entity, int itemSlot, boolean isSelected){
	if(entity instanceof EntityLivingBase){
		EntityLivingBase livingBase = (EntityLivingBase) entity;
		if(livingBase.getItemStackFromSlot(EntityEquipmentSlot.HEAD) != null && livingBase.getItemStackFromSlot(EntityEquipmentSlot.CHEST) != null && livingBase.getItemStackFromSlot(EntityEquipmentSlot.LEGS) != null && livingBase.getItemStackFromSlot(EntityEquipmentSlot.FEET) != null){
			ItemStack helmet = livingBase.getItemStackFromSlot(EntityEquipmentSlot.HEAD);
			ItemStack chestplate = livingBase.getItemStackFromSlot(EntityEquipmentSlot.CHEST);
			ItemStack leggings = livingBase.getItemStackFromSlot(EntityEquipmentSlot.LEGS);
			ItemStack boots = livingBase.getItemStackFromSlot(EntityEquipmentSlot.FEET);
			System.out.println(helmet + " " + chestplate + " " + leggings + " " + boots);

			if (helmet.getItem() == SureenItems.crystal_helmet && chestplate.getItem() == SureenItems.crystal_chestplate && leggings.getItem() == SureenItems.crystal_leggings && boots.getItem() == SureenItems.crystal_boots){
				((EntityLivingBase) entity).addPotionEffect(new PotionEffect(Potion.getPotionFromResourceLocation("absorption"), 1, 1));
			}
		}
	}
}

}

Link to comment
Share on other sites

Yeah, it's not putting any potion effect at all. I have absorption in the code because I thought maybe it just wasn't showing the potion effects, but was still applying them, but it didn't give me any absorption hearts, so I can tell it's not applying any effects.

Link to comment
Share on other sites

Try putting @Override over your method you should see the error. And if you don't does it print out the ItemStacks?

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Link to comment
Share on other sites

Exactly you are not overriding the "right" method(not any method at all), just a suggestion but whenever you are using a method that you didn't create in that class always put @Override. When it was like that it should not have worked at all in previous versions either.

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Link to comment
Share on other sites

Go to ItemArmor and find the onArmorTick method, copy its signature, paste it over your method.

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.

Link to comment
Share on other sites

Awesome, it works now! Not sure if this code can be cleaned up further due to the changes made, but this is what I got to work.

package sureen.core.armor;

import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.EntityEquipmentSlot;
import net.minecraft.item.ItemArmor;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.world.World;
import sureen.core.SureenCore;
import sureen.core.registry.SureenItems;

public class CrystalArmor extends ItemArmor {

public CrystalArmor(int renderIndex, EntityEquipmentSlot slot){
	super(SureenCore.CrystalArmor, renderIndex, slot);		
}

@Override
public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack){
	if(player instanceof EntityLivingBase){
		EntityLivingBase livingBase = (EntityLivingBase) player;
		if(livingBase.getItemStackFromSlot(EntityEquipmentSlot.HEAD) != null && livingBase.getItemStackFromSlot(EntityEquipmentSlot.CHEST) != null && livingBase.getItemStackFromSlot(EntityEquipmentSlot.LEGS) != null && livingBase.getItemStackFromSlot(EntityEquipmentSlot.FEET) != null){
			ItemStack helmet = livingBase.getItemStackFromSlot(EntityEquipmentSlot.HEAD);
			ItemStack chestplate = livingBase.getItemStackFromSlot(EntityEquipmentSlot.CHEST);
			ItemStack leggings = livingBase.getItemStackFromSlot(EntityEquipmentSlot.LEGS);
			ItemStack boots = livingBase.getItemStackFromSlot(EntityEquipmentSlot.FEET);
			System.out.println(helmet + " " + chestplate + " " + leggings + " " + boots);

			if (helmet.getItem() == SureenItems.crystal_helmet && chestplate.getItem() == SureenItems.crystal_chestplate && leggings.getItem() == SureenItems.crystal_leggings && boots.getItem() == SureenItems.crystal_boots){
				((EntityLivingBase) player).addPotionEffect(new PotionEffect(Potion.getPotionFromResourceLocation("absorption"), 1, 1));
			}
		}
	}
}

}

Link to comment
Share on other sites

You could make the variables before checking if they are != null then use them to check if they are not equal to null. Remove the println. That is all I can think of right now, everything else looks good.

VANILLA MINECRAFT CLASSES ARE THE BEST RESOURCES WHEN MODDING

I will be posting 1.15.2 modding tutorials on this channel. If you want to be notified of it do the normal YouTube stuff like subscribing, ect.

Forge and vanilla BlockState generator.

Link to comment
Share on other sites

Awesome, it works now

 

And now you know that to Override a method you should always let your IDE do it or find the method you want to override and copy it, and then never touch its signature.

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.

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.



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.