Ligne de particules



  • Bonjour ou bonsoir.

    Je me posais une question en développant un système pour mon projet, est il possible de créer une ligne de particule (particules de flamme) car j'ai essayé beaucoup de chose et seul soucis c'est que ça ne marche pas,

    package mysteriousdevs.spellp.spells;
    
    import com.sun.jndi.toolkit.ctx.Continuation;
    import mysteriousdevs.spellp.References;
    import net.minecraft.entity.Entity;
    import net.minecraft.entity.EntityLiving;
    import net.minecraft.entity.player.EntityPlayer;
    import net.minecraft.util.EntityDamageSource;
    import net.minecraft.util.EnumParticleTypes;
    import net.minecraft.util.ResourceLocation;
    import net.minecraft.util.math.AxisAlignedBB;
    
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.List;
    import java.util.Timer;
    import java.util.TimerTask;
    
    public class DivinSwordSpell extends GeneralSpell
    {
    
    	public static final DivinSwordSpell INSTANCE = new DivinSwordSpell();
    
    	public DivinSwordSpell()
    	{
    
    		super("spell.divin_sword.name", 20, 10, new ResourceLocation(References.MODID, "textures/gui/icons/divine_sword_spell_icon.png"));
    
    	}
    
    	@Override
    	public void launchSpell(EntityPlayer player)
    	{
    
    		List<Entity> EntityOne = player.world.getEntitiesWithinAABBExcludingEntity(player, new AxisAlignedBB(player.posX + 3, player.posY + 1, player.posZ, player.posX - 3, player.posY + 1, player.posZ));
    
    		List<Entity> EntityTwo = player.world.getEntitiesWithinAABBExcludingEntity(player, new AxisAlignedBB(player.posX, player.posY + 1, player.posZ + 3, player.posX, player.posY + 1, player.posZ - 3));
    
    		for ( int i = 0; i < EntityOne.size(); i++ )
    		{
    
    			if( EntityOne.get(i) instanceof EntityLiving )
    			{
    				EntityOne.get(i).attackEntityFrom(EntityDamageSource.MAGIC, 4);
    			}
    
    		}
    
    		for ( int i = 0; i < EntityTwo.size(); i++ )
    		{
    
    			if( EntityTwo.get(i) instanceof EntityLiving )
    			{
    				EntityTwo.get(i).attackEntityFrom(EntityDamageSource.MAGIC, 4);
    			}
    
    		}
    
    
    		spawnParticle(player);
    
    	}
    
    	public void spawnParticle(EntityPlayer player)
    	{
    		for ( int i = 0; i < 8; i++ )
    		{
    
    
    				player.world.spawnParticle(EnumParticleTypes.REDSTONE, player.posX - 0.05, player.posY + 1, player.posZ, 0.05, 0, 0, 1, 2);
    				player.world.spawnParticle(EnumParticleTypes.FLAME, player.posX, player.posY + 1, player.posZ + 0.05, 0, 0, 0.05, 1, 2);
    				player.world.spawnParticle(EnumParticleTypes.FLAME, player.posX + 0.05, player.posY + 1, player.posZ, -0.05, 0, 0, 1, 2);
    				player.world.spawnParticle(EnumParticleTypes.FLAME, player.posX, player.posY + 1, player.posZ + 0.05, 0, 0, -0.05, 1, 2);
    
    
    
    		}
    
    
    		//System.out.println("X: " + x);
    		//System.out.println("Y: " + y);
    		//System.out.println("Z: " + z);
    
    
    	}
    
    
    }
    
    

    j'ai voulu au début répéter un spawn de particules 8 fois avec une latence de 0.5 seconde(un équivalent de la coroutine en C# pour le Java), seul soucis c'est que j'ai l'impression qu'un équivalent de la coroutine en Java ça n’existe pas, est ce qu'il existe une autre façon d'arriver au résultat attendu ?

    Merci d'avance

    Mysterious Devs


  • Administrateurs

    Salut,

    Pour effectuer une action régulièrement il faut passer par des fonctions de tick.
    Dans les entités, il y a la foncton onUpdate qui permet cela.



  • @robin4002 C'est bon j'ai trouvé un moyen en utilisant les timer, mais merci quand même de ta réponse 😉