From 8b4ebaacd4166ea77e6309ba3e6eee02669bf4e6 Mon Sep 17 00:00:00 2001 From: 2vb <2vb@protonmail.com> Date: Sun, 7 Jul 2024 16:29:53 -0700 Subject: [PATCH] Tag + Jail done :) --- .../sgm/games/impl/capturethebrick/CTB.java | 73 ++++++++++++++----- .../games/impl/capturethebrick/CtbData.java | 2 +- .../events/PlayerFreedFromJailEvent.java | 52 +++++++++++++ .../events/PlayerStealBrickEvent.java | 58 +++++++++++++++ .../games/capturethebrick/messages.yml | 3 + 5 files changed, 168 insertions(+), 20 deletions(-) create mode 100644 src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/events/PlayerFreedFromJailEvent.java create mode 100644 src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/events/PlayerStealBrickEvent.java 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 1392be3..aff47be 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,19 +19,13 @@ 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 org.bukkit.Bukkit; -import org.bukkit.Location; -import org.bukkit.Material; -import org.bukkit.World; +import org.bukkit.*; import org.bukkit.block.Block; 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.entity.*; import org.bukkit.event.EventHandler; import org.bukkit.event.HandlerList; import org.bukkit.event.entity.EntityDamageByEntityEvent; @@ -42,10 +36,12 @@ 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.bukkit.util.Transformation; import org.jetbrains.annotations.NotNull; import xyz.twovb.sgm.SGM; import xyz.twovb.sgm.games.GameManager; import xyz.twovb.sgm.games.Minigame; +import xyz.twovb.sgm.games.impl.capturethebrick.events.PlayerFreedFromJailEvent; import xyz.twovb.sgm.games.impl.capturethebrick.events.PlayerJailedEvent; import xyz.twovb.sgm.games.impl.capturethebrick.events.PlayerTaggedEvent; import xyz.twovb.sgm.levels.LevelManager; @@ -190,17 +186,15 @@ public class CTB implements Minigame { case Jailed: player.sendActionBar(ChatUtils.translate(state.getFancyText().replace("%territory%", territory.getFancyText()))); break; - case Tagged: + case Tagged, Invulnerable: 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); +// SGM.getInstance().getCLogger().log(playerStateMap); } @Override @@ -209,6 +203,7 @@ public class CTB implements Minigame { for (Player player : players) { player.teleport(this.spawnLoc); sb.addPlayer(player); + player.setGameMode(GameMode.ADVENTURE); playerStateMap.put(player, CtbData.PlayerState.Free); } for (int i = 0; i <= this.bricks - 1; i++) { @@ -444,6 +439,19 @@ public class CTB implements Minigame { armorStandEntity.addPassenger(tagged); } + @EventHandler + void onPlayerFreedom(PlayerFreedFromJailEvent event) { + Player tagged = event.getTagged(); + Player tagger = event.getTagger(); + if (this.state != GameState.STARTED) return; + if (!players.contains(tagged) || !players.contains(tagger)) return; + CustomPlayer cTagged = new CustomPlayer(tagged); + CustomPlayer cTagger = new CustomPlayer(tagger); + sendMessageToAllPlayers(messages.getString("system.player.jail.free.notify").replace("%rescuer%", tagger.getName()).replace("%player%", tagged.getName())); + cTagger.sendMessage(messages.getString("system.player.jail.free.info").replace("%player%", tagged.getName())); + cTagged.sendMessage(messages.getString("system.player.jail.free.info").replace("%player%", tagger.getName())); + } + @EventHandler void onDismountAttempt(EntityDismountEvent event) { if (!(event.getEntity() instanceof Player player)) return; @@ -470,12 +478,33 @@ public class CTB implements Minigame { } } + @EventHandler + void onPlayerFree(EntityDamageByEntityEvent event) { + // Check if a player is allowed to free someone, and if the tagged player is allowed to be free + // If both are true, call the custom event + 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; + if (playerStateMap.get(tagged) != CtbData.PlayerState.Jailed) return; + if (playerStateMap.get(tagger) != CtbData.PlayerState.Free) return; + playerStateMap.replace(tagged, CtbData.PlayerState.Jailed, CtbData.PlayerState.Invulnerable); + playerStateMap.replace(tagger, CtbData.PlayerState.Free, CtbData.PlayerState.Invulnerable); + PlayerFreedFromJailEvent freedFromJailEvent = new PlayerFreedFromJailEvent(tagged, tagger); + freedFromJailEvent.callEvent(); + event.setCancelled(true); + } + @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; - event.setCancelled(true); Entity eventEntity = event.getEntity(); Entity eventDamager = event.getDamager(); if (!(eventEntity instanceof Player tagged) || !(eventDamager instanceof Player tagger)) return; @@ -484,6 +513,7 @@ public class CTB implements Minigame { ScoreboardTeam taggedTeam = getTeam(tagged); ScoreboardTeam taggerTeam = getTeam(tagger); if (taggedTeam == taggerTeam) return; + event.setCancelled(true); CtbData.Territory territory = getTerritory(tagged); if (territory == CtbData.Territory.Blue && taggerTeam != blueTeam) return; if (territory == CtbData.Territory.Red && taggerTeam != redTeam) return; @@ -509,7 +539,7 @@ public class CTB implements Minigame { } public void freePlayerFromJail(Player player) { - playerStateMap.replace(player, CtbData.PlayerState.Jailed, CtbData.PlayerState.Free); + playerStateMap.replace(player, CtbData.PlayerState.Jailed, CtbData.PlayerState.Invulnerable); } @Override @@ -564,13 +594,18 @@ public class CTB implements Minigame { } private void placeBrick(Location location, ScoreboardTeam team) { - Block brick = location.getBlock(); + Location brickSpawnLoc = location; + brickSpawnLoc = brickSpawnLoc.clone().add(0.5, 0, 0.5); + Entity brickEntity = gameWorld.spawnEntity(brickSpawnLoc, EntityType.BLOCK_DISPLAY); + BlockDisplay brickDisplay = (BlockDisplay) brickEntity; if (team.equals(redTeam)) { - brick.setType(Material.RED_WOOL); - } - if (team.equals(blueTeam)) { - brick.setType(Material.BLUE_WOOL); + 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) { 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 726e6d8..567b4f5 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 @@ -10,7 +10,7 @@ public class CtbData { Invulnerable("ɢᴏ ʙᴀᴄᴋ ᴛᴏ ɴᴇᴜᴛʀᴀʟ!"), Tagging("ʏᴏᴜ ᴀʀᴇ ᴛᴀɢɢɪɴɢ: %player%"), Tagged("ʏᴏᴜ ᴀʀᴇ ᴄᴜʀʀᴇɴᴛʟʏ ᴛᴀɢɢᴇᴅ!"), - Jailed("ʏᴏᴜ ᴀʀᴇ ᴄᴜʀʀᴇɴᴛʟʏ ᴊᴀɪʟᴇᴅ ɪɴ: %territory%"); + Jailed("ʏᴏᴜ ᴀʀᴇ ᴄᴜʀʀᴇɴᴛʟʏ ᴊᴀɪʟᴇᴅ ɪɴ: %territory%"); private final String fancyText; diff --git a/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/events/PlayerFreedFromJailEvent.java b/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/events/PlayerFreedFromJailEvent.java new file mode 100644 index 0000000..41eb25c --- /dev/null +++ b/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/events/PlayerFreedFromJailEvent.java @@ -0,0 +1,52 @@ +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 PlayerFreedFromJailEvent 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 PlayerFreedFromJailEvent(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; + } +} diff --git a/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/events/PlayerStealBrickEvent.java b/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/events/PlayerStealBrickEvent.java new file mode 100644 index 0000000..e903065 --- /dev/null +++ b/src/main/java/xyz/twovb/sgm/games/impl/capturethebrick/events/PlayerStealBrickEvent.java @@ -0,0 +1,58 @@ +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; +import org.jetbrains.annotations.NotNull; +import xyz.twovb.sgm.games.impl.capturethebrick.CTB; +import xyz.twovb.toolbox.utils.ChatUtils; + +public class PlayerStealBrickEvent extends Event implements Cancellable { + private static final HandlerList HANDLER_LIST = new HandlerList(); + private final Player jailed; + private boolean isCancelled; + + private Component message; + + public PlayerStealBrickEvent(Player jailed) { + this.jailed = jailed; + this.isCancelled = false; + 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() { + return this.jailed; + } + + public Component getMessage() { + return message; + } + + public void setMessage(Component message) { + this.message = message; + } + + @Override + public HandlerList getHandlers() { + return HANDLER_LIST; + } + + @Override + public boolean isCancelled() { + return this.isCancelled; + } + + @Override + public void setCancelled(boolean cancelled) { + this.isCancelled = cancelled; + } +} diff --git a/src/main/resources/games/capturethebrick/messages.yml b/src/main/resources/games/capturethebrick/messages.yml index c5e9bb5..3d1ae93 100644 --- a/src/main/resources/games/capturethebrick/messages.yml +++ b/src/main/resources/games/capturethebrick/messages.yml @@ -8,6 +8,9 @@ system: jail: notify: "&7%player% has been jailed!" info: "&7You have been jailed! You can not leave until you get freed by a player or Jailbreak™." + free: + notify: "&7%player% has been freed from Jail by %rescuer%" + info: "&7You and %player% must now walk back to Neutral before you can do anything." 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."