Skip to content

Commit

Permalink
added more placeholders (#821)
Browse files Browse the repository at this point in the history
* added more placeholders

- modified the fetch for online and offline members to run a single stream to create both lists
- added ``island_visitors`` and ``island_visitors_amount`` placeholders to get the list of player names visiting an island and the amount of current visitors to said island
- added ``island_booster`` and ``island_upgrade`` placeholders, to get whether they're active, the level of the enhancement, and the time remaining

* applied supplier

- also removed members from the list of visitors

* Merged enhancement placeholders

- fixed an error in loop logic

* Formatting and nullPlaceholder

---------

Co-authored-by: Peaches_MLG <[email protected]>
  • Loading branch information
sh0inx and PeachesMLG authored May 10, 2024
1 parent 31061ad commit c5a275d
Showing 1 changed file with 83 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,16 @@
import com.iridium.iridiumteams.Rank;
import com.iridium.iridiumteams.TemporaryCache;
import com.iridium.iridiumteams.bank.BankItem;
import com.iridium.iridiumteams.database.TeamEnhancement;
import com.iridium.iridiumteams.enhancements.Enhancement;
import com.iridium.iridiumteams.enhancements.EnhancementType;
import org.bukkit.Bukkit;
import org.bukkit.entity.EntityType;
import org.bukkit.entity.Player;

import java.time.Duration;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.*;
import java.util.stream.Collectors;

public class IslandPlaceholderBuilder implements PlaceholderBuilder<Island> {
Expand All @@ -28,49 +30,79 @@ public class IslandPlaceholderBuilder implements PlaceholderBuilder<Island> {
public List<Placeholder> getPlaceholders(Island island) {
return cache.get(island, Duration.ofSeconds(1), () -> {
List<User> users = IridiumSkyblock.getInstance().getTeamManager().getTeamMembers(island);
List<String> onlineUsers = users.stream()
.filter(u -> u.getPlayer() != null)
.map(User::getName)
.collect(Collectors.toList());
List<String> offlineUsers = users.stream()
.filter(u -> u.getPlayer() == null)
.map(User::getName)
.collect(Collectors.toList());

List<String> onlineUsers = new ArrayList<>(Collections.emptyList());
List<String> offlineUsers = new ArrayList<>(Collections.emptyList());

for (User user : users) {
if (user.getPlayer() != null) {
onlineUsers.add(user.getName());
} else {
offlineUsers.add(user.getName());
}
}

List<Placeholder> placeholderList = new ArrayList<>(Arrays.asList(
new Placeholder("island_name", island.getName()),
new Placeholder("island_owner", IridiumSkyblock.getInstance().getTeamManager().getTeamMembers(island).stream()
new Placeholder("island_name", island::getName),
new Placeholder("island_owner", () -> IridiumSkyblock.getInstance().getTeamManager().getTeamMembers(island).stream()
.filter(user -> user.getUserRank() == Rank.OWNER.getId())
.findFirst()
.map(User::getName)
.orElse(IridiumSkyblock.getInstance().getMessages().nullPlaceholder)),
new Placeholder("island_create", island.getCreateTime().format(DateTimeFormatter.ofPattern(IridiumSkyblock.getInstance().getConfiguration().dateTimeFormat))),
new Placeholder("island_description", island.getDescription()),
new Placeholder("island_value", String.valueOf(IridiumSkyblock.getInstance().getTeamManager().getTeamValue(island))),
new Placeholder("island_level", String.valueOf(island.getLevel())),
new Placeholder("island_experience", String.valueOf(island.getExperience())),
new Placeholder("island_value_rank", String.valueOf(IridiumSkyblock.getInstance().getTop().valueTeamSort.getRank(island, IridiumSkyblock.getInstance()))),
new Placeholder("island_experience_rank", String.valueOf(IridiumSkyblock.getInstance().getTop().experienceTeamSort.getRank(island, IridiumSkyblock.getInstance()))),
new Placeholder("island_members_online", String.join(", ", onlineUsers)),
new Placeholder("island_members_online_count", String.valueOf(onlineUsers.size())),
new Placeholder("island_members_offline", String.join(", ", offlineUsers)),
new Placeholder("island_members_offline_count", String.valueOf(offlineUsers.size())),
new Placeholder("island_members_count", String.valueOf(users.size()))
new Placeholder("island_create", () -> island.getCreateTime().format(DateTimeFormatter.ofPattern(IridiumSkyblock.getInstance().getConfiguration().dateTimeFormat))),
new Placeholder("island_description", island::getDescription),
new Placeholder("island_value", () -> String.valueOf(IridiumSkyblock.getInstance().getTeamManager().getTeamValue(island))),
new Placeholder("island_level", () -> String.valueOf(island.getLevel())),
new Placeholder("island_experience", () -> String.valueOf(island.getExperience())),
new Placeholder("island_value_rank", () -> String.valueOf(IridiumSkyblock.getInstance().getTop().valueTeamSort.getRank(island, IridiumSkyblock.getInstance()))),
new Placeholder("island_experience_rank", () -> String.valueOf(IridiumSkyblock.getInstance().getTop().experienceTeamSort.getRank(island, IridiumSkyblock.getInstance()))),
new Placeholder("island_members_online", () -> String.join(", ", onlineUsers)),
new Placeholder("island_members_online_count", () -> String.valueOf(onlineUsers.size())),
new Placeholder("island_members_offline", () -> String.join(", ", offlineUsers)),
new Placeholder("island_members_offline_count", () -> String.valueOf(offlineUsers.size())),
new Placeholder("island_members_count", () -> String.valueOf(users.size()))
));

List<Player> visitingPlayers = Bukkit.getOnlinePlayers().stream()
.map(Player::getPlayer)
.filter(Objects::nonNull)
.filter(player -> island.isInIsland(player.getLocation()))
.collect(Collectors.toList());

visitingPlayers.removeIf(player -> onlineUsers.contains(player.getName()));

placeholderList.add(new Placeholder("island_visitors", () -> visitingPlayers.stream().map(Player::getName).collect(Collectors.joining(", "))));
placeholderList.add(new Placeholder("island_visitors_amount", () -> String.valueOf(visitingPlayers.size())));

placeholderList.add(new Placeholder("island_visitors", () -> visitingPlayers.stream().map(Player::getName).collect(Collectors.joining(", "))));
placeholderList.add(new Placeholder("island_visitors_amount", () -> String.valueOf(visitingPlayers.size())));

for (Map.Entry<String, Enhancement<?>> enhancement : IridiumSkyblock.getInstance().getEnhancementList().entrySet()) {
if (!enhancement.getValue().enabled) continue;
TeamEnhancement teamEnhancement = IridiumSkyblock.getInstance().getIslandManager().getTeamEnhancement(island, enhancement.getKey());

placeholderList.add(new Placeholder("island_enhancement_" + enhancement.getKey() + "_active", () -> String.valueOf(teamEnhancement.isActive())));
placeholderList.add(new Placeholder("island_enhancement_" + enhancement.getKey() + "_level", () -> String.valueOf(teamEnhancement.getLevel())));
placeholderList.add(new Placeholder("island_enhancement_" + enhancement.getKey() + "_time_hours", () -> String.valueOf(Math.max((int) (teamEnhancement.getRemainingTime() % 60), 0))));
placeholderList.add(new Placeholder("island_enhancement_" + enhancement.getKey() + "_time_minutes", () -> String.valueOf(Math.max((int) ((teamEnhancement.getRemainingTime() % 3600) / 60), 0))));
placeholderList.add(new Placeholder("island_enhancement_" + enhancement.getKey() + "_time_seconds", () -> String.valueOf(Math.max((int) (teamEnhancement.getRemainingTime() / 3600), 0))));
}

for (BankItem bankItem : IridiumSkyblock.getInstance().getBankItemList()) {
placeholderList.add(new Placeholder("island_bank_" + bankItem.getName().toLowerCase(), String.valueOf(IridiumSkyblock.getInstance().getTeamManager().getTeamBank(island, bankItem.getName()).getNumber())));
placeholderList.add(new Placeholder("island_bank_" + bankItem.getName().toLowerCase(), () -> String.valueOf(IridiumSkyblock.getInstance().getTeamManager().getTeamBank(island, bankItem.getName()).getNumber())));
}
for (XMaterial xMaterial : XMaterial.values()) {
placeholderList.add(new Placeholder("island_" + xMaterial.name().toLowerCase() + "_amount", String.valueOf(IridiumSkyblock.getInstance().getTeamManager().getTeamBlock(island, xMaterial).getAmount())));
placeholderList.add(new Placeholder("island_" + xMaterial.name().toLowerCase() + "_amount", () -> String.valueOf(IridiumSkyblock.getInstance().getTeamManager().getTeamBlock(island, xMaterial).getAmount())));
}
for (EntityType entityType : EntityType.values()) {
placeholderList.add(new Placeholder("island_" + entityType.name().toLowerCase() + "_amount", String.valueOf(IridiumSkyblock.getInstance().getTeamManager().getTeamSpawners(island, entityType).getAmount())));
placeholderList.add(new Placeholder("island_" + entityType.name().toLowerCase() + "_amount", () -> String.valueOf(IridiumSkyblock.getInstance().getTeamManager().getTeamSpawners(island, entityType).getAmount())));
}
return placeholderList;
});
}

private List<Placeholder> initializeDefaultPlaceholders() {

List<Placeholder> placeholderList = new ArrayList<>(Arrays.asList(
new Placeholder("island_name", IridiumSkyblock.getInstance().getMessages().nullPlaceholder),
new Placeholder("island_owner", IridiumSkyblock.getInstance().getMessages().nullPlaceholder),
Expand All @@ -85,8 +117,29 @@ private List<Placeholder> initializeDefaultPlaceholders() {
new Placeholder("island_members_online_count", IridiumSkyblock.getInstance().getMessages().nullPlaceholder),
new Placeholder("island_members_offline", IridiumSkyblock.getInstance().getMessages().nullPlaceholder),
new Placeholder("island_members_offline_count", IridiumSkyblock.getInstance().getMessages().nullPlaceholder),
new Placeholder("island_members_count", IridiumSkyblock.getInstance().getMessages().nullPlaceholder)
new Placeholder("island_members_count", IridiumSkyblock.getInstance().getMessages().nullPlaceholder),
new Placeholder("island_visitors", IridiumSkyblock.getInstance().getMessages().nullPlaceholder),
new Placeholder("island_visitors_amount", IridiumSkyblock.getInstance().getMessages().nullPlaceholder)
));

for (Map.Entry<String, Enhancement<?>> enhancement : IridiumSkyblock.getInstance().getEnhancementList().entrySet()) {
if (enhancement.getValue().type == EnhancementType.BOOSTER) {
placeholderList.add(new Placeholder("island_booster_" + enhancement.getKey() + "_active", IridiumSkyblock.getInstance().getMessages().nullPlaceholder));
placeholderList.add(new Placeholder("island_booster_" + enhancement.getKey() + "_level", IridiumSkyblock.getInstance().getMessages().nullPlaceholder));
placeholderList.add(new Placeholder("island_booster_" + enhancement.getKey() + "_time_hours", IridiumSkyblock.getInstance().getMessages().nullPlaceholder));
placeholderList.add(new Placeholder("island_booster_" + enhancement.getKey() + "_time_minutes", IridiumSkyblock.getInstance().getMessages().nullPlaceholder));
placeholderList.add(new Placeholder("island_booster_" + enhancement.getKey() + "_time_seconds", IridiumSkyblock.getInstance().getMessages().nullPlaceholder));
}

if (enhancement.getValue().type == EnhancementType.UPGRADE) {
placeholderList.add(new Placeholder("island_upgrade_" + enhancement.getKey() + "_active", IridiumSkyblock.getInstance().getMessages().nullPlaceholder));
placeholderList.add(new Placeholder("island_upgrade_" + enhancement.getKey() + "_level", IridiumSkyblock.getInstance().getMessages().nullPlaceholder));
placeholderList.add(new Placeholder("island_upgrade_" + enhancement.getKey() + "_time_hours", IridiumSkyblock.getInstance().getMessages().nullPlaceholder));
placeholderList.add(new Placeholder("island_upgrade_" + enhancement.getKey() + "_time_minutes", IridiumSkyblock.getInstance().getMessages().nullPlaceholder));
placeholderList.add(new Placeholder("island_upgrade_" + enhancement.getKey() + "_time_seconds", IridiumSkyblock.getInstance().getMessages().nullPlaceholder));
}
}

for (BankItem bankItem : IridiumSkyblock.getInstance().getBankItemList()) {
placeholderList.add(new Placeholder("island_bank_" + bankItem.getName().toLowerCase(), IridiumSkyblock.getInstance().getMessages().nullPlaceholder));
}
Expand Down

0 comments on commit c5a275d

Please sign in to comment.