Navigation

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

    SOLVED Problème de swap bloc

    1.8.x
    1.8
    2
    7
    1216
    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.
    • EmotionFox
      EmotionFox last edited by

      Bonjour bonjour,

      Aujourd’hui j’ai un petit problème, je vous explique. J’étais tranquillement en train de créer une magnifique jardinière, tous fonctionnes à la perfection, les fleurs sont belles, la jardinière de même et les oiseaux chante et cetera…

      Quand soudain ! Je lance mon serveur Minecraft, je m’apprête à jouer avec ma copine et pose ma première jardinière, ma fleure s’enlève bien de mon inventaire je la vois bien à l’intérieur mais malheureusement ma copine pas, il me suffit de faire un clique droit sur la jardinière pour comprendre la supercherie, ma fleure était revenue dans mon inventaire et la jardinière était en réalité restée vide ! Pa pa pammm ! Bon trêve de bavarderie passont au rome, bavar au rome. J’ai, dans un premier temps, pensais à une mauvaise synchronisation côté client / serveur j’ai donc essayé à coup de :

      public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ)
         {
             if(world.isRemote)
             {
                 return false;
             }
         }
      

      Sans succès et même pire, ça bugais encore plus :C Mais au final je me suis rendue compte que ça ne pouvais pas être un problème de synchro étant donné que j’avais déjà créais un buisson qui lui aussi se remplaçais lors d’un clique droit et donc je m’en remet à vous, voilà ma fonction complète :

      public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ)
      {
             ItemStack itemstack = player.inventory.getCurrentItem();
      
             if(world.isRemote)
             {
                 return false;
             }
             if(world.getBlockState(pos).getBlock() == EmotionBlocks.windowBox && itemstack != null)
             {
                 Comparable current = state.getValue(FACING);
                 int size = player.getCurrentEquippedItem().stackSize;
      
                 if(player.getCurrentEquippedItem().getIsItemStackEqual(new ItemStack(Item.getItemFromBlock(EmotionBlocks.baseFlower), size, 5)))
                 {
                     world.setBlockState(pos, EmotionBlocks.windowBoxCentus.getDefaultState().withProperty(FACING, current));
      
                     if(!player.capabilities.isCreativeMode && –itemstack.stackSize <= 0)
                     {
                         player.inventory.setInventorySlotContents(player.inventory.currentItem, (ItemStack)null);
                     }
                 }
                 return true;
             }
             return false;
         }
      

      Ah une dernière chose comme vous le constatez pas grand chose ne change par rapport à mon buisson :

      public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumFacing side, float hitX, float hitY, float hitZ)
         {
             if(((Integer)state.getValue(STAGE)).intValue() == 0)
             {
                 if(state.getValue(VARIANT) == EnumType.BLUEBERRY)
                 {
                     world.setBlockState(pos, EmotionBlocks.baseBush.getStateFromMeta(BaseBerry.EnumType.BLUEBERRY.getMetadata()).withProperty(STAGE, 1), 2);
                 }
                 return true;
             }
             return false;
         }
      

      Merci encore une fois d’avance et surtout merci à jglrxavpok qui m’a déjà bien aidé.

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

        if(player.getCurrentEquippedItem().getIsItemStackEqual(new ItemStack(Item.getItemFromBlock(EmotionBlocks.baseFlower), size, 5)))
        N’utilise pas la comparaison d’item stack, compare plutôt l’item et le metadata.

        Et sinon je ne vois pas d’autres problèmes

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

          Si tu parle de quelque chose qui ressemblerais à ça :

          @Override
          public boolean onBlockActivated(World world, BlockPos pos, IBlockState state, EntityPlayer player, EnumFacing side, float hitX, float hitY, float hitZ)
          {
          ItemStack itemstack = player.inventory.getCurrentItem();
          Item stack = player.getCurrentEquippedItem().getItem();
          int meta = player.getCurrentEquippedItem().getMetadata();
          
          if(world.isRemote)
          {
          return false;
          }
          if(world.getBlockState(pos).getBlock() == EmotionBlocks.windowBox && itemstack != null)
          {
          Comparable current = state.getValue(FACING);
          int size = player.getCurrentEquippedItem().stackSize;
          
          if(stack == Item.getItemFromBlock(EmotionBlocks.baseFlower) && meta == 5) //5
          {
          world.setBlockState(pos, EmotionBlocks.windowBoxCentus.getDefaultState().withProperty(FACING, current));
          
          if(!player.capabilities.isCreativeMode && –itemstack.stackSize <= 0)
          {
          player.inventory.setInventorySlotContents(player.inventory.currentItem, (ItemStack)null);
          }
          }
          return true;
          }
          return false;
          }
          

          Ça ne marche même plus en solo 😕

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

            Ajoute des System.out.println(“quelque chose”); au niveau des différentes conditions pour voir où est le problème.
            Et les lignes
                    Item stack = player.getCurrentEquippedItem().getItem();
                    int meta = player.getCurrentEquippedItem().getMetadata();
            Devrait être après la condition stack != null, sinon tu vas te manger un NPE.

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

              Alors j’ai déplacé les conditions après stack != null et ça fonctionne, pas contre c’est très, très, très bugé je devrais sûrement me pencher d’avantage sur les TilesEntity comme les pots de fleur mais ça m’a l’air assez compliqué, je pense que ce serait beaucoup mieux quand même. Merci à toi en tous cas.

              Ps: Une dernière chose, tu saurais pas pourquoi mon bloc fait un peu comme l’enclume par hasard ? En gros dès qu’on le touche on glitch presque à travers 😕

              Ps 2: A savoir que j’utilise cette fonction qui est peut-être la cause du problème :

              @Override
              public void setBlockBoundsBasedOnState(IBlockAccess access, BlockPos pos)
              {
              IBlockState state = access.getBlockState(pos);
              Comparable value = state.getValue(FACING);
              float pixel = 1f / 16f;
              
              if(value == EnumFacing.NORTH)
              {
              this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F - pixel * 9, 1.0F - 6 * pixel);
              }
              else if(value == EnumFacing.SOUTH)
              {
              this.setBlockBounds(0.0F, 0.0F, 6 * pixel, 1.0F, 1.0F - pixel * 9, 1.0F);
              }
              else if(value == EnumFacing.EAST)
              {
              this.setBlockBounds(6 * pixel, 0.0F, 0.0F, 1.0F, 1.0F - pixel * 9, 1.0F);
              }
              else if(value == EnumFacing.WEST)
              {
              this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F - 6 * pixel, 1.0F - pixel * 9, 1.0F);
              }
              }
              
              1 Reply Last reply Reply Quote 0
              • robin4002
                robin4002 Administrateurs Rédacteurs Moddeurs confirmés last edited by

                Hum non aucune idée.

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

                  Pas grave ce doit-être un problème de chez Minecraft, merci beaucoup quand même 😄

                  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