#Plugin particle trails, need help

1 messages · Page 1 of 1 (latest)

subtle obsidian
#

making a plugin for particles to follow a player around when moving, however when i click a trail in the server it plays both trails and not just the 1, i am new to programming so any help will do, thanks

`package Player;

import java.util.Random;

import org.bukkit.Particle;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerMoveEvent;

public class Movement implements Listener {

@EventHandler
public void onMove(PlayerMoveEvent event) {
    if (!ParticleData.hasFakeID(event.getPlayer().getUniqueId()))
        return;

    Random r = new Random(); // magic trail
    for (int i = 0; i < 5; i++)
        event.getPlayer().getWorld().spawnParticle(Particle.ENCHANTED_HIT, event.getPlayer().getLocation()
                .add(r.nextDouble() * 0.5, r.nextDouble() * 0.5, r.nextDouble() * .5), 0);
    event.getPlayer().getWorld().spawnParticle(Particle.ENCHANTED_HIT, event.getPlayer().getLocation()
            .add(-1 * (r.nextDouble() * 0.5), r.nextDouble() * 0.5, (r.nextDouble() * .5) * -1), 0);

    Random r1 = new Random(); //note trail
    for (int i = 0; i < 5; i++) {
        event.getPlayer().getWorld().spawnParticle(Particle.NOTE, event.getPlayer().getLocation()
                .add(r1.nextDouble() * 0.5, 1.8 + r.nextDouble() * 0.5, r.nextDouble() * 0.5), 1);
    }

}

}`

I am trying to add the note trail above to music trail here in clickEvent:

#

i have examples of it in the actual server, lmk if you want to see it

rich yacht
subtle obsidian
rich yacht
#

import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

import org.bukkit.Bukkit;

public class ParticleData {

private static Map<UUID, Integer> TRAILS = new HashMap<UUID, Integer>();
private final UUID uuid;

public ParticleData(UUID uuid) {
this.uuid = uuid;
}

public void setID(int id) {
TRAILS.put(uuid, id);
}

public Integer getID() {
    return TRAILS.get(uuid);
}

public boolean hasID() {
    return TRAILS.containsKey(uuid);
}

public void removeID() {
TRAILS.remove(uuid);
}

public void endTask() {
    Integer id = getID();
    if (id == null || id == 1) return;

    Bukkit.getScheduler().cancelTask(id);
}

public static boolean hasFakeID(UUID uuid) {
    return TRAILS.getOrDefault(uuid, -1) == 1;
  }
}```

Better version. That means you have to fix your checking methods in your ClickEvent class
rich yacht
# subtle obsidian

    private GUI menu;
    private static final Map<UUID, ParticleData> particleMap = new HashMap<>();

    public ClickEvent() {
        menu = new GUI();
    }

    @EventHandler
    public void onClick(InventoryClickEvent event) {
        if (!event.getInventory().equals(menu.getInventory())) return;

        Player player = (Player) event.getWhoClicked();
        event.setCancelled(true);

        if (event.getView().getType() == InventoryType.PLAYER) return;

        UUID uuid = player.getUniqueId();
        ParticleData particle = particleMap.computeIfAbsent(uuid, ParticleData::new);
        Effects trails = new Effects(player);

        if (particle.hasID() && !ParticleData.hasFakeID(uuid)) {
            particle.endTask();
            particle.removeID();
        }

        switch (event.getSlot()) {
            case 0:
                trails.startTotem(); // totem trail
                player.closeInventory();
                break;
            case 1:
                particle.setID(1); // magic trail (fake ID)
                trails.startMagic(); // assuming this method exists
                player.closeInventory();
                break;
            case 2:
                particle.setID(2); // music trail
                trails.startMusic(); // assuming this method exists
                player.closeInventory();
                break;
            case 3:
            case 4:
                // Reserved for future effects
                break;
            default:
                break;
        }

        player.updateInventory();
    }
}

Better ClickEvent Class