Posted December 24, 20159 yr I been trying for a couple of days now to get a village guard-like mob to spawn in a village that generates in the game. I started by using a forge event "PopulateChunkEvent", but it doesn't seem to be working right. ' @SubscribeEvent public void onPopulateChunk(PopulateChunkEvent.Populate event){ FMLLog.getLogger().info("Spawn Watch"); if(event.hasVillageGenerated){ EntityVillageWatch.spawnWatch(event.world); } } ' Registering the class into the forge EVENTBUS: ' @EventHandler public void preInit(FMLPreInitializationEvent event){ CivItems.init(); CivBlocks.init(); CivItems.register(); CivBlocks.register(); //EntityRegisterCiv.addSpawns(); MinecraftForge.EVENT_BUS.register(new spawnWatch()); } ' My spawnWatch function: ' public EntityVillageWatch(World worldIn, int x, int y, int z) { super(worldIn); this.posX = x; this.posY = y; this.posZ = z; this.setSize(1.4F, 2.9F); ((PathNavigateGround)this.getNavigator()).func_179690_a(true); this.tasks.addTask(1, new EntityAIAttackOnCollide(this, 1.0D, true)); this.tasks.addTask(2, new EntityAIMoveTowardsTarget(this, 0.9D, 32.0F)); this.tasks.addTask(3, new EntityAIMoveThroughVillage(this, 0.6D, true)); this.tasks.addTask(4, new EntityAIMoveTowardsRestriction(this, 1.0D)); this.tasks.addTask(6, new EntityAIWander(this, 0.6D)); this.tasks.addTask(7, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F)); this.tasks.addTask(8, new EntityAILookIdle(this)); this.targetTasks.addTask(1, new EntityAIGuardVillage(this)); this.targetTasks.addTask(2, new EntityAIHurtByTarget(this, false, new Class[0])); this.targetTasks.addTask(3, new EntityVillageWatch.AINearestAttackableTargetNonCreeper(this, EntityLiving.class, 10, false, true, IMob.field_175450_e)); } public static void spawnWatch(World worldIn){ int i = 0; int numWatch = r.nextInt(20)+21; List villages = worldIn.getVillageCollection().getVillageList(); while(villages.iterator().hasNext()){ int numWatchSpawned = 0; Village village = (Village) villages.get(i); BlockPos center = village.getCenter(); int radius = village.getVillageRadius(); while(numWatchSpawned < numWatch){ worldIn.spawnEntityInWorld(new EntityVillageWatch(worldIn, center.getX() + r.nextInt(radius), center.getY()+r.nextInt(radius), center.getZ()+r.nextInt(radius))); numWatchSpawned++; } i++; } } ' Any suggestions or problems you see with this code? Any help is greatly appreciated.
December 24, 20159 yr PopulateChunkEvent is a Forge event. You have to register it to the MinecraftForge.EVENT_BUS , but you are registering it to the FML event bus (FMLCommonHandler.instance().bus()). Don't PM me with questions. They will be ignored! Make a thread on the appropriate board for support. 1.12 -> 1.13 primer by williewillus. 1.7.10 and older versions of Minecraft are no longer supported due to it's age! Update to the latest version for support. http://www.howoldisminecraft1710.today/
December 24, 20159 yr Author PopulateChunkEvent is a Forge event. You have to register it to the MinecraftForge.EVENT_BUS , but you are registering it to the FML event bus (FMLCommonHandler.instance().bus()). I registered it into the "MinecraftForge.EVENT_BUS", yet it still isn't working.
December 24, 20159 yr All of my bus registrations are in my post init handlers, but yours is in pre init. Try doing it in a later handler. The debugger is a powerful and necessary tool in any IDE, so learn how to use it. You'll be able to tell us more and get better help here if you investigate your runtime problems in the debugger before posting.
December 24, 20159 yr Registering it later shouldn't make any difference - you can generally register your Forge / FML event handlers at any time during the entire initialization process, as most of them aren't fired until after that has completed. I'm guessing your issue is that you are not adjusting the Y position at all when trying to spawn, so the entities may be trying to spawn in the ground or in the air - try using getWorldHeight(x, z) + 1 as the y position. Also, to be absolutely certain that your event is getting called properly, look in your console log - based on the code you posted, you should see "Spawn Watch" basically spammed all over in it; if not, then your event handler class is somehow set up incorrectly. http://i.imgur.com/NdrFdld.png[/img]
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.