1. Le forum de Minecraft-France va définitivement fermer ses portes. Celui-ci restera en lecture seule mais vous ne pourrez plus y apporter de nouveaux topics. Nous vous invitons à nous rejoindre sur le Discord de Minecraft-France qui permet de présenter vos projets, discuter avec la communauté etc.. Merci à tous d'avoir fait vivre ce forum de nombreuses années. Pour nous rejoindre sur Discord, Cliquez ici

[1.5.2]Un Fusil

Discussion dans 'Tutoriels' créé par Nolan-XX, 19 Juil 2013.

  1. Nolan-XX

    Nolan-XX Modérateur
    Staff

    Inscrit:
    29 Déc 2012
    Messages:
    10 231
    Points:
    304
    Sexe:
    Homme
    Bonjour a tous minecraftiens !
    Je vais vous présentez un tutoriel pour comment créer un fusil en 1.5.2 ( essayez en 1.6.x , je ne sais pas si ça marche )
    Le tuto est de moi , mais je remercie Sticor et MrTheoker de m'avoir aidé.

    1) Prérequis :
    Les classes principales + les proxies
    2 items : Un pour le fusil , un pour les balles

    2) L'entity de la balle.
    Créez une classe nommée EntityShoot :
    Code (java):
    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 EntityShoot extends EntityThrowable{
     
     
     
        private static final Entity thrower = null;
        private int ticksInGround;
     
     
        public EntityShoot(World par1World, EntityLiving par2EntityLiving, float speed) {
     
            super(par1World, par2EntityLiving);
     
            this.setThrowableHeading(this.motionX, this.motionY, this.motionZ, speed, 1.0F);
     
        }
     
        @Override
     
        protected void onImpact(MovingObjectPosition var1) {
     
           
            if(var1.entityHit !=null){
               
                var1.entityHit.attackEntityFrom(DamageSource.causeThrownDamage(this, this.thrower), VARIABLE1);
                this.setDead();
            }
           
            else
           
            {
           
                this.setDead();
           
            }
     
     
        }
     
       
     
        public void onUpdate() {  
     
            super.onUpdate();
            if (this.ticksExisted == VARIABLE2);
            }
        protected float getGravityVelocity()
        {
            return 0;
        }
     
     
    }
    A variable1 vous mettez les dégâts infligés et à variable2 la durée du tir ( combien de temps avant de disparaitre )
    3) Le render de la balle
    Créez une nouvelle classe RenderEntityShoot :
    Code (java):
    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 RenderEntityShoot extends Render{
     
     
     
        private float size;
     
     
     
        public RenderEntityShoot(float size){
     
            this.size = size;
     
        }
     
       
     
        @Override
     
        public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) {
     
            this.doRenderMonProjectile((EntityShoot)var1, var2, var4, var6, var8, var9);
     
        }
     
       
     
        public void doRenderMonProjectile(EntityShoot 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();
     
        }
     
     
     
    }
    4) Le fusil :
    Dans la classe de votre fusil :
    Code (java):
    package mods.nono.MGSmod.common;
     
    import mods.nono.MGSmod.ShotsType.EntityShoot;
    import net.minecraft.client.renderer.texture.IconRegister;
    import net.minecraft.enchantment.Enchantment;
    import net.minecraft.enchantment.EnchantmentHelper;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.world.World;
     
    public class W_AK47 extends Item
    {
     
    public W_AK47(int par1)
    {
    super(par1);
    this.maxStackSize = 1;
    }
    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.Ammo.itemID))
        {
        par2World.spawnEntityInWorld(new EntityShoot(par2World, par3EntityPlayer, VARIABLE1));
        par3EntityPlayer.inventory.consumeInventoryItem(Main.Ammo.itemID);
       
        }
        return par1ItemStack;
    }
     
      @Override
      public void registerIcons(IconRegister iconRegister)
      {
              itemIcon = iconRegister.registerIcon("nono/MGSmod:AK47");
      }
    }
     
    Ou variable1 = la vitesse du projectile et Main.Ammo les munitions.

    5) reste
    Je ne sais pas comment mettre des sons :) , et le tuto permet uniquement d'avoir des fusils mitrailleurs.
    Je l'éditerai bientôt pour pouvoir avoir des fusils qui tirent balles par balles.
     
  2. robin4002

    robin4002 Support Technique
    Staff

    Inscrit:
    17 Août 2012
    Messages:
    5 478
    Points:
    229
    Sexe:
    Homme
    Dans la classe principale, dans le preInit :
    Code (java):
        Side side = FMLCommonHandler.instance().getEffectiveSide();
        if(side.isClient())
        {
            MinecraftForge.EVENT_BUS.register(new MonEventSound());
        }
    Dans la classe mon MonEventSound :
    Code (java):
    package monpackage;
     
    import net.minecraftforge.client.event.sound.SoundLoadEvent;
    import net.minecraftforge.event.ForgeSubscribe;
     
    public class EventSound
    {
        @ForgeSubscribe
        public void onSound(SoundLoadEvent event)
        {
            try
            {
                event.manager.soundPoolSounds.addSound("monmod/monson.ogg", MaClassePrincipale.class.getResource("/mods/monmod/sounds/monson.ogg"));
            }
            catch(Exception e)
            {
                //Erreur, son non enregistré
            }
        }
    Le son est à mettre dans <archivedumods.zip>/mods/monmod/sounds/ pour le mod compilé, et dans forge/mcp/src/minecraft/mods/monmod/sounds/ pour l'avoir dans eclipse.

    Ensuite dans la classe de l'item :
    Code (java):
            par2World.playSoundAtEntity(par3EntityPlayer, "monmod.monson", 0.2F, 0.5F + 0.9F);
     
  3. Nolan-XX

    Nolan-XX Modérateur
    Staff

    Inscrit:
    29 Déc 2012
    Messages:
    10 231
    Points:
    304
    Sexe:
    Homme
    wahoo ... merci :)
     

Partager cette page