electrodynamics/electrical/src/main/scala/resonantinduction/electrical/armbot/RenderArmbot.java

96 lines
3.8 KiB
Java
Raw Normal View History

2014-01-11 06:59:55 +01:00
package resonantinduction.electrical.armbot;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.entity.RenderItem;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.client.renderer.texture.TextureManager;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11;
2014-01-10 00:40:49 +01:00
import resonantinduction.core.Reference;
import universalelectricity.api.vector.Vector3;
2014-01-11 06:59:55 +01:00
import calclavia.lib.render.RenderUtility;
2014-03-03 13:52:34 +01:00
import calclavia.lib.render.item.ISimpleItemRenderer;
2014-01-15 14:13:34 +01:00
import cpw.mods.fml.client.FMLClientHandler;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
2014-03-03 13:52:34 +01:00
public class RenderArmbot extends TileEntitySpecialRenderer implements ISimpleItemRenderer
{
2014-01-08 15:18:24 +01:00
public static final ModelArmbot MODEL = new ModelArmbot();
2014-01-11 11:31:58 +01:00
public static final ResourceLocation TEXTURE = new ResourceLocation(Reference.DOMAIN, Reference.MODEL_PATH + "armbot.png");
2014-01-08 15:18:24 +01:00
@Override
public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f)
{
2014-01-11 10:44:07 +01:00
if (tileEntity instanceof TileArmbot)
2014-01-08 15:18:24 +01:00
{
2014-01-11 10:44:07 +01:00
String cmdText = ((TileArmbot) tileEntity).getCommandDisplayText();
2014-01-08 15:18:24 +01:00
if (cmdText != null && !cmdText.isEmpty())
{
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
MovingObjectPosition objectPosition = player.rayTrace(8, 1);
2014-01-08 15:18:24 +01:00
if (objectPosition != null)
{
if (objectPosition.blockX == tileEntity.xCoord && (objectPosition.blockY == tileEntity.yCoord || objectPosition.blockY == tileEntity.yCoord + 1) && objectPosition.blockZ == tileEntity.zCoord)
{
RenderUtility.renderFloatingText(cmdText, new Vector3(x, y, z).add(0.5), 0xFFFFFF);
2014-01-08 15:18:24 +01:00
}
}
}
2014-01-11 11:31:58 +01:00
bindTexture(TEXTURE);
2014-01-08 15:18:24 +01:00
GL11.glPushMatrix();
GL11.glTranslatef((float) x + 0.5F, (float) y + 1.5F, (float) z + 0.5F);
GL11.glScalef(1.0F, -1F, -1F);
2014-01-11 10:44:07 +01:00
MODEL.render(0.0625f, (float) ((TileArmbot) tileEntity).getRotation().x, (float) ((TileArmbot) tileEntity).getRotation().y);
2014-01-08 15:18:24 +01:00
GL11.glPopMatrix();
2014-01-11 10:44:07 +01:00
Vector3 handPosition = ((TileArmbot) tileEntity).getDeltaHandPosition();
2014-01-08 15:18:24 +01:00
handPosition.add(0.5);
handPosition.add(new Vector3(x, y, z));
RenderItem renderItem = ((RenderItem) RenderManager.instance.getEntityClassRenderObject(EntityItem.class));
TextureManager renderEngine = Minecraft.getMinecraft().renderEngine;
2014-01-08 15:18:24 +01:00
// Items don't move right, so we render them manually. Client side this can only be one
// object so the bot should return its preferred render item client side
2014-01-11 10:44:07 +01:00
if (((TileArmbot) tileEntity).getHeldObject() instanceof ItemStack)
2014-01-08 15:18:24 +01:00
{
2014-01-11 10:44:07 +01:00
ItemStack itemStack = (ItemStack) ((TileArmbot) tileEntity).getHeldObject();
if (((TileArmbot) tileEntity).renderEntityItem == null)
2014-01-08 15:18:24 +01:00
{
2014-01-11 10:44:07 +01:00
((TileArmbot) tileEntity).renderEntityItem = new EntityItem(tileEntity.worldObj, 0, 0, 0, itemStack);
2014-01-08 15:18:24 +01:00
}
2014-01-11 10:44:07 +01:00
else if (!itemStack.isItemEqual(((TileArmbot) tileEntity).renderEntityItem.getEntityItem()))
2014-01-08 15:18:24 +01:00
{
2014-01-11 10:44:07 +01:00
((TileArmbot) tileEntity).renderEntityItem = new EntityItem(tileEntity.worldObj, 0, 0, 0, itemStack);
2014-01-08 15:18:24 +01:00
}
2014-01-11 10:44:07 +01:00
renderItem.doRenderItem(((TileArmbot) tileEntity).renderEntityItem, handPosition.x, handPosition.y, handPosition.z, 0, f);
2014-01-08 15:18:24 +01:00
}
}
}
2014-01-15 14:13:34 +01:00
@Override
2014-03-03 13:52:34 +01:00
public void renderInventoryItem(ItemStack itemStack)
2014-01-15 14:13:34 +01:00
{
GL11.glPushMatrix();
2014-01-15 14:13:34 +01:00
FMLClientHandler.instance().getClient().renderEngine.bindTexture(RenderArmbot.TEXTURE);
GL11.glTranslatef(0.5f, 1.3f, 0.5f);
2014-01-15 14:13:34 +01:00
GL11.glRotatef(180f, 0f, 0f, 1f);
GL11.glScalef(0.8f, 0.8f, 0.8f);
RenderArmbot.MODEL.render(0.0625F, 0, 0);
GL11.glPopMatrix();
2014-01-15 14:13:34 +01:00
}
}