Jump to content

[1.7.10] adding a potion effect before entity is killed


Elrol_Arrowsend

Recommended Posts

Im trying to add a potion effect to an entity when the entity is attacked. Problem is when you attack the weaker mobs chickens and sheep. They are killed and the potion effect is not added. But on cows which take 2 hits to kill the first hit does damage and adds the potion effect then the second one kills it. I am trying to have to potion effect applied before the entity is killed. If you can help that would be great

 

here is my EventHandler for the potion

 

@SubscribeEvent
public void onEntityUpdate(LivingUpdateEvent event){

	if(event.entityLiving.isPotionActive(PotionRegistry.soulBindPot)){
		if(event.entityLiving.worldObj.rand.nextInt(20) == 0){
			if(event.entityLiving.getHealth() == 0){
				System.out.println("Killed while Soul Bind was in effect");
			}else{
			}
		}
		if(event.entityLiving.getActivePotionEffect(PotionRegistry.soulBindPot).getDuration() == 0){
			event.entityLiving.removePotionEffect(PotionRegistry.soulBindPot.id);
		}
	}
}

@SubscribeEvent
public void onEntityDeath(LivingDeathEvent event){
	if(event.entityLiving.isPotionActive(PotionRegistry.soulBindPot)){
		if(event.source.damageType.equals("player")){
			EntityPlayer player = (EntityPlayer)event.source.getSourceOfDamage();
			int soul = 0;
			if(event.entityLiving instanceof EntityPlayer){
				//Black Souls
				soul = 5;
			}else{
				if(event.entityLiving.getMaxHealth() <= 4){
					//Petty Souls
					soul = 0;
				}else if(event.entityLiving.getMaxHealth() <= 8 && event.entityLiving.getMaxHealth() > 4 ){
					//Lesser Souls
					soul = 1;
				}else if(event.entityLiving.getMaxHealth() <= 20 && event.entityLiving.getMaxHealth() > 8 ){
					//Common Souls
					soul = 2;
				}else if(event.entityLiving.getMaxHealth() <= 100 && event.entityLiving.getMaxHealth() > 20 ){
					//Greater Souls
					soul = 3;
				}else if(event.entityLiving.getMaxHealth() > 100 ){
					//Grand Souls
					soul = 4;
				}
			}


			switch(soul){
			case 0:
				if(!player.inventory.hasItem(ItemRegistry.pettySoulGem)){
					player.addChatComponentMessage(new ChatComponentText("No empty Petty Soul Gem"));
					break;
				}
				for(int i = 0; i < player.inventory.mainInventory.length; i ++){
					if(player.inventory.mainInventory[i] != null && player.inventory.mainInventory[i].getItem().equals(ItemRegistry.pettySoulGem)){
						for(int j = 0; j < player.inventory.mainInventory.length; j++){
							if(player.inventory.mainInventory[j] == null){
								player.addChatComponentMessage(new ChatComponentText("Soul Captured"));
								player.inventory.consumeInventoryItem(ItemRegistry.pettySoulGem);
								player.inventory.setInventorySlotContents(j, new ItemStack(ItemRegistry.pettySoulGemFilled));
								break;
							}
						}
					}else{
						System.out.println("Error: ");
					}
				}
				break;
			case 1:
				if(!player.inventory.hasItem(ItemRegistry.lesserSoulGem)){
					player.addChatComponentMessage(new ChatComponentText("No empty Lesser Soul Gem"));
					break;
				}
				for(int i = 0; i < player.inventory.mainInventory.length; i ++){
					if(player.inventory.mainInventory[i] != null && player.inventory.mainInventory[i].getItem().equals(ItemRegistry.lesserSoulGem)){
						for(int j = 0; j < player.inventory.mainInventory.length; j++){
							if(player.inventory.mainInventory[j] == null){
								player.addChatComponentMessage(new ChatComponentText("Soul Captured"));
								player.inventory.consumeInventoryItem(ItemRegistry.lesserSoulGem);
								player.inventory.setInventorySlotContents(j, new ItemStack(ItemRegistry.lesserSoulGemFilled));
								break;
							}
						}
					}else{
						System.out.println("Error: ");
					}
				}
				break;
			case 2:
				if(!player.inventory.hasItem(ItemRegistry.commonSoulGem)){
					player.addChatComponentMessage(new ChatComponentText("No empty Common Soul Gem"));
					break;
				}
				for(int i = 0; i < player.inventory.mainInventory.length; i ++){
					if(player.inventory.mainInventory[i] != null && player.inventory.mainInventory[i].getItem().equals(ItemRegistry.commonSoulGem)){
						for(int j = 0; j < player.inventory.mainInventory.length; j++){
							if(player.inventory.mainInventory[j] == null){
								player.addChatComponentMessage(new ChatComponentText("Soul Captured"));
								player.inventory.consumeInventoryItem(ItemRegistry.commonSoulGem);
								player.inventory.setInventorySlotContents(j, new ItemStack(ItemRegistry.commonSoulGemFilled));
								break;
							}
						}
					}else{
						System.out.println("Error: ");
					}
				}
				break;
			case 3:
				if(!player.inventory.hasItem(ItemRegistry.greaterSoulGem)){
					player.addChatComponentMessage(new ChatComponentText("No empty Greater Soul Gem"));
					break;
				}
				for(int i = 0; i < player.inventory.mainInventory.length; i ++){
					if(player.inventory.mainInventory[i] != null && player.inventory.mainInventory[i].getItem().equals(ItemRegistry.greaterSoulGem)){
						for(int j = 0; j < player.inventory.mainInventory.length; j++){
							if(player.inventory.mainInventory[j] == null){
								player.addChatComponentMessage(new ChatComponentText("Soul Captured"));
								player.inventory.consumeInventoryItem(ItemRegistry.greaterSoulGem);
								player.inventory.setInventorySlotContents(j, new ItemStack(ItemRegistry.greaterSoulGemFilled));
								break;
							}
						}
					}else{
						System.out.println("Error: ");
					}
				}
				break;
			case 4:

				if(!player.inventory.hasItem(ItemRegistry.grandSoulGem)){
					player.addChatComponentMessage(new ChatComponentText("No empty Grand Soul Gem"));
					break;
				}
				for(int i = 0; i < player.inventory.mainInventory.length; i ++){
					if(player.inventory.mainInventory[i] != null && player.inventory.mainInventory[i].getItem().equals(ItemRegistry.grandSoulGem)){
						for(int j = 0; j < player.inventory.mainInventory.length; j++){
							if(player.inventory.mainInventory[j] == null){
								player.addChatComponentMessage(new ChatComponentText("Soul Captured"));
								player.inventory.consumeInventoryItem(ItemRegistry.grandSoulGem);
								player.inventory.setInventorySlotContents(j, new ItemStack(ItemRegistry.grandSoulGemFilled));
								break;
							}
						}
					}else{
						System.out.println("Error: ");
					}
				}
				break;
			case 5:

				if(!player.inventory.hasItem(ItemRegistry.blackSoulGem)){
					player.addChatComponentMessage(new ChatComponentText("No empty Black Soul Gem"));
					break;
				}
				for(int i = 0; i < player.inventory.mainInventory.length; i ++){
					if(player.inventory.mainInventory[i] != null && player.inventory.mainInventory[i].getItem().equals(ItemRegistry.blackSoulGem)){
						for(int j = 0; j < player.inventory.mainInventory.length; j++){
							if(player.inventory.mainInventory[j] == null){
								player.addChatComponentMessage(new ChatComponentText("Soul Captured"));
								player.inventory.consumeInventoryItem(ItemRegistry.blackSoulGem);
								player.inventory.setInventorySlotContents(j, new ItemStack(ItemRegistry.blackSoulGemFilled));
								break;
							}
						}
					}else{
						System.out.println("Error: ");
					}
				}
				break;
			default:
			}		
		}	

	}
}

 

Link to comment
Share on other sites

Any reason you don't check to see if the entity was killed by the player?

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

You know you can check for the player's active weapon in the EntityDeadEvent,  right? As well as any other property active on the player.

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

i know that. Back to the point, I want my event to take an empty soul gem and fill it, I want the potion to be added to the chickens etc before the damage is applied to them, at the moment it seems to apply the potion effect after the damage is applied therefore the chickens and lesser health mobs are killed then the potion effect is added to their dying corpse. I am looking for a way to change that. the main reason that I want this to be a potion effect is that it will not only be on a sword, but on any weapon, a potion or spell. so that you can toss the potion or spell and kill them with any weapon.

Link to comment
Share on other sites

This effect will be a potion a spell and an enchantment that can go on any weapon. Just like in skyrim it will depending on the level have a certain duration. Ie if target dies in 5 seconds fills gem. I know i can check the weapon the player is holding but there wont always be a weapon that has this effect. Long story short i need help applying the potion effect before the entity dies. The point of this topic is not about my methods or reasons.

Link to comment
Share on other sites

This effect will be a potion a spell and an enchantment that can go on any weapon.

Again, what does the potion do?
Just like in skyrim it will depending on the level have a certain duration.
I do not know Skyrim. What level? What will have a duration?
Ie if target dies in 5 seconds fills gem.
Within 5 seconds of what?
Long story short i need help applying the potion effect before the entity dies.
Dies from what? You have not described this accurately at all.
The point of this topic is not about my methods or reasons.

Yes it is.

 

as I have said, the potion does nothing on its own. I have the event handler to check if the entity has the sould bind effect. if it does then the event handler will fill a soul gem. the level is in regards to the enchantment level. the higher the level the longer the duration of the soul bind potion effect. if the target dies in 5 seconds after the potion effect is applied then it will fill a gem. if the entity dies from anything, player, potion effects (poison harming etc) other players or entities, again I fail to see how any of this has to do with having the potion effect applied before damage is, when the entity dies the event is called and since the potion effect has not been applied it wont fill a gem, I want to rectify that and apply the damage after the entity gets the potion effect

 

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.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Hi guys! I am having some issues with the server crashing over and over and I was hoping to get some guidance.  Thanks in advance! Crash 1: java.lang.Error: ServerHangWatchdog detected that a single server tick took 60.00 seconds (should be max 0.05)     at net.minecraft.server.dedicated.ServerWatchdog.run(ServerWatchdog.java:43) ~[server-1.20.1-20230612.114412-srg.jar%23217!/:?] {re:classloading}     at java.lang.Thread.run(Thread.java:840) ~[?:?] { Crash 2: java.lang.IllegalStateException: Capability missing for eeb7f026-34b4-42f5-9164-e7736461df83     at me.lucko.luckperms.forge.capabilities.UserCapabilityImpl.lambda$get$0(UserCapabilityImpl.java:66) ~[?:?] {re:classloading,re:classloading,re:classloading}     at net.minecraftforge.common.util.LazyOptional.orElseThrow(LazyOptional.java:261) ~[forge-1.20.1-47.3.10-universal.jar%23222!/:?] {re:mixin,re:classloading}     at me.lucko.luckperms.forge.capabilities.UserCapabilityImpl.get(UserCapabilityImpl.java:66) ~[?:?] {re:classloading,re:classloading,re:classloading}     at me.lucko.luckperms.forge.util.BrigadierInjector$InjectedPermissionRequirement.test(BrigadierInjector.java:143) ~[?:?] {}     at me.lucko.luckperms.forge.util.BrigadierInjector$InjectedPermissionRequirement.test(BrigadierInjector.java:129) ~[?:?] {}     at com.mojang.brigadier.tree.CommandNode.canUse(CommandNode.java:65) ~[brigadier-1.1.8.jar%2376!/:?] {}     at com.mojang.brigadier.CommandDispatcher.parseNodes(CommandDispatcher.java:359) ~[brigadier-1.1.8.jar%2376!/:?] {}     at com.mojang.brigadier.CommandDispatcher.parse(CommandDispatcher.java:349) ~[brigadier-1.1.8.jar%2376!/:?] {}     at com.mojang.brigadier.CommandDispatcher.parse(CommandDispatcher.java:317) ~[brigadier-1.1.8.jar%2376!/:?] {}     at net.minecraft.commands.Commands.m_230957_(Commands.java:237) ~[server-1.20.1-20230612.114412-srg.jar%23217!/:?] {re:classloading}     at net.mcreator.boh.procedures.TeleportbenProcedure.lambda$execute$2(TeleportbenProcedure.java:65) ~[boh-0.0.6.1-forge-1.20.1_2.jar%23165!/:?] {re:classloading}     at net.mcreator.boh.BohMod.lambda$tick$2(BohMod.java:96) ~[boh-0.0.6.1-forge-1.20.1_2.jar%23165!/:?] {re:classloading}     at java.util.ArrayList.forEach(ArrayList.java:1511) ~[?:?] {re:mixin}     at net.mcreator.boh.BohMod.tick(BohMod.java:96) ~[boh-0.0.6.1-forge-1.20.1_2.jar%23165!/:?] {re:classloading}     at net.mcreator.boh.__BohMod_tick_ServerTickEvent.invoke(.dynamic) ~[boh-0.0.6.1-forge-1.20.1_2.jar%23165!/:?] {re:classloading,pl:eventbus:B}     at net.minecraftforge.eventbus.ASMEventHandler.invoke(ASMEventHandler.java:73) ~[eventbus-6.0.5.jar%2352!/:?] {}     at net.minecraftforge.eventbus.EventBus.post(EventBus.java:315) ~[eventbus-6.0.5.jar%2352!/:?] {}     at net.minecraftforge.eventbus.EventBus.post(EventBus.java:296) ~[eventbus-6.0.5.jar%2352!/:?] {}     at net.minecraftforge.event.ForgeEventFactory.onPostServerTick(ForgeEventFactory.java:950) ~[forge-1.20.1-47.3.10-universal.jar%23222!/:?] {re:classloading}     at net.minecraft.server.MinecraftServer.m_5705_(MinecraftServer.java:835) ~[server-1.20.1-20230612.114412-srg.jar%23217!/:?] {re:mixin,pl:accesstransformer:B,xf:fml:xaerominimap:xaero_minecraftserver,re:classloading,pl:accesstransformer:B,xf:fml:xaerominimap:xaero_minecraftserver,pl:mixin:A}     at net.minecraft.server.MinecraftServer.m_130011_(MinecraftServer.java:661) ~[server-1.20.1-20230612.114412-srg.jar%23217!/:?] {re:mixin,pl:accesstransformer:B,xf:fml:xaerominimap:xaero_minecraftserver,re:classloading,pl:accesstransformer:B,xf:fml:xaerominimap:xaero_minecraftserver,pl:mixin:A}     at net.minecraft.server.MinecraftServer.m_206580_(MinecraftServer.java:251) ~[server-1.20.1-20230612.114412-srg.jar%23217!/:?] {re:mixin,pl:accesstransformer:B,xf:fml:xaerominimap:xaero_minecraftserver,re:classloading,pl:accesstransformer:B,xf:fml:xaerominimap:xaero_minecraftserver,pl:mixin:A}     at java.lang.Thread.run(Thread.java:840) ~[?:?] {}
    • Hello there! I am trying to make custom dimensions for a modpack I am making in an older minecraft version, 1.16.5. I like that version and it has a few other mods that have not been updated that I would still like to use. Anyway, I am having a terrible time with getting my dimension to work and have tried using code from other peoples projects to at least figure out what I'm supposed to be doing but it has not been as helpful as I would have liked. If anyone could help that would be greatly appreciated! Here is my github with all the code as I am using it: https://github.com/BladeColdsteel/InvigoratedDimensionsMod I have also included the last log, https://pastebin.com/zX9vsDSq, I had when I tried to load up a world, let me know if there is anything else I should send though, thank you!
    • Whether you are a fan of Hypixel Bedwars, SkyWars and PvP gamemodes like that, well you would enjoy this server! We have a very fun and unique style of PvP that a lot of our players really enjoy and we want to bring this server to more players like you! Yes you reading this post haha. Introducing, the Minezone Network, home of SUPER CRAFT BLOCKS. We've been working on this server for over 4 years now. Here is what we have to offer: SUPER CRAFT BLOCKS: This has 3 different gamemodes you can play, Classic, Duels and Frenzy. Each mode offers over 60 kits to choose from, along with a total of over 60 maps, allowing for various different playstyles on each map. There are also random powerups that spawn on the map which can include Health Pots, Bazookas, Nukes, Extra Lives and way way more! There is also double jump in this gamemode as well, which makes PvP a lot more fun & unique. You only need a minimum of 2 players to start any mode! Classic: Choose a kit, 5 lives for each player, fight it out and claim the #1 spot! Look out for lightning as they can spawn powerups to really give you an advantage in the game! Duels: Fight against another random player or one of your friends and see who is the best! Frenzy: Your kit is randomly selected for you, each life you will have a different kit. You can fight with up to 100 players in this mode and lets see who will be the best out of that 100! All the other stuff from Classic/Duels apply to this mode as well like powerups. We have 2 ranks on this server too, VIP and CAPTAIN which has a bunch of different perks for SCB and other things like Cosmetics and more.   SERVER IP: If this server has caught your interest in any way, please consider joining and you will NOT regret it! Bring some of your friends online for an even better experience and join in on the fun at: IP: minezone.club Hope to see you online!   SERVER TRAILER: https://www.youtube.com/watch?v=0phpMgu1mH0
    • The mod give new blocks  
  • Topics

×
×
  • Create New...

Important Information

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