Résolu Envoyer des boules de feu
-
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é