/** * */ package cn.dawn47.misc.client; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.entity.RenderEntity; import net.minecraft.entity.Entity; import net.minecraft.util.ResourceLocation; import net.minecraft.util.Vec3; import net.minecraftforge.common.util.ForgeDirection; import org.lwjgl.opengl.GL11; import cn.dawn47.core.proxy.DWResources; import cn.dawn47.misc.entity.EntityPoster; import cn.liutils.util.client.RenderUtils; import cn.liutils.util.generic.VecUtils; /** * @author WeathFolD * */ public class RendererPoster extends RenderEntity { final Vec3 vecs[] = { VecUtils.vec(0, 0, 0), VecUtils.vec(1, 0, 0), VecUtils.vec(1, 1, 0), VecUtils.vec(0, 1, 0) }; double uvs[][] = { {0, 1}, {1, 1}, {1, 0}, {0, 0} }; public RendererPoster() { } /* (non-Javadoc) * @see net.minecraft.client.renderer.entity.Render#doRender(net.minecraft.entity.Entity, double, double, double, float, float) */ @Override public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { EntityPoster poster = (EntityPoster) var1; Tessellator t = Tessellator.instance; //super.doRender(var1, var2, var4, var6, var8, var9); GL11.glPushMatrix(); { GL11.glTranslated(var2, var4, var6); RenderUtils.loadTexture(DWResources.POSTER_TEXTURE_PATH[poster.posterID]); ForgeDirection dir = poster.attachedSide; int side = poster.attachedSide.ordinal(); //x和z坐标是否需要互换(旋转90度) boolean swap = side == 4 || side == 5; //是否需要渲染反面 boolean reverse = side == 2 || side == 5; if(reverse) GL11.glTranslated(-poster.attachedSide.offsetZ, 0, poster.attachedSide.offsetX); t.startDrawingQuads(); t.setNormal(dir.offsetX, 0, dir.offsetZ); for(int i = 0; i < 4; ++i) { Vec3 vec = vecs[i].addVector(0, 0, 0); vec.xCoord *= EntityPoster.infs[poster.posterID].width * (reverse ? -1 : 1); vec.yCoord *= EntityPoster.infs[poster.posterID].height; if(swap) { double tmp = vec.xCoord; vec.xCoord = vec.zCoord; vec.zCoord = tmp; } RenderUtils.addVertex(vec, uvs[i][0], uvs[i][1]); } t.draw(); } GL11.glPopMatrix(); //super.renderOffsetAABB(var1.boundingBox, var2, var4, var6); } @Override protected ResourceLocation getEntityTexture(Entity var1) { return null; } }