Skip to content

Commit ac07b93

Browse files
authored
Created a staff scoreboard team (#57)
2 parents b4b87bf + 134b10f commit ac07b93

File tree

6 files changed

+81
-2
lines changed

6 files changed

+81
-2
lines changed

src/main/java/pro/cloudnode/smp/smpcore/Configuration.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,4 +101,12 @@ public boolean deathBanEnabled() {
101101
Objects.requireNonNull(config.getString("relative-time.duration-indefinite"))
102102
);
103103
}
104+
105+
public @NotNull String staffTeamId() {
106+
return Objects.requireNonNull(config.getString("staff-team.id"));
107+
}
108+
109+
public @NotNull Component staffTeamName() {
110+
return MiniMessage.miniMessage().deserialize(Objects.requireNonNull(config.getString("staff-team.name")));
111+
}
104112
}

src/main/java/pro/cloudnode/smp/smpcore/Member.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
11
package pro.cloudnode.smp.smpcore;
22

33
import io.papermc.paper.ban.BanListType;
4+
import net.kyori.adventure.text.Component;
45
import org.bukkit.OfflinePlayer;
6+
import org.bukkit.scoreboard.Scoreboard;
7+
import org.bukkit.scoreboard.Team;
58
import org.jetbrains.annotations.NotNull;
69
import 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
}

src/main/java/pro/cloudnode/smp/smpcore/Nation.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import org.bukkit.scoreboard.Team;
1010
import org.jetbrains.annotations.NotNull;
1111

12-
import java.sql.Connection;
1312
import java.sql.PreparedStatement;
1413
import java.sql.ResultSet;
1514
import java.sql.SQLException;
@@ -128,6 +127,9 @@ public Nation(final @NotNull String id, final @NotNull String name, final @NotNu
128127
team.displayName(Component.text(shortName).color(TextColor.color(Integer.decode("0x" + color))).hoverEvent(HoverEvent.showText(Component.text(name))));
129128
team.prefix(Component.text(shortName + " ").color(TextColor.color(Integer.decode("0x" + color))).hoverEvent(HoverEvent.showText(Component.text(name))));
130129
for (final @NotNull Member member : citizens()) try {
130+
if (member.staff)
131+
continue;
132+
131133
team.addPlayer(member.player());
132134
}
133135
catch (final @NotNull IllegalArgumentException ignored) {}
@@ -145,7 +147,9 @@ public void add(final @NotNull Member member) {
145147
member.nation().ifPresent(nation -> nation.remove(member));
146148
member.nationID = id;
147149
member.save();
148-
getTeam().addPlayer(member.player());
150+
151+
if (!member.staff)
152+
getTeam().addPlayer(member.player());
149153

150154
Audience.audience(onlinePlayers()).sendMessage(SMPCore.messages().nationJoinJoined(member));
151155

src/main/java/pro/cloudnode/smp/smpcore/SMPCore.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ public void reload() {
111111
config.reload();
112112
if (messages != null) messages.reload();
113113
setupDatabase();
114+
Member.createStaffTeam();
114115
if (rest != null) rest.javalin.stop();
115116
rest = new REST(config.apiPort());
116117
}

src/main/java/pro/cloudnode/smp/smpcore/listener/PlayerJoinListener.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,26 @@ public void putPlayerInNationTeam(final @NotNull PlayerJoinEvent event) {
2121
final @NotNull Optional<@NotNull Member> member = Member.get(player);
2222
final @NotNull Optional<@NotNull Team> team = Optional.ofNullable(player.getScoreboard()
2323
.getPlayerTeam(player));
24+
final Team staffTeam = Member.getStaffTeam();
25+
2426
final @NotNull Optional<@NotNull Nation> nationFromTeam = team.flatMap(Nation::get);
2527
if (member.isEmpty()) {
2628
// no longer a member, but in a nation's team?
2729
nationFromTeam.ifPresent(ignored -> team.get().removePlayer(player));
30+
staffTeam.removePlayer(player);
31+
return;
32+
}
33+
34+
if (member.get().staff) {
35+
if (team.isPresent() && !team.get().equals(staffTeam))
36+
team.get().removePlayer(player);
37+
38+
staffTeam.addPlayer(player);
39+
2840
return;
2941
}
42+
staffTeam.removePlayer(player);
43+
3044
final @NotNull Optional<@NotNull Nation> nation = member.get().nation();
3145
if (nation.isEmpty() && team.isPresent()) {
3246
// no longer in a nation, but in a nation's team?

src/main/resources/config.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,7 @@ relative-time:
4747
past: <t> ago
4848
duration: for <t>
4949
duration-indefinite: <u><b>forever</b></u>
50+
51+
staff-team:
52+
id: staff
53+
name: <hover:show_text:'The shield that guards the realms of men.'><dark_red><b>STAFF</b></dark_red></hover>

0 commit comments

Comments
 (0)