Jump to content

Stormageddon

Members
  • Posts

    22
  • Joined

  • Last visited

Converted

  • Gender
    Undisclosed
  • Personal Text
    I am new!

Stormageddon's Achievements

Tree Puncher

Tree Puncher (2/8)

0

Reputation

  1. Yes. It's being called in my main mod class. I know it's being called, and I know the registerEntityRenderingHandler method is being called.It's just not doing what it's supposed to do.
  2. Yeah so I definitely don't know what's wrong with it. >.< It's definitely calling my registerEntityRenderingHandler method, and that method is definately calling the constructor in my RenderSpear class...but the doRender method is never being called, and I can't figure out why. Should I try to call the method myself? And if so, where/how should I get the three doubles and the two floats that I need in order to call it? And where should I call it at?
  3. My code registers the renderer inside of the registerRenderers method in ClientProxy, and then calls that method inside the load method of the main mod class; so it does it the same way you do, just takes an extra step. Also...I have no idea how to implement a breakpoint or "trace into it." The entity itself is registered (otherwise it wouldn't be able to hit and cause damage to mobs), I just can't see it. Unless you meant something else by registering it? EDIT: After a little testing, I've figured out that my problem is either in my RenderSpear class or in my use of the registerEntityRenderingHandler method. The method itself is certainly called, it just doesn't seem to be doing what it's supposed to do.
  4. package agathalands.client; import cpw.mods.fml.client.registry.RenderingRegistry; import agathalands.AgathaLands; import agathalands.CommonProxy; import agathalands.client.renderer.entity.RenderSpear; import agathalands.entity.projectile.EntitySpear; public class ClientProxy extends CommonProxy { @Override public void registerRenderers() { //This is for rendering entities and so forth later on RenderingRegistry.registerEntityRenderingHandler(EntitySpear.class, new RenderSpear(AgathaLands.itemSpear)); } } The constructor for my RenderSpear method requires an item so that's why I pass that in. I don't get any errors from it, but at the same time, the constructor doesn't call the doRender method. (I'm not sure if it's supposed to)
  5. So I just tried that...and apparently it's NOT being called. Although, I'm not sure where to call it, or HOW to call it (the method signature requires 3 doubles and 2 floats and I don't know what those values are supposed to be.
  6. Hm...then I don't know what's wrong. ._. The item itself has a texture, and it does everything it's supposed to do (I can throw it and it causes damage), I just can't see it fly through the air. I can't see anything fly through the air. That method is supposed to go in my ClientProxy class right? From what you say, it almost seems as though when it gets thrown, it acquires a completely transparent texture.
  7. Okay so now I don't get any errors...but I still don't see anything. Am I supposed to bind the texture to the entity somehow/somewhere?\
  8. And...how do I do that? I looked in the RenderingRegistry class and the only method I see that seems like it might be right is public static void registerEntityRenderingHandler(Class <? extends Entity > entityClass, Render renderer) but I keep getting an error.
  9. Okay so I have a new throwable weapon that I created (item, entity, and render classes as well) but I don't know how to make it render in the Minecraft world so that after I throw it I can see it fly through the air. I've included my code, although most of it is basically the same as the snowball code; I just changed a few words/lines so that it would all work together for the spear instead of a snowball. ItemSpear.java package agathalands.item; import net.minecraft.item.EnumToolMaterial; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.player.EntityPlayer; import agathalands.entity.projectile.EntitySpear; import net.minecraft.world.World; public class ItemSpear extends Item { public ItemSpear(int id) { super(id); this.maxStackSize = 8; this.setCreativeTab(CreativeTabs.tabCombat); this.setUnlocalizedName("itemSpear"); this.setFull3D(); this.setTextureName("agathalands:item_spear"); } /** * Called whenever this item is equipped and the right mouse button is pressed. Args: itemStack, world, entityPlayer */ 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 EntitySpear(par2World, par3EntityPlayer)); } return par1ItemStack; } } EntitySpear.java package agathalands.entity.projectile; import java.util.Map; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.projectile.EntityThrowable; import net.minecraft.util.DamageSource; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; public class EntitySpear extends EntityThrowable { public EntitySpear(World par1World) { super(par1World); } public EntitySpear(World par1World, EntityLivingBase par2EntityLivingBase) { super(par1World, par2EntityLivingBase); } public EntitySpear(World par1World, double par2, double par4, double par6) { super(par1World, par2, par4, par6); } @Override protected void onImpact(MovingObjectPosition movingobjectposition) { if (movingobjectposition.entityHit != null) { byte b0 = 6; movingobjectposition.entityHit.attackEntityFrom(DamageSource.causeThrownDamage(this, this.getThrower()), (float)b0); } for (int i = 0; i < 8; ++i) { this.worldObj.spawnParticle("snowballpoof", this.posX, this.posY, this.posZ, 0.0D, 0.0D, 0.0D); } if (!this.worldObj.isRemote) { this.setDead(); } } } RenderSpear.java package agathalands.client.renderer.entity; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.entity.Render; import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.entity.Entity; import net.minecraft.entity.projectile.EntityPotion; import net.minecraft.item.Item; import net.minecraft.item.ItemPotion; import net.minecraft.potion.PotionHelper; import net.minecraft.util.Icon; import net.minecraft.util.ResourceLocation; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; @SideOnly(Side.CLIENT) public class RenderSpear extends Render { private Item field_94151_a; private int field_94150_f; public RenderSpear(Item par1Item, int par2) { this.field_94151_a = par1Item; this.field_94150_f = par2; } public RenderSpear(Item par1Item) { this(par1Item, 0); } /** * 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) { Icon icon = this.field_94151_a.getIconFromDamage(this.field_94150_f); if (icon != null) { GL11.glPushMatrix(); GL11.glTranslatef((float)par2, (float)par4, (float)par6); GL11.glEnable(GL12.GL_RESCALE_NORMAL); GL11.glScalef(0.5F, 0.5F, 0.5F); this.bindEntityTexture(par1Entity); Tessellator tessellator = Tessellator.instance; if (icon == ItemPotion.func_94589_d("bottle_splash")) { int i = PotionHelper.func_77915_a(((EntityPotion)par1Entity).getPotionDamage(), false); float f2 = (float)(i >> 16 & 255) / 255.0F; float f3 = (float)(i >> 8 & 255) / 255.0F; float f4 = (float)(i & 255) / 255.0F; GL11.glColor3f(f2, f3, f4); GL11.glPushMatrix(); this.func_77026_a(tessellator, ItemPotion.func_94589_d("overlay")); GL11.glPopMatrix(); GL11.glColor3f(1.0F, 1.0F, 1.0F); } this.func_77026_a(tessellator, icon); GL11.glDisable(GL12.GL_RESCALE_NORMAL); GL11.glPopMatrix(); } } /** * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. */ protected ResourceLocation getEntityTexture(Entity par1Entity) { return TextureMap.locationItemsTexture; } private void func_77026_a(Tessellator par1Tessellator, Icon par2Icon) { float f = par2Icon.getMinU(); float f1 = par2Icon.getMaxU(); float f2 = par2Icon.getMinV(); float f3 = par2Icon.getMaxV(); float f4 = 1.0F; float f5 = 0.5F; float f6 = 0.25F; GL11.glRotatef(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); GL11.glRotatef(-this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); par1Tessellator.startDrawingQuads(); par1Tessellator.setNormal(0.0F, 1.0F, 0.0F); par1Tessellator.addVertexWithUV((double)(0.0F - f5), (double)(0.0F - f6), 0.0D, (double)f, (double)f3); par1Tessellator.addVertexWithUV((double)(f4 - f5), (double)(0.0F - f6), 0.0D, (double)f1, (double)f3); par1Tessellator.addVertexWithUV((double)(f4 - f5), (double)(f4 - f6), 0.0D, (double)f1, (double)f2); par1Tessellator.addVertexWithUV((double)(0.0F - f5), (double)(f4 - f6), 0.0D, (double)f, (double)f2); par1Tessellator.draw(); } }
  10. kennethbgoodin has quite a few youtube tutorials on modding and he's really easy to understand. You could watch some of his videos and decide if you want them on your list.
  11. I had this exact same problem. (Draco18s knows) You have to make your layout very specific. Mod.zip //or whatever you call your zip folder |__gabe |__ne1 //this folder would contain all of your class files and any sub folder and their class files |__assets |__gabe |__textures |__blocks //this would contain all of your block textures |__items //this would contain all of your item textures I hope that makes sense. It didn't to me the first time, but eventually I figured it out. I hope you get it faster than I did!
  12. diesieben07 - It is the same layout that you said. Only difference is that I don't have com/example/ because that's not what my package name indicates. Draco18s - Yeah...when you said "src" I was dumb enough to put an extra folder src. So when I zipped everything up, my layout ended up being something like src.zip/src/stormcassidy/... and that's why it wasn't working when I did that.
  13. You made me lol. And... THANK THE LORD ALMIGHTY IT'S FINALLY WORKING!! I had to do: stormcassidy.zip |__stormcassidy |__morecolors |__MoreColors.class |__assets |__morecolors |__textures And...as of right now...I feel EXTREMELY retarded for not realizing this CRUCIAL difference between my format and the format of the other mods I have installed. >.< Anyways...thanks to all of you for the help!
  14. I never touched the main class. I only ever moved my assets folder that contains my textures. Now, for some reason the damn forum still won't let me upload attachments, so I'm going to try my best to explain every little detail. stormcassidy.zip\stormcassidy\morecolors\ contains: assets folder <-- This right here contains my textures. If I put it here, forge and minecraft run, but fail to load the textures. If I put it ANYWHERE else, forge suddenly can't find my main class. client folder CommonProxy.class MoreColors$1.class <-- I have no idea what this is, because it doesn't show up in eclipse. MoreColors.class <-- This is my main class right here. I NEVER MOVED IT. MoreColorsInfo.class NewBlock.class That is my layout. The client folder simply contains ClientProxy.class so it's not important in this matter.
  15. Draco18s - It is like that inside of Eclipse. If I try to make it like you said, forge suddenly can't find my main class. And according to all the tutorials I've seen, and the layouts of all of the other mods I already have installed, my layout should be stormcassidy/morecolors/assets/morecolors/textures where the first morecolors folder contains all of my class files. Something I just realized...I use one generic block class (NewBlock) to create all of my new blocks and just assign the texture inside of the main class file (i.e.: public static Block newBlock = new NewBlock(ID, Material).setTextureName(String). Could that be what's causing the issue? I would change it around to check, but I have quite a few new blocks created...so that would be rather time consuming if it didn't work.
×
×
  • Create New...

Important Information

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