From 572dfbc9f7369f746c15acab2620ad9f4e35b104 Mon Sep 17 00:00:00 2001 From: ChomeNS <95471003+ChomeNS@users.noreply.github.com> Date: Sun, 11 Jun 2023 17:46:33 +0700 Subject: [PATCH] finally a team plugin !!! --- .../chipmunk/chayapak/chomens_bot/Bot.java | 2 + .../chayapak/chomens_bot/data/Team.java | 27 ++++++ .../chomens_bot/plugins/TeamPlugin.java | 84 +++++++++++++++++++ 3 files changed, 113 insertions(+) create mode 100644 src/main/java/land/chipmunk/chayapak/chomens_bot/data/Team.java create mode 100644 src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/TeamPlugin.java diff --git a/src/main/java/land/chipmunk/chayapak/chomens_bot/Bot.java b/src/main/java/land/chipmunk/chayapak/chomens_bot/Bot.java index 1f9164fd..0ff08a13 100644 --- a/src/main/java/land/chipmunk/chayapak/chomens_bot/Bot.java +++ b/src/main/java/land/chipmunk/chayapak/chomens_bot/Bot.java @@ -52,6 +52,7 @@ public class Bot { @Getter private PositionPlugin position; @Getter private SelfCarePlugin selfCare; @Getter private CorePlugin core; + @Getter private TeamPlugin team; @Getter private PlayersPlugin players; @Getter private TabCompletePlugin tabComplete; @Getter private CommandHandlerPlugin commandHandler; @@ -97,6 +98,7 @@ public class Bot { this.position = new PositionPlugin(this); this.selfCare = new SelfCarePlugin(this); this.core = new CorePlugin(this); + this.team = new TeamPlugin(this); this.players = new PlayersPlugin(this); this.tabComplete = new TabCompletePlugin(this); this.commandHandler = new CommandHandlerPlugin(this); diff --git a/src/main/java/land/chipmunk/chayapak/chomens_bot/data/Team.java b/src/main/java/land/chipmunk/chayapak/chomens_bot/data/Team.java new file mode 100644 index 00000000..973f2864 --- /dev/null +++ b/src/main/java/land/chipmunk/chayapak/chomens_bot/data/Team.java @@ -0,0 +1,27 @@ +package land.chipmunk.chayapak.chomens_bot.data; + +import com.github.steveice10.mc.protocol.data.game.scoreboard.CollisionRule; +import com.github.steveice10.mc.protocol.data.game.scoreboard.NameTagVisibility; +import com.github.steveice10.mc.protocol.data.game.scoreboard.TeamColor; +import land.chipmunk.chayapak.chomens_bot.data.chat.MutablePlayerListEntry; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.Setter; +import net.kyori.adventure.text.Component; + +import java.util.List; + +@AllArgsConstructor +public class Team { + @Getter @Setter private String teamName; + @Getter private List players; + @Getter @Setter private Component displayName; + @Getter @Setter private boolean friendlyFire; + @Getter @Setter private boolean seeFriendlyInvisibles; + @Getter @Setter private NameTagVisibility nametagVisibility; + @Getter @Setter private CollisionRule collisionRule; + @Getter @Setter private TeamColor color; + @Getter @Setter private Component prefix; + @Getter @Setter private Component suffix; + +} diff --git a/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/TeamPlugin.java b/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/TeamPlugin.java new file mode 100644 index 00000000..7acd07dd --- /dev/null +++ b/src/main/java/land/chipmunk/chayapak/chomens_bot/plugins/TeamPlugin.java @@ -0,0 +1,84 @@ +package land.chipmunk.chayapak.chomens_bot.plugins; + +import com.github.steveice10.mc.protocol.packet.ingame.clientbound.scoreboard.ClientboundSetPlayerTeamPacket; +import com.github.steveice10.packetlib.Session; +import com.github.steveice10.packetlib.packet.Packet; +import land.chipmunk.chayapak.chomens_bot.Bot; +import land.chipmunk.chayapak.chomens_bot.data.Team; +import lombok.Getter; + +import java.util.ArrayList; +import java.util.List; + +public class TeamPlugin extends Bot.Listener { + @Getter private final List teams = new ArrayList<>(); + + public TeamPlugin (Bot bot) { + bot.addListener(this); + } + + @Override + public void packetReceived(Session session, Packet packet) { + if (packet instanceof ClientboundSetPlayerTeamPacket) packetReceived((ClientboundSetPlayerTeamPacket) packet); + } + + public void packetReceived(ClientboundSetPlayerTeamPacket packet) { + switch (packet.getAction()) { + case CREATE -> { + final Team team = new Team( + packet.getTeamName(), + List.of(packet.getPlayers()), + packet.getDisplayName(), + packet.isFriendlyFire(), + packet.isSeeFriendlyInvisibles(), + packet.getNameTagVisibility(), + packet.getCollisionRule(), + packet.getColor(), + packet.getPrefix(), + packet.getSuffix() + ); + + teams.add(team); + } + case REMOVE -> teams.removeIf(team -> team.teamName().equals(packet.getTeamName())); + case UPDATE -> { + final Team team = teams + .stream() + .filter(eachTeam -> eachTeam.teamName().equals(packet.getTeamName())) + .toArray(Team[]::new)[0]; + + if (team == null) return; + + team.teamName(packet.getTeamName()); + team.displayName(packet.getDisplayName()); + team.friendlyFire(packet.isFriendlyFire()); + team.seeFriendlyInvisibles(packet.isSeeFriendlyInvisibles()); + team.nametagVisibility(packet.getNameTagVisibility()); + team.collisionRule(packet.getCollisionRule()); + team.color(packet.getColor()); + team.prefix(packet.getPrefix()); + team.suffix(packet.getSuffix()); + } + case ADD_PLAYER -> { + final Team team = teams + .stream() + .filter(eachTeam -> eachTeam.teamName().equals(packet.getTeamName())) + .toArray(Team[]::new)[0]; + + if (team == null) return; + + team.players().addAll(List.of(packet.getPlayers())); + } + case REMOVE_PLAYER -> { + final Team team = teams + .stream() + .filter(eachTeam -> eachTeam.teamName().equals(packet.getTeamName())) + .toArray(Team[]::new)[0]; + + if (team == null) return; + + team.players().removeAll(List.of(packet.getPlayers())); + } + } + } +}