Is that a basic tag system I see?
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
7f6a6b2c76
commit
a41702ea64
|
@ -28,9 +28,11 @@ 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.Entity;
|
||||||
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.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;
|
||||||
|
@ -41,6 +43,7 @@ import xyz.twovb.sgm.SGM;
|
||||||
import xyz.twovb.sgm.games.GameManager;
|
import xyz.twovb.sgm.games.GameManager;
|
||||||
import xyz.twovb.sgm.games.Minigame;
|
import xyz.twovb.sgm.games.Minigame;
|
||||||
import xyz.twovb.sgm.games.impl.capturethebrick.events.PlayerJailedEvent;
|
import xyz.twovb.sgm.games.impl.capturethebrick.events.PlayerJailedEvent;
|
||||||
|
import xyz.twovb.sgm.games.impl.capturethebrick.events.PlayerTaggedEvent;
|
||||||
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;
|
||||||
|
@ -59,12 +62,13 @@ public class CTB implements Minigame {
|
||||||
private final ArrayList<Location> blueBrickSpawns = new ArrayList<Location>();
|
private final ArrayList<Location> blueBrickSpawns = new ArrayList<Location>();
|
||||||
private final ArrayList<Location> redSpawnArea = new ArrayList<Location>();
|
private final ArrayList<Location> redSpawnArea = new ArrayList<Location>();
|
||||||
private final ArrayList<Location> blueSpawnArea = new ArrayList<Location>();
|
private final ArrayList<Location> blueSpawnArea = new ArrayList<Location>();
|
||||||
// private final FileConfiguration messages;
|
|
||||||
private final ArrayList<Player> players = new ArrayList<Player>();
|
private final ArrayList<Player> players = new ArrayList<Player>();
|
||||||
|
private final HashMap<Player, Location> playerLocationHashMap = new HashMap<>();
|
||||||
|
// tagger, tagged
|
||||||
|
private final HashMap<Player, Player> taggedPlayerHashMap = new HashMap<Player, 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;
|
||||||
|
@ -166,7 +170,37 @@ public class CTB implements Minigame {
|
||||||
}
|
}
|
||||||
for (Player player : players) {
|
for (Player player : players) {
|
||||||
CtbData.Territory territory = getTerritory(player);
|
CtbData.Territory territory = getTerritory(player);
|
||||||
player.sendActionBar(ChatUtils.translate(territory.getFancyText()));
|
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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
switch (state) {
|
||||||
|
case Tagging:
|
||||||
|
if (tagged != null) {
|
||||||
|
player.sendActionBar(ChatUtils.translate(state.getFancyText().replace("%player%", tagged.getName())));
|
||||||
|
} else {
|
||||||
|
player.sendActionBar(ChatUtils.translate(territory.getFancyText()));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case Jailed:
|
||||||
|
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()));
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
player.sendActionBar(ChatUtils.translate(territory.getFancyText()));
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -295,7 +329,39 @@ public class CTB implements Minigame {
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
void onPlayerMove(PlayerMoveEvent event) {
|
void onPlayerWalkWhileTag(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 (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.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());
|
||||||
|
if (distanceToJail <= 12) {
|
||||||
|
addPlayerToJail(tagged);
|
||||||
|
taggedPlayerHashMap.remove(player);
|
||||||
|
SGM.getInstance().getCLogger().log(taggedPlayerHashMap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
void onPlayerMoveInJail(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;
|
||||||
|
@ -308,8 +374,8 @@ public class CTB implements Minigame {
|
||||||
} else if (territory.equals(CtbData.Territory.Red)) {
|
} else if (territory.equals(CtbData.Territory.Red)) {
|
||||||
jail = this.redJail;
|
jail = this.redJail;
|
||||||
}
|
}
|
||||||
double check = jail.distanceSquared(player.getLocation());
|
double distanceFromJail = jail.distanceSquared(player.getLocation());
|
||||||
if (check >= 9) {
|
if (distanceFromJail >= 9) {
|
||||||
Location lastValidPos = playerLocationHashMap.get(player);
|
Location lastValidPos = playerLocationHashMap.get(player);
|
||||||
player.teleport(Objects.requireNonNullElse(lastValidPos, jail));
|
player.teleport(Objects.requireNonNullElse(lastValidPos, jail));
|
||||||
} else {
|
} else {
|
||||||
|
@ -317,22 +383,65 @@ public class CTB implements Minigame {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
void onPlayerTag(PlayerTaggedEvent event) {
|
||||||
|
Player tagged = event.getTagged();
|
||||||
|
Player tagger = event.getTagger();
|
||||||
|
if (this.state != GameState.STARTED) return;
|
||||||
|
if (!players.contains(tagged) || !players.contains(tagger)) return;
|
||||||
|
taggedPlayerHashMap.putIfAbsent(tagger, tagged);
|
||||||
|
CustomPlayer cTagged = new CustomPlayer(tagged);
|
||||||
|
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()));
|
||||||
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
void onPlayerJail(PlayerJailedEvent event) {
|
void onPlayerJail(PlayerJailedEvent event) {
|
||||||
CustomPlayer player = new CustomPlayer(event.getJailed());
|
Player player = event.getJailed();
|
||||||
player.sendMessage(messages.getString("system.player.jail.info"));
|
if (this.state != GameState.STARTED) return;
|
||||||
for (String teamMembers : getTeam(player.player()).defaultDisplay().entries()) {
|
if (!players.contains(player)) return;
|
||||||
|
if (playerStateMap.get(player) != CtbData.PlayerState.Jailed) return;
|
||||||
|
CustomPlayer cPlayer = new CustomPlayer(player);
|
||||||
|
cPlayer.sendMessage(messages.getString("system.player.jail.info"));
|
||||||
|
for (String teamMembers : getTeam(cPlayer.player()).defaultDisplay().entries()) {
|
||||||
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());
|
if (teamMember.player() == cPlayer.player()) continue;
|
||||||
if (teamMember.player() == player.player()) continue;
|
|
||||||
teamMember.sendMessage(LegacyComponentSerializer.legacyAmpersand().serialize(event.getMessage()));
|
teamMember.sendMessage(LegacyComponentSerializer.legacyAmpersand().serialize(event.getMessage()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@EventHandler
|
||||||
|
void onEntityDamage(EntityDamageByEntityEvent event) {
|
||||||
|
// 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;
|
||||||
|
Entity eventEntity = event.getEntity();
|
||||||
|
Entity eventDamager = event.getDamager();
|
||||||
|
if (!(eventEntity instanceof Player tagged) || !(eventDamager instanceof Player tagger)) return;
|
||||||
|
if (!players.contains(tagged) || !players.contains(tagger)) return;
|
||||||
|
if (getTerritory(tagged) != getTerritory(tagger)) return;
|
||||||
|
ScoreboardTeam taggedTeam = getTeam(tagged);
|
||||||
|
ScoreboardTeam taggerTeam = getTeam(tagger);
|
||||||
|
if (taggedTeam == taggerTeam) return;
|
||||||
|
CtbData.Territory territory = getTerritory(tagged);
|
||||||
|
if (territory == CtbData.Territory.Blue && taggerTeam != blueTeam) return;
|
||||||
|
if (territory == CtbData.Territory.Red && taggerTeam != redTeam) return;
|
||||||
|
if (playerStateMap.get(tagged) != CtbData.PlayerState.Free) return;
|
||||||
|
if (playerStateMap.get(tagger) != CtbData.PlayerState.Free) return;
|
||||||
|
playerStateMap.replace(tagged, CtbData.PlayerState.Free, CtbData.PlayerState.Tagged);
|
||||||
|
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) {
|
public void addPlayerToJail(Player player) {
|
||||||
playerStateMap.replace(player, CtbData.PlayerState.Free, CtbData.PlayerState.Jailed);
|
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);
|
||||||
PlayerJailedEvent jailedEvent = new PlayerJailedEvent(player);
|
PlayerJailedEvent jailedEvent = new PlayerJailedEvent(player);
|
||||||
jailedEvent.callEvent();
|
jailedEvent.callEvent();
|
||||||
ScoreboardTeam team = getTeam(player);
|
ScoreboardTeam team = getTeam(player);
|
||||||
|
@ -341,6 +450,7 @@ 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) {
|
||||||
|
@ -538,6 +648,6 @@ public class CTB implements Minigame {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -6,7 +6,21 @@ package xyz.twovb.sgm.games.impl.capturethebrick;
|
||||||
public class CtbData {
|
public class CtbData {
|
||||||
|
|
||||||
public enum PlayerState {
|
public enum PlayerState {
|
||||||
Free, Invulnerable, Tagged, Jailed
|
Free(""),
|
||||||
|
Invulnerable("<gray><bold>ɢᴏ ʙᴀᴄᴋ ᴛᴏ ɴᴇᴜᴛʀᴀʟ!"),
|
||||||
|
Tagging("<gray><bold>ʏᴏᴜ ᴀʀᴇ ᴛᴀɢɢɪɴɢ: %player%"),
|
||||||
|
Tagged("<red><bold>ʏᴏᴜ ᴀʀᴇ ᴄᴜʀʀᴇɴᴛʟʏ ᴛᴀɢɢᴇᴅ!"),
|
||||||
|
Jailed("<red><bold>ʏᴏᴜ ᴀʀᴇ ᴄᴜʀʀᴇɴᴛʟʏ ᴊᴀɪʟᴇᴅ ɪɴ: %territory%");
|
||||||
|
|
||||||
|
private final String fancyText;
|
||||||
|
|
||||||
|
PlayerState(String fancyText) {
|
||||||
|
this.fancyText = fancyText;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getFancyText() {
|
||||||
|
return fancyText;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public enum Teams {
|
public enum Teams {
|
||||||
|
|
|
@ -8,7 +8,6 @@ import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.Cancellable;
|
import org.bukkit.event.Cancellable;
|
||||||
import org.bukkit.event.Event;
|
import org.bukkit.event.Event;
|
||||||
import org.bukkit.event.HandlerList;
|
import org.bukkit.event.HandlerList;
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
import xyz.twovb.sgm.games.impl.capturethebrick.CTB;
|
import xyz.twovb.sgm.games.impl.capturethebrick.CTB;
|
||||||
import xyz.twovb.toolbox.utils.ChatUtils;
|
import xyz.twovb.toolbox.utils.ChatUtils;
|
||||||
|
|
||||||
|
@ -26,6 +25,10 @@ public class PlayerJailedEvent extends Event implements Cancellable {
|
||||||
this.message = ChatUtils.translate(CTB.getMessages().getString("system.player.jail.notify").replace("%player%", jailed.getName()));
|
this.message = ChatUtils.translate(CTB.getMessages().getString("system.player.jail.notify").replace("%player%", jailed.getName()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static HandlerList getHandlerList() {
|
||||||
|
return HANDLER_LIST;
|
||||||
|
}
|
||||||
|
|
||||||
public Player getJailed() {
|
public Player getJailed() {
|
||||||
return this.jailed;
|
return this.jailed;
|
||||||
}
|
}
|
||||||
|
@ -38,10 +41,6 @@ public class PlayerJailedEvent extends Event implements Cancellable {
|
||||||
this.message = message;
|
this.message = message;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static HandlerList getHandlerList() {
|
|
||||||
return HANDLER_LIST;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public HandlerList getHandlers() {
|
public HandlerList getHandlers() {
|
||||||
return HANDLER_LIST;
|
return HANDLER_LIST;
|
||||||
|
|
|
@ -0,0 +1,54 @@
|
||||||
|
package xyz.twovb.sgm.games.impl.capturethebrick.events;
|
||||||
|
/*
|
||||||
|
* Created by 2vb - 7/7/2024
|
||||||
|
*/
|
||||||
|
|
||||||
|
import net.kyori.adventure.text.Component;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.event.Cancellable;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
|
||||||
|
public class PlayerTaggedEvent extends Event implements Cancellable {
|
||||||
|
|
||||||
|
private static final HandlerList HANDLER_LIST = new HandlerList();
|
||||||
|
private final Player tagged;
|
||||||
|
private final Player tagger;
|
||||||
|
private boolean isCancelled;
|
||||||
|
|
||||||
|
private Component message;
|
||||||
|
|
||||||
|
public PlayerTaggedEvent(Player tagged, Player tagger) {
|
||||||
|
this.tagged = tagged;
|
||||||
|
this.tagger = tagger;
|
||||||
|
this.isCancelled = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HandlerList getHandlerList() {
|
||||||
|
return HANDLER_LIST;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Player getTagged() {
|
||||||
|
return this.tagged;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Player getTagger() {
|
||||||
|
return this.tagger;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HandlerList getHandlers() {
|
||||||
|
return HANDLER_LIST;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isCancelled() {
|
||||||
|
return this.isCancelled;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setCancelled(boolean cancelled) {
|
||||||
|
this.isCancelled = cancelled;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -59,5 +59,6 @@ public class TeamGui {
|
||||||
game.addPlayerToTeam(target, CtbData.Teams.Blue);
|
game.addPlayerToTeam(target, CtbData.Teams.Blue);
|
||||||
game.sendMessageToAllPlayers(target.getName() + " BLUE");
|
game.sendMessageToAllPlayers(target.getName() + " BLUE");
|
||||||
}
|
}
|
||||||
|
player.closeInventory();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,4 +7,7 @@ system:
|
||||||
left: "&7%player% has left the game."
|
left: "&7%player% has left the game."
|
||||||
jail:
|
jail:
|
||||||
notify: "&7%player% has been jailed!"
|
notify: "&7%player% has been jailed!"
|
||||||
info: "&7You have been jailed! You can not leave until you get freed by a player or Jailbreak™."
|
info: "&7You have been jailed! You can not leave until you get freed by a player or Jailbreak™."
|
||||||
|
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."
|
||||||
|
|
Loading…
Reference in New Issue
Block a user