Mod Résolu Effect d'enchantement sur un item Java Script 1.12.2

VG07

Nouveau
23 Mars 2020
11
1
3
19
Bonjour,

Je programme en 1.12.2 avec le mdk de forge, je suis sur eclipse et je cherche à donnez un effect d'enchantement à un item (dans ce cas présent "event coin").

Ma classe d’initialisation de mes item :

JavaScript:
package fr.plaglefleau.univers.init;

import java.util.ArrayList;
import java.util.List;

import fr.plaglefleau.univers.items.BigJufiBanknote;
import fr.plaglefleau.univers.items.CopperCoin;
import fr.plaglefleau.univers.items.CopperIngot;
import fr.plaglefleau.univers.items.EventCoin;
import fr.plaglefleau.univers.items.GoldenCoin;
import fr.plaglefleau.univers.items.LittleJufiBanknote;
import fr.plaglefleau.univers.items.SilverCoin;
import fr.plaglefleau.univers.items.SilverIngot;
import net.minecraft.item.Item;

public class ItemMod
{
    
    public static final List<Item> ITEMS = new ArrayList<Item>();
    
    public static final Item COPPER_INGOT = new CopperIngot("copper_ingot");
    public static final Item SILVER_INGOT = new SilverIngot("silver_ingot");
    public static final Item COPPER_COIN = new CopperCoin("copper_coin");
    public static final Item SILVER_COIN = new SilverCoin("silver_coin");
    public static final Item GOLDENT_COIN = new GoldenCoin("golden_coin");
    public static final Item EVENT_COIN = new EventCoin("event_coin");
    public static final Item LITTLE_JUFI_BANKNOTE = new LittleJufiBanknote("little_jufi_banknote");
    public static final Item BIG_JUFI_BANKNOTE = new BigJufiBanknote("big_jufi_banknote");
}
La classe de l'item :

JavaScript:
package fr.plaglefleau.univers.items;

import fr.plaglefleau.univers.Main;
import fr.plaglefleau.univers.init.ItemMod;
import fr.plaglefleau.univers.utils.IHasModel;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;

public class EventCoin extends Item implements IHasModel
{
    public EventCoin(String name)
    {
        setUnlocalizedName(name);
        setRegistryName(name);
        setCreativeTab(CreativeTabs.MATERIALS);
        
        ItemMod.ITEMS.add(this);
    }
    @Override
    public void registerModels()
    {
        Main.proxy.registerItemRenderer(this, 0, "inventory");
    }
}
 

ShE3py

Développeur en autodidacte
26 Septembre 2015
1 491
228
187
18
Mìlhüsa
Bonsoir,

La façon la plus simple de reproduire quelque chose qui existe déjà, c'est de regarder comment Minecraft le fait.
Sous Eclipse, tu peux rechercher une classe en tapant CTRL + SHIFT + T, puis en recherchant « ItemEnchantedBook » par ex., mais cela marche aussi avec les pommes dorées.
Tu regardes alors dans le code source.

Cela doit être un truc dans ce style :
Java:
// généralement on Item en préfixe,
// pour différencier ItemEventCoin de BlockEventCoin par ex.
public class ItemEventCoin extends Item implements IHasModel {
    public ItemEventCoin(String name) {
        this.setUnlocalizedName(name);
        this.setRegistryName(name);
        this.setCreativeTab(CreativeTabs.MATERIALS);
        
        
        // ce n'est pas à l'objet de s'enregistrer lui-même,
        // mais à celui qui le créer de l'enregistrer
        // ItemMod.ITEMS.add(this);
    }
    
    @Override
    @SideOnly(Side.CLIENT)
    public void registerModels() {
        // comment est définie cette fonction sur le proxy du serveur dédié ?
        Main.proxy.registerItemRenderer(this, 0, "inventory");
    }
    
    @Override
    public boolean hasEffect(ItemStack stack) {
        // le stack a-t-il un "aura" d'enchantement ?
        return true;
    }
}
Et pour l'enregistrement des items, jette un œil à la documentation, tu t'y prends sans doute mal.
N'oublie pas aussi de prend un espace de nom, car là ton item copper_ingot est dans minecraft:copper_ingot, beaucoup de mods ajoutent le cuivre alors cela pose un problème si deux items ont le même nom, tu dois mettre ton modid devant ; modid:copper_ingot.

Cordialement,
ShE3py.
 

VG07

Nouveau
23 Mars 2020
11
1
3
19
Bonsoir,

La façon la plus simple de reproduire quelque chose qui existe déjà, c'est de regarder comment Minecraft le fait.
Sous Eclipse, tu peux rechercher une classe en tapant CTRL + SHIFT + T, puis en recherchant « ItemEnchantedBook » par ex., mais cela marche aussi avec les pommes dorées.
Tu regardes alors dans le code source.

Cela doit être un truc dans ce style :
Java:
// généralement on Item en préfixe,
// pour différencier ItemEventCoin de BlockEventCoin par ex.
public class ItemEventCoin extends Item implements IHasModel {
    public ItemEventCoin(String name) {
        this.setUnlocalizedName(name);
        this.setRegistryName(name);
        this.setCreativeTab(CreativeTabs.MATERIALS);
       
       
        // ce n'est pas à l'objet de s'enregistrer lui-même,
        // mais à celui qui le créer de l'enregistrer
        // ItemMod.ITEMS.add(this);
    }
   
    @Override
    @SideOnly(Side.CLIENT)
    public void registerModels() {
        // comment est définie cette fonction sur le proxy du serveur dédié ?
        Main.proxy.registerItemRenderer(this, 0, "inventory");
    }
   
    @Override
    public boolean hasEffect(ItemStack stack) {
        // le stack a-t-il un "aura" d'enchantement ?
        return true;
    }
}
Et pour l'enregistrement des items, jette un œil à la documentation, tu t'y prends sans doute mal.
N'oublie pas aussi de prend un espace de nom, car là ton item copper_ingot est dans minecraft:copper_ingot, beaucoup de mods ajoutent le cuivre alors cela pose un problème si deux items ont le même nom, tu dois mettre ton modid devant ; modid:copper_ingot.

Cordialement,
ShE3py.
Pour les premiers commentaires je ne comprend pas où mettre l'enregistrement. Je viens a peine de commencé la programmation de mod et j'ai appris à enregistrer programmé avec un youtuber américains (lien de la playlist :https://www.youtube.com/playlist?list=PLDhiRTZ_vnoX4bx_BJccGV7MjpXUfVJSn).
Ensuite pour la question sur le proxy voici comment la fonction est faites :
JavaScript:
package fr.plaglefleau.univers.proxy;

import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraftforge.client.model.ModelLoader;

public class ClientProxy extends CommonProxy
{
    public void registerItemRenderer(Item item, int meta, String id)
    {
        ModelLoader.setCustomModelResourceLocation(item, meta, new ModelResourceLocation(item.getRegistryName(), id));
    }
}
Merci de ton aide.