Envoyer des boules de feu
-
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. -
@‘MrBlockTNT’:
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.Le problème est que ça vient du code de la fireball, je suis en train de cherche une autre solution.
EDIT :
le problème vient de là :accelX += this.rand.nextGaussian() * 0.4D; accelY += this.rand.nextGaussian() * 0.4D; accelZ += this.rand.nextGaussian() * 0.4D;Si la différence entre la position visée et la position du joueur est négative et que cette valeur absolue est inférieure à random.nextGaussian() * 0.4D alors la boule pars de l’autre côté, même chose si le accel est supérieure et le random.nextGaussian() * 0.4D inférieure à la valeur absolue.
Ce que je viens de dire est très confus, voici un example :
//Ici un exemple de distance entre le joueur et la coordonnée visée, ici il y a 0.4 blocs de distance accelX = -0.4D; //Imaginons maintenant que le random.nextGaussian() * 0.4D donne 0.6D accelX += 0.6D //soit 0.2D donc la boule de feu part de l'autre côté