Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions src/main/java/pro/cloudnode/smp/smpcore/Configuration.java
Original file line number Diff line number Diff line change
Expand Up @@ -101,4 +101,12 @@ public boolean deathBanEnabled() {
Objects.requireNonNull(config.getString("relative-time.duration-indefinite"))
);
}

public @NotNull String staffTeamId() {
return Objects.requireNonNull(config.getString("staff-team.id"));
}

public @NotNull Component staffTeamName() {
return MiniMessage.miniMessage().deserialize(Objects.requireNonNull(config.getString("staff-team.name")));
}
}
48 changes: 48 additions & 0 deletions src/main/java/pro/cloudnode/smp/smpcore/Member.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
package pro.cloudnode.smp.smpcore;

import io.papermc.paper.ban.BanListType;
import net.kyori.adventure.text.Component;
import org.bukkit.OfflinePlayer;
import org.bukkit.scoreboard.Scoreboard;
import org.bukkit.scoreboard.Team;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

Expand Down Expand Up @@ -212,6 +215,21 @@ public boolean delete() {
return members;
}

public static @NotNull Set<@NotNull Member> getStaff() {
final @NotNull Set<@NotNull Member> members = new HashSet<>();
try (
final @NotNull PreparedStatement stmt = SMPCore.getInstance().conn
.prepareStatement("SELECT * FROM `members` WHERE `staff` = true")
) {
final @NotNull ResultSet rs = stmt.executeQuery();
while (rs.next()) members.add(new Member(rs));
}
catch (final @NotNull SQLException e) {
SMPCore.getInstance().getLogger().log(Level.SEVERE, "could not get staff members", e);
}
return members;
}

public static int count() {
try (
final @NotNull PreparedStatement stmt = SMPCore.getInstance().conn.prepareStatement("SELECT COUNT(*) as `n` FROM `members`")
Expand All @@ -235,4 +253,34 @@ public static int count() {
public static @NotNull Set<@NotNull String> getAltNames() {
return get().stream().filter(Member::isAlt).map(m -> m.player().getName()).filter(Objects::nonNull).collect(Collectors.toSet());
}

public static @NotNull Team createStaffTeam() {
final Scoreboard scoreboard = SMPCore.getInstance().getServer().getScoreboardManager().getMainScoreboard();

final Optional<Team> existing = Optional.ofNullable(scoreboard.getTeam(SMPCore.config().staffTeamId()));
existing.ifPresent(Team::unregister);

final Team team = scoreboard.registerNewTeam(SMPCore.config().staffTeamId());

team.setAllowFriendlyFire(false);
team.setCanSeeFriendlyInvisibles(true);

team.setOption(Team.Option.DEATH_MESSAGE_VISIBILITY, Team.OptionStatus.FOR_OWN_TEAM);

team.displayName(SMPCore.config().staffTeamName());
team.prefix(SMPCore.config().staffTeamName().append(Component.text(" ")));

for (final Member staff : getStaff())
team.addPlayer(staff.player());

return team;
}

public static @NotNull Team getStaffTeam() {
return Optional.ofNullable(
SMPCore.getInstance().getServer().getScoreboardManager().getMainScoreboard().getTeam(
SMPCore.config().staffTeamId()
)
).orElseGet(Member::createStaffTeam);
}
}
8 changes: 6 additions & 2 deletions src/main/java/pro/cloudnode/smp/smpcore/Nation.java
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import org.bukkit.scoreboard.Team;
import org.jetbrains.annotations.NotNull;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
Expand Down Expand Up @@ -128,6 +127,9 @@ public Nation(final @NotNull String id, final @NotNull String name, final @NotNu
team.displayName(Component.text(shortName).color(TextColor.color(Integer.decode("0x" + color))).hoverEvent(HoverEvent.showText(Component.text(name))));
team.prefix(Component.text(shortName + " ").color(TextColor.color(Integer.decode("0x" + color))).hoverEvent(HoverEvent.showText(Component.text(name))));
for (final @NotNull Member member : citizens()) try {
if (member.staff)
continue;

team.addPlayer(member.player());
}
catch (final @NotNull IllegalArgumentException ignored) {}
Expand All @@ -145,7 +147,9 @@ public void add(final @NotNull Member member) {
member.nation().ifPresent(nation -> nation.remove(member));
member.nationID = id;
member.save();
getTeam().addPlayer(member.player());

if (!member.staff)
getTeam().addPlayer(member.player());

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

Expand Down
1 change: 1 addition & 0 deletions src/main/java/pro/cloudnode/smp/smpcore/SMPCore.java
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,7 @@ public void reload() {
config.reload();
if (messages != null) messages.reload();
setupDatabase();
Member.createStaffTeam();
if (rest != null) rest.javalin.stop();
rest = new REST(config.apiPort());
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,12 +21,26 @@ public void putPlayerInNationTeam(final @NotNull PlayerJoinEvent event) {
final @NotNull Optional<@NotNull Member> member = Member.get(player);
final @NotNull Optional<@NotNull Team> team = Optional.ofNullable(player.getScoreboard()
.getPlayerTeam(player));
final Team staffTeam = Member.getStaffTeam();

final @NotNull Optional<@NotNull Nation> nationFromTeam = team.flatMap(Nation::get);
if (member.isEmpty()) {
// no longer a member, but in a nation's team?
nationFromTeam.ifPresent(ignored -> team.get().removePlayer(player));
staffTeam.removePlayer(player);
return;
}

if (member.get().staff) {
if (team.isPresent() && !team.get().equals(staffTeam))
team.get().removePlayer(player);

staffTeam.addPlayer(player);

return;
}
staffTeam.removePlayer(player);

final @NotNull Optional<@NotNull Nation> nation = member.get().nation();
if (nation.isEmpty() && team.isPresent()) {
// no longer in a nation, but in a nation's team?
Expand Down
4 changes: 4 additions & 0 deletions src/main/resources/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,7 @@ relative-time:
past: <t> ago
duration: for <t>
duration-indefinite: <u><b>forever</b></u>

staff-team:
id: staff
name: <hover:show_text:'The shield that guards the realms of men.'><dark_red><b>STAFF</b></dark_red></hover>
Loading