Core/src/main/java/eu/univento/core/api/player/Spectator.java

75 lines
2.3 KiB
Java

/*
* Copyright (c) 2018 univento.eu - All rights reserved
* You are not allowed to use, distribute or modify this code
*/
package eu.univento.core.api.player;
import eu.univento.core.Core;
import eu.univento.core.api.game.PlayerManager;
import eu.univento.core.api.gui.inventory.InventoryGUI;
import eu.univento.core.api.items.ItemBuilder;
import eu.univento.core.api.server.ServerSettings;
import org.bukkit.GameMode;
import org.bukkit.Material;
/**
* @author joethei
* @version 2.0
*/
public class Spectator {
private final CustomPlayer player;
public Spectator(CustomPlayer player) {
this.player = player;
for (CustomPlayer players : Core.getOnlinePlayers())
players.hidePlayer(player);
SpectateManager.add(this);
player.setGameMode(GameMode.ADVENTURE);
player.setAllowFlight(true);
player.setFlying(true);
player.getInventory().setItem(7, new ItemBuilder(Material.PAPER).name("Weiterspielen").build());
player.getInventory().setItem(8, new ItemBuilder(Material.BED).name("Zur Lobby").build());
}
public CustomPlayer getPlayer() {
return player;
}
public void remove() {
for(CustomPlayer players : Core.getOnlinePlayers())
players.hidePlayer(player);
player.setGameMode(ServerSettings.getGameMode());
player.setAllowFlight(false);
player.setFlying(false);
SpectateManager.remove(this);
if(player.getSpectatorTarget() != null) player.setSpectatorTarget(null);
}
public void spectate(CustomPlayer p) {
if(SpectateManager.contains(p)) {
player.sendMessage("Dieser Spieler ist schon tot");
return;
}
if(!p.isOnline()) {
player.sendMessage("Dieser Spieler ist nicht mehr online");
return;
}
player.setSpectatorTarget(p);
}
public void resetSpectateTarget() {
if(player.getSpectatorTarget() != null) player.setSpectatorTarget(null);
}
public void openPlayerListInventory() {
InventoryGUI gui = new InventoryGUI(player, (int) (Math.ceil(PlayerManager.getPlayers().size() / 9.0D) * 9), "Spieler");
int i = 0;
for(CustomPlayer players : PlayerManager.getPlayers()) {
gui.addItem(i, new ItemBuilder(Material.SKULL_ITEM).durability((short) 3).skullOwner(players.getUniqueId()).build(), player -> spectate(players));
i++;
}
}
}