MFF

    Minecraft Forge France
    • Récent
    • Mots-clés
    • Populaire
    • Utilisateurs
    • Groupes
    • Forge Events
      • Automatique
      • Foncé
      • Clair
    • S'inscrire
    • Se connecter

    Bloc TESR / Collision

    Planifier Épinglé Verrouillé Déplacé Sans suite
    1.7.10
    21 Messages 4 Publieurs 3.8k Vues 1 Watching
    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.
    • FolganskyF Hors-ligne
      Folgansky Correcteurs
      dernière édition par

      Bonjour les gens,

      Petit soucis de collision avec des blocs à rendus spéciaux, ça arrive assez aléatoirement je pense et en cassant/reposant le bloc le soucis se règle (du moins temporairement)

      Le soucis est que le joueur peut rester bloquer en étant déplacé de haut en bas ou d’avant en arrière suivant la collision.

      Je pensais que régler les bordures de blocs suffisait pour régler les collisions avec celui-ci mais ça n’est peut-être pas la cas.
      Voici une classe d’un bloc TESR:

      package fr.folgansky.powerdeco.common;
      
      import cpw.mods.fml.relauncher.Side;
      import cpw.mods.fml.relauncher.SideOnly;
      import fr.folgansky.powerdeco.client.TileEntityBorne;
      import fr.folgansky.powerdeco.proxy.ClientProxy;
      import net.minecraft.block.Block;
      import net.minecraft.block.material.Material;
      import net.minecraft.entity.EntityLivingBase;
      import net.minecraft.item.ItemStack;
      import net.minecraft.tileentity.TileEntity;
      import net.minecraft.util.MathHelper;
      import net.minecraft.world.IBlockAccess;
      import net.minecraft.world.World;
      import net.minecraftforge.common.util.ForgeDirection;
      
      public class BlockBorne extends Block
      {
          protected BlockBorne(Material mat)
          {
              super(mat);
          }
      
          @Override
          public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z)
          {
              this.setBlockBounds(0.2F, 0.0F, 0.2F, 0.8F, 0.9F, 0.8F);
          }
      
          @Override
          public int damageDropped(int metadata)
          {
              return metadata;
          }
      
          @Override
          public boolean hasTileEntity(int metadata)
          {
              return true;
          }
      
          @Override
          public TileEntity createTileEntity(World world, int metadata)
          {
              return new TileEntityBorne();
          }
      
          @Override
          public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack)
          {
              if (stack.getItemDamage() == 0)
              {
                  TileEntity tile = world.getTileEntity(x, y, z);
                  if (tile instanceof TileEntityBorne)
                  {
                      int direction = MathHelper.floor_double(living.rotationYaw * 4.0F / 360.0F + 2.5D) & 3;
                      ((TileEntityBorne) tile).setDirection((byte) direction);
                  }
              }
          }
      
          @Override
          public boolean rotateBlock(World world, int x, int y, int z, ForgeDirection axis)
          {
              if ((axis == ForgeDirection.UP || axis == ForgeDirection.DOWN) && !world.isRemote
                      && world.getBlockMetadata(x, y, z) == 0)
              {
                  TileEntity tile = world.getTileEntity(x, y, z);
                  if (tile instanceof TileEntityBorne)
                  {
                      TileEntityBorne tileDirectional = (TileEntityBorne) tile;
                      byte direction = tileDirectional.getDirection();
                      direction++;
                      if (direction > 3)
                          direction = 0;
                      tileDirectional.setDirection(direction);
                      return true;
                  }
              }
              return false;
          }
      
          @Override
          public ForgeDirection[] getValidRotations(World world, int x, int y, int z)
          {
              return world.getBlockMetadata(x, y, z) == 0 ? new ForgeDirection[]
              { ForgeDirection.UP, ForgeDirection.DOWN } : ForgeDirection.VALID_DIRECTIONS;
          }
      
          @Override
          public boolean isOpaqueCube()
          {
              return false;
          }
      
          @Override
          public boolean renderAsNormalBlock()
          {
              return false;
          }
      
          public boolean canBeCollidedWith()
          {
              return true;
          }
      
          @Override
          @SideOnly(Side.CLIENT)
          public int getRenderType()
          {
              return ClientProxy.tesrRenderId;
          }
      }
      

      Un avis sur ce soucis et/ou il n’y a rien à y faire?

      1 réponse Dernière réponse Répondre Citer 0
      • BrokenSwingB Hors-ligne
        BrokenSwing Moddeurs confirmés Rédacteurs
        dernière édition par

        Et un ```java
        this.setBlockBounds(float minX, float minY, float minZ, float maxX, float maxY, float maxZ)

        EDIT : Sinon essai ```java
        @Override
        public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB box, List list, Entity entity)
           {
                   list.add(new AxisAlignedBB(0.2F, 0.0F, 0.2F, 0.8F, 0.9F, 0.8F));
               }
           }
        

        Ou encore ```java
        @Override
        public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) {}
        {
        world.getBlock(x, y, z).setBlockBounds(0.2F, 0.0F, 0.2F, 0.8F, 0.9F, 0.8F);
        }

        1 réponse Dernière réponse Répondre Citer 0
        • FolganskyF Hors-ligne
          Folgansky Correcteurs
          dernière édition par

          C’quoi la différence entre “world.getBlock(x, y, z)” et “this” au final?

          Ce n’est pas plus lourd de checker le bloc?

          1 réponse Dernière réponse Répondre Citer 0
          • BrokenSwingB Hors-ligne
            BrokenSwing Moddeurs confirmés Rédacteurs
            dernière édition par

            Je sais pas, tu as testé la solution avec addCollisionBoxesToList ?

            1 réponse Dernière réponse Répondre Citer 0
            • FolganskyF Hors-ligne
              Folgansky Correcteurs
              dernière édition par

              Eclipse réclame un constructeur pour AxisAlignedBB

              1 réponse Dernière réponse Répondre Citer 0
              • BrokenSwingB Hors-ligne
                BrokenSwing Moddeurs confirmés Rédacteurs
                dernière édition par

                Remplace par AxisAlignedBB.getBoundingBox(0.2F, 0.0F, 0.2F, 0.8F, 0.9F, 0.8F)

                1 réponse Dernière réponse Répondre Citer 0
                • FolganskyF Hors-ligne
                  Folgansky Correcteurs
                  dernière édition par

                  Là il dit que ça ne correspond à rien en fait. “fix setup” pour seule proposition.

                  1 réponse Dernière réponse Répondre Citer 0
                  • BrokenSwingB Hors-ligne
                    BrokenSwing Moddeurs confirmés Rédacteurs
                    dernière édition par

                    Bah je sais pas, moi il connait xD. En fait je ne vois pas pourquoi mettre this.this.setBlockBounds(0.2F, 0.0F, 0.2F, 0.8F, 0.9F, 0.8F); dans le constructeur ne fonctionne pas, ça devrait, après je sais pas si cette fonction change la boite collision

                    1 réponse Dernière réponse Répondre Citer 0
                    • SCAREXS Hors-ligne
                      SCAREX
                      dernière édition par

                      AxisAlignedBB n’a pas de constructeur publique, il faut utiliser la méthode statique AxisAlignedBB.getBoundingBox, tu as différentes fonctions pour les collisions : regarde le tutoriel sur les TESR pour voir quelles fonctions modifier

                      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
                      • AymericRedA Hors-ligne
                        AymericRed
                        dernière édition par

                        @‘Toutoune1008’:

                        C’quoi la différence entre “world.getBlock(x, y, z)” et “this” au final?

                        Ce n’est pas plus lourd de checker le bloc?

                        Aucune car c’est toujours la même instance du block pour tous les blocks de ce type dans le monde.

                        Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                        AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                        Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                        Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

                        1 réponse Dernière réponse Répondre Citer 0
                        • FolganskyF Hors-ligne
                          Folgansky Correcteurs
                          dernière édition par

                          Il n’y a aucune mention de “collision” dans le tuto de robin sur un rendu par TESR

                          1 réponse Dernière réponse Répondre Citer 0
                          • SCAREXS Hors-ligne
                            SCAREX
                            dernière édition par

                            https://www.minecraftforgefrance.fr/showthread.php?tid=1509#classe5

                            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
                            • FolganskyF Hors-ligne
                              Folgansky Correcteurs
                              dernière édition par

                              Ok ok, je rectifie mon propos:

                              Il n’y a rien de nouveau à mes yeux concernant la collision dans ce tuto.
                              Justement je fais exactement comme ça actuellement.

                              J’ai testé le conseil de le mettre dans le constructeur, ce qui ne pose pas de problème nouveau mais le problème qui m’amène ici persiste.

                              Problème:

                              Le joueur glitch dans mes blocs à rendu par TESR (bien que/alors que mon code résulte du tuto)
                              Pas tous, pas tout le temps, remplacer le bloc réduit temporairement le problème

                              1 réponse Dernière réponse Répondre Citer 0
                              • SCAREXS Hors-ligne
                                SCAREX
                                dernière édition par

                                Personnellement j’ai aucun problème alors que le code est le même :
                                http://puu.sh/psI2b.jpg

                                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
                                • AymericRedA Hors-ligne
                                  AymericRed
                                  dernière édition par

                                  Cela doit dépendre de la version de Forge.

                                  Si je vous ai aidé, n'oubliez pas d’être heureux, j'aiderai encore +

                                  AymericRed, moddeur expérimenté qui aide sur ce forum et qui peut accepter de faire un mod Forge rémunéré de temps en temps.

                                  Mes tutos : Table de craft, plugin NEI, plugin JEI, modifier l'overlay
                                  Je suis un membre apprécié et joueur, j'ai déjà obtenu 6 points de réputation.

                                  1 réponse Dernière réponse Répondre Citer 0
                                  • SCAREXS Hors-ligne
                                    SCAREX
                                    dernière édition par

                                    J’ai testé ce code sur une “vieille” version de forge : 1.7.10-10.13.4.1492

                                    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
                                    • FolganskyF Hors-ligne
                                      Folgansky Correcteurs
                                      dernière édition par

                                      Ouki, je suis un peu plus en arrière, j’utilise la 1448 mais c’est pareil je suppose.

                                      Est ce que bloquer l’update du tileEntity pourrait jouer? (Il est sur false en gros)

                                      1 réponse Dernière réponse Répondre Citer 0
                                      • SCAREXS Hors-ligne
                                        SCAREX
                                        dernière édition par

                                        La seule chose que j’ai modifié dans ton code c’est que j’ai retiré la TileEntity et donc la direction, en sachant que ton bloc n’a pas une boîte de collision différente pour chaque direction je ne voit pas d’où pourrait venir le problème, envoi une photo ou une vidéo parce que là je comprends pas comment c’est possible

                                        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
                                        • FolganskyF Hors-ligne
                                          Folgansky Correcteurs
                                          dernière édition par

                                          Le problème n’arrive pas systématiquement sur chaque bloc posé.

                                          Par contre maintenant que tu en parles j’ai des blocs dont la hitbox dépend de la direction qui lui cause problème relativement “plus souvent” que les autres.

                                          package fr.folgansky.powerdeco.common;
                                          
                                          import cpw.mods.fml.relauncher.Side;
                                          import cpw.mods.fml.relauncher.SideOnly;
                                          import fr.folgansky.powerdeco.client.TileEntityWoodPlank;
                                          import fr.folgansky.powerdeco.proxy.ClientProxy;
                                          import net.minecraft.block.Block;
                                          import net.minecraft.block.material.Material;
                                          import net.minecraft.entity.EntityLivingBase;
                                          import net.minecraft.item.ItemStack;
                                          import net.minecraft.tileentity.TileEntity;
                                          import net.minecraft.util.MathHelper;
                                          import net.minecraft.world.IBlockAccess;
                                          import net.minecraft.world.World;
                                          import net.minecraftforge.common.util.ForgeDirection;
                                          
                                          public class BlockWoodPlank extends Block
                                          {
                                              protected BlockWoodPlank(Material mat)
                                              {
                                                  super(mat);
                                              }    
                                          
                                              @Override
                                              public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z)
                                              {        
                                                  TileEntity tile = world.getTileEntity(x, y, z);
                                                  if(tile instanceof TileEntityWoodPlank)
                                                  {
                                                      TileEntityWoodPlank tileEntityWoodPlank = (TileEntityWoodPlank)tile;
                                                      switch(tileEntityWoodPlank.getDirection())
                                                      {
                                                          case 0:
                                                              world.getBlock(x, y, z).setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 2.0F, 0.1F);
                                                              break;
                                                          case 1:
                                                              world.getBlock(x, y, z).setBlockBounds(0.9F, 0.0F, 0.0F, 1.0F, 2.0F, 1.0F);
                                                              break;
                                                          case 2:
                                                              world.getBlock(x, y, z).setBlockBounds(0.0F, 0.0F, 0.9F, 1.0F, 2.0F, 1.0F);
                                                              break;
                                                          case 3:
                                                              world.getBlock(x, y, z).setBlockBounds(0.0F, 0.0F, 0.0F, 0.1F, 2.0F, 1.0F);
                                                              break;
                                                      }
                                                  }
                                              }
                                          
                                              @Override
                                              public int damageDropped(int metadata)
                                              {
                                                  return metadata;
                                              }
                                          
                                              @Override
                                              public boolean hasTileEntity(int metadata)
                                              {
                                                  return true;
                                              }
                                          
                                              @Override
                                              public TileEntity createTileEntity(World world, int metadata)
                                              {
                                                  return new TileEntityWoodPlank();
                                              }
                                          
                                              @Override
                                              public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack)
                                              {
                                                  if (stack.getItemDamage() == 0)
                                                  {
                                                      TileEntity tile = world.getTileEntity(x, y, z);
                                                      if (tile instanceof TileEntityWoodPlank)
                                                      {
                                                          int direction = MathHelper.floor_double(living.rotationYaw * 4.0F / 360.0F + 2.5D) & 3;
                                                          ((TileEntityWoodPlank) tile).setDirection((byte) direction);
                                                      }
                                                  }
                                              }
                                          
                                              @Override
                                              public boolean rotateBlock(World world, int x, int y, int z, ForgeDirection axis)
                                              {
                                                  if ((axis == ForgeDirection.UP || axis == ForgeDirection.DOWN) && !world.isRemote
                                                          && world.getBlockMetadata(x, y, z) == 0)
                                                  {
                                                      TileEntity tile = world.getTileEntity(x, y, z);
                                                      if (tile instanceof TileEntityWoodPlank)
                                                      {
                                                          TileEntityWoodPlank tileDirectional = (TileEntityWoodPlank) tile;
                                                          byte direction = tileDirectional.getDirection();
                                                          direction++;
                                                          if (direction > 3)
                                                              direction = 0;
                                                          tileDirectional.setDirection(direction);
                                                          return true;
                                                      }
                                                  }
                                                  return false;
                                              }
                                          
                                              @Override
                                              public ForgeDirection[] getValidRotations(World world, int x, int y, int z)
                                              {
                                                  return world.getBlockMetadata(x, y, z) == 0 ? new ForgeDirection[]
                                                  { ForgeDirection.UP, ForgeDirection.DOWN } : ForgeDirection.VALID_DIRECTIONS;
                                              }
                                          
                                              @Override
                                              public boolean isOpaqueCube()
                                              {
                                                  return false;
                                              }
                                          
                                              @Override
                                              public boolean renderAsNormalBlock()
                                              {
                                                  return false;
                                              }
                                          
                                              public boolean canBeCollidedWith()
                                              {
                                                  return true;
                                              }
                                          
                                              @Override
                                              @SideOnly(Side.CLIENT)
                                              public int getRenderType()
                                              {
                                                  return ClientProxy.tesrRenderId;
                                              }
                                          }
                                          

                                          Mais j’ai simplement suivi le tuto encore une fois.

                                          Le problème pourrait provenir de la tileEntity qui est “mal” update?

                                          1 réponse Dernière réponse Répondre Citer 0
                                          • SCAREXS Hors-ligne
                                            SCAREX
                                            dernière édition par

                                            Rajoute un System.out.prinln pour vérifier la direction, ça peut aussi venir d’une mauvaise synchro client-serveur

                                            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
                                            • 1
                                            • 2
                                            • 1 / 2
                                            • Premier message
                                              Dernier message
                                            Design by Woryk
                                            ContactMentions Légales

                                            MINECRAFT FORGE FRANCE © 2024

                                            Powered by NodeBB