Не получается заставить моба идти на определённые координаты minecraft forge

Рейтинг: 1Ответов: 0Опубликовано: 12.02.2023

Я новичок в создании модов, пытаюсь заставить моба, которого я добавил в игру идти на определённые координаты. Но моб всего лишь иногда посматривает в их сторону, идти не хочет. У него только одна задача: идти на эти координаты, я попытался указать через цель (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"));
        }
    }
}

Это полный код моба (если надо)

Ответы

Ответов пока нет.