Bug au niveau du timer
-
Salut a tous !
vous vous souvenez sans doute qu’il y a quelques temps , j’ai fais une demande sur comment faire un timer .
Donc , grâce a jglrxavpok et Robin4002 , j’ai réussi.
Mais maintenant , un autre problème ce pose !
Mes balles font plus de dégâts :s !
Voila les codes :Le fusil
package mods.nono.MGSmod.weapons; import mods.nono.MGSmod.ShotsType.EntityShoot; import mods.nono.MGSmod.ShotsType.EntityShootSimple; import mods.nono.MGSmod.common.Main; import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentHelper; import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.world.World; public class W_SOCOM extends Item { private int shootTimer; public W_SOCOM(int par1) { super(par1); this.maxStackSize = 1; // dit qu'il ne peut avoir que 1 pistolet this.setCreativeTab(Main.MGSTAB); } public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, EntityPlayer par3EntityPlayer) { boolean flag = par3EntityPlayer.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, par1ItemStack) > 0; if (flag || par3EntityPlayer.inventory.hasItem(Main.SOammo.itemID)) { if (shootTimer == 0) { par2World.spawnEntityInWorld(new EntityShootSimple(par2World, par3EntityPlayer, 1)); par3EntityPlayer.inventory.consumeInventoryItem(Main.SOammo.itemID); shootTimer = 20; } } return par1ItemStack; } public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean hasItemInHand) { if(shootTimer > 0) { shootTimer--; } } @Override public void registerIcons(IconRegister iconRegister) { itemIcon = iconRegister.registerIcon("nono/MGSmod:SOCOM"); } }
L’entité de la balle
package mods.nono.MGSmod.ShotsType; import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.projectile.EntityThrowable; import net.minecraft.util.DamageSource; import net.minecraft.util.MathHelper; import net.minecraft.util.MovingObjectPosition; import net.minecraft.world.World; public class EntityShootSimple extends EntityThrowable { private static final Entity thrower = null; private int ticksInGround; public EntityShootSimple(World par1World, EntityLiving par2EntityLiving, float speed) { super(par1World, par2EntityLiving); this.setThrowableHeading(this.motionX, this.motionY, this.motionZ, speed, 1.0F); } public void setThrowableHeading(double par1, double par3, double par5, float par7, float par8) { float f2 = MathHelper.sqrt_double(par1 * par1 + par3 * par3 + par5 * par5); par1 /= (double) f2; par3 /= (double) f2; par5 /= (double) f2; par1 += this.rand.nextGaussian() * (double) (this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double) par8; par3 += this.rand.nextGaussian() * (double) (this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double) par8; par5 += this.rand.nextGaussian() * (double) (this.rand.nextBoolean() ? -1 : 1) * 0.007499999832361937D * (double) par8; par1 *= (double) par7; par3 *= (double) par7; par5 *= (double) par7; this.motionX = par1; this.motionY = par3; this.motionZ = par5; float f3 = MathHelper.sqrt_double(par1 * par1 + par5 * par5); this.prevRotationYaw = this.rotationYaw = (float) (Math.atan2(par1, par5) * 180.0D / Math.PI); this.prevRotationPitch = this.rotationPitch = (float) (Math.atan2(par3, (double) f3) * 180.0D / Math.PI); this.ticksInGround = 0; } /* * if(var1.entityHit !=null){ * * if(var1.entityHit !=null){ * */ @Override protected void onImpact(MovingObjectPosition var1) { if (var1.entityHit != null) { var1.entityHit.attackEntityFrom(DamageSource.causeThrownDamage(this, this.thrower), 5); this.setDead(); } else { this.setDead(); } } public void onUpdate() { super.onUpdate(); if (this.ticksExisted == 175) ; } protected float getGravityVelocity() { return 0; } }
Le render de la balle
package mods.nono.MGSmod.ShotsType; import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.entity.Render; import net.minecraft.entity.Entity; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; public class RenderEntityShootSimple extends Render { private float size; public RenderEntityShootSimple(float size) { this.size = size; } @Override public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { this.doRenderMonProjectile((EntityShootSimple) var1, var2, var4, var6, var8, var9); } public void doRenderMonProjectile(EntityShootSimple par1EntityMonProjectile, double par2, double par4, double par6, float par8, float par9) { GL11.glPushMatrix(); GL11.glTranslatef((float) par2, (float) par4, (float) par6); GL11.glEnable(GL12.GL_RESCALE_NORMAL); float var10 = this.size; GL11.glScalef(var10 / 1.0F, var10 / 1.0F, var10 / 1.0F); byte var11 = 0; this.loadTexture("/nono/MGSmod/textures/items/Shot.png"); Tessellator var12 = Tessellator.instance; float var13 = (float) (var11 % 16 * 16 + 0) / 16.0F; float var14 = (float) (var11 % 16 * 16 + 16) / 16.0F; float var15 = (float) (var11 / 16 * 16 + 0) / 16.0F; float var16 = (float) (var11 / 16 * 16 + 16) / 16.0F; float var17 = 1.0F; float var18 = 0.5F; float var19 = 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); var12.startDrawingQuads(); var12.setNormal(0.0F, 1.0F, 0.0F); var12.addVertexWithUV((double) (0.0F - var18), (double) (0.0F - var19), 0.0D, (double) var13, (double) var16); var12.addVertexWithUV((double) (var17 - var18), (double) (0.0F - var19), 0.0D, (double) var14, (double) var16); var12.addVertexWithUV((double) (var17 - var18), (double) (1.0F - var19), 0.0D, (double) var14, (double) var15); var12.addVertexWithUV((double) (0.0F - var18), (double) (1.0F - var19), 0.0D, (double) var13, (double) var15); var12.draw(); GL11.glDisable(GL12.GL_RESCALE_NORMAL); GL11.glPopMatrix(); } }
Merci d’avance pour vos réponses …
-
Je ne comprends pas bien la question. Les balles ne font plus ou font + de dégâts ?
Aussi, je te conseille que la classe de ton render soit une classe fille de RenderEntity, pour que ce soit plus cohérent.
De plus, je ne comprends pas trop l’intérêt de la ligne (dans update() de l’entity):if (this.ticksExisted == 175);
-
Elle ne font plus aucun dégâts
Cette ligne donne la durée de vie de la balle avant quelle disparaisse “naturellement”
-
La balle ne disparaît pas “naturellement” avec cette ligne. C’est ce que j’appelle une “condition vide”, il n’y a absolument aucune instruction avec elle, donc pas de disparition magique
Sinon, pour le problème, je ne vois pas trop d’où ça peut venir
La balle apparaît-elle bien à l’écran ? -
Oui elle apparait bien …
-
Up
Personne ne peut m’aider ? -
Je ne vois pas la raison