Résolu Problème onUpdate avec mon arc.
-
Oui, Juste dernière petit question:
Je fais ça:if (ClientProxy.keyBindSortG1.isPressed() && !world.isRemote) { entityarrow.setFire(1 * 10); world.spawnEntityInWorld(entityarrow); System.out.println("flèches feu"); }else if(!world.isRemote){ world.spawnEntityInWorld(entityarrow); System.out.println("flèches normale"); }
En gros quand je joueur presse une touche et que il tire avec l’arc la flemme est enflammé et sinon c’est une flèches normale.
Le problème est que je dois appuyer deux fois sur la touche pour la flèches soit enflammer normal? -
“!world.isRemote” c’est ça le problème, si tu aurais essayé sur serveur, ça aurait crash, il faut mettre le “world.isRemote” avant le test de la touche car on ne peut pas presser de touche sur serveur (et enlève bien le ! devant). Maintenant, le problème c’est que les flammes n’apparraîtront que côté client.
-
@‘AymericRed’:
“!world.isRemote” c’est ça le problème, si tu aurais essayé sur serveur, ça aurait crash, il faut mettre le “world.isRemote” avant le test de la touche car on ne peut pas presser de touche sur serveur (et enlève bien le ! devant). Maintenant, le problème c’est que les flammes n’apparraîtront que côté client.
J’ai fais sa quand j’appuie sur la touche dans la console y’a pas flèche feu et la flèche n’est pas en feu
if (world.isRemote && ClientProxy.keyBindSortG1.isPressed()) { entityarrow.setFire(1 * 10); world.spawnEntityInWorld(entityarrow); System.out.println("flèches feu"); }
Quand tu dis côté client c’est que le mec qui lance la flèche qui la voit en feu c’est ça?
Mais après quand la flèche touche l’entity est-ce que elle prend feu et tout le monde le vois ? -
Oui, seul le client la voit en feu et lesautres ne pourront pas le voir. Et si le serveur envoie une update, il est possible (je ne sais pas du tout) qu’elle perde les flammes. Je pense qu’il faudrait un packet.
-
En effet il faut un paquet, les touches n’existent que côté client et la flèche doit être lancé côté serveur.
-
Ok merci de l’info je vais essayer de former le packet vous avez un peu plus d’info concernant le packet?
-
@‘floriangabet’:
Ok merci de l’info je vais essayer de former le packet vous avez un peu plus d’info concernant le packet?
C’est à dire ? C’est à toi de le faire
-
Le packet devra contenir les valeurs que tu passes au constructeur de la flèche, et lorsque que tu recevras ce packet, tu devras faire spawn la flèche à partir de ces infos.
-
@‘AymericRed’:
contenir les valeurs que tu passes au constructeur de la flèche
C’est à dire ?
-
Tu devras envoyer les informations de la flèche (vitesse, puissance, direction…) via le packet et instancier puis spawn la flèche à la réception du packet, côté serveur.
-
@‘AymericRed’:
Tu devras envoyer les informations de la flèche (vitesse, puissance, direction…) via le packet et instancier puis spawn la flèche à la réception du packet, côté serveur.
J’ai fais ça.
Je vois pas du tout comment faire pour envoyer les infos .public class PacketFireArrow implements IMessage { //Pour envoyer les infos de la flèche j'utilise des int ? public PacketFireArrow(){ } public PacketFireArrow(EntityArrow arrow) { } @Override public void fromBytes(ByteBuf buf) { } @Override public void toBytes(ByteBuf buf) { } public static class Handler implements IMessageHandler <packetfirearrow, imessage="">{ @Override public IMessage onMessage(PacketFireArrow message, MessageContext ctx) { EntityArrow entityarrow = new EntityArrow(ctx.getServerHandler().playerEntity.worldObj, ctx.getServerHandler().playerEntity, 2.0F); ctx.getServerHandler().playerEntity.worldObj.spawnEntityInWorld(entityarrow); return null; } } ```</packetfirearrow,>
-
Pour envoyez les infos de la flèche je peux utilisé quoi ?
String , int … ? -
pour la force, un float.
Et c’est la seule chose que tu as besoin d’envoyer via le paquet. -
@‘floriangabet’:
Pour envoyez les infos de la flèche je peux utilisé quoi ?
String , int … ?Pour invoquer la flèche, tu as plusieurs variable récupérer : le World, l’EntityPlayer, la puissance du tir, la position de l’invocation de la flèche et la direction dans laquelle la flèche vas ce diriger.
Pour le joueurs, tu peut l’avoir a partir du MessageContext le monde, les coordonnés d’invocation et la puissance de la flèche, tu peux les avoir à partir du joueur, donc la seul info que tu vas devoir envoyer est la direction de la flèche que tu peux mettre dans deux float. -
@‘robin4002’:
pour la force, un float.
Et c’est la seule chose que tu as besoin d’envoyer via le paquet.D’accord,
J’ai former déjà la base de mon packet:Est-ce que il manque des choses ?
Et dans mon Handler je dois juste faire spawn ma flèche et c’est bon ?
public class PacketFireArrow implements IMessage { private float f; public PacketFireArrow(){ } public PacketFireArrow(float f) { this.f = f; } @Override public void fromBytes(ByteBuf buf) { f = buf.readFloat(); } @Override public void toBytes(ByteBuf buf) { buf.writeFloat(f); } public static class Handler implements IMessageHandler <packetfirearrow, imessage="">{ @Override public IMessage onMessage(PacketFireArrow message, MessageContext ctx) { EntityArrow entityarrow = new EntityArrow(ctx.getServerHandler().playerEntity.worldObj, ctx.getServerHandler().playerEntity, 2.0F); ctx.getServerHandler().playerEntity.worldObj.spawnEntityInWorld(entityarrow); return null; } } ```</packetfirearrow,>
-
2.0 tu remplaces par message.f
-
@‘robin4002’:
2.0 tu remplaces par message.f
C’est bon.
Du coup dans ma classe FlameBow j’ai fais sa:
Marche pas.
if (world.isRemote && ClientProxy.keyBindSortG1.isPressed()) { LegacyMod.network.sendToServer(new PacketFireArrow()); System.out.println("flèches feu"); }
-
flèches de feu s’affiche dans la console ?
-
@‘robin4002’:
flèches de feu s’affiche dans la console ?
Nan meme pas.
edit:
J’ai rien dis une érreur de touche finalement x) j’essaye je vous dis! -
Testes si à un moment world.isRemote et si ClientProxy.keyBindSortG1.isPressed() valent true séparément et regard celui qui ne marche pas (je crois qu’il faudrait utiliser isKeyDown()). Et aussi, avec que tu fais là, le “f” dans la packet vaudra toujours 0.