Is that jails working?!?!? (yes)
Some checks are pending
Build plugin / build (push) Waiting to run

This commit is contained in:
2vb 2024-07-07 03:07:52 -07:00
parent c9d84f25b7
commit d70f85c52c
2 changed files with 106 additions and 78 deletions

View File

@ -44,7 +44,6 @@ import xyz.twovb.sgm.games.impl.capturethebrick.events.PlayerJailedEvent;
import xyz.twovb.sgm.levels.LevelManager;
import xyz.twovb.toolbox.api.CustomPlayer;
import xyz.twovb.toolbox.utils.ChatUtils;
import xyz.twovb.toolbox.utils.CustomLogger;
import java.io.File;
import java.io.IOException;
@ -62,9 +61,10 @@ public class CTB implements Minigame {
private final ArrayList<Location> blueSpawnArea = new ArrayList<Location>();
// private final FileConfiguration messages;
private final ArrayList<Player> players = new ArrayList<Player>();
private final HashMap<Player, CtbData.PlayerState> playerStateMap = new HashMap<>();
ScoreboardTeam redTeam;
ScoreboardTeam blueTeam;
private final HashMap<Player, CtbData.PlayerState> playerStateMap = new HashMap<>();
private final HashMap<Player, Location> playerLocationHashMap = new HashMap<>();
private Location redJail;
private Location blueJail;
private World gameWorld;
@ -167,23 +167,25 @@ public class CTB implements Minigame {
}
}
for (Player player : players) {
Location playerLoc = player.getLocation();
Location blockCheck = new Location(gameWorld, playerLoc.getBlockX(), territoryLevel, playerLoc.getBlockZ());
Block territoryCheck = gameWorld.getBlockAt(blockCheck);
switch (territoryCheck.getType()) {
case RED_CONCRETE:
player.sendActionBar(ChatUtils.translate("<red><bold>ʀᴇᴅ ᴛᴇʀʀɪᴛᴏʀʏ"));
break;
case BLUE_CONCRETE:
player.sendActionBar(ChatUtils.translate("<blue><bold>ʙʟᴜᴇ ᴛᴇʀʀɪᴛᴏʀʏ"));
break;
case WHITE_CONCRETE:
player.sendActionBar(ChatUtils.translate("<gray><bold>ɴᴇᴜᴛʀᴀʟ"));
break;
default:
player.sendActionBar(ChatUtils.translate("<dark_gray><bold>???"));
break;
}
CtbData.Territory territory = getTerritory(player);
player.sendActionBar(ChatUtils.translate(territory.getFancyText()));
// Location playerLoc = player.getLocation();
// Location blockCheck = new Location(gameWorld, playerLoc.getBlockX(), territoryLevel, playerLoc.getBlockZ());
// Block territoryCheck = gameWorld.getBlockAt(blockCheck);
// switch (territoryCheck.getType()) {
// case RED_CONCRETE:
// player.sendActionBar(ChatUtils.translate("<red><bold>ʀᴇᴅ ᴛᴇʀʀɪᴛᴏʀʏ"));
// break;
// case BLUE_CONCRETE:
// player.sendActionBar(ChatUtils.translate("<blue><bold>ʙʟᴜᴇ ᴛᴇʀʀɪᴛᴏʀʏ"));
// break;
// case WHITE_CONCRETE:
// player.sendActionBar(ChatUtils.translate("<gray><bold>ɴᴇᴜᴛʀᴀʟ"));
// break;
// default:
// player.sendActionBar(ChatUtils.translate("<dark_gray><bold>???"));
// break;
// }
}
}
@ -191,10 +193,14 @@ public class CTB implements Minigame {
public void start(CommandSender sender) {
if (checkStart(sender)) {
for (Player player : players) {
// TODO: REMEMBER TO REMOVE THIS BEFORE USING IT AT CAMP
player.setAllowFlight(true);
player.setFlying(true);
player.teleport(this.spawnLoc);
sb.addPlayer(player);
playerStateMap.put(player, CtbData.PlayerState.Free);
}
// TODO: Fix incorrect amount of brick spawns.
for (int i = 0; i <= this.bricks - 1; i++) {
placeBrick(redBrickSpawns.get(i), redTeam);
placeBrick(blueBrickSpawns.get(i), blueTeam);
@ -204,14 +210,27 @@ public class CTB implements Minigame {
state = GameState.STARTED;
sendMessageToAllPlayers("The game has started!");
}
}
CustomLogger logger = SGM.getInstance().getCLogger();
boolean isJailed(Player player) {
return playerStateMap.get(player) == CtbData.PlayerState.Jailed;
}
for (ScoreboardTeam team : teamManager.teams()) {
logger.log(team.name());
logger.log(team.defaultDisplay().entries());
logger.log(team.teamManager().players());
}
CtbData.Territory getTerritory(Player player) {
Location playerLoc = player.getLocation();
Location blockCheck = new Location(gameWorld, playerLoc.getBlockX(), territoryLevel, playerLoc.getBlockZ());
Block territoryCheck = blockCheck.getBlock();
switch (territoryCheck.getType()) {
case RED_CONCRETE:
return CtbData.Territory.Red;
case BLUE_CONCRETE:
return CtbData.Territory.Blue;
case WHITE_CONCRETE:
return CtbData.Territory.Neutral;
default:
return CtbData.Territory.Unknown;
}
}
@ -263,10 +282,10 @@ public class CTB implements Minigame {
@Override
public void removePlayer(Player player) {
players.remove(player);
sendMessageToAllPlayers(messages.getString("system.player.left").replace("%player%", player.getName()));
sb.removePlayer(player);
removePlayerFromTeams(player);
sendMessageToAllPlayers(messages.getString("system.player.left").replace("%player%", player.getName()));
players.remove(player);
}
@EventHandler
@ -297,46 +316,28 @@ public class CTB implements Minigame {
@EventHandler
void onPlayerMove(PlayerMoveEvent event) {
if (!(event.getFrom().getX() != event.getTo().getX() || event.getFrom().getZ() != event.getTo().getZ())) return;
Player player = event.getPlayer();
if (!players.contains(player)) return; // Check if player is in your list of tracked players
if (this.state != GameState.STARTED) return; // Check if the game state is started
Location from = event.getFrom();
Location to = event.getTo();
if (from.getBlockX() == to.getBlockX() && from.getBlockZ() == to.getBlockZ()) {
return; // Player hasn't moved block coordinates, ignore
if (!players.contains(player)) return;
if (this.state != GameState.STARTED) return;
if (playerStateMap.get(player) != CtbData.PlayerState.Jailed) return;
CtbData.Territory territory = getTerritory(player);
Location jail = gameWorld.getSpawnLocation();
if (territory.equals(CtbData.Territory.Blue)) {
jail = this.blueJail;
} else if (territory.equals(CtbData.Territory.Red)) {
jail = this.redJail;
}
if (playerStateMap.get(player) != CtbData.PlayerState.Jailed) return; // Check player state
Location fake = new Location(gameWorld, 0, -1, 0); // Your 'fake' location
// Calculate distance squared from 'fake' location to player's current location
double distanceSquared = fake.distanceSquared(player.getLocation());
// Check if player is outside the 3 block radius
if (distanceSquared > 9) { // 9 is 3 squared (3*3)
// Teleport player back to 'fake' location
player.teleport(fake);
double check = jail.distanceSquared(player.getLocation());
if (check >= 9) {
Location lastValidPos = playerLocationHashMap.get(player);
player.teleport(Objects.requireNonNullElse(lastValidPos, jail));
} else {
playerLocationHashMap.put(player, player.getLocation());
}
}
// @EventHandler
// void onPlayerMove(PlayerMoveEvent event) {
// if (!(event.getFrom().getX() != event.getTo().getX() || event.getFrom().getZ() != event.getTo().getZ())) return;
// Player player = event.getPlayer();
// if (!players.contains(player)) return;
// if (this.state != GameState.STARTED) return;
// if (playerStateMap.get(player) != CtbData.PlayerState.Jailed) return;
// Location fake = new Location(gameWorld, 0, -1, 0);
// double check = fake.distanceSquared(player.getLocation());
// player.sendMessage(String.valueOf(check));
// if (check >= 15) {
// player.teleport(player.getLocation());
// }
// }
//
@EventHandler
void onPlayerJail(PlayerJailedEvent event) {
CustomPlayer player = new CustomPlayer(event.getJailed());
@ -345,7 +346,7 @@ public class CTB implements Minigame {
Player teamPlayer = Bukkit.getServer().getPlayerExact(teamMembers);
CustomPlayer teamMember = new CustomPlayer(teamPlayer);
SGM.getInstance().getCLogger().log(teamMember.player().getName());
if (teamMember == player) continue;
if (teamMember.player() == player.player()) continue;
teamMember.sendMessage(LegacyComponentSerializer.legacyAmpersand().serialize(event.getMessage()));
}
}
@ -354,8 +355,12 @@ public class CTB implements Minigame {
playerStateMap.replace(player, CtbData.PlayerState.Free, CtbData.PlayerState.Jailed);
PlayerJailedEvent jailedEvent = new PlayerJailedEvent(player);
jailedEvent.callEvent();
// CustomPlayer cPlayer = new CustomPlayer(player);
// cPlayer.sendMessage(messages.getString("system.player.jail.info"));
ScoreboardTeam team = getTeam(player);
if (team == redTeam) {
player.teleport(blueJail);
} else if (team == blueTeam) {
player.teleport(redJail);
}
}
public void freePlayerFromJail(Player player) {
@ -388,6 +393,7 @@ public class CTB implements Minigame {
}
public void addPlayerToTeam(Player player, CtbData.Teams team) {
// TODO: VALIDATE IF ON TEAM ALREADY
if (team.equals(CtbData.Teams.Blue)) {
blueTeam.defaultDisplay().addEntry(player.getName());
} else if (team.equals(CtbData.Teams.Red)) {
@ -501,23 +507,28 @@ public class CTB implements Minigame {
}
// Process team information
List<String> teamsToProcess = Arrays.asList("red", "blue");
for (String teamName : teamsToProcess) {
ConfigurationSection team = config.getConfigurationSection("teams." + teamName);
if (team != null) {
List<String> brickSpawns = team.getStringList("brickSpawns");
List<String> playerSpawnArea = team.getStringList("playerSpawnArea");
this.redJail = parseString(teamName + "jail");
this.blueJail = parseString(teamName + "jail");
CtbData.Teams[] teamsList = CtbData.Teams.values();
for (CtbData.Teams team : teamsList) {
String teamName = team.name().toLowerCase();
ConfigurationSection teamConfig = config.getConfigurationSection("teams." + teamName);
if (teamConfig != null) {
List<String> brickSpawns = teamConfig.getStringList("brickSpawns");
List<String> playerSpawnArea = teamConfig.getStringList("playerSpawnArea");
if (team.equals(CtbData.Teams.Red)) {
this.redJail = parseString(teamConfig.getString("jail"));
} else if (team.equals(CtbData.Teams.Blue)) {
this.blueJail = parseString(teamConfig.getString("jail"));
}
// Get brick locations
if (brickSpawns.size() >= this.bricks) {
for (String rawBrickLoc : brickSpawns) {
Location brickLoc = parseString(rawBrickLoc);
if (teamName.equals("red")) {
if (team.equals(CtbData.Teams.Red)) {
this.redBrickSpawns.add(brickLoc);
} else if (teamName.equals("blue")) {
} else if (team.equals(CtbData.Teams.Blue)) {
this.blueBrickSpawns.add(brickLoc);
}
}
@ -530,9 +541,9 @@ public class CTB implements Minigame {
if (playerSpawnArea.size() == 2) {
for (String rawSpawnLoc : playerSpawnArea) {
Location spawnLoc = parseString(rawSpawnLoc);
if (teamName.equals("red")) {
if (team.equals(CtbData.Teams.Red)) {
this.redSpawnArea.add(spawnLoc);
} else if (teamName.equals("blue")) {
} else if (team.equals(CtbData.Teams.Blue)) {
this.blueSpawnArea.add(spawnLoc);
}
}
@ -546,6 +557,6 @@ public class CTB implements Minigame {
}
}
return true;
}
}
}

View File

@ -13,4 +13,21 @@ public class CtbData {
Red, Blue
}
public enum Territory {
Red("<red><bold>ʀᴇᴅ ᴛᴇʀʀɪᴛᴏʀʏ"),
Blue("<blue><bold>ʙʟᴜᴇ ᴛᴇʀʀɪᴛᴏʀʏ"),
Neutral("<gray><bold>ɴᴇᴜᴛʀᴀʟ"),
Unknown("<dark_gray><bold>???");
private final String fancyText;
Territory(String fancyText) {
this.fancyText = fancyText;
}
public String getFancyText() {
return fancyText;
}
}
}