Zoom arc + puissance trop élevé
-
SCAREX - “Je vais utiliser mon pouvoir !”
SCAREX utilise son pouvoir pour savoir ce qui ne va pas dans le code.
L’utilisation a échoué.
SCAREX - “Ah oui c’est vrai, sans le code je peux rien faire.” -
Ah oui, mince x/
Classe principale :
:::
erreur sur TickRegistryTickRegistry.registerTickHandler(new TickClientHandler(), Side.CLIENT);:::
Classe TickClientHandler :
:::
Partout ou il y a “Tick” et sur getLabel()package com.heartshadow.mod.renders; import java.util.EnumSet; import com.heartshadow.mod.HSMOD; import cpw.mods.fml.client.FMLClientHandler; import cpw.mods.fml.common.ObfuscationReflectionHelper; import net.minecraft.client.Minecraft; import net.minecraft.client.entity.EntityPlayerSP; import net.minecraft.client.renderer.EntityRenderer; public class TickClientHandler implements ITickHandler { @Override public void tickStart(EnumSet <ticktype>type, Object… tickData) { final Minecraft minecraft = FMLClientHandler.instance().getClient(); } @Override public void tickEnd(EnumSet <ticktype>type, Object... tickData) { final Minecraft minecraft = FMLClientHandler.instance().getClient(); final EntityPlayerSP player = minecraft.thePlayer; if (type.equals(EnumSet.of(TickType.CLIENT))) { if(HSMOD.zoom) { if(minecraft.gameSettings.thirdPersonView == 0 && minecraft.currentScreen == null) { zoom(6F); } }else { zoom(1.0F); } } } @Override public EnumSet <ticktype>ticks() { return EnumSet.of(TickType.RENDER, TickType.CLIENT); } @Override public String getLabel() { return "TickClientHandler"; } public static void zoom(float value) { ObfuscationReflectionHelper.setPrivateValue(EntityRenderer.class, FMLClientHandler.instance().getClient().entityRenderer, value, "cameraZoom"); } }:::
Classe de l’arc (pour la puissance) :
:::package com.heartshadow.mod.tools; import com.heartshadow.mod.HSMOD; 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; public class ItemDeldaBow extends ItemBow { private IIcon[] iconbuffer; private static String[] bowpullname = new String[] {"_pull_0", "_pull_1", "_pull_2"}; public ItemDeldaBow() { super(); this.maxStackSize = 1; this.setMaxDamage(384); } @Override public void registerIcons(IIconRegister iconregister) { iconbuffer = new IIcon[bowpullname.length]; itemIcon = iconregister.registerIcon(this.getIconString()); for(int i = 0; i < bowpullname.length; i++) { iconbuffer* = iconregister.registerIcon(this.getIconString() + bowpullname*); } } @Override public IIcon getIcon(ItemStack stack, int renderPass, EntityPlayer player, ItemStack usingItem, int useRemaining) { if(usingItem != null && usingItem.getItem().equals(HSMOD.deldaBow)) { 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 = 20.0F; if((double)power < 0.1D) { return; } if(power > 1.0F) { power = 1.0F; } EntityArrow arrow = new EntityArrow(world, player, power * 4.0F); 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 1200; } @Override public EnumAction getItemUseAction(ItemStack stack) { return EnumAction.bow; } @Override public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { if(!world.isRemote) { HSMOD.zoom = !HSMOD.zoom; } 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; } }:::
Voilà</ticktype></ticktype></ticktype>
-
Il faut passer par tick event en 1.7, ITickHandler n’existe plus.
-
Ouai, je vois pas trop comment faire et sinon pour la puissance de l’arc ?
-
float power = 20.0F;
Ta variable power vaut toujours 20 et ne prends pas en compte la valeur de charge.Voici le code de Minecraft :
float power = (float)charge / 20.0F; power = (power * power + power * 2.0F) / 3.0F; -
ça fonctionne mais j’ai pas réussi pour le zoom

-
Tu veux le zoom de base ou tu veux zoomer plus ?
-
Pour zoomer + que la normale avec l’arc, faut passer par un TickHandlerEvent.
Mais sinon, le EnumAction devrait le faire. -
SCAREX ==> Le même type de zoom que l’on a avec l’arc
Elias ==> Euuuh, ouais pas tout compris mais oui ^^’
-
Alors juste mettre çà suffit :
@Override public EnumAction getItemUseAction(ItemStack stack) { return EnumAction.bow; }
Si tu veux plus, pas besoin de passer par un tick handler, il faut juste modifier la variable dans l’entityRenderer de cette façon :
ObfuscationReflectionHelper.setPrivateValue(EntityRenderer.class, Minecraft.getMinecraft().entityRenderer, valeurDuZoom, "cameraZoom", "af", "field_78503_V");et utiliser les events de forge sur l’utilisation des items (PlayerUseItemEvent.leventVoulut, par exemple si tu veux le modifier lorsque le joueur arrête d’utiliser l’item ce sera PlayerUseItemEvent.Stop).
-
Alors pour la première chose, il y était déjà et pour la deuxieme, je n’ai pas cette variable nul part.
-
Si tu l’as déjà, çà veut dire que minecraft zoom déjà lorsque tu essaies de tirer.
Quelle valeur ? Celle du zoom ? Normal, il faut la mettre, c’est celle que tu veux…
