Navigation

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

    Multiples boxes de collision sur un rendu TESR rotatif

    Sans suite
    1.7.10
    2
    5
    1326
    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.
    • Sugarshy
      Sugarshy last edited by

      Bonjour tout le monde !

      Je poste cette question qui va surement en intéresser plus d’un.

      En effet, je me suis mis dans l’idée de faire une chaise via un rendu TESR, jusque la, rien de bien complexe.
      Ensuite je l’ai faite tourner, la encore sa peut aller…

      Mais la où je pêche, c’est pour sa hitbox !
      La boite de sélection qui s’affiche autour à été rapide a faire, mais ce qui me pose problème c’est de mettre sur ma chaise deux boites de collision (une pour l’assise et une pour le dossier) et de faire tourner celles-ci avec mon bloc !

      J’ai bien essayé par moi même, et au bout de plusieurs heures je me suis retrouvé avec ceci:

      
      public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB axisalignedBB, List list, Entity entity, IBlockAccess access)
      
      {
      
      TileEntity te = access.getTileEntity(x, y, z);
      
      if(te instanceof TileEntityChair)
      
      {
      
      float f = 0.0625F;
      
      TileEntityChair tile = (TileEntityChair)te;
      
      switch(tile.getDirection()) 
      
         {
      
          case 0:
      
          this.setBlockBounds(0.1F, 0.0F, 0.1F - f, 0.8F, 0.6F, 0.8F);
      
                 super.addCollisionBoxesToList(world, x, y, z, axisalignedBB, list, entity);
      
                 this.setBlockBounds(0.125F, 0, 0.0625F, 0.875F, 1F, 0.1875F);
      
                 super.addCollisionBoxesToList(world, x, y, z, axisalignedBB, list, entity);
      
          break;
      
          case 1:
      
          this.setBlockBounds(0.1F, 0.0F, 0.1F - f, 0.8F, 0.6F, 0.8F);
      
                 super.addCollisionBoxesToList(world, x, y, z, axisalignedBB, list, entity);
      
          this.setBlockBounds(0.8125F, 0, 0.125F, 0.9375F, 1F, 0.875F);
      
          super.addCollisionBoxesToList(world, x, y, z, axisalignedBB, list, entity);
      
          break;
      
          case 2:
      
          this.setBlockBounds(0.1F, 0.0F, 0.1F - f, 0.8F, 0.6F, 0.8F);
      
                 super.addCollisionBoxesToList(world, x, y, z, axisalignedBB, list, entity);
      
          this.setBlockBounds(0.125F, 0, 0.8125F, 0.875F, 1F, 0.9375F);
      
          super.addCollisionBoxesToList(world, x, y, z, axisalignedBB, list, entity);
      
          break;
      
          case 3:
      
          this.setBlockBounds(0.1F, 0.0F, 0.1F - f, 0.8F, 0.6F, 0.8F);
      
                 super.addCollisionBoxesToList(world, x, y, z, axisalignedBB, list, entity);
      
          this.setBlockBounds(0.0625F, 0, 0.125F, 0.1875F, 1F, 0.875F);
      
          super.addCollisionBoxesToList(world, x, y, z, axisalignedBB, list, entity);
      
          break;
      
          }
      
      }
      
      }
      

      Ce que ça donne ?
      Et bien, je me retrouve avec les boites de collision  par défaut…

      Bref, je suis totalement perdu, et impossible de trouver sur les forums officiels de forge une solution !

      Quelqu’un aurai t’il déjà réussi quelque chose comme sa ?

      Merci de m’avoir lu !

      1 Reply Last reply Reply Quote 0
      • robin4002
        robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

        Tu peux envoyer ta classe complète ?

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

          @‘robin4002’:

          Tu peux envoyer ta classe complète ?

          Bien sur !

          
          package com.sugarshy.harmomod.blocks;
          
          import java.util.List;
          
          import net.minecraft.block.Block;
          import net.minecraft.block.material.Material;
          import net.minecraft.client.renderer.texture.IIconRegister;
          import net.minecraft.entity.Entity;
          import net.minecraft.entity.EntityLivingBase;
          import net.minecraft.item.ItemStack;
          import net.minecraft.tileentity.TileEntity;
          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;
          import net.minecraftforge.common.util.ForgeDirection;
          
          import com.sugarshy.harmomod.TileEntity.TileEntityChair;
          import com.sugarshy.harmomod.TileEntity.TileEntityPatternChest;
          import com.sugarshy.harmomod.common.Harmomod;
          import com.sugarshy.harmomod.proxy.ClientProxy;
          
          import cpw.mods.fml.relauncher.Side;
          import cpw.mods.fml.relauncher.SideOnly;
          
          public class Chair extends Block
          {
          public Chair()
          {
          super(Material.wood);
          }
          
          public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB axisalignedBB, List list, Entity entity, IBlockAccess access)
          {
          TileEntity te = access.getTileEntity(x, y, z);
          if(te instanceof TileEntityChair)
          {
          float f = 0.0625F;
          TileEntityChair tile = (TileEntityChair)te;
          switch(tile.getDirection()) 
             {
              case 0:
              this.setBlockBounds(0.1F, 0.0F, 0.1F - f, 0.8F, 0.6F, 0.8F);
                     super.addCollisionBoxesToList(world, x, y, z, axisalignedBB, list, entity);
                     this.setBlockBounds(0.125F, 0, 0.0625F, 0.875F, 1F, 0.1875F);
                     super.addCollisionBoxesToList(world, x, y, z, axisalignedBB, list, entity);
              break;
              case 1:
              this.setBlockBounds(0.1F, 0.0F, 0.1F - f, 0.8F, 0.6F, 0.8F);
                     super.addCollisionBoxesToList(world, x, y, z, axisalignedBB, list, entity);
              this.setBlockBounds(0.8125F, 0, 0.125F, 0.9375F, 1F, 0.875F);
              super.addCollisionBoxesToList(world, x, y, z, axisalignedBB, list, entity);
              break;
              case 2:
              this.setBlockBounds(0.1F, 0.0F, 0.1F - f, 0.8F, 0.6F, 0.8F);
                     super.addCollisionBoxesToList(world, x, y, z, axisalignedBB, list, entity);
              this.setBlockBounds(0.125F, 0, 0.8125F, 0.875F, 1F, 0.9375F);
              super.addCollisionBoxesToList(world, x, y, z, axisalignedBB, list, entity);
              break;
              case 3:
              this.setBlockBounds(0.1F, 0.0F, 0.1F - f, 0.8F, 0.6F, 0.8F);
                     super.addCollisionBoxesToList(world, x, y, z, axisalignedBB, list, entity);
              this.setBlockBounds(0.0625F, 0, 0.125F, 0.1875F, 1F, 0.875F);
              super.addCollisionBoxesToList(world, x, y, z, axisalignedBB, list, entity);
              break;
              }
          }
          
          }
          
          @SideOnly(Side.CLIENT)
              public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z)
              {
                  return AxisAlignedBB.getBoundingBox((double)x + this.minX+ 0.20D, (double)y + this.minY, (double)z + this.minZ+ 0.20D, (double)x + this.maxX- 0.20D, (double)y + this.maxY+ 0.20D, (double)z + this.maxZ- 0.20D);
              }
          
          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 TileEntityChair)
                      {
                          int direction = MathHelper.floor_double((double)(living.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3;
                          ((TileEntityChair)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 TileEntityChair)
                      {
                      TileEntityChair tileDirectional = (TileEntityChair)tile;
                          byte direction = tileDirectional.getDirection();
                          direction++;
                          if(direction > 3)
                          {
                              direction = 0;
                          }
                          tileDirectional.setDirection(direction);
                          return true;
                      }
                  }
                  return false;
              }
          
              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;
              }
          
          public TileEntity createTileEntity(World world, int metadata)
          {
          return new TileEntityChair();
          }
          
          public boolean hasTileEntity(int metadata)
          {
          return true;
          }
          
          public boolean renderAsNormalBlock()
          {
          return false;
          }
          
          public boolean isOpaqueCube()
          {
          return false;
          }
          
          @SideOnly(Side.CLIENT)
          public int getRenderType()
          {
          return ClientProxy.renderInventoryTESRId;
          }
          
          }
          
          1 Reply Last reply Reply Quote 0
          • Sugarshy
            Sugarshy last edited by

            Personne ? 😕

            1 Reply Last reply Reply Quote 0
            • robin4002
              robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

              Je ne sais pas trop pourquoi ça ne fonctionne pas, je viens de comparer avec le code de kévin, lui il utilise ça en plus :
              https://github.com/FFMT/nanotech_mod/blob/master/common/fr/mcnanotech/kevin_68/nanotechmod/city/blocks/BlockTrail.java#L1098-L1119

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

              MINECRAFT FORGE FRANCE © 2018

              Powered by NodeBB