This commit is contained in:
parent
c9d84f25b7
commit
d70f85c52c
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user