From 233a293cd151791267870ee388632f3f794aaf64 Mon Sep 17 00:00:00 2001
From: Cryptite <cryptite@gmail.com>
Date: Tue, 21 Sep 2021 18:17:34 -0500
Subject: [PATCH] Multiple Entries with Scoreboards

---
 .../main/java/org/bukkit/scoreboard/Team.java | 104 ++++++++++++++++++
 1 file changed, 104 insertions(+)

diff --git a/paper-api/src/main/java/org/bukkit/scoreboard/Team.java b/paper-api/src/main/java/org/bukkit/scoreboard/Team.java
index c500de6ed1..c34d9ab729 100644
--- a/paper-api/src/main/java/org/bukkit/scoreboard/Team.java
+++ b/paper-api/src/main/java/org/bukkit/scoreboard/Team.java
@@ -309,6 +309,60 @@ public interface Team extends net.kyori.adventure.audience.ForwardingAudience {
      */
     void addEntry(@NotNull String entry);
 
+    // Paper start
+    /**
+     * This puts a collection of entities onto this team for the scoreboard which results in one
+     * packet for the updates rather than a packet-per-entity.
+     * <p>
+     * Entities on other teams will be removed from their respective teams.
+     *
+     * @param entities the entities to add
+     * @throws IllegalArgumentException if entities are null
+     * @throws IllegalStateException if this team has been unregistered
+     */
+    default void addEntities(@NotNull org.bukkit.entity.Entity @NotNull ...entities) {
+        this.addEntities(java.util.List.of(entities));
+    }
+
+    /**
+     * This puts a collection of entities onto this team for the scoreboard which results in one
+     * packet for the updates rather than a packet-per-entity.
+     * <p>
+     * Entities on other teams will be removed from their respective teams.
+     *
+     * @param entities the entities to add
+     * @throws IllegalArgumentException if entities are null
+     * @throws IllegalStateException if this team has been unregistered
+     */
+    void addEntities(@NotNull java.util.Collection<org.bukkit.entity.Entity> entities) throws IllegalStateException, IllegalArgumentException;
+
+    /**
+     * This puts a collection of entries onto this team for the scoreboard which results in one
+     * packet for the updates rather than a packet-per-entry.
+     * <p>
+     * Entries on other teams will be removed from their respective teams.
+     *
+     * @param entries the entries to add
+     * @throws IllegalArgumentException if entries are null
+     * @throws IllegalStateException if this team has been unregistered
+     */
+    default void addEntries(@NotNull String... entries) throws IllegalStateException, IllegalArgumentException {
+        this.addEntries(java.util.List.of(entries));
+    }
+
+    /**
+     * This puts a collection of entries onto this team for the scoreboard which results in one
+     * packet for the updates rather than a packet-per-entry.
+     * <p>
+     * Entries on other teams will be removed from their respective teams.
+     *
+     * @param entries the entries to add
+     * @throws IllegalArgumentException if entries are null
+     * @throws IllegalStateException if this team has been unregistered
+     */
+    void addEntries(@NotNull java.util.Collection<String> entries) throws IllegalStateException, IllegalArgumentException;
+    // Paper end
+
     /**
      * Removes the player from this team.
      *
@@ -329,6 +383,56 @@ public interface Team extends net.kyori.adventure.audience.ForwardingAudience {
      */
     boolean removeEntry(@NotNull String entry);
 
+    // Paper start
+    /**
+     * Removes a collection of entities from this team which results in one
+     * packet for the updates rather than a packet-per-entity.
+     *
+     * @param entities the entries to remove
+     * @return if any of the entities were a part of this team
+     * @throws IllegalArgumentException if entities is null
+     * @throws IllegalStateException if this team has been unregistered
+     */
+    default boolean removeEntities(@NotNull org.bukkit.entity.Entity @NotNull ... entities) throws IllegalStateException, IllegalArgumentException {
+        return this.removeEntities(java.util.List.of(entities));
+    }
+
+    /**
+     * Removes a collection of entities from this team which results in one
+     * packet for the updates rather than a packet-per-entity.
+     *
+     * @param entities the entries to remove
+     * @return if any of the entities were a part of this team
+     * @throws IllegalArgumentException if entities is null
+     * @throws IllegalStateException if this team has been unregistered
+     */
+    boolean removeEntities(@NotNull java.util.Collection<org.bukkit.entity.Entity> entities) throws IllegalStateException, IllegalArgumentException;
+
+    /**
+     * Removes a collection of entries from this team which results in one
+     * packet for the updates rather than a packet-per-entry.
+     *
+     * @param entries the entries to remove
+     * @return if any of the entries were a part of this team
+     * @throws IllegalArgumentException if entries is null
+     * @throws IllegalStateException if this team has been unregistered
+     */
+    default boolean removeEntries(@NotNull String... entries) throws IllegalStateException, IllegalArgumentException {
+        return this.removeEntries(java.util.List.of(entries));
+    }
+
+    /**
+     * Removes a collection of entries from this team which results in one
+     * packet for the updates rather than a packet-per-entry.
+     *
+     * @param entries the entries to remove
+     * @return if any of the entries were a part of this team
+     * @throws IllegalArgumentException if entries is null
+     * @throws IllegalStateException if this team has been unregistered
+     */
+    boolean removeEntries(@NotNull java.util.Collection<String> entries) throws IllegalStateException, IllegalArgumentException;
+    // Paper end
+
     /**
      * Unregisters this team from the Scoreboard
      *