Skip to content

Commit

Permalink
Placeholder Cache
Browse files Browse the repository at this point in the history
  • Loading branch information
PeachesMLG committed Feb 23, 2024
1 parent 0059d4c commit 92984d1
Show file tree
Hide file tree
Showing 2 changed files with 64 additions and 55 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,11 @@
import com.iridium.iridiumfactions.database.User;
import com.iridium.iridiumteams.PlaceholderBuilder;
import com.iridium.iridiumteams.Rank;
import com.iridium.iridiumteams.TemporaryCache;
import com.iridium.iridiumteams.bank.BankItem;
import org.bukkit.entity.EntityType;

import java.time.Duration;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Arrays;
Expand All @@ -18,54 +20,60 @@
import java.util.stream.Collectors;

public class FactionPlaceholderBuilder implements PlaceholderBuilder<Faction> {

private final TemporaryCache<Faction, List<Placeholder>> cache = new TemporaryCache<>();
private final List<Placeholder> defaultPlaceholders = initializeDefaultPlaceholders();

@Override
public List<Placeholder> getPlaceholders(Faction faction) {
List<User> users = IridiumFactions.getInstance().getTeamManager().getTeamMembers(faction);
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());
return cache.get(faction, Duration.ofSeconds(1), () -> {
List<User> users = IridiumFactions.getInstance().getTeamManager().getTeamMembers(faction);
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<Placeholder> placeholderList = new ArrayList<>(Arrays.asList(
new Placeholder("faction_name", faction.getName()),
new Placeholder("faction_owner", IridiumFactions.getInstance().getTeamManager().getTeamMembers(faction).stream()
.filter(user -> user.getUserRank() == Rank.OWNER.getId())
.findFirst()
.map(User::getName)
.orElse("N/A")),
new Placeholder("faction_create", faction.getCreateTime().format(DateTimeFormatter.ofPattern(IridiumFactions.getInstance().getConfiguration().dateTimeFormat))),
new Placeholder("faction_description", faction.getDescription()),
new Placeholder("faction_value", String.valueOf(IridiumFactions.getInstance().getTeamManager().getTeamValue(faction))),
new Placeholder("faction_level", String.valueOf(faction.getLevel())),
new Placeholder("faction_experience", String.valueOf(faction.getExperience())),
new Placeholder("faction_value_rank", String.valueOf(IridiumFactions.getInstance().getTop().valueTeamSort.getRank(faction, IridiumFactions.getInstance()))),
new Placeholder("faction_experience_rank", String.valueOf(IridiumFactions.getInstance().getTop().experienceTeamSort.getRank(faction, IridiumFactions.getInstance()))),
new Placeholder("faction_members_online", String.join(", ", onlineUsers)),
new Placeholder("faction_members_online_count", String.valueOf(onlineUsers.size())),
new Placeholder("faction_members_offline", String.join(", ", offlineUsers)),
new Placeholder("faction_members_offline_count", String.valueOf(offlineUsers.size())),
new Placeholder("faction_members_count", String.valueOf(users.size())),
new Placeholder("faction_total_power", String.valueOf(faction.getTotalPower())),
new Placeholder("faction_remaining_power", String.valueOf(faction.getRemainingPower())),
new Placeholder("faction_land", String.valueOf(IridiumFactions.getInstance().getFactionManager().getFactionClaims(faction).size()))
));
for (BankItem bankItem : IridiumFactions.getInstance().getBankItemList()) {
placeholderList.add(new Placeholder("faction_bank_" + bankItem.getName().toLowerCase(), String.valueOf(IridiumFactions.getInstance().getTeamManager().getTeamBank(faction, bankItem.getName()).getNumber())));
}
for (XMaterial xMaterial : XMaterial.values()) {
placeholderList.add(new Placeholder("faction_" + xMaterial.name().toLowerCase() + "_amount", String.valueOf(IridiumFactions.getInstance().getTeamManager().getTeamBlock(faction, xMaterial).getAmount())));
}
for (EntityType entityType : EntityType.values()) {
placeholderList.add(new Placeholder("faction_" + entityType.name().toLowerCase() + "_amount", String.valueOf(IridiumFactions.getInstance().getTeamManager().getTeamSpawners(faction, entityType).getAmount())));
}
return placeholderList;
List<Placeholder> placeholderList = new ArrayList<>(Arrays.asList(
new Placeholder("faction_name", faction.getName()),
new Placeholder("faction_owner", IridiumFactions.getInstance().getTeamManager().getTeamMembers(faction).stream()
.filter(user -> user.getUserRank() == Rank.OWNER.getId())
.findFirst()
.map(User::getName)
.orElse("N/A")),
new Placeholder("faction_create", faction.getCreateTime().format(DateTimeFormatter.ofPattern(IridiumFactions.getInstance().getConfiguration().dateTimeFormat))),
new Placeholder("faction_description", faction.getDescription()),
new Placeholder("faction_value", String.valueOf(IridiumFactions.getInstance().getTeamManager().getTeamValue(faction))),
new Placeholder("faction_level", String.valueOf(faction.getLevel())),
new Placeholder("faction_experience", String.valueOf(faction.getExperience())),
new Placeholder("faction_value_rank", String.valueOf(IridiumFactions.getInstance().getTop().valueTeamSort.getRank(faction, IridiumFactions.getInstance()))),
new Placeholder("faction_experience_rank", String.valueOf(IridiumFactions.getInstance().getTop().experienceTeamSort.getRank(faction, IridiumFactions.getInstance()))),
new Placeholder("faction_members_online", String.join(", ", onlineUsers)),
new Placeholder("faction_members_online_count", String.valueOf(onlineUsers.size())),
new Placeholder("faction_members_offline", String.join(", ", offlineUsers)),
new Placeholder("faction_members_offline_count", String.valueOf(offlineUsers.size())),
new Placeholder("faction_members_count", String.valueOf(users.size())),
new Placeholder("faction_total_power", String.valueOf(faction.getTotalPower())),
new Placeholder("faction_remaining_power", String.valueOf(faction.getRemainingPower())),
new Placeholder("faction_land", String.valueOf(IridiumFactions.getInstance().getFactionManager().getFactionClaims(faction).size()))
));
for (BankItem bankItem : IridiumFactions.getInstance().getBankItemList()) {
placeholderList.add(new Placeholder("faction_bank_" + bankItem.getName().toLowerCase(), String.valueOf(IridiumFactions.getInstance().getTeamManager().getTeamBank(faction, bankItem.getName()).getNumber())));
}
for (XMaterial xMaterial : XMaterial.values()) {
placeholderList.add(new Placeholder("faction_" + xMaterial.name().toLowerCase() + "_amount", String.valueOf(IridiumFactions.getInstance().getTeamManager().getTeamBlock(faction, xMaterial).getAmount())));
}
for (EntityType entityType : EntityType.values()) {
placeholderList.add(new Placeholder("faction_" + entityType.name().toLowerCase() + "_amount", String.valueOf(IridiumFactions.getInstance().getTeamManager().getTeamSpawners(faction, entityType).getAmount())));
}
return placeholderList;
});
}

public List<Placeholder> getDefaultPlaceholders() {
public List<Placeholder> initializeDefaultPlaceholders() {
List<Placeholder> placeholderList = new ArrayList<>(Arrays.asList(
new Placeholder("faction_name", "N/A"),
new Placeholder("faction_owner", "N/A"),
Expand Down Expand Up @@ -99,6 +107,6 @@ public List<Placeholder> getDefaultPlaceholders() {

@Override
public List<Placeholder> getPlaceholders(Optional<Faction> optional) {
return optional.isPresent() ? getPlaceholders(optional.get()) : getDefaultPlaceholders();
return optional.isPresent() ? getPlaceholders(optional.get()) : defaultPlaceholders;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,33 +4,34 @@
import com.iridium.iridiumfactions.IridiumFactions;
import com.iridium.iridiumfactions.database.User;
import com.iridium.iridiumteams.PlaceholderBuilder;
import com.iridium.iridiumteams.TemporaryCache;
import com.iridium.iridiumteams.UserRank;

import java.time.Duration;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;

public class UserPlaceholderBuilder implements PlaceholderBuilder<User> {
private final TemporaryCache<User, List<Placeholder>> cache = new TemporaryCache<>();
private final List<Placeholder> defaultPlaceholders = Arrays.asList(
new Placeholder("player_rank", "N/A"),
new Placeholder("player_name", "N/A"),
new Placeholder("player_join", "N/A")
);

@Override
public List<Placeholder> getPlaceholders(User user) {
return Arrays.asList(
return cache.get(user, Duration.ofSeconds(1), () -> Arrays.asList(
new Placeholder("player_rank", IridiumFactions.getInstance().getUserRanks().getOrDefault(user.getUserRank(), new UserRank("N/A", null)).name),
new Placeholder("player_name", user.getName()),
new Placeholder("player_join", user.getJoinTime().format(DateTimeFormatter.ofPattern(IridiumFactions.getInstance().getConfiguration().dateTimeFormat)))
);
}

public List<Placeholder> getDefaultPlaceholders() {
return Arrays.asList(
new Placeholder("player_rank", "N/A"),
new Placeholder("player_name", "N/A"),
new Placeholder("player_join", "N/A")
);
));
}

@Override
public List<Placeholder> getPlaceholders(Optional<User> optional) {
return optional.isPresent() ? getPlaceholders(optional.get()) : getDefaultPlaceholders();
return optional.isPresent() ? getPlaceholders(optional.get()) : defaultPlaceholders;
}
}

0 comments on commit 92984d1

Please sign in to comment.