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

VG07

Massacreur de Mouton
23 Mars 2020
36
1
18
23
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");
    }
}
 
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.
 
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.