• Récent
  • Mots-clés
  • Populaire
  • Utilisateurs
  • Groupes
  • S'inscrire
  • Se connecter
  • S'inscrire
  • Se connecter
  • Recherche
  • Récent
  • Mots-clés
  • Populaire
  • Utilisateurs
  • Groupes

Créer un bloc basique

Les blocs
1.8
16
76
22.2k
Charger plus de messages
  • Du plus ancien au plus récent
  • Du plus récent au plus ancien
  • Les plus votés
Répondre
  • Répondre à l'aide d'un nouveau sujet
Se connecter pour répondre
Ce sujet a été supprimé. Seuls les utilisateurs avec les droits d'administration peuvent le voir.
  • Diangle
    Diangle dernière édition par robin4002 29 nov. 2021, 02:05 27 févr. 2015, 05:46

    youtubeCe tutoriel est également disponible en vidéo.

    Sommaire

    • Introduction
    • Pré-requis
    • code
      • La classe principale
      • La classe du bloc
      • Les proxy
      • Le json, la texture et le nom
    • Résultat
    • En vidéo
    • Crédits

    Introduction

    Dans ce tutoriel, nous allons créer un bloc. Un bloc est comme un item qui peut être placé dans le monde. Le bloc possède un item (ItemBlock). Ce tutoriel vous sera important pour la réalisation de vos futurs blocs plus (ou moins) complexes.

    Pré-requis

    • Créer la base de son mod

    Code

    La classe principale :

    Tous d’abord, déclarez votre bloc en dessous des proxys, dans le init.

        public static Block tutoBlock;
    

    N’oubliez pas d’importer la classe Block (net.minecraft.block.Block) avec Ctrl+Shift+O (ou en passant la souris sur l’erreur).
    Une fois ceci effectué, il nous faut initialiser notre bloc.

    tutoBlock = new TutoBlock(Material.rock)
    

    Dans le constructeur du bloc nous avons en paramètre le matériau. Il existe différents matériaux, pour les voir faite Ctrl+clic droit, il existe divers matériaux. Les matériaux peuvent avoir différentes propriétés ; en voici la liste :

    • setBurning() = peut brûler
    • setRequiresTool() = droppe uniquement avec l’outil requis
    • setImmovableMobility() = n’est pas déplaçable par un piston
    • setNoPushMobility() = contrairement à setImmovableMobility(), si un piston se déplace sur le bloc, il disparaît
    • setTranslucent() = rend le bloc transparent

    Vous pouvez aussi ajouter a votre bloc :

    • setUnlocalizedName() = il s’agit du nom de votre bloc
    • setResistance() = cela correspond à la résistance aux explosions de votre bloc
    • setHardness() = c’est la vitesse de minage du bloc
    • setCreativeTab() = vous permet de définir dans quel onglet du menu créatif se trouve votre bloc (cela fonctionne avec vos Creative Tabs)

    voici ce que vous devriez avoir si vous les ajoutez :

            tutoBlock = new TutoBlock(Material.rock).setUnlocalizedName("tuto_block").setResistance(5.0F).setHardness(3.0F).setCreativeTab(CreativeTabs.tabFood);
    

    Donc, j’ai donné un nom à mon bloc “tuto_block”, je lui ai attribué une résistance aux explosions et une vitesse de minage qui est la même que le minerai de charbon, je l’ai aussi mis dans l’onglet créatif de la nourriture (vous pouvez le mettre dans un autre, pour voir la liste faites : Ctrl+clique droit sur la classe).
    Ensuite, il faut mettre :

            GameRegistry.registerBlock(tutoBlock, "tuto_block");
    

    Le premier paramètre permet d’enregistrer votre bloc (tutoBlock est le nom de votre variable) et le second permet de vous le donner par la commande “/give modid:tuto_block”. Dans le second paramètre évitez les espaces (utiliser les “_” à la place), les majuscules et les caractères spéciaux.

    La classe du bloc :

    Normalement, vous avez une erreur depuis que vous avez initialisé votre bloc sur TutoBlock car cette classe n’existe pas. Nous allons la créer. Créez la classe et ajoutez en super classe la classe “net.minecraft.block.Block”, vous pouvez aussi ajouter “extends Block” une fois la classe créée.
    Une fois ceci fait, vous devriez avoir une erreur sur le nom de votre classe, passez la souris dessus et cliquez sur “Add constructor NomDeLaClasse(Material)”, une fois cette action effectuée vous devriez avoir cela :

    protected TutoBlock(Material materialIn)
    {
    super(materialIn);
    }

    Vous pouvez renommer le paramètre “materialIn” en “material”, ce qui donne :

    protected TutoBlock(Material material)
    {
    super(material);
    }

    Nous en avons fini avec notre bloc. Cependant si vous lancez votre jeu, vous aurez des erreurs dans la console, mais en jeu votre bloc aura une texture bizarre (avec deux carrés violet et deux carré noir sur chaque face). Donc nous allons ajouter ce qu’il faut pour afficher la texture.

    Les proxy

    Nous allons créer des fonctions qui nous permettrons d’enregistrer les .json et donc la texture, notez que ces fonctions sont utilisables pour vos autres blocs (et items). Commencez par ajouter dans le Common Proxy :

    protected void registerItemTexture(Item item, int metadata, String name){}
    protected void registerItemTexture(Item item, String name){}
    protected void registerBlockTexture(Block block, int metadata, String name){}
    protected void registerBlockTexture(Block block, String name){}

    Et ensuite, dans le client proxy :

    @Override
    public void registerItemTexture(Item item, int metadata, String name)
    {
    ItemModelMesher mesher = Minecraft.getMinecraft().getRenderItem().getItemModelMesher();
    mesher.register(item, metadata, new ModelResourceLocation("tuto:" + name, "inventory"));
    }
    @Override
    public void registerItemTexture(Item item, String name)
    {
    registerItemTexture(item, 0, name);
    }
    @Override
    public void registerBlockTexture(Block block, int metadata, String name)
    {
    registerItemTexture(Item.getItemFromBlock(block), metadata, name);
    }
    @Override
    public void registerBlockTexture(Block block, String name)
    {
    registerBlockTexture(block, 0, name);
    }

    Une petite explication (code venant de Superloup10) :

    Les trois paramètres, “item”/“block” est l’item/block concerné, “metadata” correspond à la damage value/metadata (quand le paramètre est absent la valeur vaut 0), name vous permet d’enregistrer le .json (blockstate). N’oubliez pas de changer “tuto:” par votre modid (n’enlevez pas les “:”).
    Retournez dans la classe principale, dans la fonction init (FMLInitializationEvent), et ajoutez :

            proxy.registerBlockTexture(tutoBlock, "tuto_block");
    

    tutoBlock, est le nom de votre variable, “tuto_block” est le nom de votre json.

    Les json, la texture et le nom :

    Nous allons enfin donner une texture à notre bloc. Allez dans votre “asset/modid” (modid correspond au dossier qui a le même nom que votre modid) et créez trois dossiers :

    • blockstates, dans ce dossier nous aurons les blocs avec leur directions et les chemins vers nos models
    • models
    • textures
      Dans le dossier blockstates, ajoutez le fichier .json (avec comme nom le nom que vous avez mis dans votre code). Dans le fichier ajoutez :
    {
    "variants": {
    "normal": { "model": "MODID:tuto_block" }
    }
    }

    Qu’est-ce que cela veut bien dire ? Cela nous donne dans quel “dossier/fichier” le model de notre bloc est.
    Remplacez MODID par votre modid et tuto_block par le nom de bloc choisi (c’est le nom des fichier .json dans models/block et models/item)
    Maintenant, allez dans le dossier models et créez, à l’intérieur, ces deux dossiers :

    • block, vous mettrez dans ce dossier les rendus des blocs dans le monde, ça vous permettra de mettre la texture et de faire les rendus particuliers
    • item, dans ce dossier vous mettrez les rendus des blocs en temps qu’item
      Dans le dossier block, ajoutez un fichier .json qui porte le nom que vous avez mis dans le premier fichier .json (pour moi ce sera : tuto_block).
      Dans le fichier .json ajoutez :
    {
    "parent": "block/cube_all",
    "textures": {
    "all": "MODID:blocks/tuto_block"
    }
    }

    Petite description ?

    "parent": "block/cube_all
    Correspond au fichier .json (dans "models/block"), dont il reprend le modèle. C'est le modèle des blocs simples. Le deuxième bout de code : 
    
    "textures": {
    "all": "MODID:blocks/tuto_block"
    }

    Cela correspond à l’accès de la texture pour savoir quelle texture le bloc aura (comme en 1.7 le .setBlockTextureName()). Remplacez le “MODID” par votre modid et le “tuto_block” par le nom de la texture de votre bloc (vos textures pour les blocs seront à placer dans textures/blocks).
    Une fois ceci fait, dans le dossier item, ajoutez encore un fichier .json (du même nom que dans le dossier “models/block”), une fois que vous l’avez fait, ajoutez dans le fichier .json :

    {
    "parent": "MODID:block/tuto_block",
    "display": {
    "thirdperson": {
    "rotation": [ 10, -45, 170 ],
    "translation": [ 0, 1.5, -2.75 ],
    "scale": [ 0.375, 0.375, 0.375 ]
    }
    }
    }

    Donc, comme plus haut, le parent correspond à quel bloc il prend le modèle, mais dans ce .json, il faudra mettre votre .json créés précédemment. Ensuite, le reste du code nous permet de dessiner l’item dans l’inventaire…
    N’oubliee pas de remplacer le “MODID” par votre modid et “tuto_block” par le nom de votre .json (du dossier “models/block”).

    Maintenant, dans le dossier textures, créez un dossier blocks et mettez y la texture du bloc (elle doit être au format de pixel hauteur*largeur, à une puissance de deux soit : 1, 2, 4, 8, 16, 32, 64…). N’oubliez pas de la nommer comme vous l’avez fait dans les fichiers plus haut (rappel : “textures”: { “all”: “MODID:blocks/tuto_block” };en jaune il s’agit du nom de la texture).

    Normalement, si vous n’avez rien raté, en lançant votre jeu, votre bloc aura la texture que vous lui aurez attribuée. Mais, tout de fois, vous verrez que votre bloc a un nom bizarre (tile.nom_du_block.name), donc dans votre fichier .lang (dans le dossier lang), vous devez mettre :

    tile.nom_du_block.name=Nom Du Block
    

    Bien sûr, remplacez “nom_du_block” par le vrai nom de votre bloc (rappel : .setUnlocalizedName()), et “Nom Du Block” par le nom que vous voulez lui donner en jeu.
    Maintenant lancez votre jeu et votre bloc aura le nom que vous lui aurez donné.

    Résultat

    0_1529440160062_minecraft-bloc.png
    Voir le commit sur github
    Le commit sur github montre clairement où ont été placé les fichiers, ainsi que ce qui a été ajouté et retiré dans le fichier.

    En vidéo

    https://www.youtube.com/watch?v=ws8j0ZxYZYg

    Crédits

    Rédaction :

    • Diangle

    Correction :

    • Fine33

    Creative Commons
    Ce tutoriel de Minecraft Forge France est mis à disposition selon les termes de la licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International

    retourSommaire des tutoriels

    1 réponse Dernière réponse Répondre Citer 0
    • M
      MyStaiR dernière édition par 22 juin 2015, 20:10

      Comment donner une ID au bloc?

      1 réponse Dernière réponse Répondre Citer 0
      • SCAREX
        SCAREX dernière édition par 22 juin 2015, 20:16

        Si c’est une ID de type chaîne de caractère dont tu parles, c’est le nom que tu mets dans GameRegistry.registerBlock. Si tu parles d’ID sous forme de nombre, çà n’existe plus en 1.8.

        Site web contenant mes scripts : http://SCAREXgaming.github.io

        Pas de demandes de support par MP ni par skype SVP.
        Je n'accepte sur skype que l…

        1 réponse Dernière réponse Répondre Citer 0
        • robin4002
          robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 22 juin 2015, 20:20

          @‘SCAREX’:

          Si tu parles d’ID sous forme de nombre, çà n’existe plus en 1.8.

          Il existe toujours mais ils sont attribués automatiquement par FML.

          1 réponse Dernière réponse Répondre Citer 0
          • M
            MyStaiR dernière édition par robin4002 19 juin 2018, 20:30 22 juin 2015, 20:27

            C’est impossible de donner l’ID ?

            1 réponse Dernière réponse Répondre Citer 0
            • robin4002
              robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 22 juin 2015, 20:29

              En effet, ce n’est pas possible

              1 réponse Dernière réponse Répondre Citer 0
              • SCAREX
                SCAREX dernière édition par 22 juin 2015, 20:29

                En 1.6, c’était possible, pourquoi veux-tu utiliser les IDs ? C’est beaucoup plus simple de faire avec le nouveau système !

                Site web contenant mes scripts : http://SCAREXgaming.github.io

                Pas de demandes de support par MP ni par skype SVP.
                Je n'accepte sur skype que l…

                1 réponse Dernière réponse Répondre Citer 0
                • M
                  MyStaiR dernière édition par 22 juin 2015, 20:30

                  C’est pour éviter un “regen” car vanilla –> forge

                  1 réponse Dernière réponse Répondre Citer 0
                  • robin4002
                    robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 22 juin 2015, 20:32

                    http://www.minecraftforgefrance.fr/showthread.php?tid=2224&pid=25499#pid25499

                    1 réponse Dernière réponse Répondre Citer 0
                    • Flow
                      Flow dernière édition par 25 août 2015, 21:40

                      Mon block apparait bien avec sa texture quand je le pose mais en main il est non-texturé 😕

                      Des idées de pourquoi ?

                      Oui ce gif est drôle.

                      1 réponse Dernière réponse Répondre Citer 0
                      • elias54
                        elias54 Administrateurs dernière édition par 25 août 2015, 21:56

                        Tu as probablement oublié d’appeler le model json de ton block.

                        Mon site | GitHub

                        1 réponse Dernière réponse Répondre Citer 0
                        • Flow
                          Flow dernière édition par 25 août 2015, 22:02

                          Euuh j’ai pourtant tout bien mis regarde

                          ClientProxy

                          package mod.client;
                          import mod.DinoCraft;
                          import mod.client.model.ModelBrachiosaurus;
                          import mod.client.model.ModelCoelophysis;
                          import mod.client.model.ModelFrog;
                          import mod.client.model.ModelTriceratops;
                          import mod.client.model.ModelVelociraptors;
                          import mod.client.render.RenderBrachiosaurus;
                          import mod.client.render.RenderCoelophysis;
                          import mod.client.render.RenderFlechette;
                          import mod.client.render.RenderFrog;
                          import mod.client.render.RenderTriceratops;
                          import mod.client.render.RenderVelociraptors;
                          import mod.common.CommonProxy;
                          import mod.common.block.BlockRegister;
                          import mod.common.block.entity.TileEntityBarriere;
                          import mod.common.block.entity.TileEntityBarriereSpecialRenderer;
                          import mod.common.block.entity.TileEntityCombiner;
                          import mod.common.block.entity.TileEntityCombinerSpecialRenderer;
                          import mod.common.block.entity.TileEntityCouveuse;
                          import mod.common.block.entity.TileEntityCouveuseSpecialRenderer;
                          import mod.common.block.entity.TileEntityEgg;
                          import mod.common.block.entity.TileEntityEggSpecialRenderer;
                          import mod.common.block.entity.TileEntityExtractor;
                          import mod.common.block.entity.TileEntityExtractorSpecialRenderer;
                          import mod.common.entity.EntityBrachiosaurus;
                          import mod.common.entity.EntityCoelophysis;
                          import mod.common.entity.EntityFlechette;
                          import mod.common.entity.EntityFrog;
                          import mod.common.entity.EntityTriceratops;
                          import mod.common.entity.EntityVelociraptors;
                          import mod.common.item.ItemRegister;
                          import net.minecraft.block.Block;
                          import net.minecraft.client.Minecraft;
                          import net.minecraft.client.renderer.BlockModelRenderer;
                          import net.minecraft.client.renderer.ItemModelMesher;
                          import net.minecraft.client.resources.model.ModelResourceLocation;
                          import net.minecraft.item.Item;
                          import net.minecraftforge.fml.client.registry.ClientRegistry;
                          import net.minecraftforge.fml.client.registry.RenderingRegistry;
                          public class ClientProxy extends CommonProxy
                          {
                          public static int tesrRenderId;
                          @Override
                          public void register()
                          {
                          ItemModelMesher mesher = Minecraft.getMinecraft().getRenderItem().getItemModelMesher();
                          System.out.println("Rendering Entity/TileEntity");
                          RenderingRegistry.registerEntityRenderingHandler(EntityFlechette.class, new RenderFlechette(Minecraft.getMinecraft().getRenderManager()));
                          RenderingRegistry.registerEntityRenderingHandler(EntityFrog.class, new RenderFrog(Minecraft.getMinecraft().getRenderManager(),new ModelFrog(), 0.5F));
                          RenderingRegistry.registerEntityRenderingHandler(EntityBrachiosaurus.class, new RenderBrachiosaurus(Minecraft.getMinecraft().getRenderManager(), new ModelBrachiosaurus(), 3.5F));
                          RenderingRegistry.registerEntityRenderingHandler(EntityCoelophysis.class, new RenderCoelophysis(Minecraft.getMinecraft().getRenderManager(), new ModelCoelophysis(), 0.5F));
                          RenderingRegistry.registerEntityRenderingHandler(EntityTriceratops.class, new RenderTriceratops(Minecraft.getMinecraft().getRenderManager(),new ModelTriceratops(), 3.5F));
                          RenderingRegistry.registerEntityRenderingHandler(EntityVelociraptors.class, new RenderVelociraptors(Minecraft.getMinecraft().getRenderManager(),new ModelVelociraptors(), 3.5F));
                          ClientRegistry.bindTileEntitySpecialRenderer(TileEntityBarriere.class, new TileEntityBarriereSpecialRenderer());
                          ClientRegistry.bindTileEntitySpecialRenderer(TileEntityEgg.class, new TileEntityEggSpecialRenderer());
                          ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCouveuse.class, new TileEntityCouveuseSpecialRenderer());
                          ClientRegistry.bindTileEntitySpecialRenderer(TileEntityExtractor.class, new TileEntityExtractorSpecialRenderer());
                          ClientRegistry.bindTileEntitySpecialRenderer(TileEntityCombiner.class, new TileEntityCombinerSpecialRenderer());
                          /* tesrRenderId = RenderingRegistry.getNextAvailableRenderId();
                          RenderingRegistry.registerBlockHandler(new TESRInventoryRenderer());
                          */
                          System.out.println("Rendering Items");
                          mesher.register(ItemRegister.itemADNofFrog, 0, new ModelResourceLocation(DinoCraft.MODID + ":item_ADNofFrog", "inventory"));
                          mesher.register(ItemRegister.itemADNofmosquito, 0, new ModelResourceLocation(DinoCraft.MODID + ":item_ADNofmosquito", "inventory"));
                          mesher.register(ItemRegister.itemADNofvelociraptors, 0, new ModelResourceLocation(DinoCraft.MODID + ":item_ADNofvelociraptors", "inventory"));
                          mesher.register(ItemRegister.itemAmbre, 0, new ModelResourceLocation(DinoCraft.MODID + ":item_Ambre", "inventory"));
                          mesher.register(ItemRegister.itemAmbrewithmosquito, 0, new ModelResourceLocation(DinoCraft.MODID + ":item_Ambrewithmmosquito", "inventory"));
                          mesher.register(ItemRegister.itemBloodofmosquito, 0, new ModelResourceLocation(DinoCraft.MODID + ":item_Bloodofmosquito", "inventory"));
                          mesher.register(ItemRegister.itemBlowGun, 0, new ModelResourceLocation(DinoCraft.MODID + ":item_Blowgun", "inventory"));
                          mesher.register(ItemRegister.itemCPU, 0, new ModelResourceLocation(DinoCraft.MODID + ":item_CPU", "inventory"));
                          mesher.register(ItemRegister.itemDart, 0, new ModelResourceLocation(DinoCraft.MODID + ":item_Dart", "inventory"));
                          mesher.register(ItemRegister.itemDartEmpty, 0, new ModelResourceLocation(DinoCraft.MODID + ":item_DartEmpty", "inventory"));
                          mesher.register(ItemRegister.itemEnhancer, 0, new ModelResourceLocation(DinoCraft.MODID + ":item_Enhancer", "inventory"));
                          mesher.register(ItemRegister.itemFrogLegs, 0, new ModelResourceLocation(DinoCraft.MODID + ":item_FrogLegs", "inventory"));
                          mesher.register(ItemRegister.itemFrogLegsCooked, 0, new ModelResourceLocation(DinoCraft.MODID + ":item_FrogLegsCooked", "inventory"));
                          mesher.register(ItemRegister.itemSap, 0, new ModelResourceLocation(DinoCraft.MODID + ":item_Sap", "inventory"));
                          mesher.register(ItemRegister.itemSapwithmosquito, 0, new ModelResourceLocation(DinoCraft.MODID + ":item_Sapwithmosquito", "inventory"));
                          mesher.register(ItemRegister.itemSuperAxe, 0, new ModelResourceLocation(DinoCraft.MODID + ":item_SuperAxe", "inventory"));
                          mesher.register(ItemRegister.itemSyringe, 0, new ModelResourceLocation(DinoCraft.MODID + ":item_Syringe", "inventory"));
                          mesher.register(ItemRegister.itemSyringewithblood, 0, new ModelResourceLocation(DinoCraft.MODID + ":item_SyringeWithBlood", "inventory"));
                          mesher.register(ItemRegister.itemSyringewithraptorblood, 0, new ModelResourceLocation(DinoCraft.MODID + ":item_SyringeWithRaptorBlood", "inventory"));
                          mesher.register(ItemRegister.itemZoom, 0, new ModelResourceLocation(DinoCraft.MODID + ":item_Zoom", "inventory"));
                          System.out.println("Rendering Blocks");
                          }
                          @Override
                          public void registerBlockTexture(Block block, int metadata, String name)
                          {
                          registerItemTexture(Item.getItemFromBlock(block), metadata, name);
                          }
                          @Override
                          public void registerBlockTexture(Block block, String name)
                          {
                          registerBlockTexture(block, 0, name);
                          }
                          }

                          ClassePrincipale

                          package mod;
                          import java.util.HashMap;
                          import mod.client.TickClient.TickClientHandlerEvent;
                          import mod.common.CommonProxy;
                          import mod.common.block.BlockRegister;
                          import mod.common.block.entity.RegisterTileEntity;
                          import mod.common.block.gui.GuiHandler;
                          import mod.common.block.recipe.RecipeRegisterBlock;
                          import mod.common.entity.EntityRegister;
                          import mod.common.item.ItemRegister;
                          import mod.common.item.recipe.RecipeRegister;
                          import mod.common.world.biome.BiomeRegister;
                          import mod.common.world.structure.DimensionRegister;
                          import net.minecraft.block.Block;
                          import net.minecraft.entity.EntityList;
                          import net.minecraft.item.Item;
                          import net.minecraftforge.common.MinecraftForge;
                          import net.minecraftforge.fml.common.FMLCommonHandler;
                          import net.minecraftforge.fml.common.Mod;
                          import net.minecraftforge.fml.common.Mod.EventHandler;
                          import net.minecraftforge.fml.common.Mod.Instance;
                          import net.minecraftforge.fml.common.ObfuscationReflectionHelper;
                          import net.minecraftforge.fml.common.SidedProxy;
                          import net.minecraftforge.fml.common.event.FMLInitializationEvent;
                          import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
                          import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
                          import net.minecraftforge.fml.common.network.NetworkRegistry;
                          @Mod(modid = DinoCraft.MODID, name = DinoCraft.Name, version = DinoCraft.Version)
                          public class DinoCraft
                          {
                          public static HashMap <class, integer="">maptoid;
                          public static final String MODID = "dinocraft";
                          public static final String Name = "DinoCraft";
                          public static final String Version = "1.0";
                          @Instance("dinocraft")
                          public static DinoCraft instance;
                          @SidedProxy(clientSide = "mod.client.ClientProxy", serverSide = "mod.common.CommonProxy")
                          public static CommonProxy proxy;
                          @EventHandler
                          public void preInit(FMLPreInitializationEvent event)
                          {
                          BlockRegister.register();
                          ItemRegister.register();
                          if(event.getSide().isClient())
                          {
                          FMLCommonHandler.instance().bus().register(new TickClientHandlerEvent());
                          MinecraftForge.EVENT_BUS.register(new TickClientHandlerEvent());
                          }
                          }
                          @EventHandler
                          public void init(FMLInitializationEvent event)
                          {
                          RegisterTileEntity.register();
                          RecipeRegister.register();
                          RecipeRegisterBlock.register();
                          BiomeRegister.register();
                          EntityRegister.register();
                          proxy.register();
                          proxy.registerBlockTexture(BlockRegister.BlockAmbre, "block_ambre");
                          NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandler());
                          }
                          @EventHandler
                          public void postInit(FMLPostInitializationEvent event)
                          {
                          /*DimensionRegister.register();*/
                          maptoid = ObfuscationReflectionHelper.getPrivateValue(EntityList.class, null, "classToIDMapping", "field_75624_e");
                          }
                          }

                          BlockRegister

                          package mod.common.block;
                          import mod.DinoCraft;
                          import mod.common.block.entity.TileEntityAnalyzer;
                          import mod.common.block.entity.TileEntityBarriere;
                          import net.minecraft.block.Block;
                          import net.minecraft.block.material.Material;
                          import net.minecraft.creativetab.CreativeTabs;
                          import net.minecraft.world.biome.BiomeGenBase;
                          import net.minecraftforge.fml.common.registry.GameRegistry;
                          public class BlockRegister
                          {
                          public static Block BlockBarriere;
                          public static Block BlockTronc;
                          public static Block BlockFeuille;
                          public static Block BlockPousse;
                          public static Block BlockAnalyzer;
                          public static Block BlockAmbre;
                          public static Block BlockEgg;
                          public static Block BlockEggIndominus;
                          public static Block BlockFossiliser;
                          public static Block BlockCouveuse;
                          public static Block BlockExtractor;
                          public static Block BlockCombiner;
                          public static Block BlockPortail;
                          public static void register()
                          {
                          BlockBarriere = new BlockBarriere(Material.rock).setCreativeTab(CreativeTabs.tabBlock);
                          BlockTronc = new BlockTronc().setCreativeTab(CreativeTabs.tabBlock).setHardness(2.0F);
                          BlockFeuille = new BlockFeuille(Material.leaves).setCreativeTab(CreativeTabs.tabBlock).setHardness(0.1F);
                          BlockPousse = new BlockPousse().setHardness(0.5F);
                          BlockAnalyzer = new BlockAnalyzer().setCreativeTab(CreativeTabs.tabBlock);
                          BlockAmbre = new BlockAmbre(Material.rock);
                          BlockEgg = new BlockEgg();
                          BlockEggIndominus = new BlockEggIndominus(Material.dragonEgg);
                          BlockFossiliser = new BlockFossiliser(Material.rock);
                          BlockCouveuse = new BlockBroody(Material.rock).setCreativeTab(CreativeTabs.tabBlock).setLightLevel(1.0F);
                          BlockExtractor = new BlockExtractor(Material.rock).setCreativeTab(CreativeTabs.tabBlock);
                          BlockCombiner = new BlockCombiner(Material.rock).setCreativeTab(CreativeTabs.tabBlock);
                          BlockPortail = new BlockPortail(Material.portal);
                          GameRegistry.registerBlock(BlockAnalyzer,"block_analyzer");
                          GameRegistry.registerBlock(BlockBarriere, "block_barriere");
                          GameRegistry.registerBlock(BlockTronc, "block_tronc");
                          GameRegistry.registerBlock(BlockFeuille, "block_feuille");
                          GameRegistry.registerBlock(BlockPousse, "block_pousse");
                          GameRegistry.registerBlock(BlockAmbre, "block_ambre");
                          GameRegistry.registerBlock(BlockEgg, ItemBlockEgg.class, "block_egg");
                          GameRegistry.registerBlock(BlockEggIndominus, "block_eggindominus");
                          GameRegistry.registerBlock(BlockFossiliser, "block_fossiliser");
                          GameRegistry.registerBlock(BlockCouveuse, "block_couveuse");
                          GameRegistry.registerBlock(BlockExtractor, "block_extractor");
                          GameRegistry.registerBlock(BlockCombiner, "block_combiner");
                          GameRegistry.registerBlock(BlockPortail, "block_portail");
                          }
                          }
                          ```</class,>

                          Oui ce gif est drôle.

                          1 réponse Dernière réponse Répondre Citer 0
                          • robin4002
                            robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 25 août 2015, 23:05

                            Il manque le register mesher pour ton bloc.

                            1 réponse Dernière réponse Répondre Citer 1
                            • Flow
                              Flow dernière édition par 25 août 2015, 23:07

                              Des fois je me demande comment je peut être aussi con T_T Merci robin ^^

                              Oui ce gif est drôle.

                              1 réponse Dernière réponse Répondre Citer 0
                              • BrokenSwing
                                BrokenSwing Moddeurs confirmés Rédacteurs dernière édition par 27 oct. 2015, 14:50

                                Moi c’est le contraire, la texture en main s’affiche mais pas quand je pose le bloc (il est invisible)

                                Classe principale :

                                @Mod(modid = "testmod", name = "Mod de test", version = "1.0.0")
                                public class TestMod {
                                @Instance("testmod")
                                public static TestMod instance;
                                public static final String MODID = "testmod";
                                @SidedProxy(clientSide = "in.olympe.javaware.testmod.proxy.ClientProxy", serverSide = "in.olympe.javaware.testmod.proxy.CommonProxy")
                                public static CommonProxy proxy;
                                public static Block machineTuto;
                                @EventHandler
                                public void preInit(FMLPreInitializationEvent event)
                                {
                                machineTuto = new BlockMachineTuto();
                                }
                                @EventHandler
                                public void init(FMLInitializationEvent event)
                                {
                                GameRegistry.registerBlock(machineTuto, "machinetuto");
                                GameRegistry.registerTileEntity(TileEntityMachineTuto.class, "tileentitymachinetuto");
                                proxy.registerRender();
                                proxy.registerBlockTexture(machineTuto, "machinetuto");
                                if(event.getSide().isClient())
                                {
                                MinecraftForge.EVENT_BUS.register(new EventClientListener());
                                }
                                FMLCommonHandler.instance().bus().register(new EventListener());
                                MinecraftForge.EVENT_BUS.register(new EventListener());
                                NetworkRegistry.INSTANCE.registerGuiHandler(instance, new GuiHandlerTestMod());
                                }
                                @EventHandler
                                public void postInit(FMLPostInitializationEvent event)
                                {
                                }
                                }

                                Client Proxy :

                                public class ClientProxy extends CommonProxy {
                                @Override
                                public void registerRender()
                                {
                                }
                                @Override
                                public void registerItemTexture(Item item, int metadata, String name)
                                {
                                ItemModelMesher mesher = Minecraft.getMinecraft().getRenderItem().getItemModelMesher();
                                mesher.register(item, metadata, new ModelResourceLocation(TestMod.MODID + ":" + name, "inventory"));
                                }
                                @Override
                                public void registerItemTexture(Item item, String name)
                                {
                                registerItemTexture(item, 0, name);
                                }
                                @Override
                                public void registerBlockTexture(Block block, int metadata, String name)
                                {
                                registerItemTexture(Item.getItemFromBlock(block), metadata, name);
                                }
                                @Override
                                public void registerBlockTexture(Block block, String name)
                                {
                                registerBlockTexture(block, 0, name);
                                }
                                }

                                Le json du blockstate :

                                {
                                "variants": {
                                "normal": { "model": "testmod:machinetuto" }
                                }
                                }

                                Le json du model :

                                {
                                "parent": "block/cube_all",
                                "textures": {
                                "all": "testmod:blocks/machinetuto"
                                }
                                }

                                Le json de l’item :

                                {
                                "parent": "testmod:block/machinetuto",
                                "display": {
                                "thirdperson": {
                                "rotation": [ 10, -45, 170 ],
                                "translation": [ 0, 1.5, -2.75 ],
                                "scale": [ 0.375, 0.375, 0.375 ]
                                }
                                }
                                }
                                1 réponse Dernière réponse Répondre Citer 0
                                • robin4002
                                  robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 27 oct. 2015, 16:37

                                  Logs ?

                                  1 réponse Dernière réponse Répondre Citer 0
                                  • BrokenSwing
                                    BrokenSwing Moddeurs confirmés Rédacteurs dernière édition par 27 oct. 2015, 16:47

                                    [17:49:22] [main/INFO] [GradleStart]: Extra: []
                                    [17:49:22] [main/INFO] [GradleStart]: Running with arguments: [–userProperties, {}, --assetsDir, C:/Users/Utilisateur/.gradle/caches/minecraft/assets, --assetIndex, 1.8, --accessToken, {REDACTED}, --version, 1.8, --tweakClass, net.minecraftforge.fml.common.launcher.FMLTweaker, --tweakClass, net.minecraftforge.gradle.tweakers.CoremodTweaker]
                                    [17:49:22] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLTweaker
                                    [17:49:22] [main/INFO] [LaunchWrapper]: Using primary tweak class name net.minecraftforge.fml.common.launcher.FMLTweaker
                                    [17:49:22] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.gradle.tweakers.CoremodTweaker
                                    [17:49:22] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLTweaker
                                    [17:49:22] [main/INFO] [FML]: Forge Mod Loader version 8.0.37.1334 for Minecraft 1.8 loading
                                    [17:49:22] [main/INFO] [FML]: Java is Java HotSpot(TM) 64-Bit Server VM, version 1.8.0_65, running on Windows 10:amd64:10.0, installed at C:\Program Files\Java\jre1.8.0_65
                                    [17:49:22] [main/INFO] [FML]: Managed to load a deobfuscated Minecraft name- we are in a deobfuscated environment. Skipping runtime deobfuscation
                                    [17:49:22] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.gradle.tweakers.CoremodTweaker
                                    [17:49:22] [main/INFO] [GradleStart]: Injecting location in coremod net.minecraftforge.fml.relauncher.FMLCorePlugin
                                    [17:49:22] [main/INFO] [GradleStart]: Injecting location in coremod net.minecraftforge.classloading.FMLForgePlugin
                                    [17:49:22] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker
                                    [17:49:22] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLDeobfTweaker
                                    [17:49:22] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.gradle.tweakers.AccessTransformerTweaker
                                    [17:49:22] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker
                                    [17:49:22] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker
                                    [17:49:22] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper
                                    [17:49:23] [main/ERROR] [FML]: The binary patch set is missing. Either you are in a development environment, or things are not going to work!
                                    [17:49:26] [main/ERROR] [FML]: FML appears to be missing any signature data. This is not a good thing
                                    [17:49:26] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper
                                    [17:49:26] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLDeobfTweaker
                                    [17:49:26] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.gradle.tweakers.AccessTransformerTweaker
                                    [17:49:26] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.TerminalTweaker
                                    [17:49:26] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.TerminalTweaker
                                    [17:49:26] [main/INFO] [LaunchWrapper]: Launching wrapped minecraft {net.minecraft.client.main.Main}
                                    [17:49:27] [Client thread/INFO]: Setting user: Player984
                                    [17:49:32] [Client thread/INFO]: LWJGL Version: 2.9.1
                                    [17:49:32] [Client thread/INFO] [MinecraftForge]: Attempting early MinecraftForge initialization
                                    [17:49:32] [Client thread/INFO] [FML]: MinecraftForge v11.14.1.1334 Initialized
                                    [17:49:33] [Client thread/INFO] [FML]: Replaced 204 ore recipies
                                    [17:49:33] [Client thread/INFO] [MinecraftForge]: Completed early MinecraftForge initialization
                                    [17:49:33] [Client thread/INFO] [FML]: Searching C:\Users\Utilisateur\Desktop\Minecraft modding\Forge\forge-1.8-11.14.1.1334\mods for mods
                                    [17:49:35] [Client thread/INFO] [FML]: Forge Mod Loader has identified 4 mods to load
                                    [17:49:35] [Client thread/INFO] [FML]: Attempting connection with missing mods [mcp, FML, Forge, testmod] at CLIENT
                                    [17:49:35] [Client thread/INFO] [FML]: Attempting connection with missing mods [mcp, FML, Forge, testmod] at SERVER
                                    [17:49:36] [Client thread/INFO]: Reloading ResourceManager: Default, FMLFileResourcePack:Forge Mod Loader, FMLFileResourcePack:Minecraft Forge, FMLFileResourcePack:Mod de test
                                    [17:49:36] [Client thread/INFO] [FML]: Processing ObjectHolder annotations
                                    [17:49:36] [Client thread/INFO] [FML]: Found 384 ObjectHolder annotations
                                    [17:49:36] [Client thread/INFO] [FML]: Configured a dormant chunk cache size of 0
                                    [17:49:36] [Client thread/INFO] [FML]: Applying holder lookups
                                    [17:49:36] [Client thread/INFO] [FML]: Holder lookups applied
                                    [17:49:37] [Sound Library Loader/INFO]: Starting up SoundSystem…
                                    [17:49:37] [Thread-7/INFO]: Initializing LWJGL OpenAL
                                    [17:49:37] [Thread-7/INFO]: (The LWJGL binding of OpenAL. For more information, see http://www.lwjgl.org)
                                    [17:49:38] [Thread-7/INFO]: OpenAL initialized.
                                    [17:49:38] [Sound Library Loader/INFO]: Sound engine started
                                    [17:49:43] [Client thread/INFO]: Created: 512x512 textures-atlas
                                    [17:49:44] [Client thread/INFO] [FML]: Forge Mod Loader has successfully loaded 4 mods
                                    [17:49:44] [Client thread/INFO]: Reloading ResourceManager: Default, FMLFileResourcePack:Forge Mod Loader, FMLFileResourcePack:Minecraft Forge, FMLFileResourcePack:Mod de test
                                    [17:49:45] [Client thread/INFO]: SoundSystem shutting down…
                                    [17:49:45] [Client thread/WARN]: Author: Paul Lamb, www.paulscode.com
                                    [17:49:45] [Sound Library Loader/INFO]: Starting up SoundSystem…
                                    [17:49:45] [Thread-9/INFO]: Initializing LWJGL OpenAL
                                    [17:49:45] [Thread-9/INFO]: (The LWJGL binding of OpenAL. For more information, see http://www.lwjgl.org)
                                    [17:49:45] [Thread-9/INFO]: OpenAL initialized.
                                    [17:49:45] [Sound Library Loader/INFO]: Sound engine started
                                    [17:49:49] [Client thread/INFO]: Created: 512x512 textures-atlas
                                    [17:49:59] [Server thread/INFO]: Starting integrated minecraft server version 1.8
                                    [17:49:59] [Server thread/INFO]: Generating keypair
                                    [17:49:59] [Server thread/INFO] [FML]: Injecting existing block and item data into this server instance
                                    [17:49:59] [Server thread/INFO] [FML]: Applying holder lookups
                                    [17:49:59] [Server thread/INFO] [FML]: Holder lookups applied
                                    [17:49:59] [Server thread/INFO] [FML]: Loading dimension 0 (New World) (net.minecraft.server.integrated.IntegratedServer@13fc6737)
                                    [17:49:59] [Server thread/INFO] [FML]: Loading dimension 1 (New World) (net.minecraft.server.integrated.IntegratedServer@13fc6737)
                                    [17:50:00] [Server thread/INFO] [FML]: Loading dimension -1 (New World) (net.minecraft.server.integrated.IntegratedServer@13fc6737)
                                    [17:50:00] [Server thread/INFO]: Preparing start region for level 0
                                    [17:50:01] [Server thread/INFO]: Preparing spawn area: 88%
                                    [17:50:01] [Server thread/INFO]: Changing view distance to 12, from 10
                                    [17:50:02] [Netty Local Client IO #0/INFO] [FML]: Server protocol version 1
                                    [17:50:02] [Netty Server IO #1/INFO] [FML]: Client protocol version 1
                                    [17:50:02] [Netty Server IO #1/INFO] [FML]: Client attempting to join with 4 mods : FML@8.0.37.1334,testmod@1.0.0,Forge@11.14.1.1334,mcp@9.05
                                    [17:50:02] [Netty Local Client IO #0/INFO] [FML]: [Netty Local Client IO #0] Client side modded connection established
                                    [17:50:03] [Server thread/INFO] [FML]: [Server thread] Server side modded connection established
                                    [17:50:03] [Server thread/INFO]: Player984[local:E:64f89e2b] logged in with entity id 76 at (-594.2845748776858, 4.0, 24.696510820793282)
                                    [17:50:03] [Server thread/INFO]: Player984 joined the game
                                    1 réponse Dernière réponse Répondre Citer 0
                                    • robin4002
                                      robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 27 oct. 2015, 17:23

                                      Étrange car il n’y a pas d’erreur dans les logs. Ton bloc est enregistré dans init ou dans preInit ?

                                      1 réponse Dernière réponse Répondre Citer 0
                                      • BrokenSwing
                                        BrokenSwing Moddeurs confirmés Rédacteurs dernière édition par 27 oct. 2015, 17:26

                                        preInit je l’instancie, puis je l’enregistre dans init, ma classe principale et plus haut (la première)

                                        1 réponse Dernière réponse Répondre Citer 0
                                        • robin4002
                                          robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 27 oct. 2015, 19:26

                                          Enregistre le bloc dans preInit.

                                          1 réponse Dernière réponse Répondre Citer 0
                                          • 1
                                          • 2
                                          • 3
                                          • 4
                                          • 1 / 4
                                          1 sur 76
                                          • Premier message
                                            1/76
                                            Dernier message
                                          Design by Woryk
                                          Contact / Mentions Légales

                                          MINECRAFT FORGE FRANCE © 2018

                                          Powered by NodeBB