Encore problème onUpdate
-
@‘AymericRed’:
Oui un switch serait bien

Ok donc c’est bon!
J’ai ça comme code du coup:
if(ClientProxy.keyBindSortG2.isPressed() && stack.getTagCompound().getInteger("timer") >= 20 * 20) { LegacyMod.network.sendToServer(new PacketArrow(f * 2.0F, 1)); System.out.println("flèche explosive"); stack.getTagCompound().setInteger("timer", 0); } if (ClientProxy.keyBindSortG1.isPressed()) { LegacyMod.network.sendToServer(new PacketArrow(f * 2.0F, 3)); System.out.println("flèche en feu"); stack.getTagCompound().setInteger("timer2", 0); } if (player.isSneaking() && !world.isRemote) { System.out.println("5 flèches"); LegacyMod.network.sendToServer(new PacketArrow(2.0F, 2)); stack.getTagCompound().setInteger("timer3", 0); }else if(!world.isRemote) { world.spawnEntityInWorld(entityarrow); System.out.println("flèche normale"); } }ça marche mais ça me lance a chaque fois 2 flèches exemple: flèche en feu et flèche normale sauf pour la flèche normale et les 5 flèches alors que mon packet et bien enregistrer côté serveur du coup faut a chaque if mettre !world.isremote mais y’a un conflit avec le keybinding comment je peux faire ??
-
File ta classe PacketArrow et l’endroit de ta classe principale où tu l’enregistres.
Et puis c’est normal que plusieurs flèches différentes soienr envoyées alors que tu n’en souhaites qu’une seul, regarde un peu toutes tes conditions. Y’a plein de if à la suite, donc normal que tout ton code s’enchaîne à la lecture du code. Remplace les par des else if, si tu ne veux qu’une seule par type ne soit envoyée.
-
@‘Plaigon’:
File ta classe PacketArrow et l’endroit de ta classe principale où tu l’enregistres.
Et puis c’est normal que plusieurs flèches différentes soienr envoyées alors que tu n’en souhaites qu’une seul, regarde un peu toutes tes conditions. Y’a plein de if à la suite, donc normal que tout ton code s’enchaîne à la lecture du code. Remplace les par des else if, si tu ne veux qu’une seule par type ne soit envoyée.
Tien:
J’ai mis des else if c’est pareil
Classe principale:network = NetworkRegistry.INSTANCE.newSimpleChannel("lc:"); network.registerMessage(PacketClassesGUI.Handler.class, PacketClassesGUI.class, 0, Side.SERVER); network.registerMessage(PacketGuerrier.Handler.class, PacketGuerrier.class, 1, Side.SERVER); network.registerMessage(PacketArrow.Handler.class, PacketArrow.class, 2, Side.SERVER); network.registerMessage(PacketTitle.Handler.class, PacketTitle.class, 3, Side.CLIENT);PacketArrow:
package net.legacymod.packets; import io.netty.buffer.ByteBuf; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.projectile.EntityArrow; import net.minecraft.util.Vec3; import cpw.mods.fml.common.network.simpleimpl.IMessage; import cpw.mods.fml.common.network.simpleimpl.IMessageHandler; import cpw.mods.fml.common.network.simpleimpl.MessageContext; public class PacketArrow implements IMessage{ private float f1; private static int i; public PacketArrow(){ } public PacketArrow(float f, int i) { this.f1 = f; this.i = i; } @Override public void fromBytes(ByteBuf buf) { f1 = buf.readFloat(); i = buf.readInt(); } @Override public void toBytes(ByteBuf buf) { buf.writeFloat(f1); buf.writeInt(i); } public static class Handler implements IMessageHandler <packetarrow, imessage="">{ @Override public IMessage onMessage(PacketArrow message, MessageContext ctx) { EntityArrow entityarrow = new EntityArrow(ctx.getServerHandler().playerEntity.worldObj, ctx.getServerHandler().playerEntity, message.f1 + message.i); EntityArrow entityarrow2 = new EntityArrow(ctx.getServerHandler().playerEntity.worldObj, ctx.getServerHandler().playerEntity, message.f1 + message.i); EntityArrow entityarrow3 = new EntityArrow(ctx.getServerHandler().playerEntity.worldObj, ctx.getServerHandler().playerEntity, message.f1 + message.i); EntityArrow entityarrow4 = new EntityArrow(ctx.getServerHandler().playerEntity.worldObj, ctx.getServerHandler().playerEntity, message.f1 + message.i); EntityArrow entityarrow5 = new EntityArrow(ctx.getServerHandler().playerEntity.worldObj, ctx.getServerHandler().playerEntity, message.f1 + message.i); switch(i) { case 1: { entityarrow.getEntityData().setBoolean("isExplosive", true); ctx.getServerHandler().playerEntity.worldObj.spawnEntityInWorld(entityarrow); break; } case 2: { ctx.getServerHandler().playerEntity.worldObj.spawnEntityInWorld(entityarrow); ctx.getServerHandler().playerEntity.worldObj.spawnEntityInWorld(entityarrow2); ctx.getServerHandler().playerEntity.worldObj.spawnEntityInWorld(entityarrow3); ctx.getServerHandler().playerEntity.worldObj.spawnEntityInWorld(entityarrow4); ctx.getServerHandler().playerEntity.worldObj.spawnEntityInWorld(entityarrow5); Vec3 look = ctx.getServerHandler().playerEntity.getLookVec(); entityarrow.setPosition( ctx.getServerHandler().playerEntity.posX + look.xCoord, ctx.getServerHandler().playerEntity.posY + 1 + look.yCoord, ctx.getServerHandler().playerEntity.posZ + look.zCoord); entityarrow2.setPosition( ctx.getServerHandler().playerEntity.posX + 1 + look.xCoord, ctx.getServerHandler().playerEntity.posY + 1 + look.yCoord, ctx.getServerHandler().playerEntity.posZ + look.zCoord); entityarrow3.setPosition( ctx.getServerHandler().playerEntity.posX + look.xCoord, ctx.getServerHandler().playerEntity.posY + 1 + look.yCoord, ctx.getServerHandler().playerEntity.posZ + 1 + look.zCoord); entityarrow4.setPosition( ctx.getServerHandler().playerEntity.posX - 1 + look.xCoord, ctx.getServerHandler().playerEntity.posY + 1 + look.yCoord, ctx.getServerHandler().playerEntity.posZ + look.zCoord); entityarrow5.setPosition( ctx.getServerHandler().playerEntity.posX + look.xCoord, ctx.getServerHandler().playerEntity.posY + 1 + look.yCoord, ctx.getServerHandler().playerEntity.posZ - 1 + look.zCoord); break; } case 3: { ctx.getServerHandler().playerEntity.worldObj.spawnEntityInWorld(entityarrow); entityarrow.setFire(2 * 5); break; } default: break; } return null; } } }edit:
Help?</packetarrow,> -
Personne ne sait ?
-
Tu ne dois pas avoir de variables statiques dans ton paquet. Et pourquoi invoquer pleins de constructeurs s’ils ne sont pas tous utilisés ?
-
@‘SCAREX’:
Tu ne dois pas avoir de variables statiques dans ton paquet. Et pourquoi invoquer pleins de constructeurs s’ils ne sont pas tous utilisés ?
Pas sa mon problème, c’est que j’ai un problème avec le !world.remote et le ClientProxy.keybind … j’ai un conflit client / serveur.
Du coup on m’a dis de faire un packet pour le keybindMais je dois mettre quoi dans se packet ? juste le ClientProxy.key… dans la fonction onmessagage ?
-
@‘floriangabet’:
@‘SCAREX’:
Tu ne dois pas avoir de variables statiques dans ton paquet. Et pourquoi invoquer pleins de constructeurs s’ils ne sont pas tous utilisés ?
Pas sa mon problème, c’est que j’ai un problème avec le !world.remote et le ClientProxy.keybind … j’ai un conflit client / serveur.
Du coup on m’a dis de faire un packet pour le keybindMais je dois mettre quoi dans se packet ? juste le ClientProxy.key… dans la fonction onmessagage ?
C’est à dire ? tu essaies de faire quoi ?
-
@‘floriangabet’:
@‘SCAREX’:
Tu ne dois pas avoir de variables statiques dans ton paquet. Et pourquoi invoquer pleins de constructeurs s’ils ne sont pas tous utilisés ?
Pas sa mon problème, c’est que j’ai un problème avec le !world.remote et le ClientProxy.keybind … j’ai un conflit client / serveur.
Du coup on m’a dis de faire un packet pour le keybindMais je dois mettre quoi dans se packet ? juste le ClientProxy.key… dans la fonction onmessagage ?
Il y a plusieurs problèmes :
D’abord, dans ton packet, la variable “i” est static or elle ne doit pas l’être.
Ensuite dans la class de ton item, la ou tu vérifie sur quelle touche on click pour ensuite envoyer une flèche : il faut utiliser des “else if” au lieux de “if” car sinon, si plusieurs conditions sont validés, alors ça invoque plusieurs flèches. De plus, il ne faut pas mettre “&& !world.isRemote” car tu vérifie les touches coté client. (au passage, il manque quelques vérifications de timer) -
@‘LeBossMax2’:
@‘floriangabet’:
@‘SCAREX’:
Tu ne dois pas avoir de variables statiques dans ton paquet. Et pourquoi invoquer pleins de constructeurs s’ils ne sont pas tous utilisés ?
Pas sa mon problème, c’est que j’ai un problème avec le !world.remote et le ClientProxy.keybind … j’ai un conflit client / serveur.
Du coup on m’a dis de faire un packet pour le keybindMais je dois mettre quoi dans se packet ? juste le ClientProxy.key… dans la fonction onmessagage ?
Il y a plusieurs problèmes :
D’abord, dans ton packet, la variable “i” est static or elle ne doit pas l’être.
Ensuite dans la class de ton item, la ou tu vérifie sur quelle touche on click pour ensuite envoyer une flèche : il faut utiliser des “else if” au lieux de “if” car sinon, si plusieurs conditions sont validés, alors ça invoque plusieurs flèches. De plus, il ne faut pas mettre “&& !world.isRemote” car tu vérifie les touches coté client. (au passage, il manque quelques vérifications de timer)Salut,
Alors pour le i ok pour les else if c’est fait et si je met pas les && !world.isRemote sa me lance deux flèches une normale et une en feu (pour le sort de feu) et cela a chaque sort sauf pour les 5 flèches car c’est pas avec l’action d’un touche donc pas côté client . -
Oups, j’avais pas pensais à ça… Je pence que le plus simple ce serais d’envoyer aussi la flèche normal et les 5 flèches avec le packet des flèches en mettant bien des “world.isRemote” pour que le serveur ne s’envoie pas des packet à lui même.
Edit : tu devrais aussi gérer les timer coté serveur dans le “onMessage” du packet.
-
Je crois que tu n’as toujours pas compris c’est sûrement de ma faute on me dit de pas assez détailler et ils ont raison alors je vais essayer de t’expliquer.
En gros se que je cherche à faire tu as du comprendre ça au moins x):
- Différente flèches sur le même arc activable avec différente touches avec un timer pour ne pas spam les sorts.
Mon problème:
- En gros le soucis c’est que vus que la flèche doit êtres lancé côté serveur et que j’active mes sorts avec des touches côté client tu comprends bien que serveur et client n’est pas trop compatible…
- Du coup moi se que je veux c’est donc lancé la flèche côté serveur et en même temps pouvoir activé le sort avec une touche (on m’a dit que c’était possible avec un packet, mais je vois pas du tout quoi mettre dedans appart juste le Clientproxy.ketbind… dans la fonction onMesssage j’ai pas essayer perso) .
Quand tu dis: tu devrais aussi gérer les timer coté serveur dans le “onMessage” du packet.
Tu parle des temps de recharge de mes sort logiquement si oui je peux faire comment pour les timers avec des int timer ? ensuite if (timer > 0) timer–; un truc du genre ?
-
Est-ce que ce ne serai pas plus simple de modifier le metadata lorsqu’on appuie sur une touche et ensuite récupérer le metadata afin de savoir quelle sorte de flèche tirer ?
-
Il faudrait aussi un packet pour la changer.
Envoyé via mobile
-
@‘SCAREX’:
Est-ce que ce ne serai pas plus simple de modifier le metadata lorsqu’on appuie sur une touche et ensuite récupérer le metadata afin de savoir quelle sorte de flèche tirer ?
Euhhhhhh c’est à dire ?
Je sais pas c’est quoi le métadata ^^ -
Le metadata est un nombre (par défaut à 0) qui est présent sur tous les items et les blocks ce qui permet de créer plusieurs variantes d’un item ou d’un bloc, exemples : la laine n’a qu’un seul bloc avec plusieurs métadatas, les items qui s’usent utilisent les métadatas, les blocs qui ont une orientation ont des métadatas différents, etc.
-
@‘SCAREX’:
Le metadata est un nombre (par défaut à 0) qui est présent sur tous les items et les blocks ce qui permet de créer plusieurs variantes d’un item ou d’un bloc, exemples : la laine n’a qu’un seul bloc avec plusieurs métadatas, les items qui s’usent utilisent les métadatas, les blocs qui ont une orientation ont des métadatas différents, etc.
Ahhh ok je vois .
Mais comment l’utilisé ?
Si vous avez des tutos ou quoi je suis preneur car la ^^ . -
stack.metadata
-
stack.set/getDamage.
Avec un outil ce n’est pas bon car le metadata est déjà utilisé pour l’usure de l’item. -
En revanche tu peux toujours utiliser les nbt
-
Donc si j’ai bien compris il faut que je changer les metadata de la touche ? c’est bien ça ?
Mais je vois pas du tout comment faire en fait …