I refer to the code of original sign to make a custom signs.In editing screen,font color display correct in any direction,but after editing,font color display wrong when the sign towards the south or the north ,as shown in figure.How can I solve this problem?
Thank Reply
-------------------------------------------------------------
Finally, after collating the code of original sign once again, I have found the mistake. As shown in the following Comment of code.
TileEntityLargeSignRenderer.class
package com.roripantsu.largesign.tileentity;
import org.apache.commons.lang3.text.StrBuilder;
import org.lwjgl.opengl.GL11;
import com.roripantsu.largesign.gui.CustomFontRenderer;
import com.roripantsu.largesign.gui.CustomFontStyleButtons;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.entity.Entity;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
public class TileEntityLargeSignRenderer extends TileEntitySpecialRenderer {
private Minecraft MC=Minecraft.getMinecraft();
private CustomFontRenderer fontrenderer;
public static TileEntityLargeSignRenderer instance = new TileEntityLargeSignRenderer();
private static final ResourceLocation textureLocation = new ResourceLocation("largesign:textures/blocks/block_large_sign.png");
private final Model_LargeSign modelLargeSign = new Model_LargeSign();
void renderLargeSign(TileEntityLargeSign tileEntityLargeSign, double render_xCoord, double render_yCoord,
double render_zCoord, float FL) {
String str = tileEntityLargeSign.largeSignText[0];
float[] adjust={tileEntityLargeSign.scaleAdjust,tileEntityLargeSign.XAdjust,tileEntityLargeSign.YAdjust};
if(str==null)
str = "";
int color= tileEntityLargeSign.largeSignTextColor;
boolean hasShadow=tileEntityLargeSign.hasShadow;
int j = MC.theWorld.getBlockMetadata(tileEntityLargeSign.xCoord,
tileEntityLargeSign.yCoord, tileEntityLargeSign.zCoord);
float rotateAngle = 0.0F;
GL11.glPushMatrix();
if (j == 2)
{
rotateAngle = 180.0F;
}
if (j == 4)
{
rotateAngle = 90.0F;
}
if (j == 5)
{
rotateAngle = -90.0F;
}
GL11.glTranslatef((float)render_xCoord+0.5F, (float)render_yCoord+0.5F, (float)render_zCoord+0.5F);
GL11.glRotatef(-rotateAngle, 0.0F, 1.0F, 0.0F);
this.bindTexture(textureLocation);
GL11.glPushMatrix();
GL11.glScalef(1F, -0.875F, -0.5F);
this.modelLargeSign.renderLargeSign((Entity)null, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 1/16F);
GL11.glPopMatrix();
this.fontrenderer =new CustomFontRenderer(this.MC.gameSettings, new ResourceLocation("textures/font/ascii.png"),this.MC.renderEngine, true);
int stringWidth=this.fontrenderer.getStringWidth(str);
float scaleParam=stringWidth<=72?(stringWidth<=63?(stringWidth<=54?(stringWidth<=45?(stringWidth<=36?(stringWidth<=27?(stringWidth<=18?(stringWidth<=9?90F:50F):35F):26F):21F):17F):15F):13F):11F;
GL11.glTranslatef(0.0F, -0F, -0.435F);
//wrong
/*GL11.glScalef( (scaleParam+adjust[0])/1000F, -(scaleParam+adjust[0])/1000F, 0F);
GL11.glNormal3f(0.0F, 0.0F, -1.0F * 0.017F);*/
//correct
GL11.glScalef( (scaleParam+adjust[0])/1000F, -(scaleParam+adjust[0])/1000F, (scaleParam+adjust[0])/1000F);
GL11.glNormal3f(0.0F, 0.0F, -1.0F * (scaleParam+adjust[0])/1000F);
GL11.glDepthMask(false);
GL11.glEnable(GL11.GL_BLEND);
this.fontrenderer.drawString(str, -this.fontrenderer.getStringWidth(str)/ 2.0F+adjust[1], -4.5F+adjust[2], color,hasShadow);
GL11.glDepthMask(true);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glPopMatrix();
}
public void renderTileEntityAt(TileEntity tileEntity, double render_xCoord, double render_yCoord,
double render_zCoord, float FL) {
this.renderLargeSign((TileEntityLargeSign)tileEntity,render_xCoord,render_yCoord,render_zCoord,FL);
}
}