Posted December 29, 201410 yr Hello! This is my first post on the MC Forge forums. I am trying to make a mod. Part of that mod requires a gun. I have made a working gun that fires actual bullets. However, the bullets' model does not accurately display the bullet's position and pitch. Here are all the issues: 1. The bullet model's spawn position varies depending on the pitch that it is fired at. When I fire it downward, the bullet model spawns on my left, when when I fire it upward, the model spawns on my right. The y-position of the model is always in it's proper place. 2. The bullet model has no pitch. It is always is horizontal. Those are the only issues that I do not know how to solve (so only try to address those). Here is the code: EntityStdBullet.class (the entity itself): package tutorial.alex.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.monster.EntityBlaze; import net.minecraft.entity.projectile.EntityThrowable; import net.minecraft.util.DamageSource; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; public class EntityStdBullet extends EntityThrowable{ public EntityStdBullet(World par1World) { super(par1World); } public EntityStdBullet(World par1World, EntityLivingBase par2EntityLivingBase){ super(par1World, par2EntityLivingBase); } public EntityStdBullet(World par1World, double par2, double par4, double par6){ super(par1World, par2, par4, par6); } @Override protected void onImpact(MovingObjectPosition pos) { if (pos.entityHit != null) { pos.entityHit.attackEntityFrom(DamageSource.causeThrownDamage(this, this.getThrower()), 2.5f); } 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(); } } @Override protected float getGravityVelocity() { return 0.0f; } } RenderStdBullet (the Renderer): package tutorial.alex.Render; import org.lwjgl.opengl.GL11; import tutorial.alex.Entity.EntityStdBullet; import tutorial.alex.Model.ModelStdBullet; import net.minecraft.entity.Entity; import net.minecraft.client.model.ModelBase; import net.minecraft.client.renderer.entity.Render; import net.minecraft.util.ResourceLocation; import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.relauncher.Side; @SideOnly(Side.CLIENT) public class RenderStdBullet extends Render{ // ResourceLocations are typically static and final, but that is not an absolute requirement private static final ResourceLocation texture = new ResourceLocation("alexmodid:textures/models/ModelStdBullet.png"); // if you want a model, be sure to add it here: private ModelBase model; public RenderStdBullet() { // we could have initialized it above, but here is fine as well: model = new ModelStdBullet(); } @Override protected ResourceLocation getEntityTexture(Entity entity) { // this method should return your texture, which may be different based // on certain characteristics of your custom entity; if that is the case, // you may want to make a second method that takes your class: return getCustomTexture((EntityStdBullet) entity); } private ResourceLocation getCustomTexture(EntityStdBullet entity) { // now you have access to your custom entity fields and methods, if any, // and can base the texture to return upon those return texture; } // in whatever render method you are using; this one is from Render class: @Override public void doRender(Entity entity, double x, double y, double z, float yaw, float partialTick) { // again, if you need some information from your custom entity class, you can cast to your // custom class, either passing off to another method, or just doing it here // in this example, it is not necessary // if you are going to do any openGL matrix transformations, be sure to always Push and Pop GL11.glPushMatrix(); // bind your texture: bindTexture(texture); // do whatever transformations you need, then render // typically you will at least want to translate for x/y/z position: GL11.glTranslated(x, y, z); GL11.glRotatef(entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * partialTick, 0.0F, 1.0F, 0.0F); GL11.glRotatef(entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * partialTick, 0.0F, 0.0F, 1.0F); // if you are using a model, you can do so like this: model.render(entity, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); // note all the values are 0 except the final argument, which is scale // vanilla Minecraft almost excusively uses 0.0625F, but you can change it to whatever works GL11.glPopMatrix(); } } ModelStdBullet.class (the model): // Date: 12/28/2014 3:56:59 PM // Template version 1.1 // Java generated by Techne // Keep in mind that you still need to fill in some blanks // - ZeuX package tutorial.alex.Model; import net.minecraft.client.model.ModelBase; import net.minecraft.client.model.ModelRenderer; import net.minecraft.entity.Entity; import tutorial.alex.Entity.EntityStdBullet; public class ModelStdBullet extends ModelBase { //fields ModelRenderer Shape1; ModelRenderer Shape2; ModelRenderer Shape3; ModelRenderer Shape4; ModelRenderer Shape5; public ModelStdBullet() { textureWidth = 64; textureHeight = 32; Shape1 = new ModelRenderer(this, 0, 0); Shape1.addBox(0F, 0F, 0F, 5, 5, 5); Shape1.setRotationPoint(0F, 114F, 0F); Shape1.setTextureSize(64, 32); Shape1.mirror = true; setRotation(Shape1, 0F, 0F, 0F); Shape2 = new ModelRenderer(this, 0, 0); Shape2.addBox(0F, 0F, 0F, 4, 4, 4); Shape2.setRotationPoint(0.5F, 115F, 2F); Shape2.setTextureSize(64, 32); Shape2.mirror = true; setRotation(Shape2, 0F, 0F, 0F); Shape3 = new ModelRenderer(this, 0, 0); Shape3.addBox(0F, 0F, 0F, 3, 3, 3); Shape3.setRotationPoint(1F, 115F, 4F); Shape3.setTextureSize(64, 32); Shape3.mirror = true; setRotation(Shape3, 0F, 0F, 0F); Shape4 = new ModelRenderer(this, 0, 0); Shape4.addBox(0F, 0F, 0F, 2, 2, 2); Shape4.setRotationPoint(1.5F, 115.5F, 6F); Shape4.setTextureSize(64, 32); Shape4.mirror = true; setRotation(Shape4, 0F, 0F, 0F); Shape5 = new ModelRenderer(this, 0, 0); Shape5.addBox(0F, 0F, 0F, 1, 1, 1); Shape5.setRotationPoint(2F, 116F, 8F); Shape5.setTextureSize(64, 32); Shape5.mirror = true; setRotation(Shape5, 0F, 0F, 0F); } public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5) { super.render(entity, f, f1, f2, f3, f4, f5); setRotationAngles(f, f1, f2, f3, f4, f5); Shape1.render(f5); Shape2.render(f5); Shape3.render(f5); Shape4.render(f5); Shape5.render(f5); } private void setRotation(ModelRenderer model, float x, float y, float z) { model.rotateAngleX = x; model.rotateAngleY = y; model.rotateAngleZ = z; } public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5) { super.setRotationAngles(f, f1, f2, f3, f4, f5, null); } } I also have screenshots illustrating the problem: As you can see, when I am firing up (those yellow blotches are the bullets' models), the bullets' models spawn on the right as they should, but they have no pitch. However, when I fire downward (the bullet is in the far lower-left corner), the bullet's model spawns on the left. It still has no pitch.
December 29, 201410 yr you are doint this for 1.7?? im doing something similar in 1.8 but dont have trouble whith bullets cozz i dont want they to become visible
December 29, 201410 yr Author Are you doing this for 1.7? I'm doing something similar in 1.8, but I don't have trouble with bullets, because I don't want them to become visible. It's for 1.7.10. Also, fixed up your grammar and spelling .
December 29, 201410 yr Author ñaa not american but i have a teory you do your bullet using entity fireball I do not want to do that. Plus, I think my problem is in the render class, which can be found in the github repo.
December 30, 201410 yr how are you seting the starting position of this bullet i think you are using DTGMod/tutorial/alex/Entity/EntityStdBullet.java its tedios to read all your clases loking for this single think
December 31, 201410 yr Author how are you seting the starting position of this bullet i think you are using DTGMod/tutorial/alex/Entity/EntityStdBullet.java its tedios to read all your clases loking for this single think I've updated the OP to contain only the classes that are relevant.
December 31, 201410 yr Author Okay, I've fixed the problem with the bullet model's starting position changing on pitch. Now all I have to fix is the bullet model being horizontal all the time.
December 31, 201410 yr Author Okay, the bullet now renders fine. However, the model spawns higher than the player.
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.