1. Le forum de Minecraft-France va définitivement fermer ses portes. Celui-ci restera en lecture seule mais vous ne pourrez plus y apporter de nouveaux topics. Nous vous invitons à nous rejoindre sur le Discord de Minecraft-France qui permet de présenter vos projets, discuter avec la communauté etc.. Merci à tous d'avoir fait vivre ce forum de nombreuses années. Pour nous rejoindre sur Discord, Cliquez ici

[FORGE] [1.4.7] Orientation bloc et metadatas

Discussion dans 'Aide à la création de mod' créé par greg6614, 29 Déc 2013.

  1. greg6614

    greg6614 Nouveau

    Inscrit:
    31 Déc 2012
    Messages:
    1
    Points:
    60
    Sexe:
    Homme
    • Version:. 1.4.7
    • API utilisée(s): Forge
    • Recherche(s) effectuée(s): En 1 mois et demi j'ai eu le temps de parcourir les sites. :P
    • Explication détaillé du problème : Bonsoir, en voyant le titre on pourrait en effet croire que je n'ai pas chercher étant donné que la solution pourrait être donnée dans les tutos vidéo sur forge présent sur la chaîne d'ironcraft, mais le soucis c'est que mon problème n'est que partiellement résolu. Je souhaite orienter mon block en fonction de la position du joueur et de la où il regarde, j'utilise donc les metadatas permettant de modifier l'emplacement des textures en fonction de son emplacement, jusque là pas de soucis pour les faces "North" "Est" "West" et "South" mais pour ce qui est des faces "Up" et "Bottom", impossible de faire quoi que ce soit. En somme je veux pouvoir orienter mon bloc de la même manière qu'un piston, j'ai bien entendu passé des heures à fouiller dans les différents codes se rapportant aux pistons et tenter pas mal de solution mais sans succés, je vous post donc le code de mon bloc avec les 4 faces fonctionnelles et les 2 autres qui ne le sont pas.
    Merci d'avance si vous avez la solution à mon problème [​IMG]

    • Code(s) : BlockiKube.java
    • Code (cpp):
      package mod.iKube.Blocks;

      import java.util.List;

      import cpw.mods.fml.relauncher.Side;
      import cpw.mods.fml.relauncher.SideOnly;
      import mod.iKube.client.ClientProxy;
      import net.minecraft.block.Block;
      import net.minecraft.block.material.Material;
      import net.minecraft.creativetab.CreativeTabs;
      import net.minecraft.entity.EntityLiving;
      import net.minecraft.entity.player.EntityPlayer;
      import net.minecraft.item.ItemStack;
      import net.minecraft.util.MathHelper;
      import net.minecraft.world.IBlockAccess;
      import net.minecraft.world.World;

      public class BlockiKube extends Block
      {
         
          private int nbMetadata = 1;
          public static final String[] testType = new String[] {"0", "1", "2", "3", "4", "5"};

          public BlockiKube(int par1, int par2, Material par3Material)
          {
              super(par1, par2, par3Material);

          }
         
          public int getBlockTextureFromSideAndMetadata(int par1, int par2)
          {
              if (par2 == 0)
              {
                  if (par1 == 0 || par1 == 1 || par1 == 4 || par1 == 5)return 4;
                  if (par1 == 2 && par1 == 3)return 0;
                  else return 0;
              }
             
              if (par2 == 1)
              {
                  if (par1 == 0 || par1 == 1 || par1 == 2 || par1 == 3)return 4;
                  if (par1 == 5 && par1 == 4)return 0;
                  else return 0;
              }
              if (par2 == 2)
              {
                  if (par1 == 0 || par1 == 1 || par1 == 4 || par1 == 5)return 4;
                  if (par1 == 3 && par1 == 2)
                      return 0;
                  else return 0;
              }
              if (par2 == 3)
              {
                  if (par1 == 0 || par1 == 1 || par1 == 2 || par1 == 3)return 4;
                  if (par1 == 4 && par1 == 5)return 0;
                  else return 0;
              }
              if (par2 == 4)
              {
                  if (par1 == 2 || par1 == 3 || par1 == 4 || par1 == 5)return 4;
                  if (par1 == 0 && par1 == 1)return 0;
                  else return 0;
              }
              if (par2 == 5)
              {
                  if (par1 == 2 || par1 == 3 || par1 == 4 || par1 == 5)return 4;
                  if (par1 == 1 && par1 == 0)return 0;
                  else return 0;
              }
              else return this.blockIndexInTexture;


          }  
          public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLiving par5EntityLiving)
          {
              int var6 = MathHelper.floor_double((double)(par5EntityLiving.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3;
              int var7 = par1World.getBlockMetadata(par2, par3, par4) & 4;

              if (var6 == 0)
              {
                  par1World.setBlockMetadataWithNotify(par2, par3, par4, 0 | var7);
              }

              if (var6 == 1)
              {
                  par1World.setBlockMetadataWithNotify(par2, par3, par4, 1 | var7);
              }

              if (var6 == 2)
              {
                  par1World.setBlockMetadataWithNotify(par2, par3, par4, 2 | var7);
              }

              if (var6 == 3)
              {
                  par1World.setBlockMetadataWithNotify(par2, par3, par4, 3 | var7);
              }
              if (var6 == 4)
              {
                  par1World.setBlockMetadataWithNotify(par2, par3, par4, 4 | var7);
              }

              if (var6 == 5)
              {
                  par1World.setBlockMetadataWithNotify(par2, par3, par4, 5| var7);
              }
          }

          public void setBlockBoundsBasedOnState(IBlockAccess par1IBlockAccess, int par2, int par3, int par4)
          {
              this.updateiKubeBounds(par1IBlockAccess.getBlockMetadata(par2, par3, par4));
          }

          /**
           * Update the iKube block bounds based on the given metadata value.
           */

          public void updateiKubeBounds(int par1)
          {
              if (par1 == 0)
              {
                  this.setBlockBounds(0.0F, 0.0F, 0.999F, 1.0F, 1.0F, 1.0F);
              }
             
              if (par1 == 1)
              {
                  this.setBlockBounds(0.0F, 0.0F, 0.0F, 0.001F, 1.0F, 1.0F);
              }

              if (par1 == 2)
              {
                  this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.001F);
              }

              if (par1 == 3)
              {
                  this.setBlockBounds(0.999F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
              }

              if (par1 == 4)
              {
                  this.setBlockBounds(0.0F, 0.0F, 0.999F, 1.0F, 1.0F, 1.0F);
              }

              if (par1 == 5)
              {
                  this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.001F);
              }
          }
         
          public boolean isOpaqueCube()
          {
              return false;
          }

          public boolean renderAsNormalBlock()
          {
              return false;
          }

          public int getRenderType()
          {
              return 7;
          }
         
          @SideOnly(Side.CLIENT)

          public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List)
          {
              for (int var4 = 0; var4 < nbMetadata; ++var4)
              {
                  par3List.add(new ItemStack(par1, 1, var4));
              }
          }

      }
      A cela ce joint un autre problème lié à un autre projet, je créerai une nouvelle discussion pour celui-ci.
      Merci d'avance :D
     

Partager cette page