103 lines
3.9 KiB
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));
|
|
}
|
|
} |