Envoyer des boules de feu
-
J’ai déjà regardé et j’utilise ça pour mes dragons. Le problème, c’est que l’on connait la position de l’entité ciblée, alors que là, on ne la connait pas.
-
Up une idée ? :huh:
-
Il y a un moyen de get le pos de la ou regarde le joueur ?
-
- double d0 = player.getLookVec().xCoord;
- double d1 = player.getLookVec().yCoord;
- double d2 = player.getLookVec().zCoord;
Normalement c’est ça mais quand on regarde le ciel, ça récupère le bloc de juste après le joueur.
-
Moi je veux le bloques que le joueur regardes pour viser en gros
-
J’ai trouvé aussi EntityPlayer.getLook(float) mais je ne vois pas trop comment m’en servir. Sinon je ne crois pas qu’il y ait autre chose pour récupérer le regard (bloc visé) du joueur.
-
Up, quelqu’un ?
-
Up, ça marche mais c’est toujours aussi buggué, quelqu’un a une idée, une piste ?
-
Sinon il y a la fonction rayTrace mais elle n’est que disponible côté client.
-
Essaie peut être de lui donner un motion, je sais que quand je faisait des commandes pour les command bloc, il fallait rajouter le tag NBT Motion:[0.0,0.0,0.0], il doit bien y avoir une méthode comme ça dans le code du ghast. Je ne peux pas vérifier dans l’immédiat mais est-ce qu’il y a un autre constructeur pour la boule de ghast qui aurait comme paramètre une vélocité ou quelque chose d’autre dans le genre ?
-
@robin4002
Merci, je teste.
De toute façon j’exécute mon code côté client donc ça devrait aller.@SCAREX
Je regarde de suite mais il me semble que non (j’avais regardé chez le blaze)EDIT:
double d5 = this.targetedEntity.posX - this.posX; double d6 = this.targetedEntity.boundingBox.minY + (double)(this.targetedEntity.height / 2.0F) - (this.posY + (double)(this.height / 2.0F)); double d7 = this.targetedEntity.posZ - this.posZ; […] EntityLargeFireball entitylargefireball = new EntityLargeFireball(this.worldObj, this, d5, d6, d7); entitylargefireball.field_92057_e = this.explosionStrength; double d8 = 4.0D; Vec3 vec3 = this.getLook(1.0F); entitylargefireball.posX = this.posX + vec3.xCoord * d8; entitylargefireball.posY = this.posY + (double)(this.height / 2.0F) + 0.5D; entitylargefireball.posZ = this.posZ + vec3.zCoord * d8; this.worldObj.spawnEntityInWorld(entitylargefireball);Donc toujours le même problème de la cible.
J’ai regardé rayTrace mais je ne vois pas trop quoi mettre comme paramètres.
Comment récupérer une MovingObjectPosition et à quoi correspond-t-elle ?
A quoi correspond le float ? -
Le premier et la distance, le deuxième je ne sais pas du tout ce qu’il fait. Essaye avec 0 ou 1.
MovingObjectPosition mop = player.rayTrace(64, 1);
Après avec le mop tu peux savoir si le joueur vise un bloc ou une entité, et tu peux avoir les coordonnés. -
@‘robin4002’:
Le premier et la distance, le deuxième je ne sais pas du tout ce qu’il fait. Essaye avec 0 ou 1.
MovingObjectPosition mop = player.rayTrace(64, 1);
Après avec le mop tu peux savoir si le joueur vise un bloc ou une entité, et tu peux avoir les coordonnés.Il me semble que j’avais utilisé une fonction similaire mais avec des sinus cosinus etc. et la méthode se trouvait dans la classe world, est-ce la même fonction ?
-
non, rayTrace se trouve dans EntityLivingBase
-
@‘robin4002’:
non, rayTrace se trouve dans EntityLivingBase
Je vérifierai plus tard.
-
Merci, je teste

EDIT :
Avec ce code, la boule de feu part toujours dans la même direction :double d5; double d6; double d7; MovingObjectPosition mop = player.rayTrace(128.0D, 1); if(mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) { d5 = mop.blockX; d6 = mop.blockY; d7 = mop.blockZ; } else if(mop.typeOfHit == MovingObjectPosition.MovingObjectType.ENTITY) { d5 = mop.entityHit.posX; d6 = mop.entityHit.posY; d7 = mop.entityHit.posZ; } else { d5 = player.getLookVec().xCoord; d6 = player.getLookVec().yCoord; d7 = player.getLookVec().zCoord; } EntitySmallFireball entitylargefireball = new EntitySmallFireball(player.worldObj, player, d5, d6, d7); double d8 = 4.0D; Vec3 vec3 = player.getLook(1.0F); entitylargefireball.posX = player.posX + vec3.xCoord * d8; entitylargefireball.posY = player.posY + (double)(player.height / 2.0F) + 0.5D; entitylargefireball.posZ = player.posZ + vec3.zCoord * d8; player.worldObj.spawnEntityInWorld(entitylargefireball);J’ai testé avec rayTrace(128, 0) et rayTrace(128, 1), je vais tester d’autres valeurs demain.
-
Après test, le deuxième argument de rayTrace semble contrôler la direction, sauf qu’il m’est impossible de savoir réellement si la boule de feu va partir dans la bonne direction ou non (c’est assez random semble-t-il).
Quelqu’un a une idée ?
-
Non désolé

-
J’ai fait quelques recherches avec les codes des blaze et voilà le résultat trouvé :
public class ST18SpawnFireballCommand extends CommandBase { @Override public String getName(){ return "fireball"; } @Override public String getCommandUsage(ICommandSender p_71518_1_){ return null; } @Override public void execute(ICommandSender sender, String[] args){ if (sender instanceof EntityPlayerMP) { EntityPlayerMP p = (EntityPlayerMP) sender; MovingObjectPosition mop = p.rayTrace(128.0D, 1); double tx = mop.hitVec.xCoord; double ty = mop.hitVec.yCoord; double tz = mop.hitVec.zCoord; sender.addChatMessage(new ChatComponentText(String.format("position trouvée : (%.2f, %.2f, %.2f)", tx, ty, tz))); double d0 = tx - p.posX; double d1 = ty - (p.posY + (double) (p.height / 2.0F)); double d2 = tz - p.posZ; EntitySmallFireball entitysmallfireball = new EntitySmallFireball(p.worldObj, p, d0, d1, d2); entitysmallfireball.posY = p.posY + (double) (p.height / 2.0F) + 0.5D; p.worldObj.spawnEntityInWorld(entitysmallfireball); } } }chez moi ça marche parfaitement.
Pour robin : j’ai trouvé la fonction que j’avais utilisé, c’est la fonction rayTrace sauf qu’au moment de l’utiliser elle s’appelée func_147447_a mais se trouvée bien dans World.class
-
Merci, ça marche !
Un grand GG car sans toi (et robin) je n’aurais pas réussi !Il y a juste un petit problème, c’est que quand le joueur vise trop près de lui, la boule de feu part à l’opposé

EDIT :
Plus précisément quand il vise un bloc pas trop loin avec le regard un peu penché vers le bas.