Не получается заставить моба идти на определённые координаты minecraft forge
Я новичок в создании модов, пытаюсь заставить моба, которого я добавил в игру идти на определённые координаты. Но моб всего лишь иногда посматривает в их сторону, идти не хочет. У него только одна задача: идти на эти координаты, я попытался указать через цель (goal). Вот код:
@Override
protected void registerGoals() {
super.registerGoals();
this.goalSelector.addGoal(2, new MoveToBlockGoal(this, 1.0, 1) {
@Override
protected boolean shouldMoveTo(IWorldReader worldIn, BlockPos pos) {
pos = new BlockPos(20, 30, 40);
worldIn = this.creature.getEntityWorld();
return true;
}
});
}
Моба делал через mcreator, потом открыл проект с помощью IntellijIdea.
package net.mcreator.newmob.entity;
import net.minecraft.entity.ai.goal.*;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.IWorldReader;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.fml.network.NetworkHooks;
import net.minecraftforge.fml.network.FMLPlayMessages;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.event.world.BiomeLoadingEvent;
import net.minecraftforge.event.entity.EntityAttributeCreationEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraft.world.gen.Heightmap;
import net.minecraft.world.biome.MobSpawnInfo;
import net.minecraft.world.World;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.DamageSource;
import net.minecraft.network.IPacket;
import net.minecraft.item.crafting.Ingredient;
import net.minecraft.item.SpawnEggItem;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.Item;
import net.minecraft.entity.monster.MonsterEntity;
import net.minecraft.entity.merchant.villager.VillagerEntity;
import net.minecraft.entity.ai.attributes.Attributes;
import net.minecraft.entity.ai.attributes.AttributeModifierMap;
import net.minecraft.entity.MobEntity;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.EntitySpawnPlacementRegistry;
import net.minecraft.entity.EntityClassification;
import net.minecraft.entity.CreatureAttribute;
import net.minecraft.block.Blocks;
import net.mcreator.newmob.entity.renderer.MobdRenderer;
import net.mcreator.newmob.NewmobModElements;
@NewmobModElements.ModElement.Tag
public class MobdEntity extends NewmobModElements.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("mobd").setRegistryName("mobd");
public MobdEntity(NewmobModElements instance) {
super(instance, 1);
FMLJavaModLoadingContext.get().getModEventBus().register(new MobdRenderer.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("mobd_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.3);
ammma = ammma.createMutableAttribute(Attributes.MAX_HEALTH, 10);
ammma = ammma.createMutableAttribute(Attributes.ARMOR, 0);
ammma = ammma.createMutableAttribute(Attributes.ATTACK_DAMAGE, 3);
ammma = ammma.createMutableAttribute(Attributes.FOLLOW_RANGE, 16);
event.put(entity, ammma.create());
}
}
public static class CustomEntity extends VillagerEntity {
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(2, new MoveToBlockGoal(this, 1.0, 1) {
@Override
protected boolean shouldMoveTo(IWorldReader worldIn, BlockPos pos) {
pos = new BlockPos(20, 30, 40);
worldIn = this.creature.getEntityWorld();
return true;
}
});
}
@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"));
}
}
}
Это полный код моба (если надо)
Источник: Stack Overflow на русском