Tu n'arrives pas a faire les arcs
-
salut les amis, c’est encore moi pour un nouvel épisode de : tu n’arrives pas a faire les arcs.
Donc lors de cette épisode vous l’aurez compris, j’ai un soucis d’arc, mais non pas un soucis venant de l’animation ou autre, mais un soucis par rapport à la portée, j’ai le code ci -dessous
if(creativeOrInfinity || player.inventory.hasItem(Items.arrow)) { float power = (float)charge / 1.0F; power = (power* power + power * 2.0F) / 3.0F; if ((double)power < 1.0D) { return; } if (power > 1.0F) { power = 1.0F; } EntityArrow arrow = new EntityArrow(world, player, power * 0.5F); if(power == 1.0F) { arrow.setIsCritical(true); }
donc en réalité l’arc ne charge pas, ou presque pas et je ne comprend pas quel valeur il faut changer pour réussir cette exploit …
j’espère qu’on pourra m’éclairer sur cela.
cordialement,
Sventus -
%(#000000)[[font=monospace]EntityArrow]%(#000000)[[font=monospace] arrow ]%(#666600)[[font=monospace]=] %(#7f0055)[[font=monospace]**new**] %(#000000)[[font=monospace]EntityArrow]%(#666600)[[font=monospace](]%(#000000)[[font=monospace]world]%(#666600)[[font=monospace],]%(#000000)[[font=monospace] player]%(#666600)[[font=monospace],]%(#000000)[[font=monospace] power ]%(#666600)[[font=monospace]*] %(#646464)[[font=monospace]0.5F]%(#666600)[[font=monospace]);]
C’est le 0.5F qui règle la portée et la puissance à la fois.
-
oui mais ça ne change pas entre les différentes charges
-
Ce qui serait bien c’est d’avoir la classe complète …
-
package fr.craftesys.craftesys.items; import net.minecraft.client.renderer.texture.IIconRegister; 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.ItemBow; 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; import fr.craftesys.craftesys.common.Mods; public class CobaltBow extends ItemBow { private IIcon[] iconbuffer; private static String[] cobaltbow = new String[] {"_pull1", "_pull2", "_pull3"}; public CobaltBow() { super(); this.maxStackSize = 1; this.setMaxDamage(384); } @Override public void registerIcons(IIconRegister iconregister) { iconbuffer = new IIcon[cobaltbow.length]; itemIcon = iconregister.registerIcon(this.getIconString()); for(int i = 0; i < cobaltbow.length; i++) { iconbuffer* = iconregister.registerIcon(this.getIconString() + cobaltbow*); } } @Override public IIcon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining) { if(usingItem != null && usingItem.getItem().equals(Mods.cobaltbow)) { int k = usingItem.getMaxItemUseDuration() - useRemaining; if(k >= 18) return iconbuffer[2]; if(k > 13) return iconbuffer[1]; if(k > 0) return iconbuffer[0]; } return getIconIndex(stack); } @Override public void onPlayerStoppedUsing(ItemStack stack, World world, EntityPlayer player, int itemInUseCount) { int charge = this.getMaxItemUseDuration(stack) - itemInUseCount; ArrowLooseEvent event = new ArrowLooseEvent(player, stack, charge); MinecraftForge.EVENT_BUS.post(event); if(event.isCanceled()) { return; } charge = event.charge; boolean creativeOrInfinity = player.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, stack) > 0; if(creativeOrInfinity || player.inventory.hasItem(Items.arrow)) { float power = (float)charge / 1.0F; power = (power* power + power * 2.0F) / 3.0F; if ((double)power < 1.0D) { return; } if (power > 1.0F) { power = 3.0F; } EntityArrow arrow = new EntityArrow(world, player, power * 0.5F); if(power == 1.0F) { arrow.setIsCritical(true); } int var9 = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, stack); if(var9 > 0) { arrow.setDamage(arrow.getDamage() + (double)var9 * 0.5D + 0.5D); } int var10 = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, stack); if(var10 > 0) { arrow.setKnockbackStrength(var10); } if(EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, stack) > 0) { arrow.setFire(100); } stack.damageItem(1, player); world.playSoundAtEntity(player, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + power * 0.5F); if(creativeOrInfinity) { arrow.canBePickedUp = 2; } else { player.inventory.consumeInventoryItem(Items.arrow); } if(!world.isRemote) { world.spawnEntityInWorld(arrow); } } } @Override public ItemStack onEaten(ItemStack stack, World world, EntityPlayer player) { return stack; } @Override public int getMaxItemUseDuration(ItemStack stack) { return 72000; } @Override public EnumAction getItemUseAction(ItemStack stack) { return EnumAction.bow; } @Override public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { ArrowNockEvent event = new ArrowNockEvent(player, stack); MinecraftForge.EVENT_BUS.post(event); if(event.isCanceled()) { return event.result; } if(player.capabilities.isCreativeMode || player.inventory.hasItem(Items.arrow)) { player.setItemInUse(stack, this.getMaxItemUseDuration(stack)); } return stack; } @Override public int getItemEnchantability() { return 1; } }
-
int charge = this.getMaxItemUseDuration(stack) - itemInUseCount;
Cette variable est bonne, tu devrais avoir plus de puissance. Étrange.
print la valeur pour voir ce que ça donne. -
2
2
1
1
2
2
2
2
24
24
7
7
2
2
17
17
25
25on voit bien que la valeur change, pourtant la flèche arrive toujours à la même distance
-
if (power > 1.0F)
{
power = 3.0F;
}
…
Je viens de voir ça. Tu réaffecte la valeur 3 à chaque fois. Donc normal que ça va toujours à la même distance. -
puis aussi c’est la charge que je dois regarder, pas la force xD
-
float power = (float)charge / 1.0F;
La force est définie en fonction de la charge. C’est comme ça que la flèche fonctionne … -
oué j’ai fait comme ça du coup (c’est pas beau, je préviens) :
if(creativeOrInfinity || player.inventory.hasItem(Items.arrow)) { float power = (float)charge / 1.0F; power = (power* power + power * 2.0F) / 3.0F; if ((double)power < 0.01D) { return; } if (charge == 1F) { power = 0.2F; } if (charge == 2F) { power = 0.3F; } if (charge == 3F) { power = 0.6F; } if (charge == 4F) { power = 0.7F; } if (charge == 5F) { power = 0.9F; } if (charge == 6F) { power = 1.1F; } if (charge == 7F) { power = 1.3F; } if (charge == 8F) { power = 1.5F; } if (charge == 9F) { power = 1.7F; } if (charge == 10F) { power = 1.9F; } if (charge == 11F) { power = 2.1F; } if (charge == 12F) { power = 2.3F; } if (charge == 13F) { power = 2.5F; } if (charge == 14F) { power = 2.7F; } if (charge == 15F) { power = 2.7F; } if (charge == 16F) { power = 3.1F; } if (charge == 17F) { power = 3.3F; } if (charge == 18F) { power = 3.5F; } if (charge == 19F) { power = 3.7F; } if (charge == 20F) { power = 3.8F; } if (charge == 21F) { power = 3.9F; } if (charge == 22F) { power = 4.0F; } if (charge == 23F) { power = 4.05F; } if (charge == 24F) { power = 4.1F; } if(charge >24F) { power = 4.15F; }
il y a donc diverses portées mais les dégâts fait sont toujours identiques et pourtant j’ai changé la valeur la :
this.setMaxDamage(1000);
-
Des idées sur le souci du coup ?
-
Le setMaxDamage dans le constructeur de l’item c’est pour la durabilité de l’arc –’
Pour les dégâts de la flèche :
arrow.setDamage(2.0D); <- valeur par défaut -
Et le D correspond à quoi ? Ainsi que le F. C’est quoi la valeur de base ?
-
J’abandonne …
-
Oublie le D et le F, ce qui compte c’est la valeur.
-
pourtant même en mettant cela :
if(var9 > 0)
{
arrow.setDamage(2000D);
}les dégâts restent inchangés
-
il sort d’où ce var9 ?
-
int var9 = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, stack);
bon je crois avoir compris
-
Du-coup c’est résolu ?