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

Résolu Problème de swap bloc

1.8.x
1.8
2
7
1.4k
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.
  • EmotionFox
    EmotionFox dernière édition par 11 mai 2015, 13:46

    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 réponse Dernière réponse Répondre Citer 0
    • robin4002
      robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 11 mai 2015, 15:02

      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 réponse Dernière réponse Répondre Citer 0
      • EmotionFox
        EmotionFox dernière édition par 11 mai 2015, 15:21

        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 réponse Dernière réponse Répondre Citer 0
        • robin4002
          robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 11 mai 2015, 15:29

          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 réponse Dernière réponse Répondre Citer 0
          • EmotionFox
            EmotionFox dernière édition par 11 mai 2015, 17:13

            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 réponse Dernière réponse Répondre Citer 0
            • robin4002
              robin4002 Moddeurs confirmés Rédacteurs Administrateurs dernière édition par 11 mai 2015, 18:05

              Hum non aucune idée.

              1 réponse Dernière réponse Répondre Citer 0
              • EmotionFox
                EmotionFox dernière édition par 11 mai 2015, 18:48

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

                1 réponse Dernière réponse Répondre Citer 0
                • 1 / 1
                7 sur 7
                • Premier message
                  7/7
                  Dernier message
                Design by Woryk
                Contact / Mentions Légales

                MINECRAFT FORGE FRANCE © 2018

                Powered by NodeBB