Lobby/src/main/java/eu/univento/lobby/listeners/ItemEvents.java

103 lines
3.9 KiB
Java

package eu.univento.lobby.listeners;
import java.util.HashMap;
import eu.univento.core.Core;
import eu.univento.core.api.player.Rank;
import org.bukkit.Bukkit;
import org.bukkit.Effect;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.Sound;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import eu.univento.core.api.player.CustomPlayer;
import eu.univento.lobby.Lobby;
import org.bukkit.util.Vector;
/**
* some item events
*
* @author joethei
* @version 1.0
*/
public class ItemEvents implements Listener {
private HashMap<CustomPlayer, Integer> forcefield = new HashMap<>();
@EventHandler
public void onInteract(PlayerInteractEvent e) {
CustomPlayer p = CustomPlayer.getPlayer(e.getPlayer());
if (e.getAction() == Action.RIGHT_CLICK_AIR || e.getAction() == Action.RIGHT_CLICK_BLOCK) {
ItemStack item = p.getItemInHand();
if (item.getType() == Material.NAME_TAG) {
if (p.isAllowed(Rank.Partner)) {
if (p.isNicked()) {
p.setNicked(false);
p.sendMessage(p.getMessages().PREFIX() + p.getMessages().Lobby_AUTONICK_OFF());
} else {
p.setNicked(true);
p.sendMessage(p.getMessages().PREFIX() + p.getMessages().Lobby_AUTONICK_ON());
}
}
}
if (item.getType() == Material.EYE_OF_ENDER) {
if (p.isAllowed(Rank.Partner)) {
if (forcefield.containsKey(p)) {
Bukkit.getScheduler().cancelTask(forcefield.get(p));
forcefield.remove(p);
p.sendMessage(p.getMessages().PREFIX() + p.getMessages().Lobby_FORCEFIELD_OFF());
} else {
forcefield.put(p, force(p));
p.sendMessage(p.getMessages().PREFIX() + p.getMessages().Lobby_FORCEFIELD_ON());
}
}
e.setCancelled(true);
}
}
}
private int force(CustomPlayer p) {
return Bukkit.getScheduler().scheduleSyncRepeatingTask(Lobby.getInstance(), () -> {
if (forcefield.containsKey(p)) {
playEffect(p.getLocation(), Effect.ENDER_SIGNAL, true);
Core.getOnlinePlayers().stream().filter(players -> !p.getName().equals(players.getName()) &&
p.getLocation().distance(players.getLocation()) <= 5 &&
!Parkour.getPlayers().contains(players) &&
!PlayerHider.getSilentlobby().contains(p)).forEach(players -> {
int aX = p.getLocation().getBlockX();
int aY = p.getLocation().getBlockY();
int aZ = p.getLocation().getBlockZ();
int bX = p.getLocation().getBlockX();
int bY = p.getLocation().getBlockY();
int bZ = p.getLocation().getBlockZ();
int x = aX - bX;
int y = aY - bY;
int z = aZ - bZ;
Vector v = new Vector(x, y, z).normalize();
v.multiply(2.0D);
v.setY(1.5D);
players.setVelocity(v);
players.playEffect(p.getEyeLocation(), Effect.SMOKE, 3);
players.playSound(players.getLocation(), Sound.ENTITY_FIREWORK_BLAST, 3.0F, 3.0F);
});
}
}, 0L, 5L);
}
private void playEffect(Location loc, Effect effect, boolean v) {
for (int i = 0; i <= 8; i += ((!v) && (i == 3) ? 2 : 1))
Core.getOnlinePlayers().stream().filter(p -> p.hasEffects()).forEach(p -> p.playEffect(loc, effect, 1.0F));
}
}