From 84dc304136e68459ac2ac800ee6c91f0b619686a Mon Sep 17 00:00:00 2001 From: 2vb <2vb@protonmail.com> Date: Sun, 7 Jul 2024 22:55:22 -0700 Subject: [PATCH] its getting too late --- .../sgm/games/impl/capturethebrick/CTB.java | 96 +++++++++++-------- .../games/impl/capturethebrick/CtbData.java | 2 +- .../games/capturethebrick/messages.yml | 2 +- .../games/capturethebrick/options.yml | 16 ++-- 4 files changed, 65 insertions(+), 51 deletions(-) diff --git a/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CTB.java b/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CTB.java index 7e02446..cccc8da 100644 --- a/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CTB.java +++ b/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CTB.java @@ -19,6 +19,7 @@ import net.megavex.scoreboardlibrary.api.sidebar.component.animation.SidebarAnim import net.megavex.scoreboardlibrary.api.team.ScoreboardTeam; import net.megavex.scoreboardlibrary.api.team.TeamDisplay; import net.megavex.scoreboardlibrary.api.team.TeamManager; +import net.megavex.scoreboardlibrary.api.team.enums.CollisionRule; import org.bukkit.*; import org.bukkit.block.Block; import org.bukkit.command.CommandSender; @@ -37,7 +38,9 @@ import org.bukkit.event.entity.PlayerDeathEvent; import org.bukkit.event.player.*; import org.bukkit.inventory.EntityEquipment; import org.bukkit.inventory.ItemStack; +import org.bukkit.scheduler.BukkitRunnable; import org.bukkit.scheduler.BukkitTask; +import org.bukkit.scoreboard.Scoreboard; import org.jetbrains.annotations.NotNull; import xyz.twovb.sgm.SGM; import xyz.twovb.sgm.games.GameManager; @@ -59,8 +62,10 @@ public class CTB implements Minigame { private final UUID uuid; private final ArrayList redBrickSpawns = new ArrayList(); private final ArrayList blueBrickSpawns = new ArrayList(); - private final ArrayList redSpawnArea = new ArrayList(); - private final ArrayList blueSpawnArea = new ArrayList(); + private Location redSpawnLocation; + private Location blueSpawnLocation; +// private final ArrayList redSpawnArea = new ArrayList(); +// private final ArrayList blueSpawnArea = new ArrayList(); private final ArrayList players = new ArrayList(); private final HashMap playerLocationHashMap = new HashMap<>(); // tagger, tagged @@ -74,13 +79,14 @@ public class CTB implements Minigame { private GameState state; private int bricks; private int territoryLevel; - private int boundsLevel; private Location spawnLoc; private TeamManager teamManager; private Sidebar sb; private SidebarAnimation headerAnimation; private ComponentSidebarLayout layout; - private CommandSender owner; + + private int tagTime; + private int jailTime; private int taskId; @@ -99,7 +105,6 @@ public class CTB implements Minigame { gameWorld = createGameWorld(world, uuid); gameWorld.setAutoSave(false); if (applyOptions(world)) { - this.owner = owner; this.teamManager = SGM.getInstance().getScoreboardLibrary().createTeamManager(); this.redTeam = teamManager.createIfAbsent("red_team"); this.blueTeam = teamManager.createIfAbsent("blue_team"); @@ -200,10 +205,14 @@ public class CTB implements Minigame { public void start(CommandSender sender) { if (checkStart(sender)) { for (Player player : players) { + player.getInventory().clear(); player.teleport(this.spawnLoc); sb.addPlayer(player); player.setGameMode(GameMode.ADVENTURE); playerStateMap.put(player, CtbData.PlayerState.Free); + for (ScoreboardTeam teams : teamManager.teams()) { + + } } for (int i = 0; i <= this.bricks - 1; i++) { placeBrick(redBrickSpawns.get(i), redTeam); @@ -332,7 +341,7 @@ public class CTB implements Minigame { } private void releasePlayer(Player tagged, Player tagger) { - playerStateMap.replace(tagger, CtbData.PlayerState.Tagging, CtbData.PlayerState.Free); + playerStateMap.replace(tagger, CtbData.PlayerState.Tagging, CtbData.PlayerState.Invulnerable); playerStateMap.replace(tagged, CtbData.PlayerState.Tagged, CtbData.PlayerState.Invulnerable); CustomPlayer cTagged = new CustomPlayer(tagged); CustomPlayer cTagger = new CustomPlayer(tagger); @@ -394,6 +403,7 @@ public class CTB implements Minigame { } else if (team.equals(blueTeam)) { jail = blueJail; } + CtbData.Territory territory = getTerritory(tagger); Player tagged = taggedPlayerHashMap.get(tagger); @@ -449,6 +459,14 @@ public class CTB implements Minigame { Player tagger = event.getTagger(); if (this.state != GameState.STARTED) return; if (!players.contains(tagged) || !players.contains(tagger)) return; + if (playerStateMap.get(tagged) == CtbData.PlayerState.Stealing) { + ScoreboardTeam team = getTeam(tagged); + if (team == redTeam) { + placeBrick(tagged.getLocation(), blueTeam); + } else if (team == blueTeam) { + placeBrick(tagged.getLocation(), redTeam); + } + } taggedPlayerHashMap.putIfAbsent(tagger, tagged); CustomPlayer cTagged = new CustomPlayer(tagged); CustomPlayer cTagger = new CustomPlayer(tagger); @@ -460,6 +478,18 @@ public class CTB implements Minigame { armorStandEntity.setSmall(true); tagger.addPassenger(armorStandEntity); armorStandEntity.addPassenger(tagged); + new BukkitRunnable() { + private int seconds = 0; + @Override + public void run() { + if (seconds > tagTime) { + tagger.sendMessage("out of time"); + } else { + tagger.sendMessage(String.valueOf(tagTime)); + seconds++; + } + } + }.runTaskTimer(SGM.getInstance(), 0, 20L); } @EventHandler @@ -577,17 +607,26 @@ public class CTB implements Minigame { Player brickTaker = event.getPlayer(); if (!(rightClicked instanceof ArmorStand)) return; if (!players.contains(brickTaker)) return; - SGM.getInstance().getCLogger().log(rightClicked); - SGM.getInstance().getCLogger().log(brickTaker); + EntityEquipment equipment = ((ArmorStand) rightClicked).getEquipment(); + Material brickMaterial = null; + if (equipment.getHelmet().getType().equals(Material.RED_WOOL)) { + brickMaterial = Material.RED_WOOL; + } else if (equipment.getHelmet().getType().equals(Material.BLUE_WOOL)) { + brickMaterial = Material.BLUE_WOOL; + } ScoreboardTeam taggerTeam = getTeam(brickTaker); event.setCancelled(true); CtbData.Territory territory = getTerritory(brickTaker); if (territory == CtbData.Territory.Blue && taggerTeam == blueTeam) return; if (territory == CtbData.Territory.Red && taggerTeam == redTeam) return; if (playerStateMap.get(brickTaker) != CtbData.PlayerState.Free) return; + if (brickMaterial != null) return; playerStateMap.replace(brickTaker, CtbData.PlayerState.Free, CtbData.PlayerState.Stealing); + EntityEquipment playerEquipment = event.getPlayer().getEquipment(); + playerEquipment.setHelmet(new ItemStack(brickMaterial)); PlayerStealBrickEvent playerStealBrickEvent = new PlayerStealBrickEvent(brickTaker); playerStealBrickEvent.callEvent(); + rightClicked.remove(); } public void addPlayerToJail(Player player) { @@ -645,8 +684,10 @@ public class CTB implements Minigame { } public void removePlayerFromTeams(Player player) { - getTeam(player).defaultDisplay().removeEntry(player.getName()); - this.teamManager.removePlayer(player); + if (getTeam(player) != null) { + getTeam(player).defaultDisplay().removeEntry(player.getName()); + this.teamManager.removePlayer(player); + } } public ScoreboardTeam getTeam(Player player) { @@ -664,28 +705,18 @@ public class CTB implements Minigame { Entity brickEntity = gameWorld.spawnEntity(brickSpawnLoc, EntityType.ARMOR_STAND); ArmorStand armorStand = (ArmorStand) brickEntity; EntityEquipment armorEquipment = armorStand.getEquipment(); -// armorStand.setInvisible(true); + // TODO: make sure the children cannot uneqip the wool :sob: if (team.equals(redTeam)) { armorEquipment.setHelmet(new ItemStack(Material.RED_WOOL)); } else if (team.equals(blueTeam)) { armorEquipment.setHelmet(new ItemStack(Material.BLUE_WOOL)); } - -// Entity brickEntity = gameWorld.spawnEntity(brickSpawnLoc, EntityType.BLOCK_DISPLAY); -// BlockDisplay brickDisplay = (BlockDisplay) brickEntity; -// if (team.equals(redTeam)) { -// brickDisplay.setBlock(Material.RED_WOOL.createBlockData()); -// } else if (team.equals(blueTeam)) { -// brickDisplay.setBlock(Material.BLUE_WOOL.createBlockData()); -// } -// Transformation transformation = brickDisplay.getTransformation(); -// transformation.getScale().set(0.5f); -// brickDisplay.setTransformation(transformation); } private void setupTeamDisplay(ScoreboardTeam team, String displayName, NamedTextColor color) { TeamDisplay display = team.defaultDisplay(); display.displayName(Component.text(displayName)); + display.collisionRule(CollisionRule.NEVER); display.playerColor(color); } @@ -755,8 +786,9 @@ public class CTB implements Minigame { if (mapInfoSection != null) { this.bricks = mapInfoSection.getInt("brickCount"); this.territoryLevel = mapInfoSection.getInt("territory"); - this.boundsLevel = mapInfoSection.getInt("boundary"); this.spawnLoc = parseString(mapInfoSection.getString("spawn")); + this.jailTime = mapInfoSection.getInt("jailTime"); + this.tagTime = mapInfoSection.getInt("tagTime"); } else { SGM.getInstance().getCLogger().error("Invalid map info. Please fix before trying again."); return false; @@ -770,12 +802,13 @@ public class CTB implements Minigame { ConfigurationSection teamConfig = config.getConfigurationSection("teams." + teamName); if (teamConfig != null) { List brickSpawns = teamConfig.getStringList("brickSpawns"); - List playerSpawnArea = teamConfig.getStringList("playerSpawnArea"); if (team.equals(CtbData.Teams.Red)) { this.redJail = parseString(teamConfig.getString("jail")); + this.redSpawnLocation = parseString(teamConfig.getString("playerSpawn")); } else if (team.equals(CtbData.Teams.Blue)) { this.blueJail = parseString(teamConfig.getString("jail")); + this.blueSpawnLocation = parseString(teamConfig.getString("playerSpawn")); } // Get brick locations @@ -792,21 +825,6 @@ public class CTB implements Minigame { SGM.getInstance().getCLogger().error("Invalid brick spawns. Please fix before trying again."); return false; } - - // Hopefully that works! - if (playerSpawnArea.size() == 2) { - for (String rawSpawnLoc : playerSpawnArea) { - Location spawnLoc = parseString(rawSpawnLoc); - if (team.equals(CtbData.Teams.Red)) { - this.redSpawnArea.add(spawnLoc); - } else if (team.equals(CtbData.Teams.Blue)) { - this.blueSpawnArea.add(spawnLoc); - } - } - } else { - SGM.getInstance().getCLogger().error("Invalid spawn area. Please fix before trying again."); - return false; - } } else { SGM.getInstance().getCLogger().error("Invalid teams. Please fix before trying again."); return false; diff --git a/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CtbData.java b/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CtbData.java index 9586cda..db33fd7 100644 --- a/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CtbData.java +++ b/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/CtbData.java @@ -7,7 +7,7 @@ public class CtbData { public enum PlayerState { Free(""), - Stealing("ʙᴇ ᴄᴀʀᴇꜰᴜʟ! ʏᴏᴜ ʜᴀᴠᴇ ᴀ ʙʀɪᴄᴋ⚠"), + Stealing(" ʙᴇ ᴄᴀʀᴇꜰᴜʟ! ʏᴏᴜ ʜᴀᴠᴇ ᴀ ʙʀɪᴄᴋ ⚠"), Invulnerable("ɢᴏ ʙᴀᴄᴋ ᴛᴏ ɴᴇᴜᴛʀᴀʟ!"), Tagging("ʏᴏᴜ ᴀʀᴇ ᴛᴀɢɢɪɴɢ: %player%"), Tagged("ʏᴏᴜ ᴀʀᴇ ᴄᴜʀʀᴇɴᴛʟʏ ᴛᴀɢɢᴇᴅ!"), diff --git a/src/main/resources/games/capturethebrick/messages.yml b/src/main/resources/games/capturethebrick/messages.yml index 7f31578..dfa4f02 100644 --- a/src/main/resources/games/capturethebrick/messages.yml +++ b/src/main/resources/games/capturethebrick/messages.yml @@ -15,7 +15,7 @@ system: notify: "&7You have been tagged! %player% now has 25 seconds to take you to Jail or you will be freed!" info: "&7You have tagged %player%! You have 25 seconds to take them to Jail! Crouch if you would like to set them free." released: - notify: "&7You have released %player%!" + notify: "&7You have released %player%! You must head back to Neutral before you can do anything." info: "&7%player% let you free! You must head back to Neutral before you can do anything." full: "&7You have returned to Neutral. You can now get back to the game!" brick: diff --git a/src/main/resources/games/capturethebrick/options.yml b/src/main/resources/games/capturethebrick/options.yml index ac2da89..0b2f930 100644 --- a/src/main/resources/games/capturethebrick/options.yml +++ b/src/main/resources/games/capturethebrick/options.yml @@ -8,19 +8,15 @@ teams: brickSpawns: - 0,0,0 - 0,0,0 - # The "y" coordinate does not matter for this value, - # it will always teleport the player to the highest block. - playerSpawnArea: - - 0,0,0 - - 0,0,0 + playerSpawn: 0,0,0 jail: 0,0,0 + tagTime: 25 + jailTime: 25 blue: brickSpawns: - 0,0,0 - 0,0,0 - # The "y" coordinate does not matter for this value, - # it will always teleport the player to the highest block. - playerSpawnArea: - - 0,0,0 - - 0,0,0 + playerSpawn: 0,0,0 jail: 0,0,0 + tagTime: 25 + jailTime: 25 \ No newline at end of file