Как убрать название моба над ним ?

Версия Minecraft
1.14.3
15
2
Здравствуйте, я в этом деле новичок и мне интересно, как убрать название моба над ним, после его регистрации.
Сам решить эту проблему не смог, поэтому решил обратиться сюда, может кто-нибудь и поможет. :D
Код:
public static EntityType<?> FISH_ENTITY = register("fish", EntityType.Builder.create(FishEntity::new, EntityClassification.CREATURE).size(0.35F, 0.35F));

public static EntityType<?> register(String name, EntityType.Builder<?> builder)
    {
        return builder.build(name).setRegistryName(name);
    }

Так у меня рыбка записана в en_us.json
"entity.legacy.fish": "Fish"
 

Вложения

  • 2019-07-21_10.09.46.png
    2019-07-21_10.09.46.png
    475.4 KB · Просмотры: 32
7,099
324
1,510
Покажи весь код. Тут вроде нет проблемы
 
15
2
Вот все классы
Код:
package ru.galior.legacy.entity;

import java.util.Random;

import net.minecraft.block.Blocks;
import net.minecraft.entity.EntitySize;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.MoverType;
import net.minecraft.entity.Pose;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.SpawnReason;
import net.minecraft.entity.ai.controller.MovementController;
import net.minecraft.entity.ai.goal.AvoidEntityGoal;
import net.minecraft.entity.ai.goal.PanicGoal;
import net.minecraft.entity.ai.goal.RandomSwimmingGoal;
import net.minecraft.entity.passive.WaterMobEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.pathfinding.PathNavigator;
import net.minecraft.pathfinding.SwimmerPathNavigator;
import net.minecraft.tags.FluidTags;
import net.minecraft.util.EntityPredicates;
import net.minecraft.util.SoundEvent;
import net.minecraft.util.SoundEvents;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.IWorld;
import net.minecraft.world.World;

public abstract class AbstractFishEntity extends WaterMobEntity {
    
       public AbstractFishEntity(EntityType<? extends AbstractFishEntity> type, World worldIn) {
          super(type, worldIn);
          this.moveController = new AbstractFishEntity.MoveHelperController(this);
       }

       protected float getStandingEyeHeight(Pose poseIn, EntitySize sizeIn) {
          return sizeIn.height * 0.65F;
       }

       protected void registerAttributes() {
          super.registerAttributes();
          this.getAttribute(SharedMonsterAttributes.MAX_HEALTH).setBaseValue(0.5D);
       }

       public static boolean func_223363_b(EntityType<? extends AbstractFishEntity> p_223363_0_, IWorld p_223363_1_, SpawnReason p_223363_2_, BlockPos p_223363_3_, Random p_223363_4_) {
          return p_223363_1_.getBlockState(p_223363_3_).getBlock() == Blocks.WATER && p_223363_1_.getBlockState(p_223363_3_.up()).getBlock() == Blocks.WATER;
       }

       public int getMaxSpawnedInChunk() {
          return 8;
       }

       protected void registerGoals() {
          super.registerGoals();
          this.goalSelector.addGoal(0, new PanicGoal(this, 1.25D));
          this.goalSelector.addGoal(2, new AvoidEntityGoal<>(this, PlayerEntity.class, 8.0F, 1.6D, 1.4D, EntityPredicates.NOT_SPECTATING::test));
          this.goalSelector.addGoal(4, new AbstractFishEntity.SwimGoal(this));
       }

       protected PathNavigator createNavigator(World worldIn) {
          return new SwimmerPathNavigator(this, worldIn);
       }

       public void travel(Vec3d p_213352_1_) {
          if (this.isServerWorld() && this.isInWater()) {
             this.moveRelative(0.01F, p_213352_1_);
             this.move(MoverType.SELF, this.getMotion());
             this.setMotion(this.getMotion().scale(0.9D));
             if (this.getAttackTarget() == null) {
                this.setMotion(this.getMotion().add(0.0D, -0.005D, 0.0D));
             }
          } else {
             super.travel(p_213352_1_);
          }

       }

       public void livingTick() {
          if (!this.isInWater() && this.onGround && this.collidedVertically) {
             this.setMotion(this.getMotion().add((double)((this.rand.nextFloat() * 2.0F - 1.0F) * 0.05F), (double)0.4F, (double)((this.rand.nextFloat() * 2.0F - 1.0F) * 0.05F)));
             this.onGround = false;
             this.isAirBorne = true;
             this.playSound(this.getFlopSound(), this.getSoundVolume(), this.getSoundPitch());
          }

          super.livingTick();
       }

       protected boolean func_212800_dy() {
          return true;
       }

       protected abstract SoundEvent getFlopSound();
      
       protected SoundEvent getSwimSound() {
          return SoundEvents.ENTITY_FISH_SWIM;
       }

       static class MoveHelperController extends MovementController {
          private final AbstractFishEntity fish;

          MoveHelperController(AbstractFishEntity fish) {
             super(fish);
             this.fish = fish;
          }

          public void tick() {
             if (this.fish.areEyesInFluid(FluidTags.WATER)) {
                this.fish.setMotion(this.fish.getMotion().add(0.0D, 0.005D, 0.0D));
             }

             if (this.action == MovementController.Action.MOVE_TO && !this.fish.getNavigator().noPath()) {
                double d0 = this.posX - this.fish.posX;
                double d1 = this.posY - this.fish.posY;
                double d2 = this.posZ - this.fish.posZ;
                double d3 = (double)MathHelper.sqrt(d0 * d0 + d1 * d1 + d2 * d2);
                d1 = d1 / d3;
                float f = (float)(MathHelper.atan2(d2, d0) * (double)(180F / (float)Math.PI)) - 90.0F;
                this.fish.rotationYaw = this.limitAngle(this.fish.rotationYaw, f, 90.0F);
                this.fish.renderYawOffset = this.fish.rotationYaw;
                float f1 = (float)(this.speed * this.fish.getAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).getValue());
                this.fish.setAIMoveSpeed(MathHelper.lerp(0.125F, this.fish.getAIMoveSpeed(), f1));
                this.fish.setMotion(this.fish.getMotion().add(0.0D, (double)this.fish.getAIMoveSpeed() * d1 * 0.1D, 0.0D));
             } else {
                this.fish.setAIMoveSpeed(0.0F);
             }
          }
       }

       static class SwimGoal extends RandomSwimmingGoal {
          private final AbstractFishEntity fish;

          public SwimGoal(AbstractFishEntity fish) {
             super(fish, 1.0D, 40);
             this.fish = fish;
          }

          public boolean shouldExecute() {
             return this.fish.func_212800_dy() && super.shouldExecute();
          }
       }
}
Код:
package ru.galior.legacy.entity;

import afu.org.checkerframework.checker.nullness.qual.Nullable;
import net.minecraft.entity.EntityType;
import net.minecraft.entity.ILivingEntityData;
import net.minecraft.entity.SpawnReason;
import net.minecraft.nbt.CompoundNBT;
import net.minecraft.network.datasync.DataParameter;
import net.minecraft.network.datasync.DataSerializers;
import net.minecraft.network.datasync.EntityDataManager;
import net.minecraft.util.DamageSource;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.SoundEvent;
import net.minecraft.util.SoundEvents;
import net.minecraft.util.math.MathHelper;
import net.minecraft.world.DifficultyInstance;
import net.minecraft.world.IWorld;
import net.minecraft.world.World;
import ru.galior.legacy.init.EntitiesInit;
import ru.galior.legacy.init.LootTables;

public class FishEntity extends AbstractFishEntity
{
    private static final DataParameter<Integer> FISH_TYPE = EntityDataManager.createKey(FishEntity.class, DataSerializers.VARINT);
    
    @SuppressWarnings("unchecked")
    public FishEntity(EntityType<? extends AbstractFishEntity> type, World worldIn)
    {
        super((EntityType<? extends AbstractFishEntity>) EntitiesInit.FISH_ENTITY, worldIn);
    }
    
    @Override
    protected void registerData()
    {
        super.registerData();
        this.dataManager.register(FISH_TYPE , 0);
    }

    public int getVariant()
    {
        return MathHelper.clamp(this.dataManager.get(FISH_TYPE ), 0, 4);
    }

    public void setVariant(int variantIn)
    {
        this.dataManager.set(FISH_TYPE , variantIn);
    }
    
    @Override
    public void writeAdditional(CompoundNBT compound) {
        super.writeAdditional(compound);
        compound.putInt("Variant", this.getVariant());
    }
    
    @Override
    public void readAdditional(CompoundNBT compound) {
        super.readAdditional(compound);
        this.setVariant(compound.getInt("Variant"));
    }
    
    @Nullable
    public ILivingEntityData onInitialSpawn(IWorld worldIn, DifficultyInstance difficultyIn, SpawnReason reason, @Nullable ILivingEntityData spawnDataIn, @Nullable CompoundNBT dataTag)
    {
        spawnDataIn = super.onInitialSpawn(worldIn, difficultyIn, reason, spawnDataIn, dataTag);
        int i;
        if (spawnDataIn instanceof FishEntity.FishData) {
            i = ((FishEntity.FishData)spawnDataIn).variant;
        } else {
            i = this.rand.nextInt(5);
            spawnDataIn = new FishEntity.FishData(i);
        }

        this.setVariant(i);
        return spawnDataIn;
    }
    
    static class FishData implements ILivingEntityData
    {
        public final int variant;

        private FishData(int variantIn) {
            this.variant = variantIn;
        }
    }
    
    @Override
    protected ResourceLocation getLootTable()
    {
        switch(this.getVariant()) {
        case 0:
        default:
           return LootTables.LOOT_FISH_0;
        case 1:
           return LootTables.LOOT_FISH_1;
        case 2:
           return LootTables.LOOT_FISH_2;
        case 3:
           return LootTables.LOOT_FISH_3;
        case 4:
           return LootTables.LOOT_FISH_4;
        }
    }
    
    @Override
    protected SoundEvent getAmbientSound() {
        return SoundEvents.ENTITY_TROPICAL_FISH_AMBIENT;
    }

    @Override
    protected SoundEvent getDeathSound() {
        return SoundEvents.ENTITY_TROPICAL_FISH_DEATH;
    }

    @Override
    protected SoundEvent getHurtSound(DamageSource damageSourceIn) {
        return SoundEvents.ENTITY_TROPICAL_FISH_HURT;
    }

    @Override
    protected SoundEvent getFlopSound() {
        return SoundEvents.ENTITY_TROPICAL_FISH_FLOP;
    }

}

Код:
package ru.galior.legacy.init;

import net.minecraft.entity.EntityClassification;
import net.minecraft.entity.EntityType;
import net.minecraft.item.Item;
import net.minecraft.item.ItemGroup;
import net.minecraft.item.SpawnEggItem;
import net.minecraft.world.biome.Biome;
import net.minecraft.world.biome.Biome.SpawnListEntry;
import net.minecraft.world.biome.Biomes;
import net.minecraftforge.event.RegistryEvent;
import ru.galior.legacy.Main;
import ru.galior.legacy.entity.FishEntity;

public class EntitiesInit
{
    public static EntityType<?> FISH_ENTITY = register("fish", EntityType.Builder.create(FishEntity::new, EntityClassification.CREATURE).size(0.35F, 0.35F));
    public static Item FISH_ENTITY_EGG;
    
    public static void registerEntitySpawnEgg(final RegistryEvent.Register<Item> event)
    {
        event.getRegistry().registerAll
        (
            FISH_ENTITY_EGG = registerEntitySpawnEgg(FISH_ENTITY, 0xd1f0c2, 0x73d964, "fish_egg")
        );
        
    }
    
    public static void registerEntityWorldSpawn()
    {
        registerEntityWorldSpawn(FISH_ENTITY, Biomes.OCEAN, Biomes.DEEP_OCEAN, Biomes.RIVER);
    }
    
    public static Item registerEntitySpawnEgg(EntityType<?> typeIn, int primaryColorIn, int secondaryColorIn, String name )
    {
        SpawnEggItem item = new SpawnEggItem(typeIn, primaryColorIn, secondaryColorIn, new Item.Properties().group(ItemGroup.FOOD));
        item.setRegistryName(Main.location(name));
        return item;
    }
    
    public static void registerEntityWorldSpawn(EntityType<?> typeIn, Biome... biomes)
    {
        for(Biome biome : biomes)
        {
            if(biome != null)
            {
                biome.getSpawns(typeIn.getClassification()).add(new SpawnListEntry(typeIn, 10, 3, 10));
            }
        }
    }
    
    public static EntityType<?> register(String name, EntityType.Builder<?> builder)
    {
        return builder.build(name).setRegistryName(name);
    }

}

Код:
package ru.galior.legacy.client.render;

import com.mojang.blaze3d.platform.GlStateManager;

import net.minecraft.client.renderer.entity.EntityRenderer;
import net.minecraft.client.renderer.entity.EntityRendererManager;
import net.minecraft.client.renderer.entity.LivingRenderer;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.math.MathHelper;
import net.minecraftforge.fml.client.registry.IRenderFactory;
import ru.galior.legacy.Main;
import ru.galior.legacy.client.model.FishModel;
import ru.galior.legacy.entity.FishEntity;

public class FishRender extends LivingRenderer<FishEntity, FishModel>{

    private static final ResourceLocation[] FISH_TEXTURES = new ResourceLocation[]
            { Main.location("textures/entity/fish/cyrodilic_spadetail.png"),
              Main.location("textures/entity/fish/abecean_longfin.png"),
              Main.location("textures/entity/fish/river_betty.png"),
              Main.location("textures/entity/fish/silverside_perch.png"),
              Main.location("textures/entity/fish/histcarp.png")
            };

    public FishRender(EntityRendererManager manager) {
        super(manager, new FishModel(), 0.25F);
    }

    @Override
    protected ResourceLocation getEntityTexture(FishEntity entity) {
        return FISH_TEXTURES[entity.getVariant()];
    }
    
    @Override
    protected void preRenderCallback(FishEntity entitylivingbaseIn, float partialTickTime) {
        GlStateManager.scalef(0.35F, 0.35F, 0.35F);
    }
    
    @Override
    protected void applyRotations(FishEntity entityLiving, float ageInTicks, float rotationYaw, float partialTicks) {
        super.applyRotations(entityLiving, ageInTicks, rotationYaw, partialTicks);
        float f = 4.3F * MathHelper.sin(0.6F * ageInTicks);
        GlStateManager.rotatef(f, 0.0F, 1.0F, 0.0F);
        if (!entityLiving.isInWater()) {
            GlStateManager.translatef(0.2F, 0.1F, 0.0F);
            GlStateManager.rotatef(90.0F, 0.0F, 0.0F, 1.0F);
        }

    }
    
    public static class RenderFactory implements IRenderFactory<FishEntity>
    {

        @Override
        public EntityRenderer<? super FishEntity> createRenderFor(EntityRendererManager manager) {
            return new FishRender(manager);
        }
        
    }
    
    

}

Код:
package ru.galior.legacy.client.render;

import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;
import net.minecraftforge.fml.client.registry.RenderingRegistry;
import ru.galior.legacy.entity.FishEntity;

@OnlyIn(Dist.CLIENT)
public class RenderRegistry {
    public static void registryEntityRenders()
    {
        RenderingRegistry.registerEntityRenderingHandler(FishEntity.class, new FishRender.RenderFactory());
    }
}

Модель думаю нет смысла скидывать )

Эта регистрация в главном классе
Код:
        @SubscribeEvent
        public static void registerEntities(final RegistryEvent.Register<EntityType<?>> event)
        {
            event.getRegistry().registerAll
            (
                EntitiesInit.FISH_ENTITY
            );
            
            EntitiesInit.registerEntityWorldSpawn();
            LOGGER.info("Entities registered.");
        }
 
7,099
324
1,510
Попробуй в своей сущности сделать че-то вроде
Java:
@Override
public String getName(){
    return "";
}
 
Сверху