90 lines
2.3 KiB
Java
90 lines
2.3 KiB
Java
|
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<String, Integer> tags = new HashMap<String, Integer>();
|
||
|
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<Entry<String, Integer>> it = tags.entrySet().iterator();
|
||
|
int i = 0;
|
||
|
|
||
|
while (it.hasNext())
|
||
|
{
|
||
|
Entry<String, Integer> 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;
|
||
|
}
|
||
|
}
|