• Register
    • Login
    • Search
    • Recent
    • Tags
    • Popular
    • Users
    • Groups

    Personnalise ton bloc

    Tutoriels des membres
    1.11.x
    3
    4
    1358
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • A
      aypristyle last edited by robin4002

      Sommaire

      • Introduction
      • Pré-requis
      • Code
        • Un bloc orientable
        • Un minerai
        • Un bloc translucide et lumineux
        • Un bloc type gravier
        • Quelques interactions avec votre bloc
        • Quelques propriétés bonus
      • Crédits

      Introduction

      Bonjour à tous ! Aujourd’hui on se retrouve pour un petit tutoriel qui va vous apprendre à personnaliser votre bloc pour en faire ce que vous voulez ! Chaque section est indépendante vous pouvez donc regarder uniquement ce qui vous intéresse !

      Pré-requis

      Créer un bloc basique

      Code

      Tout va se passer dans la classe de votre bloc je vous met ce que vous devez avoir avec des noms différents si vous avez bien suivi le pré-requis ci-dessus

      public class CopperBlocks extends Block{
          public static final String NAME = "copper_block";
      
          public CopperBlocks(Material material)
          {
              super(material);
      
              SimpleoresBlocks.setBlockName(this, NAME);
              setResistance(5.0F);
              setHardness(3.0F);
              setCreativeTab(ModSimpleores.blocksTab);
          }
      }
      

      Un bloc orientable :

      Pour créer un bloc orientable nous allons utiliser la propriété facing pour déterminer la direction du bloc. Cette propriété est utilisé pour des bloc comme le four ou bien le coffre
      Dans votre classe du bloc il faut mettre les propriété suivante

          //initialisation de la propriété
          @Override
          protected BlockStateContainer createBlockState()
          {
              return new BlockStateContainer(this, new IProperty[] {FACING});
          }
      
          public IBlockState getStateFromMeta(int meta)
          {
              EnumFacing enumfacing = EnumFacing.getFront(meta);
      
              if (enumfacing.getAxis() == EnumFacing.Axis.Y)
              {
                  enumfacing = EnumFacing.NORTH;
              }
      
              return this.getDefaultState().withProperty(FACING, enumfacing);
          }
      
          public IBlockState withMirror(IBlockState state, Mirror mirrorIn)
          {
              return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING)));
          }
      
          public int getMetaFromState(IBlockState state)
          {
              return ((EnumFacing)state.getValue(FACING)).getIndex();
          }
          //permet d'upadate la propriété en fonction du placement du joueur
          public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer)
          {
              return this.getDefaultState().withProperty(FACING, placer.getHorizontalFacing().getOpposite());
          }
      

      Et voici a quoi doit ressembler votre fichier json blockstates

      {
          "variants": {
              "facing=north": { "model": "modid:votrebloc" },
              "facing=south": { "model": "modid:votrebloc", "y": 180 },
              "facing=west":  { "model": "modid:votrebloc", "y": 270 },
              "facing=east":  { "model": "modid:votebloc", "y": 90 }
          }
      }
      

      Félicitations vous avez créer un bloc orientable

      Un minerai :

      Si vous voulez créer un minerai type diamant, lapis-lazuli la démarche est très simple tout d’abord changer l’héritage de la classe de votre Block de extends Block a extends BlockOre. Cela permettra à l’enchatement fortune de s’appliquer sur votre bloc

      Ensuite pour que votre bloc loote autre chose que le bloc en question comme avec le diamant ajoutez ceci

          public Item getItemDropped(IBlockState state, Random rand, int fortune)
          {
              return tonitem;
          }
      

      Si votre classe est commune a plusieurs bloc vous pouvez-mettre ceci pour que chaque bloc droppe un item particulier

          public Item getItemDropped(IBlockState state, Random rand, int fortune)
          {
              return this == Block1? item1 : (this == Block2 ? Item2 : Item.getItemFromBlock(this));
          }
      

      Si vous voulez que votre bloc droppe plusieurs items c’est cette fonction qu’il faut utiliser

          public int quantityDropped(Random random)
          {
              nombrededrop;
          }
      

      Ensuite vous pouvez aussi rajouter un bruit à votre minerai pour la finition pour ce faire ajouter ceci dans votre constructeur

          setSoundType(SoundType.BLOC);
      

      Toujours dans votre constructeur vous pouvez choisir avec quel outil et quel doit être le niveau de cette outil pour que votre bloc puisse être récupérer

          setHarvestLevel("ToolClass",int);
      

      ToolClass corespond a la classe de l’outil vous pouvez mettre “pickaxe” pour la pioche ou bien “axe” pour la hache. Le nombre entier représente le niveau de l’outil, 0 pour le bois, 1 pour la pierre, 2 pour le fer, et 3 pour le diamant

      La fonction suivante va servir a drop de l’xp quand vous aller casser votre bloc

          public int getExpDrop(IBlockState state, IBlockAccess world, BlockPos pos, int fortune)
          {
              return int;
          }
      

      L’int est le nombre de points d’xp a drop lors du cassage du bloc

      Si vous voulez utilisé votre minerai comme base de beacon ajouter simplement ceci

          public boolean isBeaconBase(IBlockAccess worldObj, BlockPos pos, BlockPos beacon)
          {
              return true;
          }
      

      Un bloc translucide et lumineux :

      Vous voulez que votre bloc soit translucide comme le verre ? Il suffit d’ajouter cette petite fonction dans la classe de votre bloc

      public boolean isTranslucent()
      {
          return true;
      }
      

      Pour ajuster l’opacité de votre bloc vous pouvez aussi utiliser la fonction ci-dessous a mettre dans votre constructeur

      setLightOpacity(int);
      

      Plus le nombre est bas moins il laissera passer la lumière
      sur l’image ci-dessous l’opacité du bloc rouge est a 0 est celle du bloc orange a 15 une torche est située sous les deux blocs

      Pour rendre votre bloc lumineux cela se joue encore dans le constructeur ajouter la fonction

          setLightLevel(float); 
      

      plus votre nombre sera haut plus il emettra de la lumière dans l’image ci-dessous la lumonisité du bloc rouge est a 2 est celle du bloc orange a 0

      Un bloc type gravier :

      Pour que votre bloc soit soumis à la gravité il suffit de changer l’héritage de votre bloc de extends Block a extends BlockFalling

      Quelques interactions avec votre bloc :

      Par exemple si vous voulez effectuer certaines actions lorsque votre bloc est détruit par les joueurs vous pouvez utiliser le constructeur

          public void onBlockDestroyedByPlayer(World worldIn, BlockPos pos, IBlockState state)
          {
          }
      

      Celui-ci sert lorsque le bloc est détruit lors d’une explosion

          public void onBlockDestroyedByExplosion(World worldIn, BlockPos pos, Explosion explosionIn)
      
          {
          }
      

      Toujours dans les explosions le constructeur suivant permet d’autoriser ou non le drop du bloc lorsqu’il est détruit par une explosion

          public boolean canDropFromExplosion(Explosion explosionIn)
          {
              return true;
          }
      

      Pour ajouter une fonction lorsque l’on fait clique droit sur votre bloc (utilisé notamment pour ouvrir les guis) c’est le constructeur suivant qu’il faut utilisé

          public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ)
          {
              return false;
          }
      

      mettez ce que vous voulez faire a la place du false
      Pour avoir une réaction lorsque une entité marche sur votre bloc utilisé ceci

          public void onEntityWalk(World worldIn, BlockPos pos, Entity entityIn)
          {
          }
      

      Quelques propriétés bonus :

      Vous pouvez aussi choisir si votre bloc pourra bruler ou non

          public boolean isBurning(IBlockAccess world, BlockPos pos)
          {
              return false;
          }
      

      Et la vitesse a laquelle celui-ci va brûler

          public int getFlammability(IBlockAccess world, BlockPos pos, EnumFacing face)
          {
              return int (entre 1 et 300);
          }
      

      plus le nombre est grand plus le bloc ce consumera vite

      Et si on peux poser un bloc par-dessus comme avec l’eau ou la lave

          public boolean isReplaceable(IBlockAccess worldIn, BlockPos pos)
          {
          }
      
      

      Si vous voulez que votre bloc puisse conduire la redstone ajouter ceci

          public boolean canConnectRedstone(IBlockState state, IBlockAccess world, BlockPos pos, @Nullable EnumFacing side)
          {
              return true;
          }
      

      Pour pouvoir ajouter une torche sur votre utilisé ceci

          public boolean canPlaceTorchOnTop(IBlockState state, IBlockAccess world, BlockPos pos)
          {
              return true;
          }
      

      Résultat

      J’espère que ce tutoriel vous aura été utile si vous avez des questions ou des remarques n’hésitez pas a me laisser un commentaire! Je compléterai ce tutoriel si besoin avec vos retours !

      Crédits

      Rédaction :

      • Aypristyle


      Ce tutoriel de Aypristyle publié sur 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

      **Je suis un membre apprécié et joueur, j'ai déjà obtenu 1[ point de réputation./…

      1 Reply Last reply Reply Quote 1
      • Video_Game25
        Video_Game25 last edited by

        Super tutoriel . Mais pour l’option de la base du beacon ça marche de ton coté ?

        1 Reply Last reply Reply Quote 0
        • A
          aypristyle last edited by

          Chez moi ça a fonctionné il m’a bien demandé de choisir mon booster si ça ne fonctionne pas chez toi essaye avec ce code (c’est le code que j’ai utilisé pour ajouter plusieurs bloc comme base de beacon)

           public boolean isBeaconBase(IBlockAccess worldObj, BlockPos pos, BlockPos beacon)
              {
                  return this == tonpackage.taclassebloc.bloc 
               }
          

          Pour moi ça a donné

          public boolean isBeaconBase(IBlockAccess worldObj, BlockPos pos, BlockPos beacon)
             {
                 return this == fr.priya.simpleores.blocks.SimpleoresBlocks.AMNETHYSTE_BLOCK;
             }
          

          **Je suis un membre apprécié et joueur, j'ai déjà obtenu 1[ point de réputation./…

          1 Reply Last reply Reply Quote 0
          • Dylem
            Dylem last edited by

            Sympa le tuto 🙂

            Si je t'ai aidé, n'hésite pas à cliquer sur le nombre vert en dessous de mon image de profil, pour me le faire savoir. Ca me motive pour continuer …

            1 Reply Last reply Reply Quote 0
            • 1 / 1
            • First post
              Last post
            Design by Woryk
            Contact / Mentions Légales

            MINECRAFT FORGE FRANCE © 2018

            Powered by NodeBB