Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Posted

Hello everyone, I was wondering if someone could help me with a problem I am running into with my custom armor. With one of my custom armor sets I would like to make the player Immune to any damage from the wither effect so if anyone can help that would be great.

Subscribe to

LivingAttackEvent

, check if the entity is wearing your armour and the

DamageSource

is

DamageSource.wither

and cancel the event.

Please don't PM me to ask for help. Asking your question in a public thread preserves it for people who are having the same problem in the future.

  • 2 weeks later...
  • Author

I know I put this as solved before because I thought I understood how to do it but I in fact do not. So if anyone out there can give me a more detailed explanation as to what I'm supposed to do I would really appreciate it. I am new to modding so I am sorry for this misunderstanding.

  • Author

I wrote an if statement to check for my armor but it didn't seem to work so I removed it and closed my applications to take a break and when I went back to try coding it again I couldn't CTRL+Z back to get the statement back.

 

And as to what I'm exactly having problems with is that I need to write an if statement that will work and I need to know how exactly to cancel the DamageSource.wither

 

package com.thefuturemarine.ArmorModPlus.event;

import com.thefuturemarine.ArmorModPlus.init.ArmorModItems;

import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.MobEffects;
import net.minecraft.inventory.EntityEquipmentSlot;
import net.minecraft.item.ItemStack;
import net.minecraft.network.play.server.SPacketCombatEvent.Event;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.DamageSource;
import net.minecraft.world.World;
import net.minecraftforge.event.entity.living.LivingAttackEvent;
import net.minecraftforge.event.entity.living.LivingHurtEvent;
import net.minecraftforge.fml.common.eventhandler.Cancelable;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent;

public class EventHandler {
@SubscribeEvent
public void LivingAttackEvent(LivingHurtEvent event)
{

}

@SubscribeEvent
public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack)
	{

	}
}

 

if(event.souce == Damage.wither && event.entity is EntityPlayer && player.getEquipment == MyAntiWitherChest) {
    event.setCanceled(true);
}

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.

  • Author

Thank you for the reply Draco! Now am I supposed to put that in LivingAttackEvent or in onArmorTick? I know it's probably an easy answer but I am in fact a newbie when it comes to figuring these things out.

 

public class EventHandler {
@SubscribeEvent
public void LivingAttackEvent(LivingHurtEvent event) {

}

@SubscribeEvent
public void onArmorTick(World world, EntityPlayer player, ItemStack itemStack, LivingAttackEvent event) {
	if (player.getItemStackFromSlot(EntityEquipmentSlot.HEAD) != null && player.getItemStackFromSlot(EntityEquipmentSlot.HEAD).getItem() == ArmorModItems.obsidian_helmet)
		if (player.getItemStackFromSlot(EntityEquipmentSlot.CHEST) != null && player.getItemStackFromSlot(EntityEquipmentSlot.CHEST).getItem() == ArmorModItems.obsidian_chestplate)
			if (player.getItemStackFromSlot(EntityEquipmentSlot.LEGS) != null && player.getItemStackFromSlot(EntityEquipmentSlot.LEGS).getItem() == ArmorModItems.obsidian_leggings)
				if (player.getItemStackFromSlot(EntityEquipmentSlot.FEET) != null && player.getItemStackFromSlot(EntityEquipmentSlot.FEET).getItem() == ArmorModItems.obsidian_boots) {
					if(event.getSource() == DamageSource.wither && event.getEntity() == player && player.getItemStackFromSlot(EntityEquipmentSlot.CHEST).getItem() == ArmorModItems.obsidian_chestplate) {
						event.setCanceled(true);
					}
				}
}
}

 

This is the code that I have set and it doesn't seem to work. Can someone tell me what I am doing wrong?

Well, an ArmorTickEvent isn't likely to include a damage source is it?

 

Also, you can't just add parameters to an event function and expect them to get filled in magically.  Not to mention that your

onArmorTick

method has

LivingAttackEvent

as its event object.

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.

  • Author

I don't really understand what I was thinking with the onArmorTick

 

public class EventHandler {
@SubscribeEvent
public void LivingAttackEvent(LivingHurtEvent event, EntityPlayer player) {
					if(event.getSource() == DamageSource.wither && event.getEntity() == player && player.getItemStackFromSlot(EntityEquipmentSlot.HEAD).getItem() == ArmorModItems.obsidian_helmet && player.getItemStackFromSlot(EntityEquipmentSlot.CHEST).getItem() == ArmorModItems.obsidian_chestplate && player.getItemStackFromSlot(EntityEquipmentSlot.LEGS).getItem() == ArmorModItems.obsidian_leggings && player.getItemStackFromSlot(EntityEquipmentSlot.FEET).getItem() == ArmorModItems.obsidian_boots) {
						event.setCanceled(true);
					}
				}
			}

 

 

But this is what I have now is this correct in the least? And I know I'm a pain in the ass with all these questions and not knowing what to do but I appreciate what you're doing Draco and everyone else that has helped me so far thank you for taking the time to help me with my problem

You're still trying to get an EntityPlayer from nowhere.

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.

Look at the event class and figure it out.

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.

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

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.