Particle Effects

07/28/2014 21:04 ຖēxiຊ#1
Heej liebes Forum,

ich brauch mal eure Hilfe.
Ich bin grade dabei ein Plugin zu schreiben was einem ermöglicht wenn er einen rechtsklick auf ein NetherStar macht öffnet sich ein Inventar.
In diesem Inventar sind Items und wenn man auf diese klickt bekommt man ein Particle Effect über sich gesetzt.
Dies klapp bis hierhin.
Aber wenn man das im Multiplayer nutzt ändert es den effect von jedem Spieler nicht nur von dem der draufgeklickt hat....

Code:
package me.tedwurd;

import me.tedwurd.MainClass;
import me.tedwurd.ParticleEffect;

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.inventory.InventoryClickEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.plugin.Plugin;

public class InventoryListener implements Listener {

	private MainClass plugin;

	public InventoryListener(MainClass info) {
		this.plugin = info;
		this.plugin.getServer().getPluginManager().registerEvents(this, plugin);
	}

	@EventHandler
	public void onInvClick(InventoryClickEvent e) {
		Player p = (Player) e.getWhoClicked();

		if (e.getInventory().getName().equalsIgnoreCase("§6Particles")) {
			e.setCancelled(true);

			// - Herzen
			if (e.getCurrentItem().getType() == Material.APPLE) {
				p.closeInventory();
				p.playSound(p.getLocation(), Sound.CHEST_CLOSE, 1, 1);
				Bukkit.getScheduler().cancelAllTasks();

				
				Bukkit.getServer()
						.getScheduler()
						.scheduleSyncRepeatingTask(this.plugin = plugin,
								new Runnable() {
									public void run() {
										for (Player p : Bukkit.getServer()
												.getOnlinePlayers()) {
											ParticleEffect.HEART.display(
													p.getLocation()
															.add(0, 2, 0), 15,
													0, 0, 0, 10, 10);
										}
									}
								}, 0, 25);
			}

			// - Lava
			if (e.getCurrentItem().getType() == Material.LAVA_BUCKET) {
				p.closeInventory();
				p.playSound(p.getLocation(), Sound.CHEST_CLOSE, 1, 1);
				Bukkit.getScheduler().cancelAllTasks();

				Bukkit.getServer()
						.getScheduler()
						.scheduleSyncRepeatingTask(this.plugin = plugin,
								new Runnable() {
									public void run() {
										for (Player p : Bukkit.getServer()
												.getOnlinePlayers()) {
											ParticleEffect.LAVA.display(
													p.getLocation()
															.add(0, 2, 0), 15,
													0, 0, 0, 10, 10);
										}
									}
								}, 0, 50);
			}

			// - WitchMagic
			if (e.getCurrentItem().getType() == Material.EXP_BOTTLE) {
				p.closeInventory();
				p.playSound(p.getLocation(), Sound.CHEST_CLOSE, 1, 1);
				Bukkit.getScheduler().cancelAllTasks();

				Bukkit.getServer()
						.getScheduler()
						.scheduleSyncRepeatingTask(this.plugin = plugin,
								new Runnable() {
									public void run() {
										for (Player p : Bukkit.getServer()
												.getOnlinePlayers()) {
											ParticleEffect.WITCH_MAGIC.display(
													p.getLocation()
															.add(0, 2, 0), 15,
													0, 0, 0, 10, 10);
										}
									}
								}, 0, 1);
			}

		}

	}
}
Ich Danke euch jetzt schonmal :)
Liebe Grüße! :)
07/28/2014 21:19 False#2
Entweder ich verstehe es falsch oder du zeigst uns die falsche klasse, hier werden ja nur die Items den Inventar hinzugefügt und es geöffnet.
Übrings frage ich mich warum dort 3mal p.openInventory(plugin.inv); hast wenn danach noch Items hinzugefügt werden?
07/28/2014 21:24 ຖēxiຊ#3
Quote:
Originally Posted by .ƒaℓsє. View Post
Entweder ich verstehe es falsch oder du zeigst uns die falsche klasse, hier werden ja nur die Items den Inventar hinzugefügt und es geöffnet.
Übrings frage ich mich warum dort 3mal p.openInventory(plugin.inv); hast wenn danach noch Items hinzugefügt werden?

hups war falsche klasse :D
Ist oben :)

Hatte das immer kopiert und eingefügt nach dem Herz und vergessen es wegzunehmen^^
Danke für den hinweiß :P
07/28/2014 21:30 False#4
Mit logischen denken bekommt man das eigentlich ganz leicht raus.
Frag dich was passiert wenn wenn du auf ein Item klickst -> es wird ein sheduler gestartet der die particle abspielt.
Klickst du ein weiteres Item an wird ein neuer sheduler gestartet, sprich nun sind zwei an die zwei verschiedene Particle abspielen.

Lösung:
Entweder die sheduler wieder beenden oder der ausgewählte particle speichern(ob config,hashmap, etc ist egal) und in EINEM sheduler auslesen und den passenden Particle erzeugen.
07/28/2014 22:22 ຖēxiຊ#5
Danke dir klappt :)