1.7.10 Zoom arc + puissance trop élevé



  • Bonjour ! Aujourd'hui j'ai crée un arc. Cependant quand je charge, le jeu ne zoom pas. J'ai regardé sur le forum mais le seul tuto que j'ai trouvé c'est en 1.6 et il ne marche pas chez moi 😕

    Egalement la puissance de l'arc est trop élevé, je charge à peine, il tire une flèche comme si j'avais chargé 😕

    Voilà merci 🙂



  • 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 TickRegistry

    ​TickRegistry.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>


  • Moddeurs confirmés Rédacteurs Administrateurs

    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 ?


  • Moddeurs confirmés Rédacteurs Administrateurs

    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 ?


  • Administrateurs

    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…


Log in to reply