From fc27e415f4575ff51234ea53d4da7f69f8581b78 Mon Sep 17 00:00:00 2001 From: hexlocation pc Date: Wed, 24 Jul 2024 20:32:05 +0200 Subject: [PATCH] feat: add team chat func + handle water bucket in court --- .../java/rip/iwakura/civilcore/CivilCore.java | 5 ++ .../java/rip/iwakura/civilcore/Court.java | 8 ++++ .../java/rip/iwakura/civilcore/Database.java | 11 +++++ .../rip/iwakura/civilcore/PlayerHandler.java | 27 +++++++++-- .../civilcore/commands/TeamChatCommand.java | 48 +++++++++++++++++++ src/main/resources/plugin.yml | 3 ++ 6 files changed, 99 insertions(+), 3 deletions(-) create mode 100644 src/main/java/rip/iwakura/civilcore/commands/TeamChatCommand.java diff --git a/src/main/java/rip/iwakura/civilcore/CivilCore.java b/src/main/java/rip/iwakura/civilcore/CivilCore.java index cf40b56..137e0e1 100644 --- a/src/main/java/rip/iwakura/civilcore/CivilCore.java +++ b/src/main/java/rip/iwakura/civilcore/CivilCore.java @@ -2,18 +2,22 @@ package rip.iwakura.civilcore; import java.sql.SQLException; import java.util.ArrayList; +import java.util.HashMap; import org.bukkit.Bukkit; import org.bukkit.WorldCreator; +import org.bukkit.entity.Player; import org.bukkit.plugin.java.JavaPlugin; import net.md_5.bungee.api.ChatColor; +import rip.iwakura.civilcore.commands.TeamChatCommand; import rip.iwakura.civilcore.commands.TeamCommand; import rip.iwakura.civilcore.discord.Discord; public class CivilCore extends JavaPlugin { public Database db = new Database(); public Discord bot; + public ArrayList teamChatRegister = new ArrayList<>(); @Override public void onEnable() { @@ -41,5 +45,6 @@ public class CivilCore extends JavaPlugin { getServer().getPluginManager().registerEvents(new Court(), this); this.getCommand("team").setExecutor(new TeamCommand(this)); this.getCommand("court").setExecutor(new Court()); + this.getCommand("tc").setExecutor(new TeamChatCommand(this)); } } diff --git a/src/main/java/rip/iwakura/civilcore/Court.java b/src/main/java/rip/iwakura/civilcore/Court.java index b2a7fc2..b0e723a 100644 --- a/src/main/java/rip/iwakura/civilcore/Court.java +++ b/src/main/java/rip/iwakura/civilcore/Court.java @@ -15,12 +15,20 @@ import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.BlockSpreadEvent; import org.bukkit.event.entity.EntityDamageEvent; import org.bukkit.event.entity.EntityDamageEvent.DamageCause; +import org.bukkit.event.player.PlayerBucketEmptyEvent; public class Court implements Listener,CommandExecutor{ private World court_world = Bukkit.getWorld("court"); private Location court_location = new Location(court_world, 4.5, 70.0, 0.5, -90f, 1.0f); + @EventHandler + public void PlayerPlaceWater(PlayerBucketEmptyEvent e) { + Player p = (Player) e.getPlayer(); + if (!p.getLocation().getWorld().getName().equals("court")) return; + e.setCancelled(true); + } + @EventHandler public void PlayerHurt(EntityDamageEvent e) { if (!(e.getEntity() instanceof Player)) return; diff --git a/src/main/java/rip/iwakura/civilcore/Database.java b/src/main/java/rip/iwakura/civilcore/Database.java index 4fe2e86..044fc05 100644 --- a/src/main/java/rip/iwakura/civilcore/Database.java +++ b/src/main/java/rip/iwakura/civilcore/Database.java @@ -82,6 +82,17 @@ public class Database { rs.close(); } + public List getPlayersInTeam(String team_name) { + List filtered = players.stream().filter( + s -> { + if (s.team.name == null) return false; + return s.team.name.equals(team_name); + }) + .collect(Collectors.toList()); + if(filtered.isEmpty()) return null; + return filtered; + } + public void refreshPlayers() throws SQLException { players.clear(); String sql = "SELECT players.NAME AS player_name, teams.NAME AS team_name, teams.TEAM_ID as t_team_id, teams.PREFIX AS team_prefix " + diff --git a/src/main/java/rip/iwakura/civilcore/PlayerHandler.java b/src/main/java/rip/iwakura/civilcore/PlayerHandler.java index 219cfc2..07eca75 100644 --- a/src/main/java/rip/iwakura/civilcore/PlayerHandler.java +++ b/src/main/java/rip/iwakura/civilcore/PlayerHandler.java @@ -1,6 +1,7 @@ package rip.iwakura.civilcore; import java.sql.SQLException; +import java.util.List; import org.bukkit.Bukkit; import org.bukkit.entity.Player; @@ -26,14 +27,34 @@ public class PlayerHandler implements Listener { Player p = e.getPlayer(); String player_name = p.getName(); + boolean inTeamChat = civilCore.teamChatRegister.contains(p); DbPlayer dbPlayer = civilCore.db.getPlayerByName(player_name); - String prefix = dbPlayer.team.prefix == null ? "" : ChatColor.translateAlternateColorCodes('&', dbPlayer.team.prefix) + " "; + String prefix = (inTeamChat ? ChatColor.DARK_BLUE + "TC " + ChatColor.RESET : "") + + (dbPlayer.team.prefix == null ? + "" : + ChatColor.translateAlternateColorCodes('&', dbPlayer.team.prefix) + " "); + String message = String.format("%s%s: %s", prefix, player_name, e.getMessage()); - Bukkit.broadcastMessage(String.format("%s%s: %s", prefix, player_name, e.getMessage())); + if (!inTeamChat) { + Bukkit.broadcastMessage(message); + civilCore.bot.sendMessage(e); + } else { + List players = civilCore.db.getPlayersInTeam(dbPlayer.team.name); + + if (players == null) return; + + for (DbPlayer team_dbp : players) { + Player team_p = Bukkit.getPlayer(team_dbp.name); + + if (team_p == null) continue; + + team_p.sendMessage(message); + } + } - civilCore.bot.sendMessage(e); } + @EventHandler public void PlayerJoinEvent(PlayerJoinEvent e) { Player p = e.getPlayer(); diff --git a/src/main/java/rip/iwakura/civilcore/commands/TeamChatCommand.java b/src/main/java/rip/iwakura/civilcore/commands/TeamChatCommand.java new file mode 100644 index 0000000..0a729e0 --- /dev/null +++ b/src/main/java/rip/iwakura/civilcore/commands/TeamChatCommand.java @@ -0,0 +1,48 @@ +package rip.iwakura.civilcore.commands; + +import java.sql.SQLException; + +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.command.CommandExecutor; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.event.player.PlayerEvent; + +import net.md_5.bungee.api.ChatColor; +import rip.iwakura.civilcore.Utils; +import rip.iwakura.civilcore.CivilCore; +import rip.iwakura.civilcore.types.DbPlayer; +import rip.iwakura.civilcore.types.Team; + +public class TeamChatCommand implements CommandExecutor { + private CivilCore civilCore = null; + + public TeamChatCommand(CivilCore civilCore) { + this.civilCore = civilCore; + } + + @Override + public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + args = Utils.parser(args).toArray(new String[0]); + + if (!(sender instanceof Player)) return true; + + Player p = (Player) sender; + + if (civilCore.teamChatRegister.contains(p)) { + civilCore.teamChatRegister.remove(p); + p.sendMessage(ChatColor.RED + "Team chat has been disabled."); + return true; + } + + if (civilCore.db.getPlayerByName(p.getName()).team.name == null) { + p.sendMessage(ChatColor.RED + "You aren't in a team :("); + return true; + } + civilCore.teamChatRegister.add(p); + p.sendMessage(ChatColor.GREEN + "Team chat has been enabled."); + + return true; + } +} diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml index 097916b..529c1fa 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -12,3 +12,6 @@ commands: court: description: Court Manager usage: / + tc: + description: Team Chat + usage: /