1.7.2 Clique droit avec un item = Effet de potion



  • Bonjour,
    Je voudrait que lorsque le joueur fait clique droit avec mon item dans la main l'item disparaissent et applique un effet de potion, sauaf que je ne trouve pas comment faire :huh:
    Actuellement j'ai rendu l'item comme mangeable pour q'une fois avaler un effet de potion soit appliqué :

    miningPotion = new ItemFood(0, 0.1f, false).setPotionEffect(3, 120, 2, 1.0f).setUnlocalizedName("miningPotion").setTextureName(PotionPlus.MODID+":miningPotion");
    

    Comment transformez ça ? Merci 🙂



  • Je n'ai pas bien compris ce que tu veux finalement xD



  • Je veux que quand le joueur fasse un clique droit ça applique un effet de potion et consomme l'item 🙂



  • Tu fais une nouvelle classe qui hérite de Item, dans la fonction onItemRightClick(…), tu fais ce que tu veux 😉


    http://pastebin.com/7iwPwYJX voila le code 😉



  • Alors ma question va surement te paraître bête mais comment faire une classe qui hérite de mon item ?
    Mon item est déclarée dans la page du mod principale (je n'est pas créer de classe spécifique)
    du coup j'ai ça actuellement comme code :

    miningPotion = new ItemFood(0, 0.1f, false).setPotionEffect(3, 120, 2, 1.0f).setUnlocalizedName("miningPotion").setTextureName(PotionPlus.MODID+":miningPotion");
    public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
    {
    player.addPotionEffect(1);
    player.setCurrentItemOrArmor(0, null);
    return super.onItemRightClick(stack, world, player);
    }
    GameRegistry.addShapelessRecipe(new ItemStack(miningPotion), new Object[]{new ItemStack(Items.potionitem, 1),new ItemStack(hotSlimeBall)});
    GameRegistry.registerItem(miningPotion, "miningPotion", PotionPlus.MODID);
    miningPotion.setCreativeTab(tabPotionPlus); //On ajoute l'item à la table créative
    

    Encore merci 🙂

    edit: eclipse me dit qu'il y a une erreur sur la ligne 'public item stack on right click…' : Multiplz marker at this line


  • Moddeurs confirmés

    Voir tuto comment créer un item:
    http://www.minecraftforgefrance.fr/showthread.php?tid=588

    et après tu ajoute la méthode:

    
    public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
    {
    event.player.addPotionEffect(new PotionEffect(id, temps, level));
    if (!player.capabilities.isCreativeMode)
    {
    –stack.stackSize;
    }
    return stack;
    }
    
    

    "id" "temps" et "level" sont à remplacer

    pour les ids d'effets de potions:
    Potion.nom.id
    le "nom" est à remplacer par le nom de l'effet.



  • Alors en faite j'ai toutes mes classes dans c'elle de mon mod :

    package com.gmail.loustak347.common;
    
    import net.minecraft.block.Block;
    import net.minecraft.creativetab.CreativeTabs;
    import net.minecraft.init.Blocks;
    import net.minecraft.init.Items;
    import net.minecraft.item.EnumAction;
    import net.minecraft.item.Item;
    import net.minecraft.item.ItemEgg;
    import net.minecraft.item.ItemFood;
    import net.minecraft.item.ItemGlassBottle;
    import net.minecraft.item.ItemPotion;
    import net.minecraft.item.ItemStack;
    import net.minecraft.potion.Potion;
    import cpw.mods.fml.common.Mod;
    import cpw.mods.fml.common.Mod.EventHandler;
    import cpw.mods.fml.common.Mod.Instance;
    import cpw.mods.fml.common.event.FMLInitializationEvent;
    import cpw.mods.fml.common.event.FMLPostInitializationEvent;
    import cpw.mods.fml.common.event.FMLPreInitializationEvent;
    import cpw.mods.fml.common.registry.GameRegistry;
    import net.minecraft.creativetab.CreativeTabs;
    import cpw.mods.fml.relauncher.Side;
    import cpw.mods.fml.relauncher.SideOnly;
    import net.minecraft.potion.Potion;
    
    @Mod(modid = "potionplus", name = "Potion+", version = "0.1")
    public class PotionPlus {
    
    @Instance("modtutoriel")
    public static final String MODID = "potionPlus";
    
    @Instance(MODID)
    public static PotionPlus instance;
    //On créer la table en créatif
    public static CreativeTabs tabPotionPlus = new CreativeTabs("potionPlus") {
    @Override
    @SideOnly(Side.CLIENT)
    public Item getTabIconItem()
    {
    return Items.potionitem;
    }
    };
    
    public static Item hotSlimeBall;
    public static Item miningPotion;
    
    @EventHandler
    public void preInit(FMLPreInitializationEvent event)
    {
    hotSlimeBall = new Item().setTextureName(PotionPlus.MODID+":hotSlimeBall").setUnlocalizedName("hotSlimeBall");
    GameRegistry.addSmelting(Items.slime_ball,new ItemStack(hotSlimeBall) , 0.0f);
    GameRegistry.registerItem(hotSlimeBall, "HotSlimeBall", PotionPlus.MODID);
    hotSlimeBall.setCreativeTab(tabPotionPlus); //On ajoute l'item à la table créative
    
    miningPotion = new ItemFood(0, 0.1f, false).setPotionEffect(3, 120, 2, 1.0f).setUnlocalizedName("miningPotion").setTextureName(PotionPlus.MODID+":miningPotion");
    
    GameRegistry.addShapelessRecipe(new ItemStack(miningPotion), new Object[]{new ItemStack(Items.potionitem, 1),new ItemStack(hotSlimeBall)});
    GameRegistry.registerItem(miningPotion, "miningPotion", PotionPlus.MODID);
    miningPotion.setCreativeTab(tabPotionPlus); //On ajoute l'item à la table créative
    }
    }
    
    

    Ets-ce que c'est possible même comme ça ?



  • Tu dois créer une class NomDeTonItem, et remplace new ItemFood par new NomDeTonItem, puis créé une class avec le NomDeTonItem. Mais attend que quelqu'un vérifie ce que je dis, pour être sur de ne pas faire de bêtises


  • Moddeurs confirmés

    Exact zery59



  • Du coup j'ai ça :

    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.ItemStack;
    import net.minecraft.potion.PotionEffect;
    import net.minecraft.world.World;
    
    public class miningPotion {
    public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
    {
    event.player.addPotionEffect(new PotionEffect(3, 20, 2));
    if (!player.capabilities.isCreativeMode)
    {
    –stack.stackSize;
    }
    return stack;
    }
    }
    
    

    Mais il me souligne en rouge event et dit : 'event cannot be resolved'


  • Moddeurs confirmés Rédacteurs Administrateurs

    Mets juste player, enlève event.



  • Ok j'ai essayer plus d'erreur pour eclipse mais un crash au lancement de minecraft :
    :::
    [17:47:03] [Client thread/ERROR] [FML]: The following problems were captured during this phase
    [17:47:03] [Client thread/ERROR] [FML]: Caught exception from potionplus
    java.lang.NullPointerException: Can't add null-object to the registry, name potionplus:miningPotion.
    at cpw.mods.fml.common.registry.FMLControlledNamespacedRegistry.add(FMLControlledNamespacedRegistry.java:353) ~[FMLControlledNamespacedRegistry.class:?]
    at cpw.mods.fml.common.registry.GameData.registerItem(GameData.java:772) ~[GameData.class:?]
    at cpw.mods.fml.common.registry.GameData.registerItem(GameData.java:740) ~[GameData.class:?]
    at cpw.mods.fml.common.registry.GameRegistry.registerItem(GameRegistry.java:143) ~[GameRegistry.class:?]
    at com.gmail.loustak347.common.PotionPlus.preInit(PotionPlus.java:59) ~[PotionPlus.class:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_45]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_45]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_45]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_45]
    at cpw.mods.fml.common.FMLModContainer.handleModStateEvent(FMLModContainer.java:513) ~[FMLModContainer.class:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_45]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_45]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_45]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_45]
    at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:74) ~[guava-15.0.jar:?]
    at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:47) ~[guava-15.0.jar:?]
    at com.google.common.eventbus.EventBus.dispatch(EventBus.java:314) ~[guava-15.0.jar:?]
    at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:296) ~[guava-15.0.jar:?]
    at com.google.common.eventbus.EventBus.post(EventBus.java:267) ~[guava-15.0.jar:?]
    at cpw.mods.fml.common.LoadController.sendEventToModContainer(LoadController.java:208) ~[LoadController.class:?]
    at cpw.mods.fml.common.LoadController.propogateStateMessage(LoadController.java:187) ~[LoadController.class:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_45]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_45]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_45]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_45]
    at com.google.common.eventbus.EventHandler.handleEvent(EventHandler.java:74) ~[guava-15.0.jar:?]
    at com.google.common.eventbus.SynchronizedEventHandler.handleEvent(SynchronizedEventHandler.java:47) ~[guava-15.0.jar:?]
    at com.google.common.eventbus.EventBus.dispatch(EventBus.java:314) ~[guava-15.0.jar:?]
    at com.google.common.eventbus.EventBus.dispatchQueuedEvents(EventBus.java:296) ~[guava-15.0.jar:?]
    at com.google.common.eventbus.EventBus.post(EventBus.java:267) ~[guava-15.0.jar:?]
    at cpw.mods.fml.common.LoadController.distributeStateMessage(LoadController.java:118) [LoadController.class:?]
    at cpw.mods.fml.common.Loader.preinitializeMods(Loader.java:512) [Loader.class:?]
    at cpw.mods.fml.client.FMLClientHandler.beginMinecraftLoading(FMLClientHandler.java:239) [FMLClientHandler.class:?]
    at net.minecraft.client.Minecraft.startGame(Minecraft.java:522) [Minecraft.class:?]
    at net.minecraft.client.Minecraft.run(Minecraft.java:892) [Minecraft.class:?]
    at net.minecraft.client.main.Main.main(Main.java:112) [Main.class:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.7.0_45]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_45]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:1.7.0_45]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[?:1.7.0_45]
    at net.minecraft.launchwrapper.Launch.launch(Launch.java:134) [launchwrapper-1.9.jar:?]
    at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.9.jar:?]
    :::

    Je pense que ça viens de quelque part ici :

    public void preInit(FMLPreInitializationEvent event)
    {
    hotSlimeBall = new Item().setTextureName(PotionPlus.MODID+":hotSlimeBall").setUnlocalizedName("hotSlimeBall");
    GameRegistry.addSmelting(Items.slime_ball,new ItemStack(hotSlimeBall) , 0.0f);
    GameRegistry.registerItem(hotSlimeBall, "HotSlimeBall", PotionPlus.MODID);
    hotSlimeBall.setCreativeTab(tabPotionPlus); //On ajoute l'item à la table créative
    
    new miningPotion();
    GameRegistry.addShapelessRecipe(new ItemStack(miningPotion), new Object[]{new ItemStack(Items.potionitem, 1),new ItemStack(hotSlimeBall)});
    GameRegistry.registerItem(miningPotion, "miningPotion", PotionPlus.MODID);
    miningPotion.setCreativeTab(tabPotionPlus); //On ajoute l'item à la table créative
    }
    

    edit :
    Mon ancienne ligne était :

    miningPotion = new ItemFood(0, 0.1f, false).setPotionEffect(3, 120, 2, 1.0f).setUnlocalizedName("miningPotion").setTextureName(PotionPlus.MODID+":miningPotion");
    
    

  • Moddeurs confirmés Rédacteurs Administrateurs

    miningPotion = new miningPotion().setUnlocalizedName("miningPotion").setTextureName(PotionPlus.MODID+":miningPotion");
    et pas new miningPotion(); …



  • C'est ce que j'avait fait au début mais il me souligne '.setUnlocalizedName' et tous les autres arguments car : d'après eclipse elle ne sont pas définit pour le type 'mininPotion'
    Je rapelle ma page miningPotion.java :
    :::
    package com.gmail.loustak347.common;

    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.item.ItemStack;
    import net.minecraft.potion.PotionEffect;
    import net.minecraft.world.World;

    public class miningPotion {

    public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
    {
    player.addPotionEffect(new PotionEffect(3, 20, 2));
    if (!player.capabilities.isCreativeMode)
    {
    –stack.stackSize;
    }
    return stack;
    }
    }
    :::



  • public class miningPotion extends Item {


  • Moddeurs confirmés Modérateurs

    c'est la base ca a tu au moins lu le tuto pour créer un item?



  • Merci ça fonctionne normalement, et sinon oui j'avais vu le tuto pour créer un item.


Log in to reply