MFF

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

    Rendu ISBRH - Hitbox qui bouge

    Planifier Épinglé Verrouillé Déplacé Résolu 1.7.x
    1.7.10
    8 Messages 4 Publieurs 1.5k 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.
    • K Hors-ligne
      kylian-1452
      dernière édition par

      Bon, bha c’est encore moi… Je pense avoir bien compris le fonctionnement du rendu ISBRH, j’ai réussi à les orienter selon la position que je veux, donc jusque là tout va bien mais étant donné que je travaille avec des hitxboxs réduites (celle des walls), je vois que selon mon orientation elles se déplacent également…

       Donc sur ce premier screen on voit que la hitbox est fonctionnelle, elle ne bug pas

       Là on voit que la hitbox est buguée

      Elle change uniquement selon où je suis, donc de base, elle est correcte.

      Voici ma classe principale:

      package com.mod.trillium.blocks;
      
      import java.util.List;
      
      import com.mod.trillium.proxy.ClientProxy;
      
      import cpw.mods.fml.relauncher.Side;
      import cpw.mods.fml.relauncher.SideOnly;
      import net.minecraft.block.Block;
      import net.minecraft.block.material.Material;
      import net.minecraft.entity.Entity;
      import net.minecraft.entity.EntityLivingBase;
      import net.minecraft.init.Blocks;
      import net.minecraft.item.ItemStack;
      import net.minecraft.util.AxisAlignedBB;
      import net.minecraft.util.IIcon;
      import net.minecraft.util.MathHelper;
      import net.minecraft.world.IBlockAccess;
      import net.minecraft.world.World;
      
      public class BlockRenduIS extends Block {
      public BlockRenduIS(Material p_i45394_1_) {
      super(p_i45394_1_);
      }
      
      @SideOnly(Side.CLIENT)
      public float getAmbientOcclusionLightValue() {
      return 1.0F;
      }
      
      public boolean renderAsNormalBlock() {
      return false;
      }
      
      public boolean isOpaqueCube() {
      return false;
      }
      
      @SideOnly(Side.CLIENT)
      public int getRenderType() {
      return ClientProxy.renderIsbrh;
      }
      
      @SideOnly(Side.CLIENT)
      public boolean shouldSideBeRendered(IBlockAccess state, int x, int y, int z, int side) {
      return true;
      }
          public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB axisAlignedBB, List list, Entity entity)
          {
              if(world.getBlockMetadata(x, y, z) == 0)
              {
              this.setBlockBounds(0.25F, 0.0F, 0.50F, 0.75F, 1.0F, 1.0F);
                  super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, list, entity);
      
              }
      
              if(world.getBlockMetadata(x, y, z) == 1)
              {
              this.setBlockBounds(0.0F, 0.0F, 0.25F, 0.50F, 1.0F, 0.75F);
                  super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, list, entity);
              }
      
              if(world.getBlockMetadata(x, y, z) == 2)
              {
              this.setBlockBounds(0.25F, 0.0F, 0.0F, 0.75F, 1.0F, 0.50F);
                  super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, list, entity);
              }
      
              if(world.getBlockMetadata(x, y, z) == 3)
              {
              this.setBlockBounds(0.50F, 0.0F, 0.25F, 1.0F, 1.0F, 0.75F);
                  super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, list, entity);
              }
          }
          public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack)
          {
              int direction = MathHelper.floor_double((double)(living.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3;
              world.setBlockMetadataWithNotify(x, y, z, direction, 2);
          }
      
      }
      

      Le rendu:

      package com.mod.trillium.renderer;
      
      import java.util.List;
      
      import org.lwjgl.opengl.GL11;
      
      import com.mod.trillium.proxy.ClientProxy;
      
      import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
      import cpw.mods.fml.relauncher.Side;
      import cpw.mods.fml.relauncher.SideOnly;
      import net.minecraft.block.Block;
      import net.minecraft.client.renderer.RenderBlocks;
      import net.minecraft.client.renderer.Tessellator;
      import net.minecraft.entity.Entity;
      import net.minecraft.util.AxisAlignedBB;
      import net.minecraft.world.IBlockAccess;
      import net.minecraft.world.World;
      
      public class RenderBlockIsbrh implements ISimpleBlockRenderingHandler
      {
          @Override
          public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer)
          {
      Tessellator tessellator = Tessellator.instance;
      renderer.setRenderBounds(0.25F, 0.0F, 0.25F, 0.75F, 1.0F, 0.75F);
      this.renderInInventory(tessellator, renderer, block, metadata);
      
          }
      
          @Override
          public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer)
          {
          if(world.getBlockMetadata(x, y, z) == 0)
              {
                  renderer.setRenderBounds(0.25F, 0.0F, 0.50F, 0.75F, 1.0F, 1.0F);
                  renderer.renderStandardBlock(block, x, y, z);
              }
      
              if(world.getBlockMetadata(x, y, z) == 1)
              {
                  renderer.setRenderBounds(0.0F, 0.0F, 0.25F, 0.50F, 1.0F, 0.75F);
                  renderer.renderStandardBlock(block, x, y, z);
              }
      
              if(world.getBlockMetadata(x, y, z) == 2)
              {
                  renderer.setRenderBounds(0.25F, 0.0F, 0.0F, 0.75F, 1.0F, 0.50F);
                  renderer.renderStandardBlock(block, x, y, z);
              }
      
              if(world.getBlockMetadata(x, y, z) == 3)
              {
                  renderer.setRenderBounds(0.50F, 0.0F, 0.25F, 1.0F, 1.0F, 0.75F);
                  renderer.renderStandardBlock(block, x, y, z);
              }
      return true;
          }
      
      @Override
          public boolean shouldRender3DInInventory(int modelId)
          {
              return true;
          }
      
          @Override
          public int getRenderId()
          {
              return ClientProxy.renderIsbrh;
          }
      
          private void renderInInventory(Tessellator tessellator, RenderBlocks renderer, Block block, int metadata)
          {
              GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
              tessellator.startDrawingQuads();
              tessellator.setNormal(0.0F, -1F, 0.0F);
              renderer.renderFaceYNeg(block, 0.0D, 0.0D, 0.0D, block.getIcon(0, metadata));
              tessellator.draw();
              tessellator.startDrawingQuads();
              tessellator.setNormal(0.0F, 1.0F, 0.0F);
              renderer.renderFaceYPos(block, 0.0D, 0.0D, 0.0D, block.getIcon(1, metadata));
              tessellator.draw();
              tessellator.startDrawingQuads();
              tessellator.setNormal(0.0F, 0.0F, -1F);
              renderer.renderFaceZNeg(block, 0.0D, 0.0D, 0.0D, block.getIcon(2, metadata));
              tessellator.draw();
              tessellator.startDrawingQuads();
              tessellator.setNormal(0.0F, 0.0F, 1.0F);
              renderer.renderFaceZPos(block, 0.0D, 0.0D, 0.0D, block.getIcon(3, metadata));
              tessellator.draw();
              tessellator.startDrawingQuads();
              tessellator.setNormal(-1F, 0.0F, 0.0F);
              renderer.renderFaceXNeg(block, 0.0D, 0.0D, 0.0D, block.getIcon(4, metadata));
              tessellator.draw();
              tessellator.startDrawingQuads();
              tessellator.setNormal(1.0F, 0.0F, 0.0F);
              renderer.renderFaceXPos(block, 0.0D, 0.0D, 0.0D, block.getIcon(5, metadata));
              tessellator.draw();
              GL11.glTranslatef(0.5F, 0.5F, 0.5F);
          }
      }
      

      D’après moi, tout devrait venir de ma classe principale mais je ne comprends pas bien le système de mathématiques et je n’arrive donc pas à déceler le souci. Peut-être le Rendu n’est-il pas fait pour faire des hitboxs réduites ?

      Merci beaucoup de votre attention,
      Kylian.

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

        Dans ton deuxième code ligne 54 tu es sur qu’il faut mettre des 1 et non des 0 ?

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

        1 réponse Dernière réponse Répondre Citer 0
        • K Hors-ligne
          kylian-1452
          dernière édition par

          Non, en fait cela défini l’apparence, et elle est parfaitement comme je le veux, c’est le premier code qui influe les hitbox mais j’ai mis les deux par précaution

          1 réponse Dernière réponse Répondre Citer 0
          • K Hors-ligne
            kylian-1452
            dernière édition par

            Up  :interrogation:

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

              C’est la hitbox ou le rendu qui est bugué pour toi ?

              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
              • K Hors-ligne
                kylian-1452
                dernière édition par

                C’est uniquement la hitbox, le rendu est impeccable, la hitbox se déplace selon ma position mais se place correctement de base, c’est uniquement une fois un déplacement effectué…

                    public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack)
                    {
                        int direction = MathHelper.floor_double((double)(living.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3;
                        world.setBlockMetadataWithNotify(x, y, z, direction, 2);
                

                j’imagine que c’est ces lignes qui sont à la base du problème, étant donné que une fois que je supprime ces lignes, la hitbox ne bouge plus mais alors le bloc n’a qu’une seule position (donc plus de metadatas reconnues)

                La seule solution que j’ai trouvée est pas très agréable pour les joueurs (4 blocs différents) et on s’y perdrait un peu…

                Merci de me venir en aide, vraiment !

                Bonne soirée, Kylian

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

                  Donc si j’ai compris ton block est orientable selon l’orientation où on le pose, mais la hitbox ne suit pas. Pour faire en sorte qu’elle s’adapter, il faut l’adapter à la metadata (hitbox) du block, il suffit d’implémenter cette fonction ```java
                  @Override
                  public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z)
                  {

                  }

                  PS : à vérifier mais tu devrais pouvoir retirer "addCollisionBoxesToList" par la même occasion.

                  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
                  • K Hors-ligne
                    kylian-1452
                    dernière édition par

                    [Edité]

                    Voilà, alors Aymeric, c’est la deuxième fois que tu m’aides à résoudre un souci et sincèrement, merci ! Cela faisait plusieurs semaines que je bloquais sur l’affaire … 😛

                    Si l’on retire le “addCollisionBoxesToList”, il y a des bugs où l’on peut passer au travers, en le laissant, tout fonctionne comme je le souhaite 😉

                    Pour ceux que ça intéresse:

                    package com.mod.trillium.blocks;
                    
                    import java.util.List;
                    
                    import com.mod.trillium.proxy.ClientProxy;
                    
                    import cpw.mods.fml.relauncher.Side;
                    import cpw.mods.fml.relauncher.SideOnly;
                    import net.minecraft.block.Block;
                    import net.minecraft.block.material.Material;
                    import net.minecraft.entity.Entity;
                    import net.minecraft.entity.EntityLivingBase;
                    import net.minecraft.init.Blocks;
                    import net.minecraft.item.ItemStack;
                    import net.minecraft.util.AxisAlignedBB;
                    import net.minecraft.util.IIcon;
                    import net.minecraft.util.MathHelper;
                    import net.minecraft.world.IBlockAccess;
                    import net.minecraft.world.World;
                    
                    public class BlockRenduIS extends Block {
                    public BlockRenduIS(Material p_i45394_1_) {
                    super(p_i45394_1_);
                    }
                    
                    @SideOnly(Side.CLIENT)
                    public float getAmbientOcclusionLightValue() {
                    return 1.0F;
                    }
                    
                    public boolean renderAsNormalBlock() {
                    return false;
                    }
                    
                    public boolean isOpaqueCube() {
                    return false;
                    }
                    
                    @SideOnly(Side.CLIENT)
                    public int getRenderType() {
                    return ClientProxy.renderIsbrh;
                    }
                    
                    @SideOnly(Side.CLIENT)
                    public boolean shouldSideBeRendered(IBlockAccess state, int x, int y, int z, int side) {
                    return true;
                    }
                        public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB axisAlignedBB, List list, Entity entity)
                        {
                            if(world.getBlockMetadata(x, y, z) == 0)
                            {
                            this.setBlockBounds(0.25F, 0.0F, 0.50F, 0.75F, 1.0F, 1.0F);
                                super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, list, entity);
                            }
                    
                            if(world.getBlockMetadata(x, y, z) == 1)
                            {
                            this.setBlockBounds(0.0F, 0.0F, 0.25F, 0.50F, 1.0F, 0.75F);
                                super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, list, entity);
                            }
                    
                            if(world.getBlockMetadata(x, y, z) == 2)
                            {
                            this.setBlockBounds(0.25F, 0.0F, 0.0F, 0.75F, 1.0F, 0.50F);
                                super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, list, entity);
                            }
                    
                            if(world.getBlockMetadata(x, y, z) == 3)
                            {
                            this.setBlockBounds(0.50F, 0.0F, 0.25F, 1.0F, 1.0F, 0.75F);
                                super.addCollisionBoxesToList(world, x, y, z, axisAlignedBB, list, entity);
                            }
                        }
                    
                        @Override
                    public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) 
                    {
                          if(world.getBlockMetadata(x, y, z) == 0)
                               {
                                this.setBlockBounds(0.25F, 0.0F, 0.50F, 0.75F, 1.0F, 1.0F);
                               }
                    
                          if(world.getBlockMetadata(x, y, z) == 1)
                               {
                                this.setBlockBounds(0.0F, 0.0F, 0.25F, 0.50F, 1.0F, 0.75F);
                               }
                    
                          if(world.getBlockMetadata(x, y, z) == 2)
                               {
                                this.setBlockBounds(0.25F, 0.0F, 0.0F, 0.75F, 1.0F, 0.50F);
                               }
                    
                          if(world.getBlockMetadata(x, y, z) == 3)
                               {
                                this.setBlockBounds(0.50F, 0.0F, 0.25F, 1.0F, 1.0F, 0.75F);
                               }  
                    }
                    
                        public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack)
                        {
                            int direction = MathHelper.floor_double((double)(living.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3;
                            world.setBlockMetadataWithNotify(x, y, z, direction, 2);
                        }
                    
                    }
                    ``` 
                    
                    Merci encore !
                    1 réponse Dernière réponse Répondre Citer 0
                    • 1 / 1
                    • Premier message
                      Dernier message
                    Design by Woryk
                    ContactMentions Légales

                    MINECRAFT FORGE FRANCE © 2024

                    Powered by NodeBB