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

    Bloc container haut de deux blocs

    Sans suite
    1.8
    2
    9
    1805
    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.
    • G
      Gregouzy dernière édition par

      Bonjour,
      J’essaie actuellement de créer un bloc qui pourrait s’apparenter au bloc coffre, mais sur deux blocs de haut (un peu comme un double coffre renversé, je ne sais pas si je suis très clair).
      J’aimerais que lorsque deux de ces blocs soient posés l’un sur l’autre, leur model change (je passe par la méthode TESR avec Techne pour le model) et que j’ai accès au même contenu en cliquant sur n’importe lequel de ces deux blocs. Exactement comme pour le double coffre en fait.

      Mon bloc :

      
      public class WardrobeBlock extends BlockContainer {
      
              //Treat it like a normal block here. The Block Bounds are a good idea - the first three are X Y and Z of the botton-left corner,
              //And the second three are the top-right corner.
              public WardrobeBlock() {
                      super(Material.wood);
                      this.setCreativeTab(CreativeTabs.tabDecorations);
                      this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F);
                      this.setStepSound(soundTypeWood);
                      this.setUnlocalizedName("wardrobe");
                      this.setHardness(2.0F);
                      this.setResistance(5.0F);
              }
      
              public void onBlockPlacedBy(World world, BlockPos pos, IBlockState state, EntityLivingBase living, ItemStack stack)
              {
                  if(stack.getItemDamage() == 0)
                  {
                      TileEntity tile = world.getTileEntity(pos);
                      TileEntity tileDown = world.getTileEntity(pos.down());
                      if(tile instanceof TileEntityWardrobe)
                      {
                          int direction = MathHelper.floor_double((double)(living.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3;
                          if(world.getBlockState(pos.down()) == this.getDefaultState()){
                              ((TileEntityWardrobe)tile).setDirection(((TileEntityWardrobe)tileDown).getDirection());
                          }
                          else{
                              ((TileEntityWardrobe)tile).setDirection((byte)direction);
                          }
                      }
                  }
      
                  TileEntity tile = world.getTileEntity(pos);
                  if(tile instanceof TileEntityWardrobe)
                  {
                      if(stack.hasDisplayName())
                      {
                          ((TileEntityWardrobe)tile).setCustomName(stack.getDisplayName());
                      }
                  }
              }
      
              public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumFacing side, float hitX, float hitY, float hitZ)
              {
                  if(worldIn.isRemote)
                  {
                      return true;
                  }
                  else
                  {
                      playerIn.openGui(ModScrollcraft.instance, 0, worldIn, pos.getX(), pos.getY(), pos.getZ());
                      return true;
                  }
              }
      
              public void breakBlock(World worldIn, BlockPos pos, IBlockState state)
              {
                  TileEntity tileentity = worldIn.getTileEntity(pos);
      
                  if(tileentity instanceof IInventory)
                  {
                      IInventory inv = (IInventory)tileentity;
                      for(int i1 = 0; i1 < inv.getSizeInventory(); ++i1)
                      {
                          ItemStack itemstack = inv.getStackInSlot(i1);
      
                          if(itemstack != null)
                          {
                              float f = worldIn.rand.nextFloat() * 0.8F + 0.1F;
                              float f1 = worldIn.rand.nextFloat() * 0.8F + 0.1F;
                              EntityItem entityitem;
      
                              for(float f2 = worldIn.rand.nextFloat() * 0.8F + 0.1F; itemstack.stackSize > 0; worldIn.spawnEntityInWorld(entityitem))
                              {
                                  int j1 = worldIn.rand.nextInt(21) + 10;
      
                                  if(j1 > itemstack.stackSize)
                                  {
                                      j1 = itemstack.stackSize;
                                  }
      
                                  itemstack.stackSize -= j1;
                                  entityitem = new EntityItem(worldIn, (double)((float)pos.getX() + f), (double)((float)pos.getY() + f1), (double)((float)pos.getZ() + f2), new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage()));
                                  float f3 = 0.05F;
                                  entityitem.motionX = (double)((float)worldIn.rand.nextGaussian() * f3);
                                  entityitem.motionY = (double)((float)worldIn.rand.nextGaussian() * f3 + 0.2F);
                                  entityitem.motionZ = (double)((float)worldIn.rand.nextGaussian() * f3);
      
                                  if(itemstack.hasTagCompound())
                                  {
                                      entityitem.getEntityItem().setTagCompound((NBTTagCompound)itemstack.getTagCompound().copy());
                                  }
                              }
                          }
                      }
                      worldIn.updateComparatorOutputLevel(pos, this);
                  }
                  super.breakBlock(worldIn, pos, state);        
              }
      
              @Override
              public TileEntity createNewTileEntity(World world, int metadata)
              {
                  return new TileEntityWardrobe();
              }
      
              public boolean isOpaqueCube()
              {
                  return false;
              }
      
              public boolean renderAsNormalBlock()
              {
                  return false;
              }
      
              public int getRenderType()
              {
                  return -1;
              }
      
              public Item getItemDropped(IBlockState state, Random rand, int fortune)
              {
                  return Item.getItemFromBlock(this);
              }
      
              public int quantityDropped(Random random)
              {
                  return 1;
              }
      }
      
      

      Merci d’avance 😉

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

        Il faut bien différencier le rendu de la collision, minecraft gère le rendu de chaque bloc à part, donc le coffre de droite s’occupe du rendu du côté droit, mais tu peux faire le rendu de tout le model depuis un des 2 bloc.

        Le plus difficile est la synchronisation entre les 2, je te conseille de te faire une bonne API pour çà, car le code de Minecraft est assez brouillon, donc fait ton propre code plutôt.

        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
        • G
          Gregouzy dernière édition par

          Donc tu me conseille de ne changer que le rendu d’un des deux blocs ? Du coup le rendu du second serait une sorte de bloc invisible ?

          Une idée de comment synchroniser les deux ? Parce que je vois pas du tout comment faire 😕

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

            Pour le rendu, tu as 2 possibilités :

            • faire le rendu sur un seul des blocs (simple mais bugué lorsque le joueur ne regarde pas le bloc qui fait le rendu)
            • faire un rendu différent par bloc, plus complexe

            La synchronisation dépend de ce que tu veux faire. Est-ce que tu veux faire un ensemble comme la porte (un bloc en pose 2), ou comme le coffre (une version petit et une version grand)

            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
            • G
              Gregouzy dernière édition par

              Je pensais faire une version petite et une grande version, comme pour le coffre en fait.

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

                Pour le rendu, vu que t’es en 1.8, je sais pas trop comment faire. Pour la collision : tu veux une hitbox custom ?

                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
                • G
                  Gregouzy dernière édition par

                  La hitbox pourrait me permettre de viser le bloc du dessous en regardant celui du dessus ?

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

                    Non, désolé.

                    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
                    • G
                      Gregouzy dernière édition par

                      Ok bah je vais réfléchir à ce que je peux faire alors…

                      Merci quand même !

                      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