You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
3.4 KiB
99 lines
3.4 KiB
package com.technovision.tutorial.entities;
|
|
|
|
import com.technovision.tutorial.init.ModEntityType;
|
|
import net.minecraft.block.BlockState;
|
|
import net.minecraft.entity.*;
|
|
import net.minecraft.entity.ai.attributes.AttributeModifierMap;
|
|
import net.minecraft.entity.ai.attributes.Attributes;
|
|
import net.minecraft.entity.ai.goal.*;
|
|
import net.minecraft.entity.passive.AnimalEntity;
|
|
import net.minecraft.entity.player.PlayerEntity;
|
|
import net.minecraft.item.Items;
|
|
import net.minecraft.item.crafting.Ingredient;
|
|
import net.minecraft.util.DamageSource;
|
|
import net.minecraft.util.SoundEvent;
|
|
import net.minecraft.util.SoundEvents;
|
|
import net.minecraft.util.math.BlockPos;
|
|
import net.minecraft.world.World;
|
|
import net.minecraftforge.api.distmarker.Dist;
|
|
import net.minecraftforge.api.distmarker.OnlyIn;
|
|
|
|
public class HogEntity extends AnimalEntity {
|
|
|
|
private static final Ingredient TEMPTATION_ITEMS = Ingredient.fromItems(Items.CARROT, Items.POTATO, Items.BEETROOT);
|
|
|
|
private EatGrassGoal eatGrassGoal;
|
|
private int goatTimer;
|
|
|
|
public HogEntity(EntityType<? extends AnimalEntity> type, World worldIn) {
|
|
super(type, worldIn);
|
|
}
|
|
|
|
public static AttributeModifierMap.MutableAttribute setCustomAttributes() {
|
|
//func_233666_p_ ---> registerAttributes()
|
|
//func_233815_a_ ---> createMutableAttribute()
|
|
return MobEntity.func_233666_p_().createMutableAttribute(Attributes.MAX_HEALTH, 10.0D)
|
|
.createMutableAttribute(Attributes.MOVEMENT_SPEED, 0.25D);
|
|
}
|
|
|
|
@Override
|
|
public AgeableEntity createChild(AgeableEntity ageable) {
|
|
return ModEntityType.HOG.get().create(this.world);
|
|
}
|
|
|
|
@Override
|
|
protected void registerGoals() {
|
|
super.registerGoals();
|
|
this.eatGrassGoal = new EatGrassGoal(this);
|
|
this.goalSelector.addGoal(0, new SwimGoal(this));
|
|
this.goalSelector.addGoal(1, new PanicGoal(this, 1.25D));
|
|
this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D));
|
|
this.goalSelector.addGoal(3, new TemptGoal(this, 1.1D, TEMPTATION_ITEMS, false));
|
|
this.goalSelector.addGoal(4, new FollowParentGoal(this, 1.1D));
|
|
this.goalSelector.addGoal(5, this.eatGrassGoal);
|
|
this.goalSelector.addGoal(6, new WaterAvoidingRandomWalkingGoal(this, 1.0D));
|
|
this.goalSelector.addGoal(7, new LookAtGoal(this, PlayerEntity.class, 6.0F));
|
|
this.goalSelector.addGoal(8, new LookRandomlyGoal(this));
|
|
}
|
|
|
|
@Override
|
|
protected SoundEvent getAmbientSound() { return SoundEvents.ENTITY_PIG_AMBIENT; }
|
|
|
|
@Override
|
|
protected SoundEvent getDeathSound() { return SoundEvents.ENTITY_PIG_DEATH; }
|
|
|
|
@Override
|
|
protected SoundEvent getHurtSound(DamageSource damageSourceIn) {
|
|
return SoundEvents.ENTITY_PIG_HURT;
|
|
}
|
|
|
|
@Override
|
|
protected void playStepSound(BlockPos pos, BlockState blockIn) {
|
|
this.playSound(SoundEvents.ENTITY_PIG_STEP, 0.15F, 1.0F);
|
|
}
|
|
|
|
@Override
|
|
protected void updateAITasks() {
|
|
this.goatTimer = this.eatGrassGoal.getEatingGrassTimer();
|
|
super.updateAITasks();
|
|
}
|
|
|
|
@Override
|
|
public void livingTick() {
|
|
if (this.world.isRemote) {
|
|
this.goatTimer = Math.max(0, this.goatTimer - 1);
|
|
}
|
|
super.livingTick();
|
|
}
|
|
|
|
@OnlyIn(Dist.CLIENT)
|
|
public void handleStatusUpdate(byte id) {
|
|
if (id == 10) {
|
|
this.goatTimer = 40;
|
|
} else {
|
|
super.handleStatusUpdate(id);
|
|
}
|
|
|
|
}
|
|
}
|