Jump to content
View in the app

A better way to browse. Learn more.

Forge Forums

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Featured Replies

Posted

I want to render my arrow like item, but I can't get it to work correctly. I've tried the arrow renderer and the snowball renderer. but so far I've had no luck. please help.

In what way does it not work? You mean you can't see the arrow? I just got a whole lot of help to render a throwable item and therefore I know that there's a craptonne of stuff that could be wrong. If it's not private, it would also help if you posted your source code! ;)

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.

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 ;)

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.

  • Author

It just doesn't show up. and I tried copying the arrow render class and changing the string and the entity it referenced, but it didn't work.

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.

It just doesn't show up. and I tried copying the arrow render class and changing the string and the entity it referenced, but it didn't work.

Could you post source code? I might not be able to respond till tomorrow but I'll see then ;)

if you want it to look like an arrow what good is it using the snowball renderer?

Use examples, i have aspergers.

Examples make sense to me.

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.

its not that its a coding problem as if it were that then the render would come up as missing texture while in flight.

why dont you just use the code i provided you with? since we know that works.

Use examples, i have aspergers.

Examples make sense to me.

  • Author

but that's just it, I used what you used and it gave me the same problem. invisible entities. Could it be that the entities are too fast?

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...

Important Information

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

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.