11package pro .cloudnode .smp .smpcore ;
22
33import io .papermc .paper .ban .BanListType ;
4+ import net .kyori .adventure .text .Component ;
45import org .bukkit .OfflinePlayer ;
6+ import org .bukkit .scoreboard .Scoreboard ;
7+ import org .bukkit .scoreboard .Team ;
58import org .jetbrains .annotations .NotNull ;
69import org .jetbrains .annotations .Nullable ;
710
@@ -212,6 +215,21 @@ public boolean delete() {
212215 return members ;
213216 }
214217
218+ public static @ NotNull Set <@ NotNull Member > getStaff () {
219+ final @ NotNull Set <@ NotNull Member > members = new HashSet <>();
220+ try (
221+ final @ NotNull PreparedStatement stmt = SMPCore .getInstance ().conn
222+ .prepareStatement ("SELECT * FROM `members` WHERE `staff` = true" )
223+ ) {
224+ final @ NotNull ResultSet rs = stmt .executeQuery ();
225+ while (rs .next ()) members .add (new Member (rs ));
226+ }
227+ catch (final @ NotNull SQLException e ) {
228+ SMPCore .getInstance ().getLogger ().log (Level .SEVERE , "could not get staff members" , e );
229+ }
230+ return members ;
231+ }
232+
215233 public static int count () {
216234 try (
217235 final @ NotNull PreparedStatement stmt = SMPCore .getInstance ().conn .prepareStatement ("SELECT COUNT(*) as `n` FROM `members`" )
@@ -235,4 +253,34 @@ public static int count() {
235253 public static @ NotNull Set <@ NotNull String > getAltNames () {
236254 return get ().stream ().filter (Member ::isAlt ).map (m -> m .player ().getName ()).filter (Objects ::nonNull ).collect (Collectors .toSet ());
237255 }
256+
257+ public static @ NotNull Team createStaffTeam () {
258+ final Scoreboard scoreboard = SMPCore .getInstance ().getServer ().getScoreboardManager ().getMainScoreboard ();
259+
260+ final Optional <Team > existing = Optional .ofNullable (scoreboard .getTeam (SMPCore .config ().staffTeamId ()));
261+ existing .ifPresent (Team ::unregister );
262+
263+ final Team team = scoreboard .registerNewTeam (SMPCore .config ().staffTeamId ());
264+
265+ team .setAllowFriendlyFire (false );
266+ team .setCanSeeFriendlyInvisibles (true );
267+
268+ team .setOption (Team .Option .DEATH_MESSAGE_VISIBILITY , Team .OptionStatus .FOR_OWN_TEAM );
269+
270+ team .displayName (SMPCore .config ().staffTeamName ());
271+ team .prefix (SMPCore .config ().staffTeamName ().append (Component .text (" " )));
272+
273+ for (final Member staff : getStaff ())
274+ team .addPlayer (staff .player ());
275+
276+ return team ;
277+ }
278+
279+ public static @ NotNull Team getStaffTeam () {
280+ return Optional .ofNullable (
281+ SMPCore .getInstance ().getServer ().getScoreboardManager ().getMainScoreboard ().getTeam (
282+ SMPCore .config ().staffTeamId ()
283+ )
284+ ).orElseGet (Member ::createStaffTeam );
285+ }
238286}
0 commit comments