@RideableEntitiesModElements.ModElement.Tag
public class BabytigerEntity extends RideableEntitiesModElements.ModElement {
public static EntityType entity = (EntityType.Builder.<CustomEntity>create(CustomEntity::new, EntityClassification.MONSTER)
.setShouldReceiveVelocityUpdates(true).setTrackingRange(64).setUpdateInterval(3).setCustomClientFactory(CustomEntity::new)
.size(0.6f, 1.8f)).build("babytiger").setRegistryName("babytiger");
public BabytigerEntity(RideableEntitiesModElements instance) {
super(instance, 4);
FMLJavaModLoadingContext.get().getModEventBus().register(new BabytigerRenderer.ModelRegisterHandler());
FMLJavaModLoadingContext.get().getModEventBus().register(new EntityAttributesRegisterHandler());
MinecraftForge.EVENT_BUS.register(this);
}
@Override
public void initElements() {
elements.entities.add(() -> entity);
elements.items
.add(() -> new SpawnEggItem(entity, -1, -1, new Item.Properties().group(ItemGroup.MISC)).setRegistryName("babytiger_spawn_egg"));
}
@SubscribeEvent
public void addFeatureToBiomes(BiomeLoadingEvent event) {
event.getSpawns().getSpawner(EntityClassification.MONSTER).add(new MobSpawnInfo.Spawners(entity, 20, 4, 4));
}
@Override
public void init(FMLCommonSetupEvent event) {
EntitySpawnPlacementRegistry.register(entity, EntitySpawnPlacementRegistry.PlacementType.ON_GROUND, Heightmap.Type.MOTION_BLOCKING_NO_LEAVES,
MonsterEntity::canMonsterSpawn);
}
private static class EntityAttributesRegisterHandler {
@SubscribeEvent
public void onEntityAttributeCreation(EntityAttributeCreationEvent event) {
AttributeModifierMap.MutableAttribute ammma = MobEntity.func_233666_p_();
ammma = ammma.createMutableAttribute(Attributes.MOVEMENT_SPEED, 0.8);
ammma = ammma.createMutableAttribute(Attributes.MAX_HEALTH, 10);
ammma = ammma.createMutableAttribute(Attributes.ARMOR, 0);
ammma = ammma.createMutableAttribute(Attributes.ATTACK_DAMAGE, 3);
event.put(entity, ammma.create());
}
}
public static class CustomEntity extends CreatureEntity {
public CustomEntity(FMLPlayMessages.SpawnEntity packet, World world) {
this(entity, world);
}
public CustomEntity(EntityType<CustomEntity> type, World world) {
super(type, world);
experienceValue = 0;
setNoAI(false);
}
@Override
public IPacket<?> createSpawnPacket() {
return NetworkHooks.getEntitySpawningPacket(this);
}
@Override
protected void registerGoals() {
super.registerGoals();
this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.2, false));
this.goalSelector.addGoal(2, new RandomWalkingGoal(this, 1));
this.targetSelector.addGoal(3, new HurtByTargetGoal(this));
this.goalSelector.addGoal(4, new LookRandomlyGoal(this));
this.goalSelector.addGoal(5, new SwimGoal(this));
}
@Override
public CreatureAttribute getCreatureAttribute() {
return CreatureAttribute.UNDEFINED;
}
@Override
public net.minecraft.util.SoundEvent getHurtSound(DamageSource ds) {
return (net.minecraft.util.SoundEvent) ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("entity.generic.hurt"));
}
@Override
public net.minecraft.util.SoundEvent getDeathSound() {
return (net.minecraft.util.SoundEvent) ForgeRegistries.SOUND_EVENTS.getValue(new ResourceLocation("entity.generic.death"));
}
@Override
public ActionResultType func_230254_b_(PlayerEntity sourceentity, Hand hand) {
ItemStack itemstack = sourceentity.getHeldItem(hand);
ActionResultType retval = ActionResultType.func_233537_a_(this.world.isRemote());
super.func_230254_b_(sourceentity, hand);
sourceentity.startRiding(this);
return retval;
}
@Override
public void travel(Vector3d dir) {
Entity entity = this.getPassengers().isEmpty() ? null : (Entity) this.getPassengers().get(0);
if (this.isBeingRidden()) {
this.rotationYaw = entity.rotationYaw;
this.prevRotationYaw = this.rotationYaw;
this.rotationPitch = entity.rotationPitch * 0.5F;
this.setRotation(this.rotationYaw, this.rotationPitch);
this.jumpMovementFactor = this.getAIMoveSpeed() * 0.15F;
this.renderYawOffset = entity.rotationYaw;
this.rotationYawHead = entity.rotationYaw;
this.stepHeight = 1.0F;
if (entity instanceof LivingEntity) {
this.setAIMoveSpeed((float) this.getAttributeValue(Attributes.MOVEMENT_SPEED));
float forward = ((LivingEntity) entity).moveForward;
float strafe = ((LivingEntity) entity).moveStrafing;
super.travel(new Vector3d(strafe, 0, forward));
}
this.prevLimbSwingAmount = this.limbSwingAmount;
double d1 = this.getPosX() - this.prevPosX;
double d0 = this.getPosZ() - this.prevPosZ;
float f1 = MathHelper.sqrt(d1 * d1 + d0 * d0) * 4.0F;
if (f1 > 1.0F)
f1 = 1.0F;
this.limbSwingAmount += (f1 - this.limbSwingAmount) * 0.4F;
this.limbSwing += this.limbSwingAmount;
return;
}
this.stepHeight = 0.5F;
this.jumpMovementFactor = 0.02F;
super.travel(dir);
}
}
}
ok thanks and for the people that want to copy paste here is the code