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