Poser un bloc



  • Bonjour,
    Aujourd'hui j'ai voulu le faite de poser des blocs impossible, j'ai donc essayé quelque chose comme ça

        @SubscribeEvent
        @SideOnly(Side.CLIENT)
        public void onBlockPlaced(PlayerInteractEvent event)
        {
             EntityPlayer player = FMLClientHandler.instance().getClient().thePlayer;
             if(event.useBlock != null && !player.capabilities.isCreativeMode){
                  event.setCanceled(true);
             }
         }
    

    Le problème avec ce code est que je ne peux plus me servir des items également, ce qui n'est pas le but avez vous une idée ?
    Merci d'avance 🙂

    PS.: Si vous savez aussi comment enlever un effet

    par3EntityPlayer.removePotionEffect(mod_x.xid);
    

    n'a plus l'air de marcher



  • @'mindany2':

    if(event.useBlock != null && !player.capabilities.isCreativeMode){
    event.setCanceled(true);
    }

    Problème trouvé;

    Tu check pas quel block est utilisé. Un truc genre event.block doit exister pour vérifier que ton block = celui posé



  • Effectivement , j'ai approfondi cette idée car il n'y a pas de truc pour checker quelle bloc est posé

    int a = Block.getIdFromBlock(Block.getBlockFromItem(event.entityPlayer.getCurrentEquippedItem().getItem()));
    int b = Item.getIdFromItem(event.entityPlayer.getCurrentEquippedItem().getItem());
    if(event.useBlock != null&& a == b && !player.capabilities.isCreativeMode){
    event.setCanceled(true);
    }
    

    Le problème c'est que certain blocs comme les comparateurs n'utilisent pas le même id item/block , si tu as une idée ^^'


  • Administrateurs

    Salut,
    Ta condition ne sert à rien, useBlock ne peut pas être null.
    En revanche tu peux changer sa valeur, le mettre en deny ou en allow. Et en passant, tu peux aussi faire ça en serveur, pas besoin de FMLClientHandler.instance().getClient().thePlayer qui ne fonctionne que en client puisque l'event à le joueur en argument :

    @SubscribeEvent
    public void onInteract(PlayerInteractEvent event)
    {
    if(!event.entityPlayer.capabilities.isCreativeMode)
    {
    event.useBlock = Result.DENY;
    }
    }
    

    Pour les effets de potion, la fonction fonctionne très bien, à mon avis tu l'as exécuté en client alors qu'elle doit être exécuté en serveur.
    Il ne faut pas confondre client et serveur, le client lui ne fait que les rendus, le reste il ne gère pas.



  • D'accord merci, cela marche en effet
    Pour la potion cela marchait mais je la réactiver juste après par erreur donc je ne l'avait pas vu ^^