Fixed round ending. kind of. The first round works the next one does not

This commit is contained in:
5gi 2022-07-02 11:36:51 -04:00
parent cc267d8cfe
commit 7fed4d8435
10 changed files with 138 additions and 80 deletions

View File

@ -2,11 +2,9 @@ package net.nevet5gi;
import net.nevet5gi.commands.StartGameCommand;
import net.nevet5gi.events.PreStartTTTEvent;
import net.nevet5gi.listeners.GameStartTTTListener;
import net.nevet5gi.listeners.GamesOnTTTListener;
import net.nevet5gi.listeners.PlayerInteractAtEntityListener;
import net.nevet5gi.listeners.PreStartTTTListener;
import net.nevet5gi.listeners.*;
import org.bukkit.entity.Player;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.plugin.java.JavaPlugin;
public final class SimpleTTTCore extends JavaPlugin {
@ -16,7 +14,8 @@ public final class SimpleTTTCore extends JavaPlugin {
@Override
public void onEnable() {
this.getCommand("startgame").setExecutor(new StartGameCommand(this));
this.getServer().getPluginManager().registerEvents(new PlayerInteractAtEntityListener(), this);
this.getServer().getPluginManager().registerEvents(new DeathListener(), this);
this.getServer().getPluginManager().registerEvents(new PlayerAttackListener(), this);
this.getServer().getPluginManager().registerEvents(new GamesOnTTTListener(), this);
this.getServer().getPluginManager().registerEvents(new GameStartTTTListener(), this);
this.getServer().getPluginManager().registerEvents(new PreStartTTTListener(), this);

View File

@ -1,6 +1,7 @@
package net.nevet5gi.commands;
import net.nevet5gi.SimpleTTTCore;
import net.nevet5gi.events.TTTGamesOnEvent;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
@ -19,9 +20,10 @@ public class StartGameCommand implements CommandExecutor {
if (sender instanceof Player) {
Player player = (Player) sender;
if (player.getServer().getOnlinePlayers().size() >= 2) {
player.sendMessage("Game Started");
//player.sendMessage(getRandomRole().toString());
SimpleTTTCore.startGame(plugin);
if (!TTTGamesOnEvent.isInGame()) {
player.sendMessage("Game Started");
SimpleTTTCore.startGame(plugin);
}
} else {
player.sendMessage("Not enough players to start game!");
}

View File

@ -4,9 +4,11 @@ import net.nevet5gi.util.Role;
import org.bukkit.entity.Player;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.plugin.java.JavaPlugin;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@ -16,9 +18,11 @@ public class TTTGamesOnEvent extends Event {
private static JavaPlugin plugin;
private List<Player> participatingPlayers = new ArrayList<>();
private Map<Player, Role> playerRoles;
private int[] roleAmounts = {0,0,0,0,0,0,0,0};
private static boolean inGame = false;
private static List<Player> participatingPlayers = new ArrayList<>();
private static Map<Player, Role> playerRoles;
private static int[] roleAmounts = {0,0,0,0,0,0,0,0};
public TTTGamesOnEvent(JavaPlugin plugin, List<Player> participatingPlayers, Map<Player, Role> playerRoles, int[] roleAmounts) {
@ -29,6 +33,12 @@ public class TTTGamesOnEvent extends Event {
}
public static void removePlayer(Player player) {
participatingPlayers.remove(player);
playerRoles.remove(player);
}
public int[] getRoleAmounts() {
return roleAmounts;
}
@ -45,8 +55,18 @@ public class TTTGamesOnEvent extends Event {
return playerRoles.get(player);
}
public Role getPlayerRoleByInt(int playerInt) {
return playerRoles.get(playerInt);
public static boolean isInGame() {
return inGame;
}
public static void setInGame(boolean choice) {
inGame = choice;
}
public static Role getRoleOfPlayer(Player player) {
return playerRoles.get(player);
}
@Override

View File

@ -0,0 +1,28 @@
package net.nevet5gi.listeners;
import net.nevet5gi.events.TTTGamesOnEvent;
import net.nevet5gi.util.Role;
import net.nevet5gi.util.RoleColorHelper;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.entity.PlayerDeathEvent;
public class DeathListener implements Listener {
@EventHandler
public static void onDeath(PlayerDeathEvent event) {
if (event.getEntity() instanceof Player) {
Player player = event.getEntity();
if (TTTGamesOnEvent.isInGame()) {
Role playerRole = TTTGamesOnEvent.getRoleOfPlayer(player);
int roleId = playerRole.getId();
TTTGamesOnEvent.removePlayer(player);
GamesOnTTTListener.rolesLeft[roleId]--;
GamesOnTTTListener.playersLeft--;
event.getEntity().getKiller().sendMessage(RoleColorHelper.getChatColorOfRole(TTTGamesOnEvent.getRoleOfPlayer(event.getEntity().getKiller())) + "You have killed: " + player.getName() + "!");
}
}
}
}

View File

@ -24,17 +24,14 @@ public class GameStartTTTListener implements Listener {
while (roleIsUnavailable) {
role = event.getRandomRole();
if (amounts[role.getId()] < 1) {
System.out.println(amounts[role.getId()]);
continue;
}
event.setPlayerRole(player, role);
amounts[role.getId()]--;
roleIsUnavailable = false;
}
System.out.println("End while loop");
}
}
System.out.println("End for loop");
gameTaskId = Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(event.getPlugin(), () -> {
if (!called) {

View File

@ -17,17 +17,20 @@ import org.bukkit.event.Listener;
public class GamesOnTTTListener implements Listener {
private static int gamesOnTaskId = -1;
private static int timeLeft = 300;
private static int timeLeft = 35;
public static int playersLeft = -1;
private static boolean doRush = true;
public static int[] rolesLeft = {0,0,0,0,0,0,0,0,0};
@EventHandler
public static void gamesOnEvent(TTTGamesOnEvent event) {
TTTGamesOnEvent.setInGame(true);
playersLeft = event.getPlayers().size();
rolesLeft = RoleAmountHelper.getAmountOfRoles(playersLeft);
for (Player player : event.getPlayers()) {
System.out.println(event.getPlayerRole(player));
ChatColor roleColor = RoleColorHelper.getChatColorOfRole(event.getPlayerRole(player));
player.sendTitle("Your role is: " + roleColor + event.getPlayerRole(player).toString(), "", 20, 80, 20);
player.spigot().sendMessage(ChatMessageType.ACTION_BAR, new TextComponent(roleColor + RoleDescriptionHelper.getRoleDescription(event.getPlayerRole(player))));
@ -38,7 +41,7 @@ public class GamesOnTTTListener implements Listener {
bossBar.addPlayer(player);
}
gamesOnTaskId = Bukkit.getServer().getScheduler().scheduleSyncRepeatingTask(event.getPlugin(), () -> {
if (timeLeft == -1) {
if (timeLeft == -1 && TTTGamesOnEvent.isInGame()) {
bossBar.setTitle("Time Left: " + "Overtime");
bossBar.setColor(BarColor.RED);
} else if (timeLeft != 0) {
@ -48,7 +51,7 @@ public class GamesOnTTTListener implements Listener {
bossBar.setColor(BarColor.RED);
} else if (timeLeft > 30) {
bossBar.setColor(BarColor.GREEN);
} else if (timeLeft > 10 && timeLeft < 30) {
} else if (timeLeft > 10 && timeLeft <= 30) {
bossBar.setColor(BarColor.YELLOW);
} else {
bossBar.setColor(BarColor.WHITE);
@ -56,17 +59,21 @@ public class GamesOnTTTListener implements Listener {
timeLeft--;
} else if (timeLeft == 0) {
//DONE Make this not fail with null value after time is up
if (GameHelper.getGameDecision(event.getRoleAmounts(), playersLeft, doRush).equals(GameDecision.RUSH)) {
if (GameHelper.getGameDecision(rolesLeft, playersLeft, doRush).equals(GameDecision.RUSH)) {
doRush = false;
timeLeft = 120;
} else if (GameHelper.getGameDecision(event.getRoleAmounts(), playersLeft, doRush).equals(GameDecision.OVERTIME)) {
} else if (GameHelper.getGameDecision(rolesLeft, playersLeft, doRush).equals(GameDecision.OVERTIME)) {
timeLeft = -1;
} else if (GameHelper.getGameDecision(event.getRoleAmounts(), playersLeft, doRush).equals(GameDecision.END)) {
} else if (GameHelper.getGameDecision(rolesLeft, playersLeft, doRush).equals(GameDecision.END)) {
bossBar.removeAll();
for (Player player : event.getPlugin().getServer().getOnlinePlayers()) {
player.sendTitle(RoleWinnerHelper.getTitle(GameHelper.getWinner()), "", 10, 60, 10);
player.sendTitle(RoleColorHelper.getChatColorOfRole(GameHelper.getWinner()) + RoleWinnerHelper.getTitle(GameHelper.getWinner()), "", 10, 60, 10);
}
SimpleTTTCore.startGame(event.getPlugin());
doRush = true;
/*SimpleTTTCore.startGame(event.getPlugin());*/
TTTGamesOnEvent.setInGame(false);
timeLeft = -1;
playersLeft = -1;
event.getPlugin().getServer().getScheduler().cancelTask(gamesOnTaskId);
}
}

View File

@ -0,0 +1,7 @@
package net.nevet5gi.listeners;
import org.bukkit.event.Listener;
public class PlayerAttackListener implements Listener {
}

View File

@ -1,17 +0,0 @@
package net.nevet5gi.listeners;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractAtEntityEvent;
import org.bukkit.inventory.EquipmentSlot;
public class PlayerInteractAtEntityListener implements Listener {
@EventHandler
public static void onPlayerDeath(PlayerInteractAtEntityEvent event) {
if (event.getHand() == EquipmentSlot.OFF_HAND) {
return; // off hand packet, ignore.
}
GamesOnTTTListener.playersLeft--;
}
}

View File

@ -3,57 +3,72 @@ package net.nevet5gi.util;
public class GameHelper {
private static Role Winner = null;
private static boolean inOvertime = false;
//Format: Detectives:Sheriffs:Survivalists:Mercenaries:Traitors:Assassins:LoneWolf:Jester
public static GameDecision getGameDecision(int[] PlayerRolesLeft, int PlayersLeft, boolean doRush) {
int InnocentRoles = PlayersLeft - (PlayerRolesLeft[4] + PlayerRolesLeft[5] + PlayerRolesLeft[6] + PlayerRolesLeft[7]);
int NeutralRoles = PlayerRolesLeft[6] + PlayerRolesLeft[7];
int TraitorRoles = PlayerRolesLeft[4] + PlayerRolesLeft[5];
int LoneWolf = PlayerRolesLeft[6];
int Jester = PlayerRolesLeft[7];
int InnocentRoles = PlayersLeft - (NeutralRoles + TraitorRoles);
if (NeutralRoles == 0 && TraitorRoles > 0) {
int CombinedRoles = InnocentRoles + NeutralRoles + TraitorRoles;
if (InnocentRoles > TraitorRoles && doRush) {
Winner = null;
return GameDecision.RUSH;
}
if (TraitorRoles > InnocentRoles) {
Winner = Role.INNOCENT;
return GameDecision.END;
}
if (TraitorRoles == InnocentRoles) {
Winner = null;
return GameDecision.OVERTIME;
}
} else if (NeutralRoles > 0 && TraitorRoles == 0) {
if (NeutralRoles == InnocentRoles) {
Winner = null;
return GameDecision.OVERTIME;
}
if (NeutralRoles > InnocentRoles) {
Winner = Role.INNOCENT;
return GameDecision.END;
}
if (InnocentRoles > NeutralRoles && doRush) {
Winner = null;
return GameDecision.RUSH;
}
if (InnocentRoles > NeutralRoles) {
Winner = null;
return GameDecision.OVERTIME;
}
if (InnocentRoles + NeutralRoles == 0 && TraitorRoles > 0) {
/*System.out.println("Win " + 1);*/
Winner = Role.TRAITORS;
return GameDecision.END;
}
return null;
if (TraitorRoles + NeutralRoles == 0 && InnocentRoles > 0) {
/*System.out.println(2);*/
Winner = Role.INNOCENT;
return GameDecision.END;
}
else if (Jester == 1 && CombinedRoles - Jester == 0) {
/*System.out.println(3);*/
Winner = Role.JESTER;
return GameDecision.END;
}
else if (LoneWolf == 1 && CombinedRoles - LoneWolf == 0) {
/*System.out.println(4);*/
Winner = Role.LONEWOLF;
return GameDecision.END;
}
if (InnocentRoles == NeutralRoles + TraitorRoles && doRush) {
/*System.out.println(5);*/
Winner = null;
return GameDecision.RUSH;
}
else if (InnocentRoles == NeutralRoles + TraitorRoles && !doRush) {
/*System.out.println(6);*/
Winner = null;
inOvertime = true;
return GameDecision.OVERTIME;
}
/*if (Winner == null) {
Winner = Role.JESTER;
}*/
return GameDecision.END;
}
public static Role getWinner() {
return Winner;
}
public static boolean isInOvertime() {
return inOvertime;
}
}

View File

@ -1,8 +1,8 @@
name: SimpleTTT
version: 1.0.0
main: com.the5gi.SimpleTTTCore
main: net.nevet5gi.SimpleTTTCore
api-version: 1.19
authors: [ the5gi,SteveO718 ]
authors: [ the5gi , SteveO718 ]
commands:
startgame:
permission: sttt.start