Posted August 22, 20196 yr 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.
August 22, 20196 yr Author 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.
August 22, 20196 yr 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.
August 22, 20196 yr Author 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); } } }
August 22, 20196 yr 1 minute ago, Lea9ue said: Heres what code looks like but it crashes Well can't help if I don't have the crash report. 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.
August 22, 20196 yr Author 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 August 22, 20196 yr by Lea9ue
August 22, 20196 yr 1 minute ago, Lea9ue said: at com.lea9ue.mobwars.server.ServerEventWalkerKill.onDeath(ServerEventWalkerKill.java:36) What is line 36? 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.
August 23, 20196 yr Author 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?
August 23, 20196 yr Author 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.
August 23, 20196 yr 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 August 24, 20196 yr 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.
August 23, 20196 yr No. The code IS run when a skeleton dies to a zombie. There are more than 2 if brackets. Or am I missing smth here? https://github.com/CAS-ual-TY/Visibilis [1.14] How to Villagers, Trades, Professions, Fix Trades https://minecraft.curseforge.com/projects/gun-customization-infinity / https://github.com/CAS-ual-TY/GunCus https://minecraft.curseforge.com/projects/ygo-dueling-mod https://minecraft.curseforge.com/projects/mundus-magicus https://minecraft.curseforge.com/projects/deuf-duplicate-entity-uuid-fix
August 23, 20196 yr 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.
August 23, 20196 yr Author 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?
August 23, 20196 yr 40 minutes ago, Lea9ue said: or is it just redundant at that point in time? I think it is redundant because that event is only fired on the server. 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.
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.