Récupérer une variable lorsqu'un joueur tape un block



  • Bonjour alors aujourd'hui je vient encore une fois vous demander votre aide car en effet je cherche un moyen afin de récupérer un variable quand le joueur est entrain de casser un block par exemple :

    
       public void onBlockIsTaped(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer)
    {
    tickBreak++;
    }
    

    Ceci n'existe pas ^^' malheureusement la seul fonction que j'ai trouver est celle ci

    /**
        * Called when the block is clicked by a player. Args: x, y, z, entityPlayer
        */
       public void onBlockClicked(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer) {}
    

    mais le problème est que lorsque qu on est en jeux la fonction s'actualise que lorsque le joueur tape une fois sur le block…


  • Modérateurs

    Je ne crois pas que ce soit possible, mais je vais voir si 'y a un moyen détourné de le faire ;)___
    J'ai trouvé un moyen de le faire 😄
    Il n'existe ni event pour cela, ni méthode sans devoir changer le code source, ce qui n'est pas une bonne idée…
    Mais l'on peut ajouter un IWorldAccess à l'objet World que l'on veut surveiller 😉

    @ForgeSubscribe
    public void load(WorldEvent.Load event)
    {
    event.world.addWorldAccess(new IWorldAccess()
    {
    @Override
    public void markBlockForUpdate(int i, int j, int k){}
    
    @Override
    public void markBlockForRenderUpdate(int i, int j, int k){}
    
    @Override
    public void markBlockRangeForRenderUpdate(int i, int j, int k, int l, int i1, int j1){}
    
    @Override
    public void playSound(String s, double d0, double d1, double d2, float f, float f1){}
    
    @Override
    public void playSoundToNearExcept(EntityPlayer entityplayer, String s, double d0, double d1, double d2, float f, float f1){}
    
    @Override
    public void spawnParticle(String s, double d0, double d1, double d2, double d3, double d4, double d5){}
    
    @Override
    public void onEntityCreate(Entity entity){}
    
    @Override
    public void onEntityDestroy(Entity entity){}
    
    @Override
    public void playRecord(String s, int i, int j, int k){}
    
    @Override
    public void broadcastSound(int i, int j, int k, int l, int i1){}
    
    @Override
    public void playAuxSFX(EntityPlayer entityplayer, int i, int j, int k, int l, int i1){}
    
    @Override
    public void destroyBlockPartially(int id, int x, int y, int z, int state)
    {
    if(y >= 0 && state >= 0)
    {
    System.out.println("Block hit at ("+x+";"+y+";"+z+"), EntityID hitting: "+id+", State: "+state);
    }
    }
    
    });
    }
    

    J'espère que ça pourra t'aider 😉



  • Merci beaucoup je ne comprend juste pas ce qu'est la variable state et ou doit on mettre l'iworldacces…


  • Modérateurs

    La variable state (de -1 à 10) indique où en est le joueur dans la démolition du bloc
    Et IWorldAccess pour pouvoir être prévenu quand le bloc est abîmé (parce que je vois pas d'autres moyens xD aussi)


Log in to reply