Résolu Faire en sorte qu'on ne puisse tirer avec un arc si l'arc n'est pas 100% chargé
-
Wow, c’est dur faire un titre qui explique mon problème
En gros, j’ai fait un fusil. Sauf, que c’est pas logique qu’on puisse tirer, sans charger le fusil. Donc, j’aimerai qu’on puisse tirer, uniquement quand “l’arc” est chargé à 100%
J’ai essayer quelques trucs, raté.
PS : J’ai pas encore fait l’item Bullet, l’entity Bullet ( Je sais pas apliquer un model )Que faut-il rajouter-enlever ?
package eryah.usefulthings.init; import net.minecraft.client.Minecraft; import net.minecraft.client.resources.model.ModelResourceLocation; 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.stats.StatList; import net.minecraft.world.World; import net.minecraftforge.fml.common.registry.GameRegistry; import eryah.usefulthings.Reference; import eryah.usefulthings.UsefulthingsMod; public class MakeshiftRifle extends Item { public static Item makeshift_rifle; public static void init(){ makeshift_rifle = new MakeshiftRifle().setUnlocalizedName("makeshift_rifle").setCreativeTab(UsefulthingsMod.UTTab); } public static void register() { GameRegistry.registerItem(makeshift_rifle, makeshift_rifle.getUnlocalizedName().substring(5)); } public static void registerRenders() { registerRender(makeshift_rifle); } public static void registerRender(Item item) { Minecraft.getMinecraft().getRenderItem().getItemModelMesher().register(item, 0, new ModelResourceLocation(Reference.MOD_ID + ":" + item.getUnlocalizedName().substring(5), "inventory")); } public void onPlayerStoppedUsing(ItemStack stack, World worldIn, EntityPlayer playerIn, int timeLeft) { int j = this.getMaxItemUseDuration(stack) - timeLeft; net.minecraftforge.event.entity.player.ArrowLooseEvent event = new net.minecraftforge.event.entity.player.ArrowLooseEvent(playerIn, stack, j); if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) return; j = event.charge; boolean flag = playerIn.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, stack) > 0; if (flag || playerIn.inventory.hasItem(Items.arrow)) { float f = (float)j / 20.0F; f = (f * f + f * 2.0F) / 3.0F; EntityArrow entityarrow = new EntityArrow(worldIn, playerIn, f * 2.0F); if (f == 1.0F) { entityarrow.setIsCritical(true); } worldIn.playSoundAtEntity(playerIn, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F); if (flag) { entityarrow.canBePickedUp = 2; } else { playerIn.inventory.consumeInventoryItem(Items.arrow); } playerIn.triggerAchievement(StatList.objectUseStats[Item.getIdFromItem(this)]); if (!worldIn.isRemote) { worldIn.spawnEntityInWorld(entityarrow); } } } /** * Called when the player finishes using this Item (E.g. finishes eating.). Not called when the player stops using * the Item before the action is complete. */ public ItemStack onItemUseFinish(ItemStack stack, World worldIn, EntityPlayer playerIn) { return stack; } /** * How long it takes to use or consume an item */ public int getMaxItemUseDuration(ItemStack stack) { return 72000; } /** * returns the action that specifies what animation to play when the items is being used */ public EnumAction getItemUseAction(ItemStack stack) { return EnumAction.BOW; } public ItemStack onItemRightClick(ItemStack itemStackIn, World worldIn, EntityPlayer playerIn) { net.minecraftforge.event.entity.player.ArrowNockEvent event = new net.minecraftforge.event.entity.player.ArrowNockEvent(playerIn, itemStackIn); if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) return event.result; if (playerIn.capabilities.isCreativeMode || playerIn.inventory.hasItem(Items.arrow)) { playerIn.setItemInUse(itemStackIn, this.getMaxItemUseDuration(itemStackIn)); } return itemStackIn; } }
-
if (f == 1.0F) { entityarrow.setIsCritical(true); }
Correspond à la flèche charger à fond. Donc il suffit de mettre tout ce qui fait le tire dans cette condition. Rien de compliqué.
-
Bon j’ai bidouiller un peu, pendent longtemps…
Et ça fonctionne pas.
Je sais pas si j’ai fais du caca, mais j’ai tenté
j’ai même utiliser ce que j’ai apris sur Openclassroom avec les opérateurs, en utilisant <= au lieu de ==, car avoir 1.0F c’est dur, j’ai souvent 1.2F. Brefpublic void onPlayerStoppedUsing(ItemStack stack, World worldIn, EntityPlayer playerIn, int timeLeft) { int j = this.getMaxItemUseDuration(stack) - timeLeft; net.minecraftforge.event.entity.player.ArrowLooseEvent event = new net.minecraftforge.event.entity.player.ArrowLooseEvent(playerIn, stack, j); if (net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(event)) return; j = event.charge; boolean flag = playerIn.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, stack) > 0; if (flag || playerIn.inventory.hasItem(Items.arrow)) { float f = (float)j / 20.0F; f = (f * f + f * 2.0F) / 3.0F; EntityArrow entityarrow = new EntityArrow(worldIn, playerIn, f * 2.0F); worldIn.playSoundAtEntity(playerIn, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + f * 0.5F); if (flag) { entityarrow.canBePickedUp = 2; } else { playerIn.inventory.consumeInventoryItem(Items.arrow); } playerIn.triggerAchievement(StatList.objectUseStats[Item.getIdFromItem(this)]); if (!worldIn.isRemote) { if (f <= 1.0F) { worldIn.spawnEntityInWorld(entityarrow); } } } }
-
if (f => 1.0F) et non l’inverse.
-
Aïe… Mes vielles lacunes en maths… - < + § ET + > -…
Bref, ça fonctionne tout pile, merci robin -
Si c’est résolu n’oublie pas de mettre la balise.
-
Oopps désolé :S
Envoyé de mon SM-G357FZ en utilisant Tapatalk