Proper bow render. Closes #604.

This commit is contained in:
Lizbeth Rika committed 2015-02-28 16:19:50 +00:00
1 parent 3d1b461ae6
commit bd779b9660
5 files changed
+104 -1

No files matched your search

@@ -64,6 +64,7 @@ import vazkii.botania.client.render.entity.RenderCorporeaSpark;
import vazkii.botania.client.render.entity.RenderDoppleganger;
import vazkii.botania.client.render.entity.RenderPixie;
import vazkii.botania.client.render.entity.RenderSpark;
import vazkii.botania.client.render.item.RenderBow;
import vazkii.botania.client.render.item.RenderFloatingFlowerItem;
import vazkii.botania.client.render.item.RenderLens;
import vazkii.botania.client.render.item.RenderLexicon;
@@ -179,6 +180,7 @@ public class ClientProxy extends CommonProxy {
RenderTransparentItem renderTransparentItem = new RenderTransparentItem();
RenderFloatingFlowerItem renderFloatingFlower = new RenderFloatingFlowerItem();
RenderBow renderBow = new RenderBow();
MinecraftForgeClient.registerItemRenderer(ModItems.lens, new RenderLens());
if(ConfigHandler.lexicon3dModel)
@@ -187,6 +189,8 @@ public class ClientProxy extends CommonProxy {
MinecraftForgeClient.registerItemRenderer(ModItems.spark, renderTransparentItem);
MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ModBlocks.floatingFlower), renderFloatingFlower);
MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ModBlocks.floatingSpecialFlower), renderFloatingFlower);
MinecraftForgeClient.registerItemRenderer(ModItems.livingwoodBow, renderBow);
MinecraftForgeClient.registerItemRenderer(ModItems.crystalBow, renderBow);
RenderTileFloatingFlower renderTileFloatingFlower = new RenderTileFloatingFlower();
ClientRegistry.bindTileEntitySpecialRenderer(TileAltar.class, new RenderTileAltar());
@@ -0,0 +1,97 @@
/**
* This class was created by <Vazkii>. It's distributed as
* part of the Botania Mod. Get the Source Code in github:
* https://github.com/Vazkii/Botania
*
* Botania is Open Source and distributed under the
* Botania License: http://botaniamod.net/license.php
*
* File Created @ [Feb 28, 2015, 3:43:09 PM (GMT)]
*/
package vazkii.botania.client.render.item;
import net.minecraft.client.renderer.ItemRenderer;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraftforge.client.IItemRenderer;
import net.minecraftforge.client.IItemRenderer.ItemRenderType;
import net.minecraftforge.client.IItemRenderer.ItemRendererHelper;
import org.lwjgl.opengl.GL11;
import cpw.mods.fml.relauncher.ReflectionHelper;
import vazkii.botania.common.core.helper.ObfuscationHelper;
import vazkii.botania.common.lib.LibObfuscation;
public class RenderBow implements IItemRenderer {
@Override
public boolean handleRenderType(ItemStack item, ItemRenderType type) {
return type != ItemRenderType.INVENTORY;
}
@Override
public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) {
return helper == ItemRendererHelper.ENTITY_ROTATION || helper == ItemRendererHelper.ENTITY_BOBBING;
}
@Override
public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
switch(type) {
case ENTITY : {
GL11.glPushMatrix();
GL11.glTranslatef(-0.5F, 0F, 0F);
if(item.isOnItemFrame())
GL11.glTranslatef(0F, -0.3F, 0.01F);
render(item, null, false);
GL11.glPopMatrix();
break;
}
case EQUIPPED : {
render(item, data[1] instanceof EntityPlayer ? (EntityPlayer) data[1] : null, true);
break;
}
case EQUIPPED_FIRST_PERSON : {
render(item, data[1] instanceof EntityPlayer ? (EntityPlayer) data[1] : null, false);
break;
}
default : break;
}
}
public void render(ItemStack item, EntityPlayer player, boolean transform) {
int dmg = item.getItemDamage();
IIcon icon = item.getItem().getIconFromDamageForRenderPass(dmg, 0);
if(player != null) {
ItemStack using = ReflectionHelper.getPrivateValue(EntityPlayer.class, player, LibObfuscation.ITEM_IN_USE);
int time = ReflectionHelper.getPrivateValue(EntityPlayer.class, player, LibObfuscation.ITEM_IN_USE_COUNT);
icon = item.getItem().getIcon(item, 0, player, using, time);
if(transform) {
GL11.glTranslatef(0.2F, -0.3F, 0.1F);
//GL11.glRotatef(20.0F, 0.0F, 1.0F, 0.0F);
//GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F);
}
}
float f = icon.getMinU();
float f1 = icon.getMaxU();
float f2 = icon.getMinV();
float f3 = icon.getMaxV();
float scale = 1F / 16F;
GL11.glPushMatrix();
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glColor4f(1F, 1F, 1F, 1F);
ItemRenderer.renderItemIn2D(Tessellator.instance, f1, f2, f, f3, icon.getIconWidth(), icon.getIconHeight(), scale);
GL11.glDisable(GL11.GL_BLEND);
GL11.glPopMatrix();
GL11.glColor4f(1F, 1F, 1F, 1F);
}
}
@@ -54,7 +54,7 @@ public class RenderTransparentItem implements IItemRenderer {
}
}
public static void render(ItemStack item) {
public void render(ItemStack item) {
int dmg = item.getItemDamage();
IIcon icon = item.getItem().getIconFromDamageForRenderPass(dmg, 0);
float f = icon.getMinU();
@@ -51,6 +51,7 @@ public class ItemLivingwoodBow extends ItemBow implements IManaUsingItem {
setCreativeTab(BotaniaCreativeTab.INSTANCE);
setUnlocalizedName(name);
setMaxDamage(500);
setFull3D();
}
@Override
@@ -43,6 +43,7 @@ public final class LibObfuscation {
// EntityPlayer
public static final String[] ITEM_IN_USE = new String[] { "itemInUse", "field_71074_e", "f" };
public static final String[] ITEM_IN_USE_COUNT = new String[] { "itemInUseCount", "field_71072_f", "g" };
// Potion
public static final String[] IS_BAD_EFFECT = new String[] { "isBadEffect", "field_76418_K", "J" };