Jump to content

Recommended Posts

Posted

Code works as is,  but cant get a Entity to spawn in a static event. Am I missing something? What I am trying to achieve is when an entity dies, it checks to see what entity was killed and then what entity did the killing. If it was Zombie that did the killing, I would like to spawn another ZombieEntity in the place of the dead entity. Any other way of doing this that im not thinking of?

 

ServerEventZombieKill.class:

{

	@SubscribeEvent

	public static void onDeath(LivingDeathEvent event)
		{
		if (event.getEntity() instanceof EntityZombie) 
			{
			System.out.println("Zombie");
			}
		if (event.getEntity() instanceof EntitySkeleton) 
		{
			System.out.println("Skeleton");
			if (event.getSource().getTrueSource() instanceof EntityZombie) {
				System.out.println("Skeleton killed by Zombie");
			}
		}			
	}

 

Main:

@EventHandler
public void init2(FMLPreInitializationEvent event) {
    MinecraftForge.EVENT_BUS.register(ServerEventZombieKill.class);

 

I can get the outcome I want in my custom entity class like this:

@Override
	public void onKillEntity(EntityLivingBase entityLivingIn)
	{
		if (entityLivingIn instanceof IMob)
		{
			System.out.println("Mob");
			
           EntityWalker walker = new EntityWalker(this.world);
           walker.setLocationAndAngles(entityLivingIn.posX, entityLivingIn.posY, entityLivingIn.posZ, 0, 0);
        		if (!entityLivingIn.world.isRemote) { 
        			this.world.spawnEntity(walker);
			}
		}
	}

 

^^^^ But obviously I cant do that method to Vanilla Entities.

Posted

In my first code example I can get it to work only if I use public static void. Public void I'm assuming doesn't work since I'm not getting messages in Console (eclipse). The spawning code EntityZombie zombie = new EntityZombie(this.world); I used in the third example is typically what I would use when spawning a entity but I cant use (this.world) in a static class (public static void).  For setting Location of spawn I'm trying to use zombie.setLocationAndAngles(event.getSource().getTrueSource().posX, event.getSource().getTrueSource().posY, event.getSource().getTrueSource().posZ, 0, 0); which I believe should work fine. Then for the actual spawning typically I would use this.world.spawnEntity(zombie);

 

So the over all code that I'm stuck with is 

	@SubscribeEvent

	public void onDeath(LivingDeathEvent event)
		{
		if (event.getEntity() instanceof EntitySkeleton) 
		{
			if (event.getSource().getTrueSource() instanceof EntityZombie) {
				EntityZombie zombie = new EntityZombie(//NO IDEA WHAT TO PUT HERE//);
				zombie.setLocationAndAngles(event.getSource().getTrueSource().posX, event.getSource().getTrueSource().posY, event.getSource().getTrueSource().posZ,0,0);
				(///NO IDEA WHAT TO PUT HERE///).spawnEntity(walker);
				
				
				
			}
		}			
	}

 

So as you can see, my amateur java brain can't seem to grasp what to do.  I think I'm atleast close.  Any advice would be appreciated.

Posted
4 minutes ago, Lea9ue said:

//NO IDEA WHAT TO PUT HERE//

I wonder if the event has a solution to this. Or if the entities that I have access to(The dying entity and the damager) have access to the world they are in like my entity.

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.

Posted

I don't know. Yes I get that the entities have access to the world they are In .  I'm just not smart enough to implement it. Heres what code looks like but it crashes when entity spawns

private static World worldIn;

	@SubscribeEvent

	public static void onDeath(LivingDeathEvent event)
		{

		if (event.getEntity() instanceof EntityZombie) 
			{
			System.out.println("Zombie");
			}
		if (event.getEntity() instanceof EntitySkeleton) 
		{
			System.out.println("Skeleton");
			if (event.getSource().getTrueSource() instanceof EntityZombie) {
				System.out.println("Skeleton killed by Zombie");
				
				EntityZombie zombie = new EntityZombie(worldIn);
				zombie.setLocationAndAngles(event.getSource().getTrueSource().posX,event.getSource().getTrueSource().posY,event.getSource().getTrueSource().posZ,0,0); 
				worldIn.spawnEntity(zombie);
				
				
				
			}
		}			
	}

 

Posted (edited)
5 minutes ago, Animefan8888 said:

Well can't help if I don't have the crash report.

My Fault

Crash Report: 

---- Minecraft Crash Report ----
// Don't be sad, have a hug! <3

Time: 8/22/19 5:30 PM
Description: Ticking entity

java.lang.NullPointerException: Ticking entity
	at com.lea9ue.mobwars.server.ServerEventWalkerKill.onDeath(ServerEventWalkerKill.java:42)
	at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_13_ServerEventWalkerKill_onDeath_LivingDeathEvent.invoke(.dynamic)
	at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:90)
	at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:182)
	at net.minecraftforge.common.ForgeHooks.onLivingDeath(ForgeHooks.java:601)
	at net.minecraft.entity.EntityLivingBase.onDeath(EntityLivingBase.java:1284)
	at net.minecraft.entity.monster.EntitySkeleton.onDeath(EntitySkeleton.java:62)
	at net.minecraft.entity.EntityLivingBase.attackEntityFrom(EntityLivingBase.java:1129)
	at net.minecraft.entity.monster.EntityMob.attackEntityFrom(EntityMob.java:80)
	at net.minecraft.entity.monster.EntityMob.attackEntityAsMob(EntityMob.java:109)
	at net.minecraft.entity.monster.EntityZombie.attackEntityAsMob(EntityZombie.java:320)
	at net.minecraft.entity.ai.EntityAIAttackMelee.checkAndPerformAttack(EntityAIAttackMelee.java:197)
	at net.minecraft.entity.ai.EntityAIAttackMelee.updateTask(EntityAIAttackMelee.java:186)
	at net.minecraft.entity.ai.EntityAIZombieAttack.updateTask(EntityAIZombieAttack.java:39)
	at net.minecraft.entity.ai.EntityAITasks.onUpdateTasks(EntityAITasks.java:114)
	at net.minecraft.entity.EntityLiving.updateEntityActionState(EntityLiving.java:843)
	at net.minecraft.entity.EntityLivingBase.onLivingUpdate(EntityLivingBase.java:2582)
	at net.minecraft.entity.EntityLiving.onLivingUpdate(EntityLiving.java:647)
	at net.minecraft.entity.monster.EntityMob.onLivingUpdate(EntityMob.java:49)
	at net.minecraft.entity.monster.EntityZombie.onLivingUpdate(EntityZombie.java:246)
	at net.minecraft.entity.EntityLivingBase.onUpdate(EntityLivingBase.java:2398)
	at net.minecraft.entity.EntityLiving.onUpdate(EntityLiving.java:346)
	at net.minecraft.entity.monster.EntityMob.onUpdate(EntityMob.java:57)
	at net.minecraft.world.World.updateEntityWithOptionalForce(World.java:2171)
	at net.minecraft.world.WorldServer.updateEntityWithOptionalForce(WorldServer.java:871)
	at net.minecraft.world.World.updateEntity(World.java:2130)
	at net.minecraft.world.World.updateEntities(World.java:1931)
	at net.minecraft.world.WorldServer.updateEntities(WorldServer.java:643)
	at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:842)
	at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:743)
	at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:192)
	at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:592)
	at java.lang.Thread.run(Unknown Source)


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- Head --
Thread: Server thread
Stacktrace:
	at com.lea9ue.mobwars.server.ServerEventWalkerKill.onDeath(ServerEventWalkerKill.java:42)
	at net.minecraftforge.fml.common.eventhandler.ASMEventHandler_13_ServerEventWalkerKill_onDeath_LivingDeathEvent.invoke(.dynamic)
	at net.minecraftforge.fml.common.eventhandler.ASMEventHandler.invoke(ASMEventHandler.java:90)
	at net.minecraftforge.fml.common.eventhandler.EventBus.post(EventBus.java:182)
	at net.minecraftforge.common.ForgeHooks.onLivingDeath(ForgeHooks.java:601)
	at net.minecraft.entity.EntityLivingBase.onDeath(EntityLivingBase.java:1284)
	at net.minecraft.entity.monster.EntitySkeleton.onDeath(EntitySkeleton.java:62)
	at net.minecraft.entity.EntityLivingBase.attackEntityFrom(EntityLivingBase.java:1129)
	at net.minecraft.entity.monster.EntityMob.attackEntityFrom(EntityMob.java:80)
	at net.minecraft.entity.monster.EntityMob.attackEntityAsMob(EntityMob.java:109)
	at net.minecraft.entity.monster.EntityZombie.attackEntityAsMob(EntityZombie.java:320)
	at net.minecraft.entity.ai.EntityAIAttackMelee.checkAndPerformAttack(EntityAIAttackMelee.java:197)
	at net.minecraft.entity.ai.EntityAIAttackMelee.updateTask(EntityAIAttackMelee.java:186)
	at net.minecraft.entity.ai.EntityAIZombieAttack.updateTask(EntityAIZombieAttack.java:39)
	at net.minecraft.entity.ai.EntityAITasks.onUpdateTasks(EntityAITasks.java:114)
	at net.minecraft.entity.EntityLiving.updateEntityActionState(EntityLiving.java:843)
	at net.minecraft.entity.EntityLivingBase.onLivingUpdate(EntityLivingBase.java:2582)
	at net.minecraft.entity.EntityLiving.onLivingUpdate(EntityLiving.java:647)
	at net.minecraft.entity.monster.EntityMob.onLivingUpdate(EntityMob.java:49)
	at net.minecraft.entity.monster.EntityZombie.onLivingUpdate(EntityZombie.java:246)
	at net.minecraft.entity.EntityLivingBase.onUpdate(EntityLivingBase.java:2398)
	at net.minecraft.entity.EntityLiving.onUpdate(EntityLiving.java:346)
	at net.minecraft.entity.monster.EntityMob.onUpdate(EntityMob.java:57)
	at net.minecraft.world.World.updateEntityWithOptionalForce(World.java:2171)
	at net.minecraft.world.WorldServer.updateEntityWithOptionalForce(WorldServer.java:871)
	at net.minecraft.world.World.updateEntity(World.java:2130)

-- Entity being ticked --
Details:
	Entity Type: minecraft:zombie (net.minecraft.entity.monster.EntityZombie)
	Entity ID: 24633
	Entity Name: Zombie
	Entity's Exact location: -62.46, 202.00, -38.73
	Entity's Block location: World: (-63,202,-39), Chunk: (at 1,12,9 in -4,-3; contains blocks -64,0,-48 to -49,255,-33), Region: (-1,-1; contains chunks -32,-32 to -1,-1, blocks -512,0,-512 to -1,255,-1)
	Entity's Momentum: 0.00, -0.08, -0.06
	Entity's Passengers: []
	Entity's Vehicle: ~~ERROR~~ NullPointerException: null
Stacktrace:
	at net.minecraft.world.World.updateEntities(World.java:1931)
	at net.minecraft.world.WorldServer.updateEntities(WorldServer.java:643)

-- Affected level --
Details:
	Level name: New World
	All players: 1 total; [EntityPlayerMP['Player517'/598, l='New World', x=-58.45, y=203.04, z=-38.26]]
	Chunk stats: ServerChunkCache: 767 Drop: 0
	Level seed: 6659549246155252085
	Level generator: ID 00 - default, ver 1. Features enabled: true
	Level generator options: 
	Level spawn location: World: (116,64,88), Chunk: (at 4,4,8 in 7,5; contains blocks 112,0,80 to 127,255,95), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,0,0 to 511,255,511)
	Level time: 98358 game time, 21320 day time
	Level dimension: 0
	Level storage version: 0x04ABD - Anvil
	Level weather: Rain time: 39332 (now: false), thunder time: 70297 (now: false)
	Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: true
Stacktrace:
	at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:842)
	at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:743)
	at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:192)
	at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:592)
	at java.lang.Thread.run(Unknown Source)

-- System Details --
Details:
	Minecraft Version: 1.12.2
	Operating System: Windows 10 (amd64) version 10.0
	Java Version: 1.8.0_221, Oracle Corporation
	Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
	Memory: 728052120 bytes (694 MB) / 1037959168 bytes (989 MB) up to 1037959168 bytes (989 MB)
	JVM Flags: 3 total; -Xincgc -Xmx1024M -Xms1024M
	IntCache: cache: 0, tcache: 0, allocated: 12, tallocated: 94
	FML: MCP 9.42 Powered by Forge 14.23.5.2768 5 mods loaded, 5 mods active
	States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored

	| State     | ID        | Version      | Source                           | Signature |
	|:--------- |:--------- |:------------ |:-------------------------------- |:--------- |
	| UCHIJAAAA | minecraft | 1.12.2       | minecraft.jar                    | None      |
	| UCHIJAAAA | mcp       | 9.42         | minecraft.jar                    | None      |
	| UCHIJAAAA | FML       | 8.0.99.99    | forgeSrc-1.12.2-14.23.5.2768.jar | None      |
	| UCHIJAAAA | forge     | 14.23.5.2768 | forgeSrc-1.12.2-14.23.5.2768.jar | None      |
	| UCHIJAAAA | mobwars   | 0.1.0        | bin                              | None      |

	Loaded coremods (and transformers): 
	GL info: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread.
	Profiler Position: N/A (disabled)
	Player Count: 1 / 8; [EntityPlayerMP['Player517'/598, l='New World', x=-58.45, y=203.04, z=-38.26]]
	Type: Integrated Server (map_client.txt)
	Is Modded: Definitely; Client brand changed to 'fml,forge'

 

Edited by Lea9ue
Posted

 

3 hours ago, diesieben07 said:

No. Why?

Oh, I know why: You just typed "worldIn" and Eclipse told you that doesn't exist. It's suggested quick-fix of "create static field" is not appropriate here.


Learn Java. Programming by repeatedly and blindly applying Eclipse's quick-fixes does not work.

I am aware that this is the problem and that my lack of java knowledge isn't helping the situation.  As I said in my 2nd post, I have no idea what to do there.  So thanks for the suggestion of not using quick-fixes, is there a direction you can point me in to get me on the right track?  

Posted
17 minutes ago, diesieben07 said:

 

Thank you, should of read into that more yesterday. Current code works without crashing here:

@SubscribeEvent

	public static void onDeath(LivingDeathEvent event)
		{
		
		World world = event.getEntityLiving().world;

		if (event.getEntity() instanceof EntityZombie) 
			{
			System.out.println("Zombie");
			}
		if (event.getEntity() instanceof EntitySkeleton) 
		{
			System.out.println("Skeleton");
			if (event.getSource().getTrueSource() instanceof EntityZombie) {
				System.out.println("Skeleton killed by Zombie");
	
				EntityZombie zombie = new EntityZombie(world);
				zombie.setLocationAndAngles(event.getSource().getTrueSource().posX, 
						event.getSource().getTrueSource().posY,	event.getSource().getTrueSource().posZ,	0, 0); 
				world.spawnEntity(zombie);
				
				
				
			}
		}			
	}

Is there a better way of getting it?  Just want to learn.

Posted (edited)

Your code is not going to work as intended.

Your code will run whenever a skeleton dies instead of when killed by a zombie.

Oops I missed that.

 

Also, might as will move the getting of the World instance inside your if.

Edited by DavidM

Some tips:

Spoiler

Modder Support:

Spoiler

1. Do not follow tutorials on YouTube, especially TechnoVision (previously called Loremaster) and HarryTalks, due to their promotion of bad practice and usage of outdated code.

2. Always post your code.

3. Never copy and paste code. You won't learn anything from doing that.

4. 

Quote

Programming via Eclipse's hotfixes will get you nowhere

5. Learn to use your IDE, especially the debugger.

6.

Quote

The "picture that's worth 1000 words" only works if there's an obvious problem or a freehand red circle around it.

Support & Bug Reports:

Spoiler

1. Read the EAQ before asking for help. Remember to provide the appropriate log(s).

2. Versions below 1.11 are no longer supported due to their age. Update to a modern version of Minecraft to receive support.

 

 

Posted
3 hours ago, DavidM said:

Your code will run whenever a skeleton dies instead of when killed by a zombie

It will they have a print line in the first one, but in the one where they check for the skeleton there is another if statement inside to check if the attacker is a Zombie.

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.

Posted
4 hours ago, DavidM said:

Your code is not going to work as intended.

Your code will run whenever a skeleton dies instead of when killed by a zombie.

  Hide contents

Your second if is not in your first if.

 

Also, might as will move the getting of the World instance inside your if.

Everything is working as wanted.  Checking for instance of zombie at first is not needed and might of confused. I was only doing that so when I tested and spawned in zombie and skeleton, if skeleton was the victor I would still know right away that code was working up to that point. 

 

Hopefully my last question, in this case, do I need to check if world is remote before spawning entity? example:

if (!world.isRemote) {
	world.spawnEntity(zombie);
	}

 

or is it just redundant at that point in time?

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

    • When I first heard about Bitcoin back in 2018, I was skeptical. The idea of a decentralized, digital currency seemed too good to be true. But I was intrigued as I learned more about the technology behind it and its potential. I started small, investing just a few hundred dollars, dipping my toes into the cryptocurrency waters. At first, it was exhilarating to watch the value of my investment grow exponentially. I felt like I was part of the future, an early adopter of this revolutionary new asset. But that euphoria was short-lived. One day, I logged into my digital wallet only to find it empty - my Bitcoin had vanished without a trace. It turned out that the online exchange I had trusted had been hacked, and my funds were stolen. I was devastated, both financially and emotionally. All the potential I had seen in Bitcoin was tainted by the harsh reality that with decentralization came a lack of regulation and oversight. My hard-earned money was gone, lost to the ether of the digital world. This experience taught me a painful lesson about the price of trust in the uncharted territory of cryptocurrency. While the technology holds incredible promise, the risks can be catastrophic if you don't approach it with extreme caution. My Bitcoin investment gamble had failed, and I was left to pick up the pieces, wiser but poorer for having placed my faith in the wrong hands. My sincere appreciation goes to MUYERN TRUST HACKER. You are my hero in recovering my lost funds. Send a direct m a i l ( muyerntrusted ( @ ) mail-me ( . )c o m ) or message on whats app : + 1 ( 4-4-0 ) ( 3 -3 -5 ) ( 0-2-0-5 )
    • You could try posting a log (if there is no log at all, it may be the launcher you are using, the FAQ may have info on how to enable the log) as described in the FAQ, however this will probably need to be reported to/remedied by the mod author.
    • So me and a couple of friends are playing with a shitpost mod pack and one of the mods in the pack is corail tombstone and for some reason there is a problem with it, where on death to fire the player will get kicked out of the server and the tombstone will not spawn basically deleting an entire inventory, it doesn't matter what type of fire it is, whether it's from vanilla fire/lava, or from modded fire like ice&fire/lycanites and it's common enough to where everyone on the server has experienced at least once or twice and it doesn't give any crash log. a solution to this would be much appreciated thank you!
    • It is 1.12.2 - I have no idea if there is a 1.12 pack
  • Topics

×
×
  • Create New...

Important Information

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