Is that the entire tag system done?
Some checks are pending
Build plugin / build (push) Waiting to run

This commit is contained in:
2vb 2024-07-07 06:18:53 -07:00
parent a41702ea64
commit 2cf21c8ce7
2 changed files with 105 additions and 46 deletions

View File

@ -28,15 +28,19 @@ import org.bukkit.command.CommandSender;
import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.configuration.file.FileConfiguration;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.ArmorStand;
import org.bukkit.entity.Entity;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.HandlerList;
import org.bukkit.event.entity.EntityDamageByEntityEvent;
import org.bukkit.event.entity.EntityDismountEvent;
import org.bukkit.event.entity.PlayerDeathEvent;
import org.bukkit.event.player.PlayerChangedWorldEvent;
import org.bukkit.event.player.PlayerMoveEvent;
import org.bukkit.event.player.PlayerQuitEvent;
import org.bukkit.event.player.PlayerToggleSneakEvent;
import org.bukkit.scheduler.BukkitTask;
import org.jetbrains.annotations.NotNull;
import xyz.twovb.sgm.SGM;
@ -154,6 +158,9 @@ public class CTB implements Minigame {
@Override
public void onTick() {
if (players.isEmpty()) {
this.stop();
}
try {
headerAnimation.nextFrame();
layout.apply(sb);
@ -171,14 +178,7 @@ public class CTB implements Minigame {
for (Player player : players) {
CtbData.Territory territory = getTerritory(player);
CtbData.PlayerState state = playerStateMap.get(player);
Player tagger = null;
Player tagged = null;
if (((state == CtbData.PlayerState.Tagged) || (state == CtbData.PlayerState.Tagging)) && taggedPlayerHashMap.containsKey(player)) {
for (Map.Entry<Player, Player> entry : taggedPlayerHashMap.entrySet()) {
tagger = entry.getKey();
tagged = entry.getValue();
}
}
Player tagged = taggedPlayerHashMap.get(player);
switch (state) {
case Tagging:
if (tagged != null) {
@ -191,26 +191,22 @@ public class CTB implements Minigame {
player.sendActionBar(ChatUtils.translate(state.getFancyText().replace("%territory%", territory.getFancyText())));
break;
case Tagged:
if (tagger != null) {
player.sendActionBar(ChatUtils.translate(state.getFancyText().replace("!", " ʙʏ " + tagger.getName())));
} else {
player.sendActionBar(ChatUtils.translate(state.getFancyText()));
}
player.sendActionBar(ChatUtils.translate(state.getFancyText()));
break;
case Invulnerable:
player.sendActionBar(ChatUtils.translate(state.getFancyText()));
default:
player.sendActionBar(ChatUtils.translate(territory.getFancyText()));
break;
}
}
SGM.getInstance().getCLogger().log(playerStateMap);
}
@Override
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);
@ -265,12 +261,9 @@ public class CTB implements Minigame {
// TODO: make it wait before unloading world
// Stop game logic
state = GameState.ENDING;
Player winner;
if (players.size() <= 1) {
winner = players.get(0);
winner.sendMessage("Congratulations on winning the game!");
if (!players.isEmpty()) {
players.clear();
}
players.clear(); // Clear player list
GameManager.getActiveGames().remove(uuid);
HandlerList.unregisterAll(this);
for (Player player : gameWorld.getPlayers()) {
@ -286,7 +279,6 @@ public class CTB implements Minigame {
Bukkit.getScheduler().cancelTask(this.taskId);
}
@Override
public void addPlayer(Player player) {
player.teleport(this.spawnLoc);
@ -329,33 +321,83 @@ public class CTB implements Minigame {
}
@EventHandler
void onPlayerWalkWhileTag(PlayerMoveEvent event) {
void onPlayerSneak(PlayerToggleSneakEvent event) {
Player tagger = event.getPlayer();
if (!players.contains(tagger)) return;
if (this.state != GameState.STARTED) return;
if (playerStateMap.get(tagger) != CtbData.PlayerState.Tagging) return;
Player tagged = taggedPlayerHashMap.get(tagger);
if (tagged != null) {
releasePlayer(tagged, tagger);
for (Entity entity : tagger.getPassengers()) {
if (entity instanceof ArmorStand) {
entity.remove();
}
}
}
}
private void releasePlayer(Player tagged, Player tagger) {
playerStateMap.replace(tagger, CtbData.PlayerState.Tagging, CtbData.PlayerState.Free);
playerStateMap.replace(tagged, CtbData.PlayerState.Tagged, CtbData.PlayerState.Invulnerable);
CustomPlayer cTagged = new CustomPlayer(tagged);
CustomPlayer cTagger = new CustomPlayer(tagger);
cTagged.sendMessage(messages.getString("system.player.released.info").replace("%player%", tagger.getName()));
cTagger.sendMessage(messages.getString("system.player.released.notify").replace("%player%", tagged.getName()));
taggedPlayerHashMap.remove(tagger);
}
@EventHandler
void onPlayerWalkWhileInvuln(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.Tagging) return;
Player tagged = taggedPlayerHashMap.get(player);
if (playerStateMap.get(player) != CtbData.PlayerState.Invulnerable) return;
CtbData.Territory territory = getTerritory(player);
CustomPlayer cPlayer = new CustomPlayer(player);
if (territory.equals(CtbData.Territory.Neutral)) {
cPlayer.sendMessage(messages.getString("system.player.released.full"));
playerStateMap.replace(player, CtbData.PlayerState.Invulnerable, CtbData.PlayerState.Free);
}
}
@EventHandler
void onPlayerWalkWhileTag(PlayerMoveEvent event) {
if (!(event.getFrom().getX() != event.getTo().getX() || event.getFrom().getZ() != event.getTo().getZ())) return;
Player tagger = event.getPlayer();
if (!players.contains(tagger)) return;
if (this.state != GameState.STARTED) return;
if (playerStateMap.get(tagger) != CtbData.PlayerState.Tagging) return;
ScoreboardTeam team = getTeam(tagger);
Location jail = gameWorld.getSpawnLocation();
if (team.equals(redTeam)) {
jail = redJail;
} else if (team.equals(blueTeam)) {
jail = blueJail;
}
CtbData.Territory territory = getTerritory(tagger);
Player tagged = taggedPlayerHashMap.get(tagger);
if (tagged != null) {
CtbData.Territory territory = getTerritory(player);
ScoreboardTeam team = getTeam(player);
Location jail = gameWorld.getSpawnLocation();
if (team.equals(redTeam)) {
jail = redJail;
} else if (team.equals(blueTeam)) {
jail = blueJail;
if (territory == CtbData.Territory.Neutral) {
releasePlayer(tagged, tagger);
for (Entity entity : tagger.getPassengers()) {
if (entity instanceof ArmorStand) {
entity.remove();
}
}
}
if (territory.equals(CtbData.Territory.Neutral)) {
Location lastValidPos = playerLocationHashMap.get(player);
player.teleport(Objects.requireNonNullElse(lastValidPos, player.getLocation()));
} else {
playerLocationHashMap.put(player, player.getLocation());
}
double distanceToJail = jail.distanceSquared(player.getLocation());
double distanceToJail = jail.distanceSquared(tagger.getLocation());
if (distanceToJail <= 12) {
addPlayerToJail(tagged);
taggedPlayerHashMap.remove(player);
SGM.getInstance().getCLogger().log(taggedPlayerHashMap);
taggedPlayerHashMap.remove(tagger);
playerStateMap.replace(tagger, CtbData.PlayerState.Tagging, CtbData.PlayerState.Free);
for (Entity entity : tagger.getPassengers()) {
if (entity instanceof ArmorStand) {
entity.remove();
}
}
}
}
}
@ -394,6 +436,22 @@ public class CTB implements Minigame {
CustomPlayer cTagger = new CustomPlayer(tagger);
cTagged.sendMessage(messages.getString("system.player.tag.notify").replace("%player%", tagger.getName()));
cTagger.sendMessage(messages.getString("system.player.tag.info").replace("%player%", tagged.getName()));
Entity seatEntity = gameWorld.spawnEntity(tagger.getLocation(), EntityType.ARMOR_STAND);
ArmorStand armorStandEntity = (ArmorStand) seatEntity;
armorStandEntity.setInvisible(true);
armorStandEntity.setSmall(true);
tagger.addPassenger(armorStandEntity);
armorStandEntity.addPassenger(tagged);
}
@EventHandler
void onDismountAttempt(EntityDismountEvent event) {
if (!(event.getEntity() instanceof Player player)) return;
if (this.state != GameState.STARTED) return;
if (!players.contains(player)) return;
CtbData.PlayerState playerState = playerStateMap.get(player);
if (playerState != CtbData.PlayerState.Tagged) return;
event.setCancelled(true);
}
@EventHandler
@ -417,6 +475,7 @@ public class CTB implements Minigame {
// Check if a player is allowed to tag, and if the tagged player is allowed to be tagged
// If both are true, call the custom tag event and add players to tagged hashmap
if (this.state != GameState.STARTED) return;
event.setCancelled(true);
Entity eventEntity = event.getEntity();
Entity eventDamager = event.getDamager();
if (!(eventEntity instanceof Player tagged) || !(eventDamager instanceof Player tagger)) return;
@ -434,14 +493,11 @@ public class CTB implements Minigame {
playerStateMap.replace(tagger, CtbData.PlayerState.Free, CtbData.PlayerState.Tagging);
PlayerTaggedEvent taggedEvent = new PlayerTaggedEvent(tagged, tagger);
taggedEvent.callEvent();
event.setCancelled(true);
}
public void addPlayerToJail(Player player) {
CtbData.PlayerState playerState = playerStateMap.get(player);
// if (playerState != CtbData.PlayerState.Free || playerState != CtbData.PlayerState.Tagged) {
// playerStateMap.replace(player, playerState, CtbData.PlayerState.Jailed);
playerStateMap.replace(player, CtbData.PlayerState.Jailed);
playerStateMap.replace(player, playerState, CtbData.PlayerState.Jailed);
PlayerJailedEvent jailedEvent = new PlayerJailedEvent(player);
jailedEvent.callEvent();
ScoreboardTeam team = getTeam(player);
@ -450,7 +506,6 @@ public class CTB implements Minigame {
} else if (team == blueTeam) {
player.teleport(redJail);
}
// }
}
public void freePlayerFromJail(Player player) {

View File

@ -11,3 +11,7 @@ system:
tag:
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%!"
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!"