Il reste moins de 24h pour s'inscrire à la MFFJam !

Création d'une "plateforme" pour voler



  • Salut à tous,

    J'ai déjà fait un demande d'aide dans ce style mais elle est partie aux oubliettes. Cependant, le problème est toujours là.
    Mon but est de créer une sorte de platforme sous les pieds du joueurs pour que celui-ci puisse voler.
    J'ai utilisé et l'event TickEvent.PlayerTickEvent et voici mon code :

        @SubscribeEvent
        public void onPlayerTick(TickEvent.PlayerTickEvent event)
        {
            if(event.phase == Phase.END)
            {
                if(event.player.getHeldItem() != null && event.player.getHeldItem().getItem() == AkameGaMod.murasame)
                {
                    event.player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 20, 2));
                }
                else if(event.player.getHeldItem() != null && event.player.getHeldItem().getItem() == AkameGaMod.dextract)
                {
                    int posX = (int)event.player.posX;
                    int posY = (int)event.player.posY;
                    System.out.println(posY);
                    int posZ = (int)event.player.posZ;
                    World world = event.player.worldObj;
                    if(!(event.player.isSneaking()))
                    {
                        if(world.isAirBlock(posX - 1, posY - 2, posZ - 1))
                            world.setBlock(posX - 1, posY - 2, posZ - 1, Blocks.ice);
                        if(world.isAirBlock(posX - 1, posY - 2, posZ))
                            world.setBlock(posX - 1, posY - 2, posZ, Blocks.ice);
                        if(world.isAirBlock(posX - 1, posY - 2, posZ + 1))
                            world.setBlock(posX - 1, posY - 2, posZ + 1, Blocks.ice);
                        if(world.isAirBlock(posX, posY - 2, posZ - 1))
                            world.setBlock(posX, posY - 2, posZ - 1, Blocks.ice);
                        if(world.isAirBlock(posX, posY - 2, posZ))
                            world.setBlock(posX, posY - 2, posZ, Blocks.ice);
                        if(world.isAirBlock(posX, posY - 2, posZ + 1))
                            world.setBlock(posX, posY - 2, posZ + 1, Blocks.ice);
                        if(world.isAirBlock(posX + 1, posY - 2, posZ - 1))
                            world.setBlock(posX + 1, posY - 2, posZ - 1, Blocks.ice);
                        if(world.isAirBlock(posX + 1, posY - 2, posZ))
                            world.setBlock(posX + 1, posY - 2, posZ, Blocks.ice);
                        if(world.isAirBlock(posX + 1, posY - 2, posZ + 1))
                            world.setBlock(posX + 1, posY - 2, posZ + 1, Blocks.ice);
                    }
                    else
                    {
                        if(world.getBlock(posX - 1, posY - 2, posZ - 1) == Blocks.ice)
                            world.setBlock(posX - 1, posY - 2, posZ - 1, Blocks.air);
                        if(world.getBlock(posX - 1, posY - 2, posZ) == Blocks.ice)
                            world.setBlock(posX - 1, posY - 2, posZ, Blocks.air);
                        if(world.getBlock(posX - 1, posY - 2, posZ + 1) == Blocks.ice)
                            world.setBlock(posX - 1, posY - 2, posZ + 1, Blocks.air);
                        if(world.getBlock(posX, posY - 2, posZ - 1) == Blocks.ice)
                            world.setBlock(posX, posY - 2, posZ - 1, Blocks.air);
                        if(world.getBlock(posX, posY - 2, posZ) == Blocks.ice)
                            world.setBlock(posX, posY - 2, posZ, Blocks.air);
                        if(world.getBlock(posX, posY - 2, posZ + 1) == Blocks.ice)
                            world.setBlock(posX, posY - 2, posZ + 1, Blocks.air);
                        if(world.getBlock(posX + 1, posY - 2, posZ - 1) == Blocks.ice)
                            world.setBlock(posX + 1, posY - 2, posZ - 1, Blocks.air);
                        if(world.getBlock(posX + 1, posY - 2, posZ) == Blocks.ice)
                            world.setBlock(posX + 1, posY - 2, posZ, Blocks.air);
                        if(world.getBlock(posX + 1, posY - 2, posZ + 1) == Blocks.ice)
                            world.setBlock(posX + 1, posY - 2, posZ + 1, Blocks.air);
                    }
    
                }
            }
        }
    

    Ce code devrait fournir une platforme de 3x3x1 sous les pieds du joueur mais j'ai remarqué que la position Y récupéré n'est pas constante même quand on ne bouge pas dans le jeu. Cela crée des platformes avec plusieurs couches en Y voir parfois, un patforme sous la première (mais pas coller).
    Le System.out me retourne :

    16
    11
    16
    11
    16
    11
    16
    11
    16
    11
    

    Sachant que j'étais à 16. Mais aussi des :

    13
    12
    13
    11
    13
    11
    13
    11
    13
    

    Sachant que j'étais à 13

    Merci d'avance pour votre aide !


  • Administrateurs

    À mon avis, tu as 2 valeurs différentes car le client et le serveur ne possède pas la même information, en revanche, ça n'explique pas pourquoi l'une des valeurs semble bloqué à 11.



  • Salut, il s'agit plus d'une passerelle se générant sous les pieds du joueur, plutôt que d'un vrai tapis volant. Le titre porte à confusion, personnellement, je m'attendais + à voir une entité plutôt qu'une structure de blocs.



  • Salut, d'abord merci à vous d'avoir répondu.
    Superloup : les valeurs ne sont pas bloqué à 11, c'est juste les extraits qui donne ces valeurs, j'ai aussi eu des trucs du genre :

    
    9
    5
    9
    5
    9
    5
    

    Alors que j'étais à 9

    Plaigon : Je vais changer le titre

    EDIT :
    J'ai réfléchi à ce que Superloup à dit. Résultat j'ai fait ça :

    @SubscribeEvent
        public void onPlayerTick(TickEvent.PlayerTickEvent event)
        {
            if(event.phase == Phase.END)
            {
                if(event.player.getHeldItem() != null && event.player.getHeldItem().getItem() == AkameGaMod.murasame)
                {
                    event.player.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 20, 2));
                }
                else if(event.player.getHeldItem() != null && event.player.getHeldItem().getItem() == AkameGaMod.dextract)
                {
                    if(!(event.player.worldObj.isRemote))
                    {
                        int posX = (int)event.player.posX;
                        int posY = (int)event.player.posY;
                        int posZ = (int)event.player.posZ;
                        World world = event.player.worldObj;
                        if(!(event.player.isSneaking()))
                        {
                            if(world.isAirBlock(posX - 1, posY - 1, posZ - 1))
                                world.setBlock(posX - 1, posY - 1, posZ - 1, Blocks.ice);
                            if(world.isAirBlock(posX - 1, posY - 1, posZ))
                                world.setBlock(posX - 1, posY - 1, posZ, Blocks.ice);
                            if(world.isAirBlock(posX - 1, posY - 1, posZ + 1))
                                world.setBlock(posX - 1, posY - 1, posZ + 1, Blocks.ice);
                            if(world.isAirBlock(posX, posY - 1, posZ - 1))
                                world.setBlock(posX, posY - 1, posZ - 1, Blocks.ice);
                            if(world.isAirBlock(posX, posY - 1, posZ))
                                world.setBlock(posX, posY - 1, posZ, Blocks.ice);
                            if(world.isAirBlock(posX, posY - 1, posZ + 1))
                                world.setBlock(posX, posY - 1, posZ + 1, Blocks.ice);
                            if(world.isAirBlock(posX + 1, posY - 1, posZ - 1))
                                world.setBlock(posX + 1, posY - 1, posZ - 1, Blocks.ice);
                            if(world.isAirBlock(posX + 1, posY - 1, posZ))
                                world.setBlock(posX + 1, posY - 1, posZ, Blocks.ice);
                            if(world.isAirBlock(posX + 1, posY - 1, posZ + 1))
                                world.setBlock(posX + 1, posY - 1, posZ + 1, Blocks.ice);
                        }
                        else
                        {
                            if(world.getBlock(posX - 1, posY - 1, posZ - 1) == Blocks.ice)
                                world.setBlock(posX - 1, posY - 1, posZ - 1, Blocks.air);
                            if(world.getBlock(posX - 1, posY - 1, posZ) == Blocks.ice)
                                world.setBlock(posX - 1, posY - 1, posZ, Blocks.air);
                            if(world.getBlock(posX - 1, posY - 1, posZ + 1) == Blocks.ice)
                                world.setBlock(posX - 1, posY - 1, posZ + 1, Blocks.air);
                            if(world.getBlock(posX, posY - 1, posZ - 1) == Blocks.ice)
                                world.setBlock(posX, posY - 1, posZ - 1, Blocks.air);
                            if(world.getBlock(posX, posY - 1, posZ) == Blocks.ice)
                                world.setBlock(posX, posY - 1, posZ, Blocks.air);
                            if(world.getBlock(posX, posY - 1, posZ + 1) == Blocks.ice)
                                world.setBlock(posX, posY - 1, posZ + 1, Blocks.air);
                            if(world.getBlock(posX + 1, posY - 1, posZ - 1) == Blocks.ice)
                                world.setBlock(posX + 1, posY - 1, posZ - 1, Blocks.air);
                            if(world.getBlock(posX + 1, posY - 1, posZ) == Blocks.ice)
                                world.setBlock(posX + 1, posY - 1, posZ, Blocks.air);
                            if(world.getBlock(posX + 1, posY - 1, posZ + 1) == Blocks.ice)
                                world.setBlock(posX + 1, posY - 1, posZ + 1, Blocks.air);
                        }
                    }
    
                }
            }
        }
    
    

    Et ça fonctionne !