[1.7.10] Création d'une "plateforme" pour voler
#1
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 :
Code :
16
11
16
11
16
11
16
11
16
11
Sachant que j'étais à 16. Mais aussi des :

Code :
13
12
13
11
13
11
13
11
13
Sachant que j'étais à 13

Merci d'avance pour votre aide !
Je suis un membre apprécié et joueur, j'ai déjà obtenu 8 point(s) de réputation.

J'ai et je suis triste d'avoir 12 points d'ICRating

Répondre
#2
À 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.
Si vous souhaitez me faire un don, il vous suffit de cliquer sur le bouton situé en dessous.

[Image: btn_donate_SM.gif]

Les dons serviront à m'acheter les composants pour monter un ordinateur.

Je suis un membre apprécié et joueur, j'ai déjà obtenu 16 points de réputation.
Répondre
#3
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.
Répondre
#4
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 :
Code :
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 !
Je suis un membre apprécié et joueur, j'ai déjà obtenu 8 point(s) de réputation.

J'ai et je suis triste d'avoir 12 points d'ICRating

Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)