Skip to content

Commit

Permalink
Added placeholders and fixed bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
tastybento committed Feb 25, 2023
1 parent 04faa7f commit 9774a59
Show file tree
Hide file tree
Showing 5 changed files with 111 additions and 23 deletions.
10 changes: 10 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,13 @@ permissions:
default: true
```

## Placeholders

```
%aoneblock_island_player_name_top_RANK% where RANK is 1 to 10 - Island owner's name
%aoneblock_island_member_names_top_RANK% where RANK is 1 to 10 - Name of island team members
%aoneblock_island_phase_name_top_RANK% where RANK is 1 to 10 - Name of the phase they have reached
%aoneblock_island_phase_number_top_RANK% where RANK is 1 to 10 - Phase number, e.g. Plains is 1, Underground is 2, etc.
%aoneblock_island_count_top_RANK% where RANK is 1 to 10 - Block Count of magic blocks mined this round
%aoneblock_island_lifetime_top_RANK% where RANK is 1 to 10 - Lifetime count of magic blocks mined
```
85 changes: 85 additions & 0 deletions src/main/java/world/bentobox/topblock/PlaceholderManager.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
package world.bentobox.topblock;

import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.UUID;
import java.util.stream.Collectors;

import org.eclipse.jdt.annotation.NonNull;

import world.bentobox.bentobox.BentoBox;
import world.bentobox.bentobox.api.addons.GameModeAddon;
import world.bentobox.bentobox.managers.PlaceholdersManager;
import world.bentobox.bentobox.managers.RanksManager;
import world.bentobox.topblock.TopBlockManager.TopTenData;

/**
* Handles TopBlock placeholders
* @author tastybento
*
*/
public class PlaceholderManager {

private final TopBlock addon;
private final BentoBox plugin;

public PlaceholderManager(TopBlock addon) {
this.addon = addon;
this.plugin = addon.getPlugin();

}

protected void registerPlaceholders(GameModeAddon gm) {
if (plugin.getPlaceholdersManager() == null) return;
PlaceholdersManager bpm = plugin.getPlaceholdersManager();
@NonNull List<TopTenData> rList = addon.getManager().getTopTen(TopBlock.TEN);
// Register Top Ten Placeholders
for (int i = 0; i < TopBlock.TEN; i++) {
TopTenData r = i < rList.size() ? rList.get(i) : null;
int rank = i + 1;
// Name of island owner
bpm.registerPlaceholder(gm, "island_player_name_top_" + rank, u -> r == null ? "" : getPlayerName(r));
// Name of island team members
bpm.registerPlaceholder(gm, "island_member_names_top_" + rank, u -> r == null ? "" : getMemberNames(r));
// Name of the phase they have reached
bpm.registerPlaceholder(gm, "island_phase_name_top_" + rank, u -> r == null ? "" : r.phaseName());
// Phase Number
bpm.registerPlaceholder(gm, "island_phase_number_top_" + rank, u -> r == null ? "" : getPhaseNumber(r));
// Block Count
bpm.registerPlaceholder(gm, "island_count_top_" + rank, u -> r == null ? "" : String.valueOf(r.blockNumber()));
// Lifetime count
bpm.registerPlaceholder(gm, "island_lifetime_top_" + rank, u -> r == null ? "" : String.valueOf(r.lifetime()));
}
}

/**
* Gets a comma separated string of island member names
* @param r Top ten entry
* @return comma separated string of island member names
*/
String getMemberNames(TopTenData r) {
// Sort members by rank
return r.island().getMembers().entrySet().stream()
.filter(e -> e.getValue() >= RanksManager.MEMBER_RANK)
.sorted(Collections.reverseOrder(Map.Entry.comparingByValue()))
.map(Map.Entry::getKey)
.map(addon.getPlayers()::getName)
.collect(Collectors.joining(","));
}

private String getPlayerName(TopTenData r) {
UUID owner = r.island().getOwner();
if (owner == null) return "";
return Objects.requireNonNull(addon.getPlayers().getName(owner), "");
}

private String getPhaseNumber(TopTenData r) {
long c = addon.getaOneBlock().getOneBlockManager().getBlockProbs().entrySet().stream()
.filter(en -> en.getKey() < r.blockNumber()).count();
return String.valueOf(c);
}


}
9 changes: 4 additions & 5 deletions src/main/java/world/bentobox/topblock/TopBlock.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package world.bentobox.topblock;

import world.bentobox.aoneblock.AOneBlock;
import world.bentobox.bentobox.api.addons.Addon;
import world.bentobox.bentobox.api.addons.GameModeAddon;
import world.bentobox.bentobox.api.configuration.Config;
Expand Down Expand Up @@ -50,6 +51,7 @@ private boolean loadSettings() {
public void onEnable() {
// Start Manager
manager = new TopBlockManager(this);
this.registerListener(manager);

// Find AOneBlock
getPlugin().getAddonsManager().getAddonByName("aoneblock")
Expand All @@ -58,16 +60,13 @@ public void onEnable() {
.map(GameModeAddon.class::cast).ifPresentOrElse(gm -> {
log("TopBlock hooking into AOneBlock");
registerCommands(gm);
//registerPlaceholders(gm);
aOneBlock = gm;
}, () -> {
logError("Could not hook into AOneBlock. Is it loaded?");
this.setState(State.DISABLED);
});
}



private void registerCommands(GameModeAddon gm) {
gm.getPlayerCommand().ifPresent(playerCmd -> {
new TopBlockCommand(this, playerCmd);
Expand Down Expand Up @@ -104,8 +103,8 @@ public void onDisable() {

}

public Addon getaOneBlock() {
return aOneBlock;
public AOneBlock getaOneBlock() {
return (AOneBlock) aOneBlock;
}


Expand Down
22 changes: 9 additions & 13 deletions src/main/java/world/bentobox/topblock/TopBlockManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@

import world.bentobox.aoneblock.AOneBlock;
import world.bentobox.bentobox.api.events.BentoBoxReadyEvent;
import world.bentobox.bentobox.database.objects.Island;


public class TopBlockManager implements Listener {
Expand All @@ -39,7 +40,7 @@ public class TopBlockManager implements Listener {
}
private final TopBlock addon;

public record TopTenData(String islandId, int blockNumber, long lifetime, String phaseName) implements Comparable<TopTenData> {
public record TopTenData(Island island, int blockNumber, long lifetime, String phaseName) implements Comparable<TopTenData> {

@Override
public int compareTo(TopTenData o) {
Expand All @@ -62,13 +63,17 @@ public TopBlockManager(TopBlock addon) {
private void startMonitoring(BentoBoxReadyEvent e) {
// Load the top ten from AOneBlock every so often
Bukkit.getScheduler().runTaskTimer(addon.getPlugin(), () -> getOneBlockData(), 0, addon.getSettings().getRefreshTime() * 20 * 60);
// Register placeholders after everything is loaded
Bukkit.getScheduler().runTaskLater(addon.getPlugin(), () -> new PlaceholderManager(addon).registerPlaceholders(addon.getaOneBlock()), 10L);
}

public void getOneBlockData() {
void getOneBlockData() {
AOneBlock ob = (AOneBlock) addon.getaOneBlock();
topTen.clear();
ob.getBlockListener().getAllIslands().stream().filter(i -> i.getLifetime() > 0).forEach(i -> {
topTen.add(new TopTenData(i.getUniqueId(), i.getBlockNumber(), i.getLifetime(), i.getPhaseName()));
// Get player island.
Island island = addon.getIslands().getIslandById(i.getUniqueId()).orElse(null);
topTen.add(new TopTenData(island, i.getBlockNumber(), i.getLifetime(), i.getPhaseName()));
});
}

Expand Down Expand Up @@ -133,21 +138,12 @@ boolean hasTopTenPerm(@NonNull World world, @NonNull UUID targetPlayer) {
return Bukkit.getPlayer(targetPlayer) == null || Bukkit.getPlayer(targetPlayer).hasPermission(permPrefix + INTOPTEN);
}

/**
* Builds the top ten
*/
public void loadTopTen() {
// TODO: Get from AOneBlock
}

/**
* Removes island from top ten
* @param uniqueId - island UUID
*/
public void deleteIsland(@NonNull String uniqueId) {
topTen.removeIf(en -> en.islandId.equals(uniqueId));


topTen.removeIf(en -> en.island().getUniqueId().equals(uniqueId));
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,7 @@ private PanelItem createPlayerButton(ItemTemplateRecord template, TemplatedPanel
private PanelItem createIslandIcon(ItemTemplateRecord template, TopTenData islandTopRecord, int index)
{
// Get player island.
Island island = addon.getIslands().getIslandById(islandTopRecord.islandId()).orElse(null);
Island island = islandTopRecord.island();

if (island == null)
{
Expand Down Expand Up @@ -283,8 +283,7 @@ private void populateIslandTitle(PanelItemBuilder builder,

if (island.getName() == null || island.getName().isEmpty())
{
nameText = this.user.getTranslation(reference + "owners-island",
"[player]",
nameText = this.user.getTranslation(reference + "owners-island", "[player]",
island.getOwner() == null ?
this.user.getTranslation(reference + "unknown") :
this.addon.getPlayers().getName(island.getOwner()));
Expand Down Expand Up @@ -379,8 +378,7 @@ private void populateIslandDescription(PanelItemBuilder builder,
final String reference = "topblock.gui.buttons.island.";

// Get Owner Name
String ownerText = this.user.getTranslation(reference + "owner",
"[player]",
String ownerText = this.user.getTranslation(reference + "owner", "[player]",
island.getOwner() == null ?
this.user.getTranslation(reference + "unknown") :
this.addon.getPlayers().getName(island.getOwner()));
Expand Down

0 comments on commit 9774a59

Please sign in to comment.