Jump to content

Recommended Posts

Posted

Hi, so I have a ranged mob that is meant to hold a bow, but I can't see the bow.

 

I'm not sure if I'm supposed to add anything to my render file, but here is all related code to the entity file:

 

 

 

 

public class EntityArcher extends EntityMob implements IRangedAttackMob {

 

private static final ItemStack defaultHeldItem = new ItemStack(Items.bow, 1);

 

public EntityArcher(World par1World) {

super(par1World);

    float moveSpeed = 0.3F;

        this.tasks.addTask(7, new EntityAIArrowAttack(this, 0.25F, 15, 10.0F));       

        this.tasks.addTask(1, new EntityAISwimming(this));

        this.tasks.addTask(2, new EntityAIRestrictSun(this));

        this.tasks.addTask(3, new EntityAIFleeSun(this, moveSpeed));

        this.tasks.addTask(5, new EntityAIWander(this, moveSpeed));

        this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F));

        this.tasks.addTask(6, new EntityAILookIdle(this));

        this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false));

        this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, 0, true));

this.setSize(0.6F, 1.5F);

 

  public boolean isAIEnabled()

    {

        return true;

    }

 

    public ItemStack getHeldItem()

    {

        return defaultHeldItem;

    }

 

 

@Override

public void attackEntityWithRangedAttack(EntityLivingBase var1, float f){

 

        EntityArrow var2 = new EntityArrow(this.worldObj, this, var1, 1.6F, 12.0F);

       

        var2.setDamage(4);

 

        this.playSound("random.bow", 1.0F, 1.0F / (this.getRNG().nextFloat() * 0.4F + 0.8F));

        this.worldObj.spawnEntityInWorld(var2);

    }

 

 

Posted

just looking at the source code i found this

 

strange its in an armour method but maybe it can help

 

    /**

    * Makes entity wear random armor based on difficulty

    */

    protected void addRandomArmor()

    {

        super.addRandomArmor();

        this.setCurrentItemOrArmor(0, new ItemStack(Items.bow));

    }

Posted

Can't remember the exact code, so this might be off, but you need to put a bow in the hand.

 

get rid of the line:

 

private static final ItemStack defaultHeldItem = new ItemStack(Items.bow, 1);

 

In your constructor Public EntityARcher after the setsize (by the way, looks like you are mising a "}" there), put something like this.  You really will have to check the syntax because I know my memory is off

 

this.setWeaponorEquipment(0, new Itemstack(Item.bow));

 

Long time Bukkit & Forge Programmer

Happy to try and help

Posted

just looking at the source code i found this

 

strange its in an armour method but maybe it can help

 

    /**

    * Makes entity wear random armor based on difficulty

    */

    protected void addRandomArmor()

    {

        super.addRandomArmor();

        this.setCurrentItemOrArmor(0, new ItemStack(Items.bow));

    }

Unfortunately adding this didn't help, unless was I supposed to add this to the Render file?

 

Can't remember the exact code, so this might be off, but you need to put a bow in the hand.

 

get rid of the line:

 

private static final ItemStack defaultHeldItem = new ItemStack(Items.bow, 1);

 

In your constructor Public EntityARcher after the setsize (by the way, looks like you are mising a "}" there), put something like this.  You really will have to check the syntax because I know my memory is off

 

this.setWeaponorEquipment(0, new Itemstack(Item.bow));

setWeaponorEquipment doesn't appear to be a valid method.

Posted

As i said, i'm going off memory.

 

That is the right command, but you didn't put it where I told you to.

 

put

 

this.setCurrentItemOrArmor(0, new ItemStack(Items.bow));

 

where i mentioned in previous post.

 

Long time Bukkit & Forge Programmer

Happy to try and help

Posted

As i said, i'm going off memory.

 

That is the right command, but you didn't put it where I told you to.

 

put

 

this.setCurrentItemOrArmor(0, new ItemStack(Items.bow));

 

where i mentioned in previous post.

So, it seems to have worked somewhat, as the mob now drops used bows, but I still don't see a visual bow being held.

Posted

Hmm, betting you didn't get all the render stuff in your custom mob render.

 

Compare yours to mine.  Mine works and shows the items.  The odd looking font code is so the name of the entity is over their head, but only when you are close to it.

 

Let me know if that helps.

 

 

 

 

package clandoolittle.custom_npc.Client.Render.Entities;

 

import cpw.mods.fml.relauncher.Side;

import cpw.mods.fml.relauncher.SideOnly;

import net.minecraft.block.Block;

import net.minecraft.client.entity.AbstractClientPlayer;

import net.minecraft.client.entity.EntityPlayerSP;

import net.minecraft.client.gui.FontRenderer;

import net.minecraft.client.model.ModelBiped;

import net.minecraft.client.renderer.RenderBlocks;

import net.minecraft.client.renderer.RenderHelper;

import net.minecraft.client.renderer.Tessellator;

import net.minecraft.client.renderer.entity.RenderBiped;

import net.minecraft.client.renderer.entity.RendererLivingEntity;

import net.minecraft.client.renderer.tileentity.TileEntitySkullRenderer;

import net.minecraft.entity.Entity;

import net.minecraft.entity.EntityLiving;

import net.minecraft.entity.EntityLivingBase;

import net.minecraft.entity.monster.EntityZombie;

import net.minecraft.entity.player.EntityPlayer;

import net.minecraft.item.EnumAction;

import net.minecraft.item.Item;

import net.minecraft.item.ItemArmor;

import net.minecraft.item.ItemBlock;

import net.minecraft.item.ItemStack;

import net.minecraft.scoreboard.Score;

import net.minecraft.scoreboard.ScoreObjective;

import net.minecraft.scoreboard.Scoreboard;

import net.minecraft.util.MathHelper;

import net.minecraft.util.ResourceLocation;

import net.minecraftforge.client.ForgeHooksClient;

import net.minecraftforge.client.IItemRenderer;

import net.minecraftforge.client.MinecraftForgeClient;

import net.minecraftforge.client.event.RenderPlayerEvent;

import net.minecraftforge.common.MinecraftForge;

 

import org.lwjgl.opengl.GL11;

 

import clandoolittle.custom_npc.Custom_NPC;

import clandoolittle.custom_npc.Common.Entities.Types.NPC_Entity;

import static net.minecraftforge.client.IItemRenderer.ItemRenderType.EQUIPPED;

import static net.minecraftforge.client.IItemRenderer.ItemRendererHelper.BLOCK_3D;

 

@SideOnly(Side.CLIENT)

public class MyRenderGuard extends RenderBiped

{

    // Setup Variables

    Custom_NPC instance = Custom_NPC.instance;

 

    // setup Variables

    private ResourceLocation texture = new ResourceLocation("custom_npc", instance.textures().textures.get("GUARD_BASIC.PNG"));

 

    public MyRenderGuard()

    {

        super(new ModelBiped(0.0F), 0.5F);

    }

 

    @Override

    protected ResourceLocation getEntityTexture(Entity entity)

    {

        // TODO Auto-generated method stub

        return texture;

    }

 

    @Override

    public void doRender(Entity par1Entity, double par2, double par4, double par6, float par8, float par9)

    {

        super.doRender(par1Entity, par2, par4, par6, par8, par9);

        // Setup Variables

        NPC_Entity npc = (NPC_Entity) par1Entity;

        // Render Name

        renderName(npc, npc.name(), par2, par4, par6, 64);

    }

 

    protected void renderName(EntityLivingBase par1EntityLivingBase, String par2Str, double par3, double par5, double par7, int par9)

    {

        double d3 = par1EntityLivingBase.getDistanceSqToEntity(this.renderManager.livingPlayer);

 

        if (d3 <= instance.properties().name_distance() * instance.properties().name_distance())

        {

            FontRenderer fontrenderer = this.getFontRendererFromRenderManager();

            float f = 1.6F;

            float f1 = 0.016666668F * f;

            GL11.glPushMatrix();

            GL11.glTranslatef((float)par3 + 0.0F, (float)par5 + par1EntityLivingBase.height + 0.5F, (float)par7);

            GL11.glNormal3f(0.0F, 1.0F, 0.0F);

            GL11.glRotatef(-this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F);

            GL11.glRotatef(this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F);

            GL11.glScalef(-f1, -f1, f1);

            GL11.glDisable(GL11.GL_LIGHTING);

            GL11.glDepthMask(false);

            GL11.glDisable(GL11.GL_DEPTH_TEST);

            GL11.glEnable(GL11.GL_BLEND);

            GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);

            Tessellator tessellator = Tessellator.instance;

            byte b0 = 0;

            GL11.glDisable(GL11.GL_TEXTURE_2D);

            tessellator.startDrawingQuads();

            int j = fontrenderer.getStringWidth(par2Str) / 2;

            tessellator.setColorRGBA_F(0.0F, 0.0F, 0.0F, 0.25F);

            tessellator.addVertex((double)(-j - 1), (double)(-1 + b0), 0.0D);

            tessellator.addVertex((double)(-j - 1), (double)(8 + b0), 0.0D);

            tessellator.addVertex((double)(j + 1), (double)(8 + b0), 0.0D);

            tessellator.addVertex((double)(j + 1), (double)(-1 + b0), 0.0D);

            tessellator.draw();

            GL11.glEnable(GL11.GL_TEXTURE_2D);

            fontrenderer.drawString(par2Str, -fontrenderer.getStringWidth(par2Str) / 2, b0, 553648127);

            GL11.glEnable(GL11.GL_DEPTH_TEST);

            GL11.glDepthMask(true);

            fontrenderer.drawString(par2Str, -fontrenderer.getStringWidth(par2Str) / 2, b0, -1);

            GL11.glEnable(GL11.GL_LIGHTING);

            GL11.glDisable(GL11.GL_BLEND);

            GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);

            GL11.glPopMatrix();

        }

    }

}

 

[\spoiler]

 

 

 

Long time Bukkit & Forge Programmer

Happy to try and help

Posted

Hmm, betting you didn't get all the render stuff in your custom mob render.

 

Compare yours to mine.  Mine works and shows the items.  The odd looking font code is so the name of the entity is over their head, but only when you are close to it.

 

Let me know if that helps.

 

 

 

 

package clandoolittle.custom_npc.Client.Render.Entities;

 

import cpw.mods.fml.relauncher.Side;

import cpw.mods.fml.relauncher.SideOnly;

import net.minecraft.block.Block;

import net.minecraft.client.entity.AbstractClientPlayer;

import net.minecraft.client.entity.EntityPlayerSP;

import net.minecraft.client.gui.FontRenderer;

import net.minecraft.client.model.ModelBiped;

import net.minecraft.client.renderer.RenderBlocks;

import net.minecraft.client.renderer.RenderHelper;

import net.minecraft.client.renderer.Tessellator;

import net.minecraft.client.renderer.entity.RenderBiped;

import net.minecraft.client.renderer.entity.RendererLivingEntity;

import net.minecraft.client.renderer.tileentity.TileEntitySkullRenderer;

import net.minecraft.entity.Entity;

import net.minecraft.entity.EntityLiving;

import net.minecraft.entity.EntityLivingBase;

import net.minecraft.entity.monster.EntityZombie;

import net.minecraft.entity.player.EntityPlayer;

import net.minecraft.item.EnumAction;

import net.minecraft.item.Item;

import net.minecraft.item.ItemArmor;

import net.minecraft.item.ItemBlock;

import net.minecraft.item.ItemStack;

import net.minecraft.scoreboard.Score;

import net.minecraft.scoreboard.ScoreObjective;

import net.minecraft.scoreboard.Scoreboard;

import net.minecraft.util.MathHelper;

import net.minecraft.util.ResourceLocation;

import net.minecraftforge.client.ForgeHooksClient;

import net.minecraftforge.client.IItemRenderer;

import net.minecraftforge.client.MinecraftForgeClient;

import net.minecraftforge.client.event.RenderPlayerEvent;

import net.minecraftforge.common.MinecraftForge;

 

import org.lwjgl.opengl.GL11;

 

import clandoolittle.custom_npc.Custom_NPC;

import clandoolittle.custom_npc.Common.Entities.Types.NPC_Entity;

import static net.minecraftforge.client.IItemRenderer.ItemRenderType.EQUIPPED;

import static net.minecraftforge.client.IItemRenderer.ItemRendererHelper.BLOCK_3D;

 

@SideOnly(Side.CLIENT)

public class MyRenderGuard extends RenderBiped

{

    // Setup Variables

    Custom_NPC instance = Custom_NPC.instance;

 

    // setup Variables

    private ResourceLocation texture = new ResourceLocation("custom_npc", instance.textures().textures.get("GUARD_BASIC.PNG"));

 

    public MyRenderGuard()

    {

        super(new ModelBiped(0.0F), 0.5F);

    }

 

    @Override

    protected ResourceLocation getEntityTexture(Entity entity)

    {

        // TODO Auto-generated method stub

        return texture;

    }

 

    @Override

    public void doRender(Entity par1Entity, double par2, double par4, double par6, float par8, float par9)

    {

        super.doRender(par1Entity, par2, par4, par6, par8, par9);

        // Setup Variables

        NPC_Entity npc = (NPC_Entity) par1Entity;

        // Render Name

        renderName(npc, npc.name(), par2, par4, par6, 64);

    }

 

    protected void renderName(EntityLivingBase par1EntityLivingBase, String par2Str, double par3, double par5, double par7, int par9)

    {

        double d3 = par1EntityLivingBase.getDistanceSqToEntity(this.renderManager.livingPlayer);

 

        if (d3 <= instance.properties().name_distance() * instance.properties().name_distance())

        {

            FontRenderer fontrenderer = this.getFontRendererFromRenderManager();

            float f = 1.6F;

            float f1 = 0.016666668F * f;

            GL11.glPushMatrix();

            GL11.glTranslatef((float)par3 + 0.0F, (float)par5 + par1EntityLivingBase.height + 0.5F, (float)par7);

            GL11.glNormal3f(0.0F, 1.0F, 0.0F);

            GL11.glRotatef(-this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F);

            GL11.glRotatef(this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F);

            GL11.glScalef(-f1, -f1, f1);

            GL11.glDisable(GL11.GL_LIGHTING);

            GL11.glDepthMask(false);

            GL11.glDisable(GL11.GL_DEPTH_TEST);

            GL11.glEnable(GL11.GL_BLEND);

            GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);

            Tessellator tessellator = Tessellator.instance;

            byte b0 = 0;

            GL11.glDisable(GL11.GL_TEXTURE_2D);

            tessellator.startDrawingQuads();

            int j = fontrenderer.getStringWidth(par2Str) / 2;

            tessellator.setColorRGBA_F(0.0F, 0.0F, 0.0F, 0.25F);

            tessellator.addVertex((double)(-j - 1), (double)(-1 + b0), 0.0D);

            tessellator.addVertex((double)(-j - 1), (double)(8 + b0), 0.0D);

            tessellator.addVertex((double)(j + 1), (double)(8 + b0), 0.0D);

            tessellator.addVertex((double)(j + 1), (double)(-1 + b0), 0.0D);

            tessellator.draw();

            GL11.glEnable(GL11.GL_TEXTURE_2D);

            fontrenderer.drawString(par2Str, -fontrenderer.getStringWidth(par2Str) / 2, b0, 553648127);

            GL11.glEnable(GL11.GL_DEPTH_TEST);

            GL11.glDepthMask(true);

            fontrenderer.drawString(par2Str, -fontrenderer.getStringWidth(par2Str) / 2, b0, -1);

            GL11.glEnable(GL11.GL_LIGHTING);

            GL11.glDisable(GL11.GL_BLEND);

            GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);

            GL11.glPopMatrix();

        }

    }

}

 

[\spoiler]

 

This is my render file, and everything about it renders fine, except the item. Does it need to extend RenderBiped? Because I don't want it to be a biped model.

 

 

 

@SideOnly(Side.CLIENT)

public class RenderTyrano extends RenderLiving {

private static final ResourceLocation EntityTexture = new ResourceLocation("eternisles:textures/mobs/tyrano.png");

protected modelTyrano model;

 

public RenderTyrano(ModelBase par1ModelBase, float par2) {

super(par1ModelBase, par2);

model = ((modelTyrano)mainModel);

 

}

 

  public void renderTyrano(EntityLiving par1EntityLiving, double par2, double par4, double par6, float par8, float par9){

  renderTyrano((EntityTyrano)par1EntityLiving, par2, par4, par6, par8, par9);

     

  }

 

@Override

protected ResourceLocation getEntityTexture(Entity entity) {

 

return EntityTexture;

}

 

 

}

 

 

Posted

You need to use biped. 

 

You could do all the work to make a non biped show the weapon but honestly if you are asking these question you are not capable enough yet to do it.

Long time Bukkit & Forge Programmer

Happy to try and help

Posted

You need to use biped. 

 

You could do all the work to make a non biped show the weapon but honestly if you are asking these question you are not capable enough yet to do it.

I think it's evident I don't know how to do it, that's why I am asking here.

Posted

Still can't seem to get it to work, and I don't know how to make the Render extend biped while not being a biped.

 

My render file:

 

 

 

 

@SideOnly(Side.CLIENT)

public class RenderTyrano extends RenderLiving {

private static final ResourceLocation EntityTexture = new ResourceLocation("eternisles:textures/mobs/tyrano.png");

protected modelTyrano model;

 

  public RenderTyrano(ModelBase par1ModelBase, float par2) {

      super(par1ModelBase, par2);

      model = ((modelTyrano)mainModel);

     

  }

 

      public void renderTyrano(EntityLiving par1EntityLiving, double par2, double par4, double par6, float par8, float par9){

        renderTyrano((EntityTyrano)par1EntityLiving, par2, par4, par6, par8, par9);

       

      }

 

  @Override

  protected ResourceLocation getEntityTexture(Entity entity) {

     

      return EntityTexture;

  }

 

 

}

 

 

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.

Announcements



  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Thank you so much Choonster! That's what i was missing! For now i added a folder assets/<mod_id>/items and put the model definition JSON file with the item name in it: { "model":{ "type": "minecraft:model", "model": "teleportpugmod:item/teleportpug" } }   Some log errors/warnings pointing me into the right direction would've been nice 😅 Haven't had much time to look into the DataGenerator and ModelProviders, because i'm still at work. But i guess these would would make more sense if have many custom items and want to generate these model definition files?
    • Minecraft 1.21.4 requires a new model definition file for each item, which you don't have. These can be created through Data Generation, specifically the ModelProvider, BlockModelGenerators and ItemModelGenerators classes.
    • Hi,  I'm using Forge 47.3.0 for Minecraft 1.20.1 I apologise if this is obvious I am very new to modding for Minecraft. I sucessfully made a mod that launched without errors or crashes (without it doing anything) but in order to add the features I need, I need to add "Custom Portal API [Forge]" as a dependency. However no matter the way I've tried to acheive this, it crashes. I am pretty sure it's not the way I'm putting it in the repositories, the dependencies or the way I'm refrencing it, as I've a hundred diffrent combinations and multiple Maven methods. And on all those diffrent variations I still get this crash: pastebin.com/UhumzZCZ Any tips would be invaluable as I've been loosing my mind over this!
    • Hi, i'm really having problems trying to set the texture to my custom item. I thought i'm doing everything correctly, but all i see is the missing texture block for my item. I am trying this for over a week now and getting really frustrated. The only time i could make the texture work, was when i used an older Forge version (52.0.1) for Minecraft (1.21.4). Was there a fundamental change for textures and models somewhere between versions that i'm missing? I started with Forge 54.1.0 and had this problem, so in my frustration i tried many things: Upgrading to Forge 54.1.1, created multiple new projects, workspaces, redownloaded everything and setting things up multiple times, as it was suggested in an older thread. Therea are no errors in the console logs, but maybe i'm blind, so i pasted the console logs to pastebin anyway: https://pastebin.com/zAM8RiUN The only time i see an error is when i change the models JSON file to an incorrect JSON which makes sense and that suggests to me it is actually reading the JSON file.   I set the github repository to public, i would be so thankful if anyone could take a look and tell me what i did wrong: https://github.com/xLorkin/teleport_pug_forge   As a note: i'm pretty new to modding, this is my first mod ever. But i'm used to programming. I had some up and downs, but through reading the documentation, using google and experimenting, i could solve all other problems. I only started modding for Minecraft because my son is such a big fan and wanted this mod.
    • Please read the FAQ (link in orange bar at top of page), and post logs as described there.
  • Topics

  • Who's Online (See full list)

    • There are no registered users currently online
×
×
  • Create New...

Important Information

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