package calclavia.lib.render; import java.util.HashMap; import java.util.Iterator; import java.util.Map.Entry; import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.entity.RendererLivingEntity; import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MovingObjectPosition; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; /** * @author Rseifert & Calclavia */ @SideOnly(Side.CLIENT) public abstract class RenderTaggedTile extends TileEntitySpecialRenderer { @Override public void renderTileEntityAt(TileEntity t, double x, double y, double z, float f) { if (t != null) { if (t instanceof ITagRender && this.getPlayer().getDistance(t.xCoord, t.yCoord, t.zCoord) <= RendererLivingEntity.NAME_TAG_RANGE) { HashMap tags = new HashMap(); float height = ((ITagRender) t).addInformation(tags, this.getPlayer()); EntityPlayer player = Minecraft.getMinecraft().thePlayer; if (player.ridingEntity == null) { MovingObjectPosition objectPosition = player.rayTrace(8, 1); if (objectPosition != null) { boolean isLooking = false; for (int h = 0; h < height; h++) { if (objectPosition.blockX == t.xCoord && objectPosition.blockY == t.yCoord + h && objectPosition.blockZ == t.zCoord) { isLooking = true; } } if (isLooking) { Iterator> it = tags.entrySet().iterator(); int i = 0; while (it.hasNext()) { Entry entry = it.next(); if (entry.getKey() != null) { CalclaviaRenderHelper.renderFloatingText(entry.getKey(), (float) x + 0.5f, ((float) y + (i * 0.25f)) - 2f + height, (float) z + 0.5f, entry.getValue()); } i++; } } } } } } } /** * gets the player linked with the renderer */ public EntityPlayer getPlayer() { EntityLivingBase entity = this.tileEntityRenderer.entityLivingPlayer; if (entity instanceof EntityPlayer) { return (EntityPlayer) entity; } return null; } }