Is that the entire tag system done?
Some checks are pending
Build plugin / build (push) Waiting to run
Some checks are pending
Build plugin / build (push) Waiting to run
This commit is contained in:
parent
a41702ea64
commit
2cf21c8ce7
|
@ -28,15 +28,19 @@ import org.bukkit.command.CommandSender;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.configuration.file.FileConfiguration;
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
import org.bukkit.configuration.file.YamlConfiguration;
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
|
import org.bukkit.entity.ArmorStand;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.HandlerList;
|
import org.bukkit.event.HandlerList;
|
||||||
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
import org.bukkit.event.entity.EntityDamageByEntityEvent;
|
||||||
|
import org.bukkit.event.entity.EntityDismountEvent;
|
||||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||||
import org.bukkit.event.player.PlayerChangedWorldEvent;
|
import org.bukkit.event.player.PlayerChangedWorldEvent;
|
||||||
import org.bukkit.event.player.PlayerMoveEvent;
|
import org.bukkit.event.player.PlayerMoveEvent;
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
import org.bukkit.event.player.PlayerQuitEvent;
|
||||||
|
import org.bukkit.event.player.PlayerToggleSneakEvent;
|
||||||
import org.bukkit.scheduler.BukkitTask;
|
import org.bukkit.scheduler.BukkitTask;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import xyz.twovb.sgm.SGM;
|
import xyz.twovb.sgm.SGM;
|
||||||
|
@ -154,6 +158,9 @@ public class CTB implements Minigame {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onTick() {
|
public void onTick() {
|
||||||
|
if (players.isEmpty()) {
|
||||||
|
this.stop();
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
headerAnimation.nextFrame();
|
headerAnimation.nextFrame();
|
||||||
layout.apply(sb);
|
layout.apply(sb);
|
||||||
|
@ -171,14 +178,7 @@ public class CTB implements Minigame {
|
||||||
for (Player player : players) {
|
for (Player player : players) {
|
||||||
CtbData.Territory territory = getTerritory(player);
|
CtbData.Territory territory = getTerritory(player);
|
||||||
CtbData.PlayerState state = playerStateMap.get(player);
|
CtbData.PlayerState state = playerStateMap.get(player);
|
||||||
Player tagger = null;
|
Player tagged = taggedPlayerHashMap.get(player);
|
||||||
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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
switch (state) {
|
switch (state) {
|
||||||
case Tagging:
|
case Tagging:
|
||||||
if (tagged != null) {
|
if (tagged != null) {
|
||||||
|
@ -191,26 +191,22 @@ public class CTB implements Minigame {
|
||||||
player.sendActionBar(ChatUtils.translate(state.getFancyText().replace("%territory%", territory.getFancyText())));
|
player.sendActionBar(ChatUtils.translate(state.getFancyText().replace("%territory%", territory.getFancyText())));
|
||||||
break;
|
break;
|
||||||
case Tagged:
|
case Tagged:
|
||||||
if (tagger != null) {
|
player.sendActionBar(ChatUtils.translate(state.getFancyText()));
|
||||||
player.sendActionBar(ChatUtils.translate(state.getFancyText().replace("!", " ʙʏ " + tagger.getName())));
|
|
||||||
} else {
|
|
||||||
player.sendActionBar(ChatUtils.translate(state.getFancyText()));
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
|
case Invulnerable:
|
||||||
|
player.sendActionBar(ChatUtils.translate(state.getFancyText()));
|
||||||
default:
|
default:
|
||||||
player.sendActionBar(ChatUtils.translate(territory.getFancyText()));
|
player.sendActionBar(ChatUtils.translate(territory.getFancyText()));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
SGM.getInstance().getCLogger().log(playerStateMap);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
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);
|
||||||
|
@ -265,12 +261,9 @@ public class CTB implements Minigame {
|
||||||
// TODO: make it wait before unloading world
|
// TODO: make it wait before unloading world
|
||||||
// Stop game logic
|
// Stop game logic
|
||||||
state = GameState.ENDING;
|
state = GameState.ENDING;
|
||||||
Player winner;
|
if (!players.isEmpty()) {
|
||||||
if (players.size() <= 1) {
|
players.clear();
|
||||||
winner = players.get(0);
|
|
||||||
winner.sendMessage("Congratulations on winning the game!");
|
|
||||||
}
|
}
|
||||||
players.clear(); // Clear player list
|
|
||||||
GameManager.getActiveGames().remove(uuid);
|
GameManager.getActiveGames().remove(uuid);
|
||||||
HandlerList.unregisterAll(this);
|
HandlerList.unregisterAll(this);
|
||||||
for (Player player : gameWorld.getPlayers()) {
|
for (Player player : gameWorld.getPlayers()) {
|
||||||
|
@ -286,7 +279,6 @@ public class CTB implements Minigame {
|
||||||
Bukkit.getScheduler().cancelTask(this.taskId);
|
Bukkit.getScheduler().cancelTask(this.taskId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addPlayer(Player player) {
|
public void addPlayer(Player player) {
|
||||||
player.teleport(this.spawnLoc);
|
player.teleport(this.spawnLoc);
|
||||||
|
@ -329,33 +321,83 @@ public class CTB implements Minigame {
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@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;
|
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;
|
if (!players.contains(player)) return;
|
||||||
if (this.state != GameState.STARTED) return;
|
if (this.state != GameState.STARTED) return;
|
||||||
if (playerStateMap.get(player) != CtbData.PlayerState.Tagging) return;
|
if (playerStateMap.get(player) != CtbData.PlayerState.Invulnerable) return;
|
||||||
Player tagged = taggedPlayerHashMap.get(player);
|
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) {
|
if (tagged != null) {
|
||||||
CtbData.Territory territory = getTerritory(player);
|
if (territory == CtbData.Territory.Neutral) {
|
||||||
ScoreboardTeam team = getTeam(player);
|
releasePlayer(tagged, tagger);
|
||||||
Location jail = gameWorld.getSpawnLocation();
|
for (Entity entity : tagger.getPassengers()) {
|
||||||
if (team.equals(redTeam)) {
|
if (entity instanceof ArmorStand) {
|
||||||
jail = redJail;
|
entity.remove();
|
||||||
} else if (team.equals(blueTeam)) {
|
}
|
||||||
jail = blueJail;
|
}
|
||||||
}
|
}
|
||||||
if (territory.equals(CtbData.Territory.Neutral)) {
|
double distanceToJail = jail.distanceSquared(tagger.getLocation());
|
||||||
Location lastValidPos = playerLocationHashMap.get(player);
|
|
||||||
player.teleport(Objects.requireNonNullElse(lastValidPos, player.getLocation()));
|
|
||||||
} else {
|
|
||||||
playerLocationHashMap.put(player, player.getLocation());
|
|
||||||
}
|
|
||||||
double distanceToJail = jail.distanceSquared(player.getLocation());
|
|
||||||
if (distanceToJail <= 12) {
|
if (distanceToJail <= 12) {
|
||||||
addPlayerToJail(tagged);
|
addPlayerToJail(tagged);
|
||||||
taggedPlayerHashMap.remove(player);
|
taggedPlayerHashMap.remove(tagger);
|
||||||
SGM.getInstance().getCLogger().log(taggedPlayerHashMap);
|
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);
|
CustomPlayer cTagger = new CustomPlayer(tagger);
|
||||||
cTagged.sendMessage(messages.getString("system.player.tag.notify").replace("%player%", tagger.getName()));
|
cTagged.sendMessage(messages.getString("system.player.tag.notify").replace("%player%", tagger.getName()));
|
||||||
cTagger.sendMessage(messages.getString("system.player.tag.info").replace("%player%", tagged.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
|
@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
|
// 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 both are true, call the custom tag event and add players to tagged hashmap
|
||||||
if (this.state != GameState.STARTED) return;
|
if (this.state != GameState.STARTED) return;
|
||||||
|
event.setCancelled(true);
|
||||||
Entity eventEntity = event.getEntity();
|
Entity eventEntity = event.getEntity();
|
||||||
Entity eventDamager = event.getDamager();
|
Entity eventDamager = event.getDamager();
|
||||||
if (!(eventEntity instanceof Player tagged) || !(eventDamager instanceof Player tagger)) return;
|
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);
|
playerStateMap.replace(tagger, CtbData.PlayerState.Free, CtbData.PlayerState.Tagging);
|
||||||
PlayerTaggedEvent taggedEvent = new PlayerTaggedEvent(tagged, tagger);
|
PlayerTaggedEvent taggedEvent = new PlayerTaggedEvent(tagged, tagger);
|
||||||
taggedEvent.callEvent();
|
taggedEvent.callEvent();
|
||||||
event.setCancelled(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addPlayerToJail(Player player) {
|
public void addPlayerToJail(Player player) {
|
||||||
CtbData.PlayerState playerState = playerStateMap.get(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, playerState, CtbData.PlayerState.Jailed);
|
|
||||||
playerStateMap.replace(player, CtbData.PlayerState.Jailed);
|
|
||||||
PlayerJailedEvent jailedEvent = new PlayerJailedEvent(player);
|
PlayerJailedEvent jailedEvent = new PlayerJailedEvent(player);
|
||||||
jailedEvent.callEvent();
|
jailedEvent.callEvent();
|
||||||
ScoreboardTeam team = getTeam(player);
|
ScoreboardTeam team = getTeam(player);
|
||||||
|
@ -450,7 +506,6 @@ public class CTB implements Minigame {
|
||||||
} else if (team == blueTeam) {
|
} else if (team == blueTeam) {
|
||||||
player.teleport(redJail);
|
player.teleport(redJail);
|
||||||
}
|
}
|
||||||
// }
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void freePlayerFromJail(Player player) {
|
public void freePlayerFromJail(Player player) {
|
||||||
|
|
|
@ -11,3 +11,7 @@ system:
|
||||||
tag:
|
tag:
|
||||||
notify: "&7You have been tagged! %player% now has 25 seconds to take you to Jail or you will be freed!"
|
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."
|
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!"
|
Loading…
Reference in New Issue
Block a user