Jump to content

Rendering arrow like item


endershadow

Recommended Posts

i have an entity arrow that works all crrectly but i dont know how to get it to look like what i want, it allways looks like the missing texture

if you can help me fix this i can help this guy by posting the code for it.

 

this part methinks

 

this.loadTexture("/item/arrows.png");

Use examples, i have aspergers.

Examples make sense to me.

Link to comment
Share on other sites

i have an entity arrow that works all crrectly but i dont know how to get it to look like what i want, it allways looks like the missing texture

if you can help me fix this i can help this guy by posting the code for it.

 

this part methinks

 

this.loadTexture("/item/arrows.png");

Just use the arrows.png as a template to make your own arrow and then you replace "/item/arrows.png" with "/relative/path/to/your/arrowstexture.png", the code is counting from the render class so if the texture is in the middle of all your mod's classes, the path would just be "/arrowtexture.png" and if it is in a folder it would be "/foldername/arrowtexture.png". Get it? Try that ;)

Link to comment
Share on other sites

okay i got it to work, so endershadow you need alot of classes to make one rendered throwable or shootable entity, you need a render class, an entity class and a item class, and you need to register the item entity and renderer in your main mod class then the entity and the rederer again in your client proxy, i wil ommit the basic item code in the main mode class as i presume you can do that part.

P.S this is an example dagger.

Main mod class (omitting basic item code)

@Init
proxy.registerRenderers();
	EntityRegistry.registerModEntity(EntityRockSnowball.class, "RockSnowball", 2, this , 250, 1, false);

Dagger Class

package ashtonsmod.common;

import net.minecraft.block.Block;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntitySnowball;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;

public class Dagger extends Item
{
    public Dagger(int par1)
    {
        super(par1);
        this.maxStackSize = 16;
    }
    
    public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer)
    {
        if (!par3EntityPlayer.capabilities.isCreativeMode)
        {
            --par1ItemStack.stackSize;
        }

        par2World.playSoundAtEntity(par3EntityPlayer, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F));

        if (!par2World.isRemote)
        {
            par2World.spawnEntityInWorld(new EntityDagger(par2World, par3EntityPlayer));
        }

        return par1ItemStack;
    }
    
    @Override
   	public void updateIcons(IconRegister par1IconRegister)
    {
        this.iconIndex = par1IconRegister.registerIcon("ashtonsmod:Dagger");
    }}

DaggerEntity

package ashtonsmod.common;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.projectile.EntityThrowable;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.DamageSource;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;

public class EntityDagger extends EntityThrowable{

public static final float ArrowShake = 0;

public EntityDagger(World par1World) {
  super(par1World);
}

public EntityDagger(World par2World, EntityPlayer par3EntityPlayer) {
  super(par2World,par3EntityPlayer);
}

@Override
protected void entityInit() {

}

@Override
public void readEntityFromNBT(NBTTagCompound nbttagcompound) {

}

@Override
public void writeEntityToNBT(NBTTagCompound nbttagcompound) {

}

@Override
protected void onImpact(MovingObjectPosition par1MovingObjectPosition){

 if (par1MovingObjectPosition.entityHit != null)
  {
   par1MovingObjectPosition.entityHit.attackEntityFrom(DamageSource.causeThrownDamage(this, this.getThrower()), 5);
  }
  
  if (!this.worldObj.isRemote && this.rand.nextInt( == 0)
  {
   byte b0 = 1;
   
   if (this.rand.nextInt(32) == 0)
   {
    b0 = 4;
   }
  }
  
  if (!this.worldObj.isRemote)
  {
   this.setDead();
  }
  
}

}

Dagger renderer

package ashtonsmod.common;

import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.entity.Render;
import net.minecraft.entity.Entity;
import net.minecraft.util.MathHelper;

import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;

public class RenderDagger extends Render
{

public RenderDagger()
{
} 

public void renderDagger(EntityDagger par1EntityDagger, double par2, double par4, double par6, float par8, float par9)
{
    this.loadTexture("/mods/ashtonsmod/textures/gui/dagger.png");
    GL11.glPushMatrix();
    GL11.glTranslatef((float)par2, (float)par4, (float)par6);
    GL11.glRotatef(par1EntityDagger.prevRotationYaw + (par1EntityDagger.rotationYaw - par1EntityDagger.prevRotationYaw) * par9 - 90.0F, 0.0F, 1.0F, 0.0F);
    GL11.glRotatef(par1EntityDagger.prevRotationPitch + (par1EntityDagger.rotationPitch - par1EntityDagger.prevRotationPitch) * par9, 0.0F, 0.0F, 1.0F);
    Tessellator tessellator = Tessellator.instance;
    byte b0 = 0;
    float f2 = 0.0F;
    float f3 = 0.5F;
    float f4 = (float)(0 + b0 * 10) / 32.0F;
    float f5 = (float)(5 + b0 * 10) / 32.0F;
    float f6 = 0.0F;
    float f7 = 0.15625F;
    float f8 = (float)(5 + b0 * 10) / 32.0F;
    float f9 = (float)(10 + b0 * 10) / 32.0F;
    float f10 = 0.05625F;
    GL11.glEnable(GL12.GL_RESCALE_NORMAL);
    float f11 = (float)par1EntityDagger.ArrowShake - par9;

    if (f11 > 0.0F)
    {
        float f12 = -MathHelper.sin(f11 * 3.0F) * f11;
        GL11.glRotatef(f12, 0.0F, 0.0F, 1.0F);
    }

    GL11.glRotatef(45.0F, 1.0F, 0.0F, 0.0F);
    GL11.glScalef(f10, f10, f10);
    GL11.glTranslatef(-4.0F, 0.0F, 0.0F);
    GL11.glNormal3f(f10, 0.0F, 0.0F);
    tessellator.startDrawingQuads();
    tessellator.addVertexWithUV(-7.0D, -2.0D, -2.0D, (double)f6, (double)f8);
    tessellator.addVertexWithUV(-7.0D, -2.0D, 2.0D, (double)f7, (double)f8);
    tessellator.addVertexWithUV(-7.0D, 2.0D, 2.0D, (double)f7, (double)f9);
    tessellator.addVertexWithUV(-7.0D, 2.0D, -2.0D, (double)f6, (double)f9);
    tessellator.draw();
    GL11.glNormal3f(-f10, 0.0F, 0.0F);
    tessellator.startDrawingQuads();
    tessellator.addVertexWithUV(-7.0D, 2.0D, -2.0D, (double)f6, (double)f8);
    tessellator.addVertexWithUV(-7.0D, 2.0D, 2.0D, (double)f7, (double)f8);
    tessellator.addVertexWithUV(-7.0D, -2.0D, 2.0D, (double)f7, (double)f9);
    tessellator.addVertexWithUV(-7.0D, -2.0D, -2.0D, (double)f6, (double)f9);
    tessellator.draw();

    for (int i = 0; i < 4; ++i)
    {
        GL11.glRotatef(90.0F, 1.0F, 0.0F, 0.0F);
        GL11.glNormal3f(0.0F, 0.0F, f10);
        tessellator.startDrawingQuads();
        tessellator.addVertexWithUV(-8.0D, -2.0D, 0.0D, (double)f2, (double)f4);
        tessellator.addVertexWithUV(8.0D, -2.0D, 0.0D, (double)f3, (double)f4);
        tessellator.addVertexWithUV(8.0D, 2.0D, 0.0D, (double)f3, (double)f5);
        tessellator.addVertexWithUV(-8.0D, 2.0D, 0.0D, (double)f2, (double)f5);
        tessellator.draw();
    }

    GL11.glDisable(GL12.GL_RESCALE_NORMAL);
    GL11.glPopMatrix();
}

/**
* Actually renders the given argument. This is a synthetic bridge method, always casting down its argument and then
* handing it off to a worker function which does the actual work. In all probabilty, the class Render is generic
* (Render<T extends Entity) and this method has signature public void doRender(T entity, double d, double d1,
* double d2, float f, float f1). But JAD is pre 1.5 so doesn't do that.
*/
public void doRender(Entity par1Entity, double par2, double par4, double par6, float par8, float par9)
{
    this.renderDagger((EntityDagger)par1Entity, par2, par4, par6, par8, par9);
}
}

Client Proxy (i assume you already have one of these set up)

package ashtonsmod.client;

import ashtonsmod.common.EntityDagger;
import ashtonsmod.common.EntityRockSnowball;
import ashtonsmod.common.RenderDagger;
import ashtonsmod.common.RenderRockSnowball;
import ashtonsmod.common.RockSnowball;
import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.common.registry.EntityRegistry;
import net.minecraft.client.renderer.entity.Render;
import net.minecraft.src.ModLoader;
import net.minecraftforge.client.MinecraftForgeClient;

public class ClientProxyashtonsmod extends ashtonsmod.common.CommonProxy {
        	 @Override
             public void registerRenderers() {
              super.registerRenderers(); 
                 EntityRegistry.registerGlobalEntityID(EntityRockSnowball.class, "RockSnowball", ModLoader.getUniqueEntityId());
                 RenderingRegistry.registerEntityRenderingHandler(EntityRockSnowball.class, new RenderRockSnowball());
                 EntityRegistry.registerGlobalEntityID(EntityDagger.class, "Dagger", ModLoader.getUniqueEntityId());
                 RenderingRegistry.registerEntityRenderingHandler(EntityDagger.class, new RenderDagger());
        }
        
                 }
}

Use examples, i have aspergers.

Examples make sense to me.

Link to comment
Share on other sites

did you do the things above?

try copy pasting some of my code to double check?

double check the referanced classes ie everytime renderdagger is metioned make sure it is spelt correctly and such

i know the above works as i am using it so you must be missing something somewhere what a said a min ago and if that doesnt work post your code and will take a look :)

Use examples, i have aspergers.

Examples make sense to me.

Link to comment
Share on other sites

here's a link to my renderer on github. this one is based off the snowball renderer.

https://github.com/code-lyoko-modding/CodeLyokoMod/blob/master/matt/lyoko/render/RenderLaserArrow.java

I hardly doubt this is the problem since the arrow isn't rendering but you might always check at least, replace this.loadTexture("/mods/lyoko/textures/items/laserarrow.png") with this.loadTexture("/textures/items/laserarrow.png") since it counts the texture path relative to the render code.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.