LoupGarou/src/main/java/fr/leomelki/loupgarou/roles/RBouffon.java
leomelki f79609c0a6 Upload to github
Envoi du projet sur GitHub (non privé)
2020-03-17 18:46:26 +01:00

149 lines
4.6 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package fr.leomelki.loupgarou.roles;
import java.util.ArrayList;
import java.util.List;
import java.util.StringJoiner;
import org.bukkit.event.EventHandler;
import org.bukkit.scheduler.BukkitRunnable;
import fr.leomelki.loupgarou.MainLg;
import fr.leomelki.loupgarou.classes.LGGame;
import fr.leomelki.loupgarou.classes.LGPlayer;
import fr.leomelki.loupgarou.events.LGGameEndEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent;
import fr.leomelki.loupgarou.events.LGPlayerKilledEvent.Reason;
public class RBouffon extends Role{
public RBouffon(LGGame game) {
super(game);
}
@Override
public RoleType getType() {
return RoleType.NEUTRAL;
}
@Override
public RoleWinType getWinType() {
return RoleWinType.NONE;
}
@Override
public String getName() {
return "§d§lBouffon";
}
@Override
public String getFriendlyName() {
return "du "+getName();
}
@Override
public String getShortDescription() {
return "Tu gagnes si tu remplis ton objectif";
}
@Override
public String getDescription() {
return "Tu es §d§lNeutre§f et tu gagnes si tu remplis ton objectif. Ton objectif est d'être éliminé par le village lors de nimporte quel vote de jour. Si tu réussis, tu gagnes la partie, mais celle-ci continue. Tu pourras tuer l'une des personnes qui t'ont condamné.";
}
@Override
public String getTask() {
return "Choisis quelquun à hanter parmi ceux qui ont voté pour ta mort.";
}
@Override
public String getBroadcastedTask() {
return "L'esprit vengeur du "+getName()+"§9 rôde sur le village...";
}
@Override
public int getTimeout() {
return 15;
}
public void onNightTurn(Runnable callback) {
ArrayList<LGPlayer> players = (ArrayList<LGPlayer>) needToPlay.clone();
new Runnable() {
@Override
public void run() {
getGame().cancelWait();
if(players.size() == 0) {
onTurnFinish(callback);
return;
}
LGPlayer player = players.remove(0);
getGame().wait(getTimeout(), ()->{RBouffon.this.onNightTurnTimeout(player);this.run();}, (currentPlayer, secondsLeft)->{
return currentPlayer == player ? "§9§lC'est à ton tour !" : "§6C'est au tour "+getFriendlyName()+" §6(§e"+secondsLeft+" s§6)";
});
player.sendMessage("§6"+getTask());
// player.sendTitle("§6C'est à vous de jouer", "§a"+getTask(), 100);
onNightTurn(player, this);
}
}.run();
}
public boolean hasPlayersLeft() {
return needToPlay.size() > 0;
}
@Override
protected void onNightTurn(LGPlayer player, Runnable callback) {
needToPlay.remove(player);
player.showView();
player.getCache().set("bouffon_win", true);
System.out.println(getGame().getVote());
List<LGPlayer> choosable = getGame().getVote().getVotes(player);
StringJoiner sj = new StringJoiner("§6§o, §6§o§l");
for(LGPlayer lgp : choosable)
if(lgp.getPlayer() != null && lgp.getPlayer() != player)
sj.add(lgp.getName());
player.sendMessage("§6§o§l"+sj+"§6§o "+(sj.length() > 1 ? "ont" : "a")+" voté pour toi.");
player.choose((choosen)->{
if(choosen != null) {
System.out.println(choosable+" / "+getGame().getVote().getVotes()+" "+getGame().getVote());
if(!choosable.contains(choosen))
player.sendMessage("§7§l"+choosen.getName()+"§4 n'a pas voté pour vous.");
else if(choosen.isDead())
player.sendMessage("§7§l"+choosen.getName()+"§4 est mort.");//fix
else {
player.stopChoosing();
player.sendMessage("§6Ton fantôme va hanter l'esprit de §7§l"+choosen.getName()+"§6.");
getGame().kill(choosen, Reason.BOUFFON);
player.hideView();
callback.run();
}
}
}, player);
}
@Override
protected void onNightTurnTimeout(LGPlayer player) {
player.stopChoosing();
}
ArrayList<LGPlayer> needToPlay = new ArrayList<LGPlayer>();
@EventHandler
public void onPlayerKill(LGPlayerKilledEvent e) {
if(e.getKilled().getRole() == this && e.getReason() == Reason.VOTE) {
needToPlay.add(e.getKilled());
getGame().broadcastMessage("§9§oQuelle erreur, le "+getName()+"§9§o aura droit à sa vengeance...");
e.getKilled().sendMessage("§6Tu as rempli ta mission, l'heure de la vengeance a sonné.");
}
}
@EventHandler
public void onWin(LGGameEndEvent e) {
if(e.getGame() == getGame())
for(LGPlayer lgp : getGame().getInGame())
if(lgp.getRole() == this && lgp.getCache().getBoolean("bouffon_win")) {
e.getWinners().add(lgp);
new BukkitRunnable() {
@Override
public void run() {
getGame().broadcastMessage("§6§oLe "+getName()+"§6§o a rempli son objectif.");
}
}.runTaskAsynchronously(MainLg.getInstance());
}
}
}