-
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_; } } -
Ce message a été supprimé ! -
@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.