LoupGarou/src/main/java/fr/leomelki/loupgarou/roles/RLoupGarouBlanc.java
2020-09-07 23:40:57 +02:00

170 lines
5.3 KiB
Java

package fr.leomelki.loupgarou.roles;
import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.classes.LGWinType;
import fr.leomelki.loupgarou.events.LGEndCheckEvent;
import fr.leomelki.loupgarou.events.LGGameEndEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.EventPriority;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.ItemMeta;
import java.util.Collections;
public class RLoupGarouBlanc extends Role {
private static final ItemStack skip;
static {
skip = new ItemStack(Material.IRON_NUGGET);
ItemMeta meta = skip.getItemMeta();
meta.setDisplayName("§7§lNe rien faire");
meta.setLore(Collections.singletonList("§8Passez votre tour"));
skip.setItemMeta(meta);
}
Runnable callback;
RLoupGarou lg;
public RLoupGarouBlanc(LGGame game) {
super(game);
}
@Override
public String getName() {
return "§c§lLoup Blanc";
}
@Override
public String getFriendlyName() {
return "du " + getName();
}
@Override
public String getShortDescription() {
return "Tu gagnes §7§lSEUL";
}
@Override
public String getDescription() {
return "Tu gagnes §7§lSEUL§f. Les autres §c§lLoups§f croient que tu es un loup normal, mais une nuit sur deux, tu peux assassiner l'un d'eux au choix.";
}
@Override
public String getTask() {
return "Tu peux choisir un §c§lLoup-Garou§6 à éliminer, ou te rendormir.";
}
@Override
public String getBroadcastedTask() {
return "Le " + getName() + "§9 pourrait faire un ravage cette nuit...";
}
@Override
public RoleType getType() {
return RoleType.LOUP_GAROU;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.SEUL;
}
@Override
public int getTimeout() {
return 15;
}
@Override
public boolean hasPlayersLeft() {
return super.hasPlayersLeft() && getGame().getNight() % 2 == 0;
}
@Override
protected void onNightTurn(LGPlayer player, Runnable callback) {
this.callback = callback;
RLoupGarou lg_ = null;
for (Role role : getGame().getRoles())
if (role instanceof RLoupGarou) {
lg_ = (RLoupGarou) role;
break;
}
RLoupGarou lg = lg_;
player.showView();
player.getPlayer().getInventory().setItem(8, skip);
player.choose(choosen -> {
if (choosen != null && choosen != player) {
if (!lg.getPlayers().contains(choosen)) {
player.sendMessage("§7§l" + choosen.getName() + "§4 n'est pas un Loup-Garou.");
return;
}
player.sendActionBarMessage("§e§l" + choosen.getName() + "§6 va mourir cette nuit");
player.sendMessage("§6Tu as choisi de dévorer §7§l" + choosen.getName() + "§6.");
player.getPlayer().getInventory().setItem(8, null);
player.getPlayer().updateInventory();
getGame().kill(choosen, Reason.LOUP_BLANC);
player.stopChoosing();
player.hideView();
callback.run();
}
});
}
@EventHandler
public void onClick(PlayerInteractEvent e) {
Player p = e.getPlayer();
LGPlayer player = LGPlayer.thePlayer(getGame().getPlugin(), p);
if (e.getItem() != null && e.getItem().getType() == Material.IRON_NUGGET && player.getRole() == this) {
player.stopChoosing();
p.getInventory().setItem(8, null);
p.updateInventory();
player.hideView();
player.sendMessage("§6Tu n'as tué personne.");
callback.run();
}
}
@Override
protected void onNightTurnTimeout(LGPlayer player) {
player.stopChoosing();
player.getPlayer().getInventory().setItem(8, null);
player.getPlayer().updateInventory();
player.hideView();
player.sendMessage("§6Tu n'as tué personne.");
}
@Override
public void join(LGPlayer player, boolean sendMessage) {
super.join(player, sendMessage);
for (Role role : getGame().getRoles())
if (role instanceof RLoupGarou)
(lg = (RLoupGarou) role).join(player, false);
}
@EventHandler
public void onEndgameCheck(LGEndCheckEvent e) {
if (e.getGame() == getGame() && e.getWinType() == LGWinType.SOLO) {
if (getPlayers().size() > 0) {
if (lg.getPlayers().size() > getPlayers().size())
e.setWinType(LGWinType.NONE);
else if (lg.getPlayers().size() == getPlayers().size())
e.setWinType(LGWinType.LOUPGAROUBLANC);
}
}
}
@EventHandler(priority = EventPriority.HIGHEST)
public void onEndGame(LGGameEndEvent e) {
if (e.getWinType() == LGWinType.LOUPGAROUBLANC) {
e.getWinners().clear();
e.getWinners().addAll(getPlayers());
}
}
}