Posted February 9, 20196 yr Hello again! I'm wondering what the best way to add a custom EntityAI thing to all EntityAnimals would be? I'm currently doing it on LivingSpawnEvent, but that feels a bit hacky, and I don't know how to check if the EntityAnimals already have the task. Would the best way to do this be at registration? Here's where I'm doing it: Spoiler @SubscribeEvent public static void AddPettingAITask(LivingSpawnEvent event) { EntityLivingBase livingBase = event.getEntityLiving(); if(livingBase instanceof EntityAnimal) { EntityAnimal animalEntity = (EntityAnimal)livingBase; animalEntity.tasks.addTask(10, new EntityAIPet(animalEntity)); } } The EntityAIPet class is basically an AI task that allows the player to pet the animal for a small amount of XP every now and then. I can post the code if need be. Edited February 10, 20196 yr by mirk
February 9, 20196 yr As far as I am aware, that's correct. 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.
February 10, 20196 yr Author Yeah, I just refined it a bit and I'm coming back to report that it's a success! Here's the refined code for anyone looking to do a similar thing: Spoiler @SubscribeEvent public static void AddPettingAITask(LivingSpawnEvent event) { EntityLivingBase livingBase = event.getEntityLiving(); if(livingBase instanceof EntityAnimal) { EntityAnimal animalEntity = (EntityAnimal)livingBase; boolean addPettingTask = true; for(EntityAITasks.EntityAITaskEntry task : animalEntity.tasks.taskEntries) { if(task.action instanceof EntityAIPet) { addPettingTask = false; break; } } if(addPettingTask) { animalEntity.tasks.addTask(10, new EntityAIPet(animalEntity)); } } } Sorry if the formatting is a bit off, it's not cooperating with me.
February 10, 20196 yr Now you can check to see if there is any possible way that addPettingTask = false; ever gets called. Its possible that it never does. 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.
February 10, 20196 yr Author It is indeed called, at game load, as it looks like the task list is saved at game exit, then loaded on game load, so the EntityAIPet task persists in the task list, and it tries to add another copy of the task as the EntityAnimal spawns in, so addPettingTask = false (sorry, I'm not familiar with the forum formatting options yet) does get set.
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.