BloodMagic/src/main/java/WayofTime/bloodmagic/client/render/entity/RenderEntityMimic.java
2019-01-31 19:10:37 -08:00

117 lines
4.7 KiB
Java

package WayofTime.bloodmagic.client.render.entity;
import WayofTime.bloodmagic.client.render.model.ModelMimic;
import WayofTime.bloodmagic.entity.mob.EntityMimic;
import com.mojang.authlib.GameProfile;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
import net.minecraft.client.renderer.entity.RenderLiving;
import net.minecraft.client.renderer.entity.RenderManager;
import net.minecraft.client.renderer.tileentity.TileEntitySkullRenderer;
import net.minecraft.init.Items;
import net.minecraft.inventory.EntityEquipmentSlot;
import net.minecraft.item.Item;
import net.minecraft.item.ItemArmor;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTUtil;
import net.minecraft.tileentity.TileEntitySkull;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.StringUtils;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class RenderEntityMimic extends RenderLiving<EntityMimic> {
private static final ResourceLocation SPIDER_TEXTURES = new ResourceLocation("textures/entity/spider/spider.png");
Minecraft minecraft = Minecraft.getMinecraft();
public RenderEntityMimic(RenderManager renderManagerIn) {
super(renderManagerIn, new ModelMimic(), 1.0F);
}
@Override
public void doRender(EntityMimic mimic, double x, double y, double z, float entityYaw, float partialTicks) {
super.doRender(mimic, x, y, z, entityYaw, partialTicks);
GlStateManager.pushMatrix();
if (mimic.getMimicItemStack() != null) {
GlStateManager.pushMatrix();
if (this.renderOutlines) {
GlStateManager.enableColorMaterial();
GlStateManager.enableOutlineMode(this.getTeamColor(mimic));
}
GlStateManager.translate(x, y, z);
ItemStack itemstack = mimic.getMimicItemStack();
Item item = itemstack.getItem();
Minecraft minecraft = Minecraft.getMinecraft();
GlStateManager.pushMatrix();
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
if (item == Items.SKULL) {
float f2 = 1.1875F;
GlStateManager.scale(1.1875F, -1.1875F, -1.1875F);
GameProfile gameprofile = null;
if (itemstack.hasTagCompound()) {
NBTTagCompound nbttagcompound = itemstack.getTagCompound();
if (nbttagcompound.hasKey("SkullOwner", 10)) {
gameprofile = NBTUtil.readGameProfileFromNBT(nbttagcompound.getCompoundTag("SkullOwner"));
} else if (nbttagcompound.hasKey("SkullOwner", 8)) {
String s = nbttagcompound.getString("SkullOwner");
if (!StringUtils.isNullOrEmpty(s)) {
gameprofile = TileEntitySkull.updateGameProfile(new GameProfile(null, s));
nbttagcompound.setTag("SkullOwner", NBTUtil.writeGameProfile(new NBTTagCompound(), gameprofile));
}
}
}
TileEntitySkullRenderer.instance.renderSkull(-0.5F, 0.0F, -0.5F, EnumFacing.UP, 180.0F, itemstack.getMetadata(), gameprofile, -1, 0);
} else if (!(item instanceof ItemArmor) || ((ItemArmor) item).getEquipmentSlot() != EntityEquipmentSlot.HEAD) {
GlStateManager.translate(0, 0.5f, 0);
GlStateManager.rotate(-(mimic.prevRotationYawHead + partialTicks * (mimic.rotationYawHead - mimic.prevRotationYawHead)) - 180, 0, 1, 0);
minecraft.getItemRenderer().renderItem(mimic, itemstack, ItemCameraTransforms.TransformType.HEAD);
}
GlStateManager.popMatrix();
if (this.renderOutlines) {
GlStateManager.disableOutlineMode();
GlStateManager.disableColorMaterial();
}
GlStateManager.popMatrix();
super.doRender(mimic, x, y, z, entityYaw, partialTicks);
}
GlStateManager.popMatrix();
if (!this.renderOutlines) {
this.renderLeash(mimic, x, y, z, entityYaw, partialTicks);
}
}
@Override
protected float getDeathMaxRotation(EntityMimic mimic) {
return 180.0F;
}
/**
* Returns the location of an entity's texture. Doesn't seem to be called
* unless you call Render.bindEntityTexture.
*/
@Override
protected ResourceLocation getEntityTexture(EntityMimic mimic) {
return SPIDER_TEXTURES;
}
}