Dartcraft/src/main/java/ley/modding/dartcraft/client/renderer/item/RenderItemForceFlask.java

267 lines
12 KiB
Java

package ley.modding.dartcraft.client.renderer.item;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import ley.modding.dartcraft.Dartcraft;
import ley.modding.dartcraft.entity.EntityBottle;
import ley.modding.dartcraft.item.ItemEntityBottle;
import ley.modding.dartcraft.util.EntityUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityClientPlayerMP;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.renderer.entity.Render;
import net.minecraft.client.renderer.entity.RenderItem;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.entity.Entity;
import net.minecraft.entity.EntityList;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
import net.minecraftforge.client.IItemRenderer;
import net.minecraftforge.client.model.AdvancedModelLoader;
import net.minecraftforge.client.model.IModelCustom;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.GL11;
@SideOnly(Side.CLIENT)
public class RenderItemForceFlask implements IItemRenderer {
private static RenderItem renderer = new RenderItem();
private IModelCustom bottle = AdvancedModelLoader.loadModel(
new ResourceLocation(Dartcraft.MODID, "models/bottle.obj")
);
private IModelCustom liquid = AdvancedModelLoader.loadModel(
new ResourceLocation(Dartcraft.MODID, "models/liquid.obj")
);
public static RenderItemForceFlask instance = new RenderItemForceFlask();
public boolean handleRenderType(ItemStack item, IItemRenderer.ItemRenderType type) {
return true;
}
public boolean shouldUseRenderHelper(
IItemRenderer.ItemRenderType type,
ItemStack item,
IItemRenderer.ItemRendererHelper helper
) {
return (
type == IItemRenderer.ItemRenderType.INVENTORY
|| type == IItemRenderer.ItemRenderType.ENTITY
);
}
public void
renderItem(IItemRenderer.ItemRenderType type, ItemStack item, Object... data) {
FontRenderer fontRenderer = (Minecraft.getMinecraft()).fontRenderer;
Entity entity = null;
GL11.glPushMatrix();
if (item != null && item.getItem() instanceof ItemEntityBottle
&& item.hasTagCompound())
try {
if (item.getItemDamage() == 0) {
EntityLivingBase entityLivingBase = null;
NBTTagCompound comp = (NBTTagCompound) item.getTagCompound().copy();
Entity temp = null;
if (comp.hasKey("CanPickUpLoot")) {
temp = EntityList.createEntityFromNBT(
comp, (World) (Minecraft.getMinecraft()).theWorld
);
} else {
temp = EntityUtils.getEntity(comp.getString("id"));
}
if (temp instanceof EntityLivingBase)
entityLivingBase = (EntityLivingBase) temp;
if (entityLivingBase != null
&& (Dartcraft.proxy.getClientInstance()).theWorld != null) {
entityLivingBase.setWorld(
(World) (Dartcraft.proxy.getClientInstance()).theWorld
);
entityLivingBase.setLocationAndAngles(
0.0D, 0.0D, 0.0D, 0.0F, 0.0F
);
}
entity = entityLivingBase;
} else if (item.getItemDamage() == 1) {
EntityItem entityItem = new EntityItem(
(World) (Dartcraft.proxy.getClientInstance()).theWorld
);
entityItem.setLocationAndAngles(0.0D, 0.0D, 0.0D, 0.0F, 0.0F);
entityItem.hoverStart = 1.0F;
entityItem.setEntityItemStack(new ItemStack(Blocks.brick_block));
entity = entityItem;
}
} catch (Exception e) {}
float value = 0.0F;
float angle = 0.0F;
float scale = 0.0F;
scale(type);
if (type == IItemRenderer.ItemRenderType.INVENTORY
&& (entity instanceof net.minecraft.entity.monster.EntityEnderman
|| entity instanceof net.minecraft.entity.monster.EntitySpider
|| entity instanceof net.minecraft.entity.monster.EntityCaveSpider))
entity = null;
if (entity != null) {
float coef = 1.0F;
if (entity instanceof net.minecraft.entity.monster.EntitySilverfish
|| entity instanceof net.minecraft.entity.passive.EntityOcelot
|| entity instanceof net.minecraft.entity.passive.EntityWolf)
coef = 2.5F;
scale = 8.0F
* ((((Entity) entity).height > ((Entity) entity).width * coef)
? (1.3F / ((Entity) entity).height)
: (0.5F / ((Entity) entity).width));
value = -((Entity) entity).height;
angle = 0.0F;
if (entity instanceof net.minecraft.entity.passive.EntityPig)
scale = 6.5F / ((Entity) entity).height;
if (entity instanceof EntityBottle) {
scale = 30.0F;
value += 1.5F;
}
if (entity instanceof net.minecraft.entity.passive.EntityAnimal) {
int age = item.getTagCompound().getInteger("Age");
if (age < 0) {
scale /= 2.0F;
value -= ((Entity) entity).height * 0.5F;
}
}
if (type == IItemRenderer.ItemRenderType.INVENTORY)
angle = 45.0F;
if (type == IItemRenderer.ItemRenderType.EQUIPPED_FIRST_PERSON)
angle = 90.0F;
GL11.glScalef(scale, scale, scale);
GL11.glTranslatef(0.0F, value, 0.0F);
GL11.glRotatef(angle, 0.0F, 1.0F, 0.0F);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
try {
boolean shouldRender = (type != IItemRenderer.ItemRenderType.INVENTORY);
if (!shouldRender) {
Minecraft mc = Dartcraft.proxy.getClientInstance();
EntityClientPlayerMP entityClientPlayerMP
= (mc != null) ? mc.thePlayer : null;
boolean found = false;
if (entityClientPlayerMP != null
&& ((EntityPlayer) entityClientPlayerMP).inventory != null
&& ((EntityPlayer) entityClientPlayerMP).inventory.mainInventory
!= null)
for (int i = 0; i < 9; i++) {
ItemStack invStack = ((EntityPlayer) entityClientPlayerMP)
.inventory.mainInventory[i];
if (invStack != null && invStack == item) {
found = true;
break;
}
}
if (!found)
shouldRender = true;
}
if (shouldRender) {
Render render
= RenderManager.instance.getEntityRenderObject((Entity) entity);
if (render != null && entity != null)
render.doRender((Entity) entity, 0.0D, 0.0D, 0.0D, 0.0F, 0.0F);
}
} catch (Exception e) {}
GL11.glPopMatrix();
GL11.glPushMatrix();
scale(type);
} else if (item != null && item.getItemDamage() > 0) {
Dartcraft.proxy.bindTexture("liquid.png");
GL11.glEnable(3042);
float alpha = 1.0F;
switch (item.getItemDamage()) {
case 6:
GL11.glColor4f(0.0F, 0.5F, 1.0F, alpha);
break;
case 5:
GL11.glColor4f(1.0F, 0.0F, 0.0F, alpha);
break;
case 4:
GL11.glColor4f(0.0627F, 0.7176F, 0.4863F, alpha);
break;
case 2:
GL11.glColor4f(1.0F, 1.0F, 0.0F, alpha);
break;
}
scale = 7.0F;
float yScale = 1.0F;
GL11.glScalef(scale, scale, scale);
if (type == IItemRenderer.ItemRenderType.ENTITY) {
GL11.glRotatef(0.44999766F, 1.0F, 0.0F, 0.0F);
GL11.glRotatef(168.90388F, 0.0F, 0.0F, 1.0F);
GL11.glTranslatef(0.0F, 0.65270597F, 0.0F);
} else if (type == IItemRenderer.ItemRenderType.EQUIPPED || type == IItemRenderer.ItemRenderType.EQUIPPED_FIRST_PERSON) {
GL11.glRotatef(185.40428F, 1.0F, 0.0F, 0.0F);
GL11.glRotatef(6.599979F, 0.0F, 0.0F, 1.0F);
GL11.glTranslatef(0.0F, 0.65270597F, 0.0F);
} else if (type == IItemRenderer.ItemRenderType.INVENTORY) {
GL11.glRotatef(184.65428F, 1.0F, 0.0F, 0.0F);
GL11.glRotatef(6.749961F, 0.0F, 0.0F, 1.0F);
GL11.glTranslatef(0.0F, 0.65270597F, 0.0F);
}
GL11.glTranslatef(0.0F, 1.0F - yScale, 0.0F);
GL11.glScalef(1.0F, yScale, 1.0F);
this.liquid.renderAll();
GL11.glDisable(3042);
GL11.glPopMatrix();
GL11.glPushMatrix();
scale(type);
}
GL11.glEnable(3042);
GL11.glBlendFunc(770, 771);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
Dartcraft.proxy.bindTexture("bottle.png");
this.bottle.renderAll();
GL11.glPopMatrix();
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
}
private void scale(IItemRenderer.ItemRenderType type) {
float value = 0.0F;
float angle = 0.0F;
float angle2 = 0.0F;
float scale = 0.0F;
value = ((Entity) (Minecraft.getMinecraft()).thePlayer).rotationYaw * 2.0F;
angle = ((Entity) (Minecraft.getMinecraft()).thePlayer).rotationPitch * 2.0F;
angle2 = ((EntityLivingBase) (Minecraft.getMinecraft()).thePlayer).rotationYawHead
* 2.0F;
if (Keyboard.isKeyDown(50))
;
if (type == IItemRenderer.ItemRenderType.INVENTORY) {
scale = 0.04557239F;
GL11.glScalef(scale, scale, scale);
GL11.glRotatef(1950.6F, 1.0F, 0.0F, 0.0F);
GL11.glRotatef(1950.6F, 0.0F, 0.0F, 1.0F);
GL11.glRotatef(-178.5F, 0.0F, 1.0F, 0.0F);
}
if (type == IItemRenderer.ItemRenderType.EQUIPPED) {
value = 0.5F;
angle = -30.0F;
scale = 0.036F;
GL11.glTranslatef(0.35F, 0.65F, -0.1F);
GL11.glScalef(scale, scale, scale);
GL11.glRotatef(angle, 1.0F, 0.0F, -1.0F);
}
if (type == IItemRenderer.ItemRenderType.EQUIPPED_FIRST_PERSON) {
value = 0.5F;
angle = 180.0F;
scale = 0.025F;
GL11.glTranslatef(value, value, -0.1F);
GL11.glScalef(scale, scale, scale);
}
if (type == IItemRenderer.ItemRenderType.ENTITY) {
value = 0.5F;
angle = 180.0F;
scale = 0.035F;
GL11.glScalef(scale, scale, scale);
}
}
}