Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

[1.14][SOLVED] Can't change TileEntity name color


Recommended Posts

I'm trying to change the displayed name color of a tile entity. By default the game renders it in dark gray, as you can see in the image, but i want it to be white. Since in the ```GameRenderer.drawNameplate``` method appearently you can't pass the color as argument, i've tried to override the internal method in the tile entity code instead, by doing this
 

package com.antiblaze.entities.renderers;

        import com.antiblaze.entities.tileentity.AntiBedrockTileEntity;
import com.antiblaze.settings.Settings;
import com.mojang.blaze3d.platform.GlStateManager;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.renderer.ActiveRenderInfo;
import net.minecraft.client.renderer.BufferBuilder;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.tileentity.TileEntityRenderer;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraftforge.api.distmarker.Dist;
import net.minecraftforge.api.distmarker.OnlyIn;

/**
 * AntiBedrock TileEntity Renderer
 */
@OnlyIn(Dist.CLIENT)
public class AntiBedrockTileEntityRenderer extends TileEntityRenderer<AntiBedrockTileEntity> {

    /**
     * Render the Tile Entity
     * @param tileEntityIn AntiBedrock Tile Entity
     * @param x TileEntity X Position
     * @param y TileEntity Y Position
     * @param z TileEntity Z Position
     * @param partialTicks TileEntity Partial Ticks
     * @param destroyStage TileEntity Destroy Stages
     */
    public void render(AntiBedrockTileEntity tileEntityIn, double x, double y, double z, float partialTicks, int destroyStage) {
        if(tileEntityIn.getDonator() != null) {
            ActiveRenderInfo activerenderinfo = this.rendererDispatcher.renderInfo;
            double d0 = tileEntityIn.getDistanceSq(activerenderinfo.getProjectedView().x, activerenderinfo.getProjectedView().y, activerenderinfo.getProjectedView().z);
            if (!(d0 > (double)(Settings.BEDROCK_NAME_RANGE.get() * Settings.BEDROCK_NAME_RANGE.get()))) {
                float f = activerenderinfo.getYaw();
                float f1 = activerenderinfo.getPitch();
                drawNameplate(this.getFontRenderer(), tileEntityIn.getDonator(), (float)x + 0.5F, (float)y + 1.5F, (float)z + 0.5F, 0, f, f1, false, 0xFFFFFF);
            }
        }
    }

    public static void drawNameplate(FontRenderer fontRendererIn, String str, float x, float y, float z, int verticalShift, float viewerYaw, float viewerPitch, boolean isSneaking, int color) {
        GlStateManager.pushMatrix();
        GlStateManager.translatef(x, y, z);
        GlStateManager.normal3f(0.0F, 1.0F, 0.0F);
        GlStateManager.rotatef(-viewerYaw, 0.0F, 1.0F, 0.0F);
        GlStateManager.rotatef(viewerPitch, 1.0F, 0.0F, 0.0F);
        GlStateManager.scalef(-0.025F, -0.025F, 0.025F);
        GlStateManager.disableLighting();
        GlStateManager.depthMask(false);
        if (!isSneaking) {
            GlStateManager.disableDepthTest();
        }

        GlStateManager.enableBlend();
        GlStateManager.blendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
        int i = fontRendererIn.getStringWidth(str) / 2;
        GlStateManager.disableTexture();
        Tessellator tessellator = Tessellator.getInstance();
        BufferBuilder bufferbuilder = tessellator.getBuffer();
        bufferbuilder.begin(7, DefaultVertexFormats.POSITION_COLOR);
        float f = Minecraft.getInstance().gameSettings.func_216840_a(0.25F);
        bufferbuilder.pos((double)(-i - 1), (double)(-1 + verticalShift), 0.0D).color(0.0F, 0.0F, 0.0F, f).endVertex();
        bufferbuilder.pos((double)(-i - 1), (double)(8 + verticalShift), 0.0D).color(0.0F, 0.0F, 0.0F, f).endVertex();
        bufferbuilder.pos((double)(i + 1), (double)(8 + verticalShift), 0.0D).color(0.0F, 0.0F, 0.0F, f).endVertex();
        bufferbuilder.pos((double)(i + 1), (double)(-1 + verticalShift), 0.0D).color(0.0F, 0.0F, 0.0F, f).endVertex();
        tessellator.draw();
        GlStateManager.enableTexture();
        if (!isSneaking) {
            fontRendererIn.drawString(str, (float)(-fontRendererIn.getStringWidth(str) / 2), (float)verticalShift, color);
            GlStateManager.enableDepthTest();
        }

        GlStateManager.depthMask(true);
        fontRendererIn.drawString(str, (float)(-fontRendererIn.getStringWidth(str) / 2), (float)verticalShift, isSneaking ? color : -1);
        GlStateManager.enableLighting();
        GlStateManager.disableBlend();
        GlStateManager.color4f(1.0F, 1.0F, 1.0F, 1.0F);
        GlStateManager.popMatrix();
    }
}

 

But the nameplate still draws as before

 

https://imgur.com/t778Q0F

 

So how can i change this color to be whatever color i want?

EDIT: Solved by implementing the INameable interface in the tile entity

Edited by JimiIT92
Solved

Don't blame me if i always ask for your help. I just want to learn to be better :)

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • In defineSynchedData you need to call EntityDataManager#define for all your parameters, not set.
    • Ok so, i changed the entity in this way:   public class SmokeBulletEntity extends DamagingProjectileEntity implements IRendersAsItem { private static final DataParameter<Boolean> ACTIVATED = EntityDataManager.defineId(SmokeBulletEntity.class, DataSerializers.BOOLEAN); private static final ItemStack STACK = new ItemStack(ModItems.BULLET.get()); private int duration; public SmokeBulletEntity(World world) { super(ModEntities.SMOKE_BULLET.get(), world); } @Override public ItemStack getItem() { return STACK; } @Override protected void onHitBlock(BlockRayTraceResult rayTraceResult) { if (this.isActivated()) return; if (!this.level.isClientSide) { this.activate(); } super.onHitBlock(rayTraceResult); } @Override protected void onHitEntity(EntityRayTraceResult entityRayTraceResult) { //Must be Empty } private void activate() { this.setActivated(true); this.duration = 200; this.setDeltaMovement(0, 0, 0); this.xPower = 0; this.yPower = 0; this.zPower = 0; System.out.println("Active Smoke Projectile"); } @Override public void tick() { if (this.isActivated()) { for (int i = 0; i < 100; i++) { this.level.addParticle(ParticleTypes.FLAME, this.getX(), this.getY() + i, this.getZ(), 0, 0, 0); } this.duration--; if (this.duration <= 0) { this.remove(); } } else { super.tick(); } } @Override public void addAdditionalSaveData(CompoundNBT nbt) { super.addAdditionalSaveData(nbt); nbt.putBoolean("activated", this.isActivated()); nbt.putInt("duration", this.duration); } @Override protected void defineSynchedData() { super.defineSynchedData(); this.entityData.set(ACTIVATED, false); } public void setActivated(boolean activated) { this.entityData.set(ACTIVATED, activated); } public boolean isActivated() { return this.entityData.get(ACTIVATED); } @Override public EntityDataManager getEntityData() { return super.getEntityData(); } @Override public void readAdditionalSaveData(CompoundNBT nbt) { super.readAdditionalSaveData(nbt); if (nbt.contains("activated")) { this.setActivated(nbt.getBoolean("activated")); } if (nbt.contains("duration")) { this.duration = nbt.getInt("duration"); } } @Override public IPacket<?> getAddEntityPacket() { return NetworkHooks.getEntitySpawningPacket(this); } } But now, when i spawn it i encounter this error: [15:39:10] [Server thread/FATAL] [minecraft/ThreadTaskExecutor]: Error executing task on Server java.lang.NullPointerException: null at net.minecraft.network.datasync.EntityDataManager.set(EntityDataManager.java:122) ~[forge:?] {re:classloading} at com.ike.gunmod.entity.SmokeBulletEntity.defineSynchedData(SmokeBulletEntity.java:93) ~[?:?] {re:classloading,pl:runtimedistcleaner:A} at net.minecraft.entity.Entity.<init>(Entity.java:216) ~[forge:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.entity.projectile.ProjectileEntity.<init>(ProjectileEntity.java:25) ~[forge:?] {re:classloading} at net.minecraft.entity.projectile.DamagingProjectileEntity.<init>(DamagingProjectileEntity.java:26) ~[forge:?] {re:classloading} at com.ike.gunmod.entity.SmokeBulletEntity.<init>(SmokeBulletEntity.java:35) ~[?:?] {re:classloading,pl:runtimedistcleaner:A} at com.ike.gunmod.item.gun.SmokeGunItem.getBullet(SmokeGunItem.java:32) ~[?:?] {re:classloading} at com.ike.gunmod.item.gun.AbstractGunItem.use(AbstractGunItem.java:42) ~[?:?] {re:classloading} at net.minecraft.item.ItemStack.use(ItemStack.java:217) ~[forge:?] {re:classloading,xf:fml:forge:filled_map.4,xf:fml:forge:itemstack} at net.minecraft.server.management.PlayerInteractionManager.useItem(PlayerInteractionManager.java:287) ~[forge:?] {re:classloading} at net.minecraft.network.play.ServerPlayNetHandler.handleUseItem(ServerPlayNetHandler.java:982) ~[forge:?] {re:classloading} at net.minecraft.network.play.client.CPlayerTryUseItemPacket.handle(CPlayerTryUseItemPacket.java:28) ~[forge:?] {re:classloading} at net.minecraft.network.play.client.CPlayerTryUseItemPacket.handle(CPlayerTryUseItemPacket.java:9) ~[forge:?] {re:classloading} at net.minecraft.network.PacketThreadUtil.lambda$ensureRunningOnSameThread$0(PacketThreadUtil.java:19) ~[forge:?] {re:classloading} at net.minecraft.util.concurrent.TickDelayedTask.run(TickDelayedTask.java:17) ~[forge:?] {re:classloading} at net.minecraft.util.concurrent.ThreadTaskExecutor.doRunTask(ThreadTaskExecutor.java:136) ~[forge:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.util.concurrent.RecursiveEventLoop.doRunTask(RecursiveEventLoop.java:22) ~[forge:?] {re:classloading} at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:734) ~[forge:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer.doRunTask(MinecraftServer.java:159) ~[forge:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.util.concurrent.ThreadTaskExecutor.pollTask(ThreadTaskExecutor.java:109) ~[forge:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer.pollTaskInternal(MinecraftServer.java:717) ~[forge:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer.pollTask(MinecraftServer.java:711) ~[forge:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.util.concurrent.ThreadTaskExecutor.managedBlock(ThreadTaskExecutor.java:119) ~[forge:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer.waitUntilNextTick(MinecraftServer.java:697) ~[forge:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer.runServer(MinecraftServer.java:646) ~[forge:?] {re:classloading,pl:accesstransformer:B} at net.minecraft.server.MinecraftServer.lambda$spin$0(MinecraftServer.java:232) ~[forge:?] {re:classloading,pl:accesstransformer:B} at java.lang.Thread.run(Thread.java:748) [?:1.8.0_231] {} Why this happen?
    • nvidia gtx 2060 we found out the cause. it is with the mana and artifice mod and not having optifine, unfortunately our modpack crashes with optifine installed  
    • The log does not even contain an attempted connection. Again, please post the client log. What do you mean by "customer"?
    • マインクラフト
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.