vassdeniss Posted August 12, 2021 Posted August 12, 2021 How would i be able to make an entity follow the player on holding a specific item and how to make it follow the player always when given the item. I can't find which functions to use can I get a hand? Quote
uSkizzik Posted August 12, 2021 Posted August 12, 2021 Vanilla animals already have similar behavior. For example, pigs follow you when you hold a carrot or a carrot on a stick. That's achieved by adding the TemptGoal to the registerGoals method. Here's an example from the vanilla pig class: this.goalSelector.addGoal(4, new TemptGoal(this, 1.2D, Ingredient.of(Items.CARROT_ON_A_STICK), false)); You can also use commas where it says Items.CARROT_ON_A_STICK to add more than one item. P.S.: I'm not sure how you would go about making it follow the player when it's given a specific item, maybe taming? Quote
vassdeniss Posted August 12, 2021 Author Posted August 12, 2021 (edited) On 8/12/2021 at 12:31 PM, uSkizzik said: Vanilla animals already have similar behavior. For example, pigs follow you when you hold a carrot or a carrot on a stick. That's achieved by adding the TemptGoal to the registerGoals method. Here's an example from the vanilla pig class: this.goalSelector.addGoal(4, new TemptGoal(this, 1.2D, Ingredient.of(Items.CARROT_ON_A_STICK), false)); You can also use commas where it says Items.CARROT_ON_A_STICK to add more than one item. P.S.: I'm not sure how you would go about making it follow the player when it's given a specific item, maybe taming? Expand Ingredient.of doesn't exist for me? The pig class is: this.goalSelector.addGoal(4, new TemptGoal(this, 1.2D, Ingredient.fromItems(Items.CARROT_ON_A_STICK), false)); I have Ingredient.fromItems() but that gives me a "Cannot resolve constructor" error. Also how would taming work? Edited August 12, 2021 by vassdeniss Added more info Quote
uSkizzik Posted August 12, 2021 Posted August 12, 2021 On 8/12/2021 at 12:41 PM, vassdeniss said: Ingredient.of doesn't exist for me? I have Ingredient.fromItems() but that gives me a "Cannot resolve constructor" error. Also how would taming work? Expand Are you sure? I just checked my old 1.16 project and the class name seems the same. Are you importing net.minecraft.item.crafting.Ingredient? Quote
vassdeniss Posted August 12, 2021 Author Posted August 12, 2021 On 8/12/2021 at 12:44 PM, uSkizzik said: Are you sure? I just checked my old 1.16 project and the class name seems the same. Are you importing net.minecraft.item.crafting.Ingredient? Expand Yes i am importing it Quote
Luis_ST Posted August 12, 2021 Posted August 12, 2021 On 8/12/2021 at 12:31 PM, uSkizzik said: P.S.: I'm not sure how you would go about making it follow the player when it's given a specific item, maybe taming? Expand this is easy, copy the logic of the TemptGoal, and change it to your logic if the Player gives the item to the entity save the Player, then check in the goal whether a player has been saved in your entity (! = null check), if this is the case, take the part of the TemptGoal where the entity follows another entity Quote
uSkizzik Posted August 12, 2021 Posted August 12, 2021 On 8/12/2021 at 12:41 PM, vassdeniss said: Ingredient.of doesn't exist for me? The pig class is: this.goalSelector.addGoal(4, new TemptGoal(this, 1.2D, Ingredient.fromItems(Items.CARROT_ON_A_STICK), false)); I have Ingredient.fromItems() but that gives me a "Cannot resolve constructor" error. Also how would taming work? Expand Oh, so you're using MCP mappings, alright. Are you using the same line of code? Does Ingridient.fromItems give you a "Cannot resolve contructor" error? Quote
vassdeniss Posted August 12, 2021 Author Posted August 12, 2021 On 8/12/2021 at 12:52 PM, uSkizzik said: Oh, so you're using MCP mappings, alright. Are you using the same line of code? Does Ingridient.fromItems give you a "Cannot resolve contructor" error? Expand Yes it does even though every other class use the same line Quote
vassdeniss Posted August 12, 2021 Author Posted August 12, 2021 Just fixed it. It was my extension. I was extending bat entity which cant have a temptgoal for some reason? Quote
uSkizzik Posted August 12, 2021 Posted August 12, 2021 (edited) On 8/12/2021 at 12:54 PM, vassdeniss said: Just fixed it. It was my extension. I was extending bat entity which cant have a temptgoal for some reason? Expand Any living entity should be able to have TemptGoal. I looked a bit into the class and it requires a PathfinderMob which both MonsterEntity and CreatureEntity / AnimalEntity extend. Anyway, you can use luis's solution for making the entity follow the player when given the item. Edit: Turns out the bat is an "AmbientCreature" which is a class that doesn't extend PathfinderMob. Bats seem to not be able to have goals. Edited August 12, 2021 by uSkizzik Quote
vassdeniss Posted August 12, 2021 Author Posted August 12, 2021 On 8/12/2021 at 12:57 PM, uSkizzik said: Any living entity should be able to have TemptGoal. I looked a bit into the class and it requires a PathfinderMob which both MonsterEntity and CreatureEntity / AnimalEntity extend. Anyway, you can use luis's solution for making the entity follow the player when given the item. Expand Thats the problem then. BatEntity extends AmbientEntity Quote
uSkizzik Posted August 12, 2021 Posted August 12, 2021 On 8/12/2021 at 12:59 PM, vassdeniss said: Thats the problem then. BatEntity extends AmbientEntity Expand Exactly. I hope that solves the issue. If you really need to extend BatEntity, you can extend it and override the customServerAiStep() method. Add super.customServerAiStep() to keep the bat AI or don't to make completely custom AI. If you override that method you will need to adapt the TemptGoal code to work. Also, according to forge-bot, customServerAiStep is updateAITasks for you but I'm not sure if that's accurate. Quote
vassdeniss Posted August 12, 2021 Author Posted August 12, 2021 On 8/12/2021 at 1:04 PM, uSkizzik said: Exactly. I hope that solves the issue. If you really need to extend BatEntity, you can extend it and override the customServerAiStep() method. Add super.customServerAiStep() to keep the bat AI or don't to make completely custom AI. If you override that method you will need to adapt the TemptGoal code to work. Also, according to forge-bot, customServerAiStep is updateAITasks for you but I'm not sure if that's accurate. Expand It is updateAiTasks and i just overridden it and yes i do wanna keep the AI so i kept the super call but the TemptGoal still gives errors? Im missing something? Quote
uSkizzik Posted August 12, 2021 Posted August 12, 2021 On 8/12/2021 at 1:10 PM, vassdeniss said: It is updateAiTasks and i just overridden it and yes i do wanna keep the AI so i kept the super call but the TemptGoal still gives errors? Im missing something? Expand You aren't supposed to add the goal like the other entities. You literally have to use the code from that class and put it in the updateAITasks. Also, make sure to check if the bat isn't resting when you run the code to follow the player. Quote
vassdeniss Posted August 12, 2021 Author Posted August 12, 2021 On 8/12/2021 at 1:17 PM, uSkizzik said: You aren't supposed to add the goal like the other entities. You literally have to use the code from that class and put it in the updateAITasks. Also, make sure to check if the bat isn't resting when you run the code to follow the player. Expand Put the temptgoal in? Quote
uSkizzik Posted August 12, 2021 Posted August 12, 2021 On 8/12/2021 at 1:21 PM, vassdeniss said: Put the temptgoal in? Expand I actually don't have any idea of how exactly you would go about adding the TemptGoal code to your updateAITasks... Quote
vassdeniss Posted August 12, 2021 Author Posted August 12, 2021 On 8/12/2021 at 1:28 PM, uSkizzik said: I actually don't have any idea of how exactly you would go about adding the TemptGoal code to your updateAITasks... Expand Ill look into it then somehow Quote
uSkizzik Posted August 12, 2021 Posted August 12, 2021 On 8/12/2021 at 4:27 PM, spiceagent11 said: Vanilla animals already have similar behavior. For example, pigs follow you when you hold a carrot or a carrot on a stick. That's achieved by adding the TemptGoal to the registerGoals method. Here's an example from the vanilla pig class: Expand Bats don't have the registerGoals() method. Quote
Recommended Posts
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.