Pouvez vous m'aider a faire une arme à feux - AzUriA



  • Bonjour Je m'appelle Azuria je suis débutant en java . Je demande de l'aide car pour mon mode je voudrais créer une arme à feux, un AK47 (fusil mitrailleur pour ceux qui si connaisse pas ) et un Berreta (pistolet ) mais vue que JE SUIS NUL EN JAVA,si vous pouvez me faire un code ou un exemple de code svp (je suis en 1.7.10)

    Cordialement AzUriA



  • @azuria en gros tu veux du code tout fais gratos quoi



  • Salut,
    Vouloir faire des armes en étant débutant...c'est pas le meilleur truc à faire.
    Je te conseille de regarder du côté de FlansMod pour avoir des armes déjà faites, ou même si tu veux regarder son code (il est open-source, sur github).
    Si tu veux le coder, il te faudra faire :

    • un item avec action au clic droit (plus l'item de munition)
    • une entité "balle" tirée au moment du clic (tu peux regarde ItemArrow et EntityArrow, le principe est en partie le même) et qui fait des dégats quand elle touche quelqu'un.


  • merci AymericRed mais si tu veux m'aider plus j'ai regarder les tutos de Checconio (regarde l'épisode des items) donc sa veut dire que a la place de:
    AK47 = new Item();
    Je met :
    AK47 = new ItemAutoGun();

    puis je créer une classe avec un extends item avec le code un peux modifier de l'Arc (je cracherais pas sur ce qui peux être supprimé si tu me le dis)

    Merci bcp



  • Oui il faut que tu fasses ceci, exactement.
    En fait, copies les fonctions "onStoppedUsing" et "onItemRightClick" (noms de mémoire), remplaces le contenu d'onItemRightClick par celui de onStoppedUsing en enlève onStoppedUsing. (Car l'arc a un délai avant de tirer, une arme non).



  • ça en gros ?

    package com.azuria.mod.items;
    
    import com.azuria.mod.Reference;
    import com.azuria.mod.ZombieSurvivalMain;
    import com.azuria.mod.init.ItemMod;
    
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    import net.minecraft.client.renderer.texture.IIconRegister;
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.enchantment.Enchantment;
    import net.minecraft.enchantment.EnchantmentHelper;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.entity.projectile.EntityArrow;
    import net.minecraft.init.Items;
    import net.minecraft.item.EnumAction;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.util.IIcon;
    import net.minecraft.world.World;
    import net.minecraftforge.common.MinecraftForge;
    import net.minecraftforge.event.entity.player.ArrowLooseEvent;
    import net.minecraftforge.event.entity.player.ArrowNockEvent;
    
    public class AK47 extends Item{
    	public AK47()
        {
            this.maxStackSize = 1;
            this.setMaxDamage(384);
            this.setCreativeTab(CreativeTabs.tabCombat);
        }
    	 public void onPlayerStoppedUsing(ItemStack p_77615_1_, World p_77615_2_, EntityPlayer p_77615_3_, int p_77615_4_)
    	    {
    	        int j = this.getMaxItemUseDuration(p_77615_1_) - p_77615_4_;
    
    	        ArrowLooseEvent event = new ArrowLooseEvent(p_77615_3_, p_77615_1_, j);
    	        MinecraftForge.EVENT_BUS.post(event);
    	        if (event.isCanceled())
    	        {
    	            return;
    	        }
    	        j = event.charge;
    
    	        boolean flag = p_77615_3_.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, p_77615_1_) > 0;
    
    	        if (flag || p_77615_3_.inventory.hasItem(Items.arrow))
    	        {
    	            float f = (float)j / 20.0F;
    	            f = (f * f + f * 2.0F) / 3.0F;
    
    	            if ((double)f < 0.1D)
    	            {
    	                return;
    	            }
    
    	            if (f > 1.0F)
    	            {
    	                f = 1.0F;
    	            }
    
    	            EntityArrow entityarrow = new EntityArrow(p_77615_2_, p_77615_3_, f * 2.0F);
    
    	            if (f == 1.0F)
    	            {
    	                entityarrow.setIsCritical(true);
    	            }
    
    	            int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, p_77615_1_);
    
    	            if (k > 0)
    	            {
    	                entityarrow.setDamage(entityarrow.getDamage() + (double)k * 0.5D + 0.5D);
    	            }
    
    	            int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, p_77615_1_);
    
    	            if (l > 0)
    	            {
    	                entityarrow.setKnockbackStrength(l);
    	            }
    
    	            if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, p_77615_1_) > 0)
    	            {
    	                entityarrow.setFire(100);
    	            }
    
    	            p_77615_1_.damageItem(1, p_77615_3_);
    	            p_77615_2_.playSoundAtEntity(p_77615_3_, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);
    
    	            if (flag)
    	            {
    	                entityarrow.canBePickedUp = 2;
    	            }
    	            else
    	            {
    	                p_77615_3_.inventory.consumeInventoryItem(Items.arrow);
    	            }
    
    	            if (!p_77615_2_.isRemote)
    	            {
    	                p_77615_2_.spawnEntityInWorld(entityarrow);
    	            }
    	        }
    	    }
    	 public ItemStack onItemRightClick(ItemStack p_77615_1_, World p_77615_2_, EntityPlayer p_77615_3_, int p_77615_4_)
    	    {
    	        int j = this.getMaxItemUseDuration(p_77615_1_) - p_77615_4_;
    
    	        ArrowLooseEvent event = new ArrowLooseEvent(p_77615_3_, p_77615_1_, j);
    	        MinecraftForge.EVENT_BUS.post(event);
    	        if (event.isCanceled())
    	        {
    	            return p_77615_1_;
    	        }
    	        j = event.charge;
    
    	        boolean flag = p_77615_3_.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, p_77615_1_) > 0;
    
    	        if (flag || p_77615_3_.inventory.hasItem(Items.arrow))
    	        {
    	            float f = (float)j / 20.0F;
    	            f = (f * f + f * 2.0F) / 3.0F;
    
    	            if ((double)f < 0.1D)
    	            {
    	                return null;
    	            }
    
    	            if (f > 1.0F)
    	            {
    	                f = 1.0F;
    	            }
    
    	            EntityArrow entityarrow = new EntityArrow(p_77615_2_, p_77615_3_, f * 2.0F);
    
    	            if (f == 1.0F)
    	            {
    	                entityarrow.setIsCritical(true);
    	            }
    
    	            int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, p_77615_1_);
    
    	            if (k > 0)
    	            {
    	                entityarrow.setDamage(entityarrow.getDamage() + (double)k * 0.5D + 0.5D);
    	            }
    
    	            int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, p_77615_1_);
    
    	            if (l > 0)
    	            {
    	                entityarrow.setKnockbackStrength(l);
    	            }
    
    	            if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, p_77615_1_) > 0)
    	            {
    	                entityarrow.setFire(100);
    	            }
    
    	            p_77615_1_.damageItem(1, p_77615_3_);
    	            p_77615_2_.playSoundAtEntity(p_77615_3_, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);
    
    	            if (flag)
    	            {
    	                entityarrow.canBePickedUp = 2;
    	            }
    	            else
    	            {
    	                p_77615_3_.inventory.consumeInventoryItem(Items.arrow);
    	            }
    
    	            if (!p_77615_2_.isRemote)
    	            {
    	                p_77615_2_.spawnEntityInWorld(entityarrow);
    	            }
    	        }
    			return p_77615_1_;
    
    
    	    }
    	 }
    


  • This post is deleted!


  • @azuria a dit dans Pouvez vous m'aider a faire une arme à feux - AzUriA :

    ça en gros ?

    package com.azuria.mod.items;
    
    import com.azuria.mod.Reference;
    import com.azuria.mod.ZombieSurvivalMain;
    import com.azuria.mod.init.ItemMod;
    
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    import net.minecraft.client.renderer.texture.IIconRegister;
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.enchantment.Enchantment;
    import net.minecraft.enchantment.EnchantmentHelper;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.entity.projectile.EntityArrow;
    import net.minecraft.init.Items;
    import net.minecraft.item.EnumAction;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemStack;
    import net.minecraft.util.IIcon;
    import net.minecraft.world.World;
    import net.minecraftforge.common.MinecraftForge;
    import net.minecraftforge.event.entity.player.ArrowLooseEvent;
    import net.minecraftforge.event.entity.player.ArrowNockEvent;
    
    public class AK47 extends Item{
    	public AK47()
        {
            this.maxStackSize = 1;
            this.setMaxDamage(384);
            this.setCreativeTab(CreativeTabs.tabCombat);
        }
    	 public void onPlayerStoppedUsing(ItemStack p_77615_1_, World p_77615_2_, EntityPlayer p_77615_3_, int p_77615_4_)
    	    {
    	        int j = this.getMaxItemUseDuration(p_77615_1_) - p_77615_4_;
    
    	        ArrowLooseEvent event = new ArrowLooseEvent(p_77615_3_, p_77615_1_, j);
    	        MinecraftForge.EVENT_BUS.post(event);
    	        if (event.isCanceled())
    	        {
    	            return;
    	        }
    	        j = event.charge;
    
    	        boolean flag = p_77615_3_.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, p_77615_1_) > 0;
    
    	        if (flag || p_77615_3_.inventory.hasItem(Items.arrow))
    	        {
    	            float f = (float)j / 20.0F;
    	            f = (f * f + f * 2.0F) / 3.0F;
    
    	            if ((double)f < 0.1D)
    	            {
    	                return;
    	            }
    
    	            if (f > 1.0F)
    	            {
    	                f = 1.0F;
    	            }
    
    	            EntityArrow entityarrow = new EntityArrow(p_77615_2_, p_77615_3_, f * 2.0F);
    
    	            if (f == 1.0F)
    	            {
    	                entityarrow.setIsCritical(true);
    	            }
    
    	            int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, p_77615_1_);
    
    	            if (k > 0)
    	            {
    	                entityarrow.setDamage(entityarrow.getDamage() + (double)k * 0.5D + 0.5D);
    	            }
    
    	            int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, p_77615_1_);
    
    	            if (l > 0)
    	            {
    	                entityarrow.setKnockbackStrength(l);
    	            }
    
    	            if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, p_77615_1_) > 0)
    	            {
    	                entityarrow.setFire(100);
    	            }
    
    	            p_77615_1_.damageItem(1, p_77615_3_);
    	            p_77615_2_.playSoundAtEntity(p_77615_3_, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);
    
    	            if (flag)
    	            {
    	                entityarrow.canBePickedUp = 2;
    	            }
    	            else
    	            {
    	                p_77615_3_.inventory.consumeInventoryItem(Items.arrow);
    	            }
    
    	            if (!p_77615_2_.isRemote)
    	            {
    	                p_77615_2_.spawnEntityInWorld(entityarrow);
    	            }
    	        }
    	    }
    	 public ItemStack onItemRightClick(ItemStack p_77615_1_, World p_77615_2_, EntityPlayer p_77615_3_, int p_77615_4_)
    	    {
    	        int j = this.getMaxItemUseDuration(p_77615_1_) - p_77615_4_;
    
    	        ArrowLooseEvent event = new ArrowLooseEvent(p_77615_3_, p_77615_1_, j);
    	        MinecraftForge.EVENT_BUS.post(event);
    	        if (event.isCanceled())
    	        {
    	            return p_77615_1_;
    	        }
    	        j = event.charge;
    
    	        boolean flag = p_77615_3_.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, p_77615_1_) > 0;
    
    	        if (flag || p_77615_3_.inventory.hasItem(Items.arrow))
    	        {
    	            float f = (float)j / 20.0F;
    	            f = (f * f + f * 2.0F) / 3.0F;
    
    	            if ((double)f < 0.1D)
    	            {
    	                return null;
    	            }
    
    	            if (f > 1.0F)
    	            {
    	                f = 1.0F;
    	            }
    
    	            EntityArrow entityarrow = new EntityArrow(p_77615_2_, p_77615_3_, f * 2.0F);
    
    	            if (f == 1.0F)
    	            {
    	                entityarrow.setIsCritical(true);
    	            }
    
    	            int k = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, p_77615_1_);
    
    	            if (k > 0)
    	            {
    	                entityarrow.setDamage(entityarrow.getDamage() + (double)k * 0.5D + 0.5D);
    	            }
    
    	            int l = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, p_77615_1_);
    
    	            if (l > 0)
    	            {
    	                entityarrow.setKnockbackStrength(l);
    	            }
    
    	            if (EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, p_77615_1_) > 0)
    	            {
    	                entityarrow.setFire(100);
    	            }
    
    	            p_77615_1_.damageItem(1, p_77615_3_);
    	            p_77615_2_.playSoundAtEntity(p_77615_3_, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F);
    
    	            if (flag)
    	            {
    	                entityarrow.canBePickedUp = 2;
    	            }
    	            else
    	            {
    	                p_77615_3_.inventory.consumeInventoryItem(Items.arrow);
    	            }
    
    	            if (!p_77615_2_.isRemote)
    	            {
    	                p_77615_2_.spawnEntityInWorld(entityarrow);
    	            }
    	        }
    			return p_77615_1_;
    
    
    	    }
    	 }
    

    oula il faut pas jutes copier coller le code, il faut l'adapter, car là ça fonctionne comme un arc, ton item devrais pouvoir tirer des flèches si tu a des flèches dans ton inventaire



  • @wind_blade merci, mes comment je l'adapte



  • @azuria a dit dans Pouvez vous m'aider a faire une arme à feux - AzUriA :

    @wind_blade merci, mes comment je l'adapte

    bah en fonction de ce que tu veut faire avec ton arme, tu autorise le tir que si les joueurs a des minutions et tu l'enlève (si ton fusil a des munitions)



  • @wind_blade En gros je remplace tout les entity arrow par des entity bullet c'est ça ?



  • @azuria a dit dans Pouvez vous m'aider a faire une arme à feux - AzUriA :

    @wind_blade En gros je remplace tout les entity arrow par des entity bullet c'est ça ?

    Oui, enlève aussi le code inutile, comme par exemple celui qui gère si la flèche est enflammer ou si l'arc n'a plus de durabilité (ainsi que celui qui gère l'eventArrowLooseEvent et autre) .
    Apprend le java aussi, car nous partont sur le principe que tu connais le java, on ne crée pas de mod minecraft sans connaitre les bases du java



  • @wind_blade Quel sont les fonctions a supprimés (pour que ça aille plus vite et que j’arrête de te faire perdre ton temp) et celles a modifier.



  • @azuria a dit dans Pouvez vous m'aider a faire une arme à feux - AzUriA :

    @wind_blade Quel sont les fonctions a supprimés (pour que ça aille plus vite et que j’arrête de te faire perdre ton temp) et celles a modifier.

    Nous somme un forum d'entraide pas de travail bâclée (on peut t'aider à comprendre si tu ne comprend pas un bug ou donner un schéma mais pas le code), déjà il faut que tu crée une entité bullet pour ton projectile, et les fonctions a supprimer sont tout simplement c'elle qui ne te servira pas. Tu peut analyser ce que fait le code pour comprendre ce qu'il faut modifier



  • @wind_blade ok mrc



  • Il faudra également songer à la persistance des données via NBTTag (je pense au nbre de munitions dans le chargeur actuel).



  • @Plaigon Les tags NBT sont sauvegardés automatiquement (si tu parles de ceux des items)



  • Je parlais d'enregistrer les données dans le NBTTag de l'Itemstack, et non de les considérer comme un field de la classe Item.


Log in to reply