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

    Résolu [1.12.2] Faire une rotation de la hitbox

    1.12.x
    4
    19
    1635
    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.
    • TheXrayFR
      TheXrayFR dernière édition par

      Bonjour je vien vers vous pour savoir si ses possible de faire une rotation selon la position du bock (hit box personnaliser)

      voici le code java de ma class:

      package fr.********.*********.Block;
      
      import java.util.Random;
      
      import fr.********.*********.Main;
      import fr.********.*********.Blocks.BlockBase;
      import net.minecraft.block.material.Material;
      import net.minecraft.block.properties.IProperty;
      import net.minecraft.block.properties.PropertyDirection;
      import net.minecraft.block.state.BlockStateContainer;
      import net.minecraft.block.state.IBlockState;
      import net.minecraft.entity.EntityLivingBase;
      import net.minecraft.item.Item;
      import net.minecraft.util.BlockRenderLayer;
      import net.minecraft.util.EnumFacing;
      import net.minecraft.util.EnumParticleTypes;
      import net.minecraft.util.Mirror;
      import net.minecraft.util.Rotation;
      import net.minecraft.util.math.AxisAlignedBB;
      import net.minecraft.util.math.BlockPos;
      import net.minecraft.world.IBlockAccess;
      import net.minecraft.world.World;
      
      public class SignalBar extends BlockBase {
      
      	public SignalBar(String name, Material material) {
      		super(name, material);
      		this.setCreativeTab(Main.tabfamilygame);
      		this.setSoundType(getSoundType().STONE);
      		this.setHardness(3.0F);
      		this.setDefaultState(this.blockState.getBaseState().withProperty(FACING, EnumFacing.NORTH));
      	}
      
      	public static final AxisAlignedBB SIGNALBARE_AABB = new AxisAlignedBB(0.0625 * 2, 0, 0.0625 * 2, 0.0625 * 14, 0.0625 * 13, 0.0625 * 14);
      	
      	public boolean isOpaqueCube(IBlockState state) {
      		return false;
      	}
      	
      	
      	
      	
      	public static final PropertyDirection FACING = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL);
      	
      	public IBlockState withRotation(IBlockState state, Rotation rot)
          {
              return state.withProperty(FACING, rot.rotate((EnumFacing)state.getValue(FACING)));
          }
      	
      	public IBlockState withMirror(IBlockState state, Mirror mirrorIn)
          {
              return state.withRotation(mirrorIn.toRotation((EnumFacing)state.getValue(FACING)));
          }
      	
          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());
          }
      
          public IBlockState getStateFromMeta(int meta)
          {
              return this.getDefaultState().withProperty(FACING, EnumFacing.getHorizontal(meta));
          }
      
          public int getMetaFromState(IBlockState state)
          {
              return ((EnumFacing)state.getValue(FACING)).getHorizontalIndex();
          }
      
          protected BlockStateContainer createBlockState()
          {
              return new BlockStateContainer(this, new IProperty[] {FACING});
          }
      	
      	
      	
      	
      	
      	
      	public boolean isFullCube(IBlockState state) {
      		return false;
      	}
      	
      	public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos)
      	{
      		return SIGNALBARE_AABB;
      	}
      
      }
      
      
      1 réponse Dernière réponse Répondre Citer 0
      • LeBossMax2
        LeBossMax2 dernière édition par

        Il n’y a pas de fonction qui fait directement la rotation d’un AABB, donc ce que tu peux faire c’est créer 4 AABB, une par direction et dans getBoundingBox retourner l’AABB qui correspond à la rotation du block.

        1 réponse Dernière réponse Répondre Citer 1
        • TheXrayFR
          TheXrayFR dernière édition par

          tu peux me fair un exemple ou pas ?

          LeBossMax2 1 réponse Dernière réponse Répondre Citer 0
          • LeBossMax2
            LeBossMax2 @TheXrayFR dernière édition par

            Sur quoi tu bloque ?

            1 réponse Dernière réponse Répondre Citer 1
            • TheXrayFR
              TheXrayFR dernière édition par

              Les 4 AABB je sais pas comment faire

              1 réponse Dernière réponse Répondre Citer 0
              • LeBossMax2
                LeBossMax2 dernière édition par LeBossMax2

                Pour les AABB, il faut juste mettre les bonnes valeurs pour que ça corresponde à ce que tu veux. Voici un exemple, c’est pour qu block plat accroché au mur (Un peu comme un item frame ou une peinture, mais c’est un bloc) :

                protected static final AxisAlignedBB[] MY_AABB_ARRAY = {new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.1875D), //South
                							new AxisAlignedBB(0.8125D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), //West
                							new AxisAlignedBB(0.0D, 0.0D, 0.8125D, 1.0D, 1.0D, 1.0D), //North
                							new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.1875D, 1.0D, 1.0D)};//East
                	
                

                Et dans ton getBoundingBox, tu peux récupérer l’AABB dans le tableau à partir de l’indice horizontal du facing.

                1 réponse Dernière réponse Répondre Citer 1
                • TheXrayFR
                  TheXrayFR dernière édition par

                  @lebossmax2 a dit dans [1.12.2] Faire une rotation de la hitbox :

                  protected static final AxisAlignedBB[] MY_AABB_ARRAY = {new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.1875D), //South
                  new AxisAlignedBB(0.8125D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), //West
                  new AxisAlignedBB(0.0D, 0.0D, 0.8125D, 1.0D, 1.0D, 1.0D), //North
                  new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.1875D, 1.0D, 1.0D)};

                  protected static final AxisAlignedBB[] SIGNALBARE_AABB = {new AxisAlignedBB(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.1875D), //South
                                                                              new AxisAlignedBB(0.8125D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D), //West
                                                                              new AxisAlignedBB(0.0D, 0.0D, 0.8125D, 1.0D, 1.0D, 1.0D), //North
                                                                              new AxisAlignedBB(0.0D, 0.0D, 0.0D, 0.1875D, 1.0D, 1.0D)};
                  

                  la je changerais les valeur plus tard.

                  public AxisAlignedBB[] getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos)
                  	{
                  		return SIGNALBARE_AABB;
                  	}
                  

                  J’ais mie comme tu a dit mes la je planche ay niveaux du AxisAlignedBB[] qui est souligner en rouge

                  1 réponse Dernière réponse Répondre Citer 0
                  • LeBossMax2
                    LeBossMax2 dernière édition par

                    Alors non, getBoundingBox doit toujours retourner un AxisAlignedBB, pas un AxisAlignedBB[]. (D’ailleurs, tu devrais utiliser l’annotation @Override pour être sûr de ne pas te tromper dans la déclaration de la fonction). Et il ne faut pas retourner le tableau en entier, mais seulement l’élément qui t’intéresse en fonction de la rotation. (Tu peux obtenir la rotation du block en faisant state.getValue(FACING))

                    1 réponse Dernière réponse Répondre Citer 0
                    • TheXrayFR
                      TheXrayFR dernière édition par

                      @lebossmax2 a dit dans [1.12.2] Faire une rotation de la hitbox :

                      state.getValue(FACING)

                      @Override
                      	public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos)
                      	{
                      		return SIGNALBARE_AABB;
                      	}
                      

                      le SIGNALBARE_AABB est en rouge

                      1 réponse Dernière réponse Répondre Citer 0
                      • LeBossMax2
                        LeBossMax2 dernière édition par

                        C’est pour ça que j’ai dit qu’il faut pas retourner le tableau en entier

                        1 réponse Dernière réponse Répondre Citer 1
                        • TheXrayFR
                          TheXrayFR dernière édition par

                          comment sa ?

                          1 réponse Dernière réponse Répondre Citer 0
                          • SpyMan
                            SpyMan dernière édition par

                            tu retourne le bon item dans le tableau
                            exemple : un tableau ou array en englais c’est une liste d’objets que tu peut recupérer grace a leur index
                            ARRAY[0] = le premier objet dans ton tableau

                            dans ton cas le tableau contient 4 items
                            donc tu a les index de 0 a 3 (soit 4 valeurs)
                            note : en informatique on commence toujours de 0

                            donc en fonction de la rotation tu recup le bon objet avec le bon index dans le tableau

                            0 = south
                            1 = west
                            2 = north
                            3 = east

                            voila les index pour chaque boudingbox de ton tableau

                            tu a plus qu’a recup le bon bon AxisAlignedBB en fonction de l’orientation de ton block

                            1 réponse Dernière réponse Répondre Citer 1
                            • TheXrayFR
                              TheXrayFR dernière édition par

                              Pourrais tu me donner mes Code d’exemple ? stp

                              1 réponse Dernière réponse Répondre Citer 0
                              • TheXrayFR
                                TheXrayFR dernière édition par

                                plus personne repond a mes publication ?

                                1 réponse Dernière réponse Répondre Citer 0
                                • robin4002
                                  robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                                  La fonction qu’il te faut est déjà utilisé dans ta classe.
                                  C’est la fonction state.getValue(FACING)).getHorizontalIndex()

                                  TheXrayFR 1 réponse Dernière réponse Répondre Citer 0
                                  • TheXrayFR
                                    TheXrayFR @robin4002 dernière édition par

                                    @robin4002 oui mes comment je doit formuler le code mois je ses pas du tous coder

                                    1 réponse Dernière réponse Répondre Citer 0
                                    • TheXrayFR
                                      TheXrayFR dernière édition par

                                      tous le monde me dit d’utiliser le state mes je ses pas comment lorganiser

                                      1 réponse Dernière réponse Répondre Citer 0
                                      • robin4002
                                        robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par

                                                @Override
                                        	public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos)
                                        	{
                                        		return SIGNALBARE_AABB[state.getValue(FACING)).getHorizontalIndex()];
                                        	}
                                        
                                        1 réponse Dernière réponse Répondre Citer 1
                                        • TheXrayFR
                                          TheXrayFR dernière édition par

                                          @robin4002 a dit dans [1.12.2] Faire une rotation de la hitbox :

                                              @Override
                                          

                                          public AxisAlignedBB getBoundingBox(IBlockState state, IBlockAccess source, BlockPos pos)
                                          {
                                          return SIGNALBARE_AABB[state.getValue(FACING)).getHorizontalIndex()];
                                          }

                                          merci !! beaucoup

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

                                          MINECRAFT FORGE FRANCE © 2018

                                          Powered by NodeBB