its getting too late
Some checks are pending
Build plugin / build (push) Waiting to run

This commit is contained in:
2vb 2024-07-07 22:55:22 -07:00
parent e463925efd
commit 84dc304136
4 changed files with 65 additions and 51 deletions

View File

@ -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<Location> redBrickSpawns = new ArrayList<Location>();
private final ArrayList<Location> blueBrickSpawns = new ArrayList<Location>();
private final ArrayList<Location> redSpawnArea = new ArrayList<Location>();
private final ArrayList<Location> blueSpawnArea = new ArrayList<Location>();
private Location redSpawnLocation;
private Location blueSpawnLocation;
// private final ArrayList<Location> redSpawnArea = new ArrayList<Location>();
// private final ArrayList<Location> blueSpawnArea = new ArrayList<Location>();
private final ArrayList<Player> players = new ArrayList<Player>();
private final HashMap<Player, Location> 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<Component> 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<String> brickSpawns = teamConfig.getStringList("brickSpawns");
List<String> 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;

View File

@ -7,7 +7,7 @@ public class CtbData {
public enum PlayerState {
Free(""),
Stealing("<yellow>⚠<bold>ʙᴇ ᴄᴀʀᴇꜰᴜʟ! ʏ ʜᴀᴠᴇ ᴀ ʙʀɪᴄᴋ</bold>"),
Stealing("<yellow>⚠<bold> ʙᴇ ᴄᴀʀᴇꜰᴜʟ! ʏ ʜᴀᴠᴇ ᴀ ʙʀɪᴄᴋ "),
Invulnerable("<gray><bold>ɢᴏ ʙᴀᴄᴋ ᴛᴏ ɴᴇᴜᴛʀᴀʟ!"),
Tagging("<gray><bold>ʏ ᴀʀᴇ ᴛᴀɢɢɪɴɢ: %player%"),
Tagged("<red><bold>ʏ ᴀʀᴇ ᴄᴜʀʀᴇɴᴛʟʏ ᴛᴀɢɢᴇᴅ!"),

View File

@ -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:

View File

@ -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