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 385302c..7e02446 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 @@ -185,7 +185,7 @@ public class CTB implements Minigame { case Jailed: player.sendActionBar(ChatUtils.translate(state.getFancyText().replace("%territory%", territory.getFancyText()))); break; - case Tagged, Invulnerable: + case Tagged, Invulnerable, Stealing: player.sendActionBar(ChatUtils.translate(state.getFancyText())); break; default: @@ -341,6 +341,30 @@ public class CTB implements Minigame { taggedPlayerHashMap.remove(tagger); } + @EventHandler + void onPlayerMoveWithBrick(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.Stealing) return; + CtbData.Territory territory = getTerritory(player); +// CustomPlayer cPlayer = new CustomPlayer(player); + if (territory.equals(CtbData.Territory.Neutral)) { + sendMessageToAllPlayers(messages.getString("system.player.brick.steal.announce").replace("%player%", player.getName())); + playerStateMap.replace(player, CtbData.PlayerState.Stealing, CtbData.PlayerState.Free); + } + } + + @EventHandler + void onPlayerStealBrick(PlayerStealBrickEvent event) { + Player player = event.getThief(); + if (!players.contains(player)) return; + if (this.state != GameState.STARTED) return; + if (playerStateMap.get(player) != CtbData.PlayerState.Stealing) return; + player.sendMessage(event.getMessage()); + } + @EventHandler void onPlayerWalkWhileInvuln(PlayerMoveEvent event) { if (!(event.getFrom().getX() != event.getTo().getX() || event.getFrom().getZ() != event.getTo().getZ())) return; @@ -477,6 +501,8 @@ public class CTB implements Minigame { } } + + @EventHandler void handleEntityDamage(EntityDamageByEntityEvent event) { if (this.state != GameState.STARTED) return; @@ -485,21 +511,21 @@ public class CTB implements Minigame { if (!(eventEntity instanceof Player interacted) || !(eventDamager instanceof Player interacter)) return; if (!players.contains(interacted) || !players.contains(interacter)) return; - if (getTerritory(interacted) != getTerritory(interacter)) return; +// if (getTerritory(interacted) != getTerritory(interacter)) return; PlayerGameInteractionEvent interactionEvent = new PlayerGameInteractionEvent(interacted, interacter); Bukkit.getServer().getPluginManager().callEvent(interactionEvent); - if (interactionEvent.isCancelled()) { - event.setCancelled(true); - } + event.setCancelled(true); +// if (interactionEvent.isCancelled()) { +// event.setCancelled(true); +// } } @EventHandler - void onPlayerFree(EntityDamageByEntityEvent event) { - handleEntityDamage(event); - Player interacted = (Player) event.getEntity(); - Player interacter = (Player) event.getDamager(); + void onPlayerFree(PlayerGameInteractionEvent event) { + Player interacted = event.getInteracted(); + Player interacter = event.getInteracter(); if (this.state != GameState.STARTED) return; if (!players.contains(interacted) || !players.contains(interacter)) return; @@ -518,32 +544,9 @@ public class CTB implements Minigame { } @EventHandler - void onPlayerHit(EntityDamageByEntityEvent event) { - handleEntityDamage(event); - Player interacted = (Player) event.getEntity(); - Player interacter = (Player) event.getDamager(); - - if (this.state != GameState.STARTED) return; - if (!players.contains(interacted) || !players.contains(interacter)) return; - if (getTerritory(interacted) != getTerritory(interacter)) return; - ScoreboardTeam interactedTeam = getTeam(interacted); - ScoreboardTeam interacterTeam = getTeam(interacter); - if (interactedTeam != interacterTeam) return; - if (playerStateMap.get(interacted) != CtbData.PlayerState.Jailed) return; - if (playerStateMap.get(interacter) != CtbData.PlayerState.Free) return; - - playerStateMap.replace(interacted, CtbData.PlayerState.Jailed, CtbData.PlayerState.Invulnerable); - playerStateMap.replace(interacter, CtbData.PlayerState.Free, CtbData.PlayerState.Invulnerable); - PlayerFreedFromJailEvent freedFromJailEvent = new PlayerFreedFromJailEvent(interacted, interacter); - Bukkit.getServer().getPluginManager().callEvent(freedFromJailEvent); - event.setCancelled(true); - } - - @EventHandler - void onEntityDamage(EntityDamageByEntityEvent event) { - handleEntityDamage(event); - Player interacted = (Player) event.getEntity(); - Player interacter = (Player) event.getDamager(); + void onPlayerTag(PlayerGameInteractionEvent event) { + Player interacted = event.getInteracted(); + Player interacter = event.getInteracter(); if (this.state != GameState.STARTED) return; if (!players.contains(interacted) || !players.contains(interacter)) return; @@ -572,7 +575,7 @@ public class CTB implements Minigame { if (this.state != GameState.STARTED) return; Entity rightClicked = event.getRightClicked(); Player brickTaker = event.getPlayer(); -// if (!(rightClicked instanceof ArmorStand brickEntity)) return; + if (!(rightClicked instanceof ArmorStand)) return; if (!players.contains(brickTaker)) return; SGM.getInstance().getCLogger().log(rightClicked); SGM.getInstance().getCLogger().log(brickTaker); 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 4730185..9586cda 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 @@ -7,7 +7,7 @@ public class CtbData { public enum PlayerState { Free(""), - Stealing("⚠️ʙᴇ ᴄᴀʀᴇꜰᴜʟ! ʏᴏᴜ ʜᴀᴠᴇ ᴀ ʙʀɪᴄᴋ ⚠️"), + Stealing("ʙᴇ ᴄᴀʀᴇꜰᴜʟ! ʏᴏᴜ ʜᴀᴠᴇ ᴀ ʙʀɪᴄᴋ⚠"), Invulnerable("ɢᴏ ʙᴀᴄᴋ ᴛᴏ ɴᴇᴜᴛʀᴀʟ!"), Tagging("ʏᴏᴜ ᴀʀᴇ ᴛᴀɢɢɪɴɢ: %player%"), Tagged("ʏᴏᴜ ᴀʀᴇ ᴄᴜʀʀᴇɴᴛʟʏ ᴛᴀɢɢᴇᴅ!"), 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 index cc26eae..c6636fc 100644 --- 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 @@ -8,19 +8,18 @@ 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 final Player thief; private boolean isCancelled; private Component message; - public PlayerStealBrickEvent(Player jailed) { - this.jailed = jailed; + public PlayerStealBrickEvent(Player thief) { + this.thief = thief; this.isCancelled = false; this.message = ChatUtils.translate(CTB.getMessages().getString("system.player.brick.steal.notify")); } @@ -29,8 +28,8 @@ public class PlayerStealBrickEvent extends Event implements Cancellable { return HANDLER_LIST; } - public Player getJailed() { - return this.jailed; + public Player getThief() { + return this.thief; } public Component getMessage() { diff --git a/src/main/resources/games/capturethebrick/messages.yml b/src/main/resources/games/capturethebrick/messages.yml index 841e4b9..7f31578 100644 --- a/src/main/resources/games/capturethebrick/messages.yml +++ b/src/main/resources/games/capturethebrick/messages.yml @@ -20,4 +20,5 @@ system: full: "&7You have returned to Neutral. You can now get back to the game!" brick: steal: - notify: "&7You have stolen a brick. Make it to Neutral without being caught to Capture The Brick™!" \ No newline at end of file + notify: "&7You have stolen a brick. Make it to Neutral without being caught to Capture The Brick™!" + announce: "&7%player% has captured a brick! %score%" \ No newline at end of file